]> scripts.mit.edu Git - autoinstalls/wordpress.git/blobdiff - wp-admin/js/theme.dev.js
WordPress 3.4
[autoinstalls/wordpress.git] / wp-admin / js / theme.dev.js
index c575429566ef039d6e3a04530673cd94b7e96105..ae779c68039037645fd0dc7b0df3f187d7fad9ad 100644 (file)
@@ -1,3 +1,63 @@
+/**
+ * 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 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($){
@@ -45,7 +105,7 @@ var ThemeViewer;
                        init: init
                };
 
-       return api;
+       return api;
        }
 })(jQuery);
 
@@ -53,3 +113,142 @@ 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( 'img.ajax-loading' );
+                       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.css( 'visibility', 'visible' );
+                       $.getJSON( ajaxurl, query )
+                               .done( function( response ) {
+                                       self.nextPage++;
+                                       self.process( response );
+                                       self.$spinner.css( 'visibility', 'hidden' );
+                                       self.querying = false;
+                               })
+                               .fail( function() {
+                                       self.$spinner.css( 'visibility', 'hidden' );
+                                       self.querying = false;
+                                       setTimeout( function() { self.ajax(); }, self.failedRetryDelay );
+                               });
+               }
+       }
+
+       $(document).ready( function($) {
+               ThemeScroller.init();
+       });
+
+})(jQuery);