2009-08-13 Maciej Stachowiak <mjs@apple.com>
authormjs@apple.com <mjs@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 19 Aug 2009 05:09:35 +0000 (05:09 +0000)
committermjs@apple.com <mjs@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 19 Aug 2009 05:09:35 +0000 (05:09 +0000)
        Reviewed by Sam Weinig.

        - Implement HTML5 nav element
        https://bugs.webkit.org/show_bug.cgi?id=27937

        <nav> should behave essentially the same as <div> for parsing
        etc. This is implemented by the changes below.

        Tests: fast/html/nav-element.html

        * css/html.css:
        * editing/htmlediting.cpp:
        (WebCore::validBlockTag):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::tagPriority):
        (WebCore::blockTagList):
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::getNode):
        * html/HTMLTagNames.in:

2009-08-13  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Sam Weinig.

        - Tests for: Implement HTML5 nav element
        https://bugs.webkit.org/show_bug.cgi?id=27937

        Test aspects of <nav>, including residual style, <p> closing, and FormatBlock.

        * fast/html/nav-element-expected.txt: Added.
        * fast/html/nav-element.html: Added.

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@47489 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/fast/html/nav-element-expected.txt [new file with mode: 0644]
LayoutTests/fast/html/nav-element.html [new file with mode: 0644]
WebCore/ChangeLog
WebCore/css/html.css
WebCore/editing/htmlediting.cpp
WebCore/html/HTMLElement.cpp
WebCore/html/HTMLParser.cpp
WebCore/html/HTMLTagNames.in

index aa271df7c1af7f3e168d4db4f90b23166c68b93e..51c414f891849d29fa72663e58d69650ce847cb4 100644 (file)
@@ -1,3 +1,15 @@
+2009-08-13  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Sam Weinig.
+
+        - Tests for: Implement HTML5 nav element
+        https://bugs.webkit.org/show_bug.cgi?id=27937
+
+        Test aspects of <nav>, including residual style, <p> closing, and FormatBlock.
+        
+        * fast/html/nav-element-expected.txt: Added.
+        * fast/html/nav-element.html: Added.
+
 2009-08-18  Oliver Hunt  <oliver@apple.com>
 
         Reviewed by NOBODY (Build fix).
diff --git a/LayoutTests/fast/html/nav-element-expected.txt b/LayoutTests/fast/html/nav-element-expected.txt
new file mode 100644 (file)
index 0000000..742d349
--- /dev/null
@@ -0,0 +1,28 @@
+Test content
+
+Test that nav closes p. This paragraph should be surrounded by a thin green border, instead of a thick red one. Also tests that nav lays out as a block. There should be only a single border box with width of the content area (minus margins).
+
+Test that p does not close nav. This paragraph should have a double green border.
+
+Test that nav can nest inside itself. This paragraph should have a double green border.
+
+Test of residual style. This text should be bold.
+This should be bold too.
+
+Test of FormatBlock behavior. This text should have a green border.
+
+DOM for the above (so this test can dump as text)
+
+
+<p></p><nav>Test that <code>nav</code> closes <code>p</code>. This paragraph should be surrounded by a thin green border, instead of a thick red one. Also tests that nav lays out as a block. There should be only a single border box with width of the content area (minus margins).</nav>
+<br>
+<nav><p>Test that <code>p</code> does not close <code>nav</code>. This paragraph should have a double green border.</p></nav>
+<br>
+<nav><nav>Test that <code>nav</code> can nest inside itself. This paragraph should have a double green border.</nav></nav>
+<br>
+<b><nav>Test of residual style. This text should be bold.</nav>This should be bold too.</b>
+
+<p><br></p>
+
+<div contenteditable="true" id="editable"><nav>Test of FormatBlock behavior. This text should have a green border.<br></nav></div>
+
diff --git a/LayoutTests/fast/html/nav-element.html b/LayoutTests/fast/html/nav-element.html
new file mode 100644 (file)
index 0000000..573e416
--- /dev/null
@@ -0,0 +1,64 @@
+<!doctype HTML>
+<html>
+<head>
+<title>Test of HTML5 nav element</title>
+
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+</script>
+
+<style>
+nav { border: 1px solid green; padding: 2px; }
+p > nav { border: 3px solid red; }
+nav > p { border: 1px solid green; }
+p { margin: 0px; }
+</style>
+
+</head>
+<body>
+
+<h4>Test content</h4>
+
+<div id=testArea>
+<p><nav>Test that <code>nav</code> closes <code>p</code>. This paragraph should be surrounded by a thin green border, instead of a thick red one. Also tests that nav lays out as a block. There should be only a single border box with width of the content area (minus margins).</nav>
+<br>
+<nav><p>Test that <code>p</code> does not close <code>nav</code>. This paragraph should have a double green border.</nav>
+<br>
+<nav><nav>Test that <code>nav</code> can nest inside itself. This paragraph should have a double green border.</nav></nav>
+<br>
+<b><nav>Test of residual style. This text should be bold.</nav>This should be bold too.</b>
+
+<p><br></p>
+
+<div contentEditable=true id=editable>
+Test of FormatBlock behavior. This text should have a green border.
+</div>
+</div>
+
+<br>
+
+<hr>
+
+<h4>DOM for the above (so this test can dump as text)</h4>
+<pre id=markupArea>
+</pre>
+
+
+<script>
+var ed = document.getElementById("editable");
+var selection = window.getSelection();
+selection.selectAllChildren(ed);
+document.execCommand("FormatBlock", false, "nav");
+selection.collapse();
+ed.blur();
+
+var tests = document.getElementById("testArea");
+var markup = document.getElementById("markupArea");
+var textNode = document.createTextNode(testArea.innerHTML);
+markup.appendChild(textNode);
+
+</script>
+
+</body>
+</html>
index c99cb653d2d97f8c7b2702a1f77aa379041779ac..beab23b5820a1e148b2ea978c0c27e8cb80192ae 100644 (file)
@@ -1,3 +1,25 @@
+2009-08-13  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Sam Weinig.
+
+        - Implement HTML5 nav element
+        https://bugs.webkit.org/show_bug.cgi?id=27937
+
+        <nav> should behave essentially the same as <div> for parsing
+        etc. This is implemented by the changes below.
+        
+        Tests: fast/html/nav-element.html
+
+        * css/html.css:
+        * editing/htmlediting.cpp:
+        (WebCore::validBlockTag):
+        * html/HTMLElement.cpp:
+        (WebCore::HTMLElement::tagPriority):
+        (WebCore::blockTagList):
+        * html/HTMLParser.cpp:
+        (WebCore::HTMLParser::getNode):
+        * html/HTMLTagNames.in:
+
 2009-08-18  Anders Carlsson  <andersca@apple.com>
 
         Reviewed by Adele Peterson, David Hyatt and Dan Bernstein.
index 3d0b667b4e4afa3cf2de5f87e28cdbafa000b1f8..14ca172960b2e326c0c357ab4a97e6d485db7970 100644 (file)
@@ -72,6 +72,10 @@ layer {
     display: block
 }
 
+nav {
+    display: block
+}
+
 marquee {
     display: inline-block;
     overflow: -webkit-marquee
index 4124c48a34beb625a70eb3c3f550445c830b81c1..da1b1fe669276f4d495919ffccff4f937280bb16 100644 (file)
@@ -461,6 +461,7 @@ bool isSpecialElement(const Node *n)
 // Checks if a string is a valid tag for the FormatBlockCommand function of execCommand. Expects lower case strings.
 bool validBlockTag(const String& blockTag)
 {
+    // FIXME: convert this to a HashSet
     if (blockTag == "address" ||
         blockTag == "blockquote" ||
         blockTag == "dd" ||
@@ -473,6 +474,7 @@ bool validBlockTag(const String& blockTag)
         blockTag == "h4" ||
         blockTag == "h5" ||
         blockTag == "h6" ||
+        blockTag == "nav" ||
         blockTag == "p" ||
         blockTag == "pre")
         return true;
index cd8698260674fbdf19248ed0124b9c6da574b5ea..c0409c8f0f85edd3c1788443d3571b8abfafb6b8 100644 (file)
@@ -92,7 +92,7 @@ int HTMLElement::tagPriority() const
         return 0;
     if (hasLocalName(addressTag) || hasLocalName(ddTag) || hasLocalName(dtTag) || hasLocalName(noscriptTag) || hasLocalName(rpTag) || hasLocalName(rtTag))
         return 3;
-    if (hasLocalName(centerTag) || hasLocalName(nobrTag) || hasLocalName(rubyTag))
+    if (hasLocalName(centerTag) || hasLocalName(nobrTag) || hasLocalName(rubyTag) || hasLocalName(navTag))
         return 5;
     if (hasLocalName(noembedTag) || hasLocalName(noframesTag))
         return 10;
@@ -882,6 +882,7 @@ static HashSet<AtomicStringImpl*>* blockTagList()
         tagList.add(listingTag.localName().impl());
         tagList.add(marqueeTag.localName().impl());
         tagList.add(menuTag.localName().impl());
+        tagList.add(navTag.localName().impl());
         tagList.add(noembedTag.localName().impl());
         tagList.add(noframesTag.localName().impl());
         tagList.add(nolayerTag.localName().impl());
index b12c09b6eff856ae2e11400cccc6f4bd0cf2b658..1cb47aeec535ce8bb12a02be6b5a3e8b48f6fc8b 100644 (file)
@@ -921,6 +921,7 @@ PassRefPtr<Node> HTMLParser::getNode(Token* t)
         gFunctionMap.set(listingTag.localName().impl(), &HTMLParser::pCloserCreateErrorCheck);
         gFunctionMap.set(mapTag.localName().impl(), &HTMLParser::mapCreateErrorCheck);
         gFunctionMap.set(menuTag.localName().impl(), &HTMLParser::pCloserCreateErrorCheck);
+        gFunctionMap.set(navTag.localName().impl(), &HTMLParser::pCloserCreateErrorCheck);
         gFunctionMap.set(nobrTag.localName().impl(), &HTMLParser::nestedCreateErrorCheck);
         gFunctionMap.set(noembedTag.localName().impl(), &HTMLParser::noembedCreateErrorCheck);
         gFunctionMap.set(noframesTag.localName().impl(), &HTMLParser::noframesCreateErrorCheck);
index 24683e6020c195d8f1aaab55ed517465b895be4d..34c99955d46004792573e9d793986c8d65fcf37f 100644 (file)
@@ -72,6 +72,7 @@ map createWithNew
 marquee createWithNew
 menu createWithNew
 meta createWithNew
+nav interfaceName=HTMLElement, createWithNew
 nobr interfaceName=HTMLElement, createWithNew
 noembed interfaceName=HTMLElement, createWithNew
 noframes interfaceName=HTMLElement, createWithNew