diff --git Gruntfile.js Gruntfile.js
index 2c213492a..0dba145a7 100644
--- Gruntfile.js
+++ Gruntfile.js
@@ -420,6 +420,14 @@ module.exports = function(grunt) {
 				}
 			}
 		},
+		jsdoc : {
+			dist : {
+				dest: "jsdoc",
+				options: {
+					configure : "jsdoc.conf.json"
+				}
+			}
+		},
 		qunit: {
 			files: [
 				'tests/qunit/**/*.html',
diff --git jsdoc.conf.json jsdoc.conf.json
new file mode 100644
index 000000000..2ffd6660a
--- /dev/null
+++ jsdoc.conf.json
@@ -0,0 +1,40 @@
+{
+  "plugins": [],
+  "recurseDepth": 10,
+  "source": {
+    "include": ["src/wp-includes/js"],
+    "exclude": [
+      "src/wp-includes/js/tinymce",
+      "src/wp-includes/js/crop",
+      "src/wp-includes/js/imgareaselect",
+      "src/wp-includes/js/jcrop",
+      "src/wp-includes/js/jquery",
+      "src/wp-includes/js/mediaelement",
+      "src/wp-includes/js/swfupload",
+      "src/wp-includes/js/thickbox",
+      "src/wp-includes/js/media-audiovideo.js",
+      "src/wp-includes/js/media-grid.js",
+      "src/wp-includes/js/media-models.js",
+      "src/wp-includes/js/media-views.js"
+    ],
+    "includePattern": ".+\\.js(doc|x)?$",
+    "excludePattern": "(^|\\/|\\\\)_"
+  },
+  "sourceType": "module",
+  "tags": {
+    "allowUnknownTags": true,
+    "dictionaries": ["jsdoc","closure"]
+  },
+  "templates": {
+    "cleverLinks": false,
+    "monospaceLinks": false,
+    "theme": "united",
+    "outputSourceFiles": true,
+    "outputSourcePath": true,
+    "linenums": true
+  },
+  "opts": {
+    "template": "./node_modules/ink-docstrap/template",
+    "recurse": true
+  }
+}
diff --git package.json package.json
index 0fda642c4..536eb6060 100644
--- package.json
+++ package.json
@@ -26,6 +26,7 @@
     "grunt-contrib-uglify": "~2.0.0",
     "grunt-contrib-watch": "~1.0.0",
     "grunt-includes": "~0.5.1",
+    "grunt-jsdoc": "^2.1.0",
     "grunt-jsvalidate": "~0.2.2",
     "grunt-legacy-util": "^0.2.0",
     "grunt-patch-wordpress": "~0.4.2",
@@ -33,6 +34,7 @@
     "grunt-replace": "~1.0.1",
     "grunt-rtlcss": "~2.0.1",
     "grunt-sass": "~1.2.1",
+    "ink-docstrap": "^1.3.0",
     "matchdep": "~1.0.0"
   }
 }
diff --git src/wp-includes/js/api-request.js src/wp-includes/js/api-request.js
index 2ec605bf3..f0a84ef48 100644
--- src/wp-includes/js/api-request.js
+++ src/wp-includes/js/api-request.js
@@ -8,7 +8,6 @@
  * - Sends the REST API nonce as a request header.
  * - Allows specifying only an endpoint namespace/path instead of a full URL.
  *
- * @namespace wp.apiRequest
  * @since     4.9.0
  */
 
@@ -82,6 +81,7 @@
 
 	apiRequest.transport = $.ajax;
 
+	/** @namespace wp */
 	window.wp = window.wp || {};
 	window.wp.apiRequest = apiRequest;
 } )( jQuery );
diff --git src/wp-includes/js/autosave.js src/wp-includes/js/autosave.js
index e88943d6d..75196d955 100644
--- src/wp-includes/js/autosave.js
+++ src/wp-includes/js/autosave.js
@@ -597,6 +597,7 @@ window.autosave = function() {
 		};
 	}
 
+	/** @namespace wp */
 	window.wp = window.wp || {};
 	window.wp.autosave = autosave();
 
diff --git src/wp-includes/js/customize-base.js src/wp-includes/js/customize-base.js
index 3fdb92423..4fc848cb3 100644
--- src/wp-includes/js/customize-base.js
+++ src/wp-includes/js/customize-base.js
@@ -1,3 +1,4 @@
+/** @namespace wp */
 window.wp = window.wp || {};
 
 (function( exports, $ ){
@@ -165,9 +166,12 @@ window.wp = window.wp || {};
 	/**
 	 * Observable values that support two-way binding.
 	 *
+	 * @memberOf wp.customize
+	 * @alias wp.customize.Value
+	 *
 	 * @constructor
 	 */
-	api.Value = api.Class.extend({
+	api.Value = api.Class.extend(/** @lends wp.customize.Value.prototype */{
 		/**
 		 * @param {mixed}  initial The initial value.
 		 * @param {object} options
@@ -304,11 +308,14 @@ window.wp = window.wp || {};
 	/**
 	 * A collection of observable values.
 	 *
+	 * @memberOf wp.customize
+	 * @alias wp.customize.Values
+	 *
 	 * @constructor
 	 * @augments wp.customize.Class
 	 * @mixes wp.customize.Events
 	 */
-	api.Values = api.Class.extend({
+	api.Values = api.Class.extend(/** @lends wp.customize.Values.prototype */{
 
 		/**
 		 * The default constructor for items of the collection.
@@ -520,11 +527,14 @@ window.wp = window.wp || {};
 	 *
 	 * Handles inputs, selects, and textareas by default.
 	 *
+	 * @memberOf wp.customize
+	 * @alias wp.customize.Element
+	 *
 	 * @constructor
 	 * @augments wp.customize.Value
 	 * @augments wp.customize.Class
 	 */
-	api.Element = api.Value.extend({
+	api.Element = api.Value.extend(/** @lends wp.customize.Element */{
 		initialize: function( element, options ) {
 			var self = this,
 				synchronizer = api.Element.synchronizer.html,
@@ -617,11 +627,14 @@ window.wp = window.wp || {};
 	/**
 	 * A communicator for sending data from one window to another over postMessage.
 	 *
+	 * @memberOf wp.customize
+	 * @alias wp.customize.Messenger
+	 *
 	 * @constructor
 	 * @augments wp.customize.Class
 	 * @mixes wp.customize.Events
 	 */
-	api.Messenger = api.Class.extend({
+	api.Messenger = api.Class.extend(/** @lends wp.customize.Messenger.prototype */{
 		/**
 		 * Create a new Value.
 		 *
@@ -765,6 +778,9 @@ window.wp = window.wp || {};
 	 * @augments wp.customize.Class
 	 * @since 4.6.0
 	 *
+	 * @memberOf wp.customize
+	 * @alias wp.customize.Notification
+	 *
 	 * @param {string}  code - The error code.
 	 * @param {object}  params - Params.
 	 * @param {string}  params.message=null - The error message.
@@ -773,7 +789,7 @@ window.wp = window.wp || {};
 	 * @param {string}  [params.setting=null] - The setting ID that the notification is related to.
 	 * @param {*}       [params.data=null] - Any additional data.
 	 */
-	api.Notification = api.Class.extend({
+	api.Notification = api.Class.extend(/** @lends wp.customize.Notification.prototype */{
 		initialize: function( code, params ) {
 			var _params;
 			this.code = code;
@@ -798,6 +814,8 @@ window.wp = window.wp || {};
 	/**
 	 * Get all customize settings.
 	 *
+	 * @memberOf wp.customize
+	 *
 	 * @return {object}
 	 */
 	api.get = function() {
@@ -810,9 +828,7 @@ window.wp = window.wp || {};
 		return result;
 	};
 
-	/**
-	 * Utility function namespace
-	 */
+	/** @namespace wp.customize.utils */
 	api.utils = {};
 
 	/**
@@ -820,6 +836,7 @@ window.wp = window.wp || {};
 	 *
 	 * @since 4.7.0
 	 * @access public
+	 * @memberOf wp.customize.utils
 	 *
 	 * @param {string} queryString Query string.
 	 * @returns {object} Parsed query string.
@@ -844,6 +861,6 @@ window.wp = window.wp || {};
 		return queryParams;
 	};
 
-	// Expose the API publicly on window.wp.customize
+	/** @namespace wp.customize */
 	exports.customize = api;
 })( wp, jQuery );
diff --git src/wp-includes/js/customize-loader.js src/wp-includes/js/customize-loader.js
index 1990d1a24..c1cd81582 100644
--- src/wp-includes/js/customize-loader.js
+++ src/wp-includes/js/customize-loader.js
@@ -1,8 +1,5 @@
 /* global _wpCustomizeLoaderSettings, confirm */
-/*
- * Expose a public API that allows the customizer to be
- * loaded on any page.
- */
+/** @namespace wp */
 window.wp = window.wp || {};
 
 (function( exports, $ ){
@@ -22,9 +19,12 @@ window.wp = window.wp || {};
 	 *
 	 *     e.g. <a class="load-customize" href="<?php echo wp_customize_url(); ?>">Open Customizer</a>
 	 *
+	 * @memberOf wp.customize
+	 *
+	 * @class
 	 * @augments wp.customize.Events
 	 */
-	Loader = $.extend( {}, api.Events, {
+	Loader = $.extend( {}, api.Events,/** @lends wp.customize.Loader.prototype */{
 		/**
 		 * Setup the Loader; triggered on document#ready.
 		 */
diff --git src/wp-includes/js/customize-models.js src/wp-includes/js/customize-models.js
index 9d6e088c5..372cad627 100644
--- src/wp-includes/js/customize-models.js
+++ src/wp-includes/js/customize-models.js
@@ -1,6 +1,7 @@
 /* global _wpCustomizeHeader */
 (function( $, wp ) {
 	var api = wp.customize;
+	/** @namespace wp.customize.HeaderTool */
 	api.HeaderTool = {};
 
 
@@ -13,10 +14,13 @@
 	 * These calls are made regardless of whether the user actually saves new
 	 * Customizer settings.
 	 *
+	 * @memberOf wp.customize.HeaderTool
+	 * @alias wp.customize.HeaderTool.ImageModel
+	 *
 	 * @constructor
 	 * @augments Backbone.Model
 	 */
-	api.HeaderTool.ImageModel = Backbone.Model.extend({
+	api.HeaderTool.ImageModel = Backbone.Model.extend(/** @lends wp.customize.HeaderTool.ImageModel.prototype */{
 		defaults: function() {
 			return {
 				header: {
@@ -125,6 +129,9 @@
 	/**
 	 * wp.customize.HeaderTool.ChoiceList
 	 *
+	 * @memberOf wp.customize.HeaderTool
+	 * @alias wp.customize.HeaderTool.ChoiceList
+	 *
 	 * @constructor
 	 * @augments Backbone.Collection
 	 */
@@ -232,6 +239,9 @@
 	/**
 	 * wp.customize.HeaderTool.DefaultsList
 	 *
+	 * @memberOf wp.customize.HeaderTool
+	 * @alias wp.customize.HeaderTool.DefaultsList
+	 *
 	 * @constructor
 	 * @augments wp.customize.HeaderTool.ChoiceList
 	 * @augments Backbone.Collection
diff --git src/wp-includes/js/customize-preview-nav-menus.js src/wp-includes/js/customize-preview-nav-menus.js
index 6745b41be..b328e67e9 100644
--- src/wp-includes/js/customize-preview-nav-menus.js
+++ src/wp-includes/js/customize-preview-nav-menus.js
@@ -1,4 +1,6 @@
 /* global _wpCustomizePreviewNavMenusExports */
+
+/** @namespace wp.customize.navMenusPreview */
 wp.customize.navMenusPreview = wp.customize.MenusCustomizerPreview = ( function( $, _, wp, api ) {
 	'use strict';
 
@@ -72,11 +74,14 @@ wp.customize.navMenusPreview = wp.customize.MenusCustomizerPreview = ( function(
 		/**
 		 * Partial representing an invocation of wp_nav_menu().
 		 *
+		 * @memberOf wp.customize.navMenusPreview
+		 * @alias wp.customize.navMenusPreview.NavMenuInstancePartial
+		 *
 		 * @class
 		 * @augments wp.customize.selectiveRefresh.Partial
 		 * @since 4.5.0
 		 */
-		self.NavMenuInstancePartial = api.selectiveRefresh.Partial.extend({
+		self.NavMenuInstancePartial = api.selectiveRefresh.Partial.extend(/** @lends wp.customize.navMenusPreview.NavMenuInstancePartial.prototype */{
 
 			/**
 			 * Constructor.
diff --git src/wp-includes/js/customize-preview-widgets.js src/wp-includes/js/customize-preview-widgets.js
index 6c05e8943..b981788ed 100644
--- src/wp-includes/js/customize-preview-widgets.js
+++ src/wp-includes/js/customize-preview-widgets.js
@@ -1,4 +1,6 @@
 /* global _wpWidgetCustomizerPreviewSettings */
+
+/** @namespace wp.customize.widgetsPreview */
 wp.customize.widgetsPreview = wp.customize.WidgetCustomizerPreview = (function( $, _, wp, api ) {
 
 	var self;
@@ -42,11 +44,14 @@ wp.customize.widgetsPreview = wp.customize.WidgetCustomizerPreview = (function(
 	/**
 	 * Partial representing a widget instance.
 	 *
+	 * @memberOf wp.customize.widgetsPreview
+	 * @alias wp.customize.widgetsPreview.WidgetPartial
+	 *
 	 * @class
 	 * @augments wp.customize.selectiveRefresh.Partial
 	 * @since 4.5.0
 	 */
-	self.WidgetPartial = api.selectiveRefresh.Partial.extend({
+	self.WidgetPartial = api.selectiveRefresh.Partial.extend(/** @lends wp.customize.widgetsPreview.WidgetPartial.prototype */{
 
 		/**
 		 * Constructor.
@@ -112,11 +117,14 @@ wp.customize.widgetsPreview = wp.customize.WidgetCustomizerPreview = (function(
 	/**
 	 * Partial representing a widget area.
 	 *
+	 * @memberOf wp.customize.widgetsPreview
+	 * @alias wp.customize.widgetsPreview.SidebarPartial
+	 *
 	 * @class
 	 * @augments wp.customize.selectiveRefresh.Partial
 	 * @since 4.5.0
 	 */
-	self.SidebarPartial = api.selectiveRefresh.Partial.extend({
+	self.SidebarPartial = api.selectiveRefresh.Partial.extend(/** @lends wp.customize.widgetsPreview.SidebarPartial.prototype */{
 
 		/**
 		 * Constructor.
@@ -510,6 +518,8 @@ wp.customize.widgetsPreview = wp.customize.WidgetCustomizerPreview = (function(
 	/**
 	 * Calculate the selector for the sidebar's widgets based on the registered sidebar's info.
 	 *
+	 * @memberOf wp.customize.widgetsPreview
+	 *
 	 * @since 3.9.0
 	 */
 	self.buildWidgetSelectors = function() {
@@ -548,6 +558,8 @@ wp.customize.widgetsPreview = wp.customize.WidgetCustomizerPreview = (function(
 	/**
 	 * Highlight the widget on widget updates or widget control mouse overs.
 	 *
+	 * @memberOf wp.customize.widgetsPreview
+	 *
 	 * @since 3.9.0
 	 * @param  {string} widgetId ID of the widget.
 	 */
@@ -567,6 +579,8 @@ wp.customize.widgetsPreview = wp.customize.WidgetCustomizerPreview = (function(
 	 * Show a title and highlight widgets on hover. On shift+clicking
 	 * focus the widget control.
 	 *
+	 * @memberOf wp.customize.widgetsPreview
+	 *
 	 * @since 3.9.0
 	 */
 	self.highlightControls = function() {
@@ -598,6 +612,8 @@ wp.customize.widgetsPreview = wp.customize.WidgetCustomizerPreview = (function(
 	/**
 	 * Parse a widget ID.
 	 *
+	 * @memberOf wp.customize.widgetsPreview
+	 *
 	 * @since 4.5.0
 	 *
 	 * @param {string} widgetId Widget ID.
@@ -623,6 +639,8 @@ wp.customize.widgetsPreview = wp.customize.WidgetCustomizerPreview = (function(
 	/**
 	 * Parse a widget setting ID.
 	 *
+	 * @memberOf wp.customize.widgetsPreview
+	 *
 	 * @since 4.5.0
 	 *
 	 * @param {string} settingId Widget setting ID.
@@ -648,6 +666,8 @@ wp.customize.widgetsPreview = wp.customize.WidgetCustomizerPreview = (function(
 	/**
 	 * Convert a widget ID into a Customizer setting ID.
 	 *
+	 * @memberOf wp.customize.widgetsPreview
+	 *
 	 * @since 4.5.0
 	 *
 	 * @param {string} widgetId Widget ID.
diff --git src/wp-includes/js/customize-preview.js src/wp-includes/js/customize-preview.js
index adb9f0384..12a9da121 100644
--- src/wp-includes/js/customize-preview.js
+++ src/wp-includes/js/customize-preview.js
@@ -87,12 +87,15 @@
 	};
 
 	/**
+	 * @memberOf wp.customize
+	 * @alias wp.customize.Preview
+	 *
 	 * @constructor
 	 * @augments wp.customize.Messenger
 	 * @augments wp.customize.Class
 	 * @mixes wp.customize.Events
 	 */
-	api.Preview = api.Messenger.extend({
+	api.Preview = api.Messenger.extend(/** @lends wp.customize.Preview.prototype */{
 		/**
 		 * @param {object} params  - Parameters to configure the messenger.
 		 * @param {object} options - Extend any instance parameter or method with this object.
diff --git src/wp-includes/js/customize-selective-refresh.js src/wp-includes/js/customize-selective-refresh.js
index 4c4fa0d9c..5bc17ed73 100644
--- src/wp-includes/js/customize-selective-refresh.js
+++ src/wp-includes/js/customize-selective-refresh.js
@@ -1,5 +1,6 @@
 /* global jQuery, JSON, _customizePartialRefreshExports, console */
 
+/** @namespace wp.customize.selectiveRefresh */
 wp.customize.selectiveRefresh = ( function( $, api ) {
 	'use strict';
 	var self, Partial, Placement;
@@ -24,6 +25,8 @@ wp.customize.selectiveRefresh = ( function( $, api ) {
 	 *
 	 * A partial provides a rendering of one or more settings according to a template.
 	 *
+	 * @memberOf wp.customize.selectiveRefresh
+	 *
 	 * @see PHP class WP_Customize_Partial.
 	 *
 	 * @class
@@ -39,7 +42,7 @@ wp.customize.selectiveRefresh = ( function( $, api ) {
 	 * @param {string} options.params.primarySetting   The ID for the primary setting the partial renders.
 	 * @param {bool}   options.params.fallbackRefresh  Whether to refresh the entire preview in case of a partial refresh failure.
 	 */
-	Partial = self.Partial = api.Class.extend({
+	Partial = self.Partial = api.Class.extend(/** @lends wp.customize.SelectiveRefresh.Partial.prototype */{
 
 		id: null,
 
@@ -508,11 +511,13 @@ wp.customize.selectiveRefresh = ( function( $, api ) {
 	 * It also may have information in relation to how a placement may have just changed.
 	 * The placement is conceptually similar to a DOM Range or MutationRecord.
 	 *
-	 * @class
+	 * @memberOf wp.customize.selectiveRefresh
+	 *
+	 * @class Placement
 	 * @augments wp.customize.Class
 	 * @since 4.5.0
 	 */
-	self.Placement = Placement = api.Class.extend({
+	self.Placement = Placement = api.Class.extend(/** @lends wp.customize.selectiveRefresh.prototype */{
 
 		/**
 		 * The partial with which the container is associated.
diff --git src/wp-includes/js/customize-views.js src/wp-includes/js/customize-views.js
index 29de08adc..786739f37 100644
--- src/wp-includes/js/customize-views.js
+++ src/wp-includes/js/customize-views.js
@@ -11,10 +11,13 @@
 	 *
 	 * Instantiate with model wp.customize.HeaderTool.currentHeader.
 	 *
+	 * @memberOf wp.customize.HeaderTool
+	 * @alias wp.customize.HeaderTool.CurrentView
+	 *
 	 * @constructor
 	 * @augments wp.Backbone.View
 	 */
-	api.HeaderTool.CurrentView = wp.Backbone.View.extend({
+	api.HeaderTool.CurrentView = wp.Backbone.View.extend(/** @lends wp.customize.HeaderTool.CurrentView.prototype */{
 		template: wp.template('header-current'),
 
 		initialize: function() {
@@ -50,10 +53,13 @@
 	 * Manually changes model wp.customize.HeaderTool.currentHeader via the
 	 * `select` method.
 	 *
+	 * @memberOf wp.customize.HeaderTool
+	 * @alias wp.customize.HeaderTool.ChoiceView
+	 *
 	 * @constructor
 	 * @augments wp.Backbone.View
 	 */
-	api.HeaderTool.ChoiceView = wp.Backbone.View.extend({
+	api.HeaderTool.ChoiceView = wp.Backbone.View.extend(/** @lends wp.customize.HeaderTool.ChoiceView.prototype */{
 		template: wp.template('header-choice'),
 
 		className: 'header-view',
@@ -125,10 +131,13 @@
 	 *
 	 * Takes a wp.customize.HeaderTool.ChoiceList.
 	 *
+	 * @memberOf wp.customize.HeaderTool
+	 * @alias wp.customize.HeaderTool.ChoiceListView
+	 *
 	 * @constructor
 	 * @augments wp.Backbone.View
 	 */
-	api.HeaderTool.ChoiceListView = wp.Backbone.View.extend({
+	api.HeaderTool.ChoiceListView = wp.Backbone.View.extend(/** @lends wp.customize.HeaderTool.ChoiceListView.prototype */{
 		initialize: function() {
 			this.listenTo(this.collection, 'add', this.addOne);
 			this.listenTo(this.collection, 'remove', this.render);
@@ -168,10 +177,13 @@
 	 * Aggregates wp.customize.HeaderTool.ChoiceList collections (or any
 	 * Backbone object, really) and acts as a bus to feed them events.
 	 *
+	 * @memberOf wp.customize.HeaderTool
+	 * @alias wp.customize.HeaderTool.CombinedList
+	 *
 	 * @constructor
 	 * @augments wp.Backbone.View
 	 */
-	api.HeaderTool.CombinedList = wp.Backbone.View.extend({
+	api.HeaderTool.CombinedList = wp.Backbone.View.extend(/** @lends wp.customize.HeaderTool.CombinedList.prototype */{
 		initialize: function(collections) {
 			this.collections = collections;
 			this.on('all', this.propagate, this);
diff --git src/wp-includes/js/heartbeat.js src/wp-includes/js/heartbeat.js
index 6c5e8d151..66902f892 100644
--- src/wp-includes/js/heartbeat.js
+++ src/wp-includes/js/heartbeat.js
@@ -742,7 +742,7 @@
 		};
 	};
 
-	// Ensure the global `wp` object exists.
+	/** @namespace wp */
 	window.wp = window.wp || {};
 	window.wp.heartbeat = new Heartbeat();
 
diff --git src/wp-includes/js/mce-view.js src/wp-includes/js/mce-view.js
index 397af6386..3100ab6e5 100644
--- src/wp-includes/js/mce-view.js
+++ src/wp-includes/js/mce-view.js
@@ -280,7 +280,7 @@
 
 	wp.mce.View.extend = Backbone.View.extend;
 
-	_.extend( wp.mce.View.prototype, {
+	_.extend( wp.mce.View.prototype, /** @lends wp.mce.View.prototype */{
 
 		/**
 		 * The content.
diff --git src/wp-includes/js/media-audiovideo.js src/wp-includes/js/media-audiovideo.js
index c71a478e0..dfddc03e6 100644
--- src/wp-includes/js/media-audiovideo.js
+++ src/wp-includes/js/media-audiovideo.js
@@ -216,20 +216,22 @@ media.view.AudioDetails = require( './views/audio-details.js' );
 media.view.VideoDetails = require( './views/video-details.js' );
 
 },{"./controllers/audio-details.js":2,"./controllers/video-details.js":3,"./models/post-media.js":4,"./views/audio-details.js":5,"./views/frame/audio-details.js":6,"./views/frame/media-details.js":7,"./views/frame/video-details.js":8,"./views/media-details.js":9,"./views/video-details.js":10}],2:[function(require,module,exports){
+var State = wp.media.controller.State,
+	l10n = wp.media.view.l10n,
+	AudioDetails;
+
 /**
  * wp.media.controller.AudioDetails
  *
  * The controller for the Audio Details state
  *
+ * @memberOf wp.media.controller
+ *
  * @class
  * @augments wp.media.controller.State
  * @augments Backbone.Model
  */
-var State = wp.media.controller.State,
-	l10n = wp.media.view.l10n,
-	AudioDetails;
-
-AudioDetails = State.extend({
+AudioDetails = State.extend(/** @lends wp.media.controller.AudioDetails.prototype */{
 	defaults: {
 		id: 'audio-details',
 		toolbar: 'audio-details',
@@ -254,6 +256,8 @@ module.exports = AudioDetails;
  *
  * The controller for the Video Details state
  *
+ * @memberOf wp.media.controller
+ *
  * @class
  * @augments wp.media.controller.State
  * @augments Backbone.Model
@@ -262,7 +266,7 @@ var State = wp.media.controller.State,
 	l10n = wp.media.view.l10n,
 	VideoDetails;
 
-VideoDetails = State.extend({
+VideoDetails = State.extend(/** @lends wp.media.controller.VideoDetails.prototype */{
 	defaults: {
 		id: 'video-details',
 		toolbar: 'video-details',
@@ -288,10 +292,12 @@ module.exports = VideoDetails;
  * Shared model class for audio and video. Updates the model after
  *   "Add Audio|Video Source" and "Replace Audio|Video" states return
  *
+ * @memberOf wp.media.model
+ *
  * @class
  * @augments Backbone.Model
  */
-var PostMedia = Backbone.Model.extend({
+var PostMedia = Backbone.Model.extend(/** @lends wp.media.model.PostMedia.prototype */{
 	initialize: function() {
 		this.attachment = false;
 	},
@@ -324,9 +330,14 @@ var PostMedia = Backbone.Model.extend({
 module.exports = PostMedia;
 
 },{}],5:[function(require,module,exports){
+var MediaDetails = wp.media.view.MediaDetails,
+	AudioDetails;
+
 /**
  * wp.media.view.AudioDetails
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.view.MediaDetails
  * @augments wp.media.view.Settings.AttachmentDisplay
@@ -335,10 +346,7 @@ module.exports = PostMedia;
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var MediaDetails = wp.media.view.MediaDetails,
-	AudioDetails;
-
-AudioDetails = MediaDetails.extend({
+AudioDetails = MediaDetails.extend(/** @lends wp.media.view.AudioDetails.prototype */{
 	className: 'audio-details',
 	template:  wp.template('audio-details'),
 
@@ -362,9 +370,17 @@ AudioDetails = MediaDetails.extend({
 module.exports = AudioDetails;
 
 },{}],6:[function(require,module,exports){
+var MediaDetails = wp.media.view.MediaFrame.MediaDetails,
+	MediaLibrary = wp.media.controller.MediaLibrary,
+
+	l10n = wp.media.view.l10n,
+	AudioDetails;
+
 /**
  * wp.media.view.MediaFrame.AudioDetails
  *
+ * @memberOf wp.media.view.MediaFrame
+ *
  * @class
  * @augments wp.media.view.MediaFrame.MediaDetails
  * @augments wp.media.view.MediaFrame.Select
@@ -375,13 +391,7 @@ module.exports = AudioDetails;
  * @augments Backbone.View
  * @mixes wp.media.controller.StateMachine
  */
-var MediaDetails = wp.media.view.MediaFrame.MediaDetails,
-	MediaLibrary = wp.media.controller.MediaLibrary,
-
-	l10n = wp.media.view.l10n,
-	AudioDetails;
-
-AudioDetails = MediaDetails.extend({
+AudioDetails = MediaDetails.extend(/** @lends wp.media.view.MediaFrame.AudioDetails.prototype */{
 	defaults: {
 		id:      'audio',
 		url:     '',
@@ -438,9 +448,15 @@ AudioDetails = MediaDetails.extend({
 module.exports = AudioDetails;
 
 },{}],7:[function(require,module,exports){
+var Select = wp.media.view.MediaFrame.Select,
+	l10n = wp.media.view.l10n,
+	MediaDetails;
+
 /**
  * wp.media.view.MediaFrame.MediaDetails
  *
+ * @memberOf wp.media.view.MediaFrame
+ *
  * @class
  * @augments wp.media.view.MediaFrame.Select
  * @augments wp.media.view.MediaFrame
@@ -450,11 +466,7 @@ module.exports = AudioDetails;
  * @augments Backbone.View
  * @mixes wp.media.controller.StateMachine
  */
-var Select = wp.media.view.MediaFrame.Select,
-	l10n = wp.media.view.l10n,
-	MediaDetails;
-
-MediaDetails = Select.extend({
+MediaDetails = Select.extend(/** @lends wp.media.view.MediaFrame.MediaDetails.prototype */{
 	defaults: {
 		id:      'media',
 		url:     '',
@@ -568,9 +580,16 @@ MediaDetails = Select.extend({
 module.exports = MediaDetails;
 
 },{}],8:[function(require,module,exports){
+var MediaDetails = wp.media.view.MediaFrame.MediaDetails,
+	MediaLibrary = wp.media.controller.MediaLibrary,
+	l10n = wp.media.view.l10n,
+	VideoDetails;
+
 /**
  * wp.media.view.MediaFrame.VideoDetails
  *
+ * @memberOf wp.media.view.MediaFrame
+ *
  * @class
  * @augments wp.media.view.MediaFrame.MediaDetails
  * @augments wp.media.view.MediaFrame.Select
@@ -581,12 +600,7 @@ module.exports = MediaDetails;
  * @augments Backbone.View
  * @mixes wp.media.controller.StateMachine
  */
-var MediaDetails = wp.media.view.MediaFrame.MediaDetails,
-	MediaLibrary = wp.media.controller.MediaLibrary,
-	l10n = wp.media.view.l10n,
-	VideoDetails;
-
-VideoDetails = MediaDetails.extend({
+VideoDetails = MediaDetails.extend(/** @lends wp.media.view.MediaFrame.VideoDetails.prototype */{
 	defaults: {
 		id:      'video',
 		url:     '',
@@ -704,10 +718,15 @@ module.exports = VideoDetails;
 
 },{}],9:[function(require,module,exports){
 /* global MediaElementPlayer */
+var AttachmentDisplay = wp.media.view.Settings.AttachmentDisplay,
+	$ = jQuery,
+	MediaDetails;
 
 /**
  * wp.media.view.MediaDetails
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.view.Settings.AttachmentDisplay
  * @augments wp.media.view.Settings
@@ -715,11 +734,7 @@ module.exports = VideoDetails;
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var AttachmentDisplay = wp.media.view.Settings.AttachmentDisplay,
-	$ = jQuery,
-	MediaDetails;
-
-MediaDetails = AttachmentDisplay.extend({
+MediaDetails = AttachmentDisplay.extend(/** @lends wp.media.view.MediaDetails.prototype */{
 	initialize: function() {
 		_.bindAll(this, 'success');
 		this.players = [];
@@ -791,9 +806,6 @@ MediaDetails = AttachmentDisplay.extend({
 		this.scriptXhr = false;
 	},
 
-	/**
-	 * @global MediaElementPlayer
-	 */
 	setPlayer : function() {
 		var src;
 
@@ -849,7 +861,7 @@ MediaDetails = AttachmentDisplay.extend({
 	resetFocus: function() {
 		this.$( '.embed-media-settings' ).scrollTop( 0 );
 	}
-}, {
+},/** @lends wp.media.view.MediaDetails */{
 	instances : 0,
 	/**
 	 * When multiple players in the DOM contain the same src, things get weird.
@@ -875,9 +887,14 @@ MediaDetails = AttachmentDisplay.extend({
 module.exports = MediaDetails;
 
 },{}],10:[function(require,module,exports){
+var MediaDetails = wp.media.view.MediaDetails,
+	VideoDetails;
+
 /**
  * wp.media.view.VideoDetails
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.view.MediaDetails
  * @augments wp.media.view.Settings.AttachmentDisplay
@@ -886,10 +903,7 @@ module.exports = MediaDetails;
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var MediaDetails = wp.media.view.MediaDetails,
-	VideoDetails;
-
-VideoDetails = MediaDetails.extend({
+VideoDetails = MediaDetails.extend(/** @lends wp.media.view.VideoDetails.prototype */{
 	className: 'video-details',
 	template:  wp.template('video-details'),
 
diff --git src/wp-includes/js/media-editor.js src/wp-includes/js/media-editor.js
index 3852543aa..c18180bdb 100644
--- src/wp-includes/js/media-editor.js
+++ src/wp-includes/js/media-editor.js
@@ -30,19 +30,13 @@
 		return attrs[ key ];
 	};
 
-	/**
-	 * wp.media.string
-	 * @namespace
-	 */
+	/** @namespace wp.media.string */
 	wp.media.string = {
 		/**
 		 * Joins the `props` and `attachment` objects,
 		 * outputting the proper object format based on the
 		 * attachment's type.
 		 *
-		 * @global wp.media.view.settings
-		 * @global getUserSetting()
-		 *
 		 * @param {Object} [props={}] Attachment details (align, link, size, etc).
 		 * @param {Object} attachment The attachment object, media version of Post.
 		 * @returns {Object} Joined props
@@ -109,8 +103,6 @@
 		/**
 		 * Create link markup that is suitable for passing to the editor
 		 *
-		 * @global wp.html.string
-		 *
 		 * @param {Object} props Attachment details (align, link, size, etc).
 		 * @param {Object} attachment The attachment object, media version of Post.
 		 * @returns {string} The link markup
@@ -159,9 +151,6 @@
 		 *
 		 * @access private
 		 *
-		 * @global wp.shortcode
-		 * @global wp.media.view.settings
-		 *
 		 * @param {string} type The shortcode tag name: 'audio' or 'video'.
 		 * @param {Object} props Attachment details (align, link, size, etc).
 		 * @param {Object} attachment The attachment object, media version of Post.
@@ -210,9 +199,6 @@
 		 * Create image markup, optionally with a link and/or wrapped in a caption shortcode,
 		 *  that is suitable for passing to the editor
 		 *
-		 * @global wp.html
-		 * @global wp.shortcode
-		 *
 		 * @param {Object} props Attachment details (align, link, size, etc).
 		 * @param {Object} attachment The attachment object, media version of Post.
 		 * @returns {string}
@@ -341,16 +327,19 @@
 		}
 	};
 
+	/**
+	 * @class wp.media.collection
+	 *
+	 * @param attributes
+	 */
 	wp.media.collection = function(attributes) {
 		var collections = {};
 
-		return _.extend( {
+		return _.extend(/** @lends wp.media.collection.prototype */{
 			coerce : wp.media.coerce,
 			/**
 			 * Retrieve attachments based on the properties of the passed shortcode
 			 *
-			 * @global wp.media.query
-			 *
 			 * @param {wp.shortcode} shortcode An instance of wp.shortcode().
 			 * @returns {wp.media.model.Attachments} A Backbone.Collection containing
 			 *      the media items belonging to a collection.
@@ -417,9 +406,6 @@
 			/**
 			 * Triggered when clicking 'Insert {label}' or 'Update {label}'
 			 *
-			 * @global wp.shortcode
-			 * @global wp.media.model.Attachments
-			 *
 			 * @param {wp.media.model.Attachments} attachments A Backbone.Collection containing
 			 *      the media items belonging to a collection.
 			 *      The query[ this.tag ] property is a Backbone.Model
@@ -488,10 +474,6 @@
 			 * Triggered when double-clicking a collection shortcode placeholder
 			 *   in the editor
 			 *
-			 * @global wp.shortcode
-			 * @global wp.media.model.Selection
-			 * @global wp.media.view.l10n
-			 *
 			 * @param {string} content Content that is searched for possible
 			 *    shortcode markup matching the passed tag name,
 			 *
@@ -609,16 +591,10 @@
 		}
 	});
 
-	/**
-	 * wp.media.featuredImage
-	 * @namespace
-	 */
 	wp.media.featuredImage = {
 		/**
 		 * Get the featured image post ID
 		 *
-		 * @global wp.media.view.settings
-		 *
 		 * @returns {wp.media.view.settings.post.featuredImageId|number}
 		 */
 		get: function() {
@@ -628,9 +604,6 @@
 		 * Set the featured image id, save the post thumbnail data and
 		 * set the HTML in the post meta box to the new featured image.
 		 *
-		 * @global wp.media.view.settings
-		 * @global wp.media.post
-		 *
 		 * @param {number} id The post ID of the featured image, or -1 to unset it.
 		 */
 		set: function( id ) {
@@ -660,9 +633,6 @@
 		/**
 		 * The Featured Image workflow
 		 *
-		 * @global wp.media.controller.FeaturedImage
-		 * @global wp.media.view.l10n
-		 *
 		 * @this wp.media.featuredImage
 		 *
 		 * @returns {wp.media.view.MediaFrame.Select} A media workflow.
@@ -705,8 +675,6 @@
 		 * 'select' callback for Featured Image workflow, triggered when
 		 *  the 'Set Featured Image' button is clicked in the media modal.
 		 *
-		 * @global wp.media.view.settings
-		 *
 		 * @this wp.media.controller.FeaturedImage
 		 */
 		select: function() {
@@ -723,8 +691,6 @@
 		 * the post thumbnail is clicked.
 		 *
 		 * Update the featured image id when the 'remove' link is clicked.
-		 *
-		 * @global wp.media.view.settings
 		 */
 		init: function() {
 			$('#postimagediv').on( 'click', '#set-post-thumbnail', function( event ) {
@@ -742,19 +708,11 @@
 
 	$( wp.media.featuredImage.init );
 
-	/**
-	 * wp.media.editor
-	 * @namespace
-	 */
+	/** @namespace wp.media.editor */
 	wp.media.editor = {
 		/**
 		 * Send content to the editor
 		 *
-		 * @global tinymce
-		 * @global QTags
-		 * @global wpActiveEditor
-		 * @global tb_remove() - Possibly overloaded by legacy plugins
-		 *
 		 * @param {string} html Content to send to the editor
 		 */
 		insert: function( html ) {
@@ -805,8 +763,6 @@
 		 * Setup 'workflow' and add to the 'workflows' cache. 'open' can
 		 *  subsequently be called upon it.
 		 *
-		 * @global wp.media.view.l10n
-		 *
 		 * @param {string} id A slug used to identify the workflow.
 		 * @param {Object} [options={}]
 		 *
@@ -914,9 +870,6 @@
 		/**
 		 * Determines the proper current workflow id
 		 *
-		 * @global wpActiveEditor
-		 * @global tinymce
-		 *
 		 * @param {string} [id=''] A slug used to identify the workflow.
 		 *
 		 * @returns {wpActiveEditor|string|tinymce.activeEditor.id}
@@ -962,17 +915,12 @@
 			id = this.id( id );
 			delete workflows[ id ];
 		},
-		/**
-		 * @namespace
-		 */
+		/** @namespace wp.media.editor.send */
 		send: {
 			/**
 			 * Called when sending an attachment to the editor
 			 *   from the medial modal.
 			 *
-			 * @global wp.media.view.settings
-			 * @global wp.media.post
-			 *
 			 * @param {Object} props Attachment details (align, link, size, etc).
 			 * @param {Object} attachment The attachment object, media version of Post.
 			 * @returns {Promise}
@@ -1028,8 +976,6 @@
 			/**
 			 * Called when 'Insert From URL' source is not an image. Example: YouTube url.
 			 *
-			 * @global wp.media.view.settings
-			 *
 			 * @param {Object} embed
 			 * @returns {Promise}
 			 */
@@ -1075,8 +1021,6 @@
 
 		/**
 		 * Bind click event for .insert-media using event delegation
-		 *
-		 * @global wp.media.view.l10n
 		 */
 		init: function() {
 			$(document.body)
diff --git src/wp-includes/js/media-grid.js src/wp-includes/js/media-grid.js
index b6128a375..6e35fb52a 100644
--- src/wp-includes/js/media-grid.js
+++ src/wp-includes/js/media-grid.js
@@ -1,17 +1,19 @@
 (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
+var l10n = wp.media.view.l10n,
+	EditAttachmentMetadata;
+
 /**
  * wp.media.controller.EditAttachmentMetadata
  *
  * A state for editing an attachment's metadata.
  *
+ * @memberOf wp.media.controller
+ *
  * @class
  * @augments wp.media.controller.State
  * @augments Backbone.Model
  */
-var l10n = wp.media.view.l10n,
-	EditAttachmentMetadata;
-
-EditAttachmentMetadata = wp.media.controller.State.extend({
+EditAttachmentMetadata = wp.media.controller.State.extend(/** @lends wp.media.controller.EditAttachmentMetadata.prototype */{
 	defaults: {
 		id:      'edit-attachment',
 		// Title string passed to the frame's title region view.
@@ -45,10 +47,12 @@ media.view.DeleteSelectedPermanentlyButton = require( './views/button/delete-sel
  *
  * A router for handling the browser history and application state.
  *
+ * @memberOf wp.media.view.MediaFrame.Manage
+ *
  * @class
  * @augments Backbone.Router
  */
-var Router = Backbone.Router.extend({
+var Router = Backbone.Router.extend(/** @lends wp.media.view.MediaFrame.Manage.Router.prototype */{
 	routes: {
 		'upload.php?item=:slug&mode=edit': 'editItem',
 		'upload.php?item=:slug':           'showItem',
@@ -107,12 +111,17 @@ var Router = Backbone.Router.extend({
 module.exports = Router;
 
 },{}],4:[function(require,module,exports){
+var Details = wp.media.view.Attachment.Details,
+	TwoColumn;
+
 /**
  * wp.media.view.Attachment.Details.TwoColumn
  *
  * A similar view to media.view.Attachment.Details
  * for use in the Edit Attachment modal.
  *
+ * @memberOf wp.media.view.Attachment.Details
+ *
  * @class
  * @augments wp.media.view.Attachment.Details
  * @augments wp.media.view.Attachment
@@ -120,10 +129,7 @@ module.exports = Router;
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var Details = wp.media.view.Attachment.Details,
-	TwoColumn;
-
-TwoColumn = Details.extend({
+TwoColumn = Details.extend(/** @lends wp.media.view.Attachment.Details.TowColumn.prototype */{
 	template: wp.template( 'attachment-details-two-column' ),
 
 	initialize: function() {
@@ -158,11 +164,17 @@ TwoColumn = Details.extend({
 module.exports = TwoColumn;
 
 },{}],5:[function(require,module,exports){
+var Button = wp.media.view.Button,
+	DeleteSelected = wp.media.view.DeleteSelectedButton,
+	DeleteSelectedPermanently;
+
 /**
  * wp.media.view.DeleteSelectedPermanentlyButton
  *
  * When MEDIA_TRASH is true, a button that handles bulk Delete Permanently logic
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.view.DeleteSelectedButton
  * @augments wp.media.view.Button
@@ -170,11 +182,7 @@ module.exports = TwoColumn;
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var Button = wp.media.view.Button,
-	DeleteSelected = wp.media.view.DeleteSelectedButton,
-	DeleteSelectedPermanently;
-
-DeleteSelectedPermanently = DeleteSelected.extend({
+DeleteSelectedPermanently = DeleteSelected.extend(/** @lends wp.media.view.DeleteSelectedPermanentlyButton.prototype */{
 	initialize: function() {
 		DeleteSelected.prototype.initialize.apply( this, arguments );
 		this.controller.on( 'select:activate', this.selectActivate, this );
@@ -205,22 +213,24 @@ DeleteSelectedPermanently = DeleteSelected.extend({
 module.exports = DeleteSelectedPermanently;
 
 },{}],6:[function(require,module,exports){
+var Button = wp.media.view.Button,
+	l10n = wp.media.view.l10n,
+	DeleteSelected;
+
 /**
  * wp.media.view.DeleteSelectedButton
  *
  * A button that handles bulk Delete/Trash logic
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.view.Button
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var Button = wp.media.view.Button,
-	l10n = wp.media.view.l10n,
-	DeleteSelected;
-
-DeleteSelected = Button.extend({
+DeleteSelected = Button.extend(/** @lends wp.media.view.DeleteSelectedButton.prototype */{
 	initialize: function() {
 		Button.prototype.initialize.apply( this, arguments );
 		if ( this.options.filters ) {
@@ -258,20 +268,23 @@ DeleteSelected = Button.extend({
 module.exports = DeleteSelected;
 
 },{}],7:[function(require,module,exports){
+
+var Button = wp.media.view.Button,
+	l10n = wp.media.view.l10n,
+	SelectModeToggle;
+
 /**
  * wp.media.view.SelectModeToggleButton
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.view.Button
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var Button = wp.media.view.Button,
-	l10n = wp.media.view.l10n,
-	SelectModeToggle;
-
-SelectModeToggle = Button.extend({
+SelectModeToggle = Button.extend(/** @lends wp.media.view.SelectModeToggle.prototype */{
 	initialize: function() {
 		_.defaults( this.options, {
 			size : ''
@@ -332,20 +345,22 @@ SelectModeToggle = Button.extend({
 module.exports = SelectModeToggle;
 
 },{}],8:[function(require,module,exports){
+var View = wp.media.View,
+	EditImage = wp.media.view.EditImage,
+	Details;
+
 /**
  * wp.media.view.EditImage.Details
  *
+ * @memberOf wp.media.view.EditImage
+ *
  * @class
  * @augments wp.media.view.EditImage
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var View = wp.media.View,
-	EditImage = wp.media.view.EditImage,
-	Details;
-
-Details = EditImage.extend({
+Details = EditImage.extend(/** @lends wp.media.view.EditImage.Details.prototype */{
 	initialize: function( options ) {
 		this.editor = window.imageEdit;
 		this.frame = options.frame;
@@ -367,6 +382,12 @@ Details = EditImage.extend({
 module.exports = Details;
 
 },{}],9:[function(require,module,exports){
+var Frame = wp.media.view.Frame,
+	MediaFrame = wp.media.view.MediaFrame,
+
+	$ = jQuery,
+	EditAttachments;
+
 /**
  * wp.media.view.MediaFrame.EditAttachments
  *
@@ -376,6 +397,8 @@ module.exports = Details;
  *
  * Requires an attachment model to be passed in the options hash under `model`.
  *
+ * @memberOf wp.media.view.MediaFrame
+ *
  * @class
  * @augments wp.media.view.Frame
  * @augments wp.media.View
@@ -383,13 +406,7 @@ module.exports = Details;
  * @augments Backbone.View
  * @mixes wp.media.controller.StateMachine
  */
-var Frame = wp.media.view.Frame,
-	MediaFrame = wp.media.view.MediaFrame,
-
-	$ = jQuery,
-	EditAttachments;
-
-EditAttachments = MediaFrame.extend({
+EditAttachments = MediaFrame.extend(/** @lends wp.media.view.MediaFrame.EditAttachments.prototype */{
 
 	className: 'edit-attachment-frame',
 	template:  wp.template( 'edit-attachment-frame' ),
@@ -627,6 +644,12 @@ EditAttachments = MediaFrame.extend({
 module.exports = EditAttachments;
 
 },{}],10:[function(require,module,exports){
+var MediaFrame = wp.media.view.MediaFrame,
+	Library = wp.media.controller.Library,
+
+	$ = Backbone.$,
+	Manage;
+
 /**
  * wp.media.view.MediaFrame.Manage
  *
@@ -634,6 +657,8 @@ module.exports = EditAttachments;
  *
  * Used in the media grid view.
  *
+ * @memberOf wp.media.view.MediaFrame
+ *
  * @class
  * @augments wp.media.view.MediaFrame
  * @augments wp.media.view.Frame
@@ -642,15 +667,9 @@ module.exports = EditAttachments;
  * @augments Backbone.View
  * @mixes wp.media.controller.StateMachine
  */
-var MediaFrame = wp.media.view.MediaFrame,
-	Library = wp.media.controller.Library,
-
-	$ = Backbone.$,
-	Manage;
-
-Manage = MediaFrame.extend({
+Manage = MediaFrame.extend(/** @lends wp.media.view.MediaFrame.Manage.prototype */{
 	/**
-	 * @global wp.Uploader
+	 * @constructs
 	 */
 	initialize: function() {
 		_.defaults( this.options, {
diff --git src/wp-includes/js/media-models.js src/wp-includes/js/media-models.js
index f5683a939..ba93f9722 100644
--- src/wp-includes/js/media-models.js
+++ src/wp-includes/js/media-models.js
@@ -2,6 +2,7 @@
 var $ = jQuery,
 	Attachment, Attachments, l10n, media;
 
+/** @namespace wp */
 window.wp = window.wp || {};
 
 /**
@@ -9,6 +10,9 @@ window.wp = window.wp || {};
  *
  * Handles the default media experience.
  *
+ * @alias wp.media
+ * @memberOf wp
+ *
  * @param  {object} attributes The properties passed to the main media controller.
  * @return {wp.media.view.MediaFrame} A media workflow.
  */
@@ -47,6 +51,11 @@ media = wp.media = function( attributes ) {
 	return frame;
 };
 
+/** @namespace wp.media */
+/** @namespace wp.media.model */
+/** @namespace wp.media.view */
+/** @namespace wp.media.controller */
+/** @namespace wp.media.frames */
 _.extend( media, { model: {}, view: {}, controller: {}, frames: {} });
 
 // Link any localized strings.
@@ -90,7 +99,7 @@ media.compare = function( a, b, ac, bc ) {
 	}
 };
 
-_.extend( media, {
+_.extend( media, /** @lends wp.media */{
 	/**
 	 * media.template( id )
 	 *
@@ -230,16 +239,18 @@ $(window).on('unload', function(){
 });
 
 },{"./models/attachment.js":2,"./models/attachments.js":3,"./models/post-image.js":4,"./models/query.js":5,"./models/selection.js":6}],2:[function(require,module,exports){
+var $ = Backbone.$,
+	Attachment;
+
 /**
  * wp.media.model.Attachment
  *
+ * @memberOf wp.media.model
+ *
  * @class
  * @augments Backbone.Model
  */
-var $ = Backbone.$,
-	Attachment;
-
-Attachment = Backbone.Model.extend({
+Attachment = Backbone.Model.extend(/** @lends wp.media.model.Attachment.prototype */{
 	/**
 	 * Triggered when attachment details change
 	 * Overrides Backbone.Model.sync
@@ -366,11 +377,12 @@ Attachment = Backbone.Model.extend({
 			model.set( model.parse( resp, xhr ), options );
 		});
 	}
-}, {
+},/** @lends wp.media.model.Attachment */{
 	/**
 	 * Create a new model on the static 'all' attachments collection and return it.
 	 *
 	 * @static
+	 *
 	 * @param {Object} attrs
 	 * @returns {wp.media.model.Attachment}
 	 */
@@ -407,6 +419,8 @@ module.exports = Attachment;
  * 'options.props.query = true', which will mirror the collection
  * to an Attachments Query collection - @see wp.media.model.Attachments.mirror().
  *
+ * @memberOf wp.media.model
+ *
  * @class
  * @augments Backbone.Collection
  *
@@ -420,7 +434,7 @@ module.exports = Attachment;
  * @param {string} [options.filters]
  *
  */
-var Attachments = Backbone.Collection.extend({
+var Attachments = Backbone.Collection.extend(/** @lends wp.media.model.Attachments.prototype */{
 	/**
 	 * @type {wp.media.model.Attachment}
 	 */
@@ -818,15 +832,13 @@ var Attachments = Backbone.Collection.extend({
 			attachments: attachments
 		});
 	}
-}, {
+},/** @lends wp.media.model.Attachments */{
 	/**
 	 * A function to compare two attachment models in an attachments collection.
 	 *
 	 * Used as the default comparator for instances of wp.media.model.Attachments
 	 * and its subclasses. @see wp.media.model.Attachments._changeOrderby().
 	 *
-	 * @static
-	 *
 	 * @param {Backbone.Model} a
 	 * @param {Backbone.Model} b
 	 * @param {Object} options
@@ -855,9 +867,7 @@ var Attachments = Backbone.Collection.extend({
 
 		return ( 'DESC' === order ) ? wp.media.compare( a, b, ac, bc ) : wp.media.compare( b, a, bc, ac );
 	},
-	/**
-	 * @namespace
-	 */
+	/** @namespace wp.media.model.Attachments.filters */
 	filters: {
 		/**
 		 * @static
@@ -952,13 +962,15 @@ module.exports = Attachments;
  *
  * Used in the embedded image attachment display settings modal - @see wp.media.view.MediaFrame.ImageDetails.
  *
+ * @memberOf wp.media.model
+ *
  * @class
  * @augments Backbone.Model
  *
  * @param {int} [attributes]               Initial model attributes.
  * @param {int} [attributes.attachment_id] ID of the attachment.
  **/
-var PostImage = Backbone.Model.extend({
+var PostImage = Backbone.Model.extend(/** @lends wp.media.model.PostImage.prototype */{
 
 	initialize: function( attributes ) {
 		var Attachment = wp.media.model.Attachment;
@@ -1099,6 +1111,9 @@ var PostImage = Backbone.Model.extend({
 module.exports = PostImage;
 
 },{}],5:[function(require,module,exports){
+var Attachments = wp.media.model.Attachments,
+	Query;
+
 /**
  * wp.media.model.Query
  *
@@ -1107,6 +1122,8 @@ module.exports = PostImage;
  * Note: Do NOT change this.args after the query has been initialized.
  *       Things will break.
  *
+ * @memberOf wp.media.model
+ *
  * @class
  * @augments wp.media.model.Attachments
  * @augments Backbone.Collection
@@ -1116,13 +1133,8 @@ module.exports = PostImage;
  * @param {object} [options.args]                Attachments query arguments.
  * @param {object} [options.args.posts_per_page]
  */
-var Attachments = wp.media.model.Attachments,
-	Query;
-
-Query = Attachments.extend({
+Query = Attachments.extend(/** @lends wp.media.model.Query.prototype */{
 	/**
-	 * @global wp.Uploader
-	 *
 	 * @param {array}  [models=[]]  Array of initial models to populate the collection.
 	 * @param {object} [options={}]
 	 */
@@ -1254,7 +1266,7 @@ Query = Attachments.extend({
 			return fallback.sync.apply( this, arguments );
 		}
 	}
-}, {
+}, /** @lends wp.media.model.Query */{
 	/**
 	 * @readonly
 	 */
@@ -1407,19 +1419,21 @@ Query = Attachments.extend({
 module.exports = Query;
 
 },{}],6:[function(require,module,exports){
+var Attachments = wp.media.model.Attachments,
+	Selection;
+
 /**
  * wp.media.model.Selection
  *
  * A selection of attachments.
  *
+ * @memberOf wp.media.model
+ *
  * @class
  * @augments wp.media.model.Attachments
  * @augments Backbone.Collection
  */
-var Attachments = wp.media.model.Attachments,
-	Selection;
-
-Selection = Attachments.extend({
+Selection = Attachments.extend(/** @lends wp.media.model.Selection.prototype */{
 	/**
 	 * Refresh the `single` model whenever the selection changes.
 	 * Binds `single` instead of using the context argument to ensure
diff --git src/wp-includes/js/media-views.js src/wp-includes/js/media-views.js
index 6d46229a9..383891c8e 100644
--- src/wp-includes/js/media-views.js
+++ src/wp-includes/js/media-views.js
@@ -1,9 +1,15 @@
 (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
+var Selection = wp.media.model.Selection,
+	Library = wp.media.controller.Library,
+	CollectionAdd;
+
 /**
  * wp.media.controller.CollectionAdd
  *
  * A state for adding attachments to a collection (e.g. video playlist).
  *
+ * @memberOf wp.media.controller
+ *
  * @class
  * @augments wp.media.controller.Library
  * @augments wp.media.controller.State
@@ -32,11 +38,7 @@
  * @param {string}                     attributes.type                   The collection's media type. (e.g. 'video').
  * @param {string}                     attributes.collectionType         The collection type. (e.g. 'playlist').
  */
-var Selection = wp.media.model.Selection,
-	Library = wp.media.controller.Library,
-	CollectionAdd;
-
-CollectionAdd = Library.extend({
+CollectionAdd = Library.extend(/** @lends wp.media.controller.CollectionAdd.prototype */{
 	defaults: _.defaults( {
 		// Selection defaults. @see media.model.Selection
 		multiple:      'add',
@@ -100,12 +102,19 @@ CollectionAdd = Library.extend({
 module.exports = CollectionAdd;
 
 },{}],2:[function(require,module,exports){
+var Library = wp.media.controller.Library,
+	l10n = wp.media.view.l10n,
+	$ = jQuery,
+	CollectionEdit;
+
 /**
  * wp.media.controller.CollectionEdit
  *
  * A state for editing a collection, which is used by audio and video playlists,
  * and can be used for other collections.
  *
+ * @memberOf wp.media.controller
+ *
  * @class
  * @augments wp.media.controller.Library
  * @augments wp.media.controller.State
@@ -135,12 +144,7 @@ module.exports = CollectionAdd;
  * @param {string}                     attributes.type                   The collection's media type. (e.g. 'video').
  * @param {string}                     attributes.collectionType         The collection type. (e.g. 'playlist').
  */
-var Library = wp.media.controller.Library,
-	l10n = wp.media.view.l10n,
-	$ = jQuery,
-	CollectionEdit;
-
-CollectionEdit = Library.extend({
+CollectionEdit = Library.extend(/** @lends wp.media.controller.CollectionEdit.prototype */{
 	defaults: {
 		multiple:         false,
 		sortable:         true,
@@ -262,19 +266,21 @@ CollectionEdit = Library.extend({
 module.exports = CollectionEdit;
 
 },{}],3:[function(require,module,exports){
+var l10n = wp.media.view.l10n,
+	Cropper;
+
 /**
  * wp.media.controller.Cropper
  *
  * A state for cropping an image.
  *
+ * @memberOf wp.media.controller
+ *
  * @class
  * @augments wp.media.controller.State
  * @augments Backbone.Model
  */
-var l10n = wp.media.view.l10n,
-	Cropper;
-
-Cropper = wp.media.controller.State.extend({
+Cropper = wp.media.controller.State.extend(/** @lends wp.media.controller.Cropper.prototype */{
 	defaults: {
 		id:          'cropper',
 		title:       l10n.cropImage,
@@ -384,9 +390,14 @@ Cropper = wp.media.controller.State.extend({
 module.exports = Cropper;
 
 },{}],4:[function(require,module,exports){
+var Controller = wp.media.controller,
+	CustomizeImageCropper;
+
 /**
  * wp.media.controller.CustomizeImageCropper
  *
+ * @memberOf wp.media.controller
+ *
  * A state for cropping an image.
  *
  * @class
@@ -394,10 +405,7 @@ module.exports = Cropper;
  * @augments wp.media.controller.State
  * @augments Backbone.Model
  */
-var Controller = wp.media.controller,
-	CustomizeImageCropper;
-
-CustomizeImageCropper = Controller.Cropper.extend({
+CustomizeImageCropper = Controller.Cropper.extend(/** @lends wp.media.controller.CustomizeImageCropper.prototype */{
 	doCrop: function( attachment ) {
 		var cropDetails = attachment.get( 'cropDetails' ),
 			control = this.get( 'control' ),
@@ -427,11 +435,16 @@ CustomizeImageCropper = Controller.Cropper.extend({
 module.exports = CustomizeImageCropper;
 
 },{}],5:[function(require,module,exports){
+var l10n = wp.media.view.l10n,
+	EditImage;
+
 /**
  * wp.media.controller.EditImage
  *
  * A state for editing (cropping, etc.) an image.
  *
+ * @memberOf wp.media.controller
+ *
  * @class
  * @augments wp.media.controller.State
  * @augments Backbone.Model
@@ -445,10 +458,7 @@ module.exports = CustomizeImageCropper;
  * @param {string}                    [attributes.menu=false]         Initial mode for the menu region.
  * @param {string}                    [attributes.url]                Unused. @todo Consider removal.
  */
-var l10n = wp.media.view.l10n,
-	EditImage;
-
-EditImage = wp.media.controller.State.extend({
+EditImage = wp.media.controller.State.extend(/** @lends wp.media.controller.EditImage.prototype */{
 	defaults: {
 		id:      'edit-image',
 		title:   l10n.editImage,
@@ -503,11 +513,17 @@ EditImage = wp.media.controller.State.extend({
 module.exports = EditImage;
 
 },{}],6:[function(require,module,exports){
+var l10n = wp.media.view.l10n,
+	$ = Backbone.$,
+	Embed;
+
 /**
  * wp.media.controller.Embed
  *
  * A state for embedding media from a URL.
  *
+ * @memberOf wp.media.controller
+ *
  * @class
  * @augments wp.media.controller.State
  * @augments Backbone.Model
@@ -524,11 +540,7 @@ module.exports = EditImage;
  * @param {string} [attributes.url]                   The embed URL.
  * @param {object} [attributes.metadata={}]           Properties of the embed, which will override attributes.url if set.
  */
-var l10n = wp.media.view.l10n,
-	$ = Backbone.$,
-	Embed;
-
-Embed = wp.media.controller.State.extend({
+Embed = wp.media.controller.State.extend(/** @lends wp.media.controller.Embed.prototype */{
 	defaults: {
 		id:       'embed',
 		title:    l10n.insertFromUrlTitle,
@@ -639,11 +651,18 @@ Embed = wp.media.controller.State.extend({
 module.exports = Embed;
 
 },{}],7:[function(require,module,exports){
+var Attachment = wp.media.model.Attachment,
+	Library = wp.media.controller.Library,
+	l10n = wp.media.view.l10n,
+	FeaturedImage;
+
 /**
  * wp.media.controller.FeaturedImage
  *
  * A state for selecting a featured image for a post.
  *
+ * @memberOf wp.media.controller
+ *
  * @class
  * @augments wp.media.controller.Library
  * @augments wp.media.controller.State
@@ -670,12 +689,7 @@ module.exports = Embed;
  * @param {boolean}                    [attributes.contentUserSetting=true]  Whether the content region's mode should be set and persisted per user.
  * @param {boolean}                    [attributes.syncSelection=true]       Whether the Attachments selection should be persisted from the last state.
  */
-var Attachment = wp.media.model.Attachment,
-	Library = wp.media.controller.Library,
-	l10n = wp.media.view.l10n,
-	FeaturedImage;
-
-FeaturedImage = Library.extend({
+FeaturedImage = Library.extend(/** @lends wp.media.controller.FeaturedImage.prototype */{
 	defaults: _.defaults({
 		id:            'featured-image',
 		title:         l10n.setFeaturedImageTitle,
@@ -761,11 +775,18 @@ FeaturedImage = Library.extend({
 module.exports = FeaturedImage;
 
 },{}],8:[function(require,module,exports){
+var Selection = wp.media.model.Selection,
+	Library = wp.media.controller.Library,
+	l10n = wp.media.view.l10n,
+	GalleryAdd;
+
 /**
  * wp.media.controller.GalleryAdd
  *
  * A state for selecting more images to add to a gallery.
  *
+ * @memberOf wp.media.controller
+ *
  * @class
  * @augments wp.media.controller.Library
  * @augments wp.media.controller.State
@@ -792,12 +813,7 @@ module.exports = FeaturedImage;
  * @param {boolean}                    [attributes.syncSelection=false]     Whether the Attachments selection should be persisted from the last state.
  *                                                                          Defaults to false because for this state, because the library of the Edit Gallery state is the selection.
  */
-var Selection = wp.media.model.Selection,
-	Library = wp.media.controller.Library,
-	l10n = wp.media.view.l10n,
-	GalleryAdd;
-
-GalleryAdd = Library.extend({
+GalleryAdd = Library.extend(/** @lends wp.media.controller.GalleryAdd.prototype */{
 	defaults: _.defaults({
 		id:            'gallery-library',
 		title:         l10n.addToGalleryTitle,
@@ -852,11 +868,17 @@ GalleryAdd = Library.extend({
 module.exports = GalleryAdd;
 
 },{}],9:[function(require,module,exports){
+var Library = wp.media.controller.Library,
+	l10n = wp.media.view.l10n,
+	GalleryEdit;
+
 /**
  * wp.media.controller.GalleryEdit
  *
  * A state for editing a gallery's images and settings.
  *
+ * @memberOf wp.media.controller
+ *
  * @class
  * @augments wp.media.controller.Library
  * @augments wp.media.controller.State
@@ -884,11 +906,7 @@ module.exports = GalleryAdd;
  * @param {view}                       [attributes.AttachmentView]        The single `Attachment` view to be used in the `Attachments`.
  *                                                                        If none supplied, defaults to wp.media.view.Attachment.EditLibrary.
  */
-var Library = wp.media.controller.Library,
-	l10n = wp.media.view.l10n,
-	GalleryEdit;
-
-GalleryEdit = Library.extend({
+GalleryEdit = Library.extend(/** @lends wp.media.controller.GalleryEdit.prototype */{
 	defaults: {
 		id:               'gallery-edit',
 		title:            l10n.editGalleryTitle,
@@ -994,12 +1012,19 @@ GalleryEdit = Library.extend({
 module.exports = GalleryEdit;
 
 },{}],10:[function(require,module,exports){
+var State = wp.media.controller.State,
+	Library = wp.media.controller.Library,
+	l10n = wp.media.view.l10n,
+	ImageDetails;
+
 /**
  * wp.media.controller.ImageDetails
  *
  * A state for editing the attachment display settings of an image that's been
  * inserted into the editor.
  *
+ * @memberOf wp.media.controller
+ *
  * @class
  * @augments wp.media.controller.State
  * @augments Backbone.Model
@@ -1018,12 +1043,7 @@ module.exports = GalleryEdit;
  * @todo This state inherits some defaults from media.controller.Library.prototype.defaults,
  *       however this may not do anything.
  */
-var State = wp.media.controller.State,
-	Library = wp.media.controller.Library,
-	l10n = wp.media.view.l10n,
-	ImageDetails;
-
-ImageDetails = State.extend({
+ImageDetails = State.extend(/** @lends wp.media.controller.ImageDetails.prototype */{
 	defaults: _.defaults({
 		id:       'image-details',
 		title:    l10n.imageDetailsTitle,
@@ -1056,11 +1076,18 @@ ImageDetails = State.extend({
 module.exports = ImageDetails;
 
 },{}],11:[function(require,module,exports){
+var l10n = wp.media.view.l10n,
+	getUserSetting = window.getUserSetting,
+	setUserSetting = window.setUserSetting,
+	Library;
+
 /**
  * wp.media.controller.Library
  *
  * A state for choosing an attachment or group of attachments from the media library.
  *
+ * @memberOf wp.media.controller
+ *
  * @class
  * @augments wp.media.controller.State
  * @augments Backbone.Model
@@ -1090,12 +1117,7 @@ module.exports = ImageDetails;
  * @param {boolean}                         [attributes.contentUserSetting=true] Whether the content region's mode should be set and persisted per user.
  * @param {boolean}                         [attributes.syncSelection=true]      Whether the Attachments selection should be persisted from the last state.
  */
-var l10n = wp.media.view.l10n,
-	getUserSetting = window.getUserSetting,
-	setUserSetting = window.setUserSetting,
-	Library;
-
-Library = wp.media.controller.State.extend({
+Library = wp.media.controller.State.extend(/** @lends wp.media.controller.Library.prototype */{
 	defaults: {
 		id:                 'library',
 		title:              l10n.mediaLibraryTitle,
@@ -1352,6 +1374,8 @@ module.exports = Library;
 /**
  * wp.media.controller.MediaLibrary
  *
+ * @memberOf wp.media.controller
+ *
  * @class
  * @augments wp.media.controller.Library
  * @augments wp.media.controller.State
@@ -1360,7 +1384,7 @@ module.exports = Library;
 var Library = wp.media.controller.Library,
 	MediaLibrary;
 
-MediaLibrary = Library.extend({
+MediaLibrary = Library.extend(/** @lends wp.media.controller.MediaLibrary.prototype */{
 	defaults: _.defaults({
 		// Attachments browser defaults. @see media.view.AttachmentsBrowser
 		filterable:      'uploaded',
@@ -1412,6 +1436,8 @@ module.exports = MediaLibrary;
  * 'browse' mode t be activated on the 'content' view and then fills the region
  * with an AttachmentsBrowser view.
  *
+ * @memberOf wp.media.controller
+ *
  * @class
  *
  * @param {object}        options          Options hash for the region.
@@ -1426,7 +1452,7 @@ var Region = function( options ) {
 // Use Backbone's self-propagating `extend` inheritance method.
 Region.extend = Backbone.Model.extend;
 
-_.extend( Region.prototype, {
+_.extend( Region.prototype,/** @lends wp.media.controller.Region.prototype */{
 	/**
 	 * Activate a mode.
 	 *
@@ -1434,10 +1460,8 @@ _.extend( Region.prototype, {
 	 *
 	 * @param {string} mode
 	 *
-	 * @fires this.view#{this.id}:activate:{this._mode}
-	 * @fires this.view#{this.id}:activate
-	 * @fires this.view#{this.id}:deactivate:{this._mode}
-	 * @fires this.view#{this.id}:deactivate
+	 * @fires Region#activate
+	 * @fires Region#deactivate
 	 *
 	 * @returns {wp.media.controller.Region} Returns itself to allow chaining.
 	 */
@@ -1453,8 +1477,7 @@ _.extend( Region.prototype, {
 		/**
 		 * Region mode deactivation event.
 		 *
-		 * @event this.view#{this.id}:deactivate:{this._mode}
-		 * @event this.view#{this.id}:deactivate
+		 * @event wp.media.controller.Region#deactivate
 		 */
 		this.trigger('deactivate');
 
@@ -1464,8 +1487,7 @@ _.extend( Region.prototype, {
 		/**
 		 * Region mode activation event.
 		 *
-		 * @event this.view#{this.id}:activate:{this._mode}
-		 * @event this.view#{this.id}:activate
+		 * @event wp.media.controller.Region#activate
 		 */
 		this.trigger('activate');
 		return this;
@@ -1477,10 +1499,8 @@ _.extend( Region.prototype, {
 	 *
 	 * @param {string} mode
 	 *
-	 * @fires this.view#{this.id}:create:{this._mode}
-	 * @fires this.view#{this.id}:create
-	 * @fires this.view#{this.id}:render:{this._mode}
-	 * @fires this.view#{this.id}:render
+	 * @fires Region#create
+	 * @fires Region#render
 	 *
 	 * @returns {wp.media.controller.Region} Returns itself to allow chaining
 	 */
@@ -1498,8 +1518,9 @@ _.extend( Region.prototype, {
 		 *
 		 * Region view creation takes place in an event callback on the frame.
 		 *
-		 * @event this.view#{this.id}:create:{this._mode}
-		 * @event this.view#{this.id}:create
+		 * @event wp.media.controller.Region#create
+		 * @type {object}
+		 * @property {object} view
 		 */
 		this.trigger( 'create', set );
 		view = set.view;
@@ -1509,8 +1530,8 @@ _.extend( Region.prototype, {
 		 *
 		 * Region view creation takes place in an event callback on the frame.
 		 *
-		 * @event this.view#{this.id}:create:{this._mode}
-		 * @event this.view#{this.id}:create
+		 * @event wp.media.controller.Region#render
+		 * @type {object}
 		 */
 		this.trigger( 'render', view );
 		if ( view ) {
@@ -1578,11 +1599,17 @@ _.extend( Region.prototype, {
 module.exports = Region;
 
 },{}],14:[function(require,module,exports){
+var Library = wp.media.controller.Library,
+	l10n = wp.media.view.l10n,
+	ReplaceImage;
+
 /**
  * wp.media.controller.ReplaceImage
  *
  * A state for replacing an image.
  *
+ * @memberOf wp.media.controller
+ *
  * @class
  * @augments wp.media.controller.Library
  * @augments wp.media.controller.State
@@ -1609,11 +1636,7 @@ module.exports = Region;
  * @param {boolean}                    [attributes.contentUserSetting=true] Whether the content region's mode should be set and persisted per user.
  * @param {boolean}                    [attributes.syncSelection=true]      Whether the Attachments selection should be persisted from the last state.
  */
-var Library = wp.media.controller.Library,
-	l10n = wp.media.view.l10n,
-	ReplaceImage;
-
-ReplaceImage = Library.extend({
+ReplaceImage = Library.extend(/** @lends wp.media.controller.ReplaceImage.prototype */{
 	defaults: _.defaults({
 		id:            'replace-image',
 		title:         l10n.replaceImageTitle,
@@ -1686,20 +1709,22 @@ ReplaceImage = Library.extend({
 module.exports = ReplaceImage;
 
 },{}],15:[function(require,module,exports){
+var Controller = wp.media.controller,
+	SiteIconCropper;
+
 /**
  * wp.media.controller.SiteIconCropper
  *
  * A state for cropping a Site Icon.
  *
+ * @memberOf wp.media.controller
+ *
  * @class
  * @augments wp.media.controller.Cropper
  * @augments wp.media.controller.State
  * @augments Backbone.Model
  */
-var Controller = wp.media.controller,
-	SiteIconCropper;
-
-SiteIconCropper = Controller.Cropper.extend({
+SiteIconCropper = Controller.Cropper.extend(/** @lends wp.media.controller.SiteIconCropper.prototype */{
 	activate: function() {
 		this.frame.on( 'content:create:crop', this.createCropContent, this );
 		this.frame.on( 'close', this.removeCropper, this );
@@ -1743,6 +1768,8 @@ module.exports = SiteIconCropper;
  *
  * States are stored as models in a Backbone collection.
  *
+ * @memberOf wp.media.controller
+ *
  * @since 3.5.0
  *
  * @class
@@ -1760,7 +1787,7 @@ var StateMachine = function( states ) {
 // Use Backbone's self-propagating `extend` inheritance method.
 StateMachine.extend = Backbone.Model.extend;
 
-_.extend( StateMachine.prototype, Backbone.Events, {
+_.extend( StateMachine.prototype, Backbone.Events,/** @lends wp.media.controller.StateMachine.prototype */{
 	/**
 	 * Fetch a state.
 	 *
@@ -1844,6 +1871,21 @@ _.extend( StateMachine.prototype, Backbone.Events, {
 // Map all event binding and triggering on a StateMachine to its `states` collection.
 _.each([ 'on', 'off', 'trigger' ], function( method ) {
 	/**
+	 * @function on
+	 * @memberOf wp.media.controller.StateMachine
+	 * @instance
+	 * @returns {wp.media.controller.StateMachine} Returns itself to allow chaining.
+	 */
+	/**
+	 * @function off
+	 * @memberOf wp.media.controller.StateMachine
+	 * @instance
+	 * @returns {wp.media.controller.StateMachine} Returns itself to allow chaining.
+	 */
+	/**
+	 * @function trigger
+	 * @memberOf wp.media.controller.StateMachine
+	 * @instance
 	 * @returns {wp.media.controller.StateMachine} Returns itself to allow chaining.
 	 */
 	StateMachine.prototype[ method ] = function() {
@@ -1873,10 +1915,12 @@ module.exports = StateMachine;
  *     'reset'      is not triggered automatically. It should be invoked by the
  *                  proper controller to reset the state to its default.
  *
+ * @memberOf wp.media.controller
+ *
  * @class
  * @augments Backbone.Model
  */
-var State = Backbone.Model.extend({
+var State = Backbone.Model.extend(/** @lends wp.media.controller.State.prototype */{
 	/**
 	 * Constructor.
 	 *
@@ -2108,6 +2152,8 @@ module.exports = State;
  * Allows for selecting multiple images in the Insert Media workflow, and then
  * switching to the Insert Gallery workflow while preserving the attachments selection.
  *
+ * @memberOf wp.media
+ *
  * @mixin
  */
 var selectionSync = {
@@ -2317,20 +2363,22 @@ media.view.EditImage = require( './views/edit-image.js' );
 media.view.Spinner = require( './views/spinner.js' );
 
 },{"./controllers/collection-add.js":1,"./controllers/collection-edit.js":2,"./controllers/cropper.js":3,"./controllers/customize-image-cropper.js":4,"./controllers/edit-image.js":5,"./controllers/embed.js":6,"./controllers/featured-image.js":7,"./controllers/gallery-add.js":8,"./controllers/gallery-edit.js":9,"./controllers/image-details.js":10,"./controllers/library.js":11,"./controllers/media-library.js":12,"./controllers/region.js":13,"./controllers/replace-image.js":14,"./controllers/site-icon-cropper.js":15,"./controllers/state-machine.js":16,"./controllers/state.js":17,"./utils/selection-sync.js":18,"./views/attachment-compat.js":20,"./views/attachment-filters.js":21,"./views/attachment-filters/all.js":22,"./views/attachment-filters/date.js":23,"./views/attachment-filters/uploaded.js":24,"./views/attachment.js":25,"./views/attachment/details.js":26,"./views/attachment/edit-library.js":27,"./views/attachment/edit-selection.js":28,"./views/attachment/library.js":29,"./views/attachment/selection.js":30,"./views/attachments.js":31,"./views/attachments/browser.js":32,"./views/attachments/selection.js":33,"./views/button-group.js":34,"./views/button.js":35,"./views/cropper.js":36,"./views/edit-image.js":37,"./views/embed.js":38,"./views/embed/image.js":39,"./views/embed/link.js":40,"./views/embed/url.js":41,"./views/focus-manager.js":42,"./views/frame.js":43,"./views/frame/image-details.js":44,"./views/frame/post.js":45,"./views/frame/select.js":46,"./views/iframe.js":47,"./views/image-details.js":48,"./views/label.js":49,"./views/media-frame.js":50,"./views/menu-item.js":51,"./views/menu.js":52,"./views/modal.js":53,"./views/priority-list.js":54,"./views/router-item.js":55,"./views/router.js":56,"./views/search.js":57,"./views/selection.js":58,"./views/settings.js":59,"./views/settings/attachment-display.js":60,"./views/settings/gallery.js":61,"./views/settings/playlist.js":62,"./views/sidebar.js":63,"./views/site-icon-cropper.js":64,"./views/site-icon-preview.js":65,"./views/spinner.js":66,"./views/toolbar.js":67,"./views/toolbar/embed.js":68,"./views/toolbar/select.js":69,"./views/uploader/editor.js":70,"./views/uploader/inline.js":71,"./views/uploader/status-error.js":72,"./views/uploader/status.js":73,"./views/uploader/window.js":74,"./views/view.js":75}],20:[function(require,module,exports){
+var View = wp.media.View,
+	AttachmentCompat;
+
 /**
  * wp.media.view.AttachmentCompat
  *
  * A view to display fields added via the `attachment_fields_to_edit` filter.
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var View = wp.media.View,
-	AttachmentCompat;
-
-AttachmentCompat = View.extend({
+AttachmentCompat = View.extend(/** @lends wp.media.view.AttachmentCompat.prototype */{
 	tagName:   'form',
 	className: 'compat-item',
 
@@ -2402,18 +2450,20 @@ AttachmentCompat = View.extend({
 module.exports = AttachmentCompat;
 
 },{}],21:[function(require,module,exports){
+var $ = jQuery,
+	AttachmentFilters;
+
 /**
  * wp.media.view.AttachmentFilters
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var $ = jQuery,
-	AttachmentFilters;
-
-AttachmentFilters = wp.media.View.extend({
+AttachmentFilters = wp.media.View.extend(/** @lends wp.media.view.AttachmentFilters.prototype */{
 	tagName:   'select',
 	className: 'attachment-filters',
 	id:        'media-attachment-filters',
@@ -2479,19 +2529,21 @@ AttachmentFilters = wp.media.View.extend({
 module.exports = AttachmentFilters;
 
 },{}],22:[function(require,module,exports){
+var l10n = wp.media.view.l10n,
+	All;
+
 /**
  * wp.media.view.AttachmentFilters.All
  *
+ * @memberOf wp.media.view.AttachmentFilters
+ *
  * @class
  * @augments wp.media.view.AttachmentFilters
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var l10n = wp.media.view.l10n,
-	All;
-
-All = wp.media.view.AttachmentFilters.extend({
+All = wp.media.view.AttachmentFilters.extend(/** @lends wp.media.view.AttachmentFilters.All.prototype */{
 	createFilters: function() {
 		var filters = {};
 
@@ -2569,19 +2621,21 @@ All = wp.media.view.AttachmentFilters.extend({
 module.exports = All;
 
 },{}],23:[function(require,module,exports){
+var l10n = wp.media.view.l10n,
+	DateFilter;
+
 /**
  * A filter dropdown for month/dates.
  *
+ * @memberOf wp.media.view.AttachmentFilters
+ *
  * @class
  * @augments wp.media.view.AttachmentFilters
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var l10n = wp.media.view.l10n,
-	DateFilter;
-
-DateFilter = wp.media.view.AttachmentFilters.extend({
+DateFilter = wp.media.view.AttachmentFilters.extend(/** @lends wp.media.view.AttachmentFilters.Date.prototype */{
 	id: 'media-attachment-date-filters',
 
 	createFilters: function() {
@@ -2610,19 +2664,21 @@ DateFilter = wp.media.view.AttachmentFilters.extend({
 module.exports = DateFilter;
 
 },{}],24:[function(require,module,exports){
+var l10n = wp.media.view.l10n,
+	Uploaded;
+
 /**
  * wp.media.view.AttachmentFilters.Uploaded
  *
+ * @memberOf wp.media.view.AttachmentFilters
+ *
  * @class
  * @augments wp.media.view.AttachmentFilters
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var l10n = wp.media.view.l10n,
-	Uploaded;
-
-Uploaded = wp.media.view.AttachmentFilters.extend({
+Uploaded = wp.media.view.AttachmentFilters.extend(/** @lends wp.media.view.AttachmentFilters.Uploaded.prototype */{
 	createFilters: function() {
 		var type = this.model.get('type'),
 			types = wp.media.view.settings.mimeTypes,
@@ -2669,19 +2725,21 @@ Uploaded = wp.media.view.AttachmentFilters.extend({
 module.exports = Uploaded;
 
 },{}],25:[function(require,module,exports){
+var View = wp.media.View,
+	$ = jQuery,
+	Attachment;
+
 /**
  * wp.media.view.Attachment
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var View = wp.media.View,
-	$ = jQuery,
-	Attachment;
-
-Attachment = View.extend({
+Attachment = View.extend(/** @lends wp.media.view.Attachment.prototype */{
 	tagName:   'li',
 	className: 'attachment',
 	template:  wp.template('attachment'),
@@ -3189,6 +3247,37 @@ _.each({
 	album:   '_syncAlbum'
 }, function( method, setting ) {
 	/**
+	 * @function _syncCaption
+	 * @memberOf wp.media.view.Attachment
+	 * @instance
+	 *
+	 * @param {Backbone.Model} model
+	 * @param {string} value
+	 * @returns {wp.media.view.Attachment} Returns itself to allow chaining
+	 */
+	/**
+	 * @function _syncTitle
+	 * @memberOf wp.media.view.Attachment
+	 * @instance
+	 *
+	 * @param {Backbone.Model} model
+	 * @param {string} value
+	 * @returns {wp.media.view.Attachment} Returns itself to allow chaining
+	 */
+	/**
+	 * @function _syncArtist
+	 * @memberOf wp.media.view.Attachment
+	 * @instance
+	 *
+	 * @param {Backbone.Model} model
+	 * @param {string} value
+	 * @returns {wp.media.view.Attachment} Returns itself to allow chaining
+	 */
+	/**
+	 * @function _syncAlbum
+	 * @memberOf wp.media.view.Attachment
+	 * @instance
+	 *
 	 * @param {Backbone.Model} model
 	 * @param {string} value
 	 * @returns {wp.media.view.Attachment} Returns itself to allow chaining
@@ -3215,20 +3304,22 @@ _.each({
 module.exports = Attachment;
 
 },{}],26:[function(require,module,exports){
+var Attachment = wp.media.view.Attachment,
+	l10n = wp.media.view.l10n,
+	Details;
+
 /**
  * wp.media.view.Attachment.Details
  *
+ * @memberOf wp.media.view.Attachment
+ *
  * @class
  * @augments wp.media.view.Attachment
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var Attachment = wp.media.view.Attachment,
-	l10n = wp.media.view.l10n,
-	Details;
-
-Details = Attachment.extend({
+Details = Attachment.extend(/** @lends wp.media.view.Attachment.Details.prototype */{
 	tagName:   'div',
 	className: 'attachment-details',
 	template:  wp.template('attachment-details'),
@@ -3356,13 +3447,15 @@ module.exports = Details;
 /**
  * wp.media.view.Attachment.EditLibrary
  *
+ * @memberOf wp.media.view.Attachment
+ *
  * @class
  * @augments wp.media.view.Attachment
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var EditLibrary = wp.media.view.Attachment.extend({
+var EditLibrary = wp.media.view.Attachment.extend(/** @lends wp.media.view.Attachment.EditLibrary.prototype */{
 	buttons: {
 		close: true
 	}
@@ -3372,7 +3465,9 @@ module.exports = EditLibrary;
 
 },{}],28:[function(require,module,exports){
 /**
- * wp.media.view.Attachments.EditSelection
+ * wp.media.view.Attachment.EditSelection
+ *
+ * @memberOf wp.media.view.Attachment
  *
  * @class
  * @augments wp.media.view.Attachment.Selection
@@ -3381,7 +3476,7 @@ module.exports = EditLibrary;
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var EditSelection = wp.media.view.Attachment.Selection.extend({
+var EditSelection = wp.media.view.Attachment.Selection.extend(/** @lends wp.media.view.Attachment.EditSelection.prototype */{
 	buttons: {
 		close: true
 	}
@@ -3393,13 +3488,15 @@ module.exports = EditSelection;
 /**
  * wp.media.view.Attachment.Library
  *
+ * @memberOf wp.media.view.Attachment
+ *
  * @class
  * @augments wp.media.view.Attachment
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var Library = wp.media.view.Attachment.extend({
+var Library = wp.media.view.Attachment.extend(/** @lends wp.media.view.Attachment.Library.prototype */{
 	buttons: {
 		check: true
 	}
@@ -3411,13 +3508,15 @@ module.exports = Library;
 /**
  * wp.media.view.Attachment.Selection
  *
+ * @memberOf wp.media.view.Attachment
+ *
  * @class
  * @augments wp.media.view.Attachment
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var Selection = wp.media.view.Attachment.extend({
+var Selection = wp.media.view.Attachment.extend(/** @lends wp.media.view.Attachment.Selection.prototype */{
 	className: 'attachment selection',
 
 	// On click, just select the model, instead of removing the model from
@@ -3430,19 +3529,21 @@ var Selection = wp.media.view.Attachment.extend({
 module.exports = Selection;
 
 },{}],31:[function(require,module,exports){
+var View = wp.media.View,
+	$ = jQuery,
+	Attachments;
+
 /**
  * wp.media.view.Attachments
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var View = wp.media.View,
-	$ = jQuery,
-	Attachments;
-
-Attachments = View.extend({
+Attachments = View.extend(/** @lends wp.media.view.Attachments.prototype */{
 	tagName:   'ul',
 	className: 'attachments',
 
@@ -3729,9 +3830,17 @@ Attachments = View.extend({
 module.exports = Attachments;
 
 },{}],32:[function(require,module,exports){
+var View = wp.media.View,
+	mediaTrash = wp.media.view.settings.mediaTrash,
+	l10n = wp.media.view.l10n,
+	$ = jQuery,
+	AttachmentsBrowser;
+
 /**
  * wp.media.view.AttachmentsBrowser
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
@@ -3749,13 +3858,7 @@ module.exports = Attachments;
  * @param {boolean|string} [options.sidebar=true]  Whether to create a sidebar for the browser.
  *                                                 Accepts true, false, and 'errors'.
  */
-var View = wp.media.View,
-	mediaTrash = wp.media.view.settings.mediaTrash,
-	l10n = wp.media.view.l10n,
-	$ = jQuery,
-	AttachmentsBrowser;
-
-AttachmentsBrowser = View.extend({
+AttachmentsBrowser = View.extend(/** @lends wp.media.view.AttachmentsBrowser.prototype */{
 	tagName:   'div',
 	className: 'attachments-browser',
 
@@ -4205,19 +4308,21 @@ AttachmentsBrowser = View.extend({
 module.exports = AttachmentsBrowser;
 
 },{}],33:[function(require,module,exports){
+var Attachments = wp.media.view.Attachments,
+	Selection;
+
 /**
  * wp.media.view.Attachments.Selection
  *
+ * @memberOf wp.media.view.Attachments
+ *
  * @class
  * @augments wp.media.view.Attachments
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var Attachments = wp.media.view.Attachments,
-	Selection;
-
-Selection = Attachments.extend({
+Selection = Attachments.extend(/** @lends wp.media.view.Attachments.Selection.prototype */{
 	events: {},
 	initialize: function() {
 		_.defaults( this.options, {
@@ -4235,18 +4340,20 @@ Selection = Attachments.extend({
 module.exports = Selection;
 
 },{}],34:[function(require,module,exports){
+var $ = Backbone.$,
+	ButtonGroup;
+
 /**
  * wp.media.view.ButtonGroup
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var $ = Backbone.$,
-	ButtonGroup;
-
-ButtonGroup = wp.media.View.extend({
+ButtonGroup = wp.media.View.extend(/** @lends wp.media.view.ButtonGroup.prototype */{
 	tagName:   'div',
 	className: 'button-group button-large media-button-group',
 
@@ -4284,12 +4391,14 @@ module.exports = ButtonGroup;
 /**
  * wp.media.view.Button
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var Button = wp.media.View.extend({
+var Button = wp.media.View.extend(/** @lends wp.media.view.Button.prototype */{
 	tagName:    'button',
 	className:  'media-button',
 	attributes: { type: 'button' },
@@ -4367,6 +4476,12 @@ var Button = wp.media.View.extend({
 module.exports = Button;
 
 },{}],36:[function(require,module,exports){
+var View = wp.media.View,
+	UploaderStatus = wp.media.view.UploaderStatus,
+	l10n = wp.media.view.l10n,
+	$ = jQuery,
+	Cropper;
+
 /**
  * wp.media.view.Cropper
  *
@@ -4376,18 +4491,14 @@ module.exports = Button;
  * wp.customize.HeaderControl.calculateImageSelectOptions via
  * wp.customize.HeaderControl.openMM.
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var View = wp.media.View,
-	UploaderStatus = wp.media.view.UploaderStatus,
-	l10n = wp.media.view.l10n,
-	$ = jQuery,
-	Cropper;
-
-Cropper = View.extend({
+Cropper = View.extend(/** @lends wp.media.view.Cropper.prototype */{
 	className: 'crop-content',
 	template: wp.template('crop-content'),
 	initialize: function() {
@@ -4434,18 +4545,20 @@ Cropper = View.extend({
 module.exports = Cropper;
 
 },{}],37:[function(require,module,exports){
+var View = wp.media.View,
+	EditImage;
+
 /**
  * wp.media.view.EditImage
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var View = wp.media.View,
-	EditImage;
-
-EditImage = View.extend({
+EditImage = View.extend(/** @lends wp.media.view.EditImage.prototype */{
 	className: 'image-editor',
 	template: wp.template('image-editor'),
 
@@ -4493,12 +4606,14 @@ module.exports = EditImage;
 /**
  * wp.media.view.Embed
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var Embed = wp.media.View.extend({
+var Embed = wp.media.View.extend(/** @lends wp.media.view.Ember.prototype */{
 	className: 'media-embed',
 
 	initialize: function() {
@@ -4554,9 +4669,14 @@ var Embed = wp.media.View.extend({
 module.exports = Embed;
 
 },{}],39:[function(require,module,exports){
+var AttachmentDisplay = wp.media.view.Settings.AttachmentDisplay,
+	EmbedImage;
+
 /**
  * wp.media.view.EmbedImage
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.view.Settings.AttachmentDisplay
  * @augments wp.media.view.Settings
@@ -4564,10 +4684,7 @@ module.exports = Embed;
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var AttachmentDisplay = wp.media.view.Settings.AttachmentDisplay,
-	EmbedImage;
-
-EmbedImage = AttachmentDisplay.extend({
+EmbedImage = AttachmentDisplay.extend(/** @lends wp.media.view.EmbedImage.prototype */{
 	className: 'embed-media-settings',
 	template:  wp.template('embed-image-settings'),
 
@@ -4587,19 +4704,21 @@ EmbedImage = AttachmentDisplay.extend({
 module.exports = EmbedImage;
 
 },{}],40:[function(require,module,exports){
+var $ = jQuery,
+	EmbedLink;
+
 /**
  * wp.media.view.EmbedLink
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.view.Settings
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var $ = jQuery,
-	EmbedLink;
-
-EmbedLink = wp.media.view.Settings.extend({
+EmbedLink = wp.media.view.Settings.extend(/** @lends wp.media.view.EmbedLink.prototype */{
 	className: 'embed-link-settings',
 	template:  wp.template('embed-link-settings'),
 
@@ -4684,19 +4803,21 @@ EmbedLink = wp.media.view.Settings.extend({
 module.exports = EmbedLink;
 
 },{}],41:[function(require,module,exports){
+var View = wp.media.View,
+	$ = jQuery,
+	EmbedUrl;
+
 /**
  * wp.media.view.EmbedUrl
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var View = wp.media.View,
-	$ = jQuery,
-	EmbedUrl;
-
-EmbedUrl = View.extend({
+EmbedUrl = View.extend(/** @lends wp.media.view.EmbedUrl.prototype */{
 	tagName:   'label',
 	className: 'embed-url',
 
@@ -4766,12 +4887,14 @@ module.exports = EmbedUrl;
 /**
  * wp.media.view.FocusManager
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var FocusManager = wp.media.View.extend({
+var FocusManager = wp.media.View.extend(/** @lends wp.media.view.FocusManager.prototype */{
 
 	events: {
 		'keydown': 'constrainTabbing'
@@ -4815,6 +4938,8 @@ module.exports = FocusManager;
  * A frame is a composite view consisting of one or more regions and one or more
  * states.
  *
+ * @memberOf wp.media.view
+ *
  * @see wp.media.controller.State
  * @see wp.media.controller.Region
  *
@@ -4824,7 +4949,7 @@ module.exports = FocusManager;
  * @augments Backbone.View
  * @mixes wp.media.controller.StateMachine
  */
-var Frame = wp.media.View.extend({
+var Frame = wp.media.View.extend(/** @lends wp.media.view.Frame.prototype */{
 	initialize: function() {
 		_.defaults( this.options, {
 			mode: [ 'select' ]
@@ -4952,7 +5077,7 @@ var Frame = wp.media.View.extend({
 		/**
 		 * Frame mode deactivation event.
 		 *
-		 * @event this#{mode}:deactivate
+		 * @event wp.media.view.Frame#{mode}:deactivate
 		 */
 		this.trigger( mode + ':deactivate' );
 
@@ -4975,12 +5100,18 @@ _.extend( Frame.prototype, wp.media.controller.StateMachine.prototype );
 module.exports = Frame;
 
 },{}],44:[function(require,module,exports){
+var Select = wp.media.view.MediaFrame.Select,
+	l10n = wp.media.view.l10n,
+	ImageDetails;
+
 /**
  * wp.media.view.MediaFrame.ImageDetails
  *
  * A media frame for manipulating an image that's already been inserted
  * into a post.
  *
+ * @memberOf wp.media.view.MediaFrame
+ *
  * @class
  * @augments wp.media.view.MediaFrame.Select
  * @augments wp.media.view.MediaFrame
@@ -4990,11 +5121,7 @@ module.exports = Frame;
  * @augments Backbone.View
  * @mixes wp.media.controller.StateMachine
  */
-var Select = wp.media.view.MediaFrame.Select,
-	l10n = wp.media.view.l10n,
-	ImageDetails;
-
-ImageDetails = Select.extend({
+ImageDetails = Select.extend(/** @lends wp.media.view.MediaFrame.ImageDetails.prototype */{
 	defaults: {
 		id:      'image',
 		url:     '',
@@ -5153,11 +5280,18 @@ ImageDetails = Select.extend({
 module.exports = ImageDetails;
 
 },{}],45:[function(require,module,exports){
+var Select = wp.media.view.MediaFrame.Select,
+	Library = wp.media.controller.Library,
+	l10n = wp.media.view.l10n,
+	Post;
+
 /**
  * wp.media.view.MediaFrame.Post
  *
  * The frame for manipulating media on the Edit Post page.
  *
+ * @memberOf wp.media.view.MediaFrame
+ *
  * @class
  * @augments wp.media.view.MediaFrame.Select
  * @augments wp.media.view.MediaFrame
@@ -5167,12 +5301,7 @@ module.exports = ImageDetails;
  * @augments Backbone.View
  * @mixes wp.media.controller.StateMachine
  */
-var Select = wp.media.view.MediaFrame.Select,
-	Library = wp.media.controller.Library,
-	l10n = wp.media.view.l10n,
-	Post;
-
-Post = Select.extend({
+Post = Select.extend(/** @lends wp.media.view.MediaFrame.Post.prototype */{
 	initialize: function() {
 		this.counts = {
 			audio: {
@@ -5598,6 +5727,7 @@ Post = Select.extend({
 			requires: { selection: true },
 
 			/**
+			 * @callback
 			 * @fires wp.media.controller.State#insert
 			 */
 			click: function() {
@@ -5888,11 +6018,17 @@ Post = Select.extend({
 module.exports = Post;
 
 },{}],46:[function(require,module,exports){
+var MediaFrame = wp.media.view.MediaFrame,
+	l10n = wp.media.view.l10n,
+	Select;
+
 /**
  * wp.media.view.MediaFrame.Select
  *
  * A frame for selecting an item or items from the media library.
  *
+ * @memberOf wp.media.view.MediaFrame
+ *
  * @class
  * @augments wp.media.view.MediaFrame
  * @augments wp.media.view.Frame
@@ -5901,12 +6037,7 @@ module.exports = Post;
  * @augments Backbone.View
  * @mixes wp.media.controller.StateMachine
  */
-
-var MediaFrame = wp.media.view.MediaFrame,
-	l10n = wp.media.view.l10n,
-	Select;
-
-Select = MediaFrame.extend({
+Select = MediaFrame.extend(/** @lends wp.media.view.MediaFrame.Select.prototype */{
 	initialize: function() {
 		// Call 'initialize' directly on the parent class.
 		MediaFrame.prototype.initialize.apply( this, arguments );
@@ -6062,12 +6193,14 @@ module.exports = Select;
 /**
  * wp.media.view.Iframe
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var Iframe = wp.media.View.extend({
+var Iframe = wp.media.View.extend(/** @lends wp.media.view.Iframe.prototype */{
 	className: 'media-iframe',
 	/**
 	 * @returns {wp.media.view.Iframe} Returns itself to allow chaining
@@ -6083,9 +6216,15 @@ var Iframe = wp.media.View.extend({
 module.exports = Iframe;
 
 },{}],48:[function(require,module,exports){
+var AttachmentDisplay = wp.media.view.Settings.AttachmentDisplay,
+	$ = jQuery,
+	ImageDetails;
+
 /**
  * wp.media.view.ImageDetails
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.view.Settings.AttachmentDisplay
  * @augments wp.media.view.Settings
@@ -6093,11 +6232,7 @@ module.exports = Iframe;
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var AttachmentDisplay = wp.media.view.Settings.AttachmentDisplay,
-	$ = jQuery,
-	ImageDetails;
-
-ImageDetails = AttachmentDisplay.extend({
+ImageDetails = AttachmentDisplay.extend(/** @lends wp.media.view.ImageDetails.prototype */{
 	className: 'image-details',
 	template:  wp.template('image-details'),
 	events: _.defaults( AttachmentDisplay.prototype.events, {
@@ -6254,12 +6389,14 @@ module.exports = ImageDetails;
 /**
  * wp.media.view.Label
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var Label = wp.media.View.extend({
+var Label = wp.media.View.extend(/** @lends wp.media.view.Label.prototype */{
 	tagName: 'label',
 	className: 'screen-reader-text',
 
@@ -6277,11 +6414,17 @@ var Label = wp.media.View.extend({
 module.exports = Label;
 
 },{}],50:[function(require,module,exports){
+var Frame = wp.media.view.Frame,
+	$ = jQuery,
+	MediaFrame;
+
 /**
  * wp.media.view.MediaFrame
  *
  * The frame used to create the media modal.
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.view.Frame
  * @augments wp.media.View
@@ -6289,11 +6432,7 @@ module.exports = Label;
  * @augments Backbone.View
  * @mixes wp.media.controller.StateMachine
  */
-var Frame = wp.media.view.Frame,
-	$ = jQuery,
-	MediaFrame;
-
-MediaFrame = Frame.extend({
+MediaFrame = Frame.extend(/** @lends wp.media.view.MediaFrame.prototype */{
 	className: 'media-frame',
 	template:  wp.template('media-frame'),
 	regions:   ['menu','title','content','toolbar','router'],
@@ -6303,7 +6442,7 @@ MediaFrame = Frame.extend({
 	},
 
 	/**
-	 * @global wp.Uploader
+	 * @constructs
 	 */
 	initialize: function() {
 		Frame.prototype.initialize.apply( this, arguments );
@@ -6511,6 +6650,38 @@ MediaFrame = Frame.extend({
 // Map some of the modal's methods to the frame.
 _.each(['open','close','attach','detach','escape'], function( method ) {
 	/**
+	 * @function open
+	 * @memberOf wp.media.view.MediaFrame
+	 * @instance
+	 *
+	 * @returns {wp.media.view.MediaFrame} Returns itself to allow chaining
+	 */
+	/**
+	 * @function close
+	 * @memberOf wp.media.view.MediaFrame
+	 * @instance
+	 *
+	 * @returns {wp.media.view.MediaFrame} Returns itself to allow chaining
+	 */
+	/**
+	 * @function attach
+	 * @memberOf wp.media.view.MediaFrame
+	 * @instance
+	 *
+	 * @returns {wp.media.view.MediaFrame} Returns itself to allow chaining
+	 */
+	/**
+	 * @function detach
+	 * @memberOf wp.media.view.MediaFrame
+	 * @instance
+	 *
+	 * @returns {wp.media.view.MediaFrame} Returns itself to allow chaining
+	 */
+	/**
+	 * @function escape
+	 * @memberOf wp.media.view.MediaFrame
+	 * @instance
+	 *
 	 * @returns {wp.media.view.MediaFrame} Returns itself to allow chaining
 	 */
 	MediaFrame.prototype[ method ] = function() {
@@ -6524,18 +6695,20 @@ _.each(['open','close','attach','detach','escape'], function( method ) {
 module.exports = MediaFrame;
 
 },{}],51:[function(require,module,exports){
+var $ = jQuery,
+	MenuItem;
+
 /**
  * wp.media.view.MenuItem
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var $ = jQuery,
-	MenuItem;
-
-MenuItem = wp.media.View.extend({
+MenuItem = wp.media.View.extend(/** @lends wp.media.view.MenuItem.prototype */{
 	tagName:   'a',
 	className: 'media-menu-item',
 
@@ -6596,20 +6769,22 @@ MenuItem = wp.media.View.extend({
 module.exports = MenuItem;
 
 },{}],52:[function(require,module,exports){
+var MenuItem = wp.media.view.MenuItem,
+	PriorityList = wp.media.view.PriorityList,
+	Menu;
+
 /**
  * wp.media.view.Menu
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.view.PriorityList
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var MenuItem = wp.media.view.MenuItem,
-	PriorityList = wp.media.view.PriorityList,
-	Menu;
-
-Menu = PriorityList.extend({
+Menu = PriorityList.extend(/** @lends wp.media.view.Menu.prototype */{
 	tagName:   'div',
 	className: 'media-menu',
 	property:  'state',
@@ -6713,20 +6888,22 @@ Menu = PriorityList.extend({
 module.exports = Menu;
 
 },{}],53:[function(require,module,exports){
+var $ = jQuery,
+	Modal;
+
 /**
  * wp.media.view.Modal
  *
  * A modal view, which the media modal uses as its default container.
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var $ = jQuery,
-	Modal;
-
-Modal = wp.media.View.extend({
+Modal = wp.media.View.extend(/** @lends wp.media.view.Modal.prototype */{
 	tagName:  'div',
 	template: wp.template('media-modal'),
 
@@ -6937,12 +7114,14 @@ module.exports = Modal;
 /**
  * wp.media.view.PriorityList
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var PriorityList = wp.media.View.extend({
+var PriorityList = wp.media.View.extend(/** @lends wp.media.view.PriorityList.prototype */{
 	tagName:   'div',
 
 	initialize: function() {
@@ -7034,13 +7213,15 @@ module.exports = PriorityList;
 /**
  * wp.media.view.RouterItem
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.view.MenuItem
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var RouterItem = wp.media.view.MenuItem.extend({
+var RouterItem = wp.media.view.MenuItem.extend(/** @lends wp.media.view.RouterItem.prototype */{
 	/**
 	 * On click handler to activate the content region's corresponding mode.
 	 */
@@ -7055,9 +7236,14 @@ var RouterItem = wp.media.view.MenuItem.extend({
 module.exports = RouterItem;
 
 },{}],56:[function(require,module,exports){
+var Menu = wp.media.view.Menu,
+	Router;
+
 /**
  * wp.media.view.Router
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.view.Menu
  * @augments wp.media.view.PriorityList
@@ -7065,10 +7251,7 @@ module.exports = RouterItem;
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var Menu = wp.media.view.Menu,
-	Router;
-
-Router = Menu.extend({
+Router = Menu.extend(/** @lends wp.media.view.Router.prototype */{
 	tagName:   'div',
 	className: 'media-router',
 	property:  'contentMode',
@@ -7092,18 +7275,20 @@ Router = Menu.extend({
 module.exports = Router;
 
 },{}],57:[function(require,module,exports){
+var l10n = wp.media.view.l10n,
+	Search;
+
 /**
  * wp.media.view.Search
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var l10n = wp.media.view.l10n,
-	Search;
-
-Search = wp.media.View.extend({
+Search = wp.media.View.extend(/** @lends wp.media.view.Search.prototype */{
 	tagName:   'input',
 	className: 'search',
 	id:        'media-search-input',
@@ -7138,18 +7323,20 @@ Search = wp.media.View.extend({
 module.exports = Search;
 
 },{}],58:[function(require,module,exports){
+var l10n = wp.media.view.l10n,
+	Selection;
+
 /**
  * wp.media.view.Selection
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var l10n = wp.media.view.l10n,
-	Selection;
-
-Selection = wp.media.View.extend({
+Selection = wp.media.View.extend(/** @lends wp.media.view.Selection.prototype */{
 	tagName:   'div',
 	className: 'media-selection',
 	template:  wp.template('media-selection'),
@@ -7221,19 +7408,21 @@ Selection = wp.media.View.extend({
 module.exports = Selection;
 
 },{}],59:[function(require,module,exports){
+var View = wp.media.View,
+	$ = Backbone.$,
+	Settings;
+
 /**
  * wp.media.view.Settings
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var View = wp.media.View,
-	$ = Backbone.$,
-	Settings;
-
-Settings = View.extend({
+Settings = View.extend(/** @lends wp.media.view.Settings.prototype */{
 	events: {
 		'click button':    'updateHandler',
 		'change input':    'updateHandler',
@@ -7342,19 +7531,21 @@ Settings = View.extend({
 module.exports = Settings;
 
 },{}],60:[function(require,module,exports){
+var Settings = wp.media.view.Settings,
+	AttachmentDisplay;
+
 /**
  * wp.media.view.Settings.AttachmentDisplay
  *
+ * @memberOf wp.media.view.Settings
+ *
  * @class
  * @augments wp.media.view.Settings
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var Settings = wp.media.view.Settings,
-	AttachmentDisplay;
-
-AttachmentDisplay = Settings.extend({
+AttachmentDisplay = Settings.extend(/** @lends wp.media.view.Settings.AttachmentDisplay.prototype */{
 	className: 'attachment-display-settings',
 	template:  wp.template('attachment-display-settings'),
 
@@ -7439,13 +7630,15 @@ module.exports = AttachmentDisplay;
 /**
  * wp.media.view.Settings.Gallery
  *
+ * @memberOf wp.media.view.Settings
+ *
  * @class
  * @augments wp.media.view.Settings
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var Gallery = wp.media.view.Settings.extend({
+var Gallery = wp.media.view.Settings.extend(/** @lends wp.media.view.Settings.Gallery.prototype */{
 	className: 'collection-settings gallery-settings',
 	template:  wp.template('gallery-settings')
 });
@@ -7456,13 +7649,15 @@ module.exports = Gallery;
 /**
  * wp.media.view.Settings.Playlist
  *
+ * @memberOf wp.media.view.Settings
+ *
  * @class
  * @augments wp.media.view.Settings
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var Playlist = wp.media.view.Settings.extend({
+var Playlist = wp.media.view.Settings.extend(/** @lends wp.media.view.Settings.Playlist.prototype */{
 	className: 'collection-settings playlist-settings',
 	template:  wp.template('playlist-settings')
 });
@@ -7473,19 +7668,24 @@ module.exports = Playlist;
 /**
  * wp.media.view.Sidebar
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.view.PriorityList
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var Sidebar = wp.media.view.PriorityList.extend({
+var Sidebar = wp.media.view.PriorityList.extend(/** @lends wp.media.view.Sidebar.prototype */{
 	className: 'media-sidebar'
 });
 
 module.exports = Sidebar;
 
 },{}],64:[function(require,module,exports){
+var View = wp.media.view,
+	SiteIconCropper;
+
 /**
  * wp.media.view.SiteIconCropper
  *
@@ -7494,16 +7694,15 @@ module.exports = Sidebar;
  * Takes imgAreaSelect options from
  * wp.customize.SiteIconControl.calculateImageSelectOptions.
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.view.Cropper
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var View = wp.media.view,
-	SiteIconCropper;
-
-SiteIconCropper = View.Cropper.extend({
+SiteIconCropper = View.Cropper.extend(/** @lends wp.media.view.SiteIconCropper.prototype */{
 	className: 'crop-content site-icon',
 
 	ready: function () {
@@ -7529,21 +7728,23 @@ SiteIconCropper = View.Cropper.extend({
 module.exports = SiteIconCropper;
 
 },{}],65:[function(require,module,exports){
+var View = wp.media.View,
+	$ = jQuery,
+	SiteIconPreview;
+
 /**
  * wp.media.view.SiteIconPreview
  *
  * Shows a preview of the Site Icon as a favicon and app icon while cropping.
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var View = wp.media.View,
-	$ = jQuery,
-	SiteIconPreview;
-
-SiteIconPreview = View.extend({
+SiteIconPreview = View.extend(/** @lends wp.media.view.SiteIconPreview.prototype */{
 	className: 'site-icon-preview',
 	template: wp.template( 'site-icon-preview' ),
 
@@ -7588,12 +7789,14 @@ module.exports = SiteIconPreview;
 /**
  * wp.media.view.Spinner
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var Spinner = wp.media.View.extend({
+var Spinner = wp.media.View.extend(/** @lends wp.media.view.Spinner.prototype */{
 	tagName:   'span',
 	className: 'spinner',
 	spinnerTimeout: false,
@@ -7620,21 +7823,23 @@ var Spinner = wp.media.View.extend({
 module.exports = Spinner;
 
 },{}],67:[function(require,module,exports){
+var View = wp.media.View,
+	Toolbar;
+
 /**
  * wp.media.view.Toolbar
  *
  * A toolbar which consists of a primary and a secondary section. Each sections
  * can be filled with views.
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var View = wp.media.View,
-	Toolbar;
-
-Toolbar = View.extend({
+Toolbar = View.extend(/** @lends wp.media.view.Toolbar.prototype */{
 	tagName:   'div',
 	className: 'media-toolbar',
 
@@ -7782,9 +7987,15 @@ Toolbar = View.extend({
 module.exports = Toolbar;
 
 },{}],68:[function(require,module,exports){
+var Select = wp.media.view.Toolbar.Select,
+	l10n = wp.media.view.l10n,
+	Embed;
+
 /**
  * wp.media.view.Toolbar.Embed
  *
+ * @memberOf wp.media.view.Toolbar
+ *
  * @class
  * @augments wp.media.view.Toolbar.Select
  * @augments wp.media.view.Toolbar
@@ -7792,11 +8003,7 @@ module.exports = Toolbar;
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var Select = wp.media.view.Toolbar.Select,
-	l10n = wp.media.view.l10n,
-	Embed;
-
-Embed = Select.extend({
+Embed = Select.extend(/** @lends wp.media.view.Toolbar.Embed.prototype */{
 	initialize: function() {
 		_.defaults( this.options, {
 			text: l10n.insertIntoPost,
@@ -7819,20 +8026,22 @@ Embed = Select.extend({
 module.exports = Embed;
 
 },{}],69:[function(require,module,exports){
+var Toolbar = wp.media.view.Toolbar,
+	l10n = wp.media.view.l10n,
+	Select;
+
 /**
  * wp.media.view.Toolbar.Select
  *
+ * @memberOf wp.media.view.Toolbar
+ *
  * @class
  * @augments wp.media.view.Toolbar
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var Toolbar = wp.media.view.Toolbar,
-	l10n = wp.media.view.l10n,
-	Select;
-
-Select = Toolbar.extend({
+Select = Toolbar.extend(/** @lends wp.media.view.Toolbar.Select.prototype */{
 	initialize: function() {
 		var options = this.options;
 
@@ -7889,23 +8098,25 @@ Select = Toolbar.extend({
 module.exports = Select;
 
 },{}],70:[function(require,module,exports){
+var View = wp.media.View,
+	l10n = wp.media.view.l10n,
+	$ = jQuery,
+	EditorUploader;
+
 /**
  * Creates a dropzone on WP editor instances (elements with .wp-editor-wrap)
  * and relays drag'n'dropped files to a media workflow.
  *
  * wp.media.view.EditorUploader
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var View = wp.media.View,
-	l10n = wp.media.view.l10n,
-	$ = jQuery,
-	EditorUploader;
-
-EditorUploader = View.extend({
+EditorUploader = View.extend(/** @lends wp.media.view.EditorUploader.prototype */{
 	tagName:   'div',
 	className: 'uploader-editor',
 	template:  wp.template( 'uploader-editor' ),
@@ -8114,20 +8325,22 @@ EditorUploader = View.extend({
 module.exports = EditorUploader;
 
 },{}],71:[function(require,module,exports){
+var View = wp.media.View,
+	UploaderInline;
+
 /**
  * wp.media.view.UploaderInline
  *
  * The inline uploader that shows up in the 'Upload Files' tab.
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var View = wp.media.View,
-	UploaderInline;
-
-UploaderInline = View.extend({
+UploaderInline = View.extend(/** @lends wp.media.view.UploaderInline.prototype */{
 	tagName:   'div',
 	className: 'uploader-inline',
 	template:  wp.template('uploader-inline'),
@@ -8257,12 +8470,14 @@ module.exports = UploaderInline;
 /**
  * wp.media.view.UploaderStatusError
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var UploaderStatusError = wp.media.View.extend({
+var UploaderStatusError = wp.media.View.extend(/** @lends wp.media.view.UploaderStatusError.prototype */{
 	className: 'upload-error',
 	template:  wp.template('uploader-status-error')
 });
@@ -8270,20 +8485,22 @@ var UploaderStatusError = wp.media.View.extend({
 module.exports = UploaderStatusError;
 
 },{}],73:[function(require,module,exports){
+var View = wp.media.View,
+	UploaderStatus;
+
 /**
  * wp.media.view.UploaderStatus
  *
  * An uploader status for on-going uploads.
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var View = wp.media.View,
-	UploaderStatus;
-
-UploaderStatus = View.extend({
+UploaderStatus = View.extend(/** @lends wp.media.view.UploaderStatus.prototype */{
 	className: 'media-uploader-status',
 	template:  wp.template('uploader-status'),
 
@@ -8303,7 +8520,6 @@ UploaderStatus = View.extend({
 		this.errors.on( 'add', this.error, this );
 	},
 	/**
-	 * @global wp.Uploader
 	 * @returns {wp.media.view.UploaderStatus}
 	 */
 	dispose: function() {
@@ -8389,8 +8605,6 @@ UploaderStatus = View.extend({
 	},
 
 	/**
-	 * @global wp.Uploader
-	 *
 	 * @param {Object} event
 	 */
 	dismiss: function( event ) {
@@ -8408,11 +8622,16 @@ UploaderStatus = View.extend({
 module.exports = UploaderStatus;
 
 },{}],74:[function(require,module,exports){
+var $ = jQuery,
+	UploaderWindow;
+
 /**
  * wp.media.view.UploaderWindow
  *
  * An uploader window that allows for dragging and dropping media.
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
@@ -8424,10 +8643,7 @@ module.exports = UploaderStatus;
  * @param {jQuery} [options.uploader.dropzone] jQuery collection of the dropzone.
  * @param {object} [options.uploader.params]
  */
-var $ = jQuery,
-	UploaderWindow;
-
-UploaderWindow = wp.media.View.extend({
+UploaderWindow = wp.media.View.extend(/** @lends wp.media.view.UploaderWindow.prototype */{
 	tagName:   'div',
 	className: 'uploader-window',
 	template:  wp.template('uploader-window'),
@@ -8531,11 +8747,13 @@ module.exports = UploaderWindow;
  * This behavior has since been removed, and should not be used
  * outside of the media manager.
  *
+ * @memberOf wp.media
+ *
  * @class
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var View = wp.Backbone.View.extend({
+var View = wp.Backbone.View.extend(/** @lends wp.media.View.prototype */{
 	constructor: function( options ) {
 		if ( options && options.controller ) {
 			this.controller = options.controller;
diff --git src/wp-includes/js/media/controllers/audio-details.js src/wp-includes/js/media/controllers/audio-details.js
index 41c8a4f8a..07fb99029 100644
--- src/wp-includes/js/media/controllers/audio-details.js
+++ src/wp-includes/js/media/controllers/audio-details.js
@@ -1,17 +1,19 @@
+var State = wp.media.controller.State,
+	l10n = wp.media.view.l10n,
+	AudioDetails;
+
 /**
  * wp.media.controller.AudioDetails
  *
  * The controller for the Audio Details state
  *
+ * @memberOf wp.media.controller
+ *
  * @class
  * @augments wp.media.controller.State
  * @augments Backbone.Model
  */
-var State = wp.media.controller.State,
-	l10n = wp.media.view.l10n,
-	AudioDetails;
-
-AudioDetails = State.extend({
+AudioDetails = State.extend(/** @lends wp.media.controller.AudioDetails.prototype */{
 	defaults: {
 		id: 'audio-details',
 		toolbar: 'audio-details',
diff --git src/wp-includes/js/media/controllers/collection-add.js src/wp-includes/js/media/controllers/collection-add.js
index e361a5c9d..fedcb308b 100644
--- src/wp-includes/js/media/controllers/collection-add.js
+++ src/wp-includes/js/media/controllers/collection-add.js
@@ -1,8 +1,14 @@
+var Selection = wp.media.model.Selection,
+	Library = wp.media.controller.Library,
+	CollectionAdd;
+
 /**
  * wp.media.controller.CollectionAdd
  *
  * A state for adding attachments to a collection (e.g. video playlist).
  *
+ * @memberOf wp.media.controller
+ *
  * @class
  * @augments wp.media.controller.Library
  * @augments wp.media.controller.State
@@ -31,11 +37,7 @@
  * @param {string}                     attributes.type                   The collection's media type. (e.g. 'video').
  * @param {string}                     attributes.collectionType         The collection type. (e.g. 'playlist').
  */
-var Selection = wp.media.model.Selection,
-	Library = wp.media.controller.Library,
-	CollectionAdd;
-
-CollectionAdd = Library.extend({
+CollectionAdd = Library.extend(/** @lends wp.media.controller.CollectionAdd.prototype */{
 	defaults: _.defaults( {
 		// Selection defaults. @see media.model.Selection
 		multiple:      'add',
diff --git src/wp-includes/js/media/controllers/collection-edit.js src/wp-includes/js/media/controllers/collection-edit.js
index 8478976ab..1c4478f25 100644
--- src/wp-includes/js/media/controllers/collection-edit.js
+++ src/wp-includes/js/media/controllers/collection-edit.js
@@ -1,9 +1,16 @@
+var Library = wp.media.controller.Library,
+	l10n = wp.media.view.l10n,
+	$ = jQuery,
+	CollectionEdit;
+
 /**
  * wp.media.controller.CollectionEdit
  *
  * A state for editing a collection, which is used by audio and video playlists,
  * and can be used for other collections.
  *
+ * @memberOf wp.media.controller
+ *
  * @class
  * @augments wp.media.controller.Library
  * @augments wp.media.controller.State
@@ -33,12 +40,7 @@
  * @param {string}                     attributes.type                   The collection's media type. (e.g. 'video').
  * @param {string}                     attributes.collectionType         The collection type. (e.g. 'playlist').
  */
-var Library = wp.media.controller.Library,
-	l10n = wp.media.view.l10n,
-	$ = jQuery,
-	CollectionEdit;
-
-CollectionEdit = Library.extend({
+CollectionEdit = Library.extend(/** @lends wp.media.controller.CollectionEdit.prototype */{
 	defaults: {
 		multiple:         false,
 		sortable:         true,
diff --git src/wp-includes/js/media/controllers/cropper.js src/wp-includes/js/media/controllers/cropper.js
index a23b22640..bfcaf11c9 100644
--- src/wp-includes/js/media/controllers/cropper.js
+++ src/wp-includes/js/media/controllers/cropper.js
@@ -1,16 +1,18 @@
+var l10n = wp.media.view.l10n,
+	Cropper;
+
 /**
  * wp.media.controller.Cropper
  *
  * A state for cropping an image.
  *
+ * @memberOf wp.media.controller
+ *
  * @class
  * @augments wp.media.controller.State
  * @augments Backbone.Model
  */
-var l10n = wp.media.view.l10n,
-	Cropper;
-
-Cropper = wp.media.controller.State.extend({
+Cropper = wp.media.controller.State.extend(/** @lends wp.media.controller.Cropper.prototype */{
 	defaults: {
 		id:          'cropper',
 		title:       l10n.cropImage,
diff --git src/wp-includes/js/media/controllers/customize-image-cropper.js src/wp-includes/js/media/controllers/customize-image-cropper.js
index 3456ba36f..5f076178e 100644
--- src/wp-includes/js/media/controllers/customize-image-cropper.js
+++ src/wp-includes/js/media/controllers/customize-image-cropper.js
@@ -1,6 +1,11 @@
+var Controller = wp.media.controller,
+	CustomizeImageCropper;
+
 /**
  * wp.media.controller.CustomizeImageCropper
  *
+ * @memberOf wp.media.controller
+ *
  * A state for cropping an image.
  *
  * @class
@@ -8,10 +13,7 @@
  * @augments wp.media.controller.State
  * @augments Backbone.Model
  */
-var Controller = wp.media.controller,
-	CustomizeImageCropper;
-
-CustomizeImageCropper = Controller.Cropper.extend({
+CustomizeImageCropper = Controller.Cropper.extend(/** @lends wp.media.controller.CustomizeImageCropper.prototype */{
 	doCrop: function( attachment ) {
 		var cropDetails = attachment.get( 'cropDetails' ),
 			control = this.get( 'control' ),
diff --git src/wp-includes/js/media/controllers/edit-attachment-metadata.js src/wp-includes/js/media/controllers/edit-attachment-metadata.js
index 60a57c32b..fe906f8bc 100644
--- src/wp-includes/js/media/controllers/edit-attachment-metadata.js
+++ src/wp-includes/js/media/controllers/edit-attachment-metadata.js
@@ -1,16 +1,18 @@
+var l10n = wp.media.view.l10n,
+	EditAttachmentMetadata;
+
 /**
  * wp.media.controller.EditAttachmentMetadata
  *
  * A state for editing an attachment's metadata.
  *
+ * @memberOf wp.media.controller
+ *
  * @class
  * @augments wp.media.controller.State
  * @augments Backbone.Model
  */
-var l10n = wp.media.view.l10n,
-	EditAttachmentMetadata;
-
-EditAttachmentMetadata = wp.media.controller.State.extend({
+EditAttachmentMetadata = wp.media.controller.State.extend(/** @lends wp.media.controller.EditAttachmentMetadata.prototype */{
 	defaults: {
 		id:      'edit-attachment',
 		// Title string passed to the frame's title region view.
diff --git src/wp-includes/js/media/controllers/edit-image.js src/wp-includes/js/media/controllers/edit-image.js
index 448541f2f..ce34d14cf 100644
--- src/wp-includes/js/media/controllers/edit-image.js
+++ src/wp-includes/js/media/controllers/edit-image.js
@@ -1,8 +1,13 @@
+var l10n = wp.media.view.l10n,
+	EditImage;
+
 /**
  * wp.media.controller.EditImage
  *
  * A state for editing (cropping, etc.) an image.
  *
+ * @memberOf wp.media.controller
+ *
  * @class
  * @augments wp.media.controller.State
  * @augments Backbone.Model
@@ -16,10 +21,7 @@
  * @param {string}                    [attributes.menu=false]         Initial mode for the menu region.
  * @param {string}                    [attributes.url]                Unused. @todo Consider removal.
  */
-var l10n = wp.media.view.l10n,
-	EditImage;
-
-EditImage = wp.media.controller.State.extend({
+EditImage = wp.media.controller.State.extend(/** @lends wp.media.controller.EditImage.prototype */{
 	defaults: {
 		id:      'edit-image',
 		title:   l10n.editImage,
diff --git src/wp-includes/js/media/controllers/embed.js src/wp-includes/js/media/controllers/embed.js
index d347db03d..2b271dcd0 100644
--- src/wp-includes/js/media/controllers/embed.js
+++ src/wp-includes/js/media/controllers/embed.js
@@ -1,8 +1,14 @@
+var l10n = wp.media.view.l10n,
+	$ = Backbone.$,
+	Embed;
+
 /**
  * wp.media.controller.Embed
  *
  * A state for embedding media from a URL.
  *
+ * @memberOf wp.media.controller
+ *
  * @class
  * @augments wp.media.controller.State
  * @augments Backbone.Model
@@ -19,11 +25,7 @@
  * @param {string} [attributes.url]                   The embed URL.
  * @param {object} [attributes.metadata={}]           Properties of the embed, which will override attributes.url if set.
  */
-var l10n = wp.media.view.l10n,
-	$ = Backbone.$,
-	Embed;
-
-Embed = wp.media.controller.State.extend({
+Embed = wp.media.controller.State.extend(/** @lends wp.media.controller.Embed.prototype */{
 	defaults: {
 		id:       'embed',
 		title:    l10n.insertFromUrlTitle,
diff --git src/wp-includes/js/media/controllers/featured-image.js src/wp-includes/js/media/controllers/featured-image.js
index 3e179f1c5..e08129fa2 100644
--- src/wp-includes/js/media/controllers/featured-image.js
+++ src/wp-includes/js/media/controllers/featured-image.js
@@ -1,8 +1,15 @@
+var Attachment = wp.media.model.Attachment,
+	Library = wp.media.controller.Library,
+	l10n = wp.media.view.l10n,
+	FeaturedImage;
+
 /**
  * wp.media.controller.FeaturedImage
  *
  * A state for selecting a featured image for a post.
  *
+ * @memberOf wp.media.controller
+ *
  * @class
  * @augments wp.media.controller.Library
  * @augments wp.media.controller.State
@@ -29,12 +36,7 @@
  * @param {boolean}                    [attributes.contentUserSetting=true]  Whether the content region's mode should be set and persisted per user.
  * @param {boolean}                    [attributes.syncSelection=true]       Whether the Attachments selection should be persisted from the last state.
  */
-var Attachment = wp.media.model.Attachment,
-	Library = wp.media.controller.Library,
-	l10n = wp.media.view.l10n,
-	FeaturedImage;
-
-FeaturedImage = Library.extend({
+FeaturedImage = Library.extend(/** @lends wp.media.controller.FeaturedImage.prototype */{
 	defaults: _.defaults({
 		id:            'featured-image',
 		title:         l10n.setFeaturedImageTitle,
diff --git src/wp-includes/js/media/controllers/gallery-add.js src/wp-includes/js/media/controllers/gallery-add.js
index 42d7dfa47..21e611bc3 100644
--- src/wp-includes/js/media/controllers/gallery-add.js
+++ src/wp-includes/js/media/controllers/gallery-add.js
@@ -1,8 +1,15 @@
+var Selection = wp.media.model.Selection,
+	Library = wp.media.controller.Library,
+	l10n = wp.media.view.l10n,
+	GalleryAdd;
+
 /**
  * wp.media.controller.GalleryAdd
  *
  * A state for selecting more images to add to a gallery.
  *
+ * @memberOf wp.media.controller
+ *
  * @class
  * @augments wp.media.controller.Library
  * @augments wp.media.controller.State
@@ -29,12 +36,7 @@
  * @param {boolean}                    [attributes.syncSelection=false]     Whether the Attachments selection should be persisted from the last state.
  *                                                                          Defaults to false because for this state, because the library of the Edit Gallery state is the selection.
  */
-var Selection = wp.media.model.Selection,
-	Library = wp.media.controller.Library,
-	l10n = wp.media.view.l10n,
-	GalleryAdd;
-
-GalleryAdd = Library.extend({
+GalleryAdd = Library.extend(/** @lends wp.media.controller.GalleryAdd.prototype */{
 	defaults: _.defaults({
 		id:            'gallery-library',
 		title:         l10n.addToGalleryTitle,
diff --git src/wp-includes/js/media/controllers/gallery-edit.js src/wp-includes/js/media/controllers/gallery-edit.js
index cfdd7aa3d..b07056e9d 100644
--- src/wp-includes/js/media/controllers/gallery-edit.js
+++ src/wp-includes/js/media/controllers/gallery-edit.js
@@ -1,8 +1,14 @@
+var Library = wp.media.controller.Library,
+	l10n = wp.media.view.l10n,
+	GalleryEdit;
+
 /**
  * wp.media.controller.GalleryEdit
  *
  * A state for editing a gallery's images and settings.
  *
+ * @memberOf wp.media.controller
+ *
  * @class
  * @augments wp.media.controller.Library
  * @augments wp.media.controller.State
@@ -30,11 +36,7 @@
  * @param {view}                       [attributes.AttachmentView]        The single `Attachment` view to be used in the `Attachments`.
  *                                                                        If none supplied, defaults to wp.media.view.Attachment.EditLibrary.
  */
-var Library = wp.media.controller.Library,
-	l10n = wp.media.view.l10n,
-	GalleryEdit;
-
-GalleryEdit = Library.extend({
+GalleryEdit = Library.extend(/** @lends wp.media.controller.GalleryEdit.prototype */{
 	defaults: {
 		id:               'gallery-edit',
 		title:            l10n.editGalleryTitle,
diff --git src/wp-includes/js/media/controllers/image-details.js src/wp-includes/js/media/controllers/image-details.js
index 61462bbe7..2d4689e5a 100644
--- src/wp-includes/js/media/controllers/image-details.js
+++ src/wp-includes/js/media/controllers/image-details.js
@@ -1,9 +1,16 @@
+var State = wp.media.controller.State,
+	Library = wp.media.controller.Library,
+	l10n = wp.media.view.l10n,
+	ImageDetails;
+
 /**
  * wp.media.controller.ImageDetails
  *
  * A state for editing the attachment display settings of an image that's been
  * inserted into the editor.
  *
+ * @memberOf wp.media.controller
+ *
  * @class
  * @augments wp.media.controller.State
  * @augments Backbone.Model
@@ -22,12 +29,7 @@
  * @todo This state inherits some defaults from media.controller.Library.prototype.defaults,
  *       however this may not do anything.
  */
-var State = wp.media.controller.State,
-	Library = wp.media.controller.Library,
-	l10n = wp.media.view.l10n,
-	ImageDetails;
-
-ImageDetails = State.extend({
+ImageDetails = State.extend(/** @lends wp.media.controller.ImageDetails.prototype */{
 	defaults: _.defaults({
 		id:       'image-details',
 		title:    l10n.imageDetailsTitle,
diff --git src/wp-includes/js/media/controllers/library.js src/wp-includes/js/media/controllers/library.js
index c16fab60b..89dc0f4da 100644
--- src/wp-includes/js/media/controllers/library.js
+++ src/wp-includes/js/media/controllers/library.js
@@ -1,8 +1,15 @@
+var l10n = wp.media.view.l10n,
+	getUserSetting = window.getUserSetting,
+	setUserSetting = window.setUserSetting,
+	Library;
+
 /**
  * wp.media.controller.Library
  *
  * A state for choosing an attachment or group of attachments from the media library.
  *
+ * @memberOf wp.media.controller
+ *
  * @class
  * @augments wp.media.controller.State
  * @augments Backbone.Model
@@ -32,12 +39,7 @@
  * @param {boolean}                         [attributes.contentUserSetting=true] Whether the content region's mode should be set and persisted per user.
  * @param {boolean}                         [attributes.syncSelection=true]      Whether the Attachments selection should be persisted from the last state.
  */
-var l10n = wp.media.view.l10n,
-	getUserSetting = window.getUserSetting,
-	setUserSetting = window.setUserSetting,
-	Library;
-
-Library = wp.media.controller.State.extend({
+Library = wp.media.controller.State.extend(/** @lends wp.media.controller.Library.prototype */{
 	defaults: {
 		id:                 'library',
 		title:              l10n.mediaLibraryTitle,
diff --git src/wp-includes/js/media/controllers/media-library.js src/wp-includes/js/media/controllers/media-library.js
index 9d8983fed..1f0fe7446 100644
--- src/wp-includes/js/media/controllers/media-library.js
+++ src/wp-includes/js/media/controllers/media-library.js
@@ -1,6 +1,8 @@
 /**
  * wp.media.controller.MediaLibrary
  *
+ * @memberOf wp.media.controller
+ *
  * @class
  * @augments wp.media.controller.Library
  * @augments wp.media.controller.State
@@ -9,7 +11,7 @@
 var Library = wp.media.controller.Library,
 	MediaLibrary;
 
-MediaLibrary = Library.extend({
+MediaLibrary = Library.extend(/** @lends wp.media.controller.MediaLibrary.prototype */{
 	defaults: _.defaults({
 		// Attachments browser defaults. @see media.view.AttachmentsBrowser
 		filterable:      'uploaded',
diff --git src/wp-includes/js/media/controllers/region.js src/wp-includes/js/media/controllers/region.js
index ca8d7a26c..6c0e27e7b 100644
--- src/wp-includes/js/media/controllers/region.js
+++ src/wp-includes/js/media/controllers/region.js
@@ -11,6 +11,8 @@
  * 'browse' mode t be activated on the 'content' view and then fills the region
  * with an AttachmentsBrowser view.
  *
+ * @memberOf wp.media.controller
+ *
  * @class
  *
  * @param {object}        options          Options hash for the region.
@@ -25,7 +27,7 @@ var Region = function( options ) {
 // Use Backbone's self-propagating `extend` inheritance method.
 Region.extend = Backbone.Model.extend;
 
-_.extend( Region.prototype, {
+_.extend( Region.prototype,/** @lends wp.media.controller.Region.prototype */{
 	/**
 	 * Activate a mode.
 	 *
@@ -33,10 +35,8 @@ _.extend( Region.prototype, {
 	 *
 	 * @param {string} mode
 	 *
-	 * @fires this.view#{this.id}:activate:{this._mode}
-	 * @fires this.view#{this.id}:activate
-	 * @fires this.view#{this.id}:deactivate:{this._mode}
-	 * @fires this.view#{this.id}:deactivate
+	 * @fires Region#activate
+	 * @fires Region#deactivate
 	 *
 	 * @returns {wp.media.controller.Region} Returns itself to allow chaining.
 	 */
@@ -52,8 +52,7 @@ _.extend( Region.prototype, {
 		/**
 		 * Region mode deactivation event.
 		 *
-		 * @event this.view#{this.id}:deactivate:{this._mode}
-		 * @event this.view#{this.id}:deactivate
+		 * @event wp.media.controller.Region#deactivate
 		 */
 		this.trigger('deactivate');
 
@@ -63,8 +62,7 @@ _.extend( Region.prototype, {
 		/**
 		 * Region mode activation event.
 		 *
-		 * @event this.view#{this.id}:activate:{this._mode}
-		 * @event this.view#{this.id}:activate
+		 * @event wp.media.controller.Region#activate
 		 */
 		this.trigger('activate');
 		return this;
@@ -76,10 +74,8 @@ _.extend( Region.prototype, {
 	 *
 	 * @param {string} mode
 	 *
-	 * @fires this.view#{this.id}:create:{this._mode}
-	 * @fires this.view#{this.id}:create
-	 * @fires this.view#{this.id}:render:{this._mode}
-	 * @fires this.view#{this.id}:render
+	 * @fires Region#create
+	 * @fires Region#render
 	 *
 	 * @returns {wp.media.controller.Region} Returns itself to allow chaining
 	 */
@@ -97,8 +93,9 @@ _.extend( Region.prototype, {
 		 *
 		 * Region view creation takes place in an event callback on the frame.
 		 *
-		 * @event this.view#{this.id}:create:{this._mode}
-		 * @event this.view#{this.id}:create
+		 * @event wp.media.controller.Region#create
+		 * @type {object}
+		 * @property {object} view
 		 */
 		this.trigger( 'create', set );
 		view = set.view;
@@ -108,8 +105,8 @@ _.extend( Region.prototype, {
 		 *
 		 * Region view creation takes place in an event callback on the frame.
 		 *
-		 * @event this.view#{this.id}:create:{this._mode}
-		 * @event this.view#{this.id}:create
+		 * @event wp.media.controller.Region#render
+		 * @type {object}
 		 */
 		this.trigger( 'render', view );
 		if ( view ) {
diff --git src/wp-includes/js/media/controllers/replace-image.js src/wp-includes/js/media/controllers/replace-image.js
index ed37a50de..eb6823a22 100644
--- src/wp-includes/js/media/controllers/replace-image.js
+++ src/wp-includes/js/media/controllers/replace-image.js
@@ -1,8 +1,14 @@
+var Library = wp.media.controller.Library,
+	l10n = wp.media.view.l10n,
+	ReplaceImage;
+
 /**
  * wp.media.controller.ReplaceImage
  *
  * A state for replacing an image.
  *
+ * @memberOf wp.media.controller
+ *
  * @class
  * @augments wp.media.controller.Library
  * @augments wp.media.controller.State
@@ -29,11 +35,7 @@
  * @param {boolean}                    [attributes.contentUserSetting=true] Whether the content region's mode should be set and persisted per user.
  * @param {boolean}                    [attributes.syncSelection=true]      Whether the Attachments selection should be persisted from the last state.
  */
-var Library = wp.media.controller.Library,
-	l10n = wp.media.view.l10n,
-	ReplaceImage;
-
-ReplaceImage = Library.extend({
+ReplaceImage = Library.extend(/** @lends wp.media.controller.ReplaceImage.prototype */{
 	defaults: _.defaults({
 		id:            'replace-image',
 		title:         l10n.replaceImageTitle,
diff --git src/wp-includes/js/media/controllers/site-icon-cropper.js src/wp-includes/js/media/controllers/site-icon-cropper.js
index fc520a07c..4cd407206 100644
--- src/wp-includes/js/media/controllers/site-icon-cropper.js
+++ src/wp-includes/js/media/controllers/site-icon-cropper.js
@@ -1,17 +1,19 @@
+var Controller = wp.media.controller,
+	SiteIconCropper;
+
 /**
  * wp.media.controller.SiteIconCropper
  *
  * A state for cropping a Site Icon.
  *
+ * @memberOf wp.media.controller
+ *
  * @class
  * @augments wp.media.controller.Cropper
  * @augments wp.media.controller.State
  * @augments Backbone.Model
  */
-var Controller = wp.media.controller,
-	SiteIconCropper;
-
-SiteIconCropper = Controller.Cropper.extend({
+SiteIconCropper = Controller.Cropper.extend(/** @lends wp.media.controller.SiteIconCropper.prototype */{
 	activate: function() {
 		this.frame.on( 'content:create:crop', this.createCropContent, this );
 		this.frame.on( 'close', this.removeCropper, this );
diff --git src/wp-includes/js/media/controllers/state-machine.js src/wp-includes/js/media/controllers/state-machine.js
index 8acf07f12..626f6c33c 100644
--- src/wp-includes/js/media/controllers/state-machine.js
+++ src/wp-includes/js/media/controllers/state-machine.js
@@ -6,6 +6,8 @@
  *
  * States are stored as models in a Backbone collection.
  *
+ * @memberOf wp.media.controller
+ *
  * @since 3.5.0
  *
  * @class
@@ -23,7 +25,7 @@ var StateMachine = function( states ) {
 // Use Backbone's self-propagating `extend` inheritance method.
 StateMachine.extend = Backbone.Model.extend;
 
-_.extend( StateMachine.prototype, Backbone.Events, {
+_.extend( StateMachine.prototype, Backbone.Events,/** @lends wp.media.controller.StateMachine.prototype */{
 	/**
 	 * Fetch a state.
 	 *
@@ -107,6 +109,21 @@ _.extend( StateMachine.prototype, Backbone.Events, {
 // Map all event binding and triggering on a StateMachine to its `states` collection.
 _.each([ 'on', 'off', 'trigger' ], function( method ) {
 	/**
+	 * @function on
+	 * @memberOf wp.media.controller.StateMachine
+	 * @instance
+	 * @returns {wp.media.controller.StateMachine} Returns itself to allow chaining.
+	 */
+	/**
+	 * @function off
+	 * @memberOf wp.media.controller.StateMachine
+	 * @instance
+	 * @returns {wp.media.controller.StateMachine} Returns itself to allow chaining.
+	 */
+	/**
+	 * @function trigger
+	 * @memberOf wp.media.controller.StateMachine
+	 * @instance
 	 * @returns {wp.media.controller.StateMachine} Returns itself to allow chaining.
 	 */
 	StateMachine.prototype[ method ] = function() {
diff --git src/wp-includes/js/media/controllers/state.js src/wp-includes/js/media/controllers/state.js
index e23ae8615..666efe58f 100644
--- src/wp-includes/js/media/controllers/state.js
+++ src/wp-includes/js/media/controllers/state.js
@@ -12,10 +12,12 @@
  *     'reset'      is not triggered automatically. It should be invoked by the
  *                  proper controller to reset the state to its default.
  *
+ * @memberOf wp.media.controller
+ *
  * @class
  * @augments Backbone.Model
  */
-var State = Backbone.Model.extend({
+var State = Backbone.Model.extend(/** @lends wp.media.controller.State.prototype */{
 	/**
 	 * Constructor.
 	 *
diff --git src/wp-includes/js/media/controllers/video-details.js src/wp-includes/js/media/controllers/video-details.js
index 00b301a1d..d54fcdbfa 100644
--- src/wp-includes/js/media/controllers/video-details.js
+++ src/wp-includes/js/media/controllers/video-details.js
@@ -3,6 +3,8 @@
  *
  * The controller for the Video Details state
  *
+ * @memberOf wp.media.controller
+ *
  * @class
  * @augments wp.media.controller.State
  * @augments Backbone.Model
@@ -11,7 +13,7 @@ var State = wp.media.controller.State,
 	l10n = wp.media.view.l10n,
 	VideoDetails;
 
-VideoDetails = State.extend({
+VideoDetails = State.extend(/** @lends wp.media.controller.VideoDetails.prototype */{
 	defaults: {
 		id: 'video-details',
 		toolbar: 'video-details',
diff --git src/wp-includes/js/media/models.manifest.js src/wp-includes/js/media/models.manifest.js
index a40a471e5..41f27e461 100644
--- src/wp-includes/js/media/models.manifest.js
+++ src/wp-includes/js/media/models.manifest.js
@@ -1,6 +1,7 @@
 var $ = jQuery,
 	Attachment, Attachments, l10n, media;
 
+/** @namespace wp */
 window.wp = window.wp || {};
 
 /**
@@ -8,6 +9,9 @@ window.wp = window.wp || {};
  *
  * Handles the default media experience.
  *
+ * @alias wp.media
+ * @memberOf wp
+ *
  * @param  {object} attributes The properties passed to the main media controller.
  * @return {wp.media.view.MediaFrame} A media workflow.
  */
@@ -46,6 +50,11 @@ media = wp.media = function( attributes ) {
 	return frame;
 };
 
+/** @namespace wp.media */
+/** @namespace wp.media.model */
+/** @namespace wp.media.view */
+/** @namespace wp.media.controller */
+/** @namespace wp.media.frames */
 _.extend( media, { model: {}, view: {}, controller: {}, frames: {} });
 
 // Link any localized strings.
@@ -89,7 +98,7 @@ media.compare = function( a, b, ac, bc ) {
 	}
 };
 
-_.extend( media, {
+_.extend( media, /** @lends wp.media */{
 	/**
 	 * media.template( id )
 	 *
diff --git src/wp-includes/js/media/models/attachment.js src/wp-includes/js/media/models/attachment.js
index 8fcae4c7c..38f55187a 100644
--- src/wp-includes/js/media/models/attachment.js
+++ src/wp-includes/js/media/models/attachment.js
@@ -1,13 +1,15 @@
+var $ = Backbone.$,
+	Attachment;
+
 /**
  * wp.media.model.Attachment
  *
+ * @memberOf wp.media.model
+ *
  * @class
  * @augments Backbone.Model
  */
-var $ = Backbone.$,
-	Attachment;
-
-Attachment = Backbone.Model.extend({
+Attachment = Backbone.Model.extend(/** @lends wp.media.model.Attachment.prototype */{
 	/**
 	 * Triggered when attachment details change
 	 * Overrides Backbone.Model.sync
@@ -134,11 +136,12 @@ Attachment = Backbone.Model.extend({
 			model.set( model.parse( resp, xhr ), options );
 		});
 	}
-}, {
+},/** @lends wp.media.model.Attachment */{
 	/**
 	 * Create a new model on the static 'all' attachments collection and return it.
 	 *
 	 * @static
+	 *
 	 * @param {Object} attrs
 	 * @returns {wp.media.model.Attachment}
 	 */
diff --git src/wp-includes/js/media/models/attachments.js src/wp-includes/js/media/models/attachments.js
index ea4881377..c76bbbdfa 100644
--- src/wp-includes/js/media/models/attachments.js
+++ src/wp-includes/js/media/models/attachments.js
@@ -7,6 +7,8 @@
  * 'options.props.query = true', which will mirror the collection
  * to an Attachments Query collection - @see wp.media.model.Attachments.mirror().
  *
+ * @memberOf wp.media.model
+ *
  * @class
  * @augments Backbone.Collection
  *
@@ -20,7 +22,7 @@
  * @param {string} [options.filters]
  *
  */
-var Attachments = Backbone.Collection.extend({
+var Attachments = Backbone.Collection.extend(/** @lends wp.media.model.Attachments.prototype */{
 	/**
 	 * @type {wp.media.model.Attachment}
 	 */
@@ -418,15 +420,13 @@ var Attachments = Backbone.Collection.extend({
 			attachments: attachments
 		});
 	}
-}, {
+},/** @lends wp.media.model.Attachments */{
 	/**
 	 * A function to compare two attachment models in an attachments collection.
 	 *
 	 * Used as the default comparator for instances of wp.media.model.Attachments
 	 * and its subclasses. @see wp.media.model.Attachments._changeOrderby().
 	 *
-	 * @static
-	 *
 	 * @param {Backbone.Model} a
 	 * @param {Backbone.Model} b
 	 * @param {Object} options
@@ -455,9 +455,7 @@ var Attachments = Backbone.Collection.extend({
 
 		return ( 'DESC' === order ) ? wp.media.compare( a, b, ac, bc ) : wp.media.compare( b, a, bc, ac );
 	},
-	/**
-	 * @namespace
-	 */
+	/** @namespace wp.media.model.Attachments.filters */
 	filters: {
 		/**
 		 * @static
diff --git src/wp-includes/js/media/models/post-image.js src/wp-includes/js/media/models/post-image.js
index c78fdf60e..f1ff867e4 100644
--- src/wp-includes/js/media/models/post-image.js
+++ src/wp-includes/js/media/models/post-image.js
@@ -5,13 +5,15 @@
  *
  * Used in the embedded image attachment display settings modal - @see wp.media.view.MediaFrame.ImageDetails.
  *
+ * @memberOf wp.media.model
+ *
  * @class
  * @augments Backbone.Model
  *
  * @param {int} [attributes]               Initial model attributes.
  * @param {int} [attributes.attachment_id] ID of the attachment.
  **/
-var PostImage = Backbone.Model.extend({
+var PostImage = Backbone.Model.extend(/** @lends wp.media.model.PostImage.prototype */{
 
 	initialize: function( attributes ) {
 		var Attachment = wp.media.model.Attachment;
diff --git src/wp-includes/js/media/models/post-media.js src/wp-includes/js/media/models/post-media.js
index f1e28b4b2..fd642a724 100644
--- src/wp-includes/js/media/models/post-media.js
+++ src/wp-includes/js/media/models/post-media.js
@@ -4,10 +4,12 @@
  * Shared model class for audio and video. Updates the model after
  *   "Add Audio|Video Source" and "Replace Audio|Video" states return
  *
+ * @memberOf wp.media.model
+ *
  * @class
  * @augments Backbone.Model
  */
-var PostMedia = Backbone.Model.extend({
+var PostMedia = Backbone.Model.extend(/** @lends wp.media.model.PostMedia.prototype */{
 	initialize: function() {
 		this.attachment = false;
 	},
diff --git src/wp-includes/js/media/models/query.js src/wp-includes/js/media/models/query.js
index 20ccfc45e..420e4bbea 100644
--- src/wp-includes/js/media/models/query.js
+++ src/wp-includes/js/media/models/query.js
@@ -1,3 +1,6 @@
+var Attachments = wp.media.model.Attachments,
+	Query;
+
 /**
  * wp.media.model.Query
  *
@@ -6,6 +9,8 @@
  * Note: Do NOT change this.args after the query has been initialized.
  *       Things will break.
  *
+ * @memberOf wp.media.model
+ *
  * @class
  * @augments wp.media.model.Attachments
  * @augments Backbone.Collection
@@ -15,13 +20,8 @@
  * @param {object} [options.args]                Attachments query arguments.
  * @param {object} [options.args.posts_per_page]
  */
-var Attachments = wp.media.model.Attachments,
-	Query;
-
-Query = Attachments.extend({
+Query = Attachments.extend(/** @lends wp.media.model.Query.prototype */{
 	/**
-	 * @global wp.Uploader
-	 *
 	 * @param {array}  [models=[]]  Array of initial models to populate the collection.
 	 * @param {object} [options={}]
 	 */
@@ -153,7 +153,7 @@ Query = Attachments.extend({
 			return fallback.sync.apply( this, arguments );
 		}
 	}
-}, {
+}, /** @lends wp.media.model.Query */{
 	/**
 	 * @readonly
 	 */
diff --git src/wp-includes/js/media/models/selection.js src/wp-includes/js/media/models/selection.js
index faa697dae..894545f0f 100644
--- src/wp-includes/js/media/models/selection.js
+++ src/wp-includes/js/media/models/selection.js
@@ -1,16 +1,18 @@
+var Attachments = wp.media.model.Attachments,
+	Selection;
+
 /**
  * wp.media.model.Selection
  *
  * A selection of attachments.
  *
+ * @memberOf wp.media.model
+ *
  * @class
  * @augments wp.media.model.Attachments
  * @augments Backbone.Collection
  */
-var Attachments = wp.media.model.Attachments,
-	Selection;
-
-Selection = Attachments.extend({
+Selection = Attachments.extend(/** @lends wp.media.model.Selection.prototype */{
 	/**
 	 * Refresh the `single` model whenever the selection changes.
 	 * Binds `single` instead of using the context argument to ensure
diff --git src/wp-includes/js/media/routers/manage.js src/wp-includes/js/media/routers/manage.js
index 4b88aa3e0..d05807877 100644
--- src/wp-includes/js/media/routers/manage.js
+++ src/wp-includes/js/media/routers/manage.js
@@ -3,10 +3,12 @@
  *
  * A router for handling the browser history and application state.
  *
+ * @memberOf wp.media.view.MediaFrame.Manage
+ *
  * @class
  * @augments Backbone.Router
  */
-var Router = Backbone.Router.extend({
+var Router = Backbone.Router.extend(/** @lends wp.media.view.MediaFrame.Manage.Router.prototype */{
 	routes: {
 		'upload.php?item=:slug&mode=edit': 'editItem',
 		'upload.php?item=:slug':           'showItem',
diff --git src/wp-includes/js/media/utils/selection-sync.js src/wp-includes/js/media/utils/selection-sync.js
index d22b419d8..f4b5c3352 100644
--- src/wp-includes/js/media/utils/selection-sync.js
+++ src/wp-includes/js/media/utils/selection-sync.js
@@ -6,6 +6,8 @@
  * Allows for selecting multiple images in the Insert Media workflow, and then
  * switching to the Insert Gallery workflow while preserving the attachments selection.
  *
+ * @memberOf wp.media
+ *
  * @mixin
  */
 var selectionSync = {
diff --git src/wp-includes/js/media/views/attachment-compat.js src/wp-includes/js/media/views/attachment-compat.js
index a54c22465..d995d231b 100644
--- src/wp-includes/js/media/views/attachment-compat.js
+++ src/wp-includes/js/media/views/attachment-compat.js
@@ -1,17 +1,19 @@
+var View = wp.media.View,
+	AttachmentCompat;
+
 /**
  * wp.media.view.AttachmentCompat
  *
  * A view to display fields added via the `attachment_fields_to_edit` filter.
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var View = wp.media.View,
-	AttachmentCompat;
-
-AttachmentCompat = View.extend({
+AttachmentCompat = View.extend(/** @lends wp.media.view.AttachmentCompat.prototype */{
 	tagName:   'form',
 	className: 'compat-item',
 
diff --git src/wp-includes/js/media/views/attachment-filters.js src/wp-includes/js/media/views/attachment-filters.js
index 7f1a9612d..a228043c3 100644
--- src/wp-includes/js/media/views/attachment-filters.js
+++ src/wp-includes/js/media/views/attachment-filters.js
@@ -1,15 +1,17 @@
+var $ = jQuery,
+	AttachmentFilters;
+
 /**
  * wp.media.view.AttachmentFilters
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var $ = jQuery,
-	AttachmentFilters;
-
-AttachmentFilters = wp.media.View.extend({
+AttachmentFilters = wp.media.View.extend(/** @lends wp.media.view.AttachmentFilters.prototype */{
 	tagName:   'select',
 	className: 'attachment-filters',
 	id:        'media-attachment-filters',
diff --git src/wp-includes/js/media/views/attachment-filters/all.js src/wp-includes/js/media/views/attachment-filters/all.js
index cc79d12e8..fa85cbdba 100644
--- src/wp-includes/js/media/views/attachment-filters/all.js
+++ src/wp-includes/js/media/views/attachment-filters/all.js
@@ -1,16 +1,18 @@
+var l10n = wp.media.view.l10n,
+	All;
+
 /**
  * wp.media.view.AttachmentFilters.All
  *
+ * @memberOf wp.media.view.AttachmentFilters
+ *
  * @class
  * @augments wp.media.view.AttachmentFilters
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var l10n = wp.media.view.l10n,
-	All;
-
-All = wp.media.view.AttachmentFilters.extend({
+All = wp.media.view.AttachmentFilters.extend(/** @lends wp.media.view.AttachmentFilters.All.prototype */{
 	createFilters: function() {
 		var filters = {};
 
diff --git src/wp-includes/js/media/views/attachment-filters/date.js src/wp-includes/js/media/views/attachment-filters/date.js
index 5508e1be4..4d1b8f936 100644
--- src/wp-includes/js/media/views/attachment-filters/date.js
+++ src/wp-includes/js/media/views/attachment-filters/date.js
@@ -1,16 +1,18 @@
+var l10n = wp.media.view.l10n,
+	DateFilter;
+
 /**
  * A filter dropdown for month/dates.
  *
+ * @memberOf wp.media.view.AttachmentFilters
+ *
  * @class
  * @augments wp.media.view.AttachmentFilters
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var l10n = wp.media.view.l10n,
-	DateFilter;
-
-DateFilter = wp.media.view.AttachmentFilters.extend({
+DateFilter = wp.media.view.AttachmentFilters.extend(/** @lends wp.media.view.AttachmentFilters.Date.prototype */{
 	id: 'media-attachment-date-filters',
 
 	createFilters: function() {
diff --git src/wp-includes/js/media/views/attachment-filters/uploaded.js src/wp-includes/js/media/views/attachment-filters/uploaded.js
index 7ae0a53da..167d8d47c 100644
--- src/wp-includes/js/media/views/attachment-filters/uploaded.js
+++ src/wp-includes/js/media/views/attachment-filters/uploaded.js
@@ -1,16 +1,18 @@
+var l10n = wp.media.view.l10n,
+	Uploaded;
+
 /**
  * wp.media.view.AttachmentFilters.Uploaded
  *
+ * @memberOf wp.media.view.AttachmentFilters
+ *
  * @class
  * @augments wp.media.view.AttachmentFilters
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var l10n = wp.media.view.l10n,
-	Uploaded;
-
-Uploaded = wp.media.view.AttachmentFilters.extend({
+Uploaded = wp.media.view.AttachmentFilters.extend(/** @lends wp.media.view.AttachmentFilters.Uploaded.prototype */{
 	createFilters: function() {
 		var type = this.model.get('type'),
 			types = wp.media.view.settings.mimeTypes,
diff --git src/wp-includes/js/media/views/attachment.js src/wp-includes/js/media/views/attachment.js
index f61855586..3c93d597b 100644
--- src/wp-includes/js/media/views/attachment.js
+++ src/wp-includes/js/media/views/attachment.js
@@ -1,16 +1,18 @@
+var View = wp.media.View,
+	$ = jQuery,
+	Attachment;
+
 /**
  * wp.media.view.Attachment
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var View = wp.media.View,
-	$ = jQuery,
-	Attachment;
-
-Attachment = View.extend({
+Attachment = View.extend(/** @lends wp.media.view.Attachment.prototype */{
 	tagName:   'li',
 	className: 'attachment',
 	template:  wp.template('attachment'),
@@ -518,6 +520,37 @@ _.each({
 	album:   '_syncAlbum'
 }, function( method, setting ) {
 	/**
+	 * @function _syncCaption
+	 * @memberOf wp.media.view.Attachment
+	 * @instance
+	 *
+	 * @param {Backbone.Model} model
+	 * @param {string} value
+	 * @returns {wp.media.view.Attachment} Returns itself to allow chaining
+	 */
+	/**
+	 * @function _syncTitle
+	 * @memberOf wp.media.view.Attachment
+	 * @instance
+	 *
+	 * @param {Backbone.Model} model
+	 * @param {string} value
+	 * @returns {wp.media.view.Attachment} Returns itself to allow chaining
+	 */
+	/**
+	 * @function _syncArtist
+	 * @memberOf wp.media.view.Attachment
+	 * @instance
+	 *
+	 * @param {Backbone.Model} model
+	 * @param {string} value
+	 * @returns {wp.media.view.Attachment} Returns itself to allow chaining
+	 */
+	/**
+	 * @function _syncAlbum
+	 * @memberOf wp.media.view.Attachment
+	 * @instance
+	 *
 	 * @param {Backbone.Model} model
 	 * @param {string} value
 	 * @returns {wp.media.view.Attachment} Returns itself to allow chaining
diff --git src/wp-includes/js/media/views/attachment/details-two-column.js src/wp-includes/js/media/views/attachment/details-two-column.js
index 96a8fed8f..7d0b44104 100644
--- src/wp-includes/js/media/views/attachment/details-two-column.js
+++ src/wp-includes/js/media/views/attachment/details-two-column.js
@@ -1,9 +1,14 @@
+var Details = wp.media.view.Attachment.Details,
+	TwoColumn;
+
 /**
  * wp.media.view.Attachment.Details.TwoColumn
  *
  * A similar view to media.view.Attachment.Details
  * for use in the Edit Attachment modal.
  *
+ * @memberOf wp.media.view.Attachment.Details
+ *
  * @class
  * @augments wp.media.view.Attachment.Details
  * @augments wp.media.view.Attachment
@@ -11,10 +16,7 @@
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var Details = wp.media.view.Attachment.Details,
-	TwoColumn;
-
-TwoColumn = Details.extend({
+TwoColumn = Details.extend(/** @lends wp.media.view.Attachment.Details.TowColumn.prototype */{
 	template: wp.template( 'attachment-details-two-column' ),
 
 	initialize: function() {
diff --git src/wp-includes/js/media/views/attachment/details.js src/wp-includes/js/media/views/attachment/details.js
index f356aaadb..5dd682d55 100644
--- src/wp-includes/js/media/views/attachment/details.js
+++ src/wp-includes/js/media/views/attachment/details.js
@@ -1,17 +1,19 @@
+var Attachment = wp.media.view.Attachment,
+	l10n = wp.media.view.l10n,
+	Details;
+
 /**
  * wp.media.view.Attachment.Details
  *
+ * @memberOf wp.media.view.Attachment
+ *
  * @class
  * @augments wp.media.view.Attachment
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var Attachment = wp.media.view.Attachment,
-	l10n = wp.media.view.l10n,
-	Details;
-
-Details = Attachment.extend({
+Details = Attachment.extend(/** @lends wp.media.view.Attachment.Details.prototype */{
 	tagName:   'div',
 	className: 'attachment-details',
 	template:  wp.template('attachment-details'),
diff --git src/wp-includes/js/media/views/attachment/edit-library.js src/wp-includes/js/media/views/attachment/edit-library.js
index 4d9b23a72..0d3d029f7 100644
--- src/wp-includes/js/media/views/attachment/edit-library.js
+++ src/wp-includes/js/media/views/attachment/edit-library.js
@@ -1,13 +1,15 @@
 /**
  * wp.media.view.Attachment.EditLibrary
  *
+ * @memberOf wp.media.view.Attachment
+ *
  * @class
  * @augments wp.media.view.Attachment
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var EditLibrary = wp.media.view.Attachment.extend({
+var EditLibrary = wp.media.view.Attachment.extend(/** @lends wp.media.view.Attachment.EditLibrary.prototype */{
 	buttons: {
 		close: true
 	}
diff --git src/wp-includes/js/media/views/attachment/edit-selection.js src/wp-includes/js/media/views/attachment/edit-selection.js
index 26c68480b..f9c431854 100644
--- src/wp-includes/js/media/views/attachment/edit-selection.js
+++ src/wp-includes/js/media/views/attachment/edit-selection.js
@@ -1,5 +1,7 @@
 /**
- * wp.media.view.Attachments.EditSelection
+ * wp.media.view.Attachment.EditSelection
+ *
+ * @memberOf wp.media.view.Attachment
  *
  * @class
  * @augments wp.media.view.Attachment.Selection
@@ -8,7 +10,7 @@
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var EditSelection = wp.media.view.Attachment.Selection.extend({
+var EditSelection = wp.media.view.Attachment.Selection.extend(/** @lends wp.media.view.Attachment.EditSelection.prototype */{
 	buttons: {
 		close: true
 	}
diff --git src/wp-includes/js/media/views/attachment/library.js src/wp-includes/js/media/views/attachment/library.js
index ec0843054..1bbea30c5 100644
--- src/wp-includes/js/media/views/attachment/library.js
+++ src/wp-includes/js/media/views/attachment/library.js
@@ -1,13 +1,15 @@
 /**
  * wp.media.view.Attachment.Library
  *
+ * @memberOf wp.media.view.Attachment
+ *
  * @class
  * @augments wp.media.view.Attachment
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var Library = wp.media.view.Attachment.extend({
+var Library = wp.media.view.Attachment.extend(/** @lends wp.media.view.Attachment.Library.prototype */{
 	buttons: {
 		check: true
 	}
diff --git src/wp-includes/js/media/views/attachment/selection.js src/wp-includes/js/media/views/attachment/selection.js
index 3eae46549..4ca9ddd52 100644
--- src/wp-includes/js/media/views/attachment/selection.js
+++ src/wp-includes/js/media/views/attachment/selection.js
@@ -1,13 +1,15 @@
 /**
  * wp.media.view.Attachment.Selection
  *
+ * @memberOf wp.media.view.Attachment
+ *
  * @class
  * @augments wp.media.view.Attachment
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var Selection = wp.media.view.Attachment.extend({
+var Selection = wp.media.view.Attachment.extend(/** @lends wp.media.view.Attachment.Selection.prototype */{
 	className: 'attachment selection',
 
 	// On click, just select the model, instead of removing the model from
diff --git src/wp-includes/js/media/views/attachments.js src/wp-includes/js/media/views/attachments.js
index d217ccc73..73edcec8f 100644
--- src/wp-includes/js/media/views/attachments.js
+++ src/wp-includes/js/media/views/attachments.js
@@ -1,16 +1,18 @@
+var View = wp.media.View,
+	$ = jQuery,
+	Attachments;
+
 /**
  * wp.media.view.Attachments
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var View = wp.media.View,
-	$ = jQuery,
-	Attachments;
-
-Attachments = View.extend({
+Attachments = View.extend(/** @lends wp.media.view.Attachments.prototype */{
 	tagName:   'ul',
 	className: 'attachments',
 
diff --git src/wp-includes/js/media/views/attachments/browser.js src/wp-includes/js/media/views/attachments/browser.js
index eb077d074..0f4561b06 100644
--- src/wp-includes/js/media/views/attachments/browser.js
+++ src/wp-includes/js/media/views/attachments/browser.js
@@ -1,6 +1,14 @@
+var View = wp.media.View,
+	mediaTrash = wp.media.view.settings.mediaTrash,
+	l10n = wp.media.view.l10n,
+	$ = jQuery,
+	AttachmentsBrowser;
+
 /**
  * wp.media.view.AttachmentsBrowser
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
@@ -18,13 +26,7 @@
  * @param {boolean|string} [options.sidebar=true]  Whether to create a sidebar for the browser.
  *                                                 Accepts true, false, and 'errors'.
  */
-var View = wp.media.View,
-	mediaTrash = wp.media.view.settings.mediaTrash,
-	l10n = wp.media.view.l10n,
-	$ = jQuery,
-	AttachmentsBrowser;
-
-AttachmentsBrowser = View.extend({
+AttachmentsBrowser = View.extend(/** @lends wp.media.view.AttachmentsBrowser.prototype */{
 	tagName:   'div',
 	className: 'attachments-browser',
 
diff --git src/wp-includes/js/media/views/attachments/selection.js src/wp-includes/js/media/views/attachments/selection.js
index 8c3c5d00a..58eaadcd6 100644
--- src/wp-includes/js/media/views/attachments/selection.js
+++ src/wp-includes/js/media/views/attachments/selection.js
@@ -1,16 +1,18 @@
+var Attachments = wp.media.view.Attachments,
+	Selection;
+
 /**
  * wp.media.view.Attachments.Selection
  *
+ * @memberOf wp.media.view.Attachments
+ *
  * @class
  * @augments wp.media.view.Attachments
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var Attachments = wp.media.view.Attachments,
-	Selection;
-
-Selection = Attachments.extend({
+Selection = Attachments.extend(/** @lends wp.media.view.Attachments.Selection.prototype */{
 	events: {},
 	initialize: function() {
 		_.defaults( this.options, {
diff --git src/wp-includes/js/media/views/audio-details.js src/wp-includes/js/media/views/audio-details.js
index ec1ed8b33..afafca308 100644
--- src/wp-includes/js/media/views/audio-details.js
+++ src/wp-includes/js/media/views/audio-details.js
@@ -1,6 +1,11 @@
+var MediaDetails = wp.media.view.MediaDetails,
+	AudioDetails;
+
 /**
  * wp.media.view.AudioDetails
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.view.MediaDetails
  * @augments wp.media.view.Settings.AttachmentDisplay
@@ -9,10 +14,7 @@
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var MediaDetails = wp.media.view.MediaDetails,
-	AudioDetails;
-
-AudioDetails = MediaDetails.extend({
+AudioDetails = MediaDetails.extend(/** @lends wp.media.view.AudioDetails.prototype */{
 	className: 'audio-details',
 	template:  wp.template('audio-details'),
 
diff --git src/wp-includes/js/media/views/button-group.js src/wp-includes/js/media/views/button-group.js
index b0d97ba57..5b44d5ff1 100644
--- src/wp-includes/js/media/views/button-group.js
+++ src/wp-includes/js/media/views/button-group.js
@@ -1,15 +1,17 @@
+var $ = Backbone.$,
+	ButtonGroup;
+
 /**
  * wp.media.view.ButtonGroup
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var $ = Backbone.$,
-	ButtonGroup;
-
-ButtonGroup = wp.media.View.extend({
+ButtonGroup = wp.media.View.extend(/** @lends wp.media.view.ButtonGroup.prototype */{
 	tagName:   'div',
 	className: 'button-group button-large media-button-group',
 
diff --git src/wp-includes/js/media/views/button.js src/wp-includes/js/media/views/button.js
index 3442dc4fa..8f1af79d8 100644
--- src/wp-includes/js/media/views/button.js
+++ src/wp-includes/js/media/views/button.js
@@ -1,12 +1,14 @@
 /**
  * wp.media.view.Button
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var Button = wp.media.View.extend({
+var Button = wp.media.View.extend(/** @lends wp.media.view.Button.prototype */{
 	tagName:    'button',
 	className:  'media-button',
 	attributes: { type: 'button' },
diff --git src/wp-includes/js/media/views/button/delete-selected-permanently.js src/wp-includes/js/media/views/button/delete-selected-permanently.js
index 7c6a5e30b..a4b55d911 100644
--- src/wp-includes/js/media/views/button/delete-selected-permanently.js
+++ src/wp-includes/js/media/views/button/delete-selected-permanently.js
@@ -1,8 +1,14 @@
+var Button = wp.media.view.Button,
+	DeleteSelected = wp.media.view.DeleteSelectedButton,
+	DeleteSelectedPermanently;
+
 /**
  * wp.media.view.DeleteSelectedPermanentlyButton
  *
  * When MEDIA_TRASH is true, a button that handles bulk Delete Permanently logic
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.view.DeleteSelectedButton
  * @augments wp.media.view.Button
@@ -10,11 +16,7 @@
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var Button = wp.media.view.Button,
-	DeleteSelected = wp.media.view.DeleteSelectedButton,
-	DeleteSelectedPermanently;
-
-DeleteSelectedPermanently = DeleteSelected.extend({
+DeleteSelectedPermanently = DeleteSelected.extend(/** @lends wp.media.view.DeleteSelectedPermanentlyButton.prototype */{
 	initialize: function() {
 		DeleteSelected.prototype.initialize.apply( this, arguments );
 		this.controller.on( 'select:activate', this.selectActivate, this );
diff --git src/wp-includes/js/media/views/button/delete-selected.js src/wp-includes/js/media/views/button/delete-selected.js
index c9ee1b026..7c58ac2b7 100644
--- src/wp-includes/js/media/views/button/delete-selected.js
+++ src/wp-includes/js/media/views/button/delete-selected.js
@@ -1,19 +1,21 @@
+var Button = wp.media.view.Button,
+	l10n = wp.media.view.l10n,
+	DeleteSelected;
+
 /**
  * wp.media.view.DeleteSelectedButton
  *
  * A button that handles bulk Delete/Trash logic
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.view.Button
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var Button = wp.media.view.Button,
-	l10n = wp.media.view.l10n,
-	DeleteSelected;
-
-DeleteSelected = Button.extend({
+DeleteSelected = Button.extend(/** @lends wp.media.view.DeleteSelectedButton.prototype */{
 	initialize: function() {
 		Button.prototype.initialize.apply( this, arguments );
 		if ( this.options.filters ) {
diff --git src/wp-includes/js/media/views/button/select-mode-toggle.js src/wp-includes/js/media/views/button/select-mode-toggle.js
index 820e5ded4..3e3d6d76c 100644
--- src/wp-includes/js/media/views/button/select-mode-toggle.js
+++ src/wp-includes/js/media/views/button/select-mode-toggle.js
@@ -1,17 +1,20 @@
+
+var Button = wp.media.view.Button,
+	l10n = wp.media.view.l10n,
+	SelectModeToggle;
+
 /**
  * wp.media.view.SelectModeToggleButton
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.view.Button
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var Button = wp.media.view.Button,
-	l10n = wp.media.view.l10n,
-	SelectModeToggle;
-
-SelectModeToggle = Button.extend({
+SelectModeToggle = Button.extend(/** @lends wp.media.view.SelectModeToggle.prototype */{
 	initialize: function() {
 		_.defaults( this.options, {
 			size : ''
diff --git src/wp-includes/js/media/views/cropper.js src/wp-includes/js/media/views/cropper.js
index 9eb75c3f5..90012552d 100644
--- src/wp-includes/js/media/views/cropper.js
+++ src/wp-includes/js/media/views/cropper.js
@@ -1,3 +1,9 @@
+var View = wp.media.View,
+	UploaderStatus = wp.media.view.UploaderStatus,
+	l10n = wp.media.view.l10n,
+	$ = jQuery,
+	Cropper;
+
 /**
  * wp.media.view.Cropper
  *
@@ -7,18 +13,14 @@
  * wp.customize.HeaderControl.calculateImageSelectOptions via
  * wp.customize.HeaderControl.openMM.
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var View = wp.media.View,
-	UploaderStatus = wp.media.view.UploaderStatus,
-	l10n = wp.media.view.l10n,
-	$ = jQuery,
-	Cropper;
-
-Cropper = View.extend({
+Cropper = View.extend(/** @lends wp.media.view.Cropper.prototype */{
 	className: 'crop-content',
 	template: wp.template('crop-content'),
 	initialize: function() {
diff --git src/wp-includes/js/media/views/edit-image-details.js src/wp-includes/js/media/views/edit-image-details.js
index 3ef87a549..ee7490313 100644
--- src/wp-includes/js/media/views/edit-image-details.js
+++ src/wp-includes/js/media/views/edit-image-details.js
@@ -1,17 +1,19 @@
+var View = wp.media.View,
+	EditImage = wp.media.view.EditImage,
+	Details;
+
 /**
  * wp.media.view.EditImage.Details
  *
+ * @memberOf wp.media.view.EditImage
+ *
  * @class
  * @augments wp.media.view.EditImage
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var View = wp.media.View,
-	EditImage = wp.media.view.EditImage,
-	Details;
-
-Details = EditImage.extend({
+Details = EditImage.extend(/** @lends wp.media.view.EditImage.Details.prototype */{
 	initialize: function( options ) {
 		this.editor = window.imageEdit;
 		this.frame = options.frame;
diff --git src/wp-includes/js/media/views/edit-image.js src/wp-includes/js/media/views/edit-image.js
index 5254901f6..bc8fec7df 100644
--- src/wp-includes/js/media/views/edit-image.js
+++ src/wp-includes/js/media/views/edit-image.js
@@ -1,15 +1,17 @@
+var View = wp.media.View,
+	EditImage;
+
 /**
  * wp.media.view.EditImage
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var View = wp.media.View,
-	EditImage;
-
-EditImage = View.extend({
+EditImage = View.extend(/** @lends wp.media.view.EditImage.prototype */{
 	className: 'image-editor',
 	template: wp.template('image-editor'),
 
diff --git src/wp-includes/js/media/views/embed.js src/wp-includes/js/media/views/embed.js
index ad51fc6b9..d7b38161a 100644
--- src/wp-includes/js/media/views/embed.js
+++ src/wp-includes/js/media/views/embed.js
@@ -1,12 +1,14 @@
 /**
  * wp.media.view.Embed
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var Embed = wp.media.View.extend({
+var Embed = wp.media.View.extend(/** @lends wp.media.view.Ember.prototype */{
 	className: 'media-embed',
 
 	initialize: function() {
diff --git src/wp-includes/js/media/views/embed/image.js src/wp-includes/js/media/views/embed/image.js
index 7aff95673..8d8241b80 100644
--- src/wp-includes/js/media/views/embed/image.js
+++ src/wp-includes/js/media/views/embed/image.js
@@ -1,6 +1,11 @@
+var AttachmentDisplay = wp.media.view.Settings.AttachmentDisplay,
+	EmbedImage;
+
 /**
  * wp.media.view.EmbedImage
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.view.Settings.AttachmentDisplay
  * @augments wp.media.view.Settings
@@ -8,10 +13,7 @@
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var AttachmentDisplay = wp.media.view.Settings.AttachmentDisplay,
-	EmbedImage;
-
-EmbedImage = AttachmentDisplay.extend({
+EmbedImage = AttachmentDisplay.extend(/** @lends wp.media.view.EmbedImage.prototype */{
 	className: 'embed-media-settings',
 	template:  wp.template('embed-image-settings'),
 
diff --git src/wp-includes/js/media/views/embed/link.js src/wp-includes/js/media/views/embed/link.js
index 12126d8aa..ade3ae8ce 100644
--- src/wp-includes/js/media/views/embed/link.js
+++ src/wp-includes/js/media/views/embed/link.js
@@ -1,16 +1,18 @@
+var $ = jQuery,
+	EmbedLink;
+
 /**
  * wp.media.view.EmbedLink
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.view.Settings
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var $ = jQuery,
-	EmbedLink;
-
-EmbedLink = wp.media.view.Settings.extend({
+EmbedLink = wp.media.view.Settings.extend(/** @lends wp.media.view.EmbedLink.prototype */{
 	className: 'embed-link-settings',
 	template:  wp.template('embed-link-settings'),
 
diff --git src/wp-includes/js/media/views/embed/url.js src/wp-includes/js/media/views/embed/url.js
index ab2863f1d..ed485d6aa 100644
--- src/wp-includes/js/media/views/embed/url.js
+++ src/wp-includes/js/media/views/embed/url.js
@@ -1,16 +1,18 @@
+var View = wp.media.View,
+	$ = jQuery,
+	EmbedUrl;
+
 /**
  * wp.media.view.EmbedUrl
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var View = wp.media.View,
-	$ = jQuery,
-	EmbedUrl;
-
-EmbedUrl = View.extend({
+EmbedUrl = View.extend(/** @lends wp.media.view.EmbedUrl.prototype */{
 	tagName:   'label',
 	className: 'embed-url',
 
diff --git src/wp-includes/js/media/views/focus-manager.js src/wp-includes/js/media/views/focus-manager.js
index ef22adaf7..c9007d931 100644
--- src/wp-includes/js/media/views/focus-manager.js
+++ src/wp-includes/js/media/views/focus-manager.js
@@ -1,12 +1,14 @@
 /**
  * wp.media.view.FocusManager
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var FocusManager = wp.media.View.extend({
+var FocusManager = wp.media.View.extend(/** @lends wp.media.view.FocusManager.prototype */{
 
 	events: {
 		'keydown': 'constrainTabbing'
diff --git src/wp-includes/js/media/views/frame.js src/wp-includes/js/media/views/frame.js
index 539266a80..9c8581109 100644
--- src/wp-includes/js/media/views/frame.js
+++ src/wp-includes/js/media/views/frame.js
@@ -4,6 +4,8 @@
  * A frame is a composite view consisting of one or more regions and one or more
  * states.
  *
+ * @memberOf wp.media.view
+ *
  * @see wp.media.controller.State
  * @see wp.media.controller.Region
  *
@@ -13,7 +15,7 @@
  * @augments Backbone.View
  * @mixes wp.media.controller.StateMachine
  */
-var Frame = wp.media.View.extend({
+var Frame = wp.media.View.extend(/** @lends wp.media.view.Frame.prototype */{
 	initialize: function() {
 		_.defaults( this.options, {
 			mode: [ 'select' ]
@@ -141,7 +143,7 @@ var Frame = wp.media.View.extend({
 		/**
 		 * Frame mode deactivation event.
 		 *
-		 * @event this#{mode}:deactivate
+		 * @event wp.media.view.Frame#{mode}:deactivate
 		 */
 		this.trigger( mode + ':deactivate' );
 
diff --git src/wp-includes/js/media/views/frame/audio-details.js src/wp-includes/js/media/views/frame/audio-details.js
index 1e9aff60b..56dde0700 100644
--- src/wp-includes/js/media/views/frame/audio-details.js
+++ src/wp-includes/js/media/views/frame/audio-details.js
@@ -1,6 +1,14 @@
+var MediaDetails = wp.media.view.MediaFrame.MediaDetails,
+	MediaLibrary = wp.media.controller.MediaLibrary,
+
+	l10n = wp.media.view.l10n,
+	AudioDetails;
+
 /**
  * wp.media.view.MediaFrame.AudioDetails
  *
+ * @memberOf wp.media.view.MediaFrame
+ *
  * @class
  * @augments wp.media.view.MediaFrame.MediaDetails
  * @augments wp.media.view.MediaFrame.Select
@@ -11,13 +19,7 @@
  * @augments Backbone.View
  * @mixes wp.media.controller.StateMachine
  */
-var MediaDetails = wp.media.view.MediaFrame.MediaDetails,
-	MediaLibrary = wp.media.controller.MediaLibrary,
-
-	l10n = wp.media.view.l10n,
-	AudioDetails;
-
-AudioDetails = MediaDetails.extend({
+AudioDetails = MediaDetails.extend(/** @lends wp.media.view.MediaFrame.AudioDetails.prototype */{
 	defaults: {
 		id:      'audio',
 		url:     '',
diff --git src/wp-includes/js/media/views/frame/edit-attachments.js src/wp-includes/js/media/views/frame/edit-attachments.js
index c0f4e15a7..0f0606eb0 100644
--- src/wp-includes/js/media/views/frame/edit-attachments.js
+++ src/wp-includes/js/media/views/frame/edit-attachments.js
@@ -1,3 +1,9 @@
+var Frame = wp.media.view.Frame,
+	MediaFrame = wp.media.view.MediaFrame,
+
+	$ = jQuery,
+	EditAttachments;
+
 /**
  * wp.media.view.MediaFrame.EditAttachments
  *
@@ -7,6 +13,8 @@
  *
  * Requires an attachment model to be passed in the options hash under `model`.
  *
+ * @memberOf wp.media.view.MediaFrame
+ *
  * @class
  * @augments wp.media.view.Frame
  * @augments wp.media.View
@@ -14,13 +22,7 @@
  * @augments Backbone.View
  * @mixes wp.media.controller.StateMachine
  */
-var Frame = wp.media.view.Frame,
-	MediaFrame = wp.media.view.MediaFrame,
-
-	$ = jQuery,
-	EditAttachments;
-
-EditAttachments = MediaFrame.extend({
+EditAttachments = MediaFrame.extend(/** @lends wp.media.view.MediaFrame.EditAttachments.prototype */{
 
 	className: 'edit-attachment-frame',
 	template:  wp.template( 'edit-attachment-frame' ),
diff --git src/wp-includes/js/media/views/frame/image-details.js src/wp-includes/js/media/views/frame/image-details.js
index ed3817490..5188a8907 100644
--- src/wp-includes/js/media/views/frame/image-details.js
+++ src/wp-includes/js/media/views/frame/image-details.js
@@ -1,9 +1,15 @@
+var Select = wp.media.view.MediaFrame.Select,
+	l10n = wp.media.view.l10n,
+	ImageDetails;
+
 /**
  * wp.media.view.MediaFrame.ImageDetails
  *
  * A media frame for manipulating an image that's already been inserted
  * into a post.
  *
+ * @memberOf wp.media.view.MediaFrame
+ *
  * @class
  * @augments wp.media.view.MediaFrame.Select
  * @augments wp.media.view.MediaFrame
@@ -13,11 +19,7 @@
  * @augments Backbone.View
  * @mixes wp.media.controller.StateMachine
  */
-var Select = wp.media.view.MediaFrame.Select,
-	l10n = wp.media.view.l10n,
-	ImageDetails;
-
-ImageDetails = Select.extend({
+ImageDetails = Select.extend(/** @lends wp.media.view.MediaFrame.ImageDetails.prototype */{
 	defaults: {
 		id:      'image',
 		url:     '',
diff --git src/wp-includes/js/media/views/frame/manage.js src/wp-includes/js/media/views/frame/manage.js
index c260feb7f..4c244120a 100644
--- src/wp-includes/js/media/views/frame/manage.js
+++ src/wp-includes/js/media/views/frame/manage.js
@@ -1,3 +1,9 @@
+var MediaFrame = wp.media.view.MediaFrame,
+	Library = wp.media.controller.Library,
+
+	$ = Backbone.$,
+	Manage;
+
 /**
  * wp.media.view.MediaFrame.Manage
  *
@@ -5,6 +11,8 @@
  *
  * Used in the media grid view.
  *
+ * @memberOf wp.media.view.MediaFrame
+ *
  * @class
  * @augments wp.media.view.MediaFrame
  * @augments wp.media.view.Frame
@@ -13,15 +21,9 @@
  * @augments Backbone.View
  * @mixes wp.media.controller.StateMachine
  */
-var MediaFrame = wp.media.view.MediaFrame,
-	Library = wp.media.controller.Library,
-
-	$ = Backbone.$,
-	Manage;
-
-Manage = MediaFrame.extend({
+Manage = MediaFrame.extend(/** @lends wp.media.view.MediaFrame.Manage.prototype */{
 	/**
-	 * @global wp.Uploader
+	 * @constructs
 	 */
 	initialize: function() {
 		_.defaults( this.options, {
diff --git src/wp-includes/js/media/views/frame/media-details.js src/wp-includes/js/media/views/frame/media-details.js
index 407c1364e..ad2d9f018 100644
--- src/wp-includes/js/media/views/frame/media-details.js
+++ src/wp-includes/js/media/views/frame/media-details.js
@@ -1,6 +1,12 @@
+var Select = wp.media.view.MediaFrame.Select,
+	l10n = wp.media.view.l10n,
+	MediaDetails;
+
 /**
  * wp.media.view.MediaFrame.MediaDetails
  *
+ * @memberOf wp.media.view.MediaFrame
+ *
  * @class
  * @augments wp.media.view.MediaFrame.Select
  * @augments wp.media.view.MediaFrame
@@ -10,11 +16,7 @@
  * @augments Backbone.View
  * @mixes wp.media.controller.StateMachine
  */
-var Select = wp.media.view.MediaFrame.Select,
-	l10n = wp.media.view.l10n,
-	MediaDetails;
-
-MediaDetails = Select.extend({
+MediaDetails = Select.extend(/** @lends wp.media.view.MediaFrame.MediaDetails.prototype */{
 	defaults: {
 		id:      'media',
 		url:     '',
diff --git src/wp-includes/js/media/views/frame/post.js src/wp-includes/js/media/views/frame/post.js
index f4d078f97..7ea2b8fd3 100644
--- src/wp-includes/js/media/views/frame/post.js
+++ src/wp-includes/js/media/views/frame/post.js
@@ -1,8 +1,15 @@
+var Select = wp.media.view.MediaFrame.Select,
+	Library = wp.media.controller.Library,
+	l10n = wp.media.view.l10n,
+	Post;
+
 /**
  * wp.media.view.MediaFrame.Post
  *
  * The frame for manipulating media on the Edit Post page.
  *
+ * @memberOf wp.media.view.MediaFrame
+ *
  * @class
  * @augments wp.media.view.MediaFrame.Select
  * @augments wp.media.view.MediaFrame
@@ -12,12 +19,7 @@
  * @augments Backbone.View
  * @mixes wp.media.controller.StateMachine
  */
-var Select = wp.media.view.MediaFrame.Select,
-	Library = wp.media.controller.Library,
-	l10n = wp.media.view.l10n,
-	Post;
-
-Post = Select.extend({
+Post = Select.extend(/** @lends wp.media.view.MediaFrame.Post.prototype */{
 	initialize: function() {
 		this.counts = {
 			audio: {
@@ -443,6 +445,7 @@ Post = Select.extend({
 			requires: { selection: true },
 
 			/**
+			 * @callback
 			 * @fires wp.media.controller.State#insert
 			 */
 			click: function() {
diff --git src/wp-includes/js/media/views/frame/select.js src/wp-includes/js/media/views/frame/select.js
index 0569bc61b..5cb4a5402 100644
--- src/wp-includes/js/media/views/frame/select.js
+++ src/wp-includes/js/media/views/frame/select.js
@@ -1,8 +1,14 @@
+var MediaFrame = wp.media.view.MediaFrame,
+	l10n = wp.media.view.l10n,
+	Select;
+
 /**
  * wp.media.view.MediaFrame.Select
  *
  * A frame for selecting an item or items from the media library.
  *
+ * @memberOf wp.media.view.MediaFrame
+ *
  * @class
  * @augments wp.media.view.MediaFrame
  * @augments wp.media.view.Frame
@@ -11,12 +17,7 @@
  * @augments Backbone.View
  * @mixes wp.media.controller.StateMachine
  */
-
-var MediaFrame = wp.media.view.MediaFrame,
-	l10n = wp.media.view.l10n,
-	Select;
-
-Select = MediaFrame.extend({
+Select = MediaFrame.extend(/** @lends wp.media.view.MediaFrame.Select.prototype */{
 	initialize: function() {
 		// Call 'initialize' directly on the parent class.
 		MediaFrame.prototype.initialize.apply( this, arguments );
diff --git src/wp-includes/js/media/views/frame/video-details.js src/wp-includes/js/media/views/frame/video-details.js
index 8f7e414bc..2dbb22f77 100644
--- src/wp-includes/js/media/views/frame/video-details.js
+++ src/wp-includes/js/media/views/frame/video-details.js
@@ -1,6 +1,13 @@
+var MediaDetails = wp.media.view.MediaFrame.MediaDetails,
+	MediaLibrary = wp.media.controller.MediaLibrary,
+	l10n = wp.media.view.l10n,
+	VideoDetails;
+
 /**
  * wp.media.view.MediaFrame.VideoDetails
  *
+ * @memberOf wp.media.view.MediaFrame
+ *
  * @class
  * @augments wp.media.view.MediaFrame.MediaDetails
  * @augments wp.media.view.MediaFrame.Select
@@ -11,12 +18,7 @@
  * @augments Backbone.View
  * @mixes wp.media.controller.StateMachine
  */
-var MediaDetails = wp.media.view.MediaFrame.MediaDetails,
-	MediaLibrary = wp.media.controller.MediaLibrary,
-	l10n = wp.media.view.l10n,
-	VideoDetails;
-
-VideoDetails = MediaDetails.extend({
+VideoDetails = MediaDetails.extend(/** @lends wp.media.view.MediaFrame.VideoDetails.prototype */{
 	defaults: {
 		id:      'video',
 		url:     '',
diff --git src/wp-includes/js/media/views/iframe.js src/wp-includes/js/media/views/iframe.js
index 1471eac63..a8f5a6edb 100644
--- src/wp-includes/js/media/views/iframe.js
+++ src/wp-includes/js/media/views/iframe.js
@@ -1,12 +1,14 @@
 /**
  * wp.media.view.Iframe
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var Iframe = wp.media.View.extend({
+var Iframe = wp.media.View.extend(/** @lends wp.media.view.Iframe.prototype */{
 	className: 'media-iframe',
 	/**
 	 * @returns {wp.media.view.Iframe} Returns itself to allow chaining
diff --git src/wp-includes/js/media/views/image-details.js src/wp-includes/js/media/views/image-details.js
index 9d11cf1c1..def9ef7bb 100644
--- src/wp-includes/js/media/views/image-details.js
+++ src/wp-includes/js/media/views/image-details.js
@@ -1,6 +1,12 @@
+var AttachmentDisplay = wp.media.view.Settings.AttachmentDisplay,
+	$ = jQuery,
+	ImageDetails;
+
 /**
  * wp.media.view.ImageDetails
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.view.Settings.AttachmentDisplay
  * @augments wp.media.view.Settings
@@ -8,11 +14,7 @@
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var AttachmentDisplay = wp.media.view.Settings.AttachmentDisplay,
-	$ = jQuery,
-	ImageDetails;
-
-ImageDetails = AttachmentDisplay.extend({
+ImageDetails = AttachmentDisplay.extend(/** @lends wp.media.view.ImageDetails.prototype */{
 	className: 'image-details',
 	template:  wp.template('image-details'),
 	events: _.defaults( AttachmentDisplay.prototype.events, {
diff --git src/wp-includes/js/media/views/label.js src/wp-includes/js/media/views/label.js
index 26e811c78..bd4cc8b6b 100644
--- src/wp-includes/js/media/views/label.js
+++ src/wp-includes/js/media/views/label.js
@@ -1,12 +1,14 @@
 /**
  * wp.media.view.Label
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var Label = wp.media.View.extend({
+var Label = wp.media.View.extend(/** @lends wp.media.view.Label.prototype */{
 	tagName: 'label',
 	className: 'screen-reader-text',
 
diff --git src/wp-includes/js/media/views/media-details.js src/wp-includes/js/media/views/media-details.js
index 91a989fef..a418ec65b 100644
--- src/wp-includes/js/media/views/media-details.js
+++ src/wp-includes/js/media/views/media-details.js
@@ -1,8 +1,13 @@
 /* global MediaElementPlayer */
+var AttachmentDisplay = wp.media.view.Settings.AttachmentDisplay,
+	$ = jQuery,
+	MediaDetails;
 
 /**
  * wp.media.view.MediaDetails
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.view.Settings.AttachmentDisplay
  * @augments wp.media.view.Settings
@@ -10,11 +15,7 @@
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var AttachmentDisplay = wp.media.view.Settings.AttachmentDisplay,
-	$ = jQuery,
-	MediaDetails;
-
-MediaDetails = AttachmentDisplay.extend({
+MediaDetails = AttachmentDisplay.extend(/** @lends wp.media.view.MediaDetails.prototype */{
 	initialize: function() {
 		_.bindAll(this, 'success');
 		this.players = [];
@@ -86,9 +87,6 @@ MediaDetails = AttachmentDisplay.extend({
 		this.scriptXhr = false;
 	},
 
-	/**
-	 * @global MediaElementPlayer
-	 */
 	setPlayer : function() {
 		var src;
 
@@ -144,7 +142,7 @@ MediaDetails = AttachmentDisplay.extend({
 	resetFocus: function() {
 		this.$( '.embed-media-settings' ).scrollTop( 0 );
 	}
-}, {
+},/** @lends wp.media.view.MediaDetails */{
 	instances : 0,
 	/**
 	 * When multiple players in the DOM contain the same src, things get weird.
diff --git src/wp-includes/js/media/views/media-frame.js src/wp-includes/js/media/views/media-frame.js
index acc5e62a7..50a97f804 100644
--- src/wp-includes/js/media/views/media-frame.js
+++ src/wp-includes/js/media/views/media-frame.js
@@ -1,8 +1,14 @@
+var Frame = wp.media.view.Frame,
+	$ = jQuery,
+	MediaFrame;
+
 /**
  * wp.media.view.MediaFrame
  *
  * The frame used to create the media modal.
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.view.Frame
  * @augments wp.media.View
@@ -10,11 +16,7 @@
  * @augments Backbone.View
  * @mixes wp.media.controller.StateMachine
  */
-var Frame = wp.media.view.Frame,
-	$ = jQuery,
-	MediaFrame;
-
-MediaFrame = Frame.extend({
+MediaFrame = Frame.extend(/** @lends wp.media.view.MediaFrame.prototype */{
 	className: 'media-frame',
 	template:  wp.template('media-frame'),
 	regions:   ['menu','title','content','toolbar','router'],
@@ -24,7 +26,7 @@ MediaFrame = Frame.extend({
 	},
 
 	/**
-	 * @global wp.Uploader
+	 * @constructs
 	 */
 	initialize: function() {
 		Frame.prototype.initialize.apply( this, arguments );
@@ -232,6 +234,38 @@ MediaFrame = Frame.extend({
 // Map some of the modal's methods to the frame.
 _.each(['open','close','attach','detach','escape'], function( method ) {
 	/**
+	 * @function open
+	 * @memberOf wp.media.view.MediaFrame
+	 * @instance
+	 *
+	 * @returns {wp.media.view.MediaFrame} Returns itself to allow chaining
+	 */
+	/**
+	 * @function close
+	 * @memberOf wp.media.view.MediaFrame
+	 * @instance
+	 *
+	 * @returns {wp.media.view.MediaFrame} Returns itself to allow chaining
+	 */
+	/**
+	 * @function attach
+	 * @memberOf wp.media.view.MediaFrame
+	 * @instance
+	 *
+	 * @returns {wp.media.view.MediaFrame} Returns itself to allow chaining
+	 */
+	/**
+	 * @function detach
+	 * @memberOf wp.media.view.MediaFrame
+	 * @instance
+	 *
+	 * @returns {wp.media.view.MediaFrame} Returns itself to allow chaining
+	 */
+	/**
+	 * @function escape
+	 * @memberOf wp.media.view.MediaFrame
+	 * @instance
+	 *
 	 * @returns {wp.media.view.MediaFrame} Returns itself to allow chaining
 	 */
 	MediaFrame.prototype[ method ] = function() {
diff --git src/wp-includes/js/media/views/menu-item.js src/wp-includes/js/media/views/menu-item.js
index 76f378a8a..375e86f18 100644
--- src/wp-includes/js/media/views/menu-item.js
+++ src/wp-includes/js/media/views/menu-item.js
@@ -1,15 +1,17 @@
+var $ = jQuery,
+	MenuItem;
+
 /**
  * wp.media.view.MenuItem
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var $ = jQuery,
-	MenuItem;
-
-MenuItem = wp.media.View.extend({
+MenuItem = wp.media.View.extend(/** @lends wp.media.view.MenuItem.prototype */{
 	tagName:   'a',
 	className: 'media-menu-item',
 
diff --git src/wp-includes/js/media/views/menu.js src/wp-includes/js/media/views/menu.js
index 0d85b4291..899b99d65 100644
--- src/wp-includes/js/media/views/menu.js
+++ src/wp-includes/js/media/views/menu.js
@@ -1,17 +1,19 @@
+var MenuItem = wp.media.view.MenuItem,
+	PriorityList = wp.media.view.PriorityList,
+	Menu;
+
 /**
  * wp.media.view.Menu
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.view.PriorityList
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var MenuItem = wp.media.view.MenuItem,
-	PriorityList = wp.media.view.PriorityList,
-	Menu;
-
-Menu = PriorityList.extend({
+Menu = PriorityList.extend(/** @lends wp.media.view.Menu.prototype */{
 	tagName:   'div',
 	className: 'media-menu',
 	property:  'state',
diff --git src/wp-includes/js/media/views/modal.js src/wp-includes/js/media/views/modal.js
index 42e0b241b..f31a59d6d 100644
--- src/wp-includes/js/media/views/modal.js
+++ src/wp-includes/js/media/views/modal.js
@@ -1,17 +1,19 @@
+var $ = jQuery,
+	Modal;
+
 /**
  * wp.media.view.Modal
  *
  * A modal view, which the media modal uses as its default container.
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var $ = jQuery,
-	Modal;
-
-Modal = wp.media.View.extend({
+Modal = wp.media.View.extend(/** @lends wp.media.view.Modal.prototype */{
 	tagName:  'div',
 	template: wp.template('media-modal'),
 
diff --git src/wp-includes/js/media/views/priority-list.js src/wp-includes/js/media/views/priority-list.js
index 8a9facb4d..16533e842 100644
--- src/wp-includes/js/media/views/priority-list.js
+++ src/wp-includes/js/media/views/priority-list.js
@@ -1,12 +1,14 @@
 /**
  * wp.media.view.PriorityList
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var PriorityList = wp.media.View.extend({
+var PriorityList = wp.media.View.extend(/** @lends wp.media.view.PriorityList.prototype */{
 	tagName:   'div',
 
 	initialize: function() {
diff --git src/wp-includes/js/media/views/router-item.js src/wp-includes/js/media/views/router-item.js
index 8365e9249..2176716f6 100644
--- src/wp-includes/js/media/views/router-item.js
+++ src/wp-includes/js/media/views/router-item.js
@@ -1,13 +1,15 @@
 /**
  * wp.media.view.RouterItem
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.view.MenuItem
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var RouterItem = wp.media.view.MenuItem.extend({
+var RouterItem = wp.media.view.MenuItem.extend(/** @lends wp.media.view.RouterItem.prototype */{
 	/**
 	 * On click handler to activate the content region's corresponding mode.
 	 */
diff --git src/wp-includes/js/media/views/router.js src/wp-includes/js/media/views/router.js
index 379e42205..85a1eee77 100644
--- src/wp-includes/js/media/views/router.js
+++ src/wp-includes/js/media/views/router.js
@@ -1,6 +1,11 @@
+var Menu = wp.media.view.Menu,
+	Router;
+
 /**
  * wp.media.view.Router
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.view.Menu
  * @augments wp.media.view.PriorityList
@@ -8,10 +13,7 @@
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var Menu = wp.media.view.Menu,
-	Router;
-
-Router = Menu.extend({
+Router = Menu.extend(/** @lends wp.media.view.Router.prototype */{
 	tagName:   'div',
 	className: 'media-router',
 	property:  'contentMode',
diff --git src/wp-includes/js/media/views/search.js src/wp-includes/js/media/views/search.js
index 53b6a38a7..80b986e40 100644
--- src/wp-includes/js/media/views/search.js
+++ src/wp-includes/js/media/views/search.js
@@ -1,15 +1,17 @@
+var l10n = wp.media.view.l10n,
+	Search;
+
 /**
  * wp.media.view.Search
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var l10n = wp.media.view.l10n,
-	Search;
-
-Search = wp.media.View.extend({
+Search = wp.media.View.extend(/** @lends wp.media.view.Search.prototype */{
 	tagName:   'input',
 	className: 'search',
 	id:        'media-search-input',
diff --git src/wp-includes/js/media/views/selection.js src/wp-includes/js/media/views/selection.js
index 6bb6d9ca1..0d411bd33 100644
--- src/wp-includes/js/media/views/selection.js
+++ src/wp-includes/js/media/views/selection.js
@@ -1,15 +1,17 @@
+var l10n = wp.media.view.l10n,
+	Selection;
+
 /**
  * wp.media.view.Selection
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var l10n = wp.media.view.l10n,
-	Selection;
-
-Selection = wp.media.View.extend({
+Selection = wp.media.View.extend(/** @lends wp.media.view.Selection.prototype */{
 	tagName:   'div',
 	className: 'media-selection',
 	template:  wp.template('media-selection'),
diff --git src/wp-includes/js/media/views/settings.js src/wp-includes/js/media/views/settings.js
index cdc69b42b..2469277c5 100644
--- src/wp-includes/js/media/views/settings.js
+++ src/wp-includes/js/media/views/settings.js
@@ -1,16 +1,18 @@
+var View = wp.media.View,
+	$ = Backbone.$,
+	Settings;
+
 /**
  * wp.media.view.Settings
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var View = wp.media.View,
-	$ = Backbone.$,
-	Settings;
-
-Settings = View.extend({
+Settings = View.extend(/** @lends wp.media.view.Settings.prototype */{
 	events: {
 		'click button':    'updateHandler',
 		'change input':    'updateHandler',
diff --git src/wp-includes/js/media/views/settings/attachment-display.js src/wp-includes/js/media/views/settings/attachment-display.js
index 14fb3cdb7..584c8458a 100644
--- src/wp-includes/js/media/views/settings/attachment-display.js
+++ src/wp-includes/js/media/views/settings/attachment-display.js
@@ -1,16 +1,18 @@
+var Settings = wp.media.view.Settings,
+	AttachmentDisplay;
+
 /**
  * wp.media.view.Settings.AttachmentDisplay
  *
+ * @memberOf wp.media.view.Settings
+ *
  * @class
  * @augments wp.media.view.Settings
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var Settings = wp.media.view.Settings,
-	AttachmentDisplay;
-
-AttachmentDisplay = Settings.extend({
+AttachmentDisplay = Settings.extend(/** @lends wp.media.view.Settings.AttachmentDisplay.prototype */{
 	className: 'attachment-display-settings',
 	template:  wp.template('attachment-display-settings'),
 
diff --git src/wp-includes/js/media/views/settings/gallery.js src/wp-includes/js/media/views/settings/gallery.js
index 43962b22d..3033206fb 100644
--- src/wp-includes/js/media/views/settings/gallery.js
+++ src/wp-includes/js/media/views/settings/gallery.js
@@ -1,13 +1,15 @@
 /**
  * wp.media.view.Settings.Gallery
  *
+ * @memberOf wp.media.view.Settings
+ *
  * @class
  * @augments wp.media.view.Settings
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var Gallery = wp.media.view.Settings.extend({
+var Gallery = wp.media.view.Settings.extend(/** @lends wp.media.view.Settings.Gallery.prototype */{
 	className: 'collection-settings gallery-settings',
 	template:  wp.template('gallery-settings')
 });
diff --git src/wp-includes/js/media/views/settings/playlist.js src/wp-includes/js/media/views/settings/playlist.js
index 25cfa4ef3..d36be6e2d 100644
--- src/wp-includes/js/media/views/settings/playlist.js
+++ src/wp-includes/js/media/views/settings/playlist.js
@@ -1,13 +1,15 @@
 /**
  * wp.media.view.Settings.Playlist
  *
+ * @memberOf wp.media.view.Settings
+ *
  * @class
  * @augments wp.media.view.Settings
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var Playlist = wp.media.view.Settings.extend({
+var Playlist = wp.media.view.Settings.extend(/** @lends wp.media.view.Settings.Playlist.prototype */{
 	className: 'collection-settings playlist-settings',
 	template:  wp.template('playlist-settings')
 });
diff --git src/wp-includes/js/media/views/sidebar.js src/wp-includes/js/media/views/sidebar.js
index 0f732bd2e..538c4cb5f 100644
--- src/wp-includes/js/media/views/sidebar.js
+++ src/wp-includes/js/media/views/sidebar.js
@@ -1,13 +1,15 @@
 /**
  * wp.media.view.Sidebar
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.view.PriorityList
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var Sidebar = wp.media.view.PriorityList.extend({
+var Sidebar = wp.media.view.PriorityList.extend(/** @lends wp.media.view.Sidebar.prototype */{
 	className: 'media-sidebar'
 });
 
diff --git src/wp-includes/js/media/views/site-icon-cropper.js src/wp-includes/js/media/views/site-icon-cropper.js
index c5d0467e7..0f84d8203 100644
--- src/wp-includes/js/media/views/site-icon-cropper.js
+++ src/wp-includes/js/media/views/site-icon-cropper.js
@@ -1,3 +1,6 @@
+var View = wp.media.view,
+	SiteIconCropper;
+
 /**
  * wp.media.view.SiteIconCropper
  *
@@ -6,16 +9,15 @@
  * Takes imgAreaSelect options from
  * wp.customize.SiteIconControl.calculateImageSelectOptions.
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.view.Cropper
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var View = wp.media.view,
-	SiteIconCropper;
-
-SiteIconCropper = View.Cropper.extend({
+SiteIconCropper = View.Cropper.extend(/** @lends wp.media.view.SiteIconCropper.prototype */{
 	className: 'crop-content site-icon',
 
 	ready: function () {
diff --git src/wp-includes/js/media/views/site-icon-preview.js src/wp-includes/js/media/views/site-icon-preview.js
index 251631d02..51a1f4281 100644
--- src/wp-includes/js/media/views/site-icon-preview.js
+++ src/wp-includes/js/media/views/site-icon-preview.js
@@ -1,18 +1,20 @@
+var View = wp.media.View,
+	$ = jQuery,
+	SiteIconPreview;
+
 /**
  * wp.media.view.SiteIconPreview
  *
  * Shows a preview of the Site Icon as a favicon and app icon while cropping.
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var View = wp.media.View,
-	$ = jQuery,
-	SiteIconPreview;
-
-SiteIconPreview = View.extend({
+SiteIconPreview = View.extend(/** @lends wp.media.view.SiteIconPreview.prototype */{
 	className: 'site-icon-preview',
 	template: wp.template( 'site-icon-preview' ),
 
diff --git src/wp-includes/js/media/views/spinner.js src/wp-includes/js/media/views/spinner.js
index 7c3891327..4a73807dc 100644
--- src/wp-includes/js/media/views/spinner.js
+++ src/wp-includes/js/media/views/spinner.js
@@ -1,12 +1,14 @@
 /**
  * wp.media.view.Spinner
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var Spinner = wp.media.View.extend({
+var Spinner = wp.media.View.extend(/** @lends wp.media.view.Spinner.prototype */{
 	tagName:   'span',
 	className: 'spinner',
 	spinnerTimeout: false,
diff --git src/wp-includes/js/media/views/toolbar.js src/wp-includes/js/media/views/toolbar.js
index e1884bf0a..258d12697 100644
--- src/wp-includes/js/media/views/toolbar.js
+++ src/wp-includes/js/media/views/toolbar.js
@@ -1,18 +1,20 @@
+var View = wp.media.View,
+	Toolbar;
+
 /**
  * wp.media.view.Toolbar
  *
  * A toolbar which consists of a primary and a secondary section. Each sections
  * can be filled with views.
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var View = wp.media.View,
-	Toolbar;
-
-Toolbar = View.extend({
+Toolbar = View.extend(/** @lends wp.media.view.Toolbar.prototype */{
 	tagName:   'div',
 	className: 'media-toolbar',
 
diff --git src/wp-includes/js/media/views/toolbar/embed.js src/wp-includes/js/media/views/toolbar/embed.js
index 3ddc6f4c0..655014a0f 100644
--- src/wp-includes/js/media/views/toolbar/embed.js
+++ src/wp-includes/js/media/views/toolbar/embed.js
@@ -1,6 +1,12 @@
+var Select = wp.media.view.Toolbar.Select,
+	l10n = wp.media.view.l10n,
+	Embed;
+
 /**
  * wp.media.view.Toolbar.Embed
  *
+ * @memberOf wp.media.view.Toolbar
+ *
  * @class
  * @augments wp.media.view.Toolbar.Select
  * @augments wp.media.view.Toolbar
@@ -8,11 +14,7 @@
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var Select = wp.media.view.Toolbar.Select,
-	l10n = wp.media.view.l10n,
-	Embed;
-
-Embed = Select.extend({
+Embed = Select.extend(/** @lends wp.media.view.Toolbar.Embed.prototype */{
 	initialize: function() {
 		_.defaults( this.options, {
 			text: l10n.insertIntoPost,
diff --git src/wp-includes/js/media/views/toolbar/select.js src/wp-includes/js/media/views/toolbar/select.js
index 5cbe3f74a..f0d2d5ee9 100644
--- src/wp-includes/js/media/views/toolbar/select.js
+++ src/wp-includes/js/media/views/toolbar/select.js
@@ -1,17 +1,19 @@
+var Toolbar = wp.media.view.Toolbar,
+	l10n = wp.media.view.l10n,
+	Select;
+
 /**
  * wp.media.view.Toolbar.Select
  *
+ * @memberOf wp.media.view.Toolbar
+ *
  * @class
  * @augments wp.media.view.Toolbar
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var Toolbar = wp.media.view.Toolbar,
-	l10n = wp.media.view.l10n,
-	Select;
-
-Select = Toolbar.extend({
+Select = Toolbar.extend(/** @lends wp.media.view.Toolbar.Select.prototype */{
 	initialize: function() {
 		var options = this.options;
 
diff --git src/wp-includes/js/media/views/uploader/editor.js src/wp-includes/js/media/views/uploader/editor.js
index a8cfeb9b7..ddc0d3d5b 100644
--- src/wp-includes/js/media/views/uploader/editor.js
+++ src/wp-includes/js/media/views/uploader/editor.js
@@ -1,20 +1,22 @@
+var View = wp.media.View,
+	l10n = wp.media.view.l10n,
+	$ = jQuery,
+	EditorUploader;
+
 /**
  * Creates a dropzone on WP editor instances (elements with .wp-editor-wrap)
  * and relays drag'n'dropped files to a media workflow.
  *
  * wp.media.view.EditorUploader
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var View = wp.media.View,
-	l10n = wp.media.view.l10n,
-	$ = jQuery,
-	EditorUploader;
-
-EditorUploader = View.extend({
+EditorUploader = View.extend(/** @lends wp.media.view.EditorUploader.prototype */{
 	tagName:   'div',
 	className: 'uploader-editor',
 	template:  wp.template( 'uploader-editor' ),
diff --git src/wp-includes/js/media/views/uploader/inline.js src/wp-includes/js/media/views/uploader/inline.js
index dfb208f85..f35e10b84 100644
--- src/wp-includes/js/media/views/uploader/inline.js
+++ src/wp-includes/js/media/views/uploader/inline.js
@@ -1,17 +1,19 @@
+var View = wp.media.View,
+	UploaderInline;
+
 /**
  * wp.media.view.UploaderInline
  *
  * The inline uploader that shows up in the 'Upload Files' tab.
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var View = wp.media.View,
-	UploaderInline;
-
-UploaderInline = View.extend({
+UploaderInline = View.extend(/** @lends wp.media.view.UploaderInline.prototype */{
 	tagName:   'div',
 	className: 'uploader-inline',
 	template:  wp.template('uploader-inline'),
diff --git src/wp-includes/js/media/views/uploader/status-error.js src/wp-includes/js/media/views/uploader/status-error.js
index e7e52a432..b0efb824a 100644
--- src/wp-includes/js/media/views/uploader/status-error.js
+++ src/wp-includes/js/media/views/uploader/status-error.js
@@ -1,12 +1,14 @@
 /**
  * wp.media.view.UploaderStatusError
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var UploaderStatusError = wp.media.View.extend({
+var UploaderStatusError = wp.media.View.extend(/** @lends wp.media.view.UploaderStatusError.prototype */{
 	className: 'upload-error',
 	template:  wp.template('uploader-status-error')
 });
diff --git src/wp-includes/js/media/views/uploader/status.js src/wp-includes/js/media/views/uploader/status.js
index 4de919d2f..b95e61ae6 100644
--- src/wp-includes/js/media/views/uploader/status.js
+++ src/wp-includes/js/media/views/uploader/status.js
@@ -1,17 +1,19 @@
+var View = wp.media.View,
+	UploaderStatus;
+
 /**
  * wp.media.view.UploaderStatus
  *
  * An uploader status for on-going uploads.
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var View = wp.media.View,
-	UploaderStatus;
-
-UploaderStatus = View.extend({
+UploaderStatus = View.extend(/** @lends wp.media.view.UploaderStatus.prototype */{
 	className: 'media-uploader-status',
 	template:  wp.template('uploader-status'),
 
@@ -31,7 +33,6 @@ UploaderStatus = View.extend({
 		this.errors.on( 'add', this.error, this );
 	},
 	/**
-	 * @global wp.Uploader
 	 * @returns {wp.media.view.UploaderStatus}
 	 */
 	dispose: function() {
@@ -117,8 +118,6 @@ UploaderStatus = View.extend({
 	},
 
 	/**
-	 * @global wp.Uploader
-	 *
 	 * @param {Object} event
 	 */
 	dismiss: function( event ) {
diff --git src/wp-includes/js/media/views/uploader/window.js src/wp-includes/js/media/views/uploader/window.js
index 77cc89ca5..84b158f7c 100644
--- src/wp-includes/js/media/views/uploader/window.js
+++ src/wp-includes/js/media/views/uploader/window.js
@@ -1,8 +1,13 @@
+var $ = jQuery,
+	UploaderWindow;
+
 /**
  * wp.media.view.UploaderWindow
  *
  * An uploader window that allows for dragging and dropping media.
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.View
  * @augments wp.Backbone.View
@@ -14,10 +19,7 @@
  * @param {jQuery} [options.uploader.dropzone] jQuery collection of the dropzone.
  * @param {object} [options.uploader.params]
  */
-var $ = jQuery,
-	UploaderWindow;
-
-UploaderWindow = wp.media.View.extend({
+UploaderWindow = wp.media.View.extend(/** @lends wp.media.view.UploaderWindow.prototype */{
 	tagName:   'div',
 	className: 'uploader-window',
 	template:  wp.template('uploader-window'),
diff --git src/wp-includes/js/media/views/video-details.js src/wp-includes/js/media/views/video-details.js
index c6227e6f8..ac5c91e3c 100644
--- src/wp-includes/js/media/views/video-details.js
+++ src/wp-includes/js/media/views/video-details.js
@@ -1,6 +1,11 @@
+var MediaDetails = wp.media.view.MediaDetails,
+	VideoDetails;
+
 /**
  * wp.media.view.VideoDetails
  *
+ * @memberOf wp.media.view
+ *
  * @class
  * @augments wp.media.view.MediaDetails
  * @augments wp.media.view.Settings.AttachmentDisplay
@@ -9,10 +14,7 @@
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var MediaDetails = wp.media.view.MediaDetails,
-	VideoDetails;
-
-VideoDetails = MediaDetails.extend({
+VideoDetails = MediaDetails.extend(/** @lends wp.media.view.VideoDetails.prototype */{
 	className: 'video-details',
 	template:  wp.template('video-details'),
 
diff --git src/wp-includes/js/media/views/view.js src/wp-includes/js/media/views/view.js
index 66e66a547..b5069f280 100644
--- src/wp-includes/js/media/views/view.js
+++ src/wp-includes/js/media/views/view.js
@@ -10,11 +10,13 @@
  * This behavior has since been removed, and should not be used
  * outside of the media manager.
  *
+ * @memberOf wp.media
+ *
  * @class
  * @augments wp.Backbone.View
  * @augments Backbone.View
  */
-var View = wp.Backbone.View.extend({
+var View = wp.Backbone.View.extend(/** @lends wp.media.View.prototype */{
 	constructor: function( options ) {
 		if ( options && options.controller ) {
 			this.controller = options.controller;
diff --git src/wp-includes/js/plupload/wp-plupload.js src/wp-includes/js/plupload/wp-plupload.js
index 032a38fef..39df22e0a 100644
--- src/wp-includes/js/plupload/wp-plupload.js
+++ src/wp-includes/js/plupload/wp-plupload.js
@@ -198,7 +198,6 @@ window.wp = window.wp || {};
 		/**
 		 * After files were filtered and added to the queue, create a model for each.
 		 *
-		 * @event FilesAdded
 		 * @param {plupload.Uploader} uploader Uploader instance.
 		 * @param {Array}             files    Array of file objects that were added to queue by the user.
 		 */
@@ -340,7 +339,7 @@ window.wp = window.wp || {};
 		}
 	};
 
-	$.extend( Uploader.prototype, {
+	$.extend( Uploader.prototype, /** @lends wp.Uploader.prototype */{
 		/**
 		 * Acts as a shortcut to extending the uploader's multipart_params object.
 		 *
diff --git src/wp-includes/js/shortcode.js src/wp-includes/js/shortcode.js
index 86f8dc64b..02d4918b2 100644
--- src/wp-includes/js/shortcode.js
+++ src/wp-includes/js/shortcode.js
@@ -1,6 +1,6 @@
 // Utility functions for parsing and handling shortcodes in JavaScript.
 
-// Ensure the global `wp` object exists.
+/** @namespace wp */
 window.wp = window.wp || {};
 
 (function(){
diff --git src/wp-includes/js/wp-a11y.js src/wp-includes/js/wp-a11y.js
index 7ccdd7540..8639650a8 100644
--- src/wp-includes/js/wp-a11y.js
+++ src/wp-includes/js/wp-a11y.js
@@ -1,3 +1,4 @@
+/** @namespace wp */
 window.wp = window.wp || {};
 
 ( function ( wp, $ ) {
@@ -94,6 +95,7 @@ window.wp = window.wp || {};
 		}
 	});
 
+	/** @namespace wp.a11y */
 	wp.a11y = wp.a11y || {};
 	wp.a11y.speak = speak;
 
diff --git src/wp-includes/js/wp-api.js src/wp-includes/js/wp-api.js
index 634db4357..60d9ed973 100644
--- src/wp-includes/js/wp-api.js
+++ src/wp-includes/js/wp-api.js
@@ -6,12 +6,17 @@
 	 * Initialise the WP_API.
 	 */
 	function WP_API() {
+		/** @namespace wp.api.models */
 		this.models = {};
+		/** @namespace wp.api.collections */
 		this.collections = {};
+		/** @namespace wp.api.views */
 		this.views = {};
 	}
 
+	/** @namespace wp */
 	window.wp            = window.wp || {};
+	/** @namespace wp.api */
 	wp.api               = wp.api || new WP_API();
 	wp.api.versionString = wp.api.versionString || 'wp/v2/';
 
@@ -28,8 +33,11 @@
 
 	var pad, r;
 
+	/** @namespace wp */
 	window.wp = window.wp || {};
+	/** @namespace wp.api */
 	wp.api = wp.api || {};
+	/** @namespace wp.api.utils */
 	wp.api.utils = wp.api.utils || {};
 
 	/**
@@ -997,7 +1005,11 @@
 
 	var Endpoint, initializedDeferreds = {},
 		wpApiSettings = window.wpApiSettings || {};
+
+	/** @namespace wp */
 	window.wp = window.wp || {};
+
+	/** @namespace wp.api */
 	wp.api    = wp.api || {};
 
 	// If wpApiSettings is unavailable, try the default.
@@ -1005,7 +1017,7 @@
 		wpApiSettings.root = window.location.origin + '/wp-json/';
 	}
 
-	Endpoint = Backbone.Model.extend( {
+	Endpoint = Backbone.Model.extend(/** @lends Endpoint.prototype */{
 		defaults: {
 			apiRoot: wpApiSettings.root,
 			versionString: wp.api.versionString,
@@ -1054,6 +1066,8 @@
 					 * When the server returns the schema model data, store the data in a sessionCache so we don't
 					 * have to retrieve it again for this session. Then, construct the models and collections based
 					 * on the schema model data.
+					 *
+					 * @callback
 					 */
 					success: function( newSchemaModel ) {
 
diff --git src/wp-includes/js/wp-backbone.js src/wp-includes/js/wp-backbone.js
index 8cbfe6f50..53e3c3ad7 100644
--- src/wp-includes/js/wp-backbone.js
+++ src/wp-includes/js/wp-backbone.js
@@ -1,7 +1,8 @@
+/** @namespace wp */
 window.wp = window.wp || {};
 
 (function ($) {
-	// Create the WordPress Backbone namespace.
+	/** @namespace wp.Backbone */
 	wp.Backbone = {};
 
 
diff --git src/wp-includes/js/wp-custom-header.js src/wp-includes/js/wp-custom-header.js
index b2979f12e..9cb29d10c 100644
--- src/wp-includes/js/wp-custom-header.js
+++ src/wp-includes/js/wp-custom-header.js
@@ -3,6 +3,7 @@
 
 	var NativeHandler, YouTubeHandler;
 
+	/** @namespace wp */
 	window.wp = window.wp || {};
 
 	// Fail gracefully in unsupported browsers.
@@ -32,7 +33,9 @@
 	/**
 	 * Create a custom header instance.
 	 *
-	 * @class CustomHeader
+	 * @memberOf wp
+	 *
+	 * @class
 	 */
 	function CustomHeader() {
 		this.handlers = {
@@ -91,7 +94,9 @@
 	/**
 	 * Create a video handler instance.
 	 *
-	 * @class BaseHandler
+	 * @memberOf wp
+	 *
+	 * @class
 	 */
 	function BaseHandler() {}
 
@@ -228,6 +233,8 @@
 	/**
 	 * Create a custom handler.
 	 *
+	 * @memberOf wp
+	 *
 	 * @param {object} protoProps Properties to apply to the prototype.
 	 * @return CustomHandler The subclass.
 	 */
@@ -252,9 +259,11 @@
 	/**
 	 * Native video handler.
 	 *
-	 * @class NativeHandler
+	 * @memberOf wp
+	 *
+	 * @class
 	 */
-	NativeHandler = BaseHandler.extend({
+	NativeHandler = BaseHandler.extend(/** @lends wp.NativeHandler.prototype */{
 		/**
 		 * Whether the native handler supports a video.
 		 *
@@ -324,9 +333,11 @@
 	/**
 	 * YouTube video handler.
 	 *
-	 * @class YouTubeHandler
+	 * @memberOf wp
+	 *
+	 * @class wp.YouTubeHandler
 	 */
-	YouTubeHandler = BaseHandler.extend({
+	YouTubeHandler = BaseHandler.extend(/** @lends wp.YouTubeHandler.prototype */{
 		/**
 		 * Whether the handler supports a video.
 		 *
diff --git src/wp-includes/js/wp-embed.js src/wp-includes/js/wp-embed.js
index 3be0dc724..a25e09e8e 100644
--- src/wp-includes/js/wp-embed.js
+++ src/wp-includes/js/wp-embed.js
@@ -19,6 +19,7 @@
 			}
 		}
 
+	/** @namespace wp */
 	window.wp = window.wp || {};
 
 	if ( !! window.wp.receiveEmbedMessage ) {
diff --git src/wp-includes/js/wp-pointer.js src/wp-includes/js/wp-pointer.js
index 4cea390ef..a6b13c7fa 100644
--- src/wp-includes/js/wp-pointer.js
+++ src/wp-includes/js/wp-pointer.js
@@ -6,7 +6,10 @@
 	var identifier = 0,
 		zindex = 9999;
 
-	$.widget('wp.pointer', {
+	/**
+	 * @class $.widget.wp.pointer
+	 */
+	$.widget('wp.pointer',/** @lends $.widget.wp.pointer.prototype */{
 		options: {
 			pointerClass: 'wp-pointer',
 			pointerWidth: 320,
diff --git src/wp-includes/js/wp-util.js src/wp-includes/js/wp-util.js
index 527441dda..6ffa97dcc 100644
--- src/wp-includes/js/wp-util.js
+++ src/wp-includes/js/wp-util.js
@@ -1,4 +1,6 @@
 /* global _wpUtilSettings */
+
+/** @namespace wp */
 window.wp = window.wp || {};
 
 (function ($) {
