Skip to content

Commit 0393e80

Browse files
author
C. Montero Luque
committed
Merge pull request #16857 from owncloud/printStylesheets
Support for print stylesheets
2 parents 6d40e69 + 99b9ec4 commit 0393e80

File tree

4 files changed

+51
-12
lines changed

4 files changed

+51
-12
lines changed

core/templates/layout.base.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,10 @@
1515
<link rel="apple-touch-icon-precomposed" href="<?php print_unescaped(image_path('', 'favicon-touch.png')); ?>">
1616
<link rel="mask-icon" sizes="any" href="<?php print_unescaped(image_path('', 'favicon-mask.svg')); ?>" color="#1d2d44">
1717
<?php foreach ($_['cssfiles'] as $cssfile): ?>
18-
<link rel="stylesheet" href="<?php print_unescaped($cssfile); ?>" media="screen">
18+
<link rel="stylesheet" href="<?php print_unescaped($cssfile); ?>">
19+
<?php endforeach; ?>
20+
<?php foreach($_['printcssfiles'] as $cssfile): ?>
21+
<link rel="stylesheet" href="<?php print_unescaped($cssfile); ?>" media="print">
1922
<?php endforeach; ?>
2023
<?php foreach ($_['jsfiles'] as $jsfile): ?>
2124
<script src="<?php print_unescaped($jsfile); ?>"></script>

core/templates/layout.guest.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,10 @@
1616
<link rel="apple-touch-icon-precomposed" href="<?php print_unescaped(image_path('', 'favicon-touch.png')); ?>">
1717
<link rel="mask-icon" sizes="any" href="<?php print_unescaped(image_path('', 'favicon-mask.svg')); ?>" color="#1d2d44">
1818
<?php foreach($_['cssfiles'] as $cssfile): ?>
19-
<link rel="stylesheet" href="<?php print_unescaped($cssfile); ?>" media="screen">
19+
<link rel="stylesheet" href="<?php print_unescaped($cssfile); ?>">
20+
<?php endforeach; ?>
21+
<?php foreach($_['printcssfiles'] as $cssfile): ?>
22+
<link rel="stylesheet" href="<?php print_unescaped($cssfile); ?>" media="print">
2023
<?php endforeach; ?>
2124
<?php foreach($_['jsfiles'] as $jsfile): ?>
2225
<script src="<?php print_unescaped($jsfile); ?>"></script>

core/templates/layout.user.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,10 @@
2323
<link rel="apple-touch-icon-precomposed" href="<?php print_unescaped(image_path($_['appid'], 'favicon-touch.png')); ?>">
2424
<link rel="mask-icon" sizes="any" href="<?php print_unescaped(image_path($_['appid'], 'favicon-mask.svg')); ?>" color="#1d2d44">
2525
<?php foreach($_['cssfiles'] as $cssfile): ?>
26-
<link rel="stylesheet" href="<?php print_unescaped($cssfile); ?>" media="screen">
26+
<link rel="stylesheet" href="<?php print_unescaped($cssfile); ?>">
27+
<?php endforeach; ?>
28+
<?php foreach($_['printcssfiles'] as $cssfile): ?>
29+
<link rel="stylesheet" href="<?php print_unescaped($cssfile); ?>" media="print">
2730
<?php endforeach; ?>
2831
<?php foreach($_['jsfiles'] as $jsfile): ?>
2932
<script src="<?php print_unescaped($jsfile); ?>"></script>

lib/private/templatelayout.php

Lines changed: 39 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,11 @@ public function __construct( $renderAs, $appId = '' ) {
160160
$web = $info[1];
161161
$file = $info[2];
162162

163-
$this->append( 'cssfiles', $web.'/'.$file . '?v=' . self::$versionHash);
163+
if (substr($file, -strlen('print.css')) === 'print.css') {
164+
$this->append( 'printcssfiles', $web.'/'.$file . '?v=' . self::$versionHash);
165+
} else {
166+
$this->append( 'cssfiles', $web.'/'.$file . '?v=' . self::$versionHash);
167+
}
164168
}
165169
}
166170
}
@@ -227,10 +231,35 @@ public function generateAssets() {
227231
}
228232

229233
$cssFiles = self::findStylesheetFiles(\OC_Util::$styles);
230-
$cssHash = self::hashFileNames($cssFiles);
231234

232-
if (!file_exists("$assetDir/assets/$cssHash.css")) {
233-
$cssFiles = array_map(function ($item) {
235+
// differentiate between screen stylesheets and printer stylesheets
236+
$screenCssFiles = array_filter($cssFiles, function($cssFile) {
237+
return substr_compare($cssFile[2], 'print.css', -strlen('print.css')) !== 0;
238+
});
239+
$screenCssAsset = $this->generateCssAsset($screenCssFiles);
240+
241+
$printCssFiles = array_filter($cssFiles, function($cssFile) {
242+
return substr_compare($cssFile[2], 'print.css', -strlen('print.css')) === 0;
243+
});
244+
$printCssAsset = $this->generateCssAsset($printCssFiles);
245+
246+
$this->append('jsfiles', \OC::$server->getURLGenerator()->linkTo('assets', "$jsHash.js"));
247+
$this->append('cssfiles', $screenCssAsset);
248+
$this->append('printcssfiles', $printCssAsset);
249+
}
250+
251+
/**
252+
* generates a single css asset file from an array of css files if at least one of them has changed
253+
* otherwise it just returns the path to the old asset file
254+
* @param $files
255+
* @return string
256+
*/
257+
private function generateCssAsset($files) {
258+
$assetDir = \OC::$server->getConfig()->getSystemValue('assetdirectory', \OC::$SERVERROOT);
259+
$hash = self::hashFileNames($files);
260+
261+
if (!file_exists("$assetDir/assets/$hash.css")) {
262+
$files = array_map(function ($item) {
234263
$root = $item[0];
235264
$file = $item[2];
236265
$assetPath = $root . '/' . $file;
@@ -246,16 +275,17 @@ public function generateAssets() {
246275
$sourceRoot,
247276
$sourcePath
248277
);
249-
}, $cssFiles);
250-
$cssCollection = new AssetCollection($cssFiles);
251-
$cssCollection->setTargetPath("assets/$cssHash.css");
278+
}, $files);
279+
280+
$cssCollection = new AssetCollection($files);
281+
$cssCollection->setTargetPath("assets/$hash.css");
252282

253283
$writer = new AssetWriter($assetDir);
254284
$writer->writeAsset($cssCollection);
285+
255286
}
256287

257-
$this->append('jsfiles', \OC::$server->getURLGenerator()->linkTo('assets', "$jsHash.js"));
258-
$this->append('cssfiles', \OC::$server->getURLGenerator()->linkTo('assets', "$cssHash.css"));
288+
return \OC::$server->getURLGenerator()->linkTo('assets', "$hash.css");
259289
}
260290

261291
/**

0 commit comments

Comments
 (0)