Пример #1
0
 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;
 }
Пример #2
0
        /// <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;
            });
        }