public void resolveContent(HtmlElement element) { var content = element.getAttribute("data-content"); //Clean up any of our properties embedded in the DOM element.removeAttribute("data-content"); if (content == null) { //content = map.getExtensionValue("content"); } //load the content }
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(); } }
public ElementDescriptor describeElement(HtmlElement element ) { //This is purely an efficiency gain. By making a merged map for this one element, we stop everyone from cycling through //every class on an element to pull out their own piece of data var entry = styleExtensionManager.getMergedEntryForElement(element); var descriptor = new ElementDescriptor { context = element.getAttribute("data-context"), behavior = element.hasAttribute("data-mediator") ? element.getAttribute("data-mediator") : element.getAttribute("data-behavior"), fragment = element.getAttribute("data-fragment"), formatter = element.getAttribute( "data-formatter" ), validator = element.getAttribute( "data-validator" ) }; if ( entry != null ) { if (descriptor.context == null) { descriptor.context = entry.getExtensionClass("module"); } if (descriptor.behavior == null) { //mediator and behavior are really the same thing and hence mutually exclusive descriptor.behavior = entry.hasExtensionType("mediator")?entry.getExtensionClass("mediator"):entry.getExtensionClass("behavior"); } if (descriptor.fragment == null) { descriptor.fragment = entry.getExtensionClass("fragment"); } if (descriptor.formatter == null) { descriptor.formatter = entry.getExtensionClass("formatter"); } if (descriptor.validator == null) { descriptor.validator = entry.getExtensionClass("validator"); } } return descriptor; }
protected JsApiBase(HtmlElement element, dynamic options) { Element = element; dynamic dataset = Element.dataset; // load settings Settings settings = Settings.FromJson(options); #region build tracks array // get track data to parse dynamic tracksData; if (options != null && options.tracks) { tracksData = options.tracks; } else if (element != null && element.dataset != null && dataset["tracks"] != null) { tracksData = dataset["tracks"]; } else { tracksData = 0; } SetTracks(tracksData, false); #endregion string contents = ""; if (element != null) { // get load contents if (element.dataset != null && dataset["tex"] != null && element.innerText.As<JsBoolean>()) { contents = (element.innerHTML.As<string>()).Trim(); element.innerHTML = ""; } #region Create context elements (wrapper, canvas etc) CanvasElement = (HtmlElement)document.createElement("div"); CanvasElement.className = "alphaTabSurface"; CanvasElement.style.fontSize = "0"; element.appendChild(CanvasElement); #endregion #region Auto Sizing AutoSize = settings.Width < 0; if (AutoSize) { settings.Width = element.offsetWidth; if (options) { options.width = element.offsetWidth; } int timeoutId = 0; window.addEventListener("resize", e => { window.clearTimeout(timeoutId); timeoutId = window.setTimeout(() => { if (element.offsetWidth != settings.Width) { var resizeEventInfo = new ResizeEventArgs(); resizeEventInfo.OldWidth = settings.Width; resizeEventInfo.NewWidth = element.offsetWidth; resizeEventInfo.Settings = settings; TriggerEvent("resize", resizeEventInfo); settings.Width = resizeEventInfo.NewWidth; Renderer.UpdateSettings(settings); Renderer.Resize(element.offsetWidth); } }, 100); }); } #endregion } #region Renderer Setup CreateStyleElement(settings); if (element != null && AutoSize) { var initialResizeEventInfo = new ResizeEventArgs(); initialResizeEventInfo.OldWidth = 0; initialResizeEventInfo.NewWidth = element.offsetWidth; initialResizeEventInfo.Settings = settings; TriggerEvent("resize", initialResizeEventInfo); settings.Width = initialResizeEventInfo.NewWidth; } Renderer = CreateScoreRenderer(settings); Renderer.RenderFinished += o => TriggerEvent("rendered"); Renderer.PostRenderFinished += () => TriggerEvent("post-rendered"); Renderer.PreRender += result => { CanvasElement.innerHTML = ""; AppendRenderResult(result); }; Renderer.PartialRenderFinished += AppendRenderResult; Renderer.RenderFinished += AppendRenderResult; #endregion #region Load Default Data if (!string.IsNullOrEmpty(contents)) { Tex(contents); } else if (options && options.file) { Load(options.file); } else if (Element != null && Element.dataset != null && !string.IsNullOrEmpty(dataset["file"])) { Load(dataset["file"]); } else if (Element != null && !string.IsNullOrEmpty(Element.getAttribute("data-file"))) { Load(Element.getAttribute("data-file")); } #endregion }