private void investigateDomElement(HtmlElement element, InjectionClassBuilder classBuilder, AbstractBehavior parentBehavior) { var currentBehavior = parentBehavior; var id = element.getAttribute("id"); if (id != null) { //we have a reference to the element now, so remove the id so we dont have to deal with conflicts and clashes element.removeAttribute("id"); } var elementDescriptor = elementDescriptorFactory.describeElement( element ); if (elementDescriptor.context != null) { //change the class builder for everything under this point in the DOM classBuilder = domExtensionFactory.buildChildClassBuilder(classBuilder, element, elementDescriptor.context); } if (elementDescriptor.behavior != null) { //build a context for this behavior IF it turns out that this particular element defines one currentBehavior = domExtensionFactory.buildBehavior( classBuilder, element, elementDescriptor.behavior ); //we have a new behavior, this effectively causes us to use a new context for the nodes below it //Make sure we add ourselves to our parent though if (id != null && parentBehavior != null) { parentBehavior.injectPotentialNode(id, currentBehavior); } } else { if (id != null && currentBehavior != null) { currentBehavior.injectPotentialNode(id, jQueryContext.J(element)); } } if (elementDescriptor.fragment != null) { //build a context for this behavior IF it turns out that this particular element defines one domExtensionFactory.buildNewContent(element, elementDescriptor.fragment); } walkChildren(element, classBuilder, currentBehavior); //Now that we have figured out all of the items under this dom element, setup the behavior if (currentBehavior != null && currentBehavior != parentBehavior) { currentBehavior.verifyAndRegister(); } }