From f06ea175ca08c8f9c539635e980c8a0cedda0167 Mon Sep 17 00:00:00 2001 From: Philipp Gruhn Date: Wed, 20 Apr 2016 15:14:38 +0200 Subject: [PATCH 01/15] refactor tooltip resource handling + tooltip activation --- .../bootsfaces/component/GenContainerDiv.java | 2 +- .../net/bootsfaces/component/alert/Alert.java | 3 +- .../net/bootsfaces/component/badge/Badge.java | 1 - .../component/badge/BadgeRenderer.java | 2 +- .../bootsfaces/component/button/Button.java | 3 +- .../component/buttonGroup/ButtonGroup.java | 3 +- .../buttonToolbar/ButtonToolbar.java | 3 +- .../bootsfaces/component/canvas/Canvas.java | 2 +- .../component/carousel/Carousel.java | 7 +---- .../carouselCaption/CarouselCaption.java | 2 +- .../CarouselCaptionRenderer.java | 6 +--- .../carouselControl/CarouselControl.java | 2 +- .../component/carouselItem/CarouselItem.java | 2 +- .../component/colorPicker/ColorPicker.java | 7 +---- .../bootsfaces/component/column/Column.java | 3 +- .../commandButton/CommandButton.java | 7 +---- .../commandButton/CommandButtonRenderer.java | 2 +- .../component/container/Container.java | 5 +--- .../component/dataTable/DataTable.java | 3 +- .../component/datePicker/DatePicker.java | 5 ++-- .../component/dropButton/DropButton.java | 3 +- .../component/dropMenu/DropMenu.java | 4 +-- .../component/flyOutMenu/FlyOutMenu.java | 3 +- .../net/bootsfaces/component/icon/Icon.java | 5 +--- .../component/iconAwesome/IconAwesome.java | 3 +- .../net/bootsfaces/component/image/Image.java | 7 ++--- .../component/inputText/InputText.java | 3 +- .../inputTextarea/InputTextarea.java | 3 +- .../component/jumbotron/Jumbotron.java | 3 +- .../net/bootsfaces/component/label/Label.java | 5 ++-- .../linksContainer/LinksContainer.java | 10 ++----- .../component/listLinks/ListLinks.java | 28 +++++++++---------- .../bootsfaces/component/message/Message.java | 1 - .../component/messages/Messages.java | 1 - .../net/bootsfaces/component/modal/Modal.java | 1 - .../bootsfaces/component/navBar/NavBar.java | 3 +- .../component/navBar/NavBarRenderer.java | 2 +- .../component/navBarLinks/NavBarLinks.java | 1 - .../component/navLink/NavCommandLink.java | 7 +---- .../bootsfaces/component/navLink/NavLink.java | 7 +---- .../component/navLink/NavLinkRenderer.java | 3 +- .../net/bootsfaces/component/panel/Panel.java | 3 +- .../component/panel/PanelRenderer.java | 2 +- .../component/panelGrid/PanelGrid.java | 3 +- .../component/pillLinks/PillLinks.java | 1 - .../net/bootsfaces/component/poll/Poll.java | 6 ++-- .../component/progressBar/ProgressBar.java | 2 +- .../net/bootsfaces/component/row/Row.java | 3 +- .../bootsfaces/component/row/RowRenderer.java | 2 +- .../SelectBooleanCheckbox.java | 3 +- .../selectMultiMenu/SelectMultiMenu.java | 5 +--- .../selectOneMenu/SelectOneMenu.java | 5 +--- .../bootsfaces/component/slider/Slider.java | 5 ++-- .../component/switchComponent/Switch.java | 5 +--- .../net/bootsfaces/component/tab/Tab.java | 2 +- .../component/tabLinks/TabLinks.java | 3 +- .../bootsfaces/component/tabView/TabView.java | 7 +---- .../component/tabView/TabViewRenderer.java | 2 +- .../component/thumbnail/Thumbnail.java | 3 +- .../net/bootsfaces/component/tree/Tree.java | 1 - .../net/bootsfaces/component/well/Well.java | 3 +- src/main/java/net/bootsfaces/render/R.java | 2 +- .../net/bootsfaces/render/RThumbnail.java | 2 +- .../java/net/bootsfaces/render/Tooltip.java | 26 +++++------------ 64 files changed, 84 insertions(+), 185 deletions(-) diff --git a/src/main/java/net/bootsfaces/component/GenContainerDiv.java b/src/main/java/net/bootsfaces/component/GenContainerDiv.java index f7c2b2bbf..87acba2ce 100644 --- a/src/main/java/net/bootsfaces/component/GenContainerDiv.java +++ b/src/main/java/net/bootsfaces/component/GenContainerDiv.java @@ -79,7 +79,7 @@ public void encodeEnd(FacesContext context) throws IOException { } context.getResponseWriter() .endElement("div"); - Tooltip.activateTooltips(context, getAttributes(), this); + Tooltip.activateTooltips(context, this); } diff --git a/src/main/java/net/bootsfaces/component/alert/Alert.java b/src/main/java/net/bootsfaces/component/alert/Alert.java index f7c96219c..d993ce9c9 100644 --- a/src/main/java/net/bootsfaces/component/alert/Alert.java +++ b/src/main/java/net/bootsfaces/component/alert/Alert.java @@ -40,10 +40,9 @@ public class Alert extends UIComponentBase implements net.bootsfaces.render.IHas public static final String DEFAULT_RENDERER = "net.bootsfaces.component.alert.Alert"; public Alert() { - Tooltip.addResourceFile(); + Tooltip.addResourceFiles(); AddResourcesListener.addThemedCSSResource("core.css"); AddResourcesListener.addThemedCSSResource("alerts.css"); - AddResourcesListener.addThemedCSSResource("tooltip.css"); setRendererType(DEFAULT_RENDERER); } diff --git a/src/main/java/net/bootsfaces/component/badge/Badge.java b/src/main/java/net/bootsfaces/component/badge/Badge.java index 265f86c4a..974bdd368 100644 --- a/src/main/java/net/bootsfaces/component/badge/Badge.java +++ b/src/main/java/net/bootsfaces/component/badge/Badge.java @@ -39,7 +39,6 @@ public class Badge extends UIOutput { public Badge() { AddResourcesListener.addThemedCSSResource("core.css"); AddResourcesListener.addThemedCSSResource("badges.css"); - AddResourcesListener.addThemedCSSResource("tooltip.css"); setRendererType(DEFAULT_RENDERER); } diff --git a/src/main/java/net/bootsfaces/component/badge/BadgeRenderer.java b/src/main/java/net/bootsfaces/component/badge/BadgeRenderer.java index 86550e123..d5aacea36 100644 --- a/src/main/java/net/bootsfaces/component/badge/BadgeRenderer.java +++ b/src/main/java/net/bootsfaces/component/badge/BadgeRenderer.java @@ -82,7 +82,7 @@ protected void generateBadge(FacesContext context, UIComponent component, Respon rw.writeText(val, null); } rw.endElement("span"); - Tooltip.activateTooltips(context, component.getAttributes(), component); + Tooltip.activateTooltips(context, component); } diff --git a/src/main/java/net/bootsfaces/component/button/Button.java b/src/main/java/net/bootsfaces/component/button/Button.java index 49a5980cf..c2af869ca 100644 --- a/src/main/java/net/bootsfaces/component/button/Button.java +++ b/src/main/java/net/bootsfaces/component/button/Button.java @@ -41,8 +41,7 @@ public Button() { setRendererType(DEFAULT_RENDERER); AddResourcesListener.addThemedCSSResource("core.css"); - AddResourcesListener.addThemedCSSResource("tooltip.css"); - Tooltip.addResourceFile(); + Tooltip.addResourceFiles(); } public String getFamily() { diff --git a/src/main/java/net/bootsfaces/component/buttonGroup/ButtonGroup.java b/src/main/java/net/bootsfaces/component/buttonGroup/ButtonGroup.java index ff0105977..8e22d1d84 100644 --- a/src/main/java/net/bootsfaces/component/buttonGroup/ButtonGroup.java +++ b/src/main/java/net/bootsfaces/component/buttonGroup/ButtonGroup.java @@ -37,8 +37,7 @@ public class ButtonGroup extends UIComponentBase implements net.bootsfaces.rende public ButtonGroup() { AddResourcesListener.addThemedCSSResource("core.css"); - AddResourcesListener.addThemedCSSResource("tooltip.css"); - Tooltip.addResourceFile(); + Tooltip.addResourceFiles(); setRendererType(DEFAULT_RENDERER); } diff --git a/src/main/java/net/bootsfaces/component/buttonToolbar/ButtonToolbar.java b/src/main/java/net/bootsfaces/component/buttonToolbar/ButtonToolbar.java index 67538b6f4..6176ecefa 100644 --- a/src/main/java/net/bootsfaces/component/buttonToolbar/ButtonToolbar.java +++ b/src/main/java/net/bootsfaces/component/buttonToolbar/ButtonToolbar.java @@ -38,9 +38,8 @@ public class ButtonToolbar extends UIComponentBase implements net.bootsfaces.ren public static final String DEFAULT_RENDERER = "net.bootsfaces.component.buttonToolbar.ButtonToolbar"; public ButtonToolbar() { - Tooltip.addResourceFile(); + Tooltip.addResourceFiles(); AddResourcesListener.addThemedCSSResource("core.css"); - AddResourcesListener.addThemedCSSResource("tooltip.css"); setRendererType(DEFAULT_RENDERER); } diff --git a/src/main/java/net/bootsfaces/component/canvas/Canvas.java b/src/main/java/net/bootsfaces/component/canvas/Canvas.java index fc4f7e675..0a40bcfa9 100644 --- a/src/main/java/net/bootsfaces/component/canvas/Canvas.java +++ b/src/main/java/net/bootsfaces/component/canvas/Canvas.java @@ -37,7 +37,7 @@ public class Canvas extends UIOutput implements net.bootsfaces.render.IHasToolti public static final String DEFAULT_RENDERER = "net.bootsfaces.component.canvas.Canvas"; public Canvas() { - Tooltip.addResourceFile(); + Tooltip.addResourceFiles(); setRendererType(DEFAULT_RENDERER); } diff --git a/src/main/java/net/bootsfaces/component/carousel/Carousel.java b/src/main/java/net/bootsfaces/component/carousel/Carousel.java index 5dab5ce78..712268544 100644 --- a/src/main/java/net/bootsfaces/component/carousel/Carousel.java +++ b/src/main/java/net/bootsfaces/component/carousel/Carousel.java @@ -51,15 +51,10 @@ public class Carousel extends UICommand public static final String DEFAULT_RENDERER = "net.bootsfaces.component.carousel.Carousel"; public Carousel() { - Tooltip.addResourceFile(); - // AddResourcesListener.addBasicJSResource("javax.faces", "jsf.js"); - // AddResourcesListener.addBasicJSResource("bsf", "js/bsf.js"); + Tooltip.addResourceFiles(); AddResourcesListener.addThemedCSSResource("bsf.css"); AddResourcesListener.addThemedCSSResource("carousel.css"); AddResourcesListener.addThemedCSSResource("core.css"); - AddResourcesListener.addThemedCSSResource("tooltip.css"); - // AddResourcesListener.addResourceToHeadButAfterJQuery(C.BSF_LIBRARY, - // "jq/jquery.js"); AddResourcesListener.addResourceToHeadButAfterJQuery(C.BSF_LIBRARY, "jq/ui/core.js"); setRendererType(DEFAULT_RENDERER); } diff --git a/src/main/java/net/bootsfaces/component/carouselCaption/CarouselCaption.java b/src/main/java/net/bootsfaces/component/carouselCaption/CarouselCaption.java index 65860bab7..94fe0c523 100644 --- a/src/main/java/net/bootsfaces/component/carouselCaption/CarouselCaption.java +++ b/src/main/java/net/bootsfaces/component/carouselCaption/CarouselCaption.java @@ -45,7 +45,7 @@ public class CarouselCaption extends UICommand public static final String DEFAULT_RENDERER = "net.bootsfaces.component.carouselCaption.CarouselCaption"; public CarouselCaption() { - Tooltip.addResourceFile(); + Tooltip.addResourceFiles(); setRendererType(DEFAULT_RENDERER); } diff --git a/src/main/java/net/bootsfaces/component/carouselCaption/CarouselCaptionRenderer.java b/src/main/java/net/bootsfaces/component/carouselCaption/CarouselCaptionRenderer.java index f8104746c..c78da2c3b 100644 --- a/src/main/java/net/bootsfaces/component/carouselCaption/CarouselCaptionRenderer.java +++ b/src/main/java/net/bootsfaces/component/carouselCaption/CarouselCaptionRenderer.java @@ -28,7 +28,6 @@ import net.bootsfaces.component.ajax.AJAXRenderer; import net.bootsfaces.render.CoreRenderer; -import net.bootsfaces.render.IHasTooltip; import net.bootsfaces.render.Tooltip; /** This class generates the HTML code of <b:carouselCaption />. */ @@ -49,10 +48,7 @@ public class CarouselCaptionRenderer extends CoreRenderer { */ @Override public void decode(FacesContext context, UIComponent component) { - CarouselCaption carouselCaption = (CarouselCaption) component; - new AJAXRenderer().decode(context, component); - } /** @@ -122,7 +118,7 @@ public void encodeEnd(FacesContext context, UIComponent component) throws IOExce ResponseWriter rw = context.getResponseWriter(); rw.endElement("div"); if (component instanceof CarouselCaption) { - Tooltip.activateTooltips(context, (IHasTooltip) component); + Tooltip.activateTooltips(context, component); } } diff --git a/src/main/java/net/bootsfaces/component/carouselControl/CarouselControl.java b/src/main/java/net/bootsfaces/component/carouselControl/CarouselControl.java index 0a5f37dab..e7a7bbd3f 100644 --- a/src/main/java/net/bootsfaces/component/carouselControl/CarouselControl.java +++ b/src/main/java/net/bootsfaces/component/carouselControl/CarouselControl.java @@ -45,7 +45,7 @@ public class CarouselControl extends UICommand public static final String DEFAULT_RENDERER = "net.bootsfaces.component.carouselControl.CarouselControl"; public CarouselControl() { - Tooltip.addResourceFile(); + Tooltip.addResourceFiles(); setRendererType(DEFAULT_RENDERER); } diff --git a/src/main/java/net/bootsfaces/component/carouselItem/CarouselItem.java b/src/main/java/net/bootsfaces/component/carouselItem/CarouselItem.java index 30d850363..d677d41b4 100644 --- a/src/main/java/net/bootsfaces/component/carouselItem/CarouselItem.java +++ b/src/main/java/net/bootsfaces/component/carouselItem/CarouselItem.java @@ -45,7 +45,7 @@ public class CarouselItem extends UICommand public static final String DEFAULT_RENDERER = "net.bootsfaces.component.carouselItem.CarouselItem"; public CarouselItem() { - Tooltip.addResourceFile(); + Tooltip.addResourceFiles(); setRendererType(DEFAULT_RENDERER); } diff --git a/src/main/java/net/bootsfaces/component/colorPicker/ColorPicker.java b/src/main/java/net/bootsfaces/component/colorPicker/ColorPicker.java index 6bb5944ce..b5b09dc5d 100644 --- a/src/main/java/net/bootsfaces/component/colorPicker/ColorPicker.java +++ b/src/main/java/net/bootsfaces/component/colorPicker/ColorPicker.java @@ -40,15 +40,10 @@ public class ColorPicker extends HtmlInputText implements IHasTooltip, IAJAXComp public ColorPicker() { setRendererType("net.bootsfaces.component.colorPicker.ColorPicker"); - Tooltip.addResourceFile(); - // AddResourcesListener.addBasicJSResource("javax.faces", "jsf.js"); - // AddResourcesListener.addBasicJSResource("bsf", "js/bsf.js"); + Tooltip.addResourceFiles(); AddResourcesListener.addThemedCSSResource("bsf.css"); AddResourcesListener.addThemedCSSResource("jquery.minicolors.css"); AddResourcesListener.addThemedCSSResource("core.css"); - AddResourcesListener.addThemedCSSResource("tooltip.css"); - // AddResourcesListener.addResourceToHeadButAfterJQuery(C.BSF_LIBRARY, - // "jq/jquery.js"); AddResourcesListener.addResourceToHeadButAfterJQuery(C.BSF_LIBRARY, "js/jquery.minicolors.min.js"); renderLabel = FacesContext.getCurrentInstance().getExternalContext() diff --git a/src/main/java/net/bootsfaces/component/column/Column.java b/src/main/java/net/bootsfaces/component/column/Column.java index 3a06fb299..db0b0d43e 100644 --- a/src/main/java/net/bootsfaces/component/column/Column.java +++ b/src/main/java/net/bootsfaces/component/column/Column.java @@ -38,9 +38,8 @@ public class Column extends UIOutput implements net.bootsfaces.render.IHasToolti public static final String DEFAULT_RENDERER = "net.bootsfaces.component.column.Column"; public Column() { - Tooltip.addResourceFile(); + Tooltip.addResourceFiles(); AddResourcesListener.addThemedCSSResource("core.css"); - AddResourcesListener.addThemedCSSResource("tooltip.css"); setRendererType(DEFAULT_RENDERER); } diff --git a/src/main/java/net/bootsfaces/component/commandButton/CommandButton.java b/src/main/java/net/bootsfaces/component/commandButton/CommandButton.java index 0f3e7da37..97ff51cd8 100644 --- a/src/main/java/net/bootsfaces/component/commandButton/CommandButton.java +++ b/src/main/java/net/bootsfaces/component/commandButton/CommandButton.java @@ -69,13 +69,8 @@ public class CommandButton extends UICommand implements ClientBehaviorHolder, IH public CommandButton() { setRendererType(DEFAULT_RENDERER); // this component renders itself - // AddResourcesListener.addBasicJSResource("javax.faces", "jsf.js"); - // AddResourcesListener.addBasicJSResource("bsf", "js/bsf.js"); AddResourcesListener.addThemedCSSResource("core.css"); - AddResourcesListener.addThemedCSSResource("tooltip.css"); - // AddResourcesListener.addResourceToHeadButAfterJQuery(C.BSF_LIBRARY, - // "jq/jquery.js"); - Tooltip.addResourceFile(); + Tooltip.addResourceFiles(); } /** diff --git a/src/main/java/net/bootsfaces/component/commandButton/CommandButtonRenderer.java b/src/main/java/net/bootsfaces/component/commandButton/CommandButtonRenderer.java index e5416830a..f209c9dc1 100644 --- a/src/main/java/net/bootsfaces/component/commandButton/CommandButtonRenderer.java +++ b/src/main/java/net/bootsfaces/component/commandButton/CommandButtonRenderer.java @@ -149,7 +149,7 @@ public void encodeEnd(FacesContext context, UIComponent component) throws IOExce rw.endElement("button"); - Tooltip.activateTooltips(context, attrs, component); + Tooltip.activateTooltips(context, component); } private String getStyleClasses(CommandButton component) { diff --git a/src/main/java/net/bootsfaces/component/container/Container.java b/src/main/java/net/bootsfaces/component/container/Container.java index 53822f66e..91ac73bdb 100644 --- a/src/main/java/net/bootsfaces/component/container/Container.java +++ b/src/main/java/net/bootsfaces/component/container/Container.java @@ -38,11 +38,8 @@ public class Container extends UIOutput implements net.bootsfaces.render.IHasToo public static final String DEFAULT_RENDERER = "net.bootsfaces.component.container.Container"; public Container() { - Tooltip.addResourceFile(); - // AddResourcesListener.addResourceToHeadButAfterJQuery(C.BSF_LIBRARY, - // "jq/jquery.js"); + Tooltip.addResourceFiles(); AddResourcesListener.addThemedCSSResource("core.css"); - AddResourcesListener.addThemedCSSResource("tooltip.css"); setRendererType(DEFAULT_RENDERER); } diff --git a/src/main/java/net/bootsfaces/component/dataTable/DataTable.java b/src/main/java/net/bootsfaces/component/dataTable/DataTable.java index 7e58b1536..80882a570 100644 --- a/src/main/java/net/bootsfaces/component/dataTable/DataTable.java +++ b/src/main/java/net/bootsfaces/component/dataTable/DataTable.java @@ -59,11 +59,10 @@ public enum DataTablePropertyType { } public DataTable() { - Tooltip.addResourceFile(); setRendererType(DEFAULT_RENDERER); + Tooltip.addResourceFiles(); AddResourcesListener.addThemedCSSResource("core.css"); AddResourcesListener.addThemedCSSResource("bsf.css"); - AddResourcesListener.addThemedCSSResource("tooltip.css"); } public void setValueExpression(String name, ValueExpression binding) { diff --git a/src/main/java/net/bootsfaces/component/datePicker/DatePicker.java b/src/main/java/net/bootsfaces/component/datePicker/DatePicker.java index 99a917e67..9b349285f 100644 --- a/src/main/java/net/bootsfaces/component/datePicker/DatePicker.java +++ b/src/main/java/net/bootsfaces/component/datePicker/DatePicker.java @@ -94,7 +94,6 @@ public DatePicker() { AddResourcesListener.addThemedCSSResource("jq.ui.theme.css"); AddResourcesListener.addThemedCSSResource("jq.ui.datepicker.css"); AddResourcesListener.addThemedCSSResource("bsf.css"); - AddResourcesListener.addThemedCSSResource("tooltip.css"); AddResourcesListener.addResourceToHeadButAfterJQuery(C.BSF_LIBRARY, "jq/ui/core.js"); AddResourcesListener.addResourceToHeadButAfterJQuery(C.BSF_LIBRARY, "jq/ui/datepicker.js"); @@ -117,7 +116,7 @@ public DatePicker() { } } - Tooltip.addResourceFile(); + Tooltip.addResourceFiles(); } public void setValueExpression(String name, ValueExpression binding) { @@ -189,7 +188,7 @@ public void encodeBegin(FacesContext fc) throws IOException { encodeHTML(fc); encodeDefaultLanguageJS(fc); - Tooltip.activateTooltips(fc, getAttributes(), this); + Tooltip.activateTooltips(fc, this); } /** diff --git a/src/main/java/net/bootsfaces/component/dropButton/DropButton.java b/src/main/java/net/bootsfaces/component/dropButton/DropButton.java index e60730375..deea4a72c 100644 --- a/src/main/java/net/bootsfaces/component/dropButton/DropButton.java +++ b/src/main/java/net/bootsfaces/component/dropButton/DropButton.java @@ -42,8 +42,7 @@ public DropButton() { // "jq/jquery.js"); AddResourcesListener.addThemedCSSResource("dropdowns.css"); AddResourcesListener.addThemedCSSResource("core.css"); - AddResourcesListener.addThemedCSSResource("tooltip.css"); - Tooltip.addResourceFile(); + Tooltip.addResourceFiles(); AddResourcesListener.addResourceToHeadButAfterJQuery("bsf", "js/dropdown.js"); setRendererType(DEFAULT_RENDERER); } diff --git a/src/main/java/net/bootsfaces/component/dropMenu/DropMenu.java b/src/main/java/net/bootsfaces/component/dropMenu/DropMenu.java index 4c3739f52..a2b150cbf 100644 --- a/src/main/java/net/bootsfaces/component/dropMenu/DropMenu.java +++ b/src/main/java/net/bootsfaces/component/dropMenu/DropMenu.java @@ -41,11 +41,11 @@ public class DropMenu extends UIComponentBase implements net.bootsfaces.render.I public static final String DEFAULT_RENDERER = "net.bootsfaces.component.dropMenu.DropMenu"; public DropMenu() { - Tooltip.addResourceFile(); + Tooltip.addResourceFiles(); + // AddResourcesListener.addResourceToHeadButAfterJQuery(C.BSF_LIBRARY, "jq/jquery.js"); AddResourcesListener.addThemedCSSResource("dropdowns.css"); AddResourcesListener.addThemedCSSResource("dropdown-submenu.css"); AddResourcesListener.addThemedCSSResource("core.css"); - AddResourcesListener.addThemedCSSResource("tooltip.css"); setRendererType(DEFAULT_RENDERER); } diff --git a/src/main/java/net/bootsfaces/component/flyOutMenu/FlyOutMenu.java b/src/main/java/net/bootsfaces/component/flyOutMenu/FlyOutMenu.java index da1bc0713..4155875e8 100644 --- a/src/main/java/net/bootsfaces/component/flyOutMenu/FlyOutMenu.java +++ b/src/main/java/net/bootsfaces/component/flyOutMenu/FlyOutMenu.java @@ -38,9 +38,8 @@ public class FlyOutMenu extends UIOutput implements net.bootsfaces.render.IHasTo public static final String DEFAULT_RENDERER = "net.bootsfaces.component.flyOutMenu.FlyOutMenu"; public FlyOutMenu() { - Tooltip.addResourceFile(); + Tooltip.addResourceFiles(); AddResourcesListener.addThemedCSSResource("core.css"); - AddResourcesListener.addThemedCSSResource("tooltip.css"); setRendererType(DEFAULT_RENDERER); } diff --git a/src/main/java/net/bootsfaces/component/icon/Icon.java b/src/main/java/net/bootsfaces/component/icon/Icon.java index 19f5b7715..3a94776be 100644 --- a/src/main/java/net/bootsfaces/component/icon/Icon.java +++ b/src/main/java/net/bootsfaces/component/icon/Icon.java @@ -45,11 +45,8 @@ public class Icon extends UICommand implements net.bootsfaces.render.IHasTooltip public static final String DEFAULT_RENDERER = "net.bootsfaces.component.icon.Icon"; public Icon() { - Tooltip.addResourceFile(); - // AddResourcesListener.addBasicJSResource("javax.faces", "jsf.js"); - // AddResourcesListener.addBasicJSResource("bsf", "js/bsf.js"); + Tooltip.addResourceFiles(); AddResourcesListener.addThemedCSSResource("core.css"); - AddResourcesListener.addThemedCSSResource("tooltip.css"); AddResourcesListener.addThemedCSSResource("icons.css"); setRendererType(DEFAULT_RENDERER); } diff --git a/src/main/java/net/bootsfaces/component/iconAwesome/IconAwesome.java b/src/main/java/net/bootsfaces/component/iconAwesome/IconAwesome.java index 7e586228a..9fd1034c4 100644 --- a/src/main/java/net/bootsfaces/component/iconAwesome/IconAwesome.java +++ b/src/main/java/net/bootsfaces/component/iconAwesome/IconAwesome.java @@ -38,11 +38,10 @@ public class IconAwesome extends Icon { public static final String DEFAULT_RENDERER = "net.bootsfaces.component.iconAwesome.IconAwesome"; public IconAwesome() { - Tooltip.addResourceFile(); + Tooltip.addResourceFiles(); AddResourcesListener.addBasicJSResource("javax.faces", "jsf.js"); AddResourcesListener.addBasicJSResource("bsf", "js/bsf.js"); AddResourcesListener.addThemedCSSResource("core.css"); - AddResourcesListener.addThemedCSSResource("tooltip.css"); // AddResourcesListener.addThemedCSSResource("font-awesome.css"); setRendererType(DEFAULT_RENDERER); } diff --git a/src/main/java/net/bootsfaces/component/image/Image.java b/src/main/java/net/bootsfaces/component/image/Image.java index c1f2ddfb0..48d8cb511 100644 --- a/src/main/java/net/bootsfaces/component/image/Image.java +++ b/src/main/java/net/bootsfaces/component/image/Image.java @@ -26,12 +26,9 @@ public class Image extends UICommand public static final String DEFAULT_RENDERER = "net.bootsfaces.component.image.Image"; - public Image() { - Tooltip.addResourceFile(); - // AddResourcesListener.addBasicJSResource("javax.faces", "jsf.js"); - // AddResourcesListener.addBasicJSResource("bsf", "js/bsf.js"); + public Image() { + Tooltip.addResourceFiles(); AddResourcesListener.addThemedCSSResource("core.css"); - AddResourcesListener.addThemedCSSResource("tooltip.css"); AddResourcesListener.addThemedCSSResource("bsf.css"); setRendererType(DEFAULT_RENDERER); } diff --git a/src/main/java/net/bootsfaces/component/inputText/InputText.java b/src/main/java/net/bootsfaces/component/inputText/InputText.java index e2f123fef..f29bd50a4 100644 --- a/src/main/java/net/bootsfaces/component/inputText/InputText.java +++ b/src/main/java/net/bootsfaces/component/inputText/InputText.java @@ -78,11 +78,10 @@ public String getDefaultEventName() { public InputText() { setRendererType("net.bootsfaces.component.inputText.InputText"); - Tooltip.addResourceFile(); + Tooltip.addResourceFiles(); AddResourcesListener.addBasicJSResource("javax.faces", "jsf.js"); AddResourcesListener.addBasicJSResource("bsf", "js/bsf.js"); AddResourcesListener.addThemedCSSResource("core.css"); - AddResourcesListener.addThemedCSSResource("tooltip.css"); AddResourcesListener.addThemedCSSResource("bsf.css"); renderLabel = FacesContext.getCurrentInstance().getExternalContext() .getInitParameter("net.bootsfaces.defaults.renderLabel"); diff --git a/src/main/java/net/bootsfaces/component/inputTextarea/InputTextarea.java b/src/main/java/net/bootsfaces/component/inputTextarea/InputTextarea.java index d1a1dbf77..0935f72c0 100644 --- a/src/main/java/net/bootsfaces/component/inputTextarea/InputTextarea.java +++ b/src/main/java/net/bootsfaces/component/inputTextarea/InputTextarea.java @@ -83,9 +83,8 @@ public InputTextarea() { AddResourcesListener.addBasicJSResource("javax.faces", "jsf.js"); AddResourcesListener.addBasicJSResource("bsf", "js/bsf.js"); AddResourcesListener.addThemedCSSResource("core.css"); - AddResourcesListener.addThemedCSSResource("tooltip.css"); AddResourcesListener.addThemedCSSResource("bsf.css"); - Tooltip.addResourceFile(); + Tooltip.addResourceFiles(); } public void setValueExpression(String name, ValueExpression binding) { diff --git a/src/main/java/net/bootsfaces/component/jumbotron/Jumbotron.java b/src/main/java/net/bootsfaces/component/jumbotron/Jumbotron.java index 5825520b7..f73cfdfa3 100644 --- a/src/main/java/net/bootsfaces/component/jumbotron/Jumbotron.java +++ b/src/main/java/net/bootsfaces/component/jumbotron/Jumbotron.java @@ -39,9 +39,8 @@ public class Jumbotron extends UIOutput implements net.bootsfaces.render.IHasToo public Jumbotron() { - Tooltip.addResourceFile(); + Tooltip.addResourceFiles(); AddResourcesListener.addThemedCSSResource("core.css"); - AddResourcesListener.addThemedCSSResource("tooltip.css"); AddResourcesListener.addThemedCSSResource("jumbotron.css"); setRendererType(DEFAULT_RENDERER); } diff --git a/src/main/java/net/bootsfaces/component/label/Label.java b/src/main/java/net/bootsfaces/component/label/Label.java index 965398580..19d2963f8 100644 --- a/src/main/java/net/bootsfaces/component/label/Label.java +++ b/src/main/java/net/bootsfaces/component/label/Label.java @@ -53,9 +53,8 @@ public class Label extends UIComponentBase { public Label() { setRendererType(null); // this component renders itself AddResourcesListener.addThemedCSSResource("core.css"); - AddResourcesListener.addThemedCSSResource("tooltip.css"); AddResourcesListener.addThemedCSSResource("labels.css"); - Tooltip.addResourceFile(); + Tooltip.addResourceFiles(); } public void setValueExpression(String name, ValueExpression binding) { @@ -90,7 +89,7 @@ public void encodeBegin(FacesContext context) throws IOException { rw.writeAttribute("class", sclass, "class"); rw.writeText(txt, null); rw.endElement("span"); - Tooltip.activateTooltips(context, this.getAttributes(), this); + Tooltip.activateTooltips(context, this); } @Override diff --git a/src/main/java/net/bootsfaces/component/linksContainer/LinksContainer.java b/src/main/java/net/bootsfaces/component/linksContainer/LinksContainer.java index e4797e222..ea595272e 100644 --- a/src/main/java/net/bootsfaces/component/linksContainer/LinksContainer.java +++ b/src/main/java/net/bootsfaces/component/linksContainer/LinksContainer.java @@ -39,7 +39,6 @@ */ public class LinksContainer extends UIComponentBase { - /** *

* The standard component type for this component. @@ -55,9 +54,8 @@ public class LinksContainer extends UIComponentBase { public LinksContainer() { setRendererType(null); // this component renders itself - Tooltip.addResourceFile(); + Tooltip.addResourceFiles(); AddResourcesListener.addThemedCSSResource("core.css"); - AddResourcesListener.addThemedCSSResource("tooltip.css"); AddResourcesListener.addThemedCSSResource("bsf.css"); } @@ -87,7 +85,7 @@ public void encodeBegin(FacesContext fc) throws IOException { if (null != style && style.length() > 0) { rw.writeAttribute("style", style, "style"); } - Tooltip.generateTooltip(fc, attrs, rw); + Tooltip.generateTooltip(fc, this, rw); String styleClass = (String) attrs.get("styleClass"); if (null == styleClass) { styleClass = ""; @@ -98,7 +96,6 @@ public void encodeBegin(FacesContext fc) throws IOException { } else { rw.writeAttribute("class", styleClass.concat(" ").concat(getContainerStyles()), "class"); } - } /** @@ -114,12 +111,11 @@ protected String getContainerStyles() { @Override public void encodeEnd(FacesContext fc) throws IOException { fc.getResponseWriter().endElement("ul"); - Tooltip.activateTooltips(fc, getAttributes(), this); + Tooltip.activateTooltips(fc, this); } @Override public String getFamily() { return COMPONENT_FAMILY; } - } diff --git a/src/main/java/net/bootsfaces/component/listLinks/ListLinks.java b/src/main/java/net/bootsfaces/component/listLinks/ListLinks.java index 4b1d0d791..d668087da 100644 --- a/src/main/java/net/bootsfaces/component/listLinks/ListLinks.java +++ b/src/main/java/net/bootsfaces/component/listLinks/ListLinks.java @@ -25,6 +25,7 @@ import net.bootsfaces.C; import net.bootsfaces.component.linksContainer.LinksContainer; import net.bootsfaces.listeners.AddResourcesListener; +import net.bootsfaces.render.Tooltip; import net.bootsfaces.utils.BsfUtils; /** @@ -57,20 +58,17 @@ public void setValueExpression(String name, ValueExpression binding) { public ListLinks() { setRendererType(null); // this component renders itself AddResourcesListener.addThemedCSSResource("core.css"); - AddResourcesListener.addThemedCSSResource("tooltip.css"); - } - - /* - *

- */ - @Override - protected String getContainerStyles() { - return STYLE; - } - - @Override - public String getFamily() { - return COMPONENT_FAMILY; - } + Tooltip.addResourceFiles(); + } + + /* + * + */ + @Override + protected String getContainerStyles() { + return STYLE; + } } diff --git a/src/main/java/net/bootsfaces/component/message/Message.java b/src/main/java/net/bootsfaces/component/message/Message.java index b58a400ab..6695e99eb 100644 --- a/src/main/java/net/bootsfaces/component/message/Message.java +++ b/src/main/java/net/bootsfaces/component/message/Message.java @@ -42,7 +42,6 @@ public class Message extends UIMessage { public Message() { setRendererType(DEFAULT_RENDERER); AddResourcesListener.addThemedCSSResource("core.css"); - AddResourcesListener.addThemedCSSResource("tooltip.css"); AddResourcesListener.addThemedCSSResource("alerts.css"); AddResourcesListener.addThemedCSSResource("bsf.css"); } diff --git a/src/main/java/net/bootsfaces/component/messages/Messages.java b/src/main/java/net/bootsfaces/component/messages/Messages.java index 1939ae78e..05ca69cc4 100644 --- a/src/main/java/net/bootsfaces/component/messages/Messages.java +++ b/src/main/java/net/bootsfaces/component/messages/Messages.java @@ -42,7 +42,6 @@ public class Messages extends javax.faces.component.UIMessages { public Messages() { super(); AddResourcesListener.addThemedCSSResource("core.css"); - AddResourcesListener.addThemedCSSResource("tooltip.css"); AddResourcesListener.addThemedCSSResource("alerts.css"); AddResourcesListener.addThemedCSSResource("bsf.css"); setRendererType("net.bootsfaces.component.messages.MessagesRenderer"); diff --git a/src/main/java/net/bootsfaces/component/modal/Modal.java b/src/main/java/net/bootsfaces/component/modal/Modal.java index 9175847dd..458ffcf71 100644 --- a/src/main/java/net/bootsfaces/component/modal/Modal.java +++ b/src/main/java/net/bootsfaces/component/modal/Modal.java @@ -42,7 +42,6 @@ public class Modal extends UIComponentBase { public Modal() { setRendererType(DEFAULT_RENDERER); AddResourcesListener.addThemedCSSResource("core.css"); - AddResourcesListener.addThemedCSSResource("tooltip.css"); AddResourcesListener.addThemedCSSResource("modals.css"); // AddResourcesListener.addResourceToHeadButAfterJQuery(C.BSF_LIBRARY, // "jq/jquery.js"); diff --git a/src/main/java/net/bootsfaces/component/navBar/NavBar.java b/src/main/java/net/bootsfaces/component/navBar/NavBar.java index 7c636a185..0c529c6a0 100644 --- a/src/main/java/net/bootsfaces/component/navBar/NavBar.java +++ b/src/main/java/net/bootsfaces/component/navBar/NavBar.java @@ -51,9 +51,8 @@ public class NavBar extends UIComponentBase implements net.bootsfaces.render.IHa public NavBar() { // AddResourcesListener.addResourceToHeadButAfterJQuery(C.BSF_LIBRARY, // "jq/jquery.js"); - Tooltip.addResourceFile(); + Tooltip.addResourceFiles(); AddResourcesListener.addThemedCSSResource("core.css"); - AddResourcesListener.addThemedCSSResource("tooltip.css"); AddResourcesListener.addThemedCSSResource("navbar.css"); AddResourcesListener.addThemedCSSResource("bsf.css"); setRendererType(DEFAULT_RENDERER); diff --git a/src/main/java/net/bootsfaces/component/navBar/NavBarRenderer.java b/src/main/java/net/bootsfaces/component/navBar/NavBarRenderer.java index 618ef9e48..8f3b6e2bc 100644 --- a/src/main/java/net/bootsfaces/component/navBar/NavBarRenderer.java +++ b/src/main/java/net/bootsfaces/component/navBar/NavBarRenderer.java @@ -223,7 +223,7 @@ public void encodeEnd(FacesContext context, UIComponent component) throws IOExce rw.endElement("div"); // collapse rw.endElement("div"); // container rw.endElement("div"); // navbar - Tooltip.activateTooltips(context, component.getAttributes(), component); + Tooltip.activateTooltips(context, component); } diff --git a/src/main/java/net/bootsfaces/component/navBarLinks/NavBarLinks.java b/src/main/java/net/bootsfaces/component/navBarLinks/NavBarLinks.java index e4e8aa356..f25ef2e64 100644 --- a/src/main/java/net/bootsfaces/component/navBarLinks/NavBarLinks.java +++ b/src/main/java/net/bootsfaces/component/navBarLinks/NavBarLinks.java @@ -53,7 +53,6 @@ public class NavBarLinks extends LinksContainer { public NavBarLinks() { setRendererType(null); // this component renders itself AddResourcesListener.addThemedCSSResource("core.css"); - AddResourcesListener.addThemedCSSResource("tooltip.css"); } public void setValueExpression(String name, ValueExpression binding) { diff --git a/src/main/java/net/bootsfaces/component/navLink/NavCommandLink.java b/src/main/java/net/bootsfaces/component/navLink/NavCommandLink.java index 08b1454df..90dc463a8 100644 --- a/src/main/java/net/bootsfaces/component/navLink/NavCommandLink.java +++ b/src/main/java/net/bootsfaces/component/navLink/NavCommandLink.java @@ -46,13 +46,8 @@ public class NavCommandLink extends UICommand public static final String DEFAULT_RENDERER = "net.bootsfaces.component.navLink.NavLink"; public NavCommandLink() { - Tooltip.addResourceFile(); - // AddResourcesListener.addBasicJSResource("javax.faces", "jsf.js"); - // AddResourcesListener.addBasicJSResource("bsf", "js/bsf.js"); + Tooltip.addResourceFiles(); AddResourcesListener.addThemedCSSResource("core.css"); - AddResourcesListener.addThemedCSSResource("tooltip.css"); - // AddResourcesListener.addResourceToHeadButAfterJQuery(C.BSF_LIBRARY, - // "jq/jquery.js"); setRendererType(DEFAULT_RENDERER); } diff --git a/src/main/java/net/bootsfaces/component/navLink/NavLink.java b/src/main/java/net/bootsfaces/component/navLink/NavLink.java index a42fd4ae9..8e09bac03 100644 --- a/src/main/java/net/bootsfaces/component/navLink/NavLink.java +++ b/src/main/java/net/bootsfaces/component/navLink/NavLink.java @@ -46,13 +46,8 @@ public class NavLink extends HtmlOutcomeTargetLink public static final String DEFAULT_RENDERER = "net.bootsfaces.component.navLink.NavLink"; public NavLink() { - Tooltip.addResourceFile(); - // AddResourcesListener.addBasicJSResource("javax.faces", "jsf.js"); - // AddResourcesListener.addBasicJSResource("bsf", "js/bsf.js"); + Tooltip.addResourceFiles(); AddResourcesListener.addThemedCSSResource("core.css"); - AddResourcesListener.addThemedCSSResource("tooltip.css"); - // AddResourcesListener.addResourceToHeadButAfterJQuery(C.BSF_LIBRARY, - // "jq/jquery.js"); setRendererType(DEFAULT_RENDERER); } diff --git a/src/main/java/net/bootsfaces/component/navLink/NavLinkRenderer.java b/src/main/java/net/bootsfaces/component/navLink/NavLinkRenderer.java index 0bb46c47b..23f38bef1 100644 --- a/src/main/java/net/bootsfaces/component/navLink/NavLinkRenderer.java +++ b/src/main/java/net/bootsfaces/component/navLink/NavLinkRenderer.java @@ -89,8 +89,7 @@ public void encodeBegin(FacesContext context, UIComponent component) throws IOEx encodeHTML(context, (UIComponent) navlink); } } // if header - Tooltip.activateTooltips(context, navlink); - + Tooltip.activateTooltips(context, component); } public void encodeHeader(FacesContext context, String h, UIComponent navlink) throws IOException { diff --git a/src/main/java/net/bootsfaces/component/panel/Panel.java b/src/main/java/net/bootsfaces/component/panel/Panel.java index 15d86035d..b4ea8cde6 100644 --- a/src/main/java/net/bootsfaces/component/panel/Panel.java +++ b/src/main/java/net/bootsfaces/component/panel/Panel.java @@ -50,9 +50,8 @@ public class Panel extends UIComponentBase public static final String DEFAULT_RENDERER = "net.bootsfaces.component.panel.Panel"; public Panel() { - Tooltip.addResourceFile(); + Tooltip.addResourceFiles(); AddResourcesListener.addThemedCSSResource("core.css"); - AddResourcesListener.addThemedCSSResource("tooltip.css"); AddResourcesListener.addThemedCSSResource("bsf.css"); AddResourcesListener.addThemedCSSResource("panels.css"); setRendererType(DEFAULT_RENDERER); diff --git a/src/main/java/net/bootsfaces/component/panel/PanelRenderer.java b/src/main/java/net/bootsfaces/component/panel/PanelRenderer.java index 7200b7e08..75e575df1 100644 --- a/src/main/java/net/bootsfaces/component/panel/PanelRenderer.java +++ b/src/main/java/net/bootsfaces/component/panel/PanelRenderer.java @@ -264,7 +264,7 @@ public void encodeEnd(FacesContext context, UIComponent component) throws IOExce + "').value='true';"); new AJAXRenderer().generateBootsFacesAJAXAndJavaScriptForJQuery(context, component, rw, jQueryClientID+"content", eventHandlers); } - Tooltip.activateTooltips(context, panel.getAttributes(), panel); + Tooltip.activateTooltips(context, panel); } // $('#j_idt40_j_idt43content').on('show.bs.collapse', function(){ document.getElementById('j_idt40_j_idt43_collapsed').value='false'; }); } diff --git a/src/main/java/net/bootsfaces/component/panelGrid/PanelGrid.java b/src/main/java/net/bootsfaces/component/panelGrid/PanelGrid.java index dfbfd43bc..905efec62 100644 --- a/src/main/java/net/bootsfaces/component/panelGrid/PanelGrid.java +++ b/src/main/java/net/bootsfaces/component/panelGrid/PanelGrid.java @@ -71,9 +71,8 @@ public class PanelGrid extends UIOutput implements net.bootsfaces.render.IHasToo public static final String DEFAULT_RENDERER = "net.bootsfaces.component.panelGrid.PanelGrid"; public PanelGrid() { - Tooltip.addResourceFile(); + Tooltip.addResourceFiles(); AddResourcesListener.addThemedCSSResource("core.css"); - AddResourcesListener.addThemedCSSResource("tooltip.css"); setRendererType(DEFAULT_RENDERER); } diff --git a/src/main/java/net/bootsfaces/component/pillLinks/PillLinks.java b/src/main/java/net/bootsfaces/component/pillLinks/PillLinks.java index 34ef49f70..1d40d03f7 100644 --- a/src/main/java/net/bootsfaces/component/pillLinks/PillLinks.java +++ b/src/main/java/net/bootsfaces/component/pillLinks/PillLinks.java @@ -44,7 +44,6 @@ public class PillLinks extends LinksContainer { public PillLinks() { setRendererType(null); // this component renders itself AddResourcesListener.addThemedCSSResource("core.css"); - AddResourcesListener.addThemedCSSResource("tooltip.css"); } public void setValueExpression(String name, ValueExpression binding) { diff --git a/src/main/java/net/bootsfaces/component/poll/Poll.java b/src/main/java/net/bootsfaces/component/poll/Poll.java index 368db6bba..3a9fece16 100644 --- a/src/main/java/net/bootsfaces/component/poll/Poll.java +++ b/src/main/java/net/bootsfaces/component/poll/Poll.java @@ -30,7 +30,7 @@ import javax.faces.event.ActionEvent; import net.bootsfaces.C; -import net.bootsfaces.listeners.AddResourcesListener; +import net.bootsfaces.render.Tooltip; import net.bootsfaces.utils.BsfUtils; /** @@ -55,10 +55,8 @@ public class Poll extends HtmlCommandButton { public static final String COMPONENT_FAMILY = C.BSFCOMPONENT; public Poll() { - // AddResourcesListener.addBasicJSResource("javax.faces", "jsf.js"); - AddResourcesListener.addThemedCSSResource("tooltip.css"); - setRendererType(null); // this component renders itself + Tooltip.addResourceFiles(); } public void setValueExpression(String name, ValueExpression binding) { diff --git a/src/main/java/net/bootsfaces/component/progressBar/ProgressBar.java b/src/main/java/net/bootsfaces/component/progressBar/ProgressBar.java index dc61d9aad..0d9a4ce23 100644 --- a/src/main/java/net/bootsfaces/component/progressBar/ProgressBar.java +++ b/src/main/java/net/bootsfaces/component/progressBar/ProgressBar.java @@ -39,7 +39,7 @@ public class ProgressBar extends UIOutput implements net.bootsfaces.render.IHasT public ProgressBar() { AddResourcesListener.addThemedCSSResource("progress-bars.css"); - Tooltip.addResourceFile(); + Tooltip.addResourceFiles(); setRendererType(DEFAULT_RENDERER); } diff --git a/src/main/java/net/bootsfaces/component/row/Row.java b/src/main/java/net/bootsfaces/component/row/Row.java index 4007287db..378ca5e97 100644 --- a/src/main/java/net/bootsfaces/component/row/Row.java +++ b/src/main/java/net/bootsfaces/component/row/Row.java @@ -38,9 +38,8 @@ public class Row extends UIOutput implements net.bootsfaces.render.IHasTooltip { public static final String DEFAULT_RENDERER = "net.bootsfaces.component.row.Row"; public Row() { - Tooltip.addResourceFile(); + Tooltip.addResourceFiles(); AddResourcesListener.addThemedCSSResource("core.css"); - AddResourcesListener.addThemedCSSResource("tooltip.css"); setRendererType(DEFAULT_RENDERER); } diff --git a/src/main/java/net/bootsfaces/component/row/RowRenderer.java b/src/main/java/net/bootsfaces/component/row/RowRenderer.java index f068ee4b8..a874a697b 100644 --- a/src/main/java/net/bootsfaces/component/row/RowRenderer.java +++ b/src/main/java/net/bootsfaces/component/row/RowRenderer.java @@ -75,7 +75,7 @@ public void encodeBegin(FacesContext context, UIComponent component) throws IOEx } rw.writeAttribute("class", s, "class"); - Tooltip.activateTooltips(context, row.getAttributes(), row); + Tooltip.activateTooltips(context, row); } /** diff --git a/src/main/java/net/bootsfaces/component/selectBooleanCheckbox/SelectBooleanCheckbox.java b/src/main/java/net/bootsfaces/component/selectBooleanCheckbox/SelectBooleanCheckbox.java index 7ca9ea750..d505f8f5c 100644 --- a/src/main/java/net/bootsfaces/component/selectBooleanCheckbox/SelectBooleanCheckbox.java +++ b/src/main/java/net/bootsfaces/component/selectBooleanCheckbox/SelectBooleanCheckbox.java @@ -73,12 +73,11 @@ public String getDefaultEventName() { } public SelectBooleanCheckbox() { - Tooltip.addResourceFile(); + Tooltip.addResourceFiles(); AddResourcesListener.addBasicJSResource("javax.faces", "jsf.js"); AddResourcesListener.addBasicJSResource("bsf", "js/bsf.js"); AddResourcesListener.addThemedCSSResource("bsf.css"); AddResourcesListener.addThemedCSSResource("core.css"); - AddResourcesListener.addThemedCSSResource("tooltip.css"); setRendererType(DEFAULT_RENDERER); } diff --git a/src/main/java/net/bootsfaces/component/selectMultiMenu/SelectMultiMenu.java b/src/main/java/net/bootsfaces/component/selectMultiMenu/SelectMultiMenu.java index d95dc3a11..743f2d77b 100644 --- a/src/main/java/net/bootsfaces/component/selectMultiMenu/SelectMultiMenu.java +++ b/src/main/java/net/bootsfaces/component/selectMultiMenu/SelectMultiMenu.java @@ -44,13 +44,10 @@ public class SelectMultiMenu extends HtmlInputText implements net.bootsfaces.ren public static final String DEFAULT_RENDERER = "net.bootsfaces.component.selectMultiMenu.SelectMultiMenu"; public SelectMultiMenu() { - Tooltip.addResourceFile(); - // AddResourcesListener.addBasicJSResource("javax.faces", "jsf.js"); - // AddResourcesListener.addBasicJSResource("bsf", "js/bsf.js"); + Tooltip.addResourceFiles(); AddResourcesListener.addThemedCSSResource("dropdowns.css"); AddResourcesListener.addThemedCSSResource("bootstrap-multiselect.css"); AddResourcesListener.addThemedCSSResource("core.css"); - AddResourcesListener.addThemedCSSResource("tooltip.css"); setRendererType(DEFAULT_RENDERER); } diff --git a/src/main/java/net/bootsfaces/component/selectOneMenu/SelectOneMenu.java b/src/main/java/net/bootsfaces/component/selectOneMenu/SelectOneMenu.java index bfef79e15..331d5897e 100644 --- a/src/main/java/net/bootsfaces/component/selectOneMenu/SelectOneMenu.java +++ b/src/main/java/net/bootsfaces/component/selectOneMenu/SelectOneMenu.java @@ -46,13 +46,10 @@ public class SelectOneMenu extends HtmlInputText implements net.bootsfaces.rende public static final String DEFAULT_RENDERER = "net.bootsfaces.component.selectOneMenu.SelectOneMenu"; public SelectOneMenu() { - Tooltip.addResourceFile(); - // AddResourcesListener.addBasicJSResource("javax.faces", "jsf.js"); - // AddResourcesListener.addBasicJSResource("bsf", "js/bsf.js"); + Tooltip.addResourceFiles(); AddResourcesListener.addThemedCSSResource("dropdowns.css"); AddResourcesListener.addThemedCSSResource("bsf.css"); AddResourcesListener.addThemedCSSResource("core.css"); - AddResourcesListener.addThemedCSSResource("tooltip.css"); setRendererType(DEFAULT_RENDERER); } diff --git a/src/main/java/net/bootsfaces/component/slider/Slider.java b/src/main/java/net/bootsfaces/component/slider/Slider.java index 093d025db..c3035b2a0 100644 --- a/src/main/java/net/bootsfaces/component/slider/Slider.java +++ b/src/main/java/net/bootsfaces/component/slider/Slider.java @@ -46,12 +46,11 @@ public Slider() { AddResourcesListener.addThemedCSSResource("jq.ui.slider.css"); AddResourcesListener.addThemedCSSResource("bsf.css"); AddResourcesListener.addThemedCSSResource("core.css"); - AddResourcesListener.addThemedCSSResource("tooltip.css"); - AddResourcesListener.addResourceToHeadButAfterJQuery(C.BSF_LIBRARY, "jq/ui/core.js"); + AddResourcesListener.addResourceToHeadButAfterJQuery(C.BSF_LIBRARY, "jq/ui/core.js"); AddResourcesListener.addResourceToHeadButAfterJQuery(C.BSF_LIBRARY, "jq/ui/widget.js"); AddResourcesListener.addResourceToHeadButAfterJQuery(C.BSF_LIBRARY, "jq/ui/mouse.js"); AddResourcesListener.addResourceToHeadButAfterJQuery(C.BSF_LIBRARY, "jq/ui/slider.js"); - Tooltip.addResourceFile(); + Tooltip.addResourceFiles(); setRendererType(DEFAULT_RENDERER); } diff --git a/src/main/java/net/bootsfaces/component/switchComponent/Switch.java b/src/main/java/net/bootsfaces/component/switchComponent/Switch.java index 03e1322a5..f62fbc8ab 100644 --- a/src/main/java/net/bootsfaces/component/switchComponent/Switch.java +++ b/src/main/java/net/bootsfaces/component/switchComponent/Switch.java @@ -41,13 +41,10 @@ public class Switch extends net.bootsfaces.component.selectBooleanCheckbox.Selec public static final String DEFAULT_RENDERER = "net.bootsfaces.component.switch.Switch"; public Switch() { - Tooltip.addResourceFile(); - // AddResourcesListener.addBasicJSResource("javax.faces", "jsf.js"); - // AddResourcesListener.addBasicJSResource("bsf", "js/bsf.js"); + Tooltip.addResourceFiles(); AddResourcesListener.addThemedCSSResource("bootstrap-switch.css"); AddResourcesListener.addThemedCSSResource("bsf.css"); AddResourcesListener.addThemedCSSResource("core.css"); - AddResourcesListener.addThemedCSSResource("tooltip.css"); setRendererType(DEFAULT_RENDERER); } diff --git a/src/main/java/net/bootsfaces/component/tab/Tab.java b/src/main/java/net/bootsfaces/component/tab/Tab.java index 128477566..a266340b3 100644 --- a/src/main/java/net/bootsfaces/component/tab/Tab.java +++ b/src/main/java/net/bootsfaces/component/tab/Tab.java @@ -68,7 +68,7 @@ public String getDefaultEventName() { public Tab() { - Tooltip.addResourceFile(); + Tooltip.addResourceFiles(); setRendererType(DEFAULT_RENDERER); } diff --git a/src/main/java/net/bootsfaces/component/tabLinks/TabLinks.java b/src/main/java/net/bootsfaces/component/tabLinks/TabLinks.java index 6bb1f3c6e..abd0d0506 100644 --- a/src/main/java/net/bootsfaces/component/tabLinks/TabLinks.java +++ b/src/main/java/net/bootsfaces/component/tabLinks/TabLinks.java @@ -24,6 +24,7 @@ import net.bootsfaces.C; import net.bootsfaces.component.linksContainer.LinksContainer; import net.bootsfaces.listeners.AddResourcesListener; +import net.bootsfaces.render.Tooltip; import net.bootsfaces.utils.BsfUtils; /** @@ -45,7 +46,7 @@ public class TabLinks extends LinksContainer { public TabLinks() { setRendererType(null); // this component renders itself AddResourcesListener.addThemedCSSResource("core.css"); - AddResourcesListener.addThemedCSSResource("tooltip.css"); + Tooltip.addResourceFiles(); } public void setValueExpression(String name, ValueExpression binding) { diff --git a/src/main/java/net/bootsfaces/component/tabView/TabView.java b/src/main/java/net/bootsfaces/component/tabView/TabView.java index 659dc093c..363e83650 100644 --- a/src/main/java/net/bootsfaces/component/tabView/TabView.java +++ b/src/main/java/net/bootsfaces/component/tabView/TabView.java @@ -51,15 +51,10 @@ public class TabView extends UIOutput public static final String DEFAULT_RENDERER = "net.bootsfaces.component.tabView.TabView"; public TabView() { - // AddResourcesListener.addResourceToHeadButAfterJQuery(C.BSF_LIBRARY, - // "jq/jquery.js"); - Tooltip.addResourceFile(); - // AddResourcesListener.addBasicJSResource("javax.faces", "jsf.js"); - // AddResourcesListener.addBasicJSResource("javax.faces", "js/bsf.js"); + Tooltip.addResourceFiles(); AddResourcesListener.addThemedCSSResource("bootstrap-treeview.min.css"); AddResourcesListener.addThemedCSSResource("bsf.css"); AddResourcesListener.addThemedCSSResource("core.css"); - AddResourcesListener.addThemedCSSResource("tooltip.css"); setRendererType(DEFAULT_RENDERER); } diff --git a/src/main/java/net/bootsfaces/component/tabView/TabViewRenderer.java b/src/main/java/net/bootsfaces/component/tabView/TabViewRenderer.java index 45f70c547..c2419ac82 100644 --- a/src/main/java/net/bootsfaces/component/tabView/TabViewRenderer.java +++ b/src/main/java/net/bootsfaces/component/tabView/TabViewRenderer.java @@ -149,7 +149,7 @@ public void encodeBegin(FacesContext context, UIComponent component) throws IOEx } writer.endElement("div"); - Tooltip.activateTooltips(context, tabView.getAttributes(), tabView); + Tooltip.activateTooltips(context, tabView); } /** diff --git a/src/main/java/net/bootsfaces/component/thumbnail/Thumbnail.java b/src/main/java/net/bootsfaces/component/thumbnail/Thumbnail.java index 3fc9cc9e5..02137602e 100644 --- a/src/main/java/net/bootsfaces/component/thumbnail/Thumbnail.java +++ b/src/main/java/net/bootsfaces/component/thumbnail/Thumbnail.java @@ -40,9 +40,8 @@ public class Thumbnail extends UIComponentBase implements net.bootsfaces.render. public Thumbnail() { - Tooltip.addResourceFile(); + Tooltip.addResourceFiles(); AddResourcesListener.addThemedCSSResource("core.css"); - AddResourcesListener.addThemedCSSResource("tooltip.css"); AddResourcesListener.addThemedCSSResource("thumbnails.css"); setRendererType(DEFAULT_RENDERER); } diff --git a/src/main/java/net/bootsfaces/component/tree/Tree.java b/src/main/java/net/bootsfaces/component/tree/Tree.java index d89cd027a..42c94b4dd 100644 --- a/src/main/java/net/bootsfaces/component/tree/Tree.java +++ b/src/main/java/net/bootsfaces/component/tree/Tree.java @@ -57,7 +57,6 @@ public Tree() { AddResourcesListener.addThemedCSSResource("bootstrap-treeview.min.css"); AddResourcesListener.addThemedCSSResource("bsf.css"); AddResourcesListener.addThemedCSSResource("core.css"); - AddResourcesListener.addThemedCSSResource("tooltip.css"); } @Override diff --git a/src/main/java/net/bootsfaces/component/well/Well.java b/src/main/java/net/bootsfaces/component/well/Well.java index e8b6a49da..ec04acd8f 100644 --- a/src/main/java/net/bootsfaces/component/well/Well.java +++ b/src/main/java/net/bootsfaces/component/well/Well.java @@ -38,9 +38,8 @@ public class Well extends UIOutput implements net.bootsfaces.render.IHasTooltip public static final String DEFAULT_RENDERER = "net.bootsfaces.component.well.Well"; public Well() { - Tooltip.addResourceFile(); + Tooltip.addResourceFiles(); AddResourcesListener.addThemedCSSResource("core.css"); - AddResourcesListener.addThemedCSSResource("tooltip.css"); AddResourcesListener.addThemedCSSResource("wells.css"); setRendererType(DEFAULT_RENDERER); } diff --git a/src/main/java/net/bootsfaces/render/R.java b/src/main/java/net/bootsfaces/render/R.java index 8a9d79f39..03981acca 100644 --- a/src/main/java/net/bootsfaces/render/R.java +++ b/src/main/java/net/bootsfaces/render/R.java @@ -126,7 +126,7 @@ public static final void encodeColumn(ResponseWriter rw, UIComponent c, int span } if (null != c) { - Tooltip.activateTooltips(FacesContext.getCurrentInstance(), c.getAttributes(), c); + Tooltip.activateTooltips(FacesContext.getCurrentInstance(), c); } } diff --git a/src/main/java/net/bootsfaces/render/RThumbnail.java b/src/main/java/net/bootsfaces/render/RThumbnail.java index ba5993c50..c835563ec 100644 --- a/src/main/java/net/bootsfaces/render/RThumbnail.java +++ b/src/main/java/net/bootsfaces/render/RThumbnail.java @@ -95,6 +95,6 @@ public static final void encEnd(UIComponent c, FacesContext fc) throws IOExcepti rw.endElement("div"); } rw.endElement("div"); - Tooltip.activateTooltips(fc, c.getAttributes(), c); + Tooltip.activateTooltips(fc, c); } } diff --git a/src/main/java/net/bootsfaces/render/Tooltip.java b/src/main/java/net/bootsfaces/render/Tooltip.java index 47e0f9427..da4c5b959 100644 --- a/src/main/java/net/bootsfaces/render/Tooltip.java +++ b/src/main/java/net/bootsfaces/render/Tooltip.java @@ -160,14 +160,19 @@ else if (value instanceof Integer) { } - public static void addResourceFile() { + /** + * Adds the required resource files for tooltips to the required resources list. + */ + public static void addResourceFiles() { // if (null != getAttributes().get("tooltip")) { + AddResourcesListener.addThemedCSSResource("tooltip.css"); AddResourcesListener.addResourceToHeadButAfterJQuery(C.BSF_LIBRARY, "js/tooltip.js"); // } } - public static void activateTooltips(FacesContext context, Map attributes, UIComponent component) + public static void activateTooltips(FacesContext context, UIComponent component) throws IOException { + Map attributes = component.getAttributes(); if (attributes.get("tooltip") != null) { String id = component.getClientId(); id = id.replace(":", "\\\\:"); // we need to escape the id for @@ -183,21 +188,4 @@ public static void activateTooltips(FacesContext context, Map at context.getResponseWriter().write(""); } } - - public static void activateTooltips(FacesContext context, IHasTooltip component) throws IOException { - if (component.getTooltip() != null) { - String id = ((UIComponent) component).getClientId(); - id = id.replace(":", "\\\\:"); // we need to escape the id for - // jQuery - String delayOptions = generateDelayAttributes(component); - String options = ""; - if (null != delayOptions) - options = "'delay':" + delayOptions + ","; - if (options.length() > 0) - options = "{" + options.substring(0, options.length() - 1) + "}"; - - String js = "$(function () {\n" + "$('#" + id + "').tooltip(" + options + ")\n" + "});\n"; - context.getResponseWriter().write(""); - } - } } From 29f1e6782cb26f84d42e17ced765230d5306ce5c Mon Sep 17 00:00:00 2001 From: Philipp Gruhn Date: Wed, 20 Apr 2016 15:15:16 +0200 Subject: [PATCH 02/15] remove manual adding of bsf and jsf.js --- .../net/bootsfaces/component/inputTextarea/InputTextarea.java | 4 ++-- .../selectBooleanCheckbox/SelectBooleanCheckbox.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/bootsfaces/component/inputTextarea/InputTextarea.java b/src/main/java/net/bootsfaces/component/inputTextarea/InputTextarea.java index 0935f72c0..54e95f5fd 100644 --- a/src/main/java/net/bootsfaces/component/inputTextarea/InputTextarea.java +++ b/src/main/java/net/bootsfaces/component/inputTextarea/InputTextarea.java @@ -80,8 +80,8 @@ public String getFamily() { public InputTextarea() { setRendererType("net.bootsfaces.component.InputTextareaRenderer"); - AddResourcesListener.addBasicJSResource("javax.faces", "jsf.js"); - AddResourcesListener.addBasicJSResource("bsf", "js/bsf.js"); +// AddResourcesListener.addBasicJSResource("javax.faces", "jsf.js"); +// AddResourcesListener.addBasicJSResource("bsf", "js/bsf.js"); AddResourcesListener.addThemedCSSResource("core.css"); AddResourcesListener.addThemedCSSResource("bsf.css"); Tooltip.addResourceFiles(); diff --git a/src/main/java/net/bootsfaces/component/selectBooleanCheckbox/SelectBooleanCheckbox.java b/src/main/java/net/bootsfaces/component/selectBooleanCheckbox/SelectBooleanCheckbox.java index d505f8f5c..67ee46ab1 100644 --- a/src/main/java/net/bootsfaces/component/selectBooleanCheckbox/SelectBooleanCheckbox.java +++ b/src/main/java/net/bootsfaces/component/selectBooleanCheckbox/SelectBooleanCheckbox.java @@ -74,8 +74,8 @@ public String getDefaultEventName() { public SelectBooleanCheckbox() { Tooltip.addResourceFiles(); - AddResourcesListener.addBasicJSResource("javax.faces", "jsf.js"); - AddResourcesListener.addBasicJSResource("bsf", "js/bsf.js"); +// AddResourcesListener.addBasicJSResource("javax.faces", "jsf.js"); +// AddResourcesListener.addBasicJSResource("bsf", "js/bsf.js"); AddResourcesListener.addThemedCSSResource("bsf.css"); AddResourcesListener.addThemedCSSResource("core.css"); setRendererType(DEFAULT_RENDERER); From bb4742f7f3bd7c17a1101c107cc72be137010c17 Mon Sep 17 00:00:00 2001 From: Philipp Gruhn Date: Sun, 17 Apr 2016 04:31:54 +0200 Subject: [PATCH 03/15] refactored AddResourcesListener made yes / no checks more readable and fixed case errors extracted methods to reduce boilerplate code reduced nesting levels fixed typos --- .../listeners/AddResourcesListener.java | 320 ++++++++---------- 1 file changed, 132 insertions(+), 188 deletions(-) diff --git a/src/main/java/net/bootsfaces/listeners/AddResourcesListener.java b/src/main/java/net/bootsfaces/listeners/AddResourcesListener.java index fe28e94e2..ed3b8f168 100644 --- a/src/main/java/net/bootsfaces/listeners/AddResourcesListener.java +++ b/src/main/java/net/bootsfaces/listeners/AddResourcesListener.java @@ -73,6 +73,9 @@ public class AddResourcesListener implements SystemEventListener { */ private static final String THEME_RESOURCE_KEY = "net.bootsfaces.listeners.AddResourcesListener.ThemedResourceFiles"; + private static final String SCRIPT_RENDERER = "javax.faces.resource.Script", + CSS_RENDERER = "javax.faces.resource.Stylesheet"; + static { LOGGER.info("This application is running on BootsFaces 0.8.2 (developer preview)."); LOGGER.info("net.bootsfaces.listeners.AddResourcesListener ready for use."); @@ -103,23 +106,14 @@ public void processEvent(SystemEvent event) throws AbortProcessingException { */ private void addMetaTags(UIViewRoot root, FacesContext context) { // Check context-param - String viewportParam = null; - viewportParam = context.getExternalContext().getInitParameter(C.P_VIEWPORT); - if (viewportParam != null) { - viewportParam = ELTools.evalAsString(viewportParam); - } else { - viewportParam = ""; - } - viewportParam = viewportParam.trim(); + String viewportParam = context.getExternalContext().getInitParameter(C.P_VIEWPORT); + + viewportParam = evalELIfPossible(viewportParam); String content = "width=device-width, initial-scale=1"; - if (viewportParam.length() > 0) { - if (viewportParam.equalsIgnoreCase("no") || viewportParam.equalsIgnoreCase("false")) { - return; - } - if (!viewportParam.equalsIgnoreCase("yes") && !viewportParam.equalsIgnoreCase("true")) { - content = viewportParam; - } - } + if (!viewportParam.isEmpty() && isFalseOrNo(viewportParam)) + return; + if(!viewportParam.isEmpty() && !isTrueOrYes(viewportParam)) + content = viewportParam; // Otherwise String viewportMeta = ""; @@ -175,13 +169,8 @@ private void addJavascript(UIViewRoot root, FacesContext context, boolean isProd String usetheme = null; theme = context.getExternalContext().getInitParameter(C.P_THEME); usetheme = context.getExternalContext().getInitParameter(C.P_USETHEME); - if (theme != null) { - theme = ELTools.evalAsString(theme); - } else { - theme = ""; - } - theme = theme.trim(); - if (theme.length() > 0) { + theme = evalELIfPossible(theme); + if (!theme.isEmpty()) { if (theme.equalsIgnoreCase("custom")) { theme = "other"; } @@ -197,30 +186,15 @@ private void addJavascript(UIViewRoot root, FacesContext context, boolean isProd throw new FacesException("Error loading theme, cannot find \"" + "css/" + theme + "/" + filename + "\" resource of \"" + C.BSF_LIBRARY + "\" library"); } else { - UIOutput output = new UIOutput(); - output.setRendererType("javax.faces.resource.Stylesheet"); - output.getAttributes().put("name", "css/" + theme + "/" + filename); - output.getAttributes().put("library", C.BSF_LIBRARY); - output.getAttributes().put("target", "head"); - addResourceIfNecessary(root, context, output); + String name = "css/" + theme + "/" + filename; + createAndAddComponent(root, context, CSS_RENDERER, name, C.BSF_LIBRARY); } } - if (usetheme != null) { - usetheme = ELTools.evalAsString(usetheme); - } else { - usetheme = ""; - } - usetheme = usetheme.trim(); - if (usetheme.length() > 0) { - if (usetheme.equalsIgnoreCase("true") || usetheme.equalsIgnoreCase("yes")) { - UIOutput output = new UIOutput(); - output.setRendererType("javax.faces.resource.Stylesheet"); - output.getAttributes().put("name", "css/" + theme + "/theme.css"); - output.getAttributes().put("library", C.BSF_LIBRARY); - output.getAttributes().put("target", "head"); - addResourceIfNecessary(root, context, output); - } + usetheme = evalELIfPossible(usetheme); + if (!usetheme.isEmpty() && isTrueOrYes(usetheme)) { + String name = "css/" + theme + "/theme.css"; + createAndAddComponent(root, context, CSS_RENDERER, name, C.BSF_LIBRARY); } // deactivate FontAwesome support if the no-fa facet is found in the @@ -234,41 +208,15 @@ private void addJavascript(UIViewRoot root, FacesContext context, boolean isProd useCDN = ELTools.evalAsString(useCDN); } if (null != useCDN) { - if (useCDN.equalsIgnoreCase("false") || useCDN.equals("no")) - useCDNImportForFontAwesome = false; - else - useCDNImportForFontAwesome = true; + useCDNImportForFontAwesome = !isFalseOrNo(useCDN); } } // Do we have to add font-awesome and jQuery, or are the resources // already there? - boolean loadJQuery = true; - String suppressJQuery = FacesContext.getCurrentInstance().getExternalContext() - .getInitParameter("net.bootsfaces.get_jquery_from_cdn"); - if (null != suppressJQuery) - suppressJQuery = ELTools.evalAsString(suppressJQuery); - if (null != suppressJQuery) - if (suppressJQuery.equalsIgnoreCase("true") || suppressJQuery.equals("yes")) - loadJQuery = false; - - boolean loadJQueryUI = true; - String suppressJQueryUI = FacesContext.getCurrentInstance().getExternalContext() - .getInitParameter("net.bootsfaces.get_jqueryui_from_cdn"); - if (null != suppressJQueryUI) - suppressJQueryUI = ELTools.evalAsString(suppressJQueryUI); - if (null != suppressJQueryUI) - if (suppressJQueryUI.equalsIgnoreCase("true") || suppressJQueryUI.equals("yes")) - loadJQueryUI = false; - - boolean loadBootstrapFromCDN = false; - String loadBootstrapFromCDNParam = FacesContext.getCurrentInstance().getExternalContext() - .getInitParameter("net.bootsfaces.get_bootstrap_from_cdn"); - if (null != loadBootstrapFromCDNParam) - loadBootstrapFromCDNParam = ELTools.evalAsString(loadBootstrapFromCDNParam); - if (null != loadBootstrapFromCDNParam) - if (loadBootstrapFromCDNParam.equalsIgnoreCase("true") || loadBootstrapFromCDNParam.equals("yes")) - loadBootstrapFromCDN = true; + boolean loadJQuery = shouldLibraryBeLoaded("net.bootsfaces.get_jquery_from_cdn"); + boolean loadJQueryUI = shouldLibraryBeLoaded("net.bootsfaces.get_jqueryui_from_cdn"); + boolean loadBootstrapFromCDN = shouldLibraryBeLoaded("net.bootsfaces.get_bootstrap_from_cdn"); List availableResources = root.getComponentResources(context, "head"); for (UIComponent ava : availableResources) { @@ -305,7 +253,7 @@ private void addJavascript(UIViewRoot root, FacesContext context, boolean isProd if(basicResourceMap != null) { if (basicResourceMap.containsValue("jsf.js")) { UIOutput output = new UIOutput(); - output.setRendererType("javax.faces.resource.Script"); + output.setRendererType(SCRIPT_RENDERER); output.getAttributes().put("name", "jsf.js"); output.getAttributes().put("library", "javax.faces"); output.getAttributes().put("target", "head"); @@ -314,7 +262,7 @@ private void addJavascript(UIViewRoot root, FacesContext context, boolean isProd if (basicResourceMap.containsValue("bsf.js") || basicResourceMap.containsValue("js/bsf.js")) { UIOutput output = new UIOutput(); - output.setRendererType("javax.faces.resource.Script"); + output.setRendererType(SCRIPT_RENDERER); output.getAttributes().put("name", "js/bsf.js"); output.getAttributes().put("library", "bsf"); output.getAttributes().put("target", "head"); @@ -324,20 +272,9 @@ private void addJavascript(UIViewRoot root, FacesContext context, boolean isProd */ // add JSF by default - UIOutput jsfOutput = new UIOutput(); - jsfOutput.setRendererType("javax.faces.resource.Script"); - jsfOutput.getAttributes().put("name", "jsf.js"); - jsfOutput.getAttributes().put("library", "javax.faces"); - jsfOutput.getAttributes().put("target", "head"); - addResourceIfNecessary(root, context, jsfOutput); - + createAndAddComponent(root, context, SCRIPT_RENDERER, "jsf.js", "javax.faces"); // add BSF by default - UIOutput bsfOutput = new UIOutput(); - bsfOutput.setRendererType("javax.faces.resource.Script"); - bsfOutput.getAttributes().put("name", "js/bsf.js"); - bsfOutput.getAttributes().put("library", "bsf"); - bsfOutput.getAttributes().put("target", "head"); - addResourceIfNecessary(root, context, bsfOutput); + createAndAddComponent(root, context, SCRIPT_RENDERER, "js/bsf.js", "bsf"); @SuppressWarnings("unchecked") Map resourceMap = (Map) viewMap.get(RESOURCE_KEY); @@ -356,48 +293,31 @@ private void addJavascript(UIViewRoot root, FacesContext context, boolean isProd } if (needsJQuery) { UIOutput output = new UIOutput(); - output.setRendererType("javax.faces.resource.Script"); + output.setRendererType(SCRIPT_RENDERER); output.getAttributes().put("name", "jq/jquery.js"); output.getAttributes().put("library", C.BSF_LIBRARY); output.getAttributes().put("target", "head"); addResourceIfNecessary(root, context, output); }*/ - UIOutput output = new UIOutput(); - output.setRendererType("javax.faces.resource.Script"); - output.getAttributes().put("name", "jq/jquery.js"); - output.getAttributes().put("library", C.BSF_LIBRARY); - output.getAttributes().put("target", "head"); - addResourceIfNecessary(root, context, output); + + createAndAddComponent(root, context, SCRIPT_RENDERER, "jq/jquery.js", C.BSF_LIBRARY); } for (Entry entry : resourceMap.entrySet()) { String file = entry.getValue(); String library = entry.getKey().substring(0, entry.getKey().length() - file.length() - 1); - if (!"jq/jquery.js".equals(file) || (!"bsf".equals(library))) { - if ((!file.startsWith("jq/ui")) || (!"bsf".equals(library)) || loadJQueryUI) { - UIOutput output = new UIOutput(); - output.setRendererType("javax.faces.resource.Script"); - output.getAttributes().put("name", file); - output.getAttributes().put("library", library); - output.getAttributes().put("target", "head"); - addResourceIfNecessary(root, context, output); - } - } + if (!"jq/jquery.js".equals(file) || (!"bsf".equals(library))) + if ((!file.startsWith("jq/ui")) || (!"bsf".equals(library)) || loadJQueryUI) + createAndAddComponent(root, context, SCRIPT_RENDERER, file, library); } viewMap.remove(RESOURCE_KEY); } String blockUI = FacesContext.getCurrentInstance().getExternalContext().getInitParameter("net.bootsfaces.blockUI"); if (null != blockUI) blockUI = ELTools.evalAsString(blockUI); - if (null != blockUI && (blockUI.equalsIgnoreCase("yes") || blockUI.equalsIgnoreCase("true"))) - { + if (null != blockUI && isTrueOrYes(blockUI)) { // addResourceToHeadButAfterJQuery(C.BSF_LIBRARY, "jq/jquery.js"); - UIOutput output = new UIOutput(); - output.setRendererType("javax.faces.resource.Script"); - output.getAttributes().put("name", "js/jquery.blockUI.js"); - output.getAttributes().put("library", C.BSF_LIBRARY); - output.getAttributes().put("target", "head"); - addResourceIfNecessary(root, context, output); + createAndAddComponent(root, context, SCRIPT_RENDERER, "js/jquery.blockUI.js", C.BSF_LIBRARY); } // replaceCSSResourcesByMinifiedResources(root, context); @@ -407,10 +327,8 @@ private void addJavascript(UIViewRoot root, FacesContext context, boolean isProd } enforceCorrectLoadOrder(root, context); - { - InternalIE8CompatiblityLinks output = new InternalIE8CompatiblityLinks(); - addResourceIfNecessary(root, context, output); - } + InternalIE8CompatiblityLinks output = new InternalIE8CompatiblityLinks(); + addResourceIfNecessary(root, context, output); List res = root.getComponentResources(context, "head"); for (UIComponent ava : res) { @@ -432,38 +350,40 @@ private void addJavascript(UIViewRoot root, FacesContext context, boolean isProd List themedCSSMap = (List) viewMap.get(THEME_RESOURCE_KEY); if(themedCSSMap != null) { for (String file: themedCSSMap) { - UIOutput themedCSS = new UIOutput(); - themedCSS.setRendererType("javax.faces.resource.Stylesheet"); - themedCSS.getAttributes().put("name", "css/" + theme + "/" + file); - themedCSS.getAttributes().put("library", C.BSF_LIBRARY); - themedCSS.getAttributes().put("target", "head"); - addResourceIfNecessary(root, context, themedCSS); + String name = "css/" + theme + "/" + file; + createAndAddComponent(root, context, CSS_RENDERER, name, C.BSF_LIBRARY); } } // Glyphicons - UIOutput goutput = new UIOutput(); - goutput.setRendererType("javax.faces.resource.Stylesheet"); - goutput.getAttributes().put("name", "css/icons.css"); - //goutput.getAttributes().put("name", "css/" + theme + "/icons.css"); - goutput.getAttributes().put("library", C.BSF_LIBRARY); - goutput.getAttributes().put("target", "head"); - addResourceIfNecessary(root, context, goutput); + String name = "css/icons.css"; + //String name = "css/" + theme + "/icons.css"; + createAndAddComponent(root, context, CSS_RENDERER, name, C.BSF_LIBRARY); + } + + private boolean shouldLibraryBeLoaded(String initParameter) { + String suppressLibrary = FacesContext.getCurrentInstance().getExternalContext() + .getInitParameter(initParameter); + if (suppressLibrary != null) + suppressLibrary = ELTools.evalAsString(suppressLibrary); + + //default to true if no param is set, false if 'true' or 'yes' is set + return suppressLibrary == null || !isTrueOrYes(suppressLibrary); } private void addResourceIfNecessary(UIViewRoot root, FacesContext context, InternalIE8CompatiblityLinks output) { - for (UIComponent c : root.getComponentResources(context, "head")) { - if (c instanceof InternalIE8CompatiblityLinks) - return; - } - root.addComponentResource(context, output, "head"); + addResourceIfNecessary(root, context, output, output.getClass()); } private void addResourceIfNecessary(UIViewRoot root, FacesContext context, InternalFALink output) { - for (UIComponent c : root.getComponentResources(context, "head")) { - if (c instanceof InternalFALink) + addResourceIfNecessary(root, context, output, output.getClass()); + } + + private void addResourceIfNecessary(UIViewRoot root, FacesContext context, UIComponent output, Class clazz) { + for (UIComponent c : root.getComponentResources(context, "head")) + if (c.getClass() == clazz) return; - } + //resource not found yet, so add it now root.addComponentResource(context, output, "head"); } @@ -587,9 +507,7 @@ private void enforceCorrectLoadOrder(UIViewRoot root, FacesContext context) { @Override public int compare(UIComponent o1, UIComponent o2) { String name1 = (String) o1.getAttributes().get("name"); - // String lib1 = (String) o1.getAttributes().get("name"); String name2 = (String) o2.getAttributes().get("name"); - // String lib2 = (String) o2.getAttributes().get("name"); if (name1 == null) return 1; if (name2 == null) @@ -599,37 +517,31 @@ public int compare(UIComponent o1, UIComponent o2) { if (name2.endsWith(".js") && (!(name1.endsWith(".js")))) return -1; if (name1.endsWith(".js")) { - if (name1.toLowerCase().contains("jquery-ui")) - name1 = "2.js"; // make it the second JS file - else if (name1.toLowerCase().contains("jquery")) - name1 = "1.js"; // make it the first JS file - else if (name1.toLowerCase().contains("ui/core.js")) - name1 = "3.js"; // make it the first JS file - else if (name1.toLowerCase().contains("ui/widget.js")) - name1 = "4.js"; // make it the last JS file - else if (name1.toLowerCase().contains("bsf.js")) - name1 = "zzz.js"; // make it the last JS file - else - name1 = "keep.js"; // don't move it + name1 = renameJSFile(name1); } if (name2.endsWith(".js")) { - if (name2.toLowerCase().contains("jquery-ui")) - name2 = "2.js"; // make it the second JS file - else if (name2.toLowerCase().contains("jquery")) - name2 = "1.js"; // make it the first JS file - else if (name2.toLowerCase().contains("ui/core.js")) - name2 = "3.js"; // make it the first JS file - else if (name2.toLowerCase().contains("ui/widget.js")) - name2 = "4.js"; // make it the last JS file - else if (name2.toLowerCase().contains("bsf.js")) - name2 = "zzz.js"; // make it the last JS file - else - name2 = "keep.js"; // don't move it + name2 = renameJSFile(name2); } int result = name1.compareTo(name2); return result; } + + private String renameJSFile(String name) { + if (name.toLowerCase().contains("jquery-ui")) + name = "2.js"; // make it the second JS file + else if (name.toLowerCase().contains("jquery")) + name = "1.js"; // make it the first JS file + else if (name.toLowerCase().contains("ui/core.js")) + name = "3.js"; // make it the third JS file + else if (name.toLowerCase().contains("ui/widget.js")) + name = "4.js"; // make it the second last JS file + else if (name.toLowerCase().contains("bsf.js")) + name = "zzz.js"; // make it the last JS file + else + name = "keep.js"; // don't move it + return name; + } }); for (UIComponent c : first) { @@ -678,7 +590,7 @@ private boolean isFontAwesomeComponentUsedAndRemoveIt() { ListIterator resourceIterator = (viewRoot.getComponentResources(fc, "head")).listIterator(); UIComponent fontAwesomeResource = null; while (resourceIterator.hasNext()) { - UIComponent resource = (UIComponent) resourceIterator.next(); + UIComponent resource = resourceIterator.next(); String name = (String) resource.getAttributes().get("name"); // rw.write("\n" ); if (name != null) { @@ -730,7 +642,7 @@ public boolean isListenerForSource(Object source) { } /** - * Registers a JS file that needs to be include in the header of the HTML + * Registers a JS file that needs to be included in the header of the HTML * file, but after jQuery and AngularJS. * * @param library @@ -739,6 +651,7 @@ public boolean isListenerForSource(Object source) { * The name of the resource file within the library folder. */ public static void addResourceToHeadButAfterJQuery(String library, String resource) { +// addResource(library + "#" + resource, RESOURCE_KEY); FacesContext ctx = FacesContext.getCurrentInstance(); UIViewRoot v = ctx.getViewRoot(); Map viewMap = v.getViewMap(); @@ -755,7 +668,7 @@ public static void addResourceToHeadButAfterJQuery(String library, String resour } /** - * Registers a core JS file that needs to be include in the header of the HTML + * Registers a core JS file that needs to be included in the header of the HTML * file, but after jQuery and AngularJS. * * @param library @@ -764,41 +677,72 @@ public static void addResourceToHeadButAfterJQuery(String library, String resour * The name of the resource file within the library folder. */ public static void addBasicJSResource(String library, String resource) { - FacesContext ctx = FacesContext.getCurrentInstance(); - UIViewRoot v = ctx.getViewRoot(); - Map viewMap = v.getViewMap(); - @SuppressWarnings("unchecked") - Map resourceMap = (Map) viewMap.get(BASIC_JS_RESOURCE_KEY); - if (null == resourceMap) { - resourceMap = new HashMap(); - viewMap.put(BASIC_JS_RESOURCE_KEY, resourceMap); - } - String key = library + "#" + resource; - if (!resourceMap.containsKey(resource)) { - resourceMap.put(key, resource); - } + addResource(library + "#" + resource, BASIC_JS_RESOURCE_KEY); } /** - * Registers a themed CSS file that needs to be includes in the header of the HTML + * Registers a themed CSS file that needs to be included in the header of the HTML * file. * * @param resource * The name of the resource file within the library folder. */ public static void addThemedCSSResource(String resource) { +// addResource(resource, THEME_RESOURCE_KEY); FacesContext ctx = FacesContext.getCurrentInstance(); UIViewRoot v = ctx.getViewRoot(); Map viewMap = v.getViewMap(); @SuppressWarnings("unchecked") - List resourceMap = (List) viewMap.get(THEME_RESOURCE_KEY); + List resourceList = (List) viewMap.get(THEME_RESOURCE_KEY); + if (null == resourceList) { + resourceList = new ArrayList(); + viewMap.put(THEME_RESOURCE_KEY, resourceList); + } + + if (!resourceList.contains(resource)) { + resourceList.add(resource); + } + } + + private static void addResource(String resourceKey, String resourceTypeKey) { + FacesContext ctx = FacesContext.getCurrentInstance(); + UIViewRoot v = ctx.getViewRoot(); + Map viewMap = v.getViewMap(); + @SuppressWarnings("unchecked") + Map resourceMap = (Map) viewMap.get(resourceTypeKey); if (null == resourceMap) { - resourceMap = new ArrayList(); - viewMap.put(THEME_RESOURCE_KEY, resourceMap); + resourceMap = new HashMap(); + viewMap.put(resourceTypeKey, resourceMap); } - String key = resource; - if (!resourceMap.contains(key)) { - resourceMap.add(key); + + if (!resourceMap.containsKey(resourceKey)) { + resourceMap.put(resourceTypeKey, resourceKey); } } + + private String evalELIfPossible(String expression) { + if (expression != null) + expression = ELTools.evalAsString(expression).trim(); + else + expression = ""; + return expression; + } + + private void createAndAddComponent(UIViewRoot root, FacesContext context, + String rendererType, String name, String library) { + UIOutput output = new UIOutput(); + output.setRendererType(rendererType); + output.getAttributes().put("name", name); + output.getAttributes().put("library", library); + output.getAttributes().put("target", "head"); + addResourceIfNecessary(root, context, output); + } + + private boolean isTrueOrYes(String param) { + return param.equalsIgnoreCase("true") || param.equalsIgnoreCase("yes"); + } + + private boolean isFalseOrNo(String param) { + return param.equalsIgnoreCase("false") || param.equalsIgnoreCase("no"); + } } From ad6d5d236d7db0f666b12ab45a3bba6977235e23 Mon Sep 17 00:00:00 2001 From: Philipp Gruhn Date: Wed, 20 Apr 2016 20:11:07 +0200 Subject: [PATCH 04/15] generalize generateTooltip, remove duplicated code may help for #348 --- .../component/alert/AlertRenderer.java | 2 +- .../component/badge/BadgeRenderer.java | 2 +- .../component/datePicker/DatePicker.java | 2 +- .../component/icon/IconRenderer.java | 2 +- .../net/bootsfaces/component/label/Label.java | 2 +- .../component/navLink/NavLinkRenderer.java | 4 +- .../bootsfaces/component/row/RowRenderer.java | 2 +- .../component/tabView/TabViewRenderer.java | 4 +- src/main/java/net/bootsfaces/render/R.java | 4 +- .../net/bootsfaces/render/RJumbotron.java | 2 +- .../net/bootsfaces/render/RThumbnail.java | 2 +- .../java/net/bootsfaces/render/RWell.java | 2 +- .../java/net/bootsfaces/render/Tooltip.java | 60 ++++--------------- 13 files changed, 28 insertions(+), 62 deletions(-) diff --git a/src/main/java/net/bootsfaces/component/alert/AlertRenderer.java b/src/main/java/net/bootsfaces/component/alert/AlertRenderer.java index d2b357c75..873653cff 100644 --- a/src/main/java/net/bootsfaces/component/alert/AlertRenderer.java +++ b/src/main/java/net/bootsfaces/component/alert/AlertRenderer.java @@ -67,7 +67,7 @@ public void encodeBegin(FacesContext context, UIComponent component) throws IOEx rw.startElement("div", alert); rw.writeAttribute("id", clientId, "id"); - Tooltip.generateTooltip(context, attrs, rw); + Tooltip.generateTooltip(context, component, rw); String style = alert.getStyle(); if (null != style) diff --git a/src/main/java/net/bootsfaces/component/badge/BadgeRenderer.java b/src/main/java/net/bootsfaces/component/badge/BadgeRenderer.java index d5aacea36..4b56ca7d7 100644 --- a/src/main/java/net/bootsfaces/component/badge/BadgeRenderer.java +++ b/src/main/java/net/bootsfaces/component/badge/BadgeRenderer.java @@ -74,7 +74,7 @@ protected void generateBadge(FacesContext context, UIComponent component, Respon styleClass = "badge"; else styleClass += " badge"; - Tooltip.generateTooltip(context, component.getAttributes(), rw); + Tooltip.generateTooltip(context, component, rw); rw.writeAttribute("class", styleClass, "class"); if (null != style) rw.writeAttribute("style", style, "style"); diff --git a/src/main/java/net/bootsfaces/component/datePicker/DatePicker.java b/src/main/java/net/bootsfaces/component/datePicker/DatePicker.java index 9b349285f..f44441685 100644 --- a/src/main/java/net/bootsfaces/component/datePicker/DatePicker.java +++ b/src/main/java/net/bootsfaces/component/datePicker/DatePicker.java @@ -269,7 +269,7 @@ private void encodeHTML(FacesContext fc) throws IOException { rw.startElement("input", null); rw.writeAttribute("id", clientId, null); rw.writeAttribute("name", clientId, null); - Tooltip.generateTooltip(fc, attrs, rw); + Tooltip.generateTooltip(fc, this, rw); rw.writeAttribute("type", type, null); String styleClass = new CoreRenderer().getErrorAndRequiredClass(this, clientId); rw.writeAttribute("class", "form-control " + styleClass, "class"); diff --git a/src/main/java/net/bootsfaces/component/icon/IconRenderer.java b/src/main/java/net/bootsfaces/component/icon/IconRenderer.java index 599d5bee3..57041ed1e 100644 --- a/src/main/java/net/bootsfaces/component/icon/IconRenderer.java +++ b/src/main/java/net/bootsfaces/component/icon/IconRenderer.java @@ -123,7 +123,7 @@ public static final void encodeIcon(ResponseWriter rw, UIComponent c, String ico rw.writeAttribute("id", c.getClientId() + "_icon", null); else rw.writeAttribute("id", c.getClientId(), null); - Tooltip.generateTooltip(FacesContext.getCurrentInstance(), c.getAttributes(), rw); + Tooltip.generateTooltip(FacesContext.getCurrentInstance(), c, rw); } StringBuilder sb = new StringBuilder(100); // optimize int diff --git a/src/main/java/net/bootsfaces/component/label/Label.java b/src/main/java/net/bootsfaces/component/label/Label.java index 19d2963f8..b14c7d583 100644 --- a/src/main/java/net/bootsfaces/component/label/Label.java +++ b/src/main/java/net/bootsfaces/component/label/Label.java @@ -79,7 +79,7 @@ public void encodeBegin(FacesContext context) throws IOException { rw.startElement("span", this); rw.writeAttribute("id", this.getClientId(), "id"); - Tooltip.generateTooltip(context, this.getAttributes(), rw); + Tooltip.generateTooltip(context, this, rw); String sclass = "label" + " " + "label"; if (sev != null) { sclass += "-" + sev; diff --git a/src/main/java/net/bootsfaces/component/navLink/NavLinkRenderer.java b/src/main/java/net/bootsfaces/component/navLink/NavLinkRenderer.java index 23f38bef1..77be5ea15 100644 --- a/src/main/java/net/bootsfaces/component/navLink/NavLinkRenderer.java +++ b/src/main/java/net/bootsfaces/component/navLink/NavLinkRenderer.java @@ -111,7 +111,7 @@ public void encodeHeader(FacesContext context, String h, UIComponent navlink) th public void encodeDivider(FacesContext context, AbstractNavLink navlink) throws IOException { ResponseWriter rw = context.getResponseWriter(); rw.startElement("li", (UIComponent) navlink); - Tooltip.generateTooltip(context, navlink, rw); + Tooltip.generateTooltip(context, (UIComponent) navlink, rw); String styleClass = navlink.getStyleClass(); if (null == styleClass) styleClass = ""; @@ -134,7 +134,7 @@ public void encodeHTML(FacesContext context, UIComponent navlink) throws IOExcep String value = (String) ((AbstractNavLink)navlink).getValue(); rw.startElement("li", navlink); writeAttribute(rw, "id", navlink.getClientId(context), "id"); - Tooltip.generateTooltip(context, ((AbstractNavLink)navlink), rw); + Tooltip.generateTooltip(context, navlink, rw); AJAXRenderer.generateBootsFacesAJAXAndJavaScript(context, (ClientBehaviorHolder)navlink, rw); R.encodeHTML4DHTMLAttrs(rw, navlink.getAttributes(), H.ALLBUTTON); diff --git a/src/main/java/net/bootsfaces/component/row/RowRenderer.java b/src/main/java/net/bootsfaces/component/row/RowRenderer.java index a874a697b..2763bdc81 100644 --- a/src/main/java/net/bootsfaces/component/row/RowRenderer.java +++ b/src/main/java/net/bootsfaces/component/row/RowRenderer.java @@ -59,7 +59,7 @@ public void encodeBegin(FacesContext context, UIComponent component) throws IOEx String clientId = row.getClientId(); rw.startElement("div", row); - Tooltip.generateTooltip(context, row.getAttributes(), rw); + Tooltip.generateTooltip(context, row, rw); String dir = row.getDir(); if (null != dir) rw.writeAttribute("dir", dir, "dir"); diff --git a/src/main/java/net/bootsfaces/component/tabView/TabViewRenderer.java b/src/main/java/net/bootsfaces/component/tabView/TabViewRenderer.java index c2419ac82..c7d30eeb5 100644 --- a/src/main/java/net/bootsfaces/component/tabView/TabViewRenderer.java +++ b/src/main/java/net/bootsfaces/component/tabView/TabViewRenderer.java @@ -182,7 +182,7 @@ private static void encodeTabLinks(FacesContext context, ResponseWriter writer, throws IOException { writer.startElement("ul", tabView); writer.writeAttribute("id", clientId, "id"); - Tooltip.generateTooltip(context, tabView.getAttributes(), writer); + Tooltip.generateTooltip(context, tabView, writer); String classes = "nav "; if("left".equalsIgnoreCase(tabView.getTabPosition()) || "right".equalsIgnoreCase(tabView.getTabPosition())) { classes += " nav-pills nav-stacked"; @@ -362,7 +362,7 @@ private static void encodeTab(FacesContext context, ResponseWriter writer, UICom writer.writeAttribute("dir", tab.getDir(), "dir"); writer.writeAttribute("id", tab.getClientId(), "id"); writer.writeAttribute("role", "presentation", "role"); - Tooltip.generateTooltip(context, tab.getAttributes(), writer); + Tooltip.generateTooltip(context, tab, writer); String classes = isActive ? "active" : ""; if (tab.getStyleClass() != null) { diff --git a/src/main/java/net/bootsfaces/render/R.java b/src/main/java/net/bootsfaces/render/R.java index 03981acca..6640a56f5 100644 --- a/src/main/java/net/bootsfaces/render/R.java +++ b/src/main/java/net/bootsfaces/render/R.java @@ -69,7 +69,7 @@ public static final void encodeColumn(ResponseWriter rw, UIComponent c, int span if (c != null) { rw.writeAttribute("id", c.getClientId(), "id"); - Tooltip.generateTooltip(FacesContext.getCurrentInstance(), c.getAttributes(), rw); + Tooltip.generateTooltip(FacesContext.getCurrentInstance(), c, rw); componentAttrs = c.getAttributes(); } @@ -149,7 +149,7 @@ public static void genDivContainer(GenContainerDiv c, FacesContext fc) throws IO rw.startElement("div", c); rw.writeAttribute("id", c.getClientId(fc), "id"); - Tooltip.generateTooltip(fc, attrs, rw); + Tooltip.generateTooltip(fc, c, rw); if (pull != null && (pull.equals("right") || pull.equals("left"))) { rw.writeAttribute("class", c.getContainerStyles().concat(" ").concat("pull").concat("-").concat(pull), "class"); diff --git a/src/main/java/net/bootsfaces/render/RJumbotron.java b/src/main/java/net/bootsfaces/render/RJumbotron.java index a661655ca..a3ca17d17 100644 --- a/src/main/java/net/bootsfaces/render/RJumbotron.java +++ b/src/main/java/net/bootsfaces/render/RJumbotron.java @@ -47,7 +47,7 @@ public static final void encBegin(UIComponent c, FacesContext fc) throws IOExcep rw.startElement("div", c); rw.writeAttribute("id",c.getClientId(fc),"id"); - Tooltip.generateTooltip(fc, c.getAttributes(), rw); + Tooltip.generateTooltip(fc, c, rw); rw.writeAttribute("class", jumbotron, "class"); } diff --git a/src/main/java/net/bootsfaces/render/RThumbnail.java b/src/main/java/net/bootsfaces/render/RThumbnail.java index c835563ec..4ef44867c 100644 --- a/src/main/java/net/bootsfaces/render/RThumbnail.java +++ b/src/main/java/net/bootsfaces/render/RThumbnail.java @@ -58,7 +58,7 @@ public static final void encBegin(UIComponent c, FacesContext fc) throws IOExcep ResponseWriter rw = fc.getResponseWriter(); rw.startElement("div", c); rw.writeAttribute("id", c.getClientId(fc), "id"); - Tooltip.generateTooltip(fc, c.getAttributes(), rw); + Tooltip.generateTooltip(fc, c, rw); rw.writeAttribute("class", thumbnail, "class"); /*UIComponent capt; capt = c.getFacet(caption.name()); diff --git a/src/main/java/net/bootsfaces/render/RWell.java b/src/main/java/net/bootsfaces/render/RWell.java index 35d4cf222..3a088f21f 100644 --- a/src/main/java/net/bootsfaces/render/RWell.java +++ b/src/main/java/net/bootsfaces/render/RWell.java @@ -61,7 +61,7 @@ public static final void encBegin(UIComponent c, FacesContext fc) throws IOExcep } String styleClass=(String) attrs.get("styleClass"); if (null ==styleClass) styleClass=""; else styleClass=" "+styleClass; - Tooltip.generateTooltip(fc, attrs, rw); + Tooltip.generateTooltip(fc, c, rw); if(sz!=null) { rw.writeAttribute("class", well+" "+well+"-"+sz+styleClass,"class"); } else { rw.writeAttribute("class", well+styleClass, "class"); } diff --git a/src/main/java/net/bootsfaces/render/Tooltip.java b/src/main/java/net/bootsfaces/render/Tooltip.java index da4c5b959..8631e0a17 100644 --- a/src/main/java/net/bootsfaces/render/Tooltip.java +++ b/src/main/java/net/bootsfaces/render/Tooltip.java @@ -37,26 +37,12 @@ */ public class Tooltip { - public static void generateTooltip(FacesContext context, IHasTooltip component, ResponseWriter rw) - throws IOException { - if (null != component.getTooltip()) { - String tooltipPosition = component.getTooltipPosition(); - if (null == tooltipPosition) // compatibility for the HTML-style using "-" characters instead of camelcase - tooltipPosition = (String) ((UIComponent) component).getAttributes().get("tooltip-position"); - String tooltipContainer = component.getTooltipContainer(); - if ("body".equals(tooltipContainer)) // compatibility for the HTML-style using "-" characters instead of camelcase - tooltipContainer = (String) ((UIComponent) component).getAttributes().get("tooltip-container"); - if (null == tooltipContainer) - tooltipContainer = "body"; - - generateTooltipInternal(context, rw, component.getTooltip(), tooltipPosition, tooltipContainer); - } - } - - public static void generateTooltip(FacesContext context, Map attrs, ResponseWriter rw) + public static void generateTooltip(FacesContext context, UIComponent component, ResponseWriter rw) throws IOException { + Map attrs = component.getAttributes(); String tooltip = (String) attrs.get("tooltip"); if (null != tooltip) { + //set default values first, if not present String position = (String) attrs.get("tooltipPosition"); if (null == position) // compatibility for the HTML-style using "-" characters instead of camelcase position = (String) attrs.get("tooltip-position"); @@ -67,11 +53,11 @@ public static void generateTooltip(FacesContext context, Map att container = (String) attrs.get("tooltip-container"); if (null == container || container.length() == 0) container = "body"; - generateTooltipInternal(context, rw, tooltip, position, container); + verifyAndWriteTooltip(context, rw, tooltip, position, container); } } - private static void generateTooltipInternal(FacesContext context, ResponseWriter rw, String tooltip, + private static void verifyAndWriteTooltip(FacesContext context, ResponseWriter rw, String tooltip, String position, String container) throws IOException { if (null == position) position="bottom"; @@ -110,32 +96,12 @@ private static String generateDelayAttributes(Map attrs) throws } if (null != delayHide) json += delayHide + ","; - if (json.length() > 0) { + if (!json.isEmpty()) { return "{" + json.substring(0, json.length() - 1) + "}"; } return null; } - - private static String generateDelayAttributes(IHasTooltip component) throws IOException { - String json = ""; - int tooltipDelayShow = component.getTooltipDelayShow(); - if (0 == tooltipDelayShow) - tooltipDelayShow = component.getTooltipDelay(); - - if (0 != tooltipDelayShow) - json += "tooltip-delay-show" + tooltipDelayShow + ","; - int tooltipDelayHide = component.getTooltipDelayHide(); - if (0 == tooltipDelayHide) - tooltipDelayHide = component.getTooltipDelay(); - if (0 != tooltipDelayHide) - json += "tooltip-delay-show" + tooltipDelayShow + ","; - - if (json.length() > 0) { - return "{" + json.substring(0, json.length() - 1) + "}"; - } else // compatibility for the HTML-style using "-" characters instead of camelcase - return generateDelayAttributes(((UIComponent) component).getAttributes()); - } - + private static String getAndCheckDelayAttribute(String attributeName, Map attrs, String htmlAttributeName) throws FacesException { Object value = attrs.get(attributeName); @@ -145,19 +111,19 @@ private static String getAndCheckDelayAttribute(String attributeName, Map Date: Wed, 20 Apr 2016 23:51:35 +0200 Subject: [PATCH 05/15] add missing Tooltip generation, remove redundant code --- .../selectOneMenu/SelectOneMenuRenderer.java | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/main/java/net/bootsfaces/component/selectOneMenu/SelectOneMenuRenderer.java b/src/main/java/net/bootsfaces/component/selectOneMenu/SelectOneMenuRenderer.java index 6d55746eb..8f38e1cb6 100644 --- a/src/main/java/net/bootsfaces/component/selectOneMenu/SelectOneMenuRenderer.java +++ b/src/main/java/net/bootsfaces/component/selectOneMenu/SelectOneMenuRenderer.java @@ -117,6 +117,8 @@ public void encodeBegin(FacesContext context, UIComponent component) throws IOEx String clientId = outerClientId+"Inner"; int span = startColSpanDiv(rw, menu); rw.startElement("div", menu); + Tooltip.generateTooltip(context, menu, rw); + if (menu.isInline()) { rw.writeAttribute("class", "form-inline", "class"); } else { @@ -482,15 +484,12 @@ protected void renderOption(ResponseWriter rw, UISelectItem selectItem, Object s final String itemDescription = selectItem.getItemDescription(); final Object itemValue = selectItem.getItemValue(); - boolean isItemLabelBlank = itemLabel == null || itemLabel.trim().length() == 0; - itemLabel = isItemLabelBlank ? " " : itemLabel; - renderOption(rw, selectedOption, index, itemLabel, itemDescription, itemValue, selectItem.isItemDisabled()); } private void renderOption(ResponseWriter rw, Object selectedOption, int index, String itemLabel, final String description, final Object itemValue, boolean isDisabled) throws IOException { - boolean isItemLabelBlank = itemLabel == null || itemLabel.trim().length() == 0; + boolean isItemLabelBlank = itemLabel == null || itemLabel.trim().isEmpty(); itemLabel = isItemLabelBlank ? " " : itemLabel; rw.startElement("option", null); @@ -513,8 +512,8 @@ private void renderOption(ResponseWriter rw, Object selectedOption, int index, S } if (isDisabled) rw.writeAttribute("disabled", "disabled", "disabled"); - - rw.write(itemLabel); + + rw.write(itemLabel); rw.endElement("option"); } @@ -547,7 +546,7 @@ protected void renderSelectTag(ResponseWriter rw, SelectOneMenu menu) throws IOE protected void renderSelectTagAttributes(ResponseWriter rw, String clientId, SelectOneMenu menu) throws IOException { rw.writeAttribute("id", clientId, null); - Tooltip.generateTooltip(FacesContext.getCurrentInstance(), menu, rw); + //Tooltip.generateTooltip(FacesContext.getCurrentInstance(), menu, rw); rw.writeAttribute("name", clientId, null); StringBuilder sb; From feef57e0487d4227a22ee55e5cb50e95b93546e7 Mon Sep 17 00:00:00 2001 From: Philipp Gruhn Date: Thu, 21 Apr 2016 12:56:58 +0200 Subject: [PATCH 06/15] destroy existing tooltips, fixes #220 and fixes #323 --- src/main/java/net/bootsfaces/render/Tooltip.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/net/bootsfaces/render/Tooltip.java b/src/main/java/net/bootsfaces/render/Tooltip.java index 8631e0a17..144a0ca73 100644 --- a/src/main/java/net/bootsfaces/render/Tooltip.java +++ b/src/main/java/net/bootsfaces/render/Tooltip.java @@ -151,6 +151,8 @@ public static void activateTooltips(FacesContext context, UIComponent component) options = "{" + options.substring(0, options.length() - 1) + "}"; String js = "$(function () {\n" + "$('#" + id + "').tooltip(" + options + ")\n" + "});\n"; + //destroy existing tooltips to prevent ajax bugs in some browsers and prevent memory leaks (see #323 and #220) + js+="$('.tooltip').tooltip('destroy'); "; context.getResponseWriter().write(""); } } From 20721a91fb213068c14d2fe5d56db721a85b333e Mon Sep 17 00:00:00 2001 From: Philipp Gruhn Date: Thu, 21 Apr 2016 23:50:43 +0200 Subject: [PATCH 07/15] dont capitalize method names, remove redundant method --- .../component/button/ButtonRenderer.java | 4 +-- .../colorPicker/ColorPickerRenderer.java | 2 +- .../dataTable/DataTableRenderer.java | 6 ++--- .../defaultCommand/DefaultCommand.java | 6 ++--- .../net/bootsfaces/component/focus/Focus.java | 11 +++----- .../jumbotron/JumbotronRenderer.java | 4 +-- .../scrollSpy/ScrollSpyRenderer.java | 8 +++--- .../component/tree/TreeRenderer.java | 8 +++--- .../component/tree/model/TreeModelUtils.java | 12 ++++----- .../java/net/bootsfaces/utils/BsfUtils.java | 27 +++++-------------- 10 files changed, 36 insertions(+), 52 deletions(-) diff --git a/src/main/java/net/bootsfaces/component/button/ButtonRenderer.java b/src/main/java/net/bootsfaces/component/button/ButtonRenderer.java index 663f2630d..ea47b846d 100644 --- a/src/main/java/net/bootsfaces/component/button/ButtonRenderer.java +++ b/src/main/java/net/bootsfaces/component/button/ButtonRenderer.java @@ -84,7 +84,7 @@ public void encodeHTML(FacesContext context, Button button) rw.writeAttribute("id", clientId, "id"); rw.writeAttribute("name", clientId, "name"); rw.writeAttribute("type", "button", null); - if(BsfUtils.StringIsValued(button.getDir())) { + if(BsfUtils.isStringValued(button.getDir())) { rw.writeAttribute("dir", button.getDir(), "dir"); } if (style != null) { @@ -98,7 +98,7 @@ public void encodeHTML(FacesContext context, Button button) if (null != clickHandler && clickHandler.length() > 0) { rw.writeAttribute("onclick", clickHandler, null); } - if (BsfUtils.StringIsValued(button.getDismiss())) { + if (BsfUtils.isStringValued(button.getDismiss())) { rw.writeAttribute("data-dismiss", button.getDismiss(), null); } if (button.isDisabled()) { diff --git a/src/main/java/net/bootsfaces/component/colorPicker/ColorPickerRenderer.java b/src/main/java/net/bootsfaces/component/colorPicker/ColorPickerRenderer.java index 045c05009..8161b74a1 100644 --- a/src/main/java/net/bootsfaces/component/colorPicker/ColorPickerRenderer.java +++ b/src/main/java/net/bootsfaces/component/colorPicker/ColorPickerRenderer.java @@ -215,7 +215,7 @@ public void encodeEnd(FacesContext context, UIComponent component) throws IOExce // build color picker init script rw.startElement("script", colorPicker); rw.writeText("$(function() {" + - "$('#input_" + BsfUtils.EscapeJQuerySpecialCharsInSelector(clientId) + "').minicolors({" + + "$('#input_" + BsfUtils.escapeJQuerySpecialCharsInSelector(clientId) + "').minicolors({" + (colorPicker.getAttributes().get("control") != null ? " control: '" + colorPicker.getAttributes().get("control") + "'," : "") + (colorPicker.getAttributes().get("format") != null ? " format: '" + colorPicker.getAttributes().get("format") + "'," : "") + (colorPicker.getAttributes().get("opacity") != null ? " opacity: " + colorPicker.getAttributes().get("opacity") + "," : "") + diff --git a/src/main/java/net/bootsfaces/component/dataTable/DataTableRenderer.java b/src/main/java/net/bootsfaces/component/dataTable/DataTableRenderer.java index 18c1f0ae1..c1d4a4638 100644 --- a/src/main/java/net/bootsfaces/component/dataTable/DataTableRenderer.java +++ b/src/main/java/net/bootsfaces/component/dataTable/DataTableRenderer.java @@ -310,7 +310,7 @@ public void encodeEnd(FacesContext context, UIComponent component) throws IOExce " pageLength: " + pageLength + ", " + " lengthMenu: " + dataTable.getPageLengthMenu() + ", " + " order: " + orderString + ", " + - (BsfUtils.StringIsValued(lang) ? " language: { url: '" + lang + "' } " : "") + + (BsfUtils.isStringValued(lang) ? " language: { url: '" + lang + "' } " : "") + "});" + // "var table = " + widgetVar +".DataTable({fixedHeader: true, responsive: true});" + "var workInProgressErrorMessage = 'Multiple DataTables on the same page are not yet supported when using " + @@ -382,9 +382,9 @@ private String determineLanguage(FacesContext fc, DataTable dataTable) { final Set availableLanguages = new HashSet(Arrays.asList( new String[] {"de", "en", "es", "fr", "hu", "it", "pl", "ru"} )); - if(BsfUtils.StringIsValued(dataTable.getCustomLangUrl())) { + if(BsfUtils.isStringValued(dataTable.getCustomLangUrl())) { return dataTable.getCustomLangUrl(); - } else if(BsfUtils.StringIsValued(dataTable.getLang())) { + } else if(BsfUtils.isStringValued(dataTable.getLang())) { String lang = dataTable.getLang(); if(availableLanguages.contains(lang)) return determineLanguageUrl(fc, lang); } diff --git a/src/main/java/net/bootsfaces/component/defaultCommand/DefaultCommand.java b/src/main/java/net/bootsfaces/component/defaultCommand/DefaultCommand.java index e90e14d38..dcaecf3ac 100644 --- a/src/main/java/net/bootsfaces/component/defaultCommand/DefaultCommand.java +++ b/src/main/java/net/bootsfaces/component/defaultCommand/DefaultCommand.java @@ -52,8 +52,8 @@ public void encodeEnd(FacesContext context) throws IOException { if (form == null) { throw new FacesException("The default command component must be inside a form", null); } else { - String target = (String) attrs.get("target"); - if (BsfUtils.StringIsValued(target)) { + String target = (String)attrs.get("target"); + if(BsfUtils.isStringValued(target)) { ResponseWriter rw = context.getResponseWriter(); String formId = form.getClientId(); String actionCommandId = BsfUtils.getComponentClientId(target); @@ -61,7 +61,7 @@ public void encodeEnd(FacesContext context) throws IOException { rw.startElement("script", this); rw.writeText("" + "$(function() { " + " $('form#" - + BsfUtils.EscapeJQuerySpecialCharsInSelector(formId) + " :input').keypress(function (e) { " + + BsfUtils.escapeJQuerySpecialCharsInSelector(formId) + " :input').keypress(function (e) { " + " if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) { " + " document.getElementById('" + actionCommandId + "').click();return false; " + " } else { " + " console.log('keycode not 13'); " + " return true; " diff --git a/src/main/java/net/bootsfaces/component/focus/Focus.java b/src/main/java/net/bootsfaces/component/focus/Focus.java index e0de45e69..0975658d9 100644 --- a/src/main/java/net/bootsfaces/component/focus/Focus.java +++ b/src/main/java/net/bootsfaces/component/focus/Focus.java @@ -47,13 +47,10 @@ public void encodeEnd(FacesContext context) throws IOException { Map attrs = getAttributes(); String target = (String) attrs.get("target"); - if (!BsfUtils.StringIsValued(target)) { - if (this.getParent() != null) - target = this.getParent().getId(); - } - - // - if (BsfUtils.StringIsValued(target)) { + if(!BsfUtils.isStringValued(target) && this.getParent() != null) + target = this.getParent().getId(); + + if(BsfUtils.isStringValued(target)) { ResponseWriter rw = context.getResponseWriter(); String itemToFocusID = BsfUtils.getComponentClientId(target); diff --git a/src/main/java/net/bootsfaces/component/jumbotron/JumbotronRenderer.java b/src/main/java/net/bootsfaces/component/jumbotron/JumbotronRenderer.java index efe663717..20dd094fd 100644 --- a/src/main/java/net/bootsfaces/component/jumbotron/JumbotronRenderer.java +++ b/src/main/java/net/bootsfaces/component/jumbotron/JumbotronRenderer.java @@ -57,13 +57,13 @@ public void encodeBegin(FacesContext context, UIComponent component) throws IOEx rw.startElement("div", jumbotron); rw.writeAttribute("id",clientId,"id"); - if(BsfUtils.StringIsValued(jumbotron.getStyle())) + if(BsfUtils.isStringValued(jumbotron.getStyle())) rw.writeAttribute("style", jumbotron.getStyle(), "style"); Tooltip.generateTooltip(context, jumbotron, rw); String styleClass = "jumbotron"; - if(BsfUtils.StringIsValued(jumbotron.getStyleClass())) + if(BsfUtils.isStringValued(jumbotron.getStyleClass())) styleClass = styleClass + " " + jumbotron.getStyleClass(); rw.writeAttribute("class", styleClass, "class"); } diff --git a/src/main/java/net/bootsfaces/component/scrollSpy/ScrollSpyRenderer.java b/src/main/java/net/bootsfaces/component/scrollSpy/ScrollSpyRenderer.java index 101712f45..d911a4e23 100644 --- a/src/main/java/net/bootsfaces/component/scrollSpy/ScrollSpyRenderer.java +++ b/src/main/java/net/bootsfaces/component/scrollSpy/ScrollSpyRenderer.java @@ -90,17 +90,17 @@ public void encodeEnd(FacesContext context, UIComponent component) throws IOExce // Get attributes String container = scrollSpy.getContainer(); - if(!BsfUtils.StringIsValued(container)) { + if(!BsfUtils.isStringValued(container)) { container = "body"; } else container = "#" + decodeAndEscapeSelectors(context, component, container); String target = scrollSpy.getTarget(); - if(!BsfUtils.StringIsValued(target)) { + if(!BsfUtils.isStringValued(target)) { target = ".navbar"; } else target = "#" + decodeAndEscapeSelectors(context, component, target); int offset = scrollSpy.getOffset(); - if(!BsfUtils.StringIsValued(target)) { + if(!BsfUtils.isStringValued(target)) { offset = 20; } boolean smooth = scrollSpy.isSmooth(); @@ -160,7 +160,7 @@ public void encodeEnd(FacesContext context, UIComponent component) throws IOExce */ private String decodeAndEscapeSelectors(FacesContext context, UIComponent component, String selector) { selector = ExpressionResolver.getComponentIDs(context, component, selector); - selector = BsfUtils.EscapeJQuerySpecialCharsInSelector(selector); + selector = BsfUtils.escapeJQuerySpecialCharsInSelector(selector); return selector; } diff --git a/src/main/java/net/bootsfaces/component/tree/TreeRenderer.java b/src/main/java/net/bootsfaces/component/tree/TreeRenderer.java index e37b961ce..3fc0288ea 100644 --- a/src/main/java/net/bootsfaces/component/tree/TreeRenderer.java +++ b/src/main/java/net/bootsfaces/component/tree/TreeRenderer.java @@ -130,7 +130,7 @@ public void encodeEnd(FacesContext context, UIComponent component) throws IOExce } Tree tree = (Tree) component; String clientId = tree.getClientId(); - String jqClientId = BsfUtils.EscapeJQuerySpecialCharsInSelector(clientId); + String jqClientId = BsfUtils.escapeJQuerySpecialCharsInSelector(clientId); ResponseWriter rw = context.getResponseWriter(); final UIForm form = BsfUtils.getClosestForm(tree); @@ -156,9 +156,9 @@ public void encodeEnd(FacesContext context, UIComponent component) throws IOExce (tree.isShowIcon() ? "showIcon: true," : "") + (tree.isShowCheckbox() ? "showCheckbox: true," : "") + (tree.isEnableLinks() ? "enableLinks: true," : "") + - (BsfUtils.StringIsValued(tree.getCollapseIcon()) ? "collapseIcon: '" + tree.getCollapseIcon() + "'," : "") + - (BsfUtils.StringIsValued(tree.getExpandIcon()) ? "expandIcon: '" + tree.getExpandIcon() + "'," : "") + - (BsfUtils.StringIsValued(tree.getColor()) ? "color: '" + tree.getColor() + "'," : "") + + (BsfUtils.isStringValued(tree.getCollapseIcon()) ? "collapseIcon: '" + tree.getCollapseIcon() + "'," : "") + + (BsfUtils.isStringValued(tree.getExpandIcon()) ? "expandIcon: '" + tree.getExpandIcon() + "'," : "") + + (BsfUtils.isStringValued(tree.getColor()) ? "color: '" + tree.getColor() + "'," : "") + " data: getTreeData(), " + // enable nodeSelected event callback " onNodeSelected: function(event, data) { " + diff --git a/src/main/java/net/bootsfaces/component/tree/model/TreeModelUtils.java b/src/main/java/net/bootsfaces/component/tree/model/TreeModelUtils.java index 4b3ff8b60..bffab185f 100644 --- a/src/main/java/net/bootsfaces/component/tree/model/TreeModelUtils.java +++ b/src/main/java/net/bootsfaces/component/tree/model/TreeModelUtils.java @@ -141,27 +141,27 @@ private static String renderNode(Node node) { sb.append("\"nodeInternalId\": " + node.getNodeId() + ", "); } // TEXT - if(BsfUtils.StringIsValued(node.getText())) { + if(BsfUtils.isStringValued(node.getText())) { sb.append("\"text\": \"" + node.getText() + "\", "); } // ICON - if(BsfUtils.StringIsValued(node.getIcon())) { + if(BsfUtils.isStringValued(node.getIcon())) { sb.append("\"icon\": \"" + node.getIcon() + "\", "); } // SELECTED ICON - if(BsfUtils.StringIsValued(node.getSelectedIcon())) { + if(BsfUtils.isStringValued(node.getSelectedIcon())) { sb.append("\"selectedIcon\": \"" + node.getSelectedIcon() + "\", "); } // COLOR - if(BsfUtils.StringIsValued(node.getColor())) { + if(BsfUtils.isStringValued(node.getColor())) { sb.append("\"color\": \"" + node.getColor() + "\", "); } // BACK COLOR - if(BsfUtils.StringIsValued(node.getBackColor())) { + if(BsfUtils.isStringValued(node.getBackColor())) { sb.append("\"backColor\": \"" + node.getBackColor() + "\", "); } // HREF - if(BsfUtils.StringIsValued(node.getHRef())) { + if(BsfUtils.isStringValued(node.getHRef())) { sb.append("\"href\": \"" + node.getHRef() + "\", "); } // TAGS diff --git a/src/main/java/net/bootsfaces/utils/BsfUtils.java b/src/main/java/net/bootsfaces/utils/BsfUtils.java index 658a3f50e..7a8be2894 100644 --- a/src/main/java/net/bootsfaces/utils/BsfUtils.java +++ b/src/main/java/net/bootsfaces/utils/BsfUtils.java @@ -62,19 +62,19 @@ public static String navigateInAjax(String outcome) * @param str * @return */ - public static boolean StringIsValued(String str) { - if(str != null && !"".equals(str.trim())) return true; - return false; + public static boolean isStringValued(String str) { + return str != null && !"".equals(str.trim()); } /** - * Get the string if is valued, otherwise return default Value + * Get the string if is not null or empty, + * otherwise return the default value * @param str * @param defaultValue * @return */ - public static String StringOrDefault(String str, String defaultValue) { - if(StringIsValued(str)) return str; + public static String stringOrDefault(String str, String defaultValue) { + if(isStringValued(str)) return str; return defaultValue; } @@ -195,25 +195,12 @@ else if (c == '\n') return sb.toString(); } - /** - * Get the string if is not null or empty, - * otherwise return the default value - * - * @param inputValue - * @param defaultReturnValue - * @return - */ - public static String GetOrDefault (String inputValue, String defaultReturnValue) { - if(StringIsValued(inputValue)) return inputValue; - else return defaultReturnValue; - } - /** * Escape special jQuery chars in selector query * @param selector * @return */ - public static String EscapeJQuerySpecialCharsInSelector(String selector) { + public static String escapeJQuerySpecialCharsInSelector(String selector) { String jQuerySpecialChars = "!\"#$%&'()*+,./:;<=>?@[]^`{|}~;"; String[] jsc = jQuerySpecialChars.split("(?!^)"); for(String c: jsc) { From 0e17f426a0f70bcb2353b8613678929395e50f80 Mon Sep 17 00:00:00 2001 From: Philipp Gruhn Date: Fri, 22 Apr 2016 00:17:14 +0200 Subject: [PATCH 08/15] add getInitParameter shortcut methods --- .../component/inputText/InputText.java | 4 +--- .../listeners/AddResourcesListener.java | 16 ++++++++-------- .../java/net/bootsfaces/utils/BsfUtils.java | 18 ++++++++++++++++++ 3 files changed, 27 insertions(+), 11 deletions(-) diff --git a/src/main/java/net/bootsfaces/component/inputText/InputText.java b/src/main/java/net/bootsfaces/component/inputText/InputText.java index f29bd50a4..25a271730 100644 --- a/src/main/java/net/bootsfaces/component/inputText/InputText.java +++ b/src/main/java/net/bootsfaces/component/inputText/InputText.java @@ -21,7 +21,6 @@ import javax.el.ValueExpression; import javax.faces.component.FacesComponent; import javax.faces.component.html.HtmlInputText; -import javax.faces.context.FacesContext; import net.bootsfaces.C; import net.bootsfaces.beans.ELTools; @@ -83,8 +82,7 @@ public InputText() { AddResourcesListener.addBasicJSResource("bsf", "js/bsf.js"); AddResourcesListener.addThemedCSSResource("core.css"); AddResourcesListener.addThemedCSSResource("bsf.css"); - renderLabel = FacesContext.getCurrentInstance().getExternalContext() - .getInitParameter("net.bootsfaces.defaults.renderLabel"); + renderLabel= BsfUtils.getInitParam("net.bootsfaces.defaults.renderLabel"); if (null != renderLabel && renderLabel.contains("#{")) { renderLabel = ELTools.evalAsString(renderLabel); } diff --git a/src/main/java/net/bootsfaces/listeners/AddResourcesListener.java b/src/main/java/net/bootsfaces/listeners/AddResourcesListener.java index ed3b8f168..193acb790 100644 --- a/src/main/java/net/bootsfaces/listeners/AddResourcesListener.java +++ b/src/main/java/net/bootsfaces/listeners/AddResourcesListener.java @@ -45,6 +45,7 @@ import net.bootsfaces.C; import net.bootsfaces.beans.ELTools; +import net.bootsfaces.utils.BsfUtils; /** * This class adds the resource needed by BootsFaces and ensures that they are @@ -106,7 +107,7 @@ public void processEvent(SystemEvent event) throws AbortProcessingException { */ private void addMetaTags(UIViewRoot root, FacesContext context) { // Check context-param - String viewportParam = context.getExternalContext().getInitParameter(C.P_VIEWPORT); + String viewportParam = BsfUtils.getInitParam(C.P_VIEWPORT, context); viewportParam = evalELIfPossible(viewportParam); String content = "width=device-width, initial-scale=1"; @@ -167,8 +168,8 @@ private void addJavascript(UIViewRoot root, FacesContext context, boolean isProd */ String theme = null; String usetheme = null; - theme = context.getExternalContext().getInitParameter(C.P_THEME); - usetheme = context.getExternalContext().getInitParameter(C.P_USETHEME); + theme = BsfUtils.getInitParam(C.P_THEME, context); + usetheme = BsfUtils.getInitParam(C.P_USETHEME, context); theme = evalELIfPossible(theme); if (!theme.isEmpty()) { if (theme.equalsIgnoreCase("custom")) { @@ -202,8 +203,7 @@ private void addJavascript(UIViewRoot root, FacesContext context, boolean isProd UIComponent header = findHeader(root); boolean useCDNImportForFontAwesome = (null == header) || (null == header.getFacet("no-fa")); if (useCDNImportForFontAwesome) { - String useCDN = FacesContext.getCurrentInstance().getExternalContext() - .getInitParameter("net.bootsfaces.get_fontawesome_from_cdn"); + String useCDN = BsfUtils.getInitParam("net.bootsfaces.get_fontawesome_from_cdn"); if (null != useCDN) { useCDN = ELTools.evalAsString(useCDN); } @@ -312,7 +312,8 @@ private void addJavascript(UIViewRoot root, FacesContext context, boolean isProd } viewMap.remove(RESOURCE_KEY); } - String blockUI = FacesContext.getCurrentInstance().getExternalContext().getInitParameter("net.bootsfaces.blockUI"); + + String blockUI = BsfUtils.getInitParam("net.bootsfaces.blockUI", context); if (null != blockUI) blockUI = ELTools.evalAsString(blockUI); if (null != blockUI && isTrueOrYes(blockUI)) { @@ -362,8 +363,7 @@ private void addJavascript(UIViewRoot root, FacesContext context, boolean isProd } private boolean shouldLibraryBeLoaded(String initParameter) { - String suppressLibrary = FacesContext.getCurrentInstance().getExternalContext() - .getInitParameter(initParameter); + String suppressLibrary = BsfUtils.getInitParam(initParameter); if (suppressLibrary != null) suppressLibrary = ELTools.evalAsString(suppressLibrary); diff --git a/src/main/java/net/bootsfaces/utils/BsfUtils.java b/src/main/java/net/bootsfaces/utils/BsfUtils.java index 7a8be2894..93818f459 100644 --- a/src/main/java/net/bootsfaces/utils/BsfUtils.java +++ b/src/main/java/net/bootsfaces/utils/BsfUtils.java @@ -268,4 +268,22 @@ public static UIComponent findComponent(UIComponent c, String id) { } return null; } + + /** + * Shortcut for getting context parameters. + * @param param context parameter name + * @return value of context parameter, may be null or empty + */ + public static String getInitParam(String param) { + return getInitParam(param, FacesContext.getCurrentInstance()); + } + + /** + * Shortcut for getting context parameters using an already obtained FacesContext. + * @param param context parameter name + * @return value of context parameter, may be null or empty + */ + public static String getInitParam(String param, FacesContext context) { + return context.getExternalContext().getInitParameter(param); + } } From 72484f61a86dbf2dd1a9bca7dd0088d69d27b91d Mon Sep 17 00:00:00 2001 From: Philipp Gruhn Date: Fri, 22 Apr 2016 02:43:51 +0200 Subject: [PATCH 09/15] split addJavascript into smaller methods --- .../listeners/AddResourcesListener.java | 208 +++++++----------- 1 file changed, 81 insertions(+), 127 deletions(-) diff --git a/src/main/java/net/bootsfaces/listeners/AddResourcesListener.java b/src/main/java/net/bootsfaces/listeners/AddResourcesListener.java index 193acb790..9a3cff056 100644 --- a/src/main/java/net/bootsfaces/listeners/AddResourcesListener.java +++ b/src/main/java/net/bootsfaces/listeners/AddResourcesListener.java @@ -29,7 +29,6 @@ import java.util.logging.Logger; import javax.faces.FacesException; -import javax.faces.application.Application; import javax.faces.application.ProjectStage; import javax.faces.application.Resource; import javax.faces.application.ResourceHandler; @@ -141,9 +140,6 @@ private void addMetaTags(UIViewRoot root, FacesContext context) { * library, optimized for debugging or production. */ private void addJavascript(UIViewRoot root, FacesContext context, boolean isProduction) { - Application app = context.getApplication(); - ResourceHandler rh = app.getResourceHandler(); - // 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("**************"); @@ -154,49 +150,8 @@ private void addJavascript(UIViewRoot root, FacesContext context, boolean isProd // System.out.println("**************"); // end of the diagnostic code - // If the BootsFaces_USETHEME parameter is true, render Theme CSS link - - /* - * As of v0.8.0 we have two Context Parameters: BootsFaces_USETHEME - as - * in previous versions controls if the current theme is to be rendered - * in the Flat variant (default) or in its Enhanced variant, with - * shadows and decorations turned on. BootsFaces_THEME - controls the - * Theme to use: the value "default" is plain Bootstrap, the other - * options are a Bootswach Theme name (lowercase) or "custom". If custom - * is chosen, you will have to provide your custom CSS in the "other" - * folder. - */ - String theme = null; - String usetheme = null; - theme = BsfUtils.getInitParam(C.P_THEME, context); - usetheme = BsfUtils.getInitParam(C.P_USETHEME, context); - theme = evalELIfPossible(theme); - if (!theme.isEmpty()) { - if (theme.equalsIgnoreCase("custom")) { - theme = "other"; - } - } else - theme = "default"; - - // Theme loading - if (isFontAwesomeComponentUsedAndRemoveIt() || (!theme.equalsIgnoreCase("other"))) { - String filename = "bsf.css"; - Resource themeResource = rh.createResource("css/" + theme + "/" + filename, C.BSF_LIBRARY); - - if (themeResource == null) { - throw new FacesException("Error loading theme, cannot find \"" + "css/" + theme + "/" + filename + "\" resource of \"" - + C.BSF_LIBRARY + "\" library"); - } else { - String name = "css/" + theme + "/" + filename; - createAndAddComponent(root, context, CSS_RENDERER, name, C.BSF_LIBRARY); - } - } - - usetheme = evalELIfPossible(usetheme); - if (!usetheme.isEmpty() && isTrueOrYes(usetheme)) { - String name = "css/" + theme + "/theme.css"; - createAndAddComponent(root, context, CSS_RENDERER, name, C.BSF_LIBRARY); - } + ResourceHandler rh = context.getApplication().getResourceHandler(); + String theme = loadTheme(root, context, rh); // deactivate FontAwesome support if the no-fa facet is found in the // h:head tag @@ -211,13 +166,11 @@ private void addJavascript(UIViewRoot root, FacesContext context, boolean isProd useCDNImportForFontAwesome = !isFalseOrNo(useCDN); } } - - // Do we have to add font-awesome and jQuery, or are the resources - // already there? + boolean loadJQuery = shouldLibraryBeLoaded("net.bootsfaces.get_jquery_from_cdn"); boolean loadJQueryUI = shouldLibraryBeLoaded("net.bootsfaces.get_jqueryui_from_cdn"); boolean loadBootstrapFromCDN = shouldLibraryBeLoaded("net.bootsfaces.get_bootstrap_from_cdn"); - + // Do we have to add font-awesome and jQuery, or are the resources already there? List availableResources = root.getComponentResources(context, "head"); for (UIComponent ava : availableResources) { String name = (String) ava.getAttributes().get("name"); @@ -236,82 +189,13 @@ private void addJavascript(UIViewRoot root, FacesContext context, boolean isProd } // Font Awesome - if (useCDNImportForFontAwesome) { // !=null && usefa.equals(C.TRUE)) { + if (useCDNImportForFontAwesome) { InternalFALink output = new InternalFALink(); output.getAttributes().put("src", C.FONTAWESOME_CDN_URL); addResourceIfNecessary(root, context, output); } - Map viewMap = root.getViewMap(); - - /* In the old way, we check if the single component needs the bsf.js - * library. This can be an error prone approach so we start to force - * the bsf addition (if not different specified) - * - @SuppressWarnings("unchecked") - Map basicResourceMap = (Map) viewMap.get(BASIC_JS_RESOURCE_KEY); - if(basicResourceMap != null) { - if (basicResourceMap.containsValue("jsf.js")) { - UIOutput output = new UIOutput(); - output.setRendererType(SCRIPT_RENDERER); - output.getAttributes().put("name", "jsf.js"); - output.getAttributes().put("library", "javax.faces"); - output.getAttributes().put("target", "head"); - addResourceIfNecessary(root, context, output); - } - - if (basicResourceMap.containsValue("bsf.js") || basicResourceMap.containsValue("js/bsf.js")) { - UIOutput output = new UIOutput(); - output.setRendererType(SCRIPT_RENDERER); - output.getAttributes().put("name", "js/bsf.js"); - output.getAttributes().put("library", "bsf"); - output.getAttributes().put("target", "head"); - addResourceIfNecessary(root, context, output); - } - } - */ - - // add JSF by default - createAndAddComponent(root, context, SCRIPT_RENDERER, "jsf.js", "javax.faces"); - // add BSF by default - createAndAddComponent(root, context, SCRIPT_RENDERER, "js/bsf.js", "bsf"); - - @SuppressWarnings("unchecked") - Map resourceMap = (Map) viewMap.get(RESOURCE_KEY); - - if (null != resourceMap) { - if (loadJQuery) { - /* In the old way, we check if the single component needs the jquery - * library. This can be an error prone approach so we start to force - * the jquery addition (if not different specified) - boolean needsJQuery = false; - for (Entry entry : resourceMap.entrySet()) { - String file = entry.getValue(); - if ("jq/jquery.js".equals(file)) { - needsJQuery = true; - } - } - if (needsJQuery) { - UIOutput output = new UIOutput(); - output.setRendererType(SCRIPT_RENDERER); - output.getAttributes().put("name", "jq/jquery.js"); - output.getAttributes().put("library", C.BSF_LIBRARY); - output.getAttributes().put("target", "head"); - addResourceIfNecessary(root, context, output); - }*/ - - createAndAddComponent(root, context, SCRIPT_RENDERER, "jq/jquery.js", C.BSF_LIBRARY); - } - - for (Entry entry : resourceMap.entrySet()) { - String file = entry.getValue(); - String library = entry.getKey().substring(0, entry.getKey().length() - file.length() - 1); - if (!"jq/jquery.js".equals(file) || (!"bsf".equals(library))) - if ((!file.startsWith("jq/ui")) || (!"bsf".equals(library)) || loadJQueryUI) - createAndAddComponent(root, context, SCRIPT_RENDERER, file, library); - } - viewMap.remove(RESOURCE_KEY); - } + addMandatoryLibraries(root, context, loadJQuery, loadJQueryUI); String blockUI = BsfUtils.getInitParam("net.bootsfaces.blockUI", context); if (null != blockUI) @@ -347,8 +231,9 @@ private void addJavascript(UIViewRoot root, FacesContext context, boolean isProd } } } - - List themedCSSMap = (List) viewMap.get(THEME_RESOURCE_KEY); + + @SuppressWarnings("unchecked") + List themedCSSMap = (List) root.getViewMap().get(THEME_RESOURCE_KEY); if(themedCSSMap != null) { for (String file: themedCSSMap) { String name = "css/" + theme + "/" + file; @@ -362,6 +247,77 @@ private void addJavascript(UIViewRoot root, FacesContext context, boolean isProd createAndAddComponent(root, context, CSS_RENDERER, name, C.BSF_LIBRARY); } + private Map addMandatoryLibraries(UIViewRoot root, FacesContext context, + boolean loadJQuery, boolean loadJQueryUI) { + /* We used to check if a single component needs the bsf.js, jsf or jquery library. + * This can be an error prone approach so we add all of them (if not different specified) + */ + createAndAddComponent(root, context, SCRIPT_RENDERER, "jsf.js", "javax.faces"); + createAndAddComponent(root, context, SCRIPT_RENDERER, "js/bsf.js", "bsf"); + + Map viewMap = root.getViewMap(); + @SuppressWarnings("unchecked") + Map resourceMap = (Map) viewMap.get(RESOURCE_KEY); + + if (null != resourceMap) { + if (loadJQuery) + createAndAddComponent(root, context, SCRIPT_RENDERER, "jq/jquery.js", C.BSF_LIBRARY); + + for (Entry entry : resourceMap.entrySet()) { + String file = entry.getValue(); + String library = entry.getKey().substring(0, entry.getKey().length() - file.length() - 1); + if (!"jq/jquery.js".equals(file) || (!"bsf".equals(library))) + if ((!file.startsWith("jq/ui")) || (!"bsf".equals(library)) || loadJQueryUI) + createAndAddComponent(root, context, SCRIPT_RENDERER, file, library); + } + viewMap.remove(RESOURCE_KEY); + } + return viewMap; + } + + private String loadTheme(UIViewRoot root, FacesContext context, ResourceHandler rh) { + /* + * As of v0.8.0 we have two Context Parameters: BootsFaces_USETHEME - as + * in previous versions controls if the current theme is to be rendered + * in the Flat variant (default) or in its Enhanced variant, with + * shadows and decorations turned on. BootsFaces_THEME - controls the + * Theme to use: the value "default" is plain Bootstrap, the other + * options are a Bootswach Theme name (lowercase) or "custom". If custom + * is chosen, you will have to provide your custom CSS in the "other" + * folder. + */ + String theme = evalELIfPossible(BsfUtils.getInitParam(C.P_THEME, context)); + if (!theme.isEmpty()) { + if (theme.equalsIgnoreCase("custom")) { + theme = "other"; + } + } else + theme = "default"; + + // Theme loading + if (isFontAwesomeComponentUsedAndRemoveIt() || (!theme.equalsIgnoreCase("other"))) { + String filename = "bsf.css"; + Resource themeResource = rh.createResource("css/" + theme + "/" + filename, C.BSF_LIBRARY); + + if (themeResource == null) { + throw new FacesException("Error loading theme, cannot find \"" + "css/" + theme + "/" + filename + "\" resource of \"" + + C.BSF_LIBRARY + "\" library"); + } else { + String name = "css/" + theme + "/" + filename; + createAndAddComponent(root, context, CSS_RENDERER, name, C.BSF_LIBRARY); + } + } + + // If the BootsFaces_USETHEME parameter is true, render Theme CSS link + String usetheme = evalELIfPossible(BsfUtils.getInitParam(C.P_USETHEME, context)); + if (!usetheme.isEmpty() && isTrueOrYes(usetheme)) { + String name = "css/" + theme + "/theme.css"; + createAndAddComponent(root, context, CSS_RENDERER, name, C.BSF_LIBRARY); + } + + return theme; + } + private boolean shouldLibraryBeLoaded(String initParameter) { String suppressLibrary = BsfUtils.getInitParam(initParameter); if (suppressLibrary != null) @@ -705,9 +661,7 @@ public static void addThemedCSSResource(String resource) { } private static void addResource(String resourceKey, String resourceTypeKey) { - FacesContext ctx = FacesContext.getCurrentInstance(); - UIViewRoot v = ctx.getViewRoot(); - Map viewMap = v.getViewMap(); + Map viewMap = FacesContext.getCurrentInstance().getViewRoot().getViewMap(); @SuppressWarnings("unchecked") Map resourceMap = (Map) viewMap.get(resourceTypeKey); if (null == resourceMap) { From b0cbd2c92fb79ccf1620e6d6c94be4e938e395fb Mon Sep 17 00:00:00 2001 From: Philipp Gruhn Date: Fri, 22 Apr 2016 22:31:07 +0200 Subject: [PATCH 10/15] changed method name due to 2f0fb312 --- .../bootsfaces/component/colorPicker/ColorPickerRenderer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/net/bootsfaces/component/colorPicker/ColorPickerRenderer.java b/src/main/java/net/bootsfaces/component/colorPicker/ColorPickerRenderer.java index 8161b74a1..b0598e59b 100644 --- a/src/main/java/net/bootsfaces/component/colorPicker/ColorPickerRenderer.java +++ b/src/main/java/net/bootsfaces/component/colorPicker/ColorPickerRenderer.java @@ -224,7 +224,7 @@ public void encodeEnd(FacesContext context, UIComponent component) throws IOExce " theme: 'bootstrap' " + "});" + "});", null); - rw.writeText("document.getElementById('input_" + BsfUtils.EscapeJQuerySpecialCharsInSelector(clientId) + "').addEventListener('touchmove', function(event) {\r\n"+ + rw.writeText("document.getElementById('input_" + BsfUtils.escapeJQuerySpecialCharsInSelector(clientId) + "').addEventListener('touchmove', function(event) {\r\n"+ "event.preventDefault();\r\n"+ "}, false);", null); rw.endElement("script"); From 217edab02bfddd8d7cb4d177164ce03860eafcbe Mon Sep 17 00:00:00 2001 From: Philipp Gruhn Date: Sun, 24 Apr 2016 17:47:26 +0200 Subject: [PATCH 11/15] replace literal by constant, add unchecked to avoid build warnings --- .../java/net/bootsfaces/component/dataTable/DataTable.java | 1 + .../java/net/bootsfaces/component/datePicker/DatePicker.java | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/bootsfaces/component/dataTable/DataTable.java b/src/main/java/net/bootsfaces/component/dataTable/DataTable.java index 80882a570..6e475112b 100644 --- a/src/main/java/net/bootsfaces/component/dataTable/DataTable.java +++ b/src/main/java/net/bootsfaces/component/dataTable/DataTable.java @@ -523,6 +523,7 @@ public void setUpdate(String _update) { * Activates Multi-column search inputs. The default value is false (no multi-column searching). A java.util.Map<net.bootsfaces.component.dataTable.DataTable.DataTablePropertyType, Object> map on the backing bean where the state of the DataTable can be saved, and retrieved after re-rendering.

* @return Returns the value of the attribute, or null, if it hasn't been set by the JSF file. */ + @SuppressWarnings("unchecked") public Map getDataTableProperties() { return (Map)getStateHelper().eval(PropertyKeys.dataTableProperties); } diff --git a/src/main/java/net/bootsfaces/component/datePicker/DatePicker.java b/src/main/java/net/bootsfaces/component/datePicker/DatePicker.java index f44441685..6fff97ca1 100644 --- a/src/main/java/net/bootsfaces/component/datePicker/DatePicker.java +++ b/src/main/java/net/bootsfaces/component/datePicker/DatePicker.java @@ -257,7 +257,7 @@ private void encodeHTML(FacesContext fc) throws IOException { if (mode.equals("icon-popup") || mode.equals("icon-toggle")) { rw.startElement("span", this); rw.writeAttribute("id", clientId + "_" + ADDON, "id"); - rw.writeAttribute("class", "input-group-addon", "class"); + rw.writeAttribute("class", ADDON, "class"); IconRenderer.encodeIcon(rw, this, "calendar", false, null, null, null, false, null, null, isDisabled, true, true, true); rw.endElement("span"); @@ -294,7 +294,7 @@ private void encodeHTML(FacesContext fc) throws IOException { if (mode.equals("popup-icon") || mode.equals("toggle-icon")) { rw.startElement("span", this); rw.writeAttribute("id", clientId + "_" + ADDON, "id"); - rw.writeAttribute("class", "input-group-addon", "class"); + rw.writeAttribute("class", ADDON, "class"); IconRenderer.encodeIcon(rw, this, "calendar", false, null, null, null, false, null, null, isDisabled, true, true, true); From b5b15320b5225d64539bda38ef0485b4143026fc Mon Sep 17 00:00:00 2001 From: Philipp Gruhn Date: Mon, 25 Apr 2016 15:55:19 +0200 Subject: [PATCH 12/15] further refactorings and fixes: - remove useless isProduction parameter - add default values to shouldLibraryBeLoaded - simplification of nested ifs - extract Comparator into its own class - fix #325 with PrimeFaces components - replace AddResourceToHeadButAfterJQuery by generic method --- .../listeners/AddResourcesListener.java | 140 +++++------------- .../listeners/ResourceFileComparator.java | 47 ++++++ 2 files changed, 80 insertions(+), 107 deletions(-) create mode 100644 src/main/java/net/bootsfaces/listeners/ResourceFileComparator.java diff --git a/src/main/java/net/bootsfaces/listeners/AddResourcesListener.java b/src/main/java/net/bootsfaces/listeners/AddResourcesListener.java index 9a3cff056..d723128f1 100644 --- a/src/main/java/net/bootsfaces/listeners/AddResourcesListener.java +++ b/src/main/java/net/bootsfaces/listeners/AddResourcesListener.java @@ -20,7 +20,6 @@ import java.util.ArrayList; import java.util.Collections; -import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.ListIterator; @@ -29,7 +28,6 @@ import java.util.logging.Logger; import javax.faces.FacesException; -import javax.faces.application.ProjectStage; import javax.faces.application.Resource; import javax.faces.application.ResourceHandler; import javax.faces.component.UIComponent; @@ -89,10 +87,9 @@ public void processEvent(SystemEvent event) throws AbortProcessingException { Object source = event.getSource(); if (source instanceof UIViewRoot) { final FacesContext context = FacesContext.getCurrentInstance(); - boolean isProduction = context.isProjectStage(ProjectStage.Production); UIViewRoot root = (UIViewRoot) source; - addJavascript(root, context, isProduction); + addJavascript(root, context); addMetaTags(root, context); } } @@ -139,7 +136,7 @@ private void addMetaTags(UIViewRoot root, FacesContext context) { * This flag can be used to deliver different version of the JS * library, optimized for debugging or production. */ - private void addJavascript(UIViewRoot root, FacesContext context, boolean isProduction) { + private void addJavascript(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("**************"); @@ -153,8 +150,7 @@ private void addJavascript(UIViewRoot root, FacesContext context, boolean isProd ResourceHandler rh = context.getApplication().getResourceHandler(); String theme = loadTheme(root, context, rh); - // 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) { @@ -167,9 +163,9 @@ private void addJavascript(UIViewRoot root, FacesContext context, boolean isProd } } - boolean loadJQuery = shouldLibraryBeLoaded("net.bootsfaces.get_jquery_from_cdn"); - boolean loadJQueryUI = shouldLibraryBeLoaded("net.bootsfaces.get_jqueryui_from_cdn"); - boolean loadBootstrapFromCDN = shouldLibraryBeLoaded("net.bootsfaces.get_bootstrap_from_cdn"); + boolean loadJQuery = shouldLibraryBeLoaded("net.bootsfaces.get_jquery_from_cdn", true); + boolean loadJQueryUI = shouldLibraryBeLoaded("net.bootsfaces.get_jqueryui_from_cdn", true); + boolean loadBootstrapFromCDN = shouldLibraryBeLoaded("net.bootsfaces.get_bootstrap_from_cdn", false); // Do we have to add font-awesome and jQuery, or are the resources already there? List availableResources = root.getComponentResources(context, "head"); for (UIComponent ava : availableResources) { @@ -178,13 +174,10 @@ private void addJavascript(UIViewRoot root, FacesContext context, boolean isProd name = name.toLowerCase(); if ((name.contains("font-awesome") || name.contains("fontawesome")) && name.endsWith("css")) useCDNImportForFontAwesome = false; - if (name.startsWith("jquery-ui") && name.endsWith(".js")) { - // do nothing - the if is needed to avoid confusion between - // jQuery and jQueryUI + if (name.startsWith("jquery-ui") && name.endsWith(".js")) loadJQueryUI = false; - } else if (name.startsWith("jquery") && name.endsWith(".js")) { + else if (name.startsWith("jquery") && name.endsWith(".js")) loadJQuery = false; - } } } @@ -212,22 +205,18 @@ private void addJavascript(UIViewRoot root, FacesContext context, boolean isProd } enforceCorrectLoadOrder(root, context); - InternalIE8CompatiblityLinks output = new InternalIE8CompatiblityLinks(); - addResourceIfNecessary(root, context, output); + addResourceIfNecessary(root, context, new InternalIE8CompatiblityLinks()); List res = root.getComponentResources(context, "head"); for (UIComponent ava : res) { String library = (String) ava.getAttributes().get("library"); if (library != null && library.equals("bsf")) { String name = (String) ava.getAttributes().get("name"); - if (null != name) { - if (name.endsWith(".css") && name.startsWith("css/")) { - if (!name.equals("css/icons.css")) { - ava.getAttributes().remove("name"); - int pos = name.lastIndexOf('/'); - ava.getAttributes().put("name", "css/" + theme + "/" + name.substring(pos + 1)); - } - } + if (null != name && name.endsWith(".css") && name.startsWith("css/") + && !name.equals("css/icons.css")) { + ava.getAttributes().remove("name"); + int pos = name.lastIndexOf('/'); + ava.getAttributes().put("name", "css/" + theme + "/" + name.substring(pos + 1)); } } } @@ -266,8 +255,9 @@ private Map addMandatoryLibraries(UIViewRoot root, FacesContext for (Entry entry : resourceMap.entrySet()) { String file = entry.getValue(); String library = entry.getKey().substring(0, entry.getKey().length() - file.length() - 1); - if (!"jq/jquery.js".equals(file) || (!"bsf".equals(library))) - if ((!file.startsWith("jq/ui")) || (!"bsf".equals(library)) || loadJQueryUI) + //TODO combine if statements + if (!"jq/jquery.js".equals(file) || !"bsf".equals(library)) + if (!file.startsWith("jq/ui") || !"bsf".equals(library) || loadJQueryUI) createAndAddComponent(root, context, SCRIPT_RENDERER, file, library); } viewMap.remove(RESOURCE_KEY); @@ -318,13 +308,11 @@ private String loadTheme(UIViewRoot root, FacesContext context, ResourceHandler return theme; } - private boolean shouldLibraryBeLoaded(String initParameter) { + private boolean shouldLibraryBeLoaded(String initParameter, boolean defaultValue) { String suppressLibrary = BsfUtils.getInitParam(initParameter); - if (suppressLibrary != null) - suppressLibrary = ELTools.evalAsString(suppressLibrary); - - //default to true if no param is set, false if 'true' or 'yes' is set - return suppressLibrary == null || !isTrueOrYes(suppressLibrary); + if(suppressLibrary == null) + return defaultValue; + return !isTrueOrYes(ELTools.evalAsString(suppressLibrary)); } private void addResourceIfNecessary(UIViewRoot root, FacesContext context, InternalIE8CompatiblityLinks output) { @@ -349,11 +337,8 @@ private void addResourceIfNecessary(UIViewRoot root, FacesContext context, UIOut for (UIComponent c : root.getComponentResources(context, "head")) { String library = (String) c.getAttributes().get("library"); String name = (String) c.getAttributes().get("name"); - if (library != null && library.equals(libToAdd)) { - if (name != null && name.equals(nameToAdd)) { - return; - } - } + if (library != null && library.equals(libToAdd) && name != null && name.equals(nameToAdd)) + return; } root.addComponentResource(context, output, "head"); // System.out.println("++" + output.getClientId() + " " + nameToAdd + " " + libToAdd); @@ -386,7 +371,7 @@ private void removeDuplicateResources(UIViewRoot root, FacesContext context) { alreadyThere.put(key, resource); } for (UIComponent c : resourcesToRemove) { - // c.setInView(false); + c.setInView(false); root.removeComponentResource(context, c); //String name = (String) c.getAttributes().get("name"); //String library = (String) c.getAttributes().get("library"); @@ -458,47 +443,7 @@ private void enforceCorrectLoadOrder(UIViewRoot root, FacesContext context) { } // add the JavaScript files in correct order. - Collections.sort(resources, new Comparator() { - - @Override - public int compare(UIComponent o1, UIComponent o2) { - String name1 = (String) o1.getAttributes().get("name"); - String name2 = (String) o2.getAttributes().get("name"); - if (name1 == null) - return 1; - if (name2 == null) - return -1; - if (name1.endsWith(".js") && (!(name2.endsWith(".js")))) - return 1; - if (name2.endsWith(".js") && (!(name1.endsWith(".js")))) - return -1; - if (name1.endsWith(".js")) { - name1 = renameJSFile(name1); - } - if (name2.endsWith(".js")) { - name2 = renameJSFile(name2); - } - int result = name1.compareTo(name2); - - return result; - } - - private String renameJSFile(String name) { - if (name.toLowerCase().contains("jquery-ui")) - name = "2.js"; // make it the second JS file - else if (name.toLowerCase().contains("jquery")) - name = "1.js"; // make it the first JS file - else if (name.toLowerCase().contains("ui/core.js")) - name = "3.js"; // make it the third JS file - else if (name.toLowerCase().contains("ui/widget.js")) - name = "4.js"; // make it the second last JS file - else if (name.toLowerCase().contains("bsf.js")) - name = "zzz.js"; // make it the last JS file - else - name = "keep.js"; // don't move it - return name; - } - }); + Collections.sort(resources, new ResourceFileComparator()); for (UIComponent c : first) { root.removeComponentResource(context, c); @@ -516,13 +461,12 @@ else if (name.toLowerCase().contains("bsf.js")) for (UIComponent c : middle) { root.removeComponentResource(context, c); } + for (UIComponent c : first) { root.addComponentResource(context, c, "head"); - // root.getComponentResources(context, "head").add(c); } for (UIComponent c : middle) { root.addComponentResource(context, c, "head"); - // root.addComponentResource(context, c, "head"); } for (UIComponent c : resources) { root.addComponentResource(context, c, "head"); @@ -561,7 +505,6 @@ private boolean isFontAwesomeComponentUsedAndRemoveIt() { return true; } return false; - } /** @@ -607,20 +550,7 @@ public boolean isListenerForSource(Object source) { * The name of the resource file within the library folder. */ public static void addResourceToHeadButAfterJQuery(String library, String resource) { -// addResource(library + "#" + resource, RESOURCE_KEY); - FacesContext ctx = FacesContext.getCurrentInstance(); - UIViewRoot v = ctx.getViewRoot(); - Map viewMap = v.getViewMap(); - @SuppressWarnings("unchecked") - Map resourceMap = (Map) viewMap.get(RESOURCE_KEY); - if (null == resourceMap) { - resourceMap = new HashMap(); - viewMap.put(RESOURCE_KEY, resourceMap); - } - String key = library + "#" + resource; - if (!resourceMap.containsKey(key)) { - resourceMap.put(key, resource); - } + addResource(resource, library, library + "#" + resource, RESOURCE_KEY); } /** @@ -633,7 +563,7 @@ public static void addResourceToHeadButAfterJQuery(String library, String resour * The name of the resource file within the library folder. */ public static void addBasicJSResource(String library, String resource) { - addResource(library + "#" + resource, BASIC_JS_RESOURCE_KEY); + addResource(resource, library, resource, BASIC_JS_RESOURCE_KEY); } /** @@ -644,10 +574,7 @@ public static void addBasicJSResource(String library, String resource) { * The name of the resource file within the library folder. */ public static void addThemedCSSResource(String resource) { -// addResource(resource, THEME_RESOURCE_KEY); - FacesContext ctx = FacesContext.getCurrentInstance(); - UIViewRoot v = ctx.getViewRoot(); - Map viewMap = v.getViewMap(); + Map viewMap = FacesContext.getCurrentInstance().getViewRoot().getViewMap(); @SuppressWarnings("unchecked") List resourceList = (List) viewMap.get(THEME_RESOURCE_KEY); if (null == resourceList) { @@ -660,7 +587,7 @@ public static void addThemedCSSResource(String resource) { } } - private static void addResource(String resourceKey, String resourceTypeKey) { + private static void addResource(String resource, String library, String resourceKey, String resourceTypeKey) { Map viewMap = FacesContext.getCurrentInstance().getViewRoot().getViewMap(); @SuppressWarnings("unchecked") Map resourceMap = (Map) viewMap.get(resourceTypeKey); @@ -668,10 +595,9 @@ private static void addResource(String resourceKey, String resourceTypeKey) { resourceMap = new HashMap(); viewMap.put(resourceTypeKey, resourceMap); } - - if (!resourceMap.containsKey(resourceKey)) { - resourceMap.put(resourceTypeKey, resourceKey); - } + + if (!resourceMap.containsKey(resourceKey)) + resourceMap.put(library + "#" + resource, resource); } private String evalELIfPossible(String expression) { diff --git a/src/main/java/net/bootsfaces/listeners/ResourceFileComparator.java b/src/main/java/net/bootsfaces/listeners/ResourceFileComparator.java new file mode 100644 index 000000000..354c4b61a --- /dev/null +++ b/src/main/java/net/bootsfaces/listeners/ResourceFileComparator.java @@ -0,0 +1,47 @@ +package net.bootsfaces.listeners; + +import java.util.Comparator; + +import javax.faces.component.UIComponent; + +public class ResourceFileComparator implements Comparator { + @Override + public int compare(UIComponent o1, UIComponent o2) { + String name1 = (String) o1.getAttributes().get("name"); + String name2 = (String) o2.getAttributes().get("name"); + if (name1 == null) + return 1; + if (name2 == null) + return -1; + if (name1.endsWith(".js") && (!(name2.endsWith(".js")))) + return 1; + if (name2.endsWith(".js") && (!(name1.endsWith(".js")))) + return -1; + if (name1.endsWith(".js")) { + name1 = renameJSFile(name1); + } + if (name2.endsWith(".js")) { + name2 = renameJSFile(name2); + } + int result = name1.compareTo(name2); + + return result; + } + + private String renameJSFile(String name) { + name = name.toLowerCase(); + if (name.contains("jquery-ui")) + name = "2.js"; // make it the second JS file + else if (name.contains("jquery")) + name = "1.js"; // make it the first JS file + else if (name.contains("ui/core.js")) + name = "3.js"; // make it the third JS file + else if (name.contains("ui/widget.js")) + name = "4.js"; // make it the second last JS file + else if (name.contains("bsf.js")) + name = "zzz.js"; // make it the last JS file + else + name = "keep.js"; // don't move it + return name; + } +} From 713dc20e4434fdb17fdb31267e5dd0b128d86509 Mon Sep 17 00:00:00 2001 From: Philipp Gruhn Date: Wed, 27 Apr 2016 02:35:26 +0200 Subject: [PATCH 13/15] updated FA version to 4.6.1, fixes #353 --- src/main/java/net/bootsfaces/C.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/net/bootsfaces/C.java b/src/main/java/net/bootsfaces/C.java index 8b898c21b..2be45a89d 100644 --- a/src/main/java/net/bootsfaces/C.java +++ b/src/main/java/net/bootsfaces/C.java @@ -40,7 +40,7 @@ public final class C { //Font Awesome //public static final String P_USEFONTAWESOME ="BootsFaces_USE_FA"; - public static final String FA_VERSION="4.5.0"; + public static final String FA_VERSION="4.6.1"; public static final String FONTAWESOME_CDN_URL="//maxcdn.bootstrapcdn.com/font-awesome/"+FA_VERSION+"/css/font-awesome.min.css"; //Meta tags From bfba0c3f69332d469f53a79c0110a2819c0e6f01 Mon Sep 17 00:00:00 2001 From: Philipp Gruhn Date: Wed, 27 Apr 2016 03:34:18 +0200 Subject: [PATCH 14/15] squash suspicious if statements --- .../net/bootsfaces/listeners/AddResourcesListener.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/bootsfaces/listeners/AddResourcesListener.java b/src/main/java/net/bootsfaces/listeners/AddResourcesListener.java index d723128f1..cdca7d964 100644 --- a/src/main/java/net/bootsfaces/listeners/AddResourcesListener.java +++ b/src/main/java/net/bootsfaces/listeners/AddResourcesListener.java @@ -255,10 +255,9 @@ private Map addMandatoryLibraries(UIViewRoot root, FacesContext for (Entry entry : resourceMap.entrySet()) { String file = entry.getValue(); String library = entry.getKey().substring(0, entry.getKey().length() - file.length() - 1); - //TODO combine if statements - if (!"jq/jquery.js".equals(file) || !"bsf".equals(library)) - if (!file.startsWith("jq/ui") || !"bsf".equals(library) || loadJQueryUI) - createAndAddComponent(root, context, SCRIPT_RENDERER, file, library); + if (!"jq/jquery.js".equals(file) || !"bsf".equals(library) || + !file.startsWith("jq/ui") || loadJQueryUI) + createAndAddComponent(root, context, SCRIPT_RENDERER, file, library); } viewMap.remove(RESOURCE_KEY); } From 44f5e7e330e83849d796dbbcc2287269c8cf6438 Mon Sep 17 00:00:00 2001 From: Philipp Gruhn Date: Thu, 28 Apr 2016 02:03:15 +0200 Subject: [PATCH 15/15] moved NavCommandLink to its own package to conform with the new TagDecorator --- .../component/{navLink => navCommandLink}/NavCommandLink.java | 4 ++-- .../net/bootsfaces/component/navLink/NavLinkRenderer.java | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) rename src/main/java/net/bootsfaces/component/{navLink => navCommandLink}/NavCommandLink.java (99%) diff --git a/src/main/java/net/bootsfaces/component/navLink/NavCommandLink.java b/src/main/java/net/bootsfaces/component/navCommandLink/NavCommandLink.java similarity index 99% rename from src/main/java/net/bootsfaces/component/navLink/NavCommandLink.java rename to src/main/java/net/bootsfaces/component/navCommandLink/NavCommandLink.java index 90dc463a8..1a30959ae 100644 --- a/src/main/java/net/bootsfaces/component/navLink/NavCommandLink.java +++ b/src/main/java/net/bootsfaces/component/navCommandLink/NavCommandLink.java @@ -17,7 +17,7 @@ * along with BootsFaces. If not, see . */ -package net.bootsfaces.component.navLink; +package net.bootsfaces.component.navCommandLink; import java.util.Arrays; import java.util.Collection; @@ -30,6 +30,7 @@ import javax.faces.component.behavior.ClientBehaviorHolder; import net.bootsfaces.component.ajax.IAJAXComponent; +import net.bootsfaces.component.navLink.AbstractNavLink; import net.bootsfaces.listeners.AddResourcesListener; import net.bootsfaces.render.Tooltip; import net.bootsfaces.utils.BsfUtils; @@ -38,7 +39,6 @@ @FacesComponent("net.bootsfaces.component.navCommandLink.NavCommandLink") public class NavCommandLink extends UICommand implements ClientBehaviorHolder, net.bootsfaces.render.IHasTooltip, IAJAXComponent, AbstractNavLink { - public static final String COMPONENT_TYPE = "net.bootsfaces.component.navCommandLink.NavCommandLink"; public static final String COMPONENT_FAMILY = "net.bootsfaces.component"; diff --git a/src/main/java/net/bootsfaces/component/navLink/NavLinkRenderer.java b/src/main/java/net/bootsfaces/component/navLink/NavLinkRenderer.java index 77be5ea15..7bffce55f 100644 --- a/src/main/java/net/bootsfaces/component/navLink/NavLinkRenderer.java +++ b/src/main/java/net/bootsfaces/component/navLink/NavLinkRenderer.java @@ -38,6 +38,7 @@ import net.bootsfaces.component.ajax.AJAXRenderer; import net.bootsfaces.component.icon.IconRenderer; import net.bootsfaces.component.navBarLinks.NavBarLinks; +import net.bootsfaces.component.navCommandLink.NavCommandLink; import net.bootsfaces.render.CoreRenderer; import net.bootsfaces.render.H; import net.bootsfaces.render.R;