package er.extensions.components; import com.webobjects.appserver.WOApplication; import com.webobjects.appserver.WOAssociation; import com.webobjects.appserver.WOComponent; import com.webobjects.appserver.WOContext; import com.webobjects.appserver.WOElement; import com.webobjects.appserver.WOResourceManager; import com.webobjects.appserver.WOResponse; import com.webobjects.appserver._private.WODynamicElementCreationException; import com.webobjects.appserver._private.WOHTMLDynamicElement; import com.webobjects.foundation.NSDictionary; /** * FavIcon link with resource manager support. * @binding href href to the icon * @binding filename filename of the icon * @binding framework framework of the icon * @binding type the type of icon to use. Default is for a favicon, * while "touch" generates an 'apple-touch-icon-precomposed' * icon for android and iDevices. For information about icon * sizes, see <a href="http://mathiasbynens.be/notes/touch-icons">touch icons</a> * @author ak */ public class ERXFavIcon extends WOHTMLDynamicElement { protected WOAssociation _href; protected WOAssociation _framework; protected WOAssociation _filename; protected WOAssociation _type; public ERXFavIcon(String aName, NSDictionary associations, WOElement template) { super("link", associations, template); _href = _associations.removeObjectForKey("href"); _type = _associations.removeObjectForKey("type"); _framework = _associations.removeObjectForKey("framework"); _filename = _associations.removeObjectForKey("filename"); if(_filename == null && _href == null) { throw new WODynamicElementCreationException("Either 'href' or 'filename' must be bound: " + this); } if(_filename != null && _href != null) { throw new WODynamicElementCreationException("'href' and 'filename' can't both be bound: " + this); } } @Override public void appendAttributesToResponse(WOResponse response, WOContext context) { WOComponent component = context.component(); String href; if(_href != null) { href = (String)_href.valueInComponent(component); } else { String framework = "app"; if(_framework != null) { Object val = _framework.valueInComponent(component); if(val != null) { framework = val.toString(); } } String filename = (String)_filename.valueInComponent(component); WOResourceManager rs = WOApplication.application().resourceManager(); href = rs.urlForResourceNamed(filename, framework, null, context.request()); } response._appendTagAttributeAndValue("href", href, false); String rel = "SHORTCUT ICON"; if(_type != null) { String val = (String) _type.valueInComponent(component); if("touch".equalsIgnoreCase(val)) { rel = "apple-touch-icon-precomposed"; } } response._appendTagAttributeAndValue("rel", rel, false); super.appendAttributesToResponse(response, context); } @Override protected boolean hasContent() { return false; } }