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