/** * EGroupware clientside API object * * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License * @package etemplate * @subpackage api * @link http://www.egroupware.org * @author Andreas Stöckel (as AT stylite.de) * @author Ralf Becker <RalfBecker@outdoor-training.de> * @version $Id$ */ "use strict"; /*egw:uses egw_core; */ egw.extend('images', egw.MODULE_GLOBAL, function() { /** * Map to serverside available images for users template-set * * @access: private, use egw.image(_name, _app) */ var images = {}; return { /** * Set imagemap, called from /phpgwapi/images.php * * @param array/object _images */ set_images: function (_images) { 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 current app of window * @return string with URL of image */ image: function (_name, _app) { // For logging all paths tried var tries = {}; if (typeof _app === 'undefined') { // If the application name is not given, set it to the name of // current application _app = this.getAppName(); // Handle images in appname/imagename format if(_name.indexOf('/') > 0) { var split = _name.split('/',2); // dhtmlxtree and egw_action are subdirs in image dir, not applications if (split[0] !== 'dhtmlxtree' && split[0] !== 'egw_action') { _app = split[0]; _name = split[1]; } } } // own instance specific images in vfs have highest precedence tries['vfs']=_name; if (typeof images['vfs'] != 'undefined' && typeof images['vfs'][_name] != 'undefined') { return this.webserverUrl+images['vfs'][_name]; } tries[_app + (_app == 'phpgwapi' ? " (current app)" : "")] = _name; if (typeof images[_app] != 'undefined' && typeof images[_app][_name] != 'undefined') { return this.webserverUrl+images[_app][_name]; } tries['phpgwapi'] = _name; if (typeof images['phpgwapi'] != 'undefined' && typeof images['phpgwapi'][_name] != 'undefined') { return this.webserverUrl+images['phpgwapi'][_name]; } // if no match, check if it might contain an extension var matches = []; if (matches = _name.match(/\.(png|gif|jpg)$/i)) { return this.image(_name.replace(/.(png|gif|jpg)$/i,''), _app); } if(matches != null) tries[_app + " (matched)"]= matches; egw.debug("log",'egw.image("'+_name+'", "'+_app+'") image NOT found! Tried ', tries); return null; }, /** * Get image url for a given mime-type and option file * * @param _mime * @param _path vfs path to generate thumbnails for images * @param _size defaults to 16 (only supported size currently) * @returns url of image */ mime_icon: function(_mime, _path, _size) { if (typeof _size == 'undefined') _size = 16; if (!_mime) _mime = 'unknown'; if (_mime == 'httpd/unix-directory') _mime = 'directory'; var type = _mime.toLowerCase().split('/'); var image; if (type[0] == 'egw' && (image = this.image('navbar',type[1]))) { } else if (typeof _path == 'string' && type[0] == 'image' && type[1].match(/^(png|jpe?g|gif|bmp)$/)) { var thsize = this.config('link_list_thumbnail') || 32; image = this.link('/etemplate/thumbnail.php',{ 'path': _path, 'thsize': thsize}); } else { if ((typeof type[1] == 'undefined' || !(image = this.image('mime'+_size+'_'+type[0]+'_'+type[1], 'etemplate'))) && !(image = this.image('mime'+_size+'_'+type[0], 'etemplate'))) { image = this.image('mime'+_size+'_unknown', 'etemplate'); } } return image; }, /** * Create DOM img or svn element depending on url * * @param {string} _url source url * @param {string} _alt alt attribute for img tag * @returns DOM node */ image_element: function(_url, _alt) { var icon; if (typeof _url == 'string' && _url.match(/\.svg$/)) { icon = document.createElement('object'); icon.type = 'image/svg+xml'; icon.data = _url; } else { icon = document.createElement('img'); if (_url) icon.src = _url; if (_alt) icon.alt = _alt; } return icon; } } });