Allow theme.ini to specify external CSS URLs, such as Google Font API loaders.
Example theme.ini: external="http://fonts.googleapis.com/css?family=Lato:100,100italic,300,300italic,400,400italic,700,700italic,900,900italic" include=rebase Notes: * URLs must be quoted in the .ini file or the .ini file parser explodes! * To do multiples, list as external[] instead of external. * If there's an included base theme, any externals it lists will be included first. * All externals are loaded before any local styles.
This commit is contained in:
parent
7f42e48631
commit
0a19949f6d
@ -267,9 +267,16 @@ class Action extends HTMLOutputter // lawsuit
|
|||||||
|
|
||||||
function primaryCssLink($mainTheme=null, $media=null)
|
function primaryCssLink($mainTheme=null, $media=null)
|
||||||
{
|
{
|
||||||
|
$theme = new Theme($mainTheme);
|
||||||
|
|
||||||
|
// Some themes may have external stylesheets, such as using the
|
||||||
|
// Google Font APIs to load webfonts.
|
||||||
|
foreach ($theme->getExternals() as $url) {
|
||||||
|
$this->cssLink($url, $mainTheme, $media);
|
||||||
|
}
|
||||||
|
|
||||||
// If the currently-selected theme has dependencies on other themes,
|
// If the currently-selected theme has dependencies on other themes,
|
||||||
// we'll need to load their display.css files as well in order.
|
// we'll need to load their display.css files as well in order.
|
||||||
$theme = new Theme($mainTheme);
|
|
||||||
$baseThemes = $theme->getDeps();
|
$baseThemes = $theme->getDeps();
|
||||||
foreach ($baseThemes as $baseTheme) {
|
foreach ($baseThemes as $baseTheme) {
|
||||||
$this->cssLink('css/display.css', $baseTheme, $media);
|
$this->cssLink('css/display.css', $baseTheme, $media);
|
||||||
|
@ -56,6 +56,9 @@ class Theme
|
|||||||
var $name = null;
|
var $name = null;
|
||||||
var $dir = null;
|
var $dir = null;
|
||||||
var $path = null;
|
var $path = null;
|
||||||
|
protected $metadata = null; // access via getMetadata() lazy-loader
|
||||||
|
protected $externals = null;
|
||||||
|
protected $deps = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
@ -199,9 +202,12 @@ class Theme
|
|||||||
*/
|
*/
|
||||||
function getDeps()
|
function getDeps()
|
||||||
{
|
{
|
||||||
$chain = $this->doGetDeps(array($this->name));
|
if ($this->deps === null) {
|
||||||
array_pop($chain); // Drop us back off
|
$chain = $this->doGetDeps(array($this->name));
|
||||||
return $chain;
|
array_pop($chain); // Drop us back off
|
||||||
|
$this->deps = $chain;
|
||||||
|
}
|
||||||
|
return $this->deps;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function doGetDeps($chain)
|
protected function doGetDeps($chain)
|
||||||
@ -233,6 +239,20 @@ class Theme
|
|||||||
* @return associative array of strings
|
* @return associative array of strings
|
||||||
*/
|
*/
|
||||||
function getMetadata()
|
function getMetadata()
|
||||||
|
{
|
||||||
|
if ($this->metadata == null) {
|
||||||
|
$this->metadata = $this->doGetMetadata();
|
||||||
|
}
|
||||||
|
return $this->metadata;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Pull data from the theme's theme.ini file.
|
||||||
|
* @fixme calling getFile will fall back to default theme, this may be unsafe.
|
||||||
|
*
|
||||||
|
* @return associative array of strings
|
||||||
|
*/
|
||||||
|
private function doGetMetadata()
|
||||||
{
|
{
|
||||||
$iniFile = $this->getFile('theme.ini');
|
$iniFile = $this->getFile('theme.ini');
|
||||||
if (file_exists($iniFile)) {
|
if (file_exists($iniFile)) {
|
||||||
@ -242,6 +262,32 @@ class Theme
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get list of any external URLs required by this theme and any
|
||||||
|
* dependencies. These are lazy-loaded from theme.ini.
|
||||||
|
*
|
||||||
|
* @return array of URL strings
|
||||||
|
*/
|
||||||
|
function getExternals()
|
||||||
|
{
|
||||||
|
if ($this->externals == null) {
|
||||||
|
$data = $this->getMetadata();
|
||||||
|
if (!empty($data['external'])) {
|
||||||
|
$ext = (array)$data['external'];
|
||||||
|
} else {
|
||||||
|
$ext = array();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($data['include'])) {
|
||||||
|
$theme = new Theme($data['include']);
|
||||||
|
$ext = array_merge($ext, $theme->getExternals());
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->externals = array_unique($ext);
|
||||||
|
}
|
||||||
|
return $this->externals;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the full path of a file in a theme dir based on its relative name
|
* Gets the full path of a file in a theme dir based on its relative name
|
||||||
*
|
*
|
||||||
|
Loading…
Reference in New Issue
Block a user