public DocumentHolder(HtmlDocument document, DocumentScripting scripting, DocumentStyling styling, Action <HtmlFormElement, Dom.Elements.HtmlElement> onFormSubmit) { Document = document; _onFormSubmit = onFormSubmit; Scripting = scripting; Styling = styling; Document.OnFormSubmit += onFormSubmit; }
/// <summary> /// /// </summary> /// <param name="engine"></param> /// <param name="action">Dispose action</param> /// <returns></returns> public static Action SubscribeTimeLine(this Engine engine, Action <TimePoint> action) { var requestHandler = (Action <Request>)(s => action(new TimePoint { DateTime = DateTime.Now, EventType = TimeLineEvents.Request, ResourceId = s.Url.ToString() })); var receivedHandler = (Action <ReceivedEventArguments>)(s => action(new TimePoint { DateTime = DateTime.Now, EventType = TimeLineEvents.Received, ResourceId = s.Request.Url.ToString() })); var beforeScriptExecute = (Action <Script>)(s => { var scriptName = GetScriptName(s); action(new TimePoint { DateTime = DateTime.Now, EventType = TimeLineEvents.Executing, ResourceId = scriptName }); }); var afterScriptExecute = (Action <Script>)(s => { var scriptName = GetScriptName(s); action(new TimePoint { DateTime = DateTime.Now, EventType = TimeLineEvents.Executed, ResourceId = scriptName }); }); var scriptError = (Action <Script, Exception>)((s, r) => { var scriptName = GetScriptName(s); action(new TimePoint { DateTime = DateTime.Now, EventType = TimeLineEvents.ExecutionFailed, ResourceId = scriptName }); }); DocumentScripting curScripting = null; var documentChanged = (Action)(() => { if (curScripting != null) { curScripting.BeforeScriptExecute -= beforeScriptExecute; curScripting.AfterScriptExecute -= afterScriptExecute; curScripting.ScriptExecutionError -= scriptError; } curScripting = engine.Scripting; //todo: bugs possible when document changed quickly curScripting.BeforeScriptExecute += beforeScriptExecute; curScripting.AfterScriptExecute += afterScriptExecute; curScripting.ScriptExecutionError += scriptError; }); var timerExecuting = (Action)(() => { action(new TimePoint { DateTime = DateTime.Now, EventType = TimeLineEvents.Executing, ResourceId = "[Timer]" }); }); var timerExecuted = (Action)(() => { action(new TimePoint { DateTime = DateTime.Now, EventType = TimeLineEvents.Executed, ResourceId = "[Timer]" }); }); var timerFailed = (Action <Exception>)(_ => { action(new TimePoint { DateTime = DateTime.Now, EventType = TimeLineEvents.ExecutionFailed, ResourceId = "[Timer]" }); }); engine.OnRequest += requestHandler; engine.OnResponse += receivedHandler; curScripting = engine.Scripting; engine.DocumentChanged += documentChanged; engine.Window.Timers.OnExecuting += timerExecuting; engine.Window.Timers.OnExecuted += timerExecuted; engine.Window.Timers.OnException += timerFailed; return(() => { engine.OnRequest -= requestHandler; engine.OnResponse -= receivedHandler; engine.DocumentChanged -= documentChanged; engine.Window.Timers.OnExecuting -= timerExecuting; engine.Window.Timers.OnExecuted -= timerExecuted; engine.Window.Timers.OnException -= timerFailed; }); }