From 809262315510b412208cc86cbbc494407752825a Mon Sep 17 00:00:00 2001 From: stephan Date: Sat, 11 Aug 2018 17:00:42 +0200 Subject: [PATCH] #982 load Fontawesome 4 only if it's really needed --- .../bootsfaces/component/button/Button.java | 20 ++- .../commandButton/CommandButton.java | 10 +- .../component/commandLink/CommandLink.java | 13 ++ .../dateTimePicker/DateTimePicker.java | 10 +- .../component/dropButton/DropButton.java | 13 ++ .../component/dropMenu/DropMenu.java | 10 +- .../component/iconAwesome/IconAwesome.java | 32 ++--- .../net/bootsfaces/component/link/Link.java | 13 ++ .../navCommandLink/NavCommandLink.java | 10 +- .../bootsfaces/component/navLink/NavLink.java | 10 +- .../net/bootsfaces/component/panel/Panel.java | 13 ++ .../listeners/AddResourcesListener.java | 116 +++++++++++++----- .../bootsfaces/listeners/InternalFALink.java | 19 ++- 13 files changed, 211 insertions(+), 78 deletions(-) diff --git a/src/main/java/net/bootsfaces/component/button/Button.java b/src/main/java/net/bootsfaces/component/button/Button.java index 417223bb7..889d48c4b 100644 --- a/src/main/java/net/bootsfaces/component/button/Button.java +++ b/src/main/java/net/bootsfaces/component/button/Button.java @@ -18,6 +18,9 @@ package net.bootsfaces.component.button; +import javax.el.ValueExpression; +import javax.faces.component.FacesComponent; +import javax.faces.component.html.HtmlOutcomeTargetButton; import javax.faces.context.FacesContext; import javax.faces.event.AbortProcessingException; import javax.faces.event.ComponentSystemEvent; @@ -25,10 +28,6 @@ import javax.faces.event.ListenersFor; import javax.faces.event.PostAddToViewEvent; -import javax.el.ValueExpression; -import javax.faces.component.FacesComponent; -import javax.faces.component.html.HtmlOutcomeTargetButton; - import net.bootsfaces.C; import net.bootsfaces.listeners.AddResourcesListener; import net.bootsfaces.render.IHasTooltip; @@ -360,6 +359,7 @@ public String getIconAwesome() { * Usually this method is called internally by the JSF engine. */ public void setIconAwesome(String _iconAwesome) { + AddResourcesListener.setNeedsFontsAwesome(this); getStateHelper().put(PropertyKeys.iconAwesome, _iconAwesome); } @@ -376,6 +376,9 @@ public boolean isIconBrand() { * Usually this method is called internally by the JSF engine. */ public void setIconBrand(boolean _iconBrand) { + if (_iconBrand) { + AddResourcesListener.setFontAwesomeVersion(5, this); + } getStateHelper().put(PropertyKeys.iconBrand, _iconBrand); } @@ -424,6 +427,9 @@ public boolean isIconLight() { * Usually this method is called internally by the JSF engine. */ public void setIconLight(boolean _iconLight) { + if (_iconLight) { + AddResourcesListener.setFontAwesomeVersion(5, this); + } getStateHelper().put(PropertyKeys.iconLight, _iconLight); } @@ -456,6 +462,9 @@ public boolean isIconRegular() { * Usually this method is called internally by the JSF engine. */ public void setIconRegular(boolean _iconRegular) { + if (_iconRegular) { + AddResourcesListener.setFontAwesomeVersion(5, this); + } getStateHelper().put(PropertyKeys.iconRegular, _iconRegular); } @@ -504,6 +513,9 @@ public boolean isIconSolid() { * Usually this method is called internally by the JSF engine. */ public void setIconSolid(boolean _iconSolid) { + if (_iconSolid) { + AddResourcesListener.setFontAwesomeVersion(5, this); + } getStateHelper().put(PropertyKeys.iconSolid, _iconSolid); } diff --git a/src/main/java/net/bootsfaces/component/commandButton/CommandButton.java b/src/main/java/net/bootsfaces/component/commandButton/CommandButton.java index 56e30e017..b1786427b 100644 --- a/src/main/java/net/bootsfaces/component/commandButton/CommandButton.java +++ b/src/main/java/net/bootsfaces/component/commandButton/CommandButton.java @@ -147,14 +147,14 @@ public Map getJQueryEventParameterListsForAjax() { } public void setIconAwesome(String _iconAwesome) { - AddResourcesListener.setNeedsFontsAwesome(); + AddResourcesListener.setNeedsFontsAwesome(this); super.setIconAwesome(_iconAwesome); } @Override public void setIconBrand(boolean _iconBrand) { if (_iconBrand) { - AddResourcesListener.setFontAwesomeVersion(5); + AddResourcesListener.setFontAwesomeVersion(5, this); } super.setIconBrand(_iconBrand); } @@ -162,7 +162,7 @@ public void setIconBrand(boolean _iconBrand) { @Override public void setIconRegular(boolean _iconRegular) { if (_iconRegular) { - AddResourcesListener.setFontAwesomeVersion(5); + AddResourcesListener.setFontAwesomeVersion(5, this); } super.setIconRegular(_iconRegular); } @@ -170,7 +170,7 @@ public void setIconRegular(boolean _iconRegular) { @Override public void setIconLight(boolean _iconLight) { if (_iconLight) { - AddResourcesListener.setFontAwesomeVersion(5); + AddResourcesListener.setFontAwesomeVersion(5, this); } super.setIconLight(_iconLight); } @@ -178,7 +178,7 @@ public void setIconLight(boolean _iconLight) { @Override public void setIconSolid(boolean _iconSolid) { if (_iconSolid) { - AddResourcesListener.setFontAwesomeVersion(5); + AddResourcesListener.setFontAwesomeVersion(5, this); } super.setIconSolid(_iconSolid); } diff --git a/src/main/java/net/bootsfaces/component/commandLink/CommandLink.java b/src/main/java/net/bootsfaces/component/commandLink/CommandLink.java index 1dcb5f769..c9efd947b 100644 --- a/src/main/java/net/bootsfaces/component/commandLink/CommandLink.java +++ b/src/main/java/net/bootsfaces/component/commandLink/CommandLink.java @@ -377,6 +377,7 @@ public String getIconAwesome() { * Usually this method is called internally by the JSF engine. */ public void setIconAwesome(String _iconAwesome) { + AddResourcesListener.setNeedsFontsAwesome(this); getStateHelper().put(PropertyKeys.iconAwesome, _iconAwesome); } @@ -393,6 +394,9 @@ public boolean isIconBrand() { * Usually this method is called internally by the JSF engine. */ public void setIconBrand(boolean _iconBrand) { + if (_iconBrand) { + AddResourcesListener.setFontAwesomeVersion(5, this); + } getStateHelper().put(PropertyKeys.iconBrand, _iconBrand); } @@ -441,6 +445,9 @@ public boolean isIconLight() { * Usually this method is called internally by the JSF engine. */ public void setIconLight(boolean _iconLight) { + if (_iconLight) { + AddResourcesListener.setFontAwesomeVersion(5, this); + } getStateHelper().put(PropertyKeys.iconLight, _iconLight); } @@ -473,6 +480,9 @@ public boolean isIconRegular() { * Usually this method is called internally by the JSF engine. */ public void setIconRegular(boolean _iconRegular) { + if (_iconRegular) { + AddResourcesListener.setFontAwesomeVersion(5, this); + } getStateHelper().put(PropertyKeys.iconRegular, _iconRegular); } @@ -521,6 +531,9 @@ public boolean isIconSolid() { * Usually this method is called internally by the JSF engine. */ public void setIconSolid(boolean _iconSolid) { + if (_iconSolid) { + AddResourcesListener.setFontAwesomeVersion(5, this); + } getStateHelper().put(PropertyKeys.iconSolid, _iconSolid); } diff --git a/src/main/java/net/bootsfaces/component/dateTimePicker/DateTimePicker.java b/src/main/java/net/bootsfaces/component/dateTimePicker/DateTimePicker.java index a4ab8906c..11dcd01c3 100644 --- a/src/main/java/net/bootsfaces/component/dateTimePicker/DateTimePicker.java +++ b/src/main/java/net/bootsfaces/component/dateTimePicker/DateTimePicker.java @@ -208,14 +208,14 @@ public boolean isDisabled() { } public void setIconAwesome(String _iconAwesome) { - AddResourcesListener.setNeedsFontsAwesome(); + AddResourcesListener.setNeedsFontsAwesome(this); super.setIconAwesome(_iconAwesome); } @Override public void setIconBrand(boolean _iconBrand) { if (_iconBrand) { - AddResourcesListener.setFontAwesomeVersion(5); + AddResourcesListener.setFontAwesomeVersion(5, this); } super.setIconBrand(_iconBrand); } @@ -223,7 +223,7 @@ public void setIconBrand(boolean _iconBrand) { @Override public void setIconRegular(boolean _iconRegular) { if (_iconRegular) { - AddResourcesListener.setFontAwesomeVersion(5); + AddResourcesListener.setFontAwesomeVersion(5, this); } super.setIconRegular(_iconRegular); } @@ -231,7 +231,7 @@ public void setIconRegular(boolean _iconRegular) { @Override public void setIconLight(boolean _iconLight) { if (_iconLight) { - AddResourcesListener.setFontAwesomeVersion(5); + AddResourcesListener.setFontAwesomeVersion(5, this); } super.setIconLight(_iconLight); } @@ -239,7 +239,7 @@ public void setIconLight(boolean _iconLight) { @Override public void setIconSolid(boolean _iconSolid) { if (_iconSolid) { - AddResourcesListener.setFontAwesomeVersion(5); + AddResourcesListener.setFontAwesomeVersion(5, this); } super.setIconSolid(_iconSolid); } diff --git a/src/main/java/net/bootsfaces/component/dropButton/DropButton.java b/src/main/java/net/bootsfaces/component/dropButton/DropButton.java index 769ae5017..cce562aed 100644 --- a/src/main/java/net/bootsfaces/component/dropButton/DropButton.java +++ b/src/main/java/net/bootsfaces/component/dropButton/DropButton.java @@ -297,6 +297,7 @@ public String getIconAwesome() { * Usually this method is called internally by the JSF engine. */ public void setIconAwesome(String _iconAwesome) { + AddResourcesListener.setNeedsFontsAwesome(this); getStateHelper().put(PropertyKeys.iconAwesome, _iconAwesome); } @@ -313,6 +314,9 @@ public boolean isIconBrand() { * Usually this method is called internally by the JSF engine. */ public void setIconBrand(boolean _iconBrand) { + if (_iconBrand) { + AddResourcesListener.setFontAwesomeVersion(5, this); + } getStateHelper().put(PropertyKeys.iconBrand, _iconBrand); } @@ -361,6 +365,9 @@ public boolean isIconLight() { * Usually this method is called internally by the JSF engine. */ public void setIconLight(boolean _iconLight) { + if (_iconLight) { + AddResourcesListener.setFontAwesomeVersion(5, this); + } getStateHelper().put(PropertyKeys.iconLight, _iconLight); } @@ -393,6 +400,9 @@ public boolean isIconRegular() { * Usually this method is called internally by the JSF engine. */ public void setIconRegular(boolean _iconRegular) { + if (_iconRegular) { + AddResourcesListener.setFontAwesomeVersion(5, this); + } getStateHelper().put(PropertyKeys.iconRegular, _iconRegular); } @@ -441,6 +451,9 @@ public boolean isIconSolid() { * Usually this method is called internally by the JSF engine. */ public void setIconSolid(boolean _iconSolid) { + if (_iconSolid) { + AddResourcesListener.setFontAwesomeVersion(5, this); + } getStateHelper().put(PropertyKeys.iconSolid, _iconSolid); } diff --git a/src/main/java/net/bootsfaces/component/dropMenu/DropMenu.java b/src/main/java/net/bootsfaces/component/dropMenu/DropMenu.java index f99f6199e..718b00434 100644 --- a/src/main/java/net/bootsfaces/component/dropMenu/DropMenu.java +++ b/src/main/java/net/bootsfaces/component/dropMenu/DropMenu.java @@ -77,14 +77,14 @@ public String getFamily() { } public void setIconAwesome(String _iconAwesome) { - AddResourcesListener.setNeedsFontsAwesome(); + AddResourcesListener.setNeedsFontsAwesome(this); super.setIconAwesome(_iconAwesome); } @Override public void setIconBrand(boolean _iconBrand) { if (_iconBrand) { - AddResourcesListener.setFontAwesomeVersion(5); + AddResourcesListener.setFontAwesomeVersion(5, this); } super.setIconBrand(_iconBrand); } @@ -92,7 +92,7 @@ public void setIconBrand(boolean _iconBrand) { @Override public void setIconRegular(boolean _iconRegular) { if (_iconRegular) { - AddResourcesListener.setFontAwesomeVersion(5); + AddResourcesListener.setFontAwesomeVersion(5, this); } super.setIconRegular(_iconRegular); } @@ -100,7 +100,7 @@ public void setIconRegular(boolean _iconRegular) { @Override public void setIconLight(boolean _iconLight) { if (_iconLight) { - AddResourcesListener.setFontAwesomeVersion(5); + AddResourcesListener.setFontAwesomeVersion(5, this); } super.setIconLight(_iconLight); } @@ -108,7 +108,7 @@ public void setIconLight(boolean _iconLight) { @Override public void setIconSolid(boolean _iconSolid) { if (_iconSolid) { - AddResourcesListener.setFontAwesomeVersion(5); + AddResourcesListener.setFontAwesomeVersion(5, this); } super.setIconSolid(_iconSolid); } diff --git a/src/main/java/net/bootsfaces/component/iconAwesome/IconAwesome.java b/src/main/java/net/bootsfaces/component/iconAwesome/IconAwesome.java index b50861e3a..e683fa39c 100644 --- a/src/main/java/net/bootsfaces/component/iconAwesome/IconAwesome.java +++ b/src/main/java/net/bootsfaces/component/iconAwesome/IconAwesome.java @@ -18,14 +18,7 @@ package net.bootsfaces.component.iconAwesome; -import javax.faces.event.AbortProcessingException; -import javax.faces.event.ComponentSystemEvent; -import javax.faces.event.ListenerFor; -import javax.faces.event.ListenersFor; -import javax.faces.event.PostAddToViewEvent; - import javax.faces.component.FacesComponent; -import javax.faces.context.FacesContext; import javax.faces.event.ListenerFor; import javax.faces.event.ListenersFor; import javax.faces.event.PostAddToViewEvent; @@ -45,15 +38,6 @@ public class IconAwesome extends Icon { public static final String DEFAULT_RENDERER = "net.bootsfaces.component.iconAwesome.IconAwesome"; - public void processEvent(ComponentSystemEvent event) throws AbortProcessingException { - if (isAutoUpdate()) { - if (FacesContext.getCurrentInstance().isPostback()) { - FacesContext.getCurrentInstance().getPartialViewContext().getRenderIds().add(getClientId()); - } - super.processEvent(event); - } - } - protected enum PropertyKeys { ajax, autoUpdate, brand, colLg, colMd, colSm, colXs, delay, display, fixedWidth, hidden, inverse, largeScreen, light, mediumScreen, offset, offsetLg, offsetMd, offsetSm, offsetXs, onclick, oncomplete, onerror, onsuccess, process, pulse, regular, smallScreen, solid, span, style, styleClass, tinyScreen, tooltip, tooltipContainer, tooltipDelay, tooltipDelayHide, tooltipDelayShow, tooltipPosition, update, value, visible; String toString; @@ -69,6 +53,10 @@ public String toString() { return ((this.toString != null) ? this.toString : super.toString()); } } + + public IconAwesome() { + AddResourcesListener.setNeedsFontsAwesome(this); + } /** * Whether the Button submits the form with AJAX.

@@ -115,6 +103,9 @@ public boolean isBrand() { * Usually this method is called internally by the JSF engine. */ public void setBrand(boolean _brand) { + if (_brand) { + AddResourcesListener.setFontAwesomeVersion(5, this); + } getStateHelper().put(PropertyKeys.brand, _brand); } @@ -291,6 +282,9 @@ public boolean isLight() { * Usually this method is called internally by the JSF engine. */ public void setLight(boolean _light) { + if (_light) { + AddResourcesListener.setFontAwesomeVersion(5, this); + } getStateHelper().put(PropertyKeys.light, _light); } @@ -499,6 +493,9 @@ public boolean isRegular() { * Usually this method is called internally by the JSF engine. */ public void setRegular(boolean _regular) { + if (_regular) { + AddResourcesListener.setFontAwesomeVersion(5, this); + } getStateHelper().put(PropertyKeys.regular, _regular); } @@ -531,6 +528,9 @@ public boolean isSolid() { * Usually this method is called internally by the JSF engine. */ public void setSolid(boolean _solid) { + if (_solid) { + AddResourcesListener.setFontAwesomeVersion(5, this); + } getStateHelper().put(PropertyKeys.solid, _solid); } diff --git a/src/main/java/net/bootsfaces/component/link/Link.java b/src/main/java/net/bootsfaces/component/link/Link.java index 347675116..3cc064db8 100644 --- a/src/main/java/net/bootsfaces/component/link/Link.java +++ b/src/main/java/net/bootsfaces/component/link/Link.java @@ -382,6 +382,7 @@ public String getIconAwesome() { * Usually this method is called internally by the JSF engine. */ public void setIconAwesome(String _iconAwesome) { + AddResourcesListener.setNeedsFontsAwesome(this); getStateHelper().put(PropertyKeys.iconAwesome, _iconAwesome); } @@ -398,6 +399,9 @@ public boolean isIconBrand() { * Usually this method is called internally by the JSF engine. */ public void setIconBrand(boolean _iconBrand) { + if (_iconBrand) { + AddResourcesListener.setFontAwesomeVersion(5, this); + } getStateHelper().put(PropertyKeys.iconBrand, _iconBrand); } @@ -446,6 +450,9 @@ public boolean isIconLight() { * Usually this method is called internally by the JSF engine. */ public void setIconLight(boolean _iconLight) { + if (_iconLight) { + AddResourcesListener.setFontAwesomeVersion(5, this); + } getStateHelper().put(PropertyKeys.iconLight, _iconLight); } @@ -478,6 +485,9 @@ public boolean isIconRegular() { * Usually this method is called internally by the JSF engine. */ public void setIconRegular(boolean _iconRegular) { + if (_iconRegular) { + AddResourcesListener.setFontAwesomeVersion(5, this); + } getStateHelper().put(PropertyKeys.iconRegular, _iconRegular); } @@ -526,6 +536,9 @@ public boolean isIconSolid() { * Usually this method is called internally by the JSF engine. */ public void setIconSolid(boolean _iconSolid) { + if (_iconSolid) { + AddResourcesListener.setFontAwesomeVersion(5, this); + } getStateHelper().put(PropertyKeys.iconSolid, _iconSolid); } diff --git a/src/main/java/net/bootsfaces/component/navCommandLink/NavCommandLink.java b/src/main/java/net/bootsfaces/component/navCommandLink/NavCommandLink.java index 947fa85fa..ec9831c52 100644 --- a/src/main/java/net/bootsfaces/component/navCommandLink/NavCommandLink.java +++ b/src/main/java/net/bootsfaces/component/navCommandLink/NavCommandLink.java @@ -149,14 +149,14 @@ public boolean isDisabled() { } public void setIconAwesome(String _iconAwesome) { - AddResourcesListener.setNeedsFontsAwesome(); + AddResourcesListener.setNeedsFontsAwesome(this); super.setIconAwesome(_iconAwesome); } @Override public void setIconBrand(boolean _iconBrand) { if (_iconBrand) { - AddResourcesListener.setFontAwesomeVersion(5); + AddResourcesListener.setFontAwesomeVersion(5, this); } super.setIconBrand(_iconBrand); } @@ -164,7 +164,7 @@ public void setIconBrand(boolean _iconBrand) { @Override public void setIconRegular(boolean _iconRegular) { if (_iconRegular) { - AddResourcesListener.setFontAwesomeVersion(5); + AddResourcesListener.setFontAwesomeVersion(5, this); } super.setIconRegular(_iconRegular); } @@ -172,7 +172,7 @@ public void setIconRegular(boolean _iconRegular) { @Override public void setIconLight(boolean _iconLight) { if (_iconLight) { - AddResourcesListener.setFontAwesomeVersion(5); + AddResourcesListener.setFontAwesomeVersion(5, this); } super.setIconLight(_iconLight); } @@ -180,7 +180,7 @@ public void setIconLight(boolean _iconLight) { @Override public void setIconSolid(boolean _iconSolid) { if (_iconSolid) { - AddResourcesListener.setFontAwesomeVersion(5); + AddResourcesListener.setFontAwesomeVersion(5, this); } super.setIconSolid(_iconSolid); } diff --git a/src/main/java/net/bootsfaces/component/navLink/NavLink.java b/src/main/java/net/bootsfaces/component/navLink/NavLink.java index d435d0c0a..4d33e5d40 100644 --- a/src/main/java/net/bootsfaces/component/navLink/NavLink.java +++ b/src/main/java/net/bootsfaces/component/navLink/NavLink.java @@ -157,14 +157,14 @@ public boolean isDisabled() { } public void setIconAwesome(String _iconAwesome) { - AddResourcesListener.setNeedsFontsAwesome(); + AddResourcesListener.setNeedsFontsAwesome(this); super.setIconAwesome(_iconAwesome); } @Override public void setIconBrand(boolean _iconBrand) { if (_iconBrand) { - AddResourcesListener.setFontAwesomeVersion(5); + AddResourcesListener.setFontAwesomeVersion(5, this); } super.setIconBrand(_iconBrand); } @@ -172,7 +172,7 @@ public void setIconBrand(boolean _iconBrand) { @Override public void setIconRegular(boolean _iconRegular) { if (_iconRegular) { - AddResourcesListener.setFontAwesomeVersion(5); + AddResourcesListener.setFontAwesomeVersion(5, this); } super.setIconRegular(_iconRegular); } @@ -180,7 +180,7 @@ public void setIconRegular(boolean _iconRegular) { @Override public void setIconLight(boolean _iconLight) { if (_iconLight) { - AddResourcesListener.setFontAwesomeVersion(5); + AddResourcesListener.setFontAwesomeVersion(5, this); } super.setIconLight(_iconLight); } @@ -188,7 +188,7 @@ public void setIconLight(boolean _iconLight) { @Override public void setIconSolid(boolean _iconSolid) { if (_iconSolid) { - AddResourcesListener.setFontAwesomeVersion(5); + AddResourcesListener.setFontAwesomeVersion(5, this); } super.setIconSolid(_iconSolid); } diff --git a/src/main/java/net/bootsfaces/component/panel/Panel.java b/src/main/java/net/bootsfaces/component/panel/Panel.java index a7cd24ec1..7cadc975b 100644 --- a/src/main/java/net/bootsfaces/component/panel/Panel.java +++ b/src/main/java/net/bootsfaces/component/panel/Panel.java @@ -491,6 +491,7 @@ public String getIconAwesome() { * Usually this method is called internally by the JSF engine. */ public void setIconAwesome(String _iconAwesome) { + AddResourcesListener.setNeedsFontsAwesome(this); getStateHelper().put(PropertyKeys.iconAwesome, _iconAwesome); } @@ -507,6 +508,9 @@ public boolean isIconBrand() { * Usually this method is called internally by the JSF engine. */ public void setIconBrand(boolean _iconBrand) { + if (_iconBrand) { + AddResourcesListener.setFontAwesomeVersion(5, this); + } getStateHelper().put(PropertyKeys.iconBrand, _iconBrand); } @@ -555,6 +559,9 @@ public boolean isIconLight() { * Usually this method is called internally by the JSF engine. */ public void setIconLight(boolean _iconLight) { + if (_iconLight) { + AddResourcesListener.setFontAwesomeVersion(5, this); + } getStateHelper().put(PropertyKeys.iconLight, _iconLight); } @@ -587,6 +594,9 @@ public boolean isIconRegular() { * Usually this method is called internally by the JSF engine. */ public void setIconRegular(boolean _iconRegular) { + if (_iconRegular) { + AddResourcesListener.setFontAwesomeVersion(5, this); + } getStateHelper().put(PropertyKeys.iconRegular, _iconRegular); } @@ -635,6 +645,9 @@ public boolean isIconSolid() { * Usually this method is called internally by the JSF engine. */ public void setIconSolid(boolean _iconSolid) { + if (_iconSolid) { + AddResourcesListener.setFontAwesomeVersion(5, this); + } getStateHelper().put(PropertyKeys.iconSolid, _iconSolid); } diff --git a/src/main/java/net/bootsfaces/listeners/AddResourcesListener.java b/src/main/java/net/bootsfaces/listeners/AddResourcesListener.java index 14b15dc34..f687c8e86 100644 --- a/src/main/java/net/bootsfaces/listeners/AddResourcesListener.java +++ b/src/main/java/net/bootsfaces/listeners/AddResourcesListener.java @@ -78,7 +78,15 @@ public class AddResourcesListener implements SystemEventListener { private static final String FONTAWESOME_VERSION = "net.bootsfaces.listeners.AddResourcesListener.FontAwesomeVersion"; /** - * This entry of the view map is set to true if there's at least one Fontawesome icon + * List of components using a non-default version of FontAwesome. Needed to + * detect whether FontAwesome 4 (the default version) needs to be imported or + * not. + */ + private static final String FONTAWESOME_NEW_VERSION = "net.bootsfaces.listeners.AddResourcesListener.FontAwesomeNewVersion"; + + /** + * This entry of the view map is set to true if there's at least one Fontawesome + * icon */ private static final String FONTAWESOME_USED = "net.bootsfaces.listeners.AddResourcesListener.FontAwesomeIsUsed"; @@ -229,20 +237,22 @@ private void addMetaTags(UIViewRoot root, FacesContext context) { * The current FacesContext */ private void addCSS(UIViewRoot root, FacesContext context) { - // The following code is needed to diagnose the warning "Unable to save dynamic action with clientId 'j_id...'" - // List r = root.getComponentResources(context, "head"); - // System.out.println("**************"); - // for (UIComponent ava : r) { - // String name = (String) ava.getAttributes().get("name"); - // System.out.println(ava.getClientId(context) +":" + name + " " + ava.getClass().getSimpleName()); - // } - // System.out.println("**************"); + // The following code is needed to diagnose the warning "Unable to save dynamic + // action with clientId 'j_id...'" + // List r = root.getComponentResources(context, "head"); + // System.out.println("**************"); + // for (UIComponent ava : r) { + // String name = (String) ava.getAttributes().get("name"); + // System.out.println(ava.getClientId(context) +":" + name + " " + + // ava.getClass().getSimpleName()); + // } + // System.out.println("**************"); // end of the diagnostic code - //1) First load Theme files (core.css + theme.css) + // 1) First load Theme files (core.css + theme.css) String theme = loadTheme(root, context); - //deactivate FontAwesome support if the no-fa facet is found in the h:head tag + // deactivate FontAwesome support if the no-fa facet is found in the h:head tag UIComponent header = findHeader(root); boolean useCDNImportForFontAwesome = (null == header) || (null == header.getFacet("no-fa")); if (useCDNImportForFontAwesome) { @@ -266,7 +276,7 @@ private void addCSS(UIViewRoot root, FacesContext context) { } } - //2) Font Awesome + // 2) Font Awesome if (useCDNImportForFontAwesome) { InternalFALink output = new InternalFALink(); Map viewMap = root.getViewMap(); @@ -274,8 +284,10 @@ private void addCSS(UIViewRoot root, FacesContext context) { String version = (String) viewMap.get(FONTAWESOME_VERSION); if (version != null) { output.setVersion(version); + output.setNeedsVersion4(needsFontAwesome4()); } else { - version = "4"; + output.setVersion("4"); + output.setNeedsVersion4(needsFontAwesome4()); } addResourceIfNecessary(root, context, output); } @@ -283,8 +295,8 @@ private void addCSS(UIViewRoot root, FacesContext context) { @SuppressWarnings("unchecked") List extCSSMap = (List) root.getViewMap().get(EXT_RESOURCE_KEY); - if(extCSSMap != null) { - for (String file: extCSSMap) { + if (extCSSMap != null) { + for (String file : extCSSMap) { String name = "css/" + file; createAndAddComponent(root, context, CSS_RENDERER, name, C.BSF_LIBRARY); @@ -293,11 +305,13 @@ private void addCSS(UIViewRoot root, FacesContext context) { @SuppressWarnings("unchecked") List themedCSSMap = (List) root.getViewMap().get(THEME_RESOURCE_KEY); - if(themedCSSMap != null) { - for (String file: themedCSSMap) { + if (themedCSSMap != null) { + for (String file : themedCSSMap) { String name = "css/" + theme + "/" + file; - // Glyphicons icons now are in core.css if(file.equals("icons.css")) //the icons.css file isn't found in a theme folder - // Glyphicons icons now are in core.css name = "css/icons.css"; //look for it under the css root instead + // Glyphicons icons now are in core.css if(file.equals("icons.css")) //the + // icons.css file isn't found in a theme folder + // Glyphicons icons now are in core.css name = "css/icons.css"; //look for it + // under the css root instead createAndAddComponent(root, context, CSS_RENDERER, name, C.BSF_LIBRARY); } @@ -307,14 +321,13 @@ private void addCSS(UIViewRoot root, FacesContext context) { createAndAddComponent(root, context, CSS_RENDERER, "css/patternfly/bootstrap-switch.css", C.BSF_LIBRARY); } - //Add mandatory CSS bsf.css + // Add mandatory CSS bsf.css createAndAddComponent(root, context, CSS_RENDERER, "css/bsf.css", C.BSF_LIBRARY); - - //3) Bootstrap from CDN (TODO: check removeBootstrapResources) + // 3) Bootstrap from CDN (TODO: check removeBootstrapResources) boolean loadBootstrap = shouldLibraryBeLoaded(P_GET_BOOTSTRAP_FROM_CDN, true); - if (! loadBootstrap) { - removeBootstrapResources(root, context); + if (!loadBootstrap) { + removeBootstrapResources(root, context); } } @@ -528,10 +541,21 @@ public static void addResourceIfNecessary(String url) { } } - public static void setFontAwesomeVersion(int version) { + public static void setFontAwesomeVersion(int version, Object uiComponent) { FacesContext context = FacesContext.getCurrentInstance(); UIViewRoot root = context.getViewRoot(); Map viewMap = root.getViewMap(); + + if (version != 4) { + @SuppressWarnings("unchecked") + Map v5 = (Map) viewMap.get(FONTAWESOME_NEW_VERSION); + if (null == v5) { + v5 = new HashMap(); + viewMap.put(FONTAWESOME_NEW_VERSION, v5); + } + v5.put(uiComponent, true); + } + String _version = (String) viewMap.get(FONTAWESOME_VERSION); if (_version != null) { if (!_version.contains(String.valueOf(version))) { @@ -539,21 +563,55 @@ public static void setFontAwesomeVersion(int version) { } } else { if (viewMap.containsKey(FONTAWESOME_USED)) { - viewMap.put(FONTAWESOME_VERSION, "4,"+String.valueOf(version)); + viewMap.put(FONTAWESOME_VERSION, "4," + String.valueOf(version)); } else { viewMap.put(FONTAWESOME_VERSION, String.valueOf(version)); } } } + + @SuppressWarnings("unchecked") + public static void setNeedsFontsAwesome(Object uiComponent) { + FacesContext context = FacesContext.getCurrentInstance(); + UIViewRoot root = context.getViewRoot(); + Map viewMap = root.getViewMap(); + ArrayList list = (ArrayList) viewMap.get(FONTAWESOME_USED); + if (list == null) { + list = new ArrayList(); + viewMap.put(FONTAWESOME_USED, list); + } + list.add(uiComponent); + } - public static void setNeedsFontsAwesome() { + private boolean needsFontAwesome4() { FacesContext context = FacesContext.getCurrentInstance(); UIViewRoot root = context.getViewRoot(); Map viewMap = root.getViewMap(); - viewMap.put(FONTAWESOME_USED, true); + @SuppressWarnings("unchecked") + Map v5 = (Map) viewMap.get(FONTAWESOME_NEW_VERSION); + @SuppressWarnings("unchecked") + ArrayList all = (ArrayList) viewMap.get(FONTAWESOME_USED); + viewMap.remove(FONTAWESOME_NEW_VERSION); + viewMap.remove(FONTAWESOME_USED); + if (all == null) { + return false; + } + if (v5 == null) { + all.clear(); + return true; + } + boolean v4 = false; + for (Object o: all) { + if (!v5.containsKey(o)) { + v4=true; + break; + } + } + all.clear(); + v5.clear(); + return v4; } - /** * Remove duplicate resource files. For some reason, many resource files are * added more than once, especially when AJAX is used. The method removes the diff --git a/src/main/java/net/bootsfaces/listeners/InternalFALink.java b/src/main/java/net/bootsfaces/listeners/InternalFALink.java index 72c7a5ee6..4def3f976 100644 --- a/src/main/java/net/bootsfaces/listeners/InternalFALink.java +++ b/src/main/java/net/bootsfaces/listeners/InternalFALink.java @@ -19,7 +19,6 @@ import java.io.IOException; -import javax.faces.FacesException; import javax.faces.component.FacesComponent; import javax.faces.component.UIComponentBase; import javax.faces.context.FacesContext; @@ -52,6 +51,8 @@ public InternalFALink() { private String version = "4"; + private boolean needsVersion4 = false; + @Override public void encodeBegin(FacesContext fc) throws IOException { final String FA_VERSION = "4.7.0"; @@ -60,9 +61,11 @@ public void encodeBegin(FacesContext fc) throws IOException { ResponseWriter responseWriter = fc.getResponseWriter(); if (version.contains("4")) { - responseWriter.append(""); - } + if (needsVersion4) { + responseWriter.append(""); + } + } if (version.contains("5")) { responseWriter.append( ""); @@ -80,4 +83,12 @@ public String getFamily() { public void setVersion(String version) { this.version = version; } + + public boolean isNeedsVersion4() { + return needsVersion4; + } + + public void setNeedsVersion4(boolean needsVersion4) { + this.needsVersion4 = needsVersion4; + } }