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,
// we'll need to load their display.css files as well in order.
- $theme = new Theme($mainTheme);
$baseThemes = $theme->getDeps();
foreach ($baseThemes as $baseTheme) {
$this->cssLink('css/display.css', $baseTheme, $media);
var $name = null;
var $dir = null;
var $path = null;
+ protected $metadata = null; // access via getMetadata() lazy-loader
+ protected $externals = null;
+ protected $deps = null;
/**
* Constructor
*/
function getDeps()
{
- $chain = $this->doGetDeps(array($this->name));
- array_pop($chain); // Drop us back off
- return $chain;
+ if ($this->deps === null) {
+ $chain = $this->doGetDeps(array($this->name));
+ array_pop($chain); // Drop us back off
+ $this->deps = $chain;
+ }
+ return $this->deps;
}
protected function doGetDeps($chain)
* @return associative array of strings
*/
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');
if (file_exists($iniFile)) {
}
}
+ /**
+ * 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
*