|
1 /** |
|
2 * Theme Browsing |
|
3 * |
|
4 * Controls visibility of theme details on manage and install themes pages. |
|
5 */ |
|
6 jQuery( function($) { |
|
7 $('#availablethemes').on( 'click', '.theme-detail', function (event) { |
|
8 var theme = $(this).closest('.available-theme'), |
|
9 details = theme.find('.themedetaildiv'); |
|
10 |
|
11 if ( ! details.length ) { |
|
12 details = theme.find('.install-theme-info .theme-details'); |
|
13 details = details.clone().addClass('themedetaildiv').appendTo( theme ).hide(); |
|
14 } |
|
15 |
|
16 details.toggle(); |
|
17 event.preventDefault(); |
|
18 }); |
|
19 }); |
|
20 |
|
21 /** |
|
22 * Theme Browser Thickbox |
|
23 * |
|
24 * Aligns theme browser thickbox. |
|
25 */ |
|
26 var tb_position; |
|
27 jQuery(document).ready( function($) { |
|
28 tb_position = function() { |
|
29 var tbWindow = $('#TB_window'), width = $(window).width(), H = $(window).height(), W = ( 1040 < width ) ? 1040 : width, adminbar_height = 0; |
|
30 |
|
31 if ( $('body.admin-bar').length ) |
|
32 adminbar_height = 28; |
|
33 |
|
34 if ( tbWindow.size() ) { |
|
35 tbWindow.width( W - 50 ).height( H - 45 - adminbar_height ); |
|
36 $('#TB_iframeContent').width( W - 50 ).height( H - 75 - adminbar_height ); |
|
37 tbWindow.css({'margin-left': '-' + parseInt( ( ( W - 50 ) / 2 ), 10 ) + 'px'}); |
|
38 if ( typeof document.body.style.maxWidth != 'undefined' ) |
|
39 tbWindow.css({'top': 20 + adminbar_height + 'px','margin-top':'0'}); |
|
40 }; |
|
41 }; |
|
42 |
|
43 $(window).resize(function(){ tb_position(); }); |
|
44 }); |
|
45 |
|
46 /** |
|
47 * Theme Install |
|
48 * |
|
49 * Displays theme previews on theme install pages. |
|
50 */ |
|
51 jQuery( function($) { |
|
52 if( ! window.postMessage ) |
|
53 return; |
|
54 |
|
55 var preview = $('#theme-installer'), |
|
56 info = preview.find('.install-theme-info'), |
|
57 panel = preview.find('.wp-full-overlay-main'), |
|
58 body = $( document.body ); |
|
59 |
|
60 preview.on( 'click', '.close-full-overlay', function( event ) { |
|
61 preview.fadeOut( 200, function() { |
|
62 panel.empty(); |
|
63 body.removeClass('theme-installer-active full-overlay-active'); |
|
64 }); |
|
65 event.preventDefault(); |
|
66 }); |
|
67 |
|
68 preview.on( 'click', '.collapse-sidebar', function( event ) { |
|
69 preview.toggleClass( 'collapsed' ).toggleClass( 'expanded' ); |
|
70 event.preventDefault(); |
|
71 }); |
|
72 |
|
73 $('#availablethemes').on( 'click', '.install-theme-preview', function( event ) { |
|
74 var src; |
|
75 |
|
76 info.html( $(this).closest('.installable-theme').find('.install-theme-info').html() ); |
|
77 src = info.find( '.theme-preview-url' ).val(); |
|
78 panel.html( '<iframe src="' + src + '" />'); |
|
79 preview.fadeIn( 200, function() { |
|
80 body.addClass('theme-installer-active full-overlay-active'); |
|
81 }); |
|
82 event.preventDefault(); |
|
83 }); |
|
84 }); |
|
85 |
|
86 var ThemeViewer; |
|
87 |
|
88 (function($){ |
|
89 ThemeViewer = function( args ) { |
|
90 |
|
91 function init() { |
|
92 $( '#filter-click, #mini-filter-click' ).unbind( 'click' ).click( function() { |
|
93 $( '#filter-click' ).toggleClass( 'current' ); |
|
94 $( '#filter-box' ).slideToggle(); |
|
95 $( '#current-theme' ).slideToggle( 300 ); |
|
96 return false; |
|
97 }); |
|
98 |
|
99 $( '#filter-box :checkbox' ).unbind( 'click' ).click( function() { |
|
100 var count = $( '#filter-box :checked' ).length, |
|
101 text = $( '#filter-click' ).text(); |
|
102 |
|
103 if ( text.indexOf( '(' ) != -1 ) |
|
104 text = text.substr( 0, text.indexOf( '(' ) ); |
|
105 |
|
106 if ( count == 0 ) |
|
107 $( '#filter-click' ).text( text ); |
|
108 else |
|
109 $( '#filter-click' ).text( text + ' (' + count + ')' ); |
|
110 }); |
|
111 |
|
112 /* $('#filter-box :submit').unbind( 'click' ).click(function() { |
|
113 var features = []; |
|
114 $('#filter-box :checked').each(function() { |
|
115 features.push($(this).val()); |
|
116 }); |
|
117 |
|
118 listTable.update_rows({'features': features}, true, function() { |
|
119 $( '#filter-click' ).toggleClass( 'current' ); |
|
120 $( '#filter-box' ).slideToggle(); |
|
121 $( '#current-theme' ).slideToggle( 300 ); |
|
122 }); |
|
123 |
|
124 return false; |
|
125 }); */ |
|
126 } |
|
127 |
|
128 // These are the functions we expose |
|
129 var api = { |
|
130 init: init |
|
131 }; |
|
132 |
|
133 return api; |
|
134 } |
|
135 })(jQuery); |
|
136 |
|
137 jQuery( document ).ready( function($) { |
|
138 theme_viewer = new ThemeViewer(); |
|
139 theme_viewer.init(); |
|
140 }); |
|
141 |
|
142 |
|
143 /** |
|
144 * Class that provides infinite scroll for Themes admin screens |
|
145 * |
|
146 * @since 3.4 |
|
147 * |
|
148 * @uses ajaxurl |
|
149 * @uses list_args |
|
150 * @uses theme_list_args |
|
151 * @uses $('#_ajax_fetch_list_nonce').val() |
|
152 * */ |
|
153 var ThemeScroller; |
|
154 (function($){ |
|
155 ThemeScroller = { |
|
156 querying: false, |
|
157 scrollPollingDelay: 500, |
|
158 failedRetryDelay: 4000, |
|
159 outListBottomThreshold: 300, |
|
160 |
|
161 /** |
|
162 * Initializer |
|
163 * |
|
164 * @since 3.4 |
|
165 * @access private |
|
166 */ |
|
167 init: function() { |
|
168 var self = this; |
|
169 |
|
170 // Get out early if we don't have the required arguments. |
|
171 if ( typeof ajaxurl === 'undefined' || |
|
172 typeof list_args === 'undefined' || |
|
173 typeof theme_list_args === 'undefined' ) { |
|
174 $('.pagination-links').show(); |
|
175 return; |
|
176 } |
|
177 |
|
178 // Handle inputs |
|
179 this.nonce = $('#_ajax_fetch_list_nonce').val(); |
|
180 this.nextPage = ( theme_list_args.paged + 1 ); |
|
181 |
|
182 // Cache jQuery selectors |
|
183 this.$outList = $('#availablethemes'); |
|
184 this.$spinner = $('div.tablenav.bottom').children( '.spinner' ); |
|
185 this.$window = $(window); |
|
186 this.$document = $(document); |
|
187 |
|
188 /** |
|
189 * If there are more pages to query, then start polling to track |
|
190 * when user hits the bottom of the current page |
|
191 */ |
|
192 if ( theme_list_args.total_pages >= this.nextPage ) |
|
193 this.pollInterval = |
|
194 setInterval( function() { |
|
195 return self.poll(); |
|
196 }, this.scrollPollingDelay ); |
|
197 }, |
|
198 |
|
199 /** |
|
200 * Checks to see if user has scrolled to bottom of page. |
|
201 * If so, requests another page of content from self.ajax(). |
|
202 * |
|
203 * @since 3.4 |
|
204 * @access private |
|
205 */ |
|
206 poll: function() { |
|
207 var bottom = this.$document.scrollTop() + this.$window.innerHeight(); |
|
208 |
|
209 if ( this.querying || |
|
210 ( bottom < this.$outList.height() - this.outListBottomThreshold ) ) |
|
211 return; |
|
212 |
|
213 this.ajax(); |
|
214 }, |
|
215 |
|
216 /** |
|
217 * Applies results passed from this.ajax() to $outList |
|
218 * |
|
219 * @since 3.4 |
|
220 * @access private |
|
221 * |
|
222 * @param results Array with results from this.ajax() query. |
|
223 */ |
|
224 process: function( results ) { |
|
225 if ( results === undefined ) { |
|
226 clearInterval( this.pollInterval ); |
|
227 return; |
|
228 } |
|
229 |
|
230 if ( this.nextPage > theme_list_args.total_pages ) |
|
231 clearInterval( this.pollInterval ); |
|
232 |
|
233 if ( this.nextPage <= ( theme_list_args.total_pages + 1 ) ) |
|
234 this.$outList.append( results.rows ); |
|
235 }, |
|
236 |
|
237 /** |
|
238 * Queries next page of themes |
|
239 * |
|
240 * @since 3.4 |
|
241 * @access private |
|
242 */ |
|
243 ajax: function() { |
|
244 var self = this; |
|
245 |
|
246 this.querying = true; |
|
247 |
|
248 var query = { |
|
249 action: 'fetch-list', |
|
250 paged: this.nextPage, |
|
251 s: theme_list_args.search, |
|
252 tab: theme_list_args.tab, |
|
253 type: theme_list_args.type, |
|
254 _ajax_fetch_list_nonce: this.nonce, |
|
255 'features[]': theme_list_args.features, |
|
256 'list_args': list_args |
|
257 }; |
|
258 |
|
259 this.$spinner.show(); |
|
260 $.getJSON( ajaxurl, query ) |
|
261 .done( function( response ) { |
|
262 self.nextPage++; |
|
263 self.process( response ); |
|
264 self.$spinner.hide(); |
|
265 self.querying = false; |
|
266 }) |
|
267 .fail( function() { |
|
268 self.$spinner.hide(); |
|
269 self.querying = false; |
|
270 setTimeout( function() { self.ajax(); }, self.failedRetryDelay ); |
|
271 }); |
|
272 } |
|
273 } |
|
274 |
|
275 $(document).ready( function($) { |
|
276 ThemeScroller.init(); |
|
277 }); |
|
278 |
|
279 })(jQuery); |