public InjectionClassBuilder buildChildClassBuilder(InjectionClassBuilder classBuilder, HtmlElement element, JsString contextClassName) { var module = (GuiceModule)classBuilder.buildClass(contextClassName); var injector = (ChildInjector)classBuilder.buildClass("guice.ChildInjector"); var guiceJs = new GuiceJs(); guiceJs.configureInjector(injector, module); //Setup a new InjectionClassBuilder return((InjectionClassBuilder)injector.getInstance(typeof(InjectionClassBuilder))); }
private void investigateDomElement(HtmlElement element, AbstractBehavior parentBehavior) { var currentBehavior = parentBehavior; var domWalker = this; 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, extensionsToBeApplied); if (elementDescriptor.context != null) { //change the class builder for everything under this point in the DOM classBuilder = domExtensionFactory.buildChildClassBuilder(classBuilder, element, elementDescriptor.context); //change the domWalker for everything under this point in the DOM domWalker = (DomWalker)classBuilder.buildClass("randori.dom.DomWalker"); } 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 (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); } domWalker.walkChildren(element, 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(); } }
public AbstractBehavior buildBehavior(InjectionClassBuilder classBuilder, HtmlElement element, JsString behaviorClassName) { AbstractBehavior behavior = null; var resolution = classResolver.resolveClassName(behaviorClassName); if (resolution.builtIn) { /** If we have a type which was not created via Randori, we send it out to get created. In this way * we dont worry about injection data and we allow for any crazy creation mechanism the client can * consider **/ behavior = externalBehaviorFactory.createExternalBehavior(element, behaviorClassName, resolution.type); } else { behavior = (AbstractBehavior)classBuilder.buildClass(behaviorClassName); behavior.provideDecoratedElement(element); } return(behavior); }