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
}