Remove module asset support
This commit is contained in:
parent
6b4f4d388a
commit
ffaf6e5f04
|
@ -3,6 +3,12 @@
|
|||
Specific version upgrades are described below. Please note that upgrades are incremental. An upgrade from
|
||||
v2.6 to v2.8 requires to follow the instructions for v2.7 too.
|
||||
|
||||
## Upgrading to Icinga Web 2 2.10.x
|
||||
|
||||
**Framework changes affecting third-party code**
|
||||
|
||||
* Asset support for modules (#3961) introduced with v2.8 has now been removed.
|
||||
|
||||
## Upgrading to Icinga Web 2 2.9.1
|
||||
|
||||
**Database Schema**
|
||||
|
|
|
@ -18,8 +18,6 @@ use Icinga\Web\Widget;
|
|||
use ipl\I18n\GettextTranslator;
|
||||
use ipl\I18n\StaticTranslator;
|
||||
use ipl\I18n\Translation;
|
||||
use RecursiveDirectoryIterator;
|
||||
use RecursiveIteratorIterator;
|
||||
use Zend_Controller_Router_Route;
|
||||
use Zend_Controller_Router_Route_Abstract;
|
||||
use Zend_Controller_Router_Route_Regex;
|
||||
|
@ -50,13 +48,6 @@ class Module
|
|||
*/
|
||||
private $basedir;
|
||||
|
||||
/**
|
||||
* Directory for assets
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private $assetDir;
|
||||
|
||||
/**
|
||||
* Directory for styles
|
||||
*
|
||||
|
@ -204,34 +195,6 @@ class Module
|
|||
*/
|
||||
protected $jsFiles = array();
|
||||
|
||||
/**
|
||||
* Globally provided CSS assets
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $cssAssets = [];
|
||||
|
||||
/**
|
||||
* Globally provided JS assets
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $jsAssets = [];
|
||||
|
||||
/**
|
||||
* Required CSS assets
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $cssRequires = [];
|
||||
|
||||
/**
|
||||
* Required JS assets
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $jsRequires = [];
|
||||
|
||||
/**
|
||||
* Routes to add to the route chain
|
||||
*
|
||||
|
@ -295,7 +258,6 @@ class Module
|
|||
$this->app = $app;
|
||||
$this->name = $name;
|
||||
$this->basedir = $basedir;
|
||||
$this->assetDir = $basedir . '/asset';
|
||||
$this->cssdir = $basedir . '/public/css';
|
||||
$this->jsdir = $basedir . '/public/js';
|
||||
$this->libdir = $basedir . '/library';
|
||||
|
@ -487,7 +449,6 @@ class Module
|
|||
return false;
|
||||
}
|
||||
$this->registerWebIntegration();
|
||||
$this->registerAssets();
|
||||
$this->registered = true;
|
||||
|
||||
return true;
|
||||
|
@ -537,164 +498,6 @@ class Module
|
|||
return $manager->getModule($name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Provide a static CSS asset which can be required by other modules
|
||||
*
|
||||
* @param string $path The path, relative to the module's base
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
protected function provideCssAsset($path)
|
||||
{
|
||||
$fullPath = join(DIRECTORY_SEPARATOR, [$this->basedir, $path]);
|
||||
$this->cssAssets[] = $fullPath;
|
||||
$this->cssRequires[] = $fullPath; // A module should not have to require its own assets
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the CSS assets provided by this module
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getCssAssets()
|
||||
{
|
||||
return $this->cssAssets;
|
||||
}
|
||||
|
||||
/**
|
||||
* Require CSS from a different module
|
||||
*
|
||||
* @param string $path The file's path, relative to the module's asset or base directory
|
||||
* @param string $from The module's name
|
||||
*
|
||||
* @deprecated Deprecated with v2.9, don't use and depend on a library instead
|
||||
* @return $this
|
||||
*/
|
||||
protected function requireCssFile($path, $from)
|
||||
{
|
||||
$module = self::get($from);
|
||||
$cssAssetDir = join(DIRECTORY_SEPARATOR, [$module->assetDir, 'css']);
|
||||
foreach ($module->getCssAssets() as $assetPath) {
|
||||
if (substr($assetPath, 0, strlen($cssAssetDir)) === $cssAssetDir) {
|
||||
$relativePath = ltrim(substr($assetPath, strlen($cssAssetDir)), '/\\');
|
||||
} else {
|
||||
$relativePath = ltrim(substr($assetPath, strlen($module->basedir)), '/\\');
|
||||
}
|
||||
|
||||
if ($path === $relativePath) {
|
||||
$this->cssRequires[] = $assetPath;
|
||||
break; // Exact match, won't match again..
|
||||
} elseif (fnmatch($path, $relativePath)) {
|
||||
$this->cssRequires[] = $assetPath;
|
||||
}
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether this module requires CSS from a different module
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function requiresCss()
|
||||
{
|
||||
$this->launchConfigScript();
|
||||
return ! empty($this->cssRequires);
|
||||
}
|
||||
|
||||
/**
|
||||
* List the CSS assets required by this module
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getCssRequires()
|
||||
{
|
||||
$this->launchConfigScript();
|
||||
return $this->cssRequires;
|
||||
}
|
||||
|
||||
/**
|
||||
* Provide a static Javascript asset which can be required by other modules
|
||||
*
|
||||
* @param string $path The path, relative to the module's base
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
protected function provideJsAsset($path)
|
||||
{
|
||||
$fullPath = join(DIRECTORY_SEPARATOR, [$this->basedir, $path]);
|
||||
$this->jsAssets[] = $fullPath;
|
||||
$this->jsRequires[] = $fullPath; // A module should not have to require its own assets
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Javascript assets provided by this module
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getJsAssets()
|
||||
{
|
||||
return $this->jsAssets;
|
||||
}
|
||||
|
||||
/**
|
||||
* Require Javascript from a different module
|
||||
*
|
||||
* @param string $path The file's path, relative to the module's asset or base directory
|
||||
* @param string $from The module's name
|
||||
*
|
||||
* @deprecated Deprecated with v2.9, don't use and depend on a library instead
|
||||
* @return $this
|
||||
*/
|
||||
protected function requireJsFile($path, $from)
|
||||
{
|
||||
$module = self::get($from);
|
||||
$jsAssetDir = join(DIRECTORY_SEPARATOR, [$module->assetDir, 'js']);
|
||||
foreach ($module->getJsAssets() as $assetPath) {
|
||||
if (substr($assetPath, 0, strlen($jsAssetDir)) === $jsAssetDir) {
|
||||
$relativePath = ltrim(substr($assetPath, strlen($jsAssetDir)), '/\\');
|
||||
} else {
|
||||
$relativePath = ltrim(substr($assetPath, strlen($module->basedir)), '/\\');
|
||||
}
|
||||
|
||||
if ($path === $relativePath) {
|
||||
$this->jsRequires[] = $assetPath;
|
||||
break; // Exact match, won't match again..
|
||||
} elseif (fnmatch($path, $relativePath)) {
|
||||
$this->jsRequires[] = $assetPath;
|
||||
}
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether this module requires Javascript from a different module
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function requiresJs()
|
||||
{
|
||||
$this->launchConfigScript();
|
||||
return ! empty($this->jsRequires);
|
||||
}
|
||||
|
||||
/**
|
||||
* List the Javascript assets required by this module
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getJsRequires()
|
||||
{
|
||||
$this->launchConfigScript();
|
||||
return $this->jsRequires;
|
||||
}
|
||||
|
||||
/**
|
||||
* Provide an additional CSS/LESS file
|
||||
*
|
||||
|
@ -1081,16 +884,6 @@ class Module
|
|||
return $this->jsdir;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the module's JS asset directory
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getJsAssetDir()
|
||||
{
|
||||
return join(DIRECTORY_SEPARATOR, [$this->assetDir, 'js']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the module's controller directory
|
||||
*
|
||||
|
@ -1442,40 +1235,6 @@ class Module
|
|||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Register this module's assets
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
protected function registerAssets()
|
||||
{
|
||||
if (! is_dir($this->assetDir)) {
|
||||
return $this;
|
||||
}
|
||||
|
||||
$listAssets = function ($type) {
|
||||
$dir = join(DIRECTORY_SEPARATOR, [$this->assetDir, $type]);
|
||||
if (! is_dir($dir)) {
|
||||
return [];
|
||||
}
|
||||
|
||||
return new RecursiveIteratorIterator(new RecursiveDirectoryIterator(
|
||||
$dir,
|
||||
RecursiveDirectoryIterator::CURRENT_AS_PATHNAME | RecursiveDirectoryIterator::SKIP_DOTS
|
||||
));
|
||||
};
|
||||
|
||||
foreach ($listAssets('css') as $assetPath) {
|
||||
$this->provideCssAsset(ltrim(substr($assetPath, strlen($this->basedir)), '/\\'));
|
||||
}
|
||||
|
||||
foreach ($listAssets('js') as $assetPath) {
|
||||
$this->provideJsAsset(ltrim(substr($assetPath, strlen($this->basedir)), '/\\'));
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Bind text domain for i18n
|
||||
*
|
||||
|
|
|
@ -118,12 +118,6 @@ class JavaScript
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
$assetDir = $module->getJsAssetDir();
|
||||
foreach ($module->getJsAssets() as $path) {
|
||||
$moduleFiles[$name][$assetDir][] = $path;
|
||||
$files[] = $path;
|
||||
}
|
||||
}
|
||||
|
||||
$request = Icinga::app()->getRequest();
|
||||
|
|
|
@ -35,13 +35,6 @@ class LessCompiler
|
|||
*/
|
||||
protected $moduleLessFiles = array();
|
||||
|
||||
/**
|
||||
* Array of module names indexed by LESS asset paths
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $moduleRequires = [];
|
||||
|
||||
/**
|
||||
* LESS source
|
||||
*
|
||||
|
@ -103,20 +96,6 @@ class LessCompiler
|
|||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a LESS asset requirement
|
||||
*
|
||||
* @param string $moduleName
|
||||
* @param string $lessFile
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function addModuleRequire($moduleName, $lessFile)
|
||||
{
|
||||
$this->moduleRequires[$lessFile][] = $moduleName;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the list of LESS files added to the compiler
|
||||
*
|
||||
|
@ -130,8 +109,6 @@ class LessCompiler
|
|||
$lessFiles = array_merge($lessFiles, $moduleLessFiles);
|
||||
}
|
||||
|
||||
$lessFiles = array_merge($lessFiles, array_keys($this->moduleRequires));
|
||||
|
||||
if ($this->theme !== null) {
|
||||
$lessFiles[] = $this->theme;
|
||||
}
|
||||
|
@ -204,13 +181,6 @@ class LessCompiler
|
|||
foreach ($this->moduleLessFiles as $moduleName => $moduleLessFiles) {
|
||||
$moduleCss .= '.icinga-module.module-' . $moduleName . ' {';
|
||||
|
||||
// TODO: Import these.
|
||||
foreach ($this->moduleRequires as $requiredFile => $modules) {
|
||||
if (in_array($moduleName, $modules, true)) {
|
||||
$moduleCss .= file_get_contents($requiredFile);
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($moduleLessFiles as $moduleLessFile) {
|
||||
$content = file_get_contents($moduleLessFile);
|
||||
|
||||
|
|
|
@ -146,12 +146,6 @@ class StyleSheet
|
|||
$this->lessCompiler->addModuleLessFile($moduleName, $lessFilePath);
|
||||
}
|
||||
}
|
||||
|
||||
if ($module->requiresCss()) {
|
||||
foreach ($module->getCssRequires() as $lessFilePath) {
|
||||
$this->lessCompiler->addModuleRequire($moduleName, $lessFilePath);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$themingConfig = $this->app->getConfig()->getSection('themes');
|
||||
|
|
Loading…
Reference in New Issue