aboutsummaryrefslogtreecommitdiffstats
path: root/components/layout/query.rs
diff options
context:
space:
mode:
authorPyfisch <pyfisch@gmail.com>2018-02-15 11:18:55 +0100
committerPyfisch <pyfisch@gmail.com>2018-02-24 10:56:11 +0100
commit23fcd3a850d15a44498eb834184c92d9a9c6ea24 (patch)
tree276ff70cdd0b4fe8cc29b0eda1b04556a5a1b5d9 /components/layout/query.rs
parentbc87b41db34ad62083ac295d67e3b009bab5b14f (diff)
downloadservo-23fcd3a850d15a44498eb834184c92d9a9c6ea24.tar.gz
servo-23fcd3a850d15a44498eb834184c92d9a9c6ea24.zip
Rebase and fix innerText
Diffstat (limited to 'components/layout/query.rs')
-rw-r--r--components/layout/query.rs28
1 files changed, 6 insertions, 22 deletions
diff --git a/components/layout/query.rs b/components/layout/query.rs
index e8a40c3012c..025953b374e 100644
--- a/components/layout/query.rs
+++ b/components/layout/query.rs
@@ -11,7 +11,7 @@ use display_list::IndexableText;
use euclid::{Point2D, Vector2D, Rect, Size2D};
use flow::{Flow, GetBaseFlow};
use fragment::{Fragment, FragmentBorderBoxIterator, SpecificFragmentInfo};
-use gfx::display_list::{DisplayItem, DisplayList, OpaqueNode, ScrollOffsetMap};
+use gfx::display_list::{DisplayList, OpaqueNode, ScrollOffsetMap};
use inline::InlineFragmentNodeFlags;
use ipc_channel::ipc::IpcSender;
use msg::constellation_msg::PipelineId;
@@ -27,7 +27,6 @@ use script_traits::LayoutMsg as ConstellationMsg;
use script_traits::UntrustedNodeAddress;
use sequential;
use std::cmp::{min, max};
-use std::collections::HashMap;
use std::ops::Deref;
use std::sync::{Arc, Mutex};
use style::computed_values::display::T as Display;
@@ -888,16 +887,11 @@ enum InnerTextItem {
// https://html.spec.whatwg.org/multipage/#the-innertext-idl-attribute
pub fn process_element_inner_text_query<N: LayoutNode>(node: N,
- display_list: &Option<Arc<DisplayList>>) -> String {
- if !display_list.is_some() {
- warn!("We should have a display list at this point. Cannot get inner text");
- return String::new();
- }
-
+ indexable_text: &IndexableText) -> String {
// Step 1.
let mut results = Vec::new();
// Step 2.
- inner_text_collection_steps(node, display_list.as_ref().unwrap(), &mut results);
+ inner_text_collection_steps(node, indexable_text, &mut results);
let mut max_req_line_break_count = 0;
let mut inner_text = Vec::new();
for item in results {
@@ -936,18 +930,8 @@ pub fn process_element_inner_text_query<N: LayoutNode>(node: N,
// https://html.spec.whatwg.org/multipage/#inner-text-collection-steps
#[allow(unsafe_code)]
fn inner_text_collection_steps<N: LayoutNode>(node: N,
- display_list: &Arc<DisplayList>,
+ indexable_text: &IndexableText,
results: &mut Vec<InnerTextItem>) {
- // Extracts the text nodes from the display list to avoid traversing it
- // for each child node.
- let mut text = HashMap::new();
- for item in &display_list.as_ref().list {
- if let &DisplayItem::Text(ref text_content) = item {
- let entries = text.entry(&item.base().metadata.node).or_insert(Vec::new());
- entries.push(&text_content.text_run.text);
- }
- }
-
let mut items = Vec::new();
for child in node.traverse_preorder() {
let node = match child.type_id() {
@@ -986,9 +970,9 @@ fn inner_text_collection_steps<N: LayoutNode>(node: N,
match child.type_id() {
LayoutNodeType::Text => {
// Step 4.
- if let Some(text_content) = text.get(&child.opaque()) {
+ if let Some(text_content) = indexable_text.get(child.opaque()) {
for content in text_content {
- items.push(InnerTextItem::Text(content.to_string()));
+ items.push(InnerTextItem::Text(content.text_run.text.to_string()));
}
}
},