Merge pull request #816 from kinglozzer/798-custom-page-icons

Move CMSMain->generatePageIconsCss() into a LeftAndMain extension (fixes #798)
This commit is contained in:
Ingo Schommer 2013-09-25 12:54:01 -07:00
commit 9a4a5d909d
3 changed files with 58 additions and 41 deletions

3
_config/config.yml Normal file
View File

@ -0,0 +1,3 @@
LeftAndMain:
extensions:
- LeftAndMainPageIconsExtension

View File

@ -443,47 +443,6 @@ class CMSMain extends LeftAndMain implements CurrentPageIdentifier, PermissionPr
}
return $json;
}
/**
* Include CSS for page icons. We're not using the JSTree 'types' option
* because it causes too much performance overhead just to add some icons.
*
* @return String CSS
*/
public function generatePageIconsCss() {
$css = '';
$classes = ClassInfo::subclassesFor('SiteTree');
foreach($classes as $class) {
$obj = singleton($class);
$iconSpec = $obj->stat('icon');
if(!$iconSpec) continue;
// Legacy support: We no longer need separate icon definitions for folders etc.
$iconFile = (is_array($iconSpec)) ? $iconSpec[0] : $iconSpec;
// Legacy support: Add file extension if none exists
if(!pathinfo($iconFile, PATHINFO_EXTENSION)) $iconFile .= '-file.gif';
$iconPathInfo = pathinfo($iconFile);
// Base filename
$baseFilename = $iconPathInfo['dirname'] . '/' . $iconPathInfo['filename'];
$fileExtension = $iconPathInfo['extension'];
$selector = ".page-icon.class-$class, li.class-$class > a .jstree-pageicon";
if(Director::fileExists($iconFile)) {
$css .= "$selector { background: transparent url('$iconFile') 0 0 no-repeat; }\n";
} else {
// Support for more sophisticated rules, e.g. sprited icons
$css .= "$selector { $iconFile }\n";
}
}
return $css;
}
/**
* Populates an array of classes in the CMS

View File

@ -0,0 +1,55 @@
<?php
/**
* Extension to include custom page icons
*
* @package cms
* @subpackage controller
*/
class LeftAndMainPageIconsExtension extends Extension {
public function init() {
Requirements::customCSS($this->generatePageIconsCss());
}
/**
* Include CSS for page icons. We're not using the JSTree 'types' option
* because it causes too much performance overhead just to add some icons.
*
* @return String CSS
*/
public function generatePageIconsCss() {
$css = '';
$classes = ClassInfo::subclassesFor('SiteTree');
foreach($classes as $class) {
$obj = singleton($class);
$iconSpec = $obj->stat('icon');
if(!$iconSpec) continue;
// Legacy support: We no longer need separate icon definitions for folders etc.
$iconFile = (is_array($iconSpec)) ? $iconSpec[0] : $iconSpec;
// Legacy support: Add file extension if none exists
if(!pathinfo($iconFile, PATHINFO_EXTENSION)) $iconFile .= '-file.gif';
$iconPathInfo = pathinfo($iconFile);
// Base filename
$baseFilename = $iconPathInfo['dirname'] . '/' . $iconPathInfo['filename'];
$fileExtension = $iconPathInfo['extension'];
$selector = ".page-icon.class-$class, li.class-$class > a .jstree-pageicon";
if(Director::fileExists($iconFile)) {
$css .= "$selector { background: transparent url('$iconFile') 0 0 no-repeat; }\n";
} else {
// Support for more sophisticated rules, e.g. sprited icons
$css .= "$selector { $iconFile }\n";
}
}
return $css;
}
}