wiki test: back, forward

git-svn-id: trunk@35861 -
This commit is contained in:
mattias 2012-03-10 09:52:17 +00:00
parent be7753bef1
commit 0221e91fe4
2 changed files with 406 additions and 59 deletions

View File

@ -33,6 +33,7 @@ object WikiSearchDemoForm: TWikiSearchDemoForm
DefaultTypeFace = 'default' DefaultTypeFace = 'default'
DefaultFontSize = 10 DefaultFontSize = 10
FlagErrors = False FlagErrors = False
PopupMenu = PagePopupMenu
PrintSettings.MarginLeft = 0.5 PrintSettings.MarginLeft = 0.5
PrintSettings.MarginTop = 0.5 PrintSettings.MarginTop = 0.5
PrintSettings.MarginRight = 0.5 PrintSettings.MarginRight = 0.5
@ -47,32 +48,39 @@ object WikiSearchDemoForm: TWikiSearchDemoForm
Top = 1 Top = 1
Width = 336 Width = 336
Caption = 'PageToolBar' Caption = 'PageToolBar'
Images = ImageList1
ShowCaptions = True ShowCaptions = True
TabOrder = 1 TabOrder = 1
object ShowSearchToolButton: TToolButton object ShowSearchToolButton: TToolButton
Left = 1 Left = 1
Top = 2 Top = 2
AutoSize = True AutoSize = True
Caption = 'Search' ImageIndex = 1
OnClick = ShowSearchToolButtonClick OnClick = ShowSearchToolButtonClick
ParentShowHint = False ParentShowHint = False
ShowHint = True ShowHint = True
Visible = False Visible = False
end end
object ShowHTMLToolButton: TToolButton object SearchSepToolButton: TToolButton
Left = 47 Left = 24
Top = 2 Top = 2
AutoSize = True Width = 5
Caption = 'HTML' Caption = 'SearchSepToolButton'
OnClick = ShowHTMLToolButtonClick Style = tbsDivider
end
object BackToolButton: TToolButton
Left = 29
Top = 2
ImageIndex = 2
OnClick = BackToolButtonClick
ParentShowHint = False ParentShowHint = False
ShowHint = True ShowHint = True
end end
object ShowWikiSrcToolButton: TToolButton object ForwardToolButton: TToolButton
Left = 85 Left = 52
Top = 2 Top = 2
Caption = 'Source' ImageIndex = 3
OnClick = ShowWikiSrcToolButtonClick OnClick = ForwardToolButtonClick
ParentShowHint = False ParentShowHint = False
ShowHint = True ShowHint = True
end end
@ -210,4 +218,152 @@ object WikiSearchDemoForm: TWikiSearchDemoForm
left = 411 left = 411
top = 139 top = 139
end end
object ImageList1: TImageList
left = 211
top = 175
Bitmap = {
4C69040000001000000010000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000858A884C858A
88FF858A884C0000000000000000000000000000000000000000000000000000
004C858A88FF858A884C00000000000000000000000000000000858A88FFE9EB
ECFF858A88FF858A884C000000000000000000000000000000000000004C858A
88FFEEEFEFFC858A88FF0000000000000000000000000000000000000000858A
88FFEEF0F0FF858A88FF00000000000000000000000000000000858A88FFF0F0
F0FF858A88FF0000004C00000000858A884C858A88FF00000000858A884C858A
88FFFAFAFAFF858A88FF000000000000000000000000858A884C858A88FF878C
8AFF0000004C0000000000000000858A88FFF5F6F6FEA9ACABFF858A88FFF7F7
F7FFE2E3E5FFAAADADFFECEEEE8100000000858A884C858A88FF858A884C0000
0000000000000000000000000000858A884C858A88FFF3F3F3FEEFF0F0FFEDEE
EEFEEAECECFEB6B9BAFF858A88FF858A884C858A88FF858A884C000000000000
000000000000000000000000000000000000858A884C858A88FF858A88FF858A
88FF858A88FFD0D1D2FFA3A4A4FF858A88FF858A888100000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000B5B7B8FF858A88FFB7B8B9FF858A88FF858A884C000000020000
00000000000000000000000000000000000000000000874A2019874A20FF874A
20FF874A20FF85837DFFAAADADFFC8C9CAFFBDBEBFFF858A88FF858A884C0000
000000000000000000000000000000000000874A2019874A20FFCCBBADFFCCBB
ADFFB3937CFF874A20FF858A8881858A88FFD3D3D4FFBDBEBFFF858A88FF858A
884C000000020000000000000000874A2030874A20FFD4C8BDFFA48D78FFA48D
78FFBEA592FF874A20FF00000000858A884C858A88FFE2E3E4FFC2C4C6FF858A
88FF858A88810000000000000000874A20FFCCBBADFFA48D78FFA28A74FFB495
7AFFB3937CFF874A20FF0000000000000000858A884C858A88FFD2D3D4FFC2C3
C4FF858A88FF0000000000000000874A20FFCCBBADFFA7917DFFB5957AFFAE8B
72FF874A20FF874A2044000000000000000000000000858A884C858A88FF9EA1
A0FF858A88FF0000000000000000874A20FFBEA592FFB89C86FFB89C86FF874A
20FF874A20440000000000000000000000000000000000000000858A8881858A
88D3858A88810000000000000000874A2056874A20FF874A20FF874A20FF874A
2044000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009C8F
83E2BCB0A4FF9D9185FFFFFFFF00AEA093FF9D9185FF655D55DAFFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF008E83
78E2C3B8AEFF655D55FFFFFFFF007C7268FFA89B8EFF9C8F83E4FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00746B62FFA4978AFF9589
7DFF9F9286FF3E3934FFFFFFFF004C4640FF7E746AFF857A70FF3E3934FF453F
3AA72522200C15131102FFFFFF00B9ACA008877D72489B8E82FF9D9185FF867B
71FF564F48FF504A44FF80766CFF6E665DFF826C58FFA6917DFF948474FF564F
48FF0C0B0B7A07070601FFFFFF00AB9D9004AFA194E1BAAEA2FF82776DFF8277
6DFFAA917BFFBAA794FFB7A48EFAB09781FF9F8D7DFF836D5BFF716357FF9589
7DFF040403E000000003FFFFFF009F9286059D9185FFB1A396FF7F756BFF7C72
68FF776D64FF6C635BFF2E2A26FF564F48FF80766CFF7C7268FF776D64FF7067
5EFF000000FE00000005FFFFFF00797066055C554EF9423D38FF58514AFF3D38
33FF332F2BFF23201DE5171614301E1C19B51A1816FF252220FF191715FF0F0E
0DFF010101EE00000002FFFFFF00FFFFFF005A524CC39F9286FFCCC3BAFFC0B4
AAFFA6988BFF3E3934A8FFFFFF002C2925A8908479FFC2B8ADFFC0B4AAFFA89B
8EFF110F0EC3FFFFFF00FFFFFF00FFFFFF00534C46FC83786FFFCCC3BAFF7970
66FF71685FFF37332ED5FFFFFF00252220D5857A70FFC2B8ADFF786F65FF7B71
67FF0A0908FCFFFFFF00FFFFFF00FFFFFF004D4741FF83786FFFCCC3BAFF786F
65FF7B7167FF2F2B28F9272421011D1B18EE95897DFFC2B8ADFF786F65FF7C72
68FF060505FFFFFFFF00FFFFFF00FFFFFF0046413BFF857A70FFC3B8AEFF7C72
68FF7F756BFF36322DFF1E1C190F282522D495897DFFBAAEA2FF7C7268FF7F75
6BFF010101FFFFFFFF00FFFFFF00FFFFFF003E3934FF393430FF332F2BFF2C29
25FF272421FF201D1BFF1716141A110F0EDB0B0A09FF070706FF040403FF0000
00FF000000FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0068C7740668C7
74BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0068C774DB65C3
71F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0068C774D180CD8BFF7CC9
87FF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580
3BFF2F7835FF2A702FFFFFFFFF00FFFFFF0068C774C97FCC8AFFA2D8ABFF9ED6
A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA90FF85C78BFF81C587FF7DC2
82FF78C07EFF256929FFFFFFFF00FFFFFF0065C371C47BC886FF9CD5A5FF98D3
A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C689FF7EC384FF7AC180FF76BE
7CFF72BD78FF216324FFFFFFFF00FFFFFF00FFFFFF005DB868CF71BE7BFF7AC1
83FF5BAA64FF47994FFF419149FF3B8842FF35803BFF2F7835FF2A702FFF2569
29FF216324FF1D5E20FFFFFFFF00FFFFFF00FFFFFF00FFFFFF0053A95CD94DA1
56F747994F38FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004DA156064799
4FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0047994FBB4191
4906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00419149F73B88
42DBFFFFFF00FFFFFF00FFFFFF00FFFFFF0068C774FF68C774FF65C371FF61BE
6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF5AA362FF559D
5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF0068C774FFA5DAAEFFA2D8ABFF9ED6
A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA90FF85C78BFF81C587FF7DC2
82FF4A9150FF256929C9FFFFFF00FFFFFF0065C371FFA0D7A9FF9CD5A5FF98D3
A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C689FF7EC384FF7AC180FF76BE
7CFF458C4AFF216324C4FFFFFF00FFFFFF0061BE6DFF5DB868FF58B162FF53A9
5CFF4DA156FF47994FFF419149FF3B8842FF35803BFF3F8845FF59A15EFF448B
49FF216324CFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF002A702F38256929F72163
24D9FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00216324B81D5E
2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00
}
end
object PagePopupMenu: TPopupMenu
OnPopup = PagePopupMenuPopup
left = 456
top = 139
object ViewHTMLMenuItem: TMenuItem
Caption = 'ViewHTMLMenuItem'
OnClick = ViewHTMLMenuItemClick
end
object ViewWikiSourceMenuItem: TMenuItem
Caption = 'ViewWikiSourceMenuItem'
OnClick = ViewWikiSourceMenuItemClick
end
end
end end

View File

@ -27,9 +27,9 @@ interface
uses uses
Classes, SysUtils, math, FileUtil, LazLogger, LazUTF8, LazFileUtils, laz2_DOM, Classes, SysUtils, math, FileUtil, LazLogger, LazUTF8, LazFileUtils, laz2_DOM,
Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls, ComCtrls, LCLIntf, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls, ComCtrls, LCLIntf,
IpHtml, Ipfilebroker, IpMsg, Menus, IpHtml, Ipfilebroker, IpMsg, CodeToolManager, CodeCache, SynEdit,
CodeToolManager, CodeCache, SynEdit, SynHighlighterHTML, SynEditHighlighter, SynHighlighterHTML, SynEditHighlighter, WikiHelpManager, WikiSearchOptions,
WikiHelpManager, WikiSearchOptions, WikiParser, WikiFormat; WikiParser, WikiFormat;
type type
@ -42,13 +42,49 @@ type
public public
end; end;
{ TWikiPageHistoryItem }
TWikiPageHistoryItem = class
public
DocumentName: string;
Anchor: string;
Title: string;
constructor Create(TheDocumentName, TheAnchor, TheTitle: string);
end;
TWikiPageHistory = class
private
FCurrentIndex: integer;
FItems: TFPList; // list of TWikiPageHistoryItem
FMaxCount: integer;
function GetCurrent: TWikiPageHistoryItem;
function GetItems(Index: integer): TWikiPageHistoryItem;
procedure SetCurrentIndex(AValue: integer);
procedure SetMaxCount(AValue: integer);
public
constructor Create;
destructor Destroy; override;
procedure Clear;
property CurrentIndex: integer read FCurrentIndex write SetCurrentIndex;
property Current: TWikiPageHistoryItem read GetCurrent;
property Items[Index: integer]: TWikiPageHistoryItem read GetItems; default;
function Count: integer;
property MaxCount: integer read FMaxCount write SetMaxCount;
function AddAfterCurrent(DocumentName, Anchor, Title: string): TWikiPageHistoryItem;
procedure Delete(Index: integer);
end;
{ TWikiSearchDemoForm } { TWikiSearchDemoForm }
TWikiSearchDemoForm = class(TForm) TWikiSearchDemoForm = class(TForm)
HideSearchButton: TButton; HideSearchButton: TButton;
ImageList1: TImageList;
ViewWikiSourceMenuItem: TMenuItem;
ViewHTMLMenuItem: TMenuItem;
OptionsButton: TButton; OptionsButton: TButton;
PagePanel: TPanel; PagePanel: TPanel;
PageIpHtmlPanel: TIpHtmlPanel; PageIpHtmlPanel: TIpHtmlPanel;
PagePopupMenu: TPopupMenu;
PageToolBar: TToolBar; PageToolBar: TToolBar;
ProgressLabel: TLabel; ProgressLabel: TLabel;
ResultsIpHtmlPanel: TIpHtmlPanel; ResultsIpHtmlPanel: TIpHtmlPanel;
@ -59,45 +95,55 @@ type
SynHTMLSyn1: TSynHTMLSyn; SynHTMLSyn1: TSynHTMLSyn;
Timer1: TTimer; Timer1: TTimer;
ShowSearchToolButton: TToolButton; ShowSearchToolButton: TToolButton;
ShowHTMLToolButton: TToolButton; SearchSepToolButton: TToolButton;
ShowWikiSrcToolButton: TToolButton; BackToolButton: TToolButton;
ForwardToolButton: TToolButton;
procedure BackToolButtonClick(Sender: TObject);
function DataProviderCanHandle(Sender: TObject; const {%H-}URL: string): Boolean; function DataProviderCanHandle(Sender: TObject; const {%H-}URL: string): Boolean;
procedure DataProviderGetImage(Sender: TIpHtmlNode; const URL: string; procedure DataProviderGetImage(Sender: TIpHtmlNode; const URL: string;
var Picture: TPicture); var Picture: TPicture);
procedure FormCreate(Sender: TObject); procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject); procedure FormDestroy(Sender: TObject);
procedure ForwardToolButtonClick(Sender: TObject);
procedure HideSearchButtonClick(Sender: TObject); procedure HideSearchButtonClick(Sender: TObject);
procedure LanguagesEditChange(Sender: TObject); procedure LanguagesEditChange(Sender: TObject);
procedure IpHtmlPanelHotClick(Sender: TObject); procedure IpHtmlPanelHotClick(Sender: TObject);
procedure OptionsButtonClick(Sender: TObject); procedure OptionsButtonClick(Sender: TObject);
procedure PagePopupMenuPopup(Sender: TObject);
procedure SearchEditChange(Sender: TObject); procedure SearchEditChange(Sender: TObject);
procedure ShowHTMLToolButtonClick(Sender: TObject); procedure ViewHTMLMenuItemClick(Sender: TObject);
procedure ShowSearchToolButtonClick(Sender: TObject); procedure ShowSearchToolButtonClick(Sender: TObject);
procedure ShowWikiSrcToolButtonClick(Sender: TObject); procedure ViewWikiSourceMenuItemClick(Sender: TObject);
procedure Timer1Timer(Sender: TObject); procedure Timer1Timer(Sender: TObject);
private private
fLastSearchText: string; fLastSearchText: string;
fLastLanguages: string; fLastLanguages: string;
fLastScoring: TWHScoring; fLastScoring: TWHScoring;
FIdleConnected: boolean; FIdleConnected: boolean;
FPageHistory: TWikiPageHistory;
FURLDataProvider: TWikiIpHtmlDataProvider; FURLDataProvider: TWikiIpHtmlDataProvider;
FPageDocumentName: string; FPageDocumentName: string;
FPageAnchor: string; FPageAnchor: string;
FPageSource: string; FPageSource: string;
FPageTitle: string;
procedure GoToHistoryPage(Index: integer);
procedure QueryChanged; procedure QueryChanged;
procedure SetIdleConnected(AValue: boolean); procedure SetIdleConnected(AValue: boolean);
procedure UpdateHistoryButtons;
procedure UpdateProgress; procedure UpdateProgress;
procedure LoadWikiPage(Documentname, Anchor: string; AddToHistory: boolean);
procedure LoadHTML(Target: TIpHtmlPanel; HTML: string); overload; procedure LoadHTML(Target: TIpHtmlPanel; HTML: string); overload;
procedure LoadHTML(Target: TIpHtmlPanel; aStream: TStream); overload; procedure LoadHTML(Target: TIpHtmlPanel; aStream: TStream); overload;
procedure ShowOptions;
procedure ViewSource(aTitle, aSource: string; aHighlighter: TSynCustomHighlighter); procedure ViewSource(aTitle, aSource: string; aHighlighter: TSynCustomHighlighter);
procedure WikiSearchOptsWndOptionsChanged(Sender: TObject); procedure WikiSearchOptsWndOptionsChanged(Sender: TObject);
procedure WikiHelpScanned(Sender: TObject); procedure WikiHelpScanned(Sender: TObject);
procedure WikiHelpSearched(Sender: TObject); procedure WikiHelpSearched(Sender: TObject);
procedure OnIdle(Sender: TObject; var {%H-}Done: Boolean); procedure OnIdle(Sender: TObject; var {%H-}Done: Boolean);
function GetLanguages: string;
public public
property IdleConnected: boolean read FIdleConnected write SetIdleConnected; property IdleConnected: boolean read FIdleConnected write SetIdleConnected;
procedure ShowOptions;
function GetLanguages: string;
property PageHistory: TWikiPageHistory read FPageHistory;
end; end;
var var
@ -105,6 +151,89 @@ var
implementation implementation
function TWikiPageHistory.GetItems(Index: integer): TWikiPageHistoryItem;
begin
Result:=TWikiPageHistoryItem(FItems[Index]);
end;
function TWikiPageHistory.GetCurrent: TWikiPageHistoryItem;
begin
if (CurrentIndex>=0) and (CurrentIndex<Count) then
Result:=Items[CurrentIndex]
else
Result:=nil;
end;
procedure TWikiPageHistory.SetCurrentIndex(AValue: integer);
var
NewValue: Integer;
begin
NewValue:=AValue;
if NewValue<-1 then NewValue:=-1;
if NewValue>=Count then NewValue:=Count-1;
if FCurrentIndex=NewValue then Exit;
FCurrentIndex:=NewValue;
end;
procedure TWikiPageHistory.SetMaxCount(AValue: integer);
begin
if FMaxCount=AValue then Exit;
FMaxCount:=AValue;
end;
constructor TWikiPageHistory.Create;
begin
FItems:=TFPList.Create;
end;
destructor TWikiPageHistory.Destroy;
begin
Clear;
FreeAndNil(FItems);
inherited Destroy;
end;
procedure TWikiPageHistory.Clear;
var
i: Integer;
begin
for i:=0 to FItems.Count-1 do
TObject(FItems[i]).Free;
FItems.Clear;
FCurrentIndex:=-1;
end;
function TWikiPageHistory.Count: integer;
begin
Result:=FItems.Count;
end;
function TWikiPageHistory.AddAfterCurrent(DocumentName, Anchor, Title: string
): TWikiPageHistoryItem;
begin
while Count>CurrentIndex+1 do
Delete(Count-1);
Result:=TWikiPageHistoryItem.Create(DocumentName,Anchor,Title);
FItems.Add(Result);
FCurrentIndex:=FItems.Count-1;
end;
procedure TWikiPageHistory.Delete(Index: integer);
begin
TObject(FItems[Index]).Free;
FItems.Delete(Index);
end;
{ TWikiPageHistoryItem }
constructor TWikiPageHistoryItem.Create(TheDocumentName, TheAnchor,
TheTitle: string);
begin
DocumentName:=TheDocumentName;
Anchor:=TheAnchor;
Title:=TheTitle;
end;
{ TWikiIpHtmlDataProvider } { TWikiIpHtmlDataProvider }
function TWikiIpHtmlDataProvider.DoGetStream(const URL: string): TStream; function TWikiIpHtmlDataProvider.DoGetStream(const URL: string): TStream;
@ -130,6 +259,8 @@ procedure TWikiSearchDemoForm.FormCreate(Sender: TObject);
var var
Code: TCodeBuffer; Code: TCodeBuffer;
begin begin
FPageHistory:=TWikiPageHistory.Create;
Caption:='Search Wiki (Proof of concept)'; Caption:='Search Wiki (Proof of concept)';
// search panel // search panel
@ -140,10 +271,11 @@ begin
OptionsButton.Caption:='Options'; OptionsButton.Caption:='Options';
// page panel // page panel
ShowSearchToolButton.Caption:='Search'; ShowSearchToolButton.Hint:='Search';
ShowHTMLToolButton.Hint:='View HTML Source'; BackToolButton.Hint:='Go back one page';
ShowWikiSrcToolButton.Caption:='Source'; ForwardToolButton.Hint:='Go forward one page';
ShowWikiSrcToolButton.Hint:='View Wiki Source'; ViewHTMLMenuItem.Caption:='View HTML Source';
ViewWikiSourceMenuItem.Caption:='View Wiki Source';
FURLDataProvider:=TWikiIpHtmlDataProvider.Create(nil); FURLDataProvider:=TWikiIpHtmlDataProvider.Create(nil);
ResultsIpHtmlPanel.DataProvider:=FURLDataProvider; ResultsIpHtmlPanel.DataProvider:=FURLDataProvider;
@ -165,6 +297,7 @@ begin
if Code<>nil then if Code<>nil then
WikiHelp.ResultsCSS:=Code.Source; WikiHelp.ResultsCSS:=Code.Source;
UpdateHistoryButtons;
LoadHTML(ResultsIpHtmlPanel,''); LoadHTML(ResultsIpHtmlPanel,'');
LoadHTML(PageIpHtmlPanel,''); LoadHTML(PageIpHtmlPanel,'');
@ -180,6 +313,12 @@ begin
Result:=false; Result:=false;
end; end;
procedure TWikiSearchDemoForm.BackToolButtonClick(Sender: TObject);
begin
if PageHistory.CurrentIndex<=0 then exit;
GoToHistoryPage(PageHistory.CurrentIndex-1);
end;
procedure TWikiSearchDemoForm.DataProviderGetImage(Sender: TIpHtmlNode; procedure TWikiSearchDemoForm.DataProviderGetImage(Sender: TIpHtmlNode;
const URL: string; var Picture: TPicture); const URL: string; var Picture: TPicture);
var var
@ -209,15 +348,26 @@ end;
procedure TWikiSearchDemoForm.FormDestroy(Sender: TObject); procedure TWikiSearchDemoForm.FormDestroy(Sender: TObject);
begin begin
IdleConnected:=false; IdleConnected:=false;
// free tool windows
FreeAndNil(WikiSearchOptsWnd); FreeAndNil(WikiSearchOptsWnd);
// free pages before dataprovider // free pages before dataprovider
FreeAndNil(ResultsIpHtmlPanel); FreeAndNil(ResultsIpHtmlPanel);
FreeAndNil(PageIpHtmlPanel); FreeAndNil(PageIpHtmlPanel);
FreeAndNil(FURLDataProvider); FreeAndNil(FURLDataProvider);
FreeAndNil(FPageHistory);
FreeAndNil(WikiHelp); FreeAndNil(WikiHelp);
FreeAndNil(fLastScoring); FreeAndNil(fLastScoring);
end; end;
procedure TWikiSearchDemoForm.ForwardToolButtonClick(Sender: TObject);
begin
if PageHistory.CurrentIndex>=PageHistory.Count-1 then exit;
GoToHistoryPage(PageHistory.CurrentIndex+1);
end;
procedure TWikiSearchDemoForm.HideSearchButtonClick(Sender: TObject); procedure TWikiSearchDemoForm.HideSearchButtonClick(Sender: TObject);
begin begin
DisableAutoSizing; DisableAutoSizing;
@ -255,8 +405,6 @@ var
HotNode: TIpHtmlNode; HotNode: TIpHtmlNode;
HRef: String; HRef: String;
Panel: TIpHtmlPanel; Panel: TIpHtmlPanel;
ms: TMemoryStream;
Src: String;
DocumentName: String; DocumentName: String;
p: SizeInt; p: SizeInt;
AnchorName: String; AnchorName: String;
@ -277,39 +425,14 @@ begin
exit; exit;
end; end;
// open page in PageIpHtmlPanel // load wiki page
ms:=TMemoryStream.Create;
try
try
DocumentName:=HRef; DocumentName:=HRef;
p:=Pos('#',DocumentName); p:=Pos('#',DocumentName);
if p>0 then begin if p>0 then begin
DocumentName:=LeftStr(DocumentName,p-1); DocumentName:=LeftStr(DocumentName,p-1);
AnchorName:=copy(DocumentName,p+1,length(DocumentName)); AnchorName:=copy(DocumentName,p+1,length(DocumentName));
// ToDo: anchor
end;
WikiHelp.SavePageToStream(DocumentName,ms);
ms.Position:=0;
SetLength(Src,ms.Size);
if Src<>'' then
ms.Read(Src[1],length(Src));
ms.Position:=0;
LoadHTML(PageIpHtmlPanel,ms);
FPageDocumentName:=DocumentName;
FPageAnchor:=AnchorName;
FPageSource:=Src;
except
on E: Exception do begin
Src:='<html><body>Error: '+EncodeLesserAndGreaterThan(E.Message)+'</body></html>';
LoadHTML(PageIpHtmlPanel,Src);
FPageDocumentName:='';
FPageAnchor:='';
FPageSource:=Src;
end;
end;
finally
ms.Free;
end; end;
LoadWikiPage(DocumentName,AnchorName,true);
end; end;
procedure TWikiSearchDemoForm.OptionsButtonClick(Sender: TObject); procedure TWikiSearchDemoForm.OptionsButtonClick(Sender: TObject);
@ -317,12 +440,18 @@ begin
ShowOptions; ShowOptions;
end; end;
procedure TWikiSearchDemoForm.PagePopupMenuPopup(Sender: TObject);
begin
ViewHTMLMenuItem.Enabled:=FPageDocumentName<>'';
ViewWikiSourceMenuItem.Enabled:=FPageDocumentName<>'';
end;
procedure TWikiSearchDemoForm.SearchEditChange(Sender: TObject); procedure TWikiSearchDemoForm.SearchEditChange(Sender: TObject);
begin begin
IdleConnected:=true; IdleConnected:=true;
end; end;
procedure TWikiSearchDemoForm.ShowHTMLToolButtonClick(Sender: TObject); procedure TWikiSearchDemoForm.ViewHTMLMenuItemClick(Sender: TObject);
begin begin
if (FPageDocumentName='') then exit; if (FPageDocumentName='') then exit;
ViewSource('HTML of '+FPageDocumentName,FPageSource,SynHTMLSyn1); ViewSource('HTML of '+FPageDocumentName,FPageSource,SynHTMLSyn1);
@ -342,7 +471,7 @@ begin
end; end;
end; end;
procedure TWikiSearchDemoForm.ShowWikiSrcToolButtonClick(Sender: TObject); procedure TWikiSearchDemoForm.ViewWikiSourceMenuItemClick(Sender: TObject);
var var
Page: TW2FormatPage; Page: TW2FormatPage;
begin begin
@ -404,6 +533,16 @@ begin
Timer1.Enabled:=true; Timer1.Enabled:=true;
end; end;
procedure TWikiSearchDemoForm.GoToHistoryPage(Index: integer);
var
CurPage: TWikiPageHistoryItem;
begin
PageHistory.CurrentIndex:=Index;
CurPage:=PageHistory.Current;
LoadWikiPage(CurPage.DocumentName, CurPage.Anchor, false);
UpdateHistoryButtons;
end;
procedure TWikiSearchDemoForm.SetIdleConnected(AValue: boolean); procedure TWikiSearchDemoForm.SetIdleConnected(AValue: boolean);
begin begin
if FIdleConnected=AValue then Exit; if FIdleConnected=AValue then Exit;
@ -414,12 +553,64 @@ begin
Application.RemoveOnIdleHandler(@OnIdle); Application.RemoveOnIdleHandler(@OnIdle);
end; end;
procedure TWikiSearchDemoForm.UpdateHistoryButtons;
begin
BackToolButton.Visible:=PageHistory.CurrentIndex>0;
ForwardToolButton.Visible:=PageHistory.CurrentIndex+1<PageHistory.Count;
end;
procedure TWikiSearchDemoForm.UpdateProgress; procedure TWikiSearchDemoForm.UpdateProgress;
begin begin
ProgressLabel.Caption:=WikiHelp.GetProgressCaption; ProgressLabel.Caption:=WikiHelp.GetProgressCaption;
Timer1.Enabled:=WikiHelp.Busy; Timer1.Enabled:=WikiHelp.Busy;
end; end;
procedure TWikiSearchDemoForm.LoadWikiPage(Documentname, Anchor: string;
AddToHistory: boolean);
var
ms: TMemoryStream;
Src: string;
Page: TW2FormatPage;
begin
// open page in PageIpHtmlPanel
ms:=TMemoryStream.Create;
try
try
WikiHelp.SavePageToStream(DocumentName,ms);
Page:=WikiHelp.Converter.GetPageWithDocumentName(Documentname);
ms.Position:=0;
SetLength(Src,ms.Size);
if Src<>'' then
ms.Read(Src[1],length(Src));
ms.Position:=0;
// ToDo: anchor
LoadHTML(PageIpHtmlPanel,ms);
FPageDocumentName:=DocumentName;
FPageAnchor:=Anchor;
FPageSource:=Src;
if (Page<>nil) and (Page.WikiPage<>nil) then
FPageTitle:=Page.WikiPage.Title
else
FPageTitle:=Documentname;
except
on E: Exception do begin
FPageDocumentName:='';
FPageAnchor:='';
FPageSource:=Src;
FPageTitle:='Error: '+E.Message;
Src:='<html><body>'+EncodeLesserAndGreaterThan(FPageTitle)+'</body></html>';
LoadHTML(PageIpHtmlPanel,Src);
end;
end;
finally
ms.Free;
end;
if AddToHistory and (FPageDocumentName<>'') then begin
PageHistory.AddAfterCurrent(FPageDocumentName,FPageAnchor,FPageTitle);
UpdateHistoryButtons;
end;
end;
procedure TWikiSearchDemoForm.LoadHTML(Target: TIpHtmlPanel; HTML: string); procedure TWikiSearchDemoForm.LoadHTML(Target: TIpHtmlPanel; HTML: string);
var var
ms: TMemoryStream; ms: TMemoryStream;