mirror of
https://github.com/e107inc/e107.git
synced 2025-07-25 00:41:52 +02:00
Issue #5192 - Javascript defer option. (experimental)
This commit is contained in:
@@ -387,6 +387,29 @@ if (abs($_serverTime - $lastSet) > 120)
|
||||
*/
|
||||
|
||||
echo "<script>\n";
|
||||
echo "var nowLocal = new Date(); /* time at very beginning of js execution */
|
||||
var localTime = Math.floor(nowLocal.getTime()/1000); /* time, in ms -- recorded at top of jscript */
|
||||
|
||||
function SyncWithServerTime(serverTime, path, domain)
|
||||
{
|
||||
if (serverTime)
|
||||
{
|
||||
/* update time difference cookie */
|
||||
var serverDelta=Math.floor(localTime-serverTime);
|
||||
if(!path) path = '/';
|
||||
if(!domain) domain = '';
|
||||
else domain = '; domain=' + domain;
|
||||
document.cookie = 'e107_tdOffset='+serverDelta+'; path='+path+domain;
|
||||
document.cookie = 'e107_tdSetTime='+(localTime-serverDelta)+'; path='+path+domain+'; samesite=strict'; /* server time when set */
|
||||
}
|
||||
|
||||
var tzCookie = 'e107_tzOffset=';
|
||||
// if (document.cookie.indexOf(tzCookie) < 0) {
|
||||
/* set if not already set */
|
||||
var timezoneOffset = nowLocal.getTimezoneOffset(); /* client-to-GMT in minutes */
|
||||
document.cookie = tzCookie + timezoneOffset+'; path='+path+domain+'; samesite=strict';
|
||||
// }
|
||||
}\n";
|
||||
echo " SyncWithServerTime('', '{$_serverPath}', '{$_serverDomain}');\n";
|
||||
//tdOffset disabled as it can't live together with HTTP_IF_NONE_MATCH (page load speed)
|
||||
//echo " SyncWithServerTime('{$_serverTime}', '{$_serverPath}', '{$_serverDomain}');\n";
|
||||
|
@@ -2529,6 +2529,8 @@ class e107
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
|
||||
$jshandler = self::getJs();
|
||||
if(is_string($parm))
|
||||
{
|
||||
@@ -2546,11 +2548,11 @@ class e107
|
||||
// data is e.g. 'core/tabs.js'
|
||||
if($zone !== null)
|
||||
{
|
||||
$jshandler->requireCoreLib($data, $zone);
|
||||
$jshandler->requireCoreLib($data, $zone, $parm);
|
||||
}
|
||||
else
|
||||
{
|
||||
$jshandler->requireCoreLib($data);
|
||||
$jshandler->requireCoreLib($data, 2, $parm);
|
||||
}
|
||||
|
||||
break;
|
||||
@@ -2636,11 +2638,11 @@ class e107
|
||||
}
|
||||
if($zone !== null)
|
||||
{
|
||||
$jshandler->requirePluginLib($type, $data, $zone);
|
||||
$jshandler->requirePluginLib($type, $data, $zone, $parm);
|
||||
}
|
||||
else
|
||||
{
|
||||
$jshandler->requirePluginLib($type, $data);
|
||||
$jshandler->requirePluginLib($type, $data, 5, $parm);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@@ -31,7 +31,7 @@ class e_jsmanager
|
||||
*/
|
||||
protected $_cache_list = array();
|
||||
|
||||
|
||||
protected $_js_defer = false;
|
||||
|
||||
protected $_core_prefs = array();
|
||||
|
||||
@@ -197,6 +197,7 @@ class e_jsmanager
|
||||
*/
|
||||
protected function __construct()
|
||||
{
|
||||
$this->_js_defer = (bool) deftrue('e_JS_DEFER'); // Experimental 2.4
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -483,17 +484,17 @@ class e_jsmanager
|
||||
* @param integer $zone 1-5 (see header.php)
|
||||
* @return e_jsmanager
|
||||
*/
|
||||
public function requireCoreLib($file_path, $zone = 2)
|
||||
public function requireCoreLib($file_path, $zone = 2, $opts=[])
|
||||
{
|
||||
if(is_array($file_path))
|
||||
{
|
||||
foreach ($file_path as $fpath => $z)
|
||||
{
|
||||
$this->tryHeaderFile('{e_WEB_JS}'.trim($fpath, '/'), $z);
|
||||
$this->tryHeaderFile('{e_WEB_JS}'.trim($fpath, '/'), $z, $opts);
|
||||
}
|
||||
return $this;
|
||||
}
|
||||
$this->tryHeaderFile('{e_WEB_JS}'.trim($file_path, '/'), $zone);
|
||||
$this->tryHeaderFile('{e_WEB_JS}'.trim($file_path, '/'), $zone, $opts);
|
||||
return $this;
|
||||
}
|
||||
|
||||
@@ -506,17 +507,17 @@ class e_jsmanager
|
||||
* @param integer $zone 1-5 (see header.php)
|
||||
* @return e_jsmanager
|
||||
*/
|
||||
public function requirePluginLib($plugname, $file_path, $zone = 5)
|
||||
public function requirePluginLib($plugname, $file_path, $zone = 5, $opts=[])
|
||||
{
|
||||
if(is_array($file_path))
|
||||
{
|
||||
foreach ($file_path as $fpath => $z)
|
||||
{
|
||||
$this->tryHeaderFile('{e_PLUGIN}'.$plugname.'/'.trim($fpath, '/'), $z);
|
||||
$this->tryHeaderFile('{e_PLUGIN}'.$plugname.'/'.trim($fpath, '/'), $z, $opts);
|
||||
}
|
||||
return $this;
|
||||
}
|
||||
$this->tryHeaderFile('{e_PLUGIN}'.$plugname.'/'.trim($file_path, '/'), $zone);
|
||||
$this->tryHeaderFile('{e_PLUGIN}'.$plugname.'/'.trim($file_path, '/'), $zone, $opts);
|
||||
return $this;
|
||||
}
|
||||
|
||||
@@ -550,9 +551,9 @@ class e_jsmanager
|
||||
* @param integer $zone 1-5 (see header.php)
|
||||
* @return e_jsmanager
|
||||
*/
|
||||
public function headerCore($file_path, $zone = 2, $pre = '', $post = '')
|
||||
public function headerCore($file_path, $zone = 2, $pre = '', $post = '', $opts=[])
|
||||
{
|
||||
$this->headerFile('{e_WEB_JS}'.trim($file_path, '/'), $zone, $pre, $post);
|
||||
$this->headerFile('{e_WEB_JS}'.trim($file_path, '/'), $zone, $pre, $post, $opts);
|
||||
return $this;
|
||||
}
|
||||
|
||||
@@ -563,9 +564,9 @@ class e_jsmanager
|
||||
* @param integer $zone 1-5 (see header.php)
|
||||
* @return e_jsmanager
|
||||
*/
|
||||
public function headerTheme($file_path, $zone = 5, $pre = '', $post = '')
|
||||
public function headerTheme($file_path, $zone = 5, $pre = '', $post = '', $opts=[])
|
||||
{
|
||||
$this->headerFile(THEME.trim($file_path, '/'), $zone, $pre, $post);
|
||||
$this->headerFile(THEME.trim($file_path, '/'), $zone, $pre, $post, $opts);
|
||||
return $this;
|
||||
}
|
||||
|
||||
@@ -592,9 +593,9 @@ class e_jsmanager
|
||||
* @param string $post
|
||||
* @return e_jsmanager
|
||||
*/
|
||||
public function headerPlugin($plugname, $file_path, $pre, $post)
|
||||
public function headerPlugin($plugname, $file_path, $pre, $post, $opts=[])
|
||||
{
|
||||
$this->headerFile('{e_PLUGIN}'.$plugname.'/'.trim($file_path, '/'), 2, $pre, $post); // Zone 2 - after libraries
|
||||
$this->headerFile('{e_PLUGIN}'.$plugname.'/'.trim($file_path, '/'), 2, $pre, $post, $opts); // Zone 2 - after libraries
|
||||
return $this;
|
||||
}
|
||||
|
||||
@@ -606,11 +607,11 @@ class e_jsmanager
|
||||
* @param integer $zone 1-5 (see header.php and footer.php)
|
||||
* @return e_jsmanager
|
||||
*/
|
||||
public function tryHeaderFile($file_path, $zone = 5)
|
||||
public function tryHeaderFile($file_path, $zone = 5, $opts=[])
|
||||
{
|
||||
if(!defined('HEADER_INIT'))
|
||||
{
|
||||
$this->headerFile($file_path, $zone);
|
||||
$this->headerFile($file_path, $zone, null, null, $opts);
|
||||
return $this;
|
||||
}
|
||||
|
||||
@@ -1241,12 +1242,23 @@ class e_jsmanager
|
||||
switch($mod)
|
||||
{
|
||||
case 'settings':
|
||||
$tp = e107::getParser();
|
||||
$json = $tp->toJSON($this->_e_js_settings);
|
||||
echo "<script>\n";
|
||||
echo "var e107 = e107 || {'settings': {}, 'behaviors': {}};\n";
|
||||
echo "jQuery.extend(e107.settings, " . $json . ");\n";
|
||||
echo "</script>\n";
|
||||
|
||||
|
||||
if($this->_js_defer)
|
||||
{
|
||||
echo "<script src='".e_WEB_ABS."js/core/settings.jquery.php' defer></script>\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
$tp = e107::getParser();
|
||||
$json = $tp->toJSON($this->_e_js_settings);
|
||||
echo "<script>\n";
|
||||
echo '$(document).ready(function() {';
|
||||
echo "var e107 = e107 || {'settings': {}, 'behaviors': {}};\n";
|
||||
echo "jQuery.extend(e107.settings, " . $json . ");\n";
|
||||
echo '});';
|
||||
echo "</script>\n";
|
||||
}
|
||||
break;
|
||||
|
||||
case 'framework': // CDN frameworks - rendered before consolidation script (if enabled)
|
||||
@@ -1483,8 +1495,8 @@ class e_jsmanager
|
||||
|
||||
$path = $tp->replaceConstants($path, 'abs').'?external=1'; // &'.$this->getCacheId();
|
||||
$path = $this->url($path);
|
||||
|
||||
echo $pre.'<script src="'.$path.'"></script>'.$post;
|
||||
$defer = ($this->_js_defer) ? ' defer' : '';
|
||||
echo $pre.'<script src="'.$path.'"'.$defer.'></script>'.$post;
|
||||
echo "\n";
|
||||
continue;
|
||||
}
|
||||
@@ -1583,8 +1595,8 @@ class e_jsmanager
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
echo $pre.'<script src="'.$path.'"'.$inline.'></script>'.$post;
|
||||
$defer = ($this->_js_defer && strpos($inline,'defer')===false) ? ' defer' : '';
|
||||
echo $pre.'<script src="'.$path.'"'.$inline.$defer.'></script>'.$post;
|
||||
echo "\n";
|
||||
continue;
|
||||
}
|
||||
@@ -1759,7 +1771,8 @@ class e_jsmanager
|
||||
|
||||
if($type == 'js')
|
||||
{
|
||||
echo "<script src='".$this->url(e_WEB_ABS."cache/".$fileName,'js',false)."'></script>\n\n";
|
||||
$deferCache = ($this->_js_defer) ? 'defer' : '';
|
||||
echo "<script src='".$this->url(e_WEB_ABS."cache/".$fileName,'js',false)."' $deferCache></script>\n\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1979,7 +1992,9 @@ class e_jsmanager
|
||||
}
|
||||
echo '<script>';
|
||||
echo "\n//<![CDATA[\n";
|
||||
echo ($this->_js_defer) ? "window.onload = function(){\n" : '';
|
||||
echo implode("\n\n", $content_array);
|
||||
echo ($this->_js_defer) ? "};\n" : '';
|
||||
echo "\n//]]>\n";
|
||||
echo '</script>';
|
||||
echo "\n";
|
||||
@@ -2054,6 +2069,12 @@ class e_jsmanager
|
||||
return ($this->isInAdmin() ? 'admin' : 'front');
|
||||
}
|
||||
|
||||
public function getSettings()
|
||||
{
|
||||
return $this->_e_js_settings;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get current theme name
|
||||
*
|
||||
|
@@ -1491,8 +1491,7 @@ $(document).ready(function()
|
||||
// Legacy Stuff to be converted.
|
||||
// BC Expandit() function
|
||||
|
||||
var nowLocal = new Date(); /* time at very beginning of js execution */
|
||||
var localTime = Math.floor(nowLocal.getTime()/1000); /* time, in ms -- recorded at top of jscript */
|
||||
|
||||
|
||||
|
||||
function expandit(e) {
|
||||
@@ -1547,26 +1546,7 @@ $(document).ready(function()
|
||||
|
||||
|
||||
|
||||
function SyncWithServerTime(serverTime, path, domain)
|
||||
{
|
||||
if (serverTime)
|
||||
{
|
||||
/* update time difference cookie */
|
||||
var serverDelta=Math.floor(localTime-serverTime);
|
||||
if(!path) path = '/';
|
||||
if(!domain) domain = '';
|
||||
else domain = '; domain=' + domain;
|
||||
document.cookie = 'e107_tdOffset='+serverDelta+'; path='+path+domain;
|
||||
document.cookie = 'e107_tdSetTime='+(localTime-serverDelta)+'; path='+path+domain+'; samesite=strict'; /* server time when set */
|
||||
}
|
||||
|
||||
var tzCookie = 'e107_tzOffset=';
|
||||
// if (document.cookie.indexOf(tzCookie) < 0) {
|
||||
/* set if not already set */
|
||||
var timezoneOffset = nowLocal.getTimezoneOffset(); /* client-to-GMT in minutes */
|
||||
document.cookie = tzCookie + timezoneOffset+'; path='+path+domain+'; samesite=strict';
|
||||
// }
|
||||
}
|
||||
|
||||
|
||||
function urljump(url){
|
||||
|
20
e107_web/js/core/settings.jquery.php
Normal file
20
e107_web/js/core/settings.jquery.php
Normal file
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
$_E107['minimal'] = true;
|
||||
require_once("../../../class2.php");
|
||||
ob_start();
|
||||
ob_implicit_flush(0);
|
||||
header("last-modified: " . gmdate("D, d M Y H:i:s",mktime(0,0,0,15,2,2004)) . " GMT");
|
||||
header('Content-type: text/javascript');
|
||||
|
||||
$tp = e107::getParser();
|
||||
$json = $tp->toJSON(e107::getJs()->getSettings());
|
||||
|
||||
$js = '$(document).ready(function() {';
|
||||
$js .= "var e107 = e107 || {'settings': {}, 'behaviors': {}};\n";
|
||||
$js .= "jQuery.extend(e107.settings, " . $json . ");\n";
|
||||
$js .= '});';
|
||||
|
||||
header ('ETag: "' . md5($js).'"' );
|
||||
echo $js;
|
||||
echo_gzipped_page();
|
@@ -385,7 +385,7 @@ function preview_image(src_val,img_path, not_found)
|
||||
|
||||
|
||||
//-->";
|
||||
header ('ETag: "' . md5($text).'"' );
|
||||
header ('ETag: "' . md5($js).'"' );
|
||||
echo $js;
|
||||
echo_gzipped_page();
|
||||
?>
|
Reference in New Issue
Block a user