Version Description
Release date November 7, 2022
* Fix: when converting PNG to JPG, the PNG path was saved in the post editor, which could result in broken images;
* Fix: the bulk restore of Custom Media was performed without saving it to the previous bulks history;
* Fix: various wording updates and fixes throughout the plugin code;
* Fix: PNG to JPG conversion failed under certain Windows environments due to wrong path construction;
* Fix: the plugin now works with thumbs that have a numeric name (e.g. 0
);
* Fix: on certain hosting restrictions, requesting a new API key caused a fatal error;
* Fix: the original image was not processed when thumbnail processing was turned off;
* Compat: added compatibility with the Uncode theme's adaptive images feature;
* Tweak: minor updates to the settings and Media Library layout for new plans that will be introduced soon;
* Tweak: added filter/constant that can be used by affiliates;
* Tweak: reworked plugin notification system to make it more robust and reliable;
* Language: 44 new strings added, 2 updated, 0 fuzzed, and 39 deprecated.
Release Info
Developer | petredobrescu |
Plugin | ShortPixel Image Optimizer |
Version | 5.1.2 |
Comparing to | |
See all releases |
Code changes from version 5.1.1 to 5.1.2
- build/shortpixel/notices/src/NoticeModel.php +57 -3
- class/BuildAutoLoader.php +2 -35
- class/Controller/AdminController.php +7 -0
- class/Controller/AdminNoticesController.php +312 -751
- class/Controller/FileSystemController.php +5 -1
- class/Controller/FrontController.php +4 -3
- class/Controller/QuotaController.php +5 -2
- class/Controller/SettingsController.php +58 -84
- class/Controller/View/BulkViewController.php +14 -1
- class/Controller/View/EditMediaViewController.php +4 -4
- class/Controller/View/OtherMediaViewController.php +1 -1
- class/Helper/InstallHelper.php +4 -3
- class/Helper/UiHelper.php +20 -0
- class/Helper/UtilHelper.php +124 -0
- class/Model/AccessModel.php +25 -0
- class/Model/AdminNoticeModel.php +141 -0
- class/Model/AdminNotices/ApiNotice.php +40 -0
- class/Model/AdminNotices/ApiNoticeRepeat.php +51 -0
- class/Model/AdminNotices/ApiNoticeRepeatLong.php +57 -0
- class/Model/AdminNotices/AvifNotice.php +97 -0
- class/Model/AdminNotices/CompatNotice.php +191 -0
- class/Model/AdminNotices/LegacyNotice.php +30 -0
- class/Model/AdminNotices/ListviewNotice.php +60 -0
- class/Model/AdminNotices/NextgenNotice.php +34 -0
- class/Model/AdminNotices/QuotaNoticeMonth.php +99 -0
- class/Model/AdminNotices/QuotaNoticeReached.php +106 -0
- class/Model/AdminNotices/SmartcropNotice.php +49 -0
- class/Model/AdminNotices/UnlistedNotice.php +39 -0
- class/Model/EnvironmentModel.php +0 -2
- class/Model/File/DirectoryModel.php +1 -1
- class/Model/File/FileModel.php +4 -2
- class/Model/Image/CustomImageModel.php +16 -6
- class/Model/Image/ImageModel.php +7 -7
- class/Model/Image/MediaLibraryModel.php +88 -67
- class/Model/Image/MediaLibraryThumbnailModel.php +2 -1
- class/Model/StatsModel.php +0 -5
- class/Tools.php +0 -376
- class/ViewController.php +8 -1
- class/external/uncode.php +44 -0
- class/plugin.json +1 -1
- class/view/bulk/part-dashboard.php +1 -1
- class/view/bulk/part-selection.php +16 -2
- class/view/bulk/part-summary.php +16 -14
- class/view/settings/part-advanced.php +32 -25
- class/view/settings/part-debug.php +37 -8
- class/view/settings/part-general.php +6 -10
- class/view/settings/part-optpie.php +22 -24
- class/view/view-settings.php +23 -15
- class/wp-shortpixel-settings.php +3 -70
- readme.txt +16 -1
- res/css/short-pixel-bar.min.css +1 -1
- res/css/short-pixel.css +3 -2
- res/css/shortpixel-admin.css +219 -320
- res/css/shortpixel-admin.css.map +1 -1
- res/css/shortpixel-bulk.css +787 -985
- res/css/shortpixel-bulk.css.map +7 -1
- res/css/shortpixel-nextgen.css +16 -21
- res/css/shortpixel-nextgen.css.map +7 -1
- res/css/shortpixel-notices.css +47 -70
- res/css/shortpixel-notices.css.map +7 -1
- res/css/shortpixel-othermedia.css +124 -171
- res/css/shortpixel-othermedia.css.map +7 -1
- res/css/shortpixel-settings.css +338 -431
- res/css/shortpixel-settings.css.map +7 -1
- res/css/shortpixel-toolbar.css +128 -160
- res/css/shortpixel-toolbar.css.map +7 -1
- res/css/sp-file-tree.min.css +1 -1
- res/img/bulk/dashboard-background.svg +1 -1
- res/js/jquery.knob.js +2 -2
- res/js/jquery.knob.min.js +1 -1
- res/js/screens/screen-bulk.js +5 -4
- res/scss/elements/_colors.scss +1 -1
- res/scss/shortpixel-admin.scss +2 -2
- res/scss/shortpixel-bulk.scss +8 -2
- res/scss/shortpixel-notices.scss +1 -4
- res/scss/view/_list-item.scss +11 -11
- res/scss/view/_settings.scss +49 -34
- wp-shortpixel.php +3 -2
@@ -13,6 +13,8 @@ class NoticeModel //extends ShortPixelModel
|
|
13 |
protected $is_dismissed = false; // for persistent notices,
|
14 |
protected $suppress_until = null;
|
15 |
protected $suppress_period = -1;
|
|
|
|
|
16 |
public $is_removable = true; // if removable, display a notice dialog with red X or so.
|
17 |
public $messageType = self::NOTICE_NORMAL;
|
18 |
|
@@ -33,7 +35,6 @@ class NoticeModel //extends ShortPixelModel
|
|
33 |
{
|
34 |
$this->message = $message;
|
35 |
$this->messageType = $messageType;
|
36 |
-
|
37 |
}
|
38 |
|
39 |
public function isDone()
|
@@ -43,9 +44,7 @@ class NoticeModel //extends ShortPixelModel
|
|
43 |
{
|
44 |
if (time() >= $this->suppress_until)
|
45 |
{
|
46 |
-
//Log::addDebug('')
|
47 |
$this->is_persistent = false; // unpersist, so it will be cleaned and dropped.
|
48 |
-
|
49 |
}
|
50 |
}
|
51 |
|
@@ -98,6 +97,53 @@ class NoticeModel //extends ShortPixelModel
|
|
98 |
$this->details[] = $detail;
|
99 |
}
|
100 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
101 |
|
102 |
|
103 |
/** Set a notice persistent. Meaning it shows every page load until dismissed.
|
@@ -136,6 +182,14 @@ class NoticeModel //extends ShortPixelModel
|
|
136 |
self::$icons[$type] = $icon;
|
137 |
}
|
138 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
139 |
private function checkIncomplete($var)
|
140 |
{
|
141 |
return ($var instanceof \__PHP_Incomplete_Class);
|
13 |
protected $is_dismissed = false; // for persistent notices,
|
14 |
protected $suppress_until = null;
|
15 |
protected $suppress_period = -1;
|
16 |
+
protected $include_screens = array();
|
17 |
+
protected $exclude_screens = array();
|
18 |
public $is_removable = true; // if removable, display a notice dialog with red X or so.
|
19 |
public $messageType = self::NOTICE_NORMAL;
|
20 |
|
35 |
{
|
36 |
$this->message = $message;
|
37 |
$this->messageType = $messageType;
|
|
|
38 |
}
|
39 |
|
40 |
public function isDone()
|
44 |
{
|
45 |
if (time() >= $this->suppress_until)
|
46 |
{
|
|
|
47 |
$this->is_persistent = false; // unpersist, so it will be cleaned and dropped.
|
|
|
48 |
}
|
49 |
}
|
50 |
|
97 |
$this->details[] = $detail;
|
98 |
}
|
99 |
|
100 |
+
/**
|
101 |
+
* @param $method String Include or Exclude
|
102 |
+
* @param $includes String|Array Screen Names to Include / Exclude either string, or array
|
103 |
+
*/
|
104 |
+
public function limitScreens($method, $screens)
|
105 |
+
{
|
106 |
+
if ($method == 'exclude')
|
107 |
+
{
|
108 |
+
$var = 'exclude_screens';
|
109 |
+
}
|
110 |
+
else {
|
111 |
+
$var = 'include_screens';
|
112 |
+
}
|
113 |
+
|
114 |
+
if (is_array($screens))
|
115 |
+
{
|
116 |
+
$this->$var = array_merge($this->$var, $screens);
|
117 |
+
}
|
118 |
+
else {
|
119 |
+
$this->{$var}[] = $screens; // strange syntax is PHP 5.6 compat.
|
120 |
+
}
|
121 |
+
}
|
122 |
+
|
123 |
+
/* Checks if Notice is allowed on this screen
|
124 |
+
* @param @screen_id String The screen Id to check ( most likely current one, via EnvironmentModel)
|
125 |
+
*/
|
126 |
+
public function checkScreen($screen_id)
|
127 |
+
{
|
128 |
+
if (in_array($screen_id, $this->exclude_screens))
|
129 |
+
{
|
130 |
+
return false;
|
131 |
+
}
|
132 |
+
if (in_array($screen_id, $this->include_screens))
|
133 |
+
{
|
134 |
+
return true;
|
135 |
+
}
|
136 |
+
|
137 |
+
// if include is set, don't show if not screen included.
|
138 |
+
if (count($this->include_screens) == 0)
|
139 |
+
{
|
140 |
+
return true;
|
141 |
+
}
|
142 |
+
else {
|
143 |
+
return false;
|
144 |
+
}
|
145 |
+
}
|
146 |
+
|
147 |
|
148 |
|
149 |
/** Set a notice persistent. Meaning it shows every page load until dismissed.
|
182 |
self::$icons[$type] = $icon;
|
183 |
}
|
184 |
|
185 |
+
public function _debug_getvar($var)
|
186 |
+
{
|
187 |
+
if (property_exists($this, $var))
|
188 |
+
{
|
189 |
+
return $this->$var;
|
190 |
+
}
|
191 |
+
}
|
192 |
+
|
193 |
private function checkIncomplete($var)
|
194 |
{
|
195 |
return ($var instanceof \__PHP_Incomplete_Class);
|
@@ -37,20 +37,8 @@ class BuildAutoLoader
|
|
37 |
);
|
38 |
|
39 |
$models = array(
|
40 |
-
// 'class/Model/shortpixel-entity.php',
|
41 |
-
// 'class/Model/shortpixel-meta.php',
|
42 |
-
// 'class/Model/shortpixel-folder.php',
|
43 |
);
|
44 |
|
45 |
-
/* $db = array(
|
46 |
-
// 'class/db/shortpixel-db.php',
|
47 |
-
// 'class/db/wp-shortpixel-db.php',
|
48 |
-
'class/db/shortpixel-custom-meta-dao.php',
|
49 |
-
'class/db/wp-shortpixel-media-library-adapter.php',
|
50 |
-
'class/db/shortpixel-meta-facade.php'
|
51 |
-
); */
|
52 |
-
|
53 |
-
|
54 |
$externals = array(
|
55 |
'class/external/cloudflare.php',
|
56 |
'class/external/flywheel.php',
|
@@ -69,7 +57,8 @@ class BuildAutoLoader
|
|
69 |
'class/external/custom-suffixes.php',
|
70 |
'class/external/pantheon.php',
|
71 |
'class/external/spai.php',
|
72 |
-
'class/external/cache.php',
|
|
|
73 |
);
|
74 |
|
75 |
echo "Build Plugin.JSON ";
|
@@ -77,25 +66,3 @@ class BuildAutoLoader
|
|
77 |
}
|
78 |
|
79 |
}
|
80 |
-
|
81 |
-
/*require_once('shortpixel_api.php');
|
82 |
-
|
83 |
-
//entities
|
84 |
-
require_once('class/model/shortpixel-entity.php');
|
85 |
-
require_once('class/model/shortpixel-meta.php');
|
86 |
-
require_once('class/model/shortpixel-folder.php');
|
87 |
-
//exceptions
|
88 |
-
//database access
|
89 |
-
require_once('class/db/shortpixel-db.php');
|
90 |
-
require_once('class/db/wp-shortpixel-db.php');
|
91 |
-
require_once('class/db/shortpixel-custom-meta-dao.php');
|
92 |
-
|
93 |
-
require_once('class/db/wp-shortpixel-media-library-adapter.php');
|
94 |
-
require_once('class/db/shortpixel-meta-facade.php');
|
95 |
-
//view
|
96 |
-
require_once('class/view/shortpixel_view.php');
|
97 |
-
*/
|
98 |
-
|
99 |
-
|
100 |
-
//require_once( ABSPATH . 'wp-admin/includes/image.php' );
|
101 |
-
//include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
|
37 |
);
|
38 |
|
39 |
$models = array(
|
|
|
|
|
|
|
40 |
);
|
41 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
42 |
$externals = array(
|
43 |
'class/external/cloudflare.php',
|
44 |
'class/external/flywheel.php',
|
57 |
'class/external/custom-suffixes.php',
|
58 |
'class/external/pantheon.php',
|
59 |
'class/external/spai.php',
|
60 |
+
'class/external/cache.php',
|
61 |
+
'class/external/uncode.php',
|
62 |
);
|
63 |
|
64 |
echo "Build Plugin.JSON ";
|
66 |
}
|
67 |
|
68 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -67,6 +67,13 @@ class AdminController extends \ShortPixel\Controller
|
|
67 |
|
68 |
if ($mediaItem->isProcessable())
|
69 |
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
70 |
$control = new OptimizeController();
|
71 |
$control->addItemToQueue($mediaItem);
|
72 |
}
|
67 |
|
68 |
if ($mediaItem->isProcessable())
|
69 |
{
|
70 |
+
if ($mediaItem->get('do_png2jpg') === true)
|
71 |
+
{
|
72 |
+
$mediaItem->convertPNG();
|
73 |
+
$fs->flushImageCache(); // Flush it to reflect new status.
|
74 |
+
$mediaItem = $fs->getImage($id, 'media');
|
75 |
+
$meta = wp_get_attachment_metadata($id); // reset the metadata because we are on the hook.
|
76 |
+
}
|
77 |
$control = new OptimizeController();
|
78 |
$control->addItemToQueue($mediaItem);
|
79 |
}
|
@@ -20,646 +20,248 @@ class AdminNoticesController extends \ShortPixel\Controller
|
|
20 |
{
|
21 |
protected static $instance;
|
22 |
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
const MSG_INTEGRATION_NGGALLERY = 'IntNotice400';
|
39 |
-
const MSG_FEATURE_SMARTCROP = 'FeaNotice100';
|
40 |
-
|
41 |
-
const MSG_CONVERT_LEGACY = 'LegNotice100';
|
42 |
-
|
43 |
-
const MSG_LISTVIEW_ACTIVE = 'UxNotice100';
|
44 |
|
45 |
private $remote_message_endpoint = 'https://api.shortpixel.com/v2/notices.php';
|
46 |
private $remote_readme_endpoint = 'https://plugins.svn.wordpress.org/shortpixel-image-optimiser/trunk/readme.txt';
|
47 |
|
48 |
-
|
49 |
public function __construct()
|
50 |
{
|
51 |
-
|
52 |
add_action('admin_footer', array($this, 'displayNotices')); // called in views.
|
53 |
|
54 |
-
|
55 |
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
|
60 |
-
|
61 |
|
|
|
62 |
}
|
63 |
|
64 |
public static function getInstance()
|
65 |
{
|
66 |
-
|
67 |
self::$instance = new AdminNoticesController();
|
68 |
|
69 |
-
|
70 |
}
|
71 |
|
72 |
public static function resetAllNotices()
|
73 |
{
|
74 |
-
|
75 |
}
|
76 |
|
77 |
/** Triggered when plugin is activated */
|
78 |
public static function resetCompatNotice()
|
79 |
{
|
80 |
-
Notices::removeNoticeByID(
|
81 |
}
|
82 |
|
83 |
public static function resetAPINotices()
|
84 |
{
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
}
|
89 |
|
90 |
public static function resetQuotaNotices()
|
91 |
{
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
}
|
96 |
|
97 |
public static function resetIntegrationNotices()
|
98 |
{
|
99 |
-
|
100 |
}
|
101 |
|
102 |
-
|
103 |
-
{
|
104 |
-
Notices::removeNoticeByID(self::MSG_CONVERT_LEGACY);
|
105 |
-
}
|
106 |
-
|
107 |
-
/** ReInstates A Persistent Notice manually */
|
108 |
-
public static function reInstateQuotaExceeded()
|
109 |
{
|
110 |
-
|
111 |
-
//$notice = $noticeControl->getNoticeByID(self::MSG_QUOTA_REACHED);
|
112 |
-
Notices::removeNoticeByID(self::MSG_QUOTA_REACHED);
|
113 |
-
//$notice->unDismiss();
|
114 |
-
//$noticeControl->update();
|
115 |
}
|
116 |
|
117 |
public function displayNotices()
|
118 |
{
|
119 |
-
|
120 |
-
{
|
121 |
-
if(get_current_screen()->base !== 'dashboard') // ugly exception for dashboard.
|
122 |
-
return; // suppress all when not our screen.
|
123 |
-
}
|
124 |
-
|
125 |
-
$access = AccessModel::getInstance();
|
126 |
-
$screen = get_current_screen();
|
127 |
-
|
128 |
-
$noticeControl = Notices::getInstance();
|
129 |
-
$noticeControl->loadIcons(array(
|
130 |
-
'normal' => '<img class="short-pixel-notice-icon" src="' . plugins_url('res/img/slider.png', SHORTPIXEL_PLUGIN_FILE) . '">',
|
131 |
-
'success' => '<img class="short-pixel-notice-icon" src="' . plugins_url('res/img/robo-cool.png', SHORTPIXEL_PLUGIN_FILE) . '">',
|
132 |
-
'warning' => '<img class="short-pixel-notice-icon" src="' . plugins_url('res/img/robo-scared.png', SHORTPIXEL_PLUGIN_FILE) . '">',
|
133 |
-
'error' => '<img class="short-pixel-notice-icon" src="' . plugins_url('res/img/robo-scared.png', SHORTPIXEL_PLUGIN_FILE) . '">',
|
134 |
-
));
|
135 |
-
|
136 |
-
if ($noticeControl->countNotices() > 0)
|
137 |
-
{
|
138 |
-
$notices = $noticeControl->getNoticesForDisplay();
|
139 |
-
|
140 |
-
if (count($notices) > 0)
|
141 |
{
|
142 |
-
|
143 |
-
|
144 |
-
foreach($notices as $notice)
|
145 |
-
{
|
146 |
-
// Ugly exception for listView Notice. If happens more, notices should extended to include screen check.
|
147 |
-
if ($notice->getID() == AdminNoticesController::MSG_LISTVIEW_ACTIVE && \wpSPIO()->env()->screen_id !== 'upload' )
|
148 |
-
{
|
149 |
-
continue;
|
150 |
-
}
|
151 |
-
elseif ($access->noticeIsAllowed($notice))
|
152 |
-
{
|
153 |
-
echo $notice->getForDisplay();
|
154 |
-
}
|
155 |
-
else
|
156 |
-
{
|
157 |
-
continue;
|
158 |
-
}
|
159 |
-
|
160 |
-
if ($notice->getID() == AdminNoticesController::MSG_QUOTA_REACHED || $notice->getID() == AdminNoticesController::MSG_UPGRADE_MONTH
|
161 |
-
|| $notice->getID() == AdminNoticesController::MSG_UPGRADE_BULK)
|
162 |
-
{
|
163 |
-
wp_enqueue_script('jquery.knob.min.js');
|
164 |
-
//wp_enqueue_script('jquery.tooltip.min.js');
|
165 |
-
wp_enqueue_script('shortpixel');
|
166 |
-
// \wpSPIO()->load_style('shortpixel-modal');
|
167 |
-
}
|
168 |
-
}
|
169 |
}
|
170 |
-
}
|
171 |
-
$noticeControl->update(); // puts views, and updates
|
172 |
-
}
|
173 |
-
|
174 |
-
/* General function to check on Hook for admin notices if there is something to show globally */
|
175 |
-
public function check_admin_notices()
|
176 |
-
{
|
177 |
-
if (! \wpSPIO()->env()->is_screen_to_use)
|
178 |
-
{
|
179 |
-
if(get_current_screen()->base !== 'dashboard') // ugly exception for dashboard.
|
180 |
-
return; // suppress all when not our screen.
|
181 |
-
}
|
182 |
-
|
183 |
-
$this->doAPINotices();
|
184 |
-
$this->doCompatNotices();
|
185 |
-
$this->doUnlistedNotices();
|
186 |
-
$this->doQuotaNotices();
|
187 |
-
$this->doIntegrationNotices();
|
188 |
-
$this->doRemoteNotices();
|
189 |
-
|
190 |
-
$this->doListViewNotice();
|
191 |
-
}
|
192 |
|
|
|
|
|
|
|
193 |
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
|
|
|
|
|
|
198 |
|
199 |
-
if (
|
200 |
{
|
201 |
-
|
202 |
-
}
|
203 |
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
$message = sprintf(__('It seems you are using NextGen Gallery. You can optimize your galleries with ShortPixel, but this is currently not enabled. To enable, %sgo to settings and enable%s it!', 'shortpixel_image_optimiser'), '<a href="' . $url . '">', '</a>');
|
208 |
-
$notice = Notices::addNormal($message);
|
209 |
-
Notices::makePersistent($notice, self::MSG_INTEGRATION_NGGALLERY, YEAR_IN_SECONDS);
|
210 |
-
}
|
211 |
|
212 |
-
|
213 |
-
|
214 |
-
{
|
215 |
-
$link = 'https://shortpixel.com/knowledge-base/article/182-what-is-smart-cropping';
|
216 |
-
$link2 = 'https://shortpixel.com/blog/how-to-smart-crop-wordpress-images/#how-to-crop-wordpress-images-automatically-smart-solution';
|
217 |
-
$link3 = esc_url(admin_url('options-general.php?page=wp-shortpixel-settings'));
|
218 |
-
|
219 |
-
$message = sprintf(__('%s With ShortPixel you can now %ssmartly crop%s the thumbnails on your website. This is especially useful for eCommerce websites %s(read more)%s. %s %s Activate the option in the %sShortPixel Settings%s page. %s', 'shortpixel-image-optimiser'),
|
220 |
-
'<p>' ,
|
221 |
-
'<a href="' . $link . '" target="_blank">', '</a>',
|
222 |
-
'<a href="' . $link2 . '" target="_blank">', '</a>',
|
223 |
-
'</p>', '<p>',
|
224 |
-
'<a href="' . $link3 . '" >', '</a>',
|
225 |
-
'</p>'
|
226 |
-
);
|
227 |
-
$notice = Notices::addNormal($message);
|
228 |
-
Notices::makePersistent($notice, self::MSG_FEATURE_SMARTCROP, YEAR_IN_SECONDS);
|
229 |
-
}
|
230 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
231 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
232 |
}
|
233 |
|
234 |
-
|
235 |
-
|
236 |
{
|
237 |
-
if (\wpSPIO()->
|
238 |
{
|
239 |
-
|
|
|
240 |
}
|
241 |
|
242 |
-
|
243 |
-
|
244 |
-
$now = time();
|
245 |
|
246 |
-
|
|
|
|
|
247 |
{
|
248 |
-
|
249 |
-
|
|
|
250 |
}
|
|
|
251 |
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
|
258 |
-
|
259 |
-
|
260 |
-
if (! $notice)
|
261 |
-
{
|
262 |
-
// If no key is activated, load the general one.
|
263 |
-
$message = $this->getActivationNotice();
|
264 |
-
$notice = Notices::addNormal($message);
|
265 |
-
Notices::makePersistent($notice, self::MSG_NO_APIKEY, YEAR_IN_SECONDS);
|
266 |
-
}
|
267 |
|
268 |
-
|
269 |
-
|
|
|
270 |
{
|
271 |
-
|
272 |
-
// $notice->
|
273 |
-
//Notices::removeNoticeByID(self::MSG_NO_APIKEY); // remove the previous one.
|
274 |
-
$message = __("Action needed. Please <a href='https://shortpixel.com/wp-apikey' target='_blank'>get your API key</a> to activate your ShortPixel plugin.",'shortpixel-image-optimiser');
|
275 |
-
|
276 |
-
$notice = Notices::addWarning($message);
|
277 |
-
Notices::makePersistent($notice, self::MSG_NO_APIKEY_REPEAT, YEAR_IN_SECONDS);
|
278 |
}
|
279 |
-
|
280 |
-
|
281 |
-
// Notices::removeNoticeByID(self::MSG_NO_APIKEY); // remove the previous one.
|
282 |
-
$message = __("Your image gallery is not optimized. It takes 2 minutes to <a href='https://shortpixel.com/wp-apikey' target='_blank'>get your API key</a> and activate your ShortPixel plugin.",'shortpixel-image-optimiser') . "<BR><BR>";
|
283 |
-
|
284 |
-
$notice = Notices::addWarning($message);
|
285 |
-
Notices::makePersistent($notice, self::MSG_NO_APIKEY_REPEAT_LONG, YEAR_IN_SECONDS);
|
286 |
-
|
287 |
}
|
288 |
-
|
289 |
}
|
290 |
|
291 |
-
|
292 |
{
|
293 |
-
|
294 |
-
|
295 |
-
$notice = $noticeController->getNoticeByID(self::MSG_COMPAT);
|
296 |
-
$conflictPlugins = \ShortPixelTools::getConflictingPlugins();
|
297 |
-
|
298 |
-
if ($notice)
|
299 |
-
{
|
300 |
-
if (count($conflictPlugins) == 0)
|
301 |
-
Notices::removeNoticeByID(self::MSG_COMPAT); // remove when not actual anymore.
|
302 |
-
if ($notice->isDismissed() )
|
303 |
-
return; // notice not wanted, don't bother.
|
304 |
-
}
|
305 |
-
|
306 |
-
// If this notice is not already out there, and there are conflicting plugins, go for display.
|
307 |
-
if (count($conflictPlugins) > 0)
|
308 |
-
{
|
309 |
-
$notice = Notices::addWarning($this->getConflictMessage($conflictPlugins));
|
310 |
-
Notices::makePersistent($notice, self::MSG_COMPAT, YEAR_IN_SECONDS);
|
311 |
-
}
|
312 |
}
|
313 |
|
314 |
-
// Called by MediaLibraryModel
|
315 |
-
public function invokeLegacyNotice()
|
316 |
-
{
|
317 |
-
$noticeController = Notices::getInstance();
|
318 |
-
|
319 |
-
$notice = $noticeController->getNoticeByID(self::MSG_CONVERT_LEGACY);
|
320 |
-
// If already in system, don't bother doing it again.
|
321 |
-
if ($notice !== false)
|
322 |
-
return;
|
323 |
-
|
324 |
-
$message = '<p><strong>' . __('ShortPixel found items in media library with a legacy optimization format!', 'shortpixel-image-optimiser') . '</strong></p>';
|
325 |
-
|
326 |
-
$message .= '<p>' . __('Prior to version 5.0, a different format was used to store ShortPixel optimization information. ShortPixel automatically migrates the media library items to the new format when they are opened. %s Please check if your images contain the optimization information after the migration. %s Read more %s', 'shortpixel-image-optimiser') . '</p>';
|
327 |
-
|
328 |
-
$message .= '<p>' . __('It is recommended to migrate all items to the modern format by clicking on the button below.', 'shortpixel-image-optimser') . '</p>';
|
329 |
-
$message .= '<p><a href="%s" class="button button-primary">%s</a></p>';
|
330 |
-
|
331 |
-
$read_link = esc_url('https://shortpixel.com/knowledge-base/article/539-spio-5-tells-me-to-convert-legacy-data-what-is-this');
|
332 |
-
$action_link = esc_url(admin_url('upload.php?page=wp-short-pixel-bulk&panel=bulk-migrate'));
|
333 |
-
$action_name = __('Migrate legacy data', 'shortpixel-image-optimiser');
|
334 |
-
|
335 |
-
$message = sprintf($message, '<br>', '<a href="' . $read_link . '" target="_blank">', '</a>', $action_link, $action_name);
|
336 |
-
|
337 |
-
$notice = Notices::addNormal($message);
|
338 |
-
Notices::makePersistent($notice, self::MSG_CONVERT_LEGACY, YEAR_IN_SECONDS);
|
339 |
|
340 |
-
|
341 |
-
|
342 |
-
protected function doUnlistedNotices()
|
343 |
-
{
|
344 |
-
$settings = \wpSPIO()->settings();
|
345 |
-
if ($settings->optimizeUnlisted)
|
346 |
-
return;
|
347 |
-
|
348 |
-
if(isset($settings->currentStats['foundUnlistedThumbs']) && is_array($settings->currentStats['foundUnlistedThumbs'])) {
|
349 |
-
$notice = Notices::addNormal($this->getUnlistedMessage($settings->currentStats['foundUnlistedThumbs']));
|
350 |
-
Notices::makePersistent($notice, self::MSG_UNLISTED_FOUND, YEAR_IN_SECONDS);
|
351 |
-
}
|
352 |
-
}
|
353 |
-
|
354 |
-
protected function doQuotaNotices()
|
355 |
{
|
356 |
-
|
357 |
-
|
358 |
-
|
359 |
-
|
360 |
-
|
361 |
-
|
362 |
-
$callback = array(AdminNoticesController::getInstance(), 'proposeUpgradePopup');
|
363 |
-
|
364 |
-
if (! \wpSPIO()->settings()->verifiedKey)
|
365 |
-
{
|
366 |
-
return; // no key, no quota.
|
367 |
-
}
|
368 |
-
|
369 |
-
// phpcs:ignore WordPress.Security.NonceVerification.Recommended -- This is not a form
|
370 |
-
if(isset($_GET['checkquota'])) {
|
371 |
-
//$shortpixel->getQuotaInformation();
|
372 |
-
$quota = $quotaController->getQuota();
|
373 |
-
}
|
374 |
-
|
375 |
-
|
376 |
-
/** Comment for historical reasons, this seems strange in the original, excluding.
|
377 |
-
* isset($this->_settings->currentStats['optimizePdfs'])
|
378 |
-
* && $this->_settings->currentStats['optimizePdfs'] == $this->_settings->optimizePdfs )
|
379 |
-
*/
|
380 |
-
if($quotaController->hasQuota() === true)
|
381 |
-
{
|
382 |
-
$env = \wpSPIO()->env();
|
383 |
-
|
384 |
-
$quotaController = QuotaController::getInstance();
|
385 |
-
$quotaData = $quotaController->getQuota();
|
386 |
-
|
387 |
-
$month_notice = $noticeController->getNoticeByID(self::MSG_UPGRADE_MONTH);
|
388 |
-
|
389 |
-
//consider the monthly plus 1/6 of the available one-time credits.
|
390 |
-
if( $this->monthlyUpgradeNeeded($quotaData)) {
|
391 |
-
|
392 |
-
if ($month_notice === false)
|
393 |
-
{
|
394 |
-
//looks like the user hasn't got enough credits to process the monthly images, display a notice telling this
|
395 |
-
$message = $this->getMonthlyUpgradeMessage(array('monthAvg' => $this->getMonthAvg(), 'monthlyQuota' => $quotaData->monthly->total, 'onetimeTotal' => $quotaData->onetime->remaining ));
|
396 |
-
$notice = Notices::addNormal($message);
|
397 |
-
Notices::makePersistent($notice, self::MSG_UPGRADE_MONTH, YEAR_IN_SECONDS, $callback);
|
398 |
-
}
|
399 |
-
}
|
400 |
-
}
|
401 |
-
elseif ($quotaController->hasQuota() === false)
|
402 |
-
{
|
403 |
-
|
404 |
-
$notice = $noticeController->getNoticeByID(self::MSG_QUOTA_REACHED);
|
405 |
-
if ($notice === false)
|
406 |
-
{
|
407 |
-
$message = $this->getQuotaExceededMessage();
|
408 |
-
$notice = Notices::addError($message);
|
409 |
-
Notices::makePersistent($notice, self::MSG_QUOTA_REACHED, WEEK_IN_SECONDS, $callback);
|
410 |
-
}
|
411 |
-
|
412 |
-
Notices::removeNoticeByID(self::MSG_UPGRADE_MONTH); // get rid of doubles. reset
|
413 |
-
Notices::removeNoticeByID(self::MSG_UPGRADE_BULK);
|
414 |
-
}
|
415 |
|
416 |
}
|
417 |
|
418 |
|
419 |
protected function doRemoteNotices()
|
420 |
{
|
421 |
-
|
422 |
|
423 |
-
|
424 |
-
|
425 |
|
426 |
-
|
427 |
-
|
428 |
-
|
429 |
-
|
430 |
|
431 |
-
|
432 |
-
|
433 |
|
434 |
-
|
435 |
-
|
436 |
|
437 |
-
|
438 |
-
|
439 |
|
440 |
-
|
441 |
if ($noticeObj === false)
|
442 |
{
|
443 |
-
|
444 |
-
|
445 |
-
|
446 |
-
|
447 |
-
|
448 |
-
|
449 |
-
|
450 |
-
|
451 |
-
|
452 |
-
|
453 |
-
|
454 |
-
|
455 |
-
|
456 |
-
|
457 |
-
Notices::makePersistent($new_notice, $id, MONTH_IN_SECONDS);
|
458 |
-
}
|
459 |
-
|
460 |
-
|
461 |
-
}
|
462 |
-
|
463 |
-
}
|
464 |
-
|
465 |
-
protected function doListViewNotice()
|
466 |
-
{
|
467 |
-
$screen_id = \wpSPIO()->env()->screen_id;
|
468 |
-
if ($screen_id !== 'upload')
|
469 |
-
{
|
470 |
-
return;
|
471 |
-
}
|
472 |
-
|
473 |
-
$noticeController = Notices::getInstance();
|
474 |
-
|
475 |
-
if ( function_exists('wp_get_current_user') ) {
|
476 |
-
$current_user = wp_get_current_user();
|
477 |
-
$currentUserID = $current_user->ID;
|
478 |
-
$viewMode = get_user_meta($currentUserID, "wp_media_library_mode", true);
|
479 |
-
|
480 |
-
if ($viewMode === "" || strlen($viewMode) == 0)
|
481 |
-
{
|
482 |
-
// If nothing is set, set it for them.
|
483 |
-
update_user_meta($currentUserID, 'wp_media_library_mode', 'list');
|
484 |
-
}
|
485 |
-
elseif ($viewMode !== "list")
|
486 |
-
{
|
487 |
-
// @todo The notice is user-dependent but the notice is dismissed installation-wide.
|
488 |
-
|
489 |
-
$message = sprintf(__('You can see ShortPixel Image Optimiser actions and data only via the list view. Switch to the list view to use the plugin via the media library. Click to %s switch to the list view %s now. ', 'shortpixel-image-optimiser'), '<a href="' . admin_url('upload.php?mode=list') . '">','</a>');
|
490 |
-
$new_notice = Notices::addNormal($message);
|
491 |
-
Notices::makePersistent($new_notice, self::MSG_LISTVIEW_ACTIVE, YEAR_IN_SECONDS);
|
492 |
-
}
|
493 |
-
else
|
494 |
-
{
|
495 |
-
$noticeObj = $noticeController->getNoticeByID(self::MSG_LISTVIEW_ACTIVE);
|
496 |
-
if ($noticeObj !== false)
|
497 |
-
{
|
498 |
-
Notices::removeNoticeByID(self::MSG_LISTVIEW_ACTIVE);
|
499 |
-
}
|
500 |
-
}
|
501 |
|
502 |
-
|
503 |
-
|
504 |
|
505 |
-
// Callback to check if we are on the correct page.
|
506 |
-
public function upgradeBulkCallback($notice)
|
507 |
-
{
|
508 |
-
if (! \wpSPIO()->env()->is_bulk_page)
|
509 |
-
{
|
510 |
-
return false;
|
511 |
-
}
|
512 |
-
}
|
513 |
|
514 |
-
/* protected function getPluginUpdateMessage($new_version)
|
515 |
-
{
|
516 |
-
$message = false;
|
517 |
-
if (version_compare(SHORTPIXEL_IMAGE_OPTIMISER_VERSION, $new_version, '>=') ) // already installed 'new version'
|
518 |
-
{
|
519 |
-
return false;
|
520 |
-
}
|
521 |
-
elseif (version_compare($new_version, '5.0', '>=') && version_compare(SHORTPIXEL_IMAGE_OPTIMISER_VERSION, '5.0','<'))
|
522 |
-
{
|
523 |
-
$message = __('<h4>Version 5.0</h4> Warning, Version 5 is a major update. It\'s strongly recommend to backup your site and proceed with caution. Please report issues via our support channels', 'shortpixel-image-optimiser');
|
524 |
}
|
525 |
|
526 |
-
return $message;
|
527 |
-
} */
|
528 |
-
|
529 |
-
public function getActivationNotice()
|
530 |
-
{
|
531 |
-
$message = "<p>" . __('In order to start the optimization process, you need to validate your API Key in the '
|
532 |
-
. '<a href="options-general.php?page=wp-shortpixel-settings">ShortPixel Settings</a> page in your WordPress Admin.','shortpixel-image-optimiser') . "
|
533 |
-
</p>
|
534 |
-
<p>" . __('If you don’t have an API Key, just fill out the form and a key will be created.','shortpixel-image-optimiser') . "</p>";
|
535 |
-
|
536 |
-
return $message;
|
537 |
-
}
|
538 |
-
|
539 |
-
protected function getConflictMessage($conflicts)
|
540 |
-
{
|
541 |
-
$message = __("The following plugins are not compatible with ShortPixel and may lead to unexpected results: ",'shortpixel-image-optimiser');
|
542 |
-
$message .= '<ul class="sp-conflict-plugins">';
|
543 |
-
foreach($conflicts as $plugin) {
|
544 |
-
//ShortPixelVDD($plugin);
|
545 |
-
$action = $plugin['action'];
|
546 |
-
$link = ( $action == 'Deactivate' )
|
547 |
-
? wp_nonce_url( admin_url( 'admin-post.php?action=shortpixel_deactivate_conflict_plugin&plugin=' . urlencode( $plugin['path'] ) ), 'sp_deactivate_plugin_nonce' )
|
548 |
-
: $plugin['href'];
|
549 |
-
$message .= '<li class="sp-conflict-plugins-list"><strong>' . $plugin['name'] . '</strong>';
|
550 |
-
$message .= '<a href="' . $link . '" class="button button-primary">' . $action . '</a>';
|
551 |
-
|
552 |
-
if($plugin['details']) $message .= '<br>';
|
553 |
-
if($plugin['details']) $message .= '<span>' . $plugin['details'] . '</span>';
|
554 |
-
}
|
555 |
-
$message .= "</ul>";
|
556 |
-
|
557 |
-
return $message;
|
558 |
-
}
|
559 |
-
|
560 |
-
protected function getUnlistedMessage($unlisted)
|
561 |
-
{
|
562 |
-
$message = __("<p>ShortPixel found thumbnails which are not registered in the metadata but present alongside the other thumbnails. These thumbnails could be created and needed by some plugin or by the theme. Let ShortPixel optimize them as well?</p>", 'shortpixel-image-optimiser');
|
563 |
-
$message .= '<p>' . __("For example, the image", 'shortpixel-image-optimiser') . '
|
564 |
-
<a href="post.php?post=' . $unlisted->id . '&action=edit" target="_blank">
|
565 |
-
' . $unlisted->name . '
|
566 |
-
</a> has also these thumbs not listed in metadata: ' . (implode(', ', $unlisted->unlisted)) . '
|
567 |
-
</p>';
|
568 |
-
|
569 |
-
return $message;
|
570 |
-
}
|
571 |
-
|
572 |
-
/* Seems unused @todo Remove in a few versions
|
573 |
-
protected function getBulkUpgradeMessage($extra)
|
574 |
-
{
|
575 |
-
$message = '<p>' . sprintf(__("You currently have <strong>%d images and thumbnails to optimize</strong> but you only have <strong>%d images</strong> available in your current plan."
|
576 |
-
. " You might need to upgrade your plan in order to have all your images optimized.", 'shortpixel-image-optimiser'), $extra['filesTodo'], $extra['quotaAvailable']) . '</p>';
|
577 |
-
$message .= '<p><button class="button button-primary" id="shortpixel-upgrade-advice" onclick="ShortPixel.proposeUpgrade()" style="margin-right:10px;"><strong>' . __('Show me the best available options', 'shortpixel-image-optimiser') . '</strong></button></p>';
|
578 |
-
$this->proposeUpgradePopup();
|
579 |
-
return $message;
|
580 |
-
}
|
581 |
-
*/
|
582 |
-
protected function getMonthlyUpgradeMessage($extra)
|
583 |
-
{
|
584 |
-
$message = '<p>' . sprintf(__("You are adding an average of <strong>%d images and thumbnails every month</strong> to your Media Library and you have <strong>a plan of %d images/month (and %d one-time images)</strong>.%s"
|
585 |
-
. " You might need to upgrade your plan in order to have all your images optimized.", 'shortpixel-image-optimiser'), $extra['monthAvg'], $extra['monthlyQuota'], $extra['onetimeTotal'], '<br>') . '</p>';
|
586 |
-
$message .= ' <button class="button button-primary" id="shortpixel-upgrade-advice" onclick="ShortPixel.proposeUpgrade()" style="margin-right:10px;"><strong>' . __('Show me the best available options', 'shortpixel-image-optimiser') . '</strong></button>';
|
587 |
-
return $message;
|
588 |
-
}
|
589 |
-
|
590 |
-
protected function getQuotaExceededMessage()
|
591 |
-
{
|
592 |
-
$statsControl = StatsController::getInstance();
|
593 |
-
$averageCompression = $statsControl->getAverageCompression();
|
594 |
-
$quotaController = QuotaController::getInstance();
|
595 |
-
|
596 |
-
$keyControl = ApiKeyController::getInstance();
|
597 |
-
|
598 |
-
//$keyModel->loadKey();
|
599 |
-
|
600 |
-
$login_url = 'https://shortpixel.com/login/';
|
601 |
-
$friend_url = $login_url;
|
602 |
-
|
603 |
-
if ($keyControl->getKeyForDisplay())
|
604 |
-
{
|
605 |
-
$login_url .= $keyControl->getKeyForDisplay() . '/';
|
606 |
-
$friend_url = $login_url . 'tell-a-friend';
|
607 |
-
}
|
608 |
-
|
609 |
-
$message = '<div class="sp-quota-exceeded-alert" id="short-pixel-notice-exceed">';
|
610 |
-
|
611 |
-
if($averageCompression) {
|
612 |
-
|
613 |
-
$message .= '<div style="float:right;">
|
614 |
-
<div class="bulk-progress-indicator" style="height: 110px">
|
615 |
-
<div style="margin-bottom:5px">' . __('Average image<br>reduction so far:','shortpixel-image-optimiser') . '</div>
|
616 |
-
<div id="sp-avg-optimization"><input type="text" id="sp-avg-optimization-dial" value="' . round($averageCompression) . '" class="dial percentDial" data-dialsize="60"></div>
|
617 |
-
<script>
|
618 |
-
jQuery(function() {
|
619 |
-
if (ShortPixel)
|
620 |
-
{
|
621 |
-
ShortPixel.percentDial("#sp-avg-optimization-dial", 60);
|
622 |
-
}
|
623 |
-
});
|
624 |
-
</script>
|
625 |
-
</div>
|
626 |
-
</div>';
|
627 |
-
|
628 |
-
}
|
629 |
-
|
630 |
-
$message .= '<h3>' . __('Quota Exceeded','shortpixel-image-optimiser') . '</h3>';
|
631 |
-
|
632 |
-
$quota = $quotaController->getQuota();
|
633 |
-
|
634 |
-
$creditsUsed = number_format($quota->monthly->consumed + $quota->onetime->consumed);
|
635 |
-
$totalOptimized = $statsControl->find('total', 'images');
|
636 |
-
$totalImagesToOptimize = number_format($statsControl->totalImagesToOptimize());
|
637 |
-
|
638 |
-
$message .= '<p>' . sprintf(__('The plugin has optimized <strong>%s images</strong> and stopped because it reached the available quota limit.','shortpixel-image-optimiser'),
|
639 |
-
$creditsUsed);
|
640 |
-
|
641 |
-
if($totalImagesToOptimize > 0) {
|
642 |
-
|
643 |
-
$message .= sprintf(__('<strong> %s images and thumbnails</strong> are not yet optimized by ShortPixel.','shortpixel-image-optimiser'), $totalImagesToOptimize );
|
644 |
-
}
|
645 |
-
|
646 |
-
$message .= '</p>
|
647 |
-
<div>
|
648 |
-
<button class="button button-primary" type="button" id="shortpixel-upgrade-advice" onclick="ShortPixel.proposeUpgrade()" style="margin-right:10px;"><strong>' . __('Show me the best available options', 'shortpixel-image-optimiser') . '</strong></button>
|
649 |
-
<a class="button button-primary" href="' . $login_url . '"
|
650 |
-
title="' . __('Go to my account and select a plan','shortpixel-image-optimiser') . '" target="_blank" style="margin-right:10px;">
|
651 |
-
<strong>' . __('Upgrade','shortpixel-image-optimiser') . '</strong>
|
652 |
-
</a>
|
653 |
-
<button type="button" name="checkQuota" class="button" onclick="ShortPixel.checkQuota()">'. __('Confirm New Credits','shortpixel-image-optimiser') . '</button>
|
654 |
-
</div>';
|
655 |
-
|
656 |
-
$message .= '</div>'; /// closing div
|
657 |
-
return $message;
|
658 |
}
|
659 |
|
660 |
public function proposeUpgradePopup() {
|
661 |
-
|
662 |
-
|
663 |
}
|
664 |
|
665 |
public function proposeUpgradeRemote()
|
@@ -669,8 +271,8 @@ class AdminNoticesController extends \ShortPixel\Controller
|
|
669 |
$apiKeyController = ApiKeyController::getInstance();
|
670 |
$settings = \wpSPIO()->settings();
|
671 |
|
672 |
-
|
673 |
-
|
674 |
|
675 |
$args = array(
|
676 |
'method' => 'POST',
|
@@ -688,12 +290,12 @@ class AdminNoticesController extends \ShortPixel\Controller
|
|
688 |
'm4' => $statsController->find('period', 'months', '4'),
|
689 |
'filesTodo' => $statsController->totalImagesToOptimize(),
|
690 |
'estimated' => $settings->optimizeUnlisted || $settings->optimizeRetina ? 'true' : 'false',
|
691 |
-
|
692 |
-
|
693 |
/* */
|
694 |
'iconsUrl' => base64_encode(wpSPIO()->plugin_url('res/img'))
|
695 |
-
|
696 |
-
|
697 |
|
698 |
);
|
699 |
|
@@ -707,13 +309,13 @@ class AdminNoticesController extends \ShortPixel\Controller
|
|
707 |
|
708 |
}
|
709 |
|
710 |
-
|
711 |
-
|
712 |
$transient_name = 'shortpixel_remote_notice';
|
713 |
$transient_duration = DAY_IN_SECONDS;
|
714 |
|
715 |
if (\wpSPIO()->env()->is_debug)
|
716 |
-
|
717 |
|
718 |
$keyControl = new apiKeyController();
|
719 |
//$keyControl->loadKey();
|
@@ -721,255 +323,214 @@ class AdminNoticesController extends \ShortPixel\Controller
|
|
721 |
$notices = get_transient($transient_name);
|
722 |
$url = $this->remote_message_endpoint;
|
723 |
$url = add_query_arg(array( // has url
|
724 |
-
|
725 |
-
|
726 |
-
|
727 |
), $url);
|
728 |
|
729 |
|
730 |
if ( $notices === false ) {
|
731 |
-
|
732 |
-
|
733 |
-
|
734 |
-
|
735 |
-
|
736 |
|
737 |
-
|
738 |
-
|
739 |
|
740 |
-
|
741 |
-
|
742 |
-
|
743 |
-
|
744 |
-
|
745 |
-
|
746 |
-
|
747 |
}
|
748 |
|
749 |
return $notices;
|
750 |
-
}
|
751 |
-
|
752 |
-
protected function monthlyUpgradeNeeded($quotaData)
|
753 |
-
{
|
754 |
-
if (isset($quotaData->monthly->total))
|
755 |
-
{
|
756 |
-
$monthAvg = $this->getMonthAvg($quotaData);
|
757 |
-
// +20 I suspect to not trigger on very low values of monthly use(?)
|
758 |
-
$threshold = $quotaData->monthly->total + ($quotaData->onetime->remaining / 6 ) +20;
|
759 |
-
|
760 |
-
if ($monthAvg > $threshold)
|
761 |
-
{
|
762 |
-
return true;
|
763 |
-
}
|
764 |
-
}
|
765 |
-
return false;
|
766 |
-
}
|
767 |
-
|
768 |
-
protected function bulkUpgradeNeeded() {
|
769 |
-
|
770 |
-
$quotaController = QuotaController::getInstance(); //$stats;
|
771 |
-
$stats = StatsController::getInstance();
|
772 |
-
|
773 |
-
$to_process = $stats->totalImagesToOptimize(); // $stats->find('total', 'imagesTotal') - $stats->find('total', 'images');
|
774 |
-
|
775 |
-
return $to_process > $quotaController->getAvailableQuota();
|
776 |
-
|
777 |
-
//return $to_process > $quotaData->monthly->total + + $quotaData['APICallsQuotaOneTimeNumeric'] - $quotaData['APICallsMadeNumeric'] - $quotaData['APICallsMadeOneTimeNumeric'];
|
778 |
}
|
779 |
|
780 |
-
protected function getMonthAvg() {
|
781 |
-
$stats = StatsController::getInstance();
|
782 |
|
783 |
-
// Count how many months have some optimized images.
|
784 |
-
for($i = 4, $count = 0; $i>=1; $i--) {
|
785 |
-
if($count == 0 && $stats->find('period', 'months', $i) == 0)
|
786 |
-
{
|
787 |
-
continue;
|
788 |
-
}
|
789 |
-
$count++;
|
790 |
|
791 |
-
}
|
792 |
-
// Sum last 4 months, and divide by number of active months to get number of avg per active month.
|
793 |
-
return ($stats->find('period', 'months', 1) + $stats->find('period', 'months', 2) + $stats->find('period', 'months', 3) + $stats->find('period', 'months', 4) / max(1,$count));
|
794 |
-
}
|
795 |
|
796 |
|
797 |
public function pluginUpdateMessage($data, $response)
|
798 |
{
|
799 |
-
|
800 |
|
801 |
-
|
802 |
|
803 |
-
|
804 |
-
|
805 |
-
|
806 |
-
|
807 |
-
|
808 |
-
|
809 |
-
|
810 |
-
|
811 |
|
812 |
}
|
813 |
|
814 |
/**
|
815 |
* Stolen from SPAI, Thanks.
|
816 |
-
|
817 |
private function get_update_notice($data, $response) {
|
818 |
-
|
819 |
|
820 |
-
|
821 |
|
822 |
-
|
823 |
-
|
824 |
|
825 |
-
|
826 |
-
|
827 |
|
828 |
-
|
829 |
-
|
830 |
-
|
831 |
-
|
832 |
-
|
833 |
-
|
834 |
-
|
835 |
|
836 |
|
837 |
-
|
838 |
-
|
839 |
-
|
840 |
-
}
|
841 |
}
|
|
|
842 |
|
843 |
-
|
844 |
}
|
845 |
|
846 |
|
847 |
|
848 |
/**
|
849 |
-
|
850 |
-
|
851 |
-
|
852 |
-
|
853 |
-
|
854 |
-
|
855 |
-
|
856 |
-
|
857 |
|
858 |
-
|
859 |
|
860 |
-
|
861 |
|
862 |
-
|
863 |
|
864 |
-
|
865 |
-
|
866 |
-
|
867 |
|
868 |
-
|
869 |
|
870 |
-
|
871 |
-
|
872 |
-
|
873 |
-
|
874 |
|
875 |
-
|
876 |
-
|
877 |
|
878 |
|
879 |
-
|
880 |
-
|
881 |
-
|
882 |
-
|
883 |
-
|
884 |
-
|
885 |
-
|
886 |
-
|
887 |
-
|
888 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
889 |
|
890 |
-
private function parse_readme_content( $content, $new_version, $response ) {
|
891 |
-
|
892 |
-
$notices_pattern = '/==.*Upgrade Notice.*==(.*)$|==/Uis';
|
893 |
-
|
894 |
-
$notice = '';
|
895 |
-
$matches = null;
|
896 |
-
|
897 |
-
if ( preg_match( $notices_pattern, $content, $matches ) ) {
|
898 |
-
|
899 |
-
if (! isset($matches[1]))
|
900 |
-
return ''; // no update texts.
|
901 |
-
|
902 |
-
$match = str_replace('\n', '', $matches[1]);
|
903 |
-
$lines = str_split(trim($match));
|
904 |
-
|
905 |
-
$versions = array();
|
906 |
-
$inv = false;
|
907 |
-
foreach($lines as $char)
|
908 |
-
{
|
909 |
-
//if (count($versions) == 0)
|
910 |
-
if ($char == '=' && ! $inv) // = and not recording version, start one.
|
911 |
-
{
|
912 |
-
$curver = '';
|
913 |
-
$inv = true;
|
914 |
-
}
|
915 |
-
elseif ($char == ' ' && $inv) // don't record spaces in version
|
916 |
-
continue;
|
917 |
-
elseif ($char == '=' && $inv) // end of version line
|
918 |
-
{ $versions[trim($curver)] = '';
|
919 |
-
$inv = false;
|
920 |
-
}
|
921 |
-
elseif($inv) // record the version string
|
922 |
-
{
|
923 |
-
$curver .= $char;
|
924 |
-
}
|
925 |
-
elseif(! $inv) // record the message
|
926 |
-
{
|
927 |
-
$versions[trim($curver)] .= $char;
|
928 |
-
}
|
929 |
-
|
930 |
-
|
931 |
-
}
|
932 |
-
|
933 |
-
foreach($versions as $version => $line)
|
934 |
-
{
|
935 |
-
if (version_compare(SHORTPIXEL_IMAGE_OPTIMISER_VERSION, $version, '<') && version_compare($version, $new_version, '<='))
|
936 |
-
{
|
937 |
-
$notice .= '<span>';
|
938 |
-
$notice .= $this->markdown2html( $line );
|
939 |
-
$notice .= '</span>';
|
940 |
-
|
941 |
-
}
|
942 |
-
}
|
943 |
-
|
944 |
-
}
|
945 |
-
|
946 |
-
return $notice;
|
947 |
-
}
|
948 |
-
|
949 |
-
/*private function replace_readme_constants( $content, $response ) {
|
950 |
-
$constants = [ '{{ NEW VERSION }}', '{{ CURRENT VERSION }}', '{{ PHP VERSION }}', '{{ REQUIRED PHP VERSION }}' ];
|
951 |
-
$replacements = [ $response->new_version, SHORTPIXEL_IMAGE_OPTIMISER_VERSION, PHP_VERSION, $response->requires_php ];
|
952 |
-
|
953 |
-
return str_replace( $constants, $replacements, $content );
|
954 |
-
} */
|
955 |
-
|
956 |
-
private function markdown2html( $content ) {
|
957 |
-
$patterns = [
|
958 |
-
'/\*\*(.+)\*\*/U', // bold
|
959 |
-
'/__(.+)__/U', // italic
|
960 |
-
'/\[([^\]]*)\]\(([^\)]*)\)/U', // link
|
961 |
-
];
|
962 |
-
|
963 |
-
$replacements = [
|
964 |
-
'<strong>${1}</strong>',
|
965 |
-
'<em>${1}</em>',
|
966 |
-
'<a href="${2}" target="_blank">${1}</a>',
|
967 |
-
];
|
968 |
-
|
969 |
-
$prepared_content = preg_replace( $patterns, $replacements, $content );
|
970 |
-
|
971 |
-
return isset( $prepared_content ) ? $prepared_content : $content;
|
972 |
}
|
973 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
974 |
|
975 |
} // class
|
20 |
{
|
21 |
protected static $instance;
|
22 |
|
23 |
+
protected $definedNotices = array( // NoticeModels by Class. This is not optimal but until solution found, workable.
|
24 |
+
'CompatNotice',
|
25 |
+
'UnlistedNotice',
|
26 |
+
'AvifNotice',
|
27 |
+
'QuotaNoticeMonth',
|
28 |
+
'QuotaNoticeReached',
|
29 |
+
'ApiNotice',
|
30 |
+
'ApiNoticeRepeat',
|
31 |
+
'ApiNoticeRepeatLong',
|
32 |
+
'NextgenNotice',
|
33 |
+
'SmartcropNotice',
|
34 |
+
'LegacyNotice',
|
35 |
+
'ListviewNotice'
|
36 |
+
);
|
37 |
+
protected $adminNotices; // Models
|
|
|
|
|
|
|
|
|
|
|
|
|
38 |
|
39 |
private $remote_message_endpoint = 'https://api.shortpixel.com/v2/notices.php';
|
40 |
private $remote_readme_endpoint = 'https://plugins.svn.wordpress.org/shortpixel-image-optimiser/trunk/readme.txt';
|
41 |
|
|
|
42 |
public function __construct()
|
43 |
{
|
44 |
+
add_action('admin_notices', array($this, 'displayNotices'), 50); // notices occured before page load
|
45 |
add_action('admin_footer', array($this, 'displayNotices')); // called in views.
|
46 |
|
47 |
+
add_action('in_plugin_update_message-' . plugin_basename(SHORTPIXEL_PLUGIN_FILE), array($this, 'pluginUpdateMessage') , 50, 2 );
|
48 |
|
49 |
+
// no persistent notifications with this flag set.
|
50 |
+
if (defined('SHORTPIXEL_SILENT_MODE') && SHORTPIXEL_SILENT_MODE === true)
|
51 |
+
return;
|
52 |
|
53 |
+
add_action('admin_notices', array($this, 'check_admin_notices'), 5); // run before the plugin admin notices
|
54 |
|
55 |
+
$this->initNotices();
|
56 |
}
|
57 |
|
58 |
public static function getInstance()
|
59 |
{
|
60 |
+
if (is_null(self::$instance))
|
61 |
self::$instance = new AdminNoticesController();
|
62 |
|
63 |
+
return self::$instance;
|
64 |
}
|
65 |
|
66 |
public static function resetAllNotices()
|
67 |
{
|
68 |
+
Notices::resetNotices();
|
69 |
}
|
70 |
|
71 |
/** Triggered when plugin is activated */
|
72 |
public static function resetCompatNotice()
|
73 |
{
|
74 |
+
Notices::removeNoticeByID('MSG_COMPAT');
|
75 |
}
|
76 |
|
77 |
public static function resetAPINotices()
|
78 |
{
|
79 |
+
Notices::removeNoticeByID('MSG_NO_APIKEY');
|
80 |
+
Notices::removeNoticeByID('MSG_NO_APIKEY_REPEAT');
|
81 |
+
Notices::removeNoticeByID('MSG_NO_APIKEY_REPEAT_LONG');
|
82 |
}
|
83 |
|
84 |
public static function resetQuotaNotices()
|
85 |
{
|
86 |
+
Notices::removeNoticeByID('MSG_UPGRADE_MONTH');
|
87 |
+
Notices::removeNoticeByID('MSG_UPGRADE_BULK');
|
88 |
+
Notices::removeNoticeBYID('MSG_QUOTA_REACHED');
|
89 |
}
|
90 |
|
91 |
public static function resetIntegrationNotices()
|
92 |
{
|
93 |
+
Notices::removeNoticeByID('MSG_INTEGRATION_NGGALLERY');
|
94 |
}
|
95 |
|
96 |
+
public static function resetLegacyNotice()
|
|
|
|
|
|
|
|
|
|
|
|
|
97 |
{
|
98 |
+
Notices::removeNoticeByID('MSG_CONVERT_LEGACY');
|
|
|
|
|
|
|
|
|
99 |
}
|
100 |
|
101 |
public function displayNotices()
|
102 |
{
|
103 |
+
if (! \wpSPIO()->env()->is_screen_to_use)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
104 |
{
|
105 |
+
if(get_current_screen()->base !== 'dashboard') // ugly exception for dashboard.
|
106 |
+
return; // suppress all when not our screen.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
107 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
108 |
|
109 |
+
$access = AccessModel::getInstance();
|
110 |
+
$screen = get_current_screen();
|
111 |
+
$screen_id = \wpSPIO()->env()->screen_id;
|
112 |
|
113 |
+
$noticeControl = Notices::getInstance();
|
114 |
+
$noticeControl->loadIcons(array(
|
115 |
+
'normal' => '<img class="short-pixel-notice-icon" src="' . plugins_url('res/img/slider.png', SHORTPIXEL_PLUGIN_FILE) . '">',
|
116 |
+
'success' => '<img class="short-pixel-notice-icon" src="' . plugins_url('res/img/robo-cool.png', SHORTPIXEL_PLUGIN_FILE) . '">',
|
117 |
+
'warning' => '<img class="short-pixel-notice-icon" src="' . plugins_url('res/img/robo-scared.png', SHORTPIXEL_PLUGIN_FILE) . '">',
|
118 |
+
'error' => '<img class="short-pixel-notice-icon" src="' . plugins_url('res/img/robo-scared.png', SHORTPIXEL_PLUGIN_FILE) . '">',
|
119 |
+
));
|
120 |
|
121 |
+
if ($noticeControl->countNotices() > 0)
|
122 |
{
|
123 |
+
$notices = $noticeControl->getNoticesForDisplay();
|
|
|
124 |
|
125 |
+
if (count($notices) > 0)
|
126 |
+
{
|
127 |
+
\wpSPIO()->load_style('shortpixel-notices');
|
|
|
|
|
|
|
|
|
128 |
|
129 |
+
foreach($notices as $notice)
|
130 |
+
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
131 |
|
132 |
+
if ($notice->checkScreen($screen_id) === false)
|
133 |
+
{
|
134 |
+
continue;
|
135 |
+
}
|
136 |
+
elseif ($access->noticeIsAllowed($notice))
|
137 |
+
{
|
138 |
+
echo $notice->getForDisplay();
|
139 |
+
}
|
140 |
+
else
|
141 |
+
{
|
142 |
+
continue;
|
143 |
+
}
|
144 |
|
145 |
+
// Todo change this to new keys
|
146 |
+
if ($notice->getID() == 'MSG_QUOTA_REACHED' || $notice->getID() == 'MSG_UPGRADE_MONTH') //|| $notice->getID() == AdminNoticesController::MSG_UPGRADE_BULK
|
147 |
+
{
|
148 |
+
wp_enqueue_script('jquery.knob.min.js');
|
149 |
+
wp_enqueue_script('shortpixel');
|
150 |
+
}
|
151 |
+
}
|
152 |
+
}
|
153 |
+
}
|
154 |
+
$noticeControl->update(); // puts views, and updates
|
155 |
}
|
156 |
|
157 |
+
/* General function to check on Hook for admin notices if there is something to show globally */
|
158 |
+
public function check_admin_notices()
|
159 |
{
|
160 |
+
if (! \wpSPIO()->env()->is_screen_to_use)
|
161 |
{
|
162 |
+
if(get_current_screen()->base !== 'dashboard') // ugly exception for dashboard.
|
163 |
+
return; // suppress all when not our screen.
|
164 |
}
|
165 |
|
166 |
+
$this->loadNotices();
|
167 |
+
}
|
|
|
168 |
|
169 |
+
protected function initNotices()
|
170 |
+
{
|
171 |
+
foreach($this->definedNotices as $className)
|
172 |
{
|
173 |
+
$ns = '\ShortPixel\Model\AdminNotices\\' . $className;
|
174 |
+
$class = new $ns();
|
175 |
+
$this->adminNotices[$class->getKey()] = $class;
|
176 |
}
|
177 |
+
}
|
178 |
|
179 |
+
protected function loadNotices()
|
180 |
+
{
|
181 |
+
foreach($this->adminNotices as $key => $class)
|
182 |
+
{
|
183 |
+
$class->load();
|
184 |
+
}
|
185 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
186 |
|
187 |
+
public function getNoticeByKey($key)
|
188 |
+
{
|
189 |
+
if (isset($this->adminNotices[$key]))
|
190 |
{
|
191 |
+
return $this->adminNotices[$key];
|
|
|
|
|
|
|
|
|
|
|
|
|
192 |
}
|
193 |
+
else {
|
194 |
+
return false;
|
|
|
|
|
|
|
|
|
|
|
|
|
195 |
}
|
|
|
196 |
}
|
197 |
|
198 |
+
public function getAllNotices()
|
199 |
{
|
200 |
+
return $this->adminNotices;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
201 |
}
|
202 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
203 |
|
204 |
+
// Called by MediaLibraryModel
|
205 |
+
public function invokeLegacyNotice()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
206 |
{
|
207 |
+
$noticeModel = $this->getNoticeByKey('MSG_CONVERT_LEGACY');
|
208 |
+
if (! $noticeModel->isDismissed())
|
209 |
+
{
|
210 |
+
$noticeModel->addManual();
|
211 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
212 |
|
213 |
}
|
214 |
|
215 |
|
216 |
protected function doRemoteNotices()
|
217 |
{
|
218 |
+
$notices = $this->get_remote_notices();
|
219 |
|
220 |
+
if ($notices == false)
|
221 |
+
return;
|
222 |
|
223 |
+
foreach($notices as $remoteNotice)
|
224 |
+
{
|
225 |
+
if (! isset($remoteNotice->id) && ! isset($remoteNotice->message))
|
226 |
+
return;
|
227 |
|
228 |
+
if (! isset($remoteNotice->type))
|
229 |
+
$remoteNotice->type = 'notice';
|
230 |
|
231 |
+
$message = esc_html($remoteNotice->message);
|
232 |
+
$id = sanitize_text_field($remoteNotice->id);
|
233 |
|
234 |
+
$noticeController = Notices::getInstance();
|
235 |
+
$noticeObj = $noticeController->getNoticeByID($id);
|
236 |
|
237 |
+
// not added to system yet
|
238 |
if ($noticeObj === false)
|
239 |
{
|
240 |
+
switch ($remoteNotice->type)
|
241 |
+
{
|
242 |
+
case 'warning':
|
243 |
+
$new_notice = Notices::addWarning($message);
|
244 |
+
break;
|
245 |
+
case 'error':
|
246 |
+
$new_notice = Notices::addError($message);
|
247 |
+
break;
|
248 |
+
case 'notice':
|
249 |
+
default:
|
250 |
+
$new_notice = Notices::addNormal($message);
|
251 |
+
break;
|
252 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
253 |
|
254 |
+
Notices::makePersistent($new_notice, $id, MONTH_IN_SECONDS);
|
255 |
+
}
|
256 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
257 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
258 |
}
|
259 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
260 |
}
|
261 |
|
262 |
public function proposeUpgradePopup() {
|
263 |
+
$view = new ViewController();
|
264 |
+
$view->loadView('snippets/part-upgrade-options');
|
265 |
}
|
266 |
|
267 |
public function proposeUpgradeRemote()
|
271 |
$apiKeyController = ApiKeyController::getInstance();
|
272 |
$settings = \wpSPIO()->settings();
|
273 |
|
274 |
+
$webpActive = ($settings->createWebp) ? true : false;
|
275 |
+
$avifActive = ($settings->createAvif) ? true : false;
|
276 |
|
277 |
$args = array(
|
278 |
'method' => 'POST',
|
290 |
'm4' => $statsController->find('period', 'months', '4'),
|
291 |
'filesTodo' => $statsController->totalImagesToOptimize(),
|
292 |
'estimated' => $settings->optimizeUnlisted || $settings->optimizeRetina ? 'true' : 'false',
|
293 |
+
'webp' => $webpActive,
|
294 |
+
'avif' => $avifActive,
|
295 |
/* */
|
296 |
'iconsUrl' => base64_encode(wpSPIO()->plugin_url('res/img'))
|
297 |
+
))),
|
298 |
+
'cookies' => array()
|
299 |
|
300 |
);
|
301 |
|
309 |
|
310 |
}
|
311 |
|
312 |
+
private function get_remote_notices()
|
313 |
+
{
|
314 |
$transient_name = 'shortpixel_remote_notice';
|
315 |
$transient_duration = DAY_IN_SECONDS;
|
316 |
|
317 |
if (\wpSPIO()->env()->is_debug)
|
318 |
+
$transient_duration = 30;
|
319 |
|
320 |
$keyControl = new apiKeyController();
|
321 |
//$keyControl->loadKey();
|
323 |
$notices = get_transient($transient_name);
|
324 |
$url = $this->remote_message_endpoint;
|
325 |
$url = add_query_arg(array( // has url
|
326 |
+
'key' => $keyControl->forceGetApiKey(),
|
327 |
+
'version' => SHORTPIXEL_IMAGE_OPTIMISER_VERSION,
|
328 |
+
'target' => 3,
|
329 |
), $url);
|
330 |
|
331 |
|
332 |
if ( $notices === false ) {
|
333 |
+
$notices_response = wp_safe_remote_request( $url );
|
334 |
+
$content = false;
|
335 |
+
if (! is_wp_error( $notices_response ) )
|
336 |
+
{
|
337 |
+
$notices = json_decode($notices_response['body']);
|
338 |
|
339 |
+
if (! is_array($notices))
|
340 |
+
$notices = false;
|
341 |
|
342 |
+
// Save transient anywhere to prevent over-asking when nothing good is there.
|
343 |
+
set_transient( $transient_name, $notices, $transient_duration );
|
344 |
+
}
|
345 |
+
else
|
346 |
+
{
|
347 |
+
set_transient( $transient_name, false, $transient_duration );
|
348 |
+
}
|
349 |
}
|
350 |
|
351 |
return $notices;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
352 |
}
|
353 |
|
|
|
|
|
354 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
355 |
|
|
|
|
|
|
|
|
|
356 |
|
357 |
|
358 |
public function pluginUpdateMessage($data, $response)
|
359 |
{
|
360 |
+
// $message = $this->getPluginUpdateMessage($plugin['new_version']);
|
361 |
|
362 |
+
$message = $this->get_update_notice($data, $response);
|
363 |
|
364 |
+
if( $message !== false && strlen(trim($message)) > 0) {
|
365 |
+
$wp_list_table = _get_list_table( 'WP_Plugins_List_Table' );
|
366 |
+
printf(
|
367 |
+
'<tr class="plugin-update-tr active"><td colspan="%s" class="plugin-update colspanchange"><div class="notice inline notice-warning notice-alt">%s</div></td></tr>',
|
368 |
+
$wp_list_table->get_column_count(),
|
369 |
+
wpautop( $message )
|
370 |
+
);
|
371 |
+
}
|
372 |
|
373 |
}
|
374 |
|
375 |
/**
|
376 |
* Stolen from SPAI, Thanks.
|
377 |
+
*/
|
378 |
private function get_update_notice($data, $response) {
|
379 |
+
$transient_name = 'shortpixel_update_notice_' . $response->new_version;
|
380 |
|
381 |
+
$transient_duration = DAY_IN_SECONDS;
|
382 |
|
383 |
+
if (\wpSPIO()->env()->is_debug)
|
384 |
+
$transient_duration = 30;
|
385 |
|
386 |
+
$update_notice = get_transient( $transient_name );
|
387 |
+
$url = $this->remote_readme_endpoint;
|
388 |
|
389 |
+
if ( $update_notice === false || strlen( $update_notice ) == 0 ) {
|
390 |
+
$readme_response = wp_safe_remote_request( $url );
|
391 |
+
$content = false;
|
392 |
+
if (! is_wp_error( $readme_response ) )
|
393 |
+
{
|
394 |
+
$content = $readme_response['body'];
|
395 |
+
}
|
396 |
|
397 |
|
398 |
+
if ( !empty( $readme_response ) ) {
|
399 |
+
$update_notice = $this->parse_update_notice( $content, $response );
|
400 |
+
set_transient( $transient_name, $update_notice, $transient_duration );
|
|
|
401 |
}
|
402 |
+
}
|
403 |
|
404 |
+
return $update_notice;
|
405 |
}
|
406 |
|
407 |
|
408 |
|
409 |
/**
|
410 |
+
* Parse update notice from readme file.
|
411 |
+
*
|
412 |
+
* @param string $content ShortPixel AI readme file content
|
413 |
+
* @param object $response WordPress response
|
414 |
+
*
|
415 |
+
* @return string
|
416 |
+
*/
|
417 |
+
private function parse_update_notice( $content, $response ) {
|
418 |
|
419 |
+
$new_version = $response->new_version;
|
420 |
|
421 |
+
$update_notice = '';
|
422 |
|
423 |
+
// foreach ( $check_for_notices as $id => $check_version ) {
|
424 |
|
425 |
+
if ( version_compare( SHORTPIXEL_IMAGE_OPTIMISER_VERSION, $new_version, '>' ) ) {
|
426 |
+
return '';
|
427 |
+
}
|
428 |
|
429 |
+
$result = $this->parse_readme_content( $content, $new_version, $response );
|
430 |
|
431 |
+
if ( !empty( $result ) ) {
|
432 |
+
$update_notice = $result;
|
433 |
+
}
|
434 |
+
// }
|
435 |
|
436 |
+
return wp_kses_post( $update_notice );
|
437 |
+
}
|
438 |
|
439 |
|
440 |
+
/*
|
441 |
+
*
|
442 |
+
* Parses readme file's content to find notice related to passed version
|
443 |
+
*
|
444 |
+
* @param string $content Readme file content
|
445 |
+
* @param string $version Checked version
|
446 |
+
* @param object $response WordPress response
|
447 |
+
*
|
448 |
+
* @return string
|
449 |
+
*/
|
450 |
+
|
451 |
+
private function parse_readme_content( $content, $new_version, $response ) {
|
452 |
+
|
453 |
+
$notices_pattern = '/==.*Upgrade Notice.*==(.*)$|==/Uis';
|
454 |
+
|
455 |
+
$notice = '';
|
456 |
+
$matches = null;
|
457 |
+
|
458 |
+
if ( preg_match( $notices_pattern, $content, $matches ) ) {
|
459 |
+
|
460 |
+
if (! isset($matches[1]))
|
461 |
+
return ''; // no update texts.
|
462 |
+
|
463 |
+
$match = str_replace('\n', '', $matches[1]);
|
464 |
+
$lines = str_split(trim($match));
|
465 |
+
|
466 |
+
$versions = array();
|
467 |
+
$inv = false;
|
468 |
+
foreach($lines as $char)
|
469 |
+
{
|
470 |
+
//if (count($versions) == 0)
|
471 |
+
if ($char == '=' && ! $inv) // = and not recording version, start one.
|
472 |
+
{
|
473 |
+
$curver = '';
|
474 |
+
$inv = true;
|
475 |
+
}
|
476 |
+
elseif ($char == ' ' && $inv) // don't record spaces in version
|
477 |
+
continue;
|
478 |
+
elseif ($char == '=' && $inv) // end of version line
|
479 |
+
{ $versions[trim($curver)] = '';
|
480 |
+
$inv = false;
|
481 |
+
}
|
482 |
+
elseif($inv) // record the version string
|
483 |
+
{
|
484 |
+
$curver .= $char;
|
485 |
+
}
|
486 |
+
elseif(! $inv) // record the message
|
487 |
+
{
|
488 |
+
$versions[trim($curver)] .= $char;
|
489 |
+
}
|
490 |
+
|
491 |
+
|
492 |
+
}
|
493 |
+
|
494 |
+
foreach($versions as $version => $line)
|
495 |
+
{
|
496 |
+
if (version_compare(SHORTPIXEL_IMAGE_OPTIMISER_VERSION, $version, '<') && version_compare($version, $new_version, '<='))
|
497 |
+
{
|
498 |
+
$notice .= '<span>';
|
499 |
+
$notice .= $this->markdown2html( $line );
|
500 |
+
$notice .= '</span>';
|
501 |
+
|
502 |
+
}
|
503 |
+
}
|
504 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
505 |
}
|
506 |
|
507 |
+
return $notice;
|
508 |
+
}
|
509 |
+
|
510 |
+
/*private function replace_readme_constants( $content, $response ) {
|
511 |
+
$constants = [ '{{ NEW VERSION }}', '{{ CURRENT VERSION }}', '{{ PHP VERSION }}', '{{ REQUIRED PHP VERSION }}' ];
|
512 |
+
$replacements = [ $response->new_version, SHORTPIXEL_IMAGE_OPTIMISER_VERSION, PHP_VERSION, $response->requires_php ];
|
513 |
+
|
514 |
+
return str_replace( $constants, $replacements, $content );
|
515 |
+
} */
|
516 |
+
|
517 |
+
private function markdown2html( $content ) {
|
518 |
+
$patterns = [
|
519 |
+
'/\*\*(.+)\*\*/U', // bold
|
520 |
+
'/__(.+)__/U', // italic
|
521 |
+
'/\[([^\]]*)\]\(([^\)]*)\)/U', // link
|
522 |
+
];
|
523 |
+
|
524 |
+
$replacements = [
|
525 |
+
'<strong>${1}</strong>',
|
526 |
+
'<em>${1}</em>',
|
527 |
+
'<a href="${2}" target="_blank">${1}</a>',
|
528 |
+
];
|
529 |
+
|
530 |
+
$prepared_content = preg_replace( $patterns, $replacements, $content );
|
531 |
+
|
532 |
+
return isset( $prepared_content ) ? $prepared_content : $content;
|
533 |
+
}
|
534 |
+
|
535 |
|
536 |
} // class
|
@@ -236,11 +236,15 @@ Class FileSystemController extends \ShortPixel\Controller
|
|
236 |
if (defined('UPLOADS')) // if this is set, lead.
|
237 |
$abspath = trailingslashit(ABSPATH) . UPLOADS;
|
238 |
|
|
|
239 |
$abspath = apply_filters('shortpixel/filesystem/abspath', $abspath );
|
240 |
|
|
|
241 |
return $this->getDirectory($abspath);
|
242 |
}
|
243 |
|
|
|
|
|
244 |
/** Not in use yet, do not use. Future replacement. */
|
245 |
public function checkBackUpFolder($folder = SHORTPIXEL_BACKUP_FOLDER)
|
246 |
{
|
@@ -304,7 +308,7 @@ Class FileSystemController extends \ShortPixel\Controller
|
|
304 |
// (2) ** Also a real life fix when a path is /wwwroot/assets/sites/2/ etc, in get site url, the home URL is the site URL, without appending the sites stuff. Fails on original image.
|
305 |
if ($is_multi_site && ! $is_main_site)
|
306 |
{
|
307 |
-
$wp_home_path =
|
308 |
$home_url = trailingslashit($uploads['baseurl']);
|
309 |
}
|
310 |
else
|
236 |
if (defined('UPLOADS')) // if this is set, lead.
|
237 |
$abspath = trailingslashit(ABSPATH) . UPLOADS;
|
238 |
|
239 |
+
// $abspath = wp_normalize_path($abspath);
|
240 |
$abspath = apply_filters('shortpixel/filesystem/abspath', $abspath );
|
241 |
|
242 |
+
|
243 |
return $this->getDirectory($abspath);
|
244 |
}
|
245 |
|
246 |
+
|
247 |
+
|
248 |
/** Not in use yet, do not use. Future replacement. */
|
249 |
public function checkBackUpFolder($folder = SHORTPIXEL_BACKUP_FOLDER)
|
250 |
{
|
308 |
// (2) ** Also a real life fix when a path is /wwwroot/assets/sites/2/ etc, in get site url, the home URL is the site URL, without appending the sites stuff. Fails on original image.
|
309 |
if ($is_multi_site && ! $is_main_site)
|
310 |
{
|
311 |
+
$wp_home_path = trailingslashit($uploads['basedir']);
|
312 |
$home_url = trailingslashit($uploads['baseurl']);
|
313 |
}
|
314 |
else
|
@@ -2,6 +2,7 @@
|
|
2 |
namespace ShortPixel\Controller;
|
3 |
use ShortPixel\ShortPixelLogger\ShortPixelLogger as Log;
|
4 |
use ShortPixel\Notices\NoticeController as Notices;
|
|
|
5 |
|
6 |
use ShortPixel\ShortPixelImgToPictureWebp as ShortPixelImgToPictureWebp;
|
7 |
|
@@ -29,13 +30,13 @@ class FrontController extends \ShortPixel\Controller
|
|
29 |
$webp_option = \wpSPIO()->settings()->deliverWebp;
|
30 |
|
31 |
if ( $webp_option ) { // @tood Replace this function with the one in ENV.
|
32 |
-
if(
|
33 |
Notices::addWarning(__('Please deactivate the ShortPixel Image Optimizer\'s
|
34 |
<a href="options-general.php?page=wp-shortpixel-settings&part=adv-settings">Deliver the next generation versions of the images in the front-end</a>
|
35 |
option when the ShortPixel Adaptive Images plugin is active.','shortpixel-image-optimiser'), true);
|
36 |
}
|
37 |
elseif( $webp_option == self::WEBP_GLOBAL ){
|
38 |
-
//add_action( 'wp_head', array($this, 'addPictureJs') ); // adds polyfill JS to the header || Removed. Browsers without picture support?
|
39 |
add_action( 'init', array($this, 'startOutputBuffer'), 1 ); // start output buffer to capture content
|
40 |
} elseif ($webp_option == self::WEBP_WP){
|
41 |
add_filter( 'the_content', array($this, 'convertImgToPictureAddWebp'), 10000 ); // priority big, so it will be executed last
|
@@ -57,7 +58,7 @@ class FrontController extends \ShortPixel\Controller
|
|
57 |
// phpcs:ignore WordPress.Security.NonceVerification.Recommended -- This is not a form
|
58 |
return $content . (isset($_GET['SHORTPIXEL_DEBUG']) ? '<!-- SPDBG is AMP -->' : '');
|
59 |
}
|
60 |
-
require_once(\
|
61 |
|
62 |
$webpObj = new ShortPixelImgToPictureWebp();
|
63 |
return $webpObj->convert($content);
|
2 |
namespace ShortPixel\Controller;
|
3 |
use ShortPixel\ShortPixelLogger\ShortPixelLogger as Log;
|
4 |
use ShortPixel\Notices\NoticeController as Notices;
|
5 |
+
use ShortPixel\Helper\UtilHelper as UtilHelper;
|
6 |
|
7 |
use ShortPixel\ShortPixelImgToPictureWebp as ShortPixelImgToPictureWebp;
|
8 |
|
30 |
$webp_option = \wpSPIO()->settings()->deliverWebp;
|
31 |
|
32 |
if ( $webp_option ) { // @tood Replace this function with the one in ENV.
|
33 |
+
if(UtilHelper::shortPixelIsPluginActive('shortpixel-adaptive-images/short-pixel-ai.php')) {
|
34 |
Notices::addWarning(__('Please deactivate the ShortPixel Image Optimizer\'s
|
35 |
<a href="options-general.php?page=wp-shortpixel-settings&part=adv-settings">Deliver the next generation versions of the images in the front-end</a>
|
36 |
option when the ShortPixel Adaptive Images plugin is active.','shortpixel-image-optimiser'), true);
|
37 |
}
|
38 |
elseif( $webp_option == self::WEBP_GLOBAL ){
|
39 |
+
//add_action( 'wp_head', array($this, 'addPictureJs') ); // adds polyfill JS to the header || Removed. Browsers without picture support?
|
40 |
add_action( 'init', array($this, 'startOutputBuffer'), 1 ); // start output buffer to capture content
|
41 |
} elseif ($webp_option == self::WEBP_WP){
|
42 |
add_filter( 'the_content', array($this, 'convertImgToPictureAddWebp'), 10000 ); // priority big, so it will be executed last
|
58 |
// phpcs:ignore WordPress.Security.NonceVerification.Recommended -- This is not a form
|
59 |
return $content . (isset($_GET['SHORTPIXEL_DEBUG']) ? '<!-- SPDBG is AMP -->' : '');
|
60 |
}
|
61 |
+
require_once(\wpSPIO()->plugin_path('class/front/img-to-picture-webp.php'));
|
62 |
|
63 |
$webpObj = new ShortPixelImgToPictureWebp();
|
64 |
return $webpObj->convert($content);
|
@@ -67,7 +67,7 @@ class QuotaController
|
|
67 |
|
68 |
public function getQuota()
|
69 |
{
|
70 |
-
|
71 |
$quotaData = $this->getQuotaData();
|
72 |
$DateNow = time();
|
73 |
|
@@ -75,6 +75,7 @@ class QuotaController
|
|
75 |
$DaysToReset = 30 - ( (int) ( ( $DateNow - $DateSubscription) / 84600) % 30);
|
76 |
|
77 |
$quota = (object) [
|
|
|
78 |
'monthly' => (object) [
|
79 |
'text' => sprintf(__('%s/month', 'shortpixel-image-optimiser'), $quotaData['APICallsQuota']),
|
80 |
'total' => $quotaData['APICallsQuotaNumeric'],
|
@@ -307,6 +308,8 @@ class QuotaController
|
|
307 |
"APICallsMadeOneTimeNumeric" => (int) max($data->APICallsMadeOneTime, 0),
|
308 |
"APICallsQuotaOneTimeNumeric" => (int) max($data->APICallsQuotaOneTime, 0),
|
309 |
|
|
|
|
|
310 |
"APILastRenewalDate" => $data->DateSubscription,
|
311 |
"DomainCheck" => (isset($data->DomainCheck) ? $data->DomainCheck : null)
|
312 |
);
|
@@ -315,7 +318,7 @@ class QuotaController
|
|
315 |
|
316 |
//reset quota exceeded flag -> user is allowed to process more images.
|
317 |
|
318 |
-
if ( $dataArray['APICallsRemaining'] > 0)
|
319 |
{
|
320 |
$this->resetQuotaExceeded();
|
321 |
}
|
67 |
|
68 |
public function getQuota()
|
69 |
{
|
70 |
+
|
71 |
$quotaData = $this->getQuotaData();
|
72 |
$DateNow = time();
|
73 |
|
75 |
$DaysToReset = 30 - ( (int) ( ( $DateNow - $DateSubscription) / 84600) % 30);
|
76 |
|
77 |
$quota = (object) [
|
78 |
+
'unlimited' => isset($quotaData['Unlimited']) ? $quotaData['Unlimited'] : false,
|
79 |
'monthly' => (object) [
|
80 |
'text' => sprintf(__('%s/month', 'shortpixel-image-optimiser'), $quotaData['APICallsQuota']),
|
81 |
'total' => $quotaData['APICallsQuotaNumeric'],
|
308 |
"APICallsMadeOneTimeNumeric" => (int) max($data->APICallsMadeOneTime, 0),
|
309 |
"APICallsQuotaOneTimeNumeric" => (int) max($data->APICallsQuotaOneTime, 0),
|
310 |
|
311 |
+
"Unlimited" => ($data->Unlimited == 'true') ? true : false,
|
312 |
+
|
313 |
"APILastRenewalDate" => $data->DateSubscription,
|
314 |
"DomainCheck" => (isset($data->DomainCheck) ? $data->DomainCheck : null)
|
315 |
);
|
318 |
|
319 |
//reset quota exceeded flag -> user is allowed to process more images.
|
320 |
|
321 |
+
if ( $dataArray['APICallsRemaining'] > 0 || $dataArray['Unlimited'])
|
322 |
{
|
323 |
$this->resetQuotaExceeded();
|
324 |
}
|
@@ -3,14 +3,14 @@ namespace ShortPixel\Controller;
|
|
3 |
use ShortPixel\ShortPixelLogger\ShortPixelLogger as Log;
|
4 |
use ShortPixel\Notices\NoticeController as Notice;
|
5 |
use ShortPixel\Helper\UiHelper as UiHelper;
|
|
|
6 |
use ShortPixel\Helper\InstallHelper as InstallHelper;
|
7 |
|
8 |
use ShortPixel\Model\ApiKeyModel as ApiKeyModel;
|
9 |
-
|
10 |
|
11 |
use ShortPixel\NextGenController as NextGenController;
|
12 |
|
13 |
-
|
14 |
class SettingsController extends \ShortPixel\ViewController
|
15 |
{
|
16 |
|
@@ -55,7 +55,6 @@ class SettingsController extends \ShortPixel\ViewController
|
|
55 |
parent::__construct();
|
56 |
}
|
57 |
|
58 |
-
|
59 |
// default action of controller
|
60 |
public function load()
|
61 |
{
|
@@ -73,6 +72,7 @@ class SettingsController extends \ShortPixel\ViewController
|
|
73 |
$this->load_settings();
|
74 |
}
|
75 |
|
|
|
76 |
// this is the nokey form, submitting api key
|
77 |
public function action_addkey()
|
78 |
{
|
@@ -116,6 +116,22 @@ class SettingsController extends \ShortPixel\ViewController
|
|
116 |
$this->load(); // already verified?
|
117 |
return;
|
118 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
119 |
$params = array(
|
120 |
'method' => 'POST',
|
121 |
'timeout' => 10,
|
@@ -124,11 +140,7 @@ class SettingsController extends \ShortPixel\ViewController
|
|
124 |
'blocking' => true,
|
125 |
'sslverify' => false,
|
126 |
'headers' => array(),
|
127 |
-
'body' =>
|
128 |
-
'plugin_version' => SHORTPIXEL_IMAGE_OPTIMISER_VERSION,
|
129 |
-
'email' => $email,
|
130 |
-
'ip' => isset($_SERVER["HTTP_X_FORWARDED_FOR"]) ? sanitize_text_field($_SERVER["HTTP_X_FORWARDED_FOR"]) : sanitize_text_field($_SERVER['REMOTE_ADDR']),
|
131 |
-
)
|
132 |
);
|
133 |
|
134 |
$newKeyResponse = wp_remote_post("https://shortpixel.com/free-sign-up-plugin", $params);
|
@@ -138,10 +150,12 @@ class SettingsController extends \ShortPixel\ViewController
|
|
138 |
if ( is_object($newKeyResponse) && get_class($newKeyResponse) == 'WP_Error' ) {
|
139 |
//die(json_encode((object)array('Status' => 'fail', 'Details' => '503')));
|
140 |
Notice::addError($errorText . $newKeyResponse->get_error_message() );
|
|
|
141 |
}
|
142 |
elseif ( isset($newKeyResponse['response']['code']) && $newKeyResponse['response']['code'] <> 200 ) {
|
143 |
//die(json_encode((object)array('Status' => 'fail', 'Details' =>
|
144 |
Notice::addError($errorText . $newKeyResponse['response']['code']);
|
|
|
145 |
}
|
146 |
$body = $newKeyResponse['body'];
|
147 |
$body = json_decode($body);
|
@@ -251,6 +265,34 @@ class SettingsController extends \ShortPixel\ViewController
|
|
251 |
$this->load();
|
252 |
}
|
253 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
254 |
public function action_debug_resetQueue()
|
255 |
{
|
256 |
$queue = isset($_REQUEST['queue']) ? sanitize_text_field($_REQUEST['queue']) : null;
|
@@ -309,6 +351,7 @@ class SettingsController extends \ShortPixel\ViewController
|
|
309 |
}
|
310 |
|
311 |
|
|
|
312 |
public function processSave()
|
313 |
{
|
314 |
// Split this in the several screens. I.e. settings, advanced, Key Request IF etc.
|
@@ -357,7 +400,7 @@ class SettingsController extends \ShortPixel\ViewController
|
|
357 |
if ($this->do_redirect)
|
358 |
$this->doRedirect('bulk');
|
359 |
else {
|
360 |
-
|
361 |
$noticeController = Notice::getInstance();
|
362 |
$notice = Notice::addSuccess(__('Settings Saved', 'shortpixel-image-optimiser'));
|
363 |
$notice->is_removable = false;
|
@@ -381,11 +424,9 @@ class SettingsController extends \ShortPixel\ViewController
|
|
381 |
|
382 |
$this->view->data->apiKey = $keyController->getKeyForDisplay();
|
383 |
|
384 |
-
|
385 |
$this->loadStatistics();
|
386 |
$this->checkCloudFlare();
|
387 |
|
388 |
-
|
389 |
$statsControl = StatsController::getInstance();
|
390 |
|
391 |
$this->view->minSizes = $this->getMaxIntermediateImageSize();
|
@@ -408,80 +449,13 @@ class SettingsController extends \ShortPixel\ViewController
|
|
408 |
$this->loadView('view-settings');
|
409 |
}
|
410 |
|
411 |
-
|
412 |
{
|
413 |
-
|
414 |
-
|
415 |
-
{ return; }
|
416 |
-
|
417 |
-
if ($cache->getItem('avif_server_check')->exists() === false)
|
418 |
-
{
|
419 |
-
$url = \WPSPIO()->plugin_url('res/img/test.avif');
|
420 |
-
$headers = get_headers($url);
|
421 |
-
$is_error = true;
|
422 |
-
|
423 |
-
// Defaults.
|
424 |
-
$error_message = __('Avif server test failed. Your server might not be configured to display AVIF files properly. Serving Avif might cause your images to not load. Check your images, disable the AVIF option or update your web server configuration.', 'shortpixel-image-optimiser');
|
425 |
-
$error_detail = __('The request did not return valid HTTP Headers. Check if the plugin is allowed to get ' . $url, 'shortpixel-image-optimiser');
|
426 |
|
427 |
-
|
428 |
-
$response = $headers[0];
|
429 |
|
430 |
-
if (is_array($headers) )
|
431 |
-
{
|
432 |
-
foreach($headers as $index => $header)
|
433 |
-
{
|
434 |
-
if ( strpos(strtolower($header), 'content-type') !== false )
|
435 |
-
{
|
436 |
-
// This is another header that can interrupt.
|
437 |
-
if (strpos(strtolower($header), 'x-content-type-options') === false)
|
438 |
-
{
|
439 |
-
$contentType = $header;
|
440 |
-
}
|
441 |
-
}
|
442 |
-
}
|
443 |
-
|
444 |
-
// http not ok, redirect etc. Shouldn't happen.
|
445 |
-
if (is_null($response) || strpos($response, '200') === false)
|
446 |
-
{
|
447 |
-
$error_detail = sprintf(__('The AVIF check could not be completed, because the plugin couldn\'t fetch %s %s %s. %s Please check the security/firewall settings and try again', 'shortpixel-image-optimiser'), '<a href="' . $url . '">', $url, '</a>', '<br>');
|
448 |
-
}
|
449 |
-
elseif(is_null($contentType) || strpos($contentType, 'avif') === false)
|
450 |
-
{
|
451 |
-
$error_detail = sprintf(__('The necessary Content-type header for AVIF files wasn\'t found, please check this with your Hosting and/or CDN provider. For more details about how to fix this, %s check this article %s', 'shortpixel_image_optimiser'), '<a href="https://shortpixel.com/blog/avif-mime-type-delivery-apache-nginx/" target="_blank"> ', '</a>');
|
452 |
-
|
453 |
-
}
|
454 |
-
else
|
455 |
-
{
|
456 |
-
$is_error = false;
|
457 |
-
}
|
458 |
-
}
|
459 |
-
|
460 |
-
if ($is_error)
|
461 |
-
{
|
462 |
-
$noticeController = Notice::getInstance();
|
463 |
-
$notice = $noticeController->getNoticeByID(AdminNoticesController::MSG_AVIF_ERROR);
|
464 |
-
if ($notice && $notice->isDismissed() === true)
|
465 |
-
{
|
466 |
-
// Do Nothing
|
467 |
-
}
|
468 |
-
else
|
469 |
-
{
|
470 |
-
$notice = Notice::addError('<h4>' . $error_message . '</h4><p>' . $error_detail . '</p><p class="small">' . __('Returned Headers for :<br>', 'shortpixel-image-optimiser') . print_r($headers, true) . '</p>');
|
471 |
-
Notice::makePersistent($notice, AdminNoticesController::MSG_AVIF_ERROR, MONTH_IN_SECONDS);
|
472 |
-
}
|
473 |
-
|
474 |
-
}
|
475 |
-
else
|
476 |
-
{
|
477 |
-
Notice::removeNoticeByID(AdminNoticesController::MSG_AVIF_ERROR);
|
478 |
-
|
479 |
-
$item = $cache->getItem('avif_server_check');
|
480 |
-
$item->setValue(time());
|
481 |
-
$item->setExpires(WEEK_IN_SECONDS);
|
482 |
-
$cache->storeItemObject($item );
|
483 |
-
}
|
484 |
-
}
|
485 |
}
|
486 |
|
487 |
protected function loadStatistics()
|
@@ -749,7 +723,7 @@ class SettingsController extends \ShortPixel\ViewController
|
|
749 |
{
|
750 |
$deliverwebp = 0;
|
751 |
if (! $this->is_nginx)
|
752 |
-
|
753 |
|
754 |
$webpOn = isset($post['createWebp']) && $post['createWebp'] == 1;
|
755 |
$avifOn = isset($post['createAvif']) && $post['createAvif'] == 1;
|
@@ -780,7 +754,7 @@ class SettingsController extends \ShortPixel\ViewController
|
|
780 |
|
781 |
if (! $this->is_nginx && $deliverwebp == 3) // deliver webp/avif via htaccess, write rules
|
782 |
{
|
783 |
-
|
784 |
}
|
785 |
|
786 |
$post['deliverWebp'] = $deliverwebp;
|
3 |
use ShortPixel\ShortPixelLogger\ShortPixelLogger as Log;
|
4 |
use ShortPixel\Notices\NoticeController as Notice;
|
5 |
use ShortPixel\Helper\UiHelper as UiHelper;
|
6 |
+
use ShortPixel\Helper\UtilHelper as UtilHelper;
|
7 |
use ShortPixel\Helper\InstallHelper as InstallHelper;
|
8 |
|
9 |
use ShortPixel\Model\ApiKeyModel as ApiKeyModel;
|
10 |
+
use ShortPixel\Model\AccessModel as AccessModel;
|
11 |
|
12 |
use ShortPixel\NextGenController as NextGenController;
|
13 |
|
|
|
14 |
class SettingsController extends \ShortPixel\ViewController
|
15 |
{
|
16 |
|
55 |
parent::__construct();
|
56 |
}
|
57 |
|
|
|
58 |
// default action of controller
|
59 |
public function load()
|
60 |
{
|
72 |
$this->load_settings();
|
73 |
}
|
74 |
|
75 |
+
|
76 |
// this is the nokey form, submitting api key
|
77 |
public function action_addkey()
|
78 |
{
|
116 |
$this->load(); // already verified?
|
117 |
return;
|
118 |
}
|
119 |
+
|
120 |
+
$bodyArgs = array(
|
121 |
+
'plugin_version' => SHORTPIXEL_IMAGE_OPTIMISER_VERSION,
|
122 |
+
'email' => $email,
|
123 |
+
'ip' => isset($_SERVER["HTTP_X_FORWARDED_FOR"]) ? sanitize_text_field($_SERVER["HTTP_X_FORWARDED_FOR"]) : sanitize_text_field($_SERVER['REMOTE_ADDR']),
|
124 |
+
);
|
125 |
+
|
126 |
+
$affl_id = false;
|
127 |
+
$affl_id = (defined('SHORTPIXEL_AFFILIATE_ID')) ? SHORTPIXEL_AFFILIATE_ID : false;
|
128 |
+
$affl_id = apply_filters('shortpixel/settings/affiliate', $affl_id); // /af/bla35
|
129 |
+
|
130 |
+
if ($affl_id !== false)
|
131 |
+
{
|
132 |
+
$bodyArgs['affiliate'] = $affl_id;
|
133 |
+
}
|
134 |
+
|
135 |
$params = array(
|
136 |
'method' => 'POST',
|
137 |
'timeout' => 10,
|
140 |
'blocking' => true,
|
141 |
'sslverify' => false,
|
142 |
'headers' => array(),
|
143 |
+
'body' => $bodyArgs,
|
|
|
|
|
|
|
|
|
144 |
);
|
145 |
|
146 |
$newKeyResponse = wp_remote_post("https://shortpixel.com/free-sign-up-plugin", $params);
|
150 |
if ( is_object($newKeyResponse) && get_class($newKeyResponse) == 'WP_Error' ) {
|
151 |
//die(json_encode((object)array('Status' => 'fail', 'Details' => '503')));
|
152 |
Notice::addError($errorText . $newKeyResponse->get_error_message() );
|
153 |
+
$this->doRedirect(); // directly redirect because other data / array is not set.
|
154 |
}
|
155 |
elseif ( isset($newKeyResponse['response']['code']) && $newKeyResponse['response']['code'] <> 200 ) {
|
156 |
//die(json_encode((object)array('Status' => 'fail', 'Details' =>
|
157 |
Notice::addError($errorText . $newKeyResponse['response']['code']);
|
158 |
+
$this->doRedirect(); // strange http status, redirect with error.
|
159 |
}
|
160 |
$body = $newKeyResponse['body'];
|
161 |
$body = json_decode($body);
|
265 |
$this->load();
|
266 |
}
|
267 |
|
268 |
+
public function action_debug_triggerNotice()
|
269 |
+
{
|
270 |
+
$key = isset($_REQUEST['notice_constant']) ? sanitize_text_field($_REQUEST['notice_constant']) : false;
|
271 |
+
|
272 |
+
if ($key !== false)
|
273 |
+
{
|
274 |
+
$adminNoticesController = AdminNoticesController::getInstance();
|
275 |
+
|
276 |
+
if ($key == 'trigger-all')
|
277 |
+
{
|
278 |
+
$notices = $adminNoticesController->getAllNotices();
|
279 |
+
foreach($notices as $noticeObj)
|
280 |
+
{
|
281 |
+
$noticeObj->addManual();
|
282 |
+
}
|
283 |
+
}
|
284 |
+
else
|
285 |
+
{
|
286 |
+
$model = $adminNoticesController->getNoticeByKey($key);
|
287 |
+
if ($model)
|
288 |
+
$model->addManual();
|
289 |
+
}
|
290 |
+
}
|
291 |
+
$this->load();
|
292 |
+
|
293 |
+
}
|
294 |
+
|
295 |
+
|
296 |
public function action_debug_resetQueue()
|
297 |
{
|
298 |
$queue = isset($_REQUEST['queue']) ? sanitize_text_field($_REQUEST['queue']) : null;
|
351 |
}
|
352 |
|
353 |
|
354 |
+
|
355 |
public function processSave()
|
356 |
{
|
357 |
// Split this in the several screens. I.e. settings, advanced, Key Request IF etc.
|
400 |
if ($this->do_redirect)
|
401 |
$this->doRedirect('bulk');
|
402 |
else {
|
403 |
+
|
404 |
$noticeController = Notice::getInstance();
|
405 |
$notice = Notice::addSuccess(__('Settings Saved', 'shortpixel-image-optimiser'));
|
406 |
$notice->is_removable = false;
|
424 |
|
425 |
$this->view->data->apiKey = $keyController->getKeyForDisplay();
|
426 |
|
|
|
427 |
$this->loadStatistics();
|
428 |
$this->checkCloudFlare();
|
429 |
|
|
|
430 |
$statsControl = StatsController::getInstance();
|
431 |
|
432 |
$this->view->minSizes = $this->getMaxIntermediateImageSize();
|
449 |
$this->loadView('view-settings');
|
450 |
}
|
451 |
|
452 |
+
protected function avifServerCheck()
|
453 |
{
|
454 |
+
$noticeControl = AdminNoticesController::getInstance();
|
455 |
+
$notice = $noticeControl->getNoticeByKey('MSG_AVIF_ERROR');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
456 |
|
457 |
+
$notice->check();
|
|
|
458 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
459 |
}
|
460 |
|
461 |
protected function loadStatistics()
|
723 |
{
|
724 |
$deliverwebp = 0;
|
725 |
if (! $this->is_nginx)
|
726 |
+
UtilHelper::alterHtaccess(false, false); // always remove the statements.
|
727 |
|
728 |
$webpOn = isset($post['createWebp']) && $post['createWebp'] == 1;
|
729 |
$avifOn = isset($post['createAvif']) && $post['createAvif'] == 1;
|
754 |
|
755 |
if (! $this->is_nginx && $deliverwebp == 3) // deliver webp/avif via htaccess, write rules
|
756 |
{
|
757 |
+
UtilHelper::alterHtaccess(true, true);
|
758 |
}
|
759 |
|
760 |
$post['deliverWebp'] = $deliverwebp;
|
@@ -12,6 +12,9 @@ use ShortPixel\Controller\StatsController as StatsController;
|
|
12 |
use ShortPixel\Controller\OtherMediaController as OtherMediaController;
|
13 |
use ShortPixel\Helper\UiHelper as UiHelper;
|
14 |
|
|
|
|
|
|
|
15 |
class BulkViewController extends \ShortPixel\ViewController
|
16 |
{
|
17 |
|
@@ -46,7 +49,7 @@ class BulkViewController extends \ShortPixel\ViewController
|
|
46 |
|
47 |
$this->view->error = true;
|
48 |
$this->view->errorTitle = __('Missing API Key', 'shortpixel_image_optimiser');
|
49 |
-
$this->view->errorContent = $
|
50 |
$this->view->showError = 'key';
|
51 |
}
|
52 |
elseif ( ! $quota->hasQuota())
|
@@ -70,6 +73,16 @@ class BulkViewController extends \ShortPixel\ViewController
|
|
70 |
|
71 |
}
|
72 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
73 |
protected function getApproxData()
|
74 |
{
|
75 |
$otherMediaController = OtherMediaController::getInstance();
|
12 |
use ShortPixel\Controller\OtherMediaController as OtherMediaController;
|
13 |
use ShortPixel\Helper\UiHelper as UiHelper;
|
14 |
|
15 |
+
use ShortPixel\Model\AccessModel as AccessModel;
|
16 |
+
|
17 |
+
|
18 |
class BulkViewController extends \ShortPixel\ViewController
|
19 |
{
|
20 |
|
49 |
|
50 |
$this->view->error = true;
|
51 |
$this->view->errorTitle = __('Missing API Key', 'shortpixel_image_optimiser');
|
52 |
+
$this->view->errorContent = $this->getActivationNotice();
|
53 |
$this->view->showError = 'key';
|
54 |
}
|
55 |
elseif ( ! $quota->hasQuota())
|
73 |
|
74 |
}
|
75 |
|
76 |
+
// Double with ApiNotice . @todo Fix.
|
77 |
+
protected function getActivationNotice()
|
78 |
+
{
|
79 |
+
$message = "<p>" . __('In order to start the optimization process, you need to validate your API Key in the '
|
80 |
+
. '<a href="options-general.php?page=wp-shortpixel-settings">ShortPixel Settings</a> page in your WordPress Admin.','shortpixel-image-optimiser') . "
|
81 |
+
</p>
|
82 |
+
<p>" . __('If you don’t have an API Key, just fill out the form and a key will be created.','shortpixel-image-optimiser') . "</p>";
|
83 |
+
return $message;
|
84 |
+
}
|
85 |
+
|
86 |
protected function getApproxData()
|
87 |
{
|
88 |
$otherMediaController = OtherMediaController::getInstance();
|
@@ -140,7 +140,7 @@ class EditMediaViewController extends \ShortPixel\ViewController
|
|
140 |
$stats[] = array( sprintf(__('%s %s Read more about theses stats %s ', 'shortpixel-image-optimiser'), '
|
141 |
<p><img alt=' . esc_html('Info Icon', 'shortpixel-image-optimiser') . ' src=' . esc_url( wpSPIO()->plugin_url('res/img/info-icon.png' )) . ' style="margin-bottom: -4px;"/>', '<a href="https://shortpixel.com/knowledge-base/article/553-the-stats-from-the-shortpixel-column-in-the-media-library-explained" target="_blank">', '</a></p>'), '');
|
142 |
}
|
143 |
-
|
144 |
return $stats;
|
145 |
}
|
146 |
|
@@ -220,7 +220,7 @@ class EditMediaViewController extends \ShortPixel\ViewController
|
|
220 |
{
|
221 |
$backupFile = $imageObj->getBackupFile();
|
222 |
$debugInfo[] = array(__('Backup Folder'), (string) $backupFile->getFileDir() );
|
223 |
-
$debugInfo[] = array(__('Backup File'), (string) $backupFile . '(' .
|
224 |
}
|
225 |
else {
|
226 |
$debugInfo[] = array(__("No Main File Backup Available"), '');
|
@@ -229,10 +229,10 @@ class EditMediaViewController extends \ShortPixel\ViewController
|
|
229 |
if ($or = $imageObj->hasOriginal())
|
230 |
{
|
231 |
$original = $imageObj->getOriginalFile();
|
232 |
-
$debugInfo[] = array(__('Has Original File: '), $original->getFullPath() . '(' .
|
233 |
$orbackup = $original->getBackupFile();
|
234 |
if ($orbackup)
|
235 |
-
$debugInfo[] = array(__('Has Backup Original Image'), $orbackup->getFullPath() . '(' .
|
236 |
$debugInfo[] = array('', '<hr>');
|
237 |
|
238 |
}
|
140 |
$stats[] = array( sprintf(__('%s %s Read more about theses stats %s ', 'shortpixel-image-optimiser'), '
|
141 |
<p><img alt=' . esc_html('Info Icon', 'shortpixel-image-optimiser') . ' src=' . esc_url( wpSPIO()->plugin_url('res/img/info-icon.png' )) . ' style="margin-bottom: -4px;"/>', '<a href="https://shortpixel.com/knowledge-base/article/553-the-stats-from-the-shortpixel-column-in-the-media-library-explained" target="_blank">', '</a></p>'), '');
|
142 |
}
|
143 |
+
|
144 |
return $stats;
|
145 |
}
|
146 |
|
220 |
{
|
221 |
$backupFile = $imageObj->getBackupFile();
|
222 |
$debugInfo[] = array(__('Backup Folder'), (string) $backupFile->getFileDir() );
|
223 |
+
$debugInfo[] = array(__('Backup File'), (string) $backupFile . '(' . UiHelper::formatBytes($backupFile->getFileSize()) . ')' );
|
224 |
}
|
225 |
else {
|
226 |
$debugInfo[] = array(__("No Main File Backup Available"), '');
|
229 |
if ($or = $imageObj->hasOriginal())
|
230 |
{
|
231 |
$original = $imageObj->getOriginalFile();
|
232 |
+
$debugInfo[] = array(__('Has Original File: '), $original->getFullPath() . '(' . UiHelper::formatBytes($original->getFileSize()) . ')');
|
233 |
$orbackup = $original->getBackupFile();
|
234 |
if ($orbackup)
|
235 |
+
$debugInfo[] = array(__('Has Backup Original Image'), $orbackup->getFullPath() . '(' . UiHelper::formatBytes($orbackup->getFileSize()) . ')');
|
236 |
$debugInfo[] = array('', '<hr>');
|
237 |
|
238 |
}
|
@@ -516,7 +516,7 @@ class OtherMediaViewController extends \ShortPixel\ViewController
|
|
516 |
$date = new \DateTime();
|
517 |
$date->setTimestamp($timestamp);
|
518 |
|
519 |
-
$display_date =
|
520 |
|
521 |
return $display_date;
|
522 |
}
|
516 |
$date = new \DateTime();
|
517 |
$date->setTimestamp($timestamp);
|
518 |
|
519 |
+
$display_date = UiHelper::formatDate($date);
|
520 |
|
521 |
return $display_date;
|
522 |
}
|
@@ -8,6 +8,8 @@ use ShortPixel\Controller\FileSystemController as FileSystemController;
|
|
8 |
use ShortPixel\Controller\AdminNoticesController as AdminNoticesController;
|
9 |
use ShortPixel\Controller\StatsController as StatsController;
|
10 |
use ShortPixel\Controller\ApiKeyController as ApiKeyController;
|
|
|
|
|
11 |
|
12 |
class InstallHelper
|
13 |
{
|
@@ -21,7 +23,7 @@ class InstallHelper
|
|
21 |
$env = wpSPIO()->env();
|
22 |
|
23 |
if(\WPShortPixelSettings::getOpt('deliverWebp') == 3 && ! $env->is_nginx) {
|
24 |
-
|
25 |
}
|
26 |
|
27 |
self::checkTables();
|
@@ -42,7 +44,7 @@ class InstallHelper
|
|
42 |
|
43 |
if (! $env->is_nginx)
|
44 |
{
|
45 |
-
|
46 |
}
|
47 |
|
48 |
// save remove.
|
@@ -112,7 +114,6 @@ class InstallHelper
|
|
112 |
}
|
113 |
|
114 |
$referrer_url = wp_get_referer();
|
115 |
-
$conflict = \ShortPixelTools::getConflictingPlugins();
|
116 |
$url = wp_get_referer();
|
117 |
$plugin = (isset($_GET['plugin'])) ? sanitize_text_field(wp_unslash($_GET['plugin'])) : null; // our target.
|
118 |
|
8 |
use ShortPixel\Controller\AdminNoticesController as AdminNoticesController;
|
9 |
use ShortPixel\Controller\StatsController as StatsController;
|
10 |
use ShortPixel\Controller\ApiKeyController as ApiKeyController;
|
11 |
+
use ShortPixel\Helper\UtilHelper as UtilHelper;
|
12 |
+
|
13 |
|
14 |
class InstallHelper
|
15 |
{
|
23 |
$env = wpSPIO()->env();
|
24 |
|
25 |
if(\WPShortPixelSettings::getOpt('deliverWebp') == 3 && ! $env->is_nginx) {
|
26 |
+
UtilHelper::alterHtaccess(true,true); //add the htaccess lines
|
27 |
}
|
28 |
|
29 |
self::checkTables();
|
44 |
|
45 |
if (! $env->is_nginx)
|
46 |
{
|
47 |
+
UtilHelper::alterHtaccess(false, false);
|
48 |
}
|
49 |
|
50 |
// save remove.
|
114 |
}
|
115 |
|
116 |
$referrer_url = wp_get_referer();
|
|
|
117 |
$url = wp_get_referer();
|
118 |
$plugin = (isset($_GET['plugin'])) ? sanitize_text_field(wp_unslash($_GET['plugin'])) : null; // our target.
|
119 |
|
@@ -637,6 +637,26 @@ class UiHelper
|
|
637 |
return $number;
|
638 |
}
|
639 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
640 |
protected static function convertImageTypeName($name, $type)
|
641 |
{
|
642 |
if ($type == 'webp')
|
637 |
return $number;
|
638 |
}
|
639 |
|
640 |
+
public static function formatDate( $date ) {
|
641 |
+
|
642 |
+
if ( '0000-00-00 00:00:00' === $date->format('Y-m-d ') ) {
|
643 |
+
$h_time = '';
|
644 |
+
} else {
|
645 |
+
$time = $date->format('U'); //get_post_time( 'G', true, $post, false );
|
646 |
+
if ( ( abs( $t_diff = time() - $time ) ) < DAY_IN_SECONDS ) {
|
647 |
+
if ( $t_diff < 0 ) {
|
648 |
+
$h_time = sprintf( __( '%s from now' ), human_time_diff( $time ) );
|
649 |
+
} else {
|
650 |
+
$h_time = sprintf( __( '%s ago' ), human_time_diff( $time ) );
|
651 |
+
}
|
652 |
+
} else {
|
653 |
+
$h_time = $date->format( 'Y/m/d' );
|
654 |
+
}
|
655 |
+
}
|
656 |
+
|
657 |
+
return $h_time;
|
658 |
+
}
|
659 |
+
|
660 |
protected static function convertImageTypeName($name, $type)
|
661 |
{
|
662 |
if ($type == 'webp')
|
@@ -13,4 +13,128 @@ class UtilHelper
|
|
13 |
return $wpdb->prefix . 'shortpixel_postmeta';
|
14 |
}
|
15 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16 |
}
|
13 |
return $wpdb->prefix . 'shortpixel_postmeta';
|
14 |
}
|
15 |
|
16 |
+
public static function shortPixelIsPluginActive($plugin) {
|
17 |
+
$activePlugins = apply_filters( 'active_plugins', get_option( 'active_plugins', array()));
|
18 |
+
if ( is_multisite() ) {
|
19 |
+
$activePlugins = array_merge($activePlugins, get_site_option( 'active_sitewide_plugins'));
|
20 |
+
}
|
21 |
+
return in_array( $plugin, $activePlugins);
|
22 |
+
}
|
23 |
+
|
24 |
+
static public function timestampToDB($timestamp)
|
25 |
+
{
|
26 |
+
return date("Y-m-d H:i:s", $timestamp);
|
27 |
+
}
|
28 |
+
|
29 |
+
static public function DBtoTimestamp($date)
|
30 |
+
{
|
31 |
+
return strtotime($date);
|
32 |
+
}
|
33 |
+
|
34 |
+
public static function alterHtaccess($webp = false, $avif = false){
|
35 |
+
// [BS] Backward compat. 11/03/2019 - remove possible settings from root .htaccess
|
36 |
+
/* Plugin init is before loading these admin scripts. So it can happen misc.php is not yet loaded */
|
37 |
+
if (! function_exists('insert_with_markers'))
|
38 |
+
{
|
39 |
+
Log::addWarn('AlterHtaccess Called before WP init');
|
40 |
+
return;
|
41 |
+
//require_once( ABSPATH . 'wp-admin/includes/misc.php' );
|
42 |
+
}
|
43 |
+
$upload_dir = wp_upload_dir();
|
44 |
+
$upload_base = trailingslashit($upload_dir['basedir']);
|
45 |
+
|
46 |
+
if ( ! $webp && ! $avif ) {
|
47 |
+
insert_with_markers( get_home_path() . '.htaccess', 'ShortPixelWebp', '');
|
48 |
+
insert_with_markers( $upload_base . '.htaccess', 'ShortPixelWebp', '');
|
49 |
+
insert_with_markers( trailingslashit(WP_CONTENT_DIR) . '.htaccess', 'ShortPixelWebp', '');
|
50 |
+
} else {
|
51 |
+
|
52 |
+
$avif_rules = '
|
53 |
+
<IfModule mod_rewrite.c>
|
54 |
+
RewriteEngine On
|
55 |
+
##### Directives for delivering AVIF files, if they exist #####
|
56 |
+
# Does the browser support avif?
|
57 |
+
RewriteCond %{HTTP_ACCEPT} image/avif
|
58 |
+
# AND is the request a jpg or png? (also grab the basepath %1 to match in the next rule)
|
59 |
+
RewriteCond %{REQUEST_URI} ^(.+)\.(?:jpe?g|png|gif)$
|
60 |
+
# AND does a .avif image exist?
|
61 |
+
RewriteCond %{DOCUMENT_ROOT}/%1.avif -f
|
62 |
+
# THEN send the avif image and set the env var avif
|
63 |
+
RewriteRule (.+)\.(?:jpe?g|png)$ $1.avif [NC,T=image/avif,E=avif,L]
|
64 |
+
|
65 |
+
# Does the browser support avif?
|
66 |
+
RewriteCond %{HTTP_ACCEPT} image/avif
|
67 |
+
# AND is the request a jpg or png? (also grab the basepath %1 to match in the next rule)
|
68 |
+
RewriteCond %{REQUEST_URI} ^(.+)\.(?:jpe?g|png|gif)$
|
69 |
+
# AND does a .jpg.avif image exist?
|
70 |
+
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}.avif -f
|
71 |
+
# THEN send the avif image and set the env var avif
|
72 |
+
RewriteRule ^(.+)$ $1.avif [NC,T=image/avif,E=avif,L]
|
73 |
+
|
74 |
+
</IfModule>
|
75 |
+
<IfModule mod_headers.c>
|
76 |
+
# If REDIRECT_avif env var exists, append Accept to the Vary header
|
77 |
+
Header append Vary Accept env=REDIRECT_avif
|
78 |
+
</IfModule>
|
79 |
+
<IfModule mod_mime.c>
|
80 |
+
AddType image/avif .avif
|
81 |
+
</IfModule>
|
82 |
+
';
|
83 |
+
|
84 |
+
$webp_rules = '
|
85 |
+
<IfModule mod_rewrite.c>
|
86 |
+
RewriteEngine On
|
87 |
+
##### TRY FIRST the file appended with .webp (ex. test.jpg.webp) #####
|
88 |
+
# Is the browser Chrome?
|
89 |
+
RewriteCond %{HTTP_USER_AGENT} Chrome [OR]
|
90 |
+
# OR Is request from Page Speed
|
91 |
+
RewriteCond %{HTTP_USER_AGENT} "Google Page Speed Insights" [OR]
|
92 |
+
# OR does this browser explicitly support webp
|
93 |
+
RewriteCond %{HTTP_ACCEPT} image/webp
|
94 |
+
# AND NOT MS EDGE 42/17 - doesnt work.
|
95 |
+
RewriteCond %{HTTP_USER_AGENT} !Edge/17
|
96 |
+
# AND is the request a jpg, png or gif?
|
97 |
+
RewriteCond %{REQUEST_URI} ^(.+)\.(?:jpe?g|png|gif)$
|
98 |
+
# AND does a .ext.webp image exist?
|
99 |
+
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}.webp -f
|
100 |
+
# THEN send the webp image and set the env var webp
|
101 |
+
RewriteRule ^(.+)$ $1.webp [NC,T=image/webp,E=webp,L]
|
102 |
+
##### IF NOT, try the file with replaced extension (test.webp) #####
|
103 |
+
RewriteCond %{HTTP_USER_AGENT} Chrome [OR]
|
104 |
+
RewriteCond %{HTTP_USER_AGENT} "Google Page Speed Insights" [OR]
|
105 |
+
RewriteCond %{HTTP_ACCEPT} image/webp
|
106 |
+
RewriteCond %{HTTP_USER_AGENT} !Edge/17
|
107 |
+
# AND is the request a jpg, png or gif? (also grab the basepath %1 to match in the next rule)
|
108 |
+
RewriteCond %{REQUEST_URI} ^(.+)\.(?:jpe?g|png|gif)$
|
109 |
+
# AND does a .webp image exist?
|
110 |
+
RewriteCond %{DOCUMENT_ROOT}/%1.webp -f
|
111 |
+
# THEN send the webp image and set the env var webp
|
112 |
+
RewriteRule (.+)\.(?:jpe?g|png|gif)$ $1.webp [NC,T=image/webp,E=webp,L]
|
113 |
+
</IfModule>
|
114 |
+
<IfModule mod_headers.c>
|
115 |
+
# If REDIRECT_webp env var exists, append Accept to the Vary header
|
116 |
+
Header append Vary Accept env=REDIRECT_webp
|
117 |
+
</IfModule>
|
118 |
+
<IfModule mod_mime.c>
|
119 |
+
AddType image/webp .webp
|
120 |
+
</IfModule>
|
121 |
+
' ;
|
122 |
+
|
123 |
+
$rules = '';
|
124 |
+
// if ($avif)
|
125 |
+
$rules .= $avif_rules;
|
126 |
+
// if ($webp)
|
127 |
+
$rules .= $webp_rules;
|
128 |
+
|
129 |
+
insert_with_markers( get_home_path() . '.htaccess', 'ShortPixelWebp', $rules);
|
130 |
+
|
131 |
+
/** In uploads and on, it needs Inherit. Otherwise things such as the 404 error page will not be loaded properly
|
132 |
+
* since the WP rewrite will not be active at that point (overruled) **/
|
133 |
+
$rules = str_replace('RewriteEngine On', 'RewriteEngine On' . PHP_EOL . 'RewriteOptions Inherit', $rules);
|
134 |
+
|
135 |
+
insert_with_markers( $upload_base . '.htaccess', 'ShortPixelWebp', $rules);
|
136 |
+
insert_with_markers( trailingslashit(WP_CONTENT_DIR) . '.htaccess', 'ShortPixelWebp', $rules);
|
137 |
+
|
138 |
+
}
|
139 |
+
}
|
140 |
}
|
@@ -2,6 +2,7 @@
|
|
2 |
namespace ShortPixel\Model;
|
3 |
|
4 |
use ShortPixel\ShortpixelLogger\ShortPixelLogger as Log;
|
|
|
5 |
|
6 |
// Central place for user / access checking, roles etc.
|
7 |
class AccessModel
|
@@ -80,6 +81,30 @@ class AccessModel
|
|
80 |
return false;
|
81 |
}
|
82 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
83 |
|
84 |
protected function user()
|
85 |
{
|
2 |
namespace ShortPixel\Model;
|
3 |
|
4 |
use ShortPixel\ShortpixelLogger\ShortPixelLogger as Log;
|
5 |
+
use ShortPixel\Controller\QuotaController as QuotaController;
|
6 |
|
7 |
// Central place for user / access checking, roles etc.
|
8 |
class AccessModel
|
81 |
return false;
|
82 |
}
|
83 |
|
84 |
+
public function isFeatureAvailable($name)
|
85 |
+
{
|
86 |
+
$available = true;
|
87 |
+
|
88 |
+
switch($name)
|
89 |
+
{
|
90 |
+
case 'avif':
|
91 |
+
$quotaControl = QuotaController::getInstance();
|
92 |
+
$quota = $quotaControl->getQuota();
|
93 |
+
|
94 |
+
if (property_exists($quota, 'unlimited') && $quota->unlimited === true)
|
95 |
+
{
|
96 |
+
$available = false;
|
97 |
+
}
|
98 |
+
|
99 |
+
break;
|
100 |
+
case 'webp':
|
101 |
+
default:
|
102 |
+
|
103 |
+
break;
|
104 |
+
}
|
105 |
+
return $available;
|
106 |
+
}
|
107 |
+
|
108 |
|
109 |
protected function user()
|
110 |
{
|
@@ -0,0 +1,141 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
namespace ShortPixel\Model;
|
3 |
+
use ShortPixel\ShortPixelLogger\ShortPixelLogger as Log;
|
4 |
+
use ShortPixel\Notices\NoticeController as Notice;
|
5 |
+
use ShortPixel\Notices\NoticeController as Notices;
|
6 |
+
|
7 |
+
|
8 |
+
abstract class AdminNoticeModel
|
9 |
+
{
|
10 |
+
protected $key; // abstract
|
11 |
+
protected $notice;
|
12 |
+
|
13 |
+
protected $errorLevel = 'normal';
|
14 |
+
protected $suppress_delay = YEAR_IN_SECONDS;
|
15 |
+
protected $callback;
|
16 |
+
|
17 |
+
protected $include_screens = array();
|
18 |
+
protected $exclude_screens = array();
|
19 |
+
|
20 |
+
protected $data;
|
21 |
+
|
22 |
+
// No stuff loading here, low init
|
23 |
+
public function __construct()
|
24 |
+
{
|
25 |
+
|
26 |
+
}
|
27 |
+
|
28 |
+
// The main init, ty.
|
29 |
+
public function load()
|
30 |
+
{
|
31 |
+
$noticeController = Notices::getInstance();
|
32 |
+
$notice = $noticeController->getNoticeByID($this->key);
|
33 |
+
|
34 |
+
if (is_object($notice))
|
35 |
+
{
|
36 |
+
$this->notice = $notice;
|
37 |
+
}
|
38 |
+
|
39 |
+
if (is_object($notice) && $notice->isDismissed())
|
40 |
+
{
|
41 |
+
return;
|
42 |
+
}
|
43 |
+
|
44 |
+
if (is_null($this->notice) && $this->checkTrigger() === true)
|
45 |
+
{
|
46 |
+
$this->add();
|
47 |
+
}
|
48 |
+
}
|
49 |
+
|
50 |
+
public function getKey()
|
51 |
+
{
|
52 |
+
return $this->key;
|
53 |
+
}
|
54 |
+
|
55 |
+
public function reset($key = null)
|
56 |
+
{
|
57 |
+
$key = (is_null($key)) ? $this->key : $key;
|
58 |
+
Notices::removeNoticeByID($key);
|
59 |
+
}
|
60 |
+
|
61 |
+
// For when trigger condition is not applicable.
|
62 |
+
public function addManual($args = array())
|
63 |
+
{
|
64 |
+
foreach($args as $key => $val)
|
65 |
+
{
|
66 |
+
$this->addData($key, $val);
|
67 |
+
}
|
68 |
+
$this->add();
|
69 |
+
}
|
70 |
+
|
71 |
+
public function getNoticeObj()
|
72 |
+
{
|
73 |
+
return $this->notice; // can be null!
|
74 |
+
}
|
75 |
+
|
76 |
+
// Proxy for noticeModel dismissed
|
77 |
+
public function isDismissed()
|
78 |
+
{
|
79 |
+
$notice = $this->getNoticeObj();
|
80 |
+
if (is_null($notice) || $notice->isDismissed() === false)
|
81 |
+
return false;
|
82 |
+
|
83 |
+
return true;
|
84 |
+
}
|
85 |
+
|
86 |
+
|
87 |
+
protected function add()
|
88 |
+
{
|
89 |
+
|
90 |
+
switch ($this->errorLevel)
|
91 |
+
{
|
92 |
+
case 'warning':
|
93 |
+
$notice = Notices::addWarning($this->getMessage());
|
94 |
+
break;
|
95 |
+
case 'normal';
|
96 |
+
default:
|
97 |
+
$notice = Notices::addNormal($this->getMessage());
|
98 |
+
|
99 |
+
break;
|
100 |
+
}
|
101 |
+
|
102 |
+
/// Todo implement include / exclude screens here.
|
103 |
+
if (count($this->exclude_screens) > 0)
|
104 |
+
{
|
105 |
+
$notice->limitScreens('exclude', $this->exclude_screens);
|
106 |
+
}
|
107 |
+
|
108 |
+
if (count($this->include_screens) > 0)
|
109 |
+
{
|
110 |
+
$notice->limitScreens('include', $this->include_screens);
|
111 |
+
}
|
112 |
+
|
113 |
+
if (! is_null($this->callback))
|
114 |
+
Notices::makePersistent($notice, $this->key, $this->suppress_delay, $this->callback);
|
115 |
+
else
|
116 |
+
Notices::makePersistent($notice, $this->key, $this->suppress_delay);
|
117 |
+
|
118 |
+
$this->notice = $notice;
|
119 |
+
}
|
120 |
+
|
121 |
+
protected function addData($name, $value)
|
122 |
+
{
|
123 |
+
$this->data[$name] = $value;
|
124 |
+
}
|
125 |
+
|
126 |
+
protected function getData($name)
|
127 |
+
{
|
128 |
+
if (isset($this->data[$name]))
|
129 |
+
{
|
130 |
+
return $this->data[$name];
|
131 |
+
}
|
132 |
+
return false;
|
133 |
+
}
|
134 |
+
|
135 |
+
// ?? abstract proteced removeCondition();
|
136 |
+
|
137 |
+
abstract protected function checkTrigger();
|
138 |
+
abstract protected function getMessage();
|
139 |
+
|
140 |
+
|
141 |
+
}
|
@@ -0,0 +1,40 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
namespace ShortPixel\Model\AdminNotices;
|
3 |
+
|
4 |
+
class ApiNotice extends \ShortPixel\Model\AdminNoticeModel
|
5 |
+
{
|
6 |
+
protected $key = 'MSG_NO_APIKEY';
|
7 |
+
|
8 |
+
public function load()
|
9 |
+
{
|
10 |
+
$activationDate = \wpSPIO()->settings()->activationDate;
|
11 |
+
if (! $activationDate)
|
12 |
+
{
|
13 |
+
$activationDate = time();
|
14 |
+
\wpSPIO()->settings()->activationDate = $activationDate;
|
15 |
+
}
|
16 |
+
|
17 |
+
parent::load();
|
18 |
+
}
|
19 |
+
|
20 |
+
protected function checkTrigger()
|
21 |
+
{
|
22 |
+
if (\wpSPIO()->settings()->verifiedKey)
|
23 |
+
{
|
24 |
+
return false;
|
25 |
+
}
|
26 |
+
|
27 |
+
// If not key is verified.
|
28 |
+
return true;
|
29 |
+
}
|
30 |
+
|
31 |
+
protected function getMessage()
|
32 |
+
{
|
33 |
+
$message = "<p>" . __('To start the optimization process, you need to validate your API key on the '
|
34 |
+
. '<a href="options-general.php?page=wp-shortpixel-settings">ShortPixel Settings</a> page in your WordPress admin.','shortpixel-image-optimiser') . "
|
35 |
+
</p>
|
36 |
+
<p>" . __('If you do not have an API key yet, just fill out the form and a key will be created.','shortpixel-image-optimiser') . "</p>";
|
37 |
+
|
38 |
+
return $message;
|
39 |
+
}
|
40 |
+
}
|
@@ -0,0 +1,51 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
namespace ShortPixel\Model\AdminNotices;
|
3 |
+
|
4 |
+
use ShortPixel\Controller\AdminNoticesController as AdminNoticesController;
|
5 |
+
|
6 |
+
class ApiNoticeRepeat extends \ShortPixel\Model\AdminNoticeModel
|
7 |
+
{
|
8 |
+
protected $key = 'MSG_NO_APIKEY_REPEAT';
|
9 |
+
protected $errorLevel = 'warning';
|
10 |
+
|
11 |
+
protected function checkTrigger()
|
12 |
+
{
|
13 |
+
if (\wpSPIO()->settings()->verifiedKey)
|
14 |
+
{
|
15 |
+
return false;
|
16 |
+
}
|
17 |
+
|
18 |
+
// Is set by general ApiNotice. If not set, don't bother with the repeat.
|
19 |
+
$activationDate = \wpSPIO()->settings()->activationDate;
|
20 |
+
if (! $activationDate)
|
21 |
+
{
|
22 |
+
return false;
|
23 |
+
}
|
24 |
+
|
25 |
+
$controller = AdminNoticesController::getInstance();
|
26 |
+
|
27 |
+
$firstNotice = $controller->getNoticeByKey('MSG_NO_APIKEY');
|
28 |
+
|
29 |
+
// Check if first notice is there, and not dismissed, then don't repeat.
|
30 |
+
if ($firstNotice->isDismissed() === false)
|
31 |
+
{
|
32 |
+
return false;
|
33 |
+
}
|
34 |
+
|
35 |
+
// After 6 hours
|
36 |
+
if (time() < $activationDate + (6 * HOUR_IN_SECONDS))
|
37 |
+
{
|
38 |
+
return false;
|
39 |
+
}
|
40 |
+
|
41 |
+
// If not key is verified and first one is dismissed, and not this one.
|
42 |
+
return true;
|
43 |
+
}
|
44 |
+
|
45 |
+
protected function getMessage()
|
46 |
+
{
|
47 |
+
$message = __("Action required! Please <a href='https://shortpixel.com/wp-apikey' target='_blank'>get your API key</a> to activate your ShortPixel plugin.",'shortpixel-image-optimiser');
|
48 |
+
|
49 |
+
return $message;
|
50 |
+
}
|
51 |
+
}
|
@@ -0,0 +1,57 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
namespace ShortPixel\Model\AdminNotices;
|
3 |
+
|
4 |
+
use ShortPixel\Controller\AdminNoticesController as AdminNoticesController;
|
5 |
+
|
6 |
+
class ApiNoticeRepeatLong extends \ShortPixel\Model\AdminNoticeModel
|
7 |
+
{
|
8 |
+
protected $key = 'MSG_NO_APIKEY_REPEAT_LONG';
|
9 |
+
protected $errorLevel = 'warning';
|
10 |
+
|
11 |
+
protected function checkTrigger()
|
12 |
+
{
|
13 |
+
if (\wpSPIO()->settings()->verifiedKey)
|
14 |
+
{
|
15 |
+
return false;
|
16 |
+
}
|
17 |
+
|
18 |
+
// Is set by general ApiNotice. If not set, don't bother with the repeat.
|
19 |
+
$activationDate = \wpSPIO()->settings()->activationDate;
|
20 |
+
if (! $activationDate)
|
21 |
+
{
|
22 |
+
return false;
|
23 |
+
}
|
24 |
+
|
25 |
+
$controller = AdminNoticesController::getInstance();
|
26 |
+
|
27 |
+
// Check the original
|
28 |
+
$firstNotice = $controller->getNoticeByKey('MSG_NO_APIKEY');
|
29 |
+
if ($firstNotice->isDismissed() === false)
|
30 |
+
{
|
31 |
+
return false;
|
32 |
+
}
|
33 |
+
|
34 |
+
// Check the Repeat.
|
35 |
+
$secondNotice = $controller->getNoticeByKey('MSG_NO_APIKEY_REPEAT');
|
36 |
+
if ($secondNotice->isDismissed() === false)
|
37 |
+
{
|
38 |
+
return false;
|
39 |
+
}
|
40 |
+
|
41 |
+
// After 3 days.
|
42 |
+
if (time() < $activationDate + (3 * DAY_IN_SECONDS))
|
43 |
+
{
|
44 |
+
return false;
|
45 |
+
}
|
46 |
+
|
47 |
+
// If not key is verified and first one is dismissed, and not this one.
|
48 |
+
return true;
|
49 |
+
}
|
50 |
+
|
51 |
+
protected function getMessage()
|
52 |
+
{
|
53 |
+
$message = __("Your image gallery is not optimized. It takes 2 minutes to <a href='https://shortpixel.com/wp-apikey' target='_blank'>get your API key</a> and activate your ShortPixel plugin.",'shortpixel-image-optimiser') . "<BR><BR>";
|
54 |
+
|
55 |
+
return $message;
|
56 |
+
}
|
57 |
+
}
|
@@ -0,0 +1,97 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
namespace ShortPixel\Model\AdminNotices;
|
3 |
+
|
4 |
+
use \ShortPixel\Controller\CacheController as CacheController;
|
5 |
+
|
6 |
+
class AvifNotice extends \ShortPixel\Model\AdminNoticeModel
|
7 |
+
{
|
8 |
+
protected $key = 'MSG_AVIF_ERROR';
|
9 |
+
protected $errorLevel = 'error';
|
10 |
+
|
11 |
+
protected $error_message;
|
12 |
+
protected $error_detail;
|
13 |
+
|
14 |
+
protected function checkTrigger()
|
15 |
+
{
|
16 |
+
// No Automatic Trigger.
|
17 |
+
return false;
|
18 |
+
}
|
19 |
+
|
20 |
+
public function check()
|
21 |
+
{
|
22 |
+
$cache = new CacheController();
|
23 |
+
if (apply_filters('shortpixel/avifcheck/override', false) === true)
|
24 |
+
{ return; }
|
25 |
+
|
26 |
+
if ($cache->getItem('avif_server_check')->exists() === false)
|
27 |
+
{
|
28 |
+
$url = \WPSPIO()->plugin_url('res/img/test.avif');
|
29 |
+
$headers = get_headers($url);
|
30 |
+
$is_error = true;
|
31 |
+
|
32 |
+
$this->addData('headers', $headers);
|
33 |
+
// Defaults.
|
34 |
+
$this->error_message = __('AVIF server test failed. Your server may not be configured to display AVIF files correctly. Serving AVIF might cause your images not to load. Check your images, disable the AVIF option, or update your web server configuration.', 'shortpixel-image-optimiser');
|
35 |
+
$this->error_detail = __('The request did not return valid HTTP headers. Check if the plugin is allowed to access ' . $url, 'shortpixel-image-optimiser');
|
36 |
+
|
37 |
+
$contentType = null;
|
38 |
+
$response = $headers[0];
|
39 |
+
|
40 |
+
if (is_array($headers) )
|
41 |
+
{
|
42 |
+
foreach($headers as $index => $header)
|
43 |
+
{
|
44 |
+
if ( strpos(strtolower($header), 'content-type') !== false )
|
45 |
+
{
|
46 |
+
// This is another header that can interrupt.
|
47 |
+
if (strpos(strtolower($header), 'x-content-type-options') === false)
|
48 |
+
{
|
49 |
+
$contentType = $header;
|
50 |
+
}
|
51 |
+
}
|
52 |
+
}
|
53 |
+
|
54 |
+
// http not ok, redirect etc. Shouldn't happen.
|
55 |
+
if (is_null($response) || strpos($response, '200') === false)
|
56 |
+
{
|
57 |
+
$this->error_detail = sprintf(__('AVIF check could not be completed because the plugin could not retrieve %s %s %s. %s Please check the security/firewall settings and try again', 'shortpixel-image-optimiser'), '<a href="' . $url . '">', $url, '</a>', '<br>');
|
58 |
+
}
|
59 |
+
elseif(is_null($contentType) || strpos($contentType, 'avif') === false)
|
60 |
+
{
|
61 |
+
$this->error_detail = sprintf(__('The required Content-type header for AVIF files was not found. Please check this with your hosting and/or CDN provider. For more details on how to fix this issue, %s see this article %s', 'shortpixel_image_optimiser'), '<a href="https://shortpixel.com/blog/avif-mime-type-delivery-apache-nginx/" target="_blank"> ', '</a>');
|
62 |
+
|
63 |
+
}
|
64 |
+
else
|
65 |
+
{
|
66 |
+
$is_error = false;
|
67 |
+
}
|
68 |
+
}
|
69 |
+
|
70 |
+
if ($is_error)
|
71 |
+
{
|
72 |
+
if (! is_null($this->notice) && ! $this->notice->isDismissed() === true)
|
73 |
+
{
|
74 |
+
$this->addManual();
|
75 |
+
}
|
76 |
+
|
77 |
+
}
|
78 |
+
else
|
79 |
+
{
|
80 |
+
$this->reset();
|
81 |
+
|
82 |
+
$item = $cache->getItem('avif_server_check');
|
83 |
+
$item->setValue(time());
|
84 |
+
$item->setExpires(MONTH_IN_SECONDS);
|
85 |
+
$cache->storeItemObject($item );
|
86 |
+
}
|
87 |
+
}
|
88 |
+
|
89 |
+
}
|
90 |
+
|
91 |
+
protected function getMessage()
|
92 |
+
{
|
93 |
+
$headers = $this->getData('headers');
|
94 |
+
$message = '<h4>' . $this->error_message . '</h4><p>' . $this->error_detail . '</p><p class="small">' . __('Returned headers for:<br>', 'shortpixel-image-optimiser') . print_r($headers, true) . '</p>';
|
95 |
+
return $message;
|
96 |
+
}
|
97 |
+
}
|
@@ -0,0 +1,191 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
namespace ShortPixel\Model\AdminNotices;
|
3 |
+
|
4 |
+
class CompatNotice extends \ShortPixel\Model\AdminNoticeModel
|
5 |
+
{
|
6 |
+
protected $key = 'MSG_COMPAT';
|
7 |
+
protected $errorLevel = 'warning';
|
8 |
+
|
9 |
+
protected function checkTrigger()
|
10 |
+
{
|
11 |
+
$conflictPlugins = $this->getConflictingPlugins();
|
12 |
+
if (count($conflictPlugins) > 0)
|
13 |
+
{
|
14 |
+
$this->addData('conflicts', $conflictPlugins);
|
15 |
+
return true;
|
16 |
+
}
|
17 |
+
else {
|
18 |
+
return false;
|
19 |
+
}
|
20 |
+
}
|
21 |
+
|
22 |
+
protected function getMessage()
|
23 |
+
{
|
24 |
+
// $conflicts = \ShortPixelTools::getConflictingPlugins();
|
25 |
+
$conflicts = $this->getData('conflicts');
|
26 |
+
if (! is_array($conflicts))
|
27 |
+
$conflicts = array();
|
28 |
+
|
29 |
+
$message = __("The following plugins are not compatible with ShortPixel and may cause unexpected results: ",'shortpixel-image-optimiser');
|
30 |
+
$message .= '<ul class="sp-conflict-plugins">';
|
31 |
+
foreach($conflicts as $plugin) {
|
32 |
+
//ShortPixelVDD($plugin);
|
33 |
+
$action = $plugin['action'];
|
34 |
+
$link = ( $action == 'Deactivate' )
|
35 |
+
? wp_nonce_url( admin_url( 'admin-post.php?action=shortpixel_deactivate_conflict_plugin&plugin=' . urlencode( $plugin['path'] ) ), 'sp_deactivate_plugin_nonce' )
|
36 |
+
: $plugin['href'];
|
37 |
+
$message .= '<li class="sp-conflict-plugins-list"><strong>' . $plugin['name'] . '</strong>';
|
38 |
+
$message .= '<a href="' . $link . '" class="button button-primary">' . $action . '</a>';
|
39 |
+
|
40 |
+
if($plugin['details']) $message .= '<br>';
|
41 |
+
if($plugin['details']) $message .= '<span>' . $plugin['details'] . '</span>';
|
42 |
+
}
|
43 |
+
$message .= "</ul>";
|
44 |
+
|
45 |
+
return $message;
|
46 |
+
}
|
47 |
+
|
48 |
+
protected function getConflictingPlugins() {
|
49 |
+
$settings = \wpSPIO()->settings();
|
50 |
+
|
51 |
+
$conflictPlugins = array(
|
52 |
+
'WP Smush - Image Optimization'
|
53 |
+
=> array(
|
54 |
+
'action'=>'Deactivate',
|
55 |
+
'data'=>'wp-smushit/wp-smush.php',
|
56 |
+
'page'=>'wp-smush-bulk'
|
57 |
+
),
|
58 |
+
'Imagify Image Optimizer'
|
59 |
+
=> array(
|
60 |
+
'action'=>'Deactivate',
|
61 |
+
'data'=>'imagify/imagify.php',
|
62 |
+
'page'=>'imagify'
|
63 |
+
),
|
64 |
+
'Compress JPEG & PNG images (TinyPNG)'
|
65 |
+
=> array(
|
66 |
+
'action'=>'Deactivate',
|
67 |
+
'data'=>'tiny-compress-images/tiny-compress-images.php',
|
68 |
+
'page'=>'tinify'
|
69 |
+
),
|
70 |
+
'Kraken.io Image Optimizer'
|
71 |
+
=> array(
|
72 |
+
'action'=>'Deactivate',
|
73 |
+
'data'=>'kraken-image-optimizer/kraken.php',
|
74 |
+
'page'=>'wp-krakenio'
|
75 |
+
),
|
76 |
+
'Optimus - WordPress Image Optimizer'
|
77 |
+
=> array(
|
78 |
+
'action'=>'Deactivate',
|
79 |
+
'data'=>'optimus/optimus.php',
|
80 |
+
'page'=>'optimus'
|
81 |
+
),
|
82 |
+
'Phoenix Media Rename' => array(
|
83 |
+
'action' => 'Deactivate',
|
84 |
+
'data' => 'phoenix-media-rename/phoenix-media-rename.php',
|
85 |
+
),
|
86 |
+
'EWWW Image Optimizer'
|
87 |
+
=> array(
|
88 |
+
'action'=>'Deactivate',
|
89 |
+
'data'=>'ewww-image-optimizer/ewww-image-optimizer.php',
|
90 |
+
'page'=>'ewww-image-optimizer%2F'
|
91 |
+
),
|
92 |
+
'EWWW Image Optimizer Cloud'
|
93 |
+
=> array(
|
94 |
+
'action'=>'Deactivate',
|
95 |
+
'data'=>'ewww-image-optimizer-cloud/ewww-image-optimizer-cloud.php',
|
96 |
+
'page'=>'ewww-image-optimizer-cloud%2F'
|
97 |
+
),
|
98 |
+
'ImageRecycle pdf & image compression'
|
99 |
+
=> array(
|
100 |
+
'action'=>'Deactivate',
|
101 |
+
'data'=>'imagerecycle-pdf-image-compression/wp-image-recycle.php',
|
102 |
+
'page'=>'option-image-recycle'
|
103 |
+
),
|
104 |
+
'CheetahO Image Optimizer'
|
105 |
+
=> array(
|
106 |
+
'action'=>'Deactivate',
|
107 |
+
'data'=>'cheetaho-image-optimizer/cheetaho.php',
|
108 |
+
'page'=>'cheetaho'
|
109 |
+
),
|
110 |
+
'Zara 4 Image Compression'
|
111 |
+
=> array(
|
112 |
+
'action'=>'Deactivate',
|
113 |
+
'data'=>'zara-4/zara-4.php',
|
114 |
+
'page'=>'zara-4'
|
115 |
+
),
|
116 |
+
'CW Image Optimizer'
|
117 |
+
=> array(
|
118 |
+
'action'=>'Deactivate',
|
119 |
+
'data'=>'cw-image-optimizer/cw-image-optimizer.php',
|
120 |
+
'page'=>'cw-image-optimizer'
|
121 |
+
),
|
122 |
+
'Simple Image Sizes'
|
123 |
+
=> array(
|
124 |
+
'action'=>'Deactivate',
|
125 |
+
'data'=>'simple-image-sizes/simple_image_sizes.php'
|
126 |
+
),
|
127 |
+
'Regenerate Thumbnails and Delete Unused'
|
128 |
+
=> array(
|
129 |
+
'action' => 'Deactivate',
|
130 |
+
'data' => 'regenerate-thumbnails-and-delete-unused/regenerate_wpregenerate.php',
|
131 |
+
),
|
132 |
+
'Swift Performance'
|
133 |
+
=> array(
|
134 |
+
'action' => 'Deactivate',
|
135 |
+
'data' => 'swift-performance/performance.php',
|
136 |
+
),
|
137 |
+
'Swift Performance Lite'
|
138 |
+
=> array(
|
139 |
+
'action' => 'Deactivate',
|
140 |
+
'data' => 'swift-performance-lite/performance.php',
|
141 |
+
),
|
142 |
+
//DEACTIVATED TEMPORARILY - it seems that the customers get scared.
|
143 |
+
/* 'Jetpack by WordPress.com - The Speed up image load times Option'
|
144 |
+
=> array(
|
145 |
+
'action'=>'Change Setting',
|
146 |
+
'data'=>'jetpack/jetpack.php',
|
147 |
+
'href'=>'admin.php?page=jetpack#/settings'
|
148 |
+
)
|
149 |
+
*/
|
150 |
+
);
|
151 |
+
if($settings->processThumbnails) {
|
152 |
+
$details = __('Details: recreating image files may require re-optimization of the resulting thumbnails, even if they were previously optimized. Please use <a href="https://wordpress.org/plugins/regenerate-thumbnails-advanced/" target="_blank">reGenerate Thumbnails Advanced</a> instead.','shortpixel-image-optimiser');
|
153 |
+
|
154 |
+
$conflictPlugins = array_merge($conflictPlugins, array(
|
155 |
+
'Regenerate Thumbnails'
|
156 |
+
=> array(
|
157 |
+
'action'=>'Deactivate',
|
158 |
+
'data'=>'regenerate-thumbnails/regenerate-thumbnails.php',
|
159 |
+
'page'=>'regenerate-thumbnails',
|
160 |
+
'details' => $details
|
161 |
+
),
|
162 |
+
'Force Regenerate Thumbnails'
|
163 |
+
=> array(
|
164 |
+
'action'=>'Deactivate',
|
165 |
+
'data'=>'force-regenerate-thumbnails/force-regenerate-thumbnails.php',
|
166 |
+
'page'=>'force-regenerate-thumbnails',
|
167 |
+
'details' => $details
|
168 |
+
)
|
169 |
+
));
|
170 |
+
}
|
171 |
+
|
172 |
+
|
173 |
+
$found = array();
|
174 |
+
foreach($conflictPlugins as $name => $path) {
|
175 |
+
$action = ( isset($path['action']) ) ? $path['action'] : null;
|
176 |
+
$data = ( isset($path['data']) ) ? $path['data'] : null;
|
177 |
+
$href = ( isset($path['href']) ) ? $path['href'] : null;
|
178 |
+
$page = ( isset($path['page']) ) ? $path['page'] : null;
|
179 |
+
$details = ( isset($path['details']) ) ? $path['details'] : null;
|
180 |
+
if(is_plugin_active($data)) {
|
181 |
+
if( $data == 'jetpack/jetpack.php' ){
|
182 |
+
$jetPackPhoton = get_option('jetpack_active_modules') ? in_array('photon', get_option('jetpack_active_modules')) : false;
|
183 |
+
if( !$jetPackPhoton ){ continue; }
|
184 |
+
}
|
185 |
+
$found[] = array( 'name' => $name, 'action'=> $action, 'path' => $data, 'href' => $href , 'page' => $page, 'details' => $details);
|
186 |
+
}
|
187 |
+
}
|
188 |
+
return $found;
|
189 |
+
}
|
190 |
+
|
191 |
+
}
|
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
namespace ShortPixel\Model\AdminNotices;
|
3 |
+
|
4 |
+
class LegacyNotice extends \ShortPixel\Model\AdminNoticeModel
|
5 |
+
{
|
6 |
+
protected $key = 'MSG_CONVERT_LEGACY';
|
7 |
+
|
8 |
+
protected function checkTrigger()
|
9 |
+
{
|
10 |
+
return false;
|
11 |
+
}
|
12 |
+
|
13 |
+
protected function getMessage()
|
14 |
+
{
|
15 |
+
$message = '<p><strong>' . __('ShortPixel has found items in the media library with an outdated optimization format!', 'shortpixel-image-optimiser') . '</strong></p>';
|
16 |
+
|
17 |
+
$message .= '<p>' . __('Prior to version 5.0, a different format was used to store ShortPixel optimization information. ShortPixel automatically migrates the media library items to the new format when they are opened. %s Please check if your images contain the optimization information after migration. %s Read more %s', 'shortpixel-image-optimiser') . '</p>';
|
18 |
+
|
19 |
+
$message .= '<p>' . __('It is recommended to migrate all items to the modern format by clicking the button below.', 'shortpixel-image-optimser') . '</p>';
|
20 |
+
$message .= '<p><a href="%s" class="button button-primary">%s</a></p>';
|
21 |
+
|
22 |
+
$read_link = esc_url('https://shortpixel.com/knowledge-base/article/539-spio-5-tells-me-to-convert-legacy-data-what-is-this');
|
23 |
+
$action_link = esc_url(admin_url('upload.php?page=wp-short-pixel-bulk&panel=bulk-migrate'));
|
24 |
+
$action_name = __('Migrate optimization data', 'shortpixel-image-optimiser');
|
25 |
+
|
26 |
+
$message = sprintf($message, '<br>', '<a href="' . $read_link . '" target="_blank">', '</a>', $action_link, $action_name);
|
27 |
+
|
28 |
+
return $message;
|
29 |
+
}
|
30 |
+
}
|
@@ -0,0 +1,60 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
namespace ShortPixel\Model\AdminNotices;
|
3 |
+
|
4 |
+
class ListviewNotice extends \ShortPixel\Model\AdminNoticeModel
|
5 |
+
{
|
6 |
+
protected $key = 'MSG_LISTVIEW_ACTIVE';
|
7 |
+
|
8 |
+
public function __construct()
|
9 |
+
{
|
10 |
+
$this->include_screens[] = 'upload';
|
11 |
+
parent::__construct();
|
12 |
+
}
|
13 |
+
|
14 |
+
protected function checkTrigger()
|
15 |
+
{
|
16 |
+
// Don't check for this, when not on this screen.
|
17 |
+
$screen_id = \wpSPIO()->env()->screen_id;
|
18 |
+
if ($screen_id !== 'upload')
|
19 |
+
{
|
20 |
+
return false;
|
21 |
+
}
|
22 |
+
|
23 |
+
if (! function_exists('wp_get_current_user') )
|
24 |
+
{
|
25 |
+
return false;
|
26 |
+
|
27 |
+
}
|
28 |
+
|
29 |
+
$current_user = wp_get_current_user();
|
30 |
+
$currentUserID = $current_user->ID;
|
31 |
+
$viewMode = get_user_meta($currentUserID, "wp_media_library_mode", true);
|
32 |
+
|
33 |
+
if ($viewMode === "" || strlen($viewMode) == 0)
|
34 |
+
{
|
35 |
+
// If nothing is set, set it for them.
|
36 |
+
update_user_meta($currentUserID, 'wp_media_library_mode', 'list');
|
37 |
+
return false;
|
38 |
+
}
|
39 |
+
elseif ($viewMode !== "list")
|
40 |
+
{
|
41 |
+
return true;
|
42 |
+
}
|
43 |
+
else
|
44 |
+
{
|
45 |
+
if (is_object($this->getNoticeObj()))
|
46 |
+
$this->reset();
|
47 |
+
}
|
48 |
+
|
49 |
+
}
|
50 |
+
|
51 |
+
|
52 |
+
protected function getMessage()
|
53 |
+
{
|
54 |
+
|
55 |
+
$message = sprintf(__('You can see the actions and data of ShortPixel Image Optimiser only through the list view. Switch to the list view to use the plugin via the media library. Click to%s switch to the list view%s now. ', 'shortpixel-image-optimiser'), '<a href="' . admin_url('upload.php?mode=list') . '">','</a>');
|
56 |
+
|
57 |
+
return $message;
|
58 |
+
|
59 |
+
}
|
60 |
+
}
|
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
namespace ShortPixel\Model\AdminNotices;
|
3 |
+
|
4 |
+
class NextgenNotice extends \ShortPixel\Model\AdminNoticeModel
|
5 |
+
{
|
6 |
+
protected $key = 'MSG_INTEGRATION_NGGALLERY';
|
7 |
+
|
8 |
+
protected function checkTrigger()
|
9 |
+
{
|
10 |
+
|
11 |
+
$settings = \wpSPIO()->settings();
|
12 |
+
|
13 |
+
if (! $settings->verifiedKey)
|
14 |
+
{
|
15 |
+
return false; // no key, no integrations.
|
16 |
+
}
|
17 |
+
|
18 |
+
if (\wpSPIO()->env()->has_nextgen && ! $settings->includeNextGen)
|
19 |
+
{
|
20 |
+
return true;
|
21 |
+
}
|
22 |
+
|
23 |
+
return false;
|
24 |
+
}
|
25 |
+
|
26 |
+
protected function getMessage()
|
27 |
+
{
|
28 |
+
$url = esc_url(admin_url('options-general.php?page=wp-shortpixel-settings&part=adv-settings'));
|
29 |
+
$message = sprintf(__('You seem to be using NextGen Gallery. You can optimize your galleries with ShortPixel, but this is not currently enabled. To enable it, %sgo to settings and enable%s it!', 'shortpixel_image_optimiser'), '<a href="' . $url . '">', '</a>');
|
30 |
+
|
31 |
+
return $message;
|
32 |
+
|
33 |
+
}
|
34 |
+
}
|
@@ -0,0 +1,99 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
namespace ShortPixel\Model\AdminNotices;
|
3 |
+
use ShortPixel\Controller\StatsController as StatsController;
|
4 |
+
use ShortPixel\Controller\AdminNoticesController as AdminNoticesController;
|
5 |
+
use ShortPixel\Controller\QuotaController as QuotaController;
|
6 |
+
|
7 |
+
class QuotaNoticeMonth extends \ShortPixel\Model\AdminNoticeModel
|
8 |
+
{
|
9 |
+
protected $key = 'MSG_UPGRADE_MONTH';
|
10 |
+
|
11 |
+
public function load()
|
12 |
+
{
|
13 |
+
$this->callback = array(AdminNoticesController::getInstance(), 'proposeUpgradePopup');
|
14 |
+
parent::load();
|
15 |
+
}
|
16 |
+
|
17 |
+
protected function checkTrigger()
|
18 |
+
{
|
19 |
+
$quotaController = QuotaController::getInstance();
|
20 |
+
|
21 |
+
if ($quotaController->hasQuota() === false)
|
22 |
+
return false;
|
23 |
+
|
24 |
+
$quotaData = $quotaController->getQuota();
|
25 |
+
|
26 |
+
if ($this->monthlyUpgradeNeeded($quotaData) === false)
|
27 |
+
return false;
|
28 |
+
|
29 |
+
$this->addData('average', $this->getMonthAverage());
|
30 |
+
$this->addData('month_total', $quotaData->monthly->total);
|
31 |
+
$this->addData('onetime_remaining', $quotaData->onetime->remaining);
|
32 |
+
|
33 |
+
}
|
34 |
+
|
35 |
+
protected function getMessage()
|
36 |
+
{
|
37 |
+
$quotaController = QuotaController::getInstance();
|
38 |
+
|
39 |
+
$quotaData = $quotaController->getQuota();
|
40 |
+
$average = $this->getMonthAverage(); // $this->getData('average');
|
41 |
+
$month_total = $quotaData->monthly->total;// $this->getData('month_total');
|
42 |
+
$onetime_remaining = $quotaData->onetime->remaining; //$this->getData('onetime_remaining'); */
|
43 |
+
|
44 |
+
$message = '<p>' . sprintf(__("You add an average of <strong>%d images and thumbnails</strong> to your Media Library every month and you have <strong>a plan of %d images/month (and %d one-time images)</strong>.%s"
|
45 |
+
. " You may need to upgrade your plan to have all your images optimized.", 'shortpixel-image-optimiser'), $average, $month_total, $onetime_remaining, '<br>') . '</p>';
|
46 |
+
|
47 |
+
$message .= ' <button class="button button-primary" id="shortpixel-upgrade-advice" onclick="ShortPixel.proposeUpgrade()" style="margin-right:10px;"><strong>' . __('Show me the best available options', 'shortpixel-image-optimiser') . '</strong></button>';
|
48 |
+
|
49 |
+
return $message;
|
50 |
+
}
|
51 |
+
|
52 |
+
protected function CheckUpgradeNeeded($quotaData)
|
53 |
+
{
|
54 |
+
if (isset($quotaData->monthly->total) && !$quotaData->unlimited)
|
55 |
+
{
|
56 |
+
$monthAvg = $this->getMonthAvg($quotaData);
|
57 |
+
// +20 I suspect to not trigger on very low values of monthly use(?)
|
58 |
+
$threshold = $quotaData->monthly->total + ($quotaData->onetime->remaining / 6 ) +20;
|
59 |
+
|
60 |
+
if ($monthAvg > $threshold)
|
61 |
+
{
|
62 |
+
return true;
|
63 |
+
}
|
64 |
+
}
|
65 |
+
return false;
|
66 |
+
}
|
67 |
+
|
68 |
+
protected function getMonthAverage() {
|
69 |
+
$stats = StatsController::getInstance();
|
70 |
+
|
71 |
+
// Count how many months have some optimized images.
|
72 |
+
for($i = 4, $count = 0; $i>=1; $i--) {
|
73 |
+
if($count == 0 && $stats->find('period', 'months', $i) == 0)
|
74 |
+
{
|
75 |
+
continue;
|
76 |
+
}
|
77 |
+
$count++;
|
78 |
+
|
79 |
+
}
|
80 |
+
// Sum last 4 months, and divide by number of active months to get number of avg per active month.
|
81 |
+
return ($stats->find('period', 'months', 1) + $stats->find('period', 'months', 2) + $stats->find('period', 'months', 3) + $stats->find('period', 'months', 4) / max(1,$count));
|
82 |
+
}
|
83 |
+
|
84 |
+
protected function monthlyUpgradeNeeded($quotaData)
|
85 |
+
{
|
86 |
+
if (isset($quotaData->monthly->total))
|
87 |
+
{
|
88 |
+
$monthAvg = $this->getMonthAverage($quotaData);
|
89 |
+
// +20 I suspect to not trigger on very low values of monthly use(?)
|
90 |
+
$threshold = $quotaData->monthly->total + ($quotaData->onetime->remaining / 6 ) +20;
|
91 |
+
|
92 |
+
if ($monthAvg > $threshold)
|
93 |
+
{
|
94 |
+
return true;
|
95 |
+
}
|
96 |
+
}
|
97 |
+
return false;
|
98 |
+
}
|
99 |
+
} // class
|
@@ -0,0 +1,106 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
namespace ShortPixel\Model\AdminNotices;
|
3 |
+
use ShortPixel\Controller\StatsController as StatsController;
|
4 |
+
use ShortPixel\Controller\ApiKeyController as ApiKeyController;
|
5 |
+
use ShortPixel\Controller\AdminNoticesController as AdminNoticesController;
|
6 |
+
use ShortPixel\Controller\QuotaController as QuotaController;
|
7 |
+
|
8 |
+
|
9 |
+
class QuotaNoticeReached extends \ShortPixel\Model\AdminNoticeModel
|
10 |
+
{
|
11 |
+
protected $key = 'MSG_QUOTA_REACHED';
|
12 |
+
protected $errorLevel = 'error';
|
13 |
+
|
14 |
+
|
15 |
+
public function load()
|
16 |
+
{
|
17 |
+
$this->callback = array(AdminNoticesController::getInstance(), 'proposeUpgradePopup');
|
18 |
+
parent::load();
|
19 |
+
}
|
20 |
+
|
21 |
+
protected function checkTrigger()
|
22 |
+
{
|
23 |
+
$quotaController = QuotaController::getInstance();
|
24 |
+
|
25 |
+
if ($quotaController->hasQuota() === true)
|
26 |
+
return false;
|
27 |
+
|
28 |
+
// $quotaData = $quotaController->getQuota();
|
29 |
+
|
30 |
+
$this->reset('MSG_UPGRADE_MONTH');
|
31 |
+
$this->reset('MSG_UPGRADE_BULK');
|
32 |
+
return true;
|
33 |
+
|
34 |
+
}
|
35 |
+
|
36 |
+
protected function getMessage()
|
37 |
+
{
|
38 |
+
$statsControl = StatsController::getInstance();
|
39 |
+
$averageCompression = $statsControl->getAverageCompression();
|
40 |
+
$quotaController = QuotaController::getInstance();
|
41 |
+
|
42 |
+
$keyControl = ApiKeyController::getInstance();
|
43 |
+
|
44 |
+
//$keyModel->loadKey();
|
45 |
+
|
46 |
+
$login_url = 'https://shortpixel.com/login/';
|
47 |
+
$friend_url = $login_url;
|
48 |
+
|
49 |
+
if ($keyControl->getKeyForDisplay())
|
50 |
+
{
|
51 |
+
$login_url .= $keyControl->getKeyForDisplay() . '/';
|
52 |
+
$friend_url = $login_url . 'tell-a-friend';
|
53 |
+
}
|
54 |
+
|
55 |
+
$message = '<div class="sp-quota-exceeded-alert" id="short-pixel-notice-exceed">';
|
56 |
+
|
57 |
+
if($averageCompression) {
|
58 |
+
|
59 |
+
$message .= '<div style="float:right;">
|
60 |
+
<div class="bulk-progress-indicator" style="height: 110px">
|
61 |
+
<div style="margin-bottom:5px">' . __('Average image<br>reduction until now:','shortpixel-image-optimiser') . '</div>
|
62 |
+
<div id="sp-avg-optimization"><input type="text" id="sp-avg-optimization-dial" value="' . round($averageCompression) . '" class="dial percentDial" data-dialsize="60"></div>
|
63 |
+
<script>
|
64 |
+
jQuery(function() {
|
65 |
+
if (ShortPixel)
|
66 |
+
{
|
67 |
+
ShortPixel.percentDial("#sp-avg-optimization-dial", 60);
|
68 |
+
}
|
69 |
+
});
|
70 |
+
</script>
|
71 |
+
</div>
|
72 |
+
</div>';
|
73 |
+
|
74 |
+
}
|
75 |
+
|
76 |
+
$message .= '<h3>' . __('Quota Exceeded','shortpixel-image-optimiser') . '</h3>';
|
77 |
+
|
78 |
+
$quota = $quotaController->getQuota();
|
79 |
+
|
80 |
+
$creditsUsed = number_format($quota->monthly->consumed + $quota->onetime->consumed);
|
81 |
+
$totalOptimized = $statsControl->find('total', 'images');
|
82 |
+
$totalImagesToOptimize = number_format($statsControl->totalImagesToOptimize());
|
83 |
+
|
84 |
+
$message .= '<p>' . sprintf(__('The plugin has optimized <strong>%s images</strong> and has been stopped because it has reached the available quota limit.','shortpixel-image-optimiser'),
|
85 |
+
$creditsUsed);
|
86 |
+
|
87 |
+
if($totalImagesToOptimize > 0) {
|
88 |
+
|
89 |
+
$message .= sprintf(__('<strong> %s images and thumbnails</strong> have not been optimized by ShortPixel yet.','shortpixel-image-optimiser'), $totalImagesToOptimize );
|
90 |
+
}
|
91 |
+
|
92 |
+
$message .= '</p>
|
93 |
+
<div>
|
94 |
+
<button class="button button-primary" type="button" id="shortpixel-upgrade-advice" onclick="ShortPixel.proposeUpgrade()" style="margin-right:10px;"><strong>' . __('Show me the best available options', 'shortpixel-image-optimiser') . '</strong></button>
|
95 |
+
<a class="button button-primary" href="' . $login_url . '"
|
96 |
+
title="' . __('Go to My Account and choose a plan','shortpixel-image-optimiser') . '" target="_blank" style="margin-right:10px;">
|
97 |
+
<strong>' . __('Upgrade','shortpixel-image-optimiser') . '</strong>
|
98 |
+
</a>
|
99 |
+
<button type="button" name="checkQuota" class="button" onclick="ShortPixel.checkQuota()">'. __('Confirm new credits','shortpixel-image-optimiser') . '</button>
|
100 |
+
</div>';
|
101 |
+
|
102 |
+
$message .= '</div>'; /// closing div
|
103 |
+
return $message;
|
104 |
+
}
|
105 |
+
|
106 |
+
}
|
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
namespace ShortPixel\Model\AdminNotices;
|
3 |
+
|
4 |
+
class SmartcropNotice extends \ShortPixel\Model\AdminNoticeModel
|
5 |
+
{
|
6 |
+
protected $key = 'MSG_FEATURE_SMARTCROP';
|
7 |
+
|
8 |
+
public function __construct()
|
9 |
+
{
|
10 |
+
$this->exclude_screens[] = 'settings_page_wp-shortpixel-settings';
|
11 |
+
parent::__construct();
|
12 |
+
}
|
13 |
+
|
14 |
+
protected function checkTrigger()
|
15 |
+
{
|
16 |
+
|
17 |
+
$settings = \wpSPIO()->settings();
|
18 |
+
|
19 |
+
if (! $settings->verifiedKey)
|
20 |
+
{
|
21 |
+
return false; // no key, no integrations.
|
22 |
+
}
|
23 |
+
|
24 |
+
if (\wpSPIO()->env()->has_nextgen && ! $settings->includeNextGen)
|
25 |
+
{
|
26 |
+
return true;
|
27 |
+
}
|
28 |
+
|
29 |
+
return false;
|
30 |
+
}
|
31 |
+
|
32 |
+
protected function getMessage()
|
33 |
+
{
|
34 |
+
$link = 'https://shortpixel.com/knowledge-base/article/182-what-is-smart-cropping';
|
35 |
+
$link2 = 'https://shortpixel.com/blog/how-to-smart-crop-wordpress-images/#how-to-crop-wordpress-images-automatically-smart-solution';
|
36 |
+
$link3 = esc_url(admin_url('options-general.php?page=wp-shortpixel-settings'));
|
37 |
+
|
38 |
+
$message = sprintf(__('%s With ShortPixel you can now %ssmartly crop%s thumbnails on your website. This is especially useful for eCommerce websites %s(read more)%s. %s %s Enable the option on the %sShortPixel Settings%s page. %s', 'shortpixel-image-optimiser'),
|
39 |
+
'<p>' ,
|
40 |
+
'<a href="' . $link . '" target="_blank">', '</a>',
|
41 |
+
'<a href="' . $link2 . '" target="_blank">', '</a>',
|
42 |
+
'</p>', '<p>',
|
43 |
+
'<a href="' . $link3 . '" >', '</a>',
|
44 |
+
'</p>'
|
45 |
+
);
|
46 |
+
return $message;
|
47 |
+
|
48 |
+
}
|
49 |
+
}
|
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
namespace ShortPixel\Model\AdminNotices;
|
3 |
+
|
4 |
+
class UnlistedNotice extends \ShortPixel\Model\AdminNoticeModel
|
5 |
+
{
|
6 |
+
|
7 |
+
protected $key = 'MSG_UNLISTED_FOUND';
|
8 |
+
|
9 |
+
protected function checkTrigger()
|
10 |
+
{
|
11 |
+
return false;
|
12 |
+
}
|
13 |
+
|
14 |
+
// @todo This message is not properly stringF'ed.
|
15 |
+
protected function getMessage()
|
16 |
+
{
|
17 |
+
$settings = \wpSPIO()->settings();
|
18 |
+
|
19 |
+
//$unlisted = isset($settings->currentStats['foundUnlistedThumbs']) ? $settings->currentStats['foundUnlistedThumbs'] : null;
|
20 |
+
$unlisted_id = $this->getData('id');
|
21 |
+
$unlisted_name = $this->getData('name');
|
22 |
+
$unlistedFiles = (is_array($this->getData('filelist'))) ? $this->getData('filelist') : array();
|
23 |
+
|
24 |
+
$admin_url = esc_url(admin_url('options-general.php?page=wp-shortpixel-settings&part=adv-settings'));
|
25 |
+
|
26 |
+
|
27 |
+
$message = __("<p>ShortPixel has found thumbnails that are not registered in the metadata, but are present alongside the other thumbnails. These thumbnails could be created and needed by a plugin or the theme. Let ShortPixel optimize them too?</p>", 'shortpixel-image-optimiser');
|
28 |
+
$message .= '<p>' . __("For example, the image", 'shortpixel-image-optimiser') . '
|
29 |
+
<a href="post.php?post=' . $unlisted_id . '&action=edit" target="_blank">
|
30 |
+
' . $unlisted_name . '
|
31 |
+
</a> also has these thumbnails that are not listed in the metadata: ' . (implode(', ', $unlistedFiles)) . '
|
32 |
+
</p>';
|
33 |
+
|
34 |
+
$message .= '<p>' . sprintf(__('You can enable optimizing %s Unlisted Images %s in the %s settings %s', 'shortpixel-image-optimiser'), '<b>', '</b>', '<a href="'. $admin_url . '">','</a>') . '</p>';
|
35 |
+
|
36 |
+
return $message;
|
37 |
+
|
38 |
+
}
|
39 |
+
}
|
@@ -224,8 +224,6 @@ class EnvironmentModel extends \ShortPixel\Model
|
|
224 |
$this->has_nextgen = $ng->has_nextgen();
|
225 |
}
|
226 |
|
227 |
-
|
228 |
-
|
229 |
//set default move as "list". only set once, it won't try to set the default mode again.
|
230 |
public function setDefaultViewModeList()
|
231 |
{
|
224 |
$this->has_nextgen = $ng->has_nextgen();
|
225 |
}
|
226 |
|
|
|
|
|
227 |
//set default move as "list". only set once, it won't try to set the default mode again.
|
228 |
public function setDefaultViewModeList()
|
229 |
{
|
@@ -32,7 +32,7 @@ class DirectoryModel extends \ShortPixel\Model
|
|
32 |
*/
|
33 |
public function __construct($path)
|
34 |
{
|
35 |
-
|
36 |
$fs = \wpSPIO()->filesystem();
|
37 |
|
38 |
if ($fs->pathIsUrl($path))
|
32 |
*/
|
33 |
public function __construct($path)
|
34 |
{
|
35 |
+
//$path = wp_normalize_path($path);
|
36 |
$fs = \wpSPIO()->filesystem();
|
37 |
|
38 |
if ($fs->pathIsUrl($path))
|
@@ -17,6 +17,7 @@ class FileModel extends \ShortPixel\Model
|
|
17 |
|
18 |
// File info
|
19 |
protected $fullpath = null;
|
|
|
20 |
protected $filename = null; // filename + extension
|
21 |
protected $filebase = null; // filename without extension
|
22 |
protected $directory = null;
|
@@ -42,6 +43,7 @@ class FileModel extends \ShortPixel\Model
|
|
42 |
public function __construct($path)
|
43 |
{
|
44 |
$this->fullpath = trim($path);
|
|
|
45 |
$fs = \wpSPIO()->filesystem();
|
46 |
if ($fs->pathIsUrl($path)) // Asap check for URL's to prevent remote wrappers from running.
|
47 |
{
|
@@ -382,7 +384,7 @@ class FileModel extends \ShortPixel\Model
|
|
382 |
// So far, testing use for file Filter */
|
383 |
public function getRawFullPath()
|
384 |
{
|
385 |
-
return $this->
|
386 |
}
|
387 |
|
388 |
public function getFileName()
|
@@ -479,7 +481,7 @@ class FileModel extends \ShortPixel\Model
|
|
479 |
if ($path === false) // don't process further
|
480 |
return false;
|
481 |
|
482 |
-
|
483 |
$abspath = $fs->getWPAbsPath();
|
484 |
|
485 |
if ( is_file($path) && ! is_dir($path) ) // if path and file exist, all should be okish.
|
17 |
|
18 |
// File info
|
19 |
protected $fullpath = null;
|
20 |
+
protected $rawfullpath = null;
|
21 |
protected $filename = null; // filename + extension
|
22 |
protected $filebase = null; // filename without extension
|
23 |
protected $directory = null;
|
43 |
public function __construct($path)
|
44 |
{
|
45 |
$this->fullpath = trim($path);
|
46 |
+
$this->rawfullpath = $this->fullpath;
|
47 |
$fs = \wpSPIO()->filesystem();
|
48 |
if ($fs->pathIsUrl($path)) // Asap check for URL's to prevent remote wrappers from running.
|
49 |
{
|
384 |
// So far, testing use for file Filter */
|
385 |
public function getRawFullPath()
|
386 |
{
|
387 |
+
return $this->rawfullpath;
|
388 |
}
|
389 |
|
390 |
public function getFileName()
|
481 |
if ($path === false) // don't process further
|
482 |
return false;
|
483 |
|
484 |
+
// $path = wp_normalize_path($path);
|
485 |
$abspath = $fs->getWPAbsPath();
|
486 |
|
487 |
if ( is_file($path) && ! is_dir($path) ) // if path and file exist, all should be okish.
|
@@ -2,6 +2,7 @@
|
|
2 |
namespace ShortPixel\Model\Image;
|
3 |
use ShortPixel\ShortpixelLogger\ShortPixelLogger as Log;
|
4 |
use ShortPixel\Controller\OptimizeController as OptimizeController;
|
|
|
5 |
|
6 |
use ShortPixel\Controller\ApiController as API;
|
7 |
|
@@ -208,11 +209,17 @@ class CustomImageModel extends \ShortPixel\Model\Image\ImageModel
|
|
208 |
|
209 |
}
|
210 |
|
211 |
-
public function restore()
|
212 |
{
|
213 |
do_action('shortpixel_before_restore_image', $this->get('id'));
|
214 |
do_action('shortpixel/image/before_restore', $this);
|
215 |
|
|
|
|
|
|
|
|
|
|
|
|
|
216 |
$bool = parent::restore();
|
217 |
|
218 |
$return = true;
|
@@ -238,7 +245,10 @@ class CustomImageModel extends \ShortPixel\Model\Image\ImageModel
|
|
238 |
$return = false;
|
239 |
}
|
240 |
|
241 |
-
$
|
|
|
|
|
|
|
242 |
do_action('shortpixel/image/after_restore', $this, $this->id, $bool);
|
243 |
|
244 |
return $return;
|
@@ -329,10 +339,10 @@ class CustomImageModel extends \ShortPixel\Model\Image\ImageModel
|
|
329 |
|
330 |
//$metaObj->has_backup = (intval($imagerow->backup) == 1) ? true : false;
|
331 |
|
332 |
-
$addedDate =
|
333 |
$metaObj->tsAdded = $addedDate;
|
334 |
|
335 |
-
$optimizedDate =
|
336 |
$metaObj->tsOptimized = $optimizedDate;
|
337 |
|
338 |
$extraInfo = property_exists($imagerow, 'extra_info') ? $imagerow->extra_info : null;
|
@@ -480,8 +490,8 @@ class CustomImageModel extends \ShortPixel\Model\Image\ImageModel
|
|
480 |
'status' => $metaObj->status,
|
481 |
'retries' => 0, // this is unused / legacy
|
482 |
'message' => $message, // this is used for improvement line.
|
483 |
-
'ts_added' =>
|
484 |
-
'ts_optimized' =>
|
485 |
'path' => $this->getFullPath(),
|
486 |
'name' => $this->getFileName(),
|
487 |
'path_md5' => md5($this->getFullPath()), // this is legacy
|
2 |
namespace ShortPixel\Model\Image;
|
3 |
use ShortPixel\ShortpixelLogger\ShortPixelLogger as Log;
|
4 |
use ShortPixel\Controller\OptimizeController as OptimizeController;
|
5 |
+
use ShortPixel\Helper\UtilHelper as UtilHelper;
|
6 |
|
7 |
use ShortPixel\Controller\ApiController as API;
|
8 |
|
209 |
|
210 |
}
|
211 |
|
212 |
+
public function restore($args = array())
|
213 |
{
|
214 |
do_action('shortpixel_before_restore_image', $this->get('id'));
|
215 |
do_action('shortpixel/image/before_restore', $this);
|
216 |
|
217 |
+
$defaults = array(
|
218 |
+
'keep_in_queue' => false, // used for bulk restore.
|
219 |
+
);
|
220 |
+
|
221 |
+
$args = wp_parse_args($args, $defaults);
|
222 |
+
|
223 |
$bool = parent::restore();
|
224 |
|
225 |
$return = true;
|
245 |
$return = false;
|
246 |
}
|
247 |
|
248 |
+
if ($args['keep_in_queue'] === false)
|
249 |
+
{
|
250 |
+
$this->dropFromQueue();
|
251 |
+
}
|
252 |
do_action('shortpixel/image/after_restore', $this, $this->id, $bool);
|
253 |
|
254 |
return $return;
|
339 |
|
340 |
//$metaObj->has_backup = (intval($imagerow->backup) == 1) ? true : false;
|
341 |
|
342 |
+
$addedDate = UtilHelper::DBtoTimestamp($imagerow->ts_added);
|
343 |
$metaObj->tsAdded = $addedDate;
|
344 |
|
345 |
+
$optimizedDate = UtilHelper::DBtoTimestamp($imagerow->ts_optimized);
|
346 |
$metaObj->tsOptimized = $optimizedDate;
|
347 |
|
348 |
$extraInfo = property_exists($imagerow, 'extra_info') ? $imagerow->extra_info : null;
|
490 |
'status' => $metaObj->status,
|
491 |
'retries' => 0, // this is unused / legacy
|
492 |
'message' => $message, // this is used for improvement line.
|
493 |
+
'ts_added' => UtiHelper::timestampToDB($metaObj->tsAdded),
|
494 |
+
'ts_optimized' => UtilHelper::timestampToDB($metaObj->tsOptimized),
|
495 |
'path' => $this->getFullPath(),
|
496 |
'name' => $this->getFileName(),
|
497 |
'path_md5' => md5($this->getFullPath()), // this is legacy
|
@@ -5,7 +5,8 @@ use ShortPixel\ShortpixelLogger\ShortPixelLogger as Log;
|
|
5 |
use ShortPixel\Controller\ResponseController as ResponseController;
|
6 |
use ShortPixel\Controller\ApiController as API;
|
7 |
|
8 |
-
use
|
|
|
9 |
/* ImageModel class.
|
10 |
*
|
11 |
*
|
@@ -143,6 +144,11 @@ abstract class ImageModel extends \ShortPixel\Model\File\FileModel
|
|
143 |
{
|
144 |
$settings = \WPSPIO()->settings();
|
145 |
|
|
|
|
|
|
|
|
|
|
|
146 |
// Pdf, no special files.
|
147 |
if ($this->getExtension() == 'pdf')
|
148 |
return false;
|
@@ -631,10 +637,6 @@ abstract class ImageModel extends \ShortPixel\Model\File\FileModel
|
|
631 |
$this->setMeta('resize', false);
|
632 |
}
|
633 |
|
634 |
-
|
635 |
-
/*if ($tempFile)
|
636 |
-
$tempFile->delete();
|
637 |
-
*/
|
638 |
if (isset($wasHeic) && $wasHeic == true)
|
639 |
{
|
640 |
$heicFile = $fs->getFile($heicPath);
|
@@ -643,8 +645,6 @@ abstract class ImageModel extends \ShortPixel\Model\File\FileModel
|
|
643 |
$heicFile->delete(); // the original heic -file should not linger in uploads.
|
644 |
}
|
645 |
}
|
646 |
-
|
647 |
-
|
648 |
}
|
649 |
else
|
650 |
{
|
5 |
use ShortPixel\Controller\ResponseController as ResponseController;
|
6 |
use ShortPixel\Controller\ApiController as API;
|
7 |
|
8 |
+
use Shortpixel\Model\File\FileModel as FileModel;
|
9 |
+
use ShortPixel\Model\AccessModel as AccessModel;
|
10 |
/* ImageModel class.
|
11 |
*
|
12 |
*
|
144 |
{
|
145 |
$settings = \WPSPIO()->settings();
|
146 |
|
147 |
+
if ( AccessModel::getInstance()->isFeatureAvailable($type) === false)
|
148 |
+
{
|
149 |
+
return false;
|
150 |
+
}
|
151 |
+
|
152 |
// Pdf, no special files.
|
153 |
if ($this->getExtension() == 'pdf')
|
154 |
return false;
|
637 |
$this->setMeta('resize', false);
|
638 |
}
|
639 |
|
|
|
|
|
|
|
|
|
640 |
if (isset($wasHeic) && $wasHeic == true)
|
641 |
{
|
642 |
$heicFile = $fs->getFile($heicPath);
|
645 |
$heicFile->delete(); // the original heic -file should not linger in uploads.
|
646 |
}
|
647 |
}
|
|
|
|
|
648 |
}
|
649 |
else
|
650 |
{
|
@@ -8,6 +8,7 @@ use ShortPixel\Controller\OptimizeController as OptimizeController;
|
|
8 |
use ShortPixel\Controller\QuotaController as QuotaController;
|
9 |
|
10 |
use ShortPixel\Helper\InstallHelper as InstallHelper;
|
|
|
11 |
|
12 |
class MediaLibraryModel extends \ShortPixel\Model\Image\MediaLibraryThumbnailModel
|
13 |
{
|
@@ -33,6 +34,8 @@ class MediaLibraryModel extends \ShortPixel\Model\Image\MediaLibraryThumbnailMod
|
|
33 |
|
34 |
private $optimizeData; // cache to prevent running this more than once per run.
|
35 |
|
|
|
|
|
36 |
|
37 |
public function __construct($post_id, $path)
|
38 |
{
|
@@ -49,7 +52,10 @@ class MediaLibraryModel extends \ShortPixel\Model\Image\MediaLibraryThumbnailMod
|
|
49 |
}
|
50 |
|
51 |
if (! $this->isExtensionExcluded())
|
52 |
-
|
|
|
|
|
|
|
53 |
|
54 |
}
|
55 |
|
@@ -87,27 +93,21 @@ class MediaLibraryModel extends \ShortPixel\Model\Image\MediaLibraryThumbnailMod
|
|
87 |
$isSmartCrop = ($settings->useSmartcrop == true && $this->getExtension() !== 'pdf') ? true : false;
|
88 |
$doubles = array(); // check via hash if same command / result is there.
|
89 |
|
90 |
-
// Use URL of biggest image.
|
91 |
-
/*if ($isSmartCrop === true && $this->isScaled())
|
92 |
-
{
|
93 |
-
$url = $this->getOriginalFile()->getURL();
|
94 |
-
} */
|
95 |
-
|
96 |
if ($this->isProcessable(true) || ($this->isProcessableAnyFileType() && $this->isOptimized()) )
|
97 |
{
|
98 |
$paramList = $this->createParamList();
|
99 |
-
$parameters['urls'][
|
100 |
-
$parameters['paths'][
|
101 |
-
$parameters['params'][
|
102 |
-
$parameters['returnParams']['sizes'][
|
103 |
|
104 |
if ($isSmartCrop)
|
105 |
{
|
106 |
-
$parameters['returnParams']['fileSizes'][
|
107 |
}
|
108 |
|
109 |
$hash = md5( serialize($paramList) . $url);
|
110 |
-
$doubles[$hash] =
|
111 |
}
|
112 |
|
113 |
$thumbObjs = $this->getThumbObjects();
|
@@ -130,7 +130,7 @@ class MediaLibraryModel extends \ShortPixel\Model\Image\MediaLibraryThumbnailMod
|
|
130 |
{
|
131 |
$doubleName = $doubles[$hash];
|
132 |
|
133 |
-
if (
|
134 |
{
|
135 |
$compareObj = $this;
|
136 |
}
|
@@ -148,7 +148,7 @@ class MediaLibraryModel extends \ShortPixel\Model\Image\MediaLibraryThumbnailMod
|
|
148 |
$aDuplicate = false;
|
149 |
foreach($parameters['returnParams']['doubles'] as $doubleNameInDoubles => $unneeded)
|
150 |
{
|
151 |
-
if ($doubleNameInDoubles !==
|
152 |
{
|
153 |
$aDuplicate = true;
|
154 |
$parameters['returnParams']['duplicates'][$name] = $doubleNameInDoubles;
|
@@ -204,10 +204,6 @@ class MediaLibraryModel extends \ShortPixel\Model\Image\MediaLibraryThumbnailMod
|
|
204 |
$this->optimizeData = null;
|
205 |
}
|
206 |
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
// Try to get the URL via WordPress
|
212 |
// This is now officially a heavy function. Take times, other plugins (like s3) might really delay it
|
213 |
public function getURL()
|
@@ -216,7 +212,6 @@ class MediaLibraryModel extends \ShortPixel\Model\Image\MediaLibraryThumbnailMod
|
|
216 |
return $url;
|
217 |
}
|
218 |
|
219 |
-
|
220 |
public function getWPMetaData()
|
221 |
{
|
222 |
if (is_null($this->wp_metadata))
|
@@ -315,21 +310,21 @@ class MediaLibraryModel extends \ShortPixel\Model\Image\MediaLibraryThumbnailMod
|
|
315 |
if (! \wpSPIO()->settings()->optimizeRetina)
|
316 |
return;
|
317 |
|
318 |
-
if (! isset($this->retinas[
|
319 |
{
|
320 |
$main = $this->getRetina();
|
321 |
|
322 |
if ($main)
|
323 |
{
|
324 |
-
$this->retinas[
|
325 |
}
|
326 |
}
|
327 |
|
328 |
-
if ($this->isScaled() && ! isset($this->retinas[
|
329 |
{
|
330 |
$retscaled = $this->original_file->getRetina();
|
331 |
if ($retscaled)
|
332 |
-
$this->retinas[
|
333 |
}
|
334 |
|
335 |
foreach ($this->thumbnails as $thumbname => $thumbObj)
|
@@ -350,7 +345,7 @@ class MediaLibraryModel extends \ShortPixel\Model\Image\MediaLibraryThumbnailMod
|
|
350 |
|
351 |
$main = $this->getWebp();
|
352 |
if ($main)
|
353 |
-
$webps[
|
354 |
|
355 |
foreach($this->thumbnails as $thumbname => $thumbObj)
|
356 |
{
|
@@ -372,7 +367,7 @@ class MediaLibraryModel extends \ShortPixel\Model\Image\MediaLibraryThumbnailMod
|
|
372 |
{
|
373 |
$webp = $this->original_file->getWebp();
|
374 |
if ($webp)
|
375 |
-
$webps[
|
376 |
}
|
377 |
|
378 |
return $webps;
|
@@ -384,7 +379,7 @@ class MediaLibraryModel extends \ShortPixel\Model\Image\MediaLibraryThumbnailMod
|
|
384 |
$main = $this->getAvif();
|
385 |
|
386 |
if ($main)
|
387 |
-
$avifs[
|
388 |
|
389 |
foreach($this->thumbnails as $thumbname => $thumbObj)
|
390 |
{
|
@@ -407,7 +402,7 @@ class MediaLibraryModel extends \ShortPixel\Model\Image\MediaLibraryThumbnailMod
|
|
407 |
{
|
408 |
$avif = $this->original_file->getAvif();
|
409 |
if ($avif)
|
410 |
-
$avifs[
|
411 |
}
|
412 |
|
413 |
return $avifs;
|
@@ -454,8 +449,8 @@ class MediaLibraryModel extends \ShortPixel\Model\Image\MediaLibraryThumbnailMod
|
|
454 |
|
455 |
$optimized = array();
|
456 |
|
457 |
-
// Main file has a
|
458 |
-
$mainFile = (isset($files) && isset($files[
|
459 |
|
460 |
if (! $this->isOptimized() && isset($mainFile['img']) ) // main file might not be contained in results
|
461 |
{
|
@@ -512,7 +507,7 @@ class MediaLibraryModel extends \ShortPixel\Model\Image\MediaLibraryThumbnailMod
|
|
512 |
continue;
|
513 |
}
|
514 |
|
515 |
-
if (
|
516 |
{
|
517 |
continue;
|
518 |
}
|
@@ -520,6 +515,9 @@ class MediaLibraryModel extends \ShortPixel\Model\Image\MediaLibraryThumbnailMod
|
|
520 |
$resultObj = $files[$sizeName];
|
521 |
$thumbnail = $thumbObjs[$sizeName];
|
522 |
|
|
|
|
|
|
|
523 |
$thumbnail->handleOptimizedFileType($resultObj); // check for webps /etc
|
524 |
|
525 |
if ($thumbnail->isOptimized())
|
@@ -769,7 +767,7 @@ class MediaLibraryModel extends \ShortPixel\Model\Image\MediaLibraryThumbnailMod
|
|
769 |
$orMeta->fromClass($metadata->original_file);
|
770 |
}
|
771 |
$orFile->setMetaObj($orMeta);
|
772 |
-
$orFile->setName(
|
773 |
$this->original_file = $orFile;
|
774 |
}
|
775 |
|
@@ -863,8 +861,8 @@ class MediaLibraryModel extends \ShortPixel\Model\Image\MediaLibraryThumbnailMod
|
|
863 |
$data->originalSize = $record->original_size;
|
864 |
|
865 |
// @todo This needs to be Mysql TimeStamp -> Unix TS-ilized.
|
866 |
-
$data->tsAdded =
|
867 |
-
$data->tsOptimized =
|
868 |
|
869 |
// [...]
|
870 |
$extra_info = json_decode($record->extra_info);
|
@@ -884,7 +882,7 @@ class MediaLibraryModel extends \ShortPixel\Model\Image\MediaLibraryThumbnailMod
|
|
884 |
}
|
885 |
elseif ($record->parent == 0 && $record->image_type = self::IMAGE_TYPE_RETINA)
|
886 |
{
|
887 |
-
$metadata->retinas[
|
888 |
}
|
889 |
elseif($record->parent > 0) // Thumbnails
|
890 |
{
|
@@ -968,8 +966,8 @@ class MediaLibraryModel extends \ShortPixel\Model\Image\MediaLibraryThumbnailMod
|
|
968 |
'compression_type' => $data->compressionType,
|
969 |
'compressed_size' => $data->compressedSize,
|
970 |
'original_size' => $data->originalSize,
|
971 |
-
'tsAdded' =>
|
972 |
-
'tsOptimized' =>
|
973 |
);
|
974 |
|
975 |
unset($data->status);
|
@@ -1394,7 +1392,6 @@ class MediaLibraryModel extends \ShortPixel\Model\Image\MediaLibraryThumbnailMod
|
|
1394 |
} // convertPNG
|
1395 |
|
1396 |
|
1397 |
-
// Perhaps treat this as thumbnail? And remove function from FileSystemController?
|
1398 |
protected function setOriginalFile()
|
1399 |
{
|
1400 |
$fs = \wpSPIO()->filesystem();
|
@@ -1403,7 +1400,7 @@ class MediaLibraryModel extends \ShortPixel\Model\Image\MediaLibraryThumbnailMod
|
|
1403 |
return false;
|
1404 |
|
1405 |
$originalFile = $fs->getOriginalImage($this->id);
|
1406 |
-
$originalFile->setName(
|
1407 |
$originalFile->setImageType(self::IMAGE_TYPE_ORIGINAL);
|
1408 |
|
1409 |
if ($originalFile->exists() && $originalFile->getFullPath() !== $this->getfullPath() )
|
@@ -1835,27 +1832,6 @@ class MediaLibraryModel extends \ShortPixel\Model\Image\MediaLibraryThumbnailMod
|
|
1835 |
|
1836 |
}
|
1837 |
|
1838 |
-
/* if ($this->isScaled())
|
1839 |
-
{
|
1840 |
-
|
1841 |
-
$originalFile = $this->getOriginalFile();
|
1842 |
-
|
1843 |
-
if ($originalFile->hasBackup())
|
1844 |
-
{
|
1845 |
-
$backupFile = $originalFile->getBackupFile();
|
1846 |
-
$backupFile->delete();
|
1847 |
-
|
1848 |
-
$backupFileJPG = $fs->getFile($backupFile->getFileDir() . $backupFile->getFileBase() . '.jpg');
|
1849 |
-
if ($backupFileJPG->exists())
|
1850 |
-
{
|
1851 |
-
$backupFileJPG->delete();
|
1852 |
-
}
|
1853 |
-
}
|
1854 |
-
|
1855 |
-
$toRemove[] = $originalFile;
|
1856 |
-
|
1857 |
-
} */
|
1858 |
-
|
1859 |
// Fullpath now will still be .jpg
|
1860 |
// PNGconvert is first, because some plugins check for _attached_file metadata and prevent deleting files if still connected to media library. Exmaple: polylang.
|
1861 |
$pngConvert = new ShortPixelPng2Jpg();
|
@@ -1925,7 +1901,7 @@ class MediaLibraryModel extends \ShortPixel\Model\Image\MediaLibraryThumbnailMod
|
|
1925 |
}
|
1926 |
if ($this->isScaled())
|
1927 |
{
|
1928 |
-
$objects[
|
1929 |
}
|
1930 |
|
1931 |
return $objects;
|
@@ -2434,15 +2410,55 @@ class MediaLibraryModel extends \ShortPixel\Model\Image\MediaLibraryThumbnailMod
|
|
2434 |
|
2435 |
}
|
2436 |
|
2437 |
-
|
|
|
2438 |
{
|
|
|
|
|
|
|
2439 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2440 |
}
|
2441 |
|
2442 |
/** Adds Unlisted Image to the Media Library Item
|
2443 |
* This function is called in IsProcessable
|
2444 |
*/
|
2445 |
-
protected function addUnlisted()
|
2446 |
{
|
2447 |
// Setting must be active.
|
2448 |
/*if (! \wpSPIO()->settings()->optimizeUnlisted )
|
@@ -2451,7 +2467,7 @@ class MediaLibraryModel extends \ShortPixel\Model\Image\MediaLibraryThumbnailMod
|
|
2451 |
$searchUnlisted = \wpSPIO()->settings()->optimizeUnlisted;
|
2452 |
|
2453 |
// Don't check this more than once per run-time.
|
2454 |
-
if ( in_array($this->get('id'), self::$unlistedChecked ))
|
2455 |
{
|
2456 |
return;
|
2457 |
}
|
@@ -2483,7 +2499,7 @@ class MediaLibraryModel extends \ShortPixel\Model\Image\MediaLibraryThumbnailMod
|
|
2483 |
}
|
2484 |
|
2485 |
// if all have nothing to do, do nothing.
|
2486 |
-
if ($searchUnlisted == false && count($searchSuffixes) == 0 && count($searchInfixes) == 0)
|
2487 |
{
|
2488 |
self::$unlistedChecked[] = $this->get('id');
|
2489 |
return;
|
@@ -2516,7 +2532,6 @@ class MediaLibraryModel extends \ShortPixel\Model\Image\MediaLibraryThumbnailMod
|
|
2516 |
$all_files = scandir($this->getFileDir(), SCANDIR_SORT_NONE);
|
2517 |
$all_files = array_diff($all_files, $currentFiles);
|
2518 |
|
2519 |
-
|
2520 |
foreach($processFiles as $mediaItem)
|
2521 |
{
|
2522 |
|
@@ -2524,7 +2539,7 @@ class MediaLibraryModel extends \ShortPixel\Model\Image\MediaLibraryThumbnailMod
|
|
2524 |
$ext = $mediaItem->getExtension();
|
2525 |
$path = (string) $mediaItem->getFileDir();
|
2526 |
|
2527 |
-
if ($searchUnlisted)
|
2528 |
{
|
2529 |
$pattern = '/^' . preg_quote($base, '/') . '-\d+x\d+\.'. $ext .'/';
|
2530 |
$thumbs = array();
|
@@ -2576,6 +2591,12 @@ class MediaLibraryModel extends \ShortPixel\Model\Image\MediaLibraryThumbnailMod
|
|
2576 |
|
2577 |
// Quality check on the thumbs. Must exist, must be same extension.
|
2578 |
$added = false;
|
|
|
|
|
|
|
|
|
|
|
|
|
2579 |
foreach($unlisted as $unName)
|
2580 |
{
|
2581 |
if (isset($this->thumbnails[$unName]))
|
8 |
use ShortPixel\Controller\QuotaController as QuotaController;
|
9 |
|
10 |
use ShortPixel\Helper\InstallHelper as InstallHelper;
|
11 |
+
use ShortPixel\Helper\UtilHelper as UtilHelper;
|
12 |
|
13 |
class MediaLibraryModel extends \ShortPixel\Model\Image\MediaLibraryThumbnailModel
|
14 |
{
|
34 |
|
35 |
private $optimizeData; // cache to prevent running this more than once per run.
|
36 |
|
37 |
+
private $mainImageKey = 'shortpixel_main_donotuse';
|
38 |
+
private $originalImageKey = 'shortpixel_original_donotuse';
|
39 |
|
40 |
public function __construct($post_id, $path)
|
41 |
{
|
52 |
}
|
53 |
|
54 |
if (! $this->isExtensionExcluded())
|
55 |
+
{
|
56 |
+
$this->loadMeta();
|
57 |
+
$this->checkUnlistedForNotice();
|
58 |
+
}
|
59 |
|
60 |
}
|
61 |
|
93 |
$isSmartCrop = ($settings->useSmartcrop == true && $this->getExtension() !== 'pdf') ? true : false;
|
94 |
$doubles = array(); // check via hash if same command / result is there.
|
95 |
|
|
|
|
|
|
|
|
|
|
|
|
|
96 |
if ($this->isProcessable(true) || ($this->isProcessableAnyFileType() && $this->isOptimized()) )
|
97 |
{
|
98 |
$paramList = $this->createParamList();
|
99 |
+
$parameters['urls'][$this->mainImageKey] = $url;
|
100 |
+
$parameters['paths'][$this->mainImageKey] = $this->getFullPath();
|
101 |
+
$parameters['params'][$this->mainImageKey] = $paramList;
|
102 |
+
$parameters['returnParams']['sizes'][$this->mainImageKey] = $this->getFileName();
|
103 |
|
104 |
if ($isSmartCrop)
|
105 |
{
|
106 |
+
$parameters['returnParams']['fileSizes'][$this->mainImageKey] = $this->getFileSize();
|
107 |
}
|
108 |
|
109 |
$hash = md5( serialize($paramList) . $url);
|
110 |
+
$doubles[$hash] = $this->mainImageKey;
|
111 |
}
|
112 |
|
113 |
$thumbObjs = $this->getThumbObjects();
|
130 |
{
|
131 |
$doubleName = $doubles[$hash];
|
132 |
|
133 |
+
if ($doubleName === $this->mainImageKey)
|
134 |
{
|
135 |
$compareObj = $this;
|
136 |
}
|
148 |
$aDuplicate = false;
|
149 |
foreach($parameters['returnParams']['doubles'] as $doubleNameInDoubles => $unneeded)
|
150 |
{
|
151 |
+
if ($doubleNameInDoubles !== $this->mainImageKey && $doubleNameInDoubles !== $this->originalImageKey && $thumbObjs[$doubleNameInDoubles]->getFileName() == $thumbObj->getFileName())
|
152 |
{
|
153 |
$aDuplicate = true;
|
154 |
$parameters['returnParams']['duplicates'][$name] = $doubleNameInDoubles;
|
204 |
$this->optimizeData = null;
|
205 |
}
|
206 |
|
|
|
|
|
|
|
|
|
207 |
// Try to get the URL via WordPress
|
208 |
// This is now officially a heavy function. Take times, other plugins (like s3) might really delay it
|
209 |
public function getURL()
|
212 |
return $url;
|
213 |
}
|
214 |
|
|
|
215 |
public function getWPMetaData()
|
216 |
{
|
217 |
if (is_null($this->wp_metadata))
|
310 |
if (! \wpSPIO()->settings()->optimizeRetina)
|
311 |
return;
|
312 |
|
313 |
+
if (! isset($this->retinas[$this->mainImageKey]))
|
314 |
{
|
315 |
$main = $this->getRetina();
|
316 |
|
317 |
if ($main)
|
318 |
{
|
319 |
+
$this->retinas[$this->mainImageKey] = $main; // on purpose not a string, but number to prevent any custom image sizes to get overwritten.
|
320 |
}
|
321 |
}
|
322 |
|
323 |
+
if ($this->isScaled() && ! isset($this->retinas[$this->originalImageKey]))
|
324 |
{
|
325 |
$retscaled = $this->original_file->getRetina();
|
326 |
if ($retscaled)
|
327 |
+
$this->retinas[$this->originalImageKey] = $retscaled; //see main
|
328 |
}
|
329 |
|
330 |
foreach ($this->thumbnails as $thumbname => $thumbObj)
|
345 |
|
346 |
$main = $this->getWebp();
|
347 |
if ($main)
|
348 |
+
$webps[$this->mainImageKey] = $main; // on purpose not a string, but number to prevent any custom image sizes to get overwritten.
|
349 |
|
350 |
foreach($this->thumbnails as $thumbname => $thumbObj)
|
351 |
{
|
367 |
{
|
368 |
$webp = $this->original_file->getWebp();
|
369 |
if ($webp)
|
370 |
+
$webps[$this->originalImageKey] = $webp; //see main
|
371 |
}
|
372 |
|
373 |
return $webps;
|
379 |
$main = $this->getAvif();
|
380 |
|
381 |
if ($main)
|
382 |
+
$avifs[$this->mainImageKey] = $main; // on purpose not a string, but number to prevent any custom image sizes to get overwritten.
|
383 |
|
384 |
foreach($this->thumbnails as $thumbname => $thumbObj)
|
385 |
{
|
402 |
{
|
403 |
$avif = $this->original_file->getAvif();
|
404 |
if ($avif)
|
405 |
+
$avifs[$this->originalImageKey] = $avif; //see main
|
406 |
}
|
407 |
|
408 |
return $avifs;
|
449 |
|
450 |
$optimized = array();
|
451 |
|
452 |
+
// Main file has a index.
|
453 |
+
$mainFile = (isset($files) && isset($files[$this->mainImageKey])) ? $files[$this->mainImageKey] : false;
|
454 |
|
455 |
if (! $this->isOptimized() && isset($mainFile['img']) ) // main file might not be contained in results
|
456 |
{
|
507 |
continue;
|
508 |
}
|
509 |
|
510 |
+
if ($sizeName === $this->mainImageKey)
|
511 |
{
|
512 |
continue;
|
513 |
}
|
515 |
$resultObj = $files[$sizeName];
|
516 |
$thumbnail = $thumbObjs[$sizeName];
|
517 |
|
518 |
+
//Log::addTemp('Handle Optimize thumbnail', $thumbnail);
|
519 |
+
//Log::add
|
520 |
+
|
521 |
$thumbnail->handleOptimizedFileType($resultObj); // check for webps /etc
|
522 |
|
523 |
if ($thumbnail->isOptimized())
|
767 |
$orMeta->fromClass($metadata->original_file);
|
768 |
}
|
769 |
$orFile->setMetaObj($orMeta);
|
770 |
+
$orFile->setName($this->originalImageKey);
|
771 |
$this->original_file = $orFile;
|
772 |
}
|
773 |
|
861 |
$data->originalSize = $record->original_size;
|
862 |
|
863 |
// @todo This needs to be Mysql TimeStamp -> Unix TS-ilized.
|
864 |
+
$data->tsAdded = UtilHelper::DBtoTimestamp($record->tsAdded);
|
865 |
+
$data->tsOptimized = UtilHelper::DBtoTimestamp($record->tsOptimized);
|
866 |
|
867 |
// [...]
|
868 |
$extra_info = json_decode($record->extra_info);
|
882 |
}
|
883 |
elseif ($record->parent == 0 && $record->image_type = self::IMAGE_TYPE_RETINA)
|
884 |
{
|
885 |
+
$metadata->retinas[$this->mainImageKey] = $data;
|
886 |
}
|
887 |
elseif($record->parent > 0) // Thumbnails
|
888 |
{
|
966 |
'compression_type' => $data->compressionType,
|
967 |
'compressed_size' => $data->compressedSize,
|
968 |
'original_size' => $data->originalSize,
|
969 |
+
'tsAdded' => UtilHelper::timestampToDB($data->tsAdded),
|
970 |
+
'tsOptimized' => UtilHelper::timestampToDB($data->tsOptimized),
|
971 |
);
|
972 |
|
973 |
unset($data->status);
|
1392 |
} // convertPNG
|
1393 |
|
1394 |
|
|
|
1395 |
protected function setOriginalFile()
|
1396 |
{
|
1397 |
$fs = \wpSPIO()->filesystem();
|
1400 |
return false;
|
1401 |
|
1402 |
$originalFile = $fs->getOriginalImage($this->id);
|
1403 |
+
$originalFile->setName($this->originalImageKey); // required for named API requests et al.
|
1404 |
$originalFile->setImageType(self::IMAGE_TYPE_ORIGINAL);
|
1405 |
|
1406 |
if ($originalFile->exists() && $originalFile->getFullPath() !== $this->getfullPath() )
|
1832 |
|
1833 |
}
|
1834 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1835 |
// Fullpath now will still be .jpg
|
1836 |
// PNGconvert is first, because some plugins check for _attached_file metadata and prevent deleting files if still connected to media library. Exmaple: polylang.
|
1837 |
$pngConvert = new ShortPixelPng2Jpg();
|
1901 |
}
|
1902 |
if ($this->isScaled())
|
1903 |
{
|
1904 |
+
$objects[$this->originalImageKey] = $this->getOriginalFile();
|
1905 |
}
|
1906 |
|
1907 |
return $objects;
|
2410 |
|
2411 |
}
|
2412 |
|
2413 |
+
// Check for UnlistedNotice. Check if in this image has unlisted without adding them
|
2414 |
+
public function checkUnlistedForNotice()
|
2415 |
{
|
2416 |
+
$settings = \wpSPIO()->settings();
|
2417 |
+
$control = AdminNoticesController::getInstance();
|
2418 |
+
$notice = $control->getNoticeByKey('MSG_UNLISTED_FOUND');
|
2419 |
|
2420 |
+
// already active
|
2421 |
+
if ($settings->optimizeUnlisted === true)
|
2422 |
+
return;
|
2423 |
+
|
2424 |
+
// already notice.
|
2425 |
+
if (is_object($notice->getNoticeObj()))
|
2426 |
+
{
|
2427 |
+
return;
|
2428 |
+
}
|
2429 |
+
|
2430 |
+
// todo get counter to indicate
|
2431 |
+
$counter = $settings->unlistedCounter;
|
2432 |
+
|
2433 |
+
if ($counter < 100)
|
2434 |
+
{
|
2435 |
+
$settings->unlistedCounter++;
|
2436 |
+
return;
|
2437 |
+
}
|
2438 |
+
|
2439 |
+
// check unlisted.
|
2440 |
+
$unlisted = $this->addUnlisted(true);
|
2441 |
+
|
2442 |
+
|
2443 |
+
if (is_array($unlisted) && count($unlisted) > 0)
|
2444 |
+
{
|
2445 |
+
// trigger notice.
|
2446 |
+
$args = array(
|
2447 |
+
'count' => count($unlisted),
|
2448 |
+
'filelist' => $unlisted,
|
2449 |
+
'name' => $this->getFileName(),
|
2450 |
+
'id' => $this->get('id'),
|
2451 |
+
);
|
2452 |
+
$notice->addManual($args);
|
2453 |
+
|
2454 |
+
}
|
2455 |
+
$settings->unlistedCounter = 0;
|
2456 |
}
|
2457 |
|
2458 |
/** Adds Unlisted Image to the Media Library Item
|
2459 |
* This function is called in IsProcessable
|
2460 |
*/
|
2461 |
+
protected function addUnlisted($check_only = false)
|
2462 |
{
|
2463 |
// Setting must be active.
|
2464 |
/*if (! \wpSPIO()->settings()->optimizeUnlisted )
|
2467 |
$searchUnlisted = \wpSPIO()->settings()->optimizeUnlisted;
|
2468 |
|
2469 |
// Don't check this more than once per run-time.
|
2470 |
+
if ( in_array($this->get('id'), self::$unlistedChecked ) && $check_only === false)
|
2471 |
{
|
2472 |
return;
|
2473 |
}
|
2499 |
}
|
2500 |
|
2501 |
// if all have nothing to do, do nothing.
|
2502 |
+
if ($searchUnlisted == false && count($searchSuffixes) == 0 && count($searchInfixes) == 0 && $check_only === false)
|
2503 |
{
|
2504 |
self::$unlistedChecked[] = $this->get('id');
|
2505 |
return;
|
2532 |
$all_files = scandir($this->getFileDir(), SCANDIR_SORT_NONE);
|
2533 |
$all_files = array_diff($all_files, $currentFiles);
|
2534 |
|
|
|
2535 |
foreach($processFiles as $mediaItem)
|
2536 |
{
|
2537 |
|
2539 |
$ext = $mediaItem->getExtension();
|
2540 |
$path = (string) $mediaItem->getFileDir();
|
2541 |
|
2542 |
+
if ($searchUnlisted || $check_only === true)
|
2543 |
{
|
2544 |
$pattern = '/^' . preg_quote($base, '/') . '-\d+x\d+\.'. $ext .'/';
|
2545 |
$thumbs = array();
|
2591 |
|
2592 |
// Quality check on the thumbs. Must exist, must be same extension.
|
2593 |
$added = false;
|
2594 |
+
|
2595 |
+
if ($check_only === true)
|
2596 |
+
{
|
2597 |
+
return $unlisted;
|
2598 |
+
}
|
2599 |
+
|
2600 |
foreach($unlisted as $unName)
|
2601 |
{
|
2602 |
if (isset($this->thumbnails[$unName]))
|
@@ -221,7 +221,8 @@ class MediaLibraryThumbnailModel extends \ShortPixel\Model\Image\ImageModel
|
|
221 |
{
|
222 |
// if thumbnail processing is off, thumbs are never processable.
|
223 |
// This is also used by main file, so check for that!
|
224 |
-
|
|
|
225 |
{
|
226 |
$this->processable_status = self::P_EXCLUDE_SIZE;
|
227 |
return false;
|
221 |
{
|
222 |
// if thumbnail processing is off, thumbs are never processable.
|
223 |
// This is also used by main file, so check for that!
|
224 |
+
|
225 |
+
if ( $this->excludeThumbnails() && $this->is_main_file === false && $this->get('imageType') !== self::IMAGE_TYPE_ORIGINAL)
|
226 |
{
|
227 |
$this->processable_status = self::P_EXCLUDE_SIZE;
|
228 |
return false;
|
@@ -459,10 +459,5 @@ class StatsModel
|
|
459 |
|
460 |
}
|
461 |
|
462 |
-
//public function from
|
463 |
-
|
464 |
-
|
465 |
-
|
466 |
-
|
467 |
|
468 |
} // class
|
459 |
|
460 |
}
|
461 |
|
|
|
|
|
|
|
|
|
|
|
462 |
|
463 |
} // class
|
@@ -1,376 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
use ShortPixel\ShortpixelLogger\ShortPixelLogger as Log;
|
3 |
-
|
4 |
-
|
5 |
-
// @todo In time this should be moved to a helper class
|
6 |
-
class ShortPixelTools {
|
7 |
-
/* public static function parseJSON($data) {
|
8 |
-
if ( function_exists('json_decode') ) {
|
9 |
-
$data = json_decode( $data );
|
10 |
-
} else {
|
11 |
-
require_once( 'JSON/JSON.php' );
|
12 |
-
$json = new Services_JSON( );
|
13 |
-
$data = $json->decode( $data );
|
14 |
-
}
|
15 |
-
return $data;
|
16 |
-
}*/
|
17 |
-
|
18 |
-
/** Find if a certain plugin is active
|
19 |
-
* @param String $plugin The name of plugin being searched for
|
20 |
-
* @return Boolean Active or not
|
21 |
-
*/
|
22 |
-
public static function shortPixelIsPluginActive($plugin) {
|
23 |
-
$activePlugins = apply_filters( 'active_plugins', get_option( 'active_plugins', array()));
|
24 |
-
if ( is_multisite() ) {
|
25 |
-
$activePlugins = array_merge($activePlugins, get_site_option( 'active_sitewide_plugins'));
|
26 |
-
}
|
27 |
-
return in_array( $plugin, $activePlugins);
|
28 |
-
}
|
29 |
-
|
30 |
-
public static function snakeToCamel($snake_case) {
|
31 |
-
return str_replace(' ', '', ucwords(str_replace('_', ' ', $snake_case)));
|
32 |
-
}
|
33 |
-
|
34 |
-
public static function getPluginPath()
|
35 |
-
{
|
36 |
-
return plugin_dir_path(SHORTPIXEL_PLUGIN_FILE);
|
37 |
-
}
|
38 |
-
|
39 |
-
|
40 |
-
/** Function to convert dateTime object to a date output
|
41 |
-
*
|
42 |
-
* Function checks if the date is recent and then uploads are friendlier message. Taken from media library list table date function
|
43 |
-
* @param DateTime $date DateTime object
|
44 |
-
**/
|
45 |
-
public static function format_nice_date( $date ) {
|
46 |
-
|
47 |
-
if ( '0000-00-00 00:00:00' === $date->format('Y-m-d ') ) {
|
48 |
-
$h_time = '';
|
49 |
-
} else {
|
50 |
-
$time = $date->format('U'); //get_post_time( 'G', true, $post, false );
|
51 |
-
if ( ( abs( $t_diff = time() - $time ) ) < DAY_IN_SECONDS ) {
|
52 |
-
if ( $t_diff < 0 ) {
|
53 |
-
$h_time = sprintf( __( '%s from now' ), human_time_diff( $time ) );
|
54 |
-
} else {
|
55 |
-
$h_time = sprintf( __( '%s ago' ), human_time_diff( $time ) );
|
56 |
-
}
|
57 |
-
} else {
|
58 |
-
$h_time = $date->format( 'Y/m/d' );
|
59 |
-
}
|
60 |
-
}
|
61 |
-
|
62 |
-
return $h_time;
|
63 |
-
}
|
64 |
-
|
65 |
-
static public function formatBytes($bytes, $precision = 2) {
|
66 |
-
$units = array('B', 'KB', 'MB', 'GB', 'TB');
|
67 |
-
|
68 |
-
$bytes = max($bytes, 0);
|
69 |
-
$pow = floor(($bytes ? log($bytes) : 0) / log(1024));
|
70 |
-
$pow = min($pow, count($units) - 1);
|
71 |
-
|
72 |
-
$bytes /= pow(1024, $pow);
|
73 |
-
|
74 |
-
return round($bytes, $precision) . ' ' . $units[$pow];
|
75 |
-
}
|
76 |
-
|
77 |
-
static public function timestampToDB($timestamp)
|
78 |
-
{
|
79 |
-
return date("Y-m-d H:i:s", $timestamp);
|
80 |
-
}
|
81 |
-
|
82 |
-
static public function DBtoTimestamp($date)
|
83 |
-
{
|
84 |
-
return strtotime($date);
|
85 |
-
}
|
86 |
-
|
87 |
-
public static function commonPrefix($str1, $str2) {
|
88 |
-
$limit = min(strlen($str1), strlen($str2));
|
89 |
-
for ($i = 0; $i < $limit && $str1[$i] === $str2[$i]; $i++);
|
90 |
-
return substr($str1, 0, $i);
|
91 |
-
}
|
92 |
-
|
93 |
-
/**
|
94 |
-
* This is a simplified wp_send_json made compatible with WP 3.2.x to 3.4.x
|
95 |
-
* @param type $response
|
96 |
-
*/
|
97 |
-
public static function sendJSON($response) {
|
98 |
-
@header( 'Content-Type: application/json; charset=' . get_option( 'blog_charset' ) );
|
99 |
-
die(json_encode($response));
|
100 |
-
//wp_send_json($response); // send json proper, dies.
|
101 |
-
}
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
/**
|
106 |
-
* finds if an array contains an item, comparing the property given as key
|
107 |
-
* @param $item
|
108 |
-
* @param $arr
|
109 |
-
* @param $key
|
110 |
-
* @return the position that was removed, false if not found
|
111 |
-
*/
|
112 |
-
public static function findItem($item, $arr, $key) {
|
113 |
-
foreach($arr as $elm) {
|
114 |
-
if($elm[$key] == $item) {
|
115 |
-
return $elm;
|
116 |
-
}
|
117 |
-
}
|
118 |
-
return false;
|
119 |
-
}
|
120 |
-
|
121 |
-
|
122 |
-
public static function getConflictingPlugins() {
|
123 |
-
$settings = \wpSPIO()->settings();
|
124 |
-
|
125 |
-
$conflictPlugins = array(
|
126 |
-
'WP Smush - Image Optimization'
|
127 |
-
=> array(
|
128 |
-
'action'=>'Deactivate',
|
129 |
-
'data'=>'wp-smushit/wp-smush.php',
|
130 |
-
'page'=>'wp-smush-bulk'
|
131 |
-
),
|
132 |
-
'Imagify Image Optimizer'
|
133 |
-
=> array(
|
134 |
-
'action'=>'Deactivate',
|
135 |
-
'data'=>'imagify/imagify.php',
|
136 |
-
'page'=>'imagify'
|
137 |
-
),
|
138 |
-
'Compress JPEG & PNG images (TinyPNG)'
|
139 |
-
=> array(
|
140 |
-
'action'=>'Deactivate',
|
141 |
-
'data'=>'tiny-compress-images/tiny-compress-images.php',
|
142 |
-
'page'=>'tinify'
|
143 |
-
),
|
144 |
-
'Kraken.io Image Optimizer'
|
145 |
-
=> array(
|
146 |
-
'action'=>'Deactivate',
|
147 |
-
'data'=>'kraken-image-optimizer/kraken.php',
|
148 |
-
'page'=>'wp-krakenio'
|
149 |
-
),
|
150 |
-
'Optimus - WordPress Image Optimizer'
|
151 |
-
=> array(
|
152 |
-
'action'=>'Deactivate',
|
153 |
-
'data'=>'optimus/optimus.php',
|
154 |
-
'page'=>'optimus'
|
155 |
-
),
|
156 |
-
'Phoenix Media Rename' => array(
|
157 |
-
'action' => 'Deactivate',
|
158 |
-
'data' => 'phoenix-media-rename/phoenix-media-rename.php',
|
159 |
-
),
|
160 |
-
'EWWW Image Optimizer'
|
161 |
-
=> array(
|
162 |
-
'action'=>'Deactivate',
|
163 |
-
'data'=>'ewww-image-optimizer/ewww-image-optimizer.php',
|
164 |
-
'page'=>'ewww-image-optimizer%2F'
|
165 |
-
),
|
166 |
-
'EWWW Image Optimizer Cloud'
|
167 |
-
=> array(
|
168 |
-
'action'=>'Deactivate',
|
169 |
-
'data'=>'ewww-image-optimizer-cloud/ewww-image-optimizer-cloud.php',
|
170 |
-
'page'=>'ewww-image-optimizer-cloud%2F'
|
171 |
-
),
|
172 |
-
'ImageRecycle pdf & image compression'
|
173 |
-
=> array(
|
174 |
-
'action'=>'Deactivate',
|
175 |
-
'data'=>'imagerecycle-pdf-image-compression/wp-image-recycle.php',
|
176 |
-
'page'=>'option-image-recycle'
|
177 |
-
),
|
178 |
-
'CheetahO Image Optimizer'
|
179 |
-
=> array(
|
180 |
-
'action'=>'Deactivate',
|
181 |
-
'data'=>'cheetaho-image-optimizer/cheetaho.php',
|
182 |
-
'page'=>'cheetaho'
|
183 |
-
),
|
184 |
-
'Zara 4 Image Compression'
|
185 |
-
=> array(
|
186 |
-
'action'=>'Deactivate',
|
187 |
-
'data'=>'zara-4/zara-4.php',
|
188 |
-
'page'=>'zara-4'
|
189 |
-
),
|
190 |
-
'CW Image Optimizer'
|
191 |
-
=> array(
|
192 |
-
'action'=>'Deactivate',
|
193 |
-
'data'=>'cw-image-optimizer/cw-image-optimizer.php',
|
194 |
-
'page'=>'cw-image-optimizer'
|
195 |
-
),
|
196 |
-
'Simple Image Sizes'
|
197 |
-
=> array(
|
198 |
-
'action'=>'Deactivate',
|
199 |
-
'data'=>'simple-image-sizes/simple_image_sizes.php'
|
200 |
-
),
|
201 |
-
'Regenerate Thumbnails and Delete Unused'
|
202 |
-
=> array(
|
203 |
-
'action' => 'Deactivate',
|
204 |
-
'data' => 'regenerate-thumbnails-and-delete-unused/regenerate_wpregenerate.php',
|
205 |
-
),
|
206 |
-
'Swift Performance'
|
207 |
-
=> array(
|
208 |
-
'action' => 'Deactivate',
|
209 |
-
'data' => 'swift-performance/performance.php',
|
210 |
-
),
|
211 |
-
'Swift Performance Lite'
|
212 |
-
=> array(
|
213 |
-
'action' => 'Deactivate',
|
214 |
-
'data' => 'swift-performance-lite/performance.php',
|
215 |
-
),
|
216 |
-
//DEACTIVATED TEMPORARILY - it seems that the customers get scared.
|
217 |
-
/* 'Jetpack by WordPress.com - The Speed up image load times Option'
|
218 |
-
=> array(
|
219 |
-
'action'=>'Change Setting',
|
220 |
-
'data'=>'jetpack/jetpack.php',
|
221 |
-
'href'=>'admin.php?page=jetpack#/settings'
|
222 |
-
)
|
223 |
-
*/
|
224 |
-
);
|
225 |
-
if($settings->processThumbnails) {
|
226 |
-
$details = __('Details: recreating image files may require re-optimization of the resulting thumbnails, even if they were previously optimized. Please use <a href="https://wordpress.org/plugins/regenerate-thumbnails-advanced/" target="_blank">reGenerate Thumbnails Advanced</a> instead.','shortpixel-image-optimiser');
|
227 |
-
|
228 |
-
$conflictPlugins = array_merge($conflictPlugins, array(
|
229 |
-
'Regenerate Thumbnails'
|
230 |
-
=> array(
|
231 |
-
'action'=>'Deactivate',
|
232 |
-
'data'=>'regenerate-thumbnails/regenerate-thumbnails.php',
|
233 |
-
'page'=>'regenerate-thumbnails',
|
234 |
-
'details' => $details
|
235 |
-
),
|
236 |
-
'Force Regenerate Thumbnails'
|
237 |
-
=> array(
|
238 |
-
'action'=>'Deactivate',
|
239 |
-
'data'=>'force-regenerate-thumbnails/force-regenerate-thumbnails.php',
|
240 |
-
'page'=>'force-regenerate-thumbnails',
|
241 |
-
'details' => $details
|
242 |
-
)
|
243 |
-
));
|
244 |
-
}
|
245 |
-
|
246 |
-
|
247 |
-
$found = array();
|
248 |
-
foreach($conflictPlugins as $name => $path) {
|
249 |
-
$action = ( isset($path['action']) ) ? $path['action'] : null;
|
250 |
-
$data = ( isset($path['data']) ) ? $path['data'] : null;
|
251 |
-
$href = ( isset($path['href']) ) ? $path['href'] : null;
|
252 |
-
$page = ( isset($path['page']) ) ? $path['page'] : null;
|
253 |
-
$details = ( isset($path['details']) ) ? $path['details'] : null;
|
254 |
-
if(is_plugin_active($data)) {
|
255 |
-
if( $data == 'jetpack/jetpack.php' ){
|
256 |
-
$jetPackPhoton = get_option('jetpack_active_modules') ? in_array('photon', get_option('jetpack_active_modules')) : false;
|
257 |
-
if( !$jetPackPhoton ){ continue; }
|
258 |
-
}
|
259 |
-
$found[] = array( 'name' => $name, 'action'=> $action, 'path' => $data, 'href' => $href , 'page' => $page, 'details' => $details);
|
260 |
-
}
|
261 |
-
}
|
262 |
-
return $found;
|
263 |
-
}
|
264 |
-
|
265 |
-
public static function alterHtaccess($webp = false, $avif = false){
|
266 |
-
// [BS] Backward compat. 11/03/2019 - remove possible settings from root .htaccess
|
267 |
-
/* Plugin init is before loading these admin scripts. So it can happen misc.php is not yet loaded */
|
268 |
-
if (! function_exists('insert_with_markers'))
|
269 |
-
{
|
270 |
-
Log::addWarn('AlterHtaccess Called before WP init');
|
271 |
-
return;
|
272 |
-
//require_once( ABSPATH . 'wp-admin/includes/misc.php' );
|
273 |
-
}
|
274 |
-
$upload_dir = wp_upload_dir();
|
275 |
-
$upload_base = trailingslashit($upload_dir['basedir']);
|
276 |
-
|
277 |
-
if ( ! $webp && ! $avif ) {
|
278 |
-
insert_with_markers( get_home_path() . '.htaccess', 'ShortPixelWebp', '');
|
279 |
-
insert_with_markers( $upload_base . '.htaccess', 'ShortPixelWebp', '');
|
280 |
-
insert_with_markers( trailingslashit(WP_CONTENT_DIR) . '.htaccess', 'ShortPixelWebp', '');
|
281 |
-
} else {
|
282 |
-
|
283 |
-
$avif_rules = '
|
284 |
-
<IfModule mod_rewrite.c>
|
285 |
-
RewriteEngine On
|
286 |
-
##### Directives for delivering AVIF files, if they exist #####
|
287 |
-
# Does the browser support avif?
|
288 |
-
RewriteCond %{HTTP_ACCEPT} image/avif
|
289 |
-
# AND is the request a jpg or png? (also grab the basepath %1 to match in the next rule)
|
290 |
-
RewriteCond %{REQUEST_URI} ^(.+)\.(?:jpe?g|png|gif)$
|
291 |
-
# AND does a .avif image exist?
|
292 |
-
RewriteCond %{DOCUMENT_ROOT}/%1.avif -f
|
293 |
-
# THEN send the avif image and set the env var avif
|
294 |
-
RewriteRule (.+)\.(?:jpe?g|png)$ $1.avif [NC,T=image/avif,E=avif,L]
|
295 |
-
|
296 |
-
# Does the browser support avif?
|
297 |
-
RewriteCond %{HTTP_ACCEPT} image/avif
|
298 |
-
# AND is the request a jpg or png? (also grab the basepath %1 to match in the next rule)
|
299 |
-
RewriteCond %{REQUEST_URI} ^(.+)\.(?:jpe?g|png|gif)$
|
300 |
-
# AND does a .jpg.avif image exist?
|
301 |
-
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}.avif -f
|
302 |
-
# THEN send the avif image and set the env var avif
|
303 |
-
RewriteRule ^(.+)$ $1.avif [NC,T=image/avif,E=avif,L]
|
304 |
-
|
305 |
-
</IfModule>
|
306 |
-
<IfModule mod_headers.c>
|
307 |
-
# If REDIRECT_avif env var exists, append Accept to the Vary header
|
308 |
-
Header append Vary Accept env=REDIRECT_avif
|
309 |
-
</IfModule>
|
310 |
-
<IfModule mod_mime.c>
|
311 |
-
AddType image/avif .avif
|
312 |
-
</IfModule>
|
313 |
-
';
|
314 |
-
|
315 |
-
$webp_rules = '
|
316 |
-
<IfModule mod_rewrite.c>
|
317 |
-
RewriteEngine On
|
318 |
-
##### TRY FIRST the file appended with .webp (ex. test.jpg.webp) #####
|
319 |
-
# Is the browser Chrome?
|
320 |
-
RewriteCond %{HTTP_USER_AGENT} Chrome [OR]
|
321 |
-
# OR Is request from Page Speed
|
322 |
-
RewriteCond %{HTTP_USER_AGENT} "Google Page Speed Insights" [OR]
|
323 |
-
# OR does this browser explicitly support webp
|
324 |
-
RewriteCond %{HTTP_ACCEPT} image/webp
|
325 |
-
# AND NOT MS EDGE 42/17 - doesnt work.
|
326 |
-
RewriteCond %{HTTP_USER_AGENT} !Edge/17
|
327 |
-
# AND is the request a jpg, png or gif?
|
328 |
-
RewriteCond %{REQUEST_URI} ^(.+)\.(?:jpe?g|png|gif)$
|
329 |
-
# AND does a .ext.webp image exist?
|
330 |
-
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}.webp -f
|
331 |
-
# THEN send the webp image and set the env var webp
|
332 |
-
RewriteRule ^(.+)$ $1.webp [NC,T=image/webp,E=webp,L]
|
333 |
-
##### IF NOT, try the file with replaced extension (test.webp) #####
|
334 |
-
RewriteCond %{HTTP_USER_AGENT} Chrome [OR]
|
335 |
-
RewriteCond %{HTTP_USER_AGENT} "Google Page Speed Insights" [OR]
|
336 |
-
RewriteCond %{HTTP_ACCEPT} image/webp
|
337 |
-
RewriteCond %{HTTP_USER_AGENT} !Edge/17
|
338 |
-
# AND is the request a jpg, png or gif? (also grab the basepath %1 to match in the next rule)
|
339 |
-
RewriteCond %{REQUEST_URI} ^(.+)\.(?:jpe?g|png|gif)$
|
340 |
-
# AND does a .webp image exist?
|
341 |
-
RewriteCond %{DOCUMENT_ROOT}/%1.webp -f
|
342 |
-
# THEN send the webp image and set the env var webp
|
343 |
-
RewriteRule (.+)\.(?:jpe?g|png|gif)$ $1.webp [NC,T=image/webp,E=webp,L]
|
344 |
-
</IfModule>
|
345 |
-
<IfModule mod_headers.c>
|
346 |
-
# If REDIRECT_webp env var exists, append Accept to the Vary header
|
347 |
-
Header append Vary Accept env=REDIRECT_webp
|
348 |
-
</IfModule>
|
349 |
-
<IfModule mod_mime.c>
|
350 |
-
AddType image/webp .webp
|
351 |
-
</IfModule>
|
352 |
-
' ;
|
353 |
-
|
354 |
-
$rules = '';
|
355 |
-
// if ($avif)
|
356 |
-
$rules .= $avif_rules;
|
357 |
-
// if ($webp)
|
358 |
-
$rules .= $webp_rules;
|
359 |
-
|
360 |
-
insert_with_markers( get_home_path() . '.htaccess', 'ShortPixelWebp', $rules);
|
361 |
-
|
362 |
-
/** In uploads and on, it needs Inherit. Otherwise things such as the 404 error page will not be loaded properly
|
363 |
-
* since the WP rewrite will not be active at that point (overruled) **/
|
364 |
-
$rules = str_replace('RewriteEngine On', 'RewriteEngine On' . PHP_EOL . 'RewriteOptions Inherit', $rules);
|
365 |
-
|
366 |
-
insert_with_markers( $upload_base . '.htaccess', 'ShortPixelWebp', $rules);
|
367 |
-
insert_with_markers( trailingslashit(WP_CONTENT_DIR) . '.htaccess', 'ShortPixelWebp', $rules);
|
368 |
-
|
369 |
-
}
|
370 |
-
}
|
371 |
-
|
372 |
-
} // class
|
373 |
-
|
374 |
-
function ShortPixelVDD($v){
|
375 |
-
return highlight_string("<?php\n\$data =\n" . var_export($v, true) . ";\n?>");
|
376 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -2,6 +2,9 @@
|
|
2 |
namespace ShortPixel;
|
3 |
use ShortPixel\ShortpixelLogger\ShortPixelLogger as Log;
|
4 |
|
|
|
|
|
|
|
5 |
class ViewController extends Controller
|
6 |
{
|
7 |
protected static $controllers = array();
|
@@ -67,6 +70,10 @@ class ViewController extends Controller
|
|
67 |
return true;
|
68 |
}
|
69 |
|
|
|
|
|
|
|
|
|
70 |
|
71 |
/** Loads a view
|
72 |
*
|
@@ -90,7 +97,7 @@ class ViewController extends Controller
|
|
90 |
$view = $this->view;
|
91 |
$controller = $this;
|
92 |
|
93 |
-
$template_path = \
|
94 |
if (file_exists($template_path) === false)
|
95 |
{
|
96 |
Log::addError("View $template could not be found in " . $template_path,
|
2 |
namespace ShortPixel;
|
3 |
use ShortPixel\ShortpixelLogger\ShortPixelLogger as Log;
|
4 |
|
5 |
+
use ShortPixel\Model\AccessModel as AccessModel;
|
6 |
+
|
7 |
+
|
8 |
class ViewController extends Controller
|
9 |
{
|
10 |
protected static $controllers = array();
|
70 |
return true;
|
71 |
}
|
72 |
|
73 |
+
public function access()
|
74 |
+
{
|
75 |
+
return AccessModel::getInstance();
|
76 |
+
}
|
77 |
|
78 |
/** Loads a view
|
79 |
*
|
97 |
$view = $this->view;
|
98 |
$controller = $this;
|
99 |
|
100 |
+
$template_path = \wpSPIO()->plugin_path('class/view/' . $template . '.php');
|
101 |
if (file_exists($template_path) === false)
|
102 |
{
|
103 |
Log::addError("View $template could not be found in " . $template_path,
|
@@ -0,0 +1,44 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
namespace ShortPixel;
|
3 |
+
use ShortPixel\ShortpixelLogger\ShortPixelLogger as Log;
|
4 |
+
|
5 |
+
class UncodeController
|
6 |
+
{
|
7 |
+
function __construct()
|
8 |
+
{
|
9 |
+
$this->addHooks();
|
10 |
+
}
|
11 |
+
|
12 |
+
protected function addHooks()
|
13 |
+
{
|
14 |
+
add_action('uncode_delete_crop_image', array($this, 'removedMetaData'), 10, 2);
|
15 |
+
}
|
16 |
+
|
17 |
+
public function removedMetaData($attach_id, $filePath)
|
18 |
+
{
|
19 |
+
$fs = \wpSPIO()->filesystem();
|
20 |
+
$imageObj = $fs->getImage($attach_id, 'media', false);
|
21 |
+
$imageObj->saveMeta();
|
22 |
+
|
23 |
+
$fileObj = $fs->getFile($filePath);
|
24 |
+
if ($fileObj->hasBackup())
|
25 |
+
{
|
26 |
+
$backupObj = $fileObj->getBackupFile();
|
27 |
+
$backupObj->delete();
|
28 |
+
}
|
29 |
+
|
30 |
+
// Check Webp
|
31 |
+
$webpObj = $fs->getFile( (string) $fileObj->getFileDir() . $fileObj->getFileBase() . '.webp');
|
32 |
+
Log::addTemp('Webp file path ' . $webpObj->getFullPath(), $webpObj);
|
33 |
+
if ($webpObj->exists())
|
34 |
+
$webpObj->delete();
|
35 |
+
|
36 |
+
// Check Avif
|
37 |
+
$avifObj = $fs->getFile( (string) $fileObj->getFileDir() . $fileObj->getFileBase() . '.avif');
|
38 |
+
if ($avifObj->exists())
|
39 |
+
$avifObj->delete();
|
40 |
+
|
41 |
+
}
|
42 |
+
}
|
43 |
+
|
44 |
+
$u = new UncodeController();
|
@@ -1 +1 @@
|
|
1 |
-
{"name":"ShortPixel\/Plugin","description":"ShortPixel AutoLoader","type":"function","autoload":{"psr-4":{"ShortPixel":"class"},"files":["class\/wp-shortpixel-settings.php","class\/shortpixel-png2jpg.php","class\/front\/img-to-picture-webp.php","class\/external\/cloudflare.php","class\/external\/flywheel.php","class\/external\/nextgen\/nextGenController.php","class\/external\/nextgen\/nextGenViewController.php","class\/external\/visualcomposer.php","class\/external\/wp-offload-media.php","class\/external\/wp-cli\/wp-cli-base.php","class\/external\/wp-cli\/wp-cli-single.php","class\/external\/wp-cli\/wp-cli-bulk.php","class\/external\/custom-suffixes.php","class\/external\/pantheon.php","class\/external\/spai.php","class\/external\/cache.php"]}}
|
1 |
+
{"name":"ShortPixel\/Plugin","description":"ShortPixel AutoLoader","type":"function","autoload":{"psr-4":{"ShortPixel":"class"},"files":["class\/wp-shortpixel-settings.php","class\/shortpixel-png2jpg.php","class\/front\/img-to-picture-webp.php","class\/external\/cloudflare.php","class\/external\/flywheel.php","class\/external\/nextgen\/nextGenController.php","class\/external\/nextgen\/nextGenViewController.php","class\/external\/visualcomposer.php","class\/external\/wp-offload-media.php","class\/external\/wp-cli\/wp-cli-base.php","class\/external\/wp-cli\/wp-cli-single.php","class\/external\/wp-cli\/wp-cli-bulk.php","class\/external\/custom-suffixes.php","class\/external\/pantheon.php","class\/external\/spai.php","class\/external\/cache.php","class\/external\/uncode.php"]}}
|
@@ -26,7 +26,7 @@ namespace ShortPixel;
|
|
26 |
<?php if ($this->view->error): ?>
|
27 |
<div class='bulk error'>
|
28 |
<h3><?php echo esc_html($this->view->errorTitle); ?></h3>
|
29 |
-
<p><?php echo
|
30 |
<?php if (property_exists($this->view, 'errorText')): ?>
|
31 |
<p class='text'><?php echo esc_html($this->view->errorText) ?></p>
|
32 |
<?php endif; ?>
|
26 |
<?php if ($this->view->error): ?>
|
27 |
<div class='bulk error'>
|
28 |
<h3><?php echo esc_html($this->view->errorTitle); ?></h3>
|
29 |
+
<p><?php echo $this->view->errorContent; ?></p>
|
30 |
<?php if (property_exists($this->view, 'errorText')): ?>
|
31 |
<p class='text'><?php echo esc_html($this->view->errorText) ?></p>
|
32 |
<?php endif; ?>
|
@@ -118,19 +118,33 @@ $approx = $this->view->approx;
|
|
118 |
<div class="option"><?php esc_html_e('The total number of WebP images will be calculated in the next step.','shortpixel-image-optimiser'); ?></div>
|
119 |
</div>
|
120 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
121 |
<div class='optiongroup'>
|
122 |
<div class='switch_button'>
|
123 |
|
124 |
<label>
|
125 |
-
<input type="checkbox" class="switch" id="avif_checkbox" name="avif_checkbox"
|
126 |
-
<?php checked(
|
127 |
<div class="the_switch"> </div>
|
128 |
</label>
|
129 |
|
130 |
</div>
|
131 |
<h4><label for="avif_checkbox"><?php esc_html_e('Also create AVIF versions of the images','shortpixel-image-optimiser'); ?></label></h4>
|
|
|
132 |
<div class="option"><?php esc_html_e('The total number of AVIF images will be calculated in the next step.','shortpixel-image-optimiser'); ?></div>
|
133 |
</div>
|
|
|
|
|
|
|
|
|
|
|
134 |
</div>
|
135 |
|
136 |
<div class="option-block">
|
118 |
<div class="option"><?php esc_html_e('The total number of WebP images will be calculated in the next step.','shortpixel-image-optimiser'); ?></div>
|
119 |
</div>
|
120 |
|
121 |
+
|
122 |
+
<?php
|
123 |
+
$avifEnabled = $this->access()->isFeatureAvailable('avif');
|
124 |
+
$createAvifChecked = (\wpSPIO()->settings()->createAvif == 1 && $avifEnabled === true) ? true : false;
|
125 |
+
$disabled = ($avifEnabled === false) ? 'disabled' : '';
|
126 |
+
?>
|
127 |
+
|
128 |
+
|
129 |
<div class='optiongroup'>
|
130 |
<div class='switch_button'>
|
131 |
|
132 |
<label>
|
133 |
+
<input type="checkbox" class="switch" id="avif_checkbox" name="avif_checkbox" <?php echo $disabled ?>
|
134 |
+
<?php checked($createAvifChecked); ?> />
|
135 |
<div class="the_switch"> </div>
|
136 |
</label>
|
137 |
|
138 |
</div>
|
139 |
<h4><label for="avif_checkbox"><?php esc_html_e('Also create AVIF versions of the images','shortpixel-image-optimiser'); ?></label></h4>
|
140 |
+
<?php if ($avifEnabled == true): ?>
|
141 |
<div class="option"><?php esc_html_e('The total number of AVIF images will be calculated in the next step.','shortpixel-image-optimiser'); ?></div>
|
142 |
</div>
|
143 |
+
<?php else : ?>
|
144 |
+
<div class="option"><?php esc_html_e('The creation of AVIF files is not possible with this license type.','shortpixel-image-optimiser'); ?></div>
|
145 |
+
</div>
|
146 |
+
<?php endif; ?>
|
147 |
+
|
148 |
</div>
|
149 |
|
150 |
<div class="option-block">
|
@@ -15,7 +15,9 @@ namespace ShortPixel;
|
|
15 |
|
16 |
<div class='summary-list'>
|
17 |
<h3><?php esc_html_e('Review and start the Bulk Process', 'shortpixel-image-optimiser'); ?>
|
18 |
-
<span
|
|
|
|
|
19 |
</h3>
|
20 |
<div class="section-wrapper" data-check-visibility data-control="data-check-media-total">
|
21 |
<h4><span class='dashicons dashicons-images-alt2'> </span>
|
@@ -59,20 +61,19 @@ namespace ShortPixel;
|
|
59 |
<div><span><?php esc_html_e('Total from Custom Media','shortpixel-image-optimiser'); ?></span><span data-stats-custom="images-images">0</span></div>
|
60 |
</div>
|
61 |
</div>
|
62 |
-
|
63 |
-
|
|
|
64 |
<div class="totals">
|
65 |
-
<?php
|
|
|
|
|
66 |
|
67 |
<span class='number'></span>
|
68 |
</div>
|
69 |
|
70 |
</div>
|
71 |
-
|
72 |
-
<?php
|
73 |
-
$quotaData = $this->view->quotaData;
|
74 |
-
?>
|
75 |
-
|
76 |
<div class="credits">
|
77 |
<p class='heading'><span><?php esc_html_e('Your ShortPixel Credits Available', 'shortpixel-image-optimiser'); ?></span>
|
78 |
<span><?php echo esc_html($this->formatNumber($quotaData->total->remaining, 0)) ?></span>
|
@@ -98,17 +99,18 @@ namespace ShortPixel;
|
|
98 |
|
99 |
<div class="over-quota" data-check-visibility="false" data-control="data-quota-remaining" data-control-check="data-check-total-total">
|
100 |
<span><img src="<?php echo esc_url(wpSPIO()->plugin_url('res/img/bulk/over-quota.svg')) ?>" /></span>
|
101 |
-
|
102 |
|
103 |
<button type="button" class="button" onClick="ShortPixel.proposeUpgrade();"><?php esc_html_e('Show me the best options') ?></button>
|
104 |
</p>
|
105 |
|
106 |
<span class='hidden' data-quota-remaining><?php
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
</div>
|
111 |
-
|
|
|
112 |
|
113 |
<div class='no-images' data-check-visibility="false" data-control="data-check-total-total">
|
114 |
<?php esc_html_e('The current selection contains no images. The bulk process cannot start.', 'shortpixel-image-optimiser'); ?>
|
15 |
|
16 |
<div class='summary-list'>
|
17 |
<h3><?php esc_html_e('Review and start the Bulk Process', 'shortpixel-image-optimiser'); ?>
|
18 |
+
<span>
|
19 |
+
<img src="<?php echo esc_url(wpSPIO()->plugin_url('res/img/robo-notes.png')); ?>" style="transform: scale(-1, 1);height: 50px;"/>
|
20 |
+
</span>
|
21 |
</h3>
|
22 |
<div class="section-wrapper" data-check-visibility data-control="data-check-media-total">
|
23 |
<h4><span class='dashicons dashicons-images-alt2'> </span>
|
61 |
<div><span><?php esc_html_e('Total from Custom Media','shortpixel-image-optimiser'); ?></span><span data-stats-custom="images-images">0</span></div>
|
62 |
</div>
|
63 |
</div>
|
64 |
+
<?php
|
65 |
+
$quotaData = $this->view->quotaData;
|
66 |
+
?>
|
67 |
<div class="totals">
|
68 |
+
<?php
|
69 |
+
$quotaData->unlimited ? esc_html_e('Total','shortpixel-image-optimiser') : esc_html_e('Total credits needed','shortpixel-image-optimiser');
|
70 |
+
?>: <span class="number" data-stats-total="images-images" data-check-total-total >0</span>
|
71 |
|
72 |
<span class='number'></span>
|
73 |
</div>
|
74 |
|
75 |
</div>
|
76 |
+
<?php if(!$quotaData->unlimited) { ?>
|
|
|
|
|
|
|
|
|
77 |
<div class="credits">
|
78 |
<p class='heading'><span><?php esc_html_e('Your ShortPixel Credits Available', 'shortpixel-image-optimiser'); ?></span>
|
79 |
<span><?php echo esc_html($this->formatNumber($quotaData->total->remaining, 0)) ?></span>
|
99 |
|
100 |
<div class="over-quota" data-check-visibility="false" data-control="data-quota-remaining" data-control-check="data-check-total-total">
|
101 |
<span><img src="<?php echo esc_url(wpSPIO()->plugin_url('res/img/bulk/over-quota.svg')) ?>" /></span>
|
102 |
+
<p><?php printf(esc_html('In your ShortPixel account you %shave only %s credits available %s, but you have chosen %s images to be optimized in this bulk process. You can either go back and select less images, or you can upgrade to a higher plan or buy one-time credits.','shortpixel-image-optimiser'), '<span class="red">', esc_html($this->formatNumber($quotaData->total->remaining, 0)), '</span>', '<b data-stats-total="images-images">0</b>'); ?>
|
103 |
|
104 |
<button type="button" class="button" onClick="ShortPixel.proposeUpgrade();"><?php esc_html_e('Show me the best options') ?></button>
|
105 |
</p>
|
106 |
|
107 |
<span class='hidden' data-quota-remaining><?php
|
108 |
+
// This is hidden check, no number format.
|
109 |
+
echo esc_html($quotaData->total->remaining);
|
110 |
+
?></span>
|
111 |
</div>
|
112 |
+
<?php $this->loadView('snippets/part-upgrade-options'); ?>
|
113 |
+
<?php } ?>
|
114 |
|
115 |
<div class='no-images' data-check-visibility="false" data-control="data-check-total-total">
|
116 |
<?php esc_html_e('The current selection contains no images. The bulk process cannot start.', 'shortpixel-image-optimiser'); ?>
|
@@ -16,7 +16,7 @@ use \ShortPixel\Helper\UiHelper as UiHelper;
|
|
16 |
if( $this->is_nginx ){
|
17 |
$deliverWebpUnaltered = ''; // Uncheck
|
18 |
$deliverWebpUnalteredDisabled = 'disabled'; // Disable
|
19 |
-
$deliverWebpUnalteredLabel = __('It looks like you\'re running your site on an NGINX server. This means that you can only achieve this functionality by directly configuring the server config files. Please
|
20 |
$deliverAVIFLabel = __('<strong>It looks like you\'re running your site on an NGINX server. You may need additional configuration for the AVIF delivery to work as expected</strong>','shortpixel-image-optimiser')." <a class=\"shortpixel-help-link\" href=\"https://shortpixel.com/knowledge-base/article/499-how-do-i-configure-my-web-server-to-deliver-avif-images/\" target=\"_blank\"><span class=\"dashicons dashicons-editor-help\"></span></a>";
|
21 |
} else {
|
22 |
if( !$this->is_htaccess_writable ){
|
@@ -53,8 +53,8 @@ use \ShortPixel\Helper\UiHelper as UiHelper;
|
|
53 |
<tr>
|
54 |
<th scope="row"><?php esc_html_e('Next Generation Images','shortpixel-image-optimiser');?></th>
|
55 |
<td>
|
|
|
56 |
<div class='switch_button'>
|
57 |
-
<div class="spio-inline-help"><span class="dashicons dashicons-editor-help" title="Click for more info" data-link="https://shortpixel.com/knowledge-base/article/286-how-to-serve-webp-files-using-spio"></span></div>
|
58 |
<label>
|
59 |
<input type="checkbox" class="switch" name="createWebp" value="1" <?php checked( $view->data->createWebp, "1" );?>>
|
60 |
<div class="the_switch"> </div>
|
@@ -63,19 +63,28 @@ use \ShortPixel\Helper\UiHelper as UiHelper;
|
|
63 |
</div>
|
64 |
|
65 |
<p> </p>
|
66 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
67 |
<div class='switch_button'>
|
68 |
-
<div class="spio-inline-help"><span class="dashicons dashicons-editor-help" title="Click for more info" data-link="https://shortpixel.com/knowledge-base/article/467-how-to-create-and-serve-avif-files-using-shortpixel-image-optimizer"></span></div>
|
69 |
<label>
|
70 |
-
<input type="checkbox" class="switch" name="createAvif" value="1" <?php checked( $
|
71 |
<div class="the_switch"> </div>
|
72 |
<?php printf(esc_html__('Create %s AVIF versions %s of the images, with the additional cost of 1 credit = 1 image or thumbnail.','shortpixel-image-optimiser'), '<a href="https://shortpixel.com/blog/what-is-avif-and-why-is-it-good/" target="_blank">', '</a>');?>
|
73 |
</label>
|
74 |
</div>
|
75 |
|
76 |
|
77 |
-
<?php if($deliverAVIFLabel
|
78 |
-
<p class="sp-notice">
|
79 |
<?php echo ( $deliverAVIFLabel );?>
|
80 |
</p>
|
81 |
<?php } ?>
|
@@ -83,8 +92,8 @@ use \ShortPixel\Helper\UiHelper as UiHelper;
|
|
83 |
<p> </p>
|
84 |
|
85 |
<div class="deliverWebpSettings">
|
|
|
86 |
<div class='switch_button'>
|
87 |
-
<div class="spio-inline-help"><span class="dashicons dashicons-editor-help" title="Click for more info" data-link="https://shortpixel.com/knowledge-base/article/126-which-webp-files-delivery-method-is-the-best-for-me"></span></div>
|
88 |
<label>
|
89 |
<input type="checkbox" class="switch" name="deliverWebp" data-toggle="deliverTypes" value="1" <?php checked( ($view->data->deliverWebp > 0), true);?>>
|
90 |
<div class="the_switch"> </div>
|
@@ -132,8 +141,8 @@ use \ShortPixel\Helper\UiHelper as UiHelper;
|
|
132 |
<label for="deliverWebpUnaltered">
|
133 |
<?php esc_html_e('Without altering the page code (via .htaccess)','shortpixel-image-optimiser')?>
|
134 |
</label>
|
135 |
-
<?php if($deliverWebpUnalteredLabel){ ?>
|
136 |
-
<p class="sp-notice"><strong>
|
137 |
<?php echo( $deliverWebpUnalteredLabel );?>
|
138 |
</strong>
|
139 |
</p>
|
@@ -146,9 +155,8 @@ use \ShortPixel\Helper\UiHelper as UiHelper;
|
|
146 |
<tr>
|
147 |
<th scope="row"><?php esc_html_e('Optimize media on upload','shortpixel-image-optimiser');?></th>
|
148 |
<td>
|
149 |
-
|
150 |
<div class='switch_button'>
|
151 |
-
<div class="spio-inline-help"><span class="dashicons dashicons-editor-help" title="Click for more info" data-link="https://shortpixel.com/knowledge-base/article/521-settings-optimize-media-on-upload"></span></div>
|
152 |
<label>
|
153 |
<input type="checkbox" class="switch" name="autoMediaLibrary" id='autoMediaLibrary' value="1" <?php checked( $view->data->autoMediaLibrary, "1" );?>>
|
154 |
<div class="the_switch"> </div>
|
@@ -174,7 +182,7 @@ use \ShortPixel\Helper\UiHelper as UiHelper;
|
|
174 |
<tr>
|
175 |
<th scope='row'> </th>
|
176 |
<td>
|
177 |
-
|
178 |
<div class='view-notice warning'><p><?php esc_html_e('Important. From version 5 the front processing option is no longer available. There will be no processing on the frontend. To enable optimizing images without visiting the backend, please see the options available for command line optimization.', 'shortpixel-image-optimiser') ?></p>
|
179 |
<p><?php esc_html_e('To turn off this message, click the checkbox and save settings', 'shortpixel-image-optimiser'); ?></p>
|
180 |
</div>
|
@@ -204,8 +212,8 @@ use \ShortPixel\Helper\UiHelper as UiHelper;
|
|
204 |
<tr>
|
205 |
<th scope="row"><?php esc_html_e('Optimize PDFs','shortpixel-image-optimiser');?></th>
|
206 |
<td>
|
|
|
207 |
<div class='switch_button'>
|
208 |
-
<div class="spio-inline-help"><span class="dashicons dashicons-editor-help" title="Click for more info" data-link="https://shortpixel.com/knowledge-base/article/520-settings-optimize-pdfs"></span></div>
|
209 |
|
210 |
<label>
|
211 |
<input type="checkbox" class="switch" name="optimizePdfs" value="1" <?php checked( $view->data->optimizePdfs, "1" );?>>
|
@@ -219,8 +227,8 @@ use \ShortPixel\Helper\UiHelper as UiHelper;
|
|
219 |
<tr>
|
220 |
<th scope="row"><?php esc_html_e('Optimize Retina images','shortpixel-image-optimiser');?></th>
|
221 |
<td>
|
|
|
222 |
<div class='switch_button'>
|
223 |
-
<div class="spio-inline-help"><span class="dashicons dashicons-editor-help" title="Click for more info" data-link="https://shortpixel.com/knowledge-base/article/518-settings-optimize-retina-images"></span></div>
|
224 |
<label>
|
225 |
<input type="checkbox" class="switch" name="optimizeRetina" value="1" <?php checked( $view->data->optimizeRetina, "1" );?>>
|
226 |
<div class="the_switch"> </div>
|
@@ -232,10 +240,8 @@ use \ShortPixel\Helper\UiHelper as UiHelper;
|
|
232 |
<tr>
|
233 |
<th scope="row"><?php esc_html_e('Optimize other thumbnails','shortpixel-image-optimiser');?></th>
|
234 |
<td>
|
235 |
-
|
236 |
-
|
237 |
<div class='switch_button'>
|
238 |
-
<div class="spio-inline-help"><span class="dashicons dashicons-editor-help" title="Click for more info" data-link="https://shortpixel.com/knowledge-base/article/519-settings---optimize-other-thumbs"></span></div>
|
239 |
<label>
|
240 |
<input type="checkbox" class="switch" name="optimizeUnlisted" value="1" <?php checked( $view->data->optimizeUnlisted, "1" );?>>
|
241 |
<div class="the_switch"> </div>
|
@@ -247,8 +253,8 @@ use \ShortPixel\Helper\UiHelper as UiHelper;
|
|
247 |
<tr>
|
248 |
<th scope="row"><?php esc_html_e('Convert PNG images to JPEG','shortpixel-image-optimiser');?></th>
|
249 |
<td>
|
|
|
250 |
<div class='switch_button option-png2jpg'>
|
251 |
-
<div class="spio-inline-help"><span class="dashicons dashicons-editor-help" title="Click for more info" data-link="https://shortpixel.com/knowledge-base/article/516-settings-convert-png-images-to-jpeg"></span></div>
|
252 |
<label>
|
253 |
<input type="checkbox" class="switch" name="png2jpg" value="1" <?php checked( ($view->data->png2jpg > 0), true);?> <?php echo($this->is_gd_installed ? '' : 'disabled') ?> data-toggle="png2jpgforce">
|
254 |
<div class="the_switch"> </div>
|
@@ -283,8 +289,8 @@ use \ShortPixel\Helper\UiHelper as UiHelper;
|
|
283 |
<tr>
|
284 |
<th scope="row"><?php esc_html_e('CMYK to RGB conversion','shortpixel-image-optimiser');?></th>
|
285 |
<td>
|
|
|
286 |
<div class='switch_button'>
|
287 |
-
<div class="spio-inline-help"><span class="dashicons dashicons-editor-help" title="Click for more info" data-link="https://shortpixel.com/knowledge-base/article/517-settings---cmyk-to-rgb-conversion"></span></div>
|
288 |
<label>
|
289 |
<input type="checkbox" class="switch" name="cmyk2rgb" value="1" <?php checked( $view->data->CMYKtoRGBconversion, "1" );?>>
|
290 |
<div class="the_switch"> </div>
|
@@ -297,12 +303,12 @@ use \ShortPixel\Helper\UiHelper as UiHelper;
|
|
297 |
<tr>
|
298 |
<th scope="row"><label for="excludeSizes"><?php esc_html_e('Exclude thumbnail sizes','shortpixel-image-optimiser');?></label></th>
|
299 |
<td>
|
|
|
300 |
<div class="option-content">
|
301 |
-
<div class="spio-inline-help"><span class="dashicons dashicons-editor-help" title="Click for more info" data-link="https://shortpixel.com/knowledge-base/article/113-how-can-i-optimize-only-certain-thumbnail-sizes"></span></div>
|
302 |
|
303 |
|
304 |
<?php foreach($view->allThumbSizes as $sizeKey => $sizeVal) {?>
|
305 |
-
<span style="margin-right: 20px;white-space:nowrap">
|
306 |
<label>
|
307 |
|
308 |
<input name="excludeSizes[]" type="checkbox" id="excludeSizes_<?php echo esc_attr($sizeKey);?>" <?php
|
@@ -514,10 +520,11 @@ use \ShortPixel\Helper\UiHelper as UiHelper;
|
|
514 |
<th scope="row"><label for="authentication"><?php esc_html_e('HTTP AUTH credentials','shortpixel-image-optimiser');?></label></th>
|
515 |
<td>
|
516 |
<?php if (! defined('SHORTPIXEL_HTTP_AUTH_USER')): ?>
|
517 |
-
<input name="siteAuthUser" type="text" id="siteAuthUser" value="<?php echo( esc_html(wp_unslash($view->data->siteAuthUser )));?>" class="regular-text" placeholder="<?php esc_html_e('User','shortpixel-image-optimiser');?>"><br>
|
518 |
-
<input name="siteAuthPass" type="text" id="siteAuthPass" value="<?php echo( esc_html(wp_unslash($view->data->siteAuthPass )));?>" class="regular-text" placeholder="<?php esc_html_e('Password','shortpixel-image-optimiser');?>">
|
519 |
<p class="settings-info">
|
520 |
-
<?php
|
|
|
521 |
</p>
|
522 |
<?php else: ?>
|
523 |
<p><?php esc_html_e('The HTTP AUTH credentials have been defined in the wp-config file.', 'shortpixel-image-optimiser'); ?></p>
|
16 |
if( $this->is_nginx ){
|
17 |
$deliverWebpUnaltered = ''; // Uncheck
|
18 |
$deliverWebpUnalteredDisabled = 'disabled'; // Disable
|
19 |
+
$deliverWebpUnalteredLabel = __('It looks like you\'re running your site on an NGINX server. This means that you can only achieve this functionality by directly configuring the server config files. Please follow this link for instructions:','shortpixel-image-optimiser')." <a class=\"shortpixel-help-link\" href=\"https://shortpixel.com/knowledge-base/article/111-configure-nginx-to-transparently-serve-webp-files-when-supported\" target=\"_blank\" data-beacon-article=\"5bfeb9de2c7d3a31944e78ee\"><span class=\"dashicons dashicons-editor-help\"></span></a>";
|
20 |
$deliverAVIFLabel = __('<strong>It looks like you\'re running your site on an NGINX server. You may need additional configuration for the AVIF delivery to work as expected</strong>','shortpixel-image-optimiser')." <a class=\"shortpixel-help-link\" href=\"https://shortpixel.com/knowledge-base/article/499-how-do-i-configure-my-web-server-to-deliver-avif-images/\" target=\"_blank\"><span class=\"dashicons dashicons-editor-help\"></span></a>";
|
21 |
} else {
|
22 |
if( !$this->is_htaccess_writable ){
|
53 |
<tr>
|
54 |
<th scope="row"><?php esc_html_e('Next Generation Images','shortpixel-image-optimiser');?></th>
|
55 |
<td>
|
56 |
+
<div class="spio-inline-help"><span class="dashicons dashicons-editor-help" title="Click for more info" data-link="https://shortpixel.com/knowledge-base/article/286-how-to-serve-webp-files-using-spio"></span></div>
|
57 |
<div class='switch_button'>
|
|
|
58 |
<label>
|
59 |
<input type="checkbox" class="switch" name="createWebp" value="1" <?php checked( $view->data->createWebp, "1" );?>>
|
60 |
<div class="the_switch"> </div>
|
63 |
</div>
|
64 |
|
65 |
<p> </p>
|
66 |
+
<?php
|
67 |
+
$avifEnabled = $this->access()->isFeatureAvailable('avif');
|
68 |
+
$createAvifChecked = ($view->data->createAvif == 1 && $avifEnabled === true) ? true : false;
|
69 |
+
$disabled = ($avifEnabled === false) ? 'disabled' : '';
|
70 |
+
if ($avifEnabled == false)
|
71 |
+
{
|
72 |
+
$deliverAVIFLabel = __('The creation of AVIF files is not possible with this license type.', 'shortpixel-image-optimiser');
|
73 |
+
}
|
74 |
+
?>
|
75 |
+
|
76 |
+
<div class="spio-inline-help"><span class="dashicons dashicons-editor-help" title="Click for more info" data-link="https://shortpixel.com/knowledge-base/article/467-how-to-create-and-serve-avif-files-using-shortpixel-image-optimizer"></span></div>
|
77 |
<div class='switch_button'>
|
|
|
78 |
<label>
|
79 |
+
<input type="checkbox" class="switch" name="createAvif" value="1" <?php echo $disabled ?> <?php checked( $createAvifChecked );?>>
|
80 |
<div class="the_switch"> </div>
|
81 |
<?php printf(esc_html__('Create %s AVIF versions %s of the images, with the additional cost of 1 credit = 1 image or thumbnail.','shortpixel-image-optimiser'), '<a href="https://shortpixel.com/blog/what-is-avif-and-why-is-it-good/" target="_blank">', '</a>');?>
|
82 |
</label>
|
83 |
</div>
|
84 |
|
85 |
|
86 |
+
<?php if(strlen($deliverAVIFLabel)){ ?>
|
87 |
+
<p class="sp-notice sp-notice-warning">
|
88 |
<?php echo ( $deliverAVIFLabel );?>
|
89 |
</p>
|
90 |
<?php } ?>
|
92 |
<p> </p>
|
93 |
|
94 |
<div class="deliverWebpSettings">
|
95 |
+
<div class="spio-inline-help"><span class="dashicons dashicons-editor-help" title="Click for more info" data-link="https://shortpixel.com/knowledge-base/article/126-which-webp-files-delivery-method-is-the-best-for-me"></span></div>
|
96 |
<div class='switch_button'>
|
|
|
97 |
<label>
|
98 |
<input type="checkbox" class="switch" name="deliverWebp" data-toggle="deliverTypes" value="1" <?php checked( ($view->data->deliverWebp > 0), true);?>>
|
99 |
<div class="the_switch"> </div>
|
141 |
<label for="deliverWebpUnaltered">
|
142 |
<?php esc_html_e('Without altering the page code (via .htaccess)','shortpixel-image-optimiser')?>
|
143 |
</label>
|
144 |
+
<?php if(strlen($deliverWebpUnalteredLabel)){ ?>
|
145 |
+
<p class="sp-notice sp-notice-warning"><strong>
|
146 |
<?php echo( $deliverWebpUnalteredLabel );?>
|
147 |
</strong>
|
148 |
</p>
|
155 |
<tr>
|
156 |
<th scope="row"><?php esc_html_e('Optimize media on upload','shortpixel-image-optimiser');?></th>
|
157 |
<td>
|
158 |
+
<div class="spio-inline-help"><span class="dashicons dashicons-editor-help" title="Click for more info" data-link="https://shortpixel.com/knowledge-base/article/521-settings-optimize-media-on-upload"></span></div>
|
159 |
<div class='switch_button'>
|
|
|
160 |
<label>
|
161 |
<input type="checkbox" class="switch" name="autoMediaLibrary" id='autoMediaLibrary' value="1" <?php checked( $view->data->autoMediaLibrary, "1" );?>>
|
162 |
<div class="the_switch"> </div>
|
182 |
<tr>
|
183 |
<th scope='row'> </th>
|
184 |
<td>
|
185 |
+
<div class="spio-inline-help"><span class="dashicons dashicons-editor-help" title="Click for more info" data-link="https://shortpixel.helpscoutdocs.com/article/536-why-is-the-option-process-in-the-front-end-gone"></span></div>
|
186 |
<div class='view-notice warning'><p><?php esc_html_e('Important. From version 5 the front processing option is no longer available. There will be no processing on the frontend. To enable optimizing images without visiting the backend, please see the options available for command line optimization.', 'shortpixel-image-optimiser') ?></p>
|
187 |
<p><?php esc_html_e('To turn off this message, click the checkbox and save settings', 'shortpixel-image-optimiser'); ?></p>
|
188 |
</div>
|
212 |
<tr>
|
213 |
<th scope="row"><?php esc_html_e('Optimize PDFs','shortpixel-image-optimiser');?></th>
|
214 |
<td>
|
215 |
+
<div class="spio-inline-help"><span class="dashicons dashicons-editor-help" title="Click for more info" data-link="https://shortpixel.com/knowledge-base/article/520-settings-optimize-pdfs"></span></div>
|
216 |
<div class='switch_button'>
|
|
|
217 |
|
218 |
<label>
|
219 |
<input type="checkbox" class="switch" name="optimizePdfs" value="1" <?php checked( $view->data->optimizePdfs, "1" );?>>
|
227 |
<tr>
|
228 |
<th scope="row"><?php esc_html_e('Optimize Retina images','shortpixel-image-optimiser');?></th>
|
229 |
<td>
|
230 |
+
<div class="spio-inline-help"><span class="dashicons dashicons-editor-help" title="Click for more info" data-link="https://shortpixel.com/knowledge-base/article/518-settings-optimize-retina-images"></span></div>
|
231 |
<div class='switch_button'>
|
|
|
232 |
<label>
|
233 |
<input type="checkbox" class="switch" name="optimizeRetina" value="1" <?php checked( $view->data->optimizeRetina, "1" );?>>
|
234 |
<div class="the_switch"> </div>
|
240 |
<tr>
|
241 |
<th scope="row"><?php esc_html_e('Optimize other thumbnails','shortpixel-image-optimiser');?></th>
|
242 |
<td>
|
243 |
+
<div class="spio-inline-help"><span class="dashicons dashicons-editor-help" title="Click for more info" data-link="https://shortpixel.com/knowledge-base/article/519-settings---optimize-other-thumbs"></span></div>
|
|
|
244 |
<div class='switch_button'>
|
|
|
245 |
<label>
|
246 |
<input type="checkbox" class="switch" name="optimizeUnlisted" value="1" <?php checked( $view->data->optimizeUnlisted, "1" );?>>
|
247 |
<div class="the_switch"> </div>
|
253 |
<tr>
|
254 |
<th scope="row"><?php esc_html_e('Convert PNG images to JPEG','shortpixel-image-optimiser');?></th>
|
255 |
<td>
|
256 |
+
<div class="spio-inline-help"><span class="dashicons dashicons-editor-help" title="Click for more info" data-link="https://shortpixel.com/knowledge-base/article/516-settings-convert-png-images-to-jpeg"></span></div>
|
257 |
<div class='switch_button option-png2jpg'>
|
|
|
258 |
<label>
|
259 |
<input type="checkbox" class="switch" name="png2jpg" value="1" <?php checked( ($view->data->png2jpg > 0), true);?> <?php echo($this->is_gd_installed ? '' : 'disabled') ?> data-toggle="png2jpgforce">
|
260 |
<div class="the_switch"> </div>
|
289 |
<tr>
|
290 |
<th scope="row"><?php esc_html_e('CMYK to RGB conversion','shortpixel-image-optimiser');?></th>
|
291 |
<td>
|
292 |
+
<div class="spio-inline-help"><span class="dashicons dashicons-editor-help" title="Click for more info" data-link="https://shortpixel.com/knowledge-base/article/517-settings---cmyk-to-rgb-conversion"></span></div>
|
293 |
<div class='switch_button'>
|
|
|
294 |
<label>
|
295 |
<input type="checkbox" class="switch" name="cmyk2rgb" value="1" <?php checked( $view->data->CMYKtoRGBconversion, "1" );?>>
|
296 |
<div class="the_switch"> </div>
|
303 |
<tr>
|
304 |
<th scope="row"><label for="excludeSizes"><?php esc_html_e('Exclude thumbnail sizes','shortpixel-image-optimiser');?></label></th>
|
305 |
<td>
|
306 |
+
<div class="spio-inline-help"><span class="dashicons dashicons-editor-help" title="Click for more info" data-link="https://shortpixel.com/knowledge-base/article/113-how-can-i-optimize-only-certain-thumbnail-sizes"></span></div>
|
307 |
<div class="option-content">
|
|
|
308 |
|
309 |
|
310 |
<?php foreach($view->allThumbSizes as $sizeKey => $sizeVal) {?>
|
311 |
+
<span style="margin-right: 20px; white-space:nowrap; line-height: 24px;">
|
312 |
<label>
|
313 |
|
314 |
<input name="excludeSizes[]" type="checkbox" id="excludeSizes_<?php echo esc_attr($sizeKey);?>" <?php
|
520 |
<th scope="row"><label for="authentication"><?php esc_html_e('HTTP AUTH credentials','shortpixel-image-optimiser');?></label></th>
|
521 |
<td>
|
522 |
<?php if (! defined('SHORTPIXEL_HTTP_AUTH_USER')): ?>
|
523 |
+
<input name="siteAuthUser" type="text" id="siteAuthUser" value="<?php echo( esc_html(wp_unslash($view->data->siteAuthUser )));?>" class="regular-text" placeholder="<?php esc_html_e('User','shortpixel-image-optimiser');?>" style="margin-bottom: 8px"><br>
|
524 |
+
<input name="siteAuthPass" type="text" id="siteAuthPass" value="<?php echo( esc_html(wp_unslash($view->data->siteAuthPass )));?>" class="regular-text" placeholder="<?php esc_html_e('Password','shortpixel-image-optimiser');?>" style="margin-bottom: 8px">
|
525 |
<p class="settings-info">
|
526 |
+
<?php printf(esc_html__('Only fill in these fields if your site (front-end) is not publicly accessible and visitors need a user/pass to connect to it.
|
527 |
+
If you don\'t know what is this then just %sleave the fields empty%s.','shortpixel-image-optimiser'), '<strong>', '</strong>'); ?>
|
528 |
</p>
|
529 |
<?php else: ?>
|
530 |
<p><?php esc_html_e('The HTTP AUTH credentials have been defined in the wp-config file.', 'shortpixel-image-optimiser'); ?></p>
|
@@ -3,7 +3,7 @@ namespace ShortPixel;
|
|
3 |
use ShortPixel\Notices\NoticeController as NoticeController;
|
4 |
use Shortpixel\Controller\StatsController as StatsController;
|
5 |
use Shortpixel\Controller\OptimizeController as OptimizeController;
|
6 |
-
|
7 |
|
8 |
$opt = new OptimizeController();
|
9 |
|
@@ -63,7 +63,7 @@ $env = \wpSPIO()->env();
|
|
63 |
|
64 |
|
65 |
<div class='debug-quota'>
|
66 |
-
<form method="POST" action="<?php echo esc_url(add_query_arg(array('sp-action' => 'action_debug_resetquota'))) ?>">
|
67 |
|
68 |
<button class='button' type='submit'>Clear Quota Data</button>
|
69 |
</form>
|
@@ -103,7 +103,7 @@ $env = \wpSPIO()->env();
|
|
103 |
</div> <!-- stats -->
|
104 |
|
105 |
<div class='debug-stats'>
|
106 |
-
<form method="POST" action="<?php echo esc_url(add_query_arg(array('sp-action' => 'action_debug_resetStats'))) ?>"
|
107 |
id="shortpixel-form-debug-stats">
|
108 |
<button class='button' type='submit'>Clear statistics cache</button>
|
109 |
</form>
|
@@ -117,16 +117,25 @@ $env = \wpSPIO()->env();
|
|
117 |
<div class='table notices'>
|
118 |
|
119 |
<div class='head'>
|
120 |
-
<span>ID</span><span>Done</span><span>Dismissed</span><span>Persistent</span>
|
121 |
</div>
|
122 |
|
123 |
-
<?php foreach ($notices as $noticeObj):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
124 |
|
125 |
<div>
|
126 |
<span><?php echo esc_html($noticeObj->getID()); ?></span>
|
127 |
<span><?php echo ($noticeObj->isDone()) ? 'Y' : 'N'; ?> </span>
|
128 |
<span><?php echo ($noticeObj->isDismissed()) ? 'Y' : 'N'; ?> </span>
|
129 |
<span><?php echo ($noticeObj->isPersistent()) ? 'Y' : 'N'; ?> </span>
|
|
|
|
|
130 |
|
131 |
</div>
|
132 |
|
@@ -135,12 +144,32 @@ $env = \wpSPIO()->env();
|
|
135 |
</div>
|
136 |
|
137 |
<div class='debug-notices'>
|
138 |
-
<form method="POST" action="<?php echo esc_url(add_query_arg(array('sp-action' => 'action_debug_resetNotices'))) ?>"
|
139 |
id="shortpixel-form-debug-stats">
|
140 |
<button class='button' type='submit'>Reset Notices</button>
|
141 |
</form>
|
142 |
</div>
|
143 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
144 |
<p> </p>
|
145 |
|
146 |
<div class='table queue-stats'>
|
@@ -186,7 +215,7 @@ $env = \wpSPIO()->env();
|
|
186 |
<?php endforeach; ?>
|
187 |
|
188 |
<div class='debug-queue'>
|
189 |
-
<form method="POST" action="<?php echo esc_url(add_query_arg(array('sp-action' => 'action_debug_resetQueue'))) ?>"
|
190 |
id="shortpixel-form-reset-queue">
|
191 |
<button class='button' type='submit'>Reset ShortQ</button>
|
192 |
<select name="queue">
|
@@ -203,7 +232,7 @@ $env = \wpSPIO()->env();
|
|
203 |
|
204 |
<p></p>
|
205 |
<div class='debug-key'>
|
206 |
-
<form method="POST" action="<?php echo esc_url(add_query_arg(array('sp-action' => 'action_debug_removeProcessorKey'))) ?>"
|
207 |
id="shortpixel-form-debug-stats">
|
208 |
<button class='button' type='submit'>Reset Processor Key</button>
|
209 |
</form>
|
3 |
use ShortPixel\Notices\NoticeController as NoticeController;
|
4 |
use Shortpixel\Controller\StatsController as StatsController;
|
5 |
use Shortpixel\Controller\OptimizeController as OptimizeController;
|
6 |
+
use ShortPixel\Controller\AdminNoticesController as AdminNoticesController;
|
7 |
|
8 |
$opt = new OptimizeController();
|
9 |
|
63 |
|
64 |
|
65 |
<div class='debug-quota'>
|
66 |
+
<form method="POST" action="<?php echo esc_url(add_query_arg(array('sp-action' => 'action_debug_resetquota'), $this->url)) ?>">
|
67 |
|
68 |
<button class='button' type='submit'>Clear Quota Data</button>
|
69 |
</form>
|
103 |
</div> <!-- stats -->
|
104 |
|
105 |
<div class='debug-stats'>
|
106 |
+
<form method="POST" action="<?php echo esc_url(add_query_arg(array('sp-action' => 'action_debug_resetStats'), $this->url)) ?>"
|
107 |
id="shortpixel-form-debug-stats">
|
108 |
<button class='button' type='submit'>Clear statistics cache</button>
|
109 |
</form>
|
117 |
<div class='table notices'>
|
118 |
|
119 |
<div class='head'>
|
120 |
+
<span>ID</span><span>Done</span><span>Dismissed</span><span>Persistent</span><span>Exclude</span><span>Include</span>
|
121 |
</div>
|
122 |
|
123 |
+
<?php foreach ($notices as $noticeObj):
|
124 |
+
$exclude = $noticeObj->_debug_getvar('exclude_screens');
|
125 |
+
$include = $noticeObj->_debug_getvar('include_screens');
|
126 |
+
|
127 |
+
$exclude = is_array($exclude) ? implode(',', $exclude) : $exclude;
|
128 |
+
$include = is_array($include) ? implode(',', $include) : $include;
|
129 |
+
|
130 |
+
?>
|
131 |
|
132 |
<div>
|
133 |
<span><?php echo esc_html($noticeObj->getID()); ?></span>
|
134 |
<span><?php echo ($noticeObj->isDone()) ? 'Y' : 'N'; ?> </span>
|
135 |
<span><?php echo ($noticeObj->isDismissed()) ? 'Y' : 'N'; ?> </span>
|
136 |
<span><?php echo ($noticeObj->isPersistent()) ? 'Y' : 'N'; ?> </span>
|
137 |
+
<span><?php echo $exclude ?></span>
|
138 |
+
<span><?php echo $include ?></span>
|
139 |
|
140 |
</div>
|
141 |
|
144 |
</div>
|
145 |
|
146 |
<div class='debug-notices'>
|
147 |
+
<form method="POST" action="<?php echo esc_url(add_query_arg(array('sp-action' => 'action_debug_resetNotices'),$this->url)) ?>"
|
148 |
id="shortpixel-form-debug-stats">
|
149 |
<button class='button' type='submit'>Reset Notices</button>
|
150 |
</form>
|
151 |
</div>
|
152 |
|
153 |
+
<div class='trigger-notices'>
|
154 |
+
<form method="POST" action="<?php echo esc_url(add_query_arg(array('sp-action' => 'action_debug_triggerNotice'), $this->url)) ?>"
|
155 |
+
id="shortpixel-form-debug-stats">
|
156 |
+
<?php
|
157 |
+
$controller = AdminNoticesController::getInstance();
|
158 |
+
$notices = $controller->getAllNotices();
|
159 |
+
// $refl = new \ReflectionClass('ShortPixel\Controller\AdminNoticesController');
|
160 |
+
// $constants = $refl->getConstants();
|
161 |
+
?>
|
162 |
+
<select name="notice_constant">
|
163 |
+
<option value="trigger-all">Trigger All</option>
|
164 |
+
<?php foreach($notices as $key => $noticeObj)
|
165 |
+
echo "<option value='$key'>$key </option>";
|
166 |
+
?>
|
167 |
+
</select>
|
168 |
+
<button class="button" type="submit">Trigger this Notice</button>
|
169 |
+
|
170 |
+
</form>
|
171 |
+
</div>
|
172 |
+
|
173 |
<p> </p>
|
174 |
|
175 |
<div class='table queue-stats'>
|
215 |
<?php endforeach; ?>
|
216 |
|
217 |
<div class='debug-queue'>
|
218 |
+
<form method="POST" action="<?php echo esc_url(add_query_arg(array('sp-action' => 'action_debug_resetQueue'),$this->url)) ?>"
|
219 |
id="shortpixel-form-reset-queue">
|
220 |
<button class='button' type='submit'>Reset ShortQ</button>
|
221 |
<select name="queue">
|
232 |
|
233 |
<p></p>
|
234 |
<div class='debug-key'>
|
235 |
+
<form method="POST" action="<?php echo esc_url(add_query_arg(array('sp-action' => 'action_debug_removeProcessorKey'),$this->url)) ?>"
|
236 |
id="shortpixel-form-debug-stats">
|
237 |
<button class='button' type='submit'>Reset Processor Key</button>
|
238 |
</form>
|
@@ -70,6 +70,7 @@ namespace ShortPixel;
|
|
70 |
<label for="compressionType"><?php esc_html_e('Compression type:','shortpixel-image-optimiser');?></label>
|
71 |
</th>
|
72 |
<td>
|
|
|
73 |
|
74 |
<input type="hidden" id="compressionType-database" value="<?php echo esc_attr($view->data->compressionType) ?>">
|
75 |
<div class="shortpixel-compression">
|
@@ -88,7 +89,6 @@ namespace ShortPixel;
|
|
88 |
|
89 |
<?php printf(esc_html__('%s Run a few tests%s to help you decide.', 'shortpixel-image-optimiser'), '<a href="https://shortpixel.com/online-image-compression" style="margin-left:20px;" target="_blank">', '</a>'); ?>
|
90 |
|
91 |
-
<div class="spio-inline-help"><span class="dashicons dashicons-editor-help" title="Click for more info" data-link="https://shortpixel.com/knowledge-base/article/11-lossy-glossy-or-lossless-which-one-is-the-best-for-me"></span></div>
|
92 |
|
93 |
<p class="settings-info shortpixel-radio-info shortpixel-radio-lossy" <?php echo( $view->data->compressionType == 1 ? "" : 'style="display:none"' );?>>
|
94 |
<?php printf(esc_html__('%sLossy compression (recommended): %s offers the best compression rate. %s This is the recommended option for most users, producing results that look the same as the original to the human eye.','shortpixel-image-optimiser'),'<b>','</b>', '<br />');?>
|
@@ -132,9 +132,8 @@ namespace ShortPixel;
|
|
132 |
<tr>
|
133 |
<th scope="row"><?php esc_html_e('Thumbnail compression:','shortpixel-image-optimiser');?></th>
|
134 |
<td>
|
135 |
-
|
136 |
<div class='switch_button'>
|
137 |
-
<div class="spio-inline-help"><span class="dashicons dashicons-editor-help" title="Click for more info" data-link="https://shortpixel.com/knowledge-base/article/511-settings-also-include-thumbnails"></span></div>
|
138 |
<label>
|
139 |
<input type="checkbox" class="switch" name="processThumbnails" value="1" <?php checked($view->data->processThumbnails, '1');?>>
|
140 |
<div class="the_switch"> </div>
|
@@ -152,13 +151,12 @@ namespace ShortPixel;
|
|
152 |
<tr>
|
153 |
<th scope="row"><?php esc_html_e('Enable SmartCrop:','shortpixel-image-optimiser');?></th>
|
154 |
<td>
|
155 |
-
|
156 |
-
|
157 |
-
<div class="spio-inline-help"><span class="dashicons dashicons-editor-help" title="Click for more info" data-link="https://shortpixel.com/knowledge-base/article/182-what-is-smart-cropping"></span></div>
|
158 |
<label>
|
159 |
<input type="checkbox" class="switch" name="useSmartcrop" value="1" <?php checked($view->data->useSmartcrop, '1');?>>
|
160 |
<div class="the_switch"> </div>
|
161 |
-
<?php printf(esc_html__('Enable %s
|
162 |
</label>
|
163 |
</div>
|
164 |
|
@@ -196,10 +194,8 @@ namespace ShortPixel;
|
|
196 |
<tr>
|
197 |
<th scope="row"><?php esc_html_e('Remove EXIF','shortpixel-image-optimiser');?></th>
|
198 |
<td>
|
199 |
-
|
200 |
<div class='switch_button'>
|
201 |
-
<div class="spio-inline-help"><span class="dashicons dashicons-editor-help" title="Click for more info" data-link="https://shortpixel.com/knowledge-base/article/483-spai-remove-exif">
|
202 |
-
</span></div>
|
203 |
<label>
|
204 |
<input type="checkbox" class="switch" name="removeExif" value="1" <?php checked($view->data->keepExif, 0);?>>
|
205 |
<div class="the_switch"> </div>
|
70 |
<label for="compressionType"><?php esc_html_e('Compression type:','shortpixel-image-optimiser');?></label>
|
71 |
</th>
|
72 |
<td>
|
73 |
+
<div class="spio-inline-help"><span class="dashicons dashicons-editor-help" title="Click for more info" data-link="https://shortpixel.com/knowledge-base/article/11-lossy-glossy-or-lossless-which-one-is-the-best-for-me"></span></div>
|
74 |
|
75 |
<input type="hidden" id="compressionType-database" value="<?php echo esc_attr($view->data->compressionType) ?>">
|
76 |
<div class="shortpixel-compression">
|
89 |
|
90 |
<?php printf(esc_html__('%s Run a few tests%s to help you decide.', 'shortpixel-image-optimiser'), '<a href="https://shortpixel.com/online-image-compression" style="margin-left:20px;" target="_blank">', '</a>'); ?>
|
91 |
|
|
|
92 |
|
93 |
<p class="settings-info shortpixel-radio-info shortpixel-radio-lossy" <?php echo( $view->data->compressionType == 1 ? "" : 'style="display:none"' );?>>
|
94 |
<?php printf(esc_html__('%sLossy compression (recommended): %s offers the best compression rate. %s This is the recommended option for most users, producing results that look the same as the original to the human eye.','shortpixel-image-optimiser'),'<b>','</b>', '<br />');?>
|
132 |
<tr>
|
133 |
<th scope="row"><?php esc_html_e('Thumbnail compression:','shortpixel-image-optimiser');?></th>
|
134 |
<td>
|
135 |
+
<div class="spio-inline-help"><span class="dashicons dashicons-editor-help" title="Click for more info" data-link="https://shortpixel.com/knowledge-base/article/511-settings-also-include-thumbnails"></span></div>
|
136 |
<div class='switch_button'>
|
|
|
137 |
<label>
|
138 |
<input type="checkbox" class="switch" name="processThumbnails" value="1" <?php checked($view->data->processThumbnails, '1');?>>
|
139 |
<div class="the_switch"> </div>
|
151 |
<tr>
|
152 |
<th scope="row"><?php esc_html_e('Enable SmartCrop:','shortpixel-image-optimiser');?></th>
|
153 |
<td>
|
154 |
+
<div class="spio-inline-help"><span class="dashicons dashicons-editor-help" title="Click for more info" data-link="https://shortpixel.com/knowledge-base/article/182-what-is-smart-cropping"></span></div>
|
155 |
+
<div class='switch_button'>
|
|
|
156 |
<label>
|
157 |
<input type="checkbox" class="switch" name="useSmartcrop" value="1" <?php checked($view->data->useSmartcrop, '1');?>>
|
158 |
<div class="the_switch"> </div>
|
159 |
+
<?php printf(esc_html__('Enable %s Smart cropping %s of the images where applicable.','shortpixel-image-optimiser'), '<strong>', '</strong>'); ?>
|
160 |
</label>
|
161 |
</div>
|
162 |
|
194 |
<tr>
|
195 |
<th scope="row"><?php esc_html_e('Remove EXIF','shortpixel-image-optimiser');?></th>
|
196 |
<td>
|
197 |
+
<div class="spio-inline-help"><span class="dashicons dashicons-editor-help" title="Click for more info" data-link="https://shortpixel.com/knowledge-base/article/483-spai-remove-exif"></span></div>
|
198 |
<div class='switch_button'>
|
|
|
|
|
199 |
<label>
|
200 |
<input type="checkbox" class="switch" name="removeExif" value="1" <?php checked($view->data->keepExif, 0);?>>
|
201 |
<div class="the_switch"> </div>
|
@@ -10,28 +10,26 @@ if( $total >0 ) {
|
|
10 |
|
11 |
?>
|
12 |
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
</a>
|
35 |
|
36 |
-
|
37 |
-
<?php endif; ?>
|
10 |
|
11 |
?>
|
12 |
|
13 |
+
<div class="sp-bulk-summary">
|
14 |
+
<span><?php esc_html_e('Average optimization', 'shortpixel-image-optimiser'); ?></span><br>
|
15 |
+
<a title="<?php esc_html_e('Average optimization', 'shortpixel-image-optimiser'); ?>">
|
16 |
+
<svg class="opt-circle-average" viewBox="-10 0 120 100">
|
17 |
+
<path class="trail" d="
|
18 |
+
M 50,50
|
19 |
+
m 0,-46
|
20 |
+
a 46,46 0 1 1 0,92
|
21 |
+
a 46,46 0 1 1 0,-92
|
22 |
+
" stroke-width="16" fill-opacity="0">
|
23 |
+
</path>
|
24 |
+
<path class="path" d="
|
25 |
+
M 50,50
|
26 |
+
m 0,-46
|
27 |
+
a 46,46 0 1 1 0,92
|
28 |
+
a 46,46 0 1 1 0,-92
|
29 |
+
" stroke-width="16" fill-opacity="0" style="stroke-dasharray: 289.027px, 289.027px; stroke-dashoffset: <?php echo esc_html($total_circle) ?>">
|
30 |
+
</path>
|
31 |
+
<text class="text" x="52" y="55"><?php echo esc_html($total) ?>%</text>
|
32 |
+
</svg>
|
33 |
+
</a>
|
|
|
34 |
|
35 |
+
</div>
|
|
@@ -5,33 +5,41 @@ use ShortPixel\ShortpixelLogger\ShortPixelLogger as Log;
|
|
5 |
|
6 |
?>
|
7 |
<div class="wrap is-shortpixel-settings-page">
|
8 |
-
<h1
|
|
|
|
|
9 |
<div class='top-menu'>
|
10 |
|
11 |
-
|
12 |
<a href="https://shortpixel.com/<?php
|
13 |
-
|
14 |
?>" target="_blank"><?php esc_html_e( 'Buy credits', 'shortpixel-image-optimiser' );?></a> |
|
15 |
<a href="https://shortpixel.com/knowledge-base/" target="_blank"><?php esc_html_e('Knowledge Base','shortpixel-image-optimiser');?></a> |
|
16 |
<a href="https://shortpixel.com/contact" target="_blank"><?php esc_html_e('Contact Support','shortpixel-image-optimiser');?></a> |
|
17 |
<a href="https://shortpixel.com/<?php
|
18 |
-
|
19 |
?>" target="_blank">
|
20 |
<?php esc_html_e('ShortPixel account','shortpixel-image-optimiser');?>
|
21 |
</a>
|
22 |
-
|
23 |
-
</div>
|
24 |
|
|
|
|
|
|
|
|
|
|
|
25 |
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
|
|
|
|
35 |
</div>
|
36 |
|
37 |
<hr class='wp-header-end'>
|
5 |
|
6 |
?>
|
7 |
<div class="wrap is-shortpixel-settings-page">
|
8 |
+
<h1>
|
9 |
+
<?php esc_html_e('ShortPixel Plugin Settings','shortpixel-image-optimiser');?>
|
10 |
+
</h1>
|
11 |
<div class='top-menu'>
|
12 |
|
13 |
+
<div class='links'>
|
14 |
<a href="https://shortpixel.com/<?php
|
15 |
+
echo esc_attr(($view->data->apiKey ? "login/". $view->data->apiKey : "pricing"));
|
16 |
?>" target="_blank"><?php esc_html_e( 'Buy credits', 'shortpixel-image-optimiser' );?></a> |
|
17 |
<a href="https://shortpixel.com/knowledge-base/" target="_blank"><?php esc_html_e('Knowledge Base','shortpixel-image-optimiser');?></a> |
|
18 |
<a href="https://shortpixel.com/contact" target="_blank"><?php esc_html_e('Contact Support','shortpixel-image-optimiser');?></a> |
|
19 |
<a href="https://shortpixel.com/<?php
|
20 |
+
echo esc_attr(($view->data->apiKey ? "login/". $view->data->apiKey . "/dashboard" : "login"));
|
21 |
?>" target="_blank">
|
22 |
<?php esc_html_e('ShortPixel account','shortpixel-image-optimiser');?>
|
23 |
</a>
|
24 |
+
</div>
|
|
|
25 |
|
26 |
+
<?php if ( round($view->averageCompression) > 20 || (!is_null($this->quotaData) && !$this->quotaData->unlimited)): ?>
|
27 |
+
<div class="spio-status-box">
|
28 |
+
<?php if ( round($view->averageCompression) > 20): ?>
|
29 |
+
<div class='pie-wrapper'><?php $this->loadView('settings/part-optpie'); ?></div>
|
30 |
+
<?php endif; ?>
|
31 |
|
32 |
+
<?php if (!is_null($this->quotaData) && !$this->quotaData->unlimited): ?>
|
33 |
+
<div class='quota-remaining'>
|
34 |
+
<a href="https://shortpixel.com/<?php
|
35 |
+
echo esc_attr(($view->data->apiKey ? "login/". $view->data->apiKey . "/dashboard" : "login"));
|
36 |
+
?>" target="_blank">
|
37 |
+
<?php printf(esc_html__('%s Credits remaining', 'shortpixel-image-optimiser'), esc_html($this->formatNumber(max(0, $this->quotaData->total->remaining), 0))); ?>
|
38 |
+
</a>
|
39 |
+
</div>
|
40 |
+
<?php endif; ?>
|
41 |
+
</div>
|
42 |
+
<?php endif; ?>
|
43 |
</div>
|
44 |
|
45 |
<hr class='wp-header-end'>
|
@@ -69,7 +69,6 @@ class WPShortPixelSettings extends \ShortPixel\Model {
|
|
69 |
'thumbsCount' => array('key' => 'wp-short-pixel-thumbnail-count', 'default' => 0, 'group' => 'state'),
|
70 |
'under5Percent' => array('key' => 'wp-short-pixel-files-under-5-percent', 'default' => 0, 'group' => 'state'),
|
71 |
'savedSpace' => array('key' => 'wp-short-pixel-savedSpace', 'default' => 0, 'group' => 'state'),
|
72 |
-
//'averageCompression' => array('key' => 'wp-short-pixel-averageCompression', 'default' => null, 'group' => 'state'),
|
73 |
'apiRetries' => array('key' => 'wp-short-pixel-api-retries', 'default' => 0, 'group' => 'state'),
|
74 |
'totalOptimized' => array('key' => 'wp-short-pixel-total-optimized', 'default' => 0, 'group' => 'state'),
|
75 |
'totalOriginal' => array('key' => 'wp-short-pixel-total-original', 'default' => 0, 'group' => 'state'),
|
@@ -78,40 +77,12 @@ class WPShortPixelSettings extends \ShortPixel\Model {
|
|
78 |
'downloadProto' => array('key' => 'wp-short-pixel-download-protocol', 'default' => null, 'group' => 'state'),
|
79 |
|
80 |
'downloadArchive' => array('key' => 'wp-short-pixel-download-archive', 'default' => -1, 'group' => 'state'),
|
81 |
-
|
82 |
-
// 'dismissedNotices' => array('key' => 'wp-short-pixel-dismissed-notices', 'default' => array(), 'group' => 'state'),
|
83 |
'activationDate' => array('key' => 'wp-short-pixel-activation-date', 'default' => null, 'group' => 'state'),
|
84 |
-
//'activationNotice' => array('key' => 'wp-short-pixel-activation-notice', 'default' => null, 'group' => 'state'),
|
85 |
'mediaLibraryViewMode' => array('key' => 'wp-short-pixel-view-mode', 'default' => false, 'group' => 'state'),
|
86 |
'redirectedSettings' => array('key' => 'wp-short-pixel-redirected-settings', 'default' => null, 'group' => 'state'),
|
87 |
'convertedPng2Jpg' => array('key' => 'wp-short-pixel-converted-png2jpg', 'default' => array(), 'group' => 'state'),
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
//bulk state machine
|
92 |
-
// @todo These options can all go. Add as well to onDeactivate / onActivate deletions.
|
93 |
-
// 'bulkType' => array('key' => 'wp-short-pixel-bulk-type', 'default' => null, 'group' => 'bulk'),
|
94 |
-
// 'bulkLastStatus' => array('key' => 'wp-short-pixel-bulk-last-status', 'default' => null, 'group' => 'bulk'),
|
95 |
-
// 'startBulkId' => array('key' => 'wp-short-pixel-query-id-start', 'default' => 0, 'group' => 'bulk'),
|
96 |
-
// 'stopBulkId' => array('key' => 'wp-short-pixel-query-id-stop', 'default' => 0, 'group' => 'bulk'),
|
97 |
-
// 'bulkCount' => array('key' => 'wp-short-pixel-bulk-count', 'default' => 0, 'group' => 'bulk'),
|
98 |
-
// 'bulkPreviousPercent' => array('key' => 'wp-short-pixel-bulk-previous-percent', 'default' => 0, 'group' => 'bulk'),
|
99 |
-
// 'bulkCurrentlyProcessed' => array('key' => 'wp-short-pixel-bulk-processed-items', 'default' => 0, 'group' => 'bulk'),
|
100 |
-
// 'bulkAlreadyDoneCount' => array('key' => 'wp-short-pixel-bulk-done-count', 'default' => 0, 'group' => 'bulk'),
|
101 |
-
// 'lastBulkStartTime' => array('key' => 'wp-short-pixel-last-bulk-start-time', 'default' => 0, 'group' => 'bulk'),
|
102 |
-
// 'lastBulkSuccessTime' => array('key' => 'wp-short-pixel-last-bulk-success-time', 'default' => 0, 'group' => 'bulk'),
|
103 |
-
// 'bulkRunningTime' => array('key' => 'wp-short-pixel-bulk-running-time', 'default' => 0, 'group' => 'bulk'),
|
104 |
-
// 'cancelPointer' => array('key' => 'wp-short-pixel-cancel-pointer', 'default' => 0, 'group' => 'bulk'),
|
105 |
-
// 'skipToCustom' => array('key' => 'wp-short-pixel-skip-to-custom', 'default' => null, 'group' => 'bulk'),
|
106 |
-
// 'bulkEverRan' => array('key' => 'wp-short-pixel-bulk-ever-ran', 'default' => false, 'group' => 'bulk'),
|
107 |
-
// 'flagId' => array('key' => 'wp-short-pixel-flag-id', 'default' => 0, 'group' => 'bulk'),
|
108 |
-
// 'failedImages' => array('key' => 'wp-short-pixel-failed-imgs', 'default' => 0, 'group' => 'bulk'),
|
109 |
-
// 'bulkProcessingStatus' => array('key' => 'bulkProcessingStatus', 'default' => null, 'group' => 'bulk'),
|
110 |
-
|
111 |
-
//'priorityQueue' => array('key' => 'wp-short-pixel-priorityQueue', 'default' => array()),
|
112 |
-
// 'prioritySkip' => array('key' => 'wp-short-pixel-prioritySkip', 'default' => array(), 'group' => 'state'),
|
113 |
-
|
114 |
-
//'' => array('key' => 'wp-short-pixel-', 'default' => null),
|
115 |
);
|
116 |
|
117 |
// This array -- field_name -> (s)anitize mask
|
@@ -152,33 +123,7 @@ class WPShortPixelSettings extends \ShortPixel\Model {
|
|
152 |
// 'helpscoutOptin' => array('s' => 'boolean'), // checkbox
|
153 |
);
|
154 |
|
155 |
-
public function
|
156 |
-
//$this->populateOptions();
|
157 |
-
}
|
158 |
-
|
159 |
-
public function populateOptions() {
|
160 |
-
|
161 |
-
/* $this->_apiKey = self::getOpt('wp-short-pixel-apiKey', '');
|
162 |
-
$this->_verifiedKey = self::getOpt('wp-short-pixel-verifiedKey', $this->_verifiedKey);
|
163 |
-
$this->_compressionType = self::getOpt('wp-short-pixel-compression', $this->_compressionType);
|
164 |
-
$this->_processThumbnails = self::getOpt('wp-short-process_thumbnails', $this->_processThumbnails);
|
165 |
-
$this->_CMYKtoRGBconversion = self::getOpt('wp-short-pixel_cmyk2rgb', $this->_CMYKtoRGBconversion);
|
166 |
-
$this->_backupImages = self::getOpt('wp-short-backup_images', $this->_backupImages);
|
167 |
-
$this->_resizeImages = self::getOpt( 'wp-short-pixel-resize-images', 0);
|
168 |
-
$this->_resizeWidth = self::getOpt( 'wp-short-pixel-resize-width', 0);
|
169 |
-
$this->_resizeHeight = self::getOpt( 'wp-short-pixel-resize-height', 0); */
|
170 |
-
|
171 |
-
// the following lines practically set defaults for options if they're not set
|
172 |
-
/*foreach(self::$_optionsMap as $opt) {
|
173 |
-
self::getOpt($opt['key'], $opt['default']);
|
174 |
-
}
|
175 |
-
|
176 |
-
if(self::getOpt("downloadArchive") == -1) {
|
177 |
-
self::setOpt(self::$_optionsMap["downloadArchive"]['key'], crc32(get_site_url())%10);
|
178 |
-
} */
|
179 |
-
}
|
180 |
-
|
181 |
-
public static function resetOptions() {
|
182 |
foreach(self::$_optionsMap as $key => $val) {
|
183 |
delete_option($val['key']);
|
184 |
}
|
@@ -200,19 +145,7 @@ class WPShortPixelSettings extends \ShortPixel\Model {
|
|
200 |
delete_option(self::$_optionsMap['removeSettingsOnDeletePlugin']['key']);
|
201 |
}
|
202 |
// Dismissed now via Notices Controller.
|
203 |
-
/* $dismissed = get_option('wp-short-pixel-dismissed-notices', array());
|
204 |
-
if(isset($dismissed['compat'])) {
|
205 |
-
unset($dismissed['compat']);
|
206 |
-
update_option('wp-short-pixel-dismissed-notices', $dismissed, 'no');
|
207 |
-
} */
|
208 |
-
|
209 |
-
//$formerPrio = get_option('wp-short-pixel-priorityQueue');
|
210 |
-
// $qGet = (! defined('SHORTPIXEL_NOFLOCK')) ? ShortPixelQueue::get() : ShortPixelQueueDB::get();
|
211 |
-
/* if(is_array($formerPrio) && !count($qGet)) {
|
212 |
|
213 |
-
(! defined('SHORTPIXEL_NOFLOCK')) ? ShortPixelQueue::set($formerPrio) : ShortPixelQueueDB::set($formerPrio); */
|
214 |
-
// delete_option('wp-short-pixel-priorityQueue');
|
215 |
-
// }
|
216 |
}
|
217 |
|
218 |
public static function onDeactivate() {
|
69 |
'thumbsCount' => array('key' => 'wp-short-pixel-thumbnail-count', 'default' => 0, 'group' => 'state'),
|
70 |
'under5Percent' => array('key' => 'wp-short-pixel-files-under-5-percent', 'default' => 0, 'group' => 'state'),
|
71 |
'savedSpace' => array('key' => 'wp-short-pixel-savedSpace', 'default' => 0, 'group' => 'state'),
|
|
|
72 |
'apiRetries' => array('key' => 'wp-short-pixel-api-retries', 'default' => 0, 'group' => 'state'),
|
73 |
'totalOptimized' => array('key' => 'wp-short-pixel-total-optimized', 'default' => 0, 'group' => 'state'),
|
74 |
'totalOriginal' => array('key' => 'wp-short-pixel-total-original', 'default' => 0, 'group' => 'state'),
|
77 |
'downloadProto' => array('key' => 'wp-short-pixel-download-protocol', 'default' => null, 'group' => 'state'),
|
78 |
|
79 |
'downloadArchive' => array('key' => 'wp-short-pixel-download-archive', 'default' => -1, 'group' => 'state'),
|
80 |
+
|
|
|
81 |
'activationDate' => array('key' => 'wp-short-pixel-activation-date', 'default' => null, 'group' => 'state'),
|
|
|
82 |
'mediaLibraryViewMode' => array('key' => 'wp-short-pixel-view-mode', 'default' => false, 'group' => 'state'),
|
83 |
'redirectedSettings' => array('key' => 'wp-short-pixel-redirected-settings', 'default' => null, 'group' => 'state'),
|
84 |
'convertedPng2Jpg' => array('key' => 'wp-short-pixel-converted-png2jpg', 'default' => array(), 'group' => 'state'),
|
85 |
+
'unlistedCounter' => array('key' => 'wp-short-pixel-unlisted-counter', 'default' => 0, 'group' => 'state'),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
86 |
);
|
87 |
|
88 |
// This array -- field_name -> (s)anitize mask
|
123 |
// 'helpscoutOptin' => array('s' => 'boolean'), // checkbox
|
124 |
);
|
125 |
|
126 |
+
public static function resetOptions() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
127 |
foreach(self::$_optionsMap as $key => $val) {
|
128 |
delete_option($val['key']);
|
129 |
}
|
145 |
delete_option(self::$_optionsMap['removeSettingsOnDeletePlugin']['key']);
|
146 |
}
|
147 |
// Dismissed now via Notices Controller.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
148 |
|
|
|
|
|
|
|
149 |
}
|
150 |
|
151 |
public static function onDeactivate() {
|
@@ -4,7 +4,7 @@ Tags: convert webp, optimize images, image optimization, resize, compressor, ima
|
|
4 |
Requires at least: 4.8.0
|
5 |
Tested up to: 6.1
|
6 |
Requires PHP: 5.6
|
7 |
-
Stable tag: 5.1.
|
8 |
License: GPLv2 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
10 |
|
@@ -348,6 +348,21 @@ Add HTTP basic authentication credentials by defining these constants in wp-conf
|
|
348 |
|
349 |
== Changelog ==
|
350 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
351 |
= 5.1.1 =
|
352 |
Release date October 20th, 2022
|
353 |
* Fix: a fatal error for PHP 7.2 and lower was discovered and fixed by @KZeni, thanks!
|
4 |
Requires at least: 4.8.0
|
5 |
Tested up to: 6.1
|
6 |
Requires PHP: 5.6
|
7 |
+
Stable tag: 5.1.2
|
8 |
License: GPLv2 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
10 |
|
348 |
|
349 |
== Changelog ==
|
350 |
|
351 |
+
= 5.1.2 =
|
352 |
+
Release date November 7, 2022
|
353 |
+
* Fix: when converting PNG to JPG, the PNG path was saved in the post editor, which could result in broken images;
|
354 |
+
* Fix: the bulk restore of Custom Media was performed without saving it to the previous bulks history;
|
355 |
+
* Fix: various wording updates and fixes throughout the plugin code;
|
356 |
+
* Fix: PNG to JPG conversion failed under certain Windows environments due to wrong path construction;
|
357 |
+
* Fix: the plugin now works with thumbs that have a numeric name (e.g. `0`);
|
358 |
+
* Fix: on certain hosting restrictions, requesting a new API key caused a fatal error;
|
359 |
+
* Fix: the original image was not processed when thumbnail processing was turned off;
|
360 |
+
* Compat: added compatibility with the Uncode theme's adaptive images feature;
|
361 |
+
* Tweak: minor updates to the settings and Media Library layout for new plans that will be introduced soon;
|
362 |
+
* Tweak: added filter/constant that can be used by affiliates;
|
363 |
+
* Tweak: reworked plugin notification system to make it more robust and reliable;
|
364 |
+
* Language: 44 new strings added, 2 updated, 0 fuzzed, and 39 deprecated.
|
365 |
+
|
366 |
= 5.1.1 =
|
367 |
Release date October 20th, 2022
|
368 |
* Fix: a fatal error for PHP 7.2 and lower was discovered and fixed by @KZeni, thanks!
|
@@ -1 +1 @@
|
|
1 |
-
.shortpixel-hide{display:none}
|
1 |
+
.shortpixel-hide{display:none}li.shortpixel-toolbar-processing>a.ab-item>div,#wpadminbar li.shortpixel-toolbar-processing>a.ab-item>div{height:33px;margin-top:-1px;padding:0 3px}li.shortpixel-toolbar-processing>a.ab-item>div>img,#wpadminbar li.shortpixel-toolbar-processing>a.ab-item>div>img{margin-right:2px;margin-top:6px;vertical-align:top}li.shortpixel-toolbar-processing span.shp-alert,#wpadminbar li.shortpixel-toolbar-processing>a.ab-item>div>span.shp-alert{display:none}li.shortpixel-toolbar-processing.shortpixel-alert>a.ab-item>div>span.shp-alert,#wpadminbar li.shortpixel-toolbar-processing.shortpixel-alert>a.ab-item>div>span.shp-alert{display:inline;font-size:26px;line-height:26px;color:red;font-weight:bold;vertical-align:middle}li.shortpixel-toolbar-processing.shortpixel-alert>a.ab-item>div,#wpadminbar li.shortpixel-toolbar-processing.shortpixel-alert>a.ab-item>div{background-image:none}#wpadminbar .shortpixel-toolbar-processing .cssload-container{width:100%;height:24px;text-align:center;position:absolute;top:0;left:-1px}#wpadminbar .shortpixel-toolbar-processing.shortpixel-quota-exceeded .cssload-container,#wpadminbar .shortpixel-toolbar-processing.shortpixel-alert .cssload-container{display:none}#wpadminbar .shortpixel-toolbar-processing .cssload-speeding-wheel{width:24px;height:24px;opacity:.7;margin:0 auto;border:4px solid #1cbfcb;border-radius:50%;border-left-color:transparent;animation:cssload-spin 2000ms infinite linear;-o-animation:cssload-spin 2000ms infinite linear;-ms-animation:cssload-spin 2000ms infinite linear;-webkit-animation:cssload-spin 2000ms infinite linear;-moz-animation:cssload-spin 2000ms infinite linear}@keyframes cssload-spin{100%{transform:rotate(360deg);transform:rotate(360deg)}}@-o-keyframes cssload-spin{100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@-ms-keyframes cssload-spin{100%{-ms-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes cssload-spin{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes cssload-spin{100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}.shortpixel-clearfix{width:100%;float:left}
|
@@ -88,9 +88,10 @@ div.fb-like {
|
|
88 |
/** In time this is not needed, new notice model **/
|
89 |
.sp-notice {
|
90 |
background: #fff;
|
|
|
91 |
border-left: 4px solid #fff;
|
92 |
-webkit-box-shadow: 0 1px 1px 0 rgba(0,0,0,.1);
|
93 |
-
box-shadow:
|
94 |
padding: 1px 12px;
|
95 |
}
|
96 |
.sp-notice img {
|
@@ -108,7 +109,7 @@ div.fb-like {
|
|
108 |
border-left-color: #46b450;
|
109 |
}
|
110 |
.sp-notice-warning {
|
111 |
-
border-left-color: #
|
112 |
}
|
113 |
|
114 |
div.short-pixel-bulk-page input.dial {
|
88 |
/** In time this is not needed, new notice model **/
|
89 |
.sp-notice {
|
90 |
background: #fff;
|
91 |
+
border: 1px solid lightgray;
|
92 |
border-left: 4px solid #fff;
|
93 |
-webkit-box-shadow: 0 1px 1px 0 rgba(0,0,0,.1);
|
94 |
+
box-shadow: 3px 2px 6px 0 rgba(0,0,0,.1);
|
95 |
padding: 1px 12px;
|
96 |
}
|
97 |
.sp-notice img {
|
109 |
border-left-color: #46b450;
|
110 |
}
|
111 |
.sp-notice-warning {
|
112 |
+
border-left-color: #dba617;
|
113 |
}
|
114 |
|
115 |
div.short-pixel-bulk-page input.dial {
|
@@ -1,27 +1,21 @@
|
|
1 |
.view-edit-media a.debugModal {
|
2 |
margin: 20px 0;
|
3 |
-
display: inline-block;
|
4 |
-
}
|
5 |
.view-edit-media .sp-column-stats {
|
6 |
-
position: relative;
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
margin: 0;
|
14 |
-
line-height: 20px;
|
15 |
-
}
|
16 |
.view-edit-media .main-actions {
|
17 |
display: inline-block;
|
18 |
-
width: 100%;
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
float: none;
|
24 |
-
}
|
25 |
|
26 |
.spio-message img {
|
27 |
animation: cssload-spin 5000ms infinite linear;
|
@@ -29,224 +23,164 @@
|
|
29 |
-ms-animation: cssload-spin 5000ms infinite linear;
|
30 |
-webkit-animation: cssload-spin 5000ms infinite linear;
|
31 |
-moz-animation: cssload-spin 5000ms infinite linear;
|
32 |
-
vertical-align: top;
|
33 |
-
}
|
34 |
@keyframes loading-spin {
|
35 |
100% {
|
36 |
transform: rotate(360deg);
|
37 |
-
transform: rotate(360deg);
|
38 |
-
}
|
39 |
-
}
|
40 |
@-o-keyframes loading-spin {
|
41 |
100% {
|
42 |
-o-transform: rotate(360deg);
|
43 |
-
transform: rotate(360deg);
|
44 |
-
}
|
45 |
-
}
|
46 |
@-ms-keyframes loading-spin {
|
47 |
100% {
|
48 |
-ms-transform: rotate(360deg);
|
49 |
-
transform: rotate(360deg);
|
50 |
-
}
|
51 |
-
}
|
52 |
@-webkit-keyframes loading-spin {
|
53 |
100% {
|
54 |
-webkit-transform: rotate(360deg);
|
55 |
-
transform: rotate(360deg);
|
56 |
-
}
|
57 |
-
}
|
58 |
@-moz-keyframes loading-spin {
|
59 |
100% {
|
60 |
-moz-transform: rotate(360deg);
|
61 |
-
transform: rotate(360deg);
|
62 |
-
}
|
63 |
-
}
|
64 |
-
|
65 |
.shortpixel-modal-active .debug-modal.debugInfo ul li strong {
|
66 |
display: inline-block;
|
67 |
-
min-width: 200px;
|
68 |
-
}
|
69 |
.shortpixel-modal-active .debug-modal.debugInfo ul li img {
|
70 |
-
max-height: 150px;
|
71 |
-
}
|
72 |
.shortpixel-modal-active .debug-modal.debugInfo .green {
|
73 |
-
color: green;
|
74 |
-
}
|
75 |
.shortpixel-modal-active .debug-modal.debugInfo .red {
|
76 |
-
color: red;
|
77 |
-
}
|
78 |
|
79 |
.shortpixel-other-media .sp-column-info .sp-column-actions {
|
80 |
max-width: 140px;
|
81 |
float: right;
|
82 |
-
text-align: right;
|
83 |
-
}
|
84 |
.shortpixel-other-media .message {
|
85 |
font-weight: 700;
|
86 |
-
margin: 8px 0;
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
vertical-align: top;
|
95 |
-
}
|
96 |
@keyframes loading-spin {
|
97 |
100% {
|
98 |
transform: rotate(360deg);
|
99 |
-
transform: rotate(360deg);
|
100 |
-
}
|
101 |
-
}
|
102 |
@-o-keyframes loading-spin {
|
103 |
100% {
|
104 |
-o-transform: rotate(360deg);
|
105 |
-
transform: rotate(360deg);
|
106 |
-
}
|
107 |
-
}
|
108 |
@-ms-keyframes loading-spin {
|
109 |
100% {
|
110 |
-ms-transform: rotate(360deg);
|
111 |
-
transform: rotate(360deg);
|
112 |
-
}
|
113 |
-
}
|
114 |
@-webkit-keyframes loading-spin {
|
115 |
100% {
|
116 |
-webkit-transform: rotate(360deg);
|
117 |
-
transform: rotate(360deg);
|
118 |
-
}
|
119 |
-
}
|
120 |
@-moz-keyframes loading-spin {
|
121 |
100% {
|
122 |
-moz-transform: rotate(360deg);
|
123 |
-
transform: rotate(360deg);
|
124 |
-
}
|
125 |
-
}
|
126 |
-
|
127 |
.sp-column-info {
|
128 |
-
position: relative;
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
}
|
144 |
-
.sp-column-info .thumbnails.optimized .thumb-wrapper .thumb {
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
}
|
175 |
-
.sp-column-info
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
}
|
189 |
-
.sp-column-info h4 {
|
190 |
-
margin: 0;
|
191 |
-
}
|
192 |
-
.sp-column-info .shortpixel-image-error {
|
193 |
-
display: block;
|
194 |
-
border: 1px solid #ff0000;
|
195 |
-
padding: 12px;
|
196 |
-
margin: 14px 0;
|
197 |
-
font-size: 14px;
|
198 |
-
font-weight: 700;
|
199 |
-
}
|
200 |
-
.sp-column-info .shortpixel-image-error .shortpixel-error-reset {
|
201 |
-
font-weight: 500;
|
202 |
-
font-size: 12px;
|
203 |
-
display: block;
|
204 |
-
}
|
205 |
|
206 |
.column-wp-shortPixel .message {
|
207 |
font-size: 14px;
|
208 |
font-weight: 700;
|
209 |
-
margin: 12px 0;
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
vertical-align: top;
|
218 |
-
}
|
219 |
@keyframes loading-spin {
|
220 |
100% {
|
221 |
transform: rotate(360deg);
|
222 |
-
transform: rotate(360deg);
|
223 |
-
}
|
224 |
-
}
|
225 |
@-o-keyframes loading-spin {
|
226 |
100% {
|
227 |
-o-transform: rotate(360deg);
|
228 |
-
transform: rotate(360deg);
|
229 |
-
}
|
230 |
-
}
|
231 |
@-ms-keyframes loading-spin {
|
232 |
100% {
|
233 |
-ms-transform: rotate(360deg);
|
234 |
-
transform: rotate(360deg);
|
235 |
-
}
|
236 |
-
}
|
237 |
@-webkit-keyframes loading-spin {
|
238 |
100% {
|
239 |
-webkit-transform: rotate(360deg);
|
240 |
-
transform: rotate(360deg);
|
241 |
-
}
|
242 |
-
}
|
243 |
@-moz-keyframes loading-spin {
|
244 |
100% {
|
245 |
-moz-transform: rotate(360deg);
|
246 |
-
transform: rotate(360deg);
|
247 |
-
}
|
248 |
-
}
|
249 |
-
|
250 |
div.sp-modal-shade {
|
251 |
display: none;
|
252 |
/* Hidden by default */
|
@@ -266,8 +200,7 @@ div.sp-modal-shade {
|
|
266 |
/* Fallback color */
|
267 |
background: rgba(0, 0, 0, 0.4);
|
268 |
/* Black w/ opacity */
|
269 |
-
opacity: 0.4;
|
270 |
-
}
|
271 |
|
272 |
div.shortpixel-modal {
|
273 |
background-color: #fefefe;
|
@@ -284,44 +217,35 @@ div.shortpixel-modal {
|
|
284 |
top: 10%;
|
285 |
left: 50%;
|
286 |
max-height: 90%;
|
287 |
-
overflow-y: auto;
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
|
296 |
-
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
-
background-repeat: no-repeat;
|
301 |
-
background-position: center;
|
302 |
-
}
|
303 |
|
304 |
div.sp-modal-title {
|
305 |
-
font-size: 22px;
|
306 |
-
}
|
307 |
|
308 |
div.sp-modal-body {
|
309 |
-
margin-top: 10px;
|
310 |
-
}
|
311 |
|
312 |
body.debug-model-active {
|
313 |
-
overflow: hidden;
|
314 |
-
}
|
315 |
|
316 |
.debugInfo .content.wrapper {
|
317 |
-
display: none;
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
}
|
322 |
-
.debugInfo .content.wrapper ul {
|
323 |
-
margin: 25px 0;
|
324 |
-
}
|
325 |
|
326 |
.debug-modal {
|
327 |
display: none;
|
@@ -337,55 +261,45 @@ body.debug-model-active {
|
|
337 |
top: 10%;
|
338 |
z-index: 10020;
|
339 |
display: none;
|
340 |
-
background: #ffffff;
|
341 |
-
|
342 |
-
|
343 |
-
|
344 |
-
}
|
345 |
-
.debug-modal.error {
|
346 |
-
|
347 |
-
|
348 |
-
|
349 |
-
|
350 |
-
|
351 |
-
|
352 |
-
|
353 |
-
|
354 |
-
|
355 |
-
|
356 |
-
|
357 |
-
|
358 |
-
|
359 |
-
|
360 |
-
|
361 |
-
|
362 |
-
|
363 |
-
|
364 |
-
|
365 |
-
|
366 |
-
|
367 |
-
|
368 |
-
|
369 |
-
|
370 |
-
|
371 |
-
|
372 |
-
|
373 |
-
|
374 |
-
|
375 |
-
|
376 |
-
|
377 |
-
|
378 |
-
|
379 |
-
color: #444;
|
380 |
-
}
|
381 |
-
.debug-modal .modal_header .modal_close:hover {
|
382 |
-
cursor: pointer;
|
383 |
-
color: #111;
|
384 |
-
}
|
385 |
-
.debug-modal .content, .debug-modal .modal_content {
|
386 |
-
padding: 5px 15px 10px;
|
387 |
-
overflow-y: auto;
|
388 |
-
}
|
389 |
|
390 |
.debugModal_overlay {
|
391 |
background: #000;
|
@@ -397,76 +311,61 @@ body.debug-model-active {
|
|
397 |
position: fixed;
|
398 |
opacity: 0.7;
|
399 |
z-index: 10000;
|
400 |
-
display: none;
|
401 |
-
}
|
402 |
|
403 |
.shortpixel-hide {
|
404 |
-
display: none !important;
|
405 |
-
}
|
406 |
|
407 |
.button-primary.optimize {
|
408 |
-
margin-bottom: 16px;
|
409 |
-
}
|
410 |
|
411 |
.switch_button {
|
412 |
line-height: 12px;
|
413 |
margin: 2px -5px 10px -5px;
|
414 |
-
display: inline-block;
|
415 |
-
|
416 |
-
|
417 |
-
|
418 |
-
}
|
419 |
-
.switch_button
|
420 |
-
|
421 |
-
|
422 |
-
|
423 |
-
|
424 |
-
|
425 |
-
|
426 |
-
|
427 |
-
|
428 |
-
|
429 |
-
|
430 |
-
|
431 |
-
|
432 |
-
|
433 |
-
|
434 |
-
|
435 |
-
|
436 |
-
|
437 |
-
|
438 |
-
|
439 |
-
|
440 |
-
|
441 |
-
|
442 |
-
|
443 |
-
|
444 |
-
|
445 |
-
|
446 |
-
|
447 |
-
|
448 |
-
|
449 |
-
|
450 |
-
|
451 |
-
|
452 |
-
|
453 |
-
|
454 |
-
|
455 |
-
|
456 |
-
|
457 |
-
|
458 |
-
|
459 |
-
box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.31);
|
460 |
-
content: "";
|
461 |
-
-webkit-transition: left 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275), padding 0.5s ease, margin 0.5s ease !important;
|
462 |
-
-o-transition: left 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275), padding 0.5s ease, margin 0.5s ease !important;
|
463 |
-
transition: left 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275), padding 0.5s ease, margin 0.5s ease !important;
|
464 |
-
}
|
465 |
-
.switch_button .the_switch:active:after {
|
466 |
-
transform: scale(0.9, 0.85);
|
467 |
-
}
|
468 |
-
.switch_button .the_switch:focus {
|
469 |
-
outline: none;
|
470 |
-
}
|
471 |
|
472 |
/*# sourceMappingURL=shortpixel-admin.css.map */
|
1 |
.view-edit-media a.debugModal {
|
2 |
margin: 20px 0;
|
3 |
+
display: inline-block; }
|
|
|
4 |
.view-edit-media .sp-column-stats {
|
5 |
+
position: relative; }
|
6 |
+
.view-edit-media .sp-column-stats .sp-column-actions {
|
7 |
+
margin-right: 5px;
|
8 |
+
margin-top: 16px; }
|
9 |
+
.view-edit-media .sp-column-stats .edit-media-stats li {
|
10 |
+
margin: 0;
|
11 |
+
line-height: 20px; }
|
|
|
|
|
|
|
12 |
.view-edit-media .main-actions {
|
13 |
display: inline-block;
|
14 |
+
width: 100%; }
|
15 |
+
.view-edit-media .main-actions .button.button-smaller {
|
16 |
+
padding: 6px 15px;
|
17 |
+
height: auto;
|
18 |
+
float: none; }
|
|
|
|
|
19 |
|
20 |
.spio-message img {
|
21 |
animation: cssload-spin 5000ms infinite linear;
|
23 |
-ms-animation: cssload-spin 5000ms infinite linear;
|
24 |
-webkit-animation: cssload-spin 5000ms infinite linear;
|
25 |
-moz-animation: cssload-spin 5000ms infinite linear;
|
26 |
+
vertical-align: top; }
|
|
|
27 |
@keyframes loading-spin {
|
28 |
100% {
|
29 |
transform: rotate(360deg);
|
30 |
+
transform: rotate(360deg); } }
|
|
|
|
|
31 |
@-o-keyframes loading-spin {
|
32 |
100% {
|
33 |
-o-transform: rotate(360deg);
|
34 |
+
transform: rotate(360deg); } }
|
|
|
|
|
35 |
@-ms-keyframes loading-spin {
|
36 |
100% {
|
37 |
-ms-transform: rotate(360deg);
|
38 |
+
transform: rotate(360deg); } }
|
|
|
|
|
39 |
@-webkit-keyframes loading-spin {
|
40 |
100% {
|
41 |
-webkit-transform: rotate(360deg);
|
42 |
+
transform: rotate(360deg); } }
|
|
|
|
|
43 |
@-moz-keyframes loading-spin {
|
44 |
100% {
|
45 |
-moz-transform: rotate(360deg);
|
46 |
+
transform: rotate(360deg); } }
|
|
|
|
|
|
|
47 |
.shortpixel-modal-active .debug-modal.debugInfo ul li strong {
|
48 |
display: inline-block;
|
49 |
+
min-width: 200px; }
|
|
|
50 |
.shortpixel-modal-active .debug-modal.debugInfo ul li img {
|
51 |
+
max-height: 150px; }
|
|
|
52 |
.shortpixel-modal-active .debug-modal.debugInfo .green {
|
53 |
+
color: green; }
|
|
|
54 |
.shortpixel-modal-active .debug-modal.debugInfo .red {
|
55 |
+
color: red; }
|
|
|
56 |
|
57 |
.shortpixel-other-media .sp-column-info .sp-column-actions {
|
58 |
max-width: 140px;
|
59 |
float: right;
|
60 |
+
text-align: right; }
|
|
|
61 |
.shortpixel-other-media .message {
|
62 |
font-weight: 700;
|
63 |
+
margin: 8px 0; }
|
64 |
+
.shortpixel-other-media .message img {
|
65 |
+
animation: cssload-spin 5000ms infinite linear;
|
66 |
+
-o-animation: cssload-spin 5000ms infinite linear;
|
67 |
+
-ms-animation: cssload-spin 5000ms infinite linear;
|
68 |
+
-webkit-animation: cssload-spin 5000ms infinite linear;
|
69 |
+
-moz-animation: cssload-spin 5000ms infinite linear;
|
70 |
+
vertical-align: top; }
|
|
|
|
|
71 |
@keyframes loading-spin {
|
72 |
100% {
|
73 |
transform: rotate(360deg);
|
74 |
+
transform: rotate(360deg); } }
|
|
|
|
|
75 |
@-o-keyframes loading-spin {
|
76 |
100% {
|
77 |
-o-transform: rotate(360deg);
|
78 |
+
transform: rotate(360deg); } }
|
|
|
|
|
79 |
@-ms-keyframes loading-spin {
|
80 |
100% {
|
81 |
-ms-transform: rotate(360deg);
|
82 |
+
transform: rotate(360deg); } }
|
|
|
|
|
83 |
@-webkit-keyframes loading-spin {
|
84 |
100% {
|
85 |
-webkit-transform: rotate(360deg);
|
86 |
+
transform: rotate(360deg); } }
|
|
|
|
|
87 |
@-moz-keyframes loading-spin {
|
88 |
100% {
|
89 |
-moz-transform: rotate(360deg);
|
90 |
+
transform: rotate(360deg); } }
|
|
|
|
|
|
|
91 |
.sp-column-info {
|
92 |
+
position: relative; }
|
93 |
+
.sp-column-info .thumbnails.optimized {
|
94 |
+
position: relative; }
|
95 |
+
.sp-column-info .thumbnails.optimized .thumb-wrapper {
|
96 |
+
background: #fff;
|
97 |
+
padding: 8px;
|
98 |
+
border: 1px solid #ccc;
|
99 |
+
max-width: 360px;
|
100 |
+
position: absolute;
|
101 |
+
display: none;
|
102 |
+
z-index: 10;
|
103 |
+
transition: all 1s;
|
104 |
+
box-sizing: border-box; }
|
105 |
+
.sp-column-info .thumbnails.optimized .thumb-wrapper .thumb {
|
106 |
+
position: relative;
|
107 |
+
width: 100%; }
|
108 |
+
.sp-column-info .thumbnails.optimized .thumb-wrapper .thumb .thumb-name {
|
109 |
+
overflow: hidden;
|
110 |
+
max-width: 200px;
|
111 |
+
white-space: nowrap;
|
112 |
+
display: inline-block; }
|
113 |
+
.sp-column-info .thumbnails.optimized .thumb-wrapper .thumb .optimize-bar {
|
114 |
+
float: right;
|
115 |
+
margin-left: 8px;
|
116 |
+
border-radius: 5px;
|
117 |
+
overflow: hidden;
|
118 |
+
height: 10px;
|
119 |
+
margin-top: 4px; }
|
120 |
+
.sp-column-info .thumbnails.optimized .thumb-wrapper .thumb .optimize-bar .point {
|
121 |
+
width: 10px;
|
122 |
+
height: 10px;
|
123 |
+
display: inline-block;
|
124 |
+
background: #d6d8d9; }
|
125 |
+
.sp-column-info .thumbnails.optimized .thumb-wrapper .thumb .optimize-bar .point.checked {
|
126 |
+
background: #1abdca; }
|
127 |
+
.sp-column-info .thumbnails.optimized:hover .thumb-wrapper {
|
128 |
+
display: block; }
|
129 |
+
.sp-column-info .sp-column-actions {
|
130 |
+
position: absolute;
|
131 |
+
right: 10px;
|
132 |
+
top: 0; }
|
133 |
+
.sp-column-info .thumbs-todo {
|
134 |
+
position: relative; }
|
135 |
+
.sp-column-info .thumbs-todo span {
|
136 |
+
display: none; }
|
137 |
+
.sp-column-info .thumbs-todo h4:hover ~ span {
|
138 |
+
display: block; }
|
139 |
+
.sp-column-info h4 {
|
140 |
+
margin: 0; }
|
141 |
+
.sp-column-info .shortpixel-image-error {
|
142 |
+
display: block;
|
143 |
+
border: 1px solid #ff0000;
|
144 |
+
padding: 12px;
|
145 |
+
margin: 14px 0;
|
146 |
+
font-size: 14px;
|
147 |
+
font-weight: 700; }
|
148 |
+
.sp-column-info .shortpixel-image-error .shortpixel-error-reset {
|
149 |
+
font-weight: 500;
|
150 |
+
font-size: 12px;
|
151 |
+
display: block; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
152 |
|
153 |
.column-wp-shortPixel .message {
|
154 |
font-size: 14px;
|
155 |
font-weight: 700;
|
156 |
+
margin: 12px 0; }
|
157 |
+
.column-wp-shortPixel .message img {
|
158 |
+
animation: cssload-spin 5000ms infinite linear;
|
159 |
+
-o-animation: cssload-spin 5000ms infinite linear;
|
160 |
+
-ms-animation: cssload-spin 5000ms infinite linear;
|
161 |
+
-webkit-animation: cssload-spin 5000ms infinite linear;
|
162 |
+
-moz-animation: cssload-spin 5000ms infinite linear;
|
163 |
+
vertical-align: top; }
|
|
|
|
|
164 |
@keyframes loading-spin {
|
165 |
100% {
|
166 |
transform: rotate(360deg);
|
167 |
+
transform: rotate(360deg); } }
|
|
|
|
|
168 |
@-o-keyframes loading-spin {
|
169 |
100% {
|
170 |
-o-transform: rotate(360deg);
|
171 |
+
transform: rotate(360deg); } }
|
|
|
|
|
172 |
@-ms-keyframes loading-spin {
|
173 |
100% {
|
174 |
-ms-transform: rotate(360deg);
|
175 |
+
transform: rotate(360deg); } }
|
|
|
|
|
176 |
@-webkit-keyframes loading-spin {
|
177 |
100% {
|
178 |
-webkit-transform: rotate(360deg);
|
179 |
+
transform: rotate(360deg); } }
|
|
|
|
|
180 |
@-moz-keyframes loading-spin {
|
181 |
100% {
|
182 |
-moz-transform: rotate(360deg);
|
183 |
+
transform: rotate(360deg); } }
|
|
|
|
|
|
|
184 |
div.sp-modal-shade {
|
185 |
display: none;
|
186 |
/* Hidden by default */
|
200 |
/* Fallback color */
|
201 |
background: rgba(0, 0, 0, 0.4);
|
202 |
/* Black w/ opacity */
|
203 |
+
opacity: 0.4; }
|
|
|
204 |
|
205 |
div.shortpixel-modal {
|
206 |
background-color: #fefefe;
|
217 |
top: 10%;
|
218 |
left: 50%;
|
219 |
max-height: 90%;
|
220 |
+
overflow-y: auto; }
|
221 |
+
div.shortpixel-modal .sp-close-button, div.shortpixel-modal button.sp-close-upgrade-button {
|
222 |
+
float: right;
|
223 |
+
margin-top: 0px;
|
224 |
+
background: transparent !important;
|
225 |
+
border: none;
|
226 |
+
font-size: 22px;
|
227 |
+
line-height: 10px;
|
228 |
+
cursor: pointer; }
|
229 |
+
div.shortpixel-modal .sptw-modal-spinner {
|
230 |
+
background-image: url("../img/spinner2.gif");
|
231 |
+
background-repeat: no-repeat;
|
232 |
+
background-position: center; }
|
|
|
|
|
|
|
233 |
|
234 |
div.sp-modal-title {
|
235 |
+
font-size: 22px; }
|
|
|
236 |
|
237 |
div.sp-modal-body {
|
238 |
+
margin-top: 10px; }
|
|
|
239 |
|
240 |
body.debug-model-active {
|
241 |
+
overflow: hidden; }
|
|
|
242 |
|
243 |
.debugInfo .content.wrapper {
|
244 |
+
display: none; }
|
245 |
+
.debugInfo .content.wrapper li strong {
|
246 |
+
margin-right: 15px; }
|
247 |
+
.debugInfo .content.wrapper ul {
|
248 |
+
margin: 25px 0; }
|
|
|
|
|
|
|
249 |
|
250 |
.debug-modal {
|
251 |
display: none;
|
261 |
top: 10%;
|
262 |
z-index: 10020;
|
263 |
display: none;
|
264 |
+
background: #ffffff; }
|
265 |
+
.debug-modal.success {
|
266 |
+
border: 4px solid green; }
|
267 |
+
.debug-modal.error {
|
268 |
+
border: 4px solid red; }
|
269 |
+
.debug-modal.error h3 {
|
270 |
+
background-color: #ff0000; }
|
271 |
+
.debug-modal .content-area {
|
272 |
+
background-color: #fff; }
|
273 |
+
.debug-modal .modal_header {
|
274 |
+
text-align: center;
|
275 |
+
font-size: 16px;
|
276 |
+
font-weight: 700;
|
277 |
+
background-color: #f3f3f3;
|
278 |
+
border-bottom: 1px solid #ccc;
|
279 |
+
padding: 8px 5px;
|
280 |
+
cursor: move; }
|
281 |
+
.debug-modal .modal_header h3 {
|
282 |
+
margin: 0;
|
283 |
+
color: #444;
|
284 |
+
font-weight: 400;
|
285 |
+
padding: 0;
|
286 |
+
text-align: center;
|
287 |
+
text-shadow: none;
|
288 |
+
font-size: 16px; }
|
289 |
+
.debug-modal .modal_header .modal_close {
|
290 |
+
position: absolute;
|
291 |
+
right: 5px;
|
292 |
+
top: 8px;
|
293 |
+
width: 20px;
|
294 |
+
height: 20px;
|
295 |
+
cursor: pointer;
|
296 |
+
color: #444; }
|
297 |
+
.debug-modal .modal_header .modal_close:hover {
|
298 |
+
cursor: pointer;
|
299 |
+
color: #111; }
|
300 |
+
.debug-modal .content, .debug-modal .modal_content {
|
301 |
+
padding: 5px 15px 10px;
|
302 |
+
overflow-y: auto; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
303 |
|
304 |
.debugModal_overlay {
|
305 |
background: #000;
|
311 |
position: fixed;
|
312 |
opacity: 0.7;
|
313 |
z-index: 10000;
|
314 |
+
display: none; }
|
|
|
315 |
|
316 |
.shortpixel-hide {
|
317 |
+
display: none !important; }
|
|
|
318 |
|
319 |
.button-primary.optimize {
|
320 |
+
margin-bottom: 16px; }
|
|
|
321 |
|
322 |
.switch_button {
|
323 |
line-height: 12px;
|
324 |
margin: 2px -5px 10px -5px;
|
325 |
+
display: inline-block; }
|
326 |
+
.switch_button label {
|
327 |
+
padding: 8px 5px; }
|
328 |
+
.switch_button label:focus {
|
329 |
+
outline: none; }
|
330 |
+
.switch_button input {
|
331 |
+
display: none; }
|
332 |
+
.switch_button input:checked ~ .the_switch {
|
333 |
+
background: #7cdce4; }
|
334 |
+
.switch_button input:checked ~ .the_switch:after {
|
335 |
+
left: 20px;
|
336 |
+
background: #1caecb; }
|
337 |
+
.switch_button input:disabled ~ .the_switch {
|
338 |
+
background: #d5d5d5;
|
339 |
+
pointer-events: none; }
|
340 |
+
.switch_button input:disabled ~ .the_switch:after {
|
341 |
+
background: #bcbdbc; }
|
342 |
+
.switch_button .the_switch {
|
343 |
+
margin: 8px 15px 8px 0;
|
344 |
+
position: relative;
|
345 |
+
display: inline-block;
|
346 |
+
height: 10px;
|
347 |
+
width: 40px;
|
348 |
+
background: #cccccc;
|
349 |
+
border-radius: 100px;
|
350 |
+
cursor: pointer;
|
351 |
+
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.25) !important; }
|
352 |
+
.switch_button .the_switch:after {
|
353 |
+
position: absolute;
|
354 |
+
left: -2px;
|
355 |
+
top: -5px;
|
356 |
+
display: block;
|
357 |
+
width: 20px;
|
358 |
+
height: 20px;
|
359 |
+
border-radius: 100px;
|
360 |
+
background: #aaa;
|
361 |
+
box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.31);
|
362 |
+
content: '';
|
363 |
+
-webkit-transition: left 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275), padding 0.5s ease, margin 0.5s ease !important;
|
364 |
+
-o-transition: left 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275), padding 0.5s ease, margin 0.5s ease !important;
|
365 |
+
transition: left 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275), padding 0.5s ease, margin 0.5s ease !important; }
|
366 |
+
.switch_button .the_switch:active:after {
|
367 |
+
transform: scale(0.9, 0.85); }
|
368 |
+
.switch_button .the_switch:focus {
|
369 |
+
outline: none; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
370 |
|
371 |
/*# sourceMappingURL=shortpixel-admin.css.map */
|
@@ -1 +1 @@
|
|
1 |
-
{"version":3,"sourceRoot":"","sources":["../scss/view/_edit-media.scss","../scss/elements/_animation.scss","../scss/view/_other-media.scss","../scss/view/_list-item.scss","../scss/view/_modal.scss","../scss/view/_debug.scss","../scss/shortpixel-admin.scss"],"names":[],"mappings":"AAII;EAEG;EACA;;AAGH;EAEE;;AAEA;EAEE;EACA;;AAOA;EAEE;EACA;;AAIN;EAEE;EACA;;AAEA;EAGE;EACA;EACA;;;AAQP;EC/CC;EACI;EACA;EACA;EACA;ED6CH;;AC3CF;EACC;IAAM;IAA2B;;;AAGlC;EACC;IAAM;IAA8B;;;AAGrC;EACC;IAAM;IAA+B;;;AAGtC;EACC;IAAM;IAAmC;;;AAG1C;EACC;IAAM;IAAgC;;;;ADmCjC;EAEC;EACA;;AAEF;EACC;;AAUJ;EAAS;;AACT;EAAO;;;AEzEP;EAEG;EACA;EACA;;AAIL;EAEC;EACA;;AACA;EDdA;EACI;EACA;EACA;EACA;ECYF;;ADVH;EACC;IAAM;IAA2B;;;AAGlC;EACC;IAAM;IAA8B;;;AAGrC;EACC;IAAM;IAA+B;;;AAGtC;EACC;IAAM;IAAmC;;;AAG1C;EACC;IAAM;IAAgC;;;;AExBxC;EAEE;;AAEA;EAEE;;AAKA;EAEK;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACJ;;AACI;EAEI;EACA;;AAEL;EACC;EACA;EACA;EACA;;
|
1 |
+
{"version":3,"sourceRoot":"","sources":["../scss/view/_edit-media.scss","../scss/elements/_animation.scss","../scss/view/_other-media.scss","../scss/view/_list-item.scss","../scss/view/_modal.scss","../scss/view/_debug.scss","../scss/shortpixel-admin.scss"],"names":[],"mappings":"AAII;EAEG;EACA;;AAGH;EAEE;;AAEA;EAEE;EACA;;AAOA;EAEE;EACA;;AAIN;EAEE;EACA;;AAEA;EAGE;EACA;EACA;;;AAQP;EC/CC;EACI;EACA;EACA;EACA;ED6CH;;AC3CF;EACC;IAAM;IAA2B;;;AAGlC;EACC;IAAM;IAA8B;;;AAGrC;EACC;IAAM;IAA+B;;;AAGtC;EACC;IAAM;IAAmC;;;AAG1C;EACC;IAAM;IAAgC;;;;ADmCjC;EAEC;EACA;;AAEF;EACC;;AAUJ;EAAS;;AACT;EAAO;;;AEzEP;EAEG;EACA;EACA;;AAIL;EAEC;EACA;;AACA;EDdA;EACI;EACA;EACA;EACA;ECYF;;ADVH;EACC;IAAM;IAA2B;;;AAGlC;EACC;IAAM;IAA8B;;;AAGrC;EACC;IAAM;IAA+B;;;AAGtC;EACC;IAAM;IAAmC;;;AAG1C;EACC;IAAM;IAAgC;;;;AExBxC;EAEE;;AAEA;EAEE;;AAKA;EAEK;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACJ;;AACI;EAEI;EACA;;AAEL;EACC;EACA;EACA;EACA;;AAEI;EACK;EACA;EACA;EACA;EACA;EACA;;AAEC;EAEG;EACA;EAEA;EACA;;AAEA;EACE;;AAOhB;EACI;;AAKV;EAEG;EACA;EACA;;AAEH;EAEG;;AACA;EACI;;AAIJ;EAAkB;;AAGrB;EAAK;;AACL;EACI;EACA;EACA;EACA;EACA;EACA;;AAEA;EAEG;EACA;EACA;;;AASP;EAEG;EACA;EACF;;AACA;EF1GD;EACI;EACA;EACA;EACA;EEwGF;;AFtGH;EACC;IAAM;IAA2B;;;AAGlC;EACC;IAAM;IAA8B;;;AAGrC;EACC;IAAM;IAA+B;;;AAGtC;EACC;IAAM;IAAmC;;;AAG1C;EACC;IAAM;IAAgC;;;;AGzBxC;EACI;AAAe;EACf;AAAiB;EACjB;AAAgB;EAChB;EACA;EACA;AAAa;EACb;AAAc;EACd;AAAgB;EAChB;AAAwB;EACxB;AAA6B;EAC7B;;;AAEJ;EACI;AACA;EACA;EACA;EACA;AAAY;EACZ;AAAkB;EAClB;AAAiB;EACjB;EACA;EACA;EACA;EACA;;AACA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACI;EACA;EACA;;;AAKR;EACI;;;AAEJ;EACI;;;AC/CJ;EACE;;;AAGF;EAEC;;AACA;EACC;;AAED;EAEC;;;AAKF;EACC;EACA;EACA;EACA;EACA;EACA;EACC;EACA;EAED;EACA;EACA;EAEA;EAGA;EACA;;AAEA;EAEE;;AAGF;EACE;;AACA;EAAK;;AAGP;EACE;;AAIF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACC;EACA;;AAIH;EACC;EAIA;;;AAKF;EAEE;EACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AC/FD;EACI;;;AAIJ;EAEE;;;AAGF;EAGC;EACA;EACA;;AAEA;EACC;;AAEA;EACC;;AAGF;EAAQ;;AACP;EAA0B;;AAC1B;EACC;EACA;;AAED;EACC;EACA;;AAED;EAAiC;;AAElC;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACH;EACA;;AAEE;EAAiB;;AACjB;EACC","file":"shortpixel-admin.css"}
|
@@ -2,1008 +2,810 @@
|
|
2 |
/** GENERAL STYLES **/
|
3 |
/**** DASHBOARD ***/
|
4 |
/***************** SELECTION *************/
|
5 |
-
/**************** SUMMARY ******/
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
}
|
22 |
-
.shortpixel-bulk-wrapper
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
}
|
49 |
-
.shortpixel-bulk-wrapper .button
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
}
|
58 |
-
.shortpixel-bulk-wrapper .button
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
margin: 45px auto;
|
78 |
-
width: 80%;
|
79 |
-
min-height: 50px;
|
80 |
-
}
|
81 |
-
.shortpixel-bulk-wrapper nav .button-primary {
|
82 |
-
margin-left: 15px;
|
83 |
-
}
|
84 |
-
.shortpixel-bulk-wrapper .kbinfo a {
|
85 |
-
text-decoration: none;
|
86 |
-
}
|
87 |
-
.shortpixel-bulk-wrapper .hidden {
|
88 |
-
display: none !important;
|
89 |
-
}
|
90 |
-
.shortpixel-bulk-wrapper .dashicons.spin {
|
91 |
-
animation: dashicons-spin 1s infinite;
|
92 |
-
animation-timing-function: linear;
|
93 |
-
}
|
94 |
@keyframes dashicons-spin {
|
95 |
0% {
|
96 |
-
transform: rotate(0deg);
|
97 |
-
}
|
98 |
100% {
|
99 |
-
transform: rotate(360deg);
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
}
|
136 |
-
.shortpixel-bulk-wrapper .bulk-modal .content {
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
}
|
141 |
-
.shortpixel-bulk-wrapper .bulk-modal .content .table-wrapper {
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
}
|
154 |
-
.shortpixel-bulk-wrapper .
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
}
|
168 |
-
.shortpixel-bulk-wrapper .screen-wrapper .shortpixel-bulk-loader {
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
}
|
183 |
-
.shortpixel-bulk-wrapper .screen-wrapper .shortpixel-bulk-loader
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
}
|
201 |
-
.shortpixel-bulk-wrapper .
|
202 |
-
|
203 |
-
|
204 |
-
}
|
205 |
-
.shortpixel-bulk-wrapper .panel {
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
}
|
230 |
-
.shortpixel-bulk-wrapper .
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
}
|
254 |
-
.shortpixel-bulk-wrapper .
|
255 |
-
|
256 |
-
|
257 |
-
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
-
|
265 |
-
|
266 |
-
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
-
|
281 |
-
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
|
296 |
-
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
-
|
301 |
-
|
302 |
-
|
303 |
-
|
304 |
-
|
305 |
-
}
|
306 |
-
.shortpixel-bulk-wrapper section.panel.dashboard
|
307 |
-
|
308 |
-
|
309 |
-
|
310 |
-
|
311 |
-
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
-
|
325 |
-
|
326 |
-
|
327 |
-
|
328 |
-
|
329 |
-
|
330 |
-
|
331 |
-
|
332 |
-
|
333 |
-
|
334 |
-
|
335 |
-
|
336 |
-
|
337 |
-
|
338 |
-
|
339 |
-
|
340 |
-
|
341 |
-
|
342 |
-
|
343 |
-
|
344 |
-
|
345 |
-
|
346 |
-
|
347 |
-
|
348 |
-
|
349 |
-
}
|
350 |
-
.shortpixel-bulk-wrapper section.
|
351 |
-
|
352 |
-
|
353 |
-
|
354 |
-
}
|
355 |
-
.shortpixel-bulk-wrapper section.
|
356 |
-
|
357 |
-
|
358 |
-
|
359 |
-
|
360 |
-
|
361 |
-
|
362 |
-
|
363 |
-
|
364 |
-
|
365 |
-
|
366 |
-
|
367 |
-
|
368 |
-
|
369 |
-
|
370 |
-
|
371 |
-
|
372 |
-
|
373 |
-
|
374 |
-
|
375 |
-
|
376 |
-
|
377 |
-
|
378 |
-
|
379 |
-
|
380 |
-
|
381 |
-
|
382 |
-
|
383 |
-
|
384 |
-
|
385 |
-
|
386 |
-
}
|
387 |
-
.shortpixel-bulk-wrapper section.spio-progressbar {
|
388 |
-
|
389 |
-
|
390 |
-
|
391 |
-
|
392 |
-
|
393 |
-
|
394 |
-
|
395 |
-
|
396 |
-
|
397 |
-
|
398 |
-
|
399 |
-
|
400 |
-
|
401 |
-
|
402 |
-
|
403 |
-
|
404 |
-
|
405 |
-
|
406 |
-
|
407 |
-
|
408 |
-
|
409 |
-
|
410 |
-
|
411 |
-
|
412 |
-
|
413 |
-
|
414 |
-
|
415 |
-
|
416 |
-
}
|
417 |
-
.shortpixel-bulk-wrapper section.
|
418 |
-
|
419 |
-
|
420 |
-
|
421 |
-
|
422 |
-
|
423 |
-
color: #ccc;
|
424 |
-
width: 45px;
|
425 |
-
line-height: 35px;
|
426 |
-
text-align: center;
|
427 |
-
box-sizing: border-box;
|
428 |
-
display: inline-block;
|
429 |
-
z-index: 2;
|
430 |
-
background: #fff;
|
431 |
-
transition: color 1s ease-in;
|
432 |
-
padding-top: 2px;
|
433 |
-
}
|
434 |
-
.shortpixel-bulk-wrapper section.spio-progressbar .flex .text {
|
435 |
-
font-size: 12px;
|
436 |
-
font-weight: 700;
|
437 |
-
text-transform: uppercase;
|
438 |
-
color: #ccc;
|
439 |
-
margin-top: 8px;
|
440 |
-
}
|
441 |
-
.shortpixel-bulk-wrapper section.panel.selection .spio-progressbar .select .line {
|
442 |
-
background: linear-gradient(90deg, #1fbec9 0%, #1fbec9 49.9%, #cccccc 50%, #cccccc 100%);
|
443 |
-
}
|
444 |
-
.shortpixel-bulk-wrapper section.panel.selection .spio-progressbar .select .text, .shortpixel-bulk-wrapper section.panel.selection .spio-progressbar .select .step {
|
445 |
-
color: #EC2C25;
|
446 |
-
}
|
447 |
-
.shortpixel-bulk-wrapper section.panel.selection .spio-progressbar .select .step {
|
448 |
-
border-color: #1FBEC9;
|
449 |
-
}
|
450 |
-
.shortpixel-bulk-wrapper section.panel.selection .load.wrapper, .shortpixel-bulk-wrapper section.panel.selection .interface.wrapper {
|
451 |
-
opacity: 0;
|
452 |
-
height: 0;
|
453 |
-
transition: opacity 100ms ease-in;
|
454 |
-
}
|
455 |
-
.shortpixel-bulk-wrapper section.panel.selection[data-status=loading] .load.wrapper {
|
456 |
-
opacity: 1;
|
457 |
-
height: auto;
|
458 |
-
padding-bottom: 45px;
|
459 |
-
}
|
460 |
-
.shortpixel-bulk-wrapper section.panel.selection[data-status=loaded] .interface.wrapper {
|
461 |
-
opacity: 1;
|
462 |
-
height: auto;
|
463 |
-
}
|
464 |
-
.shortpixel-bulk-wrapper section.panel.selection .load.wrapper .loading {
|
465 |
-
display: flex;
|
466 |
-
color: #ccc;
|
467 |
-
font-weight: 700;
|
468 |
-
align-items: center;
|
469 |
-
width: 90%;
|
470 |
-
margin: auto;
|
471 |
-
}
|
472 |
-
.shortpixel-bulk-wrapper section.panel.selection .load.wrapper .loading > span > {
|
473 |
-
height: 65px;
|
474 |
-
}
|
475 |
-
.shortpixel-bulk-wrapper section.panel.selection .load.wrapper .loading > span > p {
|
476 |
-
margin: 0;
|
477 |
-
}
|
478 |
-
.shortpixel-bulk-wrapper section.panel.selection .load.wrapper .loading span:first-child {
|
479 |
-
margin-right: 20px;
|
480 |
-
}
|
481 |
-
.shortpixel-bulk-wrapper section.panel.selection .load.wrapper .loading img {
|
482 |
-
animation: cssload-spin 5000ms infinite linear;
|
483 |
-
-o-animation: cssload-spin 5000ms infinite linear;
|
484 |
-
-ms-animation: cssload-spin 5000ms infinite linear;
|
485 |
-
-webkit-animation: cssload-spin 5000ms infinite linear;
|
486 |
-
-moz-animation: cssload-spin 5000ms infinite linear;
|
487 |
-
}
|
488 |
@keyframes loading-spin {
|
489 |
100% {
|
490 |
transform: rotate(360deg);
|
491 |
-
transform: rotate(360deg);
|
492 |
-
}
|
493 |
-
}
|
494 |
@-o-keyframes loading-spin {
|
495 |
100% {
|
496 |
-o-transform: rotate(360deg);
|
497 |
-
transform: rotate(360deg);
|
498 |
-
}
|
499 |
-
}
|
500 |
@-ms-keyframes loading-spin {
|
501 |
100% {
|
502 |
-ms-transform: rotate(360deg);
|
503 |
-
transform: rotate(360deg);
|
504 |
-
}
|
505 |
-
}
|
506 |
@-webkit-keyframes loading-spin {
|
507 |
100% {
|
508 |
-webkit-transform: rotate(360deg);
|
509 |
-
transform: rotate(360deg);
|
510 |
-
}
|
511 |
-
}
|
512 |
@-moz-keyframes loading-spin {
|
513 |
100% {
|
514 |
-moz-transform: rotate(360deg);
|
515 |
-
transform: rotate(360deg);
|
516 |
-
|
517 |
-
|
518 |
-
|
519 |
-
|
520 |
-
|
521 |
-
}
|
522 |
-
.shortpixel-bulk-wrapper section.panel.selection .option-block
|
523 |
-
|
524 |
-
|
525 |
-
}
|
526 |
-
.shortpixel-bulk-wrapper section.panel.selection .
|
527 |
-
|
528 |
-
|
529 |
-
|
530 |
-
|
531 |
-
|
532 |
-
|
533 |
-
|
534 |
-
|
535 |
-
|
536 |
-
|
537 |
-
|
538 |
-
|
539 |
-
|
540 |
-
|
541 |
-
|
542 |
-
|
543 |
-
|
544 |
-
|
545 |
-
|
546 |
-
|
547 |
-
|
548 |
-
}
|
549 |
-
.shortpixel-bulk-wrapper section.panel.
|
550 |
-
|
551 |
-
|
552 |
-
|
553 |
-
|
554 |
-
|
555 |
-
|
556 |
-
|
557 |
-
|
558 |
-
|
559 |
-
|
560 |
-
|
561 |
-
|
562 |
-
|
563 |
-
}
|
564 |
-
.shortpixel-bulk-wrapper section.panel.summary .
|
565 |
-
|
566 |
-
|
567 |
-
|
568 |
-
|
569 |
-
|
570 |
-
|
571 |
-
|
572 |
-
|
573 |
-
|
574 |
-
}
|
575 |
-
.shortpixel-bulk-wrapper section.panel.summary .summary-list
|
576 |
-
|
577 |
-
|
578 |
-
|
579 |
-
|
580 |
-
|
581 |
-
|
582 |
-
}
|
583 |
-
.shortpixel-bulk-wrapper section.panel.summary .summary-list
|
584 |
-
|
585 |
-
|
586 |
-
|
587 |
-
|
588 |
-
|
589 |
-
|
590 |
-
|
591 |
-
|
592 |
-
|
593 |
-
|
594 |
-
|
595 |
-
|
596 |
-
|
597 |
-
|
598 |
-
|
599 |
-
|
600 |
-
|
601 |
-
|
602 |
-
|
603 |
-
|
604 |
-
|
605 |
-
|
606 |
-
}
|
607 |
-
.shortpixel-bulk-wrapper section.panel.summary .
|
608 |
-
|
609 |
-
|
610 |
-
|
611 |
-
}
|
612 |
-
.shortpixel-bulk-wrapper section.panel.summary .
|
613 |
-
|
614 |
-
}
|
615 |
-
.shortpixel-bulk-wrapper section.panel.summary .
|
616 |
-
|
617 |
-
|
618 |
-
|
619 |
-
|
620 |
-
|
621 |
-
|
622 |
-
|
623 |
-
|
624 |
-
|
625 |
-
|
626 |
-
|
627 |
-
|
628 |
-
|
629 |
-
|
630 |
-
|
631 |
-
|
632 |
-
|
633 |
-
|
634 |
-
|
635 |
-
|
636 |
-
|
637 |
-
}
|
638 |
-
.shortpixel-bulk-wrapper section.panel.summary .
|
639 |
-
|
640 |
-
|
641 |
-
|
642 |
-
|
643 |
-
|
644 |
-
|
645 |
-
|
646 |
-
|
647 |
-
|
648 |
-
|
649 |
-
|
650 |
-
}
|
651 |
-
.shortpixel-bulk-wrapper section.panel.summary .
|
652 |
-
|
653 |
-
|
654 |
-
|
655 |
-
|
656 |
-
|
657 |
-
|
658 |
-
|
659 |
-
|
660 |
-
|
661 |
-
|
662 |
-
|
663 |
-
|
664 |
-
|
665 |
-
|
666 |
-
|
667 |
-
|
668 |
-
|
669 |
-
|
670 |
-
|
671 |
-
|
672 |
-
|
673 |
-
|
674 |
-
|
675 |
-
|
676 |
-
|
677 |
-
|
678 |
-
|
679 |
-
|
680 |
-
|
681 |
-
|
682 |
-
|
683 |
-
|
684 |
-
|
685 |
-
|
686 |
-
|
687 |
-
|
688 |
-
|
689 |
-
|
690 |
-
|
691 |
-
|
692 |
-
|
693 |
-
|
694 |
-
|
695 |
-
|
696 |
-
|
697 |
-
|
698 |
-
|
699 |
-
|
700 |
-
|
701 |
-
|
702 |
-
|
703 |
-
|
704 |
-
|
705 |
-
|
706 |
-
|
707 |
-
|
708 |
-
|
709 |
-
|
710 |
-
|
711 |
-
|
712 |
-
|
713 |
-
|
714 |
-
|
715 |
-
|
716 |
-
|
717 |
-
|
718 |
-
|
719 |
-
|
720 |
-
|
721 |
-
|
722 |
-
|
723 |
-
|
724 |
-
|
725 |
-
|
726 |
-
|
727 |
-
|
728 |
-
|
729 |
-
|
730 |
-
|
731 |
-
|
732 |
-
|
733 |
-
|
734 |
-
|
735 |
-
|
736 |
-
|
737 |
-
}
|
738 |
-
.shortpixel-bulk-wrapper section.panel.process .
|
739 |
-
|
740 |
-
|
741 |
-
|
742 |
-
|
743 |
-
|
744 |
-
|
745 |
-
}
|
746 |
-
.shortpixel-bulk-wrapper section.panel.process .
|
747 |
-
|
748 |
-
|
749 |
-
|
750 |
-
|
751 |
-
|
752 |
-
|
753 |
-
|
754 |
-
|
755 |
-
|
756 |
-
|
757 |
-
|
758 |
-
|
759 |
-
|
760 |
-
|
761 |
-
|
762 |
-
|
763 |
-
|
764 |
-
|
765 |
-
|
766 |
-
|
767 |
-
|
768 |
-
|
769 |
-
}
|
770 |
-
.shortpixel-bulk-wrapper section.panel.process .
|
771 |
-
|
772 |
-
|
773 |
-
|
774 |
-
|
775 |
-
|
776 |
-
|
777 |
-
|
778 |
-
|
779 |
-
|
780 |
-
|
781 |
-
|
782 |
-
|
783 |
-
|
784 |
-
|
785 |
-
|
786 |
-
|
787 |
-
|
788 |
-
|
789 |
-
|
790 |
-
|
791 |
-
|
792 |
-
|
793 |
-
|
794 |
-
|
795 |
-
|
796 |
-
|
797 |
-
}
|
798 |
-
.shortpixel-bulk-wrapper section.panel.process .
|
799 |
-
|
800 |
-
|
801 |
-
|
802 |
-
|
803 |
-
|
804 |
-
|
805 |
-
|
806 |
-
|
807 |
-
|
808 |
-
|
809 |
-
|
810 |
-
|
811 |
-
|
812 |
-
|
813 |
-
|
814 |
-
|
815 |
-
|
816 |
-
|
817 |
-
|
818 |
-
|
819 |
-
|
820 |
-
|
821 |
-
|
822 |
-
|
823 |
-
|
824 |
-
|
825 |
-
|
826 |
-
|
827 |
-
|
828 |
-
|
829 |
-
|
830 |
-
|
831 |
-
|
832 |
-
|
833 |
-
|
834 |
-
|
835 |
-
|
836 |
-
|
837 |
-
|
838 |
-
|
839 |
-
|
840 |
-
|
841 |
-
}
|
842 |
-
.shortpixel-bulk-wrapper section.panel.
|
843 |
-
|
844 |
-
|
845 |
-
|
846 |
-
|
847 |
-
|
848 |
-
|
849 |
-
|
850 |
-
|
851 |
-
|
852 |
-
|
853 |
-
|
854 |
-
|
855 |
-
|
856 |
-
|
857 |
-
|
858 |
-
}
|
859 |
-
.shortpixel-bulk-wrapper section.panel.
|
860 |
-
|
861 |
-
|
862 |
-
|
863 |
-
|
864 |
-
|
865 |
-
|
866 |
-
|
867 |
-
|
868 |
-
|
869 |
-
|
870 |
-
|
871 |
-
|
872 |
-
|
873 |
-
|
874 |
-
|
875 |
-
|
876 |
-
|
877 |
-
|
878 |
-
}
|
879 |
-
.shortpixel-bulk-wrapper
|
880 |
-
|
881 |
-
|
882 |
-
|
883 |
-
|
884 |
-
|
885 |
-
|
886 |
-
|
887 |
-
|
888 |
-
|
889 |
-
|
890 |
-
|
891 |
-
|
892 |
-
|
893 |
-
|
894 |
-
|
895 |
-
|
896 |
-
|
897 |
-
}
|
898 |
-
.shortpixel-bulk-wrapper
|
899 |
-
|
900 |
-
|
901 |
-
position: absolute;
|
902 |
-
top: calc(50% - 35px);
|
903 |
-
left: 0;
|
904 |
-
z-index: 5;
|
905 |
-
}
|
906 |
-
.shortpixel-bulk-wrapper section.panel.process .image-preview-section .preview-wrapper .image p, .shortpixel-bulk-wrapper section.panel.finished .image-preview-section .preview-wrapper .image p {
|
907 |
-
position: absolute;
|
908 |
-
top: 0;
|
909 |
-
z-index: 10;
|
910 |
-
color: #fff;
|
911 |
-
background: rgba(0, 0, 0, 0.5);
|
912 |
-
padding: 4px;
|
913 |
-
}
|
914 |
-
.shortpixel-bulk-wrapper section.panel.process .image-preview-section .preview-wrapper .image.source, .shortpixel-bulk-wrapper section.panel.finished .image-preview-section .preview-wrapper .image.source {
|
915 |
-
margin-right: 8px;
|
916 |
-
}
|
917 |
-
.shortpixel-bulk-wrapper section.panel.process .image-preview-section .preview-wrapper .image.result, .shortpixel-bulk-wrapper section.panel.finished .image-preview-section .preview-wrapper .image.result {
|
918 |
-
margin-left: 8px;
|
919 |
-
}
|
920 |
-
.shortpixel-bulk-wrapper section.panel.process nav, .shortpixel-bulk-wrapper section.panel.finished nav {
|
921 |
-
width: 80%;
|
922 |
-
margin-top: 35px;
|
923 |
-
}
|
924 |
-
.shortpixel-bulk-wrapper section.panel.finished .spio-progressbar .select .line, .shortpixel-bulk-wrapper section.panel.finished .spio-progressbar .summary .line, .shortpixel-bulk-wrapper section.panel.finished .spio-progressbar .process .line {
|
925 |
-
background: #1FBEC9;
|
926 |
-
}
|
927 |
-
.shortpixel-bulk-wrapper section.panel.finished .spio-progressbar .select .text, .shortpixel-bulk-wrapper section.panel.finished .spio-progressbar .select .step, .shortpixel-bulk-wrapper section.panel.finished .spio-progressbar .summary .text, .shortpixel-bulk-wrapper section.panel.finished .spio-progressbar .summary .step, .shortpixel-bulk-wrapper section.panel.finished .spio-progressbar .process .text, .shortpixel-bulk-wrapper section.panel.finished .spio-progressbar .process .step {
|
928 |
-
color: #ccc;
|
929 |
-
}
|
930 |
-
.shortpixel-bulk-wrapper section.panel.finished .spio-progressbar .select .step, .shortpixel-bulk-wrapper section.panel.finished .spio-progressbar .summary .step, .shortpixel-bulk-wrapper section.panel.finished .spio-progressbar .process .step {
|
931 |
-
border-color: #1FBEC9;
|
932 |
-
}
|
933 |
-
.shortpixel-bulk-wrapper section.panel.finished .spio-progressbar .result .line {
|
934 |
-
background: linear-gradient(90deg, #1fbec9 0%, #1fbec9 49.9%, #cccccc 50%, #cccccc 100%);
|
935 |
-
}
|
936 |
-
.shortpixel-bulk-wrapper section.panel.finished .spio-progressbar .result .text, .shortpixel-bulk-wrapper section.panel.finished .spio-progressbar .result .step {
|
937 |
-
color: #EC2C25;
|
938 |
-
}
|
939 |
-
.shortpixel-bulk-wrapper section.panel.finished .spio-progressbar .result .step {
|
940 |
-
border-color: #1FBEC9;
|
941 |
-
}
|
942 |
-
.shortpixel-bulk-wrapper section.panel.finished nav {
|
943 |
-
text-align: center;
|
944 |
-
}
|
945 |
-
.shortpixel-bulk-wrapper section.panel.finished nav button.finish {
|
946 |
-
padding: 12px 60px;
|
947 |
-
border-radius: 3px;
|
948 |
-
background: #1FBEC9;
|
949 |
-
font-size: 16px;
|
950 |
-
color: #fff;
|
951 |
-
transition: all 0.5s ease;
|
952 |
-
}
|
953 |
-
.shortpixel-bulk-wrapper section.panel.finished nav button.finish:hover {
|
954 |
-
background: #24d1dd;
|
955 |
-
}
|
956 |
-
.shortpixel-bulk-wrapper .part-debug {
|
957 |
-
background: #000;
|
958 |
-
color: #fff;
|
959 |
-
width: 100%;
|
960 |
-
min-height: 150px;
|
961 |
-
max-height: 550px;
|
962 |
-
}
|
963 |
-
.shortpixel-bulk-wrapper .bulk-special-wrapper {
|
964 |
-
margin: 0 auto;
|
965 |
-
max-width: 80%;
|
966 |
-
}
|
967 |
-
.shortpixel-bulk-wrapper .bulk-special-wrapper h4 {
|
968 |
-
color: #ff0000;
|
969 |
-
font-weight: 700;
|
970 |
-
font-size: 20px;
|
971 |
-
}
|
972 |
-
.shortpixel-bulk-wrapper .bulk-special-wrapper h4.warning {
|
973 |
-
float: left;
|
974 |
-
margin: 25px;
|
975 |
-
}
|
976 |
-
.shortpixel-bulk-wrapper .bulk-special-wrapper .warning {
|
977 |
-
color: #ff0000;
|
978 |
-
}
|
979 |
-
.shortpixel-bulk-wrapper .bulk-special-wrapper .optiongroup {
|
980 |
-
clear: both;
|
981 |
-
margin-left: 130px;
|
982 |
-
}
|
983 |
-
.shortpixel-bulk-wrapper .bulk-special-wrapper .optiongroup .switch_button {
|
984 |
-
display: inline-block;
|
985 |
-
}
|
986 |
-
.shortpixel-bulk-wrapper .bulk-special-wrapper .optiongroup h4 {
|
987 |
-
font-size: 14px;
|
988 |
-
font-weight: 400;
|
989 |
-
display: inline-block;
|
990 |
-
margin-left: 25px;
|
991 |
-
color: #000;
|
992 |
-
}
|
993 |
-
.shortpixel-bulk-wrapper .bulk-special-wrapper .optiongroup .option {
|
994 |
-
margin-left: 85px;
|
995 |
-
line-height: 26px;
|
996 |
-
}
|
997 |
-
.shortpixel-bulk-wrapper .bulk-special-wrapper .optiongroup .option label {
|
998 |
-
width: 200px;
|
999 |
-
display: inline-block;
|
1000 |
-
}
|
1001 |
-
.shortpixel-bulk-wrapper .bulk-special-wrapper .optiongroup .option .number {
|
1002 |
-
font-weight: 700;
|
1003 |
-
}
|
1004 |
-
.shortpixel-bulk-wrapper .bulk-special-wrapper .optiongroup.warning {
|
1005 |
-
font-weight: 700;
|
1006 |
-
color: #ff0000;
|
1007 |
-
}
|
1008 |
|
1009 |
/*# sourceMappingURL=shortpixel-bulk.css.map */
|
2 |
/** GENERAL STYLES **/
|
3 |
/**** DASHBOARD ***/
|
4 |
/***************** SELECTION *************/
|
5 |
+
/**************** SUMMARY ******/ }
|
6 |
+
.shortpixel-bulk-wrapper h1 {
|
7 |
+
font-size: 23px;
|
8 |
+
font-weight: 400;
|
9 |
+
line-height: 30px;
|
10 |
+
margin: 30px 0; }
|
11 |
+
.shortpixel-bulk-wrapper h3.heading {
|
12 |
+
margin: 15px 0 15px 0px;
|
13 |
+
padding-left: 10px;
|
14 |
+
font-size: 20px;
|
15 |
+
font-weight: 400;
|
16 |
+
line-height: 42px;
|
17 |
+
border-bottom: 1px solid #ccc;
|
18 |
+
position: relative; }
|
19 |
+
.shortpixel-bulk-wrapper h3.heading span {
|
20 |
+
vertical-align: top;
|
21 |
+
margin-right: 20px; }
|
22 |
+
.shortpixel-bulk-wrapper i {
|
23 |
+
font-style: normal; }
|
24 |
+
.shortpixel-bulk-wrapper p.description {
|
25 |
+
font-size: 14px;
|
26 |
+
margin: 15px 0 15px 15px; }
|
27 |
+
.shortpixel-bulk-wrapper .button {
|
28 |
+
display: flex;
|
29 |
+
align-items: center;
|
30 |
+
justify-content: center;
|
31 |
+
float: left;
|
32 |
+
margin-right: 8px;
|
33 |
+
padding: 8px 16px;
|
34 |
+
background: #F5F5F5;
|
35 |
+
color: #1cbecb;
|
36 |
+
letter-spacing: 0.3px;
|
37 |
+
font-weight: 700;
|
38 |
+
font-size: 14px;
|
39 |
+
transition: 300ms all linear;
|
40 |
+
border: 1px solid #0f6a7d;
|
41 |
+
min-height: 44px; }
|
42 |
+
.shortpixel-bulk-wrapper .button:hover {
|
43 |
+
background: #1cbecb;
|
44 |
+
color: #fff;
|
45 |
+
border: 1px solid #1cbecb; }
|
46 |
+
.shortpixel-bulk-wrapper .button:focus {
|
47 |
+
border-color: #1cbecb;
|
48 |
+
background: #1cbecb; }
|
49 |
+
.shortpixel-bulk-wrapper .button .dashicons {
|
50 |
+
font-size: 26px;
|
51 |
+
height: 26px;
|
52 |
+
margin-right: 8px; }
|
53 |
+
.shortpixel-bulk-wrapper .button p {
|
54 |
+
margin: 0;
|
55 |
+
display: inline;
|
56 |
+
font-size: 14px;
|
57 |
+
vertical-align: bottom; }
|
58 |
+
.shortpixel-bulk-wrapper .button-primary {
|
59 |
+
background: #0f6a7d;
|
60 |
+
color: #fff;
|
61 |
+
border: 1px solid #0f6a7d;
|
62 |
+
border-radius: 3px;
|
63 |
+
box-shadow: 0px 1px 1px rgba(171, 170, 170, 0.3); }
|
64 |
+
.shortpixel-bulk-wrapper nav {
|
65 |
+
margin: 45px auto;
|
66 |
+
width: 80%;
|
67 |
+
min-height: 50px; }
|
68 |
+
.shortpixel-bulk-wrapper nav .button-primary {
|
69 |
+
margin-left: 15px; }
|
70 |
+
.shortpixel-bulk-wrapper .kbinfo a {
|
71 |
+
text-decoration: none; }
|
72 |
+
.shortpixel-bulk-wrapper .hidden {
|
73 |
+
display: none !important; }
|
74 |
+
.shortpixel-bulk-wrapper .dashicons.spin {
|
75 |
+
animation: dashicons-spin 1s infinite;
|
76 |
+
animation-timing-function: linear; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
77 |
@keyframes dashicons-spin {
|
78 |
0% {
|
79 |
+
transform: rotate(0deg); }
|
|
|
80 |
100% {
|
81 |
+
transform: rotate(360deg); } }
|
82 |
+
.shortpixel-bulk-wrapper .loading-icon {
|
83 |
+
width: 50%;
|
84 |
+
height: 50%; }
|
85 |
+
.shortpixel-bulk-wrapper .bulk-modal {
|
86 |
+
position: absolute;
|
87 |
+
padding: 0;
|
88 |
+
left: 0;
|
89 |
+
right: 0;
|
90 |
+
bottom: 0;
|
91 |
+
top: 0;
|
92 |
+
width: auto;
|
93 |
+
box-sizing: border-box;
|
94 |
+
box-shadow: rgba(0, 0, 0, 0.5) 4px 4px 20px; }
|
95 |
+
.shortpixel-bulk-wrapper .bulk-modal .close {
|
96 |
+
position: absolute;
|
97 |
+
right: 10px;
|
98 |
+
top: 10px;
|
99 |
+
color: white;
|
100 |
+
font-size: 26px;
|
101 |
+
cursor: pointer; }
|
102 |
+
.shortpixel-bulk-wrapper .bulk-modal .title {
|
103 |
+
margin: 0;
|
104 |
+
padding: 12px;
|
105 |
+
background: #1FB5BF;
|
106 |
+
background: linear-gradient(90deg, #0f6a7d 0%, #0f6a7d 0%, #1cbecb 100%);
|
107 |
+
width: 100%;
|
108 |
+
font-size: 16px;
|
109 |
+
color: #ffffff;
|
110 |
+
box-sizing: border-box;
|
111 |
+
height: 40px; }
|
112 |
+
.shortpixel-bulk-wrapper .bulk-modal .content {
|
113 |
+
padding: 12px;
|
114 |
+
box-sizing: border-box;
|
115 |
+
height: 90%; }
|
116 |
+
.shortpixel-bulk-wrapper .bulk-modal .content .table-wrapper {
|
117 |
+
display: table; }
|
118 |
+
.shortpixel-bulk-wrapper .bulk-modal .content .table-wrapper .heading {
|
119 |
+
font-weight: 700; }
|
120 |
+
.shortpixel-bulk-wrapper .bulk-modal .content .table-wrapper .heading > span {
|
121 |
+
border-bottom: 1px solid #ccc;
|
122 |
+
border-left: 1px solid #ddd; }
|
123 |
+
.shortpixel-bulk-wrapper .bulk-modal .content .table-wrapper > div {
|
124 |
+
display: table-row; }
|
125 |
+
.shortpixel-bulk-wrapper .bulk-modal .content .table-wrapper > div > span {
|
126 |
+
display: table-cell;
|
127 |
+
padding: 4px 8px; }
|
128 |
+
.shortpixel-bulk-wrapper .bulk-modal .content a {
|
129 |
+
text-decoration: none;
|
130 |
+
margin-left: 8px; }
|
131 |
+
.shortpixel-bulk-wrapper .screen-wrapper {
|
132 |
+
background: #fff;
|
133 |
+
width: 90%;
|
134 |
+
min-height: 80vh;
|
135 |
+
position: relative; }
|
136 |
+
.shortpixel-bulk-wrapper .screen-wrapper .shortpixel-bulk-loader {
|
137 |
+
left: 0;
|
138 |
+
right: 0;
|
139 |
+
top: 0;
|
140 |
+
bottom: 0;
|
141 |
+
background: #fff;
|
142 |
+
transition: opacity 1s linear;
|
143 |
+
z-index: -1;
|
144 |
+
opacity: 0;
|
145 |
+
visibility: hidden;
|
146 |
+
padding: 25px 0 15px 0;
|
147 |
+
width: 60%;
|
148 |
+
border-radius: 10px;
|
149 |
+
margin: 0 auto; }
|
150 |
+
.shortpixel-bulk-wrapper .screen-wrapper .shortpixel-bulk-loader[data-status="loading"] {
|
151 |
+
z-index: 100;
|
152 |
+
visibility: visible;
|
153 |
+
opacity: 0.9;
|
154 |
+
position: absolute;
|
155 |
+
width: 100%; }
|
156 |
+
.shortpixel-bulk-wrapper .screen-wrapper .shortpixel-bulk-loader .loader {
|
157 |
+
display: flex;
|
158 |
+
flex-direction: column;
|
159 |
+
align-items: center;
|
160 |
+
width: 100%;
|
161 |
+
height: 100%;
|
162 |
+
justify-content: center; }
|
163 |
+
.shortpixel-bulk-wrapper .screen-wrapper .shortpixel-bulk-loader .loader span h2 {
|
164 |
+
color: #555; }
|
165 |
+
.shortpixel-bulk-wrapper .screen-wrapper .shortpixel-bulk-loader .loader .svg-spinner .svg-loader {
|
166 |
+
width: 200px;
|
167 |
+
height: 50px; }
|
168 |
+
.shortpixel-bulk-wrapper .panel {
|
169 |
+
width: 100%;
|
170 |
+
position: absolute;
|
171 |
+
display: none;
|
172 |
+
z-index: 0;
|
173 |
+
visibility: hidden;
|
174 |
+
opacity: 0;
|
175 |
+
transition: opacity 500ms ease-in;
|
176 |
+
margin: 15px 0;
|
177 |
+
padding-bottom: 35px; }
|
178 |
+
.shortpixel-bulk-wrapper .panel.active {
|
179 |
+
visibility: visible;
|
180 |
+
opacity: 1;
|
181 |
+
z-index: 5;
|
182 |
+
position: relative; }
|
183 |
+
.shortpixel-bulk-wrapper .panel .panel-container {
|
184 |
+
z-index: 5;
|
185 |
+
display: inline-block;
|
186 |
+
width: 100%; }
|
187 |
+
.shortpixel-bulk-wrapper .panel .error h3 {
|
188 |
+
margin-left: 12px; }
|
189 |
+
.shortpixel-bulk-wrapper .panel .error p {
|
190 |
+
margin-left: 12px;
|
191 |
+
color: #ff0000; }
|
192 |
+
.shortpixel-bulk-wrapper .panel .error p.text {
|
193 |
+
color: #000; }
|
194 |
+
.shortpixel-bulk-wrapper .panel .errorbox {
|
195 |
+
display: block;
|
196 |
+
transition: 1s all;
|
197 |
+
opacity: 0;
|
198 |
+
display: none;
|
199 |
+
right: 10px;
|
200 |
+
top: 4px;
|
201 |
+
padding: 8px;
|
202 |
+
height: 100%;
|
203 |
+
border: 1px solid #000;
|
204 |
+
width: 80%;
|
205 |
+
margin: 30px auto;
|
206 |
+
background: rgba(255, 255, 255, 0.9);
|
207 |
+
line-height: 22px;
|
208 |
+
max-height: 300px;
|
209 |
+
overflow-y: scroll; }
|
210 |
+
.shortpixel-bulk-wrapper .panel .errorbox .fatal {
|
211 |
+
color: #ff0000; }
|
212 |
+
.shortpixel-bulk-wrapper .processor-paused {
|
213 |
+
display: none;
|
214 |
+
margin: 25px 0;
|
215 |
+
width: 90%;
|
216 |
+
background: #1fbec9;
|
217 |
+
border: 1px solid #ccc;
|
218 |
+
font-size: 26px;
|
219 |
+
line-height: 26px;
|
220 |
+
padding: 26px 0;
|
221 |
+
text-align: center;
|
222 |
+
z-index: 10;
|
223 |
+
border-radius: 3px;
|
224 |
+
cursor: pointer;
|
225 |
+
transition: all 900ms; }
|
226 |
+
.shortpixel-bulk-wrapper .processor-paused:hover {
|
227 |
+
background: #1ca9b3; }
|
228 |
+
.shortpixel-bulk-wrapper .processor-paused .dashicons {
|
229 |
+
margin-right: 6px; }
|
230 |
+
.shortpixel-bulk-wrapper .processor-paused .dashicons::before {
|
231 |
+
width: 26px;
|
232 |
+
height: 26px;
|
233 |
+
font-size: 26px; }
|
234 |
+
.shortpixel-bulk-wrapper .processor-paused .dashicons:hover::before {
|
235 |
+
content: '\F522'; }
|
236 |
+
.shortpixel-bulk-wrapper .processor-overquota {
|
237 |
+
display: none;
|
238 |
+
background: #ff0000;
|
239 |
+
line-height: 26px;
|
240 |
+
padding: 20px 0;
|
241 |
+
border-radius: 3px;
|
242 |
+
margin: 25px 0;
|
243 |
+
width: 90%;
|
244 |
+
text-align: center; }
|
245 |
+
.shortpixel-bulk-wrapper .processor-overquota h3 {
|
246 |
+
font-size: 26px;
|
247 |
+
color: #fff;
|
248 |
+
margin: 10px 0; }
|
249 |
+
.shortpixel-bulk-wrapper .processor-overquota p a {
|
250 |
+
font-size: 16px;
|
251 |
+
color: #fff;
|
252 |
+
text-decoration: none; }
|
253 |
+
.shortpixel-bulk-wrapper section.panel.dashboard h3.heading {
|
254 |
+
border: 0; }
|
255 |
+
.shortpixel-bulk-wrapper section.panel.dashboard .bulk-wrapper {
|
256 |
+
background: url("../img/bulk/dashboard-background.svg") no-repeat;
|
257 |
+
background-size: cover;
|
258 |
+
background-position: center;
|
259 |
+
background-color: #116C7D;
|
260 |
+
text-align: center;
|
261 |
+
height: 150px;
|
262 |
+
position: relative;
|
263 |
+
display: flex;
|
264 |
+
align-items: center;
|
265 |
+
justify-content: center; }
|
266 |
+
.shortpixel-bulk-wrapper section.panel.dashboard .bulk-wrapper .dashboard-image {
|
267 |
+
z-index: 1;
|
268 |
+
position: absolute;
|
269 |
+
left: 0;
|
270 |
+
right: 0; }
|
271 |
+
.shortpixel-bulk-wrapper section.panel.dashboard .bulk-wrapper button {
|
272 |
+
color: #ffffff;
|
273 |
+
border-radius: 3px;
|
274 |
+
width: 250px;
|
275 |
+
height: 65px;
|
276 |
+
transition: all 0.5s linear;
|
277 |
+
font-weight: 700;
|
278 |
+
letter-spacing: 0.3px;
|
279 |
+
border: 1px solid #ccc; }
|
280 |
+
.shortpixel-bulk-wrapper section.panel.dashboard .bulk-wrapper button:hover {
|
281 |
+
background: #0f6a7d;
|
282 |
+
height: 80px;
|
283 |
+
width: 300px;
|
284 |
+
transition: all 1s linear; }
|
285 |
+
.shortpixel-bulk-wrapper section.panel.dashboard .bulk-wrapper button:disabled {
|
286 |
+
color: #ccc;
|
287 |
+
background: #0e5358; }
|
288 |
+
.shortpixel-bulk-wrapper section.panel.dashboard .bulk-wrapper button span {
|
289 |
+
margin-right: 16px; }
|
290 |
+
.shortpixel-bulk-wrapper section.panel.dashboard .dashboard-log {
|
291 |
+
display: table;
|
292 |
+
width: 80%;
|
293 |
+
margin: 0 auto; }
|
294 |
+
.shortpixel-bulk-wrapper section.panel.dashboard .dashboard-log h3 {
|
295 |
+
display: table-caption;
|
296 |
+
text-align: center; }
|
297 |
+
.shortpixel-bulk-wrapper section.panel.dashboard .dashboard-log > div {
|
298 |
+
display: table-row; }
|
299 |
+
.shortpixel-bulk-wrapper section.panel.dashboard .dashboard-log > div > span {
|
300 |
+
display: table-cell;
|
301 |
+
padding: 8px 8px 8px 0; }
|
302 |
+
.shortpixel-bulk-wrapper section.panel.dashboard .dashboard-log .head span {
|
303 |
+
font-weight: 700;
|
304 |
+
padding-left: 15px; }
|
305 |
+
.shortpixel-bulk-wrapper section.panel.dashboard .dashboard-log .data span {
|
306 |
+
border-bottom: 1px solid #EBF5FF;
|
307 |
+
border-top: 1px solid #EBF5FF;
|
308 |
+
font-size: 15px;
|
309 |
+
padding-left: 10px; }
|
310 |
+
.shortpixel-bulk-wrapper section.panel.dashboard .dashboard-log .data span:first-child {
|
311 |
+
border-left: 1px solid #EBF5FF; }
|
312 |
+
.shortpixel-bulk-wrapper section.panel.dashboard .dashboard-log .data span:last-child {
|
313 |
+
border-right: 1px solid #EBF5FF; }
|
314 |
+
.shortpixel-bulk-wrapper section.panel.dashboard .dashboard-log .data span.date {
|
315 |
+
color: #1FBEC9;
|
316 |
+
background: url("../img/bulk/checkmark.svg") left center no-repeat;
|
317 |
+
padding-left: 29px; }
|
318 |
+
.shortpixel-bulk-wrapper section.spio-progressbar {
|
319 |
+
margin: 30px 0; }
|
320 |
+
.shortpixel-bulk-wrapper section.spio-progressbar .flex {
|
321 |
+
display: flex;
|
322 |
+
flex-direction: row;
|
323 |
+
width: 90%;
|
324 |
+
justify-content: space-around;
|
325 |
+
margin: 0 auto; }
|
326 |
+
.shortpixel-bulk-wrapper section.spio-progressbar .flex > div {
|
327 |
+
display: flex;
|
328 |
+
align-items: center;
|
329 |
+
position: relative;
|
330 |
+
flex-direction: column;
|
331 |
+
flex-grow: 1; }
|
332 |
+
.shortpixel-bulk-wrapper section.spio-progressbar .flex > div.result .line {
|
333 |
+
background: linear-gradient(90deg, #cccccc 0%, #cccccc 49.9%, white 51%, white 100%); }
|
334 |
+
.shortpixel-bulk-wrapper section.spio-progressbar .flex > div.select .line {
|
335 |
+
width: 50%;
|
336 |
+
left: 50%; }
|
337 |
+
.shortpixel-bulk-wrapper section.spio-progressbar .flex .line {
|
338 |
+
background: #ccc;
|
339 |
+
height: 2px;
|
340 |
+
width: 100%;
|
341 |
+
box-sizing: border-box;
|
342 |
+
display: inline-block;
|
343 |
+
position: absolute;
|
344 |
+
top: 22px;
|
345 |
+
z-index: 1;
|
346 |
+
transition: color 1s ease-in; }
|
347 |
+
.shortpixel-bulk-wrapper section.spio-progressbar .flex .step {
|
348 |
+
border: 2px solid #ccc;
|
349 |
+
border-radius: 50%;
|
350 |
+
height: 45px;
|
351 |
+
font-size: 28px;
|
352 |
+
font-weight: 700;
|
353 |
+
color: #ccc;
|
354 |
+
width: 45px;
|
355 |
+
line-height: 35px;
|
356 |
+
text-align: center;
|
357 |
+
box-sizing: border-box;
|
358 |
+
display: inline-block;
|
359 |
+
z-index: 2;
|
360 |
+
background: #fff;
|
361 |
+
transition: color 1s ease-in;
|
362 |
+
padding-top: 2px; }
|
363 |
+
.shortpixel-bulk-wrapper section.spio-progressbar .flex .text {
|
364 |
+
font-size: 12px;
|
365 |
+
font-weight: 700;
|
366 |
+
text-transform: uppercase;
|
367 |
+
color: #ccc;
|
368 |
+
margin-top: 8px; }
|
369 |
+
.shortpixel-bulk-wrapper section.panel.selection .spio-progressbar .select .line {
|
370 |
+
background: linear-gradient(90deg, #1fbec9 0%, #1fbec9 49.9%, #cccccc 50%, #cccccc 100%); }
|
371 |
+
.shortpixel-bulk-wrapper section.panel.selection .spio-progressbar .select .text, .shortpixel-bulk-wrapper section.panel.selection .spio-progressbar .select .step {
|
372 |
+
color: #EC2C25; }
|
373 |
+
.shortpixel-bulk-wrapper section.panel.selection .spio-progressbar .select .step {
|
374 |
+
border-color: #1FBEC9; }
|
375 |
+
.shortpixel-bulk-wrapper section.panel.selection .load.wrapper, .shortpixel-bulk-wrapper section.panel.selection .interface.wrapper {
|
376 |
+
opacity: 0;
|
377 |
+
height: 0;
|
378 |
+
transition: opacity 100ms ease-in; }
|
379 |
+
.shortpixel-bulk-wrapper section.panel.selection[data-status="loading"] .load.wrapper {
|
380 |
+
opacity: 1;
|
381 |
+
height: auto;
|
382 |
+
padding-bottom: 45px; }
|
383 |
+
.shortpixel-bulk-wrapper section.panel.selection[data-status="loaded"] .interface.wrapper {
|
384 |
+
opacity: 1;
|
385 |
+
height: auto; }
|
386 |
+
.shortpixel-bulk-wrapper section.panel.selection .load.wrapper .loading {
|
387 |
+
display: flex;
|
388 |
+
color: #ccc;
|
389 |
+
font-weight: 700;
|
390 |
+
align-items: center;
|
391 |
+
width: 90%;
|
392 |
+
margin: auto; }
|
393 |
+
.shortpixel-bulk-wrapper section.panel.selection .load.wrapper .loading > span > {
|
394 |
+
height: 65px; }
|
395 |
+
.shortpixel-bulk-wrapper section.panel.selection .load.wrapper .loading > span > p {
|
396 |
+
margin: 0; }
|
397 |
+
.shortpixel-bulk-wrapper section.panel.selection .load.wrapper .loading span:first-child {
|
398 |
+
margin-right: 20px; }
|
399 |
+
.shortpixel-bulk-wrapper section.panel.selection .load.wrapper .loading img {
|
400 |
+
animation: cssload-spin 5000ms infinite linear;
|
401 |
+
-o-animation: cssload-spin 5000ms infinite linear;
|
402 |
+
-ms-animation: cssload-spin 5000ms infinite linear;
|
403 |
+
-webkit-animation: cssload-spin 5000ms infinite linear;
|
404 |
+
-moz-animation: cssload-spin 5000ms infinite linear; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
405 |
@keyframes loading-spin {
|
406 |
100% {
|
407 |
transform: rotate(360deg);
|
408 |
+
transform: rotate(360deg); } }
|
|
|
|
|
409 |
@-o-keyframes loading-spin {
|
410 |
100% {
|
411 |
-o-transform: rotate(360deg);
|
412 |
+
transform: rotate(360deg); } }
|
|
|
|
|
413 |
@-ms-keyframes loading-spin {
|
414 |
100% {
|
415 |
-ms-transform: rotate(360deg);
|
416 |
+
transform: rotate(360deg); } }
|
|
|
|
|
417 |
@-webkit-keyframes loading-spin {
|
418 |
100% {
|
419 |
-webkit-transform: rotate(360deg);
|
420 |
+
transform: rotate(360deg); } }
|
|
|
|
|
421 |
@-moz-keyframes loading-spin {
|
422 |
100% {
|
423 |
-moz-transform: rotate(360deg);
|
424 |
+
transform: rotate(360deg); } }
|
425 |
+
.shortpixel-bulk-wrapper section.panel.selection .option-block {
|
426 |
+
margin: 0 auto 35px;
|
427 |
+
width: 80%; }
|
428 |
+
.shortpixel-bulk-wrapper section.panel.selection .option-block h2 {
|
429 |
+
font-size: 22px;
|
430 |
+
color: #555; }
|
431 |
+
.shortpixel-bulk-wrapper section.panel.selection .option-block p {
|
432 |
+
margin-left: 0; }
|
433 |
+
.shortpixel-bulk-wrapper section.panel.selection .optiongroup .switch_button {
|
434 |
+
display: inline-block; }
|
435 |
+
.shortpixel-bulk-wrapper section.panel.selection .optiongroup h4 {
|
436 |
+
font-size: 14px;
|
437 |
+
font-weight: 700;
|
438 |
+
display: inline-block;
|
439 |
+
margin-left: 25px; }
|
440 |
+
.shortpixel-bulk-wrapper section.panel.selection .optiongroup .option {
|
441 |
+
margin-left: 85px;
|
442 |
+
line-height: 26px; }
|
443 |
+
.shortpixel-bulk-wrapper section.panel.selection .optiongroup .option label {
|
444 |
+
width: 200px;
|
445 |
+
display: inline-block; }
|
446 |
+
.shortpixel-bulk-wrapper section.panel.selection .optiongroup .option .number {
|
447 |
+
font-weight: 700; }
|
448 |
+
.shortpixel-bulk-wrapper section.panel.selection .count_limited {
|
449 |
+
color: #ff0000; }
|
450 |
+
.shortpixel-bulk-wrapper section.panel.summary .spio-progressbar .select .line {
|
451 |
+
background: #1FBEC9; }
|
452 |
+
.shortpixel-bulk-wrapper section.panel.summary .spio-progressbar .select .text, .shortpixel-bulk-wrapper section.panel.summary .spio-progressbar .select .step {
|
453 |
+
color: #ccc; }
|
454 |
+
.shortpixel-bulk-wrapper section.panel.summary .spio-progressbar .select .step {
|
455 |
+
border-color: #1FBEC9; }
|
456 |
+
.shortpixel-bulk-wrapper section.panel.summary .spio-progressbar .summary .line {
|
457 |
+
background: linear-gradient(90deg, #1fbec9 0%, #1fbec9 49.9%, #cccccc 50%, #cccccc 100%); }
|
458 |
+
.shortpixel-bulk-wrapper section.panel.summary .spio-progressbar .summary .text, .shortpixel-bulk-wrapper section.panel.summary .spio-progressbar .summary .step {
|
459 |
+
color: #EC2C25; }
|
460 |
+
.shortpixel-bulk-wrapper section.panel.summary .spio-progressbar .summary .step {
|
461 |
+
border-color: #1FBEC9; }
|
462 |
+
.shortpixel-bulk-wrapper section.panel.summary .summary-list {
|
463 |
+
background-color: #F6F9FF;
|
464 |
+
width: 80%;
|
465 |
+
margin: 0 auto; }
|
466 |
+
.shortpixel-bulk-wrapper section.panel.summary .summary-list h3 {
|
467 |
+
font-size: 18px;
|
468 |
+
font-weight: 400;
|
469 |
+
padding: 26px 0;
|
470 |
+
color: #555D66;
|
471 |
+
padding-left: 35px;
|
472 |
+
border-bottom: 1px solid #DFEAFF; }
|
473 |
+
.shortpixel-bulk-wrapper section.panel.summary .summary-list h3 span {
|
474 |
+
float: right;
|
475 |
+
margin-right: 35px;
|
476 |
+
margin-top: -15px; }
|
477 |
+
.shortpixel-bulk-wrapper section.panel.summary .summary-list .section-wrapper h4 {
|
478 |
+
font-size: 14px;
|
479 |
+
font-weight: 700;
|
480 |
+
padding-left: 80px; }
|
481 |
+
.shortpixel-bulk-wrapper section.panel.summary .summary-list .section-wrapper h4 .dashicons {
|
482 |
+
color: #1FBEC9;
|
483 |
+
margin-right: 10px; }
|
484 |
+
.shortpixel-bulk-wrapper section.panel.summary .summary-list .section-wrapper .list-table {
|
485 |
+
display: table;
|
486 |
+
width: 90%;
|
487 |
+
margin: 0 auto; }
|
488 |
+
.shortpixel-bulk-wrapper section.panel.summary .summary-list .section-wrapper .list-table > div {
|
489 |
+
display: table-row;
|
490 |
+
background-color: #F0F5FF;
|
491 |
+
font-size: 16px; }
|
492 |
+
.shortpixel-bulk-wrapper section.panel.summary .summary-list .section-wrapper .list-table > div.filetypes {
|
493 |
+
background: #F5F9FF;
|
494 |
+
color: #aaa;
|
495 |
+
font-size: 12px; }
|
496 |
+
.shortpixel-bulk-wrapper section.panel.summary .summary-list .section-wrapper .list-table > div.filetypes > span {
|
497 |
+
border: 0; }
|
498 |
+
.shortpixel-bulk-wrapper section.panel.summary .summary-list .section-wrapper .list-table > div > span {
|
499 |
+
display: table-cell;
|
500 |
+
border: 1px solid #DFEAFF;
|
501 |
+
width: 50%;
|
502 |
+
padding: 15px 0 15px 15px; }
|
503 |
+
.shortpixel-bulk-wrapper section.panel.summary .totals {
|
504 |
+
text-align: center;
|
505 |
+
font-size: 25px;
|
506 |
+
padding: 35px 0;
|
507 |
+
background: #F6F9FF; }
|
508 |
+
.shortpixel-bulk-wrapper section.panel.summary .totals .number {
|
509 |
+
margin-left: 35px; }
|
510 |
+
.shortpixel-bulk-wrapper section.panel.summary .credits {
|
511 |
+
display: table;
|
512 |
+
width: 80%;
|
513 |
+
margin: 35px auto; }
|
514 |
+
.shortpixel-bulk-wrapper section.panel.summary .credits > p {
|
515 |
+
display: table-row; }
|
516 |
+
.shortpixel-bulk-wrapper section.panel.summary .credits > p > span {
|
517 |
+
display: table-cell;
|
518 |
+
padding: 10px 0;
|
519 |
+
font-size: 14px;
|
520 |
+
vertical-align: middle; }
|
521 |
+
.shortpixel-bulk-wrapper section.panel.summary .credits > p > span:first-child {
|
522 |
+
font-weight: 700;
|
523 |
+
width: 40%; }
|
524 |
+
.shortpixel-bulk-wrapper section.panel.summary .credits > p > span:nth-child(2n) {
|
525 |
+
width: 30%; }
|
526 |
+
.shortpixel-bulk-wrapper section.panel.summary .credits > p > span:nth-child(3n) {
|
527 |
+
text-align: right; }
|
528 |
+
.shortpixel-bulk-wrapper section.panel.summary .credits > p > span .button {
|
529 |
+
float: right;
|
530 |
+
margin-right: 0; }
|
531 |
+
.shortpixel-bulk-wrapper section.panel.summary .credits .heading span {
|
532 |
+
font-size: 18px;
|
533 |
+
font-weight: 700; }
|
534 |
+
.shortpixel-bulk-wrapper section.panel.summary .over-quota, .shortpixel-bulk-wrapper section.panel.summary .no-images {
|
535 |
+
border: 1px solid #ff0000;
|
536 |
+
padding: 16px;
|
537 |
+
width: 80%;
|
538 |
+
margin: 30px auto;
|
539 |
+
display: flex;
|
540 |
+
align-items: center; }
|
541 |
+
.shortpixel-bulk-wrapper section.panel.summary .over-quota > span, .shortpixel-bulk-wrapper section.panel.summary .no-images > span {
|
542 |
+
margin-right: 20px; }
|
543 |
+
.shortpixel-bulk-wrapper section.panel.summary .over-quota p, .shortpixel-bulk-wrapper section.panel.summary .no-images p {
|
544 |
+
max-width: 550px;
|
545 |
+
font-size: 14px;
|
546 |
+
line-height: 21px; }
|
547 |
+
.shortpixel-bulk-wrapper section.panel.summary .over-quota p .red, .shortpixel-bulk-wrapper section.panel.summary .no-images p .red {
|
548 |
+
color: #ff0000; }
|
549 |
+
.shortpixel-bulk-wrapper section.panel.summary .over-quota button, .shortpixel-bulk-wrapper section.panel.summary .no-images button {
|
550 |
+
background: #F5F5F5;
|
551 |
+
color: #1FBEC9;
|
552 |
+
border: 1px solid #1FBEC9;
|
553 |
+
border-radius: 3px;
|
554 |
+
box-shadow: 0px 1px 1px rgba(171, 170, 170, 0.3);
|
555 |
+
margin: 16px 0; }
|
556 |
+
.shortpixel-bulk-wrapper section.panel.summary .no-images {
|
557 |
+
font-size: 14px;
|
558 |
+
padding: 16px;
|
559 |
+
font-weight: 500; }
|
560 |
+
.shortpixel-bulk-wrapper section.panel.process .spio-progressbar .select .line, .shortpixel-bulk-wrapper section.panel.process .spio-progressbar .summary .line, .shortpixel-bulk-wrapper section.panel.finished .spio-progressbar .select .line, .shortpixel-bulk-wrapper section.panel.finished .spio-progressbar .summary .line {
|
561 |
+
background: #1FBEC9; }
|
562 |
+
.shortpixel-bulk-wrapper section.panel.process .spio-progressbar .select .text, .shortpixel-bulk-wrapper section.panel.process .spio-progressbar .select .step, .shortpixel-bulk-wrapper section.panel.process .spio-progressbar .summary .text, .shortpixel-bulk-wrapper section.panel.process .spio-progressbar .summary .step, .shortpixel-bulk-wrapper section.panel.finished .spio-progressbar .select .text, .shortpixel-bulk-wrapper section.panel.finished .spio-progressbar .select .step, .shortpixel-bulk-wrapper section.panel.finished .spio-progressbar .summary .text, .shortpixel-bulk-wrapper section.panel.finished .spio-progressbar .summary .step {
|
563 |
+
color: #ccc; }
|
564 |
+
.shortpixel-bulk-wrapper section.panel.process .spio-progressbar .select .step, .shortpixel-bulk-wrapper section.panel.process .spio-progressbar .summary .step, .shortpixel-bulk-wrapper section.panel.finished .spio-progressbar .select .step, .shortpixel-bulk-wrapper section.panel.finished .spio-progressbar .summary .step {
|
565 |
+
border-color: #1FBEC9; }
|
566 |
+
.shortpixel-bulk-wrapper section.panel.process .spio-progressbar .process .line, .shortpixel-bulk-wrapper section.panel.finished .spio-progressbar .process .line {
|
567 |
+
background: linear-gradient(90deg, #1fbec9 0%, #1fbec9 49.9%, #cccccc 50%, #cccccc 100%); }
|
568 |
+
.shortpixel-bulk-wrapper section.panel.process .spio-progressbar .process .text, .shortpixel-bulk-wrapper section.panel.process .spio-progressbar .process .step, .shortpixel-bulk-wrapper section.panel.finished .spio-progressbar .process .text, .shortpixel-bulk-wrapper section.panel.finished .spio-progressbar .process .step {
|
569 |
+
color: #EC2C25; }
|
570 |
+
.shortpixel-bulk-wrapper section.panel.process .spio-progressbar .process .step, .shortpixel-bulk-wrapper section.panel.finished .spio-progressbar .process .step {
|
571 |
+
border-color: #1FBEC9; }
|
572 |
+
.shortpixel-bulk-wrapper section.panel.process .average-optimization, .shortpixel-bulk-wrapper section.panel.finished .average-optimization {
|
573 |
+
position: absolute;
|
574 |
+
top: 0px;
|
575 |
+
right: 0;
|
576 |
+
display: flex;
|
577 |
+
justify-content: center;
|
578 |
+
z-index: 2;
|
579 |
+
background: rgba(255, 255, 255, 0.4); }
|
580 |
+
.shortpixel-bulk-wrapper section.panel.process .average-optimization p, .shortpixel-bulk-wrapper section.panel.finished .average-optimization p {
|
581 |
+
margin: 0;
|
582 |
+
font-size: 13px;
|
583 |
+
position: absolute;
|
584 |
+
bottom: 45px;
|
585 |
+
left: 0;
|
586 |
+
padding: 6px 10px;
|
587 |
+
color: #fff;
|
588 |
+
background: rgba(15, 106, 125, 0.5);
|
589 |
+
font-weight: 700;
|
590 |
+
border-radius: 3px; }
|
591 |
+
.shortpixel-bulk-wrapper section.panel.process .average-optimization .opt-circle-average, .shortpixel-bulk-wrapper section.panel.finished .average-optimization .opt-circle-average {
|
592 |
+
width: 150px;
|
593 |
+
height: 150px;
|
594 |
+
float: right; }
|
595 |
+
.shortpixel-bulk-wrapper section.panel.process .average-optimization .opt-circle-average .trail, .shortpixel-bulk-wrapper section.panel.finished .average-optimization .opt-circle-average .trail {
|
596 |
+
stroke: #ddd; }
|
597 |
+
.shortpixel-bulk-wrapper section.panel.process .average-optimization .opt-circle-average .path, .shortpixel-bulk-wrapper section.panel.finished .average-optimization .opt-circle-average .path {
|
598 |
+
stroke: #1cbecb;
|
599 |
+
stroke-linecap: round;
|
600 |
+
transition: stroke-dashoffset 0.5s ease 0s; }
|
601 |
+
.shortpixel-bulk-wrapper section.panel.process .average-optimization .opt-circle-average .text, .shortpixel-bulk-wrapper section.panel.finished .average-optimization .opt-circle-average .text {
|
602 |
+
fill: #1FBEC9;
|
603 |
+
font-size: 28px;
|
604 |
+
font-weight: 700;
|
605 |
+
dominant-baseline: middle;
|
606 |
+
text-anchor: middle; }
|
607 |
+
.shortpixel-bulk-wrapper section.panel.process .bulk-summary, .shortpixel-bulk-wrapper section.panel.finished .bulk-summary {
|
608 |
+
display: table;
|
609 |
+
width: 80%;
|
610 |
+
margin: 30px auto; }
|
611 |
+
.shortpixel-bulk-wrapper section.panel.process .bulk-summary > div, .shortpixel-bulk-wrapper section.panel.finished .bulk-summary > div {
|
612 |
+
display: table-row; }
|
613 |
+
.shortpixel-bulk-wrapper section.panel.process .bulk-summary > div > span, .shortpixel-bulk-wrapper section.panel.finished .bulk-summary > div > span {
|
614 |
+
display: table-cell;
|
615 |
+
padding: 16px;
|
616 |
+
width: 33%; }
|
617 |
+
.shortpixel-bulk-wrapper section.panel.process .bulk-summary .heading, .shortpixel-bulk-wrapper section.panel.finished .bulk-summary .heading {
|
618 |
+
background: #F6F9FF;
|
619 |
+
border: 1px solid #EBF5FF; }
|
620 |
+
.shortpixel-bulk-wrapper section.panel.process .bulk-summary .line-progressbar, .shortpixel-bulk-wrapper section.panel.finished .bulk-summary .line-progressbar {
|
621 |
+
width: 100px;
|
622 |
+
height: 20px;
|
623 |
+
position: relative;
|
624 |
+
background: #ccc;
|
625 |
+
display: inline-block;
|
626 |
+
vertical-align: middle; }
|
627 |
+
.shortpixel-bulk-wrapper section.panel.process .bulk-summary .line-progressbar .done-text, .shortpixel-bulk-wrapper section.panel.finished .bulk-summary .line-progressbar .done-text {
|
628 |
+
position: absolute;
|
629 |
+
color: #fff;
|
630 |
+
font-size: 10px;
|
631 |
+
font-weight: 500;
|
632 |
+
top: 0;
|
633 |
+
bottom: 0;
|
634 |
+
padding: 5px 4px;
|
635 |
+
line-height: 10px;
|
636 |
+
z-index: 3; }
|
637 |
+
.shortpixel-bulk-wrapper section.panel.process .bulk-summary .line-progressbar .done, .shortpixel-bulk-wrapper section.panel.finished .bulk-summary .line-progressbar .done {
|
638 |
+
position: absolute;
|
639 |
+
z-index: 2;
|
640 |
+
left: 0;
|
641 |
+
width: 10%;
|
642 |
+
top: 0;
|
643 |
+
bottom: 0;
|
644 |
+
background: #1FBEC9; }
|
645 |
+
.shortpixel-bulk-wrapper section.panel.process .bulk-summary .line-progressbar label input[type="checkbox"], .shortpixel-bulk-wrapper section.panel.finished .bulk-summary .line-progressbar label input[type="checkbox"] {
|
646 |
+
margin-right: 8px; }
|
647 |
+
.shortpixel-bulk-wrapper section.panel.process .bulk-summary .display-error-box, .shortpixel-bulk-wrapper section.panel.finished .bulk-summary .display-error-box {
|
648 |
+
float: right; }
|
649 |
+
.shortpixel-bulk-wrapper section.panel.process .image-preview-section, .shortpixel-bulk-wrapper section.panel.finished .image-preview-section {
|
650 |
+
background: #F6F9FF;
|
651 |
+
border: 1px solid #DFEAFF;
|
652 |
+
width: 80%;
|
653 |
+
margin: 15px auto;
|
654 |
+
position: relative; }
|
655 |
+
.shortpixel-bulk-wrapper section.panel.process .image-preview-section .title, .shortpixel-bulk-wrapper section.panel.finished .image-preview-section .title {
|
656 |
+
position: absolute;
|
657 |
+
top: 0;
|
658 |
+
width: 300px;
|
659 |
+
background: #0f6a7d50;
|
660 |
+
background: linear-gradient(90deg, #0f6a7d 0%, #0f6a7d 0%, rgba(0, 212, 255, 0) 100%);
|
661 |
+
color: #fff;
|
662 |
+
font-size: 20px;
|
663 |
+
padding: 15px; }
|
664 |
+
.shortpixel-bulk-wrapper section.panel.process .image-preview-section .image-preview-line, .shortpixel-bulk-wrapper section.panel.finished .image-preview-section .image-preview-line {
|
665 |
+
display: flex;
|
666 |
+
width: 100%;
|
667 |
+
justify-content: space-between;
|
668 |
+
align-items: center; }
|
669 |
+
.shortpixel-bulk-wrapper section.panel.process .image-preview-section .image-preview-line [data-result="filename"], .shortpixel-bulk-wrapper section.panel.finished .image-preview-section .image-preview-line [data-result="filename"] {
|
670 |
+
overflow: hidden;
|
671 |
+
font-weight: 700;
|
672 |
+
margin-top: -12px; }
|
673 |
+
.shortpixel-bulk-wrapper section.panel.process .image-preview-section .image-preview-line .opt-circle-image, .shortpixel-bulk-wrapper section.panel.finished .image-preview-section .image-preview-line .opt-circle-image {
|
674 |
+
width: 55px;
|
675 |
+
height: 55px;
|
676 |
+
float: right;
|
677 |
+
margin-top: 12px;
|
678 |
+
margin-right: 5%; }
|
679 |
+
.shortpixel-bulk-wrapper section.panel.process .image-preview-section .image-preview-line .opt-circle-image .trail, .shortpixel-bulk-wrapper section.panel.finished .image-preview-section .image-preview-line .opt-circle-image .trail {
|
680 |
+
stroke: #ddd; }
|
681 |
+
.shortpixel-bulk-wrapper section.panel.process .image-preview-section .image-preview-line .opt-circle-image .path, .shortpixel-bulk-wrapper section.panel.finished .image-preview-section .image-preview-line .opt-circle-image .path {
|
682 |
+
stroke: #1FBEC9;
|
683 |
+
stroke-linecap: round;
|
684 |
+
transition: stroke-dashoffset 0.5s ease 0s; }
|
685 |
+
.shortpixel-bulk-wrapper section.panel.process .image-preview-section .image-preview-line .opt-circle-image .text, .shortpixel-bulk-wrapper section.panel.finished .image-preview-section .image-preview-line .opt-circle-image .text {
|
686 |
+
fill: #1FBEC9;
|
687 |
+
font-size: 28px;
|
688 |
+
font-weight: 700;
|
689 |
+
dominant-baseline: middle;
|
690 |
+
text-anchor: middle; }
|
691 |
+
.shortpixel-bulk-wrapper section.panel.process .image-preview-section .preview-wrapper, .shortpixel-bulk-wrapper section.panel.finished .image-preview-section .preview-wrapper {
|
692 |
+
width: 100%;
|
693 |
+
overflow: hidden;
|
694 |
+
margin: 25px 0 40px 0; }
|
695 |
+
.shortpixel-bulk-wrapper section.panel.process .image-preview-section .preview-wrapper .slide-mask, .shortpixel-bulk-wrapper section.panel.finished .image-preview-section .preview-wrapper .slide-mask {
|
696 |
+
flex-wrap: nowrap;
|
697 |
+
display: flex;
|
698 |
+
justify-content: flex-start; }
|
699 |
+
.shortpixel-bulk-wrapper section.panel.process .image-preview-section .preview-wrapper .preview-image, .shortpixel-bulk-wrapper section.panel.finished .image-preview-section .preview-wrapper .preview-image {
|
700 |
+
transition: 0.5s all linear;
|
701 |
+
display: flex;
|
702 |
+
justify-content: center;
|
703 |
+
align-items: center;
|
704 |
+
flex-shrink: 0;
|
705 |
+
flex-grow: 0;
|
706 |
+
width: 100%; }
|
707 |
+
.shortpixel-bulk-wrapper section.panel.process .image-preview-section .preview-wrapper .current.preview-image, .shortpixel-bulk-wrapper section.panel.finished .image-preview-section .preview-wrapper .current.preview-image {
|
708 |
+
opacity: 1; }
|
709 |
+
.shortpixel-bulk-wrapper section.panel.process .image-preview-section .preview-wrapper .old.preview-image, .shortpixel-bulk-wrapper section.panel.finished .image-preview-section .preview-wrapper .old.preview-image {
|
710 |
+
display: none; }
|
711 |
+
.shortpixel-bulk-wrapper section.panel.process .image-preview-section .preview-wrapper .image, .shortpixel-bulk-wrapper section.panel.finished .image-preview-section .preview-wrapper .image {
|
712 |
+
max-width: 45%;
|
713 |
+
max-height: 600px;
|
714 |
+
overflow: hidden;
|
715 |
+
position: relative; }
|
716 |
+
.shortpixel-bulk-wrapper section.panel.process .image-preview-section .preview-wrapper .image img, .shortpixel-bulk-wrapper section.panel.finished .image-preview-section .preview-wrapper .image img {
|
717 |
+
width: 100%;
|
718 |
+
height: auto;
|
719 |
+
object-fit: cover;
|
720 |
+
z-index: 10;
|
721 |
+
position: relative; }
|
722 |
+
.shortpixel-bulk-wrapper section.panel.process .image-preview-section .preview-wrapper .image img[src*="placeholder.svg"], .shortpixel-bulk-wrapper section.panel.finished .image-preview-section .preview-wrapper .image img[src*="placeholder.svg"] {
|
723 |
+
background-color: #ebedf1; }
|
724 |
+
.shortpixel-bulk-wrapper section.panel.process .image-preview-section .preview-wrapper .image img[src*="placeholder.svg"]:not(.notempty), .shortpixel-bulk-wrapper section.panel.finished .image-preview-section .preview-wrapper .image img[src*="placeholder.svg"]:not(.notempty) {
|
725 |
+
z-index: 1; }
|
726 |
+
.shortpixel-bulk-wrapper section.panel.process .image-preview-section .preview-wrapper .image .svg-loader, .shortpixel-bulk-wrapper section.panel.finished .image-preview-section .preview-wrapper .image .svg-loader {
|
727 |
+
width: 100%;
|
728 |
+
height: 70px;
|
729 |
+
position: absolute;
|
730 |
+
top: calc(50% - 35px);
|
731 |
+
left: 0;
|
732 |
+
z-index: 5; }
|
733 |
+
.shortpixel-bulk-wrapper section.panel.process .image-preview-section .preview-wrapper .image p, .shortpixel-bulk-wrapper section.panel.finished .image-preview-section .preview-wrapper .image p {
|
734 |
+
position: absolute;
|
735 |
+
top: 0;
|
736 |
+
z-index: 10;
|
737 |
+
color: #fff;
|
738 |
+
background: rgba(0, 0, 0, 0.5);
|
739 |
+
padding: 4px; }
|
740 |
+
.shortpixel-bulk-wrapper section.panel.process .image-preview-section .preview-wrapper .image.source, .shortpixel-bulk-wrapper section.panel.finished .image-preview-section .preview-wrapper .image.source {
|
741 |
+
margin-right: 8px; }
|
742 |
+
.shortpixel-bulk-wrapper section.panel.process .image-preview-section .preview-wrapper .image.result, .shortpixel-bulk-wrapper section.panel.finished .image-preview-section .preview-wrapper .image.result {
|
743 |
+
margin-left: 8px; }
|
744 |
+
.shortpixel-bulk-wrapper section.panel.process nav, .shortpixel-bulk-wrapper section.panel.finished nav {
|
745 |
+
width: 80%;
|
746 |
+
margin-top: 35px; }
|
747 |
+
.shortpixel-bulk-wrapper section.panel.finished .spio-progressbar .select .line, .shortpixel-bulk-wrapper section.panel.finished .spio-progressbar .summary .line, .shortpixel-bulk-wrapper section.panel.finished .spio-progressbar .process .line {
|
748 |
+
background: #1FBEC9; }
|
749 |
+
.shortpixel-bulk-wrapper section.panel.finished .spio-progressbar .select .text, .shortpixel-bulk-wrapper section.panel.finished .spio-progressbar .select .step, .shortpixel-bulk-wrapper section.panel.finished .spio-progressbar .summary .text, .shortpixel-bulk-wrapper section.panel.finished .spio-progressbar .summary .step, .shortpixel-bulk-wrapper section.panel.finished .spio-progressbar .process .text, .shortpixel-bulk-wrapper section.panel.finished .spio-progressbar .process .step {
|
750 |
+
color: #ccc; }
|
751 |
+
.shortpixel-bulk-wrapper section.panel.finished .spio-progressbar .select .step, .shortpixel-bulk-wrapper section.panel.finished .spio-progressbar .summary .step, .shortpixel-bulk-wrapper section.panel.finished .spio-progressbar .process .step {
|
752 |
+
border-color: #1FBEC9; }
|
753 |
+
.shortpixel-bulk-wrapper section.panel.finished .spio-progressbar .result .line {
|
754 |
+
background: linear-gradient(90deg, #1fbec9 0%, #1fbec9 49.9%, #cccccc 50%, #cccccc 100%); }
|
755 |
+
.shortpixel-bulk-wrapper section.panel.finished .spio-progressbar .result .text, .shortpixel-bulk-wrapper section.panel.finished .spio-progressbar .result .step {
|
756 |
+
color: #EC2C25; }
|
757 |
+
.shortpixel-bulk-wrapper section.panel.finished .spio-progressbar .result .step {
|
758 |
+
border-color: #1FBEC9; }
|
759 |
+
.shortpixel-bulk-wrapper section.panel.finished nav {
|
760 |
+
text-align: center; }
|
761 |
+
.shortpixel-bulk-wrapper section.panel.finished nav button.finish {
|
762 |
+
padding: 12px 60px;
|
763 |
+
border-radius: 3px;
|
764 |
+
background: #1FBEC9;
|
765 |
+
font-size: 16px;
|
766 |
+
color: #fff;
|
767 |
+
transition: all 0.5s ease; }
|
768 |
+
.shortpixel-bulk-wrapper section.panel.finished nav button.finish:hover {
|
769 |
+
background: #24d1dd; }
|
770 |
+
.shortpixel-bulk-wrapper .part-debug {
|
771 |
+
background: #000;
|
772 |
+
color: #fff;
|
773 |
+
width: 100%;
|
774 |
+
min-height: 150px;
|
775 |
+
max-height: 550px; }
|
776 |
+
.shortpixel-bulk-wrapper .bulk-special-wrapper {
|
777 |
+
margin: 0 auto;
|
778 |
+
max-width: 80%; }
|
779 |
+
.shortpixel-bulk-wrapper .bulk-special-wrapper h4 {
|
780 |
+
color: #ff0000;
|
781 |
+
font-weight: 700;
|
782 |
+
font-size: 20px; }
|
783 |
+
.shortpixel-bulk-wrapper .bulk-special-wrapper h4.warning {
|
784 |
+
float: left;
|
785 |
+
margin: 25px; }
|
786 |
+
.shortpixel-bulk-wrapper .bulk-special-wrapper .warning {
|
787 |
+
color: #ff0000; }
|
788 |
+
.shortpixel-bulk-wrapper .bulk-special-wrapper .optiongroup {
|
789 |
+
clear: both;
|
790 |
+
margin-left: 130px; }
|
791 |
+
.shortpixel-bulk-wrapper .bulk-special-wrapper .optiongroup .switch_button {
|
792 |
+
display: inline-block; }
|
793 |
+
.shortpixel-bulk-wrapper .bulk-special-wrapper .optiongroup h4 {
|
794 |
+
font-size: 14px;
|
795 |
+
font-weight: 400;
|
796 |
+
display: inline-block;
|
797 |
+
margin-left: 25px;
|
798 |
+
color: #000; }
|
799 |
+
.shortpixel-bulk-wrapper .bulk-special-wrapper .optiongroup .option {
|
800 |
+
margin-left: 85px;
|
801 |
+
line-height: 26px; }
|
802 |
+
.shortpixel-bulk-wrapper .bulk-special-wrapper .optiongroup .option label {
|
803 |
+
width: 200px;
|
804 |
+
display: inline-block; }
|
805 |
+
.shortpixel-bulk-wrapper .bulk-special-wrapper .optiongroup .option .number {
|
806 |
+
font-weight: 700; }
|
807 |
+
.shortpixel-bulk-wrapper .bulk-special-wrapper .optiongroup.warning {
|
808 |
+
font-weight: 700;
|
809 |
+
color: #ff0000; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
810 |
|
811 |
/*# sourceMappingURL=shortpixel-bulk.css.map */
|
@@ -1 +1,7 @@
|
|
1 |
-
{
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"version": 3,
|
3 |
+
"mappings": "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",
|
4 |
+
"sources": ["../scss/shortpixel-bulk.scss","../scss/elements/_colors.scss","../scss/elements/_animation.scss"],
|
5 |
+
"names": [],
|
6 |
+
"file": "shortpixel-bulk.css"
|
7 |
+
}
|
@@ -1,24 +1,19 @@
|
|
1 |
#ngg_page_content .sp-column-info {
|
2 |
-
position: relative;
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
font-family: dashicons;
|
19 |
-
width: 20px;
|
20 |
-
height: 20px;
|
21 |
-
font-size: 16px;
|
22 |
-
}
|
23 |
|
24 |
/*# sourceMappingURL=shortpixel-nextgen.css.map */
|
1 |
#ngg_page_content .sp-column-info {
|
2 |
+
position: relative; }
|
3 |
+
#ngg_page_content .sp-column-info .button-smaller {
|
4 |
+
min-width: 150px;
|
5 |
+
margin-bottom: 5px; }
|
6 |
+
#ngg_page_content .sp-column-info .sp-column-actions {
|
7 |
+
float: right;
|
8 |
+
position: absolute;
|
9 |
+
right: 10px;
|
10 |
+
top: 0; }
|
11 |
+
#ngg_page_content .sp-column-info .button {
|
12 |
+
background-color: black; }
|
13 |
+
#ngg_page_content .sp-column-info .dashicons::before {
|
14 |
+
font-family: dashicons;
|
15 |
+
width: 20px;
|
16 |
+
height: 20px;
|
17 |
+
font-size: 16px; }
|
|
|
|
|
|
|
|
|
|
|
18 |
|
19 |
/*# sourceMappingURL=shortpixel-nextgen.css.map */
|
@@ -1 +1,7 @@
|
|
1 |
-
{
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"version": 3,
|
3 |
+
"mappings": "AACA,iCACA;EACE,QAAQ,EAAE,QAAQ;EAEhB,iDAAgB;IACZ,SAAS,EAAE,KAAK;IAChB,aAAa,EAAE,GAAG;EAExB,oDAAmB;IACjB,KAAK,EAAE,KAAK;IACZ,QAAQ,EAAE,QAAQ;IAClB,KAAK,EAAE,IAAI;IACX,GAAG,EAAE,CAAC;EAER,yCAAQ;IACP,gBAAgB,EAAE,KAAK;EAExB,oDACA;IACE,WAAW,EAAE,SAAS;IACtB,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;IACZ,SAAS,EAAE,IAAI",
|
4 |
+
"sources": ["../scss/shortpixel-nextgen.scss"],
|
5 |
+
"names": [],
|
6 |
+
"file": "shortpixel-nextgen.css"
|
7 |
+
}
|
@@ -8,86 +8,63 @@
|
|
8 |
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04);
|
9 |
border: 1px solid #c3c4c7;
|
10 |
margin: 15px 0;
|
|
|
11 |
border-left-color: #72aee6;
|
12 |
-
position: relative;
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
}
|
20 |
-
.shortpixel.shortpixel-notice
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
}
|
38 |
-
.shortpixel.shortpixel-notice .details-wrapper
|
39 |
-
|
40 |
-
|
41 |
-
}
|
42 |
-
.shortpixel.shortpixel-notice .details-wrapper
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
}
|
48 |
-
.shortpixel.shortpixel-notice .details-wrapper input[name=detailhider] {
|
49 |
-
display: none;
|
50 |
-
}
|
51 |
-
.shortpixel.shortpixel-notice .details-wrapper input[name=detailhider]:checked ~ .detail-content-wrapper {
|
52 |
-
max-height: none;
|
53 |
-
}
|
54 |
-
.shortpixel.shortpixel-notice .details-wrapper input[name=detailhider]:checked ~ .detail-content-wrapper .detail-content {
|
55 |
-
opacity: 100;
|
56 |
-
}
|
57 |
-
.shortpixel.shortpixel-notice .details-wrapper input[name=detailhider]:checked ~ .show-details {
|
58 |
-
opacity: 0;
|
59 |
-
transition: opacity 50ms ease-out;
|
60 |
-
}
|
61 |
-
.shortpixel.shortpixel-notice .details-wrapper input[name=detailhider]:not(:checked) ~ .hide-details {
|
62 |
-
opacity: 0;
|
63 |
-
transition: opacity 50ms ease-out;
|
64 |
-
}
|
65 |
|
66 |
.shortpixel.shortpixel-notice .sp-conflict-plugins {
|
67 |
display: table;
|
68 |
border-spacing: 10px;
|
69 |
-
border-collapse: separate;
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
}
|
74 |
-
.shortpixel.shortpixel-notice .sp-conflict-plugins li > * {
|
75 |
-
display: table-cell;
|
76 |
-
}
|
77 |
.shortpixel.shortpixel-notice .content .button-primary {
|
78 |
background-color: #0f6a7d;
|
79 |
-
border-color: #0f6a7d;
|
80 |
-
|
81 |
-
|
82 |
-
background-color: #1cbecb;
|
83 |
-
}
|
84 |
.shortpixel.shortpixel-notice li.sp-conflict-plugins-list {
|
85 |
line-height: 28px;
|
86 |
list-style: disc;
|
87 |
-
margin-left: 80px;
|
88 |
-
}
|
89 |
.shortpixel.shortpixel-notice li.sp-conflict-plugins-list a.button {
|
90 |
-
margin-left: 10px;
|
91 |
-
}
|
92 |
|
93 |
/*# sourceMappingURL=shortpixel-notices.css.map */
|
8 |
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04);
|
9 |
border: 1px solid #c3c4c7;
|
10 |
margin: 15px 0;
|
11 |
+
border-left-width: 4px;
|
12 |
border-left-color: #72aee6;
|
13 |
+
position: relative; }
|
14 |
+
.shortpixel.shortpixel-notice span {
|
15 |
+
vertical-align: middle; }
|
16 |
+
.shortpixel.shortpixel-notice span.icon {
|
17 |
+
margin: 0 25px 0 0;
|
18 |
+
width: 80px; }
|
19 |
+
.shortpixel.shortpixel-notice span.content {
|
20 |
+
padding: 8px 0; }
|
21 |
+
.shortpixel.shortpixel-notice .details-wrapper {
|
22 |
+
margin: 8px 0 4px 0; }
|
23 |
+
.shortpixel.shortpixel-notice .details-wrapper .detail-content-wrapper {
|
24 |
+
max-height: 0;
|
25 |
+
overflow: hidden; }
|
26 |
+
.shortpixel.shortpixel-notice .details-wrapper .detail-content-wrapper .detail-content {
|
27 |
+
opacity: 0;
|
28 |
+
transition: opacity 750ms linear; }
|
29 |
+
.shortpixel.shortpixel-notice .details-wrapper label {
|
30 |
+
opacity: 100;
|
31 |
+
transition: opacity 250ms ease-in; }
|
32 |
+
.shortpixel.shortpixel-notice .details-wrapper label span {
|
33 |
+
cursor: pointer;
|
34 |
+
font-size: 14px;
|
35 |
+
color: #0085ba;
|
36 |
+
font-weight: 500; }
|
37 |
+
.shortpixel.shortpixel-notice .details-wrapper input[name="detailhider"] {
|
38 |
+
display: none; }
|
39 |
+
.shortpixel.shortpixel-notice .details-wrapper input[name="detailhider"]:checked ~ .detail-content-wrapper {
|
40 |
+
max-height: none; }
|
41 |
+
.shortpixel.shortpixel-notice .details-wrapper input[name="detailhider"]:checked ~ .detail-content-wrapper .detail-content {
|
42 |
+
opacity: 100; }
|
43 |
+
.shortpixel.shortpixel-notice .details-wrapper input[name="detailhider"]:checked ~ .show-details {
|
44 |
+
opacity: 0;
|
45 |
+
transition: opacity 50ms ease-out; }
|
46 |
+
.shortpixel.shortpixel-notice .details-wrapper input[name='detailhider']:not(:checked) ~ .hide-details {
|
47 |
+
opacity: 0;
|
48 |
+
transition: opacity 50ms ease-out; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
49 |
|
50 |
.shortpixel.shortpixel-notice .sp-conflict-plugins {
|
51 |
display: table;
|
52 |
border-spacing: 10px;
|
53 |
+
border-collapse: separate; }
|
54 |
+
.shortpixel.shortpixel-notice .sp-conflict-plugins li {
|
55 |
+
display: table-row; }
|
56 |
+
.shortpixel.shortpixel-notice .sp-conflict-plugins li > * {
|
57 |
+
display: table-cell; }
|
|
|
|
|
|
|
58 |
.shortpixel.shortpixel-notice .content .button-primary {
|
59 |
background-color: #0f6a7d;
|
60 |
+
border-color: #0f6a7d; }
|
61 |
+
.shortpixel.shortpixel-notice .content .button-primary:hover {
|
62 |
+
background-color: #1cbecb; }
|
|
|
|
|
63 |
.shortpixel.shortpixel-notice li.sp-conflict-plugins-list {
|
64 |
line-height: 28px;
|
65 |
list-style: disc;
|
66 |
+
margin-left: 80px; }
|
|
|
67 |
.shortpixel.shortpixel-notice li.sp-conflict-plugins-list a.button {
|
68 |
+
margin-left: 10px; }
|
|
|
69 |
|
70 |
/*# sourceMappingURL=shortpixel-notices.css.map */
|
@@ -1 +1,7 @@
|
|
1 |
-
{
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"version": 3,
|
3 |
+
"mappings": "AAGA,6BACA;EAGG,UAAU,EAAE,IAAI;EAChB,OAAO,EAAE,GAAG;EACZ,OAAO,EAAE,IAAI;EACb,WAAW,EAAE,MAAM;EACnB,UAAU,EAAE,IAAI;EAChB,OAAO,EAAE,QAAQ;EACjB,UAAU,EAAE,6BAA0B;EACtC,MAAM,EAAE,iBAAiB;EACzB,MAAM,EAAE,MAAM;EACf,iBAAiB,EAAE,GAAG;EACrB,iBAAiB,EAAE,OAAO;EAC1B,QAAQ,EAAE,QAAQ;EAMlB,kCACA;IACE,cAAc,EAAE,MAAM;IACtB,uCAAO;MAEL,MAAM,EAAE,UAAU;MACrB,KAAK,EAAE,IAAI;IAGZ,0CACA;MAEC,OAAO,EAAE,KAAK;EAGf,8CACA;IACG,MAAM,EAAE,WAAW;IACnB,sEACA;MACE,UAAU,EAAE,CAAC;MACb,QAAQ,EAAE,MAAM;MAEhB,sFAAgB;QACd,OAAO,EAAE,CAAC;QACV,UAAU,EAAE,oBAAoB;IAGpC,oDACA;MACE,OAAO,EAAE,GAAG;MACZ,UAAU,EAAE,qBAAqB;MACjC,yDACA;QACE,MAAM,EAAE,OAAO;QACf,SAAS,EAAE,IAAI;QACf,KAAK,EAAE,OAAO;QACd,WAAW,EAAE,GAAG;IAGpB,wEAA0B;MAAE,OAAO,EAAE,IAAI;IACzC,0GACA;MACI,UAAU,EAAE,IAAI;IAEpB,0HACA;MACI,OAAO,EAAE,GAAG;IAGhB,gGACA;MACG,OAAO,EAAE,CAAC;MACX,UAAU,EAAE,qBAAqB;IAEnC,sGACA;MACG,OAAO,EAAE,CAAC;MACV,UAAU,EAAE,qBAAqB;;AAQxC,kDAAqB;EACjB,OAAO,EAAE,KAAK;EACd,cAAc,EAAE,IAAI;EACpB,eAAe,EAAE,QAAQ;EACzB,qDAAG;IACC,OAAO,EAAE,SAAS;EAEtB,yDAAO;IACH,OAAO,EAAE,UAAU;AAK3B,sDACA;EACE,gBAAgB,ECxGJ,OAAO;EDyGrB,YAAY,ECzGE,OAAO;ED2GrB,4DAAQ;IAAE,gBAAgB,EC1Gf,OAAO;AD6GlB,yDAA4B;EACxB,WAAW,EAAE,IAAI;EACjB,UAAU,EAAE,IAAI;EAChB,WAAW,EAAE,IAAI;AAErB,kEAAqC;EACjC,WAAW,EAAE,IAAI",
|
4 |
+
"sources": ["../scss/shortpixel-notices.scss","../scss/elements/_colors.scss"],
|
5 |
+
"names": [],
|
6 |
+
"file": "shortpixel-notices.css"
|
7 |
+
}
|
@@ -1,176 +1,129 @@
|
|
1 |
@media (max-width: 1250px) {
|
2 |
#shortpixel-hs-blind, #shortpixel-hs-tools, #botbutton, #beacon-container {
|
3 |
-
display: none !important;
|
4 |
-
}
|
5 |
-
}
|
6 |
.shortpixel-other-media {
|
7 |
-
margin-bottom: 120px;
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
}
|
12 |
-
.shortpixel-other-media .
|
13 |
-
|
14 |
-
|
15 |
-
.shortpixel-other-media .pagination {
|
16 |
-
|
17 |
-
}
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
}
|
27 |
-
.shortpixel-other-media .list-overview {
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
}
|
48 |
-
.shortpixel-other-media .list-overview .heading a {
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
}
|
53 |
-
.shortpixel-other-media .list-overview .
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
}
|
70 |
-
.shortpixel-other-media .list-overview .item
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
}
|
77 |
-
.shortpixel-other-media .list-overview .item
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
}
|
86 |
-
.shortpixel-other-media .list-overview .item
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
.shortpixel-other-media .list-overview .
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
}
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
display: block;
|
131 |
-
}
|
132 |
-
.shortpixel-other-media .list-overview .item .sp-column-info {
|
133 |
-
width: 100%;
|
134 |
-
min-width: 250px;
|
135 |
-
display: inline-block;
|
136 |
-
position: relative;
|
137 |
-
}
|
138 |
-
@media (max-width: 1550px) {
|
139 |
-
.shortpixel-other-media .list-overview .item .sp-column-info {
|
140 |
-
width: auto;
|
141 |
-
}
|
142 |
-
}
|
143 |
-
.shortpixel-other-media .list-overview .item .sp-column-info .sp-column-actions {
|
144 |
-
position: absolute;
|
145 |
-
right: 15px;
|
146 |
-
top: 0;
|
147 |
-
}
|
148 |
-
@media (max-width: 1250px) {
|
149 |
-
.shortpixel-other-media .list-overview .heading .type {
|
150 |
-
display: none;
|
151 |
-
}
|
152 |
-
.shortpixel-other-media .list-overview .item .mediatype {
|
153 |
-
display: none;
|
154 |
-
}
|
155 |
-
.shortpixel-other-media .list-overview .item .filename, .shortpixel-other-media .list-overview .item .folderpath {
|
156 |
-
max-width: 250px;
|
157 |
-
overflow: hidden;
|
158 |
-
text-overflow: ellipsis;
|
159 |
-
}
|
160 |
-
}
|
161 |
-
@media (max-width: 1200px) {
|
162 |
-
.shortpixel-other-media .list-overview .heading .date {
|
163 |
-
display: none;
|
164 |
-
}
|
165 |
-
.shortpixel-other-media .list-overview .item .date {
|
166 |
-
display: none;
|
167 |
-
}
|
168 |
-
}
|
169 |
-
.shortpixel-other-media .list-overview .no-items {
|
170 |
-
padding: 10px;
|
171 |
-
}
|
172 |
-
.shortpixel-other-media .list-overview .no-items p {
|
173 |
-
font-size: 14px;
|
174 |
-
}
|
175 |
|
176 |
/*# sourceMappingURL=shortpixel-othermedia.css.map */
|
1 |
@media (max-width: 1250px) {
|
2 |
#shortpixel-hs-blind, #shortpixel-hs-tools, #botbutton, #beacon-container {
|
3 |
+
display: none !important; } }
|
|
|
|
|
4 |
.shortpixel-other-media {
|
5 |
+
margin-bottom: 120px; }
|
6 |
+
.shortpixel-other-media .search-form {
|
7 |
+
float: right; }
|
8 |
+
.shortpixel-other-media .search-form label {
|
9 |
+
margin-right: 8px; }
|
10 |
+
.shortpixel-other-media .pagination {
|
11 |
+
margin: 25px 0; }
|
12 |
+
@media (max-width: 782px) {
|
13 |
+
.shortpixel-other-media .pagination .pagination-links {
|
14 |
+
float: right;
|
15 |
+
margin: 8px 0; }
|
16 |
+
.shortpixel-other-media .pagination .displaying-num {
|
17 |
+
display: none; } }
|
18 |
+
.shortpixel-other-media .list-overview {
|
19 |
+
width: 100%;
|
20 |
+
background: #fff;
|
21 |
+
border: 1px solid #ccd0d4;
|
22 |
+
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04);
|
23 |
+
clear: both;
|
24 |
+
display: table; }
|
25 |
+
.shortpixel-other-media .list-overview .heading, .shortpixel-other-media .list-overview .item {
|
26 |
+
display: table-row; }
|
27 |
+
.shortpixel-other-media .list-overview .heading > span, .shortpixel-other-media .list-overview .item > span {
|
28 |
+
display: table-cell;
|
29 |
+
padding: 8px 10px;
|
30 |
+
line-height: 1.5em;
|
31 |
+
vertical-align: top; }
|
32 |
+
.shortpixel-other-media .list-overview .heading {
|
33 |
+
border-bottom: 1px solid #ccc;
|
34 |
+
font-size: 14px; }
|
35 |
+
.shortpixel-other-media .list-overview .heading a {
|
36 |
+
text-decoration: none;
|
37 |
+
display: inline-block;
|
38 |
+
width: 100%; }
|
39 |
+
.shortpixel-other-media .list-overview .heading a .sorted::before {
|
40 |
+
visibility: visible; }
|
41 |
+
.shortpixel-other-media .list-overview .heading a .sorted.desc::before {
|
42 |
+
content: "\f140"; }
|
43 |
+
.shortpixel-other-media .list-overview .heading a:hover .sorting-indicator::before {
|
44 |
+
content: "\f142";
|
45 |
+
visibility: visible; }
|
46 |
+
.shortpixel-other-media .list-overview .heading a:hover .sorting-indicator.asc::before {
|
47 |
+
content: "\f140"; }
|
48 |
+
.shortpixel-other-media .list-overview .heading span.heading span {
|
49 |
+
float: left;
|
50 |
+
cursor: pointer; }
|
51 |
+
.shortpixel-other-media .list-overview .item:nth-child(odd) {
|
52 |
+
background-color: #f9f9f9; }
|
53 |
+
.shortpixel-other-media .list-overview .item span:last-child {
|
54 |
+
min-width: 400px;
|
55 |
+
max-width: 400px; }
|
56 |
+
.shortpixel-other-media .list-overview .item:hover .row-actions {
|
57 |
+
left: 0;
|
58 |
+
color: #bbb; }
|
59 |
+
.shortpixel-other-media .list-overview .item:hover .row-actions a {
|
60 |
+
text-decoration: none;
|
61 |
+
padding-right: 4px;
|
62 |
+
padding-left: 4px; }
|
63 |
+
.shortpixel-other-media .list-overview .item:hover .row-actions a:first-child {
|
64 |
+
padding-left: 0; }
|
65 |
+
.shortpixel-other-media .list-overview .item .filename {
|
66 |
+
font-size: 14px;
|
67 |
+
min-width: 150px; }
|
68 |
+
.shortpixel-other-media .list-overview .item .thumb {
|
69 |
+
min-width: 60px;
|
70 |
+
min-height: 60px;
|
71 |
+
display: inline-block;
|
72 |
+
border: 1px solid #ccc;
|
73 |
+
background-size: cover;
|
74 |
+
background-position: center; }
|
75 |
+
.shortpixel-other-media .list-overview .item .thumb img {
|
76 |
+
max-width: 60px;
|
77 |
+
max-height: 60px;
|
78 |
+
border: 1px solid #ccc;
|
79 |
+
background: #eee; }
|
80 |
+
.shortpixel-other-media .list-overview .item .actions {
|
81 |
+
min-width: 105px; }
|
82 |
+
.shortpixel-other-media .list-overview .item .single-action {
|
83 |
+
text-align: left; }
|
84 |
+
.shortpixel-other-media .list-overview .item .single-action a {
|
85 |
+
color: #fff;
|
86 |
+
text-decoration: none;
|
87 |
+
text-align: center; }
|
88 |
+
.shortpixel-other-media .list-overview .item .single-action .button-smaller {
|
89 |
+
width: 110px; }
|
90 |
+
.shortpixel-other-media .list-overview .item .multi-action-wrapper {
|
91 |
+
display: flex;
|
92 |
+
flex-direction: column; }
|
93 |
+
.shortpixel-other-media .list-overview .item .multi-action-wrapper .single-action {
|
94 |
+
display: inline-block;
|
95 |
+
margin: 8px 0; }
|
96 |
+
.shortpixel-other-media .list-overview .item .multi-action-wrapper .single-action a {
|
97 |
+
display: block; }
|
98 |
+
.shortpixel-other-media .list-overview .item .sp-column-info {
|
99 |
+
width: 100%;
|
100 |
+
min-width: 250px;
|
101 |
+
display: inline-block;
|
102 |
+
position: relative; }
|
103 |
+
@media (max-width: 1550px) {
|
104 |
+
.shortpixel-other-media .list-overview .item .sp-column-info {
|
105 |
+
width: auto; } }
|
106 |
+
.shortpixel-other-media .list-overview .item .sp-column-info .sp-column-actions {
|
107 |
+
position: absolute;
|
108 |
+
right: 15px;
|
109 |
+
top: 0; }
|
110 |
+
@media (max-width: 1250px) {
|
111 |
+
.shortpixel-other-media .list-overview .heading .type {
|
112 |
+
display: none; }
|
113 |
+
.shortpixel-other-media .list-overview .item .mediatype {
|
114 |
+
display: none; }
|
115 |
+
.shortpixel-other-media .list-overview .item .filename, .shortpixel-other-media .list-overview .item .folderpath {
|
116 |
+
max-width: 250px;
|
117 |
+
overflow: hidden;
|
118 |
+
text-overflow: ellipsis; } }
|
119 |
+
@media (max-width: 1200px) {
|
120 |
+
.shortpixel-other-media .list-overview .heading .date {
|
121 |
+
display: none; }
|
122 |
+
.shortpixel-other-media .list-overview .item .date {
|
123 |
+
display: none; } }
|
124 |
+
.shortpixel-other-media .list-overview .no-items {
|
125 |
+
padding: 10px; }
|
126 |
+
.shortpixel-other-media .list-overview .no-items p {
|
127 |
+
font-size: 14px; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
128 |
|
129 |
/*# sourceMappingURL=shortpixel-othermedia.css.map */
|
@@ -1 +1,7 @@
|
|
1 |
-
{
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"version": 3,
|
3 |
+
"mappings": "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",
|
4 |
+
"sources": ["../scss/shortpixel-othermedia.scss"],
|
5 |
+
"names": [],
|
6 |
+
"file": "shortpixel-othermedia.css"
|
7 |
+
}
|
@@ -1,446 +1,358 @@
|
|
1 |
.settings_page_wp-shortpixel-settings {
|
2 |
-
/* In-view notice ( not on top, between the options ) - styled after WP notice */
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
}
|
7 |
-
.settings_page_wp-shortpixel-settings
|
8 |
-
|
9 |
-
}
|
10 |
-
.settings_page_wp-shortpixel-settings .button, .settings_page_wp-shortpixel-settings button:focus {
|
11 |
-
|
12 |
-
|
13 |
-
}
|
14 |
-
.settings_page_wp-shortpixel-settings .button-primary, .settings_page_wp-shortpixel-settings .button-primary:focus {
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
}
|
19 |
-
.settings_page_wp-shortpixel-settings .
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
}
|
70 |
-
.settings_page_wp-shortpixel-settings .top-menu div.sp-bulk-summary
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
}
|
82 |
-
.settings_page_wp-shortpixel-settings .
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
.settings_page_wp-shortpixel-settings .
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
101 |
display: none;
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
.settings_page_wp-shortpixel-settings article.sp-tabs section
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
.settings_page_wp-shortpixel-settings article.sp-tabs section
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
}
|
193 |
-
.settings_page_wp-shortpixel-settings
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
}
|
199 |
-
.settings_page_wp-shortpixel-settings section
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
}
|
222 |
-
.settings_page_wp-shortpixel-settings
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
}
|
243 |
-
.settings_page_wp-shortpixel-settings
|
244 |
-
|
245 |
-
}
|
246 |
-
.settings_page_wp-shortpixel-settings section.banner .line {
|
247 |
-
flex: 3;
|
248 |
-
}
|
249 |
-
.settings_page_wp-shortpixel-settings section.banner .line h3 {
|
250 |
-
color: #00d0e5;
|
251 |
-
}
|
252 |
-
.settings_page_wp-shortpixel-settings section.banner .button-wrap {
|
253 |
-
flex: 2;
|
254 |
-
}
|
255 |
-
.settings_page_wp-shortpixel-settings section.banner .button-wrap .button {
|
256 |
-
background: #ff0000;
|
257 |
-
padding: 8px;
|
258 |
-
font-weight: 700;
|
259 |
-
font-size: 20px;
|
260 |
-
margin: 8px;
|
261 |
-
color: #fff;
|
262 |
-
text-transform: uppercase;
|
263 |
-
}
|
264 |
-
.settings_page_wp-shortpixel-settings .view-notice, .settings_page_wp-shortpixel-settings .compression-notice {
|
265 |
-
box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.1);
|
266 |
-
border: 4px solid #fff;
|
267 |
-
padding: 1px 12px;
|
268 |
-
}
|
269 |
-
.settings_page_wp-shortpixel-settings .view-notice p, .settings_page_wp-shortpixel-settings .compression-notice p {
|
270 |
-
margin: 1em 0 !important;
|
271 |
-
}
|
272 |
-
.settings_page_wp-shortpixel-settings .view-notice h4, .settings_page_wp-shortpixel-settings .compression-notice h4 {
|
273 |
-
margin: 0;
|
274 |
-
font-size: 16px;
|
275 |
-
}
|
276 |
-
.settings_page_wp-shortpixel-settings .view-notice.warning, .settings_page_wp-shortpixel-settings .compression-notice.warning {
|
277 |
-
border-left-color: #ffb900;
|
278 |
-
}
|
279 |
-
.settings_page_wp-shortpixel-settings .compression-notice {
|
280 |
-
margin-top: -20px;
|
281 |
-
}
|
282 |
-
.settings_page_wp-shortpixel-settings .view-notice-row {
|
283 |
-
display: none;
|
284 |
-
}
|
285 |
-
.settings_page_wp-shortpixel-settings #tab-settings .shortpixel-compression strong {
|
286 |
-
line-height: 22px;
|
287 |
-
}
|
288 |
-
.settings_page_wp-shortpixel-settings #tab-settings .shortpixel-compression .shortpixel-compression-options {
|
289 |
-
display: inline-block;
|
290 |
-
}
|
291 |
-
.settings_page_wp-shortpixel-settings #tab-settings .shortpixel-compression label {
|
292 |
-
width: 158px;
|
293 |
-
margin: 0 -2px;
|
294 |
-
background-color: #93d7e5;
|
295 |
-
font-weight: bold;
|
296 |
-
display: inline-block;
|
297 |
-
}
|
298 |
-
.settings_page_wp-shortpixel-settings #tab-settings .shortpixel-compression label span {
|
299 |
-
text-align: center;
|
300 |
-
font-size: 16px;
|
301 |
-
padding: 8px 0px;
|
302 |
-
display: block;
|
303 |
-
}
|
304 |
-
.settings_page_wp-shortpixel-settings #tab-settings .shortpixel-compression label input {
|
305 |
-
display: none;
|
306 |
-
}
|
307 |
-
.settings_page_wp-shortpixel-settings #tab-settings .shortpixel-compression label input:checked + span {
|
308 |
-
background-color: #0f6a7d;
|
309 |
-
color: #FFF;
|
310 |
-
}
|
311 |
|
312 |
/* Specific styles for advanced settings tab */
|
313 |
#shortpixel-settings-tabs #tab-adv-settings .addCustomFolder {
|
314 |
-
margin: 10px 0;
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
|
322 |
-
}
|
323 |
-
#shortpixel-settings-tabs #tab-adv-settings .addCustomFolder input[name=saveAdv] {
|
324 |
-
margin-left: 8px;
|
325 |
-
}
|
326 |
#shortpixel-settings-tabs #tab-adv-settings .shortpixel-folders-list {
|
327 |
display: table;
|
328 |
-
border-collapse: separate;
|
329 |
-
|
330 |
-
|
331 |
-
|
332 |
-
|
333 |
-
|
334 |
-
|
335 |
-
|
336 |
-
|
337 |
-
|
338 |
-
|
339 |
-
|
340 |
-
|
341 |
-
|
342 |
-
|
343 |
-
|
344 |
-
|
345 |
-
|
346 |
-
|
347 |
-
|
348 |
-
|
349 |
-
background-color: unset;
|
350 |
-
}
|
351 |
-
#shortpixel-settings-tabs #tab-adv-settings .shortpixel-folders-list .refresh-folder {
|
352 |
-
text-decoration: none;
|
353 |
-
}
|
354 |
-
#shortpixel-settings-tabs #tab-adv-settings .shortpixel-folders-list .info-icon {
|
355 |
-
cursor: pointer;
|
356 |
-
}
|
357 |
#shortpixel-settings-tabs #tab-adv-settings .deliverWebpTypes, #shortpixel-settings-tabs #tab-adv-settings .deliverWebpAlteringTypes {
|
358 |
-
margin: 16px 0 16px 16px;
|
359 |
-
}
|
360 |
|
361 |
.cf_switch label {
|
362 |
width: 100%;
|
363 |
margin: 0 -2px;
|
364 |
background-color: #e2faff;
|
365 |
-
display: inline-block;
|
366 |
-
|
367 |
-
|
368 |
-
|
369 |
-
|
370 |
-
}
|
371 |
-
.cf_switch label input {
|
372 |
-
|
373 |
-
}
|
374 |
-
.cf_switch label input:checked + span {
|
375 |
-
background-color: #0085ba;
|
376 |
-
color: #F7F7F7;
|
377 |
-
}
|
378 |
.cf_switch.global-hidden label {
|
379 |
-
cursor: default;
|
380 |
-
}
|
381 |
.cf_switch.global-hidden input:checked + span {
|
382 |
background-color: #fff;
|
383 |
color: #000;
|
384 |
-
padding-left: 0;
|
385 |
-
}
|
386 |
|
387 |
#tab-tools .button {
|
388 |
-
min-height: 44px;
|
389 |
-
}
|
390 |
#tab-tools .option {
|
391 |
clear: both;
|
392 |
display: flex;
|
393 |
-
margin: 25px 0;
|
394 |
-
|
395 |
-
|
396 |
-
|
397 |
-
|
398 |
-
|
399 |
-
|
400 |
-
|
401 |
-
|
402 |
-
|
403 |
-
|
404 |
-
|
405 |
-
|
406 |
-
|
407 |
-
|
408 |
-
|
409 |
-
|
410 |
-
|
411 |
-
}
|
412 |
-
#tab-tools .option div.field
|
413 |
-
|
414 |
-
|
415 |
-
|
416 |
-
}
|
417 |
-
#tab-tools .option div.field.queue-warning {
|
418 |
-
border: 1px solid #ff0000;
|
419 |
-
font-weight: 700;
|
420 |
-
padding: 6px 8px;
|
421 |
-
}
|
422 |
#tab-tools .option-row {
|
423 |
margin: 15px 0;
|
424 |
-
display: block;
|
425 |
-
}
|
426 |
#tab-tools .danger-zone h3 {
|
427 |
margin-left: 15px;
|
428 |
text-transform: uppercase;
|
429 |
-
font-weight: 700;
|
430 |
-
}
|
431 |
#tab-tools .danger-zone > p {
|
432 |
-
margin-left: 15px;
|
433 |
-
}
|
434 |
|
435 |
div.spio-inline-help {
|
436 |
float: right;
|
437 |
-
margin-left: 15px;
|
438 |
-
|
439 |
-
|
440 |
-
|
441 |
-
|
442 |
-
cursor: pointer;
|
443 |
-
}
|
444 |
|
445 |
div.spio-modal-shade {
|
446 |
display: none;
|
@@ -460,8 +372,7 @@ div.spio-modal-shade {
|
|
460 |
background-color: black;
|
461 |
/* Fallback color */
|
462 |
background-color: rgba(0, 0, 0, 0.4);
|
463 |
-
/* Black w/ opacity */
|
464 |
-
}
|
465 |
|
466 |
div.spio-modal {
|
467 |
background-color: #fefefe;
|
@@ -481,26 +392,22 @@ div.spio-modal {
|
|
481 |
top: 10%;
|
482 |
left: 50%;
|
483 |
max-height: 90%;
|
484 |
-
overflow-y: auto;
|
485 |
-
|
486 |
-
|
487 |
-
|
488 |
-
|
489 |
-
|
490 |
-
|
491 |
-
|
492 |
-
|
493 |
-
|
494 |
-
|
495 |
-
cursor: pointer;
|
496 |
-
}
|
497 |
|
498 |
div.spio-modal-title {
|
499 |
-
font-size: 22px;
|
500 |
-
}
|
501 |
|
502 |
.spio-hide {
|
503 |
-
display: none;
|
504 |
-
}
|
505 |
|
506 |
/*# sourceMappingURL=shortpixel-settings.css.map */
|
1 |
.settings_page_wp-shortpixel-settings {
|
2 |
+
/* In-view notice ( not on top, between the options ) - styled after WP notice */ }
|
3 |
+
.settings_page_wp-shortpixel-settings a {
|
4 |
+
color: #0f6a7d; }
|
5 |
+
.settings_page_wp-shortpixel-settings p {
|
6 |
+
font-size: 14px; }
|
7 |
+
.settings_page_wp-shortpixel-settings .button, .settings_page_wp-shortpixel-settings button:focus {
|
8 |
+
color: #0f6a7d;
|
9 |
+
border-color: #0f6a7d; }
|
10 |
+
.settings_page_wp-shortpixel-settings .button-primary, .settings_page_wp-shortpixel-settings .button-primary:focus {
|
11 |
+
background-color: #0f6a7d;
|
12 |
+
border-color: #0f6a7d;
|
13 |
+
color: #fff; }
|
14 |
+
.settings_page_wp-shortpixel-settings .button-primary:hover, .settings_page_wp-shortpixel-settings .button-primary:focus:hover {
|
15 |
+
background-color: #1cbecb;
|
16 |
+
border-color: #0f6a7d; }
|
17 |
+
.settings_page_wp-shortpixel-settings .submit .button {
|
18 |
+
min-height: 44px; }
|
19 |
+
.settings_page_wp-shortpixel-settings .top-menu {
|
20 |
+
font-size: 18px;
|
21 |
+
display: flex;
|
22 |
+
width: 100%;
|
23 |
+
min-height: 50px;
|
24 |
+
align-items: center;
|
25 |
+
margin: 15px 0;
|
26 |
+
position: relative; }
|
27 |
+
@media (max-width: 1200px) {
|
28 |
+
.settings_page_wp-shortpixel-settings .top-menu {
|
29 |
+
margin-bottom: 50px; } }
|
30 |
+
.settings_page_wp-shortpixel-settings .top-menu .links {
|
31 |
+
padding-right: 195px;
|
32 |
+
flex: 12 4 auto; }
|
33 |
+
.settings_page_wp-shortpixel-settings .top-menu .links a {
|
34 |
+
font-size: 18px;
|
35 |
+
margin-right: 8px;
|
36 |
+
white-space: nowrap;
|
37 |
+
line-height: 26px; }
|
38 |
+
.settings_page_wp-shortpixel-settings .top-menu .quota-remaining {
|
39 |
+
font-size: 13px; }
|
40 |
+
.settings_page_wp-shortpixel-settings .top-menu .spio-status-box {
|
41 |
+
text-align: center;
|
42 |
+
position: absolute;
|
43 |
+
top: -49px;
|
44 |
+
right: 0;
|
45 |
+
padding: 5px 10px;
|
46 |
+
background: white;
|
47 |
+
box-shadow: 0 3px 3px rgba(0, 0, 0, 0.1);
|
48 |
+
z-index: 1; }
|
49 |
+
.settings_page_wp-shortpixel-settings .top-menu .pie-wrapper {
|
50 |
+
flex: 4 2 auto;
|
51 |
+
min-width: 100px;
|
52 |
+
display: inline-block; }
|
53 |
+
.settings_page_wp-shortpixel-settings .top-menu div.sp-bulk-summary {
|
54 |
+
z-index: 10; }
|
55 |
+
.settings_page_wp-shortpixel-settings .top-menu div.sp-bulk-summary .opt-circle-average {
|
56 |
+
width: 100px;
|
57 |
+
height: 100px; }
|
58 |
+
.settings_page_wp-shortpixel-settings .top-menu div.sp-bulk-summary .opt-circle-average .trail {
|
59 |
+
stroke: #ddd; }
|
60 |
+
.settings_page_wp-shortpixel-settings .top-menu div.sp-bulk-summary .opt-circle-average .path {
|
61 |
+
stroke: #1cbecb;
|
62 |
+
stroke-linecap: round;
|
63 |
+
transition: stroke-dashoffset 0.5s ease 0s; }
|
64 |
+
.settings_page_wp-shortpixel-settings .top-menu div.sp-bulk-summary .opt-circle-average .text {
|
65 |
+
fill: #1FBEC9;
|
66 |
+
font-size: 28px;
|
67 |
+
font-weight: 700;
|
68 |
+
dominant-baseline: middle;
|
69 |
+
text-anchor: middle; }
|
70 |
+
.settings_page_wp-shortpixel-settings .top-menu div.sp-bulk-summary span {
|
71 |
+
margin: 0;
|
72 |
+
font-size: 12px;
|
73 |
+
padding: 4px 8px;
|
74 |
+
font-weight: 700;
|
75 |
+
border-radius: 3px;
|
76 |
+
white-space: nowrap;
|
77 |
+
color: #0f6a7d; }
|
78 |
+
@media (max-width: 1500px) {
|
79 |
+
.settings_page_wp-shortpixel-settings .top-menu div.sp-bulk-summary .opt-circle-average {
|
80 |
+
width: 100px;
|
81 |
+
height: 100px; } }
|
82 |
+
.settings_page_wp-shortpixel-settings .wp-shortpixel-tab-content {
|
83 |
+
transition: all 1000ms linear; }
|
84 |
+
.settings_page_wp-shortpixel-settings .red {
|
85 |
+
color: #ff0000; }
|
86 |
+
.settings_page_wp-shortpixel-settings .option {
|
87 |
+
padding: 8px;
|
88 |
+
display: inline-block; }
|
89 |
+
.settings_page_wp-shortpixel-settings .option p {
|
90 |
+
margin: 14px 0; }
|
91 |
+
.settings_page_wp-shortpixel-settings .shortpixel-help-link span.dashicons {
|
92 |
+
text-decoration: none;
|
93 |
+
margin-top: -1px; }
|
94 |
+
.settings_page_wp-shortpixel-settings article.sp-tabs section p.settings-info {
|
95 |
+
padding-top: 0px;
|
96 |
+
color: #818181;
|
97 |
+
font-size: 13px !important; }
|
98 |
+
.settings_page_wp-shortpixel-settings article.sp-tabs section p.settings-info.shortpixel-settings-error {
|
99 |
+
color: #c32525; }
|
100 |
+
.settings_page_wp-shortpixel-settings article.sp-tabs section .wp-shortpixel-tab-content {
|
101 |
+
opacity: 0; }
|
102 |
+
.settings_page_wp-shortpixel-settings article.sp-tabs section.sel-tab .wp-shortpixel-tab-content {
|
103 |
+
opacity: 1; }
|
104 |
+
.settings_page_wp-shortpixel-settings article.sp-tabs section .option-content {
|
105 |
+
display: inline-block; }
|
106 |
+
.settings_page_wp-shortpixel-settings article.sp-tabs section .suboption {
|
107 |
+
margin-left: 20px; }
|
108 |
+
.settings_page_wp-shortpixel-settings article.sp-tabs section .toggleTarget {
|
109 |
display: none;
|
110 |
+
opacity: 0;
|
111 |
+
height: 0;
|
112 |
+
overflow: hidden;
|
113 |
+
transition: height 350ms ease-in-out, opacity 750ms ease-in-out; }
|
114 |
+
.settings_page_wp-shortpixel-settings article.sp-tabs section .modalTarget {
|
115 |
+
display: none; }
|
116 |
+
.settings_page_wp-shortpixel-settings article.sp-tabs section .toggleTarget.is-visible {
|
117 |
+
display: block;
|
118 |
+
opacity: 1;
|
119 |
+
height: auto; }
|
120 |
+
.settings_page_wp-shortpixel-settings article.sp-tabs section h2 {
|
121 |
+
position: absolute;
|
122 |
+
font-size: 1.3em;
|
123 |
+
font-weight: normal;
|
124 |
+
width: 180px;
|
125 |
+
height: 1.8em;
|
126 |
+
top: -1.8em;
|
127 |
+
left: 10px;
|
128 |
+
padding: 0;
|
129 |
+
margin: 0;
|
130 |
+
color: #999;
|
131 |
+
background-color: #ddd;
|
132 |
+
/* border-radius: 5px 5px 0 0; */ }
|
133 |
+
@media (max-width: 991px) {
|
134 |
+
.settings_page_wp-shortpixel-settings article.sp-tabs section h2 {
|
135 |
+
width: 140px; } }
|
136 |
+
.settings_page_wp-shortpixel-settings article.sp-tabs section h2 a {
|
137 |
+
display: block;
|
138 |
+
width: 100%;
|
139 |
+
line-height: 1.8em;
|
140 |
+
text-align: center;
|
141 |
+
text-decoration: none;
|
142 |
+
color: #23282d;
|
143 |
+
outline: 0 none; }
|
144 |
+
.settings_page_wp-shortpixel-settings article.sp-tabs section.sel-tab h2 {
|
145 |
+
color: #333;
|
146 |
+
background-color: #fff;
|
147 |
+
z-index: 2; }
|
148 |
+
.settings_page_wp-shortpixel-settings article.sp-tabs section:nth-of-type(2) h2 {
|
149 |
+
left: 192px; }
|
150 |
+
@media (max-width: 991px) {
|
151 |
+
.settings_page_wp-shortpixel-settings article.sp-tabs section:nth-of-type(2) h2 {
|
152 |
+
left: 152px; } }
|
153 |
+
.settings_page_wp-shortpixel-settings article.sp-tabs section:nth-of-type(3) h2 {
|
154 |
+
left: 374px; }
|
155 |
+
@media (max-width: 991px) {
|
156 |
+
.settings_page_wp-shortpixel-settings article.sp-tabs section:nth-of-type(3) h2 {
|
157 |
+
left: 294px; } }
|
158 |
+
.settings_page_wp-shortpixel-settings article.sp-tabs section:nth-of-type(4) h2 {
|
159 |
+
left: 556px; }
|
160 |
+
@media (max-width: 991px) {
|
161 |
+
.settings_page_wp-shortpixel-settings article.sp-tabs section:nth-of-type(4) h2 {
|
162 |
+
left: 436px; } }
|
163 |
+
.settings_page_wp-shortpixel-settings article.sp-tabs section:nth-of-type(5) h2 {
|
164 |
+
left: 738px; }
|
165 |
+
@media (max-width: 991px) {
|
166 |
+
.settings_page_wp-shortpixel-settings article.sp-tabs section:nth-of-type(5) h2 {
|
167 |
+
left: 578px; } }
|
168 |
+
.settings_page_wp-shortpixel-settings article.sp-tabs section:nth-of-type(6) h2 {
|
169 |
+
left: 920px; }
|
170 |
+
.settings_page_wp-shortpixel-settings section#tab-debug h2 {
|
171 |
+
left: 738px; }
|
172 |
+
.settings_page_wp-shortpixel-settings section#tab-debug .flex {
|
173 |
+
display: flex; }
|
174 |
+
.settings_page_wp-shortpixel-settings section#tab-debug .env .flex {
|
175 |
+
flex-wrap: wrap;
|
176 |
+
max-width: 450px; }
|
177 |
+
.settings_page_wp-shortpixel-settings section#tab-debug .env .flex span {
|
178 |
+
width: 45%;
|
179 |
+
padding: 4px; }
|
180 |
+
.settings_page_wp-shortpixel-settings section#tab-debug .table {
|
181 |
+
display: table; }
|
182 |
+
.settings_page_wp-shortpixel-settings section#tab-debug .table > div {
|
183 |
+
display: table-row; }
|
184 |
+
.settings_page_wp-shortpixel-settings section#tab-debug .table > div > span {
|
185 |
+
display: table-cell; }
|
186 |
+
.settings_page_wp-shortpixel-settings section#tab-debug .table > div.head > span {
|
187 |
+
font-weight: 700; }
|
188 |
+
.settings_page_wp-shortpixel-settings section#tab-debug .table.notices > div > span {
|
189 |
+
width: 18%;
|
190 |
+
text-align: center; }
|
191 |
+
.settings_page_wp-shortpixel-settings section.banner {
|
192 |
+
width: 100%;
|
193 |
+
background-color: #dcfdff;
|
194 |
+
display: flex;
|
195 |
+
align-items: center;
|
196 |
+
border: 1px solid #ccc;
|
197 |
+
margin-top: 35px;
|
198 |
+
margin-bottom: 45px;
|
199 |
+
position: relative;
|
200 |
+
opacity: 0; }
|
201 |
+
.settings_page_wp-shortpixel-settings section.banner span {
|
202 |
+
text-align: center; }
|
203 |
+
.settings_page_wp-shortpixel-settings section.banner .image {
|
204 |
+
flex: 1; }
|
205 |
+
.settings_page_wp-shortpixel-settings section.banner .line {
|
206 |
+
flex: 3; }
|
207 |
+
.settings_page_wp-shortpixel-settings section.banner .line h3 {
|
208 |
+
color: #00d0e5; }
|
209 |
+
.settings_page_wp-shortpixel-settings section.banner .button-wrap {
|
210 |
+
flex: 2; }
|
211 |
+
.settings_page_wp-shortpixel-settings section.banner .button-wrap .button {
|
212 |
+
background: #ff0000;
|
213 |
+
padding: 8px;
|
214 |
+
font-weight: 700;
|
215 |
+
font-size: 20px;
|
216 |
+
margin: 8px;
|
217 |
+
color: #fff;
|
218 |
+
text-transform: uppercase; }
|
219 |
+
.settings_page_wp-shortpixel-settings .view-notice, .settings_page_wp-shortpixel-settings .compression-notice {
|
220 |
+
box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.1);
|
221 |
+
border: 4px solid #fff;
|
222 |
+
padding: 1px 12px; }
|
223 |
+
.settings_page_wp-shortpixel-settings .view-notice p, .settings_page_wp-shortpixel-settings .compression-notice p {
|
224 |
+
margin: 1em 0 !important; }
|
225 |
+
.settings_page_wp-shortpixel-settings .view-notice h4, .settings_page_wp-shortpixel-settings .compression-notice h4 {
|
226 |
+
margin: 0;
|
227 |
+
font-size: 16px; }
|
228 |
+
.settings_page_wp-shortpixel-settings .view-notice.warning, .settings_page_wp-shortpixel-settings .compression-notice.warning {
|
229 |
+
border-left-color: #ffb900; }
|
230 |
+
.settings_page_wp-shortpixel-settings .compression-notice {
|
231 |
+
margin-top: -20px; }
|
232 |
+
.settings_page_wp-shortpixel-settings .view-notice-row {
|
233 |
+
display: none; }
|
234 |
+
.settings_page_wp-shortpixel-settings #tab-settings .shortpixel-compression strong {
|
235 |
+
line-height: 22px; }
|
236 |
+
.settings_page_wp-shortpixel-settings #tab-settings .shortpixel-compression .shortpixel-compression-options {
|
237 |
+
display: inline-block; }
|
238 |
+
.settings_page_wp-shortpixel-settings #tab-settings .shortpixel-compression label {
|
239 |
+
width: 158px;
|
240 |
+
margin: 0 -2px;
|
241 |
+
background-color: #d1f5fd;
|
242 |
+
font-weight: bold;
|
243 |
+
display: inline-block; }
|
244 |
+
.settings_page_wp-shortpixel-settings #tab-settings .shortpixel-compression label span {
|
245 |
+
text-align: center;
|
246 |
+
font-size: 16px;
|
247 |
+
padding: 8px 0px;
|
248 |
+
display: block; }
|
249 |
+
.settings_page_wp-shortpixel-settings #tab-settings .shortpixel-compression label input {
|
250 |
+
display: none; }
|
251 |
+
.settings_page_wp-shortpixel-settings #tab-settings .shortpixel-compression label input:checked + span {
|
252 |
+
background-color: #0f6a7d;
|
253 |
+
color: #FFF; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
254 |
|
255 |
/* Specific styles for advanced settings tab */
|
256 |
#shortpixel-settings-tabs #tab-adv-settings .addCustomFolder {
|
257 |
+
margin: 10px 0; }
|
258 |
+
#shortpixel-settings-tabs #tab-adv-settings .addCustomFolder .add-folder-text {
|
259 |
+
margin-left: 5px; }
|
260 |
+
#shortpixel-settings-tabs #tab-adv-settings .addCustomFolder input[type="text"] {
|
261 |
+
width: 50em;
|
262 |
+
max-width: 70%; }
|
263 |
+
#shortpixel-settings-tabs #tab-adv-settings .addCustomFolder input[name="saveAdv"] {
|
264 |
+
margin-left: 8px; }
|
|
|
|
|
|
|
|
|
265 |
#shortpixel-settings-tabs #tab-adv-settings .shortpixel-folders-list {
|
266 |
display: table;
|
267 |
+
border-collapse: separate; }
|
268 |
+
#shortpixel-settings-tabs #tab-adv-settings .shortpixel-folders-list div.heading {
|
269 |
+
width: auto;
|
270 |
+
display: table-header-group;
|
271 |
+
padding: 12px 16px 12px 12px; }
|
272 |
+
#shortpixel-settings-tabs #tab-adv-settings .shortpixel-folders-list div.heading span {
|
273 |
+
font-weight: 600;
|
274 |
+
font-size: 14px; }
|
275 |
+
#shortpixel-settings-tabs #tab-adv-settings .shortpixel-folders-list div {
|
276 |
+
display: table-row; }
|
277 |
+
#shortpixel-settings-tabs #tab-adv-settings .shortpixel-folders-list div > span {
|
278 |
+
display: table-cell;
|
279 |
+
padding: 5px 10px;
|
280 |
+
vertical-align: middle;
|
281 |
+
background-color: #eee; }
|
282 |
+
#shortpixel-settings-tabs #tab-adv-settings .shortpixel-folders-list div > span.action {
|
283 |
+
background-color: unset; }
|
284 |
+
#shortpixel-settings-tabs #tab-adv-settings .shortpixel-folders-list .refresh-folder {
|
285 |
+
text-decoration: none; }
|
286 |
+
#shortpixel-settings-tabs #tab-adv-settings .shortpixel-folders-list .info-icon {
|
287 |
+
cursor: pointer; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
288 |
#shortpixel-settings-tabs #tab-adv-settings .deliverWebpTypes, #shortpixel-settings-tabs #tab-adv-settings .deliverWebpAlteringTypes {
|
289 |
+
margin: 16px 0 16px 16px; }
|
|
|
290 |
|
291 |
.cf_switch label {
|
292 |
width: 100%;
|
293 |
margin: 0 -2px;
|
294 |
background-color: #e2faff;
|
295 |
+
display: inline-block; }
|
296 |
+
.cf_switch label span {
|
297 |
+
padding: 8px 0px 8px 15px;
|
298 |
+
display: block; }
|
299 |
+
.cf_switch label input {
|
300 |
+
display: none; }
|
301 |
+
.cf_switch label input:checked + span {
|
302 |
+
background-color: #0085ba;
|
303 |
+
color: #F7F7F7; }
|
|
|
|
|
|
|
|
|
304 |
.cf_switch.global-hidden label {
|
305 |
+
cursor: default; }
|
|
|
306 |
.cf_switch.global-hidden input:checked + span {
|
307 |
background-color: #fff;
|
308 |
color: #000;
|
309 |
+
padding-left: 0; }
|
|
|
310 |
|
311 |
#tab-tools .button {
|
312 |
+
min-height: 44px; }
|
|
|
313 |
#tab-tools .option {
|
314 |
clear: both;
|
315 |
display: flex;
|
316 |
+
margin: 25px 0; }
|
317 |
+
#tab-tools .option div.name {
|
318 |
+
width: 220px;
|
319 |
+
font-weight: 700;
|
320 |
+
display: inline-block;
|
321 |
+
flex: 0 0 auto;
|
322 |
+
font-size: 14px; }
|
323 |
+
#tab-tools .option div.field {
|
324 |
+
display: inline-block;
|
325 |
+
vertical-align: middle; }
|
326 |
+
#tab-tools .option div.field .button {
|
327 |
+
min-width: 200px;
|
328 |
+
font-weight: 700;
|
329 |
+
text-align: center;
|
330 |
+
padding: 6px 8px; }
|
331 |
+
#tab-tools .option div.field .button.danger {
|
332 |
+
color: #fff;
|
333 |
+
background: #ff0000;
|
334 |
+
border: 1px solid #ff0000; }
|
335 |
+
#tab-tools .option div.field.queue-warning {
|
336 |
+
border: 1px solid #ff0000;
|
337 |
+
font-weight: 700;
|
338 |
+
padding: 6px 8px; }
|
|
|
|
|
|
|
|
|
|
|
|
|
339 |
#tab-tools .option-row {
|
340 |
margin: 15px 0;
|
341 |
+
display: block; }
|
|
|
342 |
#tab-tools .danger-zone h3 {
|
343 |
margin-left: 15px;
|
344 |
text-transform: uppercase;
|
345 |
+
font-weight: 700; }
|
|
|
346 |
#tab-tools .danger-zone > p {
|
347 |
+
margin-left: 15px; }
|
|
|
348 |
|
349 |
div.spio-inline-help {
|
350 |
float: right;
|
351 |
+
margin-left: 15px; }
|
352 |
+
div.spio-inline-help span {
|
353 |
+
font-size: 1.8em;
|
354 |
+
color: #1caecb;
|
355 |
+
cursor: pointer; }
|
|
|
|
|
356 |
|
357 |
div.spio-modal-shade {
|
358 |
display: none;
|
372 |
background-color: black;
|
373 |
/* Fallback color */
|
374 |
background-color: rgba(0, 0, 0, 0.4);
|
375 |
+
/* Black w/ opacity */ }
|
|
|
376 |
|
377 |
div.spio-modal {
|
378 |
background-color: #fefefe;
|
392 |
top: 10%;
|
393 |
left: 50%;
|
394 |
max-height: 90%;
|
395 |
+
overflow-y: auto; }
|
396 |
+
div.spio-modal .spio-close-help-button {
|
397 |
+
position: absolute;
|
398 |
+
top: 5px;
|
399 |
+
right: 0;
|
400 |
+
margin-top: 0px;
|
401 |
+
background: transparent;
|
402 |
+
border: none;
|
403 |
+
font-size: 22px;
|
404 |
+
line-height: 10px;
|
405 |
+
cursor: pointer; }
|
|
|
|
|
406 |
|
407 |
div.spio-modal-title {
|
408 |
+
font-size: 22px; }
|
|
|
409 |
|
410 |
.spio-hide {
|
411 |
+
display: none; }
|
|
|
412 |
|
413 |
/*# sourceMappingURL=shortpixel-settings.css.map */
|
@@ -1 +1,7 @@
|
|
1 |
-
{
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"version": 3,
|
3 |
+
"mappings": "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",
|
4 |
+
"sources": ["../scss/view/_settings.scss","../scss/elements/_colors.scss","../scss/elements/_breakpoints.scss","../scss/view/_settings-advanced.scss","../scss/view/_settings-cloudflare.scss","../scss/view/_settings-tools.scss","../scss/view/_inline-help.scss"],
|
5 |
+
"names": [],
|
6 |
+
"file": "shortpixel-settings.css"
|
7 |
+
}
|
@@ -2,180 +2,148 @@
|
|
2 |
CSS for features that are displayed on all Admin page, like the bar status icon and some alerts.
|
3 |
*/
|
4 |
#wpadminbar li.shortpixel-toolbar-processing {
|
5 |
-
position: relative;
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
}
|
62 |
-
#wpadminbar li.shortpixel-toolbar-processing .ab-item > div .controls .play, #wpadminbar li.shortpixel-toolbar-processing .ab-item > div .controls .pause {
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
opacity: 0.7;
|
85 |
-
margin: 0 auto;
|
86 |
-
border: 4px solid #1cbfcb;
|
87 |
-
border-radius: 50%;
|
88 |
-
border-left-color: transparent;
|
89 |
-
animation: cssload-spin 2000ms infinite linear;
|
90 |
-
-o-animation: cssload-spin 2000ms infinite linear;
|
91 |
-
-ms-animation: cssload-spin 2000ms infinite linear;
|
92 |
-
-webkit-animation: cssload-spin 2000ms infinite linear;
|
93 |
-
-moz-animation: cssload-spin 2000ms infinite linear;
|
94 |
-
}
|
95 |
@keyframes cssload-spin {
|
96 |
100% {
|
97 |
transform: rotate(360deg);
|
98 |
-
transform: rotate(360deg);
|
99 |
-
}
|
100 |
-
}
|
101 |
@-o-keyframes cssload-spin {
|
102 |
100% {
|
103 |
-o-transform: rotate(360deg);
|
104 |
-
transform: rotate(360deg);
|
105 |
-
}
|
106 |
-
}
|
107 |
@-ms-keyframes cssload-spin {
|
108 |
100% {
|
109 |
-ms-transform: rotate(360deg);
|
110 |
-
transform: rotate(360deg);
|
111 |
-
}
|
112 |
-
}
|
113 |
@-webkit-keyframes cssload-spin {
|
114 |
100% {
|
115 |
-webkit-transform: rotate(360deg);
|
116 |
-
transform: rotate(360deg);
|
117 |
-
}
|
118 |
-
}
|
119 |
@-moz-keyframes cssload-spin {
|
120 |
100% {
|
121 |
-moz-transform: rotate(360deg);
|
122 |
-
transform: rotate(360deg);
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
}
|
146 |
-
#wpadminbar li.shortpixel-toolbar-processing.shortpixel-alert .ab-item > div
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
}
|
157 |
-
#wpadminbar li.shortpixel-toolbar-processing.
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
top: 30px;
|
168 |
-
}
|
169 |
-
#wpadminbar li.shortpixel-toolbar-processing .toolbar-notice-wrapper .toolbar-notice {
|
170 |
-
border: 1px solid #1cbfcb;
|
171 |
-
background: #fff;
|
172 |
-
color: #000;
|
173 |
-
padding: 4px 14px;
|
174 |
-
white-space: nowrap;
|
175 |
-
transition: opacity 5s;
|
176 |
-
opacity: 1;
|
177 |
-
margin: 4px;
|
178 |
-
min-width: 300px;
|
179 |
-
}
|
180 |
|
181 |
/*# sourceMappingURL=shortpixel-toolbar.css.map */
|
2 |
CSS for features that are displayed on all Admin page, like the bar status icon and some alerts.
|
3 |
*/
|
4 |
#wpadminbar li.shortpixel-toolbar-processing {
|
5 |
+
position: relative; }
|
6 |
+
#wpadminbar li.shortpixel-toolbar-processing.shortpixel-hide {
|
7 |
+
display: none; }
|
8 |
+
#wpadminbar li.shortpixel-toolbar-processing .ab-item > div {
|
9 |
+
height: 33px;
|
10 |
+
width: 33px;
|
11 |
+
padding: 0;
|
12 |
+
margin-top: -1px;
|
13 |
+
padding: 0 3px; }
|
14 |
+
#wpadminbar li.shortpixel-toolbar-processing .ab-item > div img {
|
15 |
+
margin-right: 2px;
|
16 |
+
margin-top: 6px;
|
17 |
+
vertical-align: top;
|
18 |
+
opacity: 1;
|
19 |
+
transition: all 1s linear;
|
20 |
+
position: absolute;
|
21 |
+
top: 0; }
|
22 |
+
#wpadminbar li.shortpixel-toolbar-processing .ab-item > div span.shp-alert {
|
23 |
+
display: none;
|
24 |
+
margin-left: -8px; }
|
25 |
+
#wpadminbar li.shortpixel-toolbar-processing .ab-item > div .stats {
|
26 |
+
left: -1px;
|
27 |
+
top: 3px;
|
28 |
+
right: 0;
|
29 |
+
position: absolute;
|
30 |
+
z-index: 10;
|
31 |
+
height: 25px;
|
32 |
+
width: 25px;
|
33 |
+
margin: 0 auto;
|
34 |
+
box-sizing: border-box;
|
35 |
+
border-radius: 50%;
|
36 |
+
padding: 5px 0 0 0px;
|
37 |
+
font-weight: 500;
|
38 |
+
font-size: 14px;
|
39 |
+
line-height: 14px;
|
40 |
+
background: rgba(0, 0, 0, 0.6);
|
41 |
+
color: #fff;
|
42 |
+
text-align: center; }
|
43 |
+
#wpadminbar li.shortpixel-toolbar-processing .ab-item > div .controls {
|
44 |
+
position: absolute;
|
45 |
+
top: 0;
|
46 |
+
height: 32px;
|
47 |
+
background: rgba(35, 40, 45, 0.5);
|
48 |
+
box-sizing: border-box;
|
49 |
+
transition: all 1s linear;
|
50 |
+
opacity: 0;
|
51 |
+
visibility: hidden;
|
52 |
+
z-index: 0;
|
53 |
+
overflow: hidden;
|
54 |
+
cursor: pointer; }
|
55 |
+
#wpadminbar li.shortpixel-toolbar-processing .ab-item > div .controls .play, #wpadminbar li.shortpixel-toolbar-processing .ab-item > div .controls .pause {
|
56 |
+
font-family: dashicons;
|
57 |
+
font-size: 32px;
|
58 |
+
color: #fff;
|
59 |
+
display: inline-block;
|
60 |
+
width: 100%;
|
61 |
+
line-height: 1; }
|
62 |
+
#wpadminbar li.shortpixel-toolbar-processing .ab-item > div .controls .play.hidden, #wpadminbar li.shortpixel-toolbar-processing .ab-item > div .controls .pause.hidden {
|
63 |
+
display: none; }
|
64 |
+
#wpadminbar li.shortpixel-toolbar-processing .ab-item > div .cssload-container {
|
65 |
+
width: 100%;
|
66 |
+
height: 24px;
|
67 |
+
text-align: center;
|
68 |
+
position: absolute;
|
69 |
+
top: 0px;
|
70 |
+
left: -1px; }
|
71 |
+
#wpadminbar li.shortpixel-toolbar-processing .ab-item > div .cssload-speeding-wheel {
|
72 |
+
width: 24px;
|
73 |
+
height: 24px;
|
74 |
+
opacity: 0.7;
|
75 |
+
margin: 0 auto;
|
76 |
+
border: 4px solid #1cbfcb;
|
77 |
+
border-radius: 50%;
|
78 |
+
border-left-color: transparent;
|
79 |
+
animation: cssload-spin 2000ms infinite linear;
|
80 |
+
-o-animation: cssload-spin 2000ms infinite linear;
|
81 |
+
-ms-animation: cssload-spin 2000ms infinite linear;
|
82 |
+
-webkit-animation: cssload-spin 2000ms infinite linear;
|
83 |
+
-moz-animation: cssload-spin 2000ms infinite linear; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
84 |
@keyframes cssload-spin {
|
85 |
100% {
|
86 |
transform: rotate(360deg);
|
87 |
+
transform: rotate(360deg); } }
|
|
|
|
|
88 |
@-o-keyframes cssload-spin {
|
89 |
100% {
|
90 |
-o-transform: rotate(360deg);
|
91 |
+
transform: rotate(360deg); } }
|
|
|
|
|
92 |
@-ms-keyframes cssload-spin {
|
93 |
100% {
|
94 |
-ms-transform: rotate(360deg);
|
95 |
+
transform: rotate(360deg); } }
|
|
|
|
|
96 |
@-webkit-keyframes cssload-spin {
|
97 |
100% {
|
98 |
-webkit-transform: rotate(360deg);
|
99 |
+
transform: rotate(360deg); } }
|
|
|
|
|
100 |
@-moz-keyframes cssload-spin {
|
101 |
100% {
|
102 |
-moz-transform: rotate(360deg);
|
103 |
+
transform: rotate(360deg); } }
|
104 |
+
#wpadminbar li.shortpixel-toolbar-processing .ab-item > div:hover img:hover, #wpadminbar li.shortpixel-toolbar-processing .ab-item > div:hover .stats {
|
105 |
+
opacity: 0;
|
106 |
+
visibility: hidden; }
|
107 |
+
#wpadminbar li.shortpixel-toolbar-processing .ab-item > div:hover .controls {
|
108 |
+
visibility: visible;
|
109 |
+
opacity: 1;
|
110 |
+
z-index: 100; }
|
111 |
+
#wpadminbar li.shortpixel-toolbar-processing.shortpixel-paused .ab-item > div .cssload-speeding-wheel {
|
112 |
+
animation: none; }
|
113 |
+
#wpadminbar li.shortpixel-toolbar-processing.shortpixel-paused .ab-item > div .controls {
|
114 |
+
visibility: visible;
|
115 |
+
opacity: 1;
|
116 |
+
z-index: 100; }
|
117 |
+
#wpadminbar li.shortpixel-toolbar-processing.shortpixel-paused .ab-item > div .stats {
|
118 |
+
opacity: 0;
|
119 |
+
z-index: 0; }
|
120 |
+
#wpadminbar li.shortpixel-toolbar-processing.shortpixel-alert .ab-item > div span.shp-alert {
|
121 |
+
display: inline;
|
122 |
+
font-size: 26px;
|
123 |
+
line-height: 26px;
|
124 |
+
color: red;
|
125 |
+
font-weight: bold;
|
126 |
+
vertical-align: middle; }
|
127 |
+
#wpadminbar li.shortpixel-toolbar-processing.shortpixel-alert .ab-item > div .controls {
|
128 |
+
display: none; }
|
129 |
+
#wpadminbar li.shortpixel-toolbar-processing.shortpixel-quota-exceeded .ab-item > div .cssload-container {
|
130 |
+
display: none; }
|
131 |
+
#wpadminbar li.shortpixel-toolbar-processing.shortpixel-quota-exceeded .ab-item > div:hover img:hover {
|
132 |
+
opacity: 1;
|
133 |
+
visibility: visible; }
|
134 |
+
#wpadminbar li.shortpixel-toolbar-processing .toolbar-notice-wrapper {
|
135 |
+
position: absolute;
|
136 |
+
left: 0px;
|
137 |
+
top: 30px; }
|
138 |
+
#wpadminbar li.shortpixel-toolbar-processing .toolbar-notice-wrapper .toolbar-notice {
|
139 |
+
border: 1px solid #1cbfcb;
|
140 |
+
background: #fff;
|
141 |
+
color: #000;
|
142 |
+
padding: 4px 14px;
|
143 |
+
white-space: nowrap;
|
144 |
+
transition: opacity 5s;
|
145 |
+
opacity: 1;
|
146 |
+
margin: 4px;
|
147 |
+
min-width: 300px; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
148 |
|
149 |
/*# sourceMappingURL=shortpixel-toolbar.css.map */
|
@@ -1 +1,7 @@
|
|
1 |
-
{
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"version": 3,
|
3 |
+
"mappings": "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",
|
4 |
+
"sources": ["../scss/shortpixel-toolbar.scss"],
|
5 |
+
"names": [],
|
6 |
+
"file": "shortpixel-toolbar.css"
|
7 |
+
}
|
@@ -1 +1 @@
|
|
1 |
-
div.sp-folder-picker{margin:20px 0;border:1px solid #888;max-height:400px;min-height:100px;overflow:auto}UL.jqueryFileTree LI.directory.selected{background-color:#fafafa}UL.jqueryFileTree{font-family:Verdana,sans-serif;font-size:11px;line-height:18px;padding:3px;margin:0;display:none;margin-left:20px}.sp-folder-picker>UL.jqueryFileTree{margin:0}UL.jqueryFileTree LI{list-style:none;padding:0;margin:0;white-space:nowrap}UL.jqueryFileTree LI a{padding-left:20px}UL.jqueryFileTree LI.directory a{background:url(../img/file-tree/directory.png) left top no-repeat}UL.jqueryFileTree LI.directory-locked{background:url(../img/file-tree/directory-lock.png) left top no-repeat}UL.jqueryFileTree LI.expanded{background:url(../img/file-tree/folder_open.png) left top no-repeat}UL.jqueryFileTree LI.file{background:url(../img/file-tree/file.png) left top no-repeat}UL.jqueryFileTree LI.file-locked{background:url(../img/file-tree/file-lock.png) left top no-repeat!important}UL.jqueryFileTree LI.wait{background:url(../img/file-tree/spinner.gif) left top no-repeat}UL.jqueryFileTree LI.selected>a{font-weight:
|
1 |
+
div.sp-folder-picker{margin:20px 0;border:1px solid #888;max-height:400px;min-height:100px;overflow:auto}UL.jqueryFileTree LI.directory.selected{background-color:#fafafa}UL.jqueryFileTree{font-family:Verdana,sans-serif;font-size:11px;line-height:18px;padding:3px;margin:0;display:none;margin-left:20px}.sp-folder-picker>UL.jqueryFileTree{margin:0}UL.jqueryFileTree LI{list-style:none;padding:0;margin:0;white-space:nowrap}UL.jqueryFileTree LI a{padding-left:20px}UL.jqueryFileTree LI.directory a{background:url(../img/file-tree/directory.png) left top no-repeat}UL.jqueryFileTree LI.directory-locked{background:url(../img/file-tree/directory-lock.png) left top no-repeat}UL.jqueryFileTree LI.expanded{background:url(../img/file-tree/folder_open.png) left top no-repeat}UL.jqueryFileTree LI.file{background:url(../img/file-tree/file.png) left top no-repeat}UL.jqueryFileTree LI.file-locked{background:url(../img/file-tree/file-lock.png) left top no-repeat !important}UL.jqueryFileTree LI.wait{background:url(../img/file-tree/spinner.gif) left top no-repeat}UL.jqueryFileTree LI.selected>a{font-weight:bold}UL.jqueryFileTree LI.ext_3gp{background:url(../img/file-tree/film.png) left top no-repeat}UL.jqueryFileTree LI.ext_afp{background:url(../img/file-tree/code.png) left top no-repeat}UL.jqueryFileTree LI.ext_afpa{background:url(../img/file-tree/code.png) left top no-repeat}UL.jqueryFileTree LI.ext_asp{background:url(../img/file-tree/code.png) left top no-repeat}UL.jqueryFileTree LI.ext_aspx{background:url(../img/file-tree/code.png) left top no-repeat}UL.jqueryFileTree LI.ext_avi{background:url(../img/file-tree/film.png) left top no-repeat}UL.jqueryFileTree LI.ext_bat{background:url(../img/file-tree/application.png) left top no-repeat}UL.jqueryFileTree LI.ext_bmp{background:url(../img/file-tree/picture.png) left top no-repeat}UL.jqueryFileTree LI.ext_c{background:url(../img/file-tree/code.png) left top no-repeat}UL.jqueryFileTree LI.ext_cfm{background:url(../img/file-tree/code.png) left top no-repeat}UL.jqueryFileTree LI.ext_cgi{background:url(../img/file-tree/code.png) left top no-repeat}UL.jqueryFileTree LI.ext_com{background:url(../img/file-tree/application.png) left top no-repeat}UL.jqueryFileTree LI.ext_cpp{background:url(../img/file-tree/code.png) left top no-repeat}UL.jqueryFileTree LI.ext_css{background:url(../img/file-tree/css.png) left top no-repeat}UL.jqueryFileTree LI.ext_doc{background:url(../img/file-tree/doc.png) left top no-repeat}UL.jqueryFileTree LI.ext_exe{background:url(../img/file-tree/application.png) left top no-repeat}UL.jqueryFileTree LI.ext_gif{background:url(../img/file-tree/picture.png) left top no-repeat}UL.jqueryFileTree LI.ext_fla{background:url(../img/file-tree/flash.png) left top no-repeat}UL.jqueryFileTree LI.ext_h{background:url(../img/file-tree/code.png) left top no-repeat}UL.jqueryFileTree LI.ext_htm{background:url(../img/file-tree/html.png) left top no-repeat}UL.jqueryFileTree LI.ext_html{background:url(../img/file-tree/html.png) left top no-repeat}UL.jqueryFileTree LI.ext_jar{background:url(../img/file-tree/java.png) left top no-repeat}UL.jqueryFileTree LI.ext_jpg{background:url(../img/file-tree/picture.png) left top no-repeat}UL.jqueryFileTree LI.ext_jpeg{background:url(../img/file-tree/picture.png) left top no-repeat}UL.jqueryFileTree LI.ext_js{background:url(../img/file-tree/script.png) left top no-repeat}UL.jqueryFileTree LI.ext_lasso{background:url(../img/file-tree/code.png) left top no-repeat}UL.jqueryFileTree LI.ext_log{background:url(../img/file-tree/txt.png) left top no-repeat}UL.jqueryFileTree LI.ext_m4p{background:url(../img/file-tree/music.png) left top no-repeat}UL.jqueryFileTree LI.ext_mov{background:url(../img/file-tree/film.png) left top no-repeat}UL.jqueryFileTree LI.ext_mp3{background:url(../img/file-tree/music.png) left top no-repeat}UL.jqueryFileTree LI.ext_mp4{background:url(../img/file-tree/film.png) left top no-repeat}UL.jqueryFileTree LI.ext_mpg{background:url(../img/file-tree/film.png) left top no-repeat}UL.jqueryFileTree LI.ext_mpeg{background:url(../img/file-tree/film.png) left top no-repeat}UL.jqueryFileTree LI.ext_ogg{background:url(../img/file-tree/music.png) left top no-repeat}UL.jqueryFileTree LI.ext_ogv{background:url(../img/file-tree/film.png) left top no-repeat}UL.jqueryFileTree LI.ext_pcx{background:url(../img/file-tree/picture.png) left top no-repeat}UL.jqueryFileTree LI.ext_pdf{background:url(../img/file-tree/pdf.png) left top no-repeat}UL.jqueryFileTree LI.ext_php{background:url(../img/file-tree/php.png) left top no-repeat}UL.jqueryFileTree LI.ext_png{background:url(../img/file-tree/picture.png) left top no-repeat}UL.jqueryFileTree LI.ext_ppt{background:url(../img/file-tree/ppt.png) left top no-repeat}UL.jqueryFileTree LI.ext_psd{background:url(../img/file-tree/psd.png) left top no-repeat}UL.jqueryFileTree LI.ext_pl{background:url(../img/file-tree/script.png) left top no-repeat}UL.jqueryFileTree LI.ext_py{background:url(../img/file-tree/script.png) left top no-repeat}UL.jqueryFileTree LI.ext_rb{background:url(../img/file-tree/ruby.png) left top no-repeat}UL.jqueryFileTree LI.ext_rbx{background:url(../img/file-tree/ruby.png) left top no-repeat}UL.jqueryFileTree LI.ext_rhtml{background:url(../img/file-tree/ruby.png) left top no-repeat}UL.jqueryFileTree LI.ext_rpm{background:url(../img/file-tree/linux.png) left top no-repeat}UL.jqueryFileTree LI.ext_ruby{background:url(../img/file-tree/ruby.png) left top no-repeat}UL.jqueryFileTree LI.ext_sql{background:url(../img/file-tree/db.png) left top no-repeat}UL.jqueryFileTree LI.ext_swf{background:url(../img/file-tree/flash.png) left top no-repeat}UL.jqueryFileTree LI.ext_tif{background:url(../img/file-tree/picture.png) left top no-repeat}UL.jqueryFileTree LI.ext_tiff{background:url(../img/file-tree/picture.png) left top no-repeat}UL.jqueryFileTree LI.ext_txt{background:url(../img/file-tree/txt.png) left top no-repeat}UL.jqueryFileTree LI.ext_vb{background:url(../img/file-tree/code.png) left top no-repeat}UL.jqueryFileTree LI.ext_wav{background:url(../img/file-tree/music.png) left top no-repeat}UL.jqueryFileTree LI.ext_webm{background:url(../img/file-tree/film.png) left top no-repeat}UL.jqueryFileTree LI.ext_wmv{background:url(../img/file-tree/film.png) left top no-repeat}UL.jqueryFileTree LI.ext_xls{background:url(../img/file-tree/xls.png) left top no-repeat}UL.jqueryFileTree LI.ext_xml{background:url(../img/file-tree/code.png) left top no-repeat}UL.jqueryFileTree LI.ext_zip{background:url(../img/file-tree/zip.png) left top no-repeat}UL.jqueryFileTree A{color:#333;text-decoration:none;display:inline-block;padding:0 2px;cursor:pointer}UL.jqueryFileTree A:hover{background:#BDF}
|
@@ -1 +1 @@
|
|
1 |
-
<svg version="1.2" baseProfile="tiny-ps" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 935 150" preserveAspectRatio="none"><title>kartinkia-svg</title><defs><clipPath clipPathUnits="userSpaceOnUse" id="cp1"><path d="M0 0L935 0L935 150L0 150L0 0Z" /></clipPath><clipPath clipPathUnits="userSpaceOnUse" id="cp2"><path d="M-28 -110L310 -110L310 228L-28 228L-28 -110Z" /></clipPath></defs><style>tspan { white-space:pre }.shp0 { fill: #116c7d } .shp1 { opacity: 0.412;fill: #e1e2fe } .shp2 { opacity: 0.31;fill: #e1e2fe } .shp3 { opacity: 0.102;fill: #ecf1f7 } .shp4 { opacity: 0.102;fill: #e1e2fe } .shp5 { opacity: 0.051;fill: #e1e2fe } .shp6 { fill: #ffffff } .shp7 { opacity: 0.812;fill: #ffffff } .shp8 { opacity: 0.659;fill: #ffffff } .shp9 { fill: #c5d9ff } .shp10 { fill: #599af2 } .shp11 { opacity: 0.361;fill: #4c65ba } .shp12 { opacity: 0.388;fill: #f7a9b4 } .shp13 { opacity: 0.471;fill: #ffffff } </style><g clip-path="url(#cp1)"><g ><path class="shp0" d="M0 1L935 1L935 151L0 151L0 1Z" /><g style="opacity: 0.412"><g style="opacity: 0.412"><g style="opacity: 0.412"><path class="shp1" d="M635.08 197.72C634.5 192.16 634.35 186.6 634.72 180.96C636.33 154.75 648.18 129.5 666.56 111.2C673.14 104.69 680.68 98.68 684.71 90.34C691.52 76.21 690.2 60.47 698.84 46.35C707.55 32.29 720.65 20.94 735.73 14.72C780.75 -3.94 846.26 19.04 843.34 75.77C843.34 75.99 843.34 76.28 843.34 76.65C843.19 88.44 852.63 97.8 864.12 97.44C906.51 96.19 944.57 127.6 954.45 169.32C960.82 196.19 954.09 226.34 935.64 246.55C921.88 261.63 902.77 270.56 883.6 277C845.09 289.88 804.1 294.35 763.62 292.37C725.78 290.47 685.44 281.54 659.6 253.21C645.77 238.13 637.28 218.29 635.08 197.72Z" /></g></g></g><g style="opacity: 0.31"><path class="shp2" d="M828.62 11.36C828.91 16.7 833.38 20.87 838.65 20.58C843.92 20.29 847.95 15.75 847.65 10.33C847.36 4.99 842.9 0.81 837.63 1.11C832.43 1.4 828.33 6.01 828.62 11.36Z" /></g><g style="opacity: 0.31"><path class="shp2" d="M676.66 11.14C676.8 13.92 679.08 16.04 681.86 15.89C684.57 15.75 686.69 13.41 686.54 10.62C686.39 7.84 684.13 5.72 681.34 5.87C678.63 6.01 676.51 8.35 676.66 11.14Z" /></g><path class="shp3" d="M632.81 47.74C628.13 39.46 630.91 28.85 638.96 24.09C647.09 19.26 663.04 18.75 667.73 27.02C672.41 35.29 659.97 43.27 655.14 51.47C648.48 62.89 637.5 56.01 632.81 47.74Z" /><path class="shp4" d="M912.95 -6.21C919.24 -12.87 929.64 -13.02 936.08 -6.58C942.52 -0.14 947.21 14.94 940.91 21.53C934.62 28.19 924.08 18.46 915.36 16.04C903.29 12.67 906.65 0.45 912.95 -6.21Z" /><path class="shp5" d="M646.94 84.48C642.69 96.78 641.52 110.17 644.3 122.84C648.04 139.9 660.77 154.9 658.58 173.05C657.26 183.96 657.48 193.99 657.26 204.68C656.75 226.71 672.12 244.94 690.13 254.01C704.77 261.41 721.46 263.38 737.56 261.99C752.05 260.75 766.33 256.94 780.09 252.18C793.34 247.65 806.22 242.01 820.5 242.45C832.36 242.81 843.41 247.21 854.68 250.28C881.62 257.6 913.53 256.57 936.37 240.69C961.48 223.27 971.58 190.26 962.87 161.41C958.19 145.9 951.89 132.5 954.16 116.03C955.26 107.91 956.94 99.63 955.4 91.58C954.01 84.19 949.91 77.53 945.08 71.75C932.13 56.08 913.61 46.13 894.43 40.27C872.62 33.61 848.46 29.95 825.77 33.46C781.77 40.12 772.18 33.68 726.14 27.09C695.33 22.7 666.34 47.22 652.36 72.55C650.23 76.28 648.4 80.31 646.94 84.48Z" /><g style="opacity: 0.831"><path class="shp4" d="M668.24 119.91C674.61 111.57 684.42 105.86 689.18 96.27C694.96 84.78 693.72 71.16 698.84 59.45C706.45 42.1 720.14 27.31 737.41 19.19C745.69 15.31 754.84 12.89 763.69 13.55C777.38 14.58 789.17 22.77 798.39 32.51C812.15 47 821.82 67.57 838.36 79.14C847.43 85.51 858.12 78.77 867.78 76.58C878.69 74.16 890.04 74.75 900.43 77.67C919.61 83.16 936.15 96.85 944.42 115.01C953.28 134.33 951.96 161.12 935.42 177.74C927.74 185.43 917.34 190.55 911.7 199.77C904.6 211.34 903.73 227 901.75 239.81C899.55 254.01 893.48 267.85 884.33 279.34C884.25 279.49 884.11 279.63 884.03 279.71C868.15 299.4 841.14 306.06 818.3 296.18L769.77 275.17C720.58 253.87 683.17 219.54 665.24 169.69C661.36 158.93 659.97 135.94 664.87 125.4C665.83 123.42 667 121.59 668.24 119.91Z" /></g><g style="opacity: 0.22"><path fill-rule="evenodd" class="shp6" d="M913.27 96.23C913.27 99.31 910.77 101.82 907.69 101.82C904.61 101.82 902.11 99.31 902.11 96.23C902.11 93.16 904.61 90.65 907.69 90.65C910.77 90.65 913.27 93.16 913.27 96.23ZM911.1 96.23C911.1 94.35 909.57 92.82 907.69 92.82C905.8 92.82 904.27 94.35 904.27 96.23C904.27 98.12 905.8 99.65 907.69 99.65C909.57 99.65 911.1 98.12 911.1 96.23Z" /><path class="shp6" d="M907.73 125.33C907.7 125.26 907.66 125.2 907.63 125.14C907.59 125.08 907.54 125.03 907.49 124.98C907.44 124.93 907.39 124.88 907.33 124.84C907.27 124.8 907.21 124.77 907.14 124.74C907.08 124.72 907.01 124.69 906.94 124.68C906.8 124.65 906.65 124.65 906.51 124.68C906.45 124.69 906.38 124.72 906.31 124.74C906.25 124.77 906.18 124.8 906.13 124.84C906.07 124.88 906.01 124.93 905.96 124.98C905.91 125.03 905.87 125.08 905.83 125.14C905.79 125.2 905.75 125.26 905.73 125.33C905.7 125.39 905.68 125.46 905.66 125.53C905.65 125.6 905.64 125.67 905.64 125.74C905.64 125.81 905.65 125.88 905.66 125.95C905.68 126.02 905.7 126.09 905.73 126.16C905.75 126.22 905.79 126.28 905.83 126.34C905.87 126.4 905.91 126.46 905.96 126.51C905.99 126.53 906.01 126.56 906.04 126.58C906.07 126.6 906.1 126.62 906.13 126.64C906.18 126.68 906.25 126.71 906.31 126.74C906.38 126.77 906.45 126.79 906.51 126.8C906.58 126.82 906.66 126.83 906.73 126.83C906.8 126.83 906.87 126.82 906.94 126.8C907.01 126.79 907.08 126.77 907.14 126.74C907.21 126.71 907.27 126.68 907.33 126.64C907.36 126.62 907.39 126.6 907.41 126.58C907.44 126.56 907.47 126.53 907.49 126.51C907.54 126.46 907.59 126.4 907.63 126.34C907.66 126.28 907.7 126.22 907.73 126.16C907.75 126.09 907.77 126.02 907.79 125.95C907.8 125.88 907.81 125.81 907.81 125.74C907.81 125.67 907.8 125.6 907.79 125.53C907.77 125.46 907.75 125.39 907.73 125.33Z" /><path class="shp6" d="M890.68 82.46C890.65 82.4 890.62 82.33 890.58 82.27C890.54 82.21 890.49 82.16 890.44 82.11C890.39 82.06 890.34 82.01 890.28 81.97C890.22 81.94 890.16 81.9 890.09 81.87C890.03 81.85 889.96 81.83 889.89 81.81C889.75 81.78 889.61 81.78 889.47 81.81C889.4 81.83 889.33 81.85 889.26 81.87C889.2 81.9 889.13 81.94 889.08 81.97C889.02 82.01 888.96 82.06 888.91 82.11C888.86 82.16 888.82 82.21 888.78 82.27C888.74 82.33 888.71 82.4 888.68 82.46C888.65 82.53 888.63 82.59 888.62 82.66C888.6 82.73 888.6 82.8 888.6 82.88C888.6 82.95 888.6 83.02 888.62 83.09C888.63 83.16 888.65 83.22 888.68 83.29C888.71 83.35 888.74 83.42 888.78 83.48C888.82 83.53 888.86 83.59 888.91 83.64C888.96 83.69 889.02 83.74 889.08 83.78C889.13 83.81 889.2 83.85 889.26 83.88C889.33 83.9 889.4 83.92 889.47 83.94C889.54 83.95 889.61 83.96 889.68 83.96C889.75 83.96 889.82 83.95 889.89 83.94C889.96 83.92 890.03 83.9 890.09 83.88C890.16 83.85 890.22 83.81 890.28 83.78C890.34 83.74 890.39 83.69 890.44 83.64C890.49 83.59 890.54 83.53 890.58 83.48C890.62 83.42 890.65 83.35 890.68 83.29C890.71 83.22 890.73 83.16 890.74 83.09C890.75 83.02 890.76 82.95 890.76 82.88C890.76 82.8 890.75 82.73 890.74 82.66C890.73 82.59 890.71 82.53 890.68 82.46Z" /><path fill-rule="evenodd" class="shp6" d="M922 88.02L922 125.14C922 128.57 919.21 131.37 915.77 131.37L878.65 131.37C875.71 131.37 873.24 129.32 872.59 126.57C869.24 126.48 866.54 123.72 866.54 120.35L866.54 86.36C866.54 81.2 870.74 77 875.9 77L909.89 77C912.83 77 915.3 79.05 915.95 81.8C919.3 81.89 922 84.65 922 88.02ZM919.83 117.44L916.12 114.03L913.95 112.05L913.7 111.82C912.95 111.13 911.79 111.1 911.01 111.75L906.14 115.79C905.27 116.51 904.18 116.87 903.08 116.82L905.6 121.45C905.88 121.98 905.69 122.64 905.16 122.92C905 123.01 904.82 123.06 904.65 123.06C904.26 123.06 903.89 122.85 903.7 122.49L895.92 108.21L890.57 98.38C890.21 97.73 889.55 97.33 888.81 97.32C888.07 97.31 887.39 97.68 887.02 98.32L874.59 119.39L874.59 125.14C874.59 125.65 874.68 126.13 874.85 126.58C875.43 128.11 876.92 129.2 878.65 129.2L915.77 129.2C918.01 129.2 919.83 127.38 919.83 125.14L919.83 117.44ZM919.83 88.02C919.83 85.9 918.2 84.15 916.12 83.97L913.95 83.96L894.01 83.96C893.41 83.96 892.93 83.47 892.93 82.87C892.93 82.28 893.41 81.79 894.01 81.79L913.69 81.79C913.1 80.26 911.62 79.17 909.89 79.17L875.9 79.17C871.93 79.17 868.7 82.39 868.7 86.36L868.7 120.35C868.7 122.47 870.34 124.22 872.42 124.4L872.42 88.02C872.42 84.59 875.22 81.79 878.65 81.79L885.35 81.79C885.94 81.79 886.43 82.28 886.43 82.87C886.43 83.47 885.94 83.96 885.35 83.96L878.65 83.96C876.41 83.96 874.59 85.78 874.59 88.02L874.59 115.13L885.15 97.22C885.93 95.9 887.31 95.13 888.85 95.15C890.38 95.18 891.74 96 892.47 97.35L895.91 103.67L897.82 107.17L901.24 113.45C901.57 114.06 902.15 114.48 902.84 114.62C903.52 114.75 904.22 114.57 904.76 114.12L909.63 110.08C910.86 109.06 912.54 108.86 913.95 109.45L916.12 111.1L919.83 114.5L919.83 88.02Z" /></g><g style="opacity: 0.4"><g style="opacity: 0.812"><path class="shp7" d="M724.99 123.06L715.62 123.06C715.24 123.06 714.99 122.81 714.99 122.43C714.99 122.05 715.24 121.8 715.62 121.8L724.99 121.8C725.37 121.8 725.62 122.05 725.62 122.43C725.62 122.75 725.37 123.06 724.99 123.06Z" /><path class="shp7" d="M724.99 138.44L715.62 138.44C715.24 138.44 714.99 138.18 714.99 137.8C714.99 137.42 715.24 137.17 715.62 137.17L724.99 137.17C725.37 137.17 725.62 137.42 725.62 137.8C725.62 138.18 725.37 138.44 724.99 138.44Z" /><g style="opacity: 0.812"><g style="opacity: 0.812"><g style="opacity: 0.812"><path fill-rule="evenodd" class="shp7" d="M731.75 154L674.56 154C673.61 154 672.85 153.24 672.85 152.29L672.85 104.46C672.85 103.51 673.61 102.75 674.56 102.75L731.75 102.75C732.7 102.75 733.46 103.51 733.46 104.46L733.46 152.29C733.46 153.24 732.7 154 731.75 154ZM674.56 104.02C674.31 104.02 674.12 104.21 674.12 104.46L674.12 152.29C674.12 152.54 674.31 152.74 674.56 152.74L731.75 152.74C732.01 152.74 732.2 152.54 732.2 152.29L732.2 104.46C732.2 104.21 732.01 104.02 731.75 104.02L674.56 104.02Z" /><path fill-rule="evenodd" class="shp8" d="M731.75 154L674.56 154C673.61 154 672.85 153.24 672.85 152.29L672.85 104.46C672.85 103.51 673.61 102.75 674.56 102.75L731.75 102.75C732.7 102.75 733.46 103.51 733.46 104.46L733.46 152.29C733.46 153.24 732.7 154 731.75 154ZM674.56 104.02C674.31 104.02 674.12 104.21 674.12 104.46L674.12 152.29C674.12 152.54 674.31 152.74 674.56 152.74L731.75 152.74C732.01 152.74 732.2 152.54 732.2 152.29L732.2 104.46C732.2 104.21 732.01 104.02 731.75 104.02L674.56 104.02Z" /></g></g><path class="shp7" d="M724.99 115.53L680.38 115.53C680 115.53 679.75 115.28 679.75 114.9C679.75 114.52 680 114.27 680.38 114.27L724.99 114.27C725.37 114.27 725.62 114.52 725.62 114.9C725.62 115.28 725.37 115.53 724.99 115.53Z" /><path class="shp7" d="M724.99 130.53L680.38 130.53C680 130.53 679.75 130.28 679.75 129.9C679.75 129.52 680 129.26 680.38 129.26L724.99 129.26C725.37 129.26 725.62 129.52 725.62 129.9C725.62 130.21 725.37 130.53 724.99 130.53Z" /><path class="shp7" d="M704.42 123.06L680.38 123.06C680 123.06 679.75 122.81 679.75 122.43C679.75 122.05 680 121.8 680.38 121.8L704.42 121.8C704.8 121.8 705.06 122.05 705.06 122.43C705.06 122.75 704.8 123.06 704.42 123.06Z" /><path class="shp7" d="M704.42 138.44L680.38 138.44C680 138.44 679.75 138.18 679.75 137.8C679.75 137.42 680 137.17 680.38 137.17L704.42 137.17C704.8 137.17 705.06 137.42 705.06 137.8C705.06 138.18 704.8 138.44 704.42 138.44Z" /><path class="shp7" d="M696.58 145.59L680.38 145.59C680 145.59 679.75 145.33 679.75 144.95C679.75 144.57 680 144.32 680.38 144.32L696.58 144.32C696.96 144.32 697.21 144.57 697.21 144.95C697.21 145.33 696.96 145.59 696.58 145.59Z" /></g></g></g><path class="shp9" d="M791.99 74.66L752.01 74.66C745.38 74.66 740 69.27 740 62.65C740 56.02 745.38 50.64 752.01 50.64L791.99 50.64C798.62 50.64 804 56.02 804 62.65C804 69.27 798.62 74.66 791.99 74.66Z" /><path class="shp10" d="M771.98 69.34C781.32 69.34 788.88 61.77 788.88 52.44C788.88 43.11 781.32 35.55 771.98 35.55C762.65 35.55 755.09 43.11 755.09 52.44C755.09 61.77 762.65 69.34 771.98 69.34Z" /><path class="shp10" d="M791.99 71.11L752.01 71.11C745.38 71.11 740 65.73 740 59.1C740 52.47 745.38 47.09 752.01 47.09L791.99 47.09C798.62 47.09 804 52.47 804 59.1C804 65.73 798.62 71.11 791.99 71.11Z" /><path class="shp10" d="M771.98 65.79C781.32 65.79 788.88 58.23 788.88 48.89C788.88 39.56 781.32 32 771.98 32C762.65 32 755.09 39.56 755.09 48.89C755.09 58.23 762.65 65.79 771.98 65.79Z" /><g style="opacity: 0.212"><g style="opacity: 0.349"><path class="shp3" d="M791.99 71.11L752.01 71.11C745.38 71.11 740 65.73 740 59.1C740 52.47 745.38 47.09 752.01 47.09L791.99 47.09C798.62 47.09 804 52.47 804 59.1C804 65.73 798.62 71.11 791.99 71.11Z" /><path class="shp3" d="M771.98 65.79C781.32 65.79 788.88 58.23 788.88 48.89C788.88 39.56 781.32 32 771.98 32C762.65 32 755.09 39.56 755.09 48.89C755.09 58.23 762.65 65.79 771.98 65.79Z" /></g></g><path class="shp6" d="M768.03 51.41C767.85 51.41 767.63 51.35 767.47 51.2C767.16 50.89 767.16 50.39 767.47 50.11L772.02 45.66L776.5 50.14C776.81 50.45 776.81 50.95 776.5 51.23C776.18 51.54 775.69 51.54 775.41 51.23L772.05 47.87L768.62 51.26C768.44 51.35 768.25 51.41 768.03 51.41Z" /><path class="shp6" d="M771.98 57.61C771.55 57.61 771.21 57.26 771.21 56.83L771.21 46.72C771.21 46.28 771.55 45.94 771.98 45.94C772.42 45.94 772.76 46.28 772.76 46.72L772.76 56.83C772.76 57.26 772.42 57.61 771.98 57.61Z" /><path class="shp6" d="M779.36 62.4L764.55 62.4C763.49 62.4 762.62 61.53 762.62 60.47L762.62 55.09C762.62 54.65 762.96 54.31 763.4 54.31C763.83 54.31 764.17 54.65 764.17 55.09L764.17 60.47C764.17 60.69 764.33 60.84 764.55 60.84L779.36 60.84C779.64 60.84 779.86 60.62 779.86 60.34L779.86 55.09C779.86 54.65 780.2 54.31 780.63 54.31C781.07 54.31 781.41 54.65 781.41 55.09L781.41 60.38C781.38 61.5 780.48 62.4 779.36 62.4Z" /><path class="shp11" d="M887.14 64.03L855.66 64.03C854.63 64.03 853.77 63.2 853.77 62.14L853.77 30.69C853.77 29.66 854.6 28.8 855.66 28.8L887.11 28.8C888.14 28.8 889 29.63 889 30.69L889 62.14C889 63.17 888.17 64.03 887.14 64.03Z" /><path class="shp6" d="M885.34 62.23L853.89 62.23C852.86 62.23 852 61.4 852 60.34L852 28.89C852 27.86 852.83 27 853.89 27L885.34 27C886.37 27 887.23 27.83 887.23 28.89L887.23 60.34C887.23 61.4 886.37 62.23 885.34 62.23Z" /><path class="shp12" d="M884.18 30.01L854.99 30.01L854.99 59.21L884.18 59.21L884.18 30.01Z" /><path fill-rule="evenodd" class="shp13" d="M854.57 59.48L854.57 52.71L859.77 46.68C860.51 45.83 861.81 45.65 862.73 46.33L867.51 49.76C867.75 49.93 868.08 49.9 868.31 49.73L875.2 43.82C876.71 42.52 878.95 42.54 880.43 43.85L884.66 47.6L884.66 59.48L854.57 59.48ZM883.77 58.59L883.77 47.98L879.84 44.5C878.69 43.46 876.94 43.46 875.76 44.47L868.88 50.38C868.34 50.85 867.57 50.88 866.98 50.46L862.2 47.04C861.63 46.62 860.87 46.74 860.42 47.24L855.43 53.01L855.43 58.59L883.77 58.59Z" /><path fill-rule="evenodd" class="shp13" d="M871.39 42.04C869.35 42.04 867.69 40.39 867.69 38.35C867.69 36.31 869.35 34.65 871.39 34.65C873.43 34.65 875.08 36.31 875.08 38.35C875.08 40.39 873.43 42.04 871.39 42.04ZM871.39 35.54C869.82 35.54 868.58 36.81 868.58 38.35C868.58 39.88 869.85 41.16 871.39 41.16C872.92 41.16 874.19 39.88 874.19 38.35C874.19 36.81 872.95 35.54 871.39 35.54Z" /><path class="shp11" d="M843.41 120.5L821.27 128.78C820.06 129.22 818.7 128.63 818.26 127.42L809.98 105.28C809.54 104.07 810.13 102.71 811.35 102.27L833.48 93.99C834.69 93.55 836.05 94.14 836.5 95.35L844.77 117.49C845.21 118.7 844.62 120.06 843.41 120.5Z" /><path class="shp6" d="M841.57 119.66L819.43 127.93C818.22 128.37 816.86 127.78 816.42 126.57L808.15 104.44C807.71 103.22 808.29 101.86 809.51 101.42L831.64 93.15C832.86 92.7 834.22 93.29 834.66 94.51L842.93 116.64C843.37 117.86 842.75 119.22 841.57 119.66Z" /><path class="shp9" d="M832.4 95.42L810.4 103.67L818.64 125.67L840.64 117.43L832.4 95.42Z" /><path fill-rule="evenodd" class="shp13" d="M818.29 126.24L816.31 120.91L818.55 114.84C818.92 113.89 819.91 113.37 820.9 113.63L825.47 114.84C825.61 114.88 825.76 114.8 825.83 114.69L829.33 108.3C830.13 106.83 831.94 106.16 833.52 106.75L837.86 108.41L841.31 117.64L818.29 126.24ZM817.49 120.87L818.96 124.81L839.92 116.94L837.01 109.22L833.15 107.74C832.08 107.34 830.87 107.78 830.32 108.77L826.83 115.17C826.5 115.76 825.83 116.02 825.21 115.87L820.65 114.66C820.21 114.55 819.77 114.77 819.62 115.21L817.49 120.87Z" /><path fill-rule="evenodd" class="shp13" d="M825.1 108.48C823.81 108.48 822.6 107.71 822.12 106.42C821.49 104.77 822.34 102.96 823.96 102.34C825.58 101.71 827.41 102.56 828.04 104.18C828.66 105.83 827.82 107.63 826.2 108.26C825.83 108.41 825.47 108.48 825.1 108.48ZM825.1 103.26C824.84 103.26 824.62 103.3 824.36 103.41C823.3 103.81 822.74 104.99 823.15 106.05C823.55 107.12 824.73 107.67 825.8 107.27C826.86 106.86 827.41 105.69 827.01 104.62C826.72 103.77 825.94 103.26 825.1 103.26Z" /><g clip-path="url(#cp2)"><g ><g style="opacity: 0.412"><g style="opacity: 0.412"><g style="opacity: 0.412"><path class="shp1" d="M-58.53 84.76C-59.07 79.62 -59.21 74.49 -58.87 69.28C-57.38 45.08 -46.43 21.76 -29.46 4.86C-23.38 -1.16 -16.42 -6.7 -12.7 -14.41C-6.41 -27.46 -7.63 -41.99 0.35 -55.04C8.39 -68.02 20.49 -78.49 34.42 -84.24C75.99 -101.48 136.5 -80.25 133.79 -27.86C133.79 -27.66 133.79 -27.39 133.79 -27.05C133.66 -16.17 142.38 -7.51 152.99 -7.85C192.13 -9 227.28 20 236.41 58.53C242.29 83.34 236.07 111.19 219.03 129.85C206.32 143.78 188.68 152.02 170.97 157.97C135.41 169.87 97.56 173.99 60.17 172.17C25.23 170.41 -12.02 162.16 -35.89 136C-48.66 122.08 -56.5 103.76 -58.53 84.76Z" /></g></g></g><g style="opacity: 0.31"><path class="shp2" d="M241.14 17.23C241.21 18.92 242.63 20.2 244.32 20.13C246.01 20.07 247.22 18.58 247.16 16.89C247.09 15.2 245.67 13.92 243.98 13.98C242.36 14.12 241.07 15.54 241.14 17.23Z" /></g><path class="shp5" d="M-47.58 -19.82C-51.5 -8.46 -52.58 3.91 -50.01 15.61C-46.57 31.36 -34.8 45.21 -36.83 61.98C-38.05 72.05 -37.85 81.31 -38.05 91.18C-38.52 111.53 -24.33 128.36 -7.7 136.75C5.82 143.57 21.24 145.4 36.11 144.11C49.49 142.96 62.68 139.45 75.38 135.06C87.62 130.86 99.52 125.66 112.7 126.06C123.65 126.4 133.86 130.46 144.27 133.3C169.15 140.06 198.62 139.11 219.71 124.44C242.9 108.35 252.23 77.87 244.18 51.23C239.85 36.9 234.04 24.53 236.14 9.32C237.15 1.82 238.71 -5.82 237.29 -13.26C236 -20.09 232.22 -26.24 227.75 -31.58C215.79 -46.05 198.69 -55.24 180.98 -60.65C160.83 -66.8 138.52 -70.18 117.57 -66.93C76.94 -60.78 68.08 -66.73 25.56 -72.82C-2.9 -76.87 -29.67 -54.23 -42.58 -30.84C-44.54 -27.39 -46.23 -23.67 -47.58 -19.82Z" /><g style="opacity: 0.831"><path class="shp4" d="M-27.91 12.9C-22.03 5.2 -12.97 -0.08 -8.57 -8.93C-3.23 -19.55 -4.38 -32.12 0.35 -42.94C7.38 -58.96 20.02 -72.61 35.97 -80.12C43.61 -83.7 52.06 -85.93 60.24 -85.32C72.88 -84.37 83.77 -76.8 92.28 -67.81C104.99 -54.43 113.92 -35.43 129.19 -24.75C137.58 -18.87 147.45 -25.09 156.37 -27.12C166.44 -29.35 176.92 -28.81 186.52 -26.1C204.23 -21.03 219.51 -8.39 227.15 8.37C235.33 26.22 234.11 50.96 218.83 66.31C211.73 73.4 202.13 78.14 196.93 86.65C190.37 97.33 189.56 111.8 187.74 123.63C185.71 136.75 180.1 149.52 171.65 160.13C171.58 160.27 171.44 160.41 171.38 160.47C156.71 178.66 131.76 184.81 110.67 175.68L65.85 156.28C20.43 136.61 -14.12 104.91 -30.68 58.87C-34.26 48.93 -35.55 27.71 -31.02 17.97C-30.14 16.15 -29.06 14.46 -27.91 12.9Z" /></g><g style="opacity: 0.659"><g style="opacity: 0.659"><g style="opacity: 0.659"><path fill-rule="evenodd" class="shp8" d="M110.11 166.75L105.64 166.75C103.75 166.75 102.13 165.2 102.13 163.24L102.13 158.24C102.13 157.36 101.59 156.55 100.71 156.21C100.17 156.01 99.7 155.8 99.16 155.53C98.34 155.13 97.33 155.33 96.72 155.94L93.21 159.45C92.53 160.13 91.65 160.47 90.77 160.47C89.83 160.47 88.95 160.13 88.34 159.45L85.23 156.34C84.55 155.67 84.22 154.79 84.22 153.91C84.22 152.96 84.55 152.09 85.23 151.48L88.75 147.96C89.35 147.35 89.56 146.34 89.15 145.53C88.95 144.99 88.68 144.51 88.48 143.97C88.14 143.16 87.39 142.55 86.45 142.55L81.51 142.55C79.62 142.55 78 141 78 139.04L78 134.71C78 132.82 79.55 131.2 81.51 131.2L86.51 131.2C87.39 131.2 88.2 130.66 88.54 129.78C88.75 129.24 88.95 128.69 89.22 128.22C89.62 127.41 89.42 126.4 88.81 125.79L85.3 122.27C84.62 121.6 84.28 120.72 84.28 119.84C84.28 118.89 84.62 118.02 85.3 117.41L88.41 114.3C89.76 112.94 91.99 112.94 93.34 114.3L96.86 117.81C97.47 118.42 98.48 118.62 99.29 118.22C99.76 118.02 100.31 117.74 100.85 117.54C101.66 117.2 102.27 116.46 102.27 115.51L102.27 110.51C102.27 108.62 103.82 107 105.78 107L110.24 107C112.14 107 113.76 108.55 113.76 110.51L113.76 115.51C113.76 116.39 114.3 117.2 115.18 117.54C115.72 117.74 116.26 117.95 116.73 118.22C117.54 118.62 118.56 118.42 119.17 117.81L122.68 114.3C124.03 112.94 126.26 112.94 127.61 114.3L130.72 117.41C131.4 118.08 131.74 118.96 131.74 119.84C131.74 120.79 131.4 121.67 130.72 122.27L127.21 125.79C126.6 126.4 126.4 127.41 126.8 128.22C127.01 128.69 127.28 129.24 127.48 129.78C127.82 130.59 128.56 131.2 129.51 131.2L134.51 131.2C136.4 131.2 138.03 132.75 138.03 134.71L138.03 139.17C138.03 141.07 136.47 142.69 134.51 142.69L129.51 142.69C128.63 142.69 127.82 143.23 127.48 144.11C127.28 144.65 127.08 145.19 126.8 145.66C126.4 146.47 126.6 147.49 127.21 148.1L130.72 151.61C131.4 152.29 131.74 153.17 131.74 154.05C131.74 154.99 131.4 155.87 130.72 156.48L127.61 159.59C126.94 160.26 126.06 160.6 125.18 160.6C124.3 160.6 123.36 160.26 122.75 159.59L119.23 156.07C118.63 155.47 117.61 155.26 116.8 155.67C116.26 155.94 115.78 156.14 115.25 156.34C114.43 156.68 113.83 157.43 113.83 158.37L113.83 163.37C113.56 165.2 112 166.75 110.11 166.75ZM98.28 154.11C98.75 154.11 99.29 154.25 99.76 154.45C100.24 154.65 100.71 154.86 101.25 155.06C102.6 155.53 103.55 156.88 103.55 158.3L103.55 163.31C103.55 164.46 104.5 165.47 105.71 165.47L110.17 165.47C111.32 165.47 112.34 164.52 112.34 163.31L112.34 158.3C112.34 156.82 113.28 155.53 114.64 155.06C115.11 154.86 115.58 154.65 116.12 154.45C117.47 153.84 119.03 154.11 120.04 155.13L123.56 158.64C124.37 159.45 125.79 159.45 126.6 158.64L129.71 155.53C130.12 155.13 130.32 154.59 130.32 154.05C130.32 153.5 130.12 152.96 129.71 152.56L126.2 149.04C125.18 148.03 124.91 146.41 125.52 145.12C125.72 144.65 125.92 144.18 126.13 143.63C126.6 142.28 127.95 141.34 129.37 141.34L134.38 141.34C135.53 141.34 136.54 140.39 136.54 139.17L136.54 134.71C136.54 133.56 135.59 132.55 134.38 132.55L129.37 132.55C127.89 132.55 126.6 131.6 126.13 130.25C125.92 129.78 125.72 129.24 125.52 128.76C124.91 127.41 125.18 125.86 126.2 124.84L129.71 121.33C130.12 120.92 130.32 120.38 130.32 119.84C130.32 119.3 130.12 118.76 129.71 118.35L126.6 115.24C125.79 114.43 124.44 114.43 123.56 115.24L120.04 118.76C119.03 119.77 117.41 120.04 116.12 119.43C115.65 119.23 115.18 119.03 114.64 118.83C113.28 118.35 112.34 117 112.34 115.58L112.34 110.58C112.34 109.43 111.39 108.42 110.17 108.42L105.71 108.42C104.56 108.42 103.55 109.36 103.55 110.58L103.55 115.58C103.55 117.07 102.6 118.35 101.25 118.83C100.78 119.03 100.24 119.23 99.76 119.43C98.41 120.04 96.86 119.77 95.84 118.76L92.33 115.24C91.52 114.43 90.17 114.43 89.29 115.24L86.18 118.35C85.77 118.76 85.57 119.3 85.57 119.84C85.57 120.38 85.77 120.92 86.18 121.33L89.69 124.84C90.71 125.86 90.98 127.48 90.37 128.76C90.17 129.24 89.96 129.71 89.76 130.25C89.29 131.6 87.93 132.55 86.51 132.55L81.51 132.55C80.36 132.55 79.35 133.5 79.35 134.71L79.35 139.17C79.35 140.32 80.3 141.34 81.51 141.34L86.51 141.34C88 141.34 89.29 142.28 89.76 143.63C89.96 144.11 90.17 144.65 90.37 145.12C90.98 146.47 90.71 148.03 89.69 149.04L86.18 152.56C85.77 152.96 85.57 153.5 85.57 154.05C85.57 154.59 85.77 155.13 86.18 155.53L89.29 158.64C90.1 159.45 91.52 159.45 92.33 158.64L95.84 155.13C96.52 154.45 97.4 154.11 98.28 154.11ZM107.88 152.63C99.22 152.63 92.19 145.6 92.19 136.94C92.19 128.29 99.22 121.26 107.88 121.26C116.53 121.26 123.56 128.29 123.56 136.94C123.56 145.53 116.53 152.63 107.88 152.63ZM107.88 122.54C99.97 122.54 93.55 128.97 93.55 136.88C93.55 144.78 99.97 151.21 107.88 151.21C115.78 151.21 122.21 144.78 122.21 136.88C122.21 128.97 115.78 122.54 107.88 122.54Z" /></g></g></g><g style="opacity: 0.502"><path class="shp7" d="M171.21 55.27L162.43 55.27C162.02 55.27 161.75 55 161.75 54.59C161.75 54.18 162.02 53.91 162.43 53.91L171.21 53.91C171.62 53.91 171.89 54.18 171.89 54.59C171.89 55 171.62 55.27 171.21 55.27Z" /><path class="shp7" d="M171.21 69.8L162.43 69.8C162.02 69.8 161.75 69.53 161.75 69.12C161.75 68.72 162.02 68.45 162.43 68.45L171.21 68.45C171.62 68.45 171.89 68.72 171.89 69.12C171.89 69.53 171.62 69.8 171.21 69.8Z" /><g style="opacity: 0.812"><g style="opacity: 0.812"><g style="opacity: 0.812"><path fill-rule="evenodd" class="shp7" d="M177.43 84.47L123.83 84.47C122.81 84.47 122 83.66 122 82.64L122 37.83C122 36.81 122.81 36 123.83 36L177.43 36C178.45 36 179.26 36.81 179.26 37.83L179.26 82.64C179.32 83.66 178.45 84.47 177.43 84.47ZM123.89 37.35C123.62 37.35 123.42 37.55 123.42 37.83L123.42 82.64C123.42 82.91 123.62 83.12 123.89 83.12L177.5 83.12C177.77 83.12 177.97 82.91 177.97 82.64L177.97 37.83C177.97 37.55 177.77 37.35 177.5 37.35L123.89 37.35Z" /><path fill-rule="evenodd" class="shp8" d="M177.43 84.47L123.83 84.47C122.81 84.47 122 83.66 122 82.64L122 37.83C122 36.81 122.81 36 123.83 36L177.43 36C178.45 36 179.26 36.81 179.26 37.83L179.26 82.64C179.32 83.66 178.45 84.47 177.43 84.47ZM123.89 37.35C123.62 37.35 123.42 37.55 123.42 37.83L123.42 82.64C123.42 82.91 123.62 83.12 123.89 83.12L177.5 83.12C177.77 83.12 177.97 82.91 177.97 82.64L177.97 37.83C177.97 37.55 177.77 37.35 177.5 37.35L123.89 37.35Z" /></g></g><path class="shp7" d="M171.21 48.24L129.23 48.24C128.83 48.24 128.56 47.97 128.56 47.56C128.56 47.15 128.83 46.88 129.23 46.88L171.21 46.88C171.62 46.88 171.89 47.15 171.89 47.56C171.89 47.97 171.62 48.24 171.21 48.24Z" /><path class="shp7" d="M171.21 62.3L129.23 62.3C128.83 62.3 128.56 62.03 128.56 61.62C128.56 61.22 128.83 60.94 129.23 60.94L171.21 60.94C171.62 60.94 171.89 61.22 171.89 61.62C171.89 62.03 171.62 62.3 171.21 62.3Z" /><path class="shp7" d="M151.88 55.27L129.23 55.27C128.83 55.27 128.56 55 128.56 54.59C128.56 54.18 128.83 53.91 129.23 53.91L151.88 53.91C152.28 53.91 152.56 54.18 152.56 54.59C152.56 55 152.28 55.27 151.88 55.27Z" /><path class="shp7" d="M151.88 69.8L129.23 69.8C128.83 69.8 128.56 69.53 128.56 69.12C128.56 68.72 128.83 68.45 129.23 68.45L151.88 68.45C152.28 68.45 152.56 68.72 152.56 69.12C152.56 69.53 152.28 69.8 151.88 69.8Z" /><path class="shp7" d="M144.51 76.56L129.23 76.56C128.83 76.56 128.56 76.29 128.56 75.88C128.56 75.48 128.83 75.21 129.23 75.21L144.51 75.21C144.92 75.21 145.19 75.48 145.19 75.88C145.19 76.22 144.85 76.56 144.51 76.56Z" /></g></g><g style="opacity: 0.812"><path class="shp7" d="M75.7 18.7L65.7 18.7C65.29 18.7 65.02 18.43 65.02 18.02C65.02 17.62 65.29 17.35 65.7 17.35L75.7 17.35C76.11 17.35 76.38 17.62 76.38 18.02C76.38 18.36 76.11 18.7 75.7 18.7Z" /><path class="shp7" d="M75.7 35.13L65.7 35.13C65.29 35.13 65.02 34.86 65.02 34.45C65.02 34.04 65.29 33.77 65.7 33.77L75.7 33.77C76.11 33.77 76.38 34.04 76.38 34.45C76.38 34.86 76.11 35.13 75.7 35.13Z" /><g style="opacity: 0.812"><g style="opacity: 0.812"><g style="opacity: 0.812"><path fill-rule="evenodd" class="shp7" d="M82.94 51.76L21.83 51.76C20.81 51.76 20 50.94 20 49.93L20 -1.17C20 -2.19 20.81 -3 21.83 -3L82.94 -3C83.95 -3 84.76 -2.19 84.76 -1.17L84.76 49.93C84.76 50.94 83.95 51.76 82.94 51.76ZM21.83 -1.65C21.55 -1.65 21.35 -1.45 21.35 -1.17L21.35 49.93C21.35 50.2 21.55 50.4 21.83 50.4L82.94 50.4C83.21 50.4 83.41 50.2 83.41 49.93L83.41 -1.17C83.41 -1.45 83.21 -1.65 82.94 -1.65L21.83 -1.65Z" /><path fill-rule="evenodd" class="shp8" d="M82.94 51.76L21.83 51.76C20.81 51.76 20 50.94 20 49.93L20 -1.17C20 -2.19 20.81 -3 21.83 -3L82.94 -3C83.95 -3 84.76 -2.19 84.76 -1.17L84.76 49.93C84.76 50.94 83.95 51.76 82.94 51.76ZM21.83 -1.65C21.55 -1.65 21.35 -1.45 21.35 -1.17L21.35 49.93C21.35 50.2 21.55 50.4 21.83 50.4L82.94 50.4C83.21 50.4 83.41 50.2 83.41 49.93L83.41 -1.17C83.41 -1.45 83.21 -1.65 82.94 -1.65L21.83 -1.65Z" /></g></g><path class="shp7" d="M75.7 10.66L28.04 10.66C27.64 10.66 27.37 10.38 27.37 9.98C27.37 9.57 27.64 9.3 28.04 9.3L75.7 9.3C76.11 9.3 76.38 9.57 76.38 9.98C76.38 10.38 76.11 10.66 75.7 10.66Z" /><path class="shp7" d="M75.7 26.68L28.04 26.68C27.64 26.68 27.37 26.41 27.37 26C27.37 25.59 27.64 25.32 28.04 25.32L75.7 25.32C76.11 25.32 76.38 25.59 76.38 26C76.38 26.34 76.11 26.68 75.7 26.68Z" /><path class="shp7" d="M53.73 18.7L28.04 18.7C27.64 18.7 27.37 18.43 27.37 18.02C27.37 17.62 27.64 17.35 28.04 17.35L53.73 17.35C54.14 17.35 54.41 17.62 54.41 18.02C54.41 18.36 54.14 18.7 53.73 18.7Z" /><path class="shp7" d="M53.73 35.13L28.04 35.13C27.64 35.13 27.37 34.86 27.37 34.45C27.37 34.04 27.64 33.77 28.04 33.77L53.73 33.77C54.14 33.77 54.41 34.04 54.41 34.45C54.41 34.86 54.14 35.13 53.73 35.13Z" /><path class="shp7" d="M45.35 42.77L28.04 42.77C27.64 42.77 27.37 42.49 27.37 42.09C27.37 41.68 27.64 41.41 28.04 41.41L45.35 41.41C45.76 41.41 46.03 41.68 46.03 42.09C46.03 42.49 45.76 42.77 45.35 42.77Z" /></g></g><path fill-rule="evenodd" class="shp8" d="M130.11 24L126.89 24C125.53 24 124.46 22.89 124.46 21.57L124.46 17.95C124.46 17.29 124.05 16.67 123.39 16.42C123.02 16.3 122.65 16.13 122.28 15.97C121.66 15.68 120.92 15.8 120.43 16.3L117.87 18.85C117.42 19.3 116.8 19.55 116.14 19.55C115.48 19.55 114.87 19.3 114.41 18.85L112.15 16.59C111.2 15.64 111.2 14.07 112.15 13.13L114.7 10.57C115.2 10.08 115.32 9.34 115.03 8.72C114.87 8.35 114.7 7.98 114.58 7.61C114.33 6.99 113.71 6.54 113.06 6.54L109.43 6.54C108.07 6.54 107 5.42 107 4.11L107 0.89C107 -0.47 108.11 -1.54 109.43 -1.54L113.06 -1.54C113.71 -1.54 114.33 -1.95 114.58 -2.61C114.7 -2.98 114.87 -3.35 115.03 -3.72C115.32 -4.34 115.2 -5.08 114.7 -5.57L112.15 -8.13C111.2 -9.07 111.2 -10.64 112.15 -11.59L114.41 -13.85C115.36 -14.8 116.93 -14.8 117.87 -13.85L120.43 -11.3C120.92 -10.8 121.66 -10.68 122.28 -10.97C122.65 -11.13 123.02 -11.3 123.39 -11.42C124.01 -11.67 124.46 -12.29 124.46 -12.95L124.46 -16.57C124.46 -17.93 125.58 -19 126.89 -19L130.11 -19C131.47 -19 132.54 -17.89 132.54 -16.57L132.54 -12.95C132.54 -12.29 132.95 -11.67 133.61 -11.42C133.98 -11.3 134.35 -11.13 134.72 -10.97C135.34 -10.68 136.08 -10.8 136.57 -11.3L139.13 -13.85C140.07 -14.8 141.64 -14.8 142.59 -13.85L144.85 -11.59C145.8 -10.64 145.8 -9.07 144.85 -8.13L142.3 -5.57C141.8 -5.08 141.68 -4.34 141.97 -3.72C142.13 -3.35 142.3 -2.98 142.42 -2.61C142.67 -1.99 143.29 -1.54 143.94 -1.54L147.57 -1.54C148.93 -1.54 150 -0.42 150 0.89L150 4.11C150 5.47 148.89 6.54 147.57 6.54L143.94 6.54C143.29 6.54 142.67 6.95 142.42 7.61C142.3 7.98 142.13 8.35 141.97 8.72C141.68 9.34 141.8 10.08 142.3 10.57L144.85 13.13C145.8 14.07 145.8 15.64 144.85 16.59L142.59 18.85C142.13 19.3 141.51 19.55 140.86 19.55C140.2 19.55 139.58 19.3 139.13 18.85L136.57 16.3C136.08 15.8 135.34 15.68 134.72 15.97C134.35 16.13 133.98 16.3 133.61 16.42C132.99 16.67 132.54 17.29 132.54 17.95L132.54 21.57C132.58 22.89 131.47 24 130.11 24ZM121.58 14.98C121.95 14.98 122.28 15.06 122.61 15.23C122.94 15.39 123.31 15.52 123.68 15.68C124.63 16.05 125.29 16.96 125.29 17.99L125.29 21.61C125.29 22.52 126.03 23.22 126.89 23.22L130.11 23.22C131.01 23.22 131.71 22.48 131.71 21.61L131.71 17.99C131.71 16.96 132.37 16.05 133.32 15.68C133.69 15.56 134.02 15.39 134.39 15.23C135.34 14.77 136.45 14.98 137.15 15.72L139.7 18.27C140.32 18.89 141.35 18.89 142.01 18.27L144.28 16.01C144.89 15.39 144.89 14.36 144.28 13.7L141.72 11.15C140.98 10.41 140.81 9.3 141.23 8.39C141.39 8.06 141.56 7.69 141.68 7.32C142.05 6.37 142.96 5.71 143.99 5.71L147.61 5.71C148.52 5.71 149.22 4.97 149.22 4.11L149.22 0.89C149.22 -0.01 148.48 -0.71 147.61 -0.71L143.99 -0.71C142.96 -0.71 142.05 -1.37 141.68 -2.32C141.56 -2.69 141.39 -3.02 141.23 -3.39C140.77 -4.34 140.98 -5.45 141.72 -6.15L144.28 -8.7C144.89 -9.32 144.89 -10.35 144.28 -11.01L142.01 -13.27C141.39 -13.89 140.36 -13.89 139.7 -13.27L137.15 -10.72C136.41 -9.98 135.3 -9.82 134.39 -10.23C134.06 -10.39 133.69 -10.56 133.32 -10.68C132.37 -11.05 131.71 -11.96 131.71 -12.99L131.71 -16.61C131.71 -17.52 130.97 -18.22 130.11 -18.22L126.89 -18.22C125.99 -18.22 125.29 -17.48 125.29 -16.61L125.29 -12.99C125.29 -11.96 124.63 -11.05 123.68 -10.68C123.31 -10.56 122.98 -10.39 122.61 -10.23C121.66 -9.77 120.55 -9.98 119.85 -10.72L117.3 -13.27C116.68 -13.89 115.65 -13.89 114.99 -13.27L112.72 -11.01C112.11 -10.39 112.11 -9.36 112.72 -8.7L115.28 -6.15C116.02 -5.41 116.19 -4.3 115.77 -3.39C115.61 -3.06 115.48 -2.69 115.32 -2.32C114.95 -1.37 114.04 -0.71 113.01 -0.71L109.39 -0.71C108.48 -0.71 107.78 0.03 107.78 0.89L107.78 4.11C107.78 5.01 108.52 5.71 109.39 5.71L113.01 5.71C114.04 5.71 114.95 6.37 115.32 7.32C115.44 7.69 115.61 8.02 115.77 8.39C116.23 9.34 116.02 10.45 115.28 11.15L112.72 13.7C112.11 14.32 112.11 15.35 112.72 16.01L114.99 18.27C115.61 18.89 116.64 18.89 117.3 18.27L119.85 15.72C120.3 15.23 120.92 14.98 121.58 14.98ZM128.5 13.74C122.28 13.74 117.17 8.68 117.17 2.46C117.17 -3.76 122.24 -8.87 128.5 -8.87C134.72 -8.87 139.83 -3.8 139.83 2.46C139.83 8.68 134.76 13.74 128.5 13.74ZM128.5 -8.04C122.73 -8.04 118 -3.35 118 2.46C118 8.23 122.69 12.92 128.5 12.92C134.27 12.92 139 8.23 139 2.46C139 -3.35 134.31 -8.04 128.5 -8.04Z" /></g></g></g></g></svg>
|
1 |
+
<svg version="1.2" baseProfile="tiny-ps" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 935 150"><title>kartinkia-svg</title><defs><clipPath clipPathUnits="userSpaceOnUse" id="cp1"><path d="M0 0L935 0L935 150L0 150L0 0Z" /></clipPath><clipPath clipPathUnits="userSpaceOnUse" id="cp2"><path d="M-28 -110L310 -110L310 228L-28 228L-28 -110Z" /></clipPath></defs><style>tspan { white-space:pre }.shp0 { fill: #116c7d } .shp1 { opacity: 0.412;fill: #e1e2fe } .shp2 { opacity: 0.31;fill: #e1e2fe } .shp3 { opacity: 0.102;fill: #ecf1f7 } .shp4 { opacity: 0.102;fill: #e1e2fe } .shp5 { opacity: 0.051;fill: #e1e2fe } .shp6 { fill: #ffffff } .shp7 { opacity: 0.812;fill: #ffffff } .shp8 { opacity: 0.659;fill: #ffffff } .shp9 { fill: #c5d9ff } .shp10 { fill: #599af2 } .shp11 { opacity: 0.361;fill: #4c65ba } .shp12 { opacity: 0.388;fill: #f7a9b4 } .shp13 { opacity: 0.471;fill: #ffffff } </style><g clip-path="url(#cp1)"><g ><path class="shp0" d="M0 1L935 1L935 151L0 151L0 1Z" /><g style="opacity: 0.412"><g style="opacity: 0.412"><g style="opacity: 0.412"><path class="shp1" d="M635.08 197.72C634.5 192.16 634.35 186.6 634.72 180.96C636.33 154.75 648.18 129.5 666.56 111.2C673.14 104.69 680.68 98.68 684.71 90.34C691.52 76.21 690.2 60.47 698.84 46.35C707.55 32.29 720.65 20.94 735.73 14.72C780.75 -3.94 846.26 19.04 843.34 75.77C843.34 75.99 843.34 76.28 843.34 76.65C843.19 88.44 852.63 97.8 864.12 97.44C906.51 96.19 944.57 127.6 954.45 169.32C960.82 196.19 954.09 226.34 935.64 246.55C921.88 261.63 902.77 270.56 883.6 277C845.09 289.88 804.1 294.35 763.62 292.37C725.78 290.47 685.44 281.54 659.6 253.21C645.77 238.13 637.28 218.29 635.08 197.72Z" /></g></g></g><g style="opacity: 0.31"><path class="shp2" d="M828.62 11.36C828.91 16.7 833.38 20.87 838.65 20.58C843.92 20.29 847.95 15.75 847.65 10.33C847.36 4.99 842.9 0.81 837.63 1.11C832.43 1.4 828.33 6.01 828.62 11.36Z" /></g><g style="opacity: 0.31"><path class="shp2" d="M676.66 11.14C676.8 13.92 679.08 16.04 681.86 15.89C684.57 15.75 686.69 13.41 686.54 10.62C686.39 7.84 684.13 5.72 681.34 5.87C678.63 6.01 676.51 8.35 676.66 11.14Z" /></g><path class="shp3" d="M632.81 47.74C628.13 39.46 630.91 28.85 638.96 24.09C647.09 19.26 663.04 18.75 667.73 27.02C672.41 35.29 659.97 43.27 655.14 51.47C648.48 62.89 637.5 56.01 632.81 47.74Z" /><path class="shp4" d="M912.95 -6.21C919.24 -12.87 929.64 -13.02 936.08 -6.58C942.52 -0.14 947.21 14.94 940.91 21.53C934.62 28.19 924.08 18.46 915.36 16.04C903.29 12.67 906.65 0.45 912.95 -6.21Z" /><path class="shp5" d="M646.94 84.48C642.69 96.78 641.52 110.17 644.3 122.84C648.04 139.9 660.77 154.9 658.58 173.05C657.26 183.96 657.48 193.99 657.26 204.68C656.75 226.71 672.12 244.94 690.13 254.01C704.77 261.41 721.46 263.38 737.56 261.99C752.05 260.75 766.33 256.94 780.09 252.18C793.34 247.65 806.22 242.01 820.5 242.45C832.36 242.81 843.41 247.21 854.68 250.28C881.62 257.6 913.53 256.57 936.37 240.69C961.48 223.27 971.58 190.26 962.87 161.41C958.19 145.9 951.89 132.5 954.16 116.03C955.26 107.91 956.94 99.63 955.4 91.58C954.01 84.19 949.91 77.53 945.08 71.75C932.13 56.08 913.61 46.13 894.43 40.27C872.62 33.61 848.46 29.95 825.77 33.46C781.77 40.12 772.18 33.68 726.14 27.09C695.33 22.7 666.34 47.22 652.36 72.55C650.23 76.28 648.4 80.31 646.94 84.48Z" /><g style="opacity: 0.831"><path class="shp4" d="M668.24 119.91C674.61 111.57 684.42 105.86 689.18 96.27C694.96 84.78 693.72 71.16 698.84 59.45C706.45 42.1 720.14 27.31 737.41 19.19C745.69 15.31 754.84 12.89 763.69 13.55C777.38 14.58 789.17 22.77 798.39 32.51C812.15 47 821.82 67.57 838.36 79.14C847.43 85.51 858.12 78.77 867.78 76.58C878.69 74.16 890.04 74.75 900.43 77.67C919.61 83.16 936.15 96.85 944.42 115.01C953.28 134.33 951.96 161.12 935.42 177.74C927.74 185.43 917.34 190.55 911.7 199.77C904.6 211.34 903.73 227 901.75 239.81C899.55 254.01 893.48 267.85 884.33 279.34C884.25 279.49 884.11 279.63 884.03 279.71C868.15 299.4 841.14 306.06 818.3 296.18L769.77 275.17C720.58 253.87 683.17 219.54 665.24 169.69C661.36 158.93 659.97 135.94 664.87 125.4C665.83 123.42 667 121.59 668.24 119.91Z" /></g><g style="opacity: 0.22"><path fill-rule="evenodd" class="shp6" d="M913.27 96.23C913.27 99.31 910.77 101.82 907.69 101.82C904.61 101.82 902.11 99.31 902.11 96.23C902.11 93.16 904.61 90.65 907.69 90.65C910.77 90.65 913.27 93.16 913.27 96.23ZM911.1 96.23C911.1 94.35 909.57 92.82 907.69 92.82C905.8 92.82 904.27 94.35 904.27 96.23C904.27 98.12 905.8 99.65 907.69 99.65C909.57 99.65 911.1 98.12 911.1 96.23Z" /><path class="shp6" d="M907.73 125.33C907.7 125.26 907.66 125.2 907.63 125.14C907.59 125.08 907.54 125.03 907.49 124.98C907.44 124.93 907.39 124.88 907.33 124.84C907.27 124.8 907.21 124.77 907.14 124.74C907.08 124.72 907.01 124.69 906.94 124.68C906.8 124.65 906.65 124.65 906.51 124.68C906.45 124.69 906.38 124.72 906.31 124.74C906.25 124.77 906.18 124.8 906.13 124.84C906.07 124.88 906.01 124.93 905.96 124.98C905.91 125.03 905.87 125.08 905.83 125.14C905.79 125.2 905.75 125.26 905.73 125.33C905.7 125.39 905.68 125.46 905.66 125.53C905.65 125.6 905.64 125.67 905.64 125.74C905.64 125.81 905.65 125.88 905.66 125.95C905.68 126.02 905.7 126.09 905.73 126.16C905.75 126.22 905.79 126.28 905.83 126.34C905.87 126.4 905.91 126.46 905.96 126.51C905.99 126.53 906.01 126.56 906.04 126.58C906.07 126.6 906.1 126.62 906.13 126.64C906.18 126.68 906.25 126.71 906.31 126.74C906.38 126.77 906.45 126.79 906.51 126.8C906.58 126.82 906.66 126.83 906.73 126.83C906.8 126.83 906.87 126.82 906.94 126.8C907.01 126.79 907.08 126.77 907.14 126.74C907.21 126.71 907.27 126.68 907.33 126.64C907.36 126.62 907.39 126.6 907.41 126.58C907.44 126.56 907.47 126.53 907.49 126.51C907.54 126.46 907.59 126.4 907.63 126.34C907.66 126.28 907.7 126.22 907.73 126.16C907.75 126.09 907.77 126.02 907.79 125.95C907.8 125.88 907.81 125.81 907.81 125.74C907.81 125.67 907.8 125.6 907.79 125.53C907.77 125.46 907.75 125.39 907.73 125.33Z" /><path class="shp6" d="M890.68 82.46C890.65 82.4 890.62 82.33 890.58 82.27C890.54 82.21 890.49 82.16 890.44 82.11C890.39 82.06 890.34 82.01 890.28 81.97C890.22 81.94 890.16 81.9 890.09 81.87C890.03 81.85 889.96 81.83 889.89 81.81C889.75 81.78 889.61 81.78 889.47 81.81C889.4 81.83 889.33 81.85 889.26 81.87C889.2 81.9 889.13 81.94 889.08 81.97C889.02 82.01 888.96 82.06 888.91 82.11C888.86 82.16 888.82 82.21 888.78 82.27C888.74 82.33 888.71 82.4 888.68 82.46C888.65 82.53 888.63 82.59 888.62 82.66C888.6 82.73 888.6 82.8 888.6 82.88C888.6 82.95 888.6 83.02 888.62 83.09C888.63 83.16 888.65 83.22 888.68 83.29C888.71 83.35 888.74 83.42 888.78 83.48C888.82 83.53 888.86 83.59 888.91 83.64C888.96 83.69 889.02 83.74 889.08 83.78C889.13 83.81 889.2 83.85 889.26 83.88C889.33 83.9 889.4 83.92 889.47 83.94C889.54 83.95 889.61 83.96 889.68 83.96C889.75 83.96 889.82 83.95 889.89 83.94C889.96 83.92 890.03 83.9 890.09 83.88C890.16 83.85 890.22 83.81 890.28 83.78C890.34 83.74 890.39 83.69 890.44 83.64C890.49 83.59 890.54 83.53 890.58 83.48C890.62 83.42 890.65 83.35 890.68 83.29C890.71 83.22 890.73 83.16 890.74 83.09C890.75 83.02 890.76 82.95 890.76 82.88C890.76 82.8 890.75 82.73 890.74 82.66C890.73 82.59 890.71 82.53 890.68 82.46Z" /><path fill-rule="evenodd" class="shp6" d="M922 88.02L922 125.14C922 128.57 919.21 131.37 915.77 131.37L878.65 131.37C875.71 131.37 873.24 129.32 872.59 126.57C869.24 126.48 866.54 123.72 866.54 120.35L866.54 86.36C866.54 81.2 870.74 77 875.9 77L909.89 77C912.83 77 915.3 79.05 915.95 81.8C919.3 81.89 922 84.65 922 88.02ZM919.83 117.44L916.12 114.03L913.95 112.05L913.7 111.82C912.95 111.13 911.79 111.1 911.01 111.75L906.14 115.79C905.27 116.51 904.18 116.87 903.08 116.82L905.6 121.45C905.88 121.98 905.69 122.64 905.16 122.92C905 123.01 904.82 123.06 904.65 123.06C904.26 123.06 903.89 122.85 903.7 122.49L895.92 108.21L890.57 98.38C890.21 97.73 889.55 97.33 888.81 97.32C888.07 97.31 887.39 97.68 887.02 98.32L874.59 119.39L874.59 125.14C874.59 125.65 874.68 126.13 874.85 126.58C875.43 128.11 876.92 129.2 878.65 129.2L915.77 129.2C918.01 129.2 919.83 127.38 919.83 125.14L919.83 117.44ZM919.83 88.02C919.83 85.9 918.2 84.15 916.12 83.97L913.95 83.96L894.01 83.96C893.41 83.96 892.93 83.47 892.93 82.87C892.93 82.28 893.41 81.79 894.01 81.79L913.69 81.79C913.1 80.26 911.62 79.17 909.89 79.17L875.9 79.17C871.93 79.17 868.7 82.39 868.7 86.36L868.7 120.35C868.7 122.47 870.34 124.22 872.42 124.4L872.42 88.02C872.42 84.59 875.22 81.79 878.65 81.79L885.35 81.79C885.94 81.79 886.43 82.28 886.43 82.87C886.43 83.47 885.94 83.96 885.35 83.96L878.65 83.96C876.41 83.96 874.59 85.78 874.59 88.02L874.59 115.13L885.15 97.22C885.93 95.9 887.31 95.13 888.85 95.15C890.38 95.18 891.74 96 892.47 97.35L895.91 103.67L897.82 107.17L901.24 113.45C901.57 114.06 902.15 114.48 902.84 114.62C903.52 114.75 904.22 114.57 904.76 114.12L909.63 110.08C910.86 109.06 912.54 108.86 913.95 109.45L916.12 111.1L919.83 114.5L919.83 88.02Z" /></g><g style="opacity: 0.4"><g style="opacity: 0.812"><path class="shp7" d="M724.99 123.06L715.62 123.06C715.24 123.06 714.99 122.81 714.99 122.43C714.99 122.05 715.24 121.8 715.62 121.8L724.99 121.8C725.37 121.8 725.62 122.05 725.62 122.43C725.62 122.75 725.37 123.06 724.99 123.06Z" /><path class="shp7" d="M724.99 138.44L715.62 138.44C715.24 138.44 714.99 138.18 714.99 137.8C714.99 137.42 715.24 137.17 715.62 137.17L724.99 137.17C725.37 137.17 725.62 137.42 725.62 137.8C725.62 138.18 725.37 138.44 724.99 138.44Z" /><g style="opacity: 0.812"><g style="opacity: 0.812"><g style="opacity: 0.812"><path fill-rule="evenodd" class="shp7" d="M731.75 154L674.56 154C673.61 154 672.85 153.24 672.85 152.29L672.85 104.46C672.85 103.51 673.61 102.75 674.56 102.75L731.75 102.75C732.7 102.75 733.46 103.51 733.46 104.46L733.46 152.29C733.46 153.24 732.7 154 731.75 154ZM674.56 104.02C674.31 104.02 674.12 104.21 674.12 104.46L674.12 152.29C674.12 152.54 674.31 152.74 674.56 152.74L731.75 152.74C732.01 152.74 732.2 152.54 732.2 152.29L732.2 104.46C732.2 104.21 732.01 104.02 731.75 104.02L674.56 104.02Z" /><path fill-rule="evenodd" class="shp8" d="M731.75 154L674.56 154C673.61 154 672.85 153.24 672.85 152.29L672.85 104.46C672.85 103.51 673.61 102.75 674.56 102.75L731.75 102.75C732.7 102.75 733.46 103.51 733.46 104.46L733.46 152.29C733.46 153.24 732.7 154 731.75 154ZM674.56 104.02C674.31 104.02 674.12 104.21 674.12 104.46L674.12 152.29C674.12 152.54 674.31 152.74 674.56 152.74L731.75 152.74C732.01 152.74 732.2 152.54 732.2 152.29L732.2 104.46C732.2 104.21 732.01 104.02 731.75 104.02L674.56 104.02Z" /></g></g><path class="shp7" d="M724.99 115.53L680.38 115.53C680 115.53 679.75 115.28 679.75 114.9C679.75 114.52 680 114.27 680.38 114.27L724.99 114.27C725.37 114.27 725.62 114.52 725.62 114.9C725.62 115.28 725.37 115.53 724.99 115.53Z" /><path class="shp7" d="M724.99 130.53L680.38 130.53C680 130.53 679.75 130.28 679.75 129.9C679.75 129.52 680 129.26 680.38 129.26L724.99 129.26C725.37 129.26 725.62 129.52 725.62 129.9C725.62 130.21 725.37 130.53 724.99 130.53Z" /><path class="shp7" d="M704.42 123.06L680.38 123.06C680 123.06 679.75 122.81 679.75 122.43C679.75 122.05 680 121.8 680.38 121.8L704.42 121.8C704.8 121.8 705.06 122.05 705.06 122.43C705.06 122.75 704.8 123.06 704.42 123.06Z" /><path class="shp7" d="M704.42 138.44L680.38 138.44C680 138.44 679.75 138.18 679.75 137.8C679.75 137.42 680 137.17 680.38 137.17L704.42 137.17C704.8 137.17 705.06 137.42 705.06 137.8C705.06 138.18 704.8 138.44 704.42 138.44Z" /><path class="shp7" d="M696.58 145.59L680.38 145.59C680 145.59 679.75 145.33 679.75 144.95C679.75 144.57 680 144.32 680.38 144.32L696.58 144.32C696.96 144.32 697.21 144.57 697.21 144.95C697.21 145.33 696.96 145.59 696.58 145.59Z" /></g></g></g><path class="shp9" d="M791.99 74.66L752.01 74.66C745.38 74.66 740 69.27 740 62.65C740 56.02 745.38 50.64 752.01 50.64L791.99 50.64C798.62 50.64 804 56.02 804 62.65C804 69.27 798.62 74.66 791.99 74.66Z" /><path class="shp10" d="M771.98 69.34C781.32 69.34 788.88 61.77 788.88 52.44C788.88 43.11 781.32 35.55 771.98 35.55C762.65 35.55 755.09 43.11 755.09 52.44C755.09 61.77 762.65 69.34 771.98 69.34Z" /><path class="shp10" d="M791.99 71.11L752.01 71.11C745.38 71.11 740 65.73 740 59.1C740 52.47 745.38 47.09 752.01 47.09L791.99 47.09C798.62 47.09 804 52.47 804 59.1C804 65.73 798.62 71.11 791.99 71.11Z" /><path class="shp10" d="M771.98 65.79C781.32 65.79 788.88 58.23 788.88 48.89C788.88 39.56 781.32 32 771.98 32C762.65 32 755.09 39.56 755.09 48.89C755.09 58.23 762.65 65.79 771.98 65.79Z" /><g style="opacity: 0.212"><g style="opacity: 0.349"><path class="shp3" d="M791.99 71.11L752.01 71.11C745.38 71.11 740 65.73 740 59.1C740 52.47 745.38 47.09 752.01 47.09L791.99 47.09C798.62 47.09 804 52.47 804 59.1C804 65.73 798.62 71.11 791.99 71.11Z" /><path class="shp3" d="M771.98 65.79C781.32 65.79 788.88 58.23 788.88 48.89C788.88 39.56 781.32 32 771.98 32C762.65 32 755.09 39.56 755.09 48.89C755.09 58.23 762.65 65.79 771.98 65.79Z" /></g></g><path class="shp6" d="M768.03 51.41C767.85 51.41 767.63 51.35 767.47 51.2C767.16 50.89 767.16 50.39 767.47 50.11L772.02 45.66L776.5 50.14C776.81 50.45 776.81 50.95 776.5 51.23C776.18 51.54 775.69 51.54 775.41 51.23L772.05 47.87L768.62 51.26C768.44 51.35 768.25 51.41 768.03 51.41Z" /><path class="shp6" d="M771.98 57.61C771.55 57.61 771.21 57.26 771.21 56.83L771.21 46.72C771.21 46.28 771.55 45.94 771.98 45.94C772.42 45.94 772.76 46.28 772.76 46.72L772.76 56.83C772.76 57.26 772.42 57.61 771.98 57.61Z" /><path class="shp6" d="M779.36 62.4L764.55 62.4C763.49 62.4 762.62 61.53 762.62 60.47L762.62 55.09C762.62 54.65 762.96 54.31 763.4 54.31C763.83 54.31 764.17 54.65 764.17 55.09L764.17 60.47C764.17 60.69 764.33 60.84 764.55 60.84L779.36 60.84C779.64 60.84 779.86 60.62 779.86 60.34L779.86 55.09C779.86 54.65 780.2 54.31 780.63 54.31C781.07 54.31 781.41 54.65 781.41 55.09L781.41 60.38C781.38 61.5 780.48 62.4 779.36 62.4Z" /><path class="shp11" d="M887.14 64.03L855.66 64.03C854.63 64.03 853.77 63.2 853.77 62.14L853.77 30.69C853.77 29.66 854.6 28.8 855.66 28.8L887.11 28.8C888.14 28.8 889 29.63 889 30.69L889 62.14C889 63.17 888.17 64.03 887.14 64.03Z" /><path class="shp6" d="M885.34 62.23L853.89 62.23C852.86 62.23 852 61.4 852 60.34L852 28.89C852 27.86 852.83 27 853.89 27L885.34 27C886.37 27 887.23 27.83 887.23 28.89L887.23 60.34C887.23 61.4 886.37 62.23 885.34 62.23Z" /><path class="shp12" d="M884.18 30.01L854.99 30.01L854.99 59.21L884.18 59.21L884.18 30.01Z" /><path fill-rule="evenodd" class="shp13" d="M854.57 59.48L854.57 52.71L859.77 46.68C860.51 45.83 861.81 45.65 862.73 46.33L867.51 49.76C867.75 49.93 868.08 49.9 868.31 49.73L875.2 43.82C876.71 42.52 878.95 42.54 880.43 43.85L884.66 47.6L884.66 59.48L854.57 59.48ZM883.77 58.59L883.77 47.98L879.84 44.5C878.69 43.46 876.94 43.46 875.76 44.47L868.88 50.38C868.34 50.85 867.57 50.88 866.98 50.46L862.2 47.04C861.63 46.62 860.87 46.74 860.42 47.24L855.43 53.01L855.43 58.59L883.77 58.59Z" /><path fill-rule="evenodd" class="shp13" d="M871.39 42.04C869.35 42.04 867.69 40.39 867.69 38.35C867.69 36.31 869.35 34.65 871.39 34.65C873.43 34.65 875.08 36.31 875.08 38.35C875.08 40.39 873.43 42.04 871.39 42.04ZM871.39 35.54C869.82 35.54 868.58 36.81 868.58 38.35C868.58 39.88 869.85 41.16 871.39 41.16C872.92 41.16 874.19 39.88 874.19 38.35C874.19 36.81 872.95 35.54 871.39 35.54Z" /><path class="shp11" d="M843.41 120.5L821.27 128.78C820.06 129.22 818.7 128.63 818.26 127.42L809.98 105.28C809.54 104.07 810.13 102.71 811.35 102.27L833.48 93.99C834.69 93.55 836.05 94.14 836.5 95.35L844.77 117.49C845.21 118.7 844.62 120.06 843.41 120.5Z" /><path class="shp6" d="M841.57 119.66L819.43 127.93C818.22 128.37 816.86 127.78 816.42 126.57L808.15 104.44C807.71 103.22 808.29 101.86 809.51 101.42L831.64 93.15C832.86 92.7 834.22 93.29 834.66 94.51L842.93 116.64C843.37 117.86 842.75 119.22 841.57 119.66Z" /><path class="shp9" d="M832.4 95.42L810.4 103.67L818.64 125.67L840.64 117.43L832.4 95.42Z" /><path fill-rule="evenodd" class="shp13" d="M818.29 126.24L816.31 120.91L818.55 114.84C818.92 113.89 819.91 113.37 820.9 113.63L825.47 114.84C825.61 114.88 825.76 114.8 825.83 114.69L829.33 108.3C830.13 106.83 831.94 106.16 833.52 106.75L837.86 108.41L841.31 117.64L818.29 126.24ZM817.49 120.87L818.96 124.81L839.92 116.94L837.01 109.22L833.15 107.74C832.08 107.34 830.87 107.78 830.32 108.77L826.83 115.17C826.5 115.76 825.83 116.02 825.21 115.87L820.65 114.66C820.21 114.55 819.77 114.77 819.62 115.21L817.49 120.87Z" /><path fill-rule="evenodd" class="shp13" d="M825.1 108.48C823.81 108.48 822.6 107.71 822.12 106.42C821.49 104.77 822.34 102.96 823.96 102.34C825.58 101.71 827.41 102.56 828.04 104.18C828.66 105.83 827.82 107.63 826.2 108.26C825.83 108.41 825.47 108.48 825.1 108.48ZM825.1 103.26C824.84 103.26 824.62 103.3 824.36 103.41C823.3 103.81 822.74 104.99 823.15 106.05C823.55 107.12 824.73 107.67 825.8 107.27C826.86 106.86 827.41 105.69 827.01 104.62C826.72 103.77 825.94 103.26 825.1 103.26Z" /><g clip-path="url(#cp2)"><g ><g style="opacity: 0.412"><g style="opacity: 0.412"><g style="opacity: 0.412"><path class="shp1" d="M-58.53 84.76C-59.07 79.62 -59.21 74.49 -58.87 69.28C-57.38 45.08 -46.43 21.76 -29.46 4.86C-23.38 -1.16 -16.42 -6.7 -12.7 -14.41C-6.41 -27.46 -7.63 -41.99 0.35 -55.04C8.39 -68.02 20.49 -78.49 34.42 -84.24C75.99 -101.48 136.5 -80.25 133.79 -27.86C133.79 -27.66 133.79 -27.39 133.79 -27.05C133.66 -16.17 142.38 -7.51 152.99 -7.85C192.13 -9 227.28 20 236.41 58.53C242.29 83.34 236.07 111.19 219.03 129.85C206.32 143.78 188.68 152.02 170.97 157.97C135.41 169.87 97.56 173.99 60.17 172.17C25.23 170.41 -12.02 162.16 -35.89 136C-48.66 122.08 -56.5 103.76 -58.53 84.76Z" /></g></g></g><g style="opacity: 0.31"><path class="shp2" d="M241.14 17.23C241.21 18.92 242.63 20.2 244.32 20.13C246.01 20.07 247.22 18.58 247.16 16.89C247.09 15.2 245.67 13.92 243.98 13.98C242.36 14.12 241.07 15.54 241.14 17.23Z" /></g><path class="shp5" d="M-47.58 -19.82C-51.5 -8.46 -52.58 3.91 -50.01 15.61C-46.57 31.36 -34.8 45.21 -36.83 61.98C-38.05 72.05 -37.85 81.31 -38.05 91.18C-38.52 111.53 -24.33 128.36 -7.7 136.75C5.82 143.57 21.24 145.4 36.11 144.11C49.49 142.96 62.68 139.45 75.38 135.06C87.62 130.86 99.52 125.66 112.7 126.06C123.65 126.4 133.86 130.46 144.27 133.3C169.15 140.06 198.62 139.11 219.71 124.44C242.9 108.35 252.23 77.87 244.18 51.23C239.85 36.9 234.04 24.53 236.14 9.32C237.15 1.82 238.71 -5.82 237.29 -13.26C236 -20.09 232.22 -26.24 227.75 -31.58C215.79 -46.05 198.69 -55.24 180.98 -60.65C160.83 -66.8 138.52 -70.18 117.57 -66.93C76.94 -60.78 68.08 -66.73 25.56 -72.82C-2.9 -76.87 -29.67 -54.23 -42.58 -30.84C-44.54 -27.39 -46.23 -23.67 -47.58 -19.82Z" /><g style="opacity: 0.831"><path class="shp4" d="M-27.91 12.9C-22.03 5.2 -12.97 -0.08 -8.57 -8.93C-3.23 -19.55 -4.38 -32.12 0.35 -42.94C7.38 -58.96 20.02 -72.61 35.97 -80.12C43.61 -83.7 52.06 -85.93 60.24 -85.32C72.88 -84.37 83.77 -76.8 92.28 -67.81C104.99 -54.43 113.92 -35.43 129.19 -24.75C137.58 -18.87 147.45 -25.09 156.37 -27.12C166.44 -29.35 176.92 -28.81 186.52 -26.1C204.23 -21.03 219.51 -8.39 227.15 8.37C235.33 26.22 234.11 50.96 218.83 66.31C211.73 73.4 202.13 78.14 196.93 86.65C190.37 97.33 189.56 111.8 187.74 123.63C185.71 136.75 180.1 149.52 171.65 160.13C171.58 160.27 171.44 160.41 171.38 160.47C156.71 178.66 131.76 184.81 110.67 175.68L65.85 156.28C20.43 136.61 -14.12 104.91 -30.68 58.87C-34.26 48.93 -35.55 27.71 -31.02 17.97C-30.14 16.15 -29.06 14.46 -27.91 12.9Z" /></g><g style="opacity: 0.659"><g style="opacity: 0.659"><g style="opacity: 0.659"><path fill-rule="evenodd" class="shp8" d="M110.11 166.75L105.64 166.75C103.75 166.75 102.13 165.2 102.13 163.24L102.13 158.24C102.13 157.36 101.59 156.55 100.71 156.21C100.17 156.01 99.7 155.8 99.16 155.53C98.34 155.13 97.33 155.33 96.72 155.94L93.21 159.45C92.53 160.13 91.65 160.47 90.77 160.47C89.83 160.47 88.95 160.13 88.34 159.45L85.23 156.34C84.55 155.67 84.22 154.79 84.22 153.91C84.22 152.96 84.55 152.09 85.23 151.48L88.75 147.96C89.35 147.35 89.56 146.34 89.15 145.53C88.95 144.99 88.68 144.51 88.48 143.97C88.14 143.16 87.39 142.55 86.45 142.55L81.51 142.55C79.62 142.55 78 141 78 139.04L78 134.71C78 132.82 79.55 131.2 81.51 131.2L86.51 131.2C87.39 131.2 88.2 130.66 88.54 129.78C88.75 129.24 88.95 128.69 89.22 128.22C89.62 127.41 89.42 126.4 88.81 125.79L85.3 122.27C84.62 121.6 84.28 120.72 84.28 119.84C84.28 118.89 84.62 118.02 85.3 117.41L88.41 114.3C89.76 112.94 91.99 112.94 93.34 114.3L96.86 117.81C97.47 118.42 98.48 118.62 99.29 118.22C99.76 118.02 100.31 117.74 100.85 117.54C101.66 117.2 102.27 116.46 102.27 115.51L102.27 110.51C102.27 108.62 103.82 107 105.78 107L110.24 107C112.14 107 113.76 108.55 113.76 110.51L113.76 115.51C113.76 116.39 114.3 117.2 115.18 117.54C115.72 117.74 116.26 117.95 116.73 118.22C117.54 118.62 118.56 118.42 119.17 117.81L122.68 114.3C124.03 112.94 126.26 112.94 127.61 114.3L130.72 117.41C131.4 118.08 131.74 118.96 131.74 119.84C131.74 120.79 131.4 121.67 130.72 122.27L127.21 125.79C126.6 126.4 126.4 127.41 126.8 128.22C127.01 128.69 127.28 129.24 127.48 129.78C127.82 130.59 128.56 131.2 129.51 131.2L134.51 131.2C136.4 131.2 138.03 132.75 138.03 134.71L138.03 139.17C138.03 141.07 136.47 142.69 134.51 142.69L129.51 142.69C128.63 142.69 127.82 143.23 127.48 144.11C127.28 144.65 127.08 145.19 126.8 145.66C126.4 146.47 126.6 147.49 127.21 148.1L130.72 151.61C131.4 152.29 131.74 153.17 131.74 154.05C131.74 154.99 131.4 155.87 130.72 156.48L127.61 159.59C126.94 160.26 126.06 160.6 125.18 160.6C124.3 160.6 123.36 160.26 122.75 159.59L119.23 156.07C118.63 155.47 117.61 155.26 116.8 155.67C116.26 155.94 115.78 156.14 115.25 156.34C114.43 156.68 113.83 157.43 113.83 158.37L113.83 163.37C113.56 165.2 112 166.75 110.11 166.75ZM98.28 154.11C98.75 154.11 99.29 154.25 99.76 154.45C100.24 154.65 100.71 154.86 101.25 155.06C102.6 155.53 103.55 156.88 103.55 158.3L103.55 163.31C103.55 164.46 104.5 165.47 105.71 165.47L110.17 165.47C111.32 165.47 112.34 164.52 112.34 163.31L112.34 158.3C112.34 156.82 113.28 155.53 114.64 155.06C115.11 154.86 115.58 154.65 116.12 154.45C117.47 153.84 119.03 154.11 120.04 155.13L123.56 158.64C124.37 159.45 125.79 159.45 126.6 158.64L129.71 155.53C130.12 155.13 130.32 154.59 130.32 154.05C130.32 153.5 130.12 152.96 129.71 152.56L126.2 149.04C125.18 148.03 124.91 146.41 125.52 145.12C125.72 144.65 125.92 144.18 126.13 143.63C126.6 142.28 127.95 141.34 129.37 141.34L134.38 141.34C135.53 141.34 136.54 140.39 136.54 139.17L136.54 134.71C136.54 133.56 135.59 132.55 134.38 132.55L129.37 132.55C127.89 132.55 126.6 131.6 126.13 130.25C125.92 129.78 125.72 129.24 125.52 128.76C124.91 127.41 125.18 125.86 126.2 124.84L129.71 121.33C130.12 120.92 130.32 120.38 130.32 119.84C130.32 119.3 130.12 118.76 129.71 118.35L126.6 115.24C125.79 114.43 124.44 114.43 123.56 115.24L120.04 118.76C119.03 119.77 117.41 120.04 116.12 119.43C115.65 119.23 115.18 119.03 114.64 118.83C113.28 118.35 112.34 117 112.34 115.58L112.34 110.58C112.34 109.43 111.39 108.42 110.17 108.42L105.71 108.42C104.56 108.42 103.55 109.36 103.55 110.58L103.55 115.58C103.55 117.07 102.6 118.35 101.25 118.83C100.78 119.03 100.24 119.23 99.76 119.43C98.41 120.04 96.86 119.77 95.84 118.76L92.33 115.24C91.52 114.43 90.17 114.43 89.29 115.24L86.18 118.35C85.77 118.76 85.57 119.3 85.57 119.84C85.57 120.38 85.77 120.92 86.18 121.33L89.69 124.84C90.71 125.86 90.98 127.48 90.37 128.76C90.17 129.24 89.96 129.71 89.76 130.25C89.29 131.6 87.93 132.55 86.51 132.55L81.51 132.55C80.36 132.55 79.35 133.5 79.35 134.71L79.35 139.17C79.35 140.32 80.3 141.34 81.51 141.34L86.51 141.34C88 141.34 89.29 142.28 89.76 143.63C89.96 144.11 90.17 144.65 90.37 145.12C90.98 146.47 90.71 148.03 89.69 149.04L86.18 152.56C85.77 152.96 85.57 153.5 85.57 154.05C85.57 154.59 85.77 155.13 86.18 155.53L89.29 158.64C90.1 159.45 91.52 159.45 92.33 158.64L95.84 155.13C96.52 154.45 97.4 154.11 98.28 154.11ZM107.88 152.63C99.22 152.63 92.19 145.6 92.19 136.94C92.19 128.29 99.22 121.26 107.88 121.26C116.53 121.26 123.56 128.29 123.56 136.94C123.56 145.53 116.53 152.63 107.88 152.63ZM107.88 122.54C99.97 122.54 93.55 128.97 93.55 136.88C93.55 144.78 99.97 151.21 107.88 151.21C115.78 151.21 122.21 144.78 122.21 136.88C122.21 128.97 115.78 122.54 107.88 122.54Z" /></g></g></g><g style="opacity: 0.502"><path class="shp7" d="M171.21 55.27L162.43 55.27C162.02 55.27 161.75 55 161.75 54.59C161.75 54.18 162.02 53.91 162.43 53.91L171.21 53.91C171.62 53.91 171.89 54.18 171.89 54.59C171.89 55 171.62 55.27 171.21 55.27Z" /><path class="shp7" d="M171.21 69.8L162.43 69.8C162.02 69.8 161.75 69.53 161.75 69.12C161.75 68.72 162.02 68.45 162.43 68.45L171.21 68.45C171.62 68.45 171.89 68.72 171.89 69.12C171.89 69.53 171.62 69.8 171.21 69.8Z" /><g style="opacity: 0.812"><g style="opacity: 0.812"><g style="opacity: 0.812"><path fill-rule="evenodd" class="shp7" d="M177.43 84.47L123.83 84.47C122.81 84.47 122 83.66 122 82.64L122 37.83C122 36.81 122.81 36 123.83 36L177.43 36C178.45 36 179.26 36.81 179.26 37.83L179.26 82.64C179.32 83.66 178.45 84.47 177.43 84.47ZM123.89 37.35C123.62 37.35 123.42 37.55 123.42 37.83L123.42 82.64C123.42 82.91 123.62 83.12 123.89 83.12L177.5 83.12C177.77 83.12 177.97 82.91 177.97 82.64L177.97 37.83C177.97 37.55 177.77 37.35 177.5 37.35L123.89 37.35Z" /><path fill-rule="evenodd" class="shp8" d="M177.43 84.47L123.83 84.47C122.81 84.47 122 83.66 122 82.64L122 37.83C122 36.81 122.81 36 123.83 36L177.43 36C178.45 36 179.26 36.81 179.26 37.83L179.26 82.64C179.32 83.66 178.45 84.47 177.43 84.47ZM123.89 37.35C123.62 37.35 123.42 37.55 123.42 37.83L123.42 82.64C123.42 82.91 123.62 83.12 123.89 83.12L177.5 83.12C177.77 83.12 177.97 82.91 177.97 82.64L177.97 37.83C177.97 37.55 177.77 37.35 177.5 37.35L123.89 37.35Z" /></g></g><path class="shp7" d="M171.21 48.24L129.23 48.24C128.83 48.24 128.56 47.97 128.56 47.56C128.56 47.15 128.83 46.88 129.23 46.88L171.21 46.88C171.62 46.88 171.89 47.15 171.89 47.56C171.89 47.97 171.62 48.24 171.21 48.24Z" /><path class="shp7" d="M171.21 62.3L129.23 62.3C128.83 62.3 128.56 62.03 128.56 61.62C128.56 61.22 128.83 60.94 129.23 60.94L171.21 60.94C171.62 60.94 171.89 61.22 171.89 61.62C171.89 62.03 171.62 62.3 171.21 62.3Z" /><path class="shp7" d="M151.88 55.27L129.23 55.27C128.83 55.27 128.56 55 128.56 54.59C128.56 54.18 128.83 53.91 129.23 53.91L151.88 53.91C152.28 53.91 152.56 54.18 152.56 54.59C152.56 55 152.28 55.27 151.88 55.27Z" /><path class="shp7" d="M151.88 69.8L129.23 69.8C128.83 69.8 128.56 69.53 128.56 69.12C128.56 68.72 128.83 68.45 129.23 68.45L151.88 68.45C152.28 68.45 152.56 68.72 152.56 69.12C152.56 69.53 152.28 69.8 151.88 69.8Z" /><path class="shp7" d="M144.51 76.56L129.23 76.56C128.83 76.56 128.56 76.29 128.56 75.88C128.56 75.48 128.83 75.21 129.23 75.21L144.51 75.21C144.92 75.21 145.19 75.48 145.19 75.88C145.19 76.22 144.85 76.56 144.51 76.56Z" /></g></g><g style="opacity: 0.812"><path class="shp7" d="M75.7 18.7L65.7 18.7C65.29 18.7 65.02 18.43 65.02 18.02C65.02 17.62 65.29 17.35 65.7 17.35L75.7 17.35C76.11 17.35 76.38 17.62 76.38 18.02C76.38 18.36 76.11 18.7 75.7 18.7Z" /><path class="shp7" d="M75.7 35.13L65.7 35.13C65.29 35.13 65.02 34.86 65.02 34.45C65.02 34.04 65.29 33.77 65.7 33.77L75.7 33.77C76.11 33.77 76.38 34.04 76.38 34.45C76.38 34.86 76.11 35.13 75.7 35.13Z" /><g style="opacity: 0.812"><g style="opacity: 0.812"><g style="opacity: 0.812"><path fill-rule="evenodd" class="shp7" d="M82.94 51.76L21.83 51.76C20.81 51.76 20 50.94 20 49.93L20 -1.17C20 -2.19 20.81 -3 21.83 -3L82.94 -3C83.95 -3 84.76 -2.19 84.76 -1.17L84.76 49.93C84.76 50.94 83.95 51.76 82.94 51.76ZM21.83 -1.65C21.55 -1.65 21.35 -1.45 21.35 -1.17L21.35 49.93C21.35 50.2 21.55 50.4 21.83 50.4L82.94 50.4C83.21 50.4 83.41 50.2 83.41 49.93L83.41 -1.17C83.41 -1.45 83.21 -1.65 82.94 -1.65L21.83 -1.65Z" /><path fill-rule="evenodd" class="shp8" d="M82.94 51.76L21.83 51.76C20.81 51.76 20 50.94 20 49.93L20 -1.17C20 -2.19 20.81 -3 21.83 -3L82.94 -3C83.95 -3 84.76 -2.19 84.76 -1.17L84.76 49.93C84.76 50.94 83.95 51.76 82.94 51.76ZM21.83 -1.65C21.55 -1.65 21.35 -1.45 21.35 -1.17L21.35 49.93C21.35 50.2 21.55 50.4 21.83 50.4L82.94 50.4C83.21 50.4 83.41 50.2 83.41 49.93L83.41 -1.17C83.41 -1.45 83.21 -1.65 82.94 -1.65L21.83 -1.65Z" /></g></g><path class="shp7" d="M75.7 10.66L28.04 10.66C27.64 10.66 27.37 10.38 27.37 9.98C27.37 9.57 27.64 9.3 28.04 9.3L75.7 9.3C76.11 9.3 76.38 9.57 76.38 9.98C76.38 10.38 76.11 10.66 75.7 10.66Z" /><path class="shp7" d="M75.7 26.68L28.04 26.68C27.64 26.68 27.37 26.41 27.37 26C27.37 25.59 27.64 25.32 28.04 25.32L75.7 25.32C76.11 25.32 76.38 25.59 76.38 26C76.38 26.34 76.11 26.68 75.7 26.68Z" /><path class="shp7" d="M53.73 18.7L28.04 18.7C27.64 18.7 27.37 18.43 27.37 18.02C27.37 17.62 27.64 17.35 28.04 17.35L53.73 17.35C54.14 17.35 54.41 17.62 54.41 18.02C54.41 18.36 54.14 18.7 53.73 18.7Z" /><path class="shp7" d="M53.73 35.13L28.04 35.13C27.64 35.13 27.37 34.86 27.37 34.45C27.37 34.04 27.64 33.77 28.04 33.77L53.73 33.77C54.14 33.77 54.41 34.04 54.41 34.45C54.41 34.86 54.14 35.13 53.73 35.13Z" /><path class="shp7" d="M45.35 42.77L28.04 42.77C27.64 42.77 27.37 42.49 27.37 42.09C27.37 41.68 27.64 41.41 28.04 41.41L45.35 41.41C45.76 41.41 46.03 41.68 46.03 42.09C46.03 42.49 45.76 42.77 45.35 42.77Z" /></g></g><path fill-rule="evenodd" class="shp8" d="M130.11 24L126.89 24C125.53 24 124.46 22.89 124.46 21.57L124.46 17.95C124.46 17.29 124.05 16.67 123.39 16.42C123.02 16.3 122.65 16.13 122.28 15.97C121.66 15.68 120.92 15.8 120.43 16.3L117.87 18.85C117.42 19.3 116.8 19.55 116.14 19.55C115.48 19.55 114.87 19.3 114.41 18.85L112.15 16.59C111.2 15.64 111.2 14.07 112.15 13.13L114.7 10.57C115.2 10.08 115.32 9.34 115.03 8.72C114.87 8.35 114.7 7.98 114.58 7.61C114.33 6.99 113.71 6.54 113.06 6.54L109.43 6.54C108.07 6.54 107 5.42 107 4.11L107 0.89C107 -0.47 108.11 -1.54 109.43 -1.54L113.06 -1.54C113.71 -1.54 114.33 -1.95 114.58 -2.61C114.7 -2.98 114.87 -3.35 115.03 -3.72C115.32 -4.34 115.2 -5.08 114.7 -5.57L112.15 -8.13C111.2 -9.07 111.2 -10.64 112.15 -11.59L114.41 -13.85C115.36 -14.8 116.93 -14.8 117.87 -13.85L120.43 -11.3C120.92 -10.8 121.66 -10.68 122.28 -10.97C122.65 -11.13 123.02 -11.3 123.39 -11.42C124.01 -11.67 124.46 -12.29 124.46 -12.95L124.46 -16.57C124.46 -17.93 125.58 -19 126.89 -19L130.11 -19C131.47 -19 132.54 -17.89 132.54 -16.57L132.54 -12.95C132.54 -12.29 132.95 -11.67 133.61 -11.42C133.98 -11.3 134.35 -11.13 134.72 -10.97C135.34 -10.68 136.08 -10.8 136.57 -11.3L139.13 -13.85C140.07 -14.8 141.64 -14.8 142.59 -13.85L144.85 -11.59C145.8 -10.64 145.8 -9.07 144.85 -8.13L142.3 -5.57C141.8 -5.08 141.68 -4.34 141.97 -3.72C142.13 -3.35 142.3 -2.98 142.42 -2.61C142.67 -1.99 143.29 -1.54 143.94 -1.54L147.57 -1.54C148.93 -1.54 150 -0.42 150 0.89L150 4.11C150 5.47 148.89 6.54 147.57 6.54L143.94 6.54C143.29 6.54 142.67 6.95 142.42 7.61C142.3 7.98 142.13 8.35 141.97 8.72C141.68 9.34 141.8 10.08 142.3 10.57L144.85 13.13C145.8 14.07 145.8 15.64 144.85 16.59L142.59 18.85C142.13 19.3 141.51 19.55 140.86 19.55C140.2 19.55 139.58 19.3 139.13 18.85L136.57 16.3C136.08 15.8 135.34 15.68 134.72 15.97C134.35 16.13 133.98 16.3 133.61 16.42C132.99 16.67 132.54 17.29 132.54 17.95L132.54 21.57C132.58 22.89 131.47 24 130.11 24ZM121.58 14.98C121.95 14.98 122.28 15.06 122.61 15.23C122.94 15.39 123.31 15.52 123.68 15.68C124.63 16.05 125.29 16.96 125.29 17.99L125.29 21.61C125.29 22.52 126.03 23.22 126.89 23.22L130.11 23.22C131.01 23.22 131.71 22.48 131.71 21.61L131.71 17.99C131.71 16.96 132.37 16.05 133.32 15.68C133.69 15.56 134.02 15.39 134.39 15.23C135.34 14.77 136.45 14.98 137.15 15.72L139.7 18.27C140.32 18.89 141.35 18.89 142.01 18.27L144.28 16.01C144.89 15.39 144.89 14.36 144.28 13.7L141.72 11.15C140.98 10.41 140.81 9.3 141.23 8.39C141.39 8.06 141.56 7.69 141.68 7.32C142.05 6.37 142.96 5.71 143.99 5.71L147.61 5.71C148.52 5.71 149.22 4.97 149.22 4.11L149.22 0.89C149.22 -0.01 148.48 -0.71 147.61 -0.71L143.99 -0.71C142.96 -0.71 142.05 -1.37 141.68 -2.32C141.56 -2.69 141.39 -3.02 141.23 -3.39C140.77 -4.34 140.98 -5.45 141.72 -6.15L144.28 -8.7C144.89 -9.32 144.89 -10.35 144.28 -11.01L142.01 -13.27C141.39 -13.89 140.36 -13.89 139.7 -13.27L137.15 -10.72C136.41 -9.98 135.3 -9.82 134.39 -10.23C134.06 -10.39 133.69 -10.56 133.32 -10.68C132.37 -11.05 131.71 -11.96 131.71 -12.99L131.71 -16.61C131.71 -17.52 130.97 -18.22 130.11 -18.22L126.89 -18.22C125.99 -18.22 125.29 -17.48 125.29 -16.61L125.29 -12.99C125.29 -11.96 124.63 -11.05 123.68 -10.68C123.31 -10.56 122.98 -10.39 122.61 -10.23C121.66 -9.77 120.55 -9.98 119.85 -10.72L117.3 -13.27C116.68 -13.89 115.65 -13.89 114.99 -13.27L112.72 -11.01C112.11 -10.39 112.11 -9.36 112.72 -8.7L115.28 -6.15C116.02 -5.41 116.19 -4.3 115.77 -3.39C115.61 -3.06 115.48 -2.69 115.32 -2.32C114.95 -1.37 114.04 -0.71 113.01 -0.71L109.39 -0.71C108.48 -0.71 107.78 0.03 107.78 0.89L107.78 4.11C107.78 5.01 108.52 5.71 109.39 5.71L113.01 5.71C114.04 5.71 114.95 6.37 115.32 7.32C115.44 7.69 115.61 8.02 115.77 8.39C116.23 9.34 116.02 10.45 115.28 11.15L112.72 13.7C112.11 14.32 112.11 15.35 112.72 16.01L114.99 18.27C115.61 18.89 116.64 18.89 117.3 18.27L119.85 15.72C120.3 15.23 120.92 14.98 121.58 14.98ZM128.5 13.74C122.28 13.74 117.17 8.68 117.17 2.46C117.17 -3.76 122.24 -8.87 128.5 -8.87C134.72 -8.87 139.83 -3.8 139.83 2.46C139.83 8.68 134.76 13.74 128.5 13.74ZM128.5 -8.04C122.73 -8.04 118 -3.35 118 2.46C118 8.23 122.69 12.92 128.5 12.92C134.27 12.92 139 8.23 139 2.46C139 -3.35 134.31 -8.04 128.5 -8.04Z" /></g></g></g></g></svg>
|
@@ -707,10 +707,10 @@
|
|
707 |
this.o.displayInput
|
708 |
&& this.i.css({
|
709 |
'width' : ((this.w / 2 + 4) >> 0) + 'px',
|
710 |
-
'height' : ((this.w /
|
711 |
'position' : 'absolute',
|
712 |
'vertical-align' : 'middle',
|
713 |
-
'margin-top' : ((this.w /
|
714 |
'margin-left' : '-' + ((this.w * 3 / 4 + 2) >> 0) + 'px',
|
715 |
'border' : 0,
|
716 |
'background' : 'none',
|
707 |
this.o.displayInput
|
708 |
&& this.i.css({
|
709 |
'width' : ((this.w / 2 + 4) >> 0) + 'px',
|
710 |
+
'height' : ((this.w / 2) >> 0) + 'px',
|
711 |
'position' : 'absolute',
|
712 |
'vertical-align' : 'middle',
|
713 |
+
'margin-top' : ((this.w / 4) >> 0) + 'px',
|
714 |
'margin-left' : '-' + ((this.w * 3 / 4 + 2) >> 0) + 'px',
|
715 |
'border' : 0,
|
716 |
'background' : 'none',
|
@@ -1,2 +1,2 @@
|
|
1 |
/*!jQuery Knob*/
|
2 |
-
(function(a){if(typeof exports==="object"){module.exports=a(require("jquery"))}else{if(typeof define==="function"&&define.amd){define(["jquery"],a)}else{a(jQuery)}}}(function(d){var b={},a=Math.max,c=Math.min;b.c={};b.c.d=d(document);b.c.t=function(f){return f.originalEvent.touches.length-1};b.o=function(){var e=this;this.o=null;this.$=null;this.i=null;this.g=null;this.v=null;this.cv=null;this.x=0;this.y=0;this.w=0;this.h=0;this.$c=null;this.c=null;this.t=0;this.isInit=false;this.fgColor=null;this.pColor=null;this.dH=null;this.cH=null;this.eH=null;this.rH=null;this.scale=1;this.relative=false;this.relativeWidth=false;this.relativeHeight=false;this.$div=null;this.run=function(){var f=function(i,h){var g;for(g in h){e.o[g]=h[g]}e._carve().init();e._configure()._draw()};if(this.$.data("kontroled")){return}this.$.data("kontroled",true);this.extend();this.o=d.extend({min:this.$.data("min")!==undefined?this.$.data("min"):0,max:this.$.data("max")!==undefined?this.$.data("max"):100,stopper:true,readOnly:this.$.data("readonly")||(this.$.attr("readonly")==="readonly"),cursor:this.$.data("cursor")===true&&30||this.$.data("cursor")||0,thickness:this.$.data("thickness")&&Math.max(Math.min(this.$.data("thickness"),1),0.01)||0.35,lineCap:this.$.data("linecap")||"butt",width:this.$.data("width")||200,height:this.$.data("height")||200,displayInput:this.$.data("displayinput")==null||this.$.data("displayinput"),displayPrevious:this.$.data("displayprevious"),fgColor:this.$.data("fgcolor")||"#87CEEB",inputColor:this.$.data("inputcolor"),font:this.$.data("font")||"Arial",fontWeight:this.$.data("font-weight")||"bold",inline:false,step:this.$.data("step")||1,rotation:this.$.data("rotation"),draw:null,change:null,cancel:null,release:null,format:function(g){return g},parse:function(g){return parseFloat(g)}},this.o);this.o.flip=this.o.rotation==="anticlockwise"||this.o.rotation==="acw";if(!this.o.inputColor){this.o.inputColor=this.o.fgColor}if(this.$.is("fieldset")){this.v={};this.i=this.$.find("input");this.i.each(function(g){var h=d(this);e.i[g]=h;e.v[g]=e.o.parse(h.val());h.bind("change blur",function(){var i={};i[g]=h.val();e.val(e._validate(i))})});this.$.find("legend").remove()}else{this.i=this.$;this.v=this.o.parse(this.$.val());this.v===""&&(this.v=this.o.min);this.$.bind("change blur",function(){e.val(e._validate(e.o.parse(e.$.val())))})}!this.o.displayInput&&this.$.hide();this.$c=d(document.createElement("canvas")).attr({width:this.o.width,height:this.o.height});this.$div=d('<div style="'+(this.o.inline?"display:inline;":"")+"width:"+this.o.width+"px;height:"+this.o.height+'px;"></div>');this.$.wrap(this.$div).before(this.$c);this.$div=this.$.parent();if(typeof G_vmlCanvasManager!=="undefined"){G_vmlCanvasManager.initElement(this.$c[0])}this.c=this.$c[0].getContext?this.$c[0].getContext("2d"):null;if(!this.c){throw {name:"CanvasNotSupportedException",message:"Canvas not supported. Please use excanvas on IE8.0.",toString:function(){return this.name+": "+this.message}}}this.scale=(window.devicePixelRatio||1)/(this.c.webkitBackingStorePixelRatio||this.c.mozBackingStorePixelRatio||this.c.msBackingStorePixelRatio||this.c.oBackingStorePixelRatio||this.c.backingStorePixelRatio||1);this.relativeWidth=this.o.width%1!==0&&this.o.width.indexOf("%");this.relativeHeight=this.o.height%1!==0&&this.o.height.indexOf("%");this.relative=this.relativeWidth||this.relativeHeight;this._carve();if(this.v instanceof Object){this.cv={};this.copy(this.v,this.cv)}else{this.cv=this.v}this.$.bind("configure",f).parent().bind("configure",f);this._listen()._configure()._xy().init();this.isInit=true;this.$.val(this.o.format(this.v));this._draw();return this};this._carve=function(){if(this.relative){var f=this.relativeWidth?this.$div.parent().width()*parseInt(this.o.width)/100:this.$div.parent().width(),g=this.relativeHeight?this.$div.parent().height()*parseInt(this.o.height)/100:this.$div.parent().height();this.w=this.h=Math.min(f,g)}else{this.w=this.o.width;this.h=this.o.height}this.$div.css({width:this.w+"px",height:this.h+"px"});this.$c.attr({width:this.w,height:this.h});if(this.scale!==1){this.$c[0].width=this.$c[0].width*this.scale;this.$c[0].height=this.$c[0].height*this.scale;this.$c.width(this.w);this.$c.height(this.h)}return this};this._draw=function(){var f=true;e.g=e.c;e.clear();e.dH&&(f=e.dH());f!==false&&e.draw()};this._touch=function(f){var g=function(i){var h=e.xy2val(i.originalEvent.touches[e.t].pageX,i.originalEvent.touches[e.t].pageY);if(h==e.cv){return}if(e.cH&&e.cH(h)===false){return}e.change(e._validate(h));e._draw()};this.t=b.c.t(f);g(f);b.c.d.bind("touchmove.k",g).bind("touchend.k",function(){b.c.d.unbind("touchmove.k touchend.k");e.val(e.cv)});return this};this._mouse=function(g){var f=function(i){var h=e.xy2val(i.pageX,i.pageY);if(h==e.cv){return}if(e.cH&&(e.cH(h)===false)){return}e.change(e._validate(h));e._draw()};f(g);b.c.d.bind("mousemove.k",f).bind("keyup.k",function(h){if(h.keyCode===27){b.c.d.unbind("mouseup.k mousemove.k keyup.k");if(e.eH&&e.eH()===false){return}e.cancel()}}).bind("mouseup.k",function(h){b.c.d.unbind("mousemove.k mouseup.k keyup.k");e.val(e.cv)});return this};this._xy=function(){var f=this.$c.offset();this.x=f.left;this.y=f.top;return this};this._listen=function(){if(!this.o.readOnly){this.$c.bind("mousedown",function(f){f.preventDefault();e._xy()._mouse(f)}).bind("touchstart",function(f){f.preventDefault();e._xy()._touch(f)});this.listen()}else{this.$.attr("readonly","readonly")}if(this.relative){d(window).resize(function(){e._carve().init();e._draw()})}return this};this._configure=function(){if(this.o.draw){this.dH=this.o.draw}if(this.o.change){this.cH=this.o.change}if(this.o.cancel){this.eH=this.o.cancel}if(this.o.release){this.rH=this.o.release}if(this.o.displayPrevious){this.pColor=this.h2rgba(this.o.fgColor,"0.4");this.fgColor=this.h2rgba(this.o.fgColor,"0.6")}else{this.fgColor=this.o.fgColor}return this};this._clear=function(){this.$c[0].width=this.$c[0].width};this._validate=function(f){var g=(~~(((f<0)?-0.5:0.5)+(f/this.o.step)))*this.o.step;return Math.round(g*100)/100};this.listen=function(){};this.extend=function(){};this.init=function(){};this.change=function(f){};this.val=function(f){};this.xy2val=function(f,g){};this.draw=function(){};this.clear=function(){this._clear()};this.h2rgba=function(i,f){var g;i=i.substring(1,7);g=[parseInt(i.substring(0,2),16),parseInt(i.substring(2,4),16),parseInt(i.substring(4,6),16)];return"rgba("+g[0]+","+g[1]+","+g[2]+","+f+")"};this.copy=function(j,h){for(var g in j){h[g]=j[g]}}};b.Dial=function(){b.o.call(this);this.startAngle=null;this.xy=null;this.radius=null;this.lineWidth=null;this.cursorExt=null;this.w2=null;this.PI2=2*Math.PI;this.extend=function(){this.o=d.extend({bgColor:this.$.data("bgcolor")||"#EEEEEE",angleOffset:this.$.data("angleoffset")||0,angleArc:this.$.data("anglearc")||360,inline:true},this.o)};this.val=function(e,f){if(null!=e){e=this.o.parse(e);if(f!==false&&e!=this.v&&this.rH&&this.rH(e)===false){return}this.cv=this.o.stopper?a(c(e,this.o.max),this.o.min):e;this.v=this.cv;this.$.val(this.o.format(this.v));this._draw()}else{return this.v}};this.xy2val=function(e,h){var f,g;f=Math.atan2(e-(this.x+this.w2),-(h-this.y-this.w2))-this.angleOffset;if(this.o.flip){f=this.angleArc-f-this.PI2}if(this.angleArc!=this.PI2&&(f<0)&&(f>-0.5)){f=0}else{if(f<0){f+=this.PI2}}g=(f*(this.o.max-this.o.min)/this.angleArc)+this.o.min;this.o.stopper&&(g=a(c(g,this.o.max),this.o.min));return g};this.listen=function(){var h=this,g,f,l=function(q){q.preventDefault();var p=q.originalEvent,n=p.detail||p.wheelDeltaX,m=p.detail||p.wheelDeltaY,o=h._validate(h.o.parse(h.$.val()))+(n>0||m>0?h.o.step:n<0||m<0?-h.o.step:0);o=a(c(o,h.o.max),h.o.min);h.val(o,false);if(h.rH){clearTimeout(g);g=setTimeout(function(){h.rH(o);g=null},100);if(!f){f=setTimeout(function(){if(g){h.rH(o)}f=null},200)}}},j,k,e=1,i={37:-h.o.step,38:h.o.step,39:h.o.step,40:-h.o.step};this.$.bind("keydown",function(o){var n=o.keyCode;if(n>=96&&n<=105){n=o.keyCode=n-48}j=parseInt(String.fromCharCode(n));if(isNaN(j)){(n!==13)&&n!==8&&n!==9&&n!==189&&(n!==190||h.$.val().match(/\./))&&o.preventDefault();if(d.inArray(n,[37,38,39,40])>-1){o.preventDefault();var m=h.o.parse(h.$.val())+i[n]*e;h.o.stopper&&(m=a(c(m,h.o.max),h.o.min));h.change(h._validate(m));h._draw();k=window.setTimeout(function(){e*=2},30)}}}).bind("keyup",function(m){if(isNaN(j)){if(k){window.clearTimeout(k);k=null;e=1;h.val(h.$.val())}}else{(h.$.val()>h.o.max&&h.$.val(h.o.max))||(h.$.val()<h.o.min&&h.$.val(h.o.min))}});this.$c.bind("mousewheel DOMMouseScroll",l);this.$.bind("mousewheel DOMMouseScroll",l)};this.init=function(){if(this.v<this.o.min||this.v>this.o.max){this.v=this.o.min}this.$.val(this.v);this.w2=this.w/2;this.cursorExt=this.o.cursor/100;this.xy=this.w2*this.scale;this.lineWidth=this.xy*this.o.thickness;this.lineCap=this.o.lineCap;this.radius=this.xy-this.lineWidth/2;this.o.angleOffset&&(this.o.angleOffset=isNaN(this.o.angleOffset)?0:this.o.angleOffset);this.o.angleArc&&(this.o.angleArc=isNaN(this.o.angleArc)?this.PI2:this.o.angleArc);this.angleOffset=this.o.angleOffset*Math.PI/180;this.angleArc=this.o.angleArc*Math.PI/180;this.startAngle=1.5*Math.PI+this.angleOffset;this.endAngle=1.5*Math.PI+this.angleOffset+this.angleArc;var e=a(String(Math.abs(this.o.max)).length,String(Math.abs(this.o.min)).length,2)+2;this.o.displayInput&&this.i.css({width:((this.w/2+4)>>0)+"px",height:((this.w/3)>>0)+"px",position:"absolute","vertical-align":"middle","margin-top":((this.w/3)>>0)+"px","margin-left":"-"+((this.w*3/4+2)>>0)+"px",border:0,background:"none",font:this.o.fontWeight+" "+((this.w/e)>>0)+"px "+this.o.font,"text-align":"center",color:this.o.inputColor||this.o.fgColor,padding:"0px","-webkit-appearance":"none"})||this.i.css({width:"0px",visibility:"hidden"})};this.change=function(e){this.cv=e;this.$.val(this.o.format(e))};this.angle=function(e){return(e-this.o.min)*this.angleArc/(this.o.max-this.o.min)};this.arc=function(f){var e,g;f=this.angle(f);if(this.o.flip){e=this.endAngle+0.00001;g=e-f-0.00001}else{e=this.startAngle-0.00001;g=e+f+0.00001}this.o.cursor&&(e=g-this.cursorExt)&&(g=g+this.cursorExt);return{s:e,e:g,d:this.o.flip&&!this.o.cursor}};this.draw=function(){var h=this.g,e=this.arc(this.cv),f,g=1;h.lineWidth=this.lineWidth;h.lineCap=this.lineCap;if(this.o.bgColor!=="none"){h.beginPath();h.strokeStyle=this.o.bgColor;h.arc(this.xy,this.xy,this.radius,this.endAngle-0.00001,this.startAngle+0.00001,true);h.stroke()}if(this.o.displayPrevious){f=this.arc(this.v);h.beginPath();h.strokeStyle=this.pColor;h.arc(this.xy,this.xy,this.radius,f.s,f.e,f.d);h.stroke();g=this.cv==this.v}h.beginPath();h.strokeStyle=g?this.o.fgColor:this.fgColor;h.arc(this.xy,this.xy,this.radius,e.s,e.e,e.d);h.stroke()};this.cancel=function(){this.val(this.v)}};d.fn.dial=d.fn.knob=function(e){return this.each(function(){var f=new b.Dial();f.o=e;f.$=d(this);f.run()}).parent()}}));
|
1 |
/*!jQuery Knob*/
|
2 |
+
(function(a){if(typeof exports==="object"){module.exports=a(require("jquery"))}else{if(typeof define==="function"&&define.amd){define(["jquery"],a)}else{a(jQuery)}}}(function(d){var b={},a=Math.max,c=Math.min;b.c={};b.c.d=d(document);b.c.t=function(f){return f.originalEvent.touches.length-1};b.o=function(){var e=this;this.o=null;this.$=null;this.i=null;this.g=null;this.v=null;this.cv=null;this.x=0;this.y=0;this.w=0;this.h=0;this.$c=null;this.c=null;this.t=0;this.isInit=false;this.fgColor=null;this.pColor=null;this.dH=null;this.cH=null;this.eH=null;this.rH=null;this.scale=1;this.relative=false;this.relativeWidth=false;this.relativeHeight=false;this.$div=null;this.run=function(){var f=function(i,h){var g;for(g in h){e.o[g]=h[g]}e._carve().init();e._configure()._draw()};if(this.$.data("kontroled")){return}this.$.data("kontroled",true);this.extend();this.o=d.extend({min:this.$.data("min")!==undefined?this.$.data("min"):0,max:this.$.data("max")!==undefined?this.$.data("max"):100,stopper:true,readOnly:this.$.data("readonly")||(this.$.attr("readonly")==="readonly"),cursor:this.$.data("cursor")===true&&30||this.$.data("cursor")||0,thickness:this.$.data("thickness")&&Math.max(Math.min(this.$.data("thickness"),1),0.01)||0.35,lineCap:this.$.data("linecap")||"butt",width:this.$.data("width")||200,height:this.$.data("height")||200,displayInput:this.$.data("displayinput")==null||this.$.data("displayinput"),displayPrevious:this.$.data("displayprevious"),fgColor:this.$.data("fgcolor")||"#87CEEB",inputColor:this.$.data("inputcolor"),font:this.$.data("font")||"Arial",fontWeight:this.$.data("font-weight")||"bold",inline:false,step:this.$.data("step")||1,rotation:this.$.data("rotation"),draw:null,change:null,cancel:null,release:null,format:function(g){return g},parse:function(g){return parseFloat(g)}},this.o);this.o.flip=this.o.rotation==="anticlockwise"||this.o.rotation==="acw";if(!this.o.inputColor){this.o.inputColor=this.o.fgColor}if(this.$.is("fieldset")){this.v={};this.i=this.$.find("input");this.i.each(function(g){var h=d(this);e.i[g]=h;e.v[g]=e.o.parse(h.val());h.bind("change blur",function(){var i={};i[g]=h.val();e.val(e._validate(i))})});this.$.find("legend").remove()}else{this.i=this.$;this.v=this.o.parse(this.$.val());this.v===""&&(this.v=this.o.min);this.$.bind("change blur",function(){e.val(e._validate(e.o.parse(e.$.val())))})}!this.o.displayInput&&this.$.hide();this.$c=d(document.createElement("canvas")).attr({width:this.o.width,height:this.o.height});this.$div=d('<div style="'+(this.o.inline?"display:inline;":"")+"width:"+this.o.width+"px;height:"+this.o.height+'px;"></div>');this.$.wrap(this.$div).before(this.$c);this.$div=this.$.parent();if(typeof G_vmlCanvasManager!=="undefined"){G_vmlCanvasManager.initElement(this.$c[0])}this.c=this.$c[0].getContext?this.$c[0].getContext("2d"):null;if(!this.c){throw {name:"CanvasNotSupportedException",message:"Canvas not supported. Please use excanvas on IE8.0.",toString:function(){return this.name+": "+this.message}}}this.scale=(window.devicePixelRatio||1)/(this.c.webkitBackingStorePixelRatio||this.c.mozBackingStorePixelRatio||this.c.msBackingStorePixelRatio||this.c.oBackingStorePixelRatio||this.c.backingStorePixelRatio||1);this.relativeWidth=this.o.width%1!==0&&this.o.width.indexOf("%");this.relativeHeight=this.o.height%1!==0&&this.o.height.indexOf("%");this.relative=this.relativeWidth||this.relativeHeight;this._carve();if(this.v instanceof Object){this.cv={};this.copy(this.v,this.cv)}else{this.cv=this.v}this.$.bind("configure",f).parent().bind("configure",f);this._listen()._configure()._xy().init();this.isInit=true;this.$.val(this.o.format(this.v));this._draw();return this};this._carve=function(){if(this.relative){var f=this.relativeWidth?this.$div.parent().width()*parseInt(this.o.width)/100:this.$div.parent().width(),g=this.relativeHeight?this.$div.parent().height()*parseInt(this.o.height)/100:this.$div.parent().height();this.w=this.h=Math.min(f,g)}else{this.w=this.o.width;this.h=this.o.height}this.$div.css({width:this.w+"px",height:this.h+"px"});this.$c.attr({width:this.w,height:this.h});if(this.scale!==1){this.$c[0].width=this.$c[0].width*this.scale;this.$c[0].height=this.$c[0].height*this.scale;this.$c.width(this.w);this.$c.height(this.h)}return this};this._draw=function(){var f=true;e.g=e.c;e.clear();e.dH&&(f=e.dH());f!==false&&e.draw()};this._touch=function(f){var g=function(i){var h=e.xy2val(i.originalEvent.touches[e.t].pageX,i.originalEvent.touches[e.t].pageY);if(h==e.cv){return}if(e.cH&&e.cH(h)===false){return}e.change(e._validate(h));e._draw()};this.t=b.c.t(f);g(f);b.c.d.bind("touchmove.k",g).bind("touchend.k",function(){b.c.d.unbind("touchmove.k touchend.k");e.val(e.cv)});return this};this._mouse=function(g){var f=function(i){var h=e.xy2val(i.pageX,i.pageY);if(h==e.cv){return}if(e.cH&&(e.cH(h)===false)){return}e.change(e._validate(h));e._draw()};f(g);b.c.d.bind("mousemove.k",f).bind("keyup.k",function(h){if(h.keyCode===27){b.c.d.unbind("mouseup.k mousemove.k keyup.k");if(e.eH&&e.eH()===false){return}e.cancel()}}).bind("mouseup.k",function(h){b.c.d.unbind("mousemove.k mouseup.k keyup.k");e.val(e.cv)});return this};this._xy=function(){var f=this.$c.offset();this.x=f.left;this.y=f.top;return this};this._listen=function(){if(!this.o.readOnly){this.$c.bind("mousedown",function(f){f.preventDefault();e._xy()._mouse(f)}).bind("touchstart",function(f){f.preventDefault();e._xy()._touch(f)});this.listen()}else{this.$.attr("readonly","readonly")}if(this.relative){d(window).resize(function(){e._carve().init();e._draw()})}return this};this._configure=function(){if(this.o.draw){this.dH=this.o.draw}if(this.o.change){this.cH=this.o.change}if(this.o.cancel){this.eH=this.o.cancel}if(this.o.release){this.rH=this.o.release}if(this.o.displayPrevious){this.pColor=this.h2rgba(this.o.fgColor,"0.4");this.fgColor=this.h2rgba(this.o.fgColor,"0.6")}else{this.fgColor=this.o.fgColor}return this};this._clear=function(){this.$c[0].width=this.$c[0].width};this._validate=function(f){var g=(~~(((f<0)?-0.5:0.5)+(f/this.o.step)))*this.o.step;return Math.round(g*100)/100};this.listen=function(){};this.extend=function(){};this.init=function(){};this.change=function(f){};this.val=function(f){};this.xy2val=function(f,g){};this.draw=function(){};this.clear=function(){this._clear()};this.h2rgba=function(i,f){var g;i=i.substring(1,7);g=[parseInt(i.substring(0,2),16),parseInt(i.substring(2,4),16),parseInt(i.substring(4,6),16)];return"rgba("+g[0]+","+g[1]+","+g[2]+","+f+")"};this.copy=function(j,h){for(var g in j){h[g]=j[g]}}};b.Dial=function(){b.o.call(this);this.startAngle=null;this.xy=null;this.radius=null;this.lineWidth=null;this.cursorExt=null;this.w2=null;this.PI2=2*Math.PI;this.extend=function(){this.o=d.extend({bgColor:this.$.data("bgcolor")||"#EEEEEE",angleOffset:this.$.data("angleoffset")||0,angleArc:this.$.data("anglearc")||360,inline:true},this.o)};this.val=function(e,f){if(null!=e){e=this.o.parse(e);if(f!==false&&e!=this.v&&this.rH&&this.rH(e)===false){return}this.cv=this.o.stopper?a(c(e,this.o.max),this.o.min):e;this.v=this.cv;this.$.val(this.o.format(this.v));this._draw()}else{return this.v}};this.xy2val=function(e,h){var f,g;f=Math.atan2(e-(this.x+this.w2),-(h-this.y-this.w2))-this.angleOffset;if(this.o.flip){f=this.angleArc-f-this.PI2}if(this.angleArc!=this.PI2&&(f<0)&&(f>-0.5)){f=0}else{if(f<0){f+=this.PI2}}g=(f*(this.o.max-this.o.min)/this.angleArc)+this.o.min;this.o.stopper&&(g=a(c(g,this.o.max),this.o.min));return g};this.listen=function(){var h=this,g,f,l=function(q){q.preventDefault();var p=q.originalEvent,n=p.detail||p.wheelDeltaX,m=p.detail||p.wheelDeltaY,o=h._validate(h.o.parse(h.$.val()))+(n>0||m>0?h.o.step:n<0||m<0?-h.o.step:0);o=a(c(o,h.o.max),h.o.min);h.val(o,false);if(h.rH){clearTimeout(g);g=setTimeout(function(){h.rH(o);g=null},100);if(!f){f=setTimeout(function(){if(g){h.rH(o)}f=null},200)}}},j,k,e=1,i={37:-h.o.step,38:h.o.step,39:h.o.step,40:-h.o.step};this.$.bind("keydown",function(o){var n=o.keyCode;if(n>=96&&n<=105){n=o.keyCode=n-48}j=parseInt(String.fromCharCode(n));if(isNaN(j)){(n!==13)&&n!==8&&n!==9&&n!==189&&(n!==190||h.$.val().match(/\./))&&o.preventDefault();if(d.inArray(n,[37,38,39,40])>-1){o.preventDefault();var m=h.o.parse(h.$.val())+i[n]*e;h.o.stopper&&(m=a(c(m,h.o.max),h.o.min));h.change(h._validate(m));h._draw();k=window.setTimeout(function(){e*=2},30)}}}).bind("keyup",function(m){if(isNaN(j)){if(k){window.clearTimeout(k);k=null;e=1;h.val(h.$.val())}}else{(h.$.val()>h.o.max&&h.$.val(h.o.max))||(h.$.val()<h.o.min&&h.$.val(h.o.min))}});this.$c.bind("mousewheel DOMMouseScroll",l);this.$.bind("mousewheel DOMMouseScroll",l)};this.init=function(){if(this.v<this.o.min||this.v>this.o.max){this.v=this.o.min}this.$.val(this.v);this.w2=this.w/2;this.cursorExt=this.o.cursor/100;this.xy=this.w2*this.scale;this.lineWidth=this.xy*this.o.thickness;this.lineCap=this.o.lineCap;this.radius=this.xy-this.lineWidth/2;this.o.angleOffset&&(this.o.angleOffset=isNaN(this.o.angleOffset)?0:this.o.angleOffset);this.o.angleArc&&(this.o.angleArc=isNaN(this.o.angleArc)?this.PI2:this.o.angleArc);this.angleOffset=this.o.angleOffset*Math.PI/180;this.angleArc=this.o.angleArc*Math.PI/180;this.startAngle=1.5*Math.PI+this.angleOffset;this.endAngle=1.5*Math.PI+this.angleOffset+this.angleArc;var e=a(String(Math.abs(this.o.max)).length,String(Math.abs(this.o.min)).length,2)+2;this.o.displayInput&&this.i.css({width:((this.w/2+4)>>0)+"px",height:((this.w/2)>>0)+"px",position:"absolute","vertical-align":"middle","margin-top":((this.w/4)>>0)+"px","margin-left":"-"+((this.w*3/4+2)>>0)+"px",border:0,background:"none",font:this.o.fontWeight+" "+((this.w/e)>>0)+"px "+this.o.font,"text-align":"center",color:this.o.inputColor||this.o.fgColor,padding:"0px","-webkit-appearance":"none"})||this.i.css({width:"0px",visibility:"hidden"})};this.change=function(e){this.cv=e;this.$.val(this.o.format(e))};this.angle=function(e){return(e-this.o.min)*this.angleArc/(this.o.max-this.o.min)};this.arc=function(f){var e,g;f=this.angle(f);if(this.o.flip){e=this.endAngle+0.00001;g=e-f-0.00001}else{e=this.startAngle-0.00001;g=e+f+0.00001}this.o.cursor&&(e=g-this.cursorExt)&&(g=g+this.cursorExt);return{s:e,e:g,d:this.o.flip&&!this.o.cursor}};this.draw=function(){var h=this.g,e=this.arc(this.cv),f,g=1;h.lineWidth=this.lineWidth;h.lineCap=this.lineCap;if(this.o.bgColor!=="none"){h.beginPath();h.strokeStyle=this.o.bgColor;h.arc(this.xy,this.xy,this.radius,this.endAngle-0.00001,this.startAngle+0.00001,true);h.stroke()}if(this.o.displayPrevious){f=this.arc(this.v);h.beginPath();h.strokeStyle=this.pColor;h.arc(this.xy,this.xy,this.radius,f.s,f.e,f.d);h.stroke();g=this.cv==this.v}h.beginPath();h.strokeStyle=g?this.o.fgColor:this.fgColor;h.arc(this.xy,this.xy,this.radius,e.s,e.e,e.d);h.stroke()};this.cancel=function(){this.val(this.v)}};d.fn.dial=d.fn.knob=function(e){return this.each(function(){var f=new b.Dial();f.o=e;f.$=d(this);f.run()}).parent()}}));
|
@@ -826,7 +826,7 @@ console.log("Screen Init Done", initMedia, initCustom);
|
|
826 |
{
|
827 |
|
828 |
var control = element.getAttribute('data-control');
|
829 |
-
|
830 |
|
831 |
|
832 |
var checker = document.querySelector('[' + control + ']');
|
@@ -834,7 +834,7 @@ console.log("Screen Init Done", initMedia, initCustom);
|
|
834 |
// basic check if value > 0
|
835 |
if (checker == null)
|
836 |
{
|
837 |
-
console.
|
838 |
return;
|
839 |
}
|
840 |
|
@@ -842,8 +842,9 @@ console.log("Screen Init Done", initMedia, initCustom);
|
|
842 |
if ( hasCompareControl)
|
843 |
{
|
844 |
var compareControl = document.querySelector('[' + element.getAttribute('data-control-check') + ']');
|
845 |
-
|
846 |
-
|
|
|
847 |
}
|
848 |
if (isNaN(value))
|
849 |
{
|
826 |
{
|
827 |
|
828 |
var control = element.getAttribute('data-control');
|
829 |
+
var hasCompareControl = element.hasAttribute('data-control-check');
|
830 |
|
831 |
|
832 |
var checker = document.querySelector('[' + control + ']');
|
834 |
// basic check if value > 0
|
835 |
if (checker == null)
|
836 |
{
|
837 |
+
console.log('Control named ' + control + ' on ' + element.innerHTML + ' didn\'t find reference value element ');
|
838 |
return;
|
839 |
}
|
840 |
|
842 |
if ( hasCompareControl)
|
843 |
{
|
844 |
var compareControl = document.querySelector('[' + element.getAttribute('data-control-check') + ']');
|
845 |
+
if (compareControl !== null) {
|
846 |
+
var compareValue = parseInt(compareControl.innerHTML);
|
847 |
+
}
|
848 |
}
|
849 |
if (isNaN(value))
|
850 |
{
|
@@ -1,6 +1,6 @@
|
|
1 |
|
2 |
$color-darkest: #0f6a7d;
|
3 |
$color-dark: #1cbecb;
|
4 |
-
$color-light: #
|
5 |
|
6 |
$color-brokenwhite: #F5F5F5;
|
1 |
|
2 |
$color-darkest: #0f6a7d;
|
3 |
$color-dark: #1cbecb;
|
4 |
+
$color-light: #d1f5fd;
|
5 |
|
6 |
$color-brokenwhite: #F5F5F5;
|
@@ -36,7 +36,7 @@
|
|
36 |
}
|
37 |
}
|
38 |
input { display: none;
|
39 |
-
&:checked ~ .the_switch { background: #
|
40 |
&:checked ~ .the_switch:after {
|
41 |
left: 20px;
|
42 |
background: #1caecb; // color of circle when active
|
@@ -61,7 +61,7 @@
|
|
61 |
&:after {
|
62 |
position: absolute;
|
63 |
left: -2px;
|
64 |
-
top: -
|
65 |
display: block;
|
66 |
width: 20px;
|
67 |
height: 20px;
|
36 |
}
|
37 |
}
|
38 |
input { display: none;
|
39 |
+
&:checked ~ .the_switch { background: #7cdce4; } // background of bar when active
|
40 |
&:checked ~ .the_switch:after {
|
41 |
left: 20px;
|
42 |
background: #1caecb; // color of circle when active
|
61 |
&:after {
|
62 |
position: absolute;
|
63 |
left: -2px;
|
64 |
+
top: -5px;
|
65 |
display: block;
|
66 |
width: 20px;
|
67 |
height: 20px;
|
@@ -371,7 +371,7 @@
|
|
371 |
{
|
372 |
background: url('../img/bulk/dashboard-background.svg') no-repeat;
|
373 |
background-size: cover;
|
374 |
-
background-position:
|
375 |
background-color: #116C7D;
|
376 |
text-align: center;
|
377 |
height: 150px;
|
@@ -474,6 +474,7 @@
|
|
474 |
flex-direction: row;
|
475 |
width: 90%;
|
476 |
justify-content: space-around;
|
|
|
477 |
|
478 |
>div
|
479 |
{
|
@@ -488,6 +489,11 @@
|
|
488 |
{
|
489 |
background: linear-gradient(90deg, rgba(204,204,204,100) 0%, rgba(204,204,204,100) 49.9%, rgba(255,255,255,1) 51%, rgba(255,255,255,1) 100%);
|
490 |
}
|
|
|
|
|
|
|
|
|
|
|
491 |
|
492 |
.line {
|
493 |
background: #ccc;
|
@@ -497,7 +503,7 @@
|
|
497 |
box-sizing: border-box;
|
498 |
display: inline-block;
|
499 |
position: absolute;
|
500 |
-
top:
|
501 |
z-index: 1;
|
502 |
transition: color 1s ease-in;
|
503 |
|
371 |
{
|
372 |
background: url('../img/bulk/dashboard-background.svg') no-repeat;
|
373 |
background-size: cover;
|
374 |
+
background-position: center;
|
375 |
background-color: #116C7D;
|
376 |
text-align: center;
|
377 |
height: 150px;
|
474 |
flex-direction: row;
|
475 |
width: 90%;
|
476 |
justify-content: space-around;
|
477 |
+
margin: 0 auto;
|
478 |
|
479 |
>div
|
480 |
{
|
489 |
{
|
490 |
background: linear-gradient(90deg, rgba(204,204,204,100) 0%, rgba(204,204,204,100) 49.9%, rgba(255,255,255,1) 51%, rgba(255,255,255,1) 100%);
|
491 |
}
|
492 |
+
>div.select .line
|
493 |
+
{
|
494 |
+
width: 50%;
|
495 |
+
left: 50%;
|
496 |
+
}
|
497 |
|
498 |
.line {
|
499 |
background: #ccc;
|
503 |
box-sizing: border-box;
|
504 |
display: inline-block;
|
505 |
position: absolute;
|
506 |
+
top: 22px;
|
507 |
z-index: 1;
|
508 |
transition: color 1s ease-in;
|
509 |
|
@@ -14,6 +14,7 @@
|
|
14 |
box-shadow: 0 1px 1px rgba(0,0,0,0.04);
|
15 |
border: 1px solid #c3c4c7;
|
16 |
margin: 15px 0;
|
|
|
17 |
border-left-color: #72aee6;
|
18 |
position: relative;
|
19 |
|
@@ -21,10 +22,6 @@
|
|
21 |
{
|
22 |
// max-height: 50px;
|
23 |
}
|
24 |
-
.notice-dismiss
|
25 |
-
{
|
26 |
-
margin-top: 10px;
|
27 |
-
}
|
28 |
span
|
29 |
{
|
30 |
vertical-align: middle;
|
14 |
box-shadow: 0 1px 1px rgba(0,0,0,0.04);
|
15 |
border: 1px solid #c3c4c7;
|
16 |
margin: 15px 0;
|
17 |
+
border-left-width: 4px;
|
18 |
border-left-color: #72aee6;
|
19 |
position: relative;
|
20 |
|
22 |
{
|
23 |
// max-height: 50px;
|
24 |
}
|
|
|
|
|
|
|
|
|
25 |
span
|
26 |
{
|
27 |
vertical-align: middle;
|
@@ -32,24 +32,24 @@
|
|
32 |
white-space: nowrap;
|
33 |
display: inline-block;
|
34 |
}
|
35 |
-
|
36 |
float: right;
|
37 |
-
|
38 |
-
|
|
|
|
|
|
|
|
|
39 |
.point
|
40 |
{
|
41 |
-
width:
|
42 |
-
height:
|
43 |
|
44 |
display: inline-block;
|
45 |
-
|
46 |
-
margin-left: 1px;
|
47 |
-
background: #ccc;
|
48 |
-
vertical-align: middle;
|
49 |
|
50 |
&.checked {
|
51 |
-
background:
|
52 |
-
box-shadow: 1px 1px 1px green;
|
53 |
}
|
54 |
}
|
55 |
}
|
32 |
white-space: nowrap;
|
33 |
display: inline-block;
|
34 |
}
|
35 |
+
.optimize-bar {
|
36 |
float: right;
|
37 |
+
margin-left: 8px;
|
38 |
+
border-radius: 5px;
|
39 |
+
overflow: hidden;
|
40 |
+
height: 10px;
|
41 |
+
margin-top: 4px;
|
42 |
+
|
43 |
.point
|
44 |
{
|
45 |
+
width: 10px;
|
46 |
+
height: 10px;
|
47 |
|
48 |
display: inline-block;
|
49 |
+
background: #d6d8d9;
|
|
|
|
|
|
|
50 |
|
51 |
&.checked {
|
52 |
+
background: #1abdca;
|
|
|
53 |
}
|
54 |
}
|
55 |
}
|
@@ -36,49 +36,54 @@
|
|
36 |
}
|
37 |
.top-menu
|
38 |
{
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
|
|
|
|
|
|
|
|
|
|
45 |
|
46 |
.links
|
47 |
{
|
48 |
-
a { font-size: 18px; margin-right: 8px; }
|
49 |
-
flex: 12 4 auto;
|
50 |
-
// flex-grow: 14;
|
51 |
|
|
|
|
|
|
|
52 |
}
|
53 |
.quota-remaining
|
54 |
{
|
55 |
//float: right;
|
56 |
-
|
57 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
58 |
}
|
59 |
.pie-wrapper
|
60 |
{
|
61 |
-
position: relative;
|
62 |
flex: 4 2 auto;
|
63 |
min-width: 100px;
|
64 |
display: inline-block;
|
65 |
// flex-grow: 2;
|
66 |
-
@include breakpoint(0, 1100px)
|
67 |
-
{
|
68 |
-
display: none;
|
69 |
-
}
|
70 |
}
|
71 |
div.sp-bulk-summary {
|
72 |
-
position: absolute;
|
73 |
-
top: -55px;
|
74 |
-
right: -25px;
|
75 |
|
76 |
z-index: 10;
|
77 |
|
78 |
.opt-circle-average {
|
79 |
width: 100px;
|
80 |
height: 100px;
|
81 |
-
float: right;
|
82 |
// margin-right: 35px;
|
83 |
.trail {
|
84 |
stroke: #ddd;
|
@@ -99,20 +104,13 @@
|
|
99 |
|
100 |
}
|
101 |
span {
|
102 |
-
display: none;
|
103 |
margin: 0;
|
104 |
-
font-size:
|
105 |
-
position: absolute;
|
106 |
-
// width: 100%;
|
107 |
-
|
108 |
-
bottom: 45px;
|
109 |
-
//left: -15px;
|
110 |
padding: 4px 8px;
|
111 |
-
color: #fff;
|
112 |
-
background: rgba($color-darkest, 0.5);
|
113 |
font-weight: 700;
|
114 |
border-radius: 3px;
|
115 |
white-space: nowrap;
|
|
|
116 |
}
|
117 |
@include breakpoint(0,1500px)
|
118 |
{
|
@@ -121,10 +119,6 @@
|
|
121 |
width: 100px;
|
122 |
height: 100px;
|
123 |
}
|
124 |
-
span
|
125 |
-
{
|
126 |
-
display: none;
|
127 |
-
}
|
128 |
}
|
129 |
} // optimized thing
|
130 |
} // top menu
|
@@ -222,6 +216,10 @@
|
|
222 |
margin: 0;
|
223 |
color: #999;
|
224 |
background-color: #ddd;
|
|
|
|
|
|
|
|
|
225 |
/* border-radius: 5px 5px 0 0; */
|
226 |
a {
|
227 |
display: block;
|
@@ -243,19 +241,36 @@
|
|
243 |
|
244 |
article.sp-tabs section:nth-of-type(2) h2 {
|
245 |
left: 192px;
|
|
|
|
|
|
|
|
|
246 |
}
|
247 |
article.sp-tabs section:nth-of-type(3) h2 {
|
248 |
left: 374px;
|
|
|
|
|
|
|
|
|
249 |
}
|
250 |
article.sp-tabs section:nth-of-type(4) h2 {
|
251 |
left: 556px;
|
|
|
|
|
|
|
|
|
252 |
}
|
253 |
article.sp-tabs section:nth-of-type(5) h2 {
|
254 |
left: 738px;
|
|
|
|
|
|
|
|
|
255 |
}
|
256 |
article.sp-tabs section:nth-of-type(6) h2 {
|
257 |
left: 920px;
|
258 |
}
|
|
|
259 |
//debug-tab is now after the other tabs, because of form issues.
|
260 |
article.sp-tabs section#tab-debug {
|
261 |
|
@@ -291,7 +306,7 @@
|
|
291 |
.table.notices {
|
292 |
> div > span
|
293 |
{
|
294 |
-
width:
|
295 |
text-align: center;
|
296 |
}
|
297 |
}
|
36 |
}
|
37 |
.top-menu
|
38 |
{
|
39 |
+
font-size: 18px;
|
40 |
+
display: flex;
|
41 |
+
width: 100%;
|
42 |
+
min-height: 50px;
|
43 |
+
align-items: center;
|
44 |
+
margin: 15px 0;
|
45 |
+
position: relative;
|
46 |
+
@include breakpoint(0, 1200px)
|
47 |
+
{
|
48 |
+
margin-bottom: 50px;
|
49 |
+
}
|
50 |
|
51 |
.links
|
52 |
{
|
|
|
|
|
|
|
53 |
|
54 |
+
a { font-size: 18px; margin-right: 8px; white-space: nowrap; line-height: 26px;}
|
55 |
+
padding-right: 195px;
|
56 |
+
flex: 12 4 auto;
|
57 |
}
|
58 |
.quota-remaining
|
59 |
{
|
60 |
//float: right;
|
61 |
+
font-size: 13px;
|
62 |
+
}
|
63 |
+
.spio-status-box {
|
64 |
+
text-align: center;
|
65 |
+
position: absolute;
|
66 |
+
top: -49px;
|
67 |
+
right: 0;
|
68 |
+
padding: 5px 10px;
|
69 |
+
background: white;
|
70 |
+
box-shadow: 0 3px 3px rgba(0,0,0,0.1);
|
71 |
+
z-index: 1;
|
72 |
}
|
73 |
.pie-wrapper
|
74 |
{
|
|
|
75 |
flex: 4 2 auto;
|
76 |
min-width: 100px;
|
77 |
display: inline-block;
|
78 |
// flex-grow: 2;
|
|
|
|
|
|
|
|
|
79 |
}
|
80 |
div.sp-bulk-summary {
|
|
|
|
|
|
|
81 |
|
82 |
z-index: 10;
|
83 |
|
84 |
.opt-circle-average {
|
85 |
width: 100px;
|
86 |
height: 100px;
|
|
|
87 |
// margin-right: 35px;
|
88 |
.trail {
|
89 |
stroke: #ddd;
|
104 |
|
105 |
}
|
106 |
span {
|
|
|
107 |
margin: 0;
|
108 |
+
font-size: 12px;
|
|
|
|
|
|
|
|
|
|
|
109 |
padding: 4px 8px;
|
|
|
|
|
110 |
font-weight: 700;
|
111 |
border-radius: 3px;
|
112 |
white-space: nowrap;
|
113 |
+
color: #0f6a7d;
|
114 |
}
|
115 |
@include breakpoint(0,1500px)
|
116 |
{
|
119 |
width: 100px;
|
120 |
height: 100px;
|
121 |
}
|
|
|
|
|
|
|
|
|
122 |
}
|
123 |
} // optimized thing
|
124 |
} // top menu
|
216 |
margin: 0;
|
217 |
color: #999;
|
218 |
background-color: #ddd;
|
219 |
+
@include breakpoint(0, 991px)
|
220 |
+
{
|
221 |
+
width: 140px;
|
222 |
+
}
|
223 |
/* border-radius: 5px 5px 0 0; */
|
224 |
a {
|
225 |
display: block;
|
241 |
|
242 |
article.sp-tabs section:nth-of-type(2) h2 {
|
243 |
left: 192px;
|
244 |
+
@include breakpoint(0, 991px)
|
245 |
+
{
|
246 |
+
left: 152px;
|
247 |
+
}
|
248 |
}
|
249 |
article.sp-tabs section:nth-of-type(3) h2 {
|
250 |
left: 374px;
|
251 |
+
@include breakpoint(0, 991px)
|
252 |
+
{
|
253 |
+
left: 294px;
|
254 |
+
}
|
255 |
}
|
256 |
article.sp-tabs section:nth-of-type(4) h2 {
|
257 |
left: 556px;
|
258 |
+
@include breakpoint(0, 991px)
|
259 |
+
{
|
260 |
+
left: 436px;
|
261 |
+
}
|
262 |
}
|
263 |
article.sp-tabs section:nth-of-type(5) h2 {
|
264 |
left: 738px;
|
265 |
+
@include breakpoint(0, 991px)
|
266 |
+
{
|
267 |
+
left: 578px;
|
268 |
+
}
|
269 |
}
|
270 |
article.sp-tabs section:nth-of-type(6) h2 {
|
271 |
left: 920px;
|
272 |
}
|
273 |
+
|
274 |
//debug-tab is now after the other tabs, because of form issues.
|
275 |
article.sp-tabs section#tab-debug {
|
276 |
|
306 |
.table.notices {
|
307 |
> div > span
|
308 |
{
|
309 |
+
width: 18%;
|
310 |
text-align: center;
|
311 |
}
|
312 |
}
|
@@ -3,7 +3,7 @@
|
|
3 |
* Plugin Name: ShortPixel Image Optimizer
|
4 |
* Plugin URI: https://shortpixel.com/
|
5 |
* Description: ShortPixel optimizes images automatically, while guarding the quality of your images. Check your <a href="/wp-admin/options-general.php?page=wp-shortpixel-settings" target="_blank">Settings > ShortPixel</a> page on how to start optimizing your image library and make your website load faster.
|
6 |
-
* Version: 5.1.
|
7 |
* Author: ShortPixel
|
8 |
* Author URI: https://shortpixel.com
|
9 |
* GitHub Plugin URI: https://github.com/short-pixel-optimizer/shortpixel-image-optimiser
|
@@ -31,7 +31,7 @@ if (! defined('SHORTPIXEL_RESET_ON_ACTIVATE'))
|
|
31 |
define('SHORTPIXEL_PLUGIN_FILE', __FILE__);
|
32 |
define('SHORTPIXEL_PLUGIN_DIR', __DIR__);
|
33 |
|
34 |
-
define('SHORTPIXEL_IMAGE_OPTIMISER_VERSION', "5.1.
|
35 |
|
36 |
define('SHORTPIXEL_BACKUP', 'ShortpixelBackups');
|
37 |
define('SHORTPIXEL_MAX_FAIL_RETRIES', 3);
|
@@ -71,6 +71,7 @@ define('SHORTPIXEL_BACKUP_URL',
|
|
71 |
|
72 |
|
73 |
//define('SHORTPIXEL_SILENT_MODE', true); // no global notifications. Can lead to data damage. After setting, reactivate plugin.
|
|
|
74 |
|
75 |
// Starting logging services, early as possible.
|
76 |
if (! defined('SHORTPIXEL_DEBUG'))
|
3 |
* Plugin Name: ShortPixel Image Optimizer
|
4 |
* Plugin URI: https://shortpixel.com/
|
5 |
* Description: ShortPixel optimizes images automatically, while guarding the quality of your images. Check your <a href="/wp-admin/options-general.php?page=wp-shortpixel-settings" target="_blank">Settings > ShortPixel</a> page on how to start optimizing your image library and make your website load faster.
|
6 |
+
* Version: 5.1.2
|
7 |
* Author: ShortPixel
|
8 |
* Author URI: https://shortpixel.com
|
9 |
* GitHub Plugin URI: https://github.com/short-pixel-optimizer/shortpixel-image-optimiser
|
31 |
define('SHORTPIXEL_PLUGIN_FILE', __FILE__);
|
32 |
define('SHORTPIXEL_PLUGIN_DIR', __DIR__);
|
33 |
|
34 |
+
define('SHORTPIXEL_IMAGE_OPTIMISER_VERSION', "5.1.2");
|
35 |
|
36 |
define('SHORTPIXEL_BACKUP', 'ShortpixelBackups');
|
37 |
define('SHORTPIXEL_MAX_FAIL_RETRIES', 3);
|
71 |
|
72 |
|
73 |
//define('SHORTPIXEL_SILENT_MODE', true); // no global notifications. Can lead to data damage. After setting, reactivate plugin.
|
74 |
+
//define('SHORTPIXEL_AFFILIATE_ID');
|
75 |
|
76 |
// Starting logging services, early as possible.
|
77 |
if (! defined('SHORTPIXEL_DEBUG'))
|