TEmbeddedArrayStackItem.CreateList() should look only at the immediate child level of the ScopeObject

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@706 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
inoussa
2009-02-14 01:15:34 +00:00
parent 949491a27e
commit 856571eee4
2 changed files with 53 additions and 3 deletions

View File

@ -2137,10 +2137,10 @@ function TEmbeddedArrayStackItem.CreateList(const ANodeName: string): TDOMNodeLi
begin
if ScopeObject.HasChildNodes() then begin
{$IFDEF WST_DELPHI}
Result := FilterList(ScopeObject.childNodes,ANodeName);
Result := FilterList(ScopeObject.ChildNodes,ANodeName);
{$ELSE}
Result := {$IFNDEF FPC_211}TDOMNodeList{$ELSE}TDOMElementList{$ENDIF}.Create(ScopeObject,ANodeName);
{$ENDIF}
Result := FilterList(ScopeObject,ANodeName);
{$ENDIF WST_DELPHI}
end else begin
Result := nil;
end;

View File

@ -9,6 +9,22 @@ uses
{$INCLUDE wst.inc}
{$INCLUDE wst_delphi.inc}
type
{ TDOMNodeSelectListImp }
TDOMNodeSelectListImp = class(TDOMNodeList)
private
FFilter: DOMString;
FUseFilter: Boolean;
protected
procedure BuildList(); override;
public
constructor Create(ANode: TDOMNode; const AFilter: DOMString);
end;
function FilterList(const ANode : TDOMNode; const ANodeName : DOMString) : TDOMNodeList ;
function GetNodeItemsCount(const ANode : TDOMNode): Integer;
function GetNodeListCount(ANodeList : TDOMNodeList) : Integer ;overload;{$IFDEF USE_INLINE}inline;{$ENDIF}
function GetNodeListCount(ANodeList : TDOMNamedNodeMap) : Integer ;overload;{$IFDEF USE_INLINE}inline;{$ENDIF}
@ -88,4 +104,38 @@ begin
end;
end;
function FilterList(const ANode : TDOMNode; const ANodeName : DOMString) : TDOMNodeList ;
begin
Result := TDOMNodeSelectListImp.Create(ANode,ANodeName);
end;
{ TDOMNodeSelectListImp }
type
TDOMNodeCracked = class(TDOMNode);
procedure TDOMNodeSelectListImp.BuildList();
var
Child: TDOMNode;
begin
FList.Clear;
FRevision := TDOMNodeCracked(FNode).GetRevision();
Child := FNode.FirstChild;
while ( Child <> nil ) do begin
if ( Child.NodeType = ELEMENT_NODE ) and
( ( not FUseFilter ) or ( TDOMElement(Child).TagName = FFilter ) )
then begin
FList.Add(Child);
end;
Child := Child.NextSibling
end;
end;
constructor TDOMNodeSelectListImp.Create(ANode: TDOMNode; const AFilter: DOMString);
begin
inherited Create(ANode);
FFilter := AFilter;
FUseFilter := ( FFilter <> '*' );
end;
end.