Remove module asset support

This commit is contained in:
Johannes Meyer 2022-01-31 16:01:01 +01:00
parent 6b4f4d388a
commit ffaf6e5f04
5 changed files with 6 additions and 283 deletions

View File

@ -3,6 +3,12 @@
Specific version upgrades are described below. Please note that upgrades are incremental. An upgrade from 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. 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 ## Upgrading to Icinga Web 2 2.9.1
**Database Schema** **Database Schema**

View File

@ -18,8 +18,6 @@ use Icinga\Web\Widget;
use ipl\I18n\GettextTranslator; use ipl\I18n\GettextTranslator;
use ipl\I18n\StaticTranslator; use ipl\I18n\StaticTranslator;
use ipl\I18n\Translation; use ipl\I18n\Translation;
use RecursiveDirectoryIterator;
use RecursiveIteratorIterator;
use Zend_Controller_Router_Route; use Zend_Controller_Router_Route;
use Zend_Controller_Router_Route_Abstract; use Zend_Controller_Router_Route_Abstract;
use Zend_Controller_Router_Route_Regex; use Zend_Controller_Router_Route_Regex;
@ -50,13 +48,6 @@ class Module
*/ */
private $basedir; private $basedir;
/**
* Directory for assets
*
* @var string
*/
private $assetDir;
/** /**
* Directory for styles * Directory for styles
* *
@ -204,34 +195,6 @@ class Module
*/ */
protected $jsFiles = array(); 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 * Routes to add to the route chain
* *
@ -295,7 +258,6 @@ class Module
$this->app = $app; $this->app = $app;
$this->name = $name; $this->name = $name;
$this->basedir = $basedir; $this->basedir = $basedir;
$this->assetDir = $basedir . '/asset';
$this->cssdir = $basedir . '/public/css'; $this->cssdir = $basedir . '/public/css';
$this->jsdir = $basedir . '/public/js'; $this->jsdir = $basedir . '/public/js';
$this->libdir = $basedir . '/library'; $this->libdir = $basedir . '/library';
@ -487,7 +449,6 @@ class Module
return false; return false;
} }
$this->registerWebIntegration(); $this->registerWebIntegration();
$this->registerAssets();
$this->registered = true; $this->registered = true;
return true; return true;
@ -537,164 +498,6 @@ class Module
return $manager->getModule($name); 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 * Provide an additional CSS/LESS file
* *
@ -1081,16 +884,6 @@ class Module
return $this->jsdir; 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 * Get the module's controller directory
* *
@ -1442,40 +1235,6 @@ class Module
return $this; 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 * Bind text domain for i18n
* *

View File

@ -118,12 +118,6 @@ class JavaScript
} }
} }
} }
$assetDir = $module->getJsAssetDir();
foreach ($module->getJsAssets() as $path) {
$moduleFiles[$name][$assetDir][] = $path;
$files[] = $path;
}
} }
$request = Icinga::app()->getRequest(); $request = Icinga::app()->getRequest();

View File

@ -35,13 +35,6 @@ class LessCompiler
*/ */
protected $moduleLessFiles = array(); protected $moduleLessFiles = array();
/**
* Array of module names indexed by LESS asset paths
*
* @var array
*/
protected $moduleRequires = [];
/** /**
* LESS source * LESS source
* *
@ -103,20 +96,6 @@ class LessCompiler
return $this; 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 * 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, $moduleLessFiles);
} }
$lessFiles = array_merge($lessFiles, array_keys($this->moduleRequires));
if ($this->theme !== null) { if ($this->theme !== null) {
$lessFiles[] = $this->theme; $lessFiles[] = $this->theme;
} }
@ -204,13 +181,6 @@ class LessCompiler
foreach ($this->moduleLessFiles as $moduleName => $moduleLessFiles) { foreach ($this->moduleLessFiles as $moduleName => $moduleLessFiles) {
$moduleCss .= '.icinga-module.module-' . $moduleName . ' {'; $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) { foreach ($moduleLessFiles as $moduleLessFile) {
$content = file_get_contents($moduleLessFile); $content = file_get_contents($moduleLessFile);

View File

@ -146,12 +146,6 @@ class StyleSheet
$this->lessCompiler->addModuleLessFile($moduleName, $lessFilePath); $this->lessCompiler->addModuleLessFile($moduleName, $lessFilePath);
} }
} }
if ($module->requiresCss()) {
foreach ($module->getCssRequires() as $lessFilePath) {
$this->lessCompiler->addModuleRequire($moduleName, $lessFilePath);
}
}
} }
$themingConfig = $this->app->getConfig()->getSection('themes'); $themingConfig = $this->app->getConfig()->getSection('themes');