PluginProbe
Matomo Analytics – Powerful, Privacy-First Insights for WordPress / 5.0.7
Matomo Analytics – Powerful, Privacy-First Insights for WordPress v5.0.7
5.13.0 5.12.1 5.12.0 5.11.1 5.11.0 5.10.2 5.10.1 trunk 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.2 1.1.3 1.2.0 1.3.0 1.3.1 1.3.2 4.0.0 4.0.1 4.0.2 4.0.3 All 83 releases
matomo / app / core / AssetManager / UIAssetMinifier.php
UIAssetMinifier.php
59 lines 1.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * Matomo - free/libre analytics platform
5 *
6 * @link https://matomo.org
7 * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
8 *
9 * @method static \Piwik\AssetManager\UIAssetMinifier getInstance()
10 */
11 namespace Piwik\AssetManager;
12
13 use Exception;
14 use JShrink\Minifier;
15 use Piwik\Singleton;
16 class UIAssetMinifier extends Singleton
17 {
18 const MINIFIED_JS_RATIO = 100;
19 protected function __construct()
20 {
21 self::validateDependency();
22 parent::__construct();
23 }
24 /**
25 * Indicates if the provided JavaScript content has already been minified or not.
26 * The heuristic is based on a custom ratio : (size of file) / (number of lines).
27 * The threshold (100) has been found empirically on existing files :
28 * - the ratio never exceeds 50 for non-minified content and
29 * - it never goes under 150 for minified content.
30 *
31 * @param string $content Contents of the JavaScript file
32 * @return boolean
33 */
34 public function isMinifiedJs($content)
35 {
36 $lineCount = substr_count($content, "\n");
37 if ($lineCount == 0) {
38 return true;
39 }
40 $contentSize = strlen($content);
41 $ratio = $contentSize / $lineCount;
42 return $ratio > self::MINIFIED_JS_RATIO;
43 }
44 /**
45 * @param string $content
46 * @return string
47 */
48 public function minifyJs($content)
49 {
50 return Minifier::minify($content);
51 }
52 private static function validateDependency()
53 {
54 if (!class_exists("JShrink\\Minifier")) {
55 throw new Exception("JShrink could not be found, maybe you are using Matomo from git and need to update Composer. \$ php composer.phar update");
56 }
57 }
58 }
59