Updated bundle extension, auto-versioning for CSS/JavaScript
This commit is contained in:
parent
04e4ee59d9
commit
d44419630a
2 changed files with 17 additions and 13 deletions
|
@ -4,7 +4,7 @@
|
|||
// This file may be used and distributed under the terms of the public license.
|
||||
|
||||
class YellowBundle {
|
||||
const VERSION = "0.8.8";
|
||||
const VERSION = "0.8.9";
|
||||
const TYPE = "feature";
|
||||
public $yellow; //access to API
|
||||
|
||||
|
@ -48,7 +48,7 @@ class YellowBundle {
|
|||
|
||||
// Normalise page head
|
||||
public function normaliseHead($text) {
|
||||
$dataMeta = $dataLink = $dataCss = $dataScript = $dataOther = array();
|
||||
$dataMeta = $dataLink = $dataCss = $dataScriptDefer = $dataScriptNow = $dataOther = array();
|
||||
foreach ($this->yellow->toolbox->getTextLines($text) as $line) {
|
||||
if (preg_match("/^<meta (.*?)>$/i", $line) || preg_match("/^<title>(.*?)<\/title>$/i", $line)) {
|
||||
array_push($dataMeta, $line);
|
||||
|
@ -60,9 +60,9 @@ class YellowBundle {
|
|||
}
|
||||
} elseif (preg_match("/^<script (.*?)src=\"([^\"]+)\"(.*?)><\/script>$/i", $line, $matches)) {
|
||||
if (preg_match("/\"defer\"/i", $line)) {
|
||||
if (is_null($dataScript[$matches[2]])) $dataScript[$matches[2]] = $line;
|
||||
if (is_null($dataScriptDefer[$matches[2]])) $dataScriptDefer[$matches[2]] = $line;
|
||||
} else {
|
||||
array_push($dataOther, $line);
|
||||
if (is_null($dataScriptNow[$matches[2]])) $dataScriptNow[$matches[2]] = $line;
|
||||
}
|
||||
} else {
|
||||
array_push($dataOther, $line);
|
||||
|
@ -70,14 +70,16 @@ class YellowBundle {
|
|||
}
|
||||
if (!defined("DEBUG") || DEBUG==0) {
|
||||
$dataCss = $this->processBundle($dataCss, "css");
|
||||
$dataScript = $this->processBundle($dataScript, "js");
|
||||
$dataScriptDefer = $this->processBundle($dataScriptDefer, "js", "defer");
|
||||
$dataScriptNow = $this->processBundle($dataScriptNow, "js");
|
||||
}
|
||||
$output = implode($dataMeta).implode($dataLink).implode($dataCss).implode($dataScript).implode($dataOther);
|
||||
$output = implode($dataMeta).implode($dataLink).implode($dataCss).
|
||||
implode($dataScriptDefer).implode($dataScriptNow).implode($dataOther);
|
||||
return $output;
|
||||
}
|
||||
|
||||
// Process bundle, create file on demand
|
||||
public function processBundle($data, $type) {
|
||||
public function processBundle($data, $type, $attribute = "") {
|
||||
$fileNames = array();
|
||||
$scheme = $this->yellow->system->get("coreServerScheme");
|
||||
$address = $this->yellow->system->get("coreServerAddress");
|
||||
|
@ -95,13 +97,15 @@ class YellowBundle {
|
|||
}
|
||||
}
|
||||
if (!empty($fileNames)) {
|
||||
$id = substru(md5(implode($fileNames).$base), 0, 10);
|
||||
$fileNameBundle = $this->yellow->system->get("coreResourceDir")."bundle-$id.min.$type";;
|
||||
$autoVersioning = intval($modified/(60*60*24));
|
||||
$id = substru(md5($autoVersioning.$base.implode($fileNames)), 0, 10);
|
||||
$fileNameBundle = $this->yellow->system->get("coreResourceDir")."bundle-$id.min.$type";
|
||||
$locationBundle = $base.$this->yellow->system->get("coreResourceLocation")."bundle-$id.min.$type";
|
||||
$rawDataAttribute = $attribute=="defer" ? "defer=\"defer\" " : "";
|
||||
if ($type=="css") {
|
||||
$data[$locationBundle] = "<link rel=\"stylesheet\" type=\"text/css\" media=\"all\" href=\"".htmlspecialchars($locationBundle)."\" />\n";
|
||||
} else {
|
||||
$data[$locationBundle] = "<script type=\"text/javascript\" defer=\"defer\" src=\"".htmlspecialchars($locationBundle)."\"></script>\n";
|
||||
$data[$locationBundle] = "<script type=\"text/javascript\" ${rawDataAttribute}src=\"".htmlspecialchars($locationBundle)."\"></script>\n";
|
||||
}
|
||||
if ($this->yellow->toolbox->getFileModified($fileNameBundle)!=$modified) {
|
||||
foreach ($fileNames as $fileName) {
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
// This file may be used and distributed under the terms of the public license.
|
||||
|
||||
class YellowEdit {
|
||||
const VERSION = "0.8.23";
|
||||
const VERSION = "0.8.24";
|
||||
const TYPE = "feature";
|
||||
public $yellow; //access to API
|
||||
public $response; //web response
|
||||
|
@ -73,8 +73,8 @@ class YellowEdit {
|
|||
$output = null;
|
||||
if ($name=="header" && $this->response->isActive()) {
|
||||
$extensionLocation = $this->yellow->system->get("coreServerBase").$this->yellow->system->get("coreExtensionLocation");
|
||||
$output = "<link rel=\"stylesheet\" type=\"text/css\" media=\"all\" data-bundle=\"exclude\" href=\"{$extensionLocation}edit.css\" />\n";
|
||||
$output .= "<script type=\"text/javascript\" data-bundle=\"exclude\" src=\"{$extensionLocation}edit.js\"></script>\n";
|
||||
$output = "<link rel=\"stylesheet\" type=\"text/css\" media=\"all\" href=\"{$extensionLocation}edit.css\" />\n";
|
||||
$output .= "<script type=\"text/javascript\" src=\"{$extensionLocation}edit.js\"></script>\n";
|
||||
$output .= "<script type=\"text/javascript\">\n";
|
||||
$output .= "// <![CDATA[\n";
|
||||
$output .= "yellow.page = ".json_encode($this->response->getPageData($page)).";\n";
|
||||
|
|
Loading…
Add table
Reference in a new issue