PluginProbe ʕ •ᴥ•ʔ
MailPoet – Newsletters, Email Marketing, and Automation / 5.36.0
MailPoet – Newsletters, Email Marketing, and Automation v5.36.0
5.36.0 5.35.1 5.35.0 5.34.3 5.34.2 5.34.1 5.34.0 5.33.1 5.33.0 5.32.0 5.31.0 5.30.0 5.29.0 5.28.1 5.28.0 5.27.0 5.26.0 5.26.1 5.25.0 5.24.0 4.43.0 4.43.1 4.44.0 4.44.1 4.45.0 4.46.0 4.47.0 4.48.0 4.48.1 4.48.2 4.49.0 4.49.1 4.5.0 4.5.1 4.5.2 4.50.0 4.50.1 4.51.0 4.51.1 4.51.2 4.52.0 4.53.0 4.54.0 4.55.0 4.56.0 4.57.0 4.58.0 4.58.1 4.58.2 4.6.0 4.6.1 4.6.2 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 5.0.0 5.0.1 5.0.2 5.1.0 5.1.1 5.10.0 5.10.1 5.11.0 5.12.0 5.12.1 5.12.10 5.12.11 5.12.12 5.12.13 5.12.2 5.12.3 5.12.4 5.12.5 5.12.6 5.12.7 5.12.8 5.12.9 5.13.0 5.13.1 5.13.2 5.14.0 5.14.1 5.14.2 5.14.3 5.15.0 5.15.1 5.16.0 5.16.1 5.16.2 5.16.3 5.16.4 5.17.0 5.17.1 5.17.2 5.17.3 5.17.4 5.17.5 5.17.6 5.18.0 5.19.0 5.2.0 5.2.1 5.2.2 5.2.3 5.20.0 5.21.0 5.21.1 5.21.2 5.21.3 5.22.0 5.22.1 5.22.2 5.22.3 5.22.4 5.23.0 5.23.1 5.23.2 5.3.0 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.3.6 5.3.7 5.4.0 5.4.1 5.4.2 5.5.0 5.5.1 5.5.2 5.6.0 5.6.1 5.6.2 5.6.3 5.6.4 5.7.0 5.7.1 5.8.0 5.8.1 5.9.0 3.0.0-beta.15 3.7.1 3.0.0-beta.16 3.7.2 3.0.0-beta.17 3.7.3 3.0.0-beta.18 3.7.4 3.0.0-beta.19 3.7.5 3.0.0-beta.2 3.7.6 3.0.0-beta.20 3.7.8 3.0.0-beta.21 3.70.0 3.0.0-beta.22 3.71.0 3.0.0-beta.23 3.71.1 3.0.0-beta.23.1 3.71.2 3.0.0-beta.23.2 3.71.3 3.0.0-beta.24 3.72.0 3.0.0-beta.25 3.73.0 3.0.0-beta.26 3.73.1 3.0.0-beta.27 3.73.2 3.0.0-beta.28 3.74.0 3.0.0-beta.29 3.74.1 3.0.0-beta.3 3.74.2 3.0.0-beta.30 3.74.3 3.0.0-beta.31 3.75.0 3.0.0-beta.32 3.75.1 3.0.0-beta.33 3.76.0 3.0.0-beta.33.1 3.77.0 3.0.0-beta.34.0.0 3.77.1 3.0.0-beta.36.0.0 3.78.0 3.0.0-beta.36.0.1 3.79.0 3.0.0-beta.36.2.0 3.8 3.0.0-beta.36.3.0 3.8.1 3.0.0-beta.36.3.1 3.8.2 3.0.0-beta.37.0.0 3.8.3 3.0.0-beta.4 3.8.4 3.0.0-beta.5 3.8.5 3.0.0-beta.6 3.8.6 3.0.0-beta.7 3.80.0 3.0.0-beta.7.1 3.81.0 3.0.0-beta.8 3.82.0 3.0.0-beta.9 3.83.0 3.0.0-rc.1.0.0 3.84.0 3.0.0-rc.1.0.1 3.84.1 3.0.0-rc.1.0.2 3.85.0 3.0.0-rc.1.0.3 3.85.1 3.0.0-rc.1.0.4 3.86.0 3.0.0-rc.2.0.0 3.87.0 3.0.0-rc.2.0.1 3.87.1 3.0.0-rc.2.0.2 3.87.2 3.0.0-rc.2.0.3 3.88.0 3.0.1 3.88.1 3.0.2 3.88.2 3.0.3 3.89.0 3.0.4 3.89.1 3.0.5 3.89.2 3.0.6 3.89.3 3.0.7 3.89.4 3.0.8 3.9.0 3.0.9 3.9.1 3.1.0 3.90.0 3.10 3.90.1 3.10.1 3.90.2 3.100.0 3.91.0 3.100.1 3.91.1 3.100.2 3.92.0 3.101.0 3.92.1 3.101.1 3.93.0 3.102.0 3.93.1 3.102.1 3.94.0 3.103.0 3.95.0 3.103.1 3.95.1 3.11.0 3.96.0 3.11.1 3.96.1 3.11.2 3.97.0 3.11.3 3.98.0 3.11.4 3.98.1 3.11.5 3.99.0 3.12.0 3.99.1 3.12.1 4.0.0 3.13.0 4.0.1 3.14.0 4.1.0 3.14.1 4.1.1 3.15.0 4.10.0 3.16.0 4.11.0 3.16.1 4.11.1 3.16.2 4.12.0 3.16.3 4.12.1 3.17.0 4.12.2 3.17.1 4.13.0 3.17.2 4.14.0 3.18.0 4.15.0 3.18.1 4.16.0 3.18.2 4.17.0 3.19.0 4.17.1 3.19.1 4.18.0 3.19.2 4.18.1 3.19.3 4.19.0 3.2.0 4.2.0 3.2.1 4.20.0 3.2.2 4.20.1 3.2.3 4.20.2 3.2.4 4.21.0 3.2.5 4.22.0 3.20.0 4.22.1 3.21.0 4.22.2 3.21.1 4.23.0 3.22.0 4.24.0 3.23.0 4.25.0 3.23.1 4.26.0 3.23.2 4.26.1 3.24.0 4.27.0 3.25.0 4.28.0 3.25.1 4.29.0 3.26.0 4.3.0 3.26.1 4.3.1 3.27.0 4.30.0 3.28.0 4.31.0 3.29.0 4.31.1 3.3.0 4.32.0 3.3.1 4.33.0 3.3.2 4.34.0 3.3.3 4.35.0 3.3.4 4.35.1 3.3.5 4.36.0 3.3.6 4.37.0 3.30.0 4.38.0 3.31.0 4.39.0 3.31.1 4.4.0 3.32.0 4.40.0 3.32.1 4.41.0 3.32.2 4.41.1 3.33.0 4.41.2 3.34.0 4.41.3 3.34.1 4.42.0 3.34.2 4.42.1 3.34.3 3.34.4 3.35.0 3.35.1 3.35.3 3.35.4 3.36.0 3.37.0 3.37.1 3.37.2 3.37.3 3.38.0 3.38.1 3.39.0 3.39.1 3.39.2 3.4.0 3.4.1 3.4.2 3.4.3 3.4.4 3.40.0 3.40.1 3.41.0 3.41.1 3.41.2 3.42.0 3.42.1 3.42.2 3.42.3 3.43.0 3.43.1 3.44.0 3.45.0 3.45.1 3.46.0 3.46.1 3.46.10 3.46.11 3.46.12 3.46.13 3.46.14 3.46.2 3.46.3 3.46.4 3.46.5 3.46.6 3.46.7 3.46.8 3.46.9 3.47.0 3.47.1 3.47.10 3.47.11 3.47.2 3.47.3 3.47.5 3.47.6 3.47.7 3.47.9 3.48.0 3.48.1 3.49.0 3.49.1 3.5.0 3.5.1 3.50.0 3.51.0 3.51.1 3.51.2 3.52.0 3.53.0 3.54.0 3.54.1 3.54.2 3.54.3 3.55.0 3.55.1 3.56.0 3.56.1 3.56.2 3.57.0 3.57.1 3.58.0 3.59.0 3.59.1 3.59.2 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.6.5 3.6.6 3.6.7 3.60.0 3.60.1 3.60.10 3.60.11 3.60.12 3.60.2 3.60.3 3.60.4 3.60.6 3.60.7 3.60.8 3.60.9 3.61.0 3.62.0 3.62.1 3.63.0 3.64.0 3.64.1 3.64.2 3.64.3 3.65.0 trunk 3.65.1 3.0.0 3.66.0 3.0.0-beta.1 3.67.0 3.0.0-beta.10 3.67.1 3.0.0-beta.11 3.68.0 3.0.0-beta.12 3.69.0 3.0.0-beta.13 3.69.1 3.0.0-beta.14 3.7.0
mailpoet / vendor-prefixed / cerdic / css-tidy / class.csstidy_print.php
mailpoet / vendor-prefixed / cerdic / css-tidy Last commit date
class.csstidy.php 3 years ago class.csstidy_optimise.php 2 years ago class.csstidy_print.php 3 years ago cssparse.css 4 years ago cssparsed.css 4 years ago data.inc.php 4 years ago index.php 3 years ago lang.inc.php 4 years ago template.tpl 4 years ago template1.tpl 4 years ago template2.tpl 4 years ago template3.tpl 4 years ago
class.csstidy_print.php
321 lines
1 <?php
2 namespace MailPoetVendor;
3 if (!defined('ABSPATH')) exit;
4 class csstidy_print
5 {
6 public $parser;
7 public $input_css = '';
8 public $output_css = '';
9 public $output_css_plain = '';
10 public $css;
11 public $template;
12 public $tokens;
13 public $charset;
14 public $import;
15 public $namespace;
16 public function __construct($css)
17 {
18 $this->parser = $css;
19 $this->css =& $css->css;
20 $this->template =& $css->template;
21 $this->tokens =& $css->tokens;
22 $this->charset =& $css->charset;
23 $this->import =& $css->import;
24 $this->namespace =& $css->namespace;
25 }
26 public function _reset()
27 {
28 $this->output_css = '';
29 $this->output_css_plain = '';
30 }
31 public function plain($default_media = '')
32 {
33 $this->_print(\true, $default_media);
34 return $this->output_css_plain;
35 }
36 public function formatted($default_media = '')
37 {
38 $this->_print(\false, $default_media);
39 return $this->output_css;
40 }
41 public function formatted_page($doctype = 'html5', $externalcss = \true, $title = '', $lang = 'en')
42 {
43 switch ($doctype) {
44 case 'html5':
45 $doctype_output = '<!DOCTYPE html>';
46 break;
47 case 'xhtml1.0strict':
48 $doctype_output = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
49 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">';
50 break;
51 case 'xhtml1.1':
52 default:
53 $doctype_output = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
54 "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">';
55 break;
56 }
57 $output = $cssparsed = '';
58 $this->output_css_plain =& $output;
59 $output .= $doctype_output . "\n" . '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="' . $lang . '"';
60 $output .= $doctype === 'xhtml1.1' ? '>' : ' lang="' . $lang . '">';
61 $output .= "\n<head>\n <title>{$title}</title>";
62 if ($externalcss) {
63 $output .= "\n <style type=\"text/css\">\n";
64 $cssparsed = \file_get_contents('cssparsed.css');
65 $output .= $cssparsed;
66 // Adds an invisible BOM or something, but not in css_optimised.php
67 $output .= "\n</style>";
68 } else {
69 $output .= "\n" . ' <link rel="stylesheet" type="text/css" href="cssparsed.css" />';
70 }
71 $output .= "\n</head>\n<body><code id=\"copytext\">";
72 $output .= $this->formatted();
73 $output .= '</code>' . "\n" . '</body></html>';
74 return $this->output_css_plain;
75 }
76 public function _print($plain = \false, $default_media = '')
77 {
78 if ($this->output_css && $this->output_css_plain) {
79 return;
80 }
81 $output = '';
82 if (!$this->parser->get_cfg('preserve_css')) {
83 $this->_convert_raw_css($default_media);
84 }
85 $template =& $this->template;
86 if ($plain) {
87 $template = \array_map('strip_tags', $template);
88 }
89 if ($this->parser->get_cfg('timestamp')) {
90 \array_unshift($this->tokens, array(\COMMENT, ' CSSTidy ' . $this->parser->version . ': ' . \date('r') . ' '));
91 }
92 if (!empty($this->charset)) {
93 $output .= $template[0] . '@charset ' . $template[5] . $this->charset . $template[6] . $template[13];
94 }
95 if (!empty($this->import)) {
96 for ($i = 0, $size = \count($this->import); $i < $size; $i++) {
97 if (\substr($this->import[$i], 0, 4) === 'url(' && \substr($this->import[$i], -1, 1) === ')') {
98 $this->import[$i] = '"' . \substr($this->import[$i], 4, -1) . '"';
99 $this->parser->log('Optimised @import : Removed "url("', 'Information');
100 } else {
101 if (!\preg_match('/^".+"$/', $this->import[$i])) {
102 // fixes a bug for @import ".." instead of the expected @import url("..")
103 // If it comes in due to @import ".." the "" will be missing and the output will become @import .. (which is an error)
104 $this->import[$i] = '"' . $this->import[$i] . '"';
105 }
106 }
107 $output .= $template[0] . '@import ' . $template[5] . $this->import[$i] . $template[6] . $template[13];
108 }
109 }
110 if (!empty($this->namespace)) {
111 if (($p = \strpos($this->namespace, "url(")) !== \false && \substr($this->namespace, -1, 1) === ')') {
112 $this->namespace = \substr_replace($this->namespace, '"', $p, 4);
113 $this->namespace = \substr($this->namespace, 0, -1) . '"';
114 $this->parser->log('Optimised @namespace : Removed "url("', 'Information');
115 }
116 $output .= $template[0] . '@namespace ' . $template[5] . $this->namespace . $template[6] . $template[13];
117 }
118 $in_at_out = [];
119 $out =& $output;
120 $indent_level = 0;
121 foreach ($this->tokens as $key => $token) {
122 switch ($token[0]) {
123 case \AT_START:
124 $out .= $template[0] . $this->_htmlsp($token[1], $plain) . $template[1];
125 $indent_level++;
126 if (!isset($in_at_out[$indent_level])) {
127 $in_at_out[$indent_level] = '';
128 }
129 $out =& $in_at_out[$indent_level];
130 break;
131 case \SEL_START:
132 if ($this->parser->get_cfg('lowercase_s')) {
133 $token[1] = \strtolower($token[1]);
134 }
135 $out .= $token[1][0] !== '@' ? $template[2] . $this->_htmlsp($token[1], $plain) : $template[0] . $this->_htmlsp($token[1], $plain);
136 $out .= $template[3];
137 break;
138 case \PROPERTY:
139 if ($this->parser->get_cfg('case_properties') === 2) {
140 $token[1] = \strtoupper($token[1]);
141 } elseif ($this->parser->get_cfg('case_properties') === 1) {
142 $token[1] = \strtolower($token[1]);
143 }
144 $out .= $template[4] . $this->_htmlsp($token[1], $plain) . ':' . $template[5];
145 break;
146 case \VALUE:
147 $out .= $this->_htmlsp($token[1], $plain);
148 if ($this->_seeknocomment($key, 1) == \SEL_END && $this->parser->get_cfg('remove_last_;')) {
149 $out .= \str_replace(';', '', $template[6]);
150 } else {
151 $out .= $template[6];
152 }
153 break;
154 case \SEL_END:
155 $out .= $template[7];
156 if ($this->_seeknocomment($key, 1) != \AT_END) {
157 $out .= $template[8];
158 }
159 break;
160 case \AT_END:
161 if (\strlen($template[10])) {
162 // indent the bloc we are closing
163 $out = \str_replace("\n\n", "\r\n", $out);
164 // don't fill empty lines
165 $out = \str_replace("\n", "\n" . $template[10], $out);
166 $out = \str_replace("\r\n", "\n\n", $out);
167 }
168 if ($indent_level > 1) {
169 $out =& $in_at_out[$indent_level - 1];
170 } else {
171 $out =& $output;
172 }
173 $out .= $template[10] . $in_at_out[$indent_level];
174 if ($this->_seeknocomment($key, 1) != \AT_END) {
175 $out .= $template[9];
176 } else {
177 $out .= \rtrim($template[9]);
178 }
179 unset($in_at_out[$indent_level]);
180 $indent_level--;
181 break;
182 case \IMPORTANT_COMMENT:
183 case \COMMENT:
184 $out .= $template[11] . '/*' . $this->_htmlsp($token[1], $plain) . '*/' . $template[12];
185 break;
186 }
187 }
188 $output = \trim($output);
189 if (!$plain) {
190 $this->output_css = $output;
191 $this->_print(\true);
192 } else {
193 // If using spaces in the template, don't want these to appear in the plain output
194 $this->output_css_plain = \str_replace('&#160;', '', $output);
195 }
196 }
197 public function _seeknocomment($key, $move)
198 {
199 $go = $move > 0 ? 1 : -1;
200 for ($i = $key + 1; \abs($key - $i) - 1 < \abs($move); $i += $go) {
201 if (!isset($this->tokens[$i])) {
202 return;
203 }
204 if ($this->tokens[$i][0] == \COMMENT) {
205 $move += 1;
206 continue;
207 }
208 return $this->tokens[$i][0];
209 }
210 }
211 public function _convert_raw_css($default_media = '')
212 {
213 $this->tokens = array();
214 $sort_selectors = $this->parser->get_cfg('sort_selectors');
215 $sort_properties = $this->parser->get_cfg('sort_properties');
216 // important comment section ?
217 if (isset($this->css['!'])) {
218 $this->parser->_add_token(\IMPORTANT_COMMENT, \rtrim($this->css['!']), \true);
219 unset($this->css['!']);
220 }
221 foreach ($this->css as $medium => $val) {
222 if ($sort_selectors) {
223 \ksort($val);
224 }
225 if (\intval($medium) < \DEFAULT_AT) {
226 // un medium vide (contenant @font-face ou autre @) ne produit aucun conteneur
227 if (\strlen(\trim($medium))) {
228 $parts_to_open = \explode('{', $medium);
229 foreach ($parts_to_open as $part) {
230 $this->parser->_add_token(\AT_START, $part, \true);
231 }
232 }
233 } elseif ($default_media) {
234 $this->parser->_add_token(\AT_START, $default_media, \true);
235 }
236 foreach ($val as $selector => $vali) {
237 if ($sort_properties) {
238 \ksort($vali);
239 }
240 $this->parser->_add_token(\SEL_START, $selector, \true);
241 $invalid = array(
242 '*' => array(),
243 // IE7 hacks first
244 '_' => array(),
245 // IE6 hacks
246 '/' => array(),
247 // IE6 hacks
248 '-' => array(),
249 );
250 foreach ($vali as $property => $valj) {
251 if (\strncmp($property, "//", 2) !== 0) {
252 $matches = array();
253 if ($sort_properties && \preg_match('/^(\\*|_|\\/|-)(?!(ms|moz|o\\b|xv|atsc|wap|khtml|webkit|ah|hp|ro|rim|tc)-)/', $property, $matches)) {
254 $invalid[$matches[1]][$property] = $valj;
255 } else {
256 $this->parser->_add_token(\PROPERTY, $property, \true);
257 $this->parser->_add_token(\VALUE, $valj, \true);
258 }
259 }
260 }
261 foreach ($invalid as $prefix => $props) {
262 foreach ($props as $property => $valj) {
263 $this->parser->_add_token(\PROPERTY, $property, \true);
264 $this->parser->_add_token(\VALUE, $valj, \true);
265 }
266 }
267 $this->parser->_add_token(\SEL_END, $selector, \true);
268 }
269 if (\intval($medium) < \DEFAULT_AT) {
270 // un medium vide (contenant @font-face ou autre @) ne produit aucun conteneur
271 if (\strlen(\trim($medium))) {
272 $parts_to_close = \explode('{', $medium);
273 foreach (\array_reverse($parts_to_close) as $part) {
274 $this->parser->_add_token(\AT_END, $part, \true);
275 }
276 }
277 } elseif ($default_media) {
278 $this->parser->_add_token(\AT_END, $default_media, \true);
279 }
280 }
281 }
282 public function _htmlsp($string, $plain)
283 {
284 if (!$plain) {
285 return \htmlspecialchars($string, \ENT_QUOTES, 'utf-8');
286 }
287 return $string;
288 }
289 public function get_ratio()
290 {
291 if (!$this->output_css_plain) {
292 $this->formatted();
293 }
294 return \round((\strlen($this->input_css) - \strlen($this->output_css_plain)) / \strlen($this->input_css), 3) * 100;
295 }
296 public function get_diff()
297 {
298 if (!$this->output_css_plain) {
299 $this->formatted();
300 }
301 $diff = \strlen($this->output_css_plain) - \strlen($this->input_css);
302 if ($diff > 0) {
303 return '+' . $diff;
304 } elseif ($diff == 0) {
305 return '+-' . $diff;
306 }
307 return $diff;
308 }
309 public function size($loc = 'output')
310 {
311 if ($loc === 'output' && !$this->output_css) {
312 $this->formatted();
313 }
314 if ($loc === 'input') {
315 return \strlen($this->input_css) / 1000;
316 } else {
317 return \strlen($this->output_css_plain) / 1000;
318 }
319 }
320 }
321