usti, scusa.
<body>
<p:button caption="ciao" id="btn1" onclick="btn1click();"/>
</body>
... html...
<%
interface
uses uSystemMacro;
%>
... html...
<%
uSystemMacro.RenderButton('btn1', 'ciao', ['onclick="btn1click()']);
%>
... html...
<%
interface
uses uSystemMacro, // linkato staticamente nel modulo apache finale
uSpecialMacroInDll external '.../uSpecialMacroInDll.so'; // dll a caricamento dinamico
{$I uMyCustomMacro.pas } // qua ci sono le macro da usare tramite interprete
%>
... html...
<%
uSystemMacro.RenderButton('btn1', 'ciao', ['onclick="btn1click()']);
uSpecialMacroInDll.RenderButton('btn1', 'ciao', ['onclick="btn1click()']);
RenderButton('btn1', 'ciao', ['onclick="btn1click()']); // questa è in uMyCustomMacro.pas
uSystemMacro.RenderForm('form1', 'uForm1.lfm');
%>
<!-- variabile precaricata dal controller di pagina, dichiarata in modo che possa essere puntata dal motore di rendering -->
<p:object name="prodotti" />
<h1>Prodotti</h1>
<table>
<tr>
<th>Codice</th>
<th>Descrizione</th>
<th></th>
<th></th>
<th></th>
</tr>
<psp:foreach var="prodotto" collection="${prodotti}" status="statusVar">
<tr>
<td><psp:out text="${prodotto.codice}" /></td>
<td><psp:out text="${prodotti.descrizione}" /></td>
<td><psp:action id="actionVisualizza" method="visualizzaProdotto" param="${statusVar.index}" /></td>
<td><psp:action id="actionModifica" method="modificaProdotto" param="${statusVar.index}" /></td>
<td><psp:action id="actionProdotto" method="cancellaProdotto" param="${statusVar.index}" /></td>
</tr>
</psp:foreach>
</table>
<br />
<psp:page>
<psp:nclude resource="fogliodistileselezionato.css" type="stylesheet" />
<!-- in alternativa -->
<psp:nclude resourceAlias="alias-al-foglio-selezionato" />
<psp:body>
<psp:include page="prodotto.psp" />
</psp:body>
</psp:page>
type
TProdottoController = class(TPascalServerPageController)
published
procedure visualizzaProdotto(const parameter : TMethodControllerParameter);
procedure modificaProdotto(const parameter : TMethodControllerParameter);
procedure cancellaProdotto(const parameter : TMethodControllerParameter);
end;
Diciamo che FreePascal ha già alcune cose per il Web, quindi non sarebbe da reinventare tutto da zero.
Ed in effetti erano 2 le pagine ;)
Stilgar
<td><% Writeln(prodotto.codice) %></td>
<td><% Writeln(prodotto.descrizione %></td>
<td><% psp.Action('actionVisualizza', 'visualizzaProdotto.html.pas', ['param1=valore1', 'param3=valore2', 'param3=valore3']) %> </td>
Diciamo che FreePascal ha già alcune cose per il Web, quindi non sarebbe da reinventare tutto da zero.
Ed in effetti erano 2 le pagine ;)
Stilgar
Giusto! L'unica cosa che vorrei evitare è di utilizzare ExtJS per ragioni di licenza...no?....per le pagine stamattina è difficile svegliarsi! ::)
Marco e Samuele.
però chi vuole usare ExtJs dovrà essere libero di poterlo fare :)
ma a questo penseremo in un secondo momento
Codice: [Seleziona]<td><% Writeln(prodotto.codice) %></td>
<td><% Writeln(prodotto.descrizione %></td>
<td><% psp.Action('actionVisualizza', 'visualizzaProdotto.html.pas', ['param1=valore1', 'param3=valore2', 'param3=valore3']) %> </td>
Writeln( Format('<td>%s</td><td>%s</td><td>%s</td>',
[ prodotto.codice,
prodotto.descrizione,
psp.Action('actionVisualizza', 'visualizzaProdotto.html.pas', ['param1=valore1', 'param3=valore2', 'param3=valore3'])
]) )
Non sono più pagine, ma programmi.
Diciamo che FreePascal ha già alcune cose per il Web, quindi non sarebbe da reinventare tutto da zero.
Ed in effetti erano 2 le pagine ;)
nomore, ma cosa vuoi fare? Delphi for php?
Nessun problema, ci metteremo un paio d'anni ;)
Che stiamo già prendendo strade diverse ;)
sinceramente?! ancora non si e' capito cosa dovrebbe fare questo progetto. si parla di cgi di script. ma proprio non riesco a starvi dietro. innanzitutto decidiamo quale deve essere il risultato: rich internet application?!
ok, ok... non provoco più ;)
Gli action controller, altro non sono che servlet specializzate.
Quello che sto cercando di immaginare è il meccanismo che permetta di deployare le "applicazioni" a caldo, in un apache, tanto per iniziare.
Ci sarebbe il modulo per poter interagire con Apache da sfruttare, ma poi?
L'unica strada che al momento vedo praticabile fin da subito, con basso costo di partenza è l'uso di DLL caricate e scaricate on demand.
Quindi mettere in piedi un meccanismo tipo loader applicativo.
Ma non l'ho ancora sognato ;) Quindi è ancora abbastanza fumoso al momento ;)
<html>
<head><title>bla bla bla</title></head>
<body>
<p>
Ora e Data: <%= Write('Sono le ore ' + FormatDateTime('hh:nn di ddd dd mmm yyyy', Now)) %>
</p>
</body>
</html>
Write('<html>');
Write('<head><title>bla bla bla</title></head>');
Writeln('<body>');
Write('<p> Ora e Data: ');
Write('Sono le ore ' + FormatDateTime('hh:nn di ddd dd mmm yyyy', Now));
Writeln('</p>');
Writeln('</body> </html> ');
lpitr.exe >index.html
se timestamp(index.psp) <> timestamp(index.pcode) then
index.psp -> tramite preprocessore creazione -> index.pas
index.pas -> tramite compilatore creazione -> index.pcode
index.pcode -> timestamp impostata uguale a quella di -> index.psp
fine se
response := execute(index.pcode)
response := execute(index.pcode)
<HTML>
<HEAD>
<TITLE>Login using jsp</TITLE>
</HEAD>
<BODY>
<H1>LOGIN FORM</H1>
<%
String myname = (String)session.getAttribute("username");
if(myname!=null)
{
out.println("Welcome "+myname+" , <a href=\"logout.jsp\" >Logout</a>");
}
else
{
%>
<form action="checkLogin.jsp">
<table>
<tr>
<td> Username : </td><td> <input name="username" size=15 type="text" /> </td>
</tr>
<tr>
<td> Password : </td><td> <input name="password" size=15 type="text" /> </td>
</tr>
</table>
<input type="submit" value="login" />
</form>
<%
}
%>
</BODY>
</HTML>
<HTML>
<HEAD>
<TITLE>Login using pasp</TITLE>
</HEAD>
<BODY>
<H1>LOGIN FORM</H1>
<% var myname: string; %>
<%
myname := pasp.session.getAttribute('username');
if(myname <> '') then
Writeln('Welcome ' + myname + ' <a href="logout.pasp" >Logout</a>")
else
begin
%>
<form action="checkLogin.pasp">
<table>
<tr>
<td> Username : </td><td> <input name="username" size=15 type="text" /> </td>
</tr>
<tr>
<td> Password : </td><td> <input name="password" size=15 type="text" /> </td>
</tr>
</table>
<input type="submit" value="login" />
</form>
<%
end;
%>
</BODY>
</HTML>
<HTML>
<HEAD>
<TITLE>Login using pasp</TITLE>
</HEAD>
<BODY>
<H1>LOGIN FORM</H1>
<p:var myname: string; />
<p:set myname := pasp.session.getAttribute('username'); />
<p:if(myname <> '') then />
<p:writeln('Welcome ' + myname + ' <a href="logout.pasp" >Logout</a>") />
<p:else />
<form action="checkLogin.pasp">
<table>
<tr>
<td> Username : </td><td> <input name="username" size=15 type="text" /> </td>
</tr>
<tr>
<td> Password : </td><td> <input name="password" size=15 type="text" /> </td>
</tr>
</table>
<input type="submit" value="login" />
</form>
<p:end />
</BODY>
</HTML>
allora iniziamo a provare da qua, ci ho lavorato un po' sopra ed è una base per andare avanti in varie direzioni.
si tratta di un progetto per console.
all'interno della root del progetto trovate una cartella (webpas) con uno script pronto all'uso.
una volta compilato correttamente il progetto lpitr (non c'è uno nome, sta per: lazaruspascal.it runtime :D) basta andare in una shell del dos e lanciarlo con:Codice: [Seleziona]produrrà un file da "navigare" col browserlpitr.exe >index.html
cose da fare:
- inserire un parametro per indicare lo script da lanciare(emh... ora la path è una costante nel codice :P)
- vedere come si può usare una funzione tipo FormatDateTime senza dichiararla in OnUses (c'è il componente import date utils ma ancora non l'ho fatto funzionare)
- salvare il compilato nella stessa cartella del sorgente con estensione .psp
- far partire la compilazione solo quando il .pas ha il timestamp dell'ultima omdifica diverso dal .psp; se sono uguali non si compila ma si carica il .psp nell'executor
- varie ed eventuali
ora: chi mi chiarisce come mai il jsp ha 2 sintassi?
poi, premesso che il preprocessore, qualunque sia la sintassi che scegliamo, deve generare qualcosa che l'interprete pascal script può eseguire,
secondo voi come scrivereste il codice sorgente psp?
Ok no more, fatto. Carino, ma esattamente come pensi che da qui si possa estendere la cosa esattamente?!
Inoltre mi sono permesso di modificare questo:Mamma mia ... "stai a guardar er capello" ;)
if not LoadScript('webpas\script01.pas', ErrorMsg) then
in questo
if not LoadScript('webpas' + System.DirectorySeparator + 'script01.pas', ErrorMsg) then
Almeno rimane multi piattaforma.
Inoltre mi sono permesso di modificare questo:
if not LoadScript('webpas\script01.pas', ErrorMsg) then
in questo
if not LoadScript('webpas' + System.DirectorySeparator + 'script01.pas', ErrorMsg) then
Almeno rimane multi piattaforma.
Mamma mia ... "stai a guardar er capello" ;)
Per una bozza d'esempio vai subito a controllare il cross platform :D
Sei una sagoma ;)
Stilgar
Provato, sembra funzionare bene. Io purtroppo ora non saprei per il 64 bit, però diciamo che per il resto è incoraggiante!
Siamo ripartiti con lo scrivere il codice prima di finire le specifiche?
:p
hihi
ExecuteQuery('127.0.0.1', 'PROVE_LPITR.FDB', 'SYSDBA', 'masterkey', 'select * from tablename', d)
Out_Write('<br>' + IntToStr(d.RecordCount);
Ciao Nomore, ho provato e sembra funzionare. Una cosa sola, prova a sostituire il TIBConnection con una ZConnection, così ottieni la possibilità di passare da un dbms all'altro.
function CreateDatasetByQuery(Engine, protocol: string; HostName, DbName, User, Pass, Sql: string): TDataset
DS := CreateDatasetByQuery('zeos', 'firebirdd2.5', 192.168.0.23, 'PROVE.FDB', 'SYSDBA', 'masterkey', 'select * from utenti');
DS := CreateDatasetByQuery('IbConnection', '', 192.168.0.23, 'PROVE.FDB', 'SYSDBA', 'masterkey', 'select * from utenti');
DS := CreateDatasetByQuery('altro tipo', 'protocollo', 192.168.0.23, 'PROVE.FDB', 'SYSDBA', 'masterkey', 'select * from utenti');
Ho provato a fare come dici nel file leggimi.txt ma mi sa che è incompleto. Dove dobbiamo copiare gli script perchè li legga?!
prometto che nei prox giorni lo provo. cosa dici?! e' arrivato il momento di coinvolgere anche la comunita' internazionale oppure no?! aspettiamo che siano operativi i db?!
Ho provato a fare come dici nel file leggimi.txt ma mi sa che è incompleto. Dove dobbiamo copiare gli script perchè li legga?!
se usi linux gli script vanno sotto: /var/www/pspage
se usi apache sotto windows onestamente non so :)
hai modificato anche apache2.conf?
Edit:
su che piattaforma hai compilato?
Tra le cose che hai elencato direi che sarebbe bello avere fin da subito la possibilità delle librerie crittografiche. Ad esempio DCPcrypt è già esistente, sarebbe davvero parecchio innovativo averlo tra le nostre opzioni.
A parte il comando sudo nello shell script ...(mi fa venire i sudori freddi).
Per utonti Windows?
si, serve per usare il modulo apache sotto windowsSi per linux x32 me ne ero accorto :)
per linux x64 ci sto sviluppando io, per linux x32 se non ho capito male hai compilato tu vero?
e i sorgenti finora sono unici :)
Volevo solo sapere se avevi già implementto i db?!
si, mi ritarda un po' nella partenza ma credo che alla fine la cosa sia molto più interessante.Non ho capito, ma non doveva andare avanti il discorso con zeos?!
a proposito, ho scoperto da poco SqlConnector (Sqldb) ed ho qualche problema
ho fatto un altro post nella sezione database.
Non ho capito, ma non doveva andare avanti il discorso con zeos?!
Si quello lo avevo intuito, ma pensavo optassi solo per zeosNon ho capito, ma non doveva andare avanti il discorso con zeos?!
beh io direi tutti e due :)
visto che zeos è un package aggiuntivo (e onestamente ancora non mi è chiaro se funziona su tutte le piattaforme) sono ripartito da sqldb. cmq tutti e 2 saranno plugin allo stesso livello quindi chi scrive gli script deciderà quale motore db usare.
Comunque sia, negli script non si useranno i componenti zeos o sqldb ma metodi del plugin che faranno da wrapper nell'uso di questi componenti. In questo modo chi scrive script non si dovrà preoccupare di liberare le risorse allocate, non si istanzierà nulla insomma e non ci sarà il problema di dover liberare nulla: tutto gestito dal plugin.
Si quello lo avevo intuito, ma pensavo optassi solo per zeos
Si in effetti. Hai letto il mio post su lazreport da implementare?!Si quello lo avevo intuito, ma pensavo optassi solo per zeos
si ma se poi su una piattaforma da problemi...
credo che partire con 2 db engine sia più sicuro
Hai letto il mio post su lazreport da implementare?!
Hai letto il mio post su lazreport da implementare?!
avevo letto ed anche risposto solo che non ho capito perchè ma la risposta s'è persa e non me n'ero neanche accorto.
comunque dicevo che sono d'accordissimo con il prevedere qualcosa per fare dei report. io lazreport non lo conosco bene ma se puoi darmi una mano in questo senso possiamo operare su 2 fronti: io potrei preparare un plugin per i report e tu il report vero e proprio.
Direi che si può fare. Tu fai la tua parte e poi mi dici esattamente cosa deve fare la mia
https://svn.code.sf.net/p/lazarusiug/liug/trunk/PBatis/src/logging/Log4fp.pas
Per JQuery posso aiutare io. Ci ho smanettato qualche cosa ;) Poi dipende dal livello di "customizzazione" che volete.
Cassandra non è il DB di sfacebuk?
Stilgar
Per JQuery posso aiutare io. Ci ho smanettato qualche cosa ;) Poi dipende dal livello di "customizzazione" che volete.
Cassandra non è il DB di sfacebuk?
Perfetto Stilgar, e io sto preparando una guida per usare extjs con una cgi
quando avremo una versione 0.1 di questo progetto allora l'aggiornerò per i nostri loschi piani di conquista del mondo.
Tra l'altro che nome vogliamo dargli!? io suggerisco KORG. Voi?!
KORG vuol dire?
io nel codice (dovendo costruire delle classi) ho iniziato con PsPage (Pascal Server PAGEs) ma siamo ancora all'inizio: un serarch/replace non sconvolge l'albero dei sorgenti ;)
Guarda era un personaggio marginale relegato nel cyberspazio del fumetto Martin Mystere
nomore direi che stai facendo un lavoro egregio. bravo
un ghepardo con la piuma d apache in testa?!
O un ghepardo vestito da spiderman sarebbe più adeguato ...
O un ghepardo vestito da spiderman sarebbe più adeguato ...hahahahaha
Nomore ... web=raganatela ... il ghepardo che corre sulla raganatela ... mi sembrava evocativo.
E chi se ne frega ;) Mi piace l'idea :D
Ma la request è fondamentalmente una serie di get ... che senso ha cambiare le cose di una request?
Allora, per la demo, direi la solita e vetusta gestione degli utenti.
Ha la sua complessità ma non è esagerata.
1) CRUD Utenti.
2) ACL Utenti.
Insomma nulla di spaventoso. (Sempre che tu non abbia già in mente come fare queste cose "embedded" nel sistema.
L'editor può venire in un secondo momento ;) Non credi :p
// write into response
procedure Out_Write(Data: string);
function Out_Write(const data: string) : TPsPage;
Out_Write('<td width="78">Username</td>').Out_Write('<td width="6">:</td>').Out_Write('<td width="294"><input name="myusername" type="text" id="myusername"></td>');
TPrintStream = class(THandleStream)
private
fAutoFlush: boolean;
fTrouble: boolean;
fClosing: boolean;
procedure Write(const buf: array of char); reintroduce; overload;
procedure Write(const s: string); reintroduce; overload;
private
procedure ensureOpen(); overload; virtual;
procedure newLine(); overload; virtual;
protected
procedure setError(); overload; virtual;
public
constructor Create(aHandle: THandle; const autoFlush: boolean = False); overload;
function checkError(): boolean; overload; virtual;
procedure Close(); overload;
procedure flush(); overload;
function print(const b: boolean): TPrintStream; overload; virtual;
function print(const c: char): TPrintStream; overload; virtual;
function print(const d: double): TPrintStream; overload; virtual;
function print(const f: single): TPrintStream; overload; virtual;
function print(const i: integer): TPrintStream; overload; virtual;
function print(const l: int64): TPrintStream; overload; virtual;
function print(const obj: Pointer): TPrintStream; overload; virtual;
function print(const s: array of char): TPrintStream; overload; virtual;
function print(const s: string): TPrintStream; overload; virtual;
function print(const x: WideString): TPrintStream; overload; virtual;
function println(): TPrintStream; overload; virtual;
function println(const x: array of char): TPrintStream; overload; virtual;
function println(const x: boolean): TPrintStream; overload; virtual;
function println(const x: char): TPrintStream; overload; virtual;
function println(const x: double): TPrintStream; overload; virtual;
function println(const x: int64): TPrintStream; overload; virtual;
function println(const x: integer): TPrintStream; overload; virtual;
function println(const x: Pointer): TPrintStream; overload; virtual;
function println(const x: single): TPrintStream; overload; virtual;
function println(const x: string): TPrintStream; overload; virtual;
function println(const x: WideString): TPrintStream; overload; virtual;
end;
{ TPrintStream }
function TPrintStream.checkError: boolean;
begin
Result := fTrouble;
end;
procedure TPrintStream.Close;
begin
if not fClosing then
begin
fClosing := True;
{$IFDEF MSWINDOWS}
CloseHandle(Handle);
{$ENDIF}
end;
end;
constructor TPrintStream.Create(aHandle: THandle; const autoFlush: boolean);
begin
inherited Create(aHandle);
fAutoFlush := autoFlush;
end;
procedure TPrintStream.ensureOpen;
begin
assert(Handle <> 0);
end;
procedure TPrintStream.flush;
begin
{$IFDEF MSWINDOWS}
Windows.FlushFileBuffers(Handle);
{$ENDIF}
end;
procedure TPrintStream.newLine;
begin
Write(system.LineEnding);
if fAutoFlush then
begin
flush;
end;
end;
function TPrintStream.print(const i: integer): TPrintStream;
begin
Write(Format('%d', [i]));
Result := self;
end;
function TPrintStream.print(const f: single): TPrintStream;
begin
Write(Format('%g', [f]));
Result := self;
end;
function TPrintStream.print(const b: boolean): TPrintStream;
begin
Write(BoolToStr(b, True));
Result := self;
end;
function TPrintStream.print(const c: char): TPrintStream;
begin
Write(C);
Result := self;
end;
function TPrintStream.print(const d: double): TPrintStream;
begin
Result := print(Format('%g', [d]));
end;
function TPrintStream.print(const obj: Pointer): TPrintStream;
begin
Write(Format('%f', [obj]));
Result := self;
end;
function TPrintStream.print(const s: string): TPrintStream;
begin
Write(s);
Result := self;
end;
function TPrintStream.print(const s: array of char): TPrintStream;
begin
Result := print(string(s));
end;
function TPrintStream.println(const x: integer): TPrintStream;
begin
print(x);
newLine;
Result := self;
end;
function TPrintStream.println(const x: single): TPrintStream;
begin
print(x);
newLine;
Result := self;
end;
function TPrintStream.println(const x: double): TPrintStream;
begin
print(x);
newLine;
Result := self;
end;
function TPrintStream.println: TPrintStream;
begin
newLine;
Result := self;
end;
function TPrintStream.println(const x: boolean): TPrintStream;
begin
print(x);
newLine;
Result := self;
end;
function TPrintStream.println(const x: char): TPrintStream;
begin
print(x);
newLine;
Result := self;
end;
function TPrintStream.print(const l: int64): TPrintStream;
begin
print(l);
newLine;
Result := self;
end;
function TPrintStream.println(const x: Pointer): TPrintStream;
begin
print(x);
newLine;
Result := self;
end;
function TPrintStream.println(const x: string): TPrintStream;
begin
print(x);
newLine;
Result := self;
end;
function TPrintStream.println(const x: array of char): TPrintStream;
begin
print(x);
newLine;
Result := self;
end;
function TPrintStream.println(const x: int64): TPrintStream;
begin
print(x);
newLine;
Result := self;
end;
procedure TPrintStream.setError;
begin
fTrouble := True;
end;
procedure TPrintStream.Write(const buf: array of char);
begin
ensureOpen;
inherited Write(buf[0], length(buf));
end;
procedure TPrintStream.Write(const s: string);
begin
ensureOpen;
inherited Write(s[1], Length(S));
end;
function TPrintStream.print(const x: WideString): TPrintStream;
begin
Result := print(WideCharToString(PWideChar(x)));
end;
function TPrintStream.println(const x: WideString): TPrintStream;
begin
print(x);
newLine;
Result := self;
end;
out.print('<td width="78">Username</td>').print('<td width="6">:</td>').print('<td width="294"><input name="myusername" type="text" id="myusername"></td>').println();
Altra cosa ... Out_Write ... carino ma pensavo ... avere solo la classe "out" e i vari metodi di "print" o "write"?
TPrintSystem = class
public
function print(s: string): TPrintSystem; // con i vari overload
// forse anche delle cose tipo
function br: TPrintSystem; // inserisce '<br>'
end;
TPsPage = class
public
property Out: TPrintSystem read FOut write FOut;
end;
Out.print('Welcome ...').br.print('User name:')
// cl.addTypeS('TDATASETERROREVENT', 'Procedure ( DATASET : TDATASET; E : TObject' +'; var ACTION : TDATAACTION)');
c'è una riga da commentare nella unit uPSC_DB
devi andare alla riga 891 e commentare l'AddType, tipo:Codice: [Seleziona]// cl.addTypeS('TDATASETERROREVENT', 'Procedure ( DATASET : TDATASET; E : TObject' +'; var ACTION : TDATAACTION)');
appena avrò incluso i sorgenti in svn questo problema non ci sarà più :)
ho postato su svn:
- sorgenti pascal script
- cambiato le path in opzioni progetto per la compilazione del command line
attenzione:
- non ho ancora modificato lo script per la compilazione del modulo apache
- verranno cancellati gli script: stop.sh, start.sh, deploy.sh e conf.sh (se li usate e li avete modificati con le vostre impostazioni, fatene una copia!)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Sign in · Twitter Bootstrap</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="">
<meta name="author" content="ciao">
<!-- Le styles -->
<link href="../assets/css/bootstrap.css" rel="stylesheet">
<style type="text/css">
body {
padding-top: 40px;
padding-bottom: 40px;
background-color: #f5f5f5;
}
.form-signin {
max-width: 300px;
padding: 19px 29px 29px;
margin: 0 auto 20px;
background-color: #fff;
border: 1px solid #e5e5e5;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px;
-webkit-box-shadow: 0 1px 2px rgba(0,0,0,.05);
-moz-box-shadow: 0 1px 2px rgba(0,0,0,.05);
box-shadow: 0 1px 2px rgba(0,0,0,.05);
}
.form-signin .form-signin-heading,
.form-signin .checkbox {
margin-bottom: 10px;
}
.form-signin input[type="text"],
.form-signin input[type="password"] {
font-size: 16px;
height: auto;
margin-bottom: 15px;
padding: 7px 9px;
}
</style>
<link href="../assets/css/bootstrap-responsive.css" rel="stylesheet">
<!-- HTML5 shim, for IE6-8 support of HTML5 elements -->
<!--[if lt IE 9]>
<script src="../assets/js/html5shiv.js"></script>
<![endif]-->
<!-- Fav and touch icons -->
<link rel="apple-touch-icon-precomposed" sizes="144x144" href="../assets/ico/apple-touch-icon-144-precomposed.png">
<link rel="apple-touch-icon-precomposed" sizes="114x114" href="../assets/ico/apple-touch-icon-114-precomposed.png">
<link rel="apple-touch-icon-precomposed" sizes="72x72" href="../assets/ico/apple-touch-icon-72-precomposed.png">
<link rel="apple-touch-icon-precomposed" href="../assets/ico/apple-touch-icon-57-precomposed.png">
<link rel="shortcut icon" href="../assets/ico/favicon.png">
</head>
<body>
<div class="container">
<form class="form-signin">
<h2 class="form-signin-heading">Please sign in</h2>
<#ps:var>
i: integer;
s: string;
<#/ps:var>
<#ps:code>
<#ps:var name="sSql" type="string" quotemode="sql" >
select *
from tabella
where
<#/ps:var>
for i := 0 to WR.ContentFields.Count - 1 do
begin
Out_Write('Campo ' + inttostr(i) + ': ' + WR.ContentFields.FieldValue[i]);
end;
Out_Write('<br>Frase SQL = <br>' + sSql);
<#/ps:code>
<input type="text" class="input-block-level" placeholder="Email address">
<input type="password" class="input-block-level" placeholder="Password">
<label class="checkbox">
<input type="checkbox" value="remember-me"> Remember me
</label>
<button class="btn btn-large btn-primary" type="submit">Sign in</button>
</form>
</div> <!-- /container -->
<!-- Le javascript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="../assets/js/jquery.js"></script>
<script src="../assets/js/bootstrap-transition.js"></script>
<script src="../assets/js/bootstrap-alert.js"></script>
<script src="../assets/js/bootstrap-modal.js"></script>
<script src="../assets/js/bootstrap-dropdown.js"></script>
<script src="../assets/js/bootstrap-scrollspy.js"></script>
<script src="../assets/js/bootstrap-tab.js"></script>
<script src="../assets/js/bootstrap-tooltip.js"></script>
<script src="../assets/js/bootstrap-popover.js"></script>
<script src="../assets/js/bootstrap-button.js"></script>
<script src="../assets/js/bootstrap-collapse.js"></script>
<script src="../assets/js/bootstrap-carousel.js"></script>
<script src="../assets/js/bootstrap-typeahead.js"></script>
</body>
</html>
program foo;
var
i: integer;
s: string;
begin
sSql:=
'select * ' +
'from tabella ' +
'where ' ;
Out_Write(
'<!DOCTYPE html>' +
'<html lang="en">' +
'<head>' +
'<meta charset="utf-8">' +
'<title>Sign in · Twitter Bootstrap</title>' +
'<meta name="viewport" content="width=device-width, initial-scale=1.0">' +
'<meta name="description" content="">' +
'<meta name="author" content="ciao">' +
'<!-- Le styles -->' +
'<link href="../assets/css/bootstrap.css" rel="stylesheet">' +
'<style type="text/css">' +
'body {' +
'padding-top: 40px;' +
'padding-bottom: 40px;' +
'background-color: #f5f5f5;' +
'}' +
'.form-signin {' +
'max-width: 300px;' +
'padding: 19px 29px 29px;' +
'margin: 0 auto 20px;' +
'background-color: #fff;' +
'border: 1px solid #e5e5e5;' +
'-webkit-border-radius: 5px;' +
'-moz-border-radius: 5px;' +
'border-radius: 5px;' +
'-webkit-box-shadow: 0 1px 2px rgba(0,0,0,.05);' +
'-moz-box-shadow: 0 1px 2px rgba(0,0,0,.05);' +
'box-shadow: 0 1px 2px rgba(0,0,0,.05);' +
'}' +
'.form-signin .form-signin-heading,' +
'.form-signin .checkbox {' +
'margin-bottom: 10px;' +
'}' +
'.form-signin input[type="text"],' +
'.form-signin input[type="password"] {' +
'font-size: 16px;' +
'height: auto;' +
'margin-bottom: 15px;' +
'padding: 7px 9px;' +
'}' +
'</style>' +
'<link href="../assets/css/bootstrap-responsive.css" rel="stylesheet">' +
'<!-- HTML5 shim, for IE6-8 support of HTML5 elements -->' +
'<!--[if lt IE 9]>' +
'<script src="../assets/js/html5shiv.js"></script>' +
'<![endif]-->' +
'<!-- Fav and touch icons -->' +
'<link rel="apple-touch-icon-precomposed" sizes="144x144" href="../assets/ico/apple-touch-icon-144-precomposed.png">' +
'<link rel="apple-touch-icon-precomposed" sizes="114x114" href="../assets/ico/apple-touch-icon-114-precomposed.png">' +
'<link rel="apple-touch-icon-precomposed" sizes="72x72" href="../assets/ico/apple-touch-icon-72-precomposed.png">' +
'<link rel="apple-touch-icon-precomposed" href="../assets/ico/apple-touch-icon-57-precomposed.png">' +
'<link rel="shortcut icon" href="../assets/ico/favicon.png">' +
'</head>' +
'<body>' +
'<div class="container">' +
'<form class="form-signin">' +
'<h2 class="form-signin-heading">Please sign in</h2>'
);
// BEGIN PASCAL CODE
for i := 0 to WR.ContentFields.Count - 1 do
begin
Out_Write('Campo ' + inttostr(i) + ': ' + WR.ContentFields.FieldValue[i]);
end;
Out_Write('<br>Frase SQL = <br>' + sSql);
// END PASCAL CODE
Out_Write(
'<input type="text" class="input-block-level" placeholder="Email address">' +
'<input type="password" class="input-block-level" placeholder="Password">' +
'<label class="checkbox">' +
'<input type="checkbox" value="remember-me"> Remember me' +
'</label>' +
'<button class="btn btn-large btn-primary" type="submit">Sign in</button>' +
'</form>' +
'</div> <!-- /container -->' +
'<!-- Le javascript' +
'================================================== -->' +
'<!-- Placed at the end of the document so the pages load faster -->' +
'<script src="../assets/js/jquery.js"></script>' +
'<script src="../assets/js/bootstrap-transition.js"></script>' +
'<script src="../assets/js/bootstrap-alert.js"></script>' +
'<script src="../assets/js/bootstrap-modal.js"></script>' +
'<script src="../assets/js/bootstrap-dropdown.js"></script>' +
'<script src="../assets/js/bootstrap-scrollspy.js"></script>' +
'<script src="../assets/js/bootstrap-tab.js"></script>' +
'<script src="../assets/js/bootstrap-tooltip.js"></script>' +
'<script src="../assets/js/bootstrap-popover.js"></script>' +
'<script src="../assets/js/bootstrap-button.js"></script>' +
'<script src="../assets/js/bootstrap-collapse.js"></script>' +
'<script src="../assets/js/bootstrap-carousel.js"></script>' +
'<script src="../assets/js/bootstrap-typeahead.js"></script>' +
'</body>' +
'</html>'
);
end.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Sign in · Twitter Bootstrap</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="">
<meta name="author" content="ciao">
<!-- Le styles -->
<link href="../assets/css/bootstrap.css" rel="stylesheet">
<style type="text/css">
body {
padding-top: 40px;
padding-bottom: 40px;
background-color: #f5f5f5;
}
.form-signin {
max-width: 300px;
padding: 19px 29px 29px;
margin: 0 auto 20px;
background-color: #fff;
border: 1px solid #e5e5e5;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px;
-webkit-box-shadow: 0 1px 2px rgba(0,0,0,.05);
-moz-box-shadow: 0 1px 2px rgba(0,0,0,.05);
box-shadow: 0 1px 2px rgba(0,0,0,.05);
}
.form-signin .form-signin-heading,
.form-signin .checkbox {
margin-bottom: 10px;
}
.form-signin input[type="text"],
.form-signin input[type="password"] {
font-size: 16px;
height: auto;
margin-bottom: 15px;
padding: 7px 9px;
}
</style>
<link href="../assets/css/bootstrap-responsive.css" rel="stylesheet">
<!-- HTML5 shim, for IE6-8 support of HTML5 elements -->
<!--[if lt IE 9]>
<script src="../assets/js/html5shiv.js"></script>
<![endif]-->
<!-- Fav and touch icons -->
<link rel="apple-touch-icon-precomposed" sizes="144x144" href="../assets/ico/apple-touch-icon-144-precomposed.png">
<link rel="apple-touch-icon-precomposed" sizes="114x114" href="../assets/ico/apple-touch-icon-114-precomposed.png">
<link rel="apple-touch-icon-precomposed" sizes="72x72" href="../assets/ico/apple-touch-icon-72-precomposed.png">
<link rel="apple-touch-icon-precomposed" href="../assets/ico/apple-touch-icon-57-precomposed.png">
<link rel="shortcut icon" href="../assets/ico/favicon.png">
</head>
<body>
<div class="container">
<form class="form-signin">
<h2 class="form-signin-heading">Please sign in</h2>
<#ps:var>
i: integer;
s: string;
<#/ps:var>
<#ps:code>
<#ps:var name="sSql" type="string" quotemode="sql" >
select *
from table_name
where field_name = "a value"
<#/ps:var>
Out_Write(WR.URL + '<BR>');
for i := 0 to WR.ContentFields.Count - 1 do
begin
Out_Write('Campo ' + inttostr(i) + ': ' + WR.ContentFields.Values[i] + '<BR>');
end;
Out_Write('<br>Frase SQL = <br>' + sSql);
<#/ps:code>
<input type="text" class="input-block-level" placeholder="Email address">
<input type="password" class="input-block-level" placeholder="Password">
<label class="checkbox">
<input type="checkbox" value="remember-me"> Remember me
</label>
<button class="btn btn-large btn-primary" type="submit">Sign in</button>
</form>
</div> <!-- /container -->
<!-- Le javascript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="../assets/js/jquery.js"></script>
<script src="../assets/js/bootstrap-transition.js"></script>
<script src="../assets/js/bootstrap-alert.js"></script>
<script src="../assets/js/bootstrap-modal.js"></script>
<script src="../assets/js/bootstrap-dropdown.js"></script>
<script src="../assets/js/bootstrap-scrollspy.js"></script>
<script src="../assets/js/bootstrap-tab.js"></script>
<script src="../assets/js/bootstrap-tooltip.js"></script>
<script src="../assets/js/bootstrap-popover.js"></script>
<script src="../assets/js/bootstrap-button.js"></script>
<script src="../assets/js/bootstrap-collapse.js"></script>
<script src="../assets/js/bootstrap-carousel.js"></script>
<script src="../assets/js/bootstrap-typeahead.js"></script>
</body>
</html>
program foo;
var
i: integer;
s: string;
sSql: string;
begin
sSql:=
'select * ' +
'from table_name ' +
'where field_name = "a value" ';
Out_Write(
'<!DOCTYPE html>' +
'<html lang="en">' +
'<head>' +
'<meta charset="utf-8">' +
'<title>Sign in · Twitter Bootstrap</title>' +
'<meta name="viewport" content="width=device-width, initial-scale=1.0">' +
'<meta name="description" content="">' +
'<meta name="author" content="ciao">' +
'<!-- Le styles -->' +
'<link href="../assets/css/bootstrap.css" rel="stylesheet">' +
'<style type="text/css">' +
'body {' +
'padding-top: 40px;' +
'padding-bottom: 40px;' +
'background-color: #f5f5f5;' +
'}' +
'.form-signin {' +
'max-width: 300px;' +
'padding: 19px 29px 29px;' +
'margin: 0 auto 20px;' +
'background-color: #fff;' +
'border: 1px solid #e5e5e5;' +
'-webkit-border-radius: 5px;' +
'-moz-border-radius: 5px;' +
'border-radius: 5px;' +
'-webkit-box-shadow: 0 1px 2px rgba(0,0,0,.05);' +
'-moz-box-shadow: 0 1px 2px rgba(0,0,0,.05);' +
'box-shadow: 0 1px 2px rgba(0,0,0,.05);' +
'}' +
'.form-signin .form-signin-heading,' +
'.form-signin .checkbox {' +
'margin-bottom: 10px;' +
'}' +
'.form-signin input[type="text"],' +
'.form-signin input[type="password"] {' +
'font-size: 16px;' +
'height: auto;' +
'margin-bottom: 15px;' +
'padding: 7px 9px;' +
'}' +
'</style>' +
'<link href="../assets/css/bootstrap-responsive.css" rel="stylesheet">' +
'<!-- HTML5 shim, for IE6-8 support of HTML5 elements -->' +
'<!--[if lt IE 9]>' +
'<script src="../assets/js/html5shiv.js"></script>' +
'<![endif]-->' +
'<!-- Fav and touch icons -->' +
'<link rel="apple-touch-icon-precomposed" sizes="144x144" href="../assets/ico/apple-touch-icon-144-precomposed.png">' +
'<link rel="apple-touch-icon-precomposed" sizes="114x114" href="../assets/ico/apple-touch-icon-114-precomposed.png">' +
'<link rel="apple-touch-icon-precomposed" sizes="72x72" href="../assets/ico/apple-touch-icon-72-precomposed.png">' +
'<link rel="apple-touch-icon-precomposed" href="../assets/ico/apple-touch-icon-57-precomposed.png">' +
'<link rel="shortcut icon" href="../assets/ico/favicon.png">' +
'</head>' +
'<body>' +
'<div class="container">' +
'<form class="form-signin">' +
'<h2 class="form-signin-heading">Please sign in</h2>'
);
// BEGIN PASCAL CODE
Out_Write(WR.URL + '<BR>');
for i := 0 to WR.ContentFields.Count - 1 do
begin
Out_Write('Campo ' + inttostr(i) + ': ' + WR.ContentFields.Values[i] + '<BR>');
end;
Out_Write('<br>Frase SQL = <br>' + sSql);
// END PASCAL CODE
Out_Write(
'<input type="text" class="input-block-level" placeholder="Email address">' +
'<input type="password" class="input-block-level" placeholder="Password">' +
'<label class="checkbox">' +
'<input type="checkbox" value="remember-me"> Remember me' +
'</label>' +
'<button class="btn btn-large btn-primary" type="submit">Sign in</button>' +
'</form>' +
'</div> <!-- /container -->' +
'<!-- Le javascript' +
'================================================== -->' +
'<!-- Placed at the end of the document so the pages load faster -->' +
'<script src="../assets/js/jquery.js"></script>' +
'<script src="../assets/js/bootstrap-transition.js"></script>' +
'<script src="../assets/js/bootstrap-alert.js"></script>' +
'<script src="../assets/js/bootstrap-modal.js"></script>' +
'<script src="../assets/js/bootstrap-dropdown.js"></script>' +
'<script src="../assets/js/bootstrap-scrollspy.js"></script>' +
'<script src="../assets/js/bootstrap-tab.js"></script>' +
'<script src="../assets/js/bootstrap-tooltip.js"></script>' +
'<script src="../assets/js/bootstrap-popover.js"></script>' +
'<script src="../assets/js/bootstrap-button.js"></script>' +
'<script src="../assets/js/bootstrap-collapse.js"></script>' +
'<script src="../assets/js/bootstrap-carousel.js"></script>' +
'<script src="../assets/js/bootstrap-typeahead.js"></script>' +
'</body>' +
'</html>'
);
end.
francesco@netbook:~/Scaricati/pspage_module$ ./compile.sh
Free Pascal Compiler version 2.6.0-1 [2012/01/13] for i386
Copyright (c) 1993-2011 by Florian Klaempfl and others
Target OS: Linux for i386
Compiling pspage_module.lpr
Compiling udmpspage.pas
Compiling upspage.pas
Fatal: Can't find unit uPSCompiler used by upspage
Fatal: Compilation aborted
Error: /usr/bin/ppc386 returned an error exitcode (normal if you did not specify a source file to be compiled)
Grande nomore, parlaci un po di bootstrap e perchè lo hai scelto :)
francesco@netbook:~/Scaricati/pspage_module$ ./compile.sh
Free Pascal Compiler version 2.6.0-1 [2012/01/13] for i386
Copyright (c) 1993-2011 by Florian Klaempfl and others
Target OS: Linux for i386
Compiling pspage_module.lpr
Compiling udmpspage.pas
Compiling upspage.pas
Fatal: Can't find unit fpPsPageTemplate used by upspage
Fatal: Compilation aborted
Error: /usr/bin/ppc386 returned an error exitcode (normal if you did not specify a source file to be compiled)
francesco@netbook:~/Scaricati/pspage_module$ ./compile.sh
Free Pascal Compiler version 2.6.0-1 [2012/01/13] for i386
Copyright (c) 1993-2011 by Florian Klaempfl and others
Target OS: Linux for i386
Compiling pspage_module.lpr
Compiling udmpspage.pas
Compiling upspage.pas
Fatal: Can't find unit uPSCompiler used by upspage
Fatal: Compilation aborted
Error: /usr/bin/ppc386 returned an error exitcode (normal if you did not specify a source file to be compiled)
no non rompi ci mancherebbe :)
sembra lo stesso errore del post
Risposta #204 il: Aprile 12
controlla che:
uPsCompiler sia in externalsrc/pascalscript/Source
e che tra i percorsi di compilazione ci siano
-Fi./externalsrc/pascalscript/Source
-Fu./externalsrc/pascalscript/Source
in più, questi percorsi devono stare sia sullo script compile.sh che nelle opzioni del progetto se compili pspagecmdline da dentro lazarus
Edit:
per lanciare il command line il comando è il seguente
./pspagecmdline -s www/pspage/script08.pspage
bisogna però accertarsi che il file
www/pspage/script08.pspas
non esista, bisogna cancellarlo prima di lanciare il comando
quando viene lanciato il comando viene dato un errore:
Compile failed...
[Error] (3:4): 'BEGIN' expected
*** PSPAGE ERROR ***
è tutto normale (per ora), controllare il file generato (www/pspage/script08.pspas)
ora che il parser funziona il prossimo step è farci qualcosa di sensato, sto lavorando per qesto :)
Scusa NoMore, io lancio il compile.sh e continua a darmi l'errore. Non è che in qualche file usi il percorso fisso: externalsrc/pascalscript/Source? Perchè io in realtà ho externalsrc/pascalscript/trunk/Source
svn checkout http://svn.code.sf.net/p/lazarusiug/liug/trunk/pspage_module
francesco@netbook:~/Scaricati/pspage_module$ sudo ./compile.sh
Free Pascal Compiler version 2.6.0-1 [2012/01/13] for i386
Copyright (c) 1993-2011 by Florian Klaempfl and others
Target OS: Linux for i386
Compiling pspage_module.lpr
Compiling udmpspage.pas
Compiling upspage.pas
Fatal: Can't find unit uPSCompiler used by upspage
Fatal: Compilation aborted
Error: /usr/bin/ppc386 returned an error exitcode (normal if you did not specify a source file to be compiled)
Salve,Non è questo il 3d adeguato.
anchi'io sto provando a utilizzare Raudus con Lazarus 1.0.4 in ambiente Windows XP. Gli esempi a corredo del pacchetto funzionano ma non so come utilizzare Lazreport con Raudus. Ho provato ad ingegnarmi per pubblicare in web un report ma niente da fare. Sarei gratissimo se potessi / volessi aiutarmi a capire e magari fornirmi o indicarmi dove trovare qualche esempio da studiare.
I pacchetti installati sono: Raudus, Lazreport , Powerpdf e LazreportPdfExport
Grazie in anticipo
cd /var/www
sudo chown root:www-data pspage
sudo chmod 775 pspage
<#ps:code uses="db,PSPAGE_SQLDB_PLUGIN">
<#ps:var>
DbHandler: integer;
<#/ps:var>
DbHandler := GetConnectionHandler('FIREBIRD SQL 2.5',
'10.4.4.42',
'C:\db\fb25\FISHFACT.FDB',
'PSUSER',
'psuser');
<#/ps:code>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Fishfact Demo</title>
<link rel="stylesheet" type="text/css" href="../extjs/examples/shared/example.css" />
<!-- GC -->
<script type="text/javascript" src="../extjs/examples/shared/include-ext.js"></script>
<script type="text/javascript" src="../extjs/examples/shared/options-toolbar.js"></script>
<!-- page specific -->
<script type="text/javascript" src="fishfact_e42_grid.js"></script>
</head>
<body>
<h1>Fishfact Demo</h1>
<p>This example show how use pspage with extjs 4.2 and json data file.</p>
<!-- a place holder for the grid. requires the unique id to be passed in the javascript function, and width and height ! -->
<div id="example-grid"></div>
</body>
</html>
Ext.require([
'Ext.data.*',
'Ext.grid.*'
]);
Ext.onReady(function() {
Ext.define('User',{
extend: 'Ext.data.Model',
fields: [
{name: 'speciesno', type: 'string'},
{name: 'category', type: 'string'},
{name: 'commonname', type: 'string'},
{name: 'speciesname', type: 'string'},
{name: 'lengthcm', type: 'int'},
{name: 'lengthin', type: 'int'},
{name: 'notes', type: 'string'}
]
});
var Grid1BiolifeStore = Ext.create('Ext.data.Store', {
storeId: 'Grid1BiolifeStore',
model: 'User',
autoLoad: true,
proxy: {
type: 'ajax',
url : '../data/biolife.json',
reader: {type: 'json'}
}
});
var Grid1Grid = new Ext.grid.GridPanel({
store: Grid1BiolifeStore,
/* renderTo: 'example-grid', */
title: 'Fish list',
width: 640,
height: 210,
forceFit: true,
split: true,
region: 'north',
columns: [
{
id: 'speciesno',
header: "Species No",
sortable: true,
dataIndex: 'speciesno'
},{
id: 'category',
header: "Category",
sortable: true,
dataIndex: 'category'
},{
id: 'commonname',
header: "Common Name",
sortable: true,
dataIndex: 'commonname'
},{
id: 'speciesname',
header: "Species Name",
sortable: true,
dataIndex: 'speciesname'
},{
id: 'lengthcm',
header: "Length (cm)",
sortable: true,
dataIndex: 'lengthcm'
},{
id: 'lengthin',
header: "Length (in)",
sortable: true,
dataIndex: 'lengthin'
}
]
});
// define a template to use for the detail view
var bookTplMarkup = [
'<TABLE WIDTH=100% CELLPADDING=0 CELLSPACING=0 STYLE="page-break-before: always">',
'<COL WIDTH=128*>',
'<COL WIDTH=128*>',
'<TR>',
'<TD COLSPAN=2 WIDTH=100% VALIGN=TOP STYLE="border: none; padding: 0cm">',
'<H3>{commonname}</H3> <a href="{DetailPageURL}" target="_blank">{Title}</a><br/>',
'</TD>',
'</TR>',
'<TR VALIGN=TOP>',
'<TD WIDTH=50% STYLE="border: none; padding: 0cm">',
'<img src="../data/ffimg/Angelfish_Blue_Angelfish.gif"><br>',
'</TD>',
'<TD WIDTH=50% STYLE="border: none; padding: 0cm">',
'Species No: {speciesno}<br/>',
'Category: {category}<br/>',
'Common Name: {commonname}<br/>',
'Species Name: {speciesname}<br/>',
'Length (cm): {lengthcm}<br/>',
'Length (in): {lengthin}<br/>',
'</TD>',
'</TR>',
'<TR>',
'<TD COLSPAN=2 WIDTH=100% VALIGN=TOP STYLE="border: none; padding: 0cm">',
'<H4>Notes:</H4>{notes}',
'</TD>',
'</TR>',
'</TABLE>'
];
var bookTpl = Ext.create('Ext.Template', bookTplMarkup);
Ext.create('Ext.Panel', {
renderTo: 'example-grid',
frame: true,
title: 'Biolife',
width: 580,
height: 650,
layout: 'border',
items: [
Grid1Grid, {
id: 'detailPanel',
title: 'Detail',
region: 'center',
bodyPadding: 7,
bodyStyle: "background: #ffffff;",
html: 'Please select a fish to see additional details.'
}
]
});
// update panel body on selection change
Grid1Grid.getSelectionModel().on('selectionchange', function(sm, selectedRecord) {
if (selectedRecord.length) {
var detailPanel = Ext.getCmp('detailPanel');
detailPanel.update(bookTpl.apply(selectedRecord[0].data));
}
});
});
[
{"speciesno" : "90020",
"category" : "Triggerfishy",
"commonname" : "Clown Triggerfish",
"speciesname": "Ballistoides conspicillum",
"lengthcm" : 50,
"lengthin" : 20,
"notes" : "..."
},
{"speciesno" : "90030",
"category" : "Snapper",
"commonname" : "Red Emperor",
"speciesname": "Lutjanus sebae",
"lengthcm" : 60,
"lengthin" : 24,
"notes" : "..."
},
{"speciesno" : "90050", "category" : "Wrasse",
"commonname": "Giant Maori Wrasse", "speciesname": "Cheilinus undulatus",
"lengthcm": 229, "lengthin" : 90,
"notes": "This is the largest of all the wrasse. It is found in dense reef areas, feeding on a wide variety of mollusks, fishes, sea urchins, crustaceans, and other invertebrates. In spite of its immense size, divers find it a very wary fish."},
{"speciesno" : "90070", "category" : "Angelfish",
"commonname": "Blue Angelfish", "speciesname": "Pomacanthus nauarchus",
"lengthcm": 30, "lengthin" : 12,
"notes" : "Habitat is around boulders, caves, coral ledges and crevices in shallow waters. Swims alone or in groups."},
{"speciesno" : "90080", "category" : "Cod",
"commonname": "Lunartail Rockcod", "speciesname": "Variola louti",
"lengthcm": 80, "lengthin" : 31,
"notes" : "Also known as the coronation trout. It is found around coral reefs from shallow to very deep waters. Feeds primarily on small fishes."},
{"speciesno" : "90090", "category" : "Scorpionfish",
"commonname": "Firefish", "speciesname": "Pterois volitans",
"lengthcm": 38, "lengthin" : 15,
"notes" : "Also known as the turkeyfish. Inhabits reef caves and crevices. The firefish is usually stationary during the day, but feeds actively at night. Favorite foods are crustaceans."},
{"speciesno" : "90100", "category" : "Butterflyfish",
"commonname": "Ornate Butterflyfish", "speciesname": "Chaetodon Ornatissimus",
"lengthcm": 19, "lengthin" : 7,
"notes" : "Normally seen in pairs around dense coral areas from very shallow to moderate depths. The butterflyfish feeds mainly on coral polyps and anemones." },
{"speciesno" : "90110", "category" : "Shark",
"commonname": "Swell Shark", "speciesname": "Cephaloscyllium ventriosum",
"lengthcm": 102, "lengthin" : 40,
"notes" : "Inhabits shallow reef caves and crevices and kelp beds along the coast and offshore islands. This shark feeds at night on fishes and crustaceans and is totally harmless to divers."},
{"speciesno" : "90120", "category" : "Ray",
"commonname": "Bat Ray", "speciesname": "Myliobatis californica",
"lengthcm": 56, "lengthin" : 22,
"notes" : "Also know as the grinder ray because of its flat grinding teeth used to crush its meal of crustaceans or invertebrates. Inhabits bays, sloughs, and kelp beds with sandy bottoms."},
{"speciesno" : "90130", "category" : "Eel",
"commonname": "California Moray", "speciesname": "Gymnothorax mordax",
"lengthcm": 150, "lengthin" : 59,
"notes" : "This fish hides in a shallow-water lair with just its head protruding during the day. At night it feeds on octopuses, crustaceans, and small fish close by."},
{"speciesno" : "90140", "category" : "Cod",
"commonname": "Lingcod", "speciesname": "Ophiodon elongatus",
"lengthcm": 150, "lengthin" : 59,
"notes" : "Widely found from near the shore to very deep waters. Young fish stay on sand or mud bottoms of bays and inshore areas. The lingcod is a voracious predator, eating many different fishes and octopuses."},
{"speciesno" : "90150", "category" : "Sculpin",
"commonname": "Cabezon", "speciesname": "Scorpaenichthys marmoratus",
"lengthcm": 99, "lengthin" : 39,
"notes" : "Often called the great marbled sculpin. Found over rocky or shell-encrusted bottoms from shallow to moderately deep waters. It feeds primarily on crustaceans and mollusks."},
{"speciesno" : "90160", "category" : "Spadefish",
"commonname": "Atlantic Spadefish", "speciesname": "Chaetodiperus faber",
"lengthcm": 90, "lengthin" : 35,
"notes" : "Found in mid-water areas around reefs, wrecks and bridges. The tiny, all-black juveniles drift motionless in the shallows, looking like leaves and pods of mangrove."},
{"speciesno" : "90170", "category" : "Shark",
"commonname": "Nurse Shark", "speciesname": "Ginglymostoma cirratum",
"lengthcm": 400, "lengthin" : 157,
"notes" : "Frequently found under rock or reef ledges. Carnivorous with well-developed organs for scent and vibration detection."},
{"speciesno" : "90180", "category" : "Ray",
"commonname": "Spotted Eagle Ray", "speciesname": "Aetobatus narinari",
"lengthcm": 200, "lengthin" : 79,
"notes" : "Found in reef areas and sandy bottoms. The spotted eagle ray has a poisonous spine on its tail and incredibly powerful jaws to crush oysters, clams, and numerous crustaceans. Divers report large schools during breeding season."},
{"speciesno" : "90190", "category" : "Snapper",
"commonname": "Yellowtail Snapper", "speciesname": "Ocyurus chrysurus",
"lengthcm": 75, "lengthin" : 30,
"notes" : "Prefers to congregate in loose groups in the open water above reef areas. Has well-developed teeth and usually feeds at night on small fishes, crustaceans, and plankton."},
{"speciesno" : "90200", "category" : "Parrotfish",
"commonname": "Redband Parrotfish", "speciesname": "Sparisoma Aurofrenatum",
"lengthcm": 28, "lengthin" : 11,
"notes" : "Inhabits reef areas. The parrotfish's teeth are fused together, enabling them to scrape away hard coral outer skeletons to get at polyps inside. These fish are thought to be a major factor in reef recycling."},
{"speciesno" : "90210", "category" : "Barracuda",
"commonname": "Great Barracuda", "speciesname": "Sphyraena barracuda",
"lengthcm": 150, "lengthin" : 59,
"notes" : "Young barracuda live in inshore seagrass beds, while adults range from inshore channels to the open ocean. The barracuda feeds on a wide variety of fishes."},
{"speciesno" : "90220", "category" : "Grunt",
"commonname": "French Grunt", "speciesname": "Haemulon flavolineatum",
"lengthcm": 30, "lengthin" : 12,
"notes" : "The French grunt drifts in large groups in sheltered reef areas during the day. It forages nearby for other fish at night."},
{"speciesno" : "90230", "category" : "Snapper",
"commonname": "Dog Snapper", "speciesname": "Lutjanus jocu",
"lengthcm": 90, "lengthin" : 35,
"notes" : "This fish is named for its elongated canine teeth at the front of the upper jaw. It is solitary and wary and stays in the deep reef or submerged wreck areas. Not very common anywhere."},
{"speciesno" : "90240", "category" : "Grouper",
"commonname": "Nassau Grouper", "speciesname": "Epinephelus striatus",
"lengthcm": 91, "lengthin" : 36,
"notes" : "Found around shallow coral reefs and seagrass beds, feeding mainly on fishes."},
{"speciesno" : "90250", "category" : "Wrasse",
"commonname": "Bluehead Wrasse", "speciesname": "Thalassoma bifasciatum",
"lengthcm": 15, "lengthin" : 6,
"notes" : "Found in coral reefs, rocky flats, reef sand, and seagrass habitats. This is one of the most successful ''cleaner fish'' in the tropical West Atlantic. It feeds on the parasites of other fish, who come to the wrasse to be cleaned."},
{"speciesno" : "90260", "category" : "Jack",
"commonname": "Yellow Jack", "speciesname": "Gnathanodon speciousus",
"lengthcm": 90, "lengthin" : 35,
"notes" : "Inhabits reef and mid-water areas, feeding on invertebrates and small fishes. The adult is one of the few jacks without teeth."},
{"speciesno" : "90270", "category" : "Surfperch",
"commonname": "Redtail Surfperch", "speciesname": "Amphistichus rhodoterus",
"lengthcm": 40, "lengthin" : 16,
"notes" : "Inhabits exposed sandy shorelines to shallow depths. Feeds on sand-dwelling crustaceans and mollusks."},
{"speciesno" : "90280", "category" : "Croaker",
"commonname": "White Sea Bass", "speciesname": "Atractoscion nobilis",
"lengthcm": 150, "lengthin" : 59,
"notes" : "Schools are found over rocky bottoms and around kelp forest canopies. Not a true bass, this is the largest of the croakers on the Pacific Coast. It feeds in mid-water on squid, anchovies, and sardines."},
{"speciesno" : "90290", "category" : "Greenling",
"commonname": "Rock Greenling", "speciesname": "Hexagrammos lagocephalus",
"lengthcm": 60, "lengthin" : 24,
"notes" : ""},
{"speciesno" : "90300", "category" : "Wrasse",
"commonname": "Senorita", "speciesname": "Oxyjulis californica",
"lengthcm": 25, "lengthin" : 10,
"notes" : ""},
{"speciesno" : "90310", "category" : "Smelt",
"commonname": "Surf Smelt", "speciesname": "Hypomesus pretiosus",
"lengthcm": 25, "lengthin" : 10,
"notes" : ""}
]
Free Pascal Compiler version 2.6.2-8+rpi1+b1 [2014/03/25] for arm
Copyright (c) 1993-2012 by Florian Klaempfl and others
Target OS: Linux for ARMHF
Compiling pspage_module.lpr
Compiling udmpspage.pas
Compiling upspage.pas
Compiling ./externalsrc/pascalscript/Source/uPSCompiler.pas
Compiling ./externalsrc/pascalscript/Source/uPSUtils.pas
uPSUtils.pas(727,33) Fatal: Internal error 200502052
Fatal: Compilation aborted
Error: /usr/bin/ppcarm returned an error exitcode (normal if you did not specify a source file to be compiled)
2.6.2
# Goto FreePascal folder.
cd ~/FreePascal
# Initial checkout to 2.7.1 folder (only required on first run).
# svn co http://svn.freepascal.org/svn/fpc/trunk 2.7.1
# Update previous checkout snapshot.
svn up 2.7.1
# Export the checkout to working folder.
svn export --force 2.7.1 fpctmp
# Change to fpc working folder.
cd fpctmp
# Build the compiler.
make all OPT='-gl -O3p3' -j 8 FPMAKEOPT="-T 8" FPC=/usr/lib/fpc/2.6.0/ppcarm
# Install compiler.
sudo make install PP=compiler/ppcarm PREFIX=/usr -j 8 FPMAKEOPT="-T 8"
# Symlink the installed compiler.
sudo rm -f /usr/bin/ppcarm
sudo ln -s /usr/lib/fpc/2.7.1/ppcarm /usr/bin/ppcarm
# Install sources.
sudo make install sourceinstall PREFIX=/usr
# Symlink source path.
sudo rm -f /usr/share/fpcsrc
sudo ln -sf /usr/share/src/fpc-2.7.1/fpc /usr/share/fpcsrc
# Create fpc.cfg.
sudo /usr/lib/fpc/2.7.1/samplecfg /usr/lib/fpc/2.7.1 /etc
# Remove working folder.
cd ..
rm -rf fpctmp
make all OPT='-gl -O3p3' -j 8 FPMAKEOPT="-T 8" FPC=/usr/lib/fpc/2.6.0/ppcarm