<FormType>dfm</FormType>
<DesignClass>TDataModule</DesignClass>
</DCCReference>
- <None Include="index.htm"/>
- <None Include="article.htm"/>
- <None Include="top.htm"/>
<BuildConfiguration Include="Release">
<Key>Cfg_2</Key>
<CfgParent>Base</CfgParent>
</Source>
</Delphi.Personality>
<Deployment>
- <DeployFile LocalName="Untitled1.htm" Configuration="Debug" Class="ProjectFile">
- <Platform Name="Win32">
- <RemoteDir>.\</RemoteDir>
- <Overwrite>true</Overwrite>
- </Platform>
- </DeployFile>
- <DeployFile LocalName="index.htm" Configuration="Debug" Class="ProjectFile">
- <Platform Name="Win32">
- <RemoteDir>.\</RemoteDir>
- <Overwrite>true</Overwrite>
- </Platform>
- </DeployFile>
<DeployFile LocalName="Win32\Debug\Project3.exe" Configuration="Debug" Class="ProjectOutput">
<Platform Name="Win32">
<RemoteName>Project3.exe</RemoteName>
object DataModule1: TDataModule1
OldCreateOrder = False
- Height = 150
- Width = 215
+ Height = 230
+ Width = 302
object FDTable1: TFDTable
Active = True
- IndexFieldNames = 'DATABASE'
+ IndexFieldNames = 'DBNUM'
Connection = FDConnection1
UpdateOptions.UpdateTableName = 'DBNAME'
TableName = 'DBNAME'
- Left = 16
+ Left = 32
Top = 88
+ object FDTable1DBNUM: TIntegerField
+ FieldName = 'DBNUM'
+ Origin = 'DBNUM'
+ Required = True
+ end
object FDTable1DATABASE: TWideStringField
FieldName = 'DATABASE'
Origin = '"DATABASE"'
end
object FDTable2: TFDTable
Active = True
- IndexFieldNames = 'NUMBER'
+ IndexFieldNames = 'DBNUM;NUMBER'
+ MasterSource = DataSource1
+ MasterFields = 'DBNUM'
Connection = FDConnection1
UpdateOptions.UpdateTableName = 'ARTICLE'
TableName = 'ARTICLE'
- Left = 80
+ Left = 96
Top = 88
+ object FDTable2DBNUM: TIntegerField
+ FieldName = 'DBNUM'
+ Origin = 'DBNUM'
+ Required = True
+ end
object FDTable2NUMBER: TIntegerField
FieldName = 'NUMBER'
Origin = 'NUMBER'
Connection = FDConnection1
UpdateOptions.UpdateTableName = 'SETTING'
TableName = 'SETTING'
- Left = 144
+ Left = 160
Top = 88
- object FDTable3TITLE: TStringField
+ object FDTable3TITLE: TWideStringField
FieldName = 'TITLE'
Origin = 'TITLE'
+ Size = 80
end
- object FDTable3TITLE2: TStringField
+ object FDTable3TITLE2: TWideStringField
FieldName = 'TITLE2'
Origin = 'TITLE2'
- Size = 80
+ Size = 320
end
object FDTable3MENTE: TBooleanField
FieldName = 'MENTE'
Origin = 'MENTE'
end
+ object FDTable3INFO: TIntegerField
+ FieldName = 'INFO'
+ Origin = 'INFO'
+ end
+ object FDTable3COUNT: TIntegerField
+ FieldName = 'COUNT'
+ Origin = '"COUNT"'
+ end
end
object FDGUIxWaitCursor1: TFDGUIxWaitCursor
Provider = 'Forms'
Left = 48
Top = 24
end
+ object DataSource1: TDataSource
+ DataSet = FDTable1
+ Left = 64
+ Top = 152
+ end
+ object FDQuery1: TFDQuery
+ Connection = FDConnection1
+ Left = 160
+ Top = 152
+ end
+ object FDTable4: TFDTable
+ Active = True
+ Connection = FDConnection1
+ UpdateOptions.UpdateTableName = 'REQ'
+ TableName = 'REQ'
+ Left = 224
+ Top = 88
+ object FDTable4DBNAME: TIntegerField
+ FieldName = 'DBNAME'
+ Origin = 'DBNAME'
+ end
+ object FDTable4POSNUM: TIntegerField
+ FieldName = 'POSNUM'
+ Origin = 'POSNUM'
+ end
+ object FDTable4DATE: TDateField
+ FieldName = 'DATE'
+ Origin = '"DATE"'
+ Required = True
+ end
+ object FDTable4REQUEST: TWideMemoField
+ FieldName = 'REQUEST'
+ Origin = 'REQUEST'
+ BlobType = ftWideMemo
+ end
+ end
end
FDTable2NAME: TStringField;
FDTable2COMMENT: TWideMemoField;
FDTable2RAW: TWideMemoField;
+ FDTable3: TFDTable;
+ FDGUIxWaitCursor1: TFDGUIxWaitCursor;
+ DataSource1: TDataSource;
+ FDTable2DBNUM: TIntegerField;
FDTable2DATE: TDateField;
FDTable1DATABASE: TWideStringField;
- FDTable3: TFDTable;
- FDTable3TITLE: TStringField;
- FDTable3TITLE2: TStringField;
+ FDTable1DBNUM: TIntegerField;
+ FDQuery1: TFDQuery;
+ FDTable4: TFDTable;
+ FDTable3TITLE: TWideStringField;
+ FDTable3TITLE2: TWideStringField;
FDTable3MENTE: TBooleanField;
- FDGUIxWaitCursor1: TFDGUIxWaitCursor;
+ FDTable3INFO: TIntegerField;
+ FDTable4DBNAME: TIntegerField;
+ FDTable4POSNUM: TIntegerField;
+ FDTable4DATE: TDateField;
+ FDTable4REQUEST: TWideMemoField;
+ FDTable3COUNT: TIntegerField;
private
{ Private \90é\8c¾ }
public
item
Name = 'top'
PathInfo = '/'
- Producer = top
- OnAction = TWebModule1indexpageAction
+ OnAction = TWebModule1topAction
end
item
- Default = True
Name = 'indexpage'
PathInfo = '/index'
- Producer = index
OnAction = TWebModule1indexpageAction
end
item
+ MethodType = mtPost
Name = 'regist'
PathInfo = '/regist'
OnAction = TWebModule1registAction
+ end
+ item
+ Name = 'admin'
+ PathInfo = '/admin'
+ OnAction = TWebModule1adminAction
+ end
+ item
+ Name = 'search'
+ PathInfo = '/search'
+ OnAction = TWebModule1searchAction
+ end
+ item
+ Name = 'help'
+ PathInfo = '/help'
+ OnAction = TWebModule1helpAction
+ end
+ item
+ MethodType = mtGet
+ Name = 'master'
+ PathInfo = '/master'
+ OnAction = page
end>
- Height = 596
- Width = 680
- object top: TPageProducer
- Left = 40
- Top = 32
- end
+ Height = 251
+ Width = 436
object articles: TDataSetPageProducer
HTMLDoc.Strings = (
' <hr size=1>'
- #9'<section id=number><a name=<#number>></a><a href=/{{link}}/user' +
- 'del?job=<#number> style=text-decoration:none>'
+ #9'<section id=number><a name=<#number>></a><a href=/userdel?job=<' +
+ '#number> style=text-decoration:none>'
#9#9'[<#number>]</a></section>'
#9'<section id=title><#title></section>'
#9'<section id=name>'#12288'Name:<h1><#name></h1></section>'
'?db=<#database>&num=<#number>>'#22577#21578'</a></section>'
#9'<p>'#9651#9660#9651#9660#9651#9660#9651)
DataSet = DataModule1.FDTable2
+ OnHTMLTag = articlesHTMLTag
Left = 112
Top = 88
end
object index: TDataSetPageProducer
- HTMLFile = 'C:\Users\yamat\Documents\GitHub\newbbs\index.htm'
+ HTMLDoc.Strings = (
+ '<!DOCTYPE html>'
+ '<html lang="ja">'
+ ' <head>'
+ ' <meta charset="utf-8">'
+ ' <title>'
+ ' <#title>'
+ ' </title>'
+ ' </head>'
+ ' <body>'
+ ''
+ ' <a href=/ style=text-decoration:none><#title2></a>'
+ ' <header>'
+ ' <a name=top></a>'
+ ' <form action=/regist?db=<#database> method="post">'
+ ' <table>'
+ ' <tr><td>'
+
+ ' <label><p>'#12362#21517#21069'</p><input name="name" class=name value=<' +
+ '#cookie param=name>></label>'
+
+ ' <label><p>'#12479#12452#12488#12523'</p><input name="title" class=title valu' +
+ 'e=<#cookie param=title> placeholder="'#12479#12452#12488#12523#12394#12375'."></label>'
+ ' <input type="submit" value="'#36865#20449'">'
+ ' </td></tr>'
+ ' <tr><td>'
+ ' <label><p>'#26412#25991'<span>'#24517#38920'</span><br></p>'
+
+ ' <textarea style="font-size:1.75em" name="comment" co' +
+ 'ls=30'
+
+ ' required placeholder="'#12467#12513#12531#12488#12394#12393#12434#20837#21147#12375#12390#12367#12384#12373#12356'."><#' +
+ 'cookie param=comment></textarea></label>'
+ ' </td></tr>'
+ ' <tr><td>'
+
+ ' <label><p>'#12497#12473#12527#12540#12489'</p><input name="password" type="passwo' +
+ 'rd" placeholder="'#21066#38500#29992'">'
+
+ ' </label> / <input type="checkbox" name="show" value="t' +
+ 'rue" checked><p>'#12503#12524#12499#12517#12540'</p>'
+ ' </td></tr>'
+ ' <tr><td>'
+
+ ' <label><p>'#21512#35328#33865#12434#12402#12425#12364#12394#12391#20837#21147#12375#12390#12367#12384#12373#12356': genki <input name=aikotob' +
+ 'a type=text value=<#cookie param=aikotoba>></label>'
+ ' </td></tr>'
+ ' </table>'
+ ' </form>'
+ ' </header>'
+ ' <hr size="1" width="100%">'
+
+ ' <form action=/userdel?db=<#database> method="post" id=search' +
+ '>'
+ ' <label><p>'#35352#20107'No</p><input name="number"></label>'
+
+ ' <label><p>Pass</p><input type="password" name="password"><' +
+ '/label>'
+ ' <input type="submit" value="'#21066#38500'">'
+ ' </form>'
+ ' <form action=/userdel?db=<#database> method=post id=search>'
+ ' <label><p>'#35352#20107'No</p><input name=number></label>'
+ ' <input type=submit value='#31227#21205'>'
+ ' </form>'
+ ' <p><a href=/search?db=<#database>>'#26908#32034#12506#12540#12472'</a></p>'
+ ' <p style=text-align:right><a href=#article>'#19979#12408#31227#21205'</a></p>'
+ ' <p style=text-align:center><#database></p>'
+ ' <#header>'
+ ' <#article>'
+ #9'<a name=article></a>'
+ #9'<p style=text-align:right><a href=#top>Top'#12408#31227#21205'</a></p>'
+ ' <#footer>'
+
+ ' <p style=text-align:center><a href="/admin?db=<#database>&nu' +
+ 'm=0">'#31649#29702#32773#29992#12525#12464#12452#12531'</a></p>'
+ ' </body>'
+ '</html>')
DataSet = DataModule1.FDTable1
OnHTMLTag = indexHTMLTag
Left = 112
Top = 32
end
+ object admin: TDataSetTableProducer
+ Columns = <
+ item
+ FieldName = 'NUMBER'
+ end
+ item
+ FieldName = 'TITLE'
+ end
+ item
+ FieldName = 'NAME'
+ end
+ item
+ FieldName = 'COMMENT'
+ end
+ item
+ FieldName = 'DATE'
+ end>
+ Footer.Strings = (
+ '<a href=/index style=text-align:center>'#25147#12427'</a>')
+ Header.Strings = (
+ '')
+ DataSet = DataModule1.FDTable2
+ Left = 176
+ Top = 32
+ end
+ object search: TPageProducer
+ HTMLDoc.Strings = (
+ ''
+ '<!DOCTYPE HTML>'
+ ''
+ '<html>'
+ ' <head>'
+ ' <title>'#26908#32034'</title>'
+ ' </head>'
+ ''
+ ' <body>'
+ ' <form action="/search" method="post">'
+ ' <p align="center"><strong>'#25237#31295#26908#32034
+ '</strong>'
+ ' </p>'
+ ' <p>'
+ '</p>'
+ ' <p>'
+ ' </p>'
+ ' <p align="center">'#26908#32034#12290#12473#12506#12540#12473#12391#21306#20999#12387#12390#12367#12384#12373#12356#12290'</p>'
+ ' <select name=type>'
+ ' <option value=OR>OR</option>'
+ ' <option value=AND>AND</option>'
+ ' </select> '
+
+ ' <div style="HEIGHT: 26px; WIDTH: 105px; POSITION: relati' +
+ 've; DISPLAY: inline" ms_positioning="FlowLayout">'#26908#32034#12527#12540#12489
+ '</div>'
+ ' <p> <input name="word1"></p>'
+
+ ' <p><input type="radio" name="filter" style="HEIGHT: 20px; WI' +
+ 'DTH: 17px" size="17" value="name">'#21517#21069#12363#12425#26908#32034' <input type="radio" che' +
+ 'cked="true" style="HEIGHT: 20px; WIDTH: 16px" size="16" name="fi' +
+ 'lter" value="com">'#26412#25991#12363#12425#26908#32034
+ '</p>'
+ ' <p>'
+ ' <input type="submit" value="'#26908#32034'"></p>'
+ ' </form>'
+ ' <p><a href="/">'#25522#31034#26495#12408#25147#12427
+ '</a></p>'
+ ' <#items>'
+ ' </body>'
+ '</html>')
+ OnHTMLTag = searchHTMLTag
+ Left = 240
+ Top = 32
+ end
+ object items: TDataSetPageProducer
+ HTMLDoc.Strings = (
+ ' <hr size=1>'
+ #9'<section id=title><#title></section>'
+ #9'<section id=name>'#12288'Name:<h1><#name></h1></section>'
+ #9'<section id=date>'#12288'Date:<h1><#date></h1></section>'
+ #9
+ #9'<section id=comment><#item></section>'
+ '')
+ DataSet = DataModule1.FDTable2
+ OnHTMLTag = itemsHTMLTag
+ Left = 240
+ Top = 88
+ end
+ object help: TPageProducer
+ HTMLDoc.Strings = (
+ ''
+ '<!DOCTYPE html>'
+ ''
+ '<html><head><meta charset=utf8><title>'#20351#12356#26041'</title></head>'
+ '<body>'
+ '<P>'#35370#21839#32773#12398#30342#12373#12435'</P>'
+ '<form action=/help method=post>'
+ #9'<p>'#12362#21839#12356#21512#12431#12379'<'#21066#38500#20381#38972#12394#12393#20309#12391#12418'></p>'
+ #9'<textarea name=help style=height:100px;width:250px>'
+ #25237#31295#32773#21517#12394#12393#65306
+ #30456#35527#20869#23481#65306
+ #12381#12398#20182#65306'</textarea><br>'
+ #9'<input type=submit value="'#36865#20449'"></form>'
+ #9'<p><br>'
+ '<p>'#38283#30330#32773#12398#30342#12373#12435
+ '<p>pybbs'#12398'API'
+ '<p>ArticleAPI ... ~/read/api/<b>dbname</b>/<b>number</b>'
+ '<p>ListAPI ... ~/headline/api'
+ '<p><br>'
+ '<p>'
+ '<p>'#21033#29992#35215#32004
+ '<p>'#12371#12428#12363#12425#26360#12365#12414#12377
+ '<p style=text-align:center><a href=/>'#25147#12427'</a>'
+ '</body>'
+ '</html>')
+ Left = 304
+ Top = 32
+ end
+ object top: TPageProducer
+ HTMLDoc.Strings = (
+ '<!doctype html>'
+ '<html class="no-js" lang="ja">'
+ '<head>'
+
+ #9'<meta charset="utf-8" name="google-site-verification" content=' +
+ '"5KOTJTKv1HgTtIt0zVGzuyAkADCwXRme-RiiKJ03l3s" />'
+ #9'<meta http-equiv="X-UA-Compatible" content="IE=edge">'
+ #9'<title>Top Page'
+ '</title>'
+ #9'<link rel="stylesheet" href="{{static_url(css/top.css">'
+ #9'<link rel="stylesheet" href="{{static_url(css/normalize.css">'
+ #9'<script src="{{static_url(js/jquery-1.10.2.min.js"></script>'
+ #9'<script src="{{static_url(js/top.js"></script>'
+ #9'<script src="{{static_url(js/modernizr.custom.min.js"></script>'
+
+ #9'<script src="{{static_url(js/jquery-ui-1.10.3.custom.min.js"></' +
+ 'script>'
+ '</head>'
+ '<body>'
+ '<div id="fb-root"></div>'
+ '<script>(function(d, s, id) {'
+ ' var js, fjs = d.getElementsByTagName(s)[0];'
+ ' if (d.getElementById(id)) return;'
+ ' js = d.createElement(s); js.id = id;'
+
+ ' js.src = "//connect.facebook.net/ja_JP/sdk.js#xfbml=1&version=' +
+ 'v2.8";'
+ ' fjs.parentNode.insertBefore(js, fjs);'
+ '}(document, '#39'script'#39', '#39'facebook-jssdk'#39'));</script>'
+ '<header><h1 style="text-align: center;">'#28961#26009#38651#23376#25522#31034#26495#12408#12424#12358#12371#12381
+ '</h1></header><div class="slideshow">'
+ #9'<div class="slideshow-slides"><div class="slide">'
+ #9'<img src=>'
+ '<#list>'
+ '</div>'
+ '</div>'
+ '</div>'
+ #9'<div class="slideshow-nav">'
+ #9'<a href="#" class="prev">prev'
+ '</a>'
+ #9'<a href="#" class="next">next'
+ '</a>'
+ #9'</div>'
+ #9'<div class="slideshow-indicator"></div>'
+
+ ' <p>[ <a href=/index?db=<#info>><#info></a> ] ='#12362#30693#12425#12379' <p>[ ' +
+ '<a href="/master">master'
+
+ '</a> ] ='#31649#29702#20154'<div class="fb-like" data-href="http://pybbs.herokuap' +
+ 'p.com" data-layout="box_count" data-action="like" data-size="sma' +
+ 'll" data-show-faces="true" data-share="false"></div>'
+
+ '<p><a href="http://www.xn--gckj5d1ktb3488cn4q.jp/" target="_blan' +
+ 'k"><img alt="'#28961#26009#12459#12454#12531#12479#12540'" src="http://www.xn--gckj5d1ktb3488cn4q.jp/' +
+ 'counter.php?id=pybbs" border="0"></a>'
+ '<footer>'
+ '<p><br>'
+ '<p><a href="/title">'#12479#12452#12488#12523#34920#31034
+ '</a>'
+ '<p><a href="/help">'#20351#12356#26041#26696#20869
+ '</a>'
+ '<p><a href=/search>'#26908#32034'</a>'
+ '<p>PR '#12522#12531#12463'<br>'
+
+ '<p><a href="https://www.amazon.co.jp/%E9%AB%98%E6%A0%A1%E5%8D%92' +
+ '%E6%A5%AD%E3%81%BE%E3%81%A7%E3%81%AE%E3%82%B5%E3%83%83%E3%82%AB%' +
+ 'E3%83%BC%E6%88%A6%E8%A1%93-sanuki_kainushi-ebook/dp/B00AXBM08Q/r' +
+ 'ef=sr_1_7?ie=UTF8&qid=1479369992&sr=8-7&keywords=san' +
+ 'uki_kainushi">'#39640#26657#21330#26989#12414#12391#12398#12469#12483#12459#12540#25126#34899
+ '</a><br>amazon kindle'
+ '</p>'
+ '<p>'
+
+ '<p><a href="https://www.amazon.co.jp/%E4%B8%AD%E5%AD%A6%E5%8D%92' +
+ '%E6%A5%AD%E3%81%BE%E3%81%A7%E3%81%AE%E3%82%B5%E3%83%83%E3%82%AB%' +
+ 'E3%83%BC%E6%88%A6%E8%A1%93-sanuki_kainushi-ebook/dp/B014X0S874/r' +
+ 'ef=sr_1_3?s=digital-text&ie=UTF8&qid=1479370246&sr=1' +
+ '-3">'#20013#23398#21330#26989#12414#12391#12398#12469#12483#12459#12540#25126#34899
+ '</a><br>amazon kindle'
+ '</p>'
+ '</footer>'
+ ''
+ '</body>'
+ '</html>')
+ OnHTMLTag = topHTMLTag
+ Left = 48
+ Top = 32
+ end
+ object master: TPageProducer
+ HTMLDoc.Strings = (
+ '<!doctype html>'
+ '<head>'
+ '<meta charset=utf-8>'
+ '</head>'
+ '<body>'
+ ''
+ '<p><#request>'
+ '</body></html>')
+ OnHTMLTag = masterHTMLTag
+ Left = 56
+ Top = 144
+ end
+ object alert: TDataSetPageProducer
+ HTMLDoc.Strings = (
+ '<p>[ <#dbname>-<#posnum> ]<#date>'
+ '<p><#comment>')
+ DataSet = DataModule1.FDTable2
+ Left = 56
+ Top = 192
+ end
+ object footer: TDataSetPageProducer
+ HTMLDoc.Strings = (
+ '<p style=text-align:center>[ <#link> ] <#recent>')
+ DataSet = DataModule1.FDTable1
+ OnHTMLTag = footerHTMLTag
+ Left = 112
+ Top = 192
+ end
end
interface
-uses System.SysUtils, System.Classes, Web.HTTPApp, Web.DSProd, Web.HTTPProd;
+uses System.SysUtils, System.Classes, Web.HTTPApp, Web.DSProd, Web.HTTPProd,
+ Web.DBWeb, System.Variants;
type
TTWebModule1 = class(TWebModule)
- top: TPageProducer;
articles: TDataSetPageProducer;
index: TDataSetPageProducer;
+ admin: TDataSetTableProducer;
+ search: TPageProducer;
+ items: TDataSetPageProducer;
+ help: TPageProducer;
+ top: TPageProducer;
+ master: TPageProducer;
+ alert: TDataSetPageProducer;
+ footer: TDataSetPageProducer;
procedure indexHTMLTag(Sender: TObject; Tag: TTag; const TagString: string;
TagParams: TStrings; var ReplaceText: string);
procedure TWebModule1indexpageAction(Sender: TObject; Request: TWebRequest;
procedure TWebModule1registAction(Sender: TObject; Request: TWebRequest;
Response: TWebResponse; var Handled: Boolean);
procedure WebModuleCreate(Sender: TObject);
+ procedure TWebModule1adminAction(Sender: TObject; Request: TWebRequest;
+ Response: TWebResponse; var Handled: Boolean);
+ procedure TWebModule1topAction(Sender: TObject; Request: TWebRequest;
+ Response: TWebResponse; var Handled: Boolean);
+ procedure itemsHTMLTag(Sender: TObject; Tag: TTag; const TagString: string;
+ TagParams: TStrings; var ReplaceText: string);
+ procedure topHTMLTag(Sender: TObject; Tag: TTag; const TagString: string;
+ TagParams: TStrings; var ReplaceText: string);
+ procedure TWebModule1searchAction(Sender: TObject; Request: TWebRequest;
+ Response: TWebResponse; var Handled: Boolean);
+ procedure TWebModule1helpAction(Sender: TObject; Request: TWebRequest;
+ Response: TWebResponse; var Handled: Boolean);
+ procedure searchHTMLTag(Sender: TObject; Tag: TTag; const TagString: string;
+ TagParams: TStrings; var ReplaceText: string);
+ procedure page(Sender: TObject; Request: TWebRequest;
+ Response: TWebResponse; var Handled: Boolean);
+ procedure masterHTMLTag(Sender: TObject; Tag: TTag; const TagString: string;
+ TagParams: TStrings; var ReplaceText: string);
+ procedure articlesHTMLTag(Sender: TObject; Tag: TTag;
+ const TagString: string; TagParams: TStrings; var ReplaceText: string);
+ procedure footerHTMLTag(Sender: TObject; Tag: TTag; const TagString: string;
+ TagParams: TStrings; var ReplaceText: string);
private
{ private \90é\8c¾ }
+ ss: TStringList;
public
{ public \90é\8c¾ }
end;
{$R *.dfm}
+procedure TTWebModule1.articlesHTMLTag(Sender: TObject; Tag: TTag;
+ const TagString: string; TagParams: TStrings; var ReplaceText: string);
+begin
+ if TagString = 'database' then
+ ReplaceText := Request.QueryFields.Values['db'];
+end;
+
+procedure TTWebModule1.footerHTMLTag(Sender: TObject; Tag: TTag;
+ const TagString: string; TagParams: TStrings; var ReplaceText: string);
+var
+ i: Integer;
+begin
+ if TagString = 'link' then
+ for i := 1 to 10 do
+ if i = Self.Tag then
+ ReplaceText := ReplaceText + ' ' + i.ToString + ' '
+ else
+ ReplaceText := ReplaceText +
+ Format('<a href=/index?db=%s&num=%d> %d </a>',
+ [Request.QueryFields.Values['db'], i, i])
+ else if TagString = 'recent' then
+ case Self.Tag of
+ - 1:
+ ReplaceText := TagString
+ else
+ ReplaceText := '<a href=/index?db=' + Request.QueryFields.Values['db'] +
+ '>recent</a>';
+ end;
+end;
+
procedure TTWebModule1.indexHTMLTag(Sender: TObject; Tag: TTag;
const TagString: string; TagParams: TStrings; var ReplaceText: string);
+var
+ count, max, index: Integer;
+ i: Integer;
begin
+ if Self.Tag = 0 then
+ begin
+ DataModule1.FDTable1.Locate('database',
+ Request.QueryFields.Values['db'], []);
+ count := DataModule1.FDTable2.RecordCount;
+ max := DataModule1.FDTable3.FieldByName('count').AsInteger;
+ index := StrToIntDef(Request.QueryFields.Values['num'], -1);
+ if count >= 10 * max then
+ ReplaceText := '\82±\82ê\88È\8fã\93\8a\8de\82Å\82«\82Ü\82¹\82ñ.';
+ if (index > -1) and (count < max * (index - 1)) then
+ index := (count div max) + 1;
+ Self.Tag := index;
+ case index of
+ - 1:
+ begin
+ DataModule1.FDTable2.Last;
+ DataModule1.FDTable2.MoveBy(1 - max);
+ end;
+ else
+ DataModule1.FDTable2.First;
+ DataModule1.FDTable2.MoveBy(max * (index - 1));
+ end;
+ end;
if TagString = 'article' then
begin
- DataModule1.FDTable2.First;
- while DataModule1.FDTable2.Eof = false do
+ for i := 1 to max do
begin
+ if DataModule1.FDTable2.Eof = true then
+ break;
ReplaceText := ReplaceText + articles.Content;
DataModule1.FDTable2.Next;
end;
+ end
+ else if (TagString = 'footer') or (TagString = 'header') then
+ ReplaceText := ReplaceText + footer.Content;
+end;
+
+procedure TTWebModule1.itemsHTMLTag(Sender: TObject; Tag: TTag;
+ const TagString: string; TagParams: TStrings; var ReplaceText: string);
+var
+ s: TStringList;
+ t: string;
+ i, j: Integer;
+begin
+ if TagString = 'item' then
+ begin
+ s := TStringList.Create;
+ try
+ s.Text := DataModule1.FDTable2.FieldByName('raw').AsString;
+ for i := 0 to s.count - 1 do
+ for j := 0 to ss.count - 1 do
+ if Pos(ss[j], s[i]) > 0 then
+ if Request.ContentFields.Values['type'] = 'OR' then
+ s[i] := '<p style=background-color:aqua>' + s[i]
+ else
+ s[i] := '<p style=background-color:yellow>' + s[i];
+ with DataModule1.FDTable2 do
+ t := Format('<a href=%s>[ %s-%s ]</a>',
+ ['/index', FieldByName('dbnum').AsString, FieldByName('number')
+ .AsString]);
+ ReplaceText := t + s.Text;
+ finally
+ s.Free;
+ end;
end;
end;
+procedure TTWebModule1.masterHTMLTag(Sender: TObject; Tag: TTag;
+ const TagString: string; TagParams: TStrings; var ReplaceText: string);
+var
+ i, j: Integer;
+ s: string;
+begin
+ if TagString = 'request' then
+ with DataModule1.FDTable4 do
+ begin
+ First;
+ while Eof = false do
+ begin
+ i := FieldByName('dbname').AsInteger;
+ j := FieldByName('posnum').AsInteger;
+ DataModule1.FDTable2.Locate('dbname;posnum', VarArrayOf([i, j]), []);
+ s := DataModule1.FDTable4.FieldByName('request').AsString;
+ ReplaceText := ReplaceText + alert.Content + s;
+ Next;
+ end;
+ end;
+end;
+
+procedure TTWebModule1.searchHTMLTag(Sender: TObject; Tag: TTag;
+ const TagString: string; TagParams: TStrings; var ReplaceText: string);
+var
+ s: TStringList;
+ i: Integer;
+ j: Integer;
+begin
+ if (Request.MethodType = mtPost) and (TagString = 'items') then
+ begin
+ DataModule1.FDTable1.First;
+ s := TStringList.Create;
+ ss := TStringList.Create;
+ try
+ while DataModule1.FDTable1.Eof = false do
+ begin
+ DataModule1.FDTable2.First;
+ while DataModule1.FDTable2.Eof = false do
+ begin
+ s.Text := DataModule1.FDTable2.FieldByName('raw').AsString;
+ ss.Delimiter := ' ';
+ ss.StrictDelimiter := false;
+ ss.DelimitedText := Request.ContentFields.Values['word1'];
+ for i := 0 to s.count - 1 do
+ for j := 0 to ss.count - 1 do
+ if Pos(ss[j], s[i]) > 0 then
+ ReplaceText := ReplaceText + items.Content;
+ DataModule1.FDTable2.Next;
+ end;
+ DataModule1.FDTable1.Next;
+ end;
+ finally
+ s.Free;
+ ss.Free;
+ end;
+ end;
+end;
+
+procedure TTWebModule1.topHTMLTag(Sender: TObject; Tag: TTag;
+ const TagString: string; TagParams: TStrings; var ReplaceText: string);
+var
+ s, t: string;
+ i: Integer;
+begin
+ if TagString = 'list' then
+ begin
+ DataModule1.FDTable1.First;
+ i := DataModule1.FDTable3.FieldByName('info').AsInteger;
+ while DataModule1.FDTable1.Eof = false do
+ begin
+ t := '';
+ if i = DataModule1.FDTable1.FieldByName('dbnum').AsInteger then
+ begin
+ DataModule1.FDTable1.Next;
+ continue;
+ end;
+ s := DataModule1.FDTable1.FieldByName('database').AsString;
+ DataModule1.FDTable2.Last;
+ if Now - DataModule1.FDTable2.FieldByName('date').AsDateTime < 1 then
+ t := 'background-color:aqua;';
+ if DataModule1.FDTable2.RecordCount >= 30 then
+ t := t + 'font-color:red;';
+ if t <> '' then
+ t := ' style=' + t;
+ ReplaceText := ReplaceText +
+ Format('<p%s><a target=_blank href=%s>%s</a><br></p>',
+ [t, '/index?db=' + s, s]);
+ DataModule1.FDTable1.Next;
+ end;
+ end
+ else if TagString = 'info' then
+ ReplaceText := DataModule1.FDTable1.Lookup('dbnum',
+ DataModule1.FDTable3.FieldByName('info').AsInteger, 'database');
+end;
+
+procedure TTWebModule1.TWebModule1adminAction(Sender: TObject;
+ Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
+begin
+ DataModule1.FDTable1.Locate('database', Request.QueryFields.Values['db'], []);
+ Response.ContentType := 'text/html;charset=utf-8';
+ Response.Content := admin.Content;
+end;
+
+procedure TTWebModule1.TWebModule1helpAction(Sender: TObject;
+ Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
+var
+ i, j: Integer;
+ s: string;
+begin
+ Response.ContentType := 'text/html;charset=utf-8';
+ if Request.MethodType = mtPost then
+ begin
+ i := DataModule1.FDTable1.FieldByName('dbnum').AsInteger;;
+ j := DataModule1.FDTable2.FieldByName('number').AsInteger;
+ s := Request.ContentFields.Values['help'];
+ DataModule1.FDTable4.AppendRecord([i, j, s]);
+ end;
+ Response.Content := help.Content;
+end;
+
procedure TTWebModule1.TWebModule1indexpageAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
- Response.ContentType := 'text/html;charset=utf8';
+ Self.Tag := 0;
+ Response.ContentType := 'text/html; charset="utf-8"';
if DataModule1.FDTable3.FieldByName('mente').AsBoolean = true then
- Response.Content := '\82½\82¾\82¢\82Ü\83\81\83\93\83e\83i\83\93\83X\92\86\82Å\82·^_^';
+ Response.Content := '\82½\82¾\82¢\82Ü\83\81\83\93\83e\83i\83\93\83X\92\86\82Å\82·^_^'
+ else
+ Response.Content := index.Content;
+end;
+
+procedure TTWebModule1.page(Sender: TObject; Request: TWebRequest;
+ Response: TWebResponse; var Handled: Boolean);
+begin
+ Response.ContentType := 'text/html;charset=utf-8';
+ Response.Content := alert.Content;
end;
procedure TTWebModule1.TWebModule1registAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
var
- number: integer;
+ number: Integer;
title, name, raw: string;
comment: TStringList;
- i: integer;
+ i: Integer;
begin
+ name := Request.QueryFields.Values['db'];
+ DataModule1.FDTable1.Locate('database', name, []);
with DataModule1.FDTable2 do
begin
Last;
comment := TStringList.Create;
try
comment.Text := raw;
- for i := 0 to comment.Count - 1 do
+ for i := 0 to comment.count - 1 do
comment[i] := '<p>' + comment[i];
- DataModule1.FDTable2.AppendRecord([number, title, name, comment.Text,
+ i := DataModule1.FDTable1.FieldByName('dbnum').AsInteger;
+ DataModule1.FDTable2.AppendRecord([i, number, title, name, comment.Text,
raw, Now]);
finally
comment.Free;
end;
- Response.SendRedirect('/index');
+ Response.SendRedirect('/index?db=' + name);
+end;
+
+procedure TTWebModule1.TWebModule1searchAction(Sender: TObject;
+ Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
+begin
+ Response.ContentType := 'text/html;charset=utf-8';
+ Response.Content := search.Content;
+end;
+
+procedure TTWebModule1.TWebModule1topAction(Sender: TObject;
+ Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
+begin
+ Response.ContentType := 'text/html;charset=utf-8';
+ Response.Content := top.Content;
end;
procedure TTWebModule1.WebModuleCreate(Sender: TObject);
+var
+ a: Variant;
begin
if DataModule1.FDTable1.Bof and DataModule1.FDTable1.Eof then
- DataModule1.FDTable1.AppendRecord(['info']);
+ DataModule1.FDTable1.AppendRecord([0, 'info']);
+ if DataModule1.FDTable3.Bof and DataModule1.FDTable3.Eof then
+ begin
+ a := DataModule1.FDTable1.Lookup('database', 'info', 'dbnum');
+ DataModule1.FDTable3.AppendRecord
+ (['\82Æ\82é\82Ë\81`\82Ç\8d\86', '<p style=font-color:gray>\82Æ\82é\82Ë\81`\82Ç\8d\86</p>', false, a, 30]);
+ end;
end;
end.
+++ /dev/null
- <hr size=1>
- <section id=number><a name=<#number>></a><a href=/{{link}}/userdel?job=<#number> style=text-decoration:none>
- [<#number>]</a></section>
- <section id=title><#title></section>
- <section id=name> Name:<h1><#name></h1></section>
- <section id=date> Date:<h1><#date></h1></section>
- <p>▽▲▽▲▽▲▽
- <section id=comment><#comment></section>
- <section id=master style=text-align:right><a href=/alert?db=<#database>&num=<#number>>報告</a></section>
- <p>△▼△▼△▼△
+++ /dev/null
-<!DOCTYPE html>
-
-<html>
- <head>
- <meta charset=utf-8>
- <title>
- <#title>
- </title>
- </head>
- <body>
-
- <a href=/ style=text-decoration:none><#title2></a>
- <header>
- <a name=top></a>
- <form action=/regist?db=<#database> method="post">
- <table>
- <tr><td>
- <label><p>お名前</p><input name="name" class=name value=<#cookie param=name>></label>
- <label><p>タイトル</p><input name="title" class=title value=<#cookie param=title> placeholder="タイトルなし."></label>
- <input type="submit" value="送信">
- </td></tr>
- <tr><td>
- <label><p>本文<span>必須</span><br></p>
- <textarea style="font-size:1.75em" name="comment" cols=30
- required placeholder="コメントなどを入力してください."><#cookie param=comment></textarea></label>
- </td></tr>
- <tr><td>
- <label><p>パスワード</p><input name="password" type="password" placeholder="削除用">
- </label> / <input type="checkbox" name="show" value="true" checked><p>プレビュー</p>
- </td></tr>
- <tr><td>
- <label><p>合言葉をひらがなで入力してください: genki <input name=aikotoba type=text value=<#cookie param=aikotoba>></label>
- </td></tr>
- </table>
- </form>
- </header>
- <hr size="1" width="100%">
- <form action=/userdel?db=<#database> method="post" id=search>
- <label><p>記事No</p><input name="number"></label>
- <label><p>Pass</p><input type="password" name="password"></label>
- <input type="submit" value="削除">
- </form>
- <form action=/userdel?db=<#database> method=post id=search>
- <label><p>記事No</p><input name=number></label>
- <input type=submit value=移動>
- </form>
- <p><a href=/search?db=<#database>>検索ページ</a></p>
- <p style=text-align:right><a href=#article>下へ移動</a></p>
- <p style=text-align:center><#database></p>
-
- <#article>
- <a name=article></a>
- <p style=text-align:right><a href=#top>Topへ移動</a></p>
-
- <p style=text-align:center><a href="/admin?db=<#database>&num=0">管理者用ログイン</a></p>
- </body>
-</html>
<!doctype html>
-<html class=no-js lang=ja>
+<html class="no-js" lang="ja">
<head>
- <meta charset=utf-8 name="google-site-verification" content="5KOTJTKv1HgTtIt0zVGzuyAkADCwXRme-RiiKJ03l3s" />
+ <meta charset="utf-8" name="google-site-verification" content="5KOTJTKv1HgTtIt0zVGzuyAkADCwXRme-RiiKJ03l3s" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
- <title>Top Page</title>
- <link rel=stylesheet href={{static_url('css/top.css')}}>
- <link rel=stylesheet href={{static_url('css/normalize.css')}}>
- <script src={{static_url('js/jquery-1.10.2.min.js')}}></script>
- <script src={{static_url('js/top.js')}}></script>
- <script src={{static_url('js/modernizr.custom.min.js')}}></script>
- <script src={{static_url('js/jquery-ui-1.10.3.custom.min.js')}}></script>
+ <title>Top Page
+</title>
+ <link rel="stylesheet" href="{{static_url(css/top.css">
+ <link rel="stylesheet" href="{{static_url(css/normalize.css">
+ <script src="{{static_url(js/jquery-1.10.2.min.js"></script>
+ <script src="{{static_url(js/top.js"></script>
+ <script src="{{static_url(js/modernizr.custom.min.js"></script>
+ <script src="{{static_url(js/jquery-ui-1.10.3.custom.min.js"></script>
</head>
<body>
<div id="fb-root"></div>
js.src = "//connect.facebook.net/ja_JP/sdk.js#xfbml=1&version=v2.8";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>
-<header><h1 style=text-align:center>無料電子掲示板へようこそ</h1></header>
-{% set d = 0 %}
-{% set i = 7 %}
-<div class=slideshow>
- <div class=slideshow-slides>
-{% for x in coll %}
- {% if d % i == 0 %}
- <div class=slide>
- <img src={{static_url('img/slide{0}.jpg'.format(1+d//i))}} style=float:right;height:465px>
- {% end %}
- {% set d += 1 %}
- {% if full(x) == True %}
- <p><a href=/{{x}} style=color:red>{{x}}</a>
- {% else %}
- <p><a href=/{{x}}>{{x}}</a>
- {% end %}
- {% if d % i == 0 %}
- </div>
- {% end %}
-{% end %}
-{% if d % i != 0 %}
- </div>
-{% end %}
- </div>
- <div class=slideshow-nav>
- <a href=# class=prev>prev</a>
- <a href=# class=next>next</a>
- </div>
- <div class=slideshow-indicator></div>
+<header><h1 style="text-align: center;">無料電子掲示板へようこそ
+</h1></header>{% set d = 0 %} {% set i = 7 %}<div class="slideshow">
+ <div class="slideshow-slides">{% for x in coll %}{% if d % i == 0 %} <div class="slide">
+ <img src="{{static_url(img/slide{0}.jpg" i='style="float:right;height:465px"' format="d=">{% end %}{% set d += 1 %}{% if full(x) == True %} <p><a href="/{{x}}" style="color: red;">{{x}}
+</a>{% else %} <p><a href="/{{x}}">{{x}}
+</a>{% end %}{% if d % i == 0 %}
+</div>{% end %} {% end %} {% if d % i != 0 %}
+</div>{% end %}
</div>
-{% if name != '' %}
- <p>[ <a href=/{{name}}>{{name}}</a> ] <=お知らせ
-{% end %}
-<p>[ <a href=/master>master</a> ] <=管理人
-<div class="fb-like" data-href="http://pybbs.herokuapp.com" data-layout="box_count" data-action="like" data-size="small" data-show-faces="true" data-share="false"></div>
+ <div class="slideshow-nav">
+ <a href="#" class="prev">prev
+</a>
+ <a href="#" class="next">next
+</a>
+ </div>
+ <div class="slideshow-indicator"></div>{% if name != '' %} <p>[ <a href="/{{name}}">{{name}}
+</a> ] =お知らせ {% end %}<p>[ <a href="/master">master
+</a> ] =管理人<div class="fb-like" data-href="http://pybbs.herokuapp.com" data-layout="box_count" data-action="like" data-size="small" data-show-faces="true" data-share="false"></div>
<p><a href="http://www.xn--gckj5d1ktb3488cn4q.jp/" target="_blank"><img alt="無料カウンター" src="http://www.xn--gckj5d1ktb3488cn4q.jp/counter.php?id=pybbs" border="0"></a>
<footer>
<p><br>
-<p><a href=/title>タイトル表示</a>
-<p><a href=/help>使い方案内</a>
-<p>PR リンク
-<br>
-<p><a href=https://www.amazon.co.jp/%E9%AB%98%E6%A0%A1%E5%8D%92%E6%A5%AD%E3%81%BE%E3%81%A7%E3%81%AE%E3%82%B5%E3%83%83%E3%82%AB%E3%83%BC%E6%88%A6%E8%A1%93-sanuki_kainushi-ebook/dp/B00AXBM08Q/ref=sr_1_7?ie=UTF8&qid=1479369992&sr=8-7&keywords=sanuki_kainushi>高校卒業までのサッカー戦術</a><br>
-amazon kindle</p>
+<p><a href="/title">タイトル表示
+</a>
+<p><a href="/help">使い方案内
+</a>
+<p>PR リンク<br>
+<p><a href="https://www.amazon.co.jp/%E9%AB%98%E6%A0%A1%E5%8D%92%E6%A5%AD%E3%81%BE%E3%81%A7%E3%81%AE%E3%82%B5%E3%83%83%E3%82%AB%E3%83%BC%E6%88%A6%E8%A1%93-sanuki_kainushi-ebook/dp/B00AXBM08Q/ref=sr_1_7?ie=UTF8&qid=1479369992&sr=8-7&keywords=sanuki_kainushi">高校卒業までのサッカー戦術
+</a><br>amazon kindle
+</p>
<p>
-<p><a href=https://www.amazon.co.jp/%E4%B8%AD%E5%AD%A6%E5%8D%92%E6%A5%AD%E3%81%BE%E3%81%A7%E3%81%AE%E3%82%B5%E3%83%83%E3%82%AB%E3%83%BC%E6%88%A6%E8%A1%93-sanuki_kainushi-ebook/dp/B014X0S874/ref=sr_1_3?s=digital-text&ie=UTF8&qid=1479370246&sr=1-3>中学卒業までのサッカー戦術</a><br>
-amazon kindle</p>
+<p><a href="https://www.amazon.co.jp/%E4%B8%AD%E5%AD%A6%E5%8D%92%E6%A5%AD%E3%81%BE%E3%81%A7%E3%81%AE%E3%82%B5%E3%83%83%E3%82%AB%E3%83%BC%E6%88%A6%E8%A1%93-sanuki_kainushi-ebook/dp/B014X0S874/ref=sr_1_3?s=digital-text&ie=UTF8&qid=1479370246&sr=1-3">中学卒業までのサッカー戦術
+</a><br>amazon kindle
+</p>
</footer>
+
+
+
</body>
</html>