Skip to content

Commit 072b21e

Browse files
committed
Releasing 1.0.11
2 parents 03456d7 + b4bc824 commit 072b21e

2 files changed

Lines changed: 62 additions & 22 deletions

File tree

src/WebApp/BootstrapTheme/DefaultLayout.php

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -24,27 +24,27 @@ protected function renderLinks() {
2424
$rc = '<link rel="stylesheet" href="'.$webroot.FontAwesome::getUri().'" rel="stylesheet" type="text/css">'.
2525
'<link rel="stylesheet" href="'.$this->getBootstrapUri().'" rel="stylesheet" type="text/css">';
2626
if ($this->theme->hasFeature(BootstrapTheme::DATEPICKER)) {
27-
$rc .= '<link rel="stylesheet" href="'.Utils::getCssBasePath(TRUE).'/bootstrap-datepicker.min.css" rel="stylesheet" type="text/css">';
27+
$rc .= '<link rel="stylesheet" href="'.Utils::getCssPath('bootstrap-datepicker.min.css', TRUE).'" rel="stylesheet" type="text/css">';
2828
}
2929
if ($this->theme->hasFeature(BootstrapTheme::MULTISELECT)) {
30-
$rc .= '<link rel="stylesheet" href="'.Utils::getCssBasePath(TRUE).'/filter-multi-select.css" rel="stylesheet" type="text/css">';
30+
$rc .= '<link rel="stylesheet" href="'.Utils::getCssPath('filter-multi-select.css', TRUE).'" rel="stylesheet" type="text/css">';
3131
}
3232
if ($this->theme->hasFeature(BootstrapTheme::FILEUPLOAD)) {
33-
$rc .= '<link rel="stylesheet" href="'.Utils::getCssBasePath(TRUE).'/bootstrap-datepicker.min.css" rel="stylesheet" type="text/css">';
33+
$rc .= '<link rel="stylesheet" href="'.Utils::getCssPath('bootstrap-datepicker.min.css', TRUE).'" rel="stylesheet" type="text/css">';
3434
}
3535
if ($this->theme->hasFeature(BootstrapTheme::MULTIIMAGEUPLOAD) || $this->theme->hasFeature(BootstrapTheme::IMAGEUPLOAD)) {
36-
$rc .= '<link rel="stylesheet" href="'.Utils::getCssBasePath(TRUE).'/multi-image-upload.css" rel="stylesheet" type="text/css">';
36+
$rc .= '<link rel="stylesheet" href="'.Utils::getCssPath('multi-image-upload.css', TRUE).'" rel="stylesheet" type="text/css">';
3737
}
3838
if ($this->theme->hasFeature(BootstrapTheme::REMOTESEARCH)) {
39-
$rc .= '<link rel="stylesheet" href="'.Utils::getCssBasePath(TRUE).'/remote-search.css" rel="stylesheet" type="text/css">';
39+
$rc .= '<link rel="stylesheet" href="'.Utils::getCssPath('remote-search.css', TRUE).'" rel="stylesheet" type="text/css">';
4040
}
4141
if ($this->theme->hasFeature(BootstrapTheme::DYNAMICFIELDS)) {
42-
$rc .= '<link rel="stylesheet" href="'.Utils::getCssBasePath(TRUE).'/dynamic-fields.css" rel="stylesheet" type="text/css">';
42+
$rc .= '<link rel="stylesheet" href="'.Utils::getCssPath('dynamic-fields.css', TRUE).'" rel="stylesheet" type="text/css">';
4343
}
4444
if ($this->theme->hasFeature(BootstrapTheme::CROPPERJS)) {
45-
$rc .= '<link rel="stylesheet" href="'.Utils::getCssBasePath(TRUE).'/cropper/cropper.min.css" rel="stylesheet" type="text/css">';
45+
$rc .= '<link rel="stylesheet" href="'.Utils::getCssPath('cropper/cropper.min.css', TRUE).'" rel="stylesheet" type="text/css">';
4646
}
47-
$rc .= '<link rel="stylesheet" href="'.Utils::getCssBasePath(TRUE).'/bootstrap.css" rel="stylesheet" type="text/css">';
47+
$rc .= '<link rel="stylesheet" href="'.Utils::getCssPath('bootstrap.css', TRUE).'" rel="stylesheet" type="text/css">';
4848
$rc .= parent::renderLinks();
4949
return $rc;
5050
}
@@ -167,43 +167,43 @@ protected function renderJavascript() {
167167
$webroot = $this->app->request->webRoot;
168168
$rc = '<script src="'.Utils::getJavascriptBasePath(TRUE).'/jquery-3.5.1.js"></script>'.
169169
'<script src="'.$webroot.Bootstrap::getJsUri().'"></script>'.
170-
'<script src="'.Utils::getJavascriptBasePath(TRUE).'/webapp.js"></script>'.
171-
'<script src="'.Utils::getJavascriptBasePath(TRUE).'/utils.js"></script>';
170+
'<script src="'.Utils::getJavascriptPath('webapp.js', TRUE).'"></script>'.
171+
'<script src="'.Utils::getJavascriptPath('utils.js', TRUE).'"></script>';
172172
if ($this->theme->hasFeature(BootstrapTheme::MULTISELECT)) {
173-
$rc .= '<script src="'.Utils::getJavascriptBasePath(TRUE).'/filter-multi-select.bundle.js"></script>'.
173+
$rc .= '<script src="'.Utils::getJavascriptPath('filter-multi-select.bundle.js', TRUE).'"></script>'.
174174
'<script>$(function() {$(\'.multiselect\').filterMultiSelect();});</script>';
175175
}
176176
if ($this->theme->hasFeature(BootstrapTheme::FILEUPLOAD)) {
177-
$rc .= '<script src="'.Utils::getJavascriptBasePath(TRUE).'/bs-custom-file-input.min.js"></script>'.
177+
$rc .= '<script src="'.Utils::getJavascriptPath('bs-custom-file-input.min.js', TRUE).'"></script>'.
178178
'<script>jQuery(document).ready(function () { bsCustomFileInput.init() })</script>';
179179
}
180180
if ($this->theme->hasFeature(BootstrapTheme::MULTIIMAGEUPLOAD)) {
181-
$rc .= '<script src="'.Utils::getJavascriptBasePath(TRUE).'/multi-image-upload.js"></script>';
181+
$rc .= '<script src="'.Utils::getJavascriptPath('multi-image-upload.js', TRUE).'"></script>';
182182
}
183183
if ($this->theme->hasFeature(BootstrapTheme::IMAGEUPLOAD)) {
184-
$rc .= '<script src="'.Utils::getJavascriptBasePath(TRUE).'/image-upload.js"></script>';
184+
$rc .= '<script src="'.Utils::getJavascriptPath('image-upload.js', TRUE).'"></script>';
185185
}
186186
if ($this->theme->hasFeature(BootstrapTheme::DATEPICKER)) {
187-
$rc .= '<script src="'.Utils::getJavascriptBasePath(TRUE).'/bootstrap-datepicker.js"></script>'.
188-
'<script src="'.Utils::getJavascriptBasePath(TRUE).'/bootstrap-datepicker-locales.min.js"></script>'.
187+
$rc .= '<script src="'.Utils::getJavascriptPath('bootstrap-datepicker.js', TRUE).'"></script>'.
188+
'<script src="'.Utils::getJavascriptPath('bootstrap-datepicker-locales.min.js', TRUE).'"></script>'.
189189
'<script>jQuery(document).ready(function () { $(\'.datepicker\').datepicker({ format: \''.I18N::_('datepicker_format').'\'}) })</script>';
190190
}
191191
if ($this->theme->hasFeature(BootstrapTheme::TABS)) {
192192
$rc .= '<script type="text/javascript">jQuery(document).on(\'click\', \'ul.nav-tabs a\', function(e) { e.preventDefault(); jQuery(this).tab(\'show\').parent().addClass(\'active\'); jQuery(this).parent().siblings().removeClass(\'active\');});</script>';
193193
}
194194
if ($this->theme->hasFeature(BootstrapTheme::REMOTESEARCH)) {
195-
$rc .= '<script src="'.Utils::getJavascriptBasePath(TRUE).'/remote-search.js"></script>';
195+
$rc .= '<script src="'.Utils::getJavascriptPath('remote-search.js', TRUE).'"></script>';
196196
}
197197
if ($this->theme->hasFeature(BootstrapTheme::DYNAMICFIELDS)) {
198-
$rc .= '<script src="'.Utils::getJavascriptBasePath(TRUE).'/dynamic-fields.js"></script>';
198+
$rc .= '<script src="'.Utils::getJavascriptPath('dynamic-fields.js', TRUE).'"></script>';
199199
}
200200
if ($this->theme->hasFeature(BootstrapTheme::DYNAMICCHECKENABLE)) {
201-
$rc .= '<script src="'.Utils::getJavascriptBasePath(TRUE).'/dynamic-check-enable.js"></script>';
201+
$rc .= '<script src="'.Utils::getJavascriptPath('dynamic-check-enable.js', TRUE).'"></script>';
202202
}
203203
if ($this->theme->hasFeature(BootstrapTheme::CROPPERJS)) {
204-
$rc .= '<script src="'.Utils::getJavascriptBasePath(TRUE).'/cropper/cropper.js"></script>';
205-
$rc .= '<script src="'.Utils::getJavascriptBasePath(TRUE).'/cropper/jquery-cropper.js"></script>';
206-
$rc .= '<script src="'.Utils::getJavascriptBasePath(TRUE).'/cropper/cropper-ui.js"></script>';
204+
$rc .= '<script src="'.Utils::getJavascriptPath('cropper/cropper.js', TRUE).'"></script>';
205+
$rc .= '<script src="'.Utils::getJavascriptPath('cropper/jquery-cropper.js', TRUE).'"></script>';
206+
$rc .= '<script src="'.Utils::getJavascriptPath('cropper/cropper-ui.js', TRUE).'"></script>';
207207
}
208208
$rc .= parent::renderJavascript();
209209
return $rc;

src/WebApp/Utils.php

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,22 @@ public static function getWebRootPath($webapp = FALSE) {
1818
return $request->webRoot.$request->relativeAppPath.($webapp ? WEBAPP_SUB_PATH : '');
1919
}
2020

21+
public static function getJavascriptUrl($filename, $webapp = FALSE) {
22+
$rc = self::getJavascriptBaseUrl($webapp).'/'.$filename;
23+
$param = self::getTimestampParam('/js', $filename, $webapp);
24+
return $rc.$param;
25+
}
26+
2127
public static function getJavascriptBaseUrl($webapp = FALSE) {
2228
return self::getWebRootUrl($webapp).'/js';
2329
}
2430

31+
public static function getJavascriptPath($filename, $webapp = FALSE) {
32+
$rc = self::getJavascriptBasePath($webapp).'/'.$filename;
33+
$param = self::getTimestampParam('/js', $filename, $webapp);
34+
return $rc.$param;
35+
}
36+
2537
public static function getJavascriptBasePath($webapp = FALSE) {
2638
return self::getWebRootPath($webapp).'/js';
2739
}
@@ -38,10 +50,23 @@ public static function getCssBaseUrl($webapp = FALSE) {
3850
return self::getWebRootUrl($webapp).'/css';
3951
}
4052

53+
public static function getCssUrl($filename, $webapp = FALSE) {
54+
$rc = self::getCssBaseUrl($webapp).'/'.$filename;
55+
$param = self::getTimestampParam('/css', $filename, $webapp);
56+
return $rc.$param;
57+
}
58+
4159
public static function getCssBasePath($webapp = FALSE) {
4260
return self::getWebRootPath($webapp).'/css';
4361
}
4462

63+
public static function getCssPath($filename, $webapp = FALSE) {
64+
$rc = self::getCssBasePath($webapp).'/'.$filename;
65+
$param = self::getTimestampParam('/css', $filename, $webapp);
66+
return $rc.$param;
67+
}
68+
69+
/** @Deprecated Use getCssPath() instead */
4570
public static function getParametrizedCssBasePath($relativeCssFile) {
4671
$request = Request::getRequest();
4772
$mtime = filemtime($request->appRoot.'/css'.$relativeCssFile);
@@ -55,5 +80,20 @@ public static function getFontBaseUrl($webapp = FALSE) {
5580
public static function getFontBasePath($webapp = FALSE) {
5681
return self::getWebRootPath($webapp).'/fonts';
5782
}
83+
84+
public static function getLocation($subDir, $filename, $webapp = FALSE) {
85+
$rc = WFW_ROOT_DIR;
86+
if ($webapp) $rc .= WEBAPP_SUB_PATH;
87+
$rc .= $subDir.'/'.$filename;
88+
return $rc;
89+
}
90+
91+
protected static function getTimestampParam($subDir, $filename, $webapp = FALSE) {
92+
$loc = self::getLocation($subDir, $filename, $webapp);
93+
if (file_exists($loc)) {
94+
return '?'.filemtime($loc);
95+
}
96+
return '';
97+
}
5898
}
5999

0 commit comments

Comments
 (0)