diff --git a/src/main/java/com/trsvax/bootstrap/FrameworkVisitor.java b/src/main/java/com/trsvax/bootstrap/FrameworkVisitor.java deleted file mode 100644 index 1035253..0000000 --- a/src/main/java/com/trsvax/bootstrap/FrameworkVisitor.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.trsvax.bootstrap; - -import org.apache.tapestry5.MarkupWriter; -import org.apache.tapestry5.dom.Element; -import org.apache.tapestry5.dom.Visitor; - -public interface FrameworkVisitor { - - void beginRender(FrameworkMixin component, MarkupWriter writer); - void afterRender(FrameworkMixin component, MarkupWriter writer); - - void visit(Element element); - -} diff --git a/src/main/java/com/trsvax/bootstrap/mixins/FW.java b/src/main/java/com/trsvax/bootstrap/mixins/FW.java index 15d650e..227ddd4 100644 --- a/src/main/java/com/trsvax/bootstrap/mixins/FW.java +++ b/src/main/java/com/trsvax/bootstrap/mixins/FW.java @@ -18,7 +18,6 @@ import com.trsvax.bootstrap.FrameworkMixin; import com.trsvax.bootstrap.FrameworkProvider; -import com.trsvax.bootstrap.FrameworkVisitor; import com.trsvax.bootstrap.environment.FrameworkEnvironment; //@SupportsInformalParameters @@ -34,9 +33,9 @@ public class FW implements FrameworkMixin { @Parameter private Map fwargs; - @Inject - @Service("FrameworkVisitor") - private FrameworkVisitor vistor; + //@Inject + //@Service("FrameworkVisitor") + //private FrameworkVisitor vistor; @Inject private ComponentResources componentResources; diff --git a/src/main/java/com/trsvax/bootstrap/services/BootStrapValidationDecoratorFactoryImpl.java b/src/main/java/com/trsvax/bootstrap/services/BootStrapValidationDecoratorFactoryImpl.java index 04f30ad..00907cb 100644 --- a/src/main/java/com/trsvax/bootstrap/services/BootStrapValidationDecoratorFactoryImpl.java +++ b/src/main/java/com/trsvax/bootstrap/services/BootStrapValidationDecoratorFactoryImpl.java @@ -1,20 +1,28 @@ package com.trsvax.bootstrap.services; +import org.apache.tapestry5.Asset; import org.apache.tapestry5.MarkupWriter; import org.apache.tapestry5.ValidationDecorator; +import org.apache.tapestry5.annotations.Path; +import org.apache.tapestry5.internal.DefaultValidationDecorator; import org.apache.tapestry5.services.Environment; import org.apache.tapestry5.services.ValidationDecoratorFactory; -import org.slf4j.Logger; public class BootStrapValidationDecoratorFactoryImpl implements ValidationDecoratorFactory { private final Environment environment; + private final Asset spacerImage; - public BootStrapValidationDecoratorFactoryImpl(Environment environment) { + public BootStrapValidationDecoratorFactoryImpl(Environment environment, @Path("${tapestry.spacer-image}") + Asset spacerImage) { this.environment = environment; + this.spacerImage = spacerImage; } public ValidationDecorator newInstance(MarkupWriter writer) { - return new BootStrapValidationDecorator(writer,environment); + DefaultValidationDecorator decorator = new DefaultValidationDecorator(environment, spacerImage, writer); + //return new BootStrapValidationDecorator(writer,environment); + + return decorator; } } diff --git a/src/main/java/com/trsvax/bootstrap/services/BootstrapModule.java b/src/main/java/com/trsvax/bootstrap/services/BootstrapModule.java index 83525a9..081a7a1 100644 --- a/src/main/java/com/trsvax/bootstrap/services/BootstrapModule.java +++ b/src/main/java/com/trsvax/bootstrap/services/BootstrapModule.java @@ -38,7 +38,6 @@ import com.trsvax.bootstrap.BootstrapProvider; import com.trsvax.bootstrap.FrameworkProvider; -import com.trsvax.bootstrap.FrameworkVisitor; import com.trsvax.bootstrap.environment.AlertsEnvironment; import com.trsvax.bootstrap.environment.AlertsValues; import com.trsvax.bootstrap.environment.BeanDisplayEnvironment; @@ -59,8 +58,6 @@ import com.trsvax.bootstrap.environment.TableValues; import com.trsvax.bootstrap.services.bootstrapprovider.AlertsProvider; import com.trsvax.bootstrap.services.bootstrapprovider.BeanDisplayProvider; -import com.trsvax.bootstrap.services.bootstrapprovider.BootstrapFrameworkVisitor; -import com.trsvax.bootstrap.services.bootstrapprovider.BootstrapVisitor; import com.trsvax.bootstrap.services.bootstrapprovider.BreadcrumbProvider; import com.trsvax.bootstrap.services.bootstrapprovider.ButtonGroupProvider; import com.trsvax.bootstrap.services.bootstrapprovider.ButtonProvider; @@ -84,9 +81,8 @@ public static void bind(ServiceBinder binder) { binder.bind(BindingFactory.class,SessionBindingFactory.class).withId("SessionBindingFactory"); binder.bind(BindingFactory.class,EnvironmentBindingFactory.class).withId("EnvironmentBindingFactory"); binder.bind(StringTemplateParser.class,StringTemplateParserImpl.class); - binder.bind(ValidationDecoratorFactory.class,BootStrapValidationDecoratorFactoryImpl.class).withId("BootStrapValidation"); - binder.bind(FrameworkVisitor.class, BootstrapVisitor.class).withId(BootstrapVisitor.id); - binder.bind(FrameworkVisitor.class,BootstrapFrameworkVisitor.class).withId(BootstrapFrameworkVisitor.id); + //binder.bind(ValidationDecoratorFactory.class,BootStrapValidationDecoratorFactoryImpl.class).withId("BootStrapValidation"); + binder.bind(ExcludeVisitor.class,ExcludeVisitorImpl.class); binder.bind(EnvironmentSetup.class, EnvironmentSetupImpl.class); @@ -161,14 +157,6 @@ public BootstrapProvider build(List configuration, ChainBuild return chainBuilder.build(BootstrapProvider.class, configuration); } - /* - @Contribute(FrameworkProvider.class) - public static void provideFrameworks(MappedConfiguration configuration, - @Primary BootstrapProvider bootstrapProvider) { - //configuration.add("Bootstrap", bootstrapProvider); - - } - */ @Contribute(ComponentClassTransformWorker2.class) public static void provideWorkers(OrderedConfiguration workers) { @@ -196,7 +184,6 @@ public void contributeMarkupRenderer(OrderedConfiguration final Environment environment, final JavaScriptSupport javaScriptSupport, final ExcludeVisitor excludeVistior, - @InjectService(BootstrapVisitor.id) final FrameworkVisitor frameworkVisitor, @InjectService("FrameworkProvider") final FrameworkProvider frameworkProvider) { MarkupRendererFilter bootstrapFilter = new MarkupRendererFilter() { @@ -205,23 +192,7 @@ public void renderMarkup(MarkupWriter writer, MarkupRenderer renderer) { renderer.renderMarkup(writer); final FrameworkEnvironment values = environment.peek(FrameworkEnvironment.class); environmentSetup.pop(); - - frameworkProvider.renderMarkup(writer); - - /* - Element root = writer.getDocument().getRootElement(); - if ( root != null ) { - Element head = root.find("head"); - if ( head != null ) { - head.visit(excludeVistior.visit(values)); - } - Element body = root.find("body"); - if ( body != null) { - frameworkVisitor.visit(body); - } - } - */ - + frameworkProvider.renderMarkup(writer); } }; @@ -244,8 +215,7 @@ public void contributePartialMarkupRenderer(OrderedConfiguration configuration) - { + public static void contributeClasspathAssetAliasManager(MappedConfiguration configuration) { configuration.add("tap-bootstrap", "com/trsvax/bootstrap"); } - @Contribute(FrameworkVisitor.class) - public static void provideBootStrapVisitors(MappedConfiguration configuration, - @InjectService(BootstrapFrameworkVisitor.id) FrameworkVisitor fw) { - configuration.add(BootstrapFrameworkVisitor.id,fw); - } - - - + /* @Contribute(ServiceOverride.class) - public static void setupApplicationServiceOverrides(MappedConfiguration configuration, @Local ValidationDecoratorFactory override ) - { - + public static void setupApplicationServiceOverrides(MappedConfiguration configuration, @Local ValidationDecoratorFactory override ) { configuration.add(ValidationDecoratorFactory.class, override); } + */ @Contribute(BeanBlockSource.class) public static void provideDefaultBeanBlocks(Configuration configuration) { @@ -301,14 +263,11 @@ private static void addEditBlock(Configuration configurat configuration.add(new EditBlockContribution(dataType, "tb/AppPropertyEditBlocks", blockId)); } - private static void addDisplayBlock(Configuration configuration, String dataType) - { + private static void addDisplayBlock(Configuration configuration, String dataType) { addDisplayBlock(configuration, dataType, dataType); } - private static void addDisplayBlock(Configuration configuration, String dataType, - String blockId) - { + private static void addDisplayBlock(Configuration configuration, String dataType, String blockId) { configuration.add(new DisplayBlockContribution(dataType, "tb/AppPropertyDisplayBlocks", blockId)); } diff --git a/src/main/java/com/trsvax/bootstrap/services/bootstrapprovider/BootstrapFrameworkVisitor.java b/src/main/java/com/trsvax/bootstrap/services/bootstrapprovider/BootstrapFrameworkVisitor.java deleted file mode 100644 index f0c5a96..0000000 --- a/src/main/java/com/trsvax/bootstrap/services/bootstrapprovider/BootstrapFrameworkVisitor.java +++ /dev/null @@ -1,966 +0,0 @@ -package com.trsvax.bootstrap.services.bootstrapprovider; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Map.Entry; -import java.util.Set; - -import org.apache.tapestry5.Asset; -import org.apache.tapestry5.MarkupWriter; -import org.apache.tapestry5.dom.Element; -import org.apache.tapestry5.dom.Visitor; -import org.apache.tapestry5.ioc.Messages; -import org.apache.tapestry5.ioc.annotations.Symbol; -import org.apache.tapestry5.services.AssetSource; -import org.apache.tapestry5.services.Environment; -import org.apache.tapestry5.services.javascript.JavaScriptSupport; -import org.got5.tapestry5.jquery.JQuerySymbolConstants; -import org.slf4j.Logger; - -import com.trsvax.bootstrap.FrameworkMixin; -import com.trsvax.bootstrap.FrameworkVisitor; -import com.trsvax.bootstrap.environment.FrameworkEnvironment; - -public class BootstrapFrameworkVisitor implements FrameworkVisitor { - public final static String id = "fw"; - private final Logger logger; - private final Environment environment; - private final AssetSource assetSource; - private final String jQueryAlias; - private String ns = "fw"; - private String prefix = ns + "."; - - public BootstrapFrameworkVisitor(Logger logger, Environment environment, - AssetSource assetSource, @Symbol(JQuerySymbolConstants.JQUERY_ALIAS) String alias) { - this.logger = logger; - this.environment = environment; - this.assetSource = assetSource; - this.jQueryAlias = alias; - } - - public void beginRender(FrameworkMixin component, MarkupWriter writer) { - String simpleName = component.getComponentResources().getContainer().getClass().getSimpleName(); - logger.info("begin"); - Transform transform = getTransformer(simpleName); - if ( transform != null ) { - Element tag = writer.elementNS(ns, prefix + simpleName); - tag.attribute("type", component.getType()); - for ( Entry param : component.getParms().entrySet() ) { - if ( param.getValue() != null ) { - tag.attribute(param.getKey(),param.getValue().toString()); - } - } - transform.beginRender(component, writer); - } - } - - public void afterRender(FrameworkMixin component, MarkupWriter writer) { - String simpleName = component.getComponentResources().getContainer().getClass().getSimpleName(); - Transform transform = getTransformer(simpleName); - if ( transform != null ) { - logger.info("visit {}",simpleName); - transform.afterRender(component, writer); - addHelp(writer.getElement(), component.getComponentResources().getPage().getComponentResources().getMessages()); - writer.end(); - } - } - - public void visit(Element element) { - final Set pop = new HashSet(); - element.visit(new Visitor() { - public void visit(Element element) { - if ( ns.equals(element.getNamespace())) { - pop.add(element); - String name = element.getName().replace(prefix, ""); - Transform transform = getTransformer(name); - if ( transform != null ) { - - //logger.info("visit {}",element.getName()); - - transform.visit(element); - - } - } - } - }); - - for ( Element e : pop ) { - logger.info("pop {}",e.getName()); - e.pop(); - } - } - - interface Transform { - void beginRender(FrameworkMixin component, MarkupWriter writer); - void afterRender(FrameworkMixin component, MarkupWriter writer); - void visit(Element element); - } - - class BeanEditForm implements Transform { - Element root; - Element buttonContainer; - - public void beginRender(FrameworkMixin component, MarkupWriter writer) { - - } - - public void afterRender(FrameworkMixin component, MarkupWriter writer) { - } - - public void visit(Element element) { - this.root = element; - root.visit(beanEditForm()); - if ( buttonContainer != null && root.getAttribute("buttons") != null ) { - String[] buttons = root.getAttribute("buttons").split(","); - for ( String button : buttons ) { - Element buttonElement = root.getDocument().getElementById(button); - buttonElement.moveToBottom(buttonContainer); - } - - - } - } - - Visitor beanEditForm() { - return new Visitor() { - - public void visit(Element element) { - if (div(element) && hasClass("t-error", element)) { - element.forceAttributes("class", "alert alert-error"); - } - if (hasClass("t-beaneditor", element)) { - pop(element); - element.visit(beanEditForm()); - element.pop(); - } - if (hasClass("t-beaneditor-row", element)) { - element.forceAttributes("class", "control-group"); - } - if ( select(element)) { - element.wrap("div", "class", "control"); - } - if ( input(element)) { - - String type= element.getAttribute("type"); - String value = element.getAttribute("value") == null ? "" : element.getAttribute("value") ; - if ( type != null && type.equals("submit") && ! value.equals("Cancel") ) { - buttonContainer = element.getContainer(); - buttonContainer.forceAttributes("class","form-actions"); - element.addClassName("btn btn-primary"); - } else if ( value.equals("Cancel")) { - element.addClassName("btn"); - } else { - element.wrap("div", "class", "control"); - } - } - if ( label(element)) { - element.addClassName("control-label"); - } - if ( img(element)) { - element.remove(); - } - } - }; - } - - - } - - class Grid implements Transform { - Element root; - List poplist = new ArrayList(); - - public void beginRender(FrameworkMixin component, MarkupWriter writer) { - - } - - public void afterRender(FrameworkMixin component, MarkupWriter writer) { - } - - public void visit(Element element) { - this.root = element; - String framework = root.getAttribute("fw"); - if ( "tapestry".equals(framework)) { - return; - } - root.visit(grid()); - for ( Element e : poplist ) { - e.pop(); - } - GridPager gridPager = new GridPager(); - gridPager.visit(root); - } - - Visitor grid() { - return new Visitor() { - - public void visit(Element element) { - String className = root.getAttribute("type"); - if ( table(element)) { - if ( className != null ) { - element.addClassName(className); - } - } - if ( div(element) && hasClass("t-data-grid", element)) { - poplist.add(element); - } - if ( hasName("fw.PageLink", element) || hasName("fw.EventLink",element)) { - new Link().visit(element); - poplist.add(element); - } - if ( img(element) && hasClass("t-sort-icon", element) ) { - element.elementBefore("span").text("^"); - element.remove(); - } - - // Tapestry puts property names on cells - // add fw- to avoid css name conflicts - if ( hasClass(element) && (td(element) || th(element)) ) { - String[] classes = element.getAttribute("class").split(" "); - String newClass = ""; - for ( String s : classes ) { - newClass += " fw-" + s; - } - element.forceAttributes("class",newClass); - - } - } - }; - } - } - - class GridPager implements Transform { - Element root; - Element ul; - Element div; - - public void beginRender(FrameworkMixin component, MarkupWriter writer) { - - } - - public void afterRender(FrameworkMixin component, MarkupWriter writer) { - } - - public void visit(Element element) { - element.visit(new Visitor() { - - public void visit(Element element) { - if ( hasName("fw.gridpager", element)) { - root = element; - } - } - }); - if ( root != null ) { - root.visit(gridPager()); - if ( ul != null ) { - ul.moveToBottom(div); - } - //root.pop(); - } - } - - Visitor gridPager() { - return new Visitor() { - - public void visit(Element element) { - if ( hasClass("t-data-grid-pager", element)) { - div = element; - element.forceAttributes("class","pagination"); - ul = element.elementBefore("ul"); - } - if ( anchor(element) ) { - if ( ul != null ) { - Element li = element.wrap("li"); - - li.moveToBottom(ul); - } - } - if ( span(element)) { - if ( ul != null ) { - Element a = element.wrap("a","href","#"); - Element li = a.wrap("li"); - - li.moveToBottom(ul); - } - } - - - } - }; - } - - } - - class Nav implements Transform { - Element root; - List poplist = new ArrayList(); - - public void beginRender(FrameworkMixin component, MarkupWriter writer) { - //importJavaScript("/com/trsvax/bootstrap/pages/twitter/js/bootstrap-button.js"); - //importJavaScript("/com/trsvax/bootstrap/pages/twitter/js/bootstrap-dropdown.js"); - scriptOnce(String.format("%s('.makeHash').attr('href','#');",jQueryAlias)); - } - - public void afterRender(FrameworkMixin component, MarkupWriter writer) { - } - - public void visit(Element element) { - this.root = element; - root.visit(nav()); - for ( Element e : poplist ) { - e.pop(); - } - root.visit( new Visitor() { - - public void visit(Element element) { - if ( hasName("fw.PageLink", element)) { - element.pop(); - } - } - }); - } - - Visitor nav() { - //logger.info("nav"); - return new Visitor() { - - - Integer activeLink = 0; - Integer linkCounter = 1; - boolean tabbable = false; - Element ul; - - public void visit(Element element) { - if (hasName("fw.Nav", element)) { - String type = element.getAttribute("type"); - if ( type == null ) { - type = ""; - } - if ( type.contains("tabbable")) { - type = type.replace("tabbable", ""); - tabbable = true; - } - ul = element.wrap("ul", "class", "nav " + type); - if ( tabbable ) { - ul.wrap("div", "class","tabbable"); - } - - } - if ( hasName("fw.ComboButton",element)) { - element.wrap("li","class","dropdown"); - element.visit(comboButtonNav()); - element.pop(); - } - if (anchor(element)) { - if ( isActive(wrapLI(element))) { - activeLink = linkCounter; - } - linkCounter++; - - } - if ( hasName("fw.Content", element)) { - element.visit(tabContent(activeLink)); - Element div = element.wrap("div","class","tab-content"); - div.moveAfter(ul); - element.pop(); - - } - if ( hasName("fw.PageLink",element) || hasName("fw.EventLink", element)) { - //logger.info("pop {}",element.getName()); - poplist.add(element); - } - } - }; - } - - Visitor tabContent(final Integer activeLink) { - return new Visitor() { - Integer linkCounter = 1; - public void visit(Element element) { - if ( div(element)) { - element.addClassName("tab-pane"); - if ( linkCounter == activeLink ) { - element.addClassName("active"); - } - element.attribute("id", (linkCounter++).toString()); - } - - } - }; - } - - Visitor comboButtonNav() { - return new Visitor() { - boolean first = true; - public void visit(Element element) { - if ( hasName("fw.DropDown",element) ) { - element.wrap("ul","class","dropdown-menu"); - new Dropdown().visit(element); - element.pop(); - } - if ( first && anchor(element)) { - element.addClassName("dropdown-toggle makeHash"); - element.attribute("data-toggle", "dropdown"); - element.element("b", "class","caret"); - first = false; - } - - } - }; - } - } - - class ButtonGroup implements Transform { - Element root; - - public void beginRender(FrameworkMixin component, MarkupWriter writer) { - - } - - public void afterRender(FrameworkMixin component, MarkupWriter writer) { - } - - public void visit(Element element) { - this.root = element; - root.visit(buttonGroup()); - } - Visitor buttonGroup() { - return new Visitor() { - public void visit(Element element) { - if (hasName("fw.ButtonGroup", element)) { - element.wrap("div", "class", "btn-group"); - } - if (anchor(element)) { - element.addClassName("btn"); - } - } - }; - } - } - - class ComboButton implements Transform { - Element root; - - public void beginRender(FrameworkMixin component, MarkupWriter writer) { - //importJavaScript("/com/trsvax/bootstrap/pages/twitter/js/bootstrap-button.js"); - //importJavaScript("/com/trsvax/bootstrap/pages/twitter/js/bootstrap-dropdown.js"); - } - - public void afterRender(FrameworkMixin component, MarkupWriter writer) { - } - - public void visit(Element element) { - this.root = element; - root.visit(comboButton()); - } - - Visitor comboButton() { - return new Visitor() { - boolean first = true; - public void visit(Element element) { - if ( hasName("fw.ComboButton",element) ) { - Element div = element.wrap("div", "class","btn-group"); - pop(element); - div.visit(comboButton()); - - } - if ( hasName("fw.DropDown",element) ) { - Element ul = element.wrap("ul","class","dropdown-menu"); - Element caret = ul.elementBefore("a", "class","btn dropdown-toggle","data-toggle","dropdown","href","#"); - caret.element("span", "class","caret"); - new Dropdown().visit(element); - element.pop(); - } - if ( first && anchor(element)) { - element.addClassName("btn"); - first = false; - } - } - }; - } - } - - class NavBar implements Transform { - Element root; - public void beginRender(FrameworkMixin component, MarkupWriter writer) { - //importJavaScript("/com/trsvax/bootstrap/pages/twitter/js.js"); - //importJavaScript("/com/trsvax/bootstrap/pages/twitter/js/bootstrap-dropdown.js"); - //importJavaScript("/com/trsvax/bootstrap/pages/twitter/js/bootstrap-scrollspy.js"); - } - - public void afterRender(FrameworkMixin component, MarkupWriter writer) { - } - - public void visit(Element element) { - this.root = element; - root.visit(navBar()); - } - - Visitor navBar() { - return new Visitor() { - - public void visit(Element element) { - if ( hasName("fw.NavBar", element)) { - String projectName = element.getAttribute("ProjectName"); - String type = element.getAttribute("type"); - element.wrap("div", "class","container").wrap("div","class","navbar-inner").wrap("div","class","navbar " + type); - if ( projectName != null ) { - element.elementBefore("a", "class","brand","href","#").text(projectName); - } - } - if ( hasName("fw.Nav",element)) { - new Nav().visit(element); - element.pop(); - } - if ( form(element)) { - element.addClassName("navbar-search"); - } - if ( input(element)) { - element.addClassName("search-query"); - } - } - }; - } - } - - class Breadcrumb implements Transform { - Element root; - Element lastLi = null; - - public void beginRender(FrameworkMixin component, MarkupWriter writer) { - - } - - public void afterRender(FrameworkMixin component, MarkupWriter writer) { - } - - public void visit(Element element) { - this.root = element; - root.wrap("ul", "class","breadcrumb"); - root.visit(breadCrumb()); - if ( lastLi != null ) { - lastLi.addClassName("active"); - } - } - - Visitor breadCrumb() { - return new Visitor() { - - public void visit(Element element) { - if ( anchor(element) ) { - Element li = element.wrap("li"); - if ( lastLi != null ) { - lastLi.element("span", "class","divider").text("/"); - } - lastLi = li; - } - } - }; - } - } - - - class Dropdown implements Transform { - Element root; - public void beginRender(FrameworkMixin component, MarkupWriter writer) { - //importJavaScript("/com/trsvax/bootstrap/pages/twitter/js/bootstrap-button.js"); - //importJavaScript("/com/trsvax/bootstrap/pages/twitter/js/bootstrap-dropdown.js"); - } - - public void afterRender(FrameworkMixin component, MarkupWriter writer) { - } - - public void visit(Element element) { - this.root = element; - root.visit(dropdown()); - root.visit( new Visitor() { - - public void visit(Element element) { - if ( hasName("fw.PageLink", element)) { - element.pop(); - } - } - }); - } - - Visitor dropdown() { - return new Visitor() { - - public void visit(Element element) { - if ( anchor(element)) { - wrapLI(element); - } - } - }; - } - } - - class Thumbnails implements Transform { - Element root; - public void beginRender(FrameworkMixin component, MarkupWriter writer) { - } - - - public void afterRender(FrameworkMixin component, MarkupWriter writer) { - } - - public void visit(Element element) { - root = element; - wrap(root,"ul").addClassName("thumbnails"); - root.visit(thumbnails()); - } - - Visitor thumbnails() { - return new Visitor() { - - public void visit(Element element) { - if ( img(element) || hasName("fw.Thumbnail",element)) { - String span = element.getAttribute("span"); - String id = element.getAttribute("id"); - if ( span != null ) { - element.wrap("a","href","#","class","thumbnail") - .wrap("li","class","span" + span,"id",id); - } - } - if ( hasName("fw.Thumbnail",element)) { - element.pop(); - } - } - }; - } - } - - class Thumbnail implements Transform { - - public void beginRender(FrameworkMixin component, MarkupWriter writer) { - } - - public void afterRender(FrameworkMixin component, MarkupWriter writer) { - } - - public void visit(Element element) { - } - - } - - class Content implements Transform { - - public void visit(Element element) { - } - - public void beginRender(FrameworkMixin component, MarkupWriter writer) { - } - - public void afterRender(FrameworkMixin component, MarkupWriter writer) { - } - - } - - class Link implements Transform { - Element root; - - public void beginRender(FrameworkMixin component, MarkupWriter writer) { - - } - - public void afterRender(FrameworkMixin component, MarkupWriter writer) { - root = writer.getElement(); - root.visit( new Visitor() { - public void visit(Element element) { - logger.info("link {}",element.getName()); - if ( anchor(element) ) { - String type = root.getAttribute("type"); - if ( type != null ) { - element.addClassName(getClassForType(type)); - } - } - - } - }); - } - - public void visit(Element element) { - - } - } - - class LinkSubmit implements Transform { - Element root; - - public void beginRender(FrameworkMixin component, MarkupWriter writer) { - - } - - public void afterRender(FrameworkMixin component, MarkupWriter writer) { - root = writer.getElement(); - root.visit( new Visitor() { - public void visit(Element element) { - logger.info("link {}",element.getName()); - if ( span(element) ) { - String type = root.getAttribute("type"); - if ( type != null ) { - element.addClassName(getClassForType(type)); - } - } - - } - }); - } - - public void visit(Element element) { - - } - } - - class Submit implements Transform { - Element root; - - public void beginRender(FrameworkMixin component, MarkupWriter writer) { - - } - - public void afterRender(FrameworkMixin component, MarkupWriter writer) { - root = writer.getElement(); - root.visit( new Visitor() { - public void visit(Element element) { - logger.info("link {}",element.getName()); - if ( input(element) ) { - String type = root.getAttribute("type"); - if ( type != null ) { - element.addClassName(getClassForType(type)); - } - } - - } - }); - } - - public void visit(Element element) { - - } - } - - class Any implements Transform { - Element root; - - public void visit(Element element) { - } - - public void beginRender(FrameworkMixin component, MarkupWriter writer) { - } - - public void afterRender(FrameworkMixin component, MarkupWriter writer) { - root = writer.getElement(); - root.visit( new Visitor() { - public void visit(Element element) { - if ( !hasName("fw.any", element) ) { - String type = root.getAttribute("type"); - if ( type != null ) { - element.addClassName(getClassForType(type)); - } - } - - } - }); - } - - } - - String getClassForType(String type) { - if ( type.startsWith("btn-")) { - boolean hasButton = false; - String[] types = type.split(" "); - for ( String t : types ) { - if ( t.equals("btn")) { - hasButton = true; - } - } - if ( ! hasButton ) { - type = "btn " + type; - } - - } - return type; - } - - - Transform getTransformer(String name) { - Transform transform = null; - - if ( "BeanEditForm".equals(name) ) { - transform = new BeanEditForm(); - } else if ("Grid".equals(name)) { - transform = new Grid(); - } else if ("EventLink".equals(name) || "PageLink".equals(name) || "ActionLink".equals(name) ) { - transform = new Link(); - } else if ("LinkSubmit".equals(name)) { - transform = new LinkSubmit(); - } else if ("Submit".equals(name)) { - transform = new Submit(); - } else if ("Nav".equals(name)) { - transform = new Nav(); - } else if ("ButtonGroup".equals(name)) { - transform = new ButtonGroup(); - } else if ( "ComboButton".equals(name)) { - transform = new ComboButton(); - } else if ( "NavBar".equals(name)) { - transform = new NavBar(); - } else if ( "Breadcrumb".equals(name)) { - transform = new Breadcrumb(); - } else if ( "DropDown".equals(name)) { - transform = new Dropdown(); - } else if ("Content".equals(name)) { - transform = new Content(); - } else if ("Thumbnails".equals(name)) { - transform = new Thumbnails(); - } else if ("Thumbnail".equals(name)) { - transform = new Thumbnail(); - } else if ( "GridPager".equals(name)) { - transform = new GridPager(); - } else if ( "Any".equals(name)) { - transform = new Any(); - } - - return transform; - - } - - - - - boolean span(Element element) { - return hasName("span", element); - } - boolean anchor(Element element) { - return hasName("a", element); - } - boolean input(Element element) { - return hasName("input", element); - } - boolean select(Element element) { - return hasName("select", element); - } - boolean label(Element element) { - return hasName("label", element); - } - boolean img(Element element) { - return hasName("img", element); - } - boolean table(Element element) { - return hasName("table", element); - } - boolean div(Element element) { - return hasName("div", element); - } - boolean form(Element element) { - return hasName("form", element); - } - boolean th(Element element) { - return hasName("th", element); - } - boolean td(Element element) { - return hasName("td", element); - } - - boolean hasName(String name, Element element) { - if ( isPopped(element) ) { - return false; - } - if (element.getName().toLowerCase().equals(name.toLowerCase())) { - return true; - } - return false; - } - - boolean hasClass(Element element) { - return element.getAttribute("class") != null; - } - - boolean hasClass(String className, Element element) { - if ( isPopped(element) ) { - return false; - } - String c = element.getAttribute("class"); - if (c == null || className == null || c.length() == 0 - || className.length() == 0) { - return false; - } - String[] classes = c.split(" "); - for (String s : classes) { - if (className.equals(s)) { - return true; - } - } - return false; - } - - void pop(Element element) { - element.attribute("popped", "true"); - } - - boolean isPopped(Element element) { - String pop = element.getAttribute("popped"); - if ( pop == null ) { - return false; - } - if ( pop.equals("true")) { - return true; - } - return false; - } - - boolean isActive(Element element) { - String active = element.getAttribute("active"); - if (active != null && active.equals("true")) { - return true; - } - return hasClass("active", element); - } - - Element wrapLI(Element element) { - Element li = element.wrap("li"); - if ( isActive(element)) { - li.addClassName("class", "active"); - } - return li; - } - - Element wrap(Element root, String elementName) { - Element element = root.wrap(elementName); - if ( hasClass(root)) { - element.addClassName(root.getAttribute("class")); - } - String id = root.getAttribute("id"); - if ( id != null ) { - element.forceAttributes("id",id); - } - return element; - } - - void addHelp(Element element, final Messages messages) { - element.visit( new Visitor() { - public void visit(Element element) { - if (element.getName().equals("input")) { - String name = element.getAttribute("name"); - if (name != null && messages.contains(name + "-help")) { - String help = messages.get(name + "-help"); - element.element("div", "class", "help-block").text(help); - } - } - } - }); - } - - void importJavaScript(String lib) { - JavaScriptSupport javaScriptSupport = environment.peek(JavaScriptSupport.class); - Asset asset = assetSource.getClasspathAsset(lib); - javaScriptSupport.importJavaScriptLibrary(asset); - } - - void scriptOnce(String script) { - FrameworkEnvironment excludeEnvironment = environment.peek(FrameworkEnvironment.class); - excludeEnvironment.addScriptOnce(script); - } - -} diff --git a/src/main/java/com/trsvax/bootstrap/services/bootstrapprovider/BootstrapVisitor.java b/src/main/java/com/trsvax/bootstrap/services/bootstrapprovider/BootstrapVisitor.java deleted file mode 100644 index bb7d58b..0000000 --- a/src/main/java/com/trsvax/bootstrap/services/bootstrapprovider/BootstrapVisitor.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.trsvax.bootstrap.services.bootstrapprovider; - -import java.util.Map; - -import org.apache.tapestry5.MarkupWriter; -import org.apache.tapestry5.dom.Element; -import org.apache.tapestry5.dom.Visitor; -import org.slf4j.Logger; - -import com.trsvax.bootstrap.FrameworkMixin; -import com.trsvax.bootstrap.FrameworkVisitor; - - -public class BootstrapVisitor implements FrameworkVisitor { - public static final String id = "FrameworkVisitor"; - private final Logger logger; - private final Map visitors; - private final String namespace = "fw"; - - public BootstrapVisitor(Logger logger, Map configuration) { - this.logger = logger; - this.visitors = configuration; - } - - public void visit(Element element) { - /* - element.visit(new Visitor() { - public void visit(Element element) { - if ( isNameSpace(element,namespace)) { - logger.info("element {}",element.getName()); - FrameworkVisitor visitor = getVisitor(element.getName()); - visitor.visit(element); - } - } - }); - */ - } - - - public void beginRender(FrameworkMixin component, MarkupWriter writer) { - getVisitor(namespace + "." + component.getClass().getSimpleName()).beginRender(component, writer); - } - - public void afterRender(FrameworkMixin component,MarkupWriter writer) { - getVisitor(namespace + "." + component.getClass().getSimpleName()).afterRender(component, writer); - } - - FrameworkVisitor getVisitor(String name) { - FrameworkVisitor visitor = visitors.get("fw"); - if ( visitor == null ) { - throw new RuntimeException(String.format("ns: (%s) name: (%s)", namespace, name)); - } - return visitor; - } - - public String getID() { - return id; - } - - boolean isNameSpace(Element element, String namespace) { - if ( element.getNamespace() == null ) { - return false; - } - if ( element.getNamespace().equals(namespace) ) { - return true; - } - return false; - } - -} diff --git a/src/main/java/com/trsvax/bootstrap/services/bootstrapprovider/FormProvider.java b/src/main/java/com/trsvax/bootstrap/services/bootstrapprovider/FormProvider.java index 9249e4d..687b73f 100644 --- a/src/main/java/com/trsvax/bootstrap/services/bootstrapprovider/FormProvider.java +++ b/src/main/java/com/trsvax/bootstrap/services/bootstrapprovider/FormProvider.java @@ -4,6 +4,7 @@ import java.util.Set; import org.apache.tapestry5.MarkupWriter; +import org.apache.tapestry5.ValidationDecorator; import org.apache.tapestry5.corelib.components.BeanEditForm; import org.apache.tapestry5.corelib.components.BeanEditor; import org.apache.tapestry5.dom.Element; @@ -15,6 +16,7 @@ import com.trsvax.bootstrap.BootstrapProvider; import com.trsvax.bootstrap.FrameworkMixin; import com.trsvax.bootstrap.environment.FormEnvironment; +import com.trsvax.bootstrap.services.BootStrapValidationDecorator; public class FormProvider extends AbstractFrameworkProvider implements BootstrapProvider { private final Class[] handles = {BeanEditForm.class,BeanEditor.class}; @@ -37,6 +39,15 @@ boolean handle(FrameworkMixin mixin) { return false; } + + @Override + public boolean setupRender(FrameworkMixin mixin, MarkupWriter writer) { + if ( ! handle(mixin)) { + return false; + } + environment.push(ValidationDecorator.class, new BootStrapValidationDecorator(writer, environment)); + return true; + } public boolean cleanupRender(FrameworkMixin mixin, MarkupWriter writer) { @@ -57,6 +68,7 @@ public boolean cleanupRender(FrameworkMixin mixin, MarkupWriter writer) { for ( Element element : pop ) { element.pop(); } + environment.pop(ValidationDecorator.class); return true; } @@ -135,6 +147,7 @@ private void markErrors(Element element) { if (hasClass("error", element)){ controls.getContainer().addClassName("error"); Element helpInline = controls.getContainer().getElementByAttributeValue("class", "help-inline"); + helpInline.addClassName("error"); if (helpInline != null){ helpInline.moveAfter(element); } @@ -159,4 +172,6 @@ public String message(FrameworkMixin mixin, String key) { } + + } diff --git a/src/main/java/com/trsvax/bootstrap/services/bootstrapprovider/TableProvider.java b/src/main/java/com/trsvax/bootstrap/services/bootstrapprovider/TableProvider.java index 442e2fd..33dfc2c 100644 --- a/src/main/java/com/trsvax/bootstrap/services/bootstrapprovider/TableProvider.java +++ b/src/main/java/com/trsvax/bootstrap/services/bootstrapprovider/TableProvider.java @@ -7,8 +7,6 @@ import org.apache.tapestry5.corelib.components.Grid; import org.apache.tapestry5.dom.Element; import org.apache.tapestry5.dom.Visitor; -import org.apache.tapestry5.ioc.Resource; -import org.apache.tapestry5.services.AssetFactory; import org.apache.tapestry5.services.AssetSource; import org.apache.tapestry5.services.Environment; import org.slf4j.Logger; @@ -19,7 +17,6 @@ import com.trsvax.bootstrap.environment.GridPagerEnvironment; import com.trsvax.bootstrap.environment.GridPagerValues; import com.trsvax.bootstrap.environment.TableEnvironment; -import com.trsvax.bootstrap.services.bootstrapprovider.BootstrapFrameworkVisitor.GridPager; public class TableProvider extends AbstractFrameworkProvider implements BootstrapProvider { private final Class[] handles = {Grid.class}; diff --git a/src/test/java/com/trsvax/bootstrap/services/AppModule.java b/src/test/java/com/trsvax/bootstrap/services/AppModule.java index 1175a2c..2f549c0 100644 --- a/src/test/java/com/trsvax/bootstrap/services/AppModule.java +++ b/src/test/java/com/trsvax/bootstrap/services/AppModule.java @@ -10,7 +10,7 @@ public class AppModule { public static void contributeApplicationDefaults( MappedConfiguration configuration) { - //configuration.add(JQuerySymbolConstants.SUPPRESS_PROTOTYPE, "false"); + configuration.add(JQuerySymbolConstants.SUPPRESS_PROTOTYPE, "false"); }