Make <head> display: none

This commit is contained in:
Patrick Walton 2012-05-24 16:38:30 -07:00
parent b281a508e0
commit 47f618bac2
7 changed files with 42 additions and 29 deletions

@ -1 +1 @@
Subproject commit c25b44e58500a684d2937cbdb41c76966ba2ac18 Subproject commit 4fc1f2a7f87c44dd87cb05815001dd4f09470231

@ -1 +1 @@
Subproject commit 43db075b2aac4c9b8623736b034479523cc2005d Subproject commit 5c0def8dadcde1d4bea1f532067f6505ac893a2c

@ -1 +1 @@
Subproject commit 1ba4722cd56771157c816ba1b0fc255ef6b5d503 Subproject commit 2b9cb42b5c855e2f6925be8ddbff4684c2b25312

View file

@ -26,7 +26,8 @@ class element {
enum element_subclass { enum element_subclass {
es_unknown, es_unknown,
es_div, es_div,
es_img(size<au>) es_img(size<au>),
es_head
} }
#[doc="The rd_aux data is a (weak) pointer to the layout data, which contains #[doc="The rd_aux data is a (weak) pointer to the layout data, which contains

View file

@ -73,6 +73,9 @@ impl methods for ctxt {
}; };
btree.add_child(anon_box, kid_box); btree.add_child(anon_box, kid_box);
} }
di_none {
// Nothing to do.
}
} }
} }
} }
@ -104,6 +107,9 @@ impl methods for ctxt {
di_inline { di_inline {
btree.add_child(self.parent_box, kid_box); btree.add_child(self.parent_box, kid_box);
} }
di_none {
// Nothing to do.
}
} }
} }
} }
@ -114,8 +120,9 @@ impl methods for ctxt {
self.parent_node.dump(); self.parent_node.dump();
alt self.parent_node.get_computed_style().display { alt self.parent_node.get_computed_style().display {
di_block { self.construct_boxes_for_block_children(); } di_block { self.construct_boxes_for_block_children(); }
di_inline { self.construct_boxes_for_inline_children(); } di_inline { self.construct_boxes_for_inline_children(); }
di_none { /* Nothing to do. */ }
} }
self.finish_anonymous_box_if_necessary(); self.finish_anonymous_box_if_necessary();

View file

@ -1,6 +1,7 @@
#[doc="High-level interface to CSS selector matching."] #[doc="High-level interface to CSS selector matching."]
import dom::base::{element, es_div, es_img, nk_element, nk_text, node}; import dom::base::{element, es_div, es_head, es_img, nk_element, nk_text};
import dom::base::{node};
import dom::base::node_kind; import dom::base::node_kind;
import dom::rcu::reader_methods; import dom::rcu::reader_methods;
import /*layout::*/base::*; // FIXME: resolve bug requires * import /*layout::*/base::*; // FIXME: resolve bug requires *
@ -11,7 +12,8 @@ enum computed_style = {
enum display { enum display {
di_block, di_block,
di_inline di_inline,
di_none
} }
#[doc="Returns the default style for the given node kind."] #[doc="Returns the default style for the given node kind."]
@ -23,6 +25,7 @@ fn default_style_for_node_kind(kind: node_kind) -> computed_style {
nk_element(element) { nk_element(element) {
alt *element.subclass { alt *element.subclass {
es_div { computed_style({ mut display: di_block }) } es_div { computed_style({ mut display: di_block }) }
es_head { computed_style({ mut display: di_none }) }
es_img(*) { computed_style({ mut display: di_inline }) } es_img(*) { computed_style({ mut display: di_inline }) }
es_unknown { computed_style({ mut display: di_inline }) } es_unknown { computed_style({ mut display: di_inline }) }
} }

View file

@ -1,8 +1,9 @@
#[doc="Constructs a DOM tree from an incoming token stream."] #[doc="Constructs a DOM tree from an incoming token stream."]
import dom::rcu::writer_methods; import dom::rcu::writer_methods;
import dom::base::{element, es_div, es_img, es_unknown, methods, nk_element}; import dom::base::{element, element_subclass, es_div, es_head, es_img};
import dom::base::{nk_text, rd_tree_ops, wr_tree_ops}; import dom::base::{es_unknown, methods, nk_element, nk_text, rd_tree_ops};
import dom::base::{wr_tree_ops};
import dom = dom::base; import dom = dom::base;
import parser = parser::html; import parser = parser::html;
import html::token; import html::token;
@ -29,8 +30,9 @@ fn link_up_attribute(scope: dom::node_scope, node: dom::node, key: str,
some(s) { dimensions.height = geom::px_to_au(s); } some(s) { dimensions.height = geom::px_to_au(s); }
} }
} }
es_div | es_img(*) | es_unknown { es_div | es_img(*) | es_head | es_unknown {
// Drop on the floor. // Drop on the floor.
// FIXME: Implement attributes in a generic way.
} }
} }
} }
@ -41,6 +43,20 @@ fn link_up_attribute(scope: dom::node_scope, node: dom::node, key: str,
} }
} }
fn build_element_subclass(tag_name: str) -> ~element_subclass {
alt tag_name {
"div" { ret ~es_div; }
"img" {
ret ~es_img({
mut width: geom::px_to_au(100),
mut height: geom::px_to_au(100)
});
}
"head" { ret ~es_head; }
_ { ret ~es_unknown; }
}
}
fn build_dom(scope: dom::node_scope, fn build_dom(scope: dom::node_scope,
stream: port<token>) -> dom::node { stream: port<token>) -> dom::node {
// The current reference node. // The current reference node.
@ -49,26 +65,12 @@ fn build_dom(scope: dom::node_scope,
let token = stream.recv(); let token = stream.recv();
alt token { alt token {
parser::to_eof { break; } parser::to_eof { break; }
parser::to_start_opening_tag("div") { parser::to_start_opening_tag(tag_name) {
#debug["DIV"]; #debug["starting tag %s", tag_name];
let element_subclass = build_element_subclass(tag_name);
let new_node = let new_node =
scope.new_node(dom::nk_element(element("div", ~es_div))); scope.new_node(dom::nk_element(element(tag_name,
scope.add_child(cur, new_node); element_subclass)));
cur = new_node;
}
parser::to_start_opening_tag("img") {
#debug["IMG"];
let new_node =
scope.new_node(dom::nk_element(element("img",
~es_img({mut width: geom::px_to_au(100),
mut height: geom::px_to_au(100)}))));
scope.add_child(cur, new_node);
cur = new_node;
}
parser::to_start_opening_tag(t) {
#debug["unknown element: %s", t];
let new_node =
scope.new_node(dom::nk_element(element(t, ~es_unknown)));
scope.add_child(cur, new_node); scope.add_child(cur, new_node);
cur = new_node; cur = new_node;
} }