text: var gulp = require('gulp')
  var eslint = require('gulp-eslint')
  var concat = require('gulp-concat')
  var uglify = require('gulp-uglify')
  var rename = require('gulp-rename')
  var header = require('gulp-header')
  var footer = require('gulp-footer')
  var tap = require('gulp-tap')
  var merge = require('merge-stream')
  var pkg = require('./package.json')
  var path = require('path')
  
  var jsFiles = ['src/**/*.js', 'test/**/*.js', '!test/lib/**/*.js']
  var shortcutTitles = {
    'infinite': 'Waypoints Infinite Scroll Shortcut',
    'inview': 'Waypoints Inview Shortcut',
    'sticky': 'Waypoints Sticky Element Shortcut'
  }
  
  function fileHeader(title) {
    return [
      '/*!',
      title + ' - ' + pkg.version,
      'Copyright © 2011-' + new Date().getFullYear() + ' Caleb Troughton',
      'Licensed under the MIT license.',
      'https://github.com/imakewebthings/waypoints/blob/master/licenses.txt',
      '*/\n'
    ].join('\n')
  }
  
  gulp.task('lint', function() {
    return gulp.src(jsFiles).pipe(eslint('.eslintrc')).pipe(eslint.format())
  })
  
  gulp.task('build-core', function() {
    var streams = ['noframework', 'jquery', 'zepto'].map(function(adapter) {
      var sources = [
        'src/waypoint.js',
        'src/context.js',
        'src/group.js',
        'src/adapters/' + adapter + '.js'
      ]
      if (['jquery', 'zepto'].indexOf(adapter) > -1) {
        sources.push('src/adapters/jquery-zepto-fn-extension.js')
      }
      return gulp.src(sources)
      .pipe(concat(adapter + '.waypoints.js', { newLine: ';' }))
      .pipe(header(fileHeader('Waypoints')))
      .pipe(footer(';'))
      .pipe(gulp.dest('lib/'))
      .pipe(rename(adapter + '.waypoints.min.js'))
      .pipe(uglify({
        preserveComments: 'some'
      }))
      .pipe(gulp.dest('lib/'))
    })
    return merge.apply(null, streams)
  })
  
  gulp.task('build-shortcuts', function() {
    return gulp.src([
      'src/shortcuts/*.js'
    ])
    .pipe(tap(function(file) {
      var title = path.basename(file.path, '.js')
      file.contents = Buffer.concat([
        new Buffer(fileHeader(shortcutTitles[title])),
        file.contents
      ])
    }))
    .pipe(footer(';'))
    .pipe(gulp.dest('lib/shortcuts/'))
    .pipe(rename(function(path) {
      path.basename += '.min'
    }))
    .pipe(uglify({
      preserveComments: 'some'
    }))
    .pipe(gulp.dest('lib/shortcuts/'))
  })
  
  gulp.task('build-debug', function() {
    return gulp.src([
      'src/debug.js'
    ])
    .pipe(rename('waypoints.debug.js'))
    .pipe(header(fileHeader('Waypoints Debug')))
    .pipe(footer(';'))
    .pipe(gulp.dest('lib/'))
  })
  
  gulp.task('build', ['build-core', 'build-shortcuts', 'build-debug'])
  
  gulp.task('watch', function() {
    gulp.watch(jsFiles, ['lint', 'build'])
  })
  
  gulp.task('default', ['lint', 'build', 'watch'])
  