text: 'use strict';
  
  var gulp = require('gulp');
  
  var paths = gulp.paths;
  
  var $ = require('gulp-load-plugins')({
    pattern: ['gulp-*', 'main-bower-files', 'uglify-save-license', 'del']
  });
  
  gulp.task('partials', function () {
    return gulp.src([
      paths.src + '/{app,components}/**/*.html',
      paths.tmp + '/{app,components}/**/*.html'
    ])
      .pipe($.minifyHtml({
        empty: true,
        spare: true,
        quotes: true
      }))
      .pipe($.angularTemplatecache('templateCacheHtml.js', {
        module: 'codepolio'
      }))
      .pipe(gulp.dest(paths.tmp + '/partials/'));
  });
  
  gulp.task('html', ['inject', 'partials'], function () {
    var partialsInjectFile = gulp.src(paths.tmp + '/partials/templateCacheHtml.js', { read: false });
    var partialsInjectOptions = {
      starttag: '<!-- inject:partials -->',
      ignorePath: paths.tmp + '/partials',
      addRootSlash: false
    };
  
    var htmlFilter = $.filter('*.html');
    var jsFilter = $.filter('**/*.js');
    var cssFilter = $.filter('**/*.css');
    var assets;
  
    return gulp.src(paths.tmp + '/serve/*.html')
      .pipe($.inject(partialsInjectFile, partialsInjectOptions))
      .pipe(assets = $.useref.assets())
      .pipe($.rev())
      .pipe(jsFilter)
      .pipe($.ngAnnotate())
      .pipe($.uglify({preserveComments: $.uglifySaveLicense}))
      .pipe(jsFilter.restore())
      .pipe(cssFilter)
      .pipe($.replace('../bootstrap/fonts', 'fonts'))
      .pipe($.csso())
      .pipe(cssFilter.restore())
      .pipe(assets.restore())
      .pipe($.useref())
      .pipe($.revReplace())
      .pipe(htmlFilter)
      .pipe($.minifyHtml({
        empty: true,
        spare: true,
        quotes: true
      }))
      .pipe(htmlFilter.restore())
      .pipe(gulp.dest(paths.dist + '/'))
      .pipe($.size({ title: paths.dist + '/', showFiles: true }));
  });
  
  gulp.task('images', function () {
    return gulp.src(paths.src + '/app/assets/images/**/*')
      .pipe(gulp.dest(paths.dist + '/styles/assets/images/'));
  });
  
  gulp.task('fonts', function () {
    return gulp.src($.mainBowerFiles())
      .pipe($.filter('**/*.{eot,svg,ttf,woff}'))
      .pipe($.flatten())
      .pipe(gulp.dest(paths.dist + '/fonts/'));
  });
  
  gulp.task('misc', function () {
    return gulp.src([paths.src + '/**/*.ico', './README.md'])
      .pipe(gulp.dest(paths.dist + '/'));
  });
  
  gulp.task('clean', function (done) {
    $.del([paths.dist + '/', paths.tmp + '/'], done);
  });
  
  gulp.task('build', ['html', 'images', 'fonts', 'misc']);
  