-
Notifications
You must be signed in to change notification settings - Fork 0
/
planetMondNameDialog.pl
339 lines (307 loc) · 13.7 KB
/
planetMondNameDialog.pl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
:- module(planetMondNameDialog, [planetMondNameDialog/1, planetMondName/1]).
:- use_module(library(http/http_dispatch)).
:- use_module(library(http/http_error)).
:- use_module(library(http/html_write)).
:- use_module(library(http/http_parameters)).
:- http_handler('/planetMondNameSystemAuswahlDialog', planetMondNameSystemAuswahlDialog, []).
:- http_handler('/planetMondNameDialog', planetMondNameDialog, []).
:- http_handler('/planetMondName', planetMondName, []).
/* ---------------------- Auswahl System ----------------------------------------------------*/
planetMondNameSystemAuswahlDialog(_Request) :-
textResources:getText(txtHimmelsKoerperEingeben, TxtHimmelsKoerperEingeben),
textResources:getText(txtSternenSystemEingeben, TxtSternenSystemEingeben),
string_concat(TxtHimmelsKoerperEingeben, ': ', Txt0),
string_concat(Txt0, TxtSternenSystemEingeben, TxtHeader),
planetAuswahlDialog:systemAuswahlDialog(
TxtHeader,
'/planetMondNameDialog').
/* ---------------------- Eingabe Himmelskörper ---------------------------------------------*/
planetMondNameDialog(Request) :-
textResources:getText(txtBitteWaehlen, TxtBitteWaehlen),
http_parameters(Request,
[auswahlSystem(AuswahlSystem, [length > 0])
]),
(AuswahlSystem = TxtBitteWaehlen -> server:fehlerBehandlung;
planetMondNameAnzeigen(AuswahlSystem)
).
planetMondNameAnzeigen(AuswahlSystem) :-
findall([FeldNo1], between(1, 8, FeldNo1), FeldNoList),
findall([RecordNo, HimmelsKoerper, PlanetenTyp], spielStatus:planeten(RecordNo, AuswahlSystem, HimmelsKoerper, PlanetenTyp), HimmelsKoerperListe0),
sort(HimmelsKoerperListe0, HimmelsKoerperListe),
ausgabe:joinRecordsByRecordNo(FeldNoList, HimmelsKoerperListe, 2, NumerierteRecordList),
textResources:getText(txtHimmelsKoerperEingeben, TxtHimmelsKoerperEingeben),
textResources:getText(txtSternenSystemNamenHimmelskoerperEingeben, TxtSternenSystemNamenHimmelskoerperEingeben),
string_concat(TxtHimmelsKoerperEingeben, ': ', Txt0),
string_concat(Txt0, TxtSternenSystemNamenHimmelskoerperEingeben, TxtHeader),
textResources:getText(txtSternensystem, TxtSternensystem),
textResources:getText(txtPlanetenUndMonde, TxtPlanetenUndMonde),
textResources:getText(txtName, TxtName),
textResources:getText(txtPlanetenTyp, TxtPlanetenTyp),
textResources:getText(txtPlanetenTypBeiScanAusWeltraumAngezeigt, TxtPlanetenTypBeiScanAusWeltraumAngezeigt),
textResources:getText(txtAlternativStehtErAuchInDerEndtdeckungsListe, TxtAlternativStehtErAuchInDerEndtdeckungsListe),
textResources:getText(txtOk, TxtOk),
textResources:getText(txtReset, TxtReset),
TermerizedBody = [
\['<header>'],
h1([align(center)], [TxtHeader]),
\['</header>'] ,
\['<formSpace>'],
form([action('/planetMondName'), method('post'), name('systemEigenschaftenForm')],
[h3(TxtSternensystem),
\eingabeTabelleReadOnly(AuswahlSystem),
h3(TxtPlanetenUndMonde),
div(class('table50'),
[div(class('tr'),
[div([class('th'), scope("col")], TxtName),
div([class('th'), scope("col")], TxtPlanetenTyp)
]),
\innereEingabeZeile(NumerierteRecordList)
]),
p(id(compactText), [TxtPlanetenTypBeiScanAusWeltraumAngezeigt]),
p(id(compactText), [TxtAlternativStehtErAuchInDerEndtdeckungsListe]),
p(table([width("12%"), border("0"), cellspacing("3"), cellpadding("2")],
[td([button([name("submit"), type("submit")], TxtOk)]),
td([button([name("reset"), type("reset")], TxtReset)])
]))
]),
\['</formSpace>']
],
server:holeCssAlsStyle(StyleString),
textResources:getText(txtNoMansSkyTrainerHimmelskoerperEing, TxtNoMansSkyTrainerHimmelskoerperEing),
TermerizedHead = [\[StyleString], title(TxtNoMansSkyTrainerHimmelskoerperEing)],
debug(myTrace, 'AuswahlSystem: ~k', [AuswahlSystem]),
reply_html_page(TermerizedHead, TermerizedBody).
eingabeTabelleReadOnly(AuswahlSystem) -->
html(
div(class('table30'),[
div(class('tr'), [
\divInputReadOnly('auswahlSystem', 'System: ', AuswahlSystem, 1)
])
])).
divInputReadOnly(Name, LabelText, Value, Index) -->
html(
div(class('td'), [
label([ for(Name)],[LabelText]),
input([ class(text40Format),
name(Name),
type('text'),
size(40),
maxlength(40),
value(Value),
tabindex(Index),
readonly(true)
])
])
).
innereEingabeZeile([]) -->
[].
innereEingabeZeile([Record|Rest]) -->
{
Record = [FeldNo, Planet, PlanetenTyp],
textResources:getText(txtBitteWaehlen, TxtBitteWaehlen),
((PlanetenTyp = '', PlanetenTyp0 = TxtBitteWaehlen); (PlanetenTyp0 = PlanetenTyp)),
textResources:getText(PlanetenTyp0, PlanetenTyp0Text),
findall([PlanetenTyp0Text, PlanTypText],
(planetenTypen:planetenGruppePlanetenTyp(PlanTyp, _),
textResources:getText(PlanTyp, PlanTypText)
),
PlanetenTypen0),
sort(PlanetenTypen0, PlanetenTypen)
},
html([div(class('tr'),
[div(class('td'), input([class(text40Format), name('planet' + FeldNo), type("text"), maxlength("40"), value(Planet)])
),
div(class('td'), \baueOptionsFeldMitVorwahl('planetenTyp', FeldNo, 2, PlanetenTypen)
)
])
]),
innereEingabeZeile(Rest).
baueOptionsFeldMitVorwahl(FeldName, FeldNo, StartIndex, OptionsWerteListe) -->
{
textResources:getText(txtBitteWaehlen, TxtBitteWaehlen),
Index is FeldNo mod 100 + StartIndex,
OptionsWerteListe = [[Wert,_]|_],
((Wert = '', OptionText = option(selected, TxtBitteWaehlen)); (OptionText = option(TxtBitteWaehlen)))
},
html([select([name(FeldName + FeldNo), id(FeldName + FeldNo), class("Nachschlagen"), size("1"), maxlength(20), tabindex(Index)],
[
OptionText,
\baueOptionMitVorwahl(OptionsWerteListe)
])
]).
baueOptionMitVorwahl([]) -->
[].
baueOptionMitVorwahl([OptionTupel|Rest]) -->
{
OptionTupel = [Wert, Option],
((Wert = Option, OptionText0 = option(selected(selected), Option)); (OptionText0 = option(Option)))
},
html([
OptionText0
]),
baueOptionMitVorwahl(Rest).
/* ---------------------- Antwort Formular ---------------------------------------------------*/
planetMondName(Request) :-
member(method(post), Request), !,
planetMondNameParamList(Request, VarValueList),
debug(myTrace, 'Antwort: VarValueList=~k', [VarValueList]),
GesamtZeilenZahl = 8,
\+plausibleEingabe(VarValueList, GesamtZeilenZahl),
((nb_getval('ZeileNoFehler', ZeileNoFehler),
ZeileNoFehler > 0,
fehlerZeile(ZeileNoFehler)
);
(nth1(1, VarValueList, AuswahlSystem),
\+ablegen(AuswahlSystem, GesamtZeilenZahl, VarValueList),
server:gespeichert
)
).
planetMondNameParamList(Request, VarValueList) :-
http_parameters(Request,
[auswahlSystem(AuswahlSystem, [length > 0]),
planet1(Planet1, [default("")]),
planet2(Planet2, [default("")]),
planet3(Planet3, [default("")]),
planet4(Planet4, [default("")]),
planet5(Planet5, [default("")]),
planet6(Planet6, [default("")]),
planet7(Planet7, [default("")]),
planet8(Planet8, [default("")]),
planetenTyp1(PlanetenTyp1, [default("")]),
planetenTyp2(PlanetenTyp2, [default("")]),
planetenTyp3(PlanetenTyp3, [default("")]),
planetenTyp4(PlanetenTyp4, [default("")]),
planetenTyp5(PlanetenTyp5, [default("")]),
planetenTyp6(PlanetenTyp6, [default("")]),
planetenTyp7(PlanetenTyp7, [default("")]),
planetenTyp8(PlanetenTyp8, [default("")])
]),
VarValueList = [AuswahlSystem,
Planet1, Planet2, Planet3, Planet4, Planet5, Planet6, Planet7, Planet8,
PlanetenTyp1, PlanetenTyp2, PlanetenTyp3, PlanetenTyp4, PlanetenTyp5, PlanetenTyp6, PlanetenTyp7, PlanetenTyp8
].
plausibleEingabe(VarValueList, GesamtZeilenZahl) :-
nb_setval('ZeileNoFehler', 0),
between(1, GesamtZeilenZahl, ZeileNo),
pickeZeile(GesamtZeilenZahl, ZeileNo, VarValueList, Planet, PlanetenTyp),
\+leereZeile(Planet, PlanetenTyp),
\+gueltigeZeile(Planet, PlanetenTyp),
nb_setval('ZeileNoFehler', ZeileNo),
!, fail.
pickeZeile(GesamtZeilenZahl, ZeilenZahl, VarValueList, Planet, PlanetenTyp) :-
OffsetPlanet is 1 + 0 * GesamtZeilenZahl + ZeilenZahl,
OffsetPlanetenTyp is 1 + 1 * GesamtZeilenZahl + ZeilenZahl,
nth1(OffsetPlanet, VarValueList, Planet),
nth1(OffsetPlanetenTyp, VarValueList, PlanetenTyp0),
textResources:getText(PlanetenTyp, PlanetenTyp0).
leereZeile(Planet, PlanetenTyp) :-
Planet = "",
PlanetenTyp = txtBitteWaehlen.
gueltigeZeile(Planet, PlanetenTyp) :-
Planet \= "",
PlanetenTyp \= txtBitteWaehlen.
fehlerZeile(FeldNo) :-
server:holeCssAlsStyle(StyleString),
ZeileNo is FeldNo mod 100,
textResources:getText(txtDieZeile, TxtDieZeile),
textResources:getText(txtInSpalte, TxtInSpalte),
textResources:getText(txtIstUnvollstaendig, TxtIstUnvollstaendig),
textResources:getText(txtFunktionsAuswahl, TxtFunktionsAuswahl),
string_concat(TxtDieZeile, ZeileNo, FehlerMeldung0),
string_concat(FehlerMeldung0, TxtInSpalte, FehlerMeldung1),
string_concat(FehlerMeldung1, 1, FehlerMeldung2),
string_concat(FehlerMeldung2, TxtIstUnvollstaendig, FehlerMeldung),
textResources:getText(txtNoMansSkyTrainerFehlerInZeile, TxtNoMansSkyTrainerFehlerInZeile),
TermerizedHead = [\[StyleString], title(TxtNoMansSkyTrainerFehlerInZeile)],
TermerizedBody = [
\['<redHeader>'],
h3(align(center), FehlerMeldung),
\['</redHeader>'],
\['<formSpace>'],
p(a(['href="/"'],[TxtFunktionsAuswahl])),
\['</formSpace>']
],
reply_html_page(TermerizedHead, TermerizedBody).
ablegen(AuswahlSystem, GesamtZeilenZahl, VarValueList) :-
between(1, GesamtZeilenZahl, ZeileNo),
pickeZeile(GesamtZeilenZahl, ZeileNo, VarValueList, Planet, PlanetenTyp0),
defaultBehandlung(PlanetenTyp0, PlanetenTyp),
debug(myTrace, 'Auswahlsystem=~k', [AuswahlSystem]),
debug(myTrace, 'Planet=~k PlanetenTyp=~k', [Planet, PlanetenTyp]),
insUpdDel(AuswahlSystem, Planet, ZeileNo, PlanetenTyp),
fail.
defaultBehandlung(PlanetenTyp0, PlanetenTyp) :-
textResources:getText(txtBitteWaehlen, TxtBitteWaehlen),
PlanetenTyp0 = TxtBitteWaehlen,
PlanetenTyp = '',
!.
defaultBehandlung(PlanetenTyp0, PlanetenTyp) :-
PlanetenTyp = PlanetenTyp0.
/* unverändert */
insUpdDel(System, PlanetNew, RecNo, PlanetenTyp) :-
gueltigeZeile(PlanetNew, PlanetenTyp),
spielStatus:planeten(RecNo, System, PlanetNew, PlanetenTyp),
debug(myTrace, 'unverändert: RecNo=~k System=~k Planet=~k PlanetenTyp=~k', [RecNo, System, PlanetNew, PlanetenTyp]),
!.
/* attribut-update */
insUpdDel(System, PlanetNew, RecNo, PlanetenTyp) :-
gueltigeZeile(PlanetNew, PlanetenTyp),
spielStatus:planeten(RecNo, System, PlanetNew, PlanetenTyp0),
PlanetenTyp0 \= PlanetenTyp,
debug(myTrace, 'Attribut-Update: RecNo=~k System=~k Planet=~k PlanetenTyp=~k', [RecNo, System, PlanetNew, PlanetenTyp]),
retractall(spielStatus:planeten(RecNo, System, PlanetNew, _)),
assertz(spielStatus:planeten(RecNo, System, PlanetNew, PlanetenTyp)),
ignore(retractall(sammlung:sammlung(_, System, PlanetNew, _, _, _, _, _))),
/* rauswerfen der unmöglichen Stoffe nach Planetentypänderung, reinbringen der Defaults für neuen Planetentyp */
sammlung:sammlungAnOrteAnpassen(System, PlanetNew),
!.
/* in anderes Zeile verschoben */
insUpdDel(System, PlanetNew, RecNoNew, PlanetenTyp) :-
gueltigeZeile(PlanetNew, PlanetenTyp),
PlanetNew \= "",
\+spielStatus:planeten(RecNoNew, System, PlanetNew, _),
spielStatus:planeten(RecNoOld, System, PlanetNew, _),
debug(myTrace, 'Zeile verschoben: RecNoOld=~k RecNoNew=~k System=~k Planet=~k PlanetenTyp=~k', [RecNoOld, RecNoNew, System, PlanetNew, PlanetenTyp]),
retractall(spielStatus:planeten(RecNoOld, System, PlanetNew, _)),
assertz(spielStatus:planeten(RecNoNew, System, PlanetNew, PlanetenTyp)),
!.
/* umbenannt */
insUpdDel(System, PlanetNew, RecNoNew, PlanetenTyp) :-
gueltigeZeile(PlanetNew, PlanetenTyp),
spielStatus:planeten(RecNoNew, System, PlanetOld, _),
PlanetNew \= "",
debug(myTrace, 'Schlüsselupdate: RecNoNew=~k System=~k Planet=~k PlanetenTyp=~k', [RecNoNew, System, PlanetNew, PlanetenTyp]),
forall(sammlung:sammlung(RecNo, System, PlanetOld, Operation, Stoff, Haupt, Neben, Ruest),
assertz(sammlung:sammlung(RecNo, System, PlanetNew, Operation, Stoff, Haupt, Neben, Ruest))
),
retractall(sammlung:sammlung(_, System, PlanetOld, _, _, _, _, _)),
forall(spielStatus:systemAusstattung([System, PlanetOld, Ort], Entfernung),
assertz(spielStatus:systemAusstattung([System, PlanetNew, Ort], Entfernung))
),
retractall(spielStatus:systemAusstattung([System, PlanetOld, _], _)),
retractall(spielStatus:planeten(RecNoNew, System, PlanetOld, _)),
assertz(spielStatus:planeten(RecNoNew, System, PlanetNew, PlanetenTyp)),
!.
/* insert */
insUpdDel(System, PlanetNew, RecNoNew, PlanetenTyp) :-
gueltigeZeile(PlanetNew, PlanetenTyp),
\+spielStatus:planeten(RecNoNew, System, _, _),
PlanetNew \= "",
debug(myTrace, 'insert: RecNoNew=~k System=~k Planet=~k PlanetenTyp=~k', [RecNoNew, System, PlanetNew, PlanetenTyp]),
assertz(spielStatus:planeten(RecNoNew, System, PlanetNew, PlanetenTyp)),
spielStatus:copyDefaultIfEmpty(System, PlanetNew),
sammlung:copyDefaultIfEmpty(System, PlanetNew),
!.
/* löschen cascade */
insUpdDel(System, PlanetNew, RecNoNew, _) :-
spielStatus:planeten(RecNoNew, System, PlanetOld, _),
PlanetNew = "",
debug(myTrace, 'löschen: RecNoNew=~k System=~k PlanetOld=~k', [RecNoNew, System, PlanetOld]),
retractall(sammlung:sammlung(_, System, PlanetOld, _, _, _, _, _)),
retractall(spielStatus:systemAusstattung([System, PlanetOld, _], _)),
retractall(spielStatus:planeten(RecNoNew, System, _, _)),
!.
/* ungenutze zeilen skippen */
insUpdDel(_, PlanetNew, _, _) :-
PlanetNew = "",
!.