summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorRobin McCorkell <rmccorkell@karoshi.org.uk>2015-01-05 15:48:04 +0000
committerRobin McCorkell <rmccorkell@karoshi.org.uk>2015-01-05 15:48:04 +0000
commit2c44bc1768886d9b9693e484db37b971fc9917dd (patch)
treee051b6024e5f8380bc26f0cf2470186d72a98d14 /lib
parent0e17a00b62585224ddd957e6b9fa2f9096e90036 (diff)
downloadnextcloud-server-2c44bc1768886d9b9693e484db37b971fc9917dd.tar.gz
nextcloud-server-2c44bc1768886d9b9693e484db37b971fc9917dd.zip
Fix JS asset generation
At some point SeparatorFilter should be included upstream (kriswallsmith/assetic), then lib/private/assetic/separatorfilter.php can be removed and the `use` in lib/private/templatelayout.php rewritten. SeparatorFilter inserts a separator between assets, preventing issues when files are incorrectly terminated. For JS this is a semicolon.
Diffstat (limited to 'lib')
-rw-r--r--lib/private/assetic/separatorfilter.php57
-rw-r--r--lib/private/templatelayout.php8
2 files changed, 63 insertions, 2 deletions
diff --git a/lib/private/assetic/separatorfilter.php b/lib/private/assetic/separatorfilter.php
new file mode 100644
index 00000000000..fb1a4e7f00c
--- /dev/null
+++ b/lib/private/assetic/separatorfilter.php
@@ -0,0 +1,57 @@
+<?php
+
+/**
+ * ownCloud
+ *
+ * Copyright (C) 2014 Robin McCorkell <rmccorkell@karoshi.org.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\Assetic;
+
+use Assetic\Filter\FilterInterface;
+use Assetic\Asset\AssetInterface;
+
+/**
+ * Inserts a separator between assets to prevent merge failures
+ * e.g. missing semicolon at the end of a JS file
+ */
+class SeparatorFilter implements FilterInterface
+{
+ /**
+ * @var string
+ */
+ private $separator;
+
+ /**
+ * Constructor.
+ *
+ * @param string $separator Separator to use between assets
+ */
+ public function __construct($separator = ';')
+ {
+ $this->separator = $separator;
+ }
+
+ public function filterLoad(AssetInterface $asset)
+ {
+ }
+
+ public function filterDump(AssetInterface $asset)
+ {
+ $asset->setContent($asset->getContent() . $this->separator);
+ }
+}
diff --git a/lib/private/templatelayout.php b/lib/private/templatelayout.php
index fa025721e53..44c997c321e 100644
--- a/lib/private/templatelayout.php
+++ b/lib/private/templatelayout.php
@@ -6,6 +6,7 @@ use Assetic\Filter\CssImportFilter;
use Assetic\Filter\CssMinFilter;
use Assetic\Filter\CssRewriteFilter;
use Assetic\Filter\JSMinFilter;
+use OC\Assetic\SeparatorFilter; // waiting on upstream
/**
* Copyright (c) 2012 Bart Visscher <bartv@thisnet.nl>
@@ -163,10 +164,13 @@ class OC_TemplateLayout extends OC_Template {
$file = $item[2];
// no need to minifiy minified files
if (substr($file, -strlen('.min.js')) === '.min.js') {
- return new FileAsset($root . '/' . $file, array(), $root, $file);
+ return new FileAsset($root . '/' . $file, array(
+ new SeparatorFilter(';')
+ ), $root, $file);
}
return new FileAsset($root . '/' . $file, array(
- new JSMinFilter()
+ new JSMinFilter(),
+ new SeparatorFilter(';')
), $root, $file);
}, $jsFiles);
$jsCollection = new AssetCollection($jsFiles);