wp/wp-admin/js/theme.js
changeset 0 d970ebf37754
child 5 5e2f62d02dcd
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wp/wp-admin/js/theme.js	Wed Nov 06 03:21:17 2013 +0000
@@ -0,0 +1,279 @@
+/**
+ * Theme Browsing
+ *
+ * Controls visibility of theme details on manage and install themes pages.
+ */
+jQuery( function($) {
+	$('#availablethemes').on( 'click', '.theme-detail', function (event) {
+		var theme   = $(this).closest('.available-theme'),
+			details = theme.find('.themedetaildiv');
+
+		if ( ! details.length ) {
+			details = theme.find('.install-theme-info .theme-details');
+			details = details.clone().addClass('themedetaildiv').appendTo( theme ).hide();
+		}
+
+		details.toggle();
+		event.preventDefault();
+	});
+});
+
+/**
+ * Theme Browser Thickbox
+ *
+ * Aligns theme browser thickbox.
+ */
+var tb_position;
+jQuery(document).ready( function($) {
+	tb_position = function() {
+		var tbWindow = $('#TB_window'), width = $(window).width(), H = $(window).height(), W = ( 1040 < width ) ? 1040 : width, adminbar_height = 0;
+
+		if ( $('body.admin-bar').length )
+			adminbar_height = 28;
+
+		if ( tbWindow.size() ) {
+			tbWindow.width( W - 50 ).height( H - 45 - adminbar_height );
+			$('#TB_iframeContent').width( W - 50 ).height( H - 75 - adminbar_height );
+			tbWindow.css({'margin-left': '-' + parseInt( ( ( W - 50 ) / 2 ), 10 ) + 'px'});
+			if ( typeof document.body.style.maxWidth != 'undefined' )
+				tbWindow.css({'top': 20 + adminbar_height + 'px','margin-top':'0'});
+		};
+	};
+
+	$(window).resize(function(){ tb_position(); });
+});
+
+/**
+ * Theme Install
+ *
+ * Displays theme previews on theme install pages.
+ */
+jQuery( function($) {
+	if( ! window.postMessage )
+		return;
+
+	var preview = $('#theme-installer'),
+		info    = preview.find('.install-theme-info'),
+		panel   = preview.find('.wp-full-overlay-main'),
+		body    = $( document.body );
+
+	preview.on( 'click', '.close-full-overlay', function( event ) {
+		preview.fadeOut( 200, function() {
+			panel.empty();
+			body.removeClass('theme-installer-active full-overlay-active');
+		});
+		event.preventDefault();
+	});
+
+	preview.on( 'click', '.collapse-sidebar', function( event ) {
+		preview.toggleClass( 'collapsed' ).toggleClass( 'expanded' );
+		event.preventDefault();
+	});
+
+	$('#availablethemes').on( 'click', '.install-theme-preview', function( event ) {
+		var src;
+
+		info.html( $(this).closest('.installable-theme').find('.install-theme-info').html() );
+		src = info.find( '.theme-preview-url' ).val();
+		panel.html( '<iframe src="' + src + '" />');
+		preview.fadeIn( 200, function() {
+			body.addClass('theme-installer-active full-overlay-active');
+		});
+		event.preventDefault();
+	});
+});
+
+var ThemeViewer;
+
+(function($){
+	ThemeViewer = function( args ) {
+
+		function init() {
+			$( '#filter-click, #mini-filter-click' ).unbind( 'click' ).click( function() {
+				$( '#filter-click' ).toggleClass( 'current' );
+				$( '#filter-box' ).slideToggle();
+				$( '#current-theme' ).slideToggle( 300 );
+				return false;
+			});
+
+			$( '#filter-box :checkbox' ).unbind( 'click' ).click( function() {
+				var count = $( '#filter-box :checked' ).length,
+					text  = $( '#filter-click' ).text();
+
+				if ( text.indexOf( '(' ) != -1 )
+					text = text.substr( 0, text.indexOf( '(' ) );
+
+				if ( count == 0 )
+					$( '#filter-click' ).text( text );
+				else
+					$( '#filter-click' ).text( text + ' (' + count + ')' );
+			});
+
+			/* $('#filter-box :submit').unbind( 'click' ).click(function() {
+				var features = [];
+				$('#filter-box :checked').each(function() {
+					features.push($(this).val());
+				});
+
+				listTable.update_rows({'features': features}, true, function() {
+					$( '#filter-click' ).toggleClass( 'current' );
+					$( '#filter-box' ).slideToggle();
+					$( '#current-theme' ).slideToggle( 300 );
+				});
+
+				return false;
+			}); */
+		}
+
+		// These are the functions we expose
+		var api = {
+			init: init
+		};
+
+	return api;
+	}
+})(jQuery);
+
+jQuery( document ).ready( function($) {
+	theme_viewer = new ThemeViewer();
+	theme_viewer.init();
+});
+
+
+/**
+ * Class that provides infinite scroll for Themes admin screens
+ *
+ * @since 3.4
+ *
+ * @uses ajaxurl
+ * @uses list_args
+ * @uses theme_list_args
+ * @uses $('#_ajax_fetch_list_nonce').val()
+* */
+var ThemeScroller;
+(function($){
+	ThemeScroller = {
+		querying: false,
+		scrollPollingDelay: 500,
+		failedRetryDelay: 4000,
+		outListBottomThreshold: 300,
+
+		/**
+		 * Initializer
+		 *
+		 * @since 3.4
+		 * @access private
+		 */
+		init: function() {
+			var self = this;
+
+			// Get out early if we don't have the required arguments.
+			if ( typeof ajaxurl === 'undefined' ||
+				 typeof list_args === 'undefined' ||
+				 typeof theme_list_args === 'undefined' ) {
+					$('.pagination-links').show();
+					return;
+			}
+
+			// Handle inputs
+			this.nonce = $('#_ajax_fetch_list_nonce').val();
+			this.nextPage = ( theme_list_args.paged + 1 );
+
+			// Cache jQuery selectors
+			this.$outList = $('#availablethemes');
+			this.$spinner = $('div.tablenav.bottom').children( '.spinner' );
+			this.$window = $(window);
+			this.$document = $(document);
+
+			/**
+			 * If there are more pages to query, then start polling to track
+			 * when user hits the bottom of the current page
+			 */
+			if ( theme_list_args.total_pages >= this.nextPage )
+				this.pollInterval =
+					setInterval( function() {
+						return self.poll();
+					}, this.scrollPollingDelay );
+		},
+
+		/**
+		 * Checks to see if user has scrolled to bottom of page.
+		 * If so, requests another page of content from self.ajax().
+		 *
+		 * @since 3.4
+		 * @access private
+		 */
+		poll: function() {
+			var bottom = this.$document.scrollTop() + this.$window.innerHeight();
+
+			if ( this.querying ||
+				( bottom < this.$outList.height() - this.outListBottomThreshold ) )
+				return;
+
+			this.ajax();
+		},
+
+		/**
+		 * Applies results passed from this.ajax() to $outList
+		 *
+		 * @since 3.4
+		 * @access private
+		 *
+		 * @param results Array with results from this.ajax() query.
+		 */
+		process: function( results ) {
+			if ( results === undefined ) {
+				clearInterval( this.pollInterval );
+				return;
+			}
+
+			if ( this.nextPage > theme_list_args.total_pages )
+				clearInterval( this.pollInterval );
+
+			if ( this.nextPage <= ( theme_list_args.total_pages + 1 ) )
+				this.$outList.append( results.rows );
+		},
+
+		/**
+		 * Queries next page of themes
+		 *
+		 * @since 3.4
+		 * @access private
+		 */
+		ajax: function() {
+			var self = this;
+
+			this.querying = true;
+
+			var query = {
+				action: 'fetch-list',
+				paged: this.nextPage,
+				s: theme_list_args.search,
+				tab: theme_list_args.tab,
+				type: theme_list_args.type,
+				_ajax_fetch_list_nonce: this.nonce,
+				'features[]': theme_list_args.features,
+				'list_args': list_args
+			};
+
+			this.$spinner.show();
+			$.getJSON( ajaxurl, query )
+				.done( function( response ) {
+					self.nextPage++;
+					self.process( response );
+					self.$spinner.hide();
+					self.querying = false;
+				})
+				.fail( function() {
+					self.$spinner.hide();
+					self.querying = false;
+					setTimeout( function() { self.ajax(); }, self.failedRetryDelay );
+				});
+		}
+	}
+
+	$(document).ready( function($) {
+		ThemeScroller.init();
+	});
+
+})(jQuery);