añadidas más megafonías y cambios en js

This commit is contained in:
2026-02-18 07:19:40 +01:00
parent 834b4de03e
commit e62e48f78d
56 changed files with 235 additions and 182 deletions

153
package-lock.json generated
View File

@@ -9,7 +9,8 @@
"version": "0.0.0",
"dependencies": {
"@fontsource/roboto": "^5.2.9",
"@material/web": "^2.4.1"
"@material/web": "^2.4.1",
"leaflet": "^1.9.4"
},
"devDependencies": {
"vite": "^8.0.0-beta.13"
@@ -104,9 +105,9 @@
}
},
"node_modules/@oxc-project/runtime": {
"version": "0.112.0",
"resolved": "https://registry.npmjs.org/@oxc-project/runtime/-/runtime-0.112.0.tgz",
"integrity": "sha512-4vYtWXMnXM6EaweCxbJ6bISAhkNHeN33SihvuX3wrpqaSJA4ZEoW35i9mSvE74+GDf1yTeVE+aEHA+WBpjDk/g==",
"version": "0.113.0",
"resolved": "https://registry.npmjs.org/@oxc-project/runtime/-/runtime-0.113.0.tgz",
"integrity": "sha512-apRWH/gXeAsl/sQiblIZnLu7f8P/C9S2fJIicuHV9KOK9J7Hv1JPyTwB8WAcOrDBfjs+cbzjMOGe9UR2ue4ZQg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -114,9 +115,9 @@
}
},
"node_modules/@oxc-project/types": {
"version": "0.112.0",
"resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.112.0.tgz",
"integrity": "sha512-m6RebKHIRsax2iCwVpYW2ErQwa4ywHJrE4sCK3/8JK8ZZAWOKXaRJFl/uP51gaVyyXlaS4+chU1nSCdzYf6QqQ==",
"version": "0.113.0",
"resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.113.0.tgz",
"integrity": "sha512-Tp3XmgxwNQ9pEN9vxgJBAqdRamHibi76iowQ38O2I4PMpcvNRQNVsU2n1x1nv9yh0XoTrGFzf7cZSGxmixxrhA==",
"dev": true,
"license": "MIT",
"funding": {
@@ -124,9 +125,9 @@
}
},
"node_modules/@rolldown/binding-android-arm64": {
"version": "1.0.0-rc.3",
"resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.3.tgz",
"integrity": "sha512-0T1k9FinuBZ/t7rZ8jN6OpUKPnUjNdYHoj/cESWrQ3ZraAJ4OMm6z7QjSfCxqj8mOp9kTKc1zHK3kGz5vMu+nQ==",
"version": "1.0.0-rc.4",
"resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.4.tgz",
"integrity": "sha512-vRq9f4NzvbdZavhQbjkJBx7rRebDKYR9zHfO/Wg486+I7bSecdUapzCm5cyXoK+LHokTxgSq7A5baAXUZkIz0w==",
"cpu": [
"arm64"
],
@@ -141,9 +142,9 @@
}
},
"node_modules/@rolldown/binding-darwin-arm64": {
"version": "1.0.0-rc.3",
"resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.3.tgz",
"integrity": "sha512-JWWLzvcmc/3pe7qdJqPpuPk91SoE/N+f3PcWx/6ZwuyDVyungAEJPvKm/eEldiDdwTmaEzWfIR+HORxYWrCi1A==",
"version": "1.0.0-rc.4",
"resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.4.tgz",
"integrity": "sha512-kFgEvkWLqt3YCgKB5re9RlIrx9bRsvyVUnaTakEpOPuLGzLpLapYxE9BufJNvPg8GjT6mB1alN4yN1NjzoeM8Q==",
"cpu": [
"arm64"
],
@@ -158,9 +159,9 @@
}
},
"node_modules/@rolldown/binding-darwin-x64": {
"version": "1.0.0-rc.3",
"resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.3.tgz",
"integrity": "sha512-MTakBxfx3tde5WSmbHxuqlDsIW0EzQym+PJYGF4P6lG2NmKzi128OGynoFUqoD5ryCySEY85dug4v+LWGBElIw==",
"version": "1.0.0-rc.4",
"resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.4.tgz",
"integrity": "sha512-JXmaOJGsL/+rsmMfutcDjxWM2fTaVgCHGoXS7nE8Z3c9NAYjGqHvXrAhMUZvMpHS/k7Mg+X7n/MVKb7NYWKKww==",
"cpu": [
"x64"
],
@@ -175,9 +176,9 @@
}
},
"node_modules/@rolldown/binding-freebsd-x64": {
"version": "1.0.0-rc.3",
"resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.3.tgz",
"integrity": "sha512-jje3oopyOLs7IwfvXoS6Lxnmie5JJO7vW29fdGFu5YGY1EDbVDhD+P9vDihqS5X6fFiqL3ZQZCMBg6jyHkSVww==",
"version": "1.0.0-rc.4",
"resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.4.tgz",
"integrity": "sha512-ep3Catd6sPnHTM0P4hNEvIv5arnDvk01PfyJIJ+J3wVCG1eEaPo09tvFqdtcaTrkwQy0VWR24uz+cb4IsK53Qw==",
"cpu": [
"x64"
],
@@ -192,9 +193,9 @@
}
},
"node_modules/@rolldown/binding-linux-arm-gnueabihf": {
"version": "1.0.0-rc.3",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.3.tgz",
"integrity": "sha512-A0n8P3hdLAaqzSFrQoA42p23ZKBYQOw+8EH5r15Sa9X1kD9/JXe0YT2gph2QTWvdr0CVK2BOXiK6ENfy6DXOag==",
"version": "1.0.0-rc.4",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.4.tgz",
"integrity": "sha512-LwA5ayKIpnsgXJEwWc3h8wPiS33NMIHd9BhsV92T8VetVAbGe2qXlJwNVDGHN5cOQ22R9uYvbrQir2AB+ntT2w==",
"cpu": [
"arm"
],
@@ -209,9 +210,9 @@
}
},
"node_modules/@rolldown/binding-linux-arm64-gnu": {
"version": "1.0.0-rc.3",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.3.tgz",
"integrity": "sha512-kWXkoxxarYISBJ4bLNf5vFkEbb4JvccOwxWDxuK9yee8lg5XA7OpvlTptfRuwEvYcOZf+7VS69Uenpmpyo5Bjw==",
"version": "1.0.0-rc.4",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.4.tgz",
"integrity": "sha512-AC1WsGdlV1MtGay/OQ4J9T7GRadVnpYRzTcygV1hKnypbYN20Yh4t6O1Sa2qRBMqv1etulUknqXjc3CTIsBu6A==",
"cpu": [
"arm64"
],
@@ -226,9 +227,9 @@
}
},
"node_modules/@rolldown/binding-linux-arm64-musl": {
"version": "1.0.0-rc.3",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.3.tgz",
"integrity": "sha512-Z03/wrqau9Bicfgb3Dbs6SYTHliELk2PM2LpG2nFd+cGupTMF5kanLEcj2vuuJLLhptNyS61rtk7SOZ+lPsTUA==",
"version": "1.0.0-rc.4",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.4.tgz",
"integrity": "sha512-lU+6rgXXViO61B4EudxtVMXSOfiZONR29Sys5VGSetUY7X8mg9FCKIIjcPPj8xNDeYzKl+H8F/qSKOBVFJChCQ==",
"cpu": [
"arm64"
],
@@ -243,9 +244,9 @@
}
},
"node_modules/@rolldown/binding-linux-x64-gnu": {
"version": "1.0.0-rc.3",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.3.tgz",
"integrity": "sha512-iSXXZsQp08CSilff/DCTFZHSVEpEwdicV3W8idHyrByrcsRDVh9sGC3sev6d8BygSGj3vt8GvUKBPCoyMA4tgQ==",
"version": "1.0.0-rc.4",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.4.tgz",
"integrity": "sha512-DZaN1f0PGp/bSvKhtw50pPsnln4T13ycDq1FrDWRiHmWt1JeW+UtYg9touPFf8yt993p8tS2QjybpzKNTxYEwg==",
"cpu": [
"x64"
],
@@ -260,9 +261,9 @@
}
},
"node_modules/@rolldown/binding-linux-x64-musl": {
"version": "1.0.0-rc.3",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.3.tgz",
"integrity": "sha512-qaj+MFudtdCv9xZo9znFvkgoajLdc+vwf0Kz5N44g+LU5XMe+IsACgn3UG7uTRlCCvhMAGXm1XlpEA5bZBrOcw==",
"version": "1.0.0-rc.4",
"resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.4.tgz",
"integrity": "sha512-RnGxwZLN7fhMMAItnD6dZ7lvy+TI7ba+2V54UF4dhaWa/p8I/ys1E73KO6HmPmgz92ZkfD8TXS1IMV8+uhbR9g==",
"cpu": [
"x64"
],
@@ -277,9 +278,9 @@
}
},
"node_modules/@rolldown/binding-openharmony-arm64": {
"version": "1.0.0-rc.3",
"resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.3.tgz",
"integrity": "sha512-U662UnMETyjT65gFmG9ma+XziENrs7BBnENi/27swZPYagubfHRirXHG2oMl+pEax2WvO7Kb9gHZmMakpYqBHQ==",
"version": "1.0.0-rc.4",
"resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.4.tgz",
"integrity": "sha512-6lcI79+X8klGiGd8yHuTgQRjuuJYNggmEml+RsyN596P23l/zf9FVmJ7K0KVKkFAeYEdg0iMUKyIxiV5vebDNQ==",
"cpu": [
"arm64"
],
@@ -294,9 +295,9 @@
}
},
"node_modules/@rolldown/binding-wasm32-wasi": {
"version": "1.0.0-rc.3",
"resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.3.tgz",
"integrity": "sha512-gekrQ3Q2HiC1T5njGyuUJoGpK/l6B/TNXKed3fZXNf9YRTJn3L5MOZsFBn4bN2+UX+8+7hgdlTcEsexX988G4g==",
"version": "1.0.0-rc.4",
"resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.4.tgz",
"integrity": "sha512-wz7ohsKCAIWy91blZ/1FlpPdqrsm1xpcEOQVveWoL6+aSPKL4VUcoYmmzuLTssyZxRpEwzuIxL/GDsvpjaBtOw==",
"cpu": [
"wasm32"
],
@@ -311,9 +312,9 @@
}
},
"node_modules/@rolldown/binding-win32-arm64-msvc": {
"version": "1.0.0-rc.3",
"resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.3.tgz",
"integrity": "sha512-85y5JifyMgs8m5K2XzR/VDsapKbiFiohl7s5lEj7nmNGO0pkTXE7q6TQScei96BNAsoK7JC3pA7ukA8WRHVJpg==",
"version": "1.0.0-rc.4",
"resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.4.tgz",
"integrity": "sha512-cfiMrfuWCIgsFmcVG0IPuO6qTRHvF7NuG3wngX1RZzc6dU8FuBFb+J3MIR5WrdTNozlumfgL4cvz+R4ozBCvsQ==",
"cpu": [
"arm64"
],
@@ -328,9 +329,9 @@
}
},
"node_modules/@rolldown/binding-win32-x64-msvc": {
"version": "1.0.0-rc.3",
"resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.3.tgz",
"integrity": "sha512-a4VUQZH7LxGbUJ3qJ/TzQG8HxdHvf+jOnqf7B7oFx1TEBm+j2KNL2zr5SQ7wHkNAcaPevF6gf9tQnVBnC4mD+A==",
"version": "1.0.0-rc.4",
"resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.4.tgz",
"integrity": "sha512-p6UeR9y7ht82AH57qwGuFYn69S6CZ7LLKdCKy/8T3zS9VTrJei2/CGsTUV45Da4Z9Rbhc7G4gyWQ/Ioamqn09g==",
"cpu": [
"x64"
],
@@ -345,9 +346,9 @@
}
},
"node_modules/@rolldown/pluginutils": {
"version": "1.0.0-rc.3",
"resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.3.tgz",
"integrity": "sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==",
"version": "1.0.0-rc.4",
"resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.4.tgz",
"integrity": "sha512-1BrrmTu0TWfOP1riA8uakjFc9bpIUGzVKETsOtzY39pPga8zELGDl8eu1Dx7/gjM5CAz14UknsUMpBO8L+YntQ==",
"dev": true,
"license": "MIT"
},
@@ -411,6 +412,12 @@
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
}
},
"node_modules/leaflet": {
"version": "1.9.4",
"resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.9.4.tgz",
"integrity": "sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA==",
"license": "BSD-2-Clause"
},
"node_modules/lightningcss": {
"version": "1.31.1",
"resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.31.1.tgz",
@@ -773,14 +780,14 @@
}
},
"node_modules/rolldown": {
"version": "1.0.0-rc.3",
"resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-rc.3.tgz",
"integrity": "sha512-Po/YZECDOqVXjIXrtC5h++a5NLvKAQNrd9ggrIG3sbDfGO5BqTUsrI6l8zdniKRp3r5Tp/2JTrXqx4GIguFCMw==",
"version": "1.0.0-rc.4",
"resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-rc.4.tgz",
"integrity": "sha512-V2tPDUrY3WSevrvU2E41ijZlpF+5PbZu4giH+VpNraaadsJGHa4fR6IFwsocVwEXDoAdIv5qgPPxgrvKAOIPtA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@oxc-project/types": "=0.112.0",
"@rolldown/pluginutils": "1.0.0-rc.3"
"@oxc-project/types": "=0.113.0",
"@rolldown/pluginutils": "1.0.0-rc.4"
},
"bin": {
"rolldown": "bin/cli.mjs"
@@ -789,19 +796,19 @@
"node": "^20.19.0 || >=22.12.0"
},
"optionalDependencies": {
"@rolldown/binding-android-arm64": "1.0.0-rc.3",
"@rolldown/binding-darwin-arm64": "1.0.0-rc.3",
"@rolldown/binding-darwin-x64": "1.0.0-rc.3",
"@rolldown/binding-freebsd-x64": "1.0.0-rc.3",
"@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.3",
"@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.3",
"@rolldown/binding-linux-arm64-musl": "1.0.0-rc.3",
"@rolldown/binding-linux-x64-gnu": "1.0.0-rc.3",
"@rolldown/binding-linux-x64-musl": "1.0.0-rc.3",
"@rolldown/binding-openharmony-arm64": "1.0.0-rc.3",
"@rolldown/binding-wasm32-wasi": "1.0.0-rc.3",
"@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.3",
"@rolldown/binding-win32-x64-msvc": "1.0.0-rc.3"
"@rolldown/binding-android-arm64": "1.0.0-rc.4",
"@rolldown/binding-darwin-arm64": "1.0.0-rc.4",
"@rolldown/binding-darwin-x64": "1.0.0-rc.4",
"@rolldown/binding-freebsd-x64": "1.0.0-rc.4",
"@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.4",
"@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.4",
"@rolldown/binding-linux-arm64-musl": "1.0.0-rc.4",
"@rolldown/binding-linux-x64-gnu": "1.0.0-rc.4",
"@rolldown/binding-linux-x64-musl": "1.0.0-rc.4",
"@rolldown/binding-openharmony-arm64": "1.0.0-rc.4",
"@rolldown/binding-wasm32-wasi": "1.0.0-rc.4",
"@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.4",
"@rolldown/binding-win32-x64-msvc": "1.0.0-rc.4"
}
},
"node_modules/source-map-js": {
@@ -838,18 +845,18 @@
"license": "0BSD"
},
"node_modules/vite": {
"version": "8.0.0-beta.13",
"resolved": "https://registry.npmjs.org/vite/-/vite-8.0.0-beta.13.tgz",
"integrity": "sha512-7s/rfpYOAo7WUHh9irzaGjhhKb12hGv0BpDegAMV5A391wdyvM45WtX6VMV7hvEtZF2j/QtpDpR6ldXI3GgARQ==",
"version": "8.0.0-beta.14",
"resolved": "https://registry.npmjs.org/vite/-/vite-8.0.0-beta.14.tgz",
"integrity": "sha512-oLW66oi8tZcoxu6+1HFXb+5hLHco3OnEVu2Awmj5NqEo7vxaqybjBM0BXHcq+jAFhzkMGXJl8xcO5qDBczgKLg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@oxc-project/runtime": "0.112.0",
"@oxc-project/runtime": "0.113.0",
"fdir": "^6.5.0",
"lightningcss": "^1.31.1",
"picomatch": "^4.0.3",
"postcss": "^8.5.6",
"rolldown": "1.0.0-rc.3",
"rolldown": "1.0.0-rc.4",
"tinyglobby": "^0.2.15"
},
"bin": {
@@ -866,7 +873,7 @@
},
"peerDependencies": {
"@types/node": "^20.19.0 || >=22.12.0",
"@vitejs/devtools": "^0.0.0-alpha.24",
"@vitejs/devtools": "^0.0.0-alpha.31",
"esbuild": "^0.27.0",
"jiti": ">=1.21.0",
"less": "^4.0.0",

View File

@@ -16,6 +16,7 @@
},
"dependencies": {
"@fontsource/roboto": "^5.2.9",
"@material/web": "^2.4.1"
"@material/web": "^2.4.1",
"leaflet": "^1.9.4"
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
public/audio/bda_carmen.wav Normal file

Binary file not shown.

Binary file not shown.

BIN
public/audio/cardenas.wav Normal file

Binary file not shown.

Binary file not shown.

BIN
public/audio/don_bosco.wav Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
public/audio/linea_L2.wav Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
public/audio/linea_L3.wav Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
public/audio/linea_L4.wav Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
public/audio/linea_L8.wav Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
public/audio/orden_baja.wav Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
public/audio/y.wav Normal file

Binary file not shown.

View File

@@ -11,6 +11,38 @@
"L3": {
"nombre": "Línea 3",
"destinos": ["Zafra", "Orden Baja"]
},
"L3CE": {
"nombre": "Línea 3CE",
"destinos": ["Zafra", "Orden Baja"]
},
"L4": {
"nombre": "Línea 4",
"destinos": ["Zafra", "Orden Baja"]
},
"L4CE": {
"nombre": "Línea 4CE",
"destinos": ["Zafra", "Orden Baja"]
},
"L5": {
"nombre": "Línea 5",
"destinos": ["Zafra", "Hospital JRJ"]
},
"L6": {
"nombre": "Línea 6",
"destinos": ["Zafra", "Hospital JRJ"]
},
"L7": {
"nombre": "Línea 7",
"destinos": ["Zafra", "Hospital JRJ"]
},
"L7HP": {
"nombre": "Línea 7HP",
"destinos": ["Zafra", "Hospital JRJ"]
},
"L8": {
"nombre": "Línea 8",
"destinos": ["Zafra", "Orden Baja"]
}
}
}

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>

Before

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -1,9 +0,0 @@
export function setupCounter(element) {
let counter = 0
const setCounter = (count) => {
counter = count
element.innerHTML = `count is ${counter}`
}
element.addEventListener('click', () => setCounter(counter + 1))
setCounter(0)
}

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="32" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path fill="#F7DF1E" d="M0 0h256v256H0V0Z"></path><path d="m67.312 213.932l19.59-11.856c3.78 6.701 7.218 12.371 15.465 12.371c7.905 0 12.89-3.092 12.89-15.12v-81.798h24.057v82.138c0 24.917-14.606 36.259-35.916 36.259c-19.245 0-30.416-9.967-36.087-21.996m85.07-2.576l19.588-11.341c5.157 8.421 11.859 14.607 23.715 14.607c9.969 0 16.325-4.984 16.325-11.858c0-8.248-6.53-11.17-17.528-15.98l-6.013-2.58c-17.357-7.387-28.87-16.667-28.87-36.257c0-18.044 13.747-31.792 35.228-31.792c15.294 0 26.292 5.328 34.196 19.247l-18.732 12.03c-4.125-7.389-8.591-10.31-15.465-10.31c-7.046 0-11.514 4.468-11.514 10.31c0 7.217 4.468 10.14 14.778 14.608l6.014 2.577c20.45 8.765 31.963 17.7 31.963 37.804c0 21.654-17.012 33.51-39.867 33.51c-22.339 0-36.774-10.654-43.819-24.574"></path></svg>

Before

Width:  |  Height:  |  Size: 995 B

View File

@@ -1,148 +1,172 @@
import 'https://cdn.jsdelivr.net/npm/@material/web/all.js/+esm';
import L from 'leaflet';
let dbInt = {};
let dbExt = { lineas: {} }; // Base de datos exterior inicializada
let dbExt = { lineas: {} };
let audioActual = null;
let mapa = null;
const get = (id) => document.getElementById(id);
// --- 1. INICIO DEL SISTEMA ---
// --- 1. MOTOR DE AUDIO ---
function play(cola, volId = 'vol') {
if (audioActual) {
audioActual.pause();
audioActual.currentTime = 0;
}
if (!cola || cola.length === 0) return;
const item = cola.shift();
const sonido = new Audio(`${item.file}?cb=${Date.now()}`);
const slider = get(volId);
sonido.volume = slider ? slider.value : 0.8;
audioActual = sonido;
sonido.onended = () => {
if (item.gap && item.gap > 0) {
setTimeout(() => play(cola, volId), item.gap);
} else {
play(cola, volId);
}
};
sonido.play().catch(e => {
console.warn("Audio no encontrado:", item.file);
play(cola, volId);
});
}
// --- 2. INICIO Y MAPA ---
function inicializarMapa() {
if (get('map') && !mapa) {
mapa = L.map('map', { zoomControl: false }).setView([37.2614, -6.9447], 14);
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png').addTo(mapa);
L.control.zoom({ position: 'bottomright' }).addTo(mapa);
}
}
async function init() {
try {
const [resInt, resExt] = await Promise.all([
fetch('data/lineas.json'),
fetch('data/exterior.json')
]);
if (!resInt.ok || !resExt.ok) throw new Error("Error cargando archivos JSON");
dbInt = await resInt.json();
dbExt = await resExt.json();
const lineasHTML = Object.keys(dbInt).map(id =>
`<md-select-option value="${id}"><div slot="headline">${id}</div></md-select-option>`
).join('');
// Rellenar selector de línea INTERIOR (desde lineas.json)
const lineasIntHTML = Object.keys(dbInt).map(id =>
`<md-select-option value="${id}"><div slot="headline">${id}</div></md-select-option>`).join('');
if (get('int-linea')) get('int-linea').innerHTML = lineasIntHTML;
if (get('int-linea')) get('int-linea').innerHTML = lineasHTML;
if (get('ext-linea')) get('ext-linea').innerHTML = lineasHTML;
// Rellenar selector de línea EXTERIOR (desde exterior.json exclusivamente)
// Esto arregla que no se lean las líneas L3, L3CE, etc.
if (get('ext-linea')) {
const lineasExtHTML = Object.keys(dbExt.lineas).map(id =>
`<md-select-option value="${id}"><div slot="headline">${id}</div></md-select-option>`).join('');
get('ext-linea').innerHTML = lineasExtHTML;
}
// Generar números de coche de Huelva (315-334 y 400-409)
// Rellenar números de coche (Huelva)
const coches = [...Array(20).keys()].map(i => i + 315).concat([...Array(10).keys()].map(i => i + 400));
if (get('ext-coche')) {
get('ext-coche').innerHTML = coches.map(c =>
`<md-select-option value="${c}"><div slot="headline">${c}</div></md-select-option>`
).join('');
`<md-select-option value="${c}"><div slot="headline">${c}</div></md-select-option>`).join('');
}
} catch (err) {
console.error("Error cargando DB:", err);
inicializarMapa();
} catch (e) {
console.error("Error cargando archivos JSON:", e);
} finally {
const splash = get('loading-screen');
if (splash) {
splash.style.opacity = '0';
setTimeout(() => {
splash.style.display = 'none';
get('loading-screen').style.display = 'none';
get('app').style.display = 'flex';
}, 500);
}
if (mapa) mapa.invalidateSize();
}
}
// --- 2. MOTOR DE AUDIO ---
function play(cola, volId = 'vol') {
if (audioActual) { audioActual.pause(); audioActual.currentTime = 0; }
if (!cola || cola.length === 0) return;
const item = cola.shift();
audioActual = new Audio(`${item.file}?cb=${Date.now()}`);
// Usar el slider correspondiente (interior o exterior)
const slider = get(volId);
audioActual.volume = slider ? slider.value : 0.8;
audioActual.play().catch(e => console.warn("Audio no encontrado:", item.file));
audioActual.onended = () => setTimeout(() => play(cola, volId), item.gap || 400);
}
// --- 3. EVENTOS PANEL INTERIOR ---
// --- 3. LÓGICA DE INTERIOR ---
get('int-linea')?.addEventListener('change', (e) => {
const linea = dbInt[e.target.value];
const selParada = get('int-parada');
if (linea && selParada) {
selParada.innerHTML = linea.paradas.map(p =>
`<md-select-option value="${p.id}"><div slot="headline">${p.nombre}</div></md-select-option>`
).join('');
selParada.disabled = false;
selParada.value = "";
if (linea && get('int-parada')) {
get('int-parada').innerHTML = linea.paradas.map(p =>
`<md-select-option value="${p.id}"><div slot="headline">${p.nombre}</div></md-select-option>`).join('');
get('int-parada').disabled = false;
}
get('container-regulacion').style.display = 'none';
});
get('int-parada')?.addEventListener('change', (e) => {
const paradasReg = ['zafra', 'orden_baja', 'hospital_jrj'];
const esReg = paradasReg.includes(e.target.value);
get('container-regulacion').style.display = esReg ? 'flex' : 'none';
if (!esReg) get('chk-regulacion').checked = false;
});
get('btn-int')?.addEventListener('click', () => {
const lId = get('int-linea').value, pId = get('int-parada').value;
const lId = get('int-linea').value;
const pId = get('int-parada').value;
if (!lId || !pId) return;
const paradaData = dbInt[lId].paradas.find(p => p.id === pId);
const tipo = document.querySelector('md-radio[value="siguiente"]')?.checked ? "siguiente" : "actual";
const tipo = document.querySelector('md-radio[name="tipo"][checked]')?.value || "actual";
let cola = [
{ file: `audio/parada_${tipo}.wav`, gap: 400 },
{ file: `audio/${pId}.wav`, gap: 600 }
{ file: `audio/parada_${tipo}.wav`, gap: 150 },
{ file: `audio/${pId}.wav`, gap: 350 }
];
if (paradaData.enlaces?.length > 0) {
const enlaces = paradaData.enlaces.filter(en => en.trim() !== "");
if (enlaces.includes("todas")) {
cola.push({ file: `audio/correspondencia_todas_las_lineas.wav`, gap: 400 });
} else if (enlaces.length > 0) {
cola.push({ file: `audio/${enlaces.length === 1 ? 'correspondencia_linea' : 'correspondencia_lineas'}.wav`, gap: 300 });
enlaces.forEach(en => cola.push({ file: `audio/linea_${en}.wav`, gap: 300 }));
if (paradaData.enlaces && paradaData.enlaces.length > 0) {
if (paradaData.enlaces.includes("todas")) {
cola.push({ file: `audio/correspondencia_todas_las_lineas.wav`, gap: 0 });
} else {
const enlacesFiltrados = paradaData.enlaces.filter(en => en !== lId);
if (enlacesFiltrados.length > 0) {
const esVarios = enlacesFiltrados.length > 1;
cola.push({ file: `audio/correspondencia_linea${esVarios ? 's' : ''}.wav`, gap: 0 });
cola.push({ file: `audio/lineas_${pId}_${lId}.wav`, gap: 400 });
}
}
}
if (get('chk-regulacion')?.checked) cola.push({ file: `audio/parada_regulacion.wav`, gap: 400 });
if (get('chk-regulacion')?.checked) cola.push({ file: `audio/parada_regulacion.wav`, gap: 0 });
play(cola, 'vol');
});
// --- 4. LÓGICA EXTERIOR (RESTAURADA) ---
get('btn-abrir-exterior').onclick = () => get('dialog-exterior').show();
// --- 4. LÓGICA DE EXTERIOR ---
get('ext-linea')?.addEventListener('change', (e) => {
const lineaId = e.target.value;
const destinos = dbExt.lineas[lineaId]?.destinos || [];
const lineaId = e.target.value; // Ejemplo: "L3"
// Buscamos directamente en el objeto lineas del exterior.json
const datosLinea = dbExt.lineas[lineaId];
const selDest = get('ext-destino');
if (selDest) {
selDest.innerHTML = destinos.map(d => `<md-select-option value="${d}"><div slot="headline">${d}</div></md-select-option>`).join('');
if (selDest && datosLinea) {
selDest.innerHTML = datosLinea.destinos.map(d =>
`<md-select-option value="${d}"><div slot="headline">${d}</div></md-select-option>`).join('');
selDest.disabled = false;
} else {
if (selDest) {
selDest.innerHTML = "";
selDest.disabled = true;
}
}
});
get('btn-reproducir-ext')?.addEventListener('click', () => {
const linea = get('ext-linea').value;
const linea = get('ext-linea').value; // Ejemplo: "L1"
const destino = get('ext-destino').value;
const coche = get('ext-coche').value;
if (!linea || !destino || !coche) return;
if (!linea || !destino || !coche) {
alert("Por favor, selecciona línea, destino y coche");
return;
}
const destFile = destino.toLowerCase().replace(/ /g, "_");
// Quitamos la 'L' para el nombre del audio si tus audios son "linea_1.wav"
const lineaNum = linea.replace('L', '');
// Cola exterior: Línea X -> Autobús XXX -> Destino YYY
const colaExt = [
{ file: `audio/exterior/linea_${linea}.wav`, gap: 300 },
{ file: `audio/exterior/autobus_${coche}.wav`, gap: 500 },
{ file: `audio/exterior/destino_${destFile}.wav`, gap: 300 }
];
play(colaExt, 'vol-ext');
play([
{ file: `audio/exterior/linea_${lineaNum}.wav`, gap: 100 },
{ file: `audio/exterior/autobus_${coche}.wav`, gap: 100 },
{ file: `audio/exterior/destino_${destFile}.wav`, gap: 0 }
], 'vol-ext');
});
// --- 5. ESPECIALES ---
// --- 5. BOTONES ESPECIALES ---
get('btn-abrir-exterior').onclick = () => get('dialog-exterior').show();
get('btn-colision').onclick = () => play([{ file: `audio/colision.wav` }]);
get('btn-hora').onclick = () => play([{ file: `audio/hora_salida.wav` }]);
get('btn-saldo').onclick = () => play([{ file: `audio/atencion_saldo.wav` }]);