new clientside image-name to url map: egw.image(_name, _app="phpgwapi")

eg. egw.image('favicon') returns '/egroupware/phpgwapi/templates/default/favicon.ico'
--> pondon to serverside common::image($app,$name) method
This commit is contained in:
Ralf Becker 2011-08-30 22:19:38 +00:00
parent dce02a03cb
commit ea7ad6318d
4 changed files with 90 additions and 0 deletions

45
phpgwapi/images.php Normal file
View File

@ -0,0 +1,45 @@
<?php
/**
* API: loading available images by application and image-name (without extension)
*
* Usage: /egroupware/phpgwapi/images.php?template=idots
*
* @link www.egroupware.org
* @author Ralf Becker <RalfBecker-AT-outdoor-training.de>
* @package phpgwapi
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @version $Id$
*/
$GLOBALS['egw_info'] = array(
'flags' => array(
'currentapp' => 'home',
'noheader' => true,
'nocachecontrol' => true,
)
);
include '../header.inc.php';
$image_map = common::image_map(preg_match('/^[a-z0-9_-]+$/i',$_GET['template']) ? $_GET['template'] : null);
// use an etag over the image mapp
$etag = '"'.md5(serialize($image_map)).'"';
// headers to allow caching
Header('Content-Type: text/javascript; charset=utf-8');
Header('Cache-Control: public, no-transform');
Header('Pragma: cache');
Header('ETag: '.$etag);
// if servers send a If-None-Match header, response with 304 Not Modified, if etag matches
if (isset($_SERVER['HTTP_IF_NONE_MATCH']) && $_SERVER['HTTP_IF_NONE_MATCH'] == $etag)
{
header("HTTP/1.1 304 Not Modified");
common::egw_exit();
}
echo 'egw.set_images('.json_encode($image_map).");\n";
// Content-Lenght header is important, otherwise browsers dont cache!
Header('Content-Length: '.ob_get_length());

View File

@ -768,6 +768,7 @@ abstract class egw_framework
if ($GLOBALS['egw_info']['flags']['js_link_registry']) if ($GLOBALS['egw_info']['flags']['js_link_registry'])
{ {
self::validate_file('/phpgwapi/config.php'); self::validate_file('/phpgwapi/config.php');
self::validate_file('/phpgwapi/images.php',array('template' => $GLOBALS['egw_info']['user']['preferences']['common']['template_set']));
} }
$java_script .= self::get_script_links(); $java_script .= self::get_script_links();

View File

@ -308,6 +308,49 @@ else
set_configs: function(_configs) set_configs: function(_configs)
{ {
this.configs = _configs; this.configs = _configs;
},
/**
* Map to serverside available images for users template-set
*/
images: {},
/**
* Set imagemap, called from /phpgwapi/images.php
*
* @param array/object _images
*/
set_images: function (_images)
{
this.images = _images;
},
/**
* Get image URL for a given image-name and application
*
* @param string _name image-name without extension
* @param string _app application name, default phpgwapi
* @return string with URL of image
*/
image: function (_name, _app)
{
if (typeof _app == 'undefined') _app = 'phpgwapi';
// own instance specific images in vfs have highest precedence
if (typeof this.images['vfs'] != 'undefined' && typeof this.images['vfs'][_name] != 'undefined')
{
return this.webserverUrl+this.images['vfs'][_name];
}
if (typeof this.images[_app] != 'undefined' && typeof this.images[_app][_name] != 'undefined')
{
return this.webserverUrl+this.images[_app][_name];
}
if (typeof this.images['phpgwapi'] != 'undefined' && typeof this.images['phpgwapi'][_name] != 'undefined')
{
return this.webserverUrl+this.images['vfs'][_name];
}
console.log('egw.image("'+_name+'", "'+_app+'") image NOT found!');
return null;
} }
}; };
} }

View File

@ -164,6 +164,7 @@ class idots_framework extends egw_framework
if (!isset($GLOBALS['egw_info']['flags']['js_link_registry'])) if (!isset($GLOBALS['egw_info']['flags']['js_link_registry']))
{ {
self::validate_file('/phpgwapi/config.php'); self::validate_file('/phpgwapi/config.php');
self::validate_file('/phpgwapi/images.php',array('template' => $GLOBALS['egw_info']['user']['preferences']['common']['template_set']));
$content .= '<script type="text/javascript"> $content .= '<script type="text/javascript">
egw.set_preferences('.json_encode($GLOBALS['egw_info']['user']['preferences']['common']).', "common"); egw.set_preferences('.json_encode($GLOBALS['egw_info']['user']['preferences']['common']).', "common");
</script>'."\n"; </script>'."\n";