summaryrefslogtreecommitdiff
path: root/packages/fcl-xml/src
diff options
context:
space:
mode:
authorsergei <sergei@3ad0048d-3df7-0310-abae-a5850022a9f2>2010-09-29 23:10:58 +0000
committersergei <sergei@3ad0048d-3df7-0310-abae-a5850022a9f2>2010-09-29 23:10:58 +0000
commit9a1ca4bbf969d7e01bde70841dfd307d766aaebf (patch)
treedc940159556223aa14ed9b3c2e17302e421b5256 /packages/fcl-xml/src
parent1afbfb7777fec3a15b9dfb3b5a696502a9a67920 (diff)
downloadfpc-9a1ca4bbf969d7e01bde70841dfd307d766aaebf.tar.gz
* dom.pp, moved remaining TDOMAttr-specific code from TDOMNamedNodeMap to TAttributeMap.
git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@16066 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'packages/fcl-xml/src')
-rw-r--r--packages/fcl-xml/src/dom.pp47
1 files changed, 26 insertions, 21 deletions
diff --git a/packages/fcl-xml/src/dom.pp b/packages/fcl-xml/src/dom.pp
index 3ce032dd20..ca02cec40c 100644
--- a/packages/fcl-xml/src/dom.pp
+++ b/packages/fcl-xml/src/dom.pp
@@ -363,13 +363,13 @@ type
function Find(const name: DOMString; out Index: LongWord): Boolean;
function Delete(index: LongWord): TDOMNode; virtual;
function InternalRemove(const name: DOMString): TDOMNode;
- function ValidateInsert(arg: TDOMNode): Integer;
+ function ValidateInsert(arg: TDOMNode): Integer; virtual;
public
constructor Create(AOwner: TDOMNode; ANodeType: Integer);
destructor Destroy; override;
function GetNamedItem(const name: DOMString): TDOMNode;
- function SetNamedItem(arg: TDOMNode): TDOMNode;
+ function SetNamedItem(arg: TDOMNode): TDOMNode; virtual;
function RemoveNamedItem(const name: DOMString): TDOMNode;
// Introduced in DOM Level 2:
function getNamedItemNS(const namespaceURI, localName: DOMString): TDOMNode; virtual;
@@ -836,7 +836,9 @@ type
procedure RestoreDefault(const name: DOMString);
protected
function Delete(index: LongWord): TDOMNode; override;
+ function ValidateInsert(arg: TDOMNode): Integer; override;
public
+ function setNamedItem(arg: TDOMNode): TDOMNode; override;
function getNamedItemNS(const namespaceURI, localName: DOMString): TDOMNode; override;
function setNamedItemNS(arg: TDOMNode): TDOMNode; override;
function removeNamedItemNS(const namespaceURI,localName: DOMString): TDOMNode; override;
@@ -1734,8 +1736,6 @@ begin
end;
function TDOMNamedNodeMap.ValidateInsert(arg: TDOMNode): Integer;
-var
- AttrOwner: TDOMNode;
begin
Result := 0;
if nfReadOnly in FOwner.FFlags then
@@ -1743,13 +1743,7 @@ begin
else if arg.FOwnerDocument <> FOwner.FOwnerDocument then
Result := WRONG_DOCUMENT_ERR
else if arg.NodeType <> FNodeType then
- Result := HIERARCHY_REQUEST_ERR
- else if (FNodeType = ATTRIBUTE_NODE) then
- begin
- AttrOwner := arg.FParentNode;
- if Assigned(AttrOwner) and (AttrOwner <> FOwner) then
- Result := INUSE_ATTRIBUTE_ERR;
- end;
+ Result := HIERARCHY_REQUEST_ERR;
end;
function TDOMNamedNodeMap.SetNamedItem(arg: TDOMNode): TDOMNode;
@@ -1762,19 +1756,10 @@ begin
if res <> 0 then
raise EDOMError.Create(res, 'NamedNodeMap.SetNamedItem');
- if FNodeType = ATTRIBUTE_NODE then
- begin
- arg.FParentNode := FOwner;
- Exists := Find(TDOMAttr(arg).Name, i); // optimization
- end
- else
- Exists := Find(arg.NodeName, i);
-
+ Exists := Find(arg.NodeName, i);
if Exists then
begin
Result := TDOMNode(FList.List^[i]);
- if (Result <> arg) and (FNodeType = ATTRIBUTE_NODE) then
- Result.FParentNode := nil;
FList.List^[i] := arg;
exit;
end;
@@ -1838,6 +1823,18 @@ begin
end;
end;
+function TAttributeMap.ValidateInsert(arg: TDOMNode): Integer;
+begin
+ Result := inherited ValidateInsert(arg);
+ if Result = 0 then
+ begin
+ if arg.NodeType <> ATTRIBUTE_NODE then
+ Result := HIERARCHY_REQUEST_ERR
+ else if Assigned(arg.FParentNode) and (arg.FParentNode <> FOwner) then
+ Result := INUSE_ATTRIBUTE_ERR;
+ end;
+end;
+
procedure TAttributeMap.RestoreDefault(const name: DOMString);
var
eldef: TDOMElement;
@@ -1907,6 +1904,14 @@ begin
Result := nil;
end;
+function TAttributeMap.setNamedItem(arg: TDOMNode): TDOMNode;
+begin
+ Result := inherited setNamedItem(arg);
+ if Assigned(Result) then
+ Result.FParentNode := nil;
+ arg.FParentNode := FOwner;
+end;
+
function TAttributeMap.setNamedItemNS(arg: TDOMNode): TDOMNode;
var
i: LongWord;