package com.idega.util; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.apache.myfaces.renderkit.html.util.AddResource; import org.apache.myfaces.renderkit.html.util.AddResourceFactory; import com.idega.idegaweb.include.PageResourceConstants; import com.idega.idegaweb.include.RSSLink; import com.idega.presentation.IWContext; import com.idega.util.resources.ResourcesAdder; public class PresentationUtil { public static final String ATTRIBUTE_JAVA_SCRIPT_SOURCE_FOR_HEADER = "javaScriptSourceLineForHeaderAttribute"; public static final String ATTRIBUTE_JAVA_SCRIPT_SOURCE_FOR_BODY = "javaScriptSourceLineForBodyAttribute"; public static final String ATTRIBUTE_JAVA_SCRIPT_ACTION_FOR_BODY = "javaScriptActionForBodyAttribute"; public static final String ATTRIBUTE_CSS_SOURCE_LINE_FOR_HEADER = "cssSourceLineForHeaderAttribute"; public static final String ATTRIBUTE_ADD_CSS_DIRECTLY = "addCSSFilesDirectlyToPage"; public static boolean addJavaScriptSourcesLinesToHeader(IWContext iwc, List<String> scriptsUris) { if (iwc == null || scriptsUris == null) { return false; } for (int i = 0; i < scriptsUris.size(); i++) { addJavaScriptSourceLineToHeader(iwc, scriptsUris.get(i)); } return true; } public static final String getFixedUrl(String url) { if (StringUtil.isEmpty(url)) return url; if (url.indexOf(CoreConstants.SEMICOLON) != -1) url = url.split(CoreConstants.SEMICOLON)[0]; return url; } public static boolean addJavaScriptSourceLineToHeader(IWContext iwc, String scriptUri) { if (iwc == null || StringUtil.isEmpty(scriptUri)) return false; if (CoreUtil.isSingleComponentRenderingProcess(iwc)) { manageCientResource(iwc, ATTRIBUTE_JAVA_SCRIPT_SOURCE_FOR_HEADER, scriptUri); return true; } AddResource adder = getResourceAdder(iwc); if (adder == null) return false; adder.addJavaScriptAtPosition(iwc, AddResource.HEADER_BEGIN, getFixedUrl(scriptUri)); return true; } public static boolean addJavaScriptSourcesLinesToBody(IWContext iwc, List<String> scriptsUris) { if (iwc == null || scriptsUris == null) { return false; } for (int i = 0; i < scriptsUris.size(); i++) { addJavaScriptSourceLineToBody(iwc, scriptsUris.get(i)); } return true; } public static boolean addJavaScriptSourceLineToBody(IWContext iwc, String scriptUri) { if (iwc == null || StringUtil.isEmpty(scriptUri)) return false; if (CoreUtil.isSingleComponentRenderingProcess(iwc)) { manageCientResource(iwc, ATTRIBUTE_JAVA_SCRIPT_SOURCE_FOR_BODY, scriptUri); return true; } AddResource adder = getResourceAdder(iwc); if (adder == null) return false; adder.addJavaScriptAtPosition(iwc, AddResource.BODY_END, getFixedUrl(scriptUri)); return true; } public static boolean addJavaScriptActionOnLoad(IWContext iwc, String action) { if (iwc == null || StringUtil.isEmpty(action)) return false; if (CoreUtil.isSingleComponentRenderingProcess(iwc)) { manageCientResource(iwc, ATTRIBUTE_JAVA_SCRIPT_ACTION_FOR_BODY, action); return true; } AddResource adder = getResourceAdder(iwc); if (adder == null) return false; adder.addInlineScriptAtPosition(iwc, AddResource.BODY_ONLOAD, action); return true; } public static boolean addJavascriptAlertOnLoad(IWContext iwc, String alert) { return addJavaScriptActionOnLoad(iwc, "alert('" + alert + "');"); } public static boolean addJavaScriptActionsToBody(IWContext iwc, List<String> actions) { if (iwc == null || actions == null) { return false; } for (int i = 0; i < actions.size(); i++) { addJavaScriptActionToBody(iwc, actions.get(i)); } return true; } @SuppressWarnings({ "unchecked", "rawtypes" }) private static synchronized void manageCientResource(IWContext iwc, String attributeName, String resource) { List<String> resources = null; Object o = iwc.getSessionAttribute(attributeName); if (o instanceof List) { resources = (List) o; } else { resources = new ArrayList<String>(); } if (!resources.contains(resource)) { resources.add(resource); iwc.setSessionAttribute(attributeName, resources); } } public static boolean addJavaScriptActionToBody(IWContext iwc, String action) { if (iwc == null || StringUtil.isEmpty(action)) return false; if (CoreUtil.isSingleComponentRenderingProcess(iwc)) { manageCientResource(iwc, ATTRIBUTE_JAVA_SCRIPT_ACTION_FOR_BODY, action); return true; } AddResource adder = getResourceAdder(iwc); if (adder == null) return false; adder.addInlineScriptAtPosition(iwc, AddResource.BODY_END, action); return true; } public static String getJavaScriptSourceLine(String scriptUri) { return getJavaScriptSourceLine(scriptUri, false); } public static String getJavaScriptSourceLine(String scriptUri, boolean includeOnce) { if (scriptUri == null) { return null; } StringBuffer script; if (includeOnce) { script = new StringBuffer("<script type=\"text/javascript\"> LazyLoader.load('").append(scriptUri).append("', null);</script>\n"); } else { script = new StringBuffer("<script type=\"text/javascript\" src=\"").append(scriptUri).append("\"></script>\n"); } return script.toString(); } public static final String getJavaScriptLinesLoadedLazily(List<String> scriptUris, String callbackFunction) { return getJavaScriptLinesLoadedLazily(scriptUris, callbackFunction, false); } public static final String getJavaScriptLinesLoadedLazily(List<String> scriptUris, String callbackFunction, boolean onWindowLoaded) { if (scriptUris == null) { return null; } StringBuffer action = new StringBuffer("LazyLoader.loadMultiple(["); for (int i = 0; i < scriptUris.size(); i++) { action.append(CoreConstants.QOUTE_SINGLE_MARK).append(scriptUris.get(i)).append(CoreConstants.QOUTE_SINGLE_MARK); if ((i + 1) < scriptUris.size()) { action.append(CoreConstants.COMMA).append(CoreConstants.SPACE); } } if (callbackFunction != null && !callbackFunction.startsWith("function()")) { callbackFunction = new StringBuffer("\nfunction() {\n").append(callbackFunction).append("\n}").toString(); } action.append("], ").append(callbackFunction == null ? "null" : callbackFunction).append(");"); if (onWindowLoaded) { action = new StringBuffer("registerEvent(window, 'load', function() {").append(action.toString()).append("});"); } return action.toString(); } public static String getJavaScriptSourceLines(List<String> scriptsUris) { if (scriptsUris == null) { return null; } StringBuffer scripts = new StringBuffer(); for (int i = 0; i < scriptsUris.size(); i++) { scripts.append(getJavaScriptSourceLine(scriptsUris.get(i))); } return scripts.toString(); } public static String getJavaScriptSourceLinesIncludeOnce(Collection<String> scriptsUris) { if (scriptsUris == null) { return null; } StringBuffer scripts = new StringBuffer(); for (String uri : scriptsUris) { scripts.append(getJavaScriptSourceLine(uri, true)); } return scripts.toString(); } public static String getJavaScriptAction(String action) { if (action == null) { return null; } return new StringBuffer("<script type=\"text/javascript\">").append(action).append("</script>\n").toString(); } public static String getJavaScriptActions(List<String> actions) { if (actions == null) { return null; } StringBuffer allActions = new StringBuffer(); for (int i = 0; i < actions.size(); i++) { allActions.append(getJavaScriptAction(actions.get(i))); } return allActions.toString(); } private static AddResource getResourceAdder(IWContext iwc) { try { return AddResourceFactory.getInstance(iwc); } catch(Exception e) { e.printStackTrace(); } return null; } public static boolean addStyleSheetsToHeader(IWContext iwc, List<String> styleSheetsUris) { if (iwc == null || styleSheetsUris == null) { return false; } for (int i = 0; i < styleSheetsUris.size(); i++) { addStyleSheetToHeader(iwc, styleSheetsUris.get(i)); } return true; } public static boolean addStyleSheetToHeader(IWContext iwc, String styleSheetUri) { return addStyleSheetToHeader(iwc, styleSheetUri, PageResourceConstants.MEDIA_SCREEN); } public static boolean addStyleSheetToHeader(IWContext iwc, String styleSheetUri, String mediaType) { if (iwc == null || StringUtil.isEmpty(styleSheetUri)) return false; if (CoreUtil.isSingleComponentRenderingProcess(iwc)) { manageCientResource(iwc, ATTRIBUTE_CSS_SOURCE_LINE_FOR_HEADER, styleSheetUri); return true; } AddResource adder = getResourceAdder(iwc); if (adder == null) return false; styleSheetUri = getFixedUrl(styleSheetUri); if (!StringUtil.isEmpty(mediaType) && adder instanceof ResourcesAdder) ((ResourcesAdder) adder).addMediaType(styleSheetUri, mediaType); adder.addStyleSheet(iwc, AddResource.HEADER_BEGIN, styleSheetUri); return true; } public static String getStyleSheetSourceLine(String styleSheetUri) { if (styleSheetUri == null) { return null; } return getCssLine(styleSheetUri, false); } public static String getCssLine(String cssUri, boolean includeOnce) { if (cssUri == null) { return null; } StringBuffer css; if (includeOnce) { css = new StringBuffer("<script type=\"text/javascript\">LazyLoader.load('").append(cssUri).append("', null);</script>\n"); } else { css = new StringBuffer("<link type=\"text/css\" href=\"").append(cssUri).append("\" rel=\"stylesheet\" media=\"screen\"/>\n"); } return css.toString(); } public static String getStyleSheetsSourceLines(List<String> styleSheetsUris) { if (styleSheetsUris == null) { return null; } StringBuffer styles = new StringBuffer(); for (int i = 0; i < styleSheetsUris.size(); i++) { styles.append(getStyleSheetSourceLine(styleSheetsUris.get(i))); } return styles.toString(); } public static String getStyleSheetsSourceLinesIncludeOnce(Collection<String> styleSheetsUris) { if (styleSheetsUris == null) { return null; } StringBuffer styles = new StringBuffer(); for (String uri : styleSheetsUris) { styles.append(getCssLine(uri, true)); } return styles.toString(); } public static boolean addFeedLink(IWContext iwc, RSSLink feedLink) { if (iwc == null || feedLink == null) return false; if (CoreUtil.isSingleComponentRenderingProcess(iwc)) { addJavaScriptActionToBody(iwc, new StringBuffer("addFeedSymbolInHeader('").append(feedLink.getUrl()).append("', 'atom', 'Atom 1.0');").toString()); return true; } AddResource adder = getResourceAdder(iwc); if (!(adder instanceof ResourcesAdder)) return false; ((ResourcesAdder) adder).addFeedLink(feedLink); return true; } }