A Pug egy template motor Node számára. Egy könnyen olvasható egyszerű szintaktikájú nyelvből készít HTML-t.
A Pug webhelye:
Elsőként telepíteni kell Node.js-t és a hozzátartozó npm csomagkezelőt.
apt install nodejs
Rendszergazdaként:
npm i -g pug-cli
Ellenőrizzük a verziót:
pug --version
Atom esetén:
apm install language-pug
Készítsünk egy projektet:
mkdir projekt01 cd projekt01 mkdir html touch index.pug
Indítsuk el a pug-t, amely az index.pug fájlból azonnal elkészíti az index.html fájlt:
pug -w -P . -o ./html
Valami ehhez hasonlót kell látni:
watching test.pug rendered /home/janos/dev/gyak/npm/projekt02/html/test.html
A kapcsolók rendre:
Készítsünk egy weboldalt:
doctype html html(lang='hu') head meta(charset='utf-8') title Helló body h1 Helló Világ
Ha megnézzük a kimenetet, akkor egy index.html fájlt találunk, aminek a tartalma:
A behúzások fontosak a .pug fájlban. Ha azt írom:
div p helló
A kimenete:
<div> <p>helló</p> </div>
De ha egy vonalba írom a div és p elemeket:
div p helló
Akkor a div nem tartalmazza a p elemet.
<div></div> <p>helló</p>
Láthatjuk, hogy a PUG fájlban nem írunk lezáró taget az egyszerűség kedvéért. Több információért:
Generálhatunk dokumentum típusdefiníciót. A Pug alapértelmezetten HTML5 dokumentum típusdefiníciót generál, de rávehető más típusokra is.
Ha szeretnénk nyomatékosítani a HTML5-t:
doctype html
Ez a következő HTML kódot generálja:
<!DOCTYPE html>
XHTML doctype sort a következő Pug bejegyzés generál:
doctype strict
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
Transitional doctype sor generálása:
doctype transitional
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Több információ:
ul li alma li körte li barack li szilva
Eredmény:
<ul> <li>alma</li> <li>körte</li> <li>barack</li> <li>szilva</li> </ul>
div.gyumolcsok ul li alma li körte li barack li szilva
<div class="gyumolcsok"> <ul> <li>alma</li> <li>körte</li> <li>barack</li> <li>szilva</li> </ul> </div>
Azonosítóval
div#gyumolcsok ul li alma li körte li barack li szilva
<div id="gyumolcsok"> <ul> <li>alma</li> <li>körte</li> <li>barack</li> <li>szilva</li> </ul> </div>
A div elem elhagyható. Ha csak az osztály vagy az azonosító nevét írjuk ponttal vagy # karakterrel, akkor div elem lesz belőle.
.elso
Eredménye:
<div class="elso"></div>
Vagy azonsítóval:
#elso
Eredménye:
<div id="elso"></div>
Az attribútumokat zárójelben a tag neve után adjuk meg. A karakterkódolás beállítása például:
meta(charset='utf-8')
Eredménye:
<meta charset="utf-8">
Egy link href attribútuma:
a(href='index.html') Főoldal
Eredménye:
<a href="index.html">Főoldal</a>
Az attribútumok mehetnek több sorba is:
input.adatok( type='text' name='teljesnev' placeholder='Írd ide a neved' )
Eredménye:
<input class="adatok" type="text" name="teljesnev" placeholder="Írd ide a neved">
p Lorem ipsum dolor est amet
p | Első sor | Második sor
p. Multos do ingeniis non quorum, proident magna possumus admodum ex senserit dolore quid commodo minim ut arbitror aliqua dolore eu quem. Admodum tempor velit senserit multos si laboris cillum occaecat. Iis nulla singulis, ita non ipsum proident, expetendis elit ea offendit domesticarum, ea ipsum singulis despicationes.Qui nulla proident. Te elit relinqueret, malis constias arbitrantur. Ea cillum id fugiat.
// Első blokk div.elso
Eredménye:
<!-- Első blokk--> <div class="elso"></div>
Ha HTML oldalon nem szeretném, hogy szerepeljen, csak a Pug fájlban szeretném megjegyzésként látni:
//- Első blokk div.elso
Több soros megjegyzés:
// Megjegyzés első sora Második sora div.elso
Eredménye:
<!-- Megjegyzés első sora Második sora --> <div class="elso"> </div>
Kétféle JavaScript kódot használhatunk:
A nem pufferelt kódok mindig (-) karakterrel kezdődnek, és nem jelennek meg a HTML kimenetben. A pufferelt kódok mindig ( karakterrel kezdődnek, és eredményeik megjelennek a HTML kimenetben.
//- Erre a névre később hivatkozhatok a Pug fájlban: - const nev = "János" //- Kiértékelődik JavaScript kifejezésként: p=2*5
A fenti kód eredménye:
<p>10</p>
Biztonsági okokból a pufferelt kód HTML escape szekvenciával jelenik meg. Pug kód:
p= '<br>'
Eredménye:
<p><br></p>
Behelyettesítést a #{} karakterek segítségével tehetünk a Pug kódba.
- const nev = "János" p A neved #{nev}
Eredménye:
<p>A neved János</p>
//- Iteráció - const gyumolcsok = ['alma', 'körte', 'szilva', 'barack'] ul each gyumolcs in gyumolcsok li= gyumolcs
Eredmény:
<ul> <li>alma</li> <li>körte</li> <li>szilva</li> <li>barack</li> </ul>
Kulcsokkal:
- const gyumolcsok = ['alma', 'körte', 'szilva', 'barack'] ul each gyumolcs, index in gyumolcsok li= index + ': ' + gyumolcs
<ul> <li>0: alma</li> <li>1: körte</li> <li>2: szilva</li> <li>3: barack</li> </ul>
//- Szelekció - var nev = 'János' if nev p= nev
Eredmény:
<p>János</p>
//- Szelekció - var dolgozo = { nev: 'Nagy János', telepules: 'Szolnok', fizetes: '8500000' } if dolgozo.fizetes p= dolgozo.nev
Eredmény:
<p>Nagy János</p>
Megoldás lehet a nodemon használata.
npm install express
Hozz létre egy app.js fájl, majd szerkeszd:
const express = require('express'); const app = express(); app.get('/', (req, res) => { res.send('Helló Világ'); }); app.listen(8000, () => { console.log('Hallgatózás a 8000-s porton...'); });
node app
npm install pug mkdir views touch views/index.pug
projekt01/ |-node_modules/ |-views/ | `-index.pug |-app.js |-package-lock.json `-package.json
const express = require('express'); const app = express(); app.set('view engine', 'pug'); app.get('/', (req, res) => { res.render('index'); }); app.listen(8000, () => { console.log('Hallgatózás a 8000-s porton...'); });
doctype html html(lang='hu') head meta(charset='utf-8') title Helló body h1 Helló p Helló Világ
node app
{ "dolgozok": [ { "id": 1, "fullname": "Nagy János", "city": "Szolnok", "salary": 8400000 }, { "id": 2, "fullname": "Páros Lajos", "city": "Szeged", "salary": 3430000 }, { "id": 3, "fullname": "Aranyos Enikő", "city": "Szolnok", "salary": 4245000 }, { "id": 4, "fullname": "Bárány Tamás", "city": "Miskolc", "salary": 2850000 } ] }
npm i -g json-server
json-server --watch dolgozok.json --port 6000
mkdir projekt01 cd projekt01 npm init -y npm install express pug axios
projekt01/ |-node_modules/ |-views/ | `-index.pug |-app.js |-package-lock.json `-package.json
Hozzuk létre az index.pug fájlt:
doctype html html(lang='hu') head meta(charset='utf-8') title Helló body h1 Dolgozók table tr th Név th Település th Fizetés each dolgozo in dolgozok tr td #{dolgozo.fullname} td #{dolgozo.city} td #{dolgozo.salary}
Majd az app.js:
const express = require('express'); const app = express(); const axios = require('axios'); app.set('view engine', 'pug'); app.get('/', (req, res) => { axios.get('http://localhost:6000/dolgozok') .then(resp => { res.render('index', { dolgozok: resp.data}) }); }); app.listen(8000, () => { console.log('Hallgatózás a 8000-s porton...'); });
Futtassuk a weblapot:
node app
Nézzük meg a böngészőben:
localost:8000
doctype html html(lang='hu') head meta(charset='utf-8') title Zöld Zrt body h1 Zöld Zrt nav ul li a(href="/addform") Hozzáad li a(href="/") Lista block content
extends layout.pug block content h2 Dolgozók table tr th Név th Település th Fizetés each dolgozo in dolgozok tr td #{dolgozo.fullname} td #{dolgozo.city} td #{dolgozo.salary}
extends layout.pug block content h2 Új dolgozó label(for="nev") Név input#nev(type="text", name="nev") br label(for="telepules") Település input#telepules(type="text", name="telepules") br
A routing a következő képen néz ki:
const express = require('express'); const app = express(); const axios = require('axios'); app.set('view engine', 'pug'); app.get('/', (req, res) => { axios.get('http://localhost:6000/dolgozok') .then(resp => { res.render('index', { dolgozok: resp.data}) }); }); app.get('/addform', (req, res) => { res.render('addform'); }); app.listen(8000, () => { console.log('Hallgatózás a 8000-s porton...'); });