introduce theme model and use it in jsscuttle. rest will follow
This commit is contained in:
parent
85d201b0ad
commit
e01c813101
5 changed files with 118 additions and 12 deletions
13
build.xml
13
build.xml
|
@ -121,18 +121,19 @@
|
||||||
|
|
||||||
<replacement
|
<replacement
|
||||||
path="src/SemanticScuttle/header.php"
|
path="src/SemanticScuttle/header.php"
|
||||||
type="pear-config"
|
type="pear-config" from="@data_dir@" to="data_dir"
|
||||||
from="@data_dir@" to="data_dir"
|
/>
|
||||||
|
<replacement
|
||||||
|
path="src/SemanticScuttle/header.php"
|
||||||
|
type="pear-config" from="@www_dir@" to="www_dir"
|
||||||
/>
|
/>
|
||||||
<replacement
|
<replacement
|
||||||
path="www/www-header.php"
|
path="www/www-header.php"
|
||||||
type="pear-config"
|
type="pear-config" from="@data_dir@" to="data_dir"
|
||||||
from="@data_dir@" to="data_dir"
|
|
||||||
/>
|
/>
|
||||||
<replacement
|
<replacement
|
||||||
path="tests/prepare.php"
|
path="tests/prepare.php"
|
||||||
type="pear-config"
|
type="pear-config" from="@data_dir@" to="data_dir"
|
||||||
from="@data_dir@" to="data_dir"
|
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<changelog version="0.97" date="2010-06-09" license="GPL">
|
<changelog version="0.97" date="2010-06-09" license="GPL">
|
||||||
|
|
97
src/SemanticScuttle/Model/Theme.php
Normal file
97
src/SemanticScuttle/Model/Theme.php
Normal file
|
@ -0,0 +1,97 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* SemanticScuttle - your social bookmark manager.
|
||||||
|
*
|
||||||
|
* PHP version 5.
|
||||||
|
*
|
||||||
|
* @category Bookmarking
|
||||||
|
* @package SemanticScuttle
|
||||||
|
* @author Christian Weiske <cweiske@cweiske.de>
|
||||||
|
* @license AGPL v3 or later http://www.gnu.org/licenses/agpl.html
|
||||||
|
* @link http://sourceforge.net/projects/semanticscuttle
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A theme, the visual representation of SemanticScuttle.
|
||||||
|
*
|
||||||
|
* @category Bookmarking
|
||||||
|
* @package SemanticScuttle
|
||||||
|
* @author Christian Weiske <cweiske@cweiske.de>
|
||||||
|
* @license AGPL v3 or later http://www.gnu.org/licenses/agpl.html
|
||||||
|
* @link http://sourceforge.net/projects/semanticscuttle
|
||||||
|
*/
|
||||||
|
class SemanticScuttle_Model_Theme
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Theme name. Also the path part of template and resource files
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $name = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Local path to the www themes directory.
|
||||||
|
* Needs to have a trailing slash.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $wwwThemeDir = null;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new theme instance.
|
||||||
|
*
|
||||||
|
* @param string $name Theme name "data/templates/(*)/"
|
||||||
|
*/
|
||||||
|
public function __construct($name = 'default')
|
||||||
|
{
|
||||||
|
$this->name = $name;
|
||||||
|
$this->wwwThemeDir = $GLOBALS['wwwdir'] . '/themes/';
|
||||||
|
//TODO: implement theme hierarchies with parent fallback
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the URL path to a resource file (www/themes/$name/$file).
|
||||||
|
* Automatically falls back to the parent theme if the file does not exist
|
||||||
|
* in the theme.
|
||||||
|
*
|
||||||
|
* Must always be used when adding i.e. images to the output.
|
||||||
|
*
|
||||||
|
* @param string $file File name to find the path for
|
||||||
|
*
|
||||||
|
* @return string Full path
|
||||||
|
*/
|
||||||
|
public function resource($file)
|
||||||
|
{
|
||||||
|
$themeFile = $this->wwwThemeDir . $this->name . '/' . $file;
|
||||||
|
if (file_exists($themeFile)) {
|
||||||
|
return ROOT . 'themes/' . $this->name . '/' . $file;
|
||||||
|
}
|
||||||
|
|
||||||
|
$defaultFile = $this->wwwThemeDir . 'default/' . $file;
|
||||||
|
if (file_exists($defaultFile)) {
|
||||||
|
return ROOT . 'themes/default/' . $file;
|
||||||
|
}
|
||||||
|
|
||||||
|
//file does not exist. fall back to the theme file
|
||||||
|
// to guide the theme author a bit.
|
||||||
|
// TODO: logging. in admin mode, there should be a message
|
||||||
|
return ROOT . 'themes/' . $this->name . '/' . $file;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the theme name.
|
||||||
|
*
|
||||||
|
* @return string Theme name
|
||||||
|
*/
|
||||||
|
public function getName()
|
||||||
|
{
|
||||||
|
return $this->name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
|
@ -14,6 +14,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
require_once 'SemanticScuttle/Model/Template.php';
|
require_once 'SemanticScuttle/Model/Template.php';
|
||||||
|
require_once 'SemanticScuttle/Model/Theme.php';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* SemanticScuttle template service.
|
* SemanticScuttle template service.
|
||||||
|
@ -40,9 +41,9 @@ class SemanticScuttle_Service_Template extends SemanticScuttle_Service
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The template theme to use.
|
* The template theme to use.
|
||||||
* Set in constructor from $GLOBALS['theme']
|
* Set in constructor based on $GLOBALS['theme']
|
||||||
*
|
*
|
||||||
* @var string
|
* @var SemanticScuttle_Model_Theme
|
||||||
*/
|
*/
|
||||||
protected $theme;
|
protected $theme;
|
||||||
|
|
||||||
|
@ -72,7 +73,7 @@ class SemanticScuttle_Service_Template extends SemanticScuttle_Service
|
||||||
protected function __construct()
|
protected function __construct()
|
||||||
{
|
{
|
||||||
$this->basedir = $GLOBALS['TEMPLATES_DIR'];
|
$this->basedir = $GLOBALS['TEMPLATES_DIR'];
|
||||||
$this->theme = $GLOBALS['theme'];
|
$this->theme = new SemanticScuttle_Model_Theme($GLOBALS['theme']);
|
||||||
//FIXME: verify the theme exists
|
//FIXME: verify the theme exists
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -84,6 +85,8 @@ class SemanticScuttle_Service_Template extends SemanticScuttle_Service
|
||||||
* @param string $template Template filename relative
|
* @param string $template Template filename relative
|
||||||
* to template dir
|
* to template dir
|
||||||
* @param array $vars Array of template variables.
|
* @param array $vars Array of template variables.
|
||||||
|
* The current theme object will be added
|
||||||
|
* automatically with name "theme".
|
||||||
*
|
*
|
||||||
* @return SemanticScuttle_Model_Template Template object
|
* @return SemanticScuttle_Model_Template Template object
|
||||||
*/
|
*/
|
||||||
|
@ -95,12 +98,13 @@ class SemanticScuttle_Service_Template extends SemanticScuttle_Service
|
||||||
|
|
||||||
$oldIncPath = get_include_path();
|
$oldIncPath = get_include_path();
|
||||||
set_include_path(
|
set_include_path(
|
||||||
$this->basedir . $this->theme
|
$this->basedir . $this->theme->getName()
|
||||||
. PATH_SEPARATOR . $this->basedir . 'default'
|
. PATH_SEPARATOR . $this->basedir . 'default'
|
||||||
//needed since services are instantiated in templates
|
//needed since services are instantiated in templates
|
||||||
. PATH_SEPARATOR . $oldIncPath
|
. PATH_SEPARATOR . $oldIncPath
|
||||||
);
|
);
|
||||||
|
|
||||||
|
$vars['theme'] = $this->theme;
|
||||||
$tpl = new SemanticScuttle_Model_Template(
|
$tpl = new SemanticScuttle_Model_Template(
|
||||||
$template, $vars, $this
|
$template, $vars, $this
|
||||||
);
|
);
|
||||||
|
|
|
@ -18,9 +18,12 @@
|
||||||
if ('@data_dir@' == '@' . 'data_dir@') {
|
if ('@data_dir@' == '@' . 'data_dir@') {
|
||||||
//non pear-install
|
//non pear-install
|
||||||
$datadir = dirname(__FILE__) . '/../../data/';
|
$datadir = dirname(__FILE__) . '/../../data/';
|
||||||
|
$wwwdir = dirname(__FILE__) . '/../../www/';
|
||||||
} else {
|
} else {
|
||||||
//pear installation; files are in include path
|
//pear installation; files are in include path
|
||||||
$datadir = '@data_dir@/SemanticScuttle/';
|
$datadir = '@data_dir@/SemanticScuttle/';
|
||||||
|
//FIXME: when you have multiple installations, the www_dir will be wrong
|
||||||
|
$wwwdir = '@www_dir@/SemanticScuttle/';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!file_exists($datadir . '/config.php')) {
|
if (!file_exists($datadir . '/config.php')) {
|
||||||
|
|
|
@ -3,6 +3,7 @@ $GLOBALS['saveInLastUrl'] = false;
|
||||||
$httpContentType = 'text/javascript';
|
$httpContentType = 'text/javascript';
|
||||||
require_once 'www-header.php';
|
require_once 'www-header.php';
|
||||||
require_once 'SemanticScuttle/functions.php';
|
require_once 'SemanticScuttle/functions.php';
|
||||||
|
$theme = new SemanticScuttle_Model_Theme($GLOBALS['theme']);
|
||||||
$player_root = ROOT .'includes/player/';
|
$player_root = ROOT .'includes/player/';
|
||||||
?>
|
?>
|
||||||
|
|
||||||
|
@ -62,7 +63,7 @@ function isAvailable(input, response){
|
||||||
username = username.trim();
|
username = username.trim();
|
||||||
var availability = document.getElementById("availability");
|
var availability = document.getElementById("availability");
|
||||||
if (username != '') {
|
if (username != '') {
|
||||||
usernameField.style.backgroundImage = 'url(<?php echo ROOT . 'themes/' . $GLOBALS['theme']; ?>/images/loading.gif)';
|
usernameField.style.backgroundImage = 'url(<?php echo $theme->resource('images/loading.gif'); ?>)';
|
||||||
if (response != '') {
|
if (response != '') {
|
||||||
usernameField.style.backgroundImage = 'none';
|
usernameField.style.backgroundImage = 'none';
|
||||||
if (response == 'true') {
|
if (response == 'true') {
|
||||||
|
@ -92,7 +93,7 @@ function useAddress(ele) {
|
||||||
function getTitle(input, response){
|
function getTitle(input, response){
|
||||||
var title = document.getElementById('titleField');
|
var title = document.getElementById('titleField');
|
||||||
if (title.value == '') {
|
if (title.value == '') {
|
||||||
title.style.backgroundImage = 'url(<?php echo ROOT . 'themes/' . $GLOBALS['theme']; ?>/images/loading.gif)';
|
title.style.backgroundImage = 'url(<?php echo $theme->resource('images/loading.gif');?>)';
|
||||||
if (response != null) {
|
if (response != null) {
|
||||||
title.style.backgroundImage = 'none';
|
title.style.backgroundImage = 'none';
|
||||||
title.value = response;
|
title.value = response;
|
||||||
|
|
Loading…
Reference in a new issue