summaryrefslogtreecommitdiff
path: root/packages/fcl-web/examples/webdata
diff options
context:
space:
mode:
authormichael <michael@3ad0048d-3df7-0310-abae-a5850022a9f2>2010-05-27 14:06:12 +0000
committermichael <michael@3ad0048d-3df7-0310-abae-a5850022a9f2>2010-05-27 14:06:12 +0000
commit7dd6357f616913a5bce8886fee5f4dea165b033f (patch)
treeb6ec5d7b950b1977a97dec5e30920ec91d920cc1 /packages/fcl-web/examples/webdata
parenta4f9e2eabbbc9fc348e760961a930107d3a7711c (diff)
downloadfpc-7dd6357f616913a5bce8886fee5f4dea165b033f.tar.gz
* Examples added
git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@15333 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'packages/fcl-web/examples/webdata')
-rw-r--r--packages/fcl-web/examples/webdata/demo/createusers.lpi77
-rw-r--r--packages/fcl-web/examples/webdata/demo/createusers.lpr136
-rw-r--r--packages/fcl-web/examples/webdata/demo/extgrid-json.html11
-rw-r--r--packages/fcl-web/examples/webdata/demo/extgrid-json.js95
-rw-r--r--packages/fcl-web/examples/webdata/demo/extgrid-xml.html11
-rw-r--r--packages/fcl-web/examples/webdata/demo/extgrid-xml.js98
-rw-r--r--packages/fcl-web/examples/webdata/demo/extgrid.lpi73
-rw-r--r--packages/fcl-web/examples/webdata/demo/extgrid.lpr14
-rw-r--r--packages/fcl-web/examples/webdata/demo/lazwebdata.pas22
-rw-r--r--packages/fcl-web/examples/webdata/demo/reglazwebdata.pp78
-rw-r--r--packages/fcl-web/examples/webdata/demo/wmusers.lfm36
-rw-r--r--packages/fcl-web/examples/webdata/demo/wmusers.lrs12
-rw-r--r--packages/fcl-web/examples/webdata/demo/wmusers.pp337
-rw-r--r--packages/fcl-web/examples/webdata/demo2/extgrid-json.html11
-rw-r--r--packages/fcl-web/examples/webdata/demo2/extgrid-json.js97
-rw-r--r--packages/fcl-web/examples/webdata/demo2/extgrid-xml.html11
-rw-r--r--packages/fcl-web/examples/webdata/demo2/extgrid-xml.js100
-rw-r--r--packages/fcl-web/examples/webdata/demo2/extgrid.lpi84
-rw-r--r--packages/fcl-web/examples/webdata/demo2/extgrid.lpr16
-rw-r--r--packages/fcl-web/examples/webdata/demo2/wmusers.lfm46
-rw-r--r--packages/fcl-web/examples/webdata/demo2/wmusers.lrs18
-rw-r--r--packages/fcl-web/examples/webdata/demo2/wmusers.pp86
-rw-r--r--packages/fcl-web/examples/webdata/demo3/extgrid-json.html11
-rw-r--r--packages/fcl-web/examples/webdata/demo3/extgrid-json.js97
-rw-r--r--packages/fcl-web/examples/webdata/demo3/extgrid-xml.html11
-rw-r--r--packages/fcl-web/examples/webdata/demo3/extgrid-xml.js100
-rw-r--r--packages/fcl-web/examples/webdata/demo3/extgrid.lpi334
-rw-r--r--packages/fcl-web/examples/webdata/demo3/extgrid.lpr16
-rw-r--r--packages/fcl-web/examples/webdata/demo3/tralala.lfm9
-rw-r--r--packages/fcl-web/examples/webdata/demo3/tralala.lrs7
-rw-r--r--packages/fcl-web/examples/webdata/demo3/tralala.pp28
-rw-r--r--packages/fcl-web/examples/webdata/demo3/wmusers.lfm49
-rw-r--r--packages/fcl-web/examples/webdata/demo3/wmusers.lrs21
-rw-r--r--packages/fcl-web/examples/webdata/demo3/wmusers.pp68
-rw-r--r--packages/fcl-web/examples/webdata/demo4/dmusers.lfm27
-rw-r--r--packages/fcl-web/examples/webdata/demo4/dmusers.lrs12
-rw-r--r--packages/fcl-web/examples/webdata/demo4/dmusers.pp52
-rw-r--r--packages/fcl-web/examples/webdata/demo4/extgrid-json.html11
-rw-r--r--packages/fcl-web/examples/webdata/demo4/extgrid-json.js97
-rw-r--r--packages/fcl-web/examples/webdata/demo4/extgrid-xml.html11
-rw-r--r--packages/fcl-web/examples/webdata/demo4/extgrid-xml.js100
-rw-r--r--packages/fcl-web/examples/webdata/demo4/extgrid.lpi93
-rw-r--r--packages/fcl-web/examples/webdata/demo4/extgrid.lpr15
-rw-r--r--packages/fcl-web/examples/webdata/demo4/wmjsonusers.lfm18
-rw-r--r--packages/fcl-web/examples/webdata/demo4/wmjsonusers.lrs11
-rw-r--r--packages/fcl-web/examples/webdata/demo4/wmjsonusers.pp34
-rw-r--r--packages/fcl-web/examples/webdata/demo4/wmxmlusers.lfm18
-rw-r--r--packages/fcl-web/examples/webdata/demo4/wmxmlusers.lrs11
-rw-r--r--packages/fcl-web/examples/webdata/demo4/wmxmlusers.pp34
-rw-r--r--packages/fcl-web/examples/webdata/demo5/extgrid-json.html11
-rw-r--r--packages/fcl-web/examples/webdata/demo5/extgrid-json.js97
-rw-r--r--packages/fcl-web/examples/webdata/demo5/extgrid-xml.html11
-rw-r--r--packages/fcl-web/examples/webdata/demo5/extgrid-xml.js100
-rw-r--r--packages/fcl-web/examples/webdata/demo5/extgrid.lpi75
-rw-r--r--packages/fcl-web/examples/webdata/demo5/extgrid.lpr15
-rw-r--r--packages/fcl-web/examples/webdata/demo5/wmusers.lfm29
-rw-r--r--packages/fcl-web/examples/webdata/demo5/wmusers.lrs15
-rw-r--r--packages/fcl-web/examples/webdata/demo5/wmusers.pp85
-rw-r--r--packages/fcl-web/examples/webdata/demo6/extgrid-json.html11
-rw-r--r--packages/fcl-web/examples/webdata/demo6/extgrid-json.js97
-rw-r--r--packages/fcl-web/examples/webdata/demo6/extgrid-xml.html11
-rw-r--r--packages/fcl-web/examples/webdata/demo6/extgrid-xml.js100
-rw-r--r--packages/fcl-web/examples/webdata/demo6/extgrid.ini4
-rw-r--r--packages/fcl-web/examples/webdata/demo6/extgrid.lpi362
-rw-r--r--packages/fcl-web/examples/webdata/demo6/extgrid.lpr16
-rw-r--r--packages/fcl-web/examples/webdata/demo6/wmusers.lfm131
-rw-r--r--packages/fcl-web/examples/webdata/demo6/wmusers.lrs43
-rw-r--r--packages/fcl-web/examples/webdata/demo6/wmusers.pp107
-rw-r--r--packages/fcl-web/examples/webdata/demos.txt40
-rw-r--r--packages/fcl-web/examples/webdata/users.dbfbin0 -> 2598 bytes
70 files changed, 4124 insertions, 0 deletions
diff --git a/packages/fcl-web/examples/webdata/demo/createusers.lpi b/packages/fcl-web/examples/webdata/demo/createusers.lpi
new file mode 100644
index 0000000000..4fd6fedf28
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo/createusers.lpi
@@ -0,0 +1,77 @@
+<?xml version="1.0"?>
+<CONFIG>
+ <ProjectOptions>
+ <Version Value="7"/>
+ <General>
+ <Flags>
+ <MainUnitHasCreateFormStatements Value="False"/>
+ <MainUnitHasTitleStatement Value="False"/>
+ </Flags>
+ <MainUnit Value="0"/>
+ <TargetFileExt Value=""/>
+ <Icon Value="0"/>
+ <UseXPManifest Value="True"/>
+ </General>
+ <VersionInfo>
+ <ProjectVersion Value=""/>
+ <Language Value=""/>
+ <CharSet Value=""/>
+ </VersionInfo>
+ <PublishOptions>
+ <Version Value="2"/>
+ <IgnoreBinaries Value="False"/>
+ <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
+ <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/>
+ </PublishOptions>
+ <RunParams>
+ <local>
+ <FormatVersion Value="1"/>
+ <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
+ </local>
+ </RunParams>
+ <Units Count="2">
+ <Unit0>
+ <Filename Value="createusers.lpr"/>
+ <IsPartOfProject Value="True"/>
+ <UnitName Value="createusers"/>
+ <CursorPos X="16" Y="35"/>
+ <TopLine Value="15"/>
+ <UsageCount Value="20"/>
+ </Unit0>
+ <Unit1>
+ <Filename Value="../../fpc/packages/fcl-db/src/dbase/dbf.pas"/>
+ <UnitName Value="dbf"/>
+ <CursorPos X="3" Y="1477"/>
+ <TopLine Value="1436"/>
+ <UsageCount Value="10"/>
+ </Unit1>
+ </Units>
+ <JumpHistory Count="0" HistoryIndex="-1"/>
+ </ProjectOptions>
+ <CompilerOptions>
+ <Version Value="8"/>
+ <Target>
+ <Filename Value="createusers"/>
+ </Target>
+ <SearchPaths>
+ <IncludeFiles Value="$(ProjOutDir)/"/>
+ <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/>
+ </SearchPaths>
+ <Other>
+ <CompilerPath Value="$(CompPath)"/>
+ </Other>
+ </CompilerOptions>
+ <Debugging>
+ <Exceptions Count="3">
+ <Item1>
+ <Name Value="EAbort"/>
+ </Item1>
+ <Item2>
+ <Name Value="ECodetoolError"/>
+ </Item2>
+ <Item3>
+ <Name Value="EFOpenError"/>
+ </Item3>
+ </Exceptions>
+ </Debugging>
+</CONFIG>
diff --git a/packages/fcl-web/examples/webdata/demo/createusers.lpr b/packages/fcl-web/examples/webdata/demo/createusers.lpr
new file mode 100644
index 0000000000..229679c55b
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo/createusers.lpr
@@ -0,0 +1,136 @@
+program createusers;
+
+{$mode objfpc}{$H+}
+
+uses
+ {$IFDEF UNIX}{$IFDEF UseCThreads}
+ cthreads,
+ {$ENDIF}{$ENDIF}
+ Classes, SysUtils, dbf, CustApp, db
+ { you can add units after this };
+
+type
+
+ { TMyApplication }
+
+ TMyApplication = class(TCustomApplication)
+ private
+ procedure CreateUsers(DS: TDataset);
+ protected
+ procedure DoRun; override;
+ public
+ constructor Create(TheOwner: TComponent); override;
+ destructor Destroy; override;
+ procedure WriteHelp; virtual;
+ end;
+
+{ TMyApplication }
+
+Type
+ TUserRecord = Record
+ L,N,E : string;
+ end;
+
+Const
+ UserCount = 8;
+ Users : Array[1..UserCount] of TUserRecord = (
+ (L:'Daniel';N:'Daniel mantione'; E:'daniel@freepascal.org'),
+ (L:'Florian';N:'Florian Klaempfl'; E:'florian@freepascal.org'),
+ (L:'Joost';N:'Joost van der Sluis'; E:'joost@freepascal.org'),
+ (L:'Jonas';N:'Jonas Maebe'; E:'jonas@freepascal.org'),
+ (L:'Michael';N:'Michael van canneyt'; E:'michael@freepascal.org'),
+ (L:'Marco';N:'Marco Van De Voort'; E:'marco@freepascal.org'),
+ (L:'Pierre';N:'Pierre Muller'; E:'pierre@freepascal.org'),
+ (L:'Tomas';N:'Tomas Hajny'; E:'tomas@freepascal.org')
+ ) ;
+
+
+procedure TMyApplication.CreateUsers(DS : TDataset);
+
+Var
+ I : integer;
+
+begin
+ For I:=1 to UserCount do
+ begin
+ DS.Append;
+ DS.FieldByName('Login').AsString:=Users[i].L;
+ DS.FieldByName('Name').AsString:=Users[i].N;
+ DS.FieldByName('Email').AsString:=Users[i].E;
+ If Random(2)<1 then
+ DS.FieldByname('LastLogin').AsDatetime:=Date-Random(10);
+ DS.Post;
+ end;
+end;
+procedure TMyApplication.DoRun;
+var
+ ErrorMsg: String;
+ DB : TDBF;
+begin
+ // quick check parameters
+ ErrorMsg:=CheckOptions('h','help');
+ if ErrorMsg<>'' then begin
+ ShowException(Exception.Create(ErrorMsg));
+ Terminate;
+ Exit;
+ end;
+
+ // parse parameters
+ if HasOption('h','help') then begin
+ WriteHelp;
+ Terminate;
+ Exit;
+ end;
+
+ { add your program here }
+ DB:=TDBF.Create(Self);
+ try
+ With DB.FieldDefs do
+ begin
+ Add('ID',ftAutoInc,0,True);
+ Add('Login',ftString,30,true);
+ Add('Name',ftString,50,True);
+ Add('Email',ftString,50,False);
+ Add('LastLogin',ftDate,0,False);
+ end;
+ DB.TableName:='users.dbf';
+ DB.TableLevel:=7;
+ DB.CreateTable;
+ DB.Open;
+ CreateUsers(DB);
+ finally
+ DB.Free;
+ end;
+ // stop program loop
+ Terminate;
+end;
+
+constructor TMyApplication.Create(TheOwner: TComponent);
+begin
+ inherited Create(TheOwner);
+ StopOnException:=True;
+end;
+
+destructor TMyApplication.Destroy;
+begin
+ inherited Destroy;
+end;
+
+procedure TMyApplication.WriteHelp;
+begin
+ { add your help code here }
+ writeln('Usage: ',ExeName,' -h');
+end;
+
+var
+ Application: TMyApplication;
+
+{$IFDEF WINDOWS}{$R createusers.rc}{$ENDIF}
+
+begin
+ Application:=TMyApplication.Create(nil);
+ Application.Title:='My Application';
+ Application.Run;
+ Application.Free;
+end.
+
diff --git a/packages/fcl-web/examples/webdata/demo/extgrid-json.html b/packages/fcl-web/examples/webdata/demo/extgrid-json.html
new file mode 100644
index 0000000000..b24b57ac43
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo/extgrid-json.html
@@ -0,0 +1,11 @@
+<html>
+<head>
+<title>ExtJS JSON Data demo</title>
+<link rel="stylesheet" type="text/css" href="/ext/resources/css/ext-all.css"/>
+<script src="/ext/adapter/ext/ext-base.js"></script>
+<script src="/ext/ext-all-debug.js"></script>
+<script src="extgrid-json.js"></script>
+</head>
+<body>
+</body>
+</html> \ No newline at end of file
diff --git a/packages/fcl-web/examples/webdata/demo/extgrid-json.js b/packages/fcl-web/examples/webdata/demo/extgrid-json.js
new file mode 100644
index 0000000000..61ec0e62e2
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo/extgrid-json.js
@@ -0,0 +1,95 @@
+Ext.ns('FPC');
+
+FPC.ShowPage = function () {
+ var myproxy = new Ext.data.HttpProxy ( {
+ api : {
+ read: "extgrid.cgi/Provider/Read/name/",
+ update: "extgrid.cgi/Provider/Update/name/",
+ create: "extgrid.cgi/Provider/Insert/name/",
+ destroy: "extgrid.cgi/Provider/Delete/name/"
+ }
+ });
+ var myreader = new Ext.data.JsonReader ({
+ root: "rows",
+ idProperty: "ID",
+ messageProperty: 'message', // Must be specified here
+ fields: ["ID","LOGIN","NAME","EMAIL", "LASTLOGIN"]
+ });
+ var mywriter = new Ext.data.JsonWriter({
+ encode: true,
+ writeAllFields: true,
+ idProperty: "ID"
+ });
+ var data = new Ext.data.Store({
+ proxy: myproxy,
+ reader: myreader,
+ writer: mywriter,
+ autoSave: false,
+ idProperty: "ID",
+ });
+ // Listen to errors.
+ data.addListener('exception', function(proxy, type, action, options, res) {
+ if (type === 'remote') {
+ Ext.Msg.show({
+ title: 'REMOTE EXCEPTION',
+ msg: res.message,
+ icon: Ext.MessageBox.ERROR,
+ buttons: Ext.Msg.OK
+ });
+ }
+ });
+ data.load({ params:{start: 0, limit: 30}});
+ var grid = new Ext.grid.EditorGridPanel({
+ renderTo: Ext.getBody(),
+ frame: true,
+ title: "Known users",
+ height: 600,
+ width: 800,
+ store: data,
+ columns: [
+ {header: 'ID', dataIndex: "ID", sortable: true, hidden: true},
+ {header: 'Login', dataIndex: "LOGIN", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+ {header: 'Name', dataIndex: "NAME", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+ {header: 'Email', dataIndex: "EMAIL", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+ {header: 'Last login', dataIndex: "LASTLOGIN", sortable: true, editor: new Ext.form.TextField()},
+ ],
+ bbar: new Ext.PagingToolbar({
+ pageSize: 30,
+ store: data,
+ displayInfo: true
+ }),
+ tbar : [{
+ text: 'Add',
+ iconCls: 'icon-add',
+ handler: function(btn, ev) {
+ var u = new grid.store.recordType();
+ grid.stopEditing();
+ grid.store.insert(0, u);
+ grid.startEditing(0, 1);
+ },
+ scope: grid
+ }, '-', {
+ text: 'Delete',
+ iconCls: 'icon-delete',
+ handler: function(btn, ev) {
+ var index = grid.getSelectionModel().getSelectedCell();
+ if (!index) {
+ return false;
+ }
+ var rec = grid.store.getAt(index[0]);
+ grid.store.remove(rec);
+ },
+ scope: grid
+ }, '-', {
+ text: 'Save',
+ iconCls: 'icon-save',
+ handler: function(btn, ev) {
+ grid.store.save();
+ },
+ scope: grid
+ }
+ ]
+ });
+ grid.show();
+}
+Ext.onReady(FPC.ShowPage);
diff --git a/packages/fcl-web/examples/webdata/demo/extgrid-xml.html b/packages/fcl-web/examples/webdata/demo/extgrid-xml.html
new file mode 100644
index 0000000000..d01e2971e3
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo/extgrid-xml.html
@@ -0,0 +1,11 @@
+<html>
+<head>
+<title>ExtJS XML Data demo</title>
+<link rel="stylesheet" type="text/css" href="/ext/resources/css/ext-all.css"/>
+<script src="/ext/adapter/ext/ext-base.js"></script>
+<script src="/ext/ext-all-debug.js"></script>
+<script src="extgrid-xml.js"></script>
+</head>
+<body>
+</body>
+</html> \ No newline at end of file
diff --git a/packages/fcl-web/examples/webdata/demo/extgrid-xml.js b/packages/fcl-web/examples/webdata/demo/extgrid-xml.js
new file mode 100644
index 0000000000..c2bcf94c89
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo/extgrid-xml.js
@@ -0,0 +1,98 @@
+Ext.ns('FPC');
+
+FPC.ShowPage = function () {
+ var myproxy = new Ext.data.HttpProxy ( {
+ api : {
+ read: "extgrid.cgi/Provider/Read/name/?format=xml",
+ update: "extgrid.cgi/Provider/Update/name/?format=xml",
+ create: "extgrid.cgi/Provider/Insert/name/?format=xml",
+ destroy: "extgrid.cgi/Provider/Delete/name/?format=xml",
+ }
+ });
+ var myreader = new Ext.data.XmlReader ({
+ totalProperty: "total",
+ record: "row",
+ idProperty: "ID",
+ successProperty: "success",
+ messageProperty: "message",
+ fields: ["ID", "LOGIN", "NAME","EMAIL","LASTLOGIN"]
+ });
+ var mywriter = new Ext.data.XmlWriter({
+ encode: true,
+ writeAllFields: true,
+ idProperty: "ID",
+ root: "records"
+ });
+ var data = new Ext.data.Store({
+ proxy: myproxy,
+ reader: myreader,
+ writer: mywriter,
+ autoSave: false,
+ idProperty: "ID",
+ });
+ // Listen to errors.
+ data.addListener('exception', function(proxy, type, action, options, res) {
+ if (type === 'remote') {
+ Ext.Msg.show({
+ title: 'REMOTE EXCEPTION',
+ msg: res.message,
+ icon: Ext.MessageBox.ERROR,
+ buttons: Ext.Msg.OK
+ });
+ }
+ });
+ data.load({ params:{start: 0, limit: 30}});
+ var grid = new Ext.grid.EditorGridPanel({
+ renderTo: Ext.getBody(),
+ frame: true,
+ title: "Known users",
+ height: 600,
+ width: 800,
+ store: data,
+ columns: [
+ {header: 'ID', dataIndex: "ID", sortable: true, hidden: true},
+ {header: 'Login', dataIndex: "LOGIN", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+ {header: 'Name', dataIndex: "NAME", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+ {header: 'Email', dataIndex: "EMAIL", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+ {header: 'Last login', dataIndex: "LASTLOGIN", sortable: true, editor: new Ext.form.TextField()},
+ ],
+ bbar: new Ext.PagingToolbar({
+ pageSize: 30,
+ store: data,
+ displayInfo: true
+ }),
+ tbar : [{
+ text: 'Add',
+ iconCls: 'icon-add',
+ handler: function(btn, ev) {
+ var u = new grid.store.recordType();
+ grid.stopEditing();
+ grid.store.insert(0, u);
+ grid.startEditing(0, 1);
+ },
+ scope: grid
+ }, '-', {
+ text: 'Delete',
+ iconCls: 'icon-delete',
+ handler: function(btn, ev) {
+ var index = grid.getSelectionModel().getSelectedCell();
+ if (!index) {
+ return false;
+ }
+ var rec = grid.store.getAt(index[0]);
+ grid.store.remove(rec);
+ },
+ scope: grid
+ }, '-', {
+ text: 'Save',
+ iconCls: 'icon-save',
+ handler: function(btn, ev) {
+ grid.store.save();
+ },
+ scope: grid
+ }
+ ]
+ });
+ grid.show();
+}
+Ext.onReady(FPC.ShowPage);
diff --git a/packages/fcl-web/examples/webdata/demo/extgrid.lpi b/packages/fcl-web/examples/webdata/demo/extgrid.lpi
new file mode 100644
index 0000000000..d3e8af3c62
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo/extgrid.lpi
@@ -0,0 +1,73 @@
+<?xml version="1.0"?>
+<CONFIG>
+ <ProjectOptions>
+ <Version Value="7"/>
+ <General>
+ <Flags>
+ <SaveClosedFiles Value="False"/>
+ <SaveOnlyProjectUnits Value="True"/>
+ <MainUnitHasCreateFormStatements Value="False"/>
+ <Runnable Value="False"/>
+ </Flags>
+ <SessionStorage Value="InProjectDir"/>
+ <MainUnit Value="0"/>
+ <TargetFileExt Value=""/>
+ <Icon Value="0"/>
+ <UseXPManifest Value="True"/>
+ </General>
+ <VersionInfo>
+ <ProjectVersion Value=""/>
+ </VersionInfo>
+ <PublishOptions>
+ <Version Value="2"/>
+ <IgnoreBinaries Value="False"/>
+ <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
+ <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/>
+ </PublishOptions>
+ <RunParams>
+ <local>
+ <FormatVersion Value="1"/>
+ <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
+ </local>
+ </RunParams>
+ <RequiredPackages Count="3">
+ <Item1>
+ <PackageName Value="DBFLaz"/>
+ <MinVersion Minor="1" Release="1" Valid="True"/>
+ </Item1>
+ <Item2>
+ <PackageName Value="WebLaz"/>
+ </Item2>
+ <Item3>
+ <PackageName Value="FCL"/>
+ </Item3>
+ </RequiredPackages>
+ <Units Count="2">
+ <Unit0>
+ <Filename Value="extgrid.lpr"/>
+ <IsPartOfProject Value="True"/>
+ <UnitName Value="extgrid"/>
+ </Unit0>
+ <Unit1>
+ <Filename Value="wmusers.pp"/>
+ <IsPartOfProject Value="True"/>
+ <ComponentName Value="FPWebModule1"/>
+ <ResourceBaseClass Value="DataModule"/>
+ <UnitName Value="wmusers"/>
+ </Unit1>
+ </Units>
+ </ProjectOptions>
+ <CompilerOptions>
+ <Version Value="8"/>
+ <Target>
+ <Filename Value="extgrid.cgi"/>
+ </Target>
+ <SearchPaths>
+ <IncludeFiles Value="$(ProjOutDir)/"/>
+ <OtherUnitFiles Value="/home/michael/public_html/extjs/"/>
+ </SearchPaths>
+ <Other>
+ <CompilerPath Value="$(CompPath)"/>
+ </Other>
+ </CompilerOptions>
+</CONFIG>
diff --git a/packages/fcl-web/examples/webdata/demo/extgrid.lpr b/packages/fcl-web/examples/webdata/demo/extgrid.lpr
new file mode 100644
index 0000000000..4bd1d4e7e0
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo/extgrid.lpr
@@ -0,0 +1,14 @@
+program extgrid;
+
+{$mode objfpc}{$H+}
+
+uses
+ fpCGI, wmusers;
+
+{$IFDEF WINDOWS}{$R extgrid.rc}{$ENDIF}
+
+begin
+ Application.Initialize;
+ Application.Run;
+end.
+
diff --git a/packages/fcl-web/examples/webdata/demo/lazwebdata.pas b/packages/fcl-web/examples/webdata/demo/lazwebdata.pas
new file mode 100644
index 0000000000..82eddff8a2
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo/lazwebdata.pas
@@ -0,0 +1,22 @@
+{ This file was automatically created by Lazarus. do not edit!
+ This source is only used to compile and install the package.
+ }
+
+unit lazwebdata;
+
+interface
+
+uses
+ reglazwebdata, extjsjson, extjsxml, fpextjs, fpwebdata, sqldbwebdata,
+ LazarusPackageIntf;
+
+implementation
+
+procedure Register;
+begin
+ RegisterUnit('reglazwebdata', @reglazwebdata.Register);
+end;
+
+initialization
+ RegisterPackage('lazwebdata', @Register);
+end.
diff --git a/packages/fcl-web/examples/webdata/demo/reglazwebdata.pp b/packages/fcl-web/examples/webdata/demo/reglazwebdata.pp
new file mode 100644
index 0000000000..f6f1e93ce2
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo/reglazwebdata.pp
@@ -0,0 +1,78 @@
+unit reglazwebdata;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes, SysUtils, fpwebdata, sqldbwebdata, LazIDEIntf, ProjectIntf, fpextjs, extjsjson, extjsxml;
+
+Type
+
+ { TFileDescWebProviderDataModule }
+
+ TFileDescWebProviderDataModule = class(TFileDescPascalUnitWithResource)
+ public
+ constructor Create; override;
+ function GetInterfaceUsesSection: string; override;
+ function GetLocalizedName: string; override;
+ function GetLocalizedDescription: string; override;
+ function GetImplementationSource(const Filename, SourceName, ResourceName: string): string;override;
+ end;
+
+Procedure Register;
+
+Var
+ FileDescriptorWebProviderDataModule: TFileDescWebProviderDataModule;
+
+implementation
+
+uses FormEditingIntf;
+
+constructor TFileDescWebProviderDataModule.Create;
+begin
+ inherited Create;
+ Name:='Web DataProvider Module';
+ ResourceClass:=TFPWebProviderDataModule;
+ UseCreateFormStatements:=False;
+end;
+
+function TFileDescWebProviderDataModule.GetInterfaceUsesSection: string;
+begin
+ Result:=inherited GetInterfaceUsesSection;
+ Result:=Result+', HTTPDefs, websession, fpHTTP, fpWeb, fpwebdata';
+end;
+
+function TFileDescWebProviderDataModule.GetLocalizedName: string;
+begin
+ Result:='Web DataProvider Module';
+end;
+
+function TFileDescWebProviderDataModule.GetLocalizedDescription: string;
+begin
+ Result:='WEB DataProvider Module'#13
+ +'A datamodule to handle data requests for WEB (HTTP) applications using WebDataProvider components.';
+end;
+
+function TFileDescWebProviderDataModule.GetImplementationSource(const Filename,
+ SourceName, ResourceName: string): string;
+begin
+ Result:=Inherited GetImplementationSource(FileName,SourceName,ResourceName);
+ Result:=Result+' RegisterHTTPModule(''T'+ResourceName+''',T'+ResourceName+');'+LineEnding;
+end;
+
+
+Procedure Register;
+
+begin
+ RegisterComponents('fpWeb',[TWebdataInputAdaptor,TFPWebDataProvider, TSQLDBWebDataProvider,
+ TExtJSJSonWebdataInputAdaptor,TExtJSJSONDataFormatter,
+ TExtJSXMLWebdataInputAdaptor,TExtJSXMLDataFormatter]);
+ FileDescriptorWebProviderDataModule:=TFileDescWebProviderDataModule.Create;
+ RegisterProjectFileDescriptor(FileDescriptorWebProviderDataModule);
+ FormEditingHook.RegisterDesignerBaseClass(TFPCustomWebProviderDataModule);
+ FormEditingHook.RegisterDesignerBaseClass(TFPWebProviderDataModule);
+end;
+
+end.
+
diff --git a/packages/fcl-web/examples/webdata/demo/wmusers.lfm b/packages/fcl-web/examples/webdata/demo/wmusers.lfm
new file mode 100644
index 0000000000..4093613b2b
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo/wmusers.lfm
@@ -0,0 +1,36 @@
+object FPWebModule1: TFPWebModule1
+ OldCreateOrder = False
+ Actions = <
+ item
+ Name = 'Read'
+ Default = False
+ OnRequest = TFPWebActions0Request
+ end
+ item
+ Name = 'Insert'
+ Default = False
+ OnRequest = TFPWebActions1Request
+ end
+ item
+ Name = 'Update'
+ Default = False
+ OnRequest = TFPWebActions2Request
+ end
+ item
+ Name = 'Delete'
+ Default = False
+ OnRequest = TFPWebActions3Request
+ end>
+ CreateSession = False
+ Height = 300
+ HorizontalOffset = 696
+ VerticalOffset = 366
+ Width = 400
+ object Dbf1: TDbf
+ IndexDefs = <>
+ TableLevel = 4
+ FilterOptions = []
+ left = 23
+ top = 53
+ end
+end
diff --git a/packages/fcl-web/examples/webdata/demo/wmusers.lrs b/packages/fcl-web/examples/webdata/demo/wmusers.lrs
new file mode 100644
index 0000000000..1ef43fbfcb
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo/wmusers.lrs
@@ -0,0 +1,12 @@
+{ This is an automatically generated lazarus resource file }
+
+LazarusResources.Add('TFPWebModule1','FORMDATA',[
+ 'TPF0'#13'TFPWebModule1'#12'FPWebModule1'#14'OldCreateOrder'#8#7'Actions'#14#1
+ +#4'Name'#6#4'Read'#7'Default'#8#9'OnRequest'#7#21'TFPWebActions0Request'#0#1
+ +#4'Name'#6#6'Insert'#7'Default'#8#9'OnRequest'#7#21'TFPWebActions1Request'#0
+ +#1#4'Name'#6#6'Update'#7'Default'#8#9'OnRequest'#7#21'TFPWebActions2Request'
+ +#0#1#4'Name'#6#6'Delete'#7'Default'#8#9'OnRequest'#7#21'TFPWebActions3Reques'
+ +'t'#0#0#13'CreateSession'#8#6'Height'#3','#1#16'HorizontalOffset'#3#184#2#14
+ +'VerticalOffset'#3'n'#1#5'Width'#3#144#1#0#4'TDbf'#4'Dbf1'#9'IndexDefs'#14#0
+ +#10'TableLevel'#2#4#13'FilterOptions'#11#0#4'left'#2#23#3'top'#2'5'#0#0#0
+]);
diff --git a/packages/fcl-web/examples/webdata/demo/wmusers.pp b/packages/fcl-web/examples/webdata/demo/wmusers.pp
new file mode 100644
index 0000000000..379b1a4920
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo/wmusers.pp
@@ -0,0 +1,337 @@
+unit wmusers;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes, SysUtils, FileUtil, LResources, HTTPDefs, websession, fpHTTP, fpWeb,
+ db, dbf, fpwebdata, fpextjs,extjsjson,extjsxml;
+
+type
+
+ { TFPWebModule1 }
+
+ TFPWebModule1 = class(TFPWebModule)
+ Dbf1: TDbf;
+ procedure TFPWebActions0Request(Sender: TObject; ARequest: TRequest;
+ AResponse: TResponse; var Handled: Boolean);
+ procedure TFPWebActions1Request(Sender: TObject; ARequest: TRequest;
+ AResponse: TResponse; var Handled: Boolean);
+ procedure TFPWebActions2Request(Sender: TObject; ARequest: TRequest;
+ AResponse: TResponse; var Handled: Boolean);
+ procedure TFPWebActions3Request(Sender: TObject; ARequest: TRequest;
+ AResponse: TResponse; var Handled: Boolean);
+ private
+ { private declarations }
+ public
+ { public declarations }
+ end;
+
+var
+ FPWebModule1: TFPWebModule1;
+
+implementation
+{$define wmdebug}
+
+{$ifdef wmdebug}
+uses dbugintf;
+{$endif}
+
+{ TFPWebModule1 }
+
+procedure TFPWebModule1.TFPWebActions0Request(Sender: TObject;
+ ARequest: TRequest; AResponse: TResponse; var Handled: Boolean);
+
+Var
+ PN : String;
+ P : TFPWebDataProvider;
+ F : TExtJSDataFormatter;
+ DS : TDatasource;
+ M : TMemoryStream;
+ L : Text;
+
+begin
+ // Providername;
+ PN:=ARequest.GetNextPathInfo;
+// P:=GetWebDataProvider(PN);
+ P:=TFPWebDataProvider.Create(Self);
+ try
+ P.Adaptor:=TWebDataInputAdaptor.Create(Self);
+ P.Adaptor.Request:=ARequest;
+ If Request.QueryFields.values['format']='xml' then
+ begin
+ F:=TExtJSXMLDataFormatter.Create(Self);
+ TExtJSXMLDataFormatter(F).TotalProperty:='total';
+ AResponse.ContentType:='text/xml';
+ end
+ else
+ F:=TExtJSJSONDataFormatter.Create(Self);
+ {$ifdef wmdebug} SendDebug(className+' '+F.ClassName);{$endif}
+ try
+ DS:=TDatasource.Create(Self);
+ try
+ DBF1.TableName:=ExtractFilePath(ParamStr(0))+'users.dbf';
+ DS.Dataset:=DBf1;
+ DBF1.Open;
+ try
+ F.ADaptor:=P.Adaptor;
+ P.Datasource:=DS;
+ P.Adaptor.Action:=wdaRead;
+ P.ApplyParams;
+ F.Provider:=P;
+ M:=TMemoryStream.Create;
+ try
+ F.GetContent(ARequest,M,Handled);
+ M.Position:=0;
+ Response.ContentStream:=M;
+ Response.SendResponse;
+ Response.ContentStream:=Nil;
+ With TFileStream.Create('/tmp/data.xml',fmCreate) do
+ try
+ CopyFrom(M,0);
+ finally
+ Free;
+ end;
+ finally
+ M.Free;
+ end;
+ finally
+ DBF1.Close;
+ end;
+ finally
+ DS.Free;
+ end;
+ finally
+ F.Free;
+ end;
+ finally
+ P.Free;
+ end;
+end;
+
+procedure TFPWebModule1.TFPWebActions1Request(Sender: TObject;
+ ARequest: TRequest; AResponse: TResponse; var Handled: Boolean);
+Var
+ PN : String;
+ P : TFPWebDataProvider;
+ F : TExtJSDataFormatter;
+ DS : TDatasource;
+ M : TMemoryStream;
+ L : Text;
+
+begin
+ // Providername;
+ PN:=ARequest.GetNextPathInfo;
+// P:=GetWebDataProvider(PN);
+ P:=TFPWebDataProvider.Create(Self);
+ try
+ P.IDFieldName:='ID';
+ If Request.QueryFields.values['format']='xml' then
+ begin
+ F:=TExtJSXMLDataFormatter.Create(Self);
+ AResponse.ContentType:='text/xml';
+ P.Adaptor:=TWebDataInputAdaptor.Create(Self);
+ end
+ else
+ begin
+ F:=TExtJSJSONDataFormatter.Create(Self);
+ P.Adaptor:=TExtJSJSonWebdataInputAdaptor.Create(Self);
+ end;
+ P.Adaptor.Request:=ARequest;
+ {$ifdef wmdebug} SendDebug(className+' '+F.ClassName);{$endif}
+ try
+ DS:=TDatasource.Create(Self);
+ try
+ DBF1.TableName:=ExtractFilePath(ParamStr(0))+'users.dbf';
+ DS.Dataset:=DBf1;
+ DBF1.Open;
+ try
+ F.ADaptor:=P.Adaptor;
+ P.Datasource:=DS;
+ P.Adaptor.Action:=wdaInsert;
+ P.ApplyParams;
+ F.Provider:=P;
+ M:=TMemoryStream.Create;
+ try
+ F.GetContent(ARequest,M,Handled);
+ M.Position:=0;
+ Response.ContentStream:=M;
+ Response.SendResponse;
+ Response.ContentStream:=Nil;
+ With TFileStream.Create('/tmp/data.xml',fmCreate) do
+ try
+ CopyFrom(M,0);
+ finally
+ Free;
+ end;
+ finally
+ M.Free;
+ end;
+ finally
+ DBF1.Close;
+ end;
+ finally
+ DS.Free;
+ end;
+ finally
+ F.Free;
+ end;
+ finally
+ P.Free;
+ end;
+end;
+
+procedure TFPWebModule1.TFPWebActions2Request(Sender: TObject;
+ ARequest: TRequest; AResponse: TResponse; var Handled: Boolean);
+Var
+ PN : String;
+ P : TFPWebDataProvider;
+ F : TExtJSDataFormatter;
+ DS : TDatasource;
+ M : TMemoryStream;
+ L : Text;
+
+begin
+ // Providername;
+ {$ifdef wmdebug} SendDebug('Update request received');{$endif}
+ PN:=ARequest.GetNextPathInfo;
+// P:=GetWebDataProvider(PN);
+ P:=TFPWebDataProvider.Create(Self);
+ try
+ P.IDFieldName:='ID';
+ If Request.QueryFields.values['format']='xml' then
+ begin
+ {$ifdef wmdebug} SendDebug('Update request received in XML');{$endif}
+ F:=TExtJSXMLDataFormatter.Create(Self);
+ AResponse.ContentType:='text/xml';
+ P.Adaptor:=TWebDataInputAdaptor.Create(Self);
+ end
+ else
+ begin
+ F:=TExtJSJSONDataFormatter.Create(Self);
+ P.Adaptor:=TExtJSJSonWebdataInputAdaptor.Create(Self);
+ end;
+ P.Adaptor.Request:=ARequest;
+ {$ifdef wmdebug} SendDebug(className+' '+F.ClassName);{$endif}
+ try
+ DS:=TDatasource.Create(Self);
+ try
+ DBF1.TableName:=ExtractFilePath(ParamStr(0))+'users.dbf';
+ DS.Dataset:=DBf1;
+ DBF1.Open;
+ try
+ F.ADaptor:=P.Adaptor;
+ P.Datasource:=DS;
+ P.Adaptor.Action:=wdaUpdate;
+ P.ApplyParams;
+ F.Provider:=P;
+ M:=TMemoryStream.Create;
+ try
+ F.GetContent(ARequest,M,Handled);
+ M.Position:=0;
+ Response.ContentStream:=M;
+ Response.SendResponse;
+ Response.ContentStream:=Nil;
+ With TFileStream.Create('/tmp/data.xml',fmCreate) do
+ try
+ CopyFrom(M,0);
+ finally
+ Free;
+ end;
+ finally
+ M.Free;
+ end;
+ finally
+ DBF1.Close;
+ end;
+ finally
+ DS.Free;
+ end;
+ finally
+ F.Free;
+ end;
+ finally
+ P.Free;
+ end;
+end;
+
+procedure TFPWebModule1.TFPWebActions3Request(Sender: TObject;
+ ARequest: TRequest; AResponse: TResponse; var Handled: Boolean);
+
+Var
+ PN : String;
+ P : TFPWebDataProvider;
+ F : TExtJSDataFormatter;
+ DS : TDatasource;
+ M : TMemoryStream;
+ L : Text;
+
+begin
+ // Providername;
+ PN:=ARequest.GetNextPathInfo;
+// P:=GetWebDataProvider(PN);
+ P:=TFPWebDataProvider.Create(Self);
+ try
+ P.IDFieldName:='ID';
+ If Request.QueryFields.values['format']='xml' then
+ begin
+ F:=TExtJSXMLDataFormatter.Create(Self);
+ AResponse.ContentType:='text/xml';
+ P.Adaptor:=TWebDataInputAdaptor.Create(Self);
+ end
+ else
+ begin
+ F:=TExtJSJSONDataFormatter.Create(Self);
+ P.Adaptor:=TExtJSJSonWebdataInputAdaptor.Create(Self);
+ end;
+ P.Adaptor.Request:=ARequest;
+ {$ifdef wmdebug} SendDebug('className '+F.ClassName);{$endif}
+ try
+ DS:=TDatasource.Create(Self);
+ try
+ DBF1.TableName:=ExtractFilePath(ParamStr(0))+'users.dbf';
+ DS.Dataset:=DBf1;
+ DBF1.Open;
+ try
+ F.ADaptor:=P.Adaptor;
+ P.Datasource:=DS;
+ P.Adaptor.Action:=wdaDelete;
+ P.ApplyParams;
+ F.Provider:=P;
+ M:=TMemoryStream.Create;
+ try
+ F.GetContent(ARequest,M,Handled);
+ M.Position:=0;
+ Response.ContentStream:=M;
+ Response.SendResponse;
+ Response.ContentStream:=Nil;
+ With TFileStream.Create('/tmp/data.xml',fmCreate) do
+ try
+ CopyFrom(M,0);
+ finally
+ Free;
+ end;
+ finally
+ M.Free;
+ end;
+ finally
+ DBF1.Close;
+ end;
+ finally
+ DS.Free;
+ end;
+ finally
+ F.Free;
+ end;
+ finally
+ P.Free;
+ end;
+end;
+
+initialization
+ {$I wmusers.lrs}
+
+ RegisterHTTPModule('Provider', TFPWebModule1);
+end.
+
diff --git a/packages/fcl-web/examples/webdata/demo2/extgrid-json.html b/packages/fcl-web/examples/webdata/demo2/extgrid-json.html
new file mode 100644
index 0000000000..b24b57ac43
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo2/extgrid-json.html
@@ -0,0 +1,11 @@
+<html>
+<head>
+<title>ExtJS JSON Data demo</title>
+<link rel="stylesheet" type="text/css" href="/ext/resources/css/ext-all.css"/>
+<script src="/ext/adapter/ext/ext-base.js"></script>
+<script src="/ext/ext-all-debug.js"></script>
+<script src="extgrid-json.js"></script>
+</head>
+<body>
+</body>
+</html> \ No newline at end of file
diff --git a/packages/fcl-web/examples/webdata/demo2/extgrid-json.js b/packages/fcl-web/examples/webdata/demo2/extgrid-json.js
new file mode 100644
index 0000000000..96bea2d1f7
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo2/extgrid-json.js
@@ -0,0 +1,97 @@
+Ext.ns('FPC');
+
+FPC.ShowPage = function () {
+ var myproxy = new Ext.data.HttpProxy ( {
+ api : {
+ read: "extgrid.cgi/Provider/Name/Read/",
+ update: "extgrid.cgi/Provider/Name/Update/",
+ create: "extgrid.cgi/Provider/Name/Insert/",
+ destroy: "extgrid.cgi/Provider/Name/Delete/"
+ }
+ });
+ var myreader = new Ext.data.JsonReader ({
+ root: "rows",
+ idProperty: "ID",
+ messageProperty: 'message', // Must be specified here
+ fields: ["ID","LOGIN","NAME","EMAIL", "LASTLOGIN"]
+ });
+ var mywriter = new Ext.data.JsonWriter({
+ encode: true,
+ writeAllFields: true,
+ idProperty: "ID"
+ });
+ var data = new Ext.data.Store({
+ proxy: myproxy,
+ reader: myreader,
+ writer: mywriter,
+ autoSave: false,
+ idProperty: "ID",
+ });
+ // Listen to errors.
+ data.addListener('exception', function(proxy, type, action, options, res) {
+ if (type === 'remote') {
+ Ext.Msg.show({
+ title: 'REMOTE EXCEPTION',
+ msg: res.message,
+ icon: Ext.MessageBox.ERROR,
+ buttons: Ext.Msg.OK
+ });
+ }
+ });
+ data.load({ params:{start: 0, limit: 30}});
+ var grid = new Ext.grid.EditorGridPanel({
+ renderTo: Ext.getBody(),
+ frame: true,
+ title: "Known users",
+ height: 600,
+ width: 800,
+ store: data,
+ columns: [
+ {header: 'ID', dataIndex: "ID", sortable: true, hidden: true},
+ {header: 'Login', dataIndex: "LOGIN", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+ {header: 'Name', dataIndex: "NAME", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+ {header: 'Email', dataIndex: "EMAIL", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+ {header: 'Last login', dataIndex: "LASTLOGIN", sortable: true, editor: new Ext.form.TextField()},
+ ],
+ bbar: new Ext.PagingToolbar({
+ pageSize: 30,
+ store: data,
+ displayInfo: true
+ }),
+ tbar : [{
+ text: 'Add',
+ iconCls: 'icon-add',
+ handler: function(btn, ev) {
+ var u = new grid.store.recordType();
+ grid.stopEditing();
+ grid.store.insert(0, u);
+ grid.startEditing(0, 1);
+ },
+ scope: grid
+ }, '-', {
+ text: 'Delete',
+ iconCls: 'icon-delete',
+ handler: function(btn, ev) {
+ var index = grid.getSelectionModel().getSelectedCell();
+ if (!index) {
+ return false;
+ }
+ var rec = grid.store.getAt(index[0]);
+ grid.store.remove(rec);
+ },
+ scope: grid
+ }, '-', {
+ text: 'Save',
+ iconCls: 'icon-save',
+ handler: function(btn, ev) {
+ grid.store.save();
+ },
+ scope: grid
+ }
+ ]
+ // F.ContentToStream(M);
+
+ });
+ grid.show();
+}
+Ext.onReady(FPC.ShowPage);
diff --git a/packages/fcl-web/examples/webdata/demo2/extgrid-xml.html b/packages/fcl-web/examples/webdata/demo2/extgrid-xml.html
new file mode 100644
index 0000000000..d01e2971e3
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo2/extgrid-xml.html
@@ -0,0 +1,11 @@
+<html>
+<head>
+<title>ExtJS XML Data demo</title>
+<link rel="stylesheet" type="text/css" href="/ext/resources/css/ext-all.css"/>
+<script src="/ext/adapter/ext/ext-base.js"></script>
+<script src="/ext/ext-all-debug.js"></script>
+<script src="extgrid-xml.js"></script>
+</head>
+<body>
+</body>
+</html> \ No newline at end of file
diff --git a/packages/fcl-web/examples/webdata/demo2/extgrid-xml.js b/packages/fcl-web/examples/webdata/demo2/extgrid-xml.js
new file mode 100644
index 0000000000..55b2848121
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo2/extgrid-xml.js
@@ -0,0 +1,100 @@
+Ext.ns('FPC');
+
+FPC.ShowPage = function () {
+ var myproxy = new Ext.data.HttpProxy ( {
+ api : {
+ read: "extgrid.cgi/Provider/Name/Read/?format=xml",
+ update: "extgrid.cgi/Provider/Name/Update/?format=xml",
+ create: "extgrid.cgi/Provider/Name/Insert/?format=xml",
+ destroy: "extgrid.cgi/Provider/Name/Delete/?format=xml",
+ }
+ });
+ var myreader = new Ext.data.XmlReader ({
+ totalProperty: "total",
+ record: "row",
+ idProperty: "ID",
+ successProperty: "success",
+ messageProperty: "message",
+ fields: ["ID", "LOGIN", "NAME","EMAIL","LASTLOGIN"]
+ });
+ var mywriter = new Ext.data.XmlWriter({
+ encode: true,
+ writeAllFields: true,
+ idProperty: "ID",
+ root: "records"
+ });
+ var data = new Ext.data.Store({
+ proxy: myproxy,
+ reader: myreader,
+ writer: mywriter,
+ autoSave: false,
+ idProperty: "ID",
+ });
+ // Listen to errors.
+ data.addListener('exception', function(proxy, type, action, options, res) {
+ if (type === 'remote') {
+ Ext.Msg.show({
+ title: 'REMOTE EXCEPTION',
+ msg: res.message,
+ icon: Ext.MessageBox.ERROR,
+ buttons: Ext.Msg.OK
+ });
+ }
+ });
+ data.load({ params:{start: 0, limit: 30}});
+ var grid = new Ext.grid.EditorGridPanel({
+ renderTo: Ext.getBody(),
+ frame: true,
+ title: "Known users",
+ height: 600,
+ width: 800,
+ store: data,
+ columns: [
+ {header: 'ID', dataIndex: "ID", sortable: true, hidden: true},
+ {header: 'Login', dataIndex: "LOGIN", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+ {header: 'Name', dataIndex: "NAME", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+ {header: 'Email', dataIndex: "EMAIL", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+ {header: 'Last login', dataIndex: "LASTLOGIN", sortable: true, editor: new Ext.form.TextField()},
+ ],
+ bbar: new Ext.PagingToolbar({
+ pageSize: 30,
+ store: data,
+ displayInfo: true
+ }),
+ tbar : [{
+ text: 'Add',
+ iconCls: 'icon-add',
+ handler: function(btn, ev) {
+ var u = new grid.store.recordType();
+ grid.stopEditing();
+ grid.store.insert(0, u);
+ grid.startEditing(0, 1);
+ },
+ scope: grid
+ }, '-', {
+ text: 'Delete',
+ iconCls: 'icon-delete',
+ handler: function(btn, ev) {
+ var index = grid.getSelectionModel().getSelectedCell();
+ if (!index) {
+ return false;
+ }
+ var rec = grid.store.getAt(index[0]);
+ grid.store.remove(rec);
+ },
+ scope: grid
+ }, '-', {
+ text: 'Save',
+ iconCls: 'icon-save',
+ handler: function(btn, ev) {
+ grid.store.save();
+ },
+ scope: grid
+ }
+ ]
+ // F.ContentToStream(M);
+
+ });
+ grid.show();
+}
+Ext.onReady(FPC.ShowPage);
diff --git a/packages/fcl-web/examples/webdata/demo2/extgrid.lpi b/packages/fcl-web/examples/webdata/demo2/extgrid.lpi
new file mode 100644
index 0000000000..88d3956f73
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo2/extgrid.lpi
@@ -0,0 +1,84 @@
+<?xml version="1.0"?>
+<CONFIG>
+ <ProjectOptions>
+ <Version Value="7"/>
+ <General>
+ <Flags>
+ <SaveOnlyProjectUnits Value="True"/>
+ <MainUnitHasCreateFormStatements Value="False"/>
+ <Runnable Value="False"/>
+ </Flags>
+ <SessionStorage Value="InProjectDir"/>
+ <MainUnit Value="0"/>
+ <TargetFileExt Value=""/>
+ <Title Value="ExtJS Grid demo for fpwebdata"/>
+ <Icon Value="0"/>
+ <UseXPManifest Value="True"/>
+ </General>
+ <VersionInfo>
+ <ProjectVersion Value=""/>
+ </VersionInfo>
+ <PublishOptions>
+ <Version Value="2"/>
+ <IgnoreBinaries Value="False"/>
+ <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
+ <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/>
+ </PublishOptions>
+ <RunParams>
+ <local>
+ <FormatVersion Value="1"/>
+ <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
+ </local>
+ </RunParams>
+ <RequiredPackages Count="5">
+ <Item1>
+ <PackageName Value="lazwebdata"/>
+ <MinVersion Valid="True"/>
+ </Item1>
+ <Item2>
+ <PackageName Value="DBFLaz"/>
+ <MinVersion Minor="1" Release="1" Valid="True"/>
+ </Item2>
+ <Item3>
+ <PackageName Value="WebLaz"/>
+ </Item3>
+ <Item4>
+ <PackageName Value="LCL"/>
+ </Item4>
+ <Item5>
+ <PackageName Value="FCL"/>
+ </Item5>
+ </RequiredPackages>
+ <Units Count="2">
+ <Unit0>
+ <Filename Value="extgrid.lpr"/>
+ <IsPartOfProject Value="True"/>
+ <UnitName Value="extgrid"/>
+ </Unit0>
+ <Unit1>
+ <Filename Value="wmusers.pp"/>
+ <IsPartOfProject Value="True"/>
+ <ComponentName Value="FPWebModule1"/>
+ <ResourceBaseClass Value="DataModule"/>
+ <UnitName Value="wmusers"/>
+ </Unit1>
+ </Units>
+ </ProjectOptions>
+ <CompilerOptions>
+ <Version Value="8"/>
+ <Target>
+ <Filename Value="extgrid.cgi"/>
+ </Target>
+ <SearchPaths>
+ <IncludeFiles Value="$(ProjOutDir)/"/>
+ </SearchPaths>
+ <CodeGeneration>
+ <Optimizations>
+ <OptimizationLevel Value="0"/>
+ </Optimizations>
+ </CodeGeneration>
+ <Other>
+ <CompilerPath Value="$(CompPath)"/>
+ </Other>
+ </CompilerOptions>
+</CONFIG>
diff --git a/packages/fcl-web/examples/webdata/demo2/extgrid.lpr b/packages/fcl-web/examples/webdata/demo2/extgrid.lpr
new file mode 100644
index 0000000000..b00d3ee7bd
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo2/extgrid.lpr
@@ -0,0 +1,16 @@
+program extgrid;
+
+{$mode objfpc}{$H+}
+
+uses
+ {$ifdef unix}cwstring,xmliconv,{$endif}
+ fpCGI, wmusers;
+
+{$IFDEF WINDOWS}{$R extgrid.rc}{$ENDIF}
+
+begin
+ Application.Title:='ExtJS Grid demo for fpwebdata';
+ Application.Initialize;
+ Application.Run;
+end.
+
diff --git a/packages/fcl-web/examples/webdata/demo2/wmusers.lfm b/packages/fcl-web/examples/webdata/demo2/wmusers.lfm
new file mode 100644
index 0000000000..dc88e0ac09
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo2/wmusers.lfm
@@ -0,0 +1,46 @@
+object FPWebModule1: TFPWebModule1
+ OnCreate = DataModuleCreate
+ OldCreateOrder = False
+ Actions = <>
+ OnRequest = DataModuleRequest
+ CreateSession = False
+ Height = 300
+ HorizontalOffset = 477
+ VerticalOffset = 302
+ Width = 400
+ object Dbf1: TDbf
+ FilePath = '/home/michael/public_html/extjs/demo2/'
+ IndexDefs = <>
+ TableName = 'users.dbf'
+ TableLevel = 4
+ FilterOptions = []
+ left = 51
+ top = 64
+ end
+ object ExtJSJSonWebdataInputAdaptor1: TExtJSJSonWebdataInputAdaptor
+ left = 146
+ top = 63
+ end
+ object ExtJSJSONDataFormatter1: TExtJSJSONDataFormatter
+ left = 207
+ top = 61
+ end
+ object ExtJSXMLWebdataInputAdaptor1: TExtJSXMLWebdataInputAdaptor
+ left = 151
+ top = 101
+ end
+ object ExtJSXMLDataFormatter1: TExtJSXMLDataFormatter
+ left = 211
+ top = 100
+ end
+ object FPWebDataProvider1: TFPWebDataProvider
+ DataSource = Datasource1
+ left = 105
+ top = 89
+ end
+ object Datasource1: TDatasource
+ DataSet = Dbf1
+ left = 48
+ top = 104
+ end
+end
diff --git a/packages/fcl-web/examples/webdata/demo2/wmusers.lrs b/packages/fcl-web/examples/webdata/demo2/wmusers.lrs
new file mode 100644
index 0000000000..d84ec9ea08
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo2/wmusers.lrs
@@ -0,0 +1,18 @@
+{ This is an automatically generated lazarus resource file }
+
+LazarusResources.Add('TFPWebModule1','FORMDATA',[
+ 'TPF0'#13'TFPWebModule1'#12'FPWebModule1'#8'OnCreate'#7#16'DataModuleCreate'
+ +#14'OldCreateOrder'#8#7'Actions'#14#0#9'OnRequest'#7#17'DataModuleRequest'#13
+ +'CreateSession'#8#6'Height'#3','#1#16'HorizontalOffset'#3#221#1#14'VerticalO'
+ +'ffset'#3'.'#1#5'Width'#3#144#1#0#4'TDbf'#4'Dbf1'#8'FilePath'#6'&/home/micha'
+ +'el/public_html/extjs/demo2/'#9'IndexDefs'#14#0#9'TableName'#6#9'users.dbf'
+ +#10'TableLevel'#2#4#13'FilterOptions'#11#0#4'left'#2'3'#3'top'#2'@'#0#0#29'T'
+ +'ExtJSJSonWebdataInputAdaptor'#29'ExtJSJSonWebdataInputAdaptor1'#4'left'#3
+ +#146#0#3'top'#2'?'#0#0#23'TExtJSJSONDataFormatter'#23'ExtJSJSONDataFormatter'
+ +'1'#4'left'#3#207#0#3'top'#2'='#0#0#28'TExtJSXMLWebdataInputAdaptor'#28'ExtJ'
+ +'SXMLWebdataInputAdaptor1'#4'left'#3#151#0#3'top'#2'e'#0#0#22'TExtJSXMLDataF'
+ +'ormatter'#22'ExtJSXMLDataFormatter1'#4'left'#3#211#0#3'top'#2'd'#0#0#18'TFP'
+ +'WebDataProvider'#18'FPWebDataProvider1'#10'DataSource'#7#11'Datasource1'#4
+ +'left'#2'i'#3'top'#2'Y'#0#0#11'TDatasource'#11'Datasource1'#7'DataSet'#7#4'D'
+ +'bf1'#4'left'#2'0'#3'top'#2'h'#0#0#0
+]);
diff --git a/packages/fcl-web/examples/webdata/demo2/wmusers.pp b/packages/fcl-web/examples/webdata/demo2/wmusers.pp
new file mode 100644
index 0000000000..43537a6a1e
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo2/wmusers.pp
@@ -0,0 +1,86 @@
+unit wmusers;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes, SysUtils, FileUtil, LResources, fpwebdata, extjsjson, extjsxml,
+ HTTPDefs, websession, fpHTTP, fpWeb, dbf, db;
+
+type
+
+ { TFPWebModule1 }
+
+ TFPWebModule1 = class(TFPWebModule)
+ Datasource1: TDatasource;
+ Dbf1: TDbf;
+ ExtJSJSONDataFormatter1: TExtJSJSONDataFormatter;
+ ExtJSJSonWebdataInputAdaptor1: TExtJSJSonWebdataInputAdaptor;
+ ExtJSXMLDataFormatter1: TExtJSXMLDataFormatter;
+ ExtJSXMLWebdataInputAdaptor1: TExtJSXMLWebdataInputAdaptor;
+ FPWebDataProvider1: TFPWebDataProvider;
+ procedure DataModuleCreate(Sender: TObject);
+ procedure DataModuleRequest(Sender: TObject; ARequest: TRequest;
+ AResponse: TResponse; var Handled: Boolean);
+ private
+ { private declarations }
+ public
+ { public declarations }
+ end;
+
+var
+ FPWebModule1: TFPWebModule1;
+
+implementation
+
+uses dbugintf;
+
+{ TFPWebModule1 }
+
+procedure TFPWebModule1.DataModuleRequest(Sender: TObject; ARequest: TRequest;
+ AResponse: TResponse; var Handled: Boolean);
+
+Var
+ CP : TCustomHTTPDataContentProducer;
+ M : TMemoryStream;
+ A : TCustomWebDataInputAdaptor;
+ PN : String;
+
+begin
+ PN:=ARequest.GetNextPathInfo;
+ If ARequest.QueryFields.values['format']='xml' then
+ begin
+ A:=ExtJSXMLWebdataInputAdaptor1;
+ CP:=ExtJSXMLDataFormatter1;
+ end
+ else
+ begin
+ A:=ExtJSJSONWebdataInputAdaptor1;
+ cp:=ExtJSJSONDataFormatter1;
+ end;
+ FPWebDataProvider1.Adaptor:=A;
+ CP.Adaptor:=A;
+ CP.Adaptor.Request:=ARequest;
+ CP.Provider:=FPWebDataProvider1;
+ M:=TmemoryStream.Create;
+ AResponse.ContentStream:=M;
+ AResponse.ContentType:=CP.DataContentType;
+ CP.GetContent(ARequest,M,Handled);
+ M.Position:=0;
+ AResponse.SendContent;
+end;
+
+procedure TFPWebModule1.DataModuleCreate(Sender: TObject);
+begin
+ DBF1.TableName:=ExtractFilePath(ParamStr(0))+'users.dbf';
+ DBF1.Open;
+ With DBF1.FieldByname('ID') do
+ ProviderFlags:=ProviderFlags+[pfInKey];
+end;
+
+initialization
+ {$I wmusers.lrs}
+ RegisterHTTPModule('Provider', TFPWebModule1);
+end.
+
diff --git a/packages/fcl-web/examples/webdata/demo3/extgrid-json.html b/packages/fcl-web/examples/webdata/demo3/extgrid-json.html
new file mode 100644
index 0000000000..b24b57ac43
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo3/extgrid-json.html
@@ -0,0 +1,11 @@
+<html>
+<head>
+<title>ExtJS JSON Data demo</title>
+<link rel="stylesheet" type="text/css" href="/ext/resources/css/ext-all.css"/>
+<script src="/ext/adapter/ext/ext-base.js"></script>
+<script src="/ext/ext-all-debug.js"></script>
+<script src="extgrid-json.js"></script>
+</head>
+<body>
+</body>
+</html> \ No newline at end of file
diff --git a/packages/fcl-web/examples/webdata/demo3/extgrid-json.js b/packages/fcl-web/examples/webdata/demo3/extgrid-json.js
new file mode 100644
index 0000000000..9f22a2ab3c
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo3/extgrid-json.js
@@ -0,0 +1,97 @@
+Ext.ns('FPC');
+
+FPC.ShowPage = function () {
+ var myproxy = new Ext.data.HttpProxy ( {
+ api : {
+ read: "extgrid.cgi/Provider/AName/Read/",
+ update: "extgrid.cgi/Provider/AName/Update/",
+ create: "extgrid.cgi/Provider/AName/Insert/",
+ destroy: "extgrid.cgi/Provider/AName/Delete/"
+ }
+ });
+ var myreader = new Ext.data.JsonReader ({
+ root: "rows",
+ idProperty: "ID",
+ messageProperty: 'message', // Must be specified here
+ fields: ["ID","LOGIN","NAME","EMAIL", "LASTLOGIN"]
+ });
+ var mywriter = new Ext.data.JsonWriter({
+ encode: true,
+ writeAllFields: true,
+ idProperty: "ID"
+ });
+ var data = new Ext.data.Store({
+ proxy: myproxy,
+ reader: myreader,
+ writer: mywriter,
+ autoSave: false,
+ idProperty: "ID",
+ });
+ // Listen to errors.
+ data.addListener('exception', function(proxy, type, action, options, res) {
+ if (type === 'remote') {
+ Ext.Msg.show({
+ title: 'REMOTE EXCEPTION',
+ msg: res.message,
+ icon: Ext.MessageBox.ERROR,
+ buttons: Ext.Msg.OK
+ });
+ }
+ });
+ data.load({ params:{start: 0, limit: 30}});
+ var grid = new Ext.grid.EditorGridPanel({
+ renderTo: Ext.getBody(),
+ frame: true,
+ title: "Known users",
+ height: 600,
+ width: 800,
+ store: data,
+ columns: [
+ {header: 'ID', dataIndex: "ID", sortable: true, hidden: true},
+ {header: 'Login', dataIndex: "LOGIN", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+ {header: 'Name', dataIndex: "NAME", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+ {header: 'Email', dataIndex: "EMAIL", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+ {header: 'Last login', dataIndex: "LASTLOGIN", sortable: true, editor: new Ext.form.TextField()},
+ ],
+ bbar: new Ext.PagingToolbar({
+ pageSize: 30,
+ store: data,
+ displayInfo: true
+ }),
+ tbar : [{
+ text: 'Add',
+ iconCls: 'icon-add',
+ handler: function(btn, ev) {
+ var u = new grid.store.recordType();
+ grid.stopEditing();
+ grid.store.insert(0, u);
+ grid.startEditing(0, 1);
+ },
+ scope: grid
+ }, '-', {
+ text: 'Delete',
+ iconCls: 'icon-delete',
+ handler: function(btn, ev) {
+ var index = grid.getSelectionModel().getSelectedCell();
+ if (!index) {
+ return false;
+ }
+ var rec = grid.store.getAt(index[0]);
+ grid.store.remove(rec);
+ },
+ scope: grid
+ }, '-', {
+ text: 'Save',
+ iconCls: 'icon-save',
+ handler: function(btn, ev) {
+ grid.store.save();
+ },
+ scope: grid
+ }
+ ]
+ // F.ContentToStream(M);
+
+ });
+ grid.show();
+}
+Ext.onReady(FPC.ShowPage);
diff --git a/packages/fcl-web/examples/webdata/demo3/extgrid-xml.html b/packages/fcl-web/examples/webdata/demo3/extgrid-xml.html
new file mode 100644
index 0000000000..d01e2971e3
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo3/extgrid-xml.html
@@ -0,0 +1,11 @@
+<html>
+<head>
+<title>ExtJS XML Data demo</title>
+<link rel="stylesheet" type="text/css" href="/ext/resources/css/ext-all.css"/>
+<script src="/ext/adapter/ext/ext-base.js"></script>
+<script src="/ext/ext-all-debug.js"></script>
+<script src="extgrid-xml.js"></script>
+</head>
+<body>
+</body>
+</html> \ No newline at end of file
diff --git a/packages/fcl-web/examples/webdata/demo3/extgrid-xml.js b/packages/fcl-web/examples/webdata/demo3/extgrid-xml.js
new file mode 100644
index 0000000000..f60117d3e2
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo3/extgrid-xml.js
@@ -0,0 +1,100 @@
+Ext.ns('FPC');
+
+FPC.ShowPage = function () {
+ var myproxy = new Ext.data.HttpProxy ( {
+ api : {
+ read: "extgrid.cgi/Provider/AName/Read/?format=xml",
+ update: "extgrid.cgi/Provider/AName/Update/?format=xml",
+ create: "extgrid.cgi/Provider/AName/Insert/?format=xml",
+ destroy: "extgrid.cgi/Provider/AName/Delete/?format=xml",
+ }
+ });
+ var myreader = new Ext.data.XmlReader ({
+ totalProperty: "total",
+ record: "row",
+ idProperty: "ID",
+ successProperty: "success",
+ messageProperty: "message",
+ fields: ["ID", "LOGIN", "NAME","EMAIL","LASTLOGIN"]
+ });
+ var mywriter = new Ext.data.XmlWriter({
+ encode: true,
+ writeAllFields: true,
+ idProperty: "ID",
+ root: "records"
+ });
+ var data = new Ext.data.Store({
+ proxy: myproxy,
+ reader: myreader,
+ writer: mywriter,
+ autoSave: false,
+ idProperty: "ID",
+ });
+ // Listen to errors.
+ data.addListener('exception', function(proxy, type, action, options, res) {
+ if (type === 'remote') {
+ Ext.Msg.show({
+ title: 'REMOTE EXCEPTION',
+ msg: res.message,
+ icon: Ext.MessageBox.ERROR,
+ buttons: Ext.Msg.OK
+ });
+ }
+ });
+ data.load({ params:{start: 0, limit: 30}});
+ var grid = new Ext.grid.EditorGridPanel({
+ renderTo: Ext.getBody(),
+ frame: true,
+ title: "Known users",
+ height: 600,
+ width: 800,
+ store: data,
+ columns: [
+ {header: 'ID', dataIndex: "ID", sortable: true, hidden: true},
+ {header: 'Login', dataIndex: "LOGIN", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+ {header: 'Name', dataIndex: "NAME", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+ {header: 'Email', dataIndex: "EMAIL", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+ {header: 'Last login', dataIndex: "LASTLOGIN", sortable: true, editor: new Ext.form.TextField()},
+ ],
+ bbar: new Ext.PagingToolbar({
+ pageSize: 30,
+ store: data,
+ displayInfo: true
+ }),
+ tbar : [{
+ text: 'Add',
+ iconCls: 'icon-add',
+ handler: function(btn, ev) {
+ var u = new grid.store.recordType();
+ grid.stopEditing();
+ grid.store.insert(0, u);
+ grid.startEditing(0, 1);
+ },
+ scope: grid
+ }, '-', {
+ text: 'Delete',
+ iconCls: 'icon-delete',
+ handler: function(btn, ev) {
+ var index = grid.getSelectionModel().getSelectedCell();
+ if (!index) {
+ return false;
+ }
+ var rec = grid.store.getAt(index[0]);
+ grid.store.remove(rec);
+ },
+ scope: grid
+ }, '-', {
+ text: 'Save',
+ iconCls: 'icon-save',
+ handler: function(btn, ev) {
+ grid.store.save();
+ },
+ scope: grid
+ }
+ ]
+ // F.ContentToStream(M);
+
+ });
+ grid.show();
+}
+Ext.onReady(FPC.ShowPage);
diff --git a/packages/fcl-web/examples/webdata/demo3/extgrid.lpi b/packages/fcl-web/examples/webdata/demo3/extgrid.lpi
new file mode 100644
index 0000000000..d82e918056
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo3/extgrid.lpi
@@ -0,0 +1,334 @@
+<?xml version="1.0"?>
+<CONFIG>
+ <ProjectOptions>
+ <Version Value="7"/>
+ <General>
+ <Flags>
+ <MainUnitHasCreateFormStatements Value="False"/>
+ <Runnable Value="False"/>
+ </Flags>
+ <MainUnit Value="0"/>
+ <TargetFileExt Value=""/>
+ <Icon Value="0"/>
+ <UseXPManifest Value="True"/>
+ <ActiveEditorIndexAtStart Value="3"/>
+ </General>
+ <VersionInfo>
+ <ProjectVersion Value=""/>
+ </VersionInfo>
+ <PublishOptions>
+ <Version Value="2"/>
+ <IgnoreBinaries Value="False"/>
+ <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
+ <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/>
+ </PublishOptions>
+ <RunParams>
+ <local>
+ <FormatVersion Value="1"/>
+ <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
+ </local>
+ </RunParams>
+ <RequiredPackages Count="5">
+ <Item1>
+ <PackageName Value="DBFLaz"/>
+ <MinVersion Minor="1" Release="1" Valid="True"/>
+ </Item1>
+ <Item2>
+ <PackageName Value="lazwebdata"/>
+ <MinVersion Valid="True"/>
+ </Item2>
+ <Item3>
+ <PackageName Value="WebLaz"/>
+ </Item3>
+ <Item4>
+ <PackageName Value="LCL"/>
+ </Item4>
+ <Item5>
+ <PackageName Value="FCL"/>
+ </Item5>
+ </RequiredPackages>
+ <Units Count="16">
+ <Unit0>
+ <Filename Value="extgrid.lpr"/>
+ <IsPartOfProject Value="True"/>
+ <UnitName Value="extgrid"/>
+ <CursorPos X="24" Y="6"/>
+ <TopLine Value="1"/>
+ <EditorIndex Value="3"/>
+ <UsageCount Value="21"/>
+ <Loaded Value="True"/>
+ </Unit0>
+ <Unit1>
+ <Filename Value="wmusers.pp"/>
+ <IsPartOfProject Value="True"/>
+ <ComponentName Value="FPWebProviderDataModule1"/>
+ <ResourceBaseClass Value="DataModule"/>
+ <UnitName Value="wmusers"/>
+ <CursorPos X="33" Y="60"/>
+ <TopLine Value="27"/>
+ <EditorIndex Value="2"/>
+ <UsageCount Value="21"/>
+ <Loaded Value="True"/>
+ </Unit1>
+ <Unit2>
+ <Filename Value="../demo2/wmusers.pp"/>
+ <ComponentName Value="FPWebModule1"/>
+ <HasResources Value="True"/>
+ <ResourceBaseClass Value="DataModule"/>
+ <UnitName Value="wmusers"/>
+ <CursorPos X="1" Y="80"/>
+ <TopLine Value="45"/>
+ <UsageCount Value="10"/>
+ </Unit2>
+ <Unit3>
+ <Filename Value="../fpwebdata.pp"/>
+ <ComponentName Value="FPWebProviderDataModule"/>
+ <HasResources Value="True"/>
+ <ResourceBaseClass Value="DataModule"/>
+ <UnitName Value="fpwebdata"/>
+ <CursorPos X="26" Y="1530"/>
+ <TopLine Value="1526"/>
+ <EditorIndex Value="4"/>
+ <UsageCount Value="10"/>
+ <Loaded Value="True"/>
+ </Unit3>
+ <Unit4>
+ <Filename Value="wmusers.lfm"/>
+ <UsageCount Value="10"/>
+ <SyntaxHighlighter Value="LFM"/>
+ </Unit4>
+ <Unit5>
+ <Filename Value="../demo/reglazwebdata.pp"/>
+ <UnitName Value="reglazwebdata"/>
+ <CursorPos X="53" Y="50"/>
+ <TopLine Value="34"/>
+ <EditorIndex Value="0"/>
+ <UsageCount Value="10"/>
+ <Loaded Value="True"/>
+ </Unit5>
+ <Unit6>
+ <Filename Value="../../../fpc/rtl/objpas/classes/classesh.inc"/>
+ <CursorPos X="17" Y="1833"/>
+ <TopLine Value="1812"/>
+ <UsageCount Value="10"/>
+ </Unit6>
+ <Unit7>
+ <Filename Value="../../../fpc/rtl/objpas/classes/dm.inc"/>
+ <CursorPos X="3" Y="18"/>
+ <TopLine Value="16"/>
+ <UsageCount Value="10"/>
+ </Unit7>
+ <Unit8>
+ <Filename Value="../../../fpc/packages/fcl-web/src/fphttp.pp"/>
+ <UnitName Value="fphttp"/>
+ <CursorPos X="3" Y="105"/>
+ <TopLine Value="108"/>
+ <EditorIndex Value="5"/>
+ <UsageCount Value="10"/>
+ <Loaded Value="True"/>
+ </Unit8>
+ <Unit9>
+ <Filename Value="../../../fpc/packages/fcl-web/src/fpweb.pp"/>
+ <UnitName Value="fpWeb"/>
+ <CursorPos X="3" Y="421"/>
+ <TopLine Value="419"/>
+ <EditorIndex Value="6"/>
+ <UsageCount Value="10"/>
+ <Loaded Value="True"/>
+ </Unit9>
+ <Unit10>
+ <Filename Value="../../../fpc/lazarus/components/fpweb/weblazideintf.pp"/>
+ <UnitName Value="WebLazIDEIntf"/>
+ <CursorPos X="52" Y="173"/>
+ <TopLine Value="145"/>
+ <UsageCount Value="10"/>
+ </Unit10>
+ <Unit11>
+ <Filename Value="../../../fpc/lazarus/components/fpweb/lazweb.pp"/>
+ <UnitName Value="lazweb"/>
+ <CursorPos X="12" Y="7"/>
+ <TopLine Value="1"/>
+ <UsageCount Value="10"/>
+ </Unit11>
+ <Unit12>
+ <Filename Value="tralala.pp"/>
+ <ComponentName Value="FPWebModule1"/>
+ <ResourceBaseClass Value="DataModule"/>
+ <UnitName Value="tralala"/>
+ <CursorPos X="7" Y="11"/>
+ <TopLine Value="1"/>
+ <UsageCount Value="20"/>
+ </Unit12>
+ <Unit13>
+ <Filename Value="../fpwebdata.lfm"/>
+ <CursorPos X="1" Y="1"/>
+ <TopLine Value="1"/>
+ <UsageCount Value="10"/>
+ <SyntaxHighlighter Value="LFM"/>
+ </Unit13>
+ <Unit14>
+ <Filename Value="../../../fpc/packages/fcl-web/src/websession.pp"/>
+ <UnitName Value="websession"/>
+ <CursorPos X="20" Y="40"/>
+ <TopLine Value="20"/>
+ <EditorIndex Value="1"/>
+ <UsageCount Value="10"/>
+ <Loaded Value="True"/>
+ </Unit14>
+ <Unit15>
+ <Filename Value="../../../fpc/packages/fcl-xml/src/xmliconv.pas"/>
+ <UnitName Value="xmliconv"/>
+ <CursorPos X="1" Y="64"/>
+ <TopLine Value="37"/>
+ <UsageCount Value="10"/>
+ </Unit15>
+ </Units>
+ <JumpHistory Count="30" HistoryIndex="29">
+ <Position1>
+ <Filename Value="../fpwebdata.pp"/>
+ <Caret Line="385" Column="53" TopLine="364"/>
+ </Position1>
+ <Position2>
+ <Filename Value="../../../fpc/packages/fcl-web/src/websession.pp"/>
+ <Caret Line="381" Column="25" TopLine="345"/>
+ </Position2>
+ <Position3>
+ <Filename Value="../fpwebdata.pp"/>
+ <Caret Line="385" Column="51" TopLine="364"/>
+ </Position3>
+ <Position4>
+ <Filename Value="../../../fpc/packages/fcl-web/src/websession.pp"/>
+ <Caret Line="27" Column="39" TopLine="20"/>
+ </Position4>
+ <Position5>
+ <Filename Value="wmusers.pp"/>
+ <Caret Line="34" Column="29" TopLine="3"/>
+ </Position5>
+ <Position6>
+ <Filename Value="wmusers.pp"/>
+ <Caret Line="48" Column="45" TopLine="15"/>
+ </Position6>
+ <Position7>
+ <Filename Value="wmusers.pp"/>
+ <Caret Line="49" Column="45" TopLine="14"/>
+ </Position7>
+ <Position8>
+ <Filename Value="wmusers.pp"/>
+ <Caret Line="50" Column="45" TopLine="14"/>
+ </Position8>
+ <Position9>
+ <Filename Value="wmusers.pp"/>
+ <Caret Line="17" Column="18" TopLine="14"/>
+ </Position9>
+ <Position10>
+ <Filename Value="../fpwebdata.pp"/>
+ <Caret Line="395" Column="32" TopLine="387"/>
+ </Position10>
+ <Position11>
+ <Filename Value="../fpwebdata.pp"/>
+ <Caret Line="1066" Column="1" TopLine="1039"/>
+ </Position11>
+ <Position12>
+ <Filename Value="../fpwebdata.pp"/>
+ <Caret Line="1624" Column="20" TopLine="1606"/>
+ </Position12>
+ <Position13>
+ <Filename Value="../fpwebdata.pp"/>
+ <Caret Line="955" Column="46" TopLine="933"/>
+ </Position13>
+ <Position14>
+ <Filename Value="../fpwebdata.pp"/>
+ <Caret Line="956" Column="19" TopLine="933"/>
+ </Position14>
+ <Position15>
+ <Filename Value="../fpwebdata.pp"/>
+ <Caret Line="957" Column="16" TopLine="933"/>
+ </Position15>
+ <Position16>
+ <Filename Value="../fpwebdata.pp"/>
+ <Caret Line="971" Column="38" TopLine="933"/>
+ </Position16>
+ <Position17>
+ <Filename Value="../fpwebdata.pp"/>
+ <Caret Line="975" Column="77" TopLine="954"/>
+ </Position17>
+ <Position18>
+ <Filename Value="../fpwebdata.pp"/>
+ <Caret Line="985" Column="43" TopLine="954"/>
+ </Position18>
+ <Position19>
+ <Filename Value="../fpwebdata.pp"/>
+ <Caret Line="1013" Column="66" TopLine="992"/>
+ </Position19>
+ <Position20>
+ <Filename Value="../fpwebdata.pp"/>
+ <Caret Line="1017" Column="77" TopLine="992"/>
+ </Position20>
+ <Position21>
+ <Filename Value="../fpwebdata.pp"/>
+ <Caret Line="1042" Column="62" TopLine="1013"/>
+ </Position21>
+ <Position22>
+ <Filename Value="../fpwebdata.pp"/>
+ <Caret Line="1066" Column="35" TopLine="1055"/>
+ </Position22>
+ <Position23>
+ <Filename Value="../fpwebdata.pp"/>
+ <Caret Line="1646" Column="22" TopLine="1630"/>
+ </Position23>
+ <Position24>
+ <Filename Value="wmusers.pp"/>
+ <Caret Line="15" Column="41" TopLine="1"/>
+ </Position24>
+ <Position25>
+ <Filename Value="../fpwebdata.pp"/>
+ <Caret Line="1655" Column="28" TopLine="1632"/>
+ </Position25>
+ <Position26>
+ <Filename Value="../fpwebdata.pp"/>
+ <Caret Line="1587" Column="17" TopLine="1565"/>
+ </Position26>
+ <Position27>
+ <Filename Value="../fpwebdata.pp"/>
+ <Caret Line="414" Column="15" TopLine="393"/>
+ </Position27>
+ <Position28>
+ <Filename Value="extgrid.lpr"/>
+ <Caret Line="6" Column="36" TopLine="1"/>
+ </Position28>
+ <Position29>
+ <Filename Value="extgrid.lpr"/>
+ <Caret Line="11" Column="17" TopLine="1"/>
+ </Position29>
+ <Position30>
+ <Filename Value="extgrid.lpr"/>
+ <Caret Line="6" Column="33" TopLine="1"/>
+ </Position30>
+ </JumpHistory>
+ </ProjectOptions>
+ <CompilerOptions>
+ <Version Value="8"/>
+ <Target>
+ <Filename Value="extgrid.cgi"/>
+ </Target>
+ <SearchPaths>
+ <IncludeFiles Value="$(ProjOutDir)/"/>
+ </SearchPaths>
+ <Other>
+ <CompilerPath Value="$(CompPath)"/>
+ </Other>
+ </CompilerOptions>
+ <Debugging>
+ <Exceptions Count="3">
+ <Item1>
+ <Name Value="EAbort"/>
+ </Item1>
+ <Item2>
+ <Name Value="ECodetoolError"/>
+ </Item2>
+ <Item3>
+ <Name Value="EFOpenError"/>
+ </Item3>
+ </Exceptions>
+ </Debugging>
+</CONFIG>
diff --git a/packages/fcl-web/examples/webdata/demo3/extgrid.lpr b/packages/fcl-web/examples/webdata/demo3/extgrid.lpr
new file mode 100644
index 0000000000..346296ac68
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo3/extgrid.lpr
@@ -0,0 +1,16 @@
+program extgrid;
+
+{$mode objfpc}{$H+}
+
+uses
+ {$ifdef unix}cwstring, xmliconv,{$endif}
+ fpCGI,
+ wmusers;
+
+{$IFDEF WINDOWS}{$R extgrid.rc}{$ENDIF}
+
+begin
+ Application.Initialize;
+ Application.Run;
+end.
+
diff --git a/packages/fcl-web/examples/webdata/demo3/tralala.lfm b/packages/fcl-web/examples/webdata/demo3/tralala.lfm
new file mode 100644
index 0000000000..85a58bccb4
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo3/tralala.lfm
@@ -0,0 +1,9 @@
+object FPWebModule1: TFPWebModule1
+ OldCreateOrder = False
+ Actions = <>
+ CreateSession = False
+ Height = 300
+ HorizontalOffset = 585
+ VerticalOffset = 230
+ Width = 400
+end
diff --git a/packages/fcl-web/examples/webdata/demo3/tralala.lrs b/packages/fcl-web/examples/webdata/demo3/tralala.lrs
new file mode 100644
index 0000000000..6c57fc3175
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo3/tralala.lrs
@@ -0,0 +1,7 @@
+{ This is an automatically generated lazarus resource file }
+
+LazarusResources.Add('TFPWebModule1','FORMDATA',[
+ 'TPF0'#13'TFPWebModule1'#12'FPWebModule1'#14'OldCreateOrder'#8#7'Actions'#14#0
+ +#13'CreateSession'#8#6'Height'#3','#1#16'HorizontalOffset'#3'I'#2#14'Vertica'
+ +'lOffset'#3#230#0#5'Width'#3#144#1#0#0
+]);
diff --git a/packages/fcl-web/examples/webdata/demo3/tralala.pp b/packages/fcl-web/examples/webdata/demo3/tralala.pp
new file mode 100644
index 0000000000..ed3a42d29b
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo3/tralala.pp
@@ -0,0 +1,28 @@
+unit tralala;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes, SysUtils, FileUtil, LResources, HTTPDefs, websession, fpHTTP, fpWeb;
+
+type
+ TFPWebModule1 = class(TFPWebModule)
+ private
+ { private declarations }
+ public
+ { public declarations }
+ end;
+
+var
+ FPWebModule1: TFPWebModule1;
+
+implementation
+
+initialization
+ {$I tralala.lrs}
+
+ RegisterHTTPModule('TFPWebModule1', TFPWebModule1);
+end.
+
diff --git a/packages/fcl-web/examples/webdata/demo3/wmusers.lfm b/packages/fcl-web/examples/webdata/demo3/wmusers.lfm
new file mode 100644
index 0000000000..9087c3876a
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo3/wmusers.lfm
@@ -0,0 +1,49 @@
+object FPWebProviderDataModule1: TFPWebProviderDataModule1
+ OnCreate = DataModuleCreate
+ OldCreateOrder = False
+ InputAdaptor = ExtJSJSonWebdataInputAdaptor1
+ ContentProducer = ExtJSJSONDataFormatter1
+ OnGetContentProducer = DataModuleGetContentProducer
+ OnGetInputAdaptor = DataModuleGetInputAdaptor
+ Height = 300
+ HorizontalOffset = 539
+ VerticalOffset = 447
+ Width = 400
+ object ExtJSJSonWebdataInputAdaptor1: TExtJSJSonWebdataInputAdaptor
+ left = 176
+ top = 96
+ end
+ object ExtJSJSONDataFormatter1: TExtJSJSONDataFormatter
+ AllowPageSize = False
+ left = 176
+ top = 136
+ end
+ object ExtJSXMLWebdataInputAdaptor1: TExtJSXMLWebdataInputAdaptor
+ left = 216
+ top = 96
+ end
+ object ExtJSXMLDataFormatter1: TExtJSXMLDataFormatter
+ AllowPageSize = False
+ left = 216
+ top = 136
+ end
+ object Dbf1: TDbf
+ FilePath = '/home/michael/public_html/extjs/demo2/'
+ IndexDefs = <>
+ TableName = 'users.dbf'
+ TableLevel = 7
+ FilterOptions = []
+ left = 79
+ top = 92
+ end
+ object Datasource1: TDatasource
+ DataSet = Dbf1
+ left = 76
+ top = 132
+ end
+ object AName: TFPWebDataProvider
+ DataSource = Datasource1
+ left = 133
+ top = 117
+ end
+end
diff --git a/packages/fcl-web/examples/webdata/demo3/wmusers.lrs b/packages/fcl-web/examples/webdata/demo3/wmusers.lrs
new file mode 100644
index 0000000000..4a098b738d
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo3/wmusers.lrs
@@ -0,0 +1,21 @@
+{ This is an automatically generated lazarus resource file }
+
+LazarusResources.Add('TFPWebProviderDataModule1','FORMDATA',[
+ 'TPF0'#25'TFPWebProviderDataModule1'#24'FPWebProviderDataModule1'#8'OnCreate'
+ +#7#16'DataModuleCreate'#14'OldCreateOrder'#8#12'InputAdaptor'#7#29'ExtJSJSon'
+ +'WebdataInputAdaptor1'#15'ContentProducer'#7#23'ExtJSJSONDataFormatter1'#20
+ +'OnGetContentProducer'#7#28'DataModuleGetContentProducer'#17'OnGetInputAdapt'
+ +'or'#7#25'DataModuleGetInputAdaptor'#6'Height'#3','#1#16'HorizontalOffset'#3
+ +#27#2#14'VerticalOffset'#3#191#1#5'Width'#3#144#1#0#29'TExtJSJSonWebdataInpu'
+ +'tAdaptor'#29'ExtJSJSonWebdataInputAdaptor1'#4'left'#3#176#0#3'top'#2'`'#0#0
+ +#23'TExtJSJSONDataFormatter'#23'ExtJSJSONDataFormatter1'#13'AllowPageSize'#8
+ +#4'left'#3#176#0#3'top'#3#136#0#0#0#28'TExtJSXMLWebdataInputAdaptor'#28'ExtJ'
+ +'SXMLWebdataInputAdaptor1'#4'left'#3#216#0#3'top'#2'`'#0#0#22'TExtJSXMLDataF'
+ +'ormatter'#22'ExtJSXMLDataFormatter1'#13'AllowPageSize'#8#4'left'#3#216#0#3
+ +'top'#3#136#0#0#0#4'TDbf'#4'Dbf1'#8'FilePath'#6'&/home/michael/public_html/e'
+ +'xtjs/demo2/'#9'IndexDefs'#14#0#9'TableName'#6#9'users.dbf'#10'TableLevel'#2
+ +#7#13'FilterOptions'#11#0#4'left'#2'O'#3'top'#2'\'#0#0#11'TDatasource'#11'Da'
+ +'tasource1'#7'DataSet'#7#4'Dbf1'#4'left'#2'L'#3'top'#3#132#0#0#0#18'TFPWebDa'
+ +'taProvider'#5'AName'#10'DataSource'#7#11'Datasource1'#4'left'#3#133#0#3'top'
+ +#2'u'#0#0#0
+]);
diff --git a/packages/fcl-web/examples/webdata/demo3/wmusers.pp b/packages/fcl-web/examples/webdata/demo3/wmusers.pp
new file mode 100644
index 0000000000..453db4a376
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo3/wmusers.pp
@@ -0,0 +1,68 @@
+unit wmusers;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes, SysUtils, FileUtil, LResources, HTTPDefs, websession, fpHTTP, fpWeb,
+ dbf, db, fpwebdata, extjsjson, extjsxml;
+
+type
+
+ { TFPWebProviderDataModule1 }
+
+ TFPWebProviderDataModule1 = class(TFPWebProviderDataModule)
+ Datasource1: TDatasource;
+ Dbf1: TDbf;
+ ExtJSJSONDataFormatter1: TExtJSJSONDataFormatter;
+ ExtJSJSonWebdataInputAdaptor1: TExtJSJSonWebdataInputAdaptor;
+ ExtJSXMLDataFormatter1: TExtJSXMLDataFormatter;
+ ExtJSXMLWebdataInputAdaptor1: TExtJSXMLWebdataInputAdaptor;
+ AName: TFPWebDataProvider;
+ procedure DataModuleCreate(Sender: TObject);
+ procedure DataModuleGetContentProducer(Sender: TObject;
+ var AContentProducer: TCustomHTTPDataContentProducer);
+ procedure DataModuleGetInputAdaptor(Sender: TObject;
+ var AInputAdaptor: TCustomWebdataInputAdaptor);
+ private
+ { private declarations }
+ public
+ { public declarations }
+ end;
+
+var
+ FPWebProviderDataModule1: TFPWebProviderDataModule1;
+
+implementation
+
+{ TFPWebProviderDataModule1 }
+
+procedure TFPWebProviderDataModule1.DataModuleGetInputAdaptor(Sender: TObject;
+ var AInputAdaptor: TCustomWebdataInputAdaptor);
+begin
+ If Request.QueryFields.values['format']='xml' then
+ AInputAdaptor:=ExtJSXMLWebdataInputAdaptor1;
+end;
+
+procedure TFPWebProviderDataModule1.DataModuleGetContentProducer(
+ Sender: TObject; var AContentProducer: TCustomHTTPDataContentProducer);
+begin
+ If Request.QueryFields.values['format']='xml' then
+ AContentProducer:=ExtJSXMLDataFormatter1;
+end;
+
+procedure TFPWebProviderDataModule1.DataModuleCreate(Sender: TObject);
+begin
+ DBF1.TableName:=ExtractFilePath(ParamStr(0))+'users.dbf';
+ DBF1.Open;
+ With DBF1.FieldByname('ID') do
+ ProviderFlags:=ProviderFlags+[pfInKey];
+end;
+
+initialization
+ {$I wmusers.lrs}
+
+ RegisterHTTPModule('Provider', TFPWebProviderDataModule1);
+end.
+
diff --git a/packages/fcl-web/examples/webdata/demo4/dmusers.lfm b/packages/fcl-web/examples/webdata/demo4/dmusers.lfm
new file mode 100644
index 0000000000..b16145f868
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo4/dmusers.lfm
@@ -0,0 +1,27 @@
+object DataModule1: TDataModule1
+ OnCreate = DataModuleCreate
+ OldCreateOrder = False
+ Height = 300
+ HorizontalOffset = 356
+ VerticalOffset = 360
+ Width = 400
+ object AName: TFPWebDataProvider
+ DataSource = Datasource1
+ left = 161
+ top = 145
+ end
+ object Datasource1: TDatasource
+ DataSet = Dbf1
+ left = 104
+ top = 160
+ end
+ object Dbf1: TDbf
+ FilePath = '/home/michael/public_html/extjs/demo2/'
+ IndexDefs = <>
+ TableName = 'users.dbf'
+ TableLevel = 7
+ FilterOptions = []
+ left = 107
+ top = 120
+ end
+end
diff --git a/packages/fcl-web/examples/webdata/demo4/dmusers.lrs b/packages/fcl-web/examples/webdata/demo4/dmusers.lrs
new file mode 100644
index 0000000000..ec24a1bc6e
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo4/dmusers.lrs
@@ -0,0 +1,12 @@
+{ This is an automatically generated lazarus resource file }
+
+LazarusResources.Add('TDataModule1','FORMDATA',[
+ 'TPF0'#12'TDataModule1'#11'DataModule1'#8'OnCreate'#7#16'DataModuleCreate'#14
+ +'OldCreateOrder'#8#6'Height'#3','#1#16'HorizontalOffset'#3'd'#1#14'VerticalO'
+ +'ffset'#3'h'#1#5'Width'#3#144#1#0#18'TFPWebDataProvider'#5'AName'#10'DataSou'
+ +'rce'#7#11'Datasource1'#4'left'#3#161#0#3'top'#3#145#0#0#0#11'TDatasource'#11
+ +'Datasource1'#7'DataSet'#7#4'Dbf1'#4'left'#2'h'#3'top'#3#160#0#0#0#4'TDbf'#4
+ +'Dbf1'#8'FilePath'#6'&/home/michael/public_html/extjs/demo2/'#9'IndexDefs'#14
+ +#0#9'TableName'#6#9'users.dbf'#10'TableLevel'#2#7#13'FilterOptions'#11#0#4'l'
+ +'eft'#2'k'#3'top'#2'x'#0#0#0
+]);
diff --git a/packages/fcl-web/examples/webdata/demo4/dmusers.pp b/packages/fcl-web/examples/webdata/demo4/dmusers.pp
new file mode 100644
index 0000000000..2e03d36f05
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo4/dmusers.pp
@@ -0,0 +1,52 @@
+unit dmusers;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes, SysUtils, FileUtil, LResources, db, dbf,
+ fpwebdata;
+
+type
+
+ { TDataModule1 }
+
+ TDataModule1 = class(TDataModule)
+ AName: TFPWebDataProvider;
+ Datasource1: TDatasource;
+ Dbf1: TDbf;
+ procedure DataModuleCreate(Sender: TObject);
+ private
+ { private declarations }
+ public
+ { public declarations }
+ end;
+
+var
+ DataModule1: TDataModule1;
+
+implementation
+
+uses dbugintf;
+{ TDataModule1 }
+
+procedure TDataModule1.DataModuleCreate(Sender: TObject);
+begin
+ senddebug('Creating datamodule 1 '+InTToStr(Ord(WebDataProviderManager.Registering)));
+ If not WebDataProviderManager.Registering then
+ begin
+ DBF1.TableName:=ExtractFilePath(ParamStr(0))+'users.dbf';
+ DBF1.Open;
+ With DBF1.FieldByname('ID') do
+ ProviderFlags:=ProviderFlags+[pfInKey];
+ DBF1.First;
+ end;
+end;
+
+initialization
+ {$I dmusers.lrs}
+ WebDataProviderManager.RegisterDatamodule(TDataModule1)
+
+end.
+
diff --git a/packages/fcl-web/examples/webdata/demo4/extgrid-json.html b/packages/fcl-web/examples/webdata/demo4/extgrid-json.html
new file mode 100644
index 0000000000..b24b57ac43
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo4/extgrid-json.html
@@ -0,0 +1,11 @@
+<html>
+<head>
+<title>ExtJS JSON Data demo</title>
+<link rel="stylesheet" type="text/css" href="/ext/resources/css/ext-all.css"/>
+<script src="/ext/adapter/ext/ext-base.js"></script>
+<script src="/ext/ext-all-debug.js"></script>
+<script src="extgrid-json.js"></script>
+</head>
+<body>
+</body>
+</html> \ No newline at end of file
diff --git a/packages/fcl-web/examples/webdata/demo4/extgrid-json.js b/packages/fcl-web/examples/webdata/demo4/extgrid-json.js
new file mode 100644
index 0000000000..98f732ed13
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo4/extgrid-json.js
@@ -0,0 +1,97 @@
+Ext.ns('FPC');
+
+FPC.ShowPage = function () {
+ var myproxy = new Ext.data.HttpProxy ( {
+ api : {
+ read: "extgrid.cgi/JSONProvider/AName/Read/",
+ update: "extgrid.cgi/JSONProvider/AName/Update/",
+ create: "extgrid.cgi/JSONProvider/AName/Insert/",
+ destroy: "extgrid.cgi/JSONProvider/AName/Delete/"
+ }
+ });
+ var myreader = new Ext.data.JsonReader ({
+ root: "rows",
+ idProperty: "ID",
+ messageProperty: 'message', // Must be specified here
+ fields: ["ID","LOGIN","NAME","EMAIL", "LASTLOGIN"]
+ });
+ var mywriter = new Ext.data.JsonWriter({
+ encode: true,
+ writeAllFields: true,
+ idProperty: "ID"
+ });
+ var data = new Ext.data.Store({
+ proxy: myproxy,
+ reader: myreader,
+ writer: mywriter,
+ autoSave: false,
+ idProperty: "ID",
+ });
+ // Listen to errors.
+ data.addListener('exception', function(proxy, type, action, options, res) {
+ if (type === 'remote') {
+ Ext.Msg.show({
+ title: 'REMOTE EXCEPTION',
+ msg: res.message,
+ icon: Ext.MessageBox.ERROR,
+ buttons: Ext.Msg.OK
+ });
+ }
+ });
+ data.load({ params:{start: 0, limit: 30}});
+ var grid = new Ext.grid.EditorGridPanel({
+ renderTo: Ext.getBody(),
+ frame: true,
+ title: "Known users",
+ height: 600,
+ width: 800,
+ store: data,
+ columns: [
+ {header: 'ID', dataIndex: "ID", sortable: true, hidden: true},
+ {header: 'Login', dataIndex: "LOGIN", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+ {header: 'Name', dataIndex: "NAME", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+ {header: 'Email', dataIndex: "EMAIL", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+ {header: 'Last login', dataIndex: "LASTLOGIN", sortable: true, editor: new Ext.form.TextField()},
+ ],
+ bbar: new Ext.PagingToolbar({
+ pageSize: 30,
+ store: data,
+ displayInfo: true
+ }),
+ tbar : [{
+ text: 'Add',
+ iconCls: 'icon-add',
+ handler: function(btn, ev) {
+ var u = new grid.store.recordType();
+ grid.stopEditing();
+ grid.store.insert(0, u);
+ grid.startEditing(0, 1);
+ },
+ scope: grid
+ }, '-', {
+ text: 'Delete',
+ iconCls: 'icon-delete',
+ handler: function(btn, ev) {
+ var index = grid.getSelectionModel().getSelectedCell();
+ if (!index) {
+ return false;
+ }
+ var rec = grid.store.getAt(index[0]);
+ grid.store.remove(rec);
+ },
+ scope: grid
+ }, '-', {
+ text: 'Save',
+ iconCls: 'icon-save',
+ handler: function(btn, ev) {
+ grid.store.save();
+ },
+ scope: grid
+ }
+ ]
+ // F.ContentToStream(M);
+
+ });
+ grid.show();
+}
+Ext.onReady(FPC.ShowPage);
diff --git a/packages/fcl-web/examples/webdata/demo4/extgrid-xml.html b/packages/fcl-web/examples/webdata/demo4/extgrid-xml.html
new file mode 100644
index 0000000000..d01e2971e3
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo4/extgrid-xml.html
@@ -0,0 +1,11 @@
+<html>
+<head>
+<title>ExtJS XML Data demo</title>
+<link rel="stylesheet" type="text/css" href="/ext/resources/css/ext-all.css"/>
+<script src="/ext/adapter/ext/ext-base.js"></script>
+<script src="/ext/ext-all-debug.js"></script>
+<script src="extgrid-xml.js"></script>
+</head>
+<body>
+</body>
+</html> \ No newline at end of file
diff --git a/packages/fcl-web/examples/webdata/demo4/extgrid-xml.js b/packages/fcl-web/examples/webdata/demo4/extgrid-xml.js
new file mode 100644
index 0000000000..8183432334
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo4/extgrid-xml.js
@@ -0,0 +1,100 @@
+Ext.ns('FPC');
+
+FPC.ShowPage = function () {
+ var myproxy = new Ext.data.HttpProxy ( {
+ api : {
+ read: "extgrid.cgi/XMLProvider/AName/Read/",
+ update: "extgrid.cgi/XMLProvider/AName/Update/",
+ create: "extgrid.cgi/XMLProvider/AName/Insert/",
+ destroy: "extgrid.cgi/XMLProvider/AName/Delete/",
+ }
+ });
+ var myreader = new Ext.data.XmlReader ({
+ totalProperty: "total",
+ record: "row",
+ idProperty: "ID",
+ successProperty: "success",
+ messageProperty: "message",
+ fields: ["ID", "LOGIN", "NAME","EMAIL","LASTLOGIN"]
+ });
+ var mywriter = new Ext.data.XmlWriter({
+ encode: true,
+ writeAllFields: true,
+ idProperty: "ID",
+ root: "records"
+ });
+ var data = new Ext.data.Store({
+ proxy: myproxy,
+ reader: myreader,
+ writer: mywriter,
+ autoSave: false,
+ idProperty: "ID",
+ });
+ // Listen to errors.
+ data.addListener('exception', function(proxy, type, action, options, res) {
+ if (type === 'remote') {
+ Ext.Msg.show({
+ title: 'REMOTE EXCEPTION',
+ msg: res.message,
+ icon: Ext.MessageBox.ERROR,
+ buttons: Ext.Msg.OK
+ });
+ }
+ });
+ data.load({ params:{start: 0, limit: 30}});
+ var grid = new Ext.grid.EditorGridPanel({
+ renderTo: Ext.getBody(),
+ frame: true,
+ title: "Known users",
+ height: 600,
+ width: 800,
+ store: data,
+ columns: [
+ {header: 'ID', dataIndex: "ID", sortable: true, hidden: true},
+ {header: 'Login', dataIndex: "LOGIN", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+ {header: 'Name', dataIndex: "NAME", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+ {header: 'Email', dataIndex: "EMAIL", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+ {header: 'Last login', dataIndex: "LASTLOGIN", sortable: true, editor: new Ext.form.TextField()},
+ ],
+ bbar: new Ext.PagingToolbar({
+ pageSize: 30,
+ store: data,
+ displayInfo: true
+ }),
+ tbar : [{
+ text: 'Add',
+ iconCls: 'icon-add',
+ handler: function(btn, ev) {
+ var u = new grid.store.recordType();
+ grid.stopEditing();
+ grid.store.insert(0, u);
+ grid.startEditing(0, 1);
+ },
+ scope: grid
+ }, '-', {
+ text: 'Delete',
+ iconCls: 'icon-delete',
+ handler: function(btn, ev) {
+ var index = grid.getSelectionModel().getSelectedCell();
+ if (!index) {
+ return false;
+ }
+ var rec = grid.store.getAt(index[0]);
+ grid.store.remove(rec);
+ },
+ scope: grid
+ }, '-', {
+ text: 'Save',
+ iconCls: 'icon-save',
+ handler: function(btn, ev) {
+ grid.store.save();
+ },
+ scope: grid
+ }
+ ]
+ // F.ContentToStream(M);
+
+ });
+ grid.show();
+}
+Ext.onReady(FPC.ShowPage);
diff --git a/packages/fcl-web/examples/webdata/demo4/extgrid.lpi b/packages/fcl-web/examples/webdata/demo4/extgrid.lpi
new file mode 100644
index 0000000000..39e167a6c0
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo4/extgrid.lpi
@@ -0,0 +1,93 @@
+<?xml version="1.0"?>
+<CONFIG>
+ <ProjectOptions>
+ <Version Value="7"/>
+ <General>
+ <Flags>
+ <SaveClosedFiles Value="False"/>
+ <SaveOnlyProjectUnits Value="True"/>
+ <MainUnitHasCreateFormStatements Value="False"/>
+ <Runnable Value="False"/>
+ </Flags>
+ <SessionStorage Value="InProjectDir"/>
+ <MainUnit Value="0"/>
+ <TargetFileExt Value=""/>
+ <Icon Value="0"/>
+ <UseXPManifest Value="True"/>
+ </General>
+ <VersionInfo>
+ <ProjectVersion Value=""/>
+ </VersionInfo>
+ <PublishOptions>
+ <Version Value="2"/>
+ <IgnoreBinaries Value="False"/>
+ <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
+ <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/>
+ </PublishOptions>
+ <RunParams>
+ <local>
+ <FormatVersion Value="1"/>
+ <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
+ </local>
+ </RunParams>
+ <RequiredPackages Count="5">
+ <Item1>
+ <PackageName Value="DBFLaz"/>
+ <MinVersion Minor="1" Release="1" Valid="True"/>
+ </Item1>
+ <Item2>
+ <PackageName Value="lazwebdata"/>
+ <MinVersion Valid="True"/>
+ </Item2>
+ <Item3>
+ <PackageName Value="WebLaz"/>
+ </Item3>
+ <Item4>
+ <PackageName Value="LCL"/>
+ </Item4>
+ <Item5>
+ <PackageName Value="FCL"/>
+ </Item5>
+ </RequiredPackages>
+ <Units Count="4">
+ <Unit0>
+ <Filename Value="extgrid.lpr"/>
+ <IsPartOfProject Value="True"/>
+ <UnitName Value="extgrid"/>
+ </Unit0>
+ <Unit1>
+ <Filename Value="wmjsonusers.pp"/>
+ <IsPartOfProject Value="True"/>
+ <ComponentName Value="FPWebProviderDataModule1"/>
+ <ResourceBaseClass Value="DataModule"/>
+ <UnitName Value="wmjsonusers"/>
+ </Unit1>
+ <Unit2>
+ <Filename Value="wmxmlusers.pp"/>
+ <IsPartOfProject Value="True"/>
+ <ComponentName Value="FPWebProviderDataModule2"/>
+ <ResourceBaseClass Value="DataModule"/>
+ <UnitName Value="wmxmlusers"/>
+ </Unit2>
+ <Unit3>
+ <Filename Value="dmusers.pp"/>
+ <IsPartOfProject Value="True"/>
+ <ComponentName Value="DataModule1"/>
+ <ResourceBaseClass Value="DataModule"/>
+ <UnitName Value="dmusers"/>
+ </Unit3>
+ </Units>
+ </ProjectOptions>
+ <CompilerOptions>
+ <Version Value="8"/>
+ <Target>
+ <Filename Value="extgrid.cgi"/>
+ </Target>
+ <SearchPaths>
+ <IncludeFiles Value="$(ProjOutDir)/"/>
+ </SearchPaths>
+ <Other>
+ <CompilerPath Value="$(CompPath)"/>
+ </Other>
+ </CompilerOptions>
+</CONFIG>
diff --git a/packages/fcl-web/examples/webdata/demo4/extgrid.lpr b/packages/fcl-web/examples/webdata/demo4/extgrid.lpr
new file mode 100644
index 0000000000..989fed17d4
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo4/extgrid.lpr
@@ -0,0 +1,15 @@
+program extgrid;
+
+{$mode objfpc}{$H+}
+
+uses
+ {$ifdef unix}cwstring,xmliconv,{$endif}
+ fpCGI, wmjsonusers, wmxmlusers, dmusers;
+
+{$IFDEF WINDOWS}{$R extgrid.rc}{$ENDIF}
+
+begin
+ Application.Initialize;
+ Application.Run;
+end.
+
diff --git a/packages/fcl-web/examples/webdata/demo4/wmjsonusers.lfm b/packages/fcl-web/examples/webdata/demo4/wmjsonusers.lfm
new file mode 100644
index 0000000000..e2241815b2
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo4/wmjsonusers.lfm
@@ -0,0 +1,18 @@
+object FPWebProviderDataModule1: TFPWebProviderDataModule1
+ OldCreateOrder = False
+ InputAdaptor = ExtJSJSonWebdataInputAdaptor1
+ ContentProducer = ExtJSJSONDataFormatter1
+ Height = 300
+ HorizontalOffset = 635
+ VerticalOffset = 230
+ Width = 400
+ object ExtJSJSonWebdataInputAdaptor1: TExtJSJSonWebdataInputAdaptor
+ left = 204
+ top = 124
+ end
+ object ExtJSJSONDataFormatter1: TExtJSJSONDataFormatter
+ AllowPageSize = False
+ left = 204
+ top = 164
+ end
+end
diff --git a/packages/fcl-web/examples/webdata/demo4/wmjsonusers.lrs b/packages/fcl-web/examples/webdata/demo4/wmjsonusers.lrs
new file mode 100644
index 0000000000..19e54f1248
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo4/wmjsonusers.lrs
@@ -0,0 +1,11 @@
+{ This is an automatically generated lazarus resource file }
+
+LazarusResources.Add('TFPWebProviderDataModule1','FORMDATA',[
+ 'TPF0'#25'TFPWebProviderDataModule1'#24'FPWebProviderDataModule1'#14'OldCreat'
+ +'eOrder'#8#12'InputAdaptor'#7#29'ExtJSJSonWebdataInputAdaptor1'#15'ContentPr'
+ +'oducer'#7#23'ExtJSJSONDataFormatter1'#6'Height'#3','#1#16'HorizontalOffset'
+ +#3'{'#2#14'VerticalOffset'#3#230#0#5'Width'#3#144#1#0#29'TExtJSJSonWebdataIn'
+ +'putAdaptor'#29'ExtJSJSonWebdataInputAdaptor1'#4'left'#3#204#0#3'top'#2'|'#0
+ +#0#23'TExtJSJSONDataFormatter'#23'ExtJSJSONDataFormatter1'#13'AllowPageSize'
+ +#8#4'left'#3#204#0#3'top'#3#164#0#0#0#0
+]);
diff --git a/packages/fcl-web/examples/webdata/demo4/wmjsonusers.pp b/packages/fcl-web/examples/webdata/demo4/wmjsonusers.pp
new file mode 100644
index 0000000000..acbf88a11b
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo4/wmjsonusers.pp
@@ -0,0 +1,34 @@
+unit wmjsonusers;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes, SysUtils, FileUtil, LResources, HTTPDefs, websession, fpHTTP, fpWeb,
+ fpwebdata, extjsjson;
+
+type
+
+ { TFPWebProviderDataModule1 }
+
+ TFPWebProviderDataModule1 = class(TFPWebProviderDataModule)
+ ExtJSJSONDataFormatter1: TExtJSJSONDataFormatter;
+ ExtJSJSonWebdataInputAdaptor1: TExtJSJSonWebdataInputAdaptor;
+ private
+ { private declarations }
+ public
+ { public declarations }
+ end;
+
+var
+ FPWebProviderDataModule1: TFPWebProviderDataModule1;
+
+implementation
+
+initialization
+ {$I wmjsonusers.lrs}
+
+ RegisterHTTPModule('JSONProvider', TFPWebProviderDataModule1);
+end.
+
diff --git a/packages/fcl-web/examples/webdata/demo4/wmxmlusers.lfm b/packages/fcl-web/examples/webdata/demo4/wmxmlusers.lfm
new file mode 100644
index 0000000000..ea3810dd4f
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo4/wmxmlusers.lfm
@@ -0,0 +1,18 @@
+object FPWebProviderDataModule2: TFPWebProviderDataModule2
+ OldCreateOrder = False
+ InputAdaptor = ExtJSXMLWebdataInputAdaptor1
+ ContentProducer = ExtJSXMLDataFormatter1
+ Height = 300
+ HorizontalOffset = 545
+ VerticalOffset = 399
+ Width = 400
+ object ExtJSXMLWebdataInputAdaptor1: TExtJSXMLWebdataInputAdaptor
+ left = 244
+ top = 124
+ end
+ object ExtJSXMLDataFormatter1: TExtJSXMLDataFormatter
+ AllowPageSize = False
+ left = 244
+ top = 164
+ end
+end
diff --git a/packages/fcl-web/examples/webdata/demo4/wmxmlusers.lrs b/packages/fcl-web/examples/webdata/demo4/wmxmlusers.lrs
new file mode 100644
index 0000000000..cf8ce3881b
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo4/wmxmlusers.lrs
@@ -0,0 +1,11 @@
+{ This is an automatically generated lazarus resource file }
+
+LazarusResources.Add('TFPWebProviderDataModule2','FORMDATA',[
+ 'TPF0'#25'TFPWebProviderDataModule2'#24'FPWebProviderDataModule2'#14'OldCreat'
+ +'eOrder'#8#12'InputAdaptor'#7#28'ExtJSXMLWebdataInputAdaptor1'#15'ContentPro'
+ +'ducer'#7#22'ExtJSXMLDataFormatter1'#6'Height'#3','#1#16'HorizontalOffset'#3
+ +'!'#2#14'VerticalOffset'#3#143#1#5'Width'#3#144#1#0#28'TExtJSXMLWebdataInput'
+ +'Adaptor'#28'ExtJSXMLWebdataInputAdaptor1'#4'left'#3#244#0#3'top'#2'|'#0#0#22
+ +'TExtJSXMLDataFormatter'#22'ExtJSXMLDataFormatter1'#13'AllowPageSize'#8#4'le'
+ +'ft'#3#244#0#3'top'#3#164#0#0#0#0
+]);
diff --git a/packages/fcl-web/examples/webdata/demo4/wmxmlusers.pp b/packages/fcl-web/examples/webdata/demo4/wmxmlusers.pp
new file mode 100644
index 0000000000..aa82b59a08
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo4/wmxmlusers.pp
@@ -0,0 +1,34 @@
+unit wmxmlusers;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes, SysUtils, FileUtil, LResources, HTTPDefs, websession, fpHTTP, fpWeb,
+ fpwebdata, extjsxml;
+
+type
+
+ { TFPWebProviderDataModule2 }
+
+ TFPWebProviderDataModule2 = class(TFPWebProviderDataModule)
+ ExtJSXMLDataFormatter1: TExtJSXMLDataFormatter;
+ ExtJSXMLWebdataInputAdaptor1: TExtJSXMLWebdataInputAdaptor;
+ private
+ { private declarations }
+ public
+ { public declarations }
+ end;
+
+var
+ FPWebProviderDataModule2: TFPWebProviderDataModule2;
+
+implementation
+
+initialization
+ {$I wmxmlusers.lrs}
+
+ RegisterHTTPModule('XMLProvider', TFPWebProviderDataModule2);
+end.
+
diff --git a/packages/fcl-web/examples/webdata/demo5/extgrid-json.html b/packages/fcl-web/examples/webdata/demo5/extgrid-json.html
new file mode 100644
index 0000000000..b24b57ac43
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo5/extgrid-json.html
@@ -0,0 +1,11 @@
+<html>
+<head>
+<title>ExtJS JSON Data demo</title>
+<link rel="stylesheet" type="text/css" href="/ext/resources/css/ext-all.css"/>
+<script src="/ext/adapter/ext/ext-base.js"></script>
+<script src="/ext/ext-all-debug.js"></script>
+<script src="extgrid-json.js"></script>
+</head>
+<body>
+</body>
+</html> \ No newline at end of file
diff --git a/packages/fcl-web/examples/webdata/demo5/extgrid-json.js b/packages/fcl-web/examples/webdata/demo5/extgrid-json.js
new file mode 100644
index 0000000000..9f22a2ab3c
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo5/extgrid-json.js
@@ -0,0 +1,97 @@
+Ext.ns('FPC');
+
+FPC.ShowPage = function () {
+ var myproxy = new Ext.data.HttpProxy ( {
+ api : {
+ read: "extgrid.cgi/Provider/AName/Read/",
+ update: "extgrid.cgi/Provider/AName/Update/",
+ create: "extgrid.cgi/Provider/AName/Insert/",
+ destroy: "extgrid.cgi/Provider/AName/Delete/"
+ }
+ });
+ var myreader = new Ext.data.JsonReader ({
+ root: "rows",
+ idProperty: "ID",
+ messageProperty: 'message', // Must be specified here
+ fields: ["ID","LOGIN","NAME","EMAIL", "LASTLOGIN"]
+ });
+ var mywriter = new Ext.data.JsonWriter({
+ encode: true,
+ writeAllFields: true,
+ idProperty: "ID"
+ });
+ var data = new Ext.data.Store({
+ proxy: myproxy,
+ reader: myreader,
+ writer: mywriter,
+ autoSave: false,
+ idProperty: "ID",
+ });
+ // Listen to errors.
+ data.addListener('exception', function(proxy, type, action, options, res) {
+ if (type === 'remote') {
+ Ext.Msg.show({
+ title: 'REMOTE EXCEPTION',
+ msg: res.message,
+ icon: Ext.MessageBox.ERROR,
+ buttons: Ext.Msg.OK
+ });
+ }
+ });
+ data.load({ params:{start: 0, limit: 30}});
+ var grid = new Ext.grid.EditorGridPanel({
+ renderTo: Ext.getBody(),
+ frame: true,
+ title: "Known users",
+ height: 600,
+ width: 800,
+ store: data,
+ columns: [
+ {header: 'ID', dataIndex: "ID", sortable: true, hidden: true},
+ {header: 'Login', dataIndex: "LOGIN", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+ {header: 'Name', dataIndex: "NAME", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+ {header: 'Email', dataIndex: "EMAIL", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+ {header: 'Last login', dataIndex: "LASTLOGIN", sortable: true, editor: new Ext.form.TextField()},
+ ],
+ bbar: new Ext.PagingToolbar({
+ pageSize: 30,
+ store: data,
+ displayInfo: true
+ }),
+ tbar : [{
+ text: 'Add',
+ iconCls: 'icon-add',
+ handler: function(btn, ev) {
+ var u = new grid.store.recordType();
+ grid.stopEditing();
+ grid.store.insert(0, u);
+ grid.startEditing(0, 1);
+ },
+ scope: grid
+ }, '-', {
+ text: 'Delete',
+ iconCls: 'icon-delete',
+ handler: function(btn, ev) {
+ var index = grid.getSelectionModel().getSelectedCell();
+ if (!index) {
+ return false;
+ }
+ var rec = grid.store.getAt(index[0]);
+ grid.store.remove(rec);
+ },
+ scope: grid
+ }, '-', {
+ text: 'Save',
+ iconCls: 'icon-save',
+ handler: function(btn, ev) {
+ grid.store.save();
+ },
+ scope: grid
+ }
+ ]
+ // F.ContentToStream(M);
+
+ });
+ grid.show();
+}
+Ext.onReady(FPC.ShowPage);
diff --git a/packages/fcl-web/examples/webdata/demo5/extgrid-xml.html b/packages/fcl-web/examples/webdata/demo5/extgrid-xml.html
new file mode 100644
index 0000000000..d01e2971e3
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo5/extgrid-xml.html
@@ -0,0 +1,11 @@
+<html>
+<head>
+<title>ExtJS XML Data demo</title>
+<link rel="stylesheet" type="text/css" href="/ext/resources/css/ext-all.css"/>
+<script src="/ext/adapter/ext/ext-base.js"></script>
+<script src="/ext/ext-all-debug.js"></script>
+<script src="extgrid-xml.js"></script>
+</head>
+<body>
+</body>
+</html> \ No newline at end of file
diff --git a/packages/fcl-web/examples/webdata/demo5/extgrid-xml.js b/packages/fcl-web/examples/webdata/demo5/extgrid-xml.js
new file mode 100644
index 0000000000..f60117d3e2
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo5/extgrid-xml.js
@@ -0,0 +1,100 @@
+Ext.ns('FPC');
+
+FPC.ShowPage = function () {
+ var myproxy = new Ext.data.HttpProxy ( {
+ api : {
+ read: "extgrid.cgi/Provider/AName/Read/?format=xml",
+ update: "extgrid.cgi/Provider/AName/Update/?format=xml",
+ create: "extgrid.cgi/Provider/AName/Insert/?format=xml",
+ destroy: "extgrid.cgi/Provider/AName/Delete/?format=xml",
+ }
+ });
+ var myreader = new Ext.data.XmlReader ({
+ totalProperty: "total",
+ record: "row",
+ idProperty: "ID",
+ successProperty: "success",
+ messageProperty: "message",
+ fields: ["ID", "LOGIN", "NAME","EMAIL","LASTLOGIN"]
+ });
+ var mywriter = new Ext.data.XmlWriter({
+ encode: true,
+ writeAllFields: true,
+ idProperty: "ID",
+ root: "records"
+ });
+ var data = new Ext.data.Store({
+ proxy: myproxy,
+ reader: myreader,
+ writer: mywriter,
+ autoSave: false,
+ idProperty: "ID",
+ });
+ // Listen to errors.
+ data.addListener('exception', function(proxy, type, action, options, res) {
+ if (type === 'remote') {
+ Ext.Msg.show({
+ title: 'REMOTE EXCEPTION',
+ msg: res.message,
+ icon: Ext.MessageBox.ERROR,
+ buttons: Ext.Msg.OK
+ });
+ }
+ });
+ data.load({ params:{start: 0, limit: 30}});
+ var grid = new Ext.grid.EditorGridPanel({
+ renderTo: Ext.getBody(),
+ frame: true,
+ title: "Known users",
+ height: 600,
+ width: 800,
+ store: data,
+ columns: [
+ {header: 'ID', dataIndex: "ID", sortable: true, hidden: true},
+ {header: 'Login', dataIndex: "LOGIN", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+ {header: 'Name', dataIndex: "NAME", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+ {header: 'Email', dataIndex: "EMAIL", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+ {header: 'Last login', dataIndex: "LASTLOGIN", sortable: true, editor: new Ext.form.TextField()},
+ ],
+ bbar: new Ext.PagingToolbar({
+ pageSize: 30,
+ store: data,
+ displayInfo: true
+ }),
+ tbar : [{
+ text: 'Add',
+ iconCls: 'icon-add',
+ handler: function(btn, ev) {
+ var u = new grid.store.recordType();
+ grid.stopEditing();
+ grid.store.insert(0, u);
+ grid.startEditing(0, 1);
+ },
+ scope: grid
+ }, '-', {
+ text: 'Delete',
+ iconCls: 'icon-delete',
+ handler: function(btn, ev) {
+ var index = grid.getSelectionModel().getSelectedCell();
+ if (!index) {
+ return false;
+ }
+ var rec = grid.store.getAt(index[0]);
+ grid.store.remove(rec);
+ },
+ scope: grid
+ }, '-', {
+ text: 'Save',
+ iconCls: 'icon-save',
+ handler: function(btn, ev) {
+ grid.store.save();
+ },
+ scope: grid
+ }
+ ]
+ // F.ContentToStream(M);
+
+ });
+ grid.show();
+}
+Ext.onReady(FPC.ShowPage);
diff --git a/packages/fcl-web/examples/webdata/demo5/extgrid.lpi b/packages/fcl-web/examples/webdata/demo5/extgrid.lpi
new file mode 100644
index 0000000000..f504646989
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo5/extgrid.lpi
@@ -0,0 +1,75 @@
+<?xml version="1.0"?>
+<CONFIG>
+ <ProjectOptions>
+ <Version Value="7"/>
+ <General>
+ <Flags>
+ <SaveClosedFiles Value="False"/>
+ <SaveOnlyProjectUnits Value="True"/>
+ <MainUnitHasCreateFormStatements Value="False"/>
+ <Runnable Value="False"/>
+ </Flags>
+ <SessionStorage Value="InProjectDir"/>
+ <MainUnit Value="0"/>
+ <TargetFileExt Value=""/>
+ <Icon Value="0"/>
+ <UseXPManifest Value="True"/>
+ </General>
+ <VersionInfo>
+ <ProjectVersion Value=""/>
+ </VersionInfo>
+ <PublishOptions>
+ <Version Value="2"/>
+ <IgnoreBinaries Value="False"/>
+ <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
+ <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/>
+ </PublishOptions>
+ <RunParams>
+ <local>
+ <FormatVersion Value="1"/>
+ <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
+ </local>
+ </RunParams>
+ <RequiredPackages Count="4">
+ <Item1>
+ <PackageName Value="lazwebdata"/>
+ <MinVersion Valid="True"/>
+ </Item1>
+ <Item2>
+ <PackageName Value="WebLaz"/>
+ </Item2>
+ <Item3>
+ <PackageName Value="LCL"/>
+ </Item3>
+ <Item4>
+ <PackageName Value="FCL"/>
+ </Item4>
+ </RequiredPackages>
+ <Units Count="2">
+ <Unit0>
+ <Filename Value="extgrid.lpr"/>
+ <IsPartOfProject Value="True"/>
+ <UnitName Value="extgrid"/>
+ </Unit0>
+ <Unit1>
+ <Filename Value="wmusers.pp"/>
+ <IsPartOfProject Value="True"/>
+ <ComponentName Value="FPWebProviderDataModule2"/>
+ <ResourceBaseClass Value="DataModule"/>
+ <UnitName Value="wmusers"/>
+ </Unit1>
+ </Units>
+ </ProjectOptions>
+ <CompilerOptions>
+ <Version Value="8"/>
+ <Target>
+ <Filename Value="extgrid.cgi"/>
+ </Target>
+ <SearchPaths>
+ <IncludeFiles Value="$(ProjOutDir)/"/>
+ </SearchPaths>
+ <Other>
+ <CompilerPath Value="$(CompPath)"/>
+ </Other>
+ </CompilerOptions>
+</CONFIG>
diff --git a/packages/fcl-web/examples/webdata/demo5/extgrid.lpr b/packages/fcl-web/examples/webdata/demo5/extgrid.lpr
new file mode 100644
index 0000000000..218196742d
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo5/extgrid.lpr
@@ -0,0 +1,15 @@
+program extgrid;
+
+{$mode objfpc}{$H+}
+
+uses
+ {$ifdef unix}cwstring, xmliconv,{$endif}
+ fpCGI, wmusers;
+
+{$IFDEF WINDOWS}{$R extgrid.rc}{$ENDIF}
+
+begin
+ Application.Initialize;
+ Application.Run;
+end.
+
diff --git a/packages/fcl-web/examples/webdata/demo5/wmusers.lfm b/packages/fcl-web/examples/webdata/demo5/wmusers.lfm
new file mode 100644
index 0000000000..efe321fe95
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo5/wmusers.lfm
@@ -0,0 +1,29 @@
+object FPWebProviderDataModule2: TFPWebProviderDataModule2
+ OldCreateOrder = False
+ InputAdaptor = ExtJSJSonWebdataInputAdaptor1
+ ContentProducer = ExtJSJSONDataFormatter1
+ OnGetContentProducer = DataModuleGetContentProducer
+ OnGetInputAdaptor = DataModuleGetInputAdaptor
+ Height = 300
+ HorizontalOffset = 538
+ VerticalOffset = 460
+ Width = 400
+ object ExtJSJSonWebdataInputAdaptor1: TExtJSJSonWebdataInputAdaptor
+ left = 204
+ top = 124
+ end
+ object ExtJSXMLWebdataInputAdaptor1: TExtJSXMLWebdataInputAdaptor
+ left = 244
+ top = 124
+ end
+ object ExtJSXMLDataFormatter1: TExtJSXMLDataFormatter
+ AllowPageSize = False
+ left = 244
+ top = 164
+ end
+ object ExtJSJSONDataFormatter1: TExtJSJSONDataFormatter
+ AllowPageSize = False
+ left = 204
+ top = 164
+ end
+end
diff --git a/packages/fcl-web/examples/webdata/demo5/wmusers.lrs b/packages/fcl-web/examples/webdata/demo5/wmusers.lrs
new file mode 100644
index 0000000000..0ccbbab20d
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo5/wmusers.lrs
@@ -0,0 +1,15 @@
+{ This is an automatically generated lazarus resource file }
+
+LazarusResources.Add('TFPWebProviderDataModule2','FORMDATA',[
+ 'TPF0'#25'TFPWebProviderDataModule2'#24'FPWebProviderDataModule2'#14'OldCreat'
+ +'eOrder'#8#12'InputAdaptor'#7#29'ExtJSJSonWebdataInputAdaptor1'#15'ContentPr'
+ +'oducer'#7#23'ExtJSJSONDataFormatter1'#20'OnGetContentProducer'#7#28'DataMod'
+ +'uleGetContentProducer'#17'OnGetInputAdaptor'#7#25'DataModuleGetInputAdaptor'
+ +#6'Height'#3','#1#16'HorizontalOffset'#3#26#2#14'VerticalOffset'#3#204#1#5'W'
+ +'idth'#3#144#1#0#29'TExtJSJSonWebdataInputAdaptor'#29'ExtJSJSonWebdataInputA'
+ +'daptor1'#4'left'#3#204#0#3'top'#2'|'#0#0#28'TExtJSXMLWebdataInputAdaptor'#28
+ +'ExtJSXMLWebdataInputAdaptor1'#4'left'#3#244#0#3'top'#2'|'#0#0#22'TExtJSXMLD'
+ +'ataFormatter'#22'ExtJSXMLDataFormatter1'#13'AllowPageSize'#8#4'left'#3#244#0
+ +#3'top'#3#164#0#0#0#23'TExtJSJSONDataFormatter'#23'ExtJSJSONDataFormatter1'
+ +#13'AllowPageSize'#8#4'left'#3#204#0#3'top'#3#164#0#0#0#0
+]);
diff --git a/packages/fcl-web/examples/webdata/demo5/wmusers.pp b/packages/fcl-web/examples/webdata/demo5/wmusers.pp
new file mode 100644
index 0000000000..a0f2883dc0
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo5/wmusers.pp
@@ -0,0 +1,85 @@
+unit wmusers;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes, SysUtils, FileUtil, LResources, HTTPDefs, websession, fpHTTP, fpWeb,
+ db, dbf, fpwebdata, extjsjson, extjsxml;
+
+type
+
+ { TFPWebProviderDataModule2 }
+
+ TFPWebProviderDataModule2 = class(TFPWebProviderDataModule)
+ ExtJSJSONDataFormatter1: TExtJSJSONDataFormatter;
+ ExtJSJSonWebdataInputAdaptor1: TExtJSJSonWebdataInputAdaptor;
+ ExtJSXMLDataFormatter1: TExtJSXMLDataFormatter;
+ ExtJSXMLWebdataInputAdaptor1: TExtJSXMLWebdataInputAdaptor;
+ procedure DataModuleGetContentProducer(Sender: TObject;
+ var AContentProducer: TCustomHTTPDataContentProducer);
+ procedure DataModuleGetInputAdaptor(Sender: TObject;
+ var AInputAdaptor: TCustomWebdataInputAdaptor);
+ private
+ { private declarations }
+ public
+ { public declarations }
+ end;
+
+var
+ FPWebProviderDataModule2: TFPWebProviderDataModule2;
+
+implementation
+
+Type
+
+ { TDBFWebDataProvider }
+
+ TDBFWebDataProvider = Class(TFPCustomWebDataProvider)
+ FDBF : TDBF;
+ Public
+ Constructor Create(AOwner : TComponent); override;
+ Function GetDataset : TDataset; override;
+ end;
+
+{ TDBFWebDataProvider }
+
+constructor TDBFWebDataProvider.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FDBF:=TDBF.Create(Self);
+ FDBF.TableName:=ExtractFilePath(ParamStr(0))+'users.dbf';
+ FDBF.Open;
+ With FDBF.FieldByname('ID') do
+ ProviderFlags:=ProviderFlags+[pfInKey];
+end;
+
+function TDBFWebDataProvider.GetDataset: TDataset;
+begin
+ Result:=FDBF;
+end;
+
+{ TFPWebProviderDataModule2 }
+
+procedure TFPWebProviderDataModule2.DataModuleGetInputAdaptor(Sender: TObject;
+ var AInputAdaptor: TCustomWebdataInputAdaptor);
+begin
+ If Request.QueryFields.values['format']='xml' then
+ AInputAdaptor:=ExtJSXMLWebdataInputAdaptor1;
+end;
+
+procedure TFPWebProviderDataModule2.DataModuleGetContentProducer(
+ Sender: TObject; var AContentProducer: TCustomHTTPDataContentProducer);
+begin
+ If Request.QueryFields.values['format']='xml' then
+ AContentProducer:=ExtJSXMLDataFormatter1;
+end;
+
+initialization
+ {$I wmusers.lrs}
+
+ RegisterHTTPModule('Provider', TFPWebProviderDataModule2);
+ WebDataProviderManager.RegisterProvider('AName',TDBFWebDataProvider);
+end.
+
diff --git a/packages/fcl-web/examples/webdata/demo6/extgrid-json.html b/packages/fcl-web/examples/webdata/demo6/extgrid-json.html
new file mode 100644
index 0000000000..b24b57ac43
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo6/extgrid-json.html
@@ -0,0 +1,11 @@
+<html>
+<head>
+<title>ExtJS JSON Data demo</title>
+<link rel="stylesheet" type="text/css" href="/ext/resources/css/ext-all.css"/>
+<script src="/ext/adapter/ext/ext-base.js"></script>
+<script src="/ext/ext-all-debug.js"></script>
+<script src="extgrid-json.js"></script>
+</head>
+<body>
+</body>
+</html> \ No newline at end of file
diff --git a/packages/fcl-web/examples/webdata/demo6/extgrid-json.js b/packages/fcl-web/examples/webdata/demo6/extgrid-json.js
new file mode 100644
index 0000000000..9f22a2ab3c
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo6/extgrid-json.js
@@ -0,0 +1,97 @@
+Ext.ns('FPC');
+
+FPC.ShowPage = function () {
+ var myproxy = new Ext.data.HttpProxy ( {
+ api : {
+ read: "extgrid.cgi/Provider/AName/Read/",
+ update: "extgrid.cgi/Provider/AName/Update/",
+ create: "extgrid.cgi/Provider/AName/Insert/",
+ destroy: "extgrid.cgi/Provider/AName/Delete/"
+ }
+ });
+ var myreader = new Ext.data.JsonReader ({
+ root: "rows",
+ idProperty: "ID",
+ messageProperty: 'message', // Must be specified here
+ fields: ["ID","LOGIN","NAME","EMAIL", "LASTLOGIN"]
+ });
+ var mywriter = new Ext.data.JsonWriter({
+ encode: true,
+ writeAllFields: true,
+ idProperty: "ID"
+ });
+ var data = new Ext.data.Store({
+ proxy: myproxy,
+ reader: myreader,
+ writer: mywriter,
+ autoSave: false,
+ idProperty: "ID",
+ });
+ // Listen to errors.
+ data.addListener('exception', function(proxy, type, action, options, res) {
+ if (type === 'remote') {
+ Ext.Msg.show({
+ title: 'REMOTE EXCEPTION',
+ msg: res.message,
+ icon: Ext.MessageBox.ERROR,
+ buttons: Ext.Msg.OK
+ });
+ }
+ });
+ data.load({ params:{start: 0, limit: 30}});
+ var grid = new Ext.grid.EditorGridPanel({
+ renderTo: Ext.getBody(),
+ frame: true,
+ title: "Known users",
+ height: 600,
+ width: 800,
+ store: data,
+ columns: [
+ {header: 'ID', dataIndex: "ID", sortable: true, hidden: true},
+ {header: 'Login', dataIndex: "LOGIN", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+ {header: 'Name', dataIndex: "NAME", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+ {header: 'Email', dataIndex: "EMAIL", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+ {header: 'Last login', dataIndex: "LASTLOGIN", sortable: true, editor: new Ext.form.TextField()},
+ ],
+ bbar: new Ext.PagingToolbar({
+ pageSize: 30,
+ store: data,
+ displayInfo: true
+ }),
+ tbar : [{
+ text: 'Add',
+ iconCls: 'icon-add',
+ handler: function(btn, ev) {
+ var u = new grid.store.recordType();
+ grid.stopEditing();
+ grid.store.insert(0, u);
+ grid.startEditing(0, 1);
+ },
+ scope: grid
+ }, '-', {
+ text: 'Delete',
+ iconCls: 'icon-delete',
+ handler: function(btn, ev) {
+ var index = grid.getSelectionModel().getSelectedCell();
+ if (!index) {
+ return false;
+ }
+ var rec = grid.store.getAt(index[0]);
+ grid.store.remove(rec);
+ },
+ scope: grid
+ }, '-', {
+ text: 'Save',
+ iconCls: 'icon-save',
+ handler: function(btn, ev) {
+ grid.store.save();
+ },
+ scope: grid
+ }
+ ]
+ // F.ContentToStream(M);
+
+ });
+ grid.show();
+}
+Ext.onReady(FPC.ShowPage);
diff --git a/packages/fcl-web/examples/webdata/demo6/extgrid-xml.html b/packages/fcl-web/examples/webdata/demo6/extgrid-xml.html
new file mode 100644
index 0000000000..d01e2971e3
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo6/extgrid-xml.html
@@ -0,0 +1,11 @@
+<html>
+<head>
+<title>ExtJS XML Data demo</title>
+<link rel="stylesheet" type="text/css" href="/ext/resources/css/ext-all.css"/>
+<script src="/ext/adapter/ext/ext-base.js"></script>
+<script src="/ext/ext-all-debug.js"></script>
+<script src="extgrid-xml.js"></script>
+</head>
+<body>
+</body>
+</html> \ No newline at end of file
diff --git a/packages/fcl-web/examples/webdata/demo6/extgrid-xml.js b/packages/fcl-web/examples/webdata/demo6/extgrid-xml.js
new file mode 100644
index 0000000000..f60117d3e2
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo6/extgrid-xml.js
@@ -0,0 +1,100 @@
+Ext.ns('FPC');
+
+FPC.ShowPage = function () {
+ var myproxy = new Ext.data.HttpProxy ( {
+ api : {
+ read: "extgrid.cgi/Provider/AName/Read/?format=xml",
+ update: "extgrid.cgi/Provider/AName/Update/?format=xml",
+ create: "extgrid.cgi/Provider/AName/Insert/?format=xml",
+ destroy: "extgrid.cgi/Provider/AName/Delete/?format=xml",
+ }
+ });
+ var myreader = new Ext.data.XmlReader ({
+ totalProperty: "total",
+ record: "row",
+ idProperty: "ID",
+ successProperty: "success",
+ messageProperty: "message",
+ fields: ["ID", "LOGIN", "NAME","EMAIL","LASTLOGIN"]
+ });
+ var mywriter = new Ext.data.XmlWriter({
+ encode: true,
+ writeAllFields: true,
+ idProperty: "ID",
+ root: "records"
+ });
+ var data = new Ext.data.Store({
+ proxy: myproxy,
+ reader: myreader,
+ writer: mywriter,
+ autoSave: false,
+ idProperty: "ID",
+ });
+ // Listen to errors.
+ data.addListener('exception', function(proxy, type, action, options, res) {
+ if (type === 'remote') {
+ Ext.Msg.show({
+ title: 'REMOTE EXCEPTION',
+ msg: res.message,
+ icon: Ext.MessageBox.ERROR,
+ buttons: Ext.Msg.OK
+ });
+ }
+ });
+ data.load({ params:{start: 0, limit: 30}});
+ var grid = new Ext.grid.EditorGridPanel({
+ renderTo: Ext.getBody(),
+ frame: true,
+ title: "Known users",
+ height: 600,
+ width: 800,
+ store: data,
+ columns: [
+ {header: 'ID', dataIndex: "ID", sortable: true, hidden: true},
+ {header: 'Login', dataIndex: "LOGIN", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+ {header: 'Name', dataIndex: "NAME", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+ {header: 'Email', dataIndex: "EMAIL", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+ {header: 'Last login', dataIndex: "LASTLOGIN", sortable: true, editor: new Ext.form.TextField()},
+ ],
+ bbar: new Ext.PagingToolbar({
+ pageSize: 30,
+ store: data,
+ displayInfo: true
+ }),
+ tbar : [{
+ text: 'Add',
+ iconCls: 'icon-add',
+ handler: function(btn, ev) {
+ var u = new grid.store.recordType();
+ grid.stopEditing();
+ grid.store.insert(0, u);
+ grid.startEditing(0, 1);
+ },
+ scope: grid
+ }, '-', {
+ text: 'Delete',
+ iconCls: 'icon-delete',
+ handler: function(btn, ev) {
+ var index = grid.getSelectionModel().getSelectedCell();
+ if (!index) {
+ return false;
+ }
+ var rec = grid.store.getAt(index[0]);
+ grid.store.remove(rec);
+ },
+ scope: grid
+ }, '-', {
+ text: 'Save',
+ iconCls: 'icon-save',
+ handler: function(btn, ev) {
+ grid.store.save();
+ },
+ scope: grid
+ }
+ ]
+ // F.ContentToStream(M);
+
+ });
+ grid.show();
+}
+Ext.onReady(FPC.ShowPage);
diff --git a/packages/fcl-web/examples/webdata/demo6/extgrid.ini b/packages/fcl-web/examples/webdata/demo6/extgrid.ini
new file mode 100644
index 0000000000..d9bc3c6548
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo6/extgrid.ini
@@ -0,0 +1,4 @@
+[Database]
+Path=/wisa/firebird/fpcusers.fb
+UserName=WISASOFT
+Password=SysteemD
diff --git a/packages/fcl-web/examples/webdata/demo6/extgrid.lpi b/packages/fcl-web/examples/webdata/demo6/extgrid.lpi
new file mode 100644
index 0000000000..e37f86dd31
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo6/extgrid.lpi
@@ -0,0 +1,362 @@
+<?xml version="1.0"?>
+<CONFIG>
+ <ProjectOptions>
+ <Version Value="7"/>
+ <General>
+ <Flags>
+ <MainUnitHasCreateFormStatements Value="False"/>
+ <Runnable Value="False"/>
+ </Flags>
+ <MainUnit Value="0"/>
+ <TargetFileExt Value=""/>
+ <Title Value="SQLDBWebDataProvider demo using ExtJS"/>
+ <UseXPManifest Value="True"/>
+ <Icon Value="0"/>
+ <ActiveWindowIndexAtStart Value="0"/>
+ </General>
+ <VersionInfo>
+ <StringTable Comments="" CompanyName="" FileDescription="" FileVersion="0.0.0.0" InternalName="" LegalCopyright="" LegalTrademarks="" OriginalFilename="" ProductName="" ProductVersion=""/>
+ </VersionInfo>
+ <PublishOptions>
+ <Version Value="2"/>
+ <IgnoreBinaries Value="False"/>
+ <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
+ <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/>
+ </PublishOptions>
+ <RunParams>
+ <local>
+ <FormatVersion Value="1"/>
+ <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
+ </local>
+ </RunParams>
+ <RequiredPackages Count="5">
+ <Item1>
+ <PackageName Value="SQLDBLaz"/>
+ <MinVersion Major="1" Release="1" Valid="True"/>
+ </Item1>
+ <Item2>
+ <PackageName Value="lazwebdata"/>
+ <MinVersion Valid="True"/>
+ </Item2>
+ <Item3>
+ <PackageName Value="WebLaz"/>
+ </Item3>
+ <Item4>
+ <PackageName Value="LCL"/>
+ </Item4>
+ <Item5>
+ <PackageName Value="FCL"/>
+ </Item5>
+ </RequiredPackages>
+ <Units Count="16">
+ <Unit0>
+ <Filename Value="extgrid.lpr"/>
+ <IsPartOfProject Value="True"/>
+ <UnitName Value="extgrid"/>
+ <EditorIndex Value="12"/>
+ <WindowIndex Value="0"/>
+ <TopLine Value="1"/>
+ <CursorPos X="33" Y="8"/>
+ <UsageCount Value="20"/>
+ <Loaded Value="True"/>
+ </Unit0>
+ <Unit1>
+ <Filename Value="wmusers.pp"/>
+ <IsPartOfProject Value="True"/>
+ <ComponentName Value="FPWebProviderDataModule1"/>
+ <ResourceBaseClass Value="DataModule"/>
+ <UnitName Value="wmusers"/>
+ <EditorIndex Value="0"/>
+ <WindowIndex Value="0"/>
+ <TopLine Value="78"/>
+ <CursorPos X="29" Y="86"/>
+ <UsageCount Value="20"/>
+ <Loaded Value="True"/>
+ </Unit1>
+ <Unit2>
+ <Filename Value="../demo5/wmusers.pp"/>
+ <ComponentName Value="FPWebProviderDataModule2"/>
+ <HasResources Value="True"/>
+ <ResourceBaseClass Value="DataModule"/>
+ <UnitName Value="wmusers"/>
+ <TopLine Value="44"/>
+ <CursorPos X="1" Y="70"/>
+ <UsageCount Value="10"/>
+ </Unit2>
+ <Unit3>
+ <Filename Value="../fpwebdata.pp"/>
+ <ComponentName Value="FPWebProviderDataModule"/>
+ <HasResources Value="True"/>
+ <ResourceBaseClass Value="DataModule"/>
+ <UnitName Value="fpwebdata"/>
+ <IsVisibleTab Value="True"/>
+ <EditorIndex Value="1"/>
+ <WindowIndex Value="0"/>
+ <TopLine Value="1584"/>
+ <CursorPos X="8" Y="1600"/>
+ <UsageCount Value="10"/>
+ <Loaded Value="True"/>
+ </Unit3>
+ <Unit4>
+ <Filename Value="../sqldbwebdata.pp"/>
+ <UnitName Value="sqldbwebdata"/>
+ <EditorIndex Value="3"/>
+ <WindowIndex Value="0"/>
+ <TopLine Value="49"/>
+ <CursorPos X="2" Y="70"/>
+ <UsageCount Value="10"/>
+ <Loaded Value="True"/>
+ </Unit4>
+ <Unit5>
+ <Filename Value="../extjsjson.pp"/>
+ <UnitName Value="extjsjson"/>
+ <EditorIndex Value="11"/>
+ <WindowIndex Value="0"/>
+ <TopLine Value="25"/>
+ <CursorPos X="3" Y="45"/>
+ <UsageCount Value="10"/>
+ <Loaded Value="True"/>
+ </Unit5>
+ <Unit6>
+ <Filename Value="../extjsxml.pp"/>
+ <UnitName Value="extjsxml"/>
+ <EditorIndex Value="4"/>
+ <WindowIndex Value="0"/>
+ <TopLine Value="49"/>
+ <CursorPos X="13" Y="54"/>
+ <UsageCount Value="10"/>
+ <Loaded Value="True"/>
+ </Unit6>
+ <Unit7>
+ <Filename Value="../../wst/wstmodule.pas"/>
+ <UnitName Value="wstmodule"/>
+ <EditorIndex Value="5"/>
+ <WindowIndex Value="0"/>
+ <TopLine Value="25"/>
+ <CursorPos X="48" Y="22"/>
+ <UsageCount Value="10"/>
+ <Loaded Value="True"/>
+ </Unit7>
+ <Unit8>
+ <Filename Value="../../../fpc/packages/fcl-web/src/fphttp.pp"/>
+ <UnitName Value="fphttp"/>
+ <EditorIndex Value="8"/>
+ <WindowIndex Value="0"/>
+ <TopLine Value="109"/>
+ <CursorPos X="92" Y="100"/>
+ <UsageCount Value="10"/>
+ <Loaded Value="True"/>
+ </Unit8>
+ <Unit9>
+ <Filename Value="../../../fpc/packages/fcl-web/src/websession.pp"/>
+ <UnitName Value="websession"/>
+ <EditorIndex Value="10"/>
+ <WindowIndex Value="0"/>
+ <TopLine Value="1"/>
+ <CursorPos X="3" Y="27"/>
+ <UsageCount Value="10"/>
+ <Loaded Value="True"/>
+ </Unit9>
+ <Unit10>
+ <Filename Value="../../../fpc/packages/fcl-web/src/httpdefs.pp"/>
+ <UnitName Value="HTTPDefs"/>
+ <EditorIndex Value="7"/>
+ <WindowIndex Value="0"/>
+ <TopLine Value="264"/>
+ <CursorPos X="18" Y="285"/>
+ <UsageCount Value="10"/>
+ <Loaded Value="True"/>
+ </Unit10>
+ <Unit11>
+ <Filename Value="../../../source/wst/tests/apache_module/wst_apache_binding.pas"/>
+ <UnitName Value="wst_apache_binding"/>
+ <TopLine Value="142"/>
+ <CursorPos X="1" Y="178"/>
+ <UsageCount Value="10"/>
+ </Unit11>
+ <Unit12>
+ <Filename Value="../../../fpc/packages/fcl-web/src/fpweb.pp"/>
+ <UnitName Value="fpWeb"/>
+ <EditorIndex Value="2"/>
+ <WindowIndex Value="0"/>
+ <TopLine Value="412"/>
+ <CursorPos X="18" Y="452"/>
+ <UsageCount Value="10"/>
+ <Loaded Value="True"/>
+ </Unit12>
+ <Unit13>
+ <Filename Value="../../../Documents/source/wst/wst_global.inc"/>
+ <TopLine Value="1"/>
+ <CursorPos X="30" Y="19"/>
+ <UsageCount Value="10"/>
+ </Unit13>
+ <Unit14>
+ <Filename Value="../../wst/regwstmodule.pp"/>
+ <UnitName Value="regwstmodule"/>
+ <EditorIndex Value="6"/>
+ <WindowIndex Value="0"/>
+ <TopLine Value="1"/>
+ <CursorPos X="2" Y="1"/>
+ <UsageCount Value="10"/>
+ <Loaded Value="True"/>
+ </Unit14>
+ <Unit15>
+ <Filename Value="../demo/reglazwebdata.pp"/>
+ <UnitName Value="reglazwebdata"/>
+ <EditorIndex Value="9"/>
+ <WindowIndex Value="0"/>
+ <TopLine Value="37"/>
+ <CursorPos X="1" Y="73"/>
+ <UsageCount Value="10"/>
+ <Loaded Value="True"/>
+ </Unit15>
+ </Units>
+ <JumpHistory Count="30" HistoryIndex="29">
+ <Position1>
+ <Filename Value="../../wst/wstmodule.pas"/>
+ <Caret Line="135" Column="3" TopLine="115"/>
+ </Position1>
+ <Position2>
+ <Filename Value="../../wst/wstmodule.pas"/>
+ <Caret Line="130" Column="16" TopLine="109"/>
+ </Position2>
+ <Position3>
+ <Filename Value="../../wst/wstmodule.pas"/>
+ <Caret Line="148" Column="1" TopLine="127"/>
+ </Position3>
+ <Position4>
+ <Filename Value="../../wst/wstmodule.pas"/>
+ <Caret Line="122" Column="92" TopLine="121"/>
+ </Position4>
+ <Position5>
+ <Filename Value="../../wst/wstmodule.pas"/>
+ <Caret Line="137" Column="1" TopLine="122"/>
+ </Position5>
+ <Position6>
+ <Filename Value="../../wst/wstmodule.pas"/>
+ <Caret Line="169" Column="26" TopLine="135"/>
+ </Position6>
+ <Position7>
+ <Filename Value="../../wst/wstmodule.pas"/>
+ <Caret Line="34" Column="1" TopLine="1"/>
+ </Position7>
+ <Position8>
+ <Filename Value="../../wst/wstmodule.pas"/>
+ <Caret Line="123" Column="17" TopLine="92"/>
+ </Position8>
+ <Position9>
+ <Filename Value="../../wst/wstmodule.pas"/>
+ <Caret Line="128" Column="36" TopLine="104"/>
+ </Position9>
+ <Position10>
+ <Filename Value="../../wst/wstmodule.pas"/>
+ <Caret Line="46" Column="48" TopLine="25"/>
+ </Position10>
+ <Position11>
+ <Filename Value="../../wst/wstmodule.pas"/>
+ <Caret Line="147" Column="1" TopLine="126"/>
+ </Position11>
+ <Position12>
+ <Filename Value="../../wst/wstmodule.pas"/>
+ <Caret Line="138" Column="6" TopLine="115"/>
+ </Position12>
+ <Position13>
+ <Filename Value="../../wst/wstmodule.pas"/>
+ <Caret Line="150" Column="1" TopLine="137"/>
+ </Position13>
+ <Position14>
+ <Filename Value="../../wst/wstmodule.pas"/>
+ <Caret Line="151" Column="3" TopLine="130"/>
+ </Position14>
+ <Position15>
+ <Filename Value="../../wst/wstmodule.pas"/>
+ <Caret Line="15" Column="1" TopLine="1"/>
+ </Position15>
+ <Position16>
+ <Filename Value="../../wst/wstmodule.pas"/>
+ <Caret Line="177" Column="37" TopLine="145"/>
+ </Position16>
+ <Position17>
+ <Filename Value="../../wst/wstmodule.pas"/>
+ <Caret Line="58" Column="1" TopLine="22"/>
+ </Position17>
+ <Position18>
+ <Filename Value="../demo/reglazwebdata.pp"/>
+ <Caret Line="17" Column="15" TopLine="1"/>
+ </Position18>
+ <Position19>
+ <Filename Value="../../wst/regwstmodule.pp"/>
+ <Caret Line="55" Column="79" TopLine="16"/>
+ </Position19>
+ <Position20>
+ <Filename Value="../../wst/regwstmodule.pp"/>
+ <Caret Line="26" Column="3" TopLine="1"/>
+ </Position20>
+ <Position21>
+ <Filename Value="../fpwebdata.pp"/>
+ <Caret Line="446" Column="14" TopLine="433"/>
+ </Position21>
+ <Position22>
+ <Filename Value="../fpwebdata.pp"/>
+ <Caret Line="969" Column="79" TopLine="954"/>
+ </Position22>
+ <Position23>
+ <Filename Value="../fpwebdata.pp"/>
+ <Caret Line="1171" Column="41" TopLine="1154"/>
+ </Position23>
+ <Position24>
+ <Filename Value="../fpwebdata.pp"/>
+ <Caret Line="1281" Column="32" TopLine="1280"/>
+ </Position24>
+ <Position25>
+ <Filename Value="../fpwebdata.pp"/>
+ <Caret Line="1296" Column="30" TopLine="1282"/>
+ </Position25>
+ <Position26>
+ <Filename Value="../fpwebdata.pp"/>
+ <Caret Line="327" Column="14" TopLine="324"/>
+ </Position26>
+ <Position27>
+ <Filename Value="../fpwebdata.pp"/>
+ <Caret Line="1296" Column="51" TopLine="1280"/>
+ </Position27>
+ <Position28>
+ <Filename Value="../fpwebdata.pp"/>
+ <Caret Line="1594" Column="19" TopLine="1579"/>
+ </Position28>
+ <Position29>
+ <Filename Value="../fpwebdata.pp"/>
+ <Caret Line="1606" Column="58" TopLine="1591"/>
+ </Position29>
+ <Position30>
+ <Filename Value="../fpwebdata.pp"/>
+ <Caret Line="1607" Column="1" TopLine="1592"/>
+ </Position30>
+ </JumpHistory>
+ </ProjectOptions>
+ <CompilerOptions>
+ <Version Value="8"/>
+ <Target>
+ <Filename Value="extgrid.cgi"/>
+ </Target>
+ <SearchPaths>
+ <IncludeFiles Value="$(ProjOutDir)/"/>
+ </SearchPaths>
+ <Other>
+ <CompilerPath Value="$(CompPath)"/>
+ </Other>
+ </CompilerOptions>
+ <Debugging>
+ <Exceptions Count="3">
+ <Item1>
+ <Name Value="EAbort"/>
+ </Item1>
+ <Item2>
+ <Name Value="ECodetoolError"/>
+ </Item2>
+ <Item3>
+ <Name Value="EFOpenError"/>
+ </Item3>
+ </Exceptions>
+ </Debugging>
+</CONFIG>
diff --git a/packages/fcl-web/examples/webdata/demo6/extgrid.lpr b/packages/fcl-web/examples/webdata/demo6/extgrid.lpr
new file mode 100644
index 0000000000..c08187d081
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo6/extgrid.lpr
@@ -0,0 +1,16 @@
+program extgrid;
+
+{$mode objfpc}{$H+}
+
+uses
+ {$ifdef unix}cwstring,xmliconv,{$endif}
+ fpCGI, wmusers;
+
+{$IFDEF WINDOWS}{$R extgrid.rc}{$ENDIF}
+
+begin
+ Application.Title:='SQLDBWebDataProvider demo using ExtJS';
+ Application.Initialize;
+ Application.Run;
+end.
+
diff --git a/packages/fcl-web/examples/webdata/demo6/wmusers.lfm b/packages/fcl-web/examples/webdata/demo6/wmusers.lfm
new file mode 100644
index 0000000000..7bbc5ac425
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo6/wmusers.lfm
@@ -0,0 +1,131 @@
+object FPWebProviderDataModule1: TFPWebProviderDataModule1
+ OnCreate = DataModuleCreate
+ OldCreateOrder = False
+ InputAdaptor = ExtJSJSonWebdataInputAdaptor1
+ ContentProducer = ExtJSJSONDataFormatter1
+ OnGetContentProducer = DataModuleGetContentProducer
+ OnGetInputAdaptor = DataModuleGetInputAdaptor
+ Height = 300
+ HorizontalOffset = 635
+ VerticalOffset = 230
+ Width = 400
+ object ExtJSJSonWebdataInputAdaptor1: TExtJSJSonWebdataInputAdaptor
+ left = 232
+ top = 152
+ end
+ object ExtJSXMLWebdataInputAdaptor1: TExtJSXMLWebdataInputAdaptor
+ left = 272
+ top = 152
+ end
+ object ExtJSXMLDataFormatter1: TExtJSXMLDataFormatter
+ AllowPageSize = False
+ left = 272
+ top = 192
+ end
+ object ExtJSJSONDataFormatter1: TExtJSJSONDataFormatter
+ AllowPageSize = False
+ left = 232
+ top = 192
+ end
+ object ANAME: TSQLDBWebDataProvider
+ SelectSQL.Strings = (
+ 'SELECT * FROM FPCUSERS'
+ )
+ UpdateSQL.Strings = (
+ 'UPDATE FPCUSERS SET'
+ ' NAME=:NAME,'
+ ' LOGIN=:LOGIN,'
+ ' EMAIL=:EMAIL,'
+ ' LASTLOGIN=:LASTLOGIN'
+ 'WHERE'
+ ' (ID=:ID)'
+ )
+ DeleteSQL.Strings = (
+ 'DELETE FROM FPCUSERS WHERE (ID=:ID)'
+ )
+ InsertSQL.Strings = (
+ 'INSERT INTO FPCUSERS '
+ '(ID, LOGIN, NAME, EMAIL, LASTLOGIN)'
+ 'VALUES'
+ '(:ID, :LOGIN, :NAME, :EMAIL, :LASTLOGIN)'
+ )
+ Connection = IBConnection1
+ IDFieldName = 'ID'
+ OnGetNewID = ANAMEGetNewID
+ left = 113
+ top = 120
+ end
+ object IBConnection1: TIBConnection
+ Connected = False
+ LoginPrompt = False
+ DatabaseName = '/wisa/firebird/fpcusers.fb'
+ KeepConnection = False
+ Password = 'SysteemD'
+ Transaction = SQLTransaction1
+ UserName = 'WISASOFT'
+ left = 72
+ top = 120
+ end
+ object QGetID: TSQLQuery
+ IndexName = 'DEFAULT_ORDER'
+ AutoCalcFields = False
+ Database = IBConnection1
+ Transaction = SQLTransaction1
+ ReadOnly = False
+ SQL.Strings = (
+ 'SELECT GEN_ID(GEN_FPCUSERS,1) AS THEID FROM RDB$DATABASE'
+ )
+ Params = <>
+ left = 155
+ top = 63
+ end
+ object SQLTransaction1: TSQLTransaction
+ Active = False
+ Action = caNone
+ Database = IBConnection1
+ left = 74
+ top = 64
+ end
+ object SQLQuery1: TSQLQuery
+ IndexName = 'DEFAULT_ORDER'
+ AutoCalcFields = False
+ Database = IBConnection1
+ Transaction = SQLTransaction1
+ ReadOnly = False
+ SQL.Strings = (
+ 'INSERT INTO FPCUSERS'
+ '(ID, LOGIN, NAME, EMAIL, LASTLOGIN)'
+ 'VALUES'
+ '(:ID, :LOGIN, :NAME, :EMAIL, :LASTLOGIN)'
+ ''
+ )
+ Params = <
+ item
+ DataType = ftUnknown
+ Name = 'ID'
+ ParamType = ptUnknown
+ end
+ item
+ DataType = ftUnknown
+ Name = 'LOGIN'
+ ParamType = ptUnknown
+ end
+ item
+ DataType = ftUnknown
+ Name = 'NAME'
+ ParamType = ptUnknown
+ end
+ item
+ DataType = ftUnknown
+ Name = 'EMAIL'
+ ParamType = ptUnknown
+ end
+ item
+ DataType = ftUnknown
+ Name = 'LASTLOGIN'
+ ParamType = ptUnknown
+ end>
+ left = 174
+ top = 111
+ end
+end
diff --git a/packages/fcl-web/examples/webdata/demo6/wmusers.lrs b/packages/fcl-web/examples/webdata/demo6/wmusers.lrs
new file mode 100644
index 0000000000..c5e5ae7ba4
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo6/wmusers.lrs
@@ -0,0 +1,43 @@
+{ This is an automatically generated lazarus resource file }
+
+LazarusResources.Add('TFPWebProviderDataModule1','FORMDATA',[
+ 'TPF0'#25'TFPWebProviderDataModule1'#24'FPWebProviderDataModule1'#8'OnCreate'
+ +#7#16'DataModuleCreate'#14'OldCreateOrder'#8#12'InputAdaptor'#7#29'ExtJSJSon'
+ +'WebdataInputAdaptor1'#15'ContentProducer'#7#23'ExtJSJSONDataFormatter1'#20
+ +'OnGetContentProducer'#7#28'DataModuleGetContentProducer'#17'OnGetInputAdapt'
+ +'or'#7#25'DataModuleGetInputAdaptor'#6'Height'#3','#1#16'HorizontalOffset'#3
+ +'{'#2#14'VerticalOffset'#3#230#0#5'Width'#3#144#1#0#29'TExtJSJSonWebdataInpu'
+ +'tAdaptor'#29'ExtJSJSonWebdataInputAdaptor1'#4'left'#3#232#0#3'top'#3#152#0#0
+ +#0#28'TExtJSXMLWebdataInputAdaptor'#28'ExtJSXMLWebdataInputAdaptor1'#4'left'
+ +#3#16#1#3'top'#3#152#0#0#0#22'TExtJSXMLDataFormatter'#22'ExtJSXMLDataFormatt'
+ +'er1'#13'AllowPageSize'#8#4'left'#3#16#1#3'top'#3#192#0#0#0#23'TExtJSJSONDat'
+ +'aFormatter'#23'ExtJSJSONDataFormatter1'#13'AllowPageSize'#8#4'left'#3#232#0
+ +#3'top'#3#192#0#0#0#21'TSQLDBWebDataProvider'#5'ANAME'#17'SelectSQL.Strings'
+ +#1#6#22'SELECT * FROM FPCUSERS'#0#17'UpdateSQL.Strings'#1#6#19'UPDATE FPCUSE'
+ +'RS SET'#6#13' NAME=:NAME,'#6#15' LOGIN=:LOGIN,'#6#15' EMAIL=:EMAIL,'#6#22
+ +' LASTLOGIN=:LASTLOGIN'#6#5'WHERE'#6#10' (ID=:ID)'#0#17'DeleteSQL.Strings'
+ +#1#6'#DELETE FROM FPCUSERS WHERE (ID=:ID)'#0#17'InsertSQL.Strings'#1#6#21'IN'
+ +'SERT INTO FPCUSERS '#6'#(ID, LOGIN, NAME, EMAIL, LASTLOGIN)'#6#6'VALUES'#6
+ +'((:ID, :LOGIN, :NAME, :EMAIL, :LASTLOGIN)'#0#10'Connection'#7#13'IBConnecti'
+ +'on1'#11'IDFieldName'#6#2'ID'#10'OnGetNewID'#7#13'ANAMEGetNewID'#4'left'#2'q'
+ +#3'top'#2'x'#0#0#13'TIBConnection'#13'IBConnection1'#9'Connected'#8#11'Login'
+ +'Prompt'#8#12'DatabaseName'#6#26'/wisa/firebird/fpcusers.fb'#14'KeepConnecti'
+ +'on'#8#8'Password'#6#8'SysteemD'#11'Transaction'#7#15'SQLTransaction1'#8'Use'
+ +'rName'#6#8'WISASOFT'#4'left'#2'H'#3'top'#2'x'#0#0#9'TSQLQuery'#6'QGetID'#9
+ +'IndexName'#6#13'DEFAULT_ORDER'#14'AutoCalcFields'#8#8'Database'#7#13'IBConn'
+ +'ection1'#11'Transaction'#7#15'SQLTransaction1'#8'ReadOnly'#8#11'SQL.Strings'
+ +#1#6'9SELECT GEN_ID(GEN_FPCUSERS,1) AS THEID FROM RDB$DATABASE'#0#6'Params'
+ +#14#0#4'left'#3#155#0#3'top'#2'?'#0#0#15'TSQLTransaction'#15'SQLTransaction1'
+ +#6'Active'#8#6'Action'#7#6'caNone'#8'Database'#7#13'IBConnection1'#4'left'#2
+ +'J'#3'top'#2'@'#0#0#9'TSQLQuery'#9'SQLQuery1'#9'IndexName'#6#13'DEFAULT_ORDE'
+ +'R'#14'AutoCalcFields'#8#8'Database'#7#13'IBConnection1'#11'Transaction'#7#15
+ +'SQLTransaction1'#8'ReadOnly'#8#11'SQL.Strings'#1#6#20'INSERT INTO FPCUSERS'
+ +#6'#(ID, LOGIN, NAME, EMAIL, LASTLOGIN)'#6#6'VALUES'#6'((:ID, :LOGIN, :NAME,'
+ +' :EMAIL, :LASTLOGIN)'#6#0#0#6'Params'#14#1#8'DataType'#7#9'ftUnknown'#4'Nam'
+ +'e'#6#2'ID'#9'ParamType'#7#9'ptUnknown'#0#1#8'DataType'#7#9'ftUnknown'#4'Nam'
+ +'e'#6#5'LOGIN'#9'ParamType'#7#9'ptUnknown'#0#1#8'DataType'#7#9'ftUnknown'#4
+ +'Name'#6#4'NAME'#9'ParamType'#7#9'ptUnknown'#0#1#8'DataType'#7#9'ftUnknown'#4
+ +'Name'#6#5'EMAIL'#9'ParamType'#7#9'ptUnknown'#0#1#8'DataType'#7#9'ftUnknown'
+ +#4'Name'#6#9'LASTLOGIN'#9'ParamType'#7#9'ptUnknown'#0#0#4'left'#3#174#0#3'to'
+ +'p'#2'o'#0#0#0
+]);
diff --git a/packages/fcl-web/examples/webdata/demo6/wmusers.pp b/packages/fcl-web/examples/webdata/demo6/wmusers.pp
new file mode 100644
index 0000000000..fda2f8dff9
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demo6/wmusers.pp
@@ -0,0 +1,107 @@
+unit wmusers;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes, SysUtils, FileUtil, LResources, HTTPDefs, websession, fpHTTP, fpWeb,
+ IBConnection, sqldb, fpwebdata, extjsjson, extjsxml, sqldbwebdata;
+
+type
+
+ { TFPWebProviderDataModule1 }
+
+ TFPWebProviderDataModule1 = class(TFPWebProviderDataModule)
+ ExtJSJSONDataFormatter1: TExtJSJSONDataFormatter;
+ ExtJSJSonWebdataInputAdaptor1: TExtJSJSonWebdataInputAdaptor;
+ ExtJSXMLDataFormatter1: TExtJSXMLDataFormatter;
+ ExtJSXMLWebdataInputAdaptor1: TExtJSXMLWebdataInputAdaptor;
+ IBConnection1: TIBConnection;
+ ANAME: TSQLDBWebDataProvider;
+ QGetID: TSQLQuery;
+ SQLQuery1: TSQLQuery;
+ SQLTransaction1: TSQLTransaction;
+ procedure ANAMEGetNewID(Sender: TObject; out AID: String);
+ procedure DataModuleCreate(Sender: TObject);
+ procedure DataModuleGetContentProducer(Sender: TObject;
+ var AContentProducer: TCustomHTTPDataContentProducer);
+ procedure DataModuleGetInputAdaptor(Sender: TObject;
+ var AInputAdaptor: TCustomWebdataInputAdaptor);
+ private
+ { private declarations }
+ public
+ { public declarations }
+ end;
+
+var
+ FPWebProviderDataModule1: TFPWebProviderDataModule1;
+
+implementation
+
+uses inifiles;
+
+{ TFPWebProviderDataModule1 }
+
+procedure TFPWebProviderDataModule1.DataModuleGetContentProducer(
+ Sender: TObject; var AContentProducer: TCustomHTTPDataContentProducer);
+begin
+ If Request.QueryFields.values['format']='xml' then
+ AContentProducer:=ExtJSXMLDataFormatter1;
+end;
+
+procedure TFPWebProviderDataModule1.DataModuleCreate(Sender: TObject);
+
+Var
+ FN : String;
+ Ini : TMemIniFile;
+
+begin
+ FN:=ChangeFileExt(Paramstr(0),'.ini');
+ If FileExists(FN) then
+ begin
+ Ini:=TMemIniFile.Create(FN);
+ try
+ With IBConnection1 do
+ begin
+ DatabaseName:=Ini.ReadString('Database','Path',DatabaseName);
+ UserName:=Ini.ReadString('Database','UserName',UserName);
+ Password:=Ini.ReadString('Database','Password',Password);
+ end;
+ finally
+ Ini.Free;
+ end;
+ end;
+ IBConnection1.Connected:=True;
+end;
+
+procedure TFPWebProviderDataModule1.ANAMEGetNewID(Sender: TObject; out
+ AID: String);
+begin
+ With QGetID Do
+ begin
+ Close;
+ Open;
+ try
+ if (EOF and BOF) then
+ Raise Exception.Create('No ID generated');
+ AID:=Fields[0].AsString;
+ finally
+ Close;
+ end;
+ end;
+end;
+
+procedure TFPWebProviderDataModule1.DataModuleGetInputAdaptor(Sender: TObject;
+ var AInputAdaptor: TCustomWebdataInputAdaptor);
+begin
+ If Request.QueryFields.values['format']='xml' then
+ AInputAdaptor:=ExtJSXMLWebdataInputAdaptor1;
+end;
+
+initialization
+ {$I wmusers.lrs}
+
+ RegisterHTTPModule('Provider', TFPWebProviderDataModule1);
+end.
+
diff --git a/packages/fcl-web/examples/webdata/demos.txt b/packages/fcl-web/examples/webdata/demos.txt
new file mode 100644
index 0000000000..d3f538cc48
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/demos.txt
@@ -0,0 +1,40 @@
+
+The demo directories demonstrate the use of the TFPWebDataProvider
+components, using ExtJS. It demonstrates the use of JSON and XML
+communitation between a ExtJS Datastore and the webdataprovider.
+
+ExtJS must be installed, it can be downloaded for free from
+http://www.extjs.com/
+
+The examples assume that it is reachable through /ext/
+
+Demo1 shows how to use the component with a plain webdatamodule,
+using actions, and creating all components on the fly.
+
+Demo2 shows how to use the components by dropping them on a plain
+webdatamodule, and handling all in the OnRequest handler of the
+webdatamodule.
+
+Demo3 shows how to use the components in combination with a
+WebProviderDatamodule.
+
+Demo4 shows how webdataprovider components can be dropped
+on plain datamodules, and how these modules can be made
+available to the webdatamodule.
+
+Demo5 shows how to register your own TWebdataProvider instances, which
+are created on the fly to perform their action.
+
+Demo6 demonstrates the use of the TSQLDBWebDataProvider component.
+
+All demos except Demo6 use CGI and a TDBF component to feed data to
+the webpage, which means they are not very suitable for real life
+situations due to file locking etc.
+
+
+To try a demo, compile one of the appropriate CGI apps, and open
+the extgrid-json.html or extgrid-xml.html page in your browser
+through the webserver, something like:
+
+http://localhost/~myuser/extjs/demo2/extgrid-json.html
+
diff --git a/packages/fcl-web/examples/webdata/users.dbf b/packages/fcl-web/examples/webdata/users.dbf
new file mode 100644
index 0000000000..ffd460ed30
--- /dev/null
+++ b/packages/fcl-web/examples/webdata/users.dbf
Binary files differ