public
nobgit
read
NobMail
Based on mailcow: dockerized
Languages
Repository composition by tracked source files.
PHP
49%
JavaScript
35%
HTML
9%
CSS
4%
Shell
2%
Python
1%
Lua
0%
Perl
0%
Ruby
0%
SCSS
0%
Create file
Wiki Documentation
Clone
https://nobgit.com/orgs/nobgit/nobmail.git
ssh://[email protected]:2222/orgs/nobgit/nobmail.git
Commit
deliver CSS and JS as external request
cc1bf5d4
data/conf/nginx/includes/site-defaults.conf | 6 +++++-
data/web/inc/footer.inc.php | 19 ++++++++++---------
data/web/inc/header.inc.php | 17 ++++++++---------
data/web/resource.php | 28 ++++++++++++++++++++++++++++
4 files changed, 51 insertions(+), 19 deletions(-)
create mode 100644 data/web/resource.php
Diff
diff --git a/data/conf/nginx/includes/site-defaults.conf b/data/conf/nginx/includes/site-defaults.conf
index 53778020..3de4c1a2 100644
--- a/data/conf/nginx/includes/site-defaults.conf
+++ b/data/conf/nginx/includes/site-defaults.conf
@@ -32,7 +32,7 @@
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_min_length 256;
- gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/vnd.ms-fontobject application/x-font-ttf font/opentype image/svg+xml image/x-icon;
+ gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript application/vnd.ms-fontobject application/x-font-ttf font/opentype image/svg+xml image/x-icon;
location ~ ^/(fonts|js|css|img)/ {
expires max;
@@ -205,3 +205,7 @@
location @awaitingupstream {
rewrite ^(.*)$ /_status.502.html break;
}
+
+ location ~ ^/cache/(.*)$ {
+ try_files $uri $uri/ /resource.php?file=$1;
+ }
diff --git a/data/web/inc/footer.inc.php b/data/web/inc/footer.inc.php
index 1d9f5c44..9fec2b69 100644
--- a/data/web/inc/footer.inc.php
+++ b/data/web/inc/footer.inc.php
@@ -3,15 +3,16 @@ require_once $_SERVER['DOCUMENT_ROOT'] . '/modals/footer.php';
logger();
?>
<div style="margin-bottom: 100px;"></div>
-<script type='text/javascript'><?php
- $JSPath = '/tmp/' . $js_minifier->getDataHash() . '.js';
- if(file_exists($JSPath)) {
- echo file_get_contents($JSPath);
- } else {
- echo $js_minifier->minify($JSPath);
- cleanupJS($js_minifier->getDataHash());
- }
- ?></script>
+
+<?php
+$hash = $js_minifier->getDataHash();
+$JSPath = '/tmp/' . $hash . '.js';
+if(!file_exists($JSPath)) {
+ $js_minifier->minify($JSPath);
+ cleanupJS($hash);
+}
+?>
+<script src="/cache/<?=basename($JSPath)?>"></script>
<script>
<?php
$lang_footer = json_encode($lang['footer']);
diff --git a/data/web/inc/header.inc.php b/data/web/inc/header.inc.php
index 1663413f..348ed372 100644
--- a/data/web/inc/header.inc.php
+++ b/data/web/inc/header.inc.php
@@ -29,16 +29,15 @@
if ($_SERVER['REQUEST_URI'] == '/') {
$css_minifier->add('/web/css/site/index.css');
}
+
+ $hash = $css_minifier->getDataHash();
+ $CSSPath = '/tmp/' . $hash . '.css';
+ if(!file_exists($CSSPath)) {
+ $css_minifier->minify($CSSPath);
+ cleanupCSS($hash);
+ }
?>
- <style><?php
- $CSSPath = '/tmp/' . $css_minifier->getDataHash() . '.css';
- if(file_exists($CSSPath)) {
- echo file_get_contents($CSSPath);
- } else {
- echo $css_minifier->minify($CSSPath);
- cleanupCSS($css_minifier->getDataHash());
- }
- ?></style>
+ <link rel="stylesheet" href="/cache/<?=basename($CSSPath)?>">
<?php if (strtolower(trim($DEFAULT_THEME)) != "lumen"): ?>
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/bootswatch/3.3.7/<?= strtolower(trim($DEFAULT_THEME)); ?>/bootstrap.min.css">
<?php endif; ?>
diff --git a/data/web/resource.php b/data/web/resource.php
new file mode 100644
index 00000000..96d41c1a
--- /dev/null
+++ b/data/web/resource.php
@@ -0,0 +1,28 @@
+<?php
+
+$pathinfo = pathinfo($_GET['file']);
+$extension = strtolower($pathinfo['extension']);
+
+$filepath = '/tmp/' . $pathinfo['basename'];
+$content = '';
+
+if (file_exists($filepath)) {
+ $secondsToCache = 31536000;
+ $expires = gmdate('D, d M Y H:i:s', time() + $secondsToCache) . ' GMT';
+
+ if ($extension === 'js') {
+ header('Content-Type: application/javascript');
+ } elseif ($extension === 'css') {
+ header('Content-Type: text/css');
+ } else {
+ //currently just css and js should be supported!
+ exit();
+ }
+
+ header("Expires: $expires");
+ header('Pragma: cache');
+ header('Cache-Control: max-age=' . $secondsToCache);
+ $content = file_get_contents($filepath);
+}
+
+echo $content;