Force Regenerate Thumbnails - Version 1.0

Version Description

  • First release.

=

Download this release

Release Info

Developer Pedro Elsner
Plugin Icon 128x128 Force Regenerate Thumbnails
Version 1.0
Comparing to
See all releases

Version 1.0

force-regenerate-thumbnails.php ADDED
@@ -0,0 +1,498 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Plugin Name: Force Regenerate Thumbnails
4
+ Plugin URI: http://pedroelsner.com/2012/08/forcando-a-atualizacao-de-thumbnails-no-wordpress
5
+ Description: Based in Regenerate Thumbnails, REALLY force the regenerate thumbnail. This is my small contribution. All credits and thanks to Viper007Bond
6
+ Version: 1.0
7
+ Author: Pedro Elsner
8
+ Author URI: http://www.pedroelsner.com/
9
+ */
10
+
11
+
12
+ /**
13
+ * Force Regenerate Thumbnails
14
+ *
15
+ * @since 1.0
16
+ */
17
+ class ForceRegenerateThumbnails {
18
+
19
+ /**
20
+ * Register ID of management page
21
+ *
22
+ * @var
23
+ * @since 1.0
24
+ */
25
+ var $menu_id;
26
+
27
+ /**
28
+ * User capability
29
+ *
30
+ * @access public
31
+ * @since 1.0
32
+ */
33
+ public $capability;
34
+
35
+ /**
36
+ * Plugin initialization
37
+ *
38
+ * @access public
39
+ * @since 1.0
40
+ */
41
+ function ForceRegenerateThumbnails() {
42
+
43
+ load_plugin_textdomain('force-regenerate-thumbnails', false, '/force-regenerate-thumbnails/localization');
44
+
45
+ add_action('admin_menu', array(&$this, 'add_admin_menu'));
46
+ add_action('admin_enqueue_scripts', array(&$this, 'admin_enqueues'));
47
+ add_action('wp_ajax_regeneratethumbnail', array(&$this, 'ajax_process_image'));
48
+ add_filter('media_row_actions', array(&$this, 'add_media_row_action'), 10, 2);
49
+ add_action('admin_head-upload.php', array(&$this, 'add_bulk_actions_via_javascript'));
50
+ add_action('admin_action_bulk_force_regenerate_thumbnails', array(&$this, 'bulk_action_handler'));
51
+ add_action('admin_action_-1', array(&$this, 'bulk_action_handler'));
52
+
53
+ // Allow people to change what capability is required to use this plugin
54
+ $this->capability = apply_filters('regenerate_thumbs_cap', 'manage_options');
55
+ }
56
+
57
+ /**
58
+ * Register the management page
59
+ *
60
+ * @access public
61
+ * @since 1.0
62
+ */
63
+ function add_admin_menu() {
64
+ $this->menu_id = add_management_page(__('Force Regenerate Thumbnails', 'force-regenerate-thumbnails' ), __( 'Force Regenerate Thumbnails', 'force-regenerate-thumbnails' ), $this->capability, 'force-regenerate-thumbnails', array(&$this, 'force_regenerate_interface') );
65
+ }
66
+
67
+ /**
68
+ * Enqueue the needed Javascript and CSS
69
+ *
70
+ * @param string $hook_suffix
71
+ * @access public
72
+ * @since 1.0
73
+ */
74
+ function admin_enqueues($hook_suffix) {
75
+
76
+ if ($hook_suffix != $this->menu_id) {
77
+ return;
78
+ }
79
+
80
+ // WordPress 3.1 vs older version compatibility
81
+ if (wp_script_is('jquery-ui-widget', 'registered')) {
82
+ wp_enqueue_script('jquery-ui-progressbar', plugins_url('jquery-ui/jquery.ui.progressbar.min.js', __FILE__), array('jquery-ui-core', 'jquery-ui-widget'), '1.8.6');
83
+ } else {
84
+ wp_enqueue_script('jquery-ui-progressbar', plugins_url('jquery-ui/jquery.ui.progressbar.min.1.7.2.js', __FILE__), array('jquery-ui-core'), '1.7.2');
85
+ }
86
+
87
+ wp_enqueue_style('jquery-ui-regenthumbs', plugins_url('jquery-ui/redmond/jquery-ui-1.7.2.custom.css', __FILE__), array(), '1.7.2');
88
+ }
89
+
90
+ /**
91
+ * Add a "Force Regenerate Thumbnails" link to the media row actions
92
+ *
93
+ * @param array $actions
94
+ * @param string $post
95
+ * @return array
96
+ * @access public
97
+ * @since 1.0
98
+ */
99
+ function add_media_row_action($actions, $post) {
100
+
101
+ if ('image/' != substr($post->post_mime_type, 0, 6) || !current_user_can($this->capability))
102
+ return $actions;
103
+
104
+ $url = wp_nonce_url( admin_url( 'tools.php?page=force-regenerate-thumbnails&goback=1&ids=' . $post->ID ), 'force-regenerate-thumbnails' );
105
+ $actions['regenerate_thumbnails'] = '<a href="' . esc_url( $url ) . '" title="' . esc_attr( __( "Regenerate the thumbnails for this single image", 'force-regenerate-thumbnails' ) ) . '">' . __( 'Force Regenerate Thumbnails', 'force-regenerate-thumbnails' ) . '</a>';
106
+
107
+ return $actions;
108
+ }
109
+
110
+ /**
111
+ * Add "Force Regenerate Thumbnails" to the Bulk Actions media dropdown
112
+ *
113
+ * @param array $actions Actions list
114
+ * @return array
115
+ * @access public
116
+ * @since 1.0
117
+ */
118
+ function add_bulk_actions($actions) {
119
+
120
+ $delete = false;
121
+ if (!empty($actions['delete'])) {
122
+ $delete = $actions['delete'];
123
+ unset($actions['delete']);
124
+ }
125
+
126
+ $actions['bulk_force_regenerate_thumbnails'] = __('Force Regenerate Thumbnails', 'force-regenerate-thumbnails');
127
+
128
+ if ($delete) {
129
+ $actions['delete'] = $delete;
130
+ }
131
+
132
+ return $actions;
133
+ }
134
+
135
+ /**
136
+ * Add new items to the Bulk Actions using Javascript
137
+ *
138
+ * @access public
139
+ * @since 1.0
140
+ */
141
+ function add_bulk_actions_via_javascript() {
142
+
143
+ if (!current_user_can( $this->capability)) {
144
+ return;
145
+ }
146
+ ?>
147
+ <script type="text/javascript">
148
+ jQuery(document).ready(function($){
149
+ $('select[name^="action"] option:last-child').before('<option value="bulk_force_regenerate_thumbnails"><?php echo esc_attr(__('Force Regenerate Thumbnails', 'force-regenerate-thumbnails')); ?></option>');
150
+ });
151
+ </script>
152
+ <?php
153
+ }
154
+
155
+ /**
156
+ * Handles the bulk actions POST
157
+ *
158
+ * @access public
159
+ * @since 1.0
160
+ */
161
+ function bulk_action_handler() {
162
+
163
+ if (empty($_REQUEST['action']) || ('bulk_force_regenerate_thumbnails' != $_REQUEST['action'] && 'bulk_force_regenerate_thumbnails' != $_REQUEST['action2'])) {
164
+ return;
165
+ }
166
+
167
+ if (empty($_REQUEST['media']) || ! is_array($_REQUEST['media'])) {
168
+ return;
169
+ }
170
+
171
+ check_admin_referer('bulk-media');
172
+ $ids = implode(',', array_map('intval', $_REQUEST['media']));
173
+
174
+ wp_redirect(add_query_arg('_wpnonce', wp_create_nonce('force-regenerate-thumbnails'), admin_url('tools.php?page=force-regenerate-thumbnails&goback=1&ids=' . $ids)));
175
+ exit();
176
+ }
177
+
178
+
179
+ /**
180
+ * The user interface plus thumbnail regenerator
181
+ *
182
+ * @access public
183
+ * @since 1.0
184
+ */
185
+ function force_regenerate_interface() {
186
+
187
+ global $wpdb;
188
+ ?>
189
+
190
+ <div id="message" class="updated fade" style="display:none"></div>
191
+
192
+ <div class="wrap regenthumbs">
193
+ <h2><?php _e('Force Regenerate Thumbnails', 'force-regenerate-thumbnails'); ?></h2>
194
+
195
+ <?php
196
+
197
+ // If the button was clicked
198
+ if (!empty($_POST['force-regenerate-thumbnails'] ) || !empty($_REQUEST['ids'])) {
199
+
200
+ // Capability check
201
+ if (!current_user_can( $this->capability))
202
+ wp_die(__('Cheatin&#8217; uh?'));
203
+
204
+ // Form nonce check
205
+ check_admin_referer('force-regenerate-thumbnails');
206
+
207
+ // Create the list of image IDs
208
+ if (!empty($_REQUEST['ids'])) {
209
+ $images = array_map('intval', explode(',', trim($_REQUEST['ids'], ',')));
210
+ $ids = implode(',', $images);
211
+ } else {
212
+
213
+ // Directly querying the database is normally frowned upon, but all
214
+ // of the API functions will return the full post objects which will
215
+ // suck up lots of memory. This is best, just not as future proof.
216
+ if (!$images = $wpdb->get_results("SELECT ID FROM $wpdb->posts WHERE post_type = 'attachment' AND post_mime_type LIKE 'image/%' ORDER BY ID DESC")) {
217
+ echo ' <p>' . sprintf(__("Unable to find any images. Are you sure <a href='%s'>some exist</a>?", 'force-regenerate-thumbnails'), admin_url('upload.php?post_mime_type=image')) . "</p></div>";
218
+ return;
219
+ }
220
+
221
+ // Generate the list of IDs
222
+ $ids = array();
223
+ foreach ($images as $image) {
224
+ $ids[] = $image->ID;
225
+ }
226
+ $ids = implode(',', $ids);
227
+ }
228
+
229
+ echo ' <p>' . __("Please be patient while the thumbnails are regenerated. You will be notified via this page when the regenerating is completed.", 'force-regenerate-thumbnails') . '</p>';
230
+
231
+ $count = count($images);
232
+ $text_goback = (!empty($_GET['goback']))
233
+ ? sprintf(__('To go back to the previous page, <a href="%s">click here</a>.', 'force-regenerate-thumbnails'), 'javascript:history.go(-1)')
234
+ : '';
235
+
236
+ $text_failures = sprintf(__('All done! %1$s image(s) were successfully resized in %2$s seconds and there were %3$s failure(s). To try regenerating the failed images again, <a href="%4$s">click here</a>. %5$s', 'force-regenerate-thumbnails'), "' + rt_successes + '", "' + rt_totaltime + '", "' + rt_errors + '", esc_url(wp_nonce_url(admin_url('tools.php?page=force-regenerate-thumbnails&goback=1'), 'force-regenerate-thumbnails') . '&ids=') . "' + rt_failedlist + '", $text_goback);
237
+ $text_nofailures = sprintf(__('All done! %1$s image(s) were successfully resized in %2$s seconds and there were 0 failures. %3$s', 'force-regenerate-thumbnails'), "' + rt_successes + '", "' + rt_totaltime + '", $text_goback);
238
+ ?>
239
+
240
+ <noscript><p><em><?php _e('You must enable Javascript in order to proceed!', 'force-regenerate-thumbnails') ?></em></p></noscript>
241
+
242
+ <div id="regenthumbs-bar" style="position:relative;height:25px;">
243
+ <div id="regenthumbs-bar-percent" style="position:absolute;left:50%;top:50%;width:300px;margin-left:-150px;height:25px;margin-top:-9px;font-weight:bold;text-align:center;"></div>
244
+ </div>
245
+
246
+ <p><input type="button" class="button hide-if-no-js" name="regenthumbs-stop" id="regenthumbs-stop" value="<?php _e('Abort Process', 'force-regenerate-thumbnails') ?>" /></p>
247
+
248
+ <h3 class="title"><?php _e('Process Information', 'force-regenerate-thumbnails'); ?></h3>
249
+
250
+ <p>
251
+ <?php printf(__('Total Images: %s', 'force-regenerate-thumbnails'), $count); ?><br />
252
+ <?php printf(__('Successes:: %s', 'force-regenerate-thumbnails'), '<span id="regenthumbs-debug-successcount">0</span>'); ?><br />
253
+ <?php printf(__('Failures: %s', 'force-regenerate-thumbnails'), '<span id="regenthumbs-debug-failurecount">0</span>'); ?>
254
+ </p>
255
+
256
+ <ol id="regenthumbs-debuglist">
257
+ <li style="display:none"></li>
258
+ </ol>
259
+
260
+ <script type="text/javascript">
261
+ // <![CDATA[
262
+ jQuery(document).ready(function($){
263
+ var i;
264
+ var rt_images = [<?php echo $ids; ?>];
265
+ var rt_total = rt_images.length;
266
+ var rt_count = 1;
267
+ var rt_percent = 0;
268
+ var rt_successes = 0;
269
+ var rt_errors = 0;
270
+ var rt_failedlist = '';
271
+ var rt_resulttext = '';
272
+ var rt_timestart = new Date().getTime();
273
+ var rt_timeend = 0;
274
+ var rt_totaltime = 0;
275
+ var rt_continue = true;
276
+
277
+ // Create the progress bar
278
+ $("#regenthumbs-bar").progressbar();
279
+ $("#regenthumbs-bar-percent").html("0%");
280
+
281
+ // Stop button
282
+ $("#regenthumbs-stop").click(function() {
283
+ rt_continue = false;
284
+ $('#regenthumbs-stop').val("<?php echo $this->esc_quotes(__('Stopping...', 'force-regenerate-thumbnails')); ?>");
285
+ });
286
+
287
+ // Clear out the empty list element that's there for HTML validation purposes
288
+ $("#regenthumbs-debuglist li").remove();
289
+
290
+ // Called after each resize. Updates debug information and the progress bar.
291
+ function RegenThumbsUpdateStatus(id, success, response) {
292
+ $("#regenthumbs-bar").progressbar("value", (rt_count / rt_total) * 100);
293
+ $("#regenthumbs-bar-percent").html(Math.round((rt_count / rt_total) * 1000) / 10 + "%");
294
+ rt_count = rt_count + 1;
295
+
296
+ if (success) {
297
+ rt_successes = rt_successes + 1;
298
+ $("#regenthumbs-debug-successcount").html(rt_successes);
299
+ $("#regenthumbs-debuglist").append("<li>" + response.success + "</li>");
300
+ }
301
+ else {
302
+ rt_errors = rt_errors + 1;
303
+ rt_failedlist = rt_failedlist + ',' + id;
304
+ $("#regenthumbs-debug-failurecount").html(rt_errors);
305
+ $("#regenthumbs-debuglist").append("<li>" + response.error + "</li>");
306
+ }
307
+ }
308
+
309
+ // Called when all images have been processed. Shows the results and cleans up.
310
+ function RegenThumbsFinishUp() {
311
+ rt_timeend = new Date().getTime();
312
+ rt_totaltime = Math.round((rt_timeend - rt_timestart) / 1000);
313
+
314
+ $('#regenthumbs-stop').hide();
315
+
316
+ if (rt_errors > 0) {
317
+ rt_resulttext = '<?php echo $text_failures; ?>';
318
+ } else {
319
+ rt_resulttext = '<?php echo $text_nofailures; ?>';
320
+ }
321
+
322
+ $("#message").html("<p><strong>" + rt_resulttext + "</strong></p>");
323
+ $("#message").show();
324
+ }
325
+
326
+ // Regenerate a specified image via AJAX
327
+ function RegenThumbs(id) {
328
+ $.ajax({
329
+ type: 'POST',
330
+ url: ajaxurl,
331
+ data: { action: "regeneratethumbnail", id: id },
332
+ success: function(response) {
333
+ if (response.success) {
334
+ RegenThumbsUpdateStatus(id, true, response);
335
+ } else {
336
+ RegenThumbsUpdateStatus(id, false, response);
337
+ }
338
+
339
+ if (rt_images.length && rt_continue) {
340
+ RegenThumbs(rt_images.shift());
341
+ } else {
342
+ RegenThumbsFinishUp();
343
+ }
344
+ },
345
+ error: function(response) {
346
+ RegenThumbsUpdateStatus(id, false, response);
347
+
348
+ if (rt_images.length && rt_continue) {
349
+ RegenThumbs(rt_images.shift());
350
+ } else {
351
+ RegenThumbsFinishUp();
352
+ }
353
+ }
354
+ });
355
+ }
356
+
357
+ RegenThumbs(rt_images.shift());
358
+ });
359
+ // ]]>
360
+ </script>
361
+ <?php
362
+ }
363
+
364
+ // No button click? Display the form.
365
+ else {
366
+ ?>
367
+ <form method="post" action="">
368
+ <?php wp_nonce_field('force-regenerate-thumbnails') ?>
369
+
370
+ <h3>All Thumbnails</h3>
371
+
372
+ <p><?php printf(__("Pressing the follow button, you can regenerate thumbnails for all images that you have uploaded to your blog.", 'force-regenerate-thumbnails'), admin_url('options-media.php')); ?></p>
373
+
374
+ <p>
375
+ <noscript><p><em><?php _e('You must enable Javascript in order to proceed!', 'force-regenerate-thumbnails') ?></em></p></noscript>
376
+ <input type="submit" class="button-primary hide-if-no-js" name="force-regenerate-thumbnails" id="force-regenerate-thumbnails" value="<?php _e('Regenerate All Thumbnails', 'force-regenerate-thumbnails') ?>" />
377
+ </p>
378
+
379
+ </br>
380
+ <h3>Specific Thumbnails</h3>
381
+
382
+ <p><?php printf(__("You can regenerate all thumbnails for specific images from the <a href='%s'>Media</a> page. (WordPress 3.1+ only)", 'force-regenerate-thumbnails'), admin_url('upload.php')); ?></p>
383
+ </form>
384
+ <?php
385
+ } // End if button
386
+ ?>
387
+ </div>
388
+
389
+ <?php
390
+ }
391
+
392
+ /**
393
+ * Process a single image ID (this is an AJAX handler)
394
+ *
395
+ * @access public
396
+ * @since 1.0
397
+ */
398
+ function ajax_process_image() {
399
+
400
+ // Don't break the JSON result
401
+ @error_reporting(0);
402
+
403
+ header('Content-type: application/json');
404
+
405
+ $id = (int) $_REQUEST['id'];
406
+ $image = get_post($id);
407
+
408
+ if (!$image || 'attachment' != $image->post_type || 'image/' != substr($image->post_mime_type, 0, 6)) {
409
+ die(json_encode(array('error' => sprintf(__('<span style="color: #FF3366;">Failed: %s is an invalid image ID.</span>', 'force-regenerate-thumbnails'), esc_html($_REQUEST['id'])))));
410
+ return;
411
+ }
412
+
413
+ if (!current_user_can($this->capability)) {
414
+ $this->die_json_error_msg($image->ID, __('<span style="color: #FF3366;">Your user account does not have permission to regenerate images</span>', 'force-regenerate-thumbnails'));
415
+ return;
416
+ }
417
+
418
+ $fullsizepath = get_attached_file($image->ID);
419
+
420
+ if (false === $fullsizepath || !file_exists($fullsizepath)) {
421
+ $this->die_json_error_msg($image->ID, sprintf( __('<span style="color: #FF3366;">The originally uploaded image file cannot be found at %s</span>', 'force-regenerate-thumbnails'), '<code>' . esc_html($fullsizepath) . '</code>'));
422
+ return;
423
+ }
424
+
425
+ // 5 minutes per image should be PLENTY
426
+ @set_time_limit(900);
427
+
428
+
429
+ /**
430
+ * My contribuition:
431
+ * Load all custom image sizes, delete all thumbs to force a REALLY regenerate
432
+ */
433
+ global $_wp_additional_image_sizes;
434
+ $message = '';
435
+ $imagePath = substr($fullsizepath, 0, strlen($fullsizepath) - 4);
436
+ $imageFormat = substr($fullsizepath, -4);
437
+ foreach($_wp_additional_image_sizes as $key => $value) {
438
+ $message .= sprintf('<br /> - ' . __("Thumbnail: %sx%s was regenerate.", 'force-regenerate-thumbnails'), $value['width'], $value['height']);
439
+ $thumbnail = $imagePath . '-' . $value['width'] . 'x' . $value['height'] . $imageFormat;
440
+ @unlink($thumbnail);
441
+ }
442
+
443
+
444
+ $metadata = wp_generate_attachment_metadata($image->ID, $fullsizepath);
445
+
446
+ if (is_wp_error($metadata)) {
447
+ $this->die_json_error_msg($image->ID, $metadata->get_error_message());
448
+ return;
449
+ }
450
+
451
+ if (empty($metadata)) {
452
+ $this->die_json_error_msg($image->ID, __('<span style="color: #FF3366;">Unknown failure reason.</span>', 'force-regenerate-thumbnails'));
453
+ return;
454
+ }
455
+
456
+ wp_update_attachment_metadata($image->ID, $metadata);
457
+ $message = sprintf(__('<b>&quot;%1$s&quot; (ID %2$s): All thumbnails was successfully regenerated in %3$s seconds.</b>', 'force-regenerate-thumbnails') . $regenerate_status, esc_html(get_the_title($image->ID)), $image->ID, timer_stop()) . $message;
458
+ //die(json_encode(array('success' => sprintf(__('&quot;%1$s&quot; (ID %2$s) was all thumbnails successfully regenereted in %3$s seconds.', 'force-regenerate-thumbnails') . $regenerate_status, esc_html(get_the_title($image->ID)), $image->ID, timer_stop()))));
459
+
460
+ die(json_encode(array('success' => $message)));
461
+ }
462
+
463
+ /**
464
+ * Helper to make a JSON error message
465
+ *
466
+ * @param integer $id
467
+ * @param string #message
468
+ * @access public
469
+ * @since 1.0
470
+ */
471
+ function die_json_error_msg($id, $message) {
472
+ die(json_encode(array('error' => sprintf(__('&quot;%1$s&quot; (ID %2$s) failed to resize. The error message was: %3$s', 'force-regenerate-thumbnails'), esc_html(get_the_title($id)), $id, $message))));
473
+ }
474
+
475
+ /**
476
+ * Helper function to escape quotes in strings for use in Javascript
477
+ *
478
+ * @param string #message
479
+ * @return string
480
+ * @access public
481
+ * @since 1.0
482
+ */
483
+ function esc_quotes($string) {
484
+ return str_replace('"', '\"', $string);
485
+ }
486
+ }
487
+
488
+
489
+ /**
490
+ * Start
491
+ */
492
+ function ForceRegenerateThumbnails() {
493
+ global $ForceRegenerateThumbnails;
494
+ $ForceRegenerateThumbnails = new ForceRegenerateThumbnails();
495
+ }
496
+ add_action('init', 'ForceRegenerateThumbnails');
497
+
498
+ ?>
jquery-ui/jquery.ui.progressbar.min.1.7.2.js ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * jQuery UI Progressbar 1.7.2
3
+ *
4
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
5
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
6
+ * and GPL (GPL-LICENSE.txt) licenses.
7
+ *
8
+ * http://docs.jquery.com/UI/Progressbar
9
+ *
10
+ * Depends:
11
+ * ui.core.js
12
+ */
13
+ (function(a){a.widget("ui.progressbar",{_init:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this._valueMin(),"aria-valuemax":this._valueMax(),"aria-valuenow":this._value()});this.valueDiv=a('<div class="ui-progressbar-value ui-widget-header ui-corner-left"></div>').appendTo(this.element);this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow").removeData("progressbar").unbind(".progressbar");this.valueDiv.remove();a.widget.prototype.destroy.apply(this,arguments)},value:function(b){if(b===undefined){return this._value()}this._setData("value",b);return this},_setData:function(b,c){switch(b){case"value":this.options.value=c;this._refreshValue();this._trigger("change",null,{});break}a.widget.prototype._setData.apply(this,arguments)},_value:function(){var b=this.options.value;if(b<this._valueMin()){b=this._valueMin()}if(b>this._valueMax()){b=this._valueMax()}return b},_valueMin:function(){var b=0;return b},_valueMax:function(){var b=100;return b},_refreshValue:function(){var b=this.value();this.valueDiv[b==this._valueMax()?"addClass":"removeClass"]("ui-corner-right");this.valueDiv.width(b+"%");this.element.attr("aria-valuenow",b)}});a.extend(a.ui.progressbar,{version:"1.7.2",defaults:{value:0}})})(jQuery);;
jquery-ui/jquery.ui.progressbar.min.js ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * jQuery UI Progressbar 1.8.6
3
+ *
4
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
5
+ * Dual licensed under the MIT or GPL Version 2 licenses.
6
+ * http://jquery.org/license
7
+ *
8
+ * http://docs.jquery.com/UI/Progressbar
9
+ *
10
+ * Depends:
11
+ * jquery.ui.core.js
12
+ * jquery.ui.widget.js
13
+ */
14
+ (function(b,c){b.widget("ui.progressbar",{options:{value:0},min:0,max:100,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.max,"aria-valuenow":this._value()});this.valueDiv=b("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element);this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow");
15
+ this.valueDiv.remove();b.Widget.prototype.destroy.apply(this,arguments)},value:function(a){if(a===c)return this._value();this._setOption("value",a);return this},_setOption:function(a,d){if(a==="value"){this.options.value=d;this._refreshValue();this._trigger("change");this._value()===this.max&&this._trigger("complete")}b.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var a=this.options.value;if(typeof a!=="number")a=0;return Math.min(this.max,Math.max(this.min,a))},_refreshValue:function(){var a=
16
+ this.value();this.valueDiv.toggleClass("ui-corner-right",a===this.max).width(a+"%");this.element.attr("aria-valuenow",a)}});b.extend(b.ui.progressbar,{version:"1.8.6"})})(jQuery);
jquery-ui/redmond/images/ui-bg_flat_0_aaaaaa_40x100.png ADDED
Binary file
jquery-ui/redmond/images/ui-bg_flat_55_fbec88_40x100.png ADDED
Binary file
jquery-ui/redmond/images/ui-bg_glass_75_d0e5f5_1x400.png ADDED
Binary file
jquery-ui/redmond/images/ui-bg_glass_85_dfeffc_1x400.png ADDED
Binary file
jquery-ui/redmond/images/ui-bg_glass_95_fef1ec_1x400.png ADDED
Binary file
jquery-ui/redmond/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png ADDED
Binary file
jquery-ui/redmond/images/ui-bg_inset-hard_100_f5f8f9_1x100.png ADDED
Binary file
jquery-ui/redmond/images/ui-bg_inset-hard_100_fcfdfd_1x100.png ADDED
Binary file
jquery-ui/redmond/jquery-ui-1.7.2.custom.css ADDED
@@ -0,0 +1,406 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * jQuery UI CSS Framework
3
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
4
+ * Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
5
+ */
6
+
7
+ /* Layout helpers
8
+ ----------------------------------*/
9
+ .ui-helper-hidden { display: none; }
10
+ .ui-helper-hidden-accessible { position: absolute; left: -99999999px; }
11
+ .ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
12
+ .ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
13
+ .ui-helper-clearfix { display: inline-block; }
14
+ /* required comment for clearfix to work in Opera \*/
15
+ * html .ui-helper-clearfix { height:1%; }
16
+ .ui-helper-clearfix { display:block; }
17
+ /* end clearfix */
18
+ .ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
19
+
20
+
21
+ /* Interaction Cues
22
+ ----------------------------------*/
23
+ .ui-state-disabled { cursor: default !important; }
24
+
25
+
26
+ /* Icons
27
+ ----------------------------------*/
28
+
29
+ /* states and images */
30
+ .ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
31
+
32
+
33
+ /* Misc visuals
34
+ ----------------------------------*/
35
+
36
+ /* Overlays */
37
+ .ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
38
+
39
+
40
+
41
+ /*
42
+ * jQuery UI CSS Framework
43
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
44
+ * Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
45
+ * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Lucida%20Grande,%20Lucida%20Sans,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=5px&bgColorHeader=5c9ccc&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=55&borderColorHeader=4297d7&fcHeader=ffffff&iconColorHeader=d8e7f3&bgColorContent=fcfdfd&bgTextureContent=06_inset_hard.png&bgImgOpacityContent=100&borderColorContent=a6c9e2&fcContent=222222&iconColorContent=469bdd&bgColorDefault=dfeffc&bgTextureDefault=02_glass.png&bgImgOpacityDefault=85&borderColorDefault=c5dbec&fcDefault=2e6e9e&iconColorDefault=6da8d5&bgColorHover=d0e5f5&bgTextureHover=02_glass.png&bgImgOpacityHover=75&borderColorHover=79b7e7&fcHover=1d5987&iconColorHover=217bc0&bgColorActive=f5f8f9&bgTextureActive=06_inset_hard.png&bgImgOpacityActive=100&borderColorActive=79b7e7&fcActive=e17009&iconColorActive=f9bd01&bgColorHighlight=fbec88&bgTextureHighlight=01_flat.png&bgImgOpacityHighlight=55&borderColorHighlight=fad42e&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
46
+ */
47
+
48
+
49
+ /* Component containers
50
+ ----------------------------------*/
51
+ .ui-widget { font-family: Lucida Grande, Lucida Sans, Arial, sans-serif; font-size: 1.1em; }
52
+ .ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Lucida Grande, Lucida Sans, Arial, sans-serif; font-size: 1em; }
53
+ .ui-widget-content { border: 1px solid #a6c9e2; background: #fcfdfd url(images/ui-bg_inset-hard_100_fcfdfd_1x100.png) 50% bottom repeat-x; color: #222222; }
54
+ .ui-widget-content a { color: #222222; }
55
+ .ui-widget-header { border: 1px solid #4297d7; background: #5c9ccc url(images/ui-bg_gloss-wave_55_5c9ccc_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; }
56
+ .ui-widget-header a { color: #ffffff; }
57
+
58
+ /* Interaction states
59
+ ----------------------------------*/
60
+ .ui-state-default, .ui-widget-content .ui-state-default { border: 1px solid #c5dbec; background: #dfeffc url(images/ui-bg_glass_85_dfeffc_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #2e6e9e; outline: none; }
61
+ .ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #2e6e9e; text-decoration: none; outline: none; }
62
+ .ui-state-hover, .ui-widget-content .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus { border: 1px solid #79b7e7; background: #d0e5f5 url(images/ui-bg_glass_75_d0e5f5_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1d5987; outline: none; }
63
+ .ui-state-hover a, .ui-state-hover a:hover { color: #1d5987; text-decoration: none; outline: none; }
64
+ .ui-state-active, .ui-widget-content .ui-state-active { border: 1px solid #79b7e7; background: #f5f8f9 url(images/ui-bg_inset-hard_100_f5f8f9_1x100.png) 50% 50% repeat-x; font-weight: bold; color: #e17009; outline: none; }
65
+ .ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #e17009; outline: none; text-decoration: none; }
66
+
67
+ /* Interaction Cues
68
+ ----------------------------------*/
69
+ .ui-state-highlight, .ui-widget-content .ui-state-highlight {border: 1px solid #fad42e; background: #fbec88 url(images/ui-bg_flat_55_fbec88_40x100.png) 50% 50% repeat-x; color: #363636; }
70
+ .ui-state-highlight a, .ui-widget-content .ui-state-highlight a { color: #363636; }
71
+ .ui-state-error, .ui-widget-content .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; }
72
+ .ui-state-error a, .ui-widget-content .ui-state-error a { color: #cd0a0a; }
73
+ .ui-state-error-text, .ui-widget-content .ui-state-error-text { color: #cd0a0a; }
74
+ .ui-state-disabled, .ui-widget-content .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
75
+ .ui-priority-primary, .ui-widget-content .ui-priority-primary { font-weight: bold; }
76
+ .ui-priority-secondary, .ui-widget-content .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
77
+
78
+ /* Icons
79
+ ----------------------------------*/
80
+
81
+ /* states and images */
82
+ .ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_469bdd_256x240.png); }
83
+ .ui-widget-content .ui-icon {background-image: url(images/ui-icons_469bdd_256x240.png); }
84
+ .ui-widget-header .ui-icon {background-image: url(images/ui-icons_d8e7f3_256x240.png); }
85
+ .ui-state-default .ui-icon { background-image: url(images/ui-icons_6da8d5_256x240.png); }
86
+ .ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_217bc0_256x240.png); }
87
+ .ui-state-active .ui-icon {background-image: url(images/ui-icons_f9bd01_256x240.png); }
88
+ .ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); }
89
+ .ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); }
90
+
91
+ /* positioning */
92
+ .ui-icon-carat-1-n { background-position: 0 0; }
93
+ .ui-icon-carat-1-ne { background-position: -16px 0; }
94
+ .ui-icon-carat-1-e { background-position: -32px 0; }
95
+ .ui-icon-carat-1-se { background-position: -48px 0; }
96
+ .ui-icon-carat-1-s { background-position: -64px 0; }
97
+ .ui-icon-carat-1-sw { background-position: -80px 0; }
98
+ .ui-icon-carat-1-w { background-position: -96px 0; }
99
+ .ui-icon-carat-1-nw { background-position: -112px 0; }
100
+ .ui-icon-carat-2-n-s { background-position: -128px 0; }
101
+ .ui-icon-carat-2-e-w { background-position: -144px 0; }
102
+ .ui-icon-triangle-1-n { background-position: 0 -16px; }
103
+ .ui-icon-triangle-1-ne { background-position: -16px -16px; }
104
+ .ui-icon-triangle-1-e { background-position: -32px -16px; }
105
+ .ui-icon-triangle-1-se { background-position: -48px -16px; }
106
+ .ui-icon-triangle-1-s { background-position: -64px -16px; }
107
+ .ui-icon-triangle-1-sw { background-position: -80px -16px; }
108
+ .ui-icon-triangle-1-w { background-position: -96px -16px; }
109
+ .ui-icon-triangle-1-nw { background-position: -112px -16px; }
110
+ .ui-icon-triangle-2-n-s { background-position: -128px -16px; }
111
+ .ui-icon-triangle-2-e-w { background-position: -144px -16px; }
112
+ .ui-icon-arrow-1-n { background-position: 0 -32px; }
113
+ .ui-icon-arrow-1-ne { background-position: -16px -32px; }
114
+ .ui-icon-arrow-1-e { background-position: -32px -32px; }
115
+ .ui-icon-arrow-1-se { background-position: -48px -32px; }
116
+ .ui-icon-arrow-1-s { background-position: -64px -32px; }
117
+ .ui-icon-arrow-1-sw { background-position: -80px -32px; }
118
+ .ui-icon-arrow-1-w { background-position: -96px -32px; }
119
+ .ui-icon-arrow-1-nw { background-position: -112px -32px; }
120
+ .ui-icon-arrow-2-n-s { background-position: -128px -32px; }
121
+ .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
122
+ .ui-icon-arrow-2-e-w { background-position: -160px -32px; }
123
+ .ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
124
+ .ui-icon-arrowstop-1-n { background-position: -192px -32px; }
125
+ .ui-icon-arrowstop-1-e { background-position: -208px -32px; }
126
+ .ui-icon-arrowstop-1-s { background-position: -224px -32px; }
127
+ .ui-icon-arrowstop-1-w { background-position: -240px -32px; }
128
+ .ui-icon-arrowthick-1-n { background-position: 0 -48px; }
129
+ .ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
130
+ .ui-icon-arrowthick-1-e { background-position: -32px -48px; }
131
+ .ui-icon-arrowthick-1-se { background-position: -48px -48px; }
132
+ .ui-icon-arrowthick-1-s { background-position: -64px -48px; }
133
+ .ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
134
+ .ui-icon-arrowthick-1-w { background-position: -96px -48px; }
135
+ .ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
136
+ .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
137
+ .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
138
+ .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
139
+ .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
140
+ .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
141
+ .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
142
+ .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
143
+ .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
144
+ .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
145
+ .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
146
+ .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
147
+ .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
148
+ .ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
149
+ .ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
150
+ .ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
151
+ .ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
152
+ .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
153
+ .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
154
+ .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
155
+ .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
156
+ .ui-icon-arrow-4 { background-position: 0 -80px; }
157
+ .ui-icon-arrow-4-diag { background-position: -16px -80px; }
158
+ .ui-icon-extlink { background-position: -32px -80px; }
159
+ .ui-icon-newwin { background-position: -48px -80px; }
160
+ .ui-icon-refresh { background-position: -64px -80px; }
161
+ .ui-icon-shuffle { background-position: -80px -80px; }
162
+ .ui-icon-transfer-e-w { background-position: -96px -80px; }
163
+ .ui-icon-transferthick-e-w { background-position: -112px -80px; }
164
+ .ui-icon-folder-collapsed { background-position: 0 -96px; }
165
+ .ui-icon-folder-open { background-position: -16px -96px; }
166
+ .ui-icon-document { background-position: -32px -96px; }
167
+ .ui-icon-document-b { background-position: -48px -96px; }
168
+ .ui-icon-note { background-position: -64px -96px; }
169
+ .ui-icon-mail-closed { background-position: -80px -96px; }
170
+ .ui-icon-mail-open { background-position: -96px -96px; }
171
+ .ui-icon-suitcase { background-position: -112px -96px; }
172
+ .ui-icon-comment { background-position: -128px -96px; }
173
+ .ui-icon-person { background-position: -144px -96px; }
174
+ .ui-icon-print { background-position: -160px -96px; }
175
+ .ui-icon-trash { background-position: -176px -96px; }
176
+ .ui-icon-locked { background-position: -192px -96px; }
177
+ .ui-icon-unlocked { background-position: -208px -96px; }
178
+ .ui-icon-bookmark { background-position: -224px -96px; }
179
+ .ui-icon-tag { background-position: -240px -96px; }
180
+ .ui-icon-home { background-position: 0 -112px; }
181
+ .ui-icon-flag { background-position: -16px -112px; }
182
+ .ui-icon-calendar { background-position: -32px -112px; }
183
+ .ui-icon-cart { background-position: -48px -112px; }
184
+ .ui-icon-pencil { background-position: -64px -112px; }
185
+ .ui-icon-clock { background-position: -80px -112px; }
186
+ .ui-icon-disk { background-position: -96px -112px; }
187
+ .ui-icon-calculator { background-position: -112px -112px; }
188
+ .ui-icon-zoomin { background-position: -128px -112px; }
189
+ .ui-icon-zoomout { background-position: -144px -112px; }
190
+ .ui-icon-search { background-position: -160px -112px; }
191
+ .ui-icon-wrench { background-position: -176px -112px; }
192
+ .ui-icon-gear { background-position: -192px -112px; }
193
+ .ui-icon-heart { background-position: -208px -112px; }
194
+ .ui-icon-star { background-position: -224px -112px; }
195
+ .ui-icon-link { background-position: -240px -112px; }
196
+ .ui-icon-cancel { background-position: 0 -128px; }
197
+ .ui-icon-plus { background-position: -16px -128px; }
198
+ .ui-icon-plusthick { background-position: -32px -128px; }
199
+ .ui-icon-minus { background-position: -48px -128px; }
200
+ .ui-icon-minusthick { background-position: -64px -128px; }
201
+ .ui-icon-close { background-position: -80px -128px; }
202
+ .ui-icon-closethick { background-position: -96px -128px; }
203
+ .ui-icon-key { background-position: -112px -128px; }
204
+ .ui-icon-lightbulb { background-position: -128px -128px; }
205
+ .ui-icon-scissors { background-position: -144px -128px; }
206
+ .ui-icon-clipboard { background-position: -160px -128px; }
207
+ .ui-icon-copy { background-position: -176px -128px; }
208
+ .ui-icon-contact { background-position: -192px -128px; }
209
+ .ui-icon-image { background-position: -208px -128px; }
210
+ .ui-icon-video { background-position: -224px -128px; }
211
+ .ui-icon-script { background-position: -240px -128px; }
212
+ .ui-icon-alert { background-position: 0 -144px; }
213
+ .ui-icon-info { background-position: -16px -144px; }
214
+ .ui-icon-notice { background-position: -32px -144px; }
215
+ .ui-icon-help { background-position: -48px -144px; }
216
+ .ui-icon-check { background-position: -64px -144px; }
217
+ .ui-icon-bullet { background-position: -80px -144px; }
218
+ .ui-icon-radio-off { background-position: -96px -144px; }
219
+ .ui-icon-radio-on { background-position: -112px -144px; }
220
+ .ui-icon-pin-w { background-position: -128px -144px; }
221
+ .ui-icon-pin-s { background-position: -144px -144px; }
222
+ .ui-icon-play { background-position: 0 -160px; }
223
+ .ui-icon-pause { background-position: -16px -160px; }
224
+ .ui-icon-seek-next { background-position: -32px -160px; }
225
+ .ui-icon-seek-prev { background-position: -48px -160px; }
226
+ .ui-icon-seek-end { background-position: -64px -160px; }
227
+ .ui-icon-seek-first { background-position: -80px -160px; }
228
+ .ui-icon-stop { background-position: -96px -160px; }
229
+ .ui-icon-eject { background-position: -112px -160px; }
230
+ .ui-icon-volume-off { background-position: -128px -160px; }
231
+ .ui-icon-volume-on { background-position: -144px -160px; }
232
+ .ui-icon-power { background-position: 0 -176px; }
233
+ .ui-icon-signal-diag { background-position: -16px -176px; }
234
+ .ui-icon-signal { background-position: -32px -176px; }
235
+ .ui-icon-battery-0 { background-position: -48px -176px; }
236
+ .ui-icon-battery-1 { background-position: -64px -176px; }
237
+ .ui-icon-battery-2 { background-position: -80px -176px; }
238
+ .ui-icon-battery-3 { background-position: -96px -176px; }
239
+ .ui-icon-circle-plus { background-position: 0 -192px; }
240
+ .ui-icon-circle-minus { background-position: -16px -192px; }
241
+ .ui-icon-circle-close { background-position: -32px -192px; }
242
+ .ui-icon-circle-triangle-e { background-position: -48px -192px; }
243
+ .ui-icon-circle-triangle-s { background-position: -64px -192px; }
244
+ .ui-icon-circle-triangle-w { background-position: -80px -192px; }
245
+ .ui-icon-circle-triangle-n { background-position: -96px -192px; }
246
+ .ui-icon-circle-arrow-e { background-position: -112px -192px; }
247
+ .ui-icon-circle-arrow-s { background-position: -128px -192px; }
248
+ .ui-icon-circle-arrow-w { background-position: -144px -192px; }
249
+ .ui-icon-circle-arrow-n { background-position: -160px -192px; }
250
+ .ui-icon-circle-zoomin { background-position: -176px -192px; }
251
+ .ui-icon-circle-zoomout { background-position: -192px -192px; }
252
+ .ui-icon-circle-check { background-position: -208px -192px; }
253
+ .ui-icon-circlesmall-plus { background-position: 0 -208px; }
254
+ .ui-icon-circlesmall-minus { background-position: -16px -208px; }
255
+ .ui-icon-circlesmall-close { background-position: -32px -208px; }
256
+ .ui-icon-squaresmall-plus { background-position: -48px -208px; }
257
+ .ui-icon-squaresmall-minus { background-position: -64px -208px; }
258
+ .ui-icon-squaresmall-close { background-position: -80px -208px; }
259
+ .ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
260
+ .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
261
+ .ui-icon-grip-solid-vertical { background-position: -32px -224px; }
262
+ .ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
263
+ .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
264
+ .ui-icon-grip-diagonal-se { background-position: -80px -224px; }
265
+
266
+
267
+ /* Misc visuals
268
+ ----------------------------------*/
269
+
270
+ /* Corner radius */
271
+ .ui-corner-tl { -moz-border-radius-topleft: 5px; -webkit-border-top-left-radius: 5px; }
272
+ .ui-corner-tr { -moz-border-radius-topright: 5px; -webkit-border-top-right-radius: 5px; }
273
+ .ui-corner-bl { -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px; }
274
+ .ui-corner-br { -moz-border-radius-bottomright: 5px; -webkit-border-bottom-right-radius: 5px; }
275
+ .ui-corner-top { -moz-border-radius-topleft: 5px; -webkit-border-top-left-radius: 5px; -moz-border-radius-topright: 5px; -webkit-border-top-right-radius: 5px; }
276
+ .ui-corner-bottom { -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px; -moz-border-radius-bottomright: 5px; -webkit-border-bottom-right-radius: 5px; }
277
+ .ui-corner-right { -moz-border-radius-topright: 5px; -webkit-border-top-right-radius: 5px; -moz-border-radius-bottomright: 5px; -webkit-border-bottom-right-radius: 5px; }
278
+ .ui-corner-left { -moz-border-radius-topleft: 5px; -webkit-border-top-left-radius: 5px; -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px; }
279
+ .ui-corner-all { -moz-border-radius: 5px; -webkit-border-radius: 5px; }
280
+
281
+ /* Overlays */
282
+ .ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); }
283
+ .ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -webkit-border-radius: 8px; }/* Accordion
284
+ ----------------------------------*/
285
+ .ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
286
+ .ui-accordion .ui-accordion-li-fix { display: inline; }
287
+ .ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
288
+ .ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em 2.2em; }
289
+ .ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
290
+ .ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; }
291
+ .ui-accordion .ui-accordion-content-active { display: block; }/* Datepicker
292
+ ----------------------------------*/
293
+ .ui-datepicker { width: 17em; padding: .2em .2em 0; }
294
+ .ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
295
+ .ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
296
+ .ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
297
+ .ui-datepicker .ui-datepicker-prev { left:2px; }
298
+ .ui-datepicker .ui-datepicker-next { right:2px; }
299
+ .ui-datepicker .ui-datepicker-prev-hover { left:1px; }
300
+ .ui-datepicker .ui-datepicker-next-hover { right:1px; }
301
+ .ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }
302
+ .ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
303
+ .ui-datepicker .ui-datepicker-title select { float:left; font-size:1em; margin:1px 0; }
304
+ .ui-datepicker select.ui-datepicker-month-year {width: 100%;}
305
+ .ui-datepicker select.ui-datepicker-month,
306
+ .ui-datepicker select.ui-datepicker-year { width: 49%;}
307
+ .ui-datepicker .ui-datepicker-title select.ui-datepicker-year { float: right; }
308
+ .ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
309
+ .ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
310
+ .ui-datepicker td { border: 0; padding: 1px; }
311
+ .ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
312
+ .ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
313
+ .ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
314
+ .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
315
+
316
+ /* with multiple calendars */
317
+ .ui-datepicker.ui-datepicker-multi { width:auto; }
318
+ .ui-datepicker-multi .ui-datepicker-group { float:left; }
319
+ .ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
320
+ .ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
321
+ .ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
322
+ .ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
323
+ .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
324
+ .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
325
+ .ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
326
+ .ui-datepicker-row-break { clear:both; width:100%; }
327
+
328
+ /* RTL support */
329
+ .ui-datepicker-rtl { direction: rtl; }
330
+ .ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
331
+ .ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
332
+ .ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
333
+ .ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
334
+ .ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
335
+ .ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
336
+ .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
337
+ .ui-datepicker-rtl .ui-datepicker-group { float:right; }
338
+ .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
339
+ .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
340
+
341
+ /* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
342
+ .ui-datepicker-cover {
343
+ display: none; /*sorry for IE5*/
344
+ display/**/: block; /*sorry for IE5*/
345
+ position: absolute; /*must have*/
346
+ z-index: -1; /*must have*/
347
+ filter: mask(); /*must have*/
348
+ top: -4px; /*must have*/
349
+ left: -4px; /*must have*/
350
+ width: 200px; /*must have*/
351
+ height: 200px; /*must have*/
352
+ }/* Dialog
353
+ ----------------------------------*/
354
+ .ui-dialog { position: relative; padding: .2em; width: 300px; }
355
+ .ui-dialog .ui-dialog-titlebar { padding: .5em .3em .3em 1em; position: relative; }
356
+ .ui-dialog .ui-dialog-title { float: left; margin: .1em 0 .2em; }
357
+ .ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
358
+ .ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
359
+ .ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
360
+ .ui-dialog .ui-dialog-content { border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
361
+ .ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
362
+ .ui-dialog .ui-dialog-buttonpane button { float: right; margin: .5em .4em .5em 0; cursor: pointer; padding: .2em .6em .3em .6em; line-height: 1.4em; width:auto; overflow:visible; }
363
+ .ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
364
+ .ui-draggable .ui-dialog-titlebar { cursor: move; }
365
+ /* Progressbar
366
+ ----------------------------------*/
367
+ .ui-progressbar { height:2em; text-align: left; }
368
+ .ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }/* Resizable
369
+ ----------------------------------*/
370
+ .ui-resizable { position: relative;}
371
+ .ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;}
372
+ .ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
373
+ .ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0px; }
374
+ .ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0px; }
375
+ .ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0px; height: 100%; }
376
+ .ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0px; height: 100%; }
377
+ .ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
378
+ .ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
379
+ .ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
380
+ .ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* Slider
381
+ ----------------------------------*/
382
+ .ui-slider { position: relative; text-align: left; }
383
+ .ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
384
+ .ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; }
385
+
386
+ .ui-slider-horizontal { height: .8em; }
387
+ .ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
388
+ .ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
389
+ .ui-slider-horizontal .ui-slider-range-min { left: 0; }
390
+ .ui-slider-horizontal .ui-slider-range-max { right: 0; }
391
+
392
+ .ui-slider-vertical { width: .8em; height: 100px; }
393
+ .ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
394
+ .ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
395
+ .ui-slider-vertical .ui-slider-range-min { bottom: 0; }
396
+ .ui-slider-vertical .ui-slider-range-max { top: 0; }/* Tabs
397
+ ----------------------------------*/
398
+ .ui-tabs { padding: .2em; zoom: 1; }
399
+ .ui-tabs .ui-tabs-nav { list-style: none; position: relative; padding: .2em .2em 0; }
400
+ .ui-tabs .ui-tabs-nav li { position: relative; float: left; border-bottom-width: 0 !important; margin: 0 .2em -1px 0; padding: 0; }
401
+ .ui-tabs .ui-tabs-nav li a { float: left; text-decoration: none; padding: .5em 1em; }
402
+ .ui-tabs .ui-tabs-nav li.ui-tabs-selected { padding-bottom: 1px; border-bottom-width: 0; }
403
+ .ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
404
+ .ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
405
+ .ui-tabs .ui-tabs-panel { padding: 1em 1.4em; display: block; border-width: 0; background: none; }
406
+ .ui-tabs .ui-tabs-hide { display: none !important; }
readme.txt ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ === Force Regenerate Thumbnails ===
2
+ Contributors: Pedro Elsner
3
+ Requires at least: 2.8
4
+ Tested up to: 3.4.1
5
+ Stable tag: trunk
6
+ Tags: force, regenerate thumbnails, thumbnail, thumbnails
7
+
8
+ Based in Regenerate Thumbnails, REALLY force the regenerate thumbnail.
9
+
10
+ == Description ==
11
+
12
+ * Based in Regenerate Thumbnails. All credits and thanks to Viper007Bond
13
+
14
+ Force Regenerate Thumbnails allows you to REALLY regenerate the thumbnails for your image attachments.
15
+
16
+ You can either regenerate the thumbnails for all image uploads, individual image uploads, or specific multiple image uploads.
17
+
18
+ See the [screenshots tab](http://wordpress.org/extend/plugins/force-regenerate-thumbnails/screenshots/) for more details.
19
+
20
+ == Installation ==
21
+
22
+ 1. Go to your admin area and select Plugins -> Add new from the menu.
23
+ 2. Search for "Force Regenerate Thumbnails".
24
+ 3. Click install.
25
+ 4. Click activate.
26
+
27
+ == Screenshots ==
28
+
29
+ 1. The plugin at work regenerating thumbnails
30
+ 2. You can resize specific multiples images using the checkboxes and the "Bulk Actions" dropdown
31
+
32
+ == ChangeLog ==
33
+
34
+ = 1.0 =
35
+ * First release.
36
+
37
+ == Upgrade Notice ==
screenshot-1.png ADDED
Binary file
screenshot-2.png ADDED
Binary file