mirror of
https://github.com/e107inc/e107.git
synced 2025-07-27 18:00:30 +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 "<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";
|
echo " SyncWithServerTime('', '{$_serverPath}', '{$_serverDomain}');\n";
|
||||||
//tdOffset disabled as it can't live together with HTTP_IF_NONE_MATCH (page load speed)
|
//tdOffset disabled as it can't live together with HTTP_IF_NONE_MATCH (page load speed)
|
||||||
//echo " SyncWithServerTime('{$_serverTime}', '{$_serverPath}', '{$_serverDomain}');\n";
|
//echo " SyncWithServerTime('{$_serverTime}', '{$_serverPath}', '{$_serverDomain}');\n";
|
||||||
|
@@ -2529,6 +2529,8 @@ class e107
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
$jshandler = self::getJs();
|
$jshandler = self::getJs();
|
||||||
if(is_string($parm))
|
if(is_string($parm))
|
||||||
{
|
{
|
||||||
@@ -2546,11 +2548,11 @@ class e107
|
|||||||
// data is e.g. 'core/tabs.js'
|
// data is e.g. 'core/tabs.js'
|
||||||
if($zone !== null)
|
if($zone !== null)
|
||||||
{
|
{
|
||||||
$jshandler->requireCoreLib($data, $zone);
|
$jshandler->requireCoreLib($data, $zone, $parm);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$jshandler->requireCoreLib($data);
|
$jshandler->requireCoreLib($data, 2, $parm);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@@ -2636,11 +2638,11 @@ class e107
|
|||||||
}
|
}
|
||||||
if($zone !== null)
|
if($zone !== null)
|
||||||
{
|
{
|
||||||
$jshandler->requirePluginLib($type, $data, $zone);
|
$jshandler->requirePluginLib($type, $data, $zone, $parm);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$jshandler->requirePluginLib($type, $data);
|
$jshandler->requirePluginLib($type, $data, 5, $parm);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@@ -31,7 +31,7 @@ class e_jsmanager
|
|||||||
*/
|
*/
|
||||||
protected $_cache_list = array();
|
protected $_cache_list = array();
|
||||||
|
|
||||||
|
protected $_js_defer = false;
|
||||||
|
|
||||||
protected $_core_prefs = array();
|
protected $_core_prefs = array();
|
||||||
|
|
||||||
@@ -197,6 +197,7 @@ class e_jsmanager
|
|||||||
*/
|
*/
|
||||||
protected function __construct()
|
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)
|
* @param integer $zone 1-5 (see header.php)
|
||||||
* @return e_jsmanager
|
* @return e_jsmanager
|
||||||
*/
|
*/
|
||||||
public function requireCoreLib($file_path, $zone = 2)
|
public function requireCoreLib($file_path, $zone = 2, $opts=[])
|
||||||
{
|
{
|
||||||
if(is_array($file_path))
|
if(is_array($file_path))
|
||||||
{
|
{
|
||||||
foreach ($file_path as $fpath => $z)
|
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;
|
return $this;
|
||||||
}
|
}
|
||||||
$this->tryHeaderFile('{e_WEB_JS}'.trim($file_path, '/'), $zone);
|
$this->tryHeaderFile('{e_WEB_JS}'.trim($file_path, '/'), $zone, $opts);
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -506,17 +507,17 @@ class e_jsmanager
|
|||||||
* @param integer $zone 1-5 (see header.php)
|
* @param integer $zone 1-5 (see header.php)
|
||||||
* @return e_jsmanager
|
* @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))
|
if(is_array($file_path))
|
||||||
{
|
{
|
||||||
foreach ($file_path as $fpath => $z)
|
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;
|
return $this;
|
||||||
}
|
}
|
||||||
$this->tryHeaderFile('{e_PLUGIN}'.$plugname.'/'.trim($file_path, '/'), $zone);
|
$this->tryHeaderFile('{e_PLUGIN}'.$plugname.'/'.trim($file_path, '/'), $zone, $opts);
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -550,9 +551,9 @@ class e_jsmanager
|
|||||||
* @param integer $zone 1-5 (see header.php)
|
* @param integer $zone 1-5 (see header.php)
|
||||||
* @return e_jsmanager
|
* @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;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -563,9 +564,9 @@ class e_jsmanager
|
|||||||
* @param integer $zone 1-5 (see header.php)
|
* @param integer $zone 1-5 (see header.php)
|
||||||
* @return e_jsmanager
|
* @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;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -592,9 +593,9 @@ class e_jsmanager
|
|||||||
* @param string $post
|
* @param string $post
|
||||||
* @return e_jsmanager
|
* @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;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -606,11 +607,11 @@ class e_jsmanager
|
|||||||
* @param integer $zone 1-5 (see header.php and footer.php)
|
* @param integer $zone 1-5 (see header.php and footer.php)
|
||||||
* @return e_jsmanager
|
* @return e_jsmanager
|
||||||
*/
|
*/
|
||||||
public function tryHeaderFile($file_path, $zone = 5)
|
public function tryHeaderFile($file_path, $zone = 5, $opts=[])
|
||||||
{
|
{
|
||||||
if(!defined('HEADER_INIT'))
|
if(!defined('HEADER_INIT'))
|
||||||
{
|
{
|
||||||
$this->headerFile($file_path, $zone);
|
$this->headerFile($file_path, $zone, null, null, $opts);
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1241,12 +1242,23 @@ class e_jsmanager
|
|||||||
switch($mod)
|
switch($mod)
|
||||||
{
|
{
|
||||||
case 'settings':
|
case 'settings':
|
||||||
|
|
||||||
|
|
||||||
|
if($this->_js_defer)
|
||||||
|
{
|
||||||
|
echo "<script src='".e_WEB_ABS."js/core/settings.jquery.php' defer></script>\n";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
$tp = e107::getParser();
|
$tp = e107::getParser();
|
||||||
$json = $tp->toJSON($this->_e_js_settings);
|
$json = $tp->toJSON($this->_e_js_settings);
|
||||||
echo "<script>\n";
|
echo "<script>\n";
|
||||||
|
echo '$(document).ready(function() {';
|
||||||
echo "var e107 = e107 || {'settings': {}, 'behaviors': {}};\n";
|
echo "var e107 = e107 || {'settings': {}, 'behaviors': {}};\n";
|
||||||
echo "jQuery.extend(e107.settings, " . $json . ");\n";
|
echo "jQuery.extend(e107.settings, " . $json . ");\n";
|
||||||
|
echo '});';
|
||||||
echo "</script>\n";
|
echo "</script>\n";
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'framework': // CDN frameworks - rendered before consolidation script (if enabled)
|
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 = $tp->replaceConstants($path, 'abs').'?external=1'; // &'.$this->getCacheId();
|
||||||
$path = $this->url($path);
|
$path = $this->url($path);
|
||||||
|
$defer = ($this->_js_defer) ? ' defer' : '';
|
||||||
echo $pre.'<script src="'.$path.'"></script>'.$post;
|
echo $pre.'<script src="'.$path.'"'.$defer.'></script>'.$post;
|
||||||
echo "\n";
|
echo "\n";
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -1583,8 +1595,8 @@ class e_jsmanager
|
|||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
$defer = ($this->_js_defer && strpos($inline,'defer')===false) ? ' defer' : '';
|
||||||
echo $pre.'<script src="'.$path.'"'.$inline.'></script>'.$post;
|
echo $pre.'<script src="'.$path.'"'.$inline.$defer.'></script>'.$post;
|
||||||
echo "\n";
|
echo "\n";
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -1759,7 +1771,8 @@ class e_jsmanager
|
|||||||
|
|
||||||
if($type == 'js')
|
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
|
else
|
||||||
{
|
{
|
||||||
@@ -1979,7 +1992,9 @@ class e_jsmanager
|
|||||||
}
|
}
|
||||||
echo '<script>';
|
echo '<script>';
|
||||||
echo "\n//<![CDATA[\n";
|
echo "\n//<![CDATA[\n";
|
||||||
|
echo ($this->_js_defer) ? "window.onload = function(){\n" : '';
|
||||||
echo implode("\n\n", $content_array);
|
echo implode("\n\n", $content_array);
|
||||||
|
echo ($this->_js_defer) ? "};\n" : '';
|
||||||
echo "\n//]]>\n";
|
echo "\n//]]>\n";
|
||||||
echo '</script>';
|
echo '</script>';
|
||||||
echo "\n";
|
echo "\n";
|
||||||
@@ -2054,6 +2069,12 @@ class e_jsmanager
|
|||||||
return ($this->isInAdmin() ? 'admin' : 'front');
|
return ($this->isInAdmin() ? 'admin' : 'front');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getSettings()
|
||||||
|
{
|
||||||
|
return $this->_e_js_settings;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get current theme name
|
* Get current theme name
|
||||||
*
|
*
|
||||||
|
@@ -1491,8 +1491,7 @@ $(document).ready(function()
|
|||||||
// Legacy Stuff to be converted.
|
// Legacy Stuff to be converted.
|
||||||
// BC Expandit() function
|
// 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) {
|
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){
|
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 $js;
|
||||||
echo_gzipped_page();
|
echo_gzipped_page();
|
||||||
?>
|
?>
|
Reference in New Issue
Block a user