Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
428fb4bbec | ||
|
|
14af51668f | ||
|
|
3bae622c2b | ||
|
|
a8b7d599c2 | ||
|
|
26da5030a6 | ||
|
|
a9f8f88010 | ||
|
|
f3d3fa1b00 | ||
|
|
f7aa92acc6 | ||
|
|
7045aa9fcc | ||
|
|
efff8623d8 | ||
|
|
6fdbef1dd7 | ||
|
|
a926ad6423 | ||
|
|
8319f58f1e | ||
|
|
21cfe8bb89 | ||
|
|
b5a38531c4 | ||
|
|
666e274140 | ||
|
|
4015beb4f2 | ||
|
|
4afac814ee | ||
|
|
37bfe4e15e | ||
|
|
c701edd977 | ||
|
|
a455e3f12f | ||
|
|
be099aa810 | ||
|
|
24e9b8c055 | ||
|
|
cfe7cb7fd6 | ||
|
|
9499c7792b | ||
|
|
3a9db6d109 | ||
|
|
797eb80980 | ||
|
|
00e9f7c4d7 | ||
|
|
77a8777dcd | ||
|
|
b660bbeb96 | ||
|
|
bbce40b014 | ||
|
|
0ec45c8745 | ||
|
|
dfa70a9620 | ||
|
|
3079c6ea8a | ||
|
|
4d4aa8aeea | ||
|
|
721b6de930 | ||
|
|
7d419be27a | ||
|
|
07b6a381c1 | ||
|
|
45b8c3d98e | ||
|
|
0a8b0310d3 | ||
|
|
a50847da2b | ||
|
|
1fc446d02a | ||
|
|
7076123fcf | ||
|
|
449c9511e1 | ||
|
|
0ec49c4fe7 | ||
|
|
b41cadd95b | ||
|
|
0bd3e2255f | ||
|
|
dc17a7f963 | ||
|
|
995ad09cca | ||
|
|
b9e9976d34 | ||
|
|
d37dafd58c | ||
|
|
4d1611c6eb | ||
|
|
7268585ed9 | ||
|
|
1b929f1333 | ||
|
|
3ba108cf88 | ||
|
|
70f4e641dc | ||
|
|
23aa9c4788 | ||
|
|
04f9a5cb12 | ||
|
|
6b833341c5 | ||
|
|
4fe6bf4649 | ||
|
|
b10f031133 | ||
|
|
4d2278a8f8 | ||
|
|
5a38e0eafe | ||
|
|
4f2ee45abf | ||
|
|
09b031dc2e | ||
|
|
616d514fc5 | ||
|
|
b07a1e4941 | ||
|
|
f57a91ca74 | ||
|
|
f7ca286066 | ||
|
|
5b64292ec9 | ||
|
|
b9bd50c8c3 | ||
|
|
c5953f04c0 | ||
|
|
1ea78161d1 |
@@ -0,0 +1,68 @@
|
||||
# Le Gitea Actions del gioco: girano sul runner del PC di Andrea (make runner; label ubuntu-latest = node:22-bookworm).
|
||||
# A ogni push su main e a ogni tag i test unitari; su un tag vX.Y.Z (o a mano, «Run workflow») anche le venti prove nel
|
||||
# browser, una per job nell'immagine di Playwright, sulla scheda video del PC; se passa tutto, la release.
|
||||
# Il controllo dei file pubblicabili non sta qui (a pipeline partita il push è già pubblico): è l'hook pre-push.
|
||||
name: test
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
tags: ['v*']
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Test unitari
|
||||
run: node --version && node --test tests/*.test.mjs
|
||||
|
||||
# Le prove nel browser, una per job: l'elenco è SUITES di scripts/verify.mjs (verify.test.mjs pretende che coincidano),
|
||||
# l'immagine ha la stessa versione di Playwright di package-lock.json (idem).
|
||||
browser:
|
||||
needs: test
|
||||
if: startsWith(github.ref, 'refs/tags/v') || github.event_name == 'workflow_dispatch'
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: mcr.microsoft.com/playwright:v1.64.1-noble
|
||||
# La scheda video del PC (runtime NVIDIA di Docker): Chromium disegna lì, tests/chromium.mjs la trova da solo.
|
||||
options: --gpus all -e NVIDIA_DRIVER_CAPABILITIES=all
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
prova: [principale, minigiochi, telefoni, ambient, veicoli, ingorgo, smarronata, briscola, tressette, scopa, biliardo, flipper, micro, cerbottana, condor, campana, bruciate, gara, telefono, risveglio, peso]
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Playwright
|
||||
run: npm ci --no-audit --no-fund
|
||||
- name: Prova ${{ matrix.prova }}
|
||||
run: node scripts/verify.mjs ${{ matrix.prova }}
|
||||
|
||||
release:
|
||||
needs: [test, browser]
|
||||
if: startsWith(github.ref, 'refs/tags/v')
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Release del tag
|
||||
env:
|
||||
TOKEN: ${{ secrets.GITEA_TOKEN }}
|
||||
TAG: ${{ github.ref_name }}
|
||||
API: ${{ github.server_url }}/api/v1/repos/${{ github.repository }}
|
||||
run: |
|
||||
prev=$(git describe --tags --abbrev=0 "$TAG^" 2>/dev/null || true)
|
||||
{
|
||||
echo "Si gioca su https://50037.manzolo.it; qui sotto lo zip di questa versione."
|
||||
echo
|
||||
echo "Cosa cambia${prev:+ da $prev}:"
|
||||
echo
|
||||
git log --no-merges --format='- %s' ${prev:+$prev..}"$TAG" | grep -v -e '^- Versione [0-9]' | cut -c1-400
|
||||
} > note.md
|
||||
node -e 'const fs=require("fs");process.stdout.write(JSON.stringify({tag_name:process.env.TAG,name:"Versione "+process.env.TAG.slice(1),body:fs.readFileSync("note.md","utf8")}))' > release.json
|
||||
code=$(curl -s -o risposta.json -w '%{http_code}' -X POST -H "Authorization: token $TOKEN" -H 'Content-Type: application/json' --data @release.json "$API/releases")
|
||||
cat risposta.json | head -c 400; echo
|
||||
[ "$code" = 201 ] || [ "$code" = 409 ]
|
||||
@@ -7,3 +7,4 @@ assets/generated/
|
||||
.venv/
|
||||
.env
|
||||
deploy.local.mk
|
||||
.verify-ok.json
|
||||
|
||||
@@ -16,9 +16,19 @@ i suoi ricordi: non inventare persone, luoghi o fatti del paese al posto suoi; p
|
||||
(`tools/slice_sprites.py`, `scripts/build-site.sh`, `scripts/bump.sh`, `scripts/check-public.sh`, action di Pages).
|
||||
- Nessun build step: ES modules statici, server locale con `python3 -m http.server`.
|
||||
- Ogni funzionalità con il suo test; un test automatico percorre tutta la soluzione dell'avventura.
|
||||
- Verifica visiva nel browser con Playwright e swiftshader prima di dichiarare finito qualcosa di grafico.
|
||||
- Le prove nel browser sono a sezioni (`scripts/verify.mjs`, dal 2026-11-01): `make verify` rifà solo quelle i cui ingressi
|
||||
sono cambiati dall'ultimo verde (la briscola se cambia la briscola, la partita intera se cambiano storia, motore, stile
|
||||
o risorse). Un `chromium.launch` nuovo nelle prove usa `args: ARGS` di `tests/chromium.mjs`.
|
||||
Gli effetti pesanti li scopre la prova `peso` (`tests/peso.browser.mjs`): sempre con swiftshader, misura arretrato grafico e
|
||||
fotogrammi di ogni scena e primo piano; si rifà quando cambia un disegno (`*-render.js`, `render.js`, effetti). Una prova nuova in `tests/*.browser.mjs` va aggiunta a `SUITES` (il test `verify.test.mjs` lo pretende).
|
||||
- Verifica visiva nel browser con Playwright prima di dichiarare finito qualcosa di grafico. Chromium disegna sulla scheda
|
||||
video del PC se c'è, altrimenti con swiftshader (`tests/chromium.mjs`, dal 2026-11-01: giro intero ~4 min invece di ~16).
|
||||
- Pubblicare (tag/bump/push) solo quando Andrea lo chiede.
|
||||
- Persone vere nel gioco solo con consenso; niente nomi, personaggi o musiche di giochi esistenti.
|
||||
- Prompt delle immagini in `prompts/` e fogli grezzi in `assets/raw/`: esclusi da git.
|
||||
- Sfondi nuovi: li genera **Codex** con il suo strumento immagini integrato, gratis e senza chiave API
|
||||
(`codex exec`, ricetta in `docs/GENERAZIONE_SFONDI.md`, «Generare con Codex»). Si lancia da qui, senza chiedere la chiave ad Andrea.
|
||||
- **Pubblicare (dal 2026-11-01)**: origin è https://git.manzolo.it/manzolo/leggenda-del-regolo, pubblico: prima `make check-public`, poi `git push origin main --tags`, solo se Andrea lo chiede.
|
||||
`make deploy` costruisce l'immagine dal tag della versione, la spinge su `git.manzolo.it/manzolo/leggenda-regolo:vX.Y.Z` (e `:latest`); sul VPS il compose fissa quel tag e fa `docker compose pull && up -d`.
|
||||
Per tornare indietro: sul VPS (`Workspaces/docker/leggenda-regolo/docker-compose.yml`) si rimette il tag precedente e si rifà pull e up.
|
||||
Hook pre-push (`make hooks`, una volta per clone) lancia check-public; le Gitea Actions (`.gitea/workflows/test.yml`: test unitari a ogni push; sui tag, o a mano, anche le venti prove nel browser, una per job, poi la release) girano sul runner del PC, che si crea o riavvia con `make runner`.
|
||||
|
||||
@@ -13,6 +13,7 @@ COPY assets/voices /usr/share/nginx/html/assets/voices
|
||||
COPY assets/credits /usr/share/nginx/html/assets/credits
|
||||
COPY assets/effects /usr/share/nginx/html/assets/effects
|
||||
COPY assets/closeups /usr/share/nginx/html/assets/closeups
|
||||
COPY assets/muro /usr/share/nginx/html/assets/muro
|
||||
COPY assets/favicon /usr/share/nginx/html/assets/favicon
|
||||
COPY assets/video /usr/share/nginx/html/assets/video
|
||||
|
||||
|
||||
@@ -23,8 +23,8 @@ DST ?= assets/scenes/$(notdir $(SRC))
|
||||
CROP ?=
|
||||
COLORS ?= 64
|
||||
|
||||
.PHONY: help serve open test browser verify check-public bump voci voci-elenco sfondi sfondi-genera sfondi-confronto background character \
|
||||
build up down restart logs ps shell image-size deploy deploy-vps deploy-logs clean distclean
|
||||
.PHONY: help serve open test browser verify verify-browser verify-plan check-public hooks bump voci voci-elenco sfondi sfondi-genera sfondi-confronto background character \
|
||||
build up down restart logs ps shell image-size deploy deploy-logs runner clean distclean
|
||||
|
||||
## ------------------------------------------------------------ sviluppo
|
||||
|
||||
@@ -47,14 +47,26 @@ test: ## Test della logica, della storia, della soluzione completa e del generat
|
||||
$(NODE) --test tests/*.test.mjs
|
||||
$(PYTHON) -m unittest discover -s tests -p "test_*.py" -q
|
||||
|
||||
browser: ## Partita completa nel browser con Playwright
|
||||
browser: ## Partita completa nel browser con Playwright (tre parti in processi paralleli, ~4,5 min)
|
||||
$(NODE) tests/browser.mjs
|
||||
|
||||
verify: test browser check-public ## Tutti i controlli
|
||||
verify: test check-public verify-browser ## Tutti i controlli: test unitari, file pubblicabili, prove nel browser cambiate (ALL=1: tutte)
|
||||
|
||||
# Le prove nel browser a sezioni: si rifanno solo quelle i cui ingressi sono cambiati dall'ultimo verde (.verify-ok.json,
|
||||
# fuori da git); make verify-browser ALL=1 le rifà tutte, make verify-plan dice solo cosa rifarebbe; JOBS=2 in parallelo (con 4 vanno in timeout).
|
||||
verify-browser: ## Le prove nel browser da rifare (ALL=1 tutte; PROVE="briscola flipper" solo quelle)
|
||||
$(NODE) scripts/verify.mjs $(if $(ALL),--all,) $(PROVE)
|
||||
|
||||
verify-plan: ## Dice quali prove nel browser rifarebbe make verify, e perché
|
||||
$(NODE) scripts/verify.mjs --plan
|
||||
|
||||
check-public: ## Prima di pubblicare: niente prompt, fogli grezzi, segreti o nomi della rete di casa (tutta la storia)
|
||||
bash scripts/check-public.sh
|
||||
|
||||
hooks: ## Attiva gli hook del repo (pre-push: check-public prima di ogni push)
|
||||
git config core.hooksPath scripts/git-hooks
|
||||
@echo "hook attivi da scripts/git-hooks: $$(ls scripts/git-hooks | tr '\n' ' ')"
|
||||
|
||||
bump: ## Nuova versione (PARTE=patch|minor|major): verifica, commit e tag v<versione>; poi make deploy
|
||||
scripts/bump.sh $(or $(PARTE),patch)
|
||||
|
||||
@@ -121,47 +133,53 @@ image-size: ## Dimensione dell'immagine
|
||||
|
||||
## ------------------------------------------------------------ deploy su un server proprio
|
||||
|
||||
# Host e indirizzo stanno in deploy.local.mk, fuori da git, per esempio:
|
||||
# Host e cartella stanno in deploy.local.mk, fuori da git, per esempio:
|
||||
# DEPLOY_HOST = root@mio-server
|
||||
# DEPLOY_URL = https://gioco.esempio
|
||||
# VPS_HOST = mio-vps (facoltativo: una seconda copia, con make deploy-vps)
|
||||
# VPS_DIR = docker/leggenda-regolo
|
||||
# DEPLOY_DIR = docker/leggenda-regolo (la cartella del compose sul server)
|
||||
# DEPLOY_IMAGE = registry.esempio/utente/leggenda-regolo
|
||||
-include deploy.local.mk
|
||||
DEPLOY_DIR ?= /root/leggenda-regolo
|
||||
DEPLOY_IMAGE ?= git.manzolo.it/manzolo/leggenda-regolo
|
||||
DEPLOY_TMP := $(shell mktemp -d -u /tmp/regolo-deploy.XXXXXX)
|
||||
# La versione dell'ultimo commit (non della cartella di lavoro): il tag git, dell'immagine e del compose.
|
||||
DEPLOY_VER := v$(shell git show HEAD:src/version.js 2>/dev/null | sed -n "s/.*VERSION = '\([^']*\)'.*/\1/p")
|
||||
|
||||
# Si pubblica l'ultimo commit (git archive HEAD), mai la cartella di lavoro: un'altra sessione può avere modifiche a
|
||||
# metà. Test su quella copia, immagine costruita e provata qui, poi spedita già pronta (docker save | docker load):
|
||||
# sul server non si compila niente.
|
||||
# Si pubblica il tag della versione dichiarata dall'ultimo commit (git archive vX.Y.Z, quello di make bump), mai la
|
||||
# cartella di lavoro: un'altra sessione può avere modifiche a metà, e i commit dopo il tag aspettano la versione dopo.
|
||||
# Test su quella copia, immagine costruita e provata qui, spinta sul registry di Gitea come :vX.Y.Z e :latest; il
|
||||
# VPS la scarica con il tag scritto nel suo compose (preso da HEAD, docker-compose.deploy.yml).
|
||||
SMOKE_PORT ?= 18737
|
||||
deploy: ## Pubblica l'ultimo commit: test, immagine costruita e provata qui, spedita al server e riavviata
|
||||
deploy: ## Pubblica la versione dell'ultimo commit: test, immagine provata qui, push sul registry, pull e riavvio sul server
|
||||
@test -n "$(DEPLOY_HOST)" || { echo "manca DEPLOY_HOST: scrivilo in deploy.local.mk"; exit 2; }
|
||||
mkdir -p $(DEPLOY_TMP) && git archive HEAD | tar -x -C $(DEPLOY_TMP)
|
||||
@git rev-parse -q --verify 'refs/tags/$(DEPLOY_VER)' >/dev/null || { echo "manca il tag $(DEPLOY_VER): prima make bump"; exit 2; }
|
||||
mkdir -p $(DEPLOY_TMP) && git archive $(DEPLOY_VER) | tar -x -C $(DEPLOY_TMP)
|
||||
cd $(DEPLOY_TMP) && $(NODE) --test tests/*.test.mjs
|
||||
docker build -q -t $(IMAGE):latest -t $(IMAGE):$$(git rev-parse --short HEAD) $(DEPLOY_TMP)
|
||||
docker build -q -t $(DEPLOY_IMAGE):$(DEPLOY_VER) -t $(DEPLOY_IMAGE):latest $(DEPLOY_TMP)
|
||||
@docker rm -f $(IMAGE)-prova >/dev/null 2>&1 || true
|
||||
docker run -d --rm --name $(IMAGE)-prova -p 127.0.0.1:$(SMOKE_PORT):80 $(IMAGE):latest >/dev/null
|
||||
docker run -d --rm --name $(IMAGE)-prova -p 127.0.0.1:$(SMOKE_PORT):80 $(DEPLOY_IMAGE):$(DEPLOY_VER) >/dev/null
|
||||
@ok=1; sleep 1; for u in / /src/main.js /assets/voices/index.json /assets/audio/cartello.mp3; do \
|
||||
c=$$(curl -s -o /dev/null -w '%{http_code}' http://127.0.0.1:$(SMOKE_PORT)$$u); echo " prova $$u → $$c"; [ "$$c" = 200 ] || ok=0; done; \
|
||||
docker rm -f $(IMAGE)-prova >/dev/null; [ $$ok = 1 ] || { echo "l'immagine non risponde come deve: non la spedisco"; exit 1; }
|
||||
ssh $(DEPLOY_HOST) 'mkdir -p $(DEPLOY_DIR)'
|
||||
scp -q $(DEPLOY_TMP)/docker-compose.homeserver.yml $(DEPLOY_HOST):$(DEPLOY_DIR)/docker-compose.yml
|
||||
docker save $(IMAGE):latest | gzip | ssh $(DEPLOY_HOST) 'gunzip | docker load -q && cd $(DEPLOY_DIR) && docker compose up -d && docker image prune -f >/dev/null'
|
||||
docker push -q $(DEPLOY_IMAGE):$(DEPLOY_VER)
|
||||
docker push -q $(DEPLOY_IMAGE):latest
|
||||
git show HEAD:docker-compose.deploy.yml | sed 's|$(DEPLOY_IMAGE):VERSIONE|$(DEPLOY_IMAGE):$(DEPLOY_VER)|' | \
|
||||
ssh $(DEPLOY_HOST) 'mkdir -p $(DEPLOY_DIR) && cat > $(DEPLOY_DIR)/docker-compose.yml'
|
||||
ssh $(DEPLOY_HOST) 'cd $(DEPLOY_DIR) && docker compose pull -q && docker compose up -d && \
|
||||
docker image ls $(DEPLOY_IMAGE) --format "{{.Repository}}:{{.Tag}}" | grep -v -x -e $(DEPLOY_IMAGE):$(DEPLOY_VER) | xargs -r docker image rm >/dev/null; \
|
||||
docker image prune -f >/dev/null'
|
||||
rm -rf $(DEPLOY_TMP)
|
||||
@# Sul server il prune toglie l'immagine vecchia; qui restano solo latest e quella appena pubblicata.
|
||||
@docker image ls $(IMAGE) --format '{{.Tag}}' | grep -v -x -e latest -e $$(git rev-parse --short HEAD) | \
|
||||
xargs -r -I{} docker image rm -f $(IMAGE):{} >/dev/null
|
||||
@echo "→ $(DEPLOY_URL) ($$(git log -1 --format='%h %s'))"
|
||||
@# Qui restano solo latest e la versione appena pubblicata.
|
||||
@docker image ls $(DEPLOY_IMAGE) --format '{{.Tag}}' | grep -v -x -e latest -e $(DEPLOY_VER) | \
|
||||
xargs -r -I{} docker image rm -f $(DEPLOY_IMAGE):{} >/dev/null
|
||||
@# L'indirizzo pubblico deve servire la versione appena spedita.
|
||||
@v=$$(git show $(DEPLOY_VER):src/version.js | grep -o "VERSION = '[^']*'"); \
|
||||
for i in 1 2 3 4 5; do curl -s $(DEPLOY_URL)/src/version.js | grep -qF "$$v" && break; sleep 2; done; \
|
||||
curl -s $(DEPLOY_URL)/src/version.js | grep -qF "$$v" || { echo "$(DEPLOY_URL) non serve $$v"; exit 1; }
|
||||
@echo "→ $(DEPLOY_URL) ($(DEPLOY_IMAGE):$(DEPLOY_VER), $$(git log -1 --format='%h %s' $(DEPLOY_VER)))"
|
||||
|
||||
deploy-vps: ## Spedisce al VPS (VPS_HOST, VPS_DIR in deploy.local.mk) l'immagine dell'ultimo commit già provata da make deploy
|
||||
@test -n "$(VPS_HOST)" -a -n "$(VPS_DIR)" || { echo "mancano VPS_HOST e VPS_DIR: scrivili in deploy.local.mk"; exit 2; }
|
||||
@docker image inspect $(IMAGE):$$(git rev-parse --short HEAD) >/dev/null 2>&1 || \
|
||||
{ echo "manca l'immagine dell'ultimo commit ($$(git rev-parse --short HEAD)): prima make deploy"; exit 1; }
|
||||
ssh $(VPS_HOST) 'mkdir -p $(VPS_DIR)'
|
||||
git show HEAD:docker-compose.homeserver.yml | ssh $(VPS_HOST) 'cat > $(VPS_DIR)/docker-compose.yml'
|
||||
docker save $(IMAGE):$$(git rev-parse --short HEAD) $(IMAGE):latest | gzip | \
|
||||
ssh $(VPS_HOST) 'gunzip | docker load -q && cd $(VPS_DIR) && docker compose up -d && docker image prune -f >/dev/null'
|
||||
@ssh $(VPS_HOST) "docker exec $(IMAGE) grep -o \"VERSION = '[^']*'\" /usr/share/nginx/html/src/version.js" | sed 's/^/→ $(VPS_HOST): /'
|
||||
runner: ## Crea (se manca) e avvia sul PC il runner delle Gitea Actions (tools/gitea-runner, scripts/runner.sh)
|
||||
bash scripts/runner.sh
|
||||
|
||||
deploy-logs: ## Log del container sul server di deploy
|
||||
@test -n "$(DEPLOY_HOST)" || { echo "manca DEPLOY_HOST: scrivilo in deploy.local.mk"; exit 2; }
|
||||
|
||||
@@ -23,7 +23,9 @@ Si gioca online su **https://50037.manzolo.it** (50037 è il CAP di San Piero),
|
||||
|
||||
## Giocare in locale
|
||||
|
||||
Niente da installare e niente da compilare: HTML, CSS e moduli JavaScript ES.
|
||||
Il gioco si scarica da **https://git.manzolo.it/manzolo/leggenda-del-regolo**: nella pagina dei
|
||||
[tag](https://git.manzolo.it/manzolo/leggenda-del-regolo/tags) c'è lo zip di ogni versione (l'ultima è quella online).
|
||||
Niente da installare e niente da compilare: HTML, CSS e moduli JavaScript ES. Dentro la cartella scompattata:
|
||||
|
||||
```zsh
|
||||
python3 -m http.server 8000 # poi http://localhost:8000
|
||||
@@ -40,16 +42,16 @@ Oppure `make up` (Docker, su http://localhost:8080). Non aprire `index.html` con
|
||||
- `assets/`: sfondi, sprite, musiche, voci, carattere, video.
|
||||
- `tools/`: gli strumenti (sprite dai fogli, voci con XTTS, musiche sintetizzate, favicon, taratura dei minigiochi).
|
||||
- `tests/`: `npm test` (unità: regole, storia coerente, voci, salvataggi) e `npm run browser` (Playwright: percorre
|
||||
tutta la soluzione dell'avventura, su desktop e telefono); `npm run browser:briscola`, `:tressette`, `:scopa`,
|
||||
`:biliardo`, `:effects` per le parti singole.
|
||||
tutta la soluzione dell'avventura, su desktop e telefono, in tre processi paralleli; `--parte=` per una sola);
|
||||
`npm run browser:briscola`, `:tressette`, `:scopa`, `:biliardo`, `:effects` per le parti singole.
|
||||
- `video/`: i copioni dei video «Come si gioca» e della demo, girati in una macchina virtuale.
|
||||
- `docs/`: `PROGETTO.md` (l'idea, i personaggi, la mappa) e `STATO.md` (dove siamo, cosa manca).
|
||||
|
||||
```zsh
|
||||
make verify # sintassi, test, prova nel browser: quello che gira prima di ogni versione
|
||||
make verify # test, file pubblicabili e le prove nel browser cambiate dall'ultimo verde (ALL=1: tutte)
|
||||
make voci # le voci delle battute nuove (XTTS-v2 su GPU)
|
||||
make bump # nuova versione: verifica, commit e tag
|
||||
make deploy # pubblica l'ultimo commit (immagine Docker spedita al server)
|
||||
make deploy # pubblica la versione: immagine sul registry di Gitea, il server la scarica
|
||||
```
|
||||
|
||||
## Chi ha fatto cosa
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
{
|
||||
"image": "alpino_vino.png",
|
||||
"height": 120,
|
||||
"frames": {
|
||||
"stand": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 69,
|
||||
"h": 120,
|
||||
"ax": 28.2,
|
||||
"ay": 120
|
||||
},
|
||||
"blink": {
|
||||
"x": 71,
|
||||
"y": 0,
|
||||
"w": 69,
|
||||
"h": 120,
|
||||
"ax": 28.0,
|
||||
"ay": 120
|
||||
},
|
||||
"talk": {
|
||||
"x": 142,
|
||||
"y": 0,
|
||||
"w": 72,
|
||||
"h": 120,
|
||||
"ax": 29.4,
|
||||
"ay": 120
|
||||
},
|
||||
"explain": {
|
||||
"x": 216,
|
||||
"y": 0,
|
||||
"w": 71,
|
||||
"h": 116,
|
||||
"ax": 29.3,
|
||||
"ay": 116
|
||||
},
|
||||
"pour": {
|
||||
"x": 289,
|
||||
"y": 0,
|
||||
"w": 72,
|
||||
"h": 122,
|
||||
"ax": 30.5,
|
||||
"ay": 122
|
||||
},
|
||||
"pour2": {
|
||||
"x": 363,
|
||||
"y": 0,
|
||||
"w": 73,
|
||||
"h": 122,
|
||||
"ax": 30.3,
|
||||
"ay": 122
|
||||
},
|
||||
"give": {
|
||||
"x": 438,
|
||||
"y": 0,
|
||||
"w": 66,
|
||||
"h": 118,
|
||||
"ax": 24.5,
|
||||
"ay": 118
|
||||
},
|
||||
"cheers": {
|
||||
"x": 506,
|
||||
"y": 0,
|
||||
"w": 72,
|
||||
"h": 120,
|
||||
"ax": 33.4,
|
||||
"ay": 120
|
||||
}
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 125 KiB |
@@ -0,0 +1,70 @@
|
||||
{
|
||||
"image": "andrea-birra.png",
|
||||
"height": 120,
|
||||
"frames": {
|
||||
"walk_1": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 68,
|
||||
"h": 114,
|
||||
"ax": 40.2,
|
||||
"ay": 114
|
||||
},
|
||||
"walk_2": {
|
||||
"x": 70,
|
||||
"y": 0,
|
||||
"w": 41,
|
||||
"h": 114,
|
||||
"ax": 20.7,
|
||||
"ay": 114
|
||||
},
|
||||
"walk_3": {
|
||||
"x": 113,
|
||||
"y": 0,
|
||||
"w": 67,
|
||||
"h": 114,
|
||||
"ax": 38.4,
|
||||
"ay": 114
|
||||
},
|
||||
"walk_4": {
|
||||
"x": 182,
|
||||
"y": 0,
|
||||
"w": 46,
|
||||
"h": 114,
|
||||
"ax": 25.3,
|
||||
"ay": 114
|
||||
},
|
||||
"cheer_1": {
|
||||
"x": 230,
|
||||
"y": 0,
|
||||
"w": 51,
|
||||
"h": 133,
|
||||
"ax": 21.1,
|
||||
"ay": 133
|
||||
},
|
||||
"cheer_2": {
|
||||
"x": 283,
|
||||
"y": 0,
|
||||
"w": 55,
|
||||
"h": 130,
|
||||
"ax": 24.5,
|
||||
"ay": 130
|
||||
},
|
||||
"cheer_3": {
|
||||
"x": 340,
|
||||
"y": 0,
|
||||
"w": 62,
|
||||
"h": 130,
|
||||
"ax": 23.8,
|
||||
"ay": 130
|
||||
},
|
||||
"talk": {
|
||||
"x": 404,
|
||||
"y": 0,
|
||||
"w": 58,
|
||||
"h": 120,
|
||||
"ax": 21.7,
|
||||
"ay": 120
|
||||
}
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 93 KiB |
@@ -0,0 +1,70 @@
|
||||
{
|
||||
"image": "cuochi.png",
|
||||
"height": 120,
|
||||
"frames": {
|
||||
"stand": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 95,
|
||||
"h": 120,
|
||||
"ax": 41.9,
|
||||
"ay": 120
|
||||
},
|
||||
"blink": {
|
||||
"x": 97,
|
||||
"y": 0,
|
||||
"w": 95,
|
||||
"h": 120,
|
||||
"ax": 42.6,
|
||||
"ay": 120
|
||||
},
|
||||
"talk": {
|
||||
"x": 194,
|
||||
"y": 0,
|
||||
"w": 96,
|
||||
"h": 120,
|
||||
"ax": 44.4,
|
||||
"ay": 120
|
||||
},
|
||||
"explain": {
|
||||
"x": 292,
|
||||
"y": 0,
|
||||
"w": 95,
|
||||
"h": 120,
|
||||
"ax": 44.5,
|
||||
"ay": 120
|
||||
},
|
||||
"work": {
|
||||
"x": 389,
|
||||
"y": 0,
|
||||
"w": 101,
|
||||
"h": 120,
|
||||
"ax": 46.7,
|
||||
"ay": 120
|
||||
},
|
||||
"work2": {
|
||||
"x": 492,
|
||||
"y": 0,
|
||||
"w": 101,
|
||||
"h": 119,
|
||||
"ax": 45.9,
|
||||
"ay": 119
|
||||
},
|
||||
"give": {
|
||||
"x": 595,
|
||||
"y": 0,
|
||||
"w": 104,
|
||||
"h": 121,
|
||||
"ax": 43.1,
|
||||
"ay": 121
|
||||
},
|
||||
"laugh": {
|
||||
"x": 701,
|
||||
"y": 0,
|
||||
"w": 92,
|
||||
"h": 117,
|
||||
"ax": 43.7,
|
||||
"ay": 117
|
||||
}
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 191 KiB |
@@ -0,0 +1,70 @@
|
||||
{
|
||||
"image": "fanfara.png",
|
||||
"height": 120,
|
||||
"frames": {
|
||||
"stand": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 107,
|
||||
"h": 120,
|
||||
"ax": 47.1,
|
||||
"ay": 120
|
||||
},
|
||||
"blink": {
|
||||
"x": 109,
|
||||
"y": 0,
|
||||
"w": 106,
|
||||
"h": 120,
|
||||
"ax": 47.1,
|
||||
"ay": 120
|
||||
},
|
||||
"talk": {
|
||||
"x": 217,
|
||||
"y": 0,
|
||||
"w": 110,
|
||||
"h": 120,
|
||||
"ax": 50.3,
|
||||
"ay": 120
|
||||
},
|
||||
"laugh": {
|
||||
"x": 329,
|
||||
"y": 0,
|
||||
"w": 107,
|
||||
"h": 120,
|
||||
"ax": 47.0,
|
||||
"ay": 120
|
||||
},
|
||||
"play": {
|
||||
"x": 438,
|
||||
"y": 0,
|
||||
"w": 112,
|
||||
"h": 113,
|
||||
"ax": 50.3,
|
||||
"ay": 113
|
||||
},
|
||||
"play2": {
|
||||
"x": 552,
|
||||
"y": 0,
|
||||
"w": 114,
|
||||
"h": 118,
|
||||
"ax": 51.8,
|
||||
"ay": 118
|
||||
},
|
||||
"play3": {
|
||||
"x": 668,
|
||||
"y": 0,
|
||||
"w": 111,
|
||||
"h": 115,
|
||||
"ax": 51.6,
|
||||
"ay": 115
|
||||
},
|
||||
"bow": {
|
||||
"x": 781,
|
||||
"y": 0,
|
||||
"w": 110,
|
||||
"h": 104,
|
||||
"ax": 51.2,
|
||||
"ay": 104
|
||||
}
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 222 KiB |
@@ -0,0 +1,70 @@
|
||||
{
|
||||
"image": "gente.png",
|
||||
"height": 115,
|
||||
"frames": {
|
||||
"stand": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 126,
|
||||
"h": 115,
|
||||
"ax": 62.9,
|
||||
"ay": 115
|
||||
},
|
||||
"blink": {
|
||||
"x": 128,
|
||||
"y": 0,
|
||||
"w": 125,
|
||||
"h": 115,
|
||||
"ax": 62.8,
|
||||
"ay": 115
|
||||
},
|
||||
"talk": {
|
||||
"x": 255,
|
||||
"y": 0,
|
||||
"w": 126,
|
||||
"h": 115,
|
||||
"ax": 62.9,
|
||||
"ay": 115
|
||||
},
|
||||
"talk2": {
|
||||
"x": 383,
|
||||
"y": 0,
|
||||
"w": 126,
|
||||
"h": 115,
|
||||
"ax": 63.9,
|
||||
"ay": 115
|
||||
},
|
||||
"eat": {
|
||||
"x": 511,
|
||||
"y": 0,
|
||||
"w": 128,
|
||||
"h": 117,
|
||||
"ax": 62.9,
|
||||
"ay": 117
|
||||
},
|
||||
"eat2": {
|
||||
"x": 641,
|
||||
"y": 0,
|
||||
"w": 128,
|
||||
"h": 117,
|
||||
"ax": 63.0,
|
||||
"ay": 117
|
||||
},
|
||||
"laugh": {
|
||||
"x": 771,
|
||||
"y": 0,
|
||||
"w": 127,
|
||||
"h": 117,
|
||||
"ax": 62.0,
|
||||
"ay": 117
|
||||
},
|
||||
"toast": {
|
||||
"x": 900,
|
||||
"y": 0,
|
||||
"w": 127,
|
||||
"h": 116,
|
||||
"ax": 62.5,
|
||||
"ay": 116
|
||||
}
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 271 KiB |
@@ -0,0 +1,70 @@
|
||||
{
|
||||
"image": "liscio.png",
|
||||
"height": 115,
|
||||
"frames": {
|
||||
"stand": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 108,
|
||||
"h": 115,
|
||||
"ax": 54.5,
|
||||
"ay": 115
|
||||
},
|
||||
"blink": {
|
||||
"x": 110,
|
||||
"y": 0,
|
||||
"w": 108,
|
||||
"h": 115,
|
||||
"ax": 54.3,
|
||||
"ay": 115
|
||||
},
|
||||
"talk": {
|
||||
"x": 220,
|
||||
"y": 0,
|
||||
"w": 111,
|
||||
"h": 115,
|
||||
"ax": 57.2,
|
||||
"ay": 115
|
||||
},
|
||||
"laugh": {
|
||||
"x": 333,
|
||||
"y": 0,
|
||||
"w": 110,
|
||||
"h": 115,
|
||||
"ax": 55.6,
|
||||
"ay": 115
|
||||
},
|
||||
"dance1": {
|
||||
"x": 445,
|
||||
"y": 0,
|
||||
"w": 117,
|
||||
"h": 112,
|
||||
"ax": 57.2,
|
||||
"ay": 112
|
||||
},
|
||||
"dance2": {
|
||||
"x": 564,
|
||||
"y": 0,
|
||||
"w": 115,
|
||||
"h": 111,
|
||||
"ax": 57.0,
|
||||
"ay": 111
|
||||
},
|
||||
"dance3": {
|
||||
"x": 681,
|
||||
"y": 0,
|
||||
"w": 115,
|
||||
"h": 112,
|
||||
"ax": 56.5,
|
||||
"ay": 112
|
||||
},
|
||||
"dance4": {
|
||||
"x": 798,
|
||||
"y": 0,
|
||||
"w": 113,
|
||||
"h": 113,
|
||||
"ax": 54.4,
|
||||
"ay": 113
|
||||
}
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 230 KiB |
@@ -0,0 +1,70 @@
|
||||
{
|
||||
"image": "volontari.png",
|
||||
"height": 120,
|
||||
"frames": {
|
||||
"stand": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 102,
|
||||
"h": 120,
|
||||
"ax": 48.3,
|
||||
"ay": 120
|
||||
},
|
||||
"blink": {
|
||||
"x": 104,
|
||||
"y": 0,
|
||||
"w": 102,
|
||||
"h": 120,
|
||||
"ax": 48.3,
|
||||
"ay": 120
|
||||
},
|
||||
"talk": {
|
||||
"x": 208,
|
||||
"y": 0,
|
||||
"w": 101,
|
||||
"h": 121,
|
||||
"ax": 47.4,
|
||||
"ay": 121
|
||||
},
|
||||
"explain": {
|
||||
"x": 311,
|
||||
"y": 0,
|
||||
"w": 100,
|
||||
"h": 120,
|
||||
"ax": 47.4,
|
||||
"ay": 120
|
||||
},
|
||||
"work": {
|
||||
"x": 413,
|
||||
"y": 0,
|
||||
"w": 107,
|
||||
"h": 112,
|
||||
"ax": 49.0,
|
||||
"ay": 112
|
||||
},
|
||||
"work2": {
|
||||
"x": 522,
|
||||
"y": 0,
|
||||
"w": 104,
|
||||
"h": 111,
|
||||
"ax": 47.4,
|
||||
"ay": 111
|
||||
},
|
||||
"give": {
|
||||
"x": 628,
|
||||
"y": 0,
|
||||
"w": 100,
|
||||
"h": 121,
|
||||
"ax": 47.8,
|
||||
"ay": 121
|
||||
},
|
||||
"laugh": {
|
||||
"x": 730,
|
||||
"y": 0,
|
||||
"w": 100,
|
||||
"h": 119,
|
||||
"ax": 48.2,
|
||||
"ay": 119
|
||||
}
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 195 KiB |
|
After Width: | Height: | Size: 188 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 270 KiB |
|
After Width: | Height: | Size: 108 KiB |
|
After Width: | Height: | Size: 208 KiB |
|
After Width: | Height: | Size: 239 KiB |
|
After Width: | Height: | Size: 226 KiB |
|
After Width: | Height: | Size: 130 KiB |
@@ -0,0 +1,57 @@
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta http-equiv="Content-Language" content="it">
|
||||
<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
|
||||
<meta name="ProgId" content="FrontPage.Editor.Document">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
|
||||
<title>Responsabilità degli Iscritti</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<div align="center">
|
||||
<center>
|
||||
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="600">
|
||||
<tr>
|
||||
<td width="100%">
|
||||
<p align="center" style="margin-top: 0; margin-bottom: 0"><b>
|
||||
<font size="6" face="Arial">Responsabilità degli Iscritti</font></b></p>
|
||||
<p align="center" style="margin-top: 0; margin-bottom: 0"> </p>
|
||||
<p align="justify" style="margin-top: 0; margin-bottom: 0">
|
||||
<font face="Arial">Si fa presente che lo <b>Staff di WWW.SANPIERO50037.IT</b>,
|
||||
non effettuerà controllo preventivo sul contenuto dei commenti e degli
|
||||
interventi sul "MURO DEL SANPIERINO", ma, <b><u>vista la possibilità di
|
||||
risalire agli autori degli stessi</u></b>, si sentirà autorizzato alla
|
||||
comunicazione di tali dati ai <b>Soggetti Interessati e all'Autorità
|
||||
Giudiziaria</b> in caso di violazione di qualsiasi articolo del C.C. e del
|
||||
C.P., si invita pertanto a prendere coscienza delle<b> responsabilità
|
||||
civili e penali </b>che l'utente si assume in prima persona per il
|
||||
contenuto di ciò che scrive.</font></p>
|
||||
<p align="justify" style="margin-top: 0; margin-bottom: 0"> </p>
|
||||
<p align="justify" style="margin-top: 0; margin-bottom: 0"><b>
|
||||
<font face="Arial">E' pertanto necessario che tutti gli utenti garantiscano il contenuto:</font></b></p>
|
||||
<p align="justify" style="margin-top: 0; margin-bottom: 0">
|
||||
<font face="Arial"><b>1 -</b> Non sia volgare, diffamatorio e
|
||||
pregiudizievole;</font></p>
|
||||
<p align="justify" style="margin-top: 0; margin-bottom: 0">
|
||||
<font face="Arial"><b>2 -</b> Non violi in alcun modo i diritti di terzi;</font></p>
|
||||
<p align="justify" style="margin-top: 0; margin-bottom: 0">
|
||||
<font face="Arial"><b>3 -</b> Non violi i diritti stabiliti dal
|
||||
<a href="Privacy.htm">D.Lgs. 30.06.2003 n°196</a> e ogni altra normativa
|
||||
in</font></p>
|
||||
<p align="justify" style="margin-top: 0; margin-bottom: 0">
|
||||
<font face="Arial"> materia di Privacy;</font></p>
|
||||
<p align="justify" style="margin-top: 0; margin-bottom: 0">
|
||||
<font face="Arial"><b>4 -</b> Non violi la vigente normativa in materia di
|
||||
Pubblica Sicurezza e Buon Costume e/o altre norme imperative;</font></p>
|
||||
<p align="justify" style="margin-top: 0; margin-bottom: 0">
|
||||
<font face="Arial"><b>5 -</b> Non venga inserito per fini di "Spamming".</font></td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
</div>
|
||||
|
||||
<p align="center"><a href="index.html" style="font: bold 14px Tahoma; color: #800000">« Torna al Muro</a></p></body>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,97 @@
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
|
||||
<meta name="ProgId" content="FrontPage.Editor.Document">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
|
||||
<title>Guida al Muro del Sanpierino</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<div align="center">
|
||||
<center>
|
||||
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="1024">
|
||||
<tr>
|
||||
<td width="100%">
|
||||
<p class="MsoNormal" align="center" style="text-align: center; margin-top: 0; margin-bottom: 0">
|
||||
<b><span style="font-size: 22.0pt">Guida al Muro del Sanpierino</span></b></p>
|
||||
<p class="MsoNormal" style="text-align: justify; margin-top: 0; margin-bottom: 0">
|
||||
<b><u><span style="text-decoration: none; font-size: 18.0pt"> </span></u></b></p>
|
||||
<p class="MsoNormal" style="text-align: justify; margin-top: 0; margin-bottom: 0">
|
||||
<b><u><span style="font-size: 18.0pt">1 – Iscrizione</span></u></b></p>
|
||||
<p class="MsoNormal" style="text-align: justify; margin-top: 0; margin-bottom: 0">
|
||||
<span style="font-size: 14.0pt">Se vuoi scrivere un messaggio sul Muro del
|
||||
Sanpierino adesso dovrai prima essere iscritto. Iscriversi è gratuito e
|
||||
semplicissimo, sarà sufficiente andare sul Muro e cliccare sull’icona
|
||||
“Scrivi”, da lì verrai inviato nella pagina di “Login” dove troverai il
|
||||
tasto “Iscriviti”, cliccandolo ti troverai direttamente nella pagina
|
||||
d’Iscrizione. Appena riceveremo la tua richiesta attiveremo il tuo account
|
||||
e riceverai una mail, all’indirizzo inserito, a conferma dell’attivazione.
|
||||
A quel punto potrai scrivere sempre e in qualunque momento sul Muro.</span></p>
|
||||
<p class="MsoNormal" style="text-align: justify; margin-top: 0; margin-bottom: 0">
|
||||
<span style="font-size: 14.0pt"> </span></p>
|
||||
<p class="MsoNormal" style="text-align: justify; margin-top: 0; margin-bottom: 0">
|
||||
<b><u><span style="font-size: 18.0pt">2 – Scrivere</span></u></b></p>
|
||||
<p class="MsoNormal" style="text-align: justify; margin-top: 0; margin-bottom: 0">
|
||||
<span style="font-size: 14.0pt">Per scrivere sul Muro sarà sufficiente
|
||||
cliccare sul tasto “Scrivi” e inserire il proprio Nickname e Password (se
|
||||
non si è iscritti segui le istruzioni al paragrafo 1- Iscrizione). Vi
|
||||
troverete nella pagina di scrittura vera e propria dove potrete scegliere
|
||||
se mantenere il vostro Nickname d’iscrizione o variarlo, se rendere
|
||||
visibile il vostro indirizzo e-mail oppure no e ancora scegliere fra le
|
||||
oltre 470 smiles disponibili e ancora variare l’aspetto grafico del vostro
|
||||
messaggio consultando la pagiana di aiuto per la personalizzazione… tante
|
||||
alternative che sicuramente saranno di vostro gradimento!</span></p>
|
||||
<p class="MsoNormal" style="text-align: justify; margin-top: 0; margin-bottom: 0">
|
||||
<span style="font-size: 14.0pt"> </span></p>
|
||||
<p class="MsoNormal" style="text-align: justify; margin-top: 0; margin-bottom: 0">
|
||||
<b><u><span style="font-size: 18.0pt">3 – Privacy & Responsabilità</span></u></b></p>
|
||||
<p class="MsoNormal" style="text-align: justify; margin-top: 0; margin-bottom: 0">
|
||||
<span style="font-size: 14.0pt">L’aspetto più importante di questo Nuovo
|
||||
Muro del Sanpierino è proprio quello relativo alle Resposabilità che ogni
|
||||
utente si assume nei post inseriti. Ogni Utente, pur facendo salva la
|
||||
propria Privacy, non dovrà in alcun modo ledere gli altrui diritti e
|
||||
quindi:</span></p>
|
||||
<p style="text-align: justify; margin: 0 0cm">
|
||||
<span style="font-size: 14.0pt"> <b>1 -</b> Non dovrà essere
|
||||
volgare, diffamatorio e pregiudizievole;</span></p>
|
||||
<p style="text-align: justify; text-indent: 35.4pt; margin: 0 0cm"><b>
|
||||
<span style="font-size: 14.0pt">2 -</span></b><span style="font-size: 14.0pt">
|
||||
Non dovrà violare in alcun modo i diritti di terzi;</span></p>
|
||||
<p style="text-align: justify; text-indent: 35.4pt; margin: 0 0cm"><b>
|
||||
<span style="font-size: 14.0pt">3 -</span></b><span style="font-size: 14.0pt">
|
||||
Non dovrà violare i diritti stabiliti dal
|
||||
<a href="http://www.sanpiero50037.it/spswall/Privacy.htm" style="color: blue; text-decoration: underline; text-underline: single">
|
||||
D.Lgs. 30.06.2003 n°196</a> e ogni altra </span></p>
|
||||
<p style="text-align: justify; text-indent: 35.4pt; margin: 0 0cm">
|
||||
<span style="font-size: 14.0pt"> normativa in materia di Privacy;</span></p>
|
||||
<p style="text-align: justify; margin-left: 35.4pt; margin-right: 0cm; margin-top: 0; margin-bottom: 0">
|
||||
<b><span style="font-size: 14.0pt">4 -</span></b><span style="font-size: 14.0pt">
|
||||
Non dovrà violare la vigente normativa in materia di Pubblica Sicurezza e
|
||||
</span></p>
|
||||
<p style="text-align: justify; margin-left: 35.4pt; margin-right: 0cm; margin-top: 0; margin-bottom: 0">
|
||||
<b><span style="font-size: 14.0pt"> </span></b>
|
||||
<span style="font-size: 14.0pt">Buon Costume e/o altre norme imperative;</span></p>
|
||||
<p style="text-align: justify; text-indent: 35.4pt; margin: 0 0cm"><b>
|
||||
<span style="font-size: 14.0pt">5 -</span></b><span style="font-size: 14.0pt">
|
||||
Non dovrà inserire post per fini di "Spamming".</span></p>
|
||||
<p style="text-align: justify; margin: 0 0cm">
|
||||
<span style="font-size: 14.0pt">In caso di violazione di una delle regole
|
||||
descritte qui sopra il messaggio verrà cancellato quanto prima e, in caso
|
||||
di richiesta da parte del Soggetto interessato o dell’Autorità
|
||||
Giudiziaria, verranno comunicati i suoi dati oltre, naturalmente, al
|
||||
blocco dell’Utente che si renderà responsabile di tale messaggio. Per
|
||||
tutti gli altri messaggi la Privacy dei nostri Utenti sarà tutelata come
|
||||
descritto dal
|
||||
<a href="http://www.sanpiero50037.it/spswall/Privacy.htm" style="color: blue; text-decoration: underline; text-underline: single">
|
||||
D.Lgs. 30.06.2003 n°196</a>, tranne nei caso di violazione dei nostri Data
|
||||
Base da attacchi esterni.</span></td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
</div>
|
||||
|
||||
<p align="center"><a href="index.html" style="font: bold 14px Tahoma; color: #800000">« Torna al Muro</a></p></body>
|
||||
|
||||
</html>
|
||||
|
After Width: | Height: | Size: 177 B |
|
After Width: | Height: | Size: 173 B |
|
After Width: | Height: | Size: 202 B |
|
After Width: | Height: | Size: 284 B |
|
After Width: | Height: | Size: 278 B |
|
After Width: | Height: | Size: 176 B |
|
After Width: | Height: | Size: 181 B |
|
After Width: | Height: | Size: 182 B |
|
After Width: | Height: | Size: 484 B |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 247 B |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 904 B |
|
After Width: | Height: | Size: 219 B |
|
After Width: | Height: | Size: 2.7 KiB |
|
After Width: | Height: | Size: 208 B |
|
After Width: | Height: | Size: 284 B |
|
After Width: | Height: | Size: 610 B |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 269 B |
|
After Width: | Height: | Size: 152 B |
|
After Width: | Height: | Size: 6.0 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 128 B |
|
After Width: | Height: | Size: 129 B |
|
After Width: | Height: | Size: 109 B |
|
After Width: | Height: | Size: 138 B |
|
After Width: | Height: | Size: 7.8 KiB |
|
After Width: | Height: | Size: 167 B |
|
After Width: | Height: | Size: 146 B |
|
After Width: | Height: | Size: 758 B |
|
After Width: | Height: | Size: 605 B |
|
After Width: | Height: | Size: 198 B |
|
After Width: | Height: | Size: 43 B |
|
After Width: | Height: | Size: 156 B |
|
After Width: | Height: | Size: 363 B |
|
After Width: | Height: | Size: 573 B |
|
After Width: | Height: | Size: 202 B |
|
After Width: | Height: | Size: 234 B |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 3.2 KiB |
|
After Width: | Height: | Size: 303 B |
|
After Width: | Height: | Size: 340 B |
|
After Width: | Height: | Size: 8.1 KiB |
@@ -0,0 +1,40 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="it" xml:lang="it">
|
||||
<head>
|
||||
<!-- Il Muro del Sanpierino (2007-2009, Manzolo e Baron De Duke) dentro il gioco, sul telefonino del Barone: lo stesso
|
||||
markup di thewall.php, coi messaggi veri (tools/muro.py: niente email né IP) e quelli del gioco
|
||||
(story.closeups.muro_sanpierino.messages, ognuno con la sua condizione). «Scrivi» è spento (Andrea, 31 ottobre). -->
|
||||
<link rel="stylesheet" type="text/css" href="./muro.css" />
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<title>Il Muro del Sanpierino</title>
|
||||
</head>
|
||||
<body>
|
||||
<table width="1024" border="0" align="center">
|
||||
<td width="250"> </td>
|
||||
<td width="524" align="center">
|
||||
<a href="#" id="logo"><img class="imgnoborder" src="./img/logo_trasparente_obliquo.gif" alt="Return to Website" /></a>
|
||||
</td>
|
||||
<td width="250"> </td>
|
||||
</table>
|
||||
<div><br /></div>
|
||||
<div class="divcenter">
|
||||
<div class="divcenter">
|
||||
<span class="title">Il Muro del Sanpierino</span><br />
|
||||
<a href="./Responsabilita.htm"><span class="pblue">Responsabilita'</span></a>
|
||||
<span class="pblack"> - </span>
|
||||
<a href="./guida_al_muro_del_sanpierino.htm"><span class="pred">Guida al Muro<br /></span></a>
|
||||
<span class="pnormal" id="count"></span>
|
||||
<br />
|
||||
<div class="bar"></div>
|
||||
<div id="wall"></div>
|
||||
<div class="bar"></div>
|
||||
<div>
|
||||
<p class="powered">Powered by</p>
|
||||
<p><img src="./img/logomanzolo.jpg" alt=""/></p>
|
||||
<p class="poweredby">Manzolo</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script type="module" src="./muro.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,162 @@
|
||||
{
|
||||
"smiles": {
|
||||
"[13_grin]": "13_grin.gif",
|
||||
"[14_bigmouth]": "14_bigmouth.gif",
|
||||
"[15_weeping]": "15_weeping.gif",
|
||||
"[16_angry]": "16_angry.gif",
|
||||
"[17_wink]": "17_wink.gif",
|
||||
"[1_grin]": "1_grin.gif",
|
||||
"[20_grumpy]": "20_grumpy.gif",
|
||||
"[21_irked]": "21_irked.gif",
|
||||
"[22_yikes]": "22_yikes.gif",
|
||||
"[24_shocked]": "24_shocked.gif",
|
||||
"[8-)]": "25_coolguy.gif",
|
||||
"[28_spin]": "28_spin.gif",
|
||||
"[ambulance]": "ambulance.gif",
|
||||
"[banghead]": "banghead.gif",
|
||||
"[beret]": "beret.gif",
|
||||
"[bouncer]": "bouncer.gif",
|
||||
"[bowtie]": "bowtie.gif",
|
||||
"[detective]": "detective.gif",
|
||||
"[duh2]": "duh2.gif",
|
||||
"[fryingpan]": "fryingpan.gif",
|
||||
"[highfive]": "highfive.gif",
|
||||
"[paperbag]": "paperbag.gif",
|
||||
"[shocking]": "shocking.gif",
|
||||
"[simpsonhomer]": "simpsonhomer.gif",
|
||||
"[splat]": "splat.gif",
|
||||
"[surfing]": "surfing.gif",
|
||||
"[thumbsup2]": "thumbsup2.gif",
|
||||
"[tombstone]": "tombstone.gif",
|
||||
"[trophy]": "trophy.gif",
|
||||
"[user]": "user.gif",
|
||||
"[vader2]": "vader2.gif",
|
||||
"[wave2]": "wave2.gif",
|
||||
"[weightlifter]": "weightlifter.gif",
|
||||
"[wonderwoman]": "wonderwoman.gif",
|
||||
"[yipes]": "yipes.gif",
|
||||
"[pampa]": "pampa.gif"
|
||||
},
|
||||
"messages": [
|
||||
{
|
||||
"nick": "WWW.SANPIERO50037.IT X IL SOCIALE",
|
||||
"date": "2007-11-14 22:48:20",
|
||||
"text": "<br>"
|
||||
},
|
||||
{
|
||||
"nick": "Porc@ontha$..!",
|
||||
"date": "2007-11-14 22:24:36",
|
||||
"text": "Eccomi anche io a sverginare il nuovo muro...[1_grin]"
|
||||
},
|
||||
{
|
||||
"nick": "Baron De Duke",
|
||||
"date": "2007-11-14 21:14:31",
|
||||
"text": "<font color=#0000FF>X BANTU\r\nL'INDIRIZZO E-MAIL INSERITO NON E' VALIDO, PER CORTESIA CONTATTAMI VIA E-MAIL. GRAZIE</font>"
|
||||
},
|
||||
{
|
||||
"nick": "Megy",
|
||||
"date": "2007-11-14 19:04:25",
|
||||
"text": "Ieri ed oggi,con la Ferrari è andato in pista un ragazzo di 38 anni,tedesco...dice prometta bene!!![15_weeping]"
|
||||
},
|
||||
{
|
||||
"nick": "?",
|
||||
"date": "2007-11-14 18:49:21",
|
||||
"text": "Il problema del Reconquista è che non la buttano dentro nemmeno con le mani...tanto l'importante è divertirsi e che nessuno si faccia del male.[ambulance]"
|
||||
},
|
||||
{
|
||||
"nick": "tetsuyaharada",
|
||||
"date": "2007-11-14 17:37:19",
|
||||
"text": "glazie pel il nuovo mulo"
|
||||
},
|
||||
{
|
||||
"nick": "manutd",
|
||||
"date": "2007-11-14 16:50:29",
|
||||
"text": "bravi ragazzi ottimo lavoro ci si deve sempre un po rompere le [bouncer][bouncer]però poi le cose vengon fuori [28_spin][28_spin][28_spin]"
|
||||
},
|
||||
{
|
||||
"nick": "fraus",
|
||||
"date": "2007-11-14 14:59:18",
|
||||
"text": "Mariolino Sindaco![1_grin]"
|
||||
},
|
||||
{
|
||||
"nick": "TeoNick",
|
||||
"date": "2007-11-14 14:37:34",
|
||||
"text": "Ma che tipo di Mariolino sei?"
|
||||
},
|
||||
{
|
||||
"nick": "Mariolino for President",
|
||||
"date": "2007-11-14 12:04:12",
|
||||
"text": "[14_bigmouth] effettivamente ci sarebbe da infamare, ma dato che vu siete voi che correte in campo lasciamo fare, se vi piace così!\r\nVolevo dire soltanto che quello che manca, non è il gioco, il fiato la panchina ecc ecc ecc, ma l'attaccamento alla maglia, mi parete un pò carenti di grinta, nessuno letica con nessuno, il piedino si tira sempre indietro (e non dite che il giorno dopo c'è da andà a lavorare che la un regge)ma soprattutto NESSUNO DICE NULLA ALL'ARBITRO, volete mettere le leticate di Manolo con conseguenti espulsioni? superiori.\r\nIn conclusione, va bene così, basta che vu vi diverta, ma dubito che il risultato non vi scossi! SEMPRE E COMUNQUE FORZA RECONQUISTA"
|
||||
},
|
||||
{
|
||||
"nick": "Reconquista",
|
||||
"date": "2007-11-14 10:34:48",
|
||||
"text": "Ovvia...su con le infamate!!!ce le meritiamo...[16_angry][16_angry][16_angry]"
|
||||
},
|
||||
{
|
||||
"nick": "pizzu",
|
||||
"date": "2007-11-14 10:21:32",
|
||||
"text": "Finalmente il nuovo muro da imbrattare!! Complimenti per l'ottimo lavoro a Barone e Manzolo! [8-)]"
|
||||
},
|
||||
{
|
||||
"nick": "Mariolino for President",
|
||||
"date": "2007-11-14 08:51:48",
|
||||
"text": "[22_yikes] MA CHE NEVA IN MONTAGNA?[17_wink]\r\nPENSIERO DEL MATTINO:\r\n\"Meglio vivere con due pensioni oggi, che con una soltanto domani\""
|
||||
},
|
||||
{
|
||||
"nick": "TeoNick",
|
||||
"date": "2007-11-14 00:41:57",
|
||||
"text": "Buonasera Muraioli! Ho un questito: è sempre censurato faenza? su quello vecchio UN si poteva [22_yikes][22_yikes][22_yikes][22_yikes][22_yikes]\r\n[yipes][wave2]\r\n\r\nP.s. Mariolino chi? secondo me l'è lui l'untore!![bouncer][bouncer]"
|
||||
},
|
||||
{
|
||||
"nick": "Baron De Duke",
|
||||
"date": "2007-11-14 00:32:47",
|
||||
"text": "NONOSTANTE QUALCHE INGEGNOSO IMPAZIENTE... [simpsonhomer] ECCO A VOI IL \"NUOVO MURO DEL SANPIERINO\"!!![banghead]\r\n\r\nAVANTI CON GLI SPRAY!!!! [beret][splat][thumbsup2][wave2]"
|
||||
},
|
||||
{
|
||||
"nick": "Manzolo (Welcome to the real world)",
|
||||
"date": "2007-11-14 00:32:12",
|
||||
"text": "Ci siamo!!!!\r\nCari paesani e non, il nuovo muro è online!!!\r\nOgni vostro suggerimento sarà prezioso per migliorare questo nostro spazio che da oggi perde la sua \"staticità\" [tombstone] ...\r\nFacciamolo crescere con idee e critiche...\r\nYour potential. Our passion!\r\n\r\nANDIAMO A PRENDERCI LA [trophy]\r\n\r\nIl presidente [surfing]\r\n\r\nP.s. sconfitta e sculo (per) ora si possono scrivere [24_shocked]"
|
||||
},
|
||||
{
|
||||
"nick": "Cecchino",
|
||||
"date": "2007-11-14 00:31:58",
|
||||
"text": "Grandi ragazzi!! Manzolo ora ricordati che c'è da fissare la vacanza rider!! Pampa quest'anno ti svernicio!!"
|
||||
},
|
||||
{
|
||||
"nick": "?",
|
||||
"date": "2007-11-13 23:19:45",
|
||||
"text": "Reconquista...datevi foco!!![22_yikes]"
|
||||
},
|
||||
{
|
||||
"nick": "coccinella",
|
||||
"date": "2007-11-13 22:21:52",
|
||||
"text": "buona idea questo nuovo muro, complimenti a gabry e al manzolo che si sono impegnati a rendere un po di vita a questo muro. ciao ciao"
|
||||
},
|
||||
{
|
||||
"nick": "Mariolino for President",
|
||||
"date": "2007-11-13 17:04:04",
|
||||
"text": "ma funziono?[22_yikes]"
|
||||
},
|
||||
{
|
||||
"nick": "m.d.b.",
|
||||
"date": "2007-11-13 10:24:51",
|
||||
"text": "ovvia....m'è riuscito entrare....grande barone e grande manzolo, vediamo se ora si ripiglia ivvia con questo nuovo metodo!!!!\r\ndomenica s'è beccato, mi sa che sono io che porto s c u l o!"
|
||||
},
|
||||
{
|
||||
"nick": "Mariolino for President",
|
||||
"date": "2007-11-13 09:23:34",
|
||||
"text": "in attesa di nuove [16_angry]auguro allo staff buon lavoro ed un felice anno nuovo[22_yikes] fose sono un pò prematuro[24_shocked][15_weeping][13_grin][14_bigmouth][17_wink][21_irked][20_grumpy][pampa][pampa][wonderwoman][wonderwoman][weightlifter][shocking][fryingpan][duh2][detective]"
|
||||
},
|
||||
{
|
||||
"nick": "Kiara",
|
||||
"date": "2007-11-10 21:51:53",
|
||||
"text": "CIAO MURO!COMPLIMENTI agli autori, barone e manzolo.... è stato uno sporco lavoro ma qualcuno lo doveva pur fare....[8-)]"
|
||||
},
|
||||
{
|
||||
"nick": "Manzolo e Baron De Duke [surfing]",
|
||||
"date": "2007-11-10 19:22:23",
|
||||
"text": "IL DADO E' TRATTO!!! [highfive]<br>Finalmente possiamo presentarvi il rinnovato \"MURO DEL SANPIERINO\"! [8-)]<br>Da oggi i messaggi andranno nuovamente On-Line istantaneamente... l'unica cosa che vi chiediamo è una piccola iscrizione. [bowtie]<br>Facciamo presente che l'anonimato rimarrà garantito, unica eccezione sarà fatta quando i messaggi avranno contenuti in disaccordo con le condizioni espresse in fase di registrazione. Potrete consultare i casi nella pagina \"Responsabilità\" che troverete qui sopra. [paperbag]<br>Speriamo che il nostro lavoro sia di vostro gradimento e rimaniamo in attesa dei numerosi nuovi messaggi!!! [user]<br>The Wall is come back... Nothing is Impossible!!! [vader2]"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
body {text-align:center;margin:0 auto;padding:0px;background-color:#F7E1C0;font: 20px Arial; color: #800000; font-weight: bold; font-style: normal; text-decoration: none;}
|
||||
.pagerbutton { text-align: center; padding:2px; border:1px solid #191E66;font:12px verdana,arial,helvetica;background-color: #DBE0F5;cursor:pointer; color: #191E66; }
|
||||
.pagerbutton_over { background-color: #F2F4FA; color: #A1A1A1; }
|
||||
.pagerbutton_disabled { cursor: default; padding:2px; color: #aaaaaa;}
|
||||
|
||||
.response { font: 14px Tahoma; color: #800000; font-weight: bold; font-style: italic; text-decoration: none; }
|
||||
.title {font: 30px Tahoma; color: #800000; font-weight: bold; font-style: normal; text-decoration: none;}
|
||||
.text { font: 20px Arial; color: #800000; font-weight: bold; font-style: normal; text-decoration: none; }
|
||||
.question { font: 14px Tahoma; color: #002288; font-weight: bold; font-style: normal; text-decoration: none; }
|
||||
.name { font: 24px Tahoma; color: #800000; font-weight: bold; font-style: normal; text-decoration: none; }
|
||||
a { font: 12px Tahoma; color: #800000; font-weight: normal; font-style: normal; text-decoration: none; }
|
||||
a:visited { font: 12px Tahoma; color: #800000; font-weight: normal; font-style: normal; text-decoration: none; }
|
||||
a:hover { font: 12px Tahoma; color: #800000; font-weight: normal; font-style: normal; text-decoration: none; }
|
||||
|
||||
.divcenter {margin-right:auto;margin-left:auto;width:87%}
|
||||
.pblue {font: 18px Tahoma; color: #0000A0;font-weight: bold;}
|
||||
.pred {font: 18px Tahoma; color: #FF0000;font-weight: bold;}
|
||||
.pblack {font: 18px Tahoma; color: #000000;font-weight: bold;}
|
||||
.pnormal {font: 12px Tahoma; color: #800000;font-weight: bold;}
|
||||
|
||||
.powered {font: 12px Tahoma; color: #800000;font-weight: bold;}
|
||||
.poweredby {font: 18px Tahoma; color: #800000;font-weight: bold;}
|
||||
|
||||
.spacer {border-top: 3px dotted #800000; margin-top: 10px; margin-bottom: 0px}
|
||||
|
||||
.td30 {width:30%}
|
||||
.td70 {width:70%;text-align:right}
|
||||
.tdcenter {text-align:center}
|
||||
|
||||
.imgnoborder {border:0px;}
|
||||
.imgbar {border:0px;vertical-align:middle;}
|
||||
@@ -0,0 +1,56 @@
|
||||
// Il Muro del Sanpierino nel telefonino del Barone: rifà quello che facevano thewall.php, drawbar.php,
|
||||
// getsmile.php e messagebody.php. I messaggi del gioco (story.closeups.muro_sanpierino.messages) stanno in cima,
|
||||
// quelli che valgono adesso (ognuno col suo `when`); sotto i messaggi veri del 2007. «Aggiorna» ricarica la pagina:
|
||||
// se nel frattempo la storia è andata avanti, compaiono i messaggi nuovi.
|
||||
import { check } from '../../src/engine/game.js';
|
||||
|
||||
const PER_PAGE = 50;
|
||||
const game = (() => { try { return parent.game; } catch { return null; } })();
|
||||
const def = game?.story.closeups.muro_sanpierino;
|
||||
const { smiles, messages: real } = await (await fetch('./messaggi.json')).json();
|
||||
const ours = (def?.messages ?? []).filter(m => check(m.when, game.state)).sort((a, b) => b.date.localeCompare(a.date));
|
||||
const all = [...ours, ...real];
|
||||
const from = Math.max(0, Number(new URLSearchParams(location.search).get('pag')) || 0);
|
||||
|
||||
// Gli smile come li metteva getsmile.php, e gli a capo.
|
||||
const smile = text => Object.entries(smiles).reduce((t, [code, link]) => t.split(code).join(` <img src="./img/${link}" alt="" />`), text);
|
||||
const body = m => smile(m.text).replace(/\r\n|\r|\n/g, '<br />');
|
||||
const when = d => { const [day, hour] = d.split(' '), [y, mo, dd] = day.split('-'); return `${dd}/${mo}/${y}<br />${hour}`; };
|
||||
|
||||
document.getElementById('count').textContent = `(Messaggi lasciati sul muro: ${all.length})`;
|
||||
document.getElementById('wall').innerHTML = all.slice(from, from + PER_PAGE).map(m => `
|
||||
<p class="spacer"><img src="./img/spacer.gif" alt="" /></p>
|
||||
<table border="0" cellpadding="0" cellspacing="0" width="100%" style="padding:5px;">
|
||||
<tr><td class="td30"><div class="question"></div></td><td class="td70"><div class="text">${when(m.date)}</div></td></tr>
|
||||
<tr><td align="left"><div class="question">Chi Sei? </div><br /></td><td align="left"><div class="name"> ${smile(m.nick)}</div><br /></td></tr>
|
||||
<tr><td align="left" valign="top"><div class="question">Messaggio </div><br /></td><td align="left"><div class="response"><p>${body(m)}</p><br /><br /></div></td></tr>
|
||||
</table>`).join('');
|
||||
|
||||
// La barra coi pulsanti (drawbar.php): Inizio e Precedente spenti sulla prima pagina, Successiva e Ultima
|
||||
// sull'ultima; «Scrivi» sempre spento.
|
||||
const page = n => `./index.html${n > 0 ? '?pag=' + n : ''}`, last = Math.max(0, Math.floor((all.length - 1) / PER_PAGE) * PER_PAGE);
|
||||
const buttons = [
|
||||
['Inizio', 'pagefirst.gif', from > 0 && (() => location.href = page(0)), true],
|
||||
['Precedente', 'pageback.gif', from > 0 && (() => location.href = page(from - PER_PAGE)), true],
|
||||
['SCRIVI', 'postmessage.gif', null, true],
|
||||
['Aggiorna', 'refresh.gif', () => location.reload(), true],
|
||||
['Home', 'home.gif', () => game?.closeupHome(), true],
|
||||
['Successiva', 'pageahead.gif', from < last && (() => location.href = page(from + PER_PAGE)), false],
|
||||
['Ultima', 'pagelast.gif', from < last && (() => location.href = page(last)), false],
|
||||
];
|
||||
for (const bar of document.querySelectorAll('.bar')) {
|
||||
const table = document.createElement('table'), tr = table.insertRow();
|
||||
Object.assign(table, { width: '100%', border: 0, cellPadding: 0, cellSpacing: 5 });
|
||||
for (const [label, icon, go, before] of buttons) {
|
||||
const div = tr.insertCell().appendChild(document.createElement('div')), img = `<img class="imgbar" src="./img/${icon}" alt="" />`;
|
||||
div.className = 'pagerbutton' + (go ? '' : ' pagerbutton_disabled');
|
||||
div.innerHTML = before ? `${img} ${label}` : `${label} ${img}`;
|
||||
if (go) {
|
||||
div.onmouseover = () => { div.className = 'pagerbutton pagerbutton_over'; };
|
||||
div.onmouseout = () => { div.className = 'pagerbutton'; };
|
||||
div.onclick = go;
|
||||
}
|
||||
}
|
||||
bar.replaceWith(table);
|
||||
}
|
||||
document.getElementById('logo').onclick = e => { e.preventDefault(); game?.closeupHome(); };
|
||||
|
After Width: | Height: | Size: 382 KiB |
|
After Width: | Height: | Size: 286 KiB |
|
After Width: | Height: | Size: 292 KiB |
|
After Width: | Height: | Size: 205 KiB |