/// <summary>
        /// References a child element (use when adding any child).
        /// </summary>
        /// <param name="node">The node to be added.</param>
        internal override void ReferenceNode(Node node)
        {
            base.ReferenceNode(node);

            if (node is Element)
            {
                if (node is HTMLFormElement)
                {
                    var form = (HTMLFormElement)node;
                    _forms.Add(form);
                }
                else if (node is HTMLImageElement)
                {
                    var img = (HTMLImageElement)node;
                    _images.Add(img);
                }
                else if (node is HTMLScriptElement)
                {
                    var script = (HTMLScriptElement)node;
                    _scripts.Add(script);
                }
                else if (_body == null && node is HTMLBodyElement)
                {
                    _body = (HTMLBodyElement)node;
                }
                else if (_head == null && node is HTMLHeadElement)
                {
                    _head = (HTMLHeadElement)node;
                }
                else if (_title == null && node is HTMLTitleElement)
                {
                    _title = (HTMLTitleElement)node;
                }
            }
        }
        /// <summary>
        /// Dereferences a child element (use when removing any child).
        /// </summary>
        /// <param name="node">The node to be removed.</param>
        internal override void DereferenceNode(Node node)
        {
            base.DereferenceNode(node);

            if (node is Element)
            {
                if (node is HTMLFormElement)
                {
                    var form = (HTMLFormElement)node;
                    _forms.Remove(form);
                }
                else if (node is HTMLImageElement)
                {
                    var img = (HTMLImageElement)node;
                    _images.Remove(img);
                }
                else if (node is HTMLScriptElement)
                {
                    var script = (HTMLScriptElement)node;
                    _scripts.Remove(script);
                }
                else if (_body == node)
                {
                    _body = FindChild <HTMLBodyElement>(_documentElement);
                }
                else if (_head == node)
                {
                    _head = FindChild <HTMLHeadElement>(_documentElement);
                }
                else if (_title == node)
                {
                    _title = FindChild <HTMLTitleElement>(_head);
                }
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// References a child element (use when adding any child).
        /// </summary>
        /// <param name="node">The node to be added.</param>
        internal override void ReferenceNode(Node node)
        {
            base.ReferenceNode(node);

            if (node is Element)
            {
                if (node is HTMLFormElement)
                {
                    var form = (HTMLFormElement)node;
                    forms.Add(form);
                }
                else if (node is HTMLImageElement)
                {
                    var img = (HTMLImageElement)node;
                    images.Add(img);
                }
                else if (node is HTMLScriptElement)
                {
                    var script = (HTMLScriptElement)node;
                    scripts.Add(script);
                }
                else if (body == null && node is HTMLBodyElement)
                {
                    body = (HTMLBodyElement)node;
                }
                else if (head == null && node is HTMLHeadElement)
                {
                    head = (HTMLHeadElement)node;
                }
                else if (title == null && node is HTMLTitleElement)
                {
                    title = (HTMLTitleElement)node;
                }
            }
        }
Exemplo n.º 4
0
        /// <summary>
        /// Dereferences a child element (use when removing any child).
        /// </summary>
        /// <param name="node">The node to be removed.</param>
        internal override void DereferenceNode(Node node)
        {
            base.DereferenceNode(node);

            if (node is Element)
            {
                if (node is HTMLFormElement)
                {
                    var form = (HTMLFormElement)node;
                    forms.Remove(form);
                }
                else if (node is HTMLImageElement)
                {
                    var img = (HTMLImageElement)node;
                    images.Remove(img);
                }
                else if (node is HTMLScriptElement)
                {
                    var script = (HTMLScriptElement)node;
                    scripts.Remove(script);
                }
                else if (body == node)
                {
                    body = FindChild<HTMLBodyElement>(documentElement);
                }
                else if (head == node)
                {
                    head = FindChild<HTMLHeadElement>(documentElement);
                }
                else if (title == node)
                {
                    title = FindChild<HTMLTitleElement>(head);
                }
            }
        }
Exemplo n.º 5
0
 public void HtmlHasRightHeadElement()
 {
     var doc = new HTMLDocument();
     var root = new HTMLHtmlElement();
     doc.AppendChild(root);
     var head = new HTMLHeadElement();
     root.AppendChild(head);
     Assert.AreEqual(head, doc.Head);
 }
Exemplo n.º 6
0
        /// <summary>
        /// See 8.2.5.4.3 The "before head" insertion mode.
        /// </summary>
        /// <param name="token">The passed token.</param>
        void BeforeHead(HtmlToken token)
        {
            if (token.Type == HtmlTokenType.Comment)
            {
                AddComment(CurrentNode, token);
                return;
            }
            else if (token.Type == HtmlTokenType.DOCTYPE)
            {
                RaiseErrorOccurred(ErrorCode.DoctypeTagInappropriate);
                return;
            }
            else if (token.Type == HtmlTokenType.StartTag && ((HtmlTagToken)token).Name == HTMLHtmlElement.Tag)
            {
                InBody(token);
                return;
            }
            else if (token.Type == HtmlTokenType.StartTag && ((HtmlTagToken)token).Name == HTMLHeadElement.Tag)
            {
                var element = new HTMLHeadElement();
                AddElementToCurrentNode(element, token);
                insert = HtmlTreeMode.InHead;
                return;
            }
            else if (token.IsEndTagInv(HTMLHtmlElement.Tag, HTMLBodyElement.Tag, HTMLBRElement.Tag, HTMLHeadElement.Tag))
            {
                RaiseErrorOccurred(ErrorCode.TagCannotEndHere);
                return;
            }
            else if(token.Type == HtmlTokenType.Character)
            {
                var chars = (HtmlCharacterToken)token;
                chars.TrimStart();

                if (chars.IsEmpty)
                    return;
            }

            BeforeHead(HtmlToken.OpenTag(HTMLHeadElement.Tag));
            InHead(token);
        }
Exemplo n.º 7
0
 /// <summary>
 /// See 8.2.5.4.3 The "before head" insertion mode.
 /// </summary>
 /// <param name="token">The passed token.</param>
 void BeforeHead(HtmlToken token)
 {
     if (token.Type == HtmlTokenType.Comment)
     {
         AddComment(CurrentNode, token);
     }
     else if (token.Type == HtmlTokenType.DOCTYPE)
     {
         RaiseErrorOccurred(ErrorCode.DoctypeTagInappropriate);
     }
     else if (token.Type == HtmlTokenType.StartTag && ((HtmlTagToken)token).Name == HTMLHtmlElement.Tag)
     {
         InBody(token);
     }
     else if (token.Type == HtmlTokenType.StartTag && ((HtmlTagToken)token).Name == HTMLHeadElement.Tag)
     {
         var element = new HTMLHeadElement();
         AddElementToCurrentNode(element, token);
         insert = HtmlTreeMode.InHead;
     }
     else if (token.Type == HtmlTokenType.EndTag && !(((HtmlTagToken)token).Name.IsHtmlBodyOrBreakRowElement(true)))
     {
         RaiseErrorOccurred(ErrorCode.TagCannotEndHere);
     }
     else if(!token.IsIgnorable)
     {
         BeforeHead(HtmlToken.OpenTag(HTMLHeadElement.Tag));
         InHead(token);
     }
 }