diff --git a/Gruntfile.js b/Gruntfile.js
index c7e7f73b2b..ec9b84a24a 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -1,4 +1,4 @@
-/* jshint node:true */
+/* global module, require, __dirname */
 module.exports = function(grunt) {
 	var path = require('path'),
 		fs = require( 'fs' ),
@@ -130,7 +130,7 @@ module.exports = function(grunt) {
 							version = version.replace( /-[\d]{5}$/, '-' + grunt.template.today( 'yyyymmdd.HHMMss' ) );
 
 							/* jshint quotmark: true */
-							return "$wp_version = '" + version + "';";
+							return '$wp_version = \'' + version + '\';';
 						});
 					}
 				},
@@ -292,6 +292,59 @@ module.exports = function(grunt) {
 				src: []
 			}
 		},
+		eslint: {
+			grunt: {
+				options: {
+					configFile: 'node_modules/eslint-config-wordpress/index.js'
+				},
+				src: ['Gruntfile.js']
+			},
+			jshint: {
+				options: {
+					configFile: 'node_modules/eslint-config-wordpress/index.js'
+				},
+				cwd: SOURCE_DIR,
+				src: [
+					'wp-admin/js/*.js',
+					'wp-includes/js/*.js',
+					// Built scripts.
+					'!wp-includes/js/media-*',
+					// WordPress scripts inside directories
+					'wp-includes/js/jquery/jquery.table-hotkeys.js',
+					'wp-includes/js/mediaelement/wp-mediaelement.js',
+					'wp-includes/js/mediaelement/wp-playlist.js',
+					'wp-includes/js/plupload/handlers.js',
+					'wp-includes/js/plupload/wp-plupload.js',
+					'wp-includes/js/tinymce/plugins/wordpress/plugin.js',
+					'wp-includes/js/tinymce/plugins/wp*/plugin.js',
+					// Third party scripts
+					'!wp-admin/js/farbtastic.js',
+					'!wp-includes/js/backbone*.js',
+					'!wp-includes/js/swfobject.js',
+					'!wp-includes/js/underscore*.js',
+					'!wp-includes/js/colorpicker.js',
+					'!wp-includes/js/hoverIntent.js',
+					'!wp-includes/js/json2.js',
+					'!wp-includes/js/tw-sack.js',
+					'!wp-includes/js/twemoji.js',
+					'!**/*.min.js'
+				]
+			},
+			themes: {
+				options: {
+					configFile: 'node_modules/eslint-config-wordpress/index.js'
+				},
+				expand: true,
+				cwd: SOURCE_DIR + 'wp-content/themes',
+				src: [
+					'twenty*/**/*.js',
+					'!twenty{eleven,twelve,thirteen}/**',
+					// Third party scripts
+					'!twenty{fourteen,fifteen,sixteen,seventeen}/**/html5.js',
+					'!twentyseventeen/assets/js/jquery.scrollTo.js'
+				]
+			}
+		},
 		jshint: {
 			options: grunt.file.readJSON('.jshintrc'),
 			grunt: {
@@ -736,7 +789,11 @@ module.exports = function(grunt) {
 
 			if ( set.length ) {
 				fs.stat( dir = set.shift(), function( error ) {
-					error ? find( set ) : run( path.basename( dir ).substr( 1 ) );
+					if ( error ) {
+						find( set )
+					} else {
+						run( path.basename( dir ).substr( 1 ) );
+					}
 				} );
 			} else {
 				grunt.fatal( 'This WordPress install is not under version control.' );
diff --git a/package.json b/package.json
index 047d5fc35d..e4e419ac05 100644
--- a/package.json
+++ b/package.json
@@ -13,6 +13,8 @@
   "license": "GPL-2.0+",
   "devDependencies": {
     "autoprefixer": "^6.5.1",
+    "eslint": "~3.19.0",
+    "eslint-config-wordpress": "~1.0.0",
     "grunt": "~0.4.5",
     "grunt-browserify": "~5.0.0",
     "grunt-contrib-clean": "~1.0.0",
@@ -25,6 +27,7 @@
     "grunt-contrib-qunit": "^1.2.0",
     "grunt-contrib-uglify": "~2.0.0",
     "grunt-contrib-watch": "~1.0.0",
+    "grunt-eslint": "~19.0.0",
     "grunt-includes": "~0.5.1",
     "grunt-jsvalidate": "~0.2.2",
     "grunt-legacy-util": "^0.2.0",
diff --git a/src/wp-content/themes/twentyfourteen/js/slider.js b/src/wp-content/themes/twentyfourteen/js/slider.js
index 1a08c6263a..d9fe3069ce 100644
--- a/src/wp-content/themes/twentyfourteen/js/slider.js
+++ b/src/wp-content/themes/twentyfourteen/js/slider.js
@@ -20,7 +20,7 @@
 		// Make variables public.
 		slider.vars = $.extend( {}, $.featuredslider.defaults, options );
 
-		namespace = slider.vars.namespace,
+		namespace = slider.vars.namespace;
 
 		// Store a reference to the slider object.
 		$.data( el, 'featuredslider', slider );
@@ -105,14 +105,12 @@
 					var type = 'control-paging',
 						j = 1,
 						item,
-						slide,
 						i;
 
 					slider.controlNavScaffold = $( '<ol class="' + namespace + 'control-nav ' + namespace + type + '"></ol>' );
 
 					if ( slider.pagingCount > 1 ) {
 						for ( i = 0; i < slider.pagingCount; i++ ) {
-							slide = slider.slides.eq( i );
 							item = '<a>' + j + '</a>';
 							slider.controlNavScaffold.append( '<li>' + item + '</li>' );
 							j++;
@@ -120,7 +118,11 @@
 					}
 
 					// CONTROLSCONTAINER
-					( slider.controlsContainer ) ? $( slider.controlsContainer ).append( slider.controlNavScaffold ) : slider.append( slider.controlNavScaffold );
+					if ( slider.controlsContainer ) {
+						$( slider.controlsContainer ).append( slider.controlNavScaffold );
+					} else {
+						slider.append( slider.controlNavScaffold );
+					}
 					methods.controlNav.set();
 
 					methods.controlNav.active();
@@ -162,7 +164,11 @@
 						slider.controlNav.eq( pos ).closest( 'li' ).remove();
 					}
 					methods.controlNav.set();
-					( slider.pagingCount > 1 && slider.pagingCount !== slider.controlNav.length ) ? slider.update( pos, action ) : methods.controlNav.active();
+					if ( slider.pagingCount > 1 && slider.pagingCount !== slider.controlNav.length ) {
+						slider.update( pos, action );
+					} else {
+						methods.controlNav.active();
+					}
 				}
 			},
 
@@ -315,7 +321,7 @@
 						return;
 					}
 
-					transX = -e.translationX,
+					transX = -e.translationX;
 					transY = -e.translationY;
 
 					// Accumulate translations.
@@ -349,7 +355,7 @@
 					}
 
 					if ( slider.animatingTo === slider.currentSlide && ! scrolling && dx !== null ) {
-						updateDx = dx,
+						updateDx = dx;
 						target = ( updateDx > 0 ) ? slider.getTarget( 'next' ) : slider.getTarget( 'prev' );
 
 						slider.featureAnimate( target );
@@ -376,7 +382,11 @@
 
 			smoothHeight: function( dur ) {
 				var $obj = slider.viewport;
-				( dur ) ? $obj.animate( { 'height': slider.slides.eq( slider.animatingTo ).height() }, dur ) : $obj.height( slider.slides.eq( slider.animatingTo ).height() );
+				if ( dur ) {
+					$obj.animate( { 'height': slider.slides.eq( slider.animatingTo ).height() }, dur );
+				} else {
+					$obj.height( slider.slides.eq( slider.animatingTo ).height() );
+				}
 			},
 
 			setToClearWatchedEvent: function() {
