1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
| ///////////////////////////////////////////////////////////////////////////
// //
// Copyright (c) 2015 by Charta Software B.V. //
// All rights reserved //
// //
// Version: 1.7.0.83525 //
// Web site: https://pascal.chartasoftware.com/ //
// //
// This code and information are provided "as is" without warranty of //
// any kind. Dissemination of this information or reproduction of //
// this material is strictly forbidden unless prior written permission //
// is obtained from Charta Software B.V.. //
// //
///////////////////////////////////////////////////////////////////////////
unit WebSite.Page.Component;
interface
uses
Boolean,
Dictionary,
Html.Element,
Iterator,
Iterator.Tree,
StructuredDocument.Node,
Text,
UserInterface.Control.Mode,
WebSite.Form.Problem,
WebSite.Request,
WebSite.Request.Handler;
type
TWebPageComponent = class(TObject)
protected
procedure SetCaption(const Value: TDocumentNode); virtual; abstract;
function GetCaption(): TDocumentNode; virtual; abstract;
function GetInputOK(): TBoolean; virtual;
procedure SetInputOK(const Value: TBoolean); virtual;
public
Name: TText;
Mode: TControlMode;
constructor Create(); virtual;
function Render(Request: TWebSiteRequest): THtmlElement; virtual; abstract;
procedure LoadFromParameters(Parameters: TDictionary); virtual;
procedure CheckInput(Problems: TFormProblems); virtual;
function CreateRequestHandler(Request: TWebSiteRequest): TWebSiteRequestHandler; virtual;
function CreateChildIterator(): TIterator<TWebPageComponent>; virtual;
function CreateSubtreeIterator(Order: TTreeVerticalOrder): TIterator<TWebPageComponent>;
function GetDescendantWithName(const Name: TText): TWebPageComponent; virtual; deprecated 'Please use an other way to track components within an hierarchy';
property Caption: TDocumentNode read GetCaption write SetCaption;
property InputOK: TBoolean read GetInputOK write SetInputOK;
end;
TWebPageComponentChildIteratorFactory = class(TChildIteratorFactory<TWebPageComponent>)
public
function CreateChildIterator(Parent: TWebPageComponent): TIterator<TWebPageComponent>; override;
end;
implementation
uses
Exception.NotImplemented,
Iterator.Empty;
{ TWebPageComponent }
procedure TWebPageComponent.CheckInput(Problems: TFormProblems);
begin
end;
constructor TWebPageComponent.Create();
begin
inherited Create();
Self.Mode := TControlMode.Edit;
end;
function TWebPageComponent.CreateChildIterator(): TIterator<TWebPageComponent>;
begin
Result := TEmptyIterator<TWebPageComponent>.Create();
end;
function TWebPageComponent.CreateSubtreeIterator(Order: TTreeVerticalOrder): TIterator<TWebPageComponent>;
begin
Result := TTreeIterator<TWebPageComponent>.Create(Self, Order, TWebPageComponentChildIteratorFactory.Create());
end;
function TWebPageComponent.GetDescendantWithName(const Name: TText): TWebPageComponent;
begin
if Name = Self.Name then
Result := Self
else
Result := nil;
end;
function TWebPageComponent.GetInputOK(): TBoolean;
begin
raise ENotImplemented.Create(ClassType, 'GetInputOK');
end;
procedure TWebPageComponent.LoadFromParameters(Parameters: TDictionary);
begin
end;
function TWebPageComponent.CreateRequestHandler(Request: TWebSiteRequest): TWebSiteRequestHandler;
begin
Result := nil;
end;
procedure TWebPageComponent.SetInputOK(const Value: TBoolean);
begin
raise ENotImplemented.Create(ClassType, 'SetInputOK');
end;
{ TWebPageComponentChildIteratorFactory }
function TWebPageComponentChildIteratorFactory.CreateChildIterator(Parent: TWebPageComponent): TIterator<TWebPageComponent>;
begin
Result := Parent.CreateChildIterator();
end;
end.
|