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
132
| ///////////////////////////////////////////////////////////////////////////
// //
// 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.Module.Html;
interface
uses
Boolean,
Text,
Uri.Producer,
WebSite.Menu.Item,
WebSite.Module,
WebSite.Request,
WebSite.Request.Handler;
type
THtmlWebSiteModule = class(TWebSiteModule)
protected
FName: TText;
function GetDefaultMenu(Request: TWebSiteRequest; MenuUriProducer: TUriProducer): TMenuItem;
public
constructor Create(const Name: TText); reintroduce; virtual;
function GetMenu(Request: TWebSiteRequest; MenuUriProducer: TUriProducer): TMenuItem; override;
function GetName(): TText; override;
function GetHandlerForEmbellishedModule(Path: TWebSiteRequestHandlerPath): TWebSiteRequestHandler; deprecated; // TODO: Please remove calls to this function
function IsCurrentInPath(Path: TWebSiteRequestHandlerPath): TBoolean; deprecated; // TODO: Please remove calls to this function
end;
implementation
uses
Integer._32,
Uri,
WebSite.Module.Decorating,
WebSite.Request.Handler.ModuleBased;
{ THtmlWebSiteModule }
constructor THtmlWebSiteModule.Create(const Name: TText);
begin
inherited Create();
FName := Name;
end;
function THtmlWebSiteModule.GetHandlerForEmbellishedModule(Path: TWebSiteRequestHandlerPath): TWebSiteRequestHandler;
var
i: TInteger32;
Handler: TWebSiteRequestHandler;
CurrentModule: TWebSiteModule;
begin
Result := nil;
i := 0;
while (Result = nil) and (i < Path.Count) do
begin
Handler := Path[i];
if Handler is TModuleBasedWebSiteRequestHandler then
CurrentModule := (Handler as TModuleBasedWebSiteRequestHandler).Module
else if Handler is TDecoratingWebSiteRequestHandler then
CurrentModule := (Handler as TDecoratingWebSiteRequestHandler).DecoratingModule
else
CurrentModule := nil;
if CurrentModule <> nil then
CurrentModule := CurrentModule.EmbellishedModule();
if CurrentModule = Self then
Result := Path[i];
Inc(i);
end;
end;
function THtmlWebSiteModule.GetDefaultMenu(Request: TWebSiteRequest; MenuUriProducer: TUriProducer): TMenuItem;
begin
Result := TMenuItem.Create();
Result.Caption := GetTitle(Request);
Result.Target := MenuUriProducer.RelativeUri([GetPathElement(Request.HandlerPath)], TUriResourceType.File_);
Result.Current := IsCurrentInPath(Request.HandlerPath);
Result.PathCurrent := GetHandlerForEmbellishedModule(Request.HandlerPath) <> nil;
end;
function THtmlWebSiteModule.GetMenu(Request: TWebSiteRequest; MenuUriProducer: TUriProducer): TMenuItem;
begin
Result := GetDefaultMenu(Request, MenuUriProducer);
end;
function THtmlWebSiteModule.IsCurrentInPath(Path: TWebSiteRequestHandlerPath): TBoolean;
var
TopModule: TWebSiteModule;
Handler: TWebSiteRequestHandler;
begin
Handler := Path.Top;
if Handler is TModuleBasedWebSiteRequestHandler then
TopModule := (Handler as TModuleBasedWebSiteRequestHandler).Module
else if Handler is TDecoratingWebSiteRequestHandler then
TopModule := (Handler as TDecoratingWebSiteRequestHandler).DecoratingModule
else
TopModule := nil;
if TopModule <> nil then
TopModule := TopModule.EmbellishedModule();
Result := TopModule = Self;
end;
function THtmlWebSiteModule.GetName(): TText;
begin
Result := FName;
end;
end.
|