Showing
26 changed files
with
1232 additions
and
0 deletions
.editorconfig
0 → 100644
1 | +# EditorConfig helps developers define and maintain consistent | ||
2 | +# coding styles between different editors and IDEs | ||
3 | +# editorconfig.org | ||
4 | + | ||
5 | +root = true | ||
6 | + | ||
7 | + | ||
8 | +[*] | ||
9 | + | ||
10 | +# Change these settings to your own preference | ||
11 | +indent_style = space | ||
12 | +indent_size = 2 | ||
13 | + | ||
14 | +# We recommend you to keep these unchanged | ||
15 | +end_of_line = lf | ||
16 | +charset = utf-8 | ||
17 | +trim_trailing_whitespace = true | ||
18 | +insert_final_newline = true | ||
19 | + | ||
20 | +[*.md] | ||
21 | +trim_trailing_whitespace = false |
.gitattributes
0 → 100644
1 | +* text=auto |
.jscsrc
0 → 100644
.jshintrc
0 → 100644
.yo-rc.json
0 → 100644
1 | +{ | ||
2 | + "generator-karma": { | ||
3 | + "base-path": "../", | ||
4 | + "frameworks": "jasmine", | ||
5 | + "browsers": "PhantomJS", | ||
6 | + "app-files": "app/scripts/**/*.js", | ||
7 | + "files-comments": "bower:js,endbower", | ||
8 | + "bower-components-path": "bower_components", | ||
9 | + "test-files": "test/mock/**/*.js,test/spec/**/*.js" | ||
10 | + } | ||
11 | +} |
Gruntfile.js
0 → 100644
1 | +// Generated on 2016-03-28 using generator-angular 0.15.1 | ||
2 | +'use strict'; | ||
3 | + | ||
4 | +// # Globbing | ||
5 | +// for performance reasons we're only matching one level down: | ||
6 | +// 'test/spec/{,*/}*.js' | ||
7 | +// use this if you want to recursively match all subfolders: | ||
8 | +// 'test/spec/**/*.js' | ||
9 | + | ||
10 | +module.exports = function (grunt) { | ||
11 | + | ||
12 | + // Time how long tasks take. Can help when optimizing build times | ||
13 | + require('time-grunt')(grunt); | ||
14 | + | ||
15 | + // Automatically load required Grunt tasks | ||
16 | + require('jit-grunt')(grunt, { | ||
17 | + useminPrepare: 'grunt-usemin', | ||
18 | + ngtemplates: 'grunt-angular-templates', | ||
19 | + cdnify: 'grunt-google-cdn' | ||
20 | + }); | ||
21 | + | ||
22 | + // Configurable paths for the application | ||
23 | + var appConfig = { | ||
24 | + app: require('./bower.json').appPath || 'app', | ||
25 | + dist: 'dist' | ||
26 | + }; | ||
27 | + | ||
28 | + // Define the configuration for all the tasks | ||
29 | + grunt.initConfig({ | ||
30 | + | ||
31 | + // Project settings | ||
32 | + yeoman: appConfig, | ||
33 | + | ||
34 | + // Watches files for changes and runs tasks based on the changed files | ||
35 | + watch: { | ||
36 | + bower: { | ||
37 | + files: ['bower.json'], | ||
38 | + tasks: ['wiredep'] | ||
39 | + }, | ||
40 | + js: { | ||
41 | + files: ['<%= yeoman.app %>/scripts/{,*/}*.js'], | ||
42 | + tasks: ['newer:jshint:all', 'newer:jscs:all'], | ||
43 | + options: { | ||
44 | + livereload: '<%= connect.options.livereload %>' | ||
45 | + } | ||
46 | + }, | ||
47 | + jsTest: { | ||
48 | + files: ['test/spec/{,*/}*.js'], | ||
49 | + tasks: ['newer:jshint:test', 'newer:jscs:test', 'karma'] | ||
50 | + }, | ||
51 | + compass: { | ||
52 | + files: ['<%= yeoman.app %>/styles/{,*/}*.{scss,sass}'], | ||
53 | + tasks: ['compass:server', 'postcss:server'] | ||
54 | + }, | ||
55 | + gruntfile: { | ||
56 | + files: ['Gruntfile.js'] | ||
57 | + }, | ||
58 | + livereload: { | ||
59 | + options: { | ||
60 | + livereload: '<%= connect.options.livereload %>' | ||
61 | + }, | ||
62 | + files: [ | ||
63 | + '<%= yeoman.app %>/{,*/}*.html', | ||
64 | + '.tmp/styles/{,*/}*.css', | ||
65 | + '<%= yeoman.app %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}' | ||
66 | + ] | ||
67 | + } | ||
68 | + }, | ||
69 | + | ||
70 | + // The actual grunt server settings | ||
71 | + connect: { | ||
72 | + options: { | ||
73 | + port: 9000, | ||
74 | + // Change this to '0.0.0.0' to access the server from outside. | ||
75 | + hostname: 'localhost', | ||
76 | + livereload: 35729 | ||
77 | + }, | ||
78 | + livereload: { | ||
79 | + options: { | ||
80 | + open: true, | ||
81 | + middleware: function (connect) { | ||
82 | + return [ | ||
83 | + connect.static('.tmp'), | ||
84 | + connect().use( | ||
85 | + '/bower_components', | ||
86 | + connect.static('./bower_components') | ||
87 | + ), | ||
88 | + connect().use( | ||
89 | + '/app/styles', | ||
90 | + connect.static('./app/styles') | ||
91 | + ), | ||
92 | + connect.static(appConfig.app) | ||
93 | + ]; | ||
94 | + } | ||
95 | + } | ||
96 | + }, | ||
97 | + test: { | ||
98 | + options: { | ||
99 | + port: 9001, | ||
100 | + middleware: function (connect) { | ||
101 | + return [ | ||
102 | + connect.static('.tmp'), | ||
103 | + connect.static('test'), | ||
104 | + connect().use( | ||
105 | + '/bower_components', | ||
106 | + connect.static('./bower_components') | ||
107 | + ), | ||
108 | + connect.static(appConfig.app) | ||
109 | + ]; | ||
110 | + } | ||
111 | + } | ||
112 | + }, | ||
113 | + dist: { | ||
114 | + options: { | ||
115 | + open: true, | ||
116 | + base: '<%= yeoman.dist %>' | ||
117 | + } | ||
118 | + } | ||
119 | + }, | ||
120 | + | ||
121 | + // Make sure there are no obvious mistakes | ||
122 | + jshint: { | ||
123 | + options: { | ||
124 | + jshintrc: '.jshintrc', | ||
125 | + reporter: require('jshint-stylish') | ||
126 | + }, | ||
127 | + all: { | ||
128 | + src: [ | ||
129 | + 'Gruntfile.js', | ||
130 | + '<%= yeoman.app %>/scripts/{,*/}*.js' | ||
131 | + ] | ||
132 | + }, | ||
133 | + test: { | ||
134 | + options: { | ||
135 | + jshintrc: 'test/.jshintrc' | ||
136 | + }, | ||
137 | + src: ['test/spec/{,*/}*.js'] | ||
138 | + } | ||
139 | + }, | ||
140 | + | ||
141 | + // Make sure code styles are up to par | ||
142 | + jscs: { | ||
143 | + options: { | ||
144 | + config: '.jscsrc', | ||
145 | + verbose: true | ||
146 | + }, | ||
147 | + all: { | ||
148 | + src: [ | ||
149 | + 'Gruntfile.js', | ||
150 | + '<%= yeoman.app %>/scripts/{,*/}*.js' | ||
151 | + ] | ||
152 | + }, | ||
153 | + test: { | ||
154 | + src: ['test/spec/{,*/}*.js'] | ||
155 | + } | ||
156 | + }, | ||
157 | + | ||
158 | + // Empties folders to start fresh | ||
159 | + clean: { | ||
160 | + dist: { | ||
161 | + files: [{ | ||
162 | + dot: true, | ||
163 | + src: [ | ||
164 | + '.tmp', | ||
165 | + '<%= yeoman.dist %>/{,*/}*', | ||
166 | + '!<%= yeoman.dist %>/.git{,*/}*' | ||
167 | + ] | ||
168 | + }] | ||
169 | + }, | ||
170 | + server: '.tmp' | ||
171 | + }, | ||
172 | + | ||
173 | + // Add vendor prefixed styles | ||
174 | + postcss: { | ||
175 | + options: { | ||
176 | + processors: [ | ||
177 | + require('autoprefixer-core')({browsers: ['last 1 version']}) | ||
178 | + ] | ||
179 | + }, | ||
180 | + server: { | ||
181 | + options: { | ||
182 | + map: true | ||
183 | + }, | ||
184 | + files: [{ | ||
185 | + expand: true, | ||
186 | + cwd: '.tmp/styles/', | ||
187 | + src: '{,*/}*.css', | ||
188 | + dest: '.tmp/styles/' | ||
189 | + }] | ||
190 | + }, | ||
191 | + dist: { | ||
192 | + files: [{ | ||
193 | + expand: true, | ||
194 | + cwd: '.tmp/styles/', | ||
195 | + src: '{,*/}*.css', | ||
196 | + dest: '.tmp/styles/' | ||
197 | + }] | ||
198 | + } | ||
199 | + }, | ||
200 | + | ||
201 | + // Automatically inject Bower components into the app | ||
202 | + wiredep: { | ||
203 | + app: { | ||
204 | + src: ['<%= yeoman.app %>/index.html'], | ||
205 | + ignorePath: /\.\.\// | ||
206 | + }, | ||
207 | + test: { | ||
208 | + devDependencies: true, | ||
209 | + src: '<%= karma.unit.configFile %>', | ||
210 | + ignorePath: /\.\.\//, | ||
211 | + fileTypes:{ | ||
212 | + js: { | ||
213 | + block: /(([\s\t]*)\/{2}\s*?bower:\s*?(\S*))(\n|\r|.)*?(\/{2}\s*endbower)/gi, | ||
214 | + detect: { | ||
215 | + js: /'(.*\.js)'/gi | ||
216 | + }, | ||
217 | + replace: { | ||
218 | + js: '\'{{filePath}}\',' | ||
219 | + } | ||
220 | + } | ||
221 | + } | ||
222 | + }, | ||
223 | + sass: { | ||
224 | + src: ['<%= yeoman.app %>/styles/{,*/}*.{scss,sass}'], | ||
225 | + ignorePath: /(\.\.\/){1,2}bower_components\// | ||
226 | + } | ||
227 | + }, | ||
228 | + | ||
229 | + // Compiles Sass to CSS and generates necessary files if requested | ||
230 | + compass: { | ||
231 | + options: { | ||
232 | + sassDir: '<%= yeoman.app %>/styles', | ||
233 | + cssDir: '.tmp/styles', | ||
234 | + generatedImagesDir: '.tmp/images/generated', | ||
235 | + imagesDir: '<%= yeoman.app %>/images', | ||
236 | + javascriptsDir: '<%= yeoman.app %>/scripts', | ||
237 | + fontsDir: '<%= yeoman.app %>/styles/fonts', | ||
238 | + importPath: './bower_components', | ||
239 | + httpImagesPath: '/images', | ||
240 | + httpGeneratedImagesPath: '/images/generated', | ||
241 | + httpFontsPath: '/styles/fonts', | ||
242 | + relativeAssets: false, | ||
243 | + assetCacheBuster: false, | ||
244 | + raw: 'Sass::Script::Number.precision = 10\n' | ||
245 | + }, | ||
246 | + dist: { | ||
247 | + options: { | ||
248 | + generatedImagesDir: '<%= yeoman.dist %>/images/generated' | ||
249 | + } | ||
250 | + }, | ||
251 | + server: { | ||
252 | + options: { | ||
253 | + sourcemap: true | ||
254 | + } | ||
255 | + } | ||
256 | + }, | ||
257 | + | ||
258 | + // Renames files for browser caching purposes | ||
259 | + filerev: { | ||
260 | + dist: { | ||
261 | + src: [ | ||
262 | + '<%= yeoman.dist %>/scripts/{,*/}*.js', | ||
263 | + '<%= yeoman.dist %>/styles/{,*/}*.css', | ||
264 | + '<%= yeoman.dist %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}', | ||
265 | + '<%= yeoman.dist %>/styles/fonts/*' | ||
266 | + ] | ||
267 | + } | ||
268 | + }, | ||
269 | + | ||
270 | + // Reads HTML for usemin blocks to enable smart builds that automatically | ||
271 | + // concat, minify and revision files. Creates configurations in memory so | ||
272 | + // additional tasks can operate on them | ||
273 | + useminPrepare: { | ||
274 | + html: '<%= yeoman.app %>/index.html', | ||
275 | + options: { | ||
276 | + dest: '<%= yeoman.dist %>', | ||
277 | + flow: { | ||
278 | + html: { | ||
279 | + steps: { | ||
280 | + js: ['concat', 'uglifyjs'], | ||
281 | + css: ['cssmin'] | ||
282 | + }, | ||
283 | + post: {} | ||
284 | + } | ||
285 | + } | ||
286 | + } | ||
287 | + }, | ||
288 | + | ||
289 | + // Performs rewrites based on filerev and the useminPrepare configuration | ||
290 | + usemin: { | ||
291 | + html: ['<%= yeoman.dist %>/{,*/}*.html'], | ||
292 | + css: ['<%= yeoman.dist %>/styles/{,*/}*.css'], | ||
293 | + js: ['<%= yeoman.dist %>/scripts/{,*/}*.js'], | ||
294 | + options: { | ||
295 | + assetsDirs: [ | ||
296 | + '<%= yeoman.dist %>', | ||
297 | + '<%= yeoman.dist %>/images', | ||
298 | + '<%= yeoman.dist %>/styles' | ||
299 | + ], | ||
300 | + patterns: { | ||
301 | + js: [[/(images\/[^''""]*\.(png|jpg|jpeg|gif|webp|svg))/g, 'Replacing references to images']] | ||
302 | + } | ||
303 | + } | ||
304 | + }, | ||
305 | + | ||
306 | + // The following *-min tasks will produce minified files in the dist folder | ||
307 | + // By default, your `index.html`'s <!-- Usemin block --> will take care of | ||
308 | + // minification. These next options are pre-configured if you do not wish | ||
309 | + // to use the Usemin blocks. | ||
310 | + // cssmin: { | ||
311 | + // dist: { | ||
312 | + // files: { | ||
313 | + // '<%= yeoman.dist %>/styles/main.css': [ | ||
314 | + // '.tmp/styles/{,*/}*.css' | ||
315 | + // ] | ||
316 | + // } | ||
317 | + // } | ||
318 | + // }, | ||
319 | + // uglify: { | ||
320 | + // dist: { | ||
321 | + // files: { | ||
322 | + // '<%= yeoman.dist %>/scripts/scripts.js': [ | ||
323 | + // '<%= yeoman.dist %>/scripts/scripts.js' | ||
324 | + // ] | ||
325 | + // } | ||
326 | + // } | ||
327 | + // }, | ||
328 | + // concat: { | ||
329 | + // dist: {} | ||
330 | + // }, | ||
331 | + | ||
332 | + imagemin: { | ||
333 | + dist: { | ||
334 | + files: [{ | ||
335 | + expand: true, | ||
336 | + cwd: '<%= yeoman.app %>/images', | ||
337 | + src: '{,*/}*.{png,jpg,jpeg,gif}', | ||
338 | + dest: '<%= yeoman.dist %>/images' | ||
339 | + }] | ||
340 | + } | ||
341 | + }, | ||
342 | + | ||
343 | + svgmin: { | ||
344 | + dist: { | ||
345 | + files: [{ | ||
346 | + expand: true, | ||
347 | + cwd: '<%= yeoman.app %>/images', | ||
348 | + src: '{,*/}*.svg', | ||
349 | + dest: '<%= yeoman.dist %>/images' | ||
350 | + }] | ||
351 | + } | ||
352 | + }, | ||
353 | + | ||
354 | + htmlmin: { | ||
355 | + dist: { | ||
356 | + options: { | ||
357 | + collapseWhitespace: true, | ||
358 | + conservativeCollapse: true, | ||
359 | + collapseBooleanAttributes: true, | ||
360 | + removeCommentsFromCDATA: true | ||
361 | + }, | ||
362 | + files: [{ | ||
363 | + expand: true, | ||
364 | + cwd: '<%= yeoman.dist %>', | ||
365 | + src: ['*.html'], | ||
366 | + dest: '<%= yeoman.dist %>' | ||
367 | + }] | ||
368 | + } | ||
369 | + }, | ||
370 | + | ||
371 | + ngtemplates: { | ||
372 | + dist: { | ||
373 | + options: { | ||
374 | + module: 'adminBuilderBoilerplateApp', | ||
375 | + htmlmin: '<%= htmlmin.dist.options %>', | ||
376 | + usemin: 'scripts/scripts.js' | ||
377 | + }, | ||
378 | + cwd: '<%= yeoman.app %>', | ||
379 | + src: 'views/{,*/}*.html', | ||
380 | + dest: '.tmp/templateCache.js' | ||
381 | + } | ||
382 | + }, | ||
383 | + | ||
384 | + // ng-annotate tries to make the code safe for minification automatically | ||
385 | + // by using the Angular long form for dependency injection. | ||
386 | + ngAnnotate: { | ||
387 | + dist: { | ||
388 | + files: [{ | ||
389 | + expand: true, | ||
390 | + cwd: '.tmp/concat/scripts', | ||
391 | + src: '*.js', | ||
392 | + dest: '.tmp/concat/scripts' | ||
393 | + }] | ||
394 | + } | ||
395 | + }, | ||
396 | + | ||
397 | + // Replace Google CDN references | ||
398 | + cdnify: { | ||
399 | + dist: { | ||
400 | + html: ['<%= yeoman.dist %>/*.html'] | ||
401 | + } | ||
402 | + }, | ||
403 | + | ||
404 | + // Copies remaining files to places other tasks can use | ||
405 | + copy: { | ||
406 | + dist: { | ||
407 | + files: [{ | ||
408 | + expand: true, | ||
409 | + dot: true, | ||
410 | + cwd: '<%= yeoman.app %>', | ||
411 | + dest: '<%= yeoman.dist %>', | ||
412 | + src: [ | ||
413 | + '*.{ico,png,txt}', | ||
414 | + '*.html', | ||
415 | + 'images/{,*/}*.{webp}', | ||
416 | + 'styles/fonts/{,*/}*.*' | ||
417 | + ] | ||
418 | + }, { | ||
419 | + expand: true, | ||
420 | + cwd: '.tmp/images', | ||
421 | + dest: '<%= yeoman.dist %>/images', | ||
422 | + src: ['generated/*'] | ||
423 | + }, { | ||
424 | + expand: true, | ||
425 | + cwd: '.', | ||
426 | + src: 'bower_components/bootstrap-sass-official/assets/fonts/bootstrap/*', | ||
427 | + dest: '<%= yeoman.dist %>' | ||
428 | + }] | ||
429 | + }, | ||
430 | + styles: { | ||
431 | + expand: true, | ||
432 | + cwd: '<%= yeoman.app %>/styles', | ||
433 | + dest: '.tmp/styles/', | ||
434 | + src: '{,*/}*.css' | ||
435 | + } | ||
436 | + }, | ||
437 | + | ||
438 | + // Run some tasks in parallel to speed up the build process | ||
439 | + concurrent: { | ||
440 | + server: [ | ||
441 | + 'compass:server' | ||
442 | + ], | ||
443 | + test: [ | ||
444 | + 'compass' | ||
445 | + ], | ||
446 | + dist: [ | ||
447 | + 'compass:dist', | ||
448 | + 'imagemin', | ||
449 | + 'svgmin' | ||
450 | + ] | ||
451 | + }, | ||
452 | + | ||
453 | + // Test settings | ||
454 | + karma: { | ||
455 | + unit: { | ||
456 | + configFile: 'test/karma.conf.js', | ||
457 | + singleRun: true | ||
458 | + } | ||
459 | + } | ||
460 | + }); | ||
461 | + | ||
462 | + | ||
463 | + grunt.registerTask('serve', 'Compile then start a connect web server', function (target) { | ||
464 | + if (target === 'dist') { | ||
465 | + return grunt.task.run(['build', 'connect:dist:keepalive']); | ||
466 | + } | ||
467 | + | ||
468 | + grunt.task.run([ | ||
469 | + 'clean:server', | ||
470 | + 'wiredep', | ||
471 | + 'concurrent:server', | ||
472 | + 'postcss:server', | ||
473 | + 'connect:livereload', | ||
474 | + 'watch' | ||
475 | + ]); | ||
476 | + }); | ||
477 | + | ||
478 | + grunt.registerTask('server', 'DEPRECATED TASK. Use the "serve" task instead', function (target) { | ||
479 | + grunt.log.warn('The `server` task has been deprecated. Use `grunt serve` to start a server.'); | ||
480 | + grunt.task.run(['serve:' + target]); | ||
481 | + }); | ||
482 | + | ||
483 | + grunt.registerTask('test', [ | ||
484 | + 'clean:server', | ||
485 | + 'wiredep', | ||
486 | + 'concurrent:test', | ||
487 | + 'postcss', | ||
488 | + 'connect:test', | ||
489 | + 'karma' | ||
490 | + ]); | ||
491 | + | ||
492 | + grunt.registerTask('build', [ | ||
493 | + 'clean:dist', | ||
494 | + 'wiredep', | ||
495 | + 'useminPrepare', | ||
496 | + 'concurrent:dist', | ||
497 | + 'postcss', | ||
498 | + 'ngtemplates', | ||
499 | + 'concat', | ||
500 | + 'ngAnnotate', | ||
501 | + 'copy:dist', | ||
502 | + 'cdnify', | ||
503 | + 'cssmin', | ||
504 | + 'uglify', | ||
505 | + 'filerev', | ||
506 | + 'usemin', | ||
507 | + 'htmlmin' | ||
508 | + ]); | ||
509 | + | ||
510 | + grunt.registerTask('default', [ | ||
511 | + 'newer:jshint', | ||
512 | + 'newer:jscs', | ||
513 | + 'test', | ||
514 | + 'build' | ||
515 | + ]); | ||
516 | +}; |
README.md
0 → 100644
1 | +# admin-builder-boilerplate | ||
2 | + | ||
3 | +This project is generated with [yo angular generator](https://github.com/yeoman/generator-angular) | ||
4 | +version 0.15.1. | ||
5 | + | ||
6 | +## Build & development | ||
7 | + | ||
8 | +Run `grunt` for building and `grunt serve` for preview. | ||
9 | + | ||
10 | +## Testing | ||
11 | + | ||
12 | +Running `grunt test` will run the unit tests with karma. |
app/404.html
0 → 100644
1 | +<!doctype html> | ||
2 | +<html lang="en"> | ||
3 | + <head> | ||
4 | + <meta charset="utf-8"> | ||
5 | + <title>Page Not Found :(</title> | ||
6 | + <style> | ||
7 | + ::-moz-selection { | ||
8 | + background: #b3d4fc; | ||
9 | + text-shadow: none; | ||
10 | + } | ||
11 | + | ||
12 | + ::selection { | ||
13 | + background: #b3d4fc; | ||
14 | + text-shadow: none; | ||
15 | + } | ||
16 | + | ||
17 | + html { | ||
18 | + padding: 30px 10px; | ||
19 | + font-size: 20px; | ||
20 | + line-height: 1.4; | ||
21 | + color: #737373; | ||
22 | + background: #f0f0f0; | ||
23 | + -webkit-text-size-adjust: 100%; | ||
24 | + -ms-text-size-adjust: 100%; | ||
25 | + } | ||
26 | + | ||
27 | + html, | ||
28 | + input { | ||
29 | + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; | ||
30 | + } | ||
31 | + | ||
32 | + body { | ||
33 | + max-width: 500px; | ||
34 | + padding: 30px 20px 50px; | ||
35 | + border: 1px solid #b3b3b3; | ||
36 | + border-radius: 4px; | ||
37 | + margin: 0 auto; | ||
38 | + box-shadow: 0 1px 10px #a7a7a7, inset 0 1px 0 #fff; | ||
39 | + background: #fcfcfc; | ||
40 | + } | ||
41 | + | ||
42 | + h1 { | ||
43 | + margin: 0 10px; | ||
44 | + font-size: 50px; | ||
45 | + text-align: center; | ||
46 | + } | ||
47 | + | ||
48 | + h1 span { | ||
49 | + color: #bbb; | ||
50 | + } | ||
51 | + | ||
52 | + h3 { | ||
53 | + margin: 1.5em 0 0.5em; | ||
54 | + } | ||
55 | + | ||
56 | + p { | ||
57 | + margin: 1em 0; | ||
58 | + } | ||
59 | + | ||
60 | + ul { | ||
61 | + padding: 0 0 0 40px; | ||
62 | + margin: 1em 0; | ||
63 | + } | ||
64 | + | ||
65 | + .container { | ||
66 | + max-width: 380px; | ||
67 | + margin: 0 auto; | ||
68 | + } | ||
69 | + | ||
70 | + /* google search */ | ||
71 | + | ||
72 | + #goog-fixurl ul { | ||
73 | + list-style: none; | ||
74 | + padding: 0; | ||
75 | + margin: 0; | ||
76 | + } | ||
77 | + | ||
78 | + #goog-fixurl form { | ||
79 | + margin: 0; | ||
80 | + } | ||
81 | + | ||
82 | + #goog-wm-qt, | ||
83 | + #goog-wm-sb { | ||
84 | + border: 1px solid #bbb; | ||
85 | + font-size: 16px; | ||
86 | + line-height: normal; | ||
87 | + vertical-align: top; | ||
88 | + color: #444; | ||
89 | + border-radius: 2px; | ||
90 | + } | ||
91 | + | ||
92 | + #goog-wm-qt { | ||
93 | + width: 220px; | ||
94 | + height: 20px; | ||
95 | + padding: 5px; | ||
96 | + margin: 5px 10px 0 0; | ||
97 | + box-shadow: inset 0 1px 1px #ccc; | ||
98 | + } | ||
99 | + | ||
100 | + #goog-wm-sb { | ||
101 | + display: inline-block; | ||
102 | + height: 32px; | ||
103 | + padding: 0 10px; | ||
104 | + margin: 5px 0 0; | ||
105 | + white-space: nowrap; | ||
106 | + cursor: pointer; | ||
107 | + background-color: #f5f5f5; | ||
108 | + background-image: -webkit-linear-gradient(rgba(255,255,255,0), #f1f1f1); | ||
109 | + background-image: -moz-linear-gradient(rgba(255,255,255,0), #f1f1f1); | ||
110 | + background-image: -ms-linear-gradient(rgba(255,255,255,0), #f1f1f1); | ||
111 | + background-image: -o-linear-gradient(rgba(255,255,255,0), #f1f1f1); | ||
112 | + -webkit-appearance: none; | ||
113 | + -moz-appearance: none; | ||
114 | + appearance: none; | ||
115 | + } | ||
116 | + | ||
117 | + #goog-wm-sb:hover, | ||
118 | + #goog-wm-sb:focus { | ||
119 | + border-color: #aaa; | ||
120 | + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); | ||
121 | + background-color: #f8f8f8; | ||
122 | + } | ||
123 | + | ||
124 | + #goog-wm-qt:hover, | ||
125 | + #goog-wm-qt:focus { | ||
126 | + border-color: #105cb6; | ||
127 | + outline: 0; | ||
128 | + color: #222; | ||
129 | + } | ||
130 | + | ||
131 | + input::-moz-focus-inner { | ||
132 | + padding: 0; | ||
133 | + border: 0; | ||
134 | + } | ||
135 | + </style> | ||
136 | + </head> | ||
137 | + <body> | ||
138 | + <div class="container"> | ||
139 | + <h1>Not found <span>:(</span></h1> | ||
140 | + <p>Sorry, but the page you were trying to view does not exist.</p> | ||
141 | + <p>It looks like this was the result of either:</p> | ||
142 | + <ul> | ||
143 | + <li>a mistyped address</li> | ||
144 | + <li>an out-of-date link</li> | ||
145 | + </ul> | ||
146 | + <script> | ||
147 | + var GOOG_FIXURL_LANG = (navigator.language || '').slice(0,2),GOOG_FIXURL_SITE = location.host; | ||
148 | + </script> | ||
149 | + <script src="//linkhelp.clients.google.com/tbproxy/lh/wm/fixurl.js"></script> | ||
150 | + </div> | ||
151 | + </body> | ||
152 | +</html> |
app/favicon.ico
0 → 100644
No preview for this file type
app/images/yeoman.png
0 → 100644

13.2 KB
app/index.html
0 → 100644
1 | +<!doctype html> | ||
2 | +<html> | ||
3 | + <head> | ||
4 | + <meta charset="utf-8"> | ||
5 | + <title></title> | ||
6 | + <meta name="description" content=""> | ||
7 | + <meta name="viewport" content="width=device-width"> | ||
8 | + <!-- Place favicon.ico and apple-touch-icon.png in the root directory --> | ||
9 | + <!-- build:css(.) styles/vendor.css --> | ||
10 | + <!-- bower:css --> | ||
11 | + <!-- endbower --> | ||
12 | + <!-- endbuild --> | ||
13 | + <!-- build:css(.tmp) styles/main.css --> | ||
14 | + <link rel="stylesheet" href="styles/main.css"> | ||
15 | + <!-- endbuild --> | ||
16 | + </head> | ||
17 | + <body ng-app="adminBuilderBoilerplateApp"> | ||
18 | + <!--[if lte IE 8]> | ||
19 | + <p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p> | ||
20 | + <![endif]--> | ||
21 | + | ||
22 | + <!-- Add your site or application content here --> | ||
23 | + <div class="header"> | ||
24 | + <div class="navbar navbar-default" role="navigation"> | ||
25 | + <div class="container"> | ||
26 | + <div class="navbar-header"> | ||
27 | + | ||
28 | + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#js-navbar-collapse"> | ||
29 | + <span class="sr-only">Toggle navigation</span> | ||
30 | + <span class="icon-bar"></span> | ||
31 | + <span class="icon-bar"></span> | ||
32 | + <span class="icon-bar"></span> | ||
33 | + </button> | ||
34 | + | ||
35 | + <a class="navbar-brand" href="#/">adminBuilderBoilerplate</a> | ||
36 | + </div> | ||
37 | + | ||
38 | + <div class="collapse navbar-collapse" id="js-navbar-collapse"> | ||
39 | + | ||
40 | + <ul class="nav navbar-nav"> | ||
41 | + <li class="active"><a href="#/">Home</a></li> | ||
42 | + <li><a ng-href="#/about">About</a></li> | ||
43 | + <li><a ng-href="#/">Contact</a></li> | ||
44 | + </ul> | ||
45 | + </div> | ||
46 | + </div> | ||
47 | + </div> | ||
48 | + </div> | ||
49 | + | ||
50 | + <div class="container"> | ||
51 | + <div ng-view=""></div> | ||
52 | + </div> | ||
53 | + | ||
54 | + <div class="footer"> | ||
55 | + <div class="container"> | ||
56 | + <p><span class="glyphicon glyphicon-heart"></span> from the Yeoman team</p> | ||
57 | + </div> | ||
58 | + </div> | ||
59 | + | ||
60 | + | ||
61 | + <!-- Google Analytics: change UA-XXXXX-X to be your site's ID --> | ||
62 | + <script> | ||
63 | + !function(A,n,g,u,l,a,r){A.GoogleAnalyticsObject=l,A[l]=A[l]||function(){ | ||
64 | + (A[l].q=A[l].q||[]).push(arguments)},A[l].l=+new Date,a=n.createElement(g), | ||
65 | + r=n.getElementsByTagName(g)[0],a.src=u,r.parentNode.insertBefore(a,r) | ||
66 | + }(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); | ||
67 | + | ||
68 | + ga('create', 'UA-XXXXX-X'); | ||
69 | + ga('send', 'pageview'); | ||
70 | + </script> | ||
71 | + | ||
72 | + <!-- build:js(.) scripts/vendor.js --> | ||
73 | + <!-- bower:js --> | ||
74 | + <script src="bower_components/jquery/dist/jquery.js"></script> | ||
75 | + <script src="bower_components/angular/angular.js"></script> | ||
76 | + <script src="bower_components/bootstrap-sass-official/assets/javascripts/bootstrap.js"></script> | ||
77 | + <script src="bower_components/angular-animate/angular-animate.js"></script> | ||
78 | + <script src="bower_components/angular-cookies/angular-cookies.js"></script> | ||
79 | + <script src="bower_components/angular-resource/angular-resource.js"></script> | ||
80 | + <script src="bower_components/angular-route/angular-route.js"></script> | ||
81 | + <script src="bower_components/angular-sanitize/angular-sanitize.js"></script> | ||
82 | + <script src="bower_components/angular-touch/angular-touch.js"></script> | ||
83 | + <!-- endbower --> | ||
84 | + <!-- endbuild --> | ||
85 | + | ||
86 | + <!-- build:js({.tmp,app}) scripts/scripts.js --> | ||
87 | + <script src="scripts/app.js"></script> | ||
88 | + <script src="scripts/controllers/main.js"></script> | ||
89 | + <script src="scripts/controllers/about.js"></script> | ||
90 | + <!-- endbuild --> | ||
91 | +</body> | ||
92 | +</html> |
app/robots.txt
0 → 100644
app/scripts/app.js
0 → 100644
1 | +'use strict'; | ||
2 | + | ||
3 | +/** | ||
4 | + * @ngdoc overview | ||
5 | + * @name adminBuilderBoilerplateApp | ||
6 | + * @description | ||
7 | + * # adminBuilderBoilerplateApp | ||
8 | + * | ||
9 | + * Main module of the application. | ||
10 | + */ | ||
11 | +angular | ||
12 | + .module('adminBuilderBoilerplateApp', [ | ||
13 | + 'ngAnimate', | ||
14 | + 'ngCookies', | ||
15 | + 'ngResource', | ||
16 | + 'ngRoute', | ||
17 | + 'ngSanitize', | ||
18 | + 'ngTouch' | ||
19 | + ]) | ||
20 | + .config(function ($routeProvider) { | ||
21 | + $routeProvider | ||
22 | + .when('/', { | ||
23 | + templateUrl: 'views/main.html', | ||
24 | + controller: 'MainCtrl', | ||
25 | + controllerAs: 'main' | ||
26 | + }) | ||
27 | + .when('/about', { | ||
28 | + templateUrl: 'views/about.html', | ||
29 | + controller: 'AboutCtrl', | ||
30 | + controllerAs: 'about' | ||
31 | + }) | ||
32 | + .otherwise({ | ||
33 | + redirectTo: '/' | ||
34 | + }); | ||
35 | + }); |
app/scripts/controllers/about.js
0 → 100644
1 | +'use strict'; | ||
2 | + | ||
3 | +/** | ||
4 | + * @ngdoc function | ||
5 | + * @name adminBuilderBoilerplateApp.controller:AboutCtrl | ||
6 | + * @description | ||
7 | + * # AboutCtrl | ||
8 | + * Controller of the adminBuilderBoilerplateApp | ||
9 | + */ | ||
10 | +angular.module('adminBuilderBoilerplateApp') | ||
11 | + .controller('AboutCtrl', function () { | ||
12 | + this.awesomeThings = [ | ||
13 | + 'HTML5 Boilerplate', | ||
14 | + 'AngularJS', | ||
15 | + 'Karma' | ||
16 | + ]; | ||
17 | + }); |
app/scripts/controllers/main.js
0 → 100644
1 | +'use strict'; | ||
2 | + | ||
3 | +/** | ||
4 | + * @ngdoc function | ||
5 | + * @name adminBuilderBoilerplateApp.controller:MainCtrl | ||
6 | + * @description | ||
7 | + * # MainCtrl | ||
8 | + * Controller of the adminBuilderBoilerplateApp | ||
9 | + */ | ||
10 | +angular.module('adminBuilderBoilerplateApp') | ||
11 | + .controller('MainCtrl', function () { | ||
12 | + this.awesomeThings = [ | ||
13 | + 'HTML5 Boilerplate', | ||
14 | + 'AngularJS', | ||
15 | + 'Karma' | ||
16 | + ]; | ||
17 | + }); |
app/styles/main.scss
0 → 100644
1 | +$icon-font-path: "../bower_components/bootstrap-sass-official/assets/fonts/bootstrap/"; | ||
2 | +// bower:scss | ||
3 | +@import "bootstrap-sass-official/assets/stylesheets/_bootstrap.scss"; | ||
4 | +// endbower | ||
5 | + | ||
6 | +.browsehappy { | ||
7 | + margin: 0.2em 0; | ||
8 | + background: #ccc; | ||
9 | + color: #000; | ||
10 | + padding: 0.2em 0; | ||
11 | +} | ||
12 | + | ||
13 | +body { | ||
14 | + padding: 0; | ||
15 | +} | ||
16 | + | ||
17 | +/* Everything but the jumbotron gets side spacing for mobile first views */ | ||
18 | +.header, | ||
19 | +.marketing, | ||
20 | +.footer { | ||
21 | + padding-left: 15px; | ||
22 | + padding-right: 15px; | ||
23 | +} | ||
24 | + | ||
25 | +/* Custom page header */ | ||
26 | +.header { | ||
27 | + border-bottom: 1px solid #e5e5e5; | ||
28 | + margin-bottom: 10px; | ||
29 | + | ||
30 | + /* Make the masthead heading the same height as the navigation */ | ||
31 | + h3 { | ||
32 | + margin-top: 0; | ||
33 | + margin-bottom: 0; | ||
34 | + line-height: 40px; | ||
35 | + padding-bottom: 19px; | ||
36 | + } | ||
37 | +} | ||
38 | + | ||
39 | +/* Custom page footer */ | ||
40 | +.footer { | ||
41 | + padding-top: 19px; | ||
42 | + color: #777; | ||
43 | + border-top: 1px solid #e5e5e5; | ||
44 | +} | ||
45 | + | ||
46 | +.container-narrow > hr { | ||
47 | + margin: 30px 0; | ||
48 | +} | ||
49 | + | ||
50 | +/* Main marketing message and sign up button */ | ||
51 | +.jumbotron { | ||
52 | + text-align: center; | ||
53 | + border-bottom: 1px solid #e5e5e5; | ||
54 | + | ||
55 | + .btn { | ||
56 | + font-size: 21px; | ||
57 | + padding: 14px 24px; | ||
58 | + } | ||
59 | +} | ||
60 | + | ||
61 | +/* Supporting marketing content */ | ||
62 | +.marketing { | ||
63 | + margin: 40px 0; | ||
64 | + | ||
65 | + p + h4 { | ||
66 | + margin-top: 28px; | ||
67 | + } | ||
68 | +} | ||
69 | + | ||
70 | +/* Responsive: Portrait tablets and up */ | ||
71 | +@media screen and (min-width: 768px) { | ||
72 | + .container { | ||
73 | + max-width: 730px; | ||
74 | + } | ||
75 | + | ||
76 | + /* Remove the padding we set earlier */ | ||
77 | + .header, | ||
78 | + .marketing, | ||
79 | + .footer { | ||
80 | + padding-left: 0; | ||
81 | + padding-right: 0; | ||
82 | + } | ||
83 | + /* Space out the masthead */ | ||
84 | + .header { | ||
85 | + margin-bottom: 30px; | ||
86 | + } | ||
87 | + /* Remove the bottom border on the jumbotron for visual effect */ | ||
88 | + .jumbotron { | ||
89 | + border-bottom: 0; | ||
90 | + } | ||
91 | +} |
app/views/about.html
0 → 100644
1 | +<p>This is the about view.</p> |
app/views/main.html
0 → 100644
1 | +<div class="jumbotron"> | ||
2 | + <h1>'Allo, 'Allo!</h1> | ||
3 | + <p class="lead"> | ||
4 | + <img src="images/yeoman.png" alt="I'm Yeoman"><br> | ||
5 | + Always a pleasure scaffolding your apps. | ||
6 | + </p> | ||
7 | + <p><a class="btn btn-lg btn-success" ng-href="#/">Splendid!<span class="glyphicon glyphicon-ok"></span></a></p> | ||
8 | +</div> | ||
9 | + | ||
10 | +<div class="row marketing"> | ||
11 | + <h4>HTML5 Boilerplate</h4> | ||
12 | + <p> | ||
13 | + HTML5 Boilerplate is a professional front-end template for building fast, robust, and adaptable web apps or sites. | ||
14 | + </p> | ||
15 | + | ||
16 | + <h4>Angular</h4> | ||
17 | + <p> | ||
18 | + AngularJS is a toolset for building the framework most suited to your application development. | ||
19 | + </p> | ||
20 | + | ||
21 | + <h4>Karma</h4> | ||
22 | + <p>Spectacular Test Runner for JavaScript.</p> | ||
23 | +</div> |
bower.json
0 → 100644
1 | +{ | ||
2 | + "name": "admin-builder-boilerplate", | ||
3 | + "version": "0.0.0", | ||
4 | + "dependencies": { | ||
5 | + "angular": "^1.4.0", | ||
6 | + "bootstrap-sass-official": "^3.2.0", | ||
7 | + "angular-animate": "^1.4.0", | ||
8 | + "angular-cookies": "^1.4.0", | ||
9 | + "angular-resource": "^1.4.0", | ||
10 | + "angular-route": "^1.4.0", | ||
11 | + "angular-sanitize": "^1.4.0", | ||
12 | + "angular-touch": "^1.4.0" | ||
13 | + }, | ||
14 | + "devDependencies": { | ||
15 | + "angular-mocks": "^1.4.0" | ||
16 | + }, | ||
17 | + "appPath": "app", | ||
18 | + "moduleName": "adminBuilderBoilerplateApp", | ||
19 | + "overrides": { | ||
20 | + "bootstrap": { | ||
21 | + "main": [ | ||
22 | + "less/bootstrap.less", | ||
23 | + "dist/css/bootstrap.css", | ||
24 | + "dist/js/bootstrap.js" | ||
25 | + ] | ||
26 | + } | ||
27 | + } | ||
28 | +} |
package.json
0 → 100644
1 | +{ | ||
2 | + "name": "adminbuilderboilerplate", | ||
3 | + "private": true, | ||
4 | + "devDependencies": { | ||
5 | + "autoprefixer-core": "^5.2.1", | ||
6 | + "grunt": "^0.4.5", | ||
7 | + "grunt-angular-templates": "^0.5.7", | ||
8 | + "grunt-concurrent": "^1.0.0", | ||
9 | + "grunt-contrib-clean": "^0.6.0", | ||
10 | + "grunt-contrib-compass": "^1.0.0", | ||
11 | + "grunt-contrib-concat": "^0.5.0", | ||
12 | + "grunt-contrib-connect": "^0.9.0", | ||
13 | + "grunt-contrib-copy": "^0.7.0", | ||
14 | + "grunt-contrib-cssmin": "^0.12.0", | ||
15 | + "grunt-contrib-htmlmin": "^0.4.0", | ||
16 | + "grunt-contrib-imagemin": "^1.0.0", | ||
17 | + "grunt-contrib-jshint": "^0.11.0", | ||
18 | + "grunt-contrib-uglify": "^0.7.0", | ||
19 | + "grunt-contrib-watch": "^0.6.1", | ||
20 | + "grunt-filerev": "^2.1.2", | ||
21 | + "grunt-google-cdn": "^0.4.3", | ||
22 | + "grunt-jscs": "^1.8.0", | ||
23 | + "grunt-newer": "^1.1.0", | ||
24 | + "grunt-ng-annotate": "^0.9.2", | ||
25 | + "grunt-postcss": "^0.5.5", | ||
26 | + "grunt-svgmin": "^2.0.0", | ||
27 | + "grunt-usemin": "^3.0.0", | ||
28 | + "grunt-wiredep": "^2.0.0", | ||
29 | + "jit-grunt": "^0.9.1", | ||
30 | + "time-grunt": "^1.0.0", | ||
31 | + "jshint-stylish": "^1.0.0" | ||
32 | + }, | ||
33 | + "engines": { | ||
34 | + "node": ">=0.10.0" | ||
35 | + } | ||
36 | +} |
test/.jshintrc
0 → 100644
1 | +{ | ||
2 | + "bitwise": true, | ||
3 | + "browser": true, | ||
4 | + "curly": true, | ||
5 | + "eqeqeq": true, | ||
6 | + "esnext": true, | ||
7 | + "jasmine": true, | ||
8 | + "latedef": true, | ||
9 | + "noarg": true, | ||
10 | + "node": true, | ||
11 | + "strict": true, | ||
12 | + "undef": true, | ||
13 | + "unused": true, | ||
14 | + "globals": { | ||
15 | + "angular": false, | ||
16 | + "inject": false | ||
17 | + } | ||
18 | +} |
test/karma.conf.js
0 → 100644
1 | +// Karma configuration | ||
2 | +// Generated on 2016-03-28 | ||
3 | + | ||
4 | +module.exports = function(config) { | ||
5 | + 'use strict'; | ||
6 | + | ||
7 | + config.set({ | ||
8 | + // enable / disable watching file and executing tests whenever any file changes | ||
9 | + autoWatch: true, | ||
10 | + | ||
11 | + // base path, that will be used to resolve files and exclude | ||
12 | + basePath: '../', | ||
13 | + | ||
14 | + // testing framework to use (jasmine/mocha/qunit/...) | ||
15 | + // as well as any additional frameworks (requirejs/chai/sinon/...) | ||
16 | + frameworks: [ | ||
17 | + 'jasmine' | ||
18 | + ], | ||
19 | + | ||
20 | + // list of files / patterns to load in the browser | ||
21 | + files: [ | ||
22 | + // bower:js | ||
23 | + 'bower_components/jquery/dist/jquery.js', | ||
24 | + 'bower_components/angular/angular.js', | ||
25 | + 'bower_components/bootstrap-sass-official/assets/javascripts/bootstrap.js', | ||
26 | + 'bower_components/angular-animate/angular-animate.js', | ||
27 | + 'bower_components/angular-cookies/angular-cookies.js', | ||
28 | + 'bower_components/angular-resource/angular-resource.js', | ||
29 | + 'bower_components/angular-route/angular-route.js', | ||
30 | + 'bower_components/angular-sanitize/angular-sanitize.js', | ||
31 | + 'bower_components/angular-touch/angular-touch.js', | ||
32 | + 'bower_components/angular-mocks/angular-mocks.js', | ||
33 | + // endbower | ||
34 | + 'app/scripts/**/*.js', | ||
35 | + 'test/mock/**/*.js', | ||
36 | + 'test/spec/**/*.js' | ||
37 | + ], | ||
38 | + | ||
39 | + // list of files / patterns to exclude | ||
40 | + exclude: [ | ||
41 | + ], | ||
42 | + | ||
43 | + // web server port | ||
44 | + port: 8080, | ||
45 | + | ||
46 | + // Start these browsers, currently available: | ||
47 | + // - Chrome | ||
48 | + // - ChromeCanary | ||
49 | + // - Firefox | ||
50 | + // - Opera | ||
51 | + // - Safari (only Mac) | ||
52 | + // - PhantomJS | ||
53 | + // - IE (only Windows) | ||
54 | + browsers: [ | ||
55 | + 'PhantomJS' | ||
56 | + ], | ||
57 | + | ||
58 | + // Which plugins to enable | ||
59 | + plugins: [ | ||
60 | + 'karma-phantomjs-launcher', | ||
61 | + 'karma-jasmine' | ||
62 | + ], | ||
63 | + | ||
64 | + // Continuous Integration mode | ||
65 | + // if true, it capture browsers, run tests and exit | ||
66 | + singleRun: false, | ||
67 | + | ||
68 | + colors: true, | ||
69 | + | ||
70 | + // level of logging | ||
71 | + // possible values: LOG_DISABLE || LOG_ERROR || LOG_WARN || LOG_INFO || LOG_DEBUG | ||
72 | + logLevel: config.LOG_INFO, | ||
73 | + | ||
74 | + // Uncomment the following lines if you are using grunt's server to run the tests | ||
75 | + // proxies: { | ||
76 | + // '/': 'http://localhost:9000/' | ||
77 | + // }, | ||
78 | + // URL root prevent conflicts with the site root | ||
79 | + // urlRoot: '_karma_' | ||
80 | + }); | ||
81 | +}; |
test/spec/controllers/about.js
0 → 100644
1 | +'use strict'; | ||
2 | + | ||
3 | +describe('Controller: AboutCtrl', function () { | ||
4 | + | ||
5 | + // load the controller's module | ||
6 | + beforeEach(module('adminBuilderBoilerplateApp')); | ||
7 | + | ||
8 | + var AboutCtrl, | ||
9 | + scope; | ||
10 | + | ||
11 | + // Initialize the controller and a mock scope | ||
12 | + beforeEach(inject(function ($controller, $rootScope) { | ||
13 | + scope = $rootScope.$new(); | ||
14 | + AboutCtrl = $controller('AboutCtrl', { | ||
15 | + $scope: scope | ||
16 | + // place here mocked dependencies | ||
17 | + }); | ||
18 | + })); | ||
19 | + | ||
20 | + it('should attach a list of awesomeThings to the scope', function () { | ||
21 | + expect(AboutCtrl.awesomeThings.length).toBe(3); | ||
22 | + }); | ||
23 | +}); |
test/spec/controllers/main.js
0 → 100644
1 | +'use strict'; | ||
2 | + | ||
3 | +describe('Controller: MainCtrl', function () { | ||
4 | + | ||
5 | + // load the controller's module | ||
6 | + beforeEach(module('adminBuilderBoilerplateApp')); | ||
7 | + | ||
8 | + var MainCtrl, | ||
9 | + scope; | ||
10 | + | ||
11 | + // Initialize the controller and a mock scope | ||
12 | + beforeEach(inject(function ($controller, $rootScope) { | ||
13 | + scope = $rootScope.$new(); | ||
14 | + MainCtrl = $controller('MainCtrl', { | ||
15 | + $scope: scope | ||
16 | + // place here mocked dependencies | ||
17 | + }); | ||
18 | + })); | ||
19 | + | ||
20 | + it('should attach a list of awesomeThings to the scope', function () { | ||
21 | + expect(MainCtrl.awesomeThings.length).toBe(3); | ||
22 | + }); | ||
23 | +}); |
-
Please register or login to post a comment