Skip to content

Commit 13e67aa

Browse files
Merge branch 'master' of github.com:TinyPNG/wordpress-plugin
2 parents d3c68e2 + c7ac594 commit 13e67aa

8 files changed

Lines changed: 114 additions & 35 deletions

File tree

src/class-tiny-notices.php

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -107,18 +107,16 @@ public function dismiss() {
107107
}
108108

109109
public function show($name, $message, $klass='error', $dismissible=true) {
110-
$css = array($klass, 'notice');
110+
$css = array($klass, 'notice', 'tiny-notice');
111111
if (!$dismissible) {
112112
$add = '</p>';
113-
} else if (self::wp_version() >= 4.2) {
114-
$add = '</p><button class="notice-dismiss tiny-dismiss" type="button" data-name="'. $name .'">'
115-
. '<span class="screen-reader-text">' . self::translate_escape('Dismiss')
116-
. '</span></button>';
113+
} else if (self::check_wp_version(4.2)) {
114+
$add = '</p>';
117115
$css[] = 'is-dismissible';
118116
} else {
119-
$add = '&nbsp;<a href="#" data-name="' . $name .'" class="tiny-dismiss">' . self::translate_escape('Dismiss') . '</a></p>';
117+
$add = '&nbsp;<a href="#">' . self::translate_escape('Dismiss') . '</a></p>';
120118
}
121119
$css = implode(' ', $css);
122-
add_action('admin_notices', create_function('', "echo '<div class=\"$css\"><p>Compress JPEG & PNG images: $message$add</div>';"));
120+
add_action('admin_notices', create_function('', "echo '<div class=\"$css\" data-name=\"$name\"><p>Compress JPEG & PNG images: $message$add</div>';"));
123121
}
124122
}

src/class-tiny-plugin.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,8 @@ public function enqueue_scripts($hook) {
7474
// Wordpress < 3.3 does not handle multi dimensional arrays
7575
wp_localize_script($handle, 'tinyCompress', array(
7676
'nonce' => wp_create_nonce('tiny-compress'),
77+
'wpVersion' => self::wp_version(),
78+
'pluginVersion' => self::plugin_version(),
7779
'L10nAllDone' => self::translate('All images are processed'),
7880
'L10nBulkAction' => self::translate('Compress Images'),
7981
'L10nCompressing' => self::translate('Compressing'),
@@ -249,7 +251,7 @@ public function bulk_compress_page() {
249251

250252
echo '<div id="tiny-status"><p>'. self::translate_escape('Compressions this month') . sprintf(' <span>%d</span></p></div>', $this->settings->get_status());
251253
echo '<div id="tiny-progress"><p>'. self::translate_escape('Processing') . ' <span>0</span> ' . self::translate_escape('out of') . sprintf(' %d </p></div>', count($items));
252-
echo '<div id="tiny-images">';
254+
echo '<div id="media-items">';
253255
echo '</div>';
254256

255257
echo '<script type="text/javascript">jQuery(function() { tinyBulkCompress('. json_encode($items) . ')})</script>';

src/class-tiny-wp-base.php

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,32 @@ abstract class Tiny_WP_Base {
2222
const NAME = 'tiny-compress-images';
2323
const PREFIX = 'tinypng_';
2424

25+
private static $wp_version;
26+
private static $plugin_version;
27+
2528
public static function wp_version() {
26-
return $GLOBALS['wp_version'];
29+
if (is_null(self::$wp_version)) {
30+
// Try to use unmodified version
31+
include( ABSPATH . WPINC . '/version.php' );
32+
if (isset($wp_version)) {
33+
self::$wp_version = $wp_version;
34+
} else {
35+
self::$wp_version = $GLOBALS['wp_version'];
36+
}
37+
}
38+
return self::$wp_version;
39+
}
40+
41+
public static function check_wp_version($version) {
42+
return floatval(self::wp_version()) >= $version;
2743
}
2844

2945
public static function plugin_version() {
30-
$plugin_data = get_plugin_data(dirname(__FILE__) . '/../tiny-compress-images.php');
31-
return $plugin_data['Version'];
46+
if (is_null(self::$plugin_version)) {
47+
$plugin_data = get_plugin_data(dirname(__FILE__) . '/../tiny-compress-images.php');
48+
self::$plugin_version = $plugin_data['Version'];
49+
}
50+
return self::$plugin_version;
3251
}
3352

3453
public static function plugin_identification() {

src/scripts/admin.js

Lines changed: 36 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
(function() {
22

3+
function check_wp_version(version) {
4+
return parseFloat(tinyCompress.wpVersion) >= version
5+
}
6+
37
function compress_image(event) {
48
var element = jQuery(event.target)
59
element.attr('disabled', 'disabled')
@@ -24,6 +28,7 @@
2428

2529
function dismiss_notice(event) {
2630
var element = jQuery(event.target)
31+
var notice = element.closest(".tiny-notice")
2732
element.attr('disabled', 'disabled')
2833
jQuery.ajax({
2934
url: ajaxurl,
@@ -32,11 +37,11 @@
3237
data: {
3338
_nonce: tinyCompress.nonce,
3439
action: 'tiny_dismiss_notice',
35-
name: element.data('name') || element.attr('data-name')
40+
name: notice.data('name') || notice.attr('data-name')
3641
},
3742
success: function(data) {
3843
if (data) {
39-
element.closest('div').remove()
44+
notice.remove()
4045
}
4146
},
4247
error: function() {
@@ -47,33 +52,45 @@
4752
}
4853

4954
function bulk_compress_callback(error, data, items, i) {
50-
var row = jQuery(jQuery('#tiny-images').children("div")[i])
55+
var row = jQuery(jQuery('#media-items').children("div")[i])
56+
var status
57+
58+
if (check_wp_version(3.3)) {
59+
status = row.find('.bar')
60+
} else {
61+
row.find('.bar').remove()
62+
status = row.find('.percent')
63+
}
5164

5265
if (data.thumbnail) {
5366
var img = jQuery('<img class="pinkynail">')
5467
img.attr("src", data.thumbnail)
5568
row.prepend(img)
5669
}
70+
5771
if (error) {
58-
row.find('.bar').addClass('failed')
72+
status.addClass('failed')
5973
row.find('.percent').html(tinyCompress.L10nInternalError)
6074
row.find('.progress').attr("title", error.toString())
6175
} else if (data.error) {
62-
row.find('.bar').addClass('failed')
76+
status.addClass('failed')
6377
row.find('.percent').html(tinyCompress.L10nError)
6478
row.find('.progress').attr("title", data.error)
6579
} else if (data.failed > 0) {
66-
row.find('.bar').addClass('failed')
80+
status.addClass('failed')
6781
row.find('.bar').css('width', '100%')
6882
row.find('.percent').html(data.success + " " + tinyCompress.L10nCompressions)
6983
row.find('.progress').attr("title", data.message)
7084
} else {
85+
status.addClass('success')
7186
row.find('.bar').css('width', '100%')
7287
row.find('.percent').html(data.success + " " + tinyCompress.L10nCompressions)
7388
}
89+
7490
if (data.status) {
7591
jQuery('#tiny-status span').html(data.status)
7692
}
93+
7794
if (items[++i]) {
7895
bulk_compress_item(items, i)
7996
} else {
@@ -85,7 +102,7 @@
85102

86103
function bulk_compress_item(items, i) {
87104
var item = items[i]
88-
var row = jQuery(jQuery('#tiny-images').children("div")[i])
105+
var row = jQuery(jQuery('#media-items').children("div")[i])
89106
row.find('.percent').html(tinyCompress.L10nCompressing)
90107
jQuery.ajax({
91108
url: ajaxurl,
@@ -104,9 +121,14 @@
104121
}
105122

106123
function bulk_compress(items) {
107-
var list = jQuery('#tiny-images')
124+
var list = jQuery('#media-items')
125+
var row
108126
for (var i = 0; i < items.length; i++) {
109-
row = jQuery('<div class="media-item"><div class="progress"><div class="percent"></div><div class="bar"></div></div><div class="filename"></div></div>')
127+
if (check_wp_version(3.3)) {
128+
row = jQuery('<div class="media-item"><div class="progress"><div class="percent"></div><div class="bar"></div></div><div class="filename"></div></div>')
129+
} else {
130+
row = jQuery('<div class="media-item" style="box-shadow: none"><div class="progress"><div class="bar"></div></div><div class="percent"></div><div class="filename"></div></div>')
131+
}
110132
row.find('.percent').html(tinyCompress.L10nWaiting)
111133
row.find('.filename').html(items[i].post_title)
112134
list.append(row)
@@ -135,7 +157,10 @@
135157
jQuery('#tiny-compress-status').load(ajaxurl + '?action=tiny_compress_status')
136158
}
137159

138-
jQuery('.tiny-dismiss').click(dismiss_notice)
160+
jQuery('.tiny-notice a').click(dismiss_notice)
161+
jQuery(function() {
162+
jQuery('.tiny-notice button').unbind('click').click(dismiss_notice)
163+
})
139164

140165
window.tinyBulkCompress = bulk_compress
141-
}).call()
166+
}).call()

src/styles/admin.css

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,15 @@
1919
margin: 0;
2020
}
2121

22-
#tiny-images .media-item {
22+
#tiny-bulk-compress #media-items .bar.failed {
23+
background-color: #DD3D36;
24+
}
25+
26+
#tiny-bulk-compress #media-items .percent.failed {
27+
color: #DD3D36;
28+
}
29+
30+
#tiny-bulk-compress .media-item {
2331
box-shadow: 0px 1px 0px #DFDFDF;
2432
min-height: 36px;
2533
margin-bottom: 1px;
@@ -28,8 +36,10 @@
2836
background: none repeat scroll 0% 0% #FFF;
2937
}
3038

31-
#tiny-images .failed {
32-
background-color: #DD3D36;
39+
#tiny-bulk-compress .progress~.percent {
40+
float: right;
41+
line-height: 36px;
42+
margin-right: 20px;
3343
}
3444

3545
#tiny-progress p, #tiny-status p {

test/helpers/setup.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@ function activate_plugin($driver) {
143143
var_dump($driver->getPageSource());
144144
throw new UnexpectedValueException('Activating plugin failed.');
145145
}
146+
$driver->get(wordpress('/wp-admin/upload.php?mode=list'));
146147
}
147148

148149
function close_webdriver() {

test/integration/BulkCompressIntegrationTest.php

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ public function tearDown() {
1616

1717
public function testBulkCompressActionShouldBePresentInMedia() {
1818
$this->upload_image(dirname(__FILE__) . '/../fixtures/input-example.png');
19-
self::$driver->get(wordpress('/wp-admin/upload.php?mode=list'));
2019
$this->assertEquals('Compress Images', self::$driver->findElement(
2120
WebDriverBy::cssSelector('select[name="action"] option[value="tiny_bulk_compress"]')
2221
)->getText());
@@ -36,21 +35,42 @@ private function prepare($normal=1, $large=0) {
3635
$this->enable_compression_sizes(array('thumbnail', 'medium', 'large'));
3736
}
3837

39-
public function testBulkCompressShouldInMediaShouldRedirect() {
40-
$this->prepare();
38+
public function testBulkCompressShouldFromMediaShouldOnlyCompressSelected() {
39+
$this->prepare(1, 2);
4140

42-
self::$driver->get(wordpress('/wp-admin/upload.php?mode=list'));
43-
$checkboxes = self::$driver->findElements(WebDriverBy::cssSelector('th input[type="checkbox"]'));
41+
self::$driver->get(wordpress('/wp-admin/upload.php?orderby=title&order=asc'));
42+
$checkboxes = self::$driver->findElements(WebDriverBy::cssSelector('tbody input[type="checkbox"]'));
4443
$checkboxes[0]->click();
4544

4645
self::$driver->findElement(WebDriverBy::cssSelector('select[name="action"] option[value="tiny_bulk_compress"]'))->click();
4746
self::$driver->findElement(WebDriverBy::cssSelector('div.actions input[value="Apply"]'))->click();
4847

49-
self::$driver->wait(2)->until(WebDriverExpectedCondition::textToBePresentInElement(
48+
self::$driver->wait(3)->until(WebDriverExpectedCondition::textToBePresentInElement(
5049
WebDriverBy::cssSelector('.updated'), 'All images are processed'));
5150

52-
$this->assertContains("tools.php?page=tiny-bulk-compress&ids=", self::$driver->getCurrentUrl());
51+
$this->assertEquals('1', self::$driver->findElement(WebDriverBy::cssSelector('#tiny-progress span'))->getText());
52+
$this->assertEquals('input-example', self::$driver->findElement(WebDriverBy::cssSelector('.media-item .filename'))->getText());
5353
}
5454

55-
// TODO: More tests
55+
public function testBulkCompressShouldCompressAll() {
56+
$this->prepare(1, 1);
57+
58+
self::$driver->get(wordpress('/wp-admin/tools.php?page=tiny-bulk-compress.php'));
59+
$elements = self::$driver->findElements(WebDriverBy::cssSelector('#tiny-bulk-compress p'));
60+
$this->assertContains('2 images', $elements[1]->getText());
61+
62+
self::$driver->findElement(WebDriverBy::cssSelector('#tiny-bulk-compress button'))->click();
63+
self::$driver->wait(2)->until(WebDriverExpectedCondition::textToBePresentInElement(
64+
WebDriverBy::cssSelector('.updated'), 'All images are processed'));
65+
66+
$elements = self::$driver->findElements(WebDriverBy::cssSelector('.media-item .filename'));
67+
$filenames = array_map('innerText', $elements);
68+
69+
$this->assertEquals(2, count($filenames));
70+
$this->assertContains('input-large', $filenames);
71+
$this->assertContains('input-example', $filenames);
72+
73+
$this->assertEquals('2', self::$driver->findElement(WebDriverBy::cssSelector('#tiny-progress span'))->getText());
74+
$this->assertEquals('5', self::$driver->findElement(WebDriverBy::cssSelector('#tiny-status span'))->getText());
75+
}
5676
}

test/integration/CompressIntegrationTest.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ public function testCompressButton() {
4141
$this->set_api_key('PNG123');
4242
$this->upload_image(dirname(__FILE__) . '/../fixtures/input-example.png');
4343
$this->enable_compression_sizes(array('medium', 'large'));
44-
self::$driver->get(wordpress('/wp-admin/upload.php?mode=list'));
44+
45+
self::$driver->get(wordpress('/wp-admin/upload.php'));
4546
$this->assertContains('Compressed 1 out of 2 sizes',
4647
self::$driver->findElement(WebDriverBy::cssSelector('td.tiny-compress-images'))->getText());
4748
self::$driver->findElement(WebDriverBy::cssSelector('td.tiny-compress-images button'))->click();
@@ -59,8 +60,11 @@ public function testLimitReached() {
5960
public function testLimitReachedDismisses() {
6061
$this->set_api_key('LIMIT123');
6162
$this->upload_image(dirname(__FILE__) . '/../fixtures/input-example.png');
62-
self::$driver->findElement(WebDriverBy::cssSelector('.tiny-dismiss'))->click();
63+
self::$driver->findElement(WebDriverBy::cssSelector('.tiny-notice button, .tiny-notice a'))->click();
6364
self::$driver->wait(2)->until(WebDriverExpectedCondition::invisibilityOfElementWithText(
6465
WebDriverBy::cssSelector('.tiny-dismiss'), 'Dismiss'));
66+
67+
self::$driver->get(wordpress('/wp-admin/options-media.php'));
68+
$this->assertEquals(0, count(self::$driver->findElements(WebDriverBy::cssSelector('div.error p'))));
6569
}
6670
}

0 commit comments

Comments
 (0)