Example usage for org.apache.wicket StyleAttributeModifier StyleAttributeModifier

List of usage examples for org.apache.wicket StyleAttributeModifier StyleAttributeModifier

Introduction

In this page you can find the example usage for org.apache.wicket StyleAttributeModifier StyleAttributeModifier.

Prototype

public StyleAttributeModifier() 

Source Link

Document

Constructor.

Usage

From source file:org.opensingular.form.wicket.feedback.SValidationFeedbackCompactPanel.java

License:Apache License

public SValidationFeedbackCompactPanel(String id, FeedbackFence fence) {
    super(id, fence);

    add($b.classAppender("singular-validation-feedback-compact-panel"));

    add(new Label("firstMessage", $m.get(this::firstMessageOrQuantity)));

    add(new StyleAttributeModifier() {
        @Override/*from   w  ww .jav a  2  s.  c o m*/
        protected Map<String, String> update(Map<String, String> oldStyles) {
            final Map<String, String> newStyles = new HashMap<>(oldStyles);
            if (getMessages().isEmpty()) {
                newStyles.put("display", "none");
            } else {
                newStyles.put("display", "block");
            }
            return newStyles;
        }
    });

    add(new Behavior() {

        @Override
        public void renderHead(Component component, IHeaderResponse response) {
            super.renderHead(component, response);
            SValidationFeedbackCompactPanel fp = (SValidationFeedbackCompactPanel) component;
            if (fp.anyMessage(ValidationErrorLevel.ERROR)) {
                response.render(OnDomReadyHeaderItem
                        .forScript(JQuery.$(fp) + ".closest('.can-have-error').addClass('has-error');"));
            } else if (fp.anyMessage(ValidationErrorLevel.WARNING)) {
                response.render(OnDomReadyHeaderItem
                        .forScript(JQuery.$(fp) + ".closest('.can-have-error').addClass('has-warning');"));
            } else {
                response.render(OnDomReadyHeaderItem.forScript(JQuery.$(fp)
                        + ".closest('.can-have-error').removeClass('has-error').removeClass('has-warning');"));
            }
            response.render(OnDomReadyHeaderItem.forScript(
                    "" + "var $this = " + JQuery.$(SValidationFeedbackCompactPanel.this) + ";" + "var $fence = "
                            + JQuery.$(fence.getMainContainer()) + ";" + "$fence.find(':input')"
                            + "  .on('focus', function(){ $this.addClass('singular-active'); })"
                            + "  .on('blur',  function(){ $this.removeClass('singular-active'); });"
            //                    + "$this"
            //                    + "  .on('mouseover', function(){ $this.addClass('singular-active'); })"
            //                    + "  .on('mouseout',  function(){ $this.removeClass('singular-active'); });"
                            + ""));

            List<IValidationError> messages = getMessages();
            if (!messages.isEmpty()) {
                String errors = messages.stream().map(IValidationError::getMessage)
                        .collect(joining("</li><li>", "<ul class='list-unstyled'><li>", "</li></ul>"));
                if (messages.size() > 1) {
                    response.render(OnDomReadyHeaderItem
                            .forScript("" + "(function(){" + "'use strict';" + "var $feedback = "
                                    + JQuery.$(component) + ";" + "var $formGroup = $feedback.parent();"
                                    + "var $input = $formGroup.find(':input:first');" + "$input"
                                    + "  .data('content', '" + JavaScriptUtils.javaScriptEscape(errors) + "')"
                                    + "  .popover({" + "    'html':true," + "    'placement':'bottom',"
                                    + "    'trigger':'manual'" + "  });" + "$formGroup" + "  .hover("
                                    + "    function(){ console.log($input); $input.popover('show'); },"
                                    + "    function(){ $input.popover('hide'); });" + "})();"));
                }
            }
        }
    });
}