Beispiel #1
0
std::unique_ptr<protocol::DictionaryValue> LayoutEditor::currentSelectorInfo(
    CSSStyleDeclaration* style) const {
  std::unique_ptr<protocol::DictionaryValue> object =
      protocol::DictionaryValue::create();
  CSSStyleRule* rule =
      style->parentRule() ? toCSSStyleRule(style->parentRule()) : nullptr;
  String currentSelectorText = rule ? rule->selectorText() : "element.style";
  object->setString("selector", currentSelectorText);

  Document* ownerDocument = m_element->ownerDocument();
  if (!ownerDocument->isActive() || !rule)
    return object;

  Vector<String> medias;
  buildMediaListChain(rule, medias);
  std::unique_ptr<protocol::ListValue> mediaListValue =
      protocol::ListValue::create();
  for (size_t i = 0; i < medias.size(); ++i)
    mediaListValue->pushValue(protocol::StringValue::create(medias[i]));

  object->setArray("medias", std::move(mediaListValue));

  TrackExceptionState exceptionState;
  StaticElementList* elements = ownerDocument->querySelectorAll(
      AtomicString(currentSelectorText), exceptionState);

  if (!elements || exceptionState.hadException())
    return object;

  std::unique_ptr<protocol::ListValue> highlights =
      protocol::ListValue::create();
  InspectorHighlightConfig config = affectedNodesHighlightConfig();
  for (unsigned i = 0; i < elements->length(); ++i) {
    Element* element = elements->item(i);
    if (element == m_element)
      continue;

    InspectorHighlight highlight(element, config, false);
    highlights->pushValue(highlight.asProtocolValue());
  }

  object->setArray("nodes", std::move(highlights));
  return object;
}
PassRefPtr<JSONObject> LayoutEditor::currentSelectorInfo(CSSStyleDeclaration* style) const
{
    RefPtr<JSONObject> object = JSONObject::create();
    CSSStyleRule* rule = style->parentRule() ? toCSSStyleRule(style->parentRule()) : nullptr;
    String currentSelectorText = rule ? rule->selectorText() : "element.style";
    object->setString("selector", currentSelectorText);

    Document* ownerDocument = m_element->ownerDocument();
    if (!ownerDocument->isActive() || !rule)
        return object.release();

    Vector<String> medias;
    buildMediaListChain(rule, medias);
    RefPtr<JSONArray> mediasJSONArray = JSONArray::create();
    for (size_t i = 0; i < medias.size(); ++i)
        mediasJSONArray->pushString(medias[i]);

    object->setArray("medias", mediasJSONArray.release());

    TrackExceptionState exceptionState;
    RefPtrWillBeRawPtr<StaticElementList> elements = ownerDocument->querySelectorAll(AtomicString(currentSelectorText), exceptionState);

    if (!elements || exceptionState.hadException())
        return object.release();

    RefPtr<JSONArray> highlights = JSONArray::create();
    InspectorHighlightConfig config = affectedNodesHighlightConfig();
    for (unsigned i = 0; i < elements->length(); ++i) {
        Element* element = elements->item(i);
        if (element == m_element)
            continue;

        InspectorHighlight highlight(element, config, false);
        highlights->pushObject(highlight.asJSONObject());
    }

    object->setArray("nodes", highlights.release());
    return object.release();
}