зеркало из https://github.com/mozilla/gecko-dev.git
Bug 933193 part 2. Implement nsINode::GetElementById and make SVGSVGElement use it. r=smaug
This commit is contained in:
Родитель
5d8ee8188b
Коммит
62654086cb
|
@ -1076,6 +1076,12 @@ public:
|
|||
nsresult QuerySelector(const nsAString& aSelector, nsIDOMElement **aReturn);
|
||||
nsresult QuerySelectorAll(const nsAString& aSelector, nsIDOMNodeList **aReturn);
|
||||
|
||||
protected:
|
||||
// nsIDocument overrides this with its own (faster) version. This
|
||||
// should really only be called for elements and document fragments.
|
||||
mozilla::dom::Element* GetElementById(const nsAString& aId);
|
||||
|
||||
public:
|
||||
/**
|
||||
* Associate an object aData to aKey on this node. If aData is null any
|
||||
* previously registered object and UserDataHandler associated to aKey on
|
||||
|
|
|
@ -2519,6 +2519,29 @@ nsINode::QuerySelectorAll(const nsAString& aSelector, nsIDOMNodeList **aReturn)
|
|||
return rv.ErrorCode();
|
||||
}
|
||||
|
||||
Element*
|
||||
nsINode::GetElementById(const nsAString& aId)
|
||||
{
|
||||
MOZ_ASSERT(IsElement() || IsNodeOfType(eDOCUMENT_FRAGMENT),
|
||||
"Bogus this object for GetElementById call");
|
||||
if (IsInDoc()) {
|
||||
ElementHolder holder;
|
||||
FindMatchingElementsWithId<true>(aId, this, nullptr, holder);
|
||||
return holder.mElement;
|
||||
}
|
||||
|
||||
for (nsIContent* kid = GetFirstChild(); kid; kid = kid->GetNextNode(this)) {
|
||||
if (!kid->IsElement()) {
|
||||
continue;
|
||||
}
|
||||
nsIAtom* id = kid->AsElement()->GetID();
|
||||
if (id && id->Equals(aId)) {
|
||||
return kid->AsElement();
|
||||
}
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
JSObject*
|
||||
nsINode::WrapObject(JSContext *aCx, JS::Handle<JSObject*> aScope)
|
||||
{
|
||||
|
|
|
@ -435,18 +435,6 @@ SVGSVGElement::CreateSVGTransformFromMatrix(SVGMatrix& matrix)
|
|||
return transform.forget();
|
||||
}
|
||||
|
||||
Element*
|
||||
SVGSVGElement::GetElementById(const nsAString& elementId, ErrorResult& rv)
|
||||
{
|
||||
nsAutoString selector(NS_LITERAL_STRING("#"));
|
||||
nsStyleUtil::AppendEscapedCSSIdent(PromiseFlatString(elementId), selector);
|
||||
nsIContent* element = QuerySelector(selector, rv);
|
||||
if (!rv.Failed() && element) {
|
||||
return element->AsElement();
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
already_AddRefed<SVGAnimatedRect>
|
||||
|
|
|
@ -246,7 +246,7 @@ public:
|
|||
already_AddRefed<SVGIRect> CreateSVGRect();
|
||||
already_AddRefed<SVGTransform> CreateSVGTransform();
|
||||
already_AddRefed<SVGTransform> CreateSVGTransformFromMatrix(SVGMatrix& matrix);
|
||||
Element* GetElementById(const nsAString& elementId, ErrorResult& rv);
|
||||
using nsINode::GetElementById; // This does what we want
|
||||
already_AddRefed<SVGAnimatedRect> ViewBox();
|
||||
already_AddRefed<DOMSVGAnimatedPreserveAspectRatio> PreserveAspectRatio();
|
||||
uint16_t ZoomAndPan();
|
||||
|
|
|
@ -59,7 +59,6 @@ interface SVGSVGElement : SVGGraphicsElement {
|
|||
SVGTransform createSVGTransform();
|
||||
[NewObject]
|
||||
SVGTransform createSVGTransformFromMatrix(SVGMatrix matrix);
|
||||
[Throws]
|
||||
Element? getElementById(DOMString elementId);
|
||||
};
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче