Subida inicial APM EMTUSA

This commit is contained in:
2025-08-01 05:14:48 +02:00
commit 15d516f71d
65 changed files with 19164 additions and 0 deletions

37
.gitignore vendored Normal file
View File

@@ -0,0 +1,37 @@
# Archivos del sistema
.DS_Store
Thumbs.db
# Archivos de IDE/editor
.vscode/
.idea/
*.swp
*.swo
# Dependencias si las hubiera
node_modules/
vendor/
# Archivos de configuración local
*.log
```
Ahora, los comandos para inicializar el repositorio y subirlo a GitHub:
````powershell
# Inicializar el repositorio git
git init
# Añadir todos los archivos
git add .
# Hacer el primer commit
git commit -m "Initial commit: Emtusa WebApp PWA"
# Crear un nuevo repositorio en GitHub (deberás hacerlo manualmente en github.com)
# Luego, conectar tu repositorio local con el remoto (reemplaza USER y REPO con tus valores)
git remote add origin https://github.com/USER/REPO.git
# Subir el código a la rama principal
git branch -M main
git push -u origin main

5
Caddyfile Normal file
View File

@@ -0,0 +1,5 @@
:8080 {
root * .
file_server
encode gzip
}

217
css/EmtusaMobileTheme.min.css vendored Normal file

File diff suppressed because one or more lines are too long

BIN
css/fonts/icomoon.ttf Normal file

Binary file not shown.

3
css/getmdl-select.min.css vendored Normal file
View File

@@ -0,0 +1,3 @@
.getmdl-select{outline:none}.getmdl-select .mdl-textfield__input{cursor:pointer}.getmdl-select .selected{background-color:#ddd}.getmdl-select .mdl-icon-toggle__label{float:right;margin-top:-30px;color:rgba(0,0,0,0.4);transform:rotate(0);transition:transform 0.3s}.getmdl-select.is-focused .mdl-icon-toggle__label{color:#3f51b5;transform:rotate(180deg)}.getmdl-select .mdl-menu__container{width:100% !important;margin-top:2px}.getmdl-select .mdl-menu__container .mdl-menu{width:100%}.getmdl-select .mdl-menu__container .mdl-menu .mdl-menu__item{font-size:16px}.getmdl-select__fix-height .mdl-menu__container .mdl-menu{overflow-y:auto;max-height:208px !important}.getmdl-select__fix-height .mdl-menu.mdl-menu--top-left{bottom:auto;top:0}
/*# sourceMappingURL=getmdl-select.min.css.map */

140
css/icomoon.css Normal file
View File

@@ -0,0 +1,140 @@
@font-face {
font-family: 'icomoon';
src: url('fonts/icomoon.eot?tkyzrx');
src: url('fonts/icomoon.eot?tkyzrx#iefix') format('embedded-opentype'),
url('fonts/icomoon.ttf?tkyzrx') format('truetype'),
url('fonts/icomoon.woff?tkyzrx') format('woff'),
url('fonts/icomoon.svg?tkyzrx#icomoon') format('svg');
font-weight: normal;
font-style: normal;
}
[class^="icon-"], [class*=" icon-"] {
/* use !important to prevent issues with browser extensions that change fonts */
font-family: 'icomoon' !important;
speak: none;
font-style: normal;
font-weight: normal;
font-variant: normal;
text-transform: none;
line-height: 1;
/* Better Font Rendering =========== */
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.icon-emtusaLogo:before {
content: "\e912";
}
.icon-mapCL:before {
content: "\e911";
}
.icon-empty-star:before {
content: "\e910";
}
.icon-3dots:before {
content: "\e90e";
}
.icon-center:before {
content: "\e90d";
}
.icon-question:before {
content: "\e900";
}
.icon-qr:before {
content: "\e901";
}
.icon-c:before {
content: "\e90f";
}
.icon-forbidden:before {
content: "\e90c";
}
.icon-eye:before {
content: "\e902";
}
.icon-gear:before {
content: "\e903";
}
.icon-search:before {
content: "\e904";
}
.icon-info:before {
content: "\e905";
}
.icon-star:before {
content: "\e906";
}
.icon-clock:before {
content: "\e907";
}
.icon-gps:before {
content: "\e908";
}
.icon-linea:before {
content: "\e909";
}
.icon-home:before {
content: "\e90a";
}
.icon-map:before {
content: "\e90b";
}
.icon-clock2:before {
content: "\e94e";
}
.icon-floppy-disk:before {
content: "\e962";
}
.icon-assist:before {
content: "\e976";
}
.icon-spinner11:before {
content: "\e984";
}
.icon-bin2:before {
content: "\e9ad";
}
.icon-switch:before {
content: "\e9b6";
}
.icon-menu:before {
content: "\e9bd";
}
.icon-play3:before {
content: "\ea1c";
}
.icon-pause2:before {
content: "\ea1d";
}
.icon-stop2:before {
content: "\ea1e";
}
.icon-arrow-up:before {
content: "\ea32";
}
.icon-arrow-right:before {
content: "\ea34";
}
.icon-arrow-down:before {
content: "\ea36";
}
.icon-arrow-left:before {
content: "\ea38";
}
.icon-arrow-right2:before {
content: "\ea3c";
}
.icon-arrow-left2:before {
content: "\ea40";
}
.icon-share2:before {
content: "\ea82";
}
.icon-appleinc:before {
content: "\eabe";
}
.icon-android:before {
content: "\eac0";
}

83
css/icon-pack-custom.css Normal file
View File

@@ -0,0 +1,83 @@
/*!
* jQuery Mobile Icon Pack - Font Awesome version 1.4.0
*
* Copyright 2013 Andy Matthews
* http://andyMatthews.net
* Released under the GPL/MIT license.
*
*/
.ui-icon-microphone:after {
background-image: url('data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%20Tiny%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11-tiny.dtd%22%3E%3Csvg%20version%3D%221.1%22%20baseProfile%3D%22tiny%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20width%3D%2216px%22%20height%3D%2216px%22%20viewBox%3D%220%200%20500%20500%22%20xml%3Aspace%3D%22preserve%22%3E%20%3Cpath%20d%3D%22M321.429%20196.429v35.714q0%2061.663-41.155%20107.282t-101.702%2052.316v36.831h71.429q7.254%200%2012.556%205.301t5.301%2012.556-5.301%2012.556-12.556%205.301h-178.571q-7.254%200-12.556-5.301t-5.301-12.556%205.301-12.556%2012.556-5.301h71.429v-36.831q-60.547-6.696-101.702-52.316t-41.155-107.282v-35.714q0-7.254%205.301-12.556t12.556-5.301%2012.556%205.301%205.301%2012.556v35.714q0%2051.618%2036.691%2088.309t88.309%2036.691%2088.309-36.691%2036.691-88.309v-35.714q0-7.254%205.301-12.556t12.556-5.301%2012.556%205.301%205.301%2012.556zM250%2089.286v142.857q0%2036.831-26.228%2063.058t-63.058%2026.228-63.058-26.228-26.228-63.058v-142.857q0-36.831%2026.228-63.058t63.058-26.228%2063.058%2026.228%2026.228%2063.058z%22%20fill%3D%22%23ffffff%22%20%2F%3E%3C%2Fsvg%3E');
background-repeat: no-repeat;
background-position: 5px 4px;
}
.ui-nosvg .ui-icon-microphone:after { background-image: url('png_images/microphone.png'); }
.ui-icon-microphone-slash:after {
background-image: url('data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%20Tiny%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11-tiny.dtd%22%3E%3Csvg%20version%3D%221.1%22%20baseProfile%3D%22tiny%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20width%3D%2216px%22%20height%3D%2216px%22%20viewBox%3D%220%200%20500%20500%22%20xml%3Aspace%3D%22preserve%22%3E%20%3Cpath%20d%3D%22M75.614%20263.672l-28.181%2028.181q-11.719-28.739-11.719-59.71v-35.714q0-7.254%205.301-12.556t12.556-5.301%2012.556%205.301%205.301%2012.556v35.714q0%2014.788%204.185%2031.529zM386.44%2095.703l-100.726%20100.726v35.714q0%2036.831-26.228%2063.058t-63.058%2026.228q-15.346%200-30.413-5.301l-26.786%2026.786q27.065%2014.23%2057.199%2014.23%2051.618%200%2088.309-36.691t36.691-88.309v-35.714q0-7.254%205.301-12.556t12.556-5.301%2012.556%205.301%205.301%2012.556v35.714q0%2061.663-41.155%20107.282t-101.702%2052.316v36.831h71.429q7.254%200%2012.556%205.301t5.301%2012.556-5.301%2012.556-12.556%205.301h-178.571q-7.254%200-12.556-5.301t-5.301-12.556%205.301-12.556%2012.556-5.301h71.429v-36.831q-34.877-3.627-65.569-22.601l-70.871%2070.871q-2.79%202.79-6.417%202.79t-6.417-2.79l-22.879-22.879q-2.79-2.79-2.79-6.417t2.79-6.417l344.308-344.308q2.79-2.79%206.417-2.79t6.417%202.79l22.879%2022.879q2.79%202.79%202.79%206.417t-2.79%206.417zM280.413%2058.873l-173.27%20173.27v-142.857q0-36.831%2026.228-63.058t63.058-26.228q28.46%200%2051.479%2016.462t32.505%2042.411z%22%20fill%3D%22%23ffffff%22%20%2F%3E%3C%2Fsvg%3E');
background-repeat: no-repeat;
}
.ui-nosvg .ui-icon-microphone-slash:after { background-image: url('png_images/microphone-slash.png'); }
.ui-icon-qrcode:after {
background-image: url('data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%20Tiny%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11-tiny.dtd%22%3E%3Csvg%20version%3D%221.1%22%20baseProfile%3D%22tiny%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20width%3D%2216px%22%20height%3D%2216px%22%20viewBox%3D%220%200%20500%20500%22%20xml%3Aspace%3D%22preserve%22%3E%20%3Cpath%20d%3D%22M107.143%20321.429v35.714h-35.714v-35.714h35.714zM107.143%20107.143v35.714h-35.714v-35.714h35.714zM321.429%20107.143v35.714h-35.714v-35.714h35.714zM35.714%20392.578h107.143v-106.864h-107.143v106.864zM35.714%20178.571h107.143v-107.143h-107.143v107.143zM250%20178.571h107.143v-107.143h-107.143v107.143zM178.571%20250v178.571h-178.571v-178.571h178.571zM321.429%20392.857v35.714h-35.714v-35.714h35.714zM392.857%20392.857v35.714h-35.714v-35.714h35.714zM392.857%20250v107.143h-107.143v-35.714h-35.714v107.143h-35.714v-178.571h107.143v35.714h35.714v-35.714h35.714zM178.571%2035.714v178.571h-178.571v-178.571h178.571zM392.857%2035.714v178.571h-178.571v-178.571h178.571z%22%20fill%3D%22%23ffffff%22%20%2F%3E%3C%2Fsvg%3E');
background-repeat: no-repeat;
background-position: 5px 4px;
}
.ui-nosvg .ui-icon-qrcode:after { background-image: url('png_images/qrcode.png'); }
.ui-icon-euro:after {
background-image: url('data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%20Tiny%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11-tiny.dtd%22%3E%3Csvg%20version%3D%221.1%22%20baseProfile%3D%22tiny%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20width%3D%2216px%22%20height%3D%2216px%22%20viewBox%3D%220%200%20500%20500%22%20xml%3Aspace%3D%22preserve%22%3E%20%3Cpath%20d%3D%22M272.321%20364.676l9.766%2044.364q0.837%203.348-0.837%206.278t-4.743%204.046l-1.395%200.279q-1.116%200.558-2.93%200.977t-4.464%201.255-5.999%201.535-7.115%201.395-8.371%201.395-9.347%201.255-10.184%200.837-10.742%200.279q-65.29%200-114.118-36.412t-66.406-98.075h-26.507q-3.627%200-6.278-2.651t-2.651-6.278v-31.529q0-3.627%202.651-6.278t6.278-2.651h18.415q-0.558-15.904%200.279-29.297h-18.694q-3.906%200-6.417-2.511t-2.511-6.417v-31.808q0-3.906%202.511-6.417t6.417-2.511h27.344q18.694-58.594%2067.941-94.308t111.747-35.714q28.46%200%2054.129%206.417%203.069%200.837%205.581%204.185%201.674%203.069%200.837%206.696l-11.998%2044.364q-0.837%203.627-3.906%205.441t-6.696%200.698l-1.116-0.279q-1.116-0.279-3.208-0.698l-4.883-0.977t-6.278-0.977-7.254-0.837-8.091-0.698-8.231-0.279q-35.156%200-63.058%2017.857t-41.853%2049.107h130.581q4.464%200%206.976%203.348%202.79%203.348%201.953%207.254l-6.696%2031.808q-1.395%207.254-8.929%207.254h-136.161q-0.837%2010.324%200%2029.297h128.069q4.185%200%206.976%203.348%202.511%203.348%201.674%207.534l-6.696%2031.25q-0.558%203.069-3.069%205.162t-5.581%202.093h-107.98q13.393%2032.645%2041.713%2051.758t63.755%2019.113q5.022%200%2010.044-0.418t9.347-0.977%208.231-1.255%206.836-1.395%205.162-1.255l3.348-0.837%201.395-0.558q3.627-1.395%207.254%200.558%203.348%201.953%204.185%205.859z%22%20fill%3D%22%23ffffff%22%20%2F%3E%3C%2Fsvg%3E');
background-repeat: no-repeat;
background-position: 5.5px 4px;
}
.ui-nosvg .ui-icon-euro:after { background-image: url('png_images/euro.png'); }
.ui-icon-question:after {
background-image: url('data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%20Tiny%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11-tiny.dtd%22%3E%3Csvg%20version%3D%221.1%22%20baseProfile%3D%22tiny%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20width%3D%2216px%22%20height%3D%2216px%22%20viewBox%3D%220%200%20500%20500%22%20xml%3Aspace%3D%22preserve%22%3E%20%3Cpath%20d%3D%22M196.429%20350.446v66.964q0%204.464-3.348%207.813t-7.813%203.348h-66.964q-4.464%200-7.813-3.348t-3.348-7.813v-66.964q0-4.464%203.348-7.813t7.813-3.348h66.964q4.464%200%207.813%203.348t3.348%207.813zM284.598%20183.036q0%2015.067-4.325%2028.181t-9.766%2021.345-15.346%2016.602-16.043%2012.137-17.020%209.905q-11.44%206.417-19.113%2018.136t-7.673%2018.694q0%204.743-3.348%209.068t-7.813%204.325h-66.964q-4.185%200-7.115-5.162t-2.93-10.463v-12.556q0-23.159%2018.136-43.667t39.899-30.273q16.462-7.534%2023.438-15.625t6.976-21.206q0-11.719-12.974-20.647t-29.995-8.929q-18.136%200-30.134%208.091-9.766%206.976-29.855%2032.087-3.627%204.464-8.649%204.464-3.348%200-6.976-2.232l-45.759-34.877q-3.627-2.79-4.325-6.976t1.535-7.813q44.643-74.219%20129.464-74.219%2022.321%200%2044.922%208.649t40.737%2023.159%2029.576%2035.575%2011.44%2044.224z%22%20fill%3D%22%23ffffff%22%20%2F%3E%3C%2Fsvg%3E');
background-repeat: no-repeat;
background-position: 6.5px 3px;
}
.ui-nosvg .ui-icon-question:after { background-image: url('png_images/question.png'); }
.ui-icon-arrows-alt:after {
background-image: url('data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%20Tiny%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11-tiny.dtd%22%3E%3Csvg%20version%3D%221.1%22%20baseProfile%3D%22tiny%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20width%3D%2216px%22%20height%3D%2216px%22%20viewBox%3D%220%200%20500%20500%22%20xml%3Aspace%3D%22preserve%22%3E%20%3Cpath%20d%3D%22M357.98%20150.949l-99.051%2099.051%2099.051%2099.051%2040.179-40.179q8.091-8.649%2019.531-3.906%2010.882%204.743%2010.882%2016.462v125q0%207.254-5.301%2012.556t-12.556%205.301h-125q-11.719%200-16.462-11.161-4.743-10.882%203.906-19.252l40.179-40.179-99.051-99.051-99.051%2099.051%2040.179%2040.179q8.649%208.371%203.906%2019.252-4.743%2011.161-16.462%2011.161h-125q-7.254%200-12.556-5.301t-5.301-12.556v-125q0-11.719%2011.161-16.462%2010.882-4.743%2019.252%203.906l40.179%2040.179%2099.051-99.051-99.051-99.051-40.179%2040.179q-5.301%205.301-12.556%205.301-3.348%200-6.696-1.395-11.161-4.743-11.161-16.462v-125q0-7.254%205.301-12.556t12.556-5.301h125q11.719%200%2016.462%2011.161%204.743%2010.882-3.906%2019.252l-40.179%2040.179%2099.051%2099.051%2099.051-99.051-40.179-40.179q-8.649-8.371-3.906-19.252%204.743-11.161%2016.462-11.161h125q7.254%200%2012.556%205.301t5.301%2012.556v125q0%2011.719-10.882%2016.462-3.627%201.395-6.976%201.395-7.254%200-12.556-5.301z%22%20fill%3D%22%23ffffff%22%20%2F%3E%3C%2Fsvg%3E');
background-repeat: no-repeat;
background-position: 4.4px 3.3px;
}
.ui-nosvg .ui-icon-arrows-alt:after { background-image: url('png_images/arrows-alt.png'); }
.ui-icon-arrows:after {
background-image: url('data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%20Tiny%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11-tiny.dtd%22%3E%3Csvg%20version%3D%221.1%22%20baseProfile%3D%22tiny%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20width%3D%2216px%22%20height%3D%2216px%22%20viewBox%3D%220%200%20500%20500%22%20xml%3Aspace%3D%22preserve%22%3E%20%3Cpath%20d%3D%22M500%20250q0%207.254-5.301%2012.556l-71.429%2071.429q-5.301%205.301-12.556%205.301t-12.556-5.301-5.301-12.556v-35.714h-107.143v107.143h35.714q7.254%200%2012.556%205.301t5.301%2012.556-5.301%2012.556l-71.429%2071.429q-5.301%205.301-12.556%205.301t-12.556-5.301l-71.429-71.429q-5.301-5.301-5.301-12.556t5.301-12.556%2012.556-5.301h35.714v-107.143h-107.143v35.714q0%207.254-5.301%2012.556t-12.556%205.301-12.556-5.301l-71.429-71.429q-5.301-5.301-5.301-12.556t5.301-12.556l71.429-71.429q5.301-5.301%2012.556-5.301t12.556%205.301%205.301%2012.556v35.714h107.143v-107.143h-35.714q-7.254%200-12.556-5.301t-5.301-12.556%205.301-12.556l71.429-71.429q5.301-5.301%2012.556-5.301t12.556%205.301l71.429%2071.429q5.301%205.301%205.301%2012.556t-5.301%2012.556-12.556%205.301h-35.714v107.143h107.143v-35.714q0-7.254%205.301-12.556t12.556-5.301%2012.556%205.301l71.429%2071.429q5.301%205.301%205.301%2012.556z%22%20fill%3D%22%23ffffff%22%20%2F%3E%3C%2Fsvg%3E');
background-repeat: no-repeat;
background-position: 3.31px 3.31px;
}
.ui-nosvg .ui-icon-arrows:after { background-image: url('png_images/arrows.png'); }
.ui-icon-volume-up:after { background-image: url('data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%20Tiny%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11-tiny.dtd%22%3E%3Csvg%20version%3D%221.1%22%20baseProfile%3D%22tiny%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20width%3D%2216px%22%20height%3D%2216px%22%20viewBox%3D%220%200%20500%20500%22%20xml%3Aspace%3D%22preserve%22%3E%20%3Cpath%20d%3D%22M214.286%2098.214v303.571q0%207.254-5.301%2012.556t-12.556%205.301-12.556-5.301l-92.913-92.913h-73.103q-7.254%200-12.556-5.301t-5.301-12.556v-107.143q0-7.254%205.301-12.556t12.556-5.301h73.103l92.913-92.913q5.301-5.301%2012.556-5.301t12.556%205.301%205.301%2012.556zM321.429%20250q0%2021.206-11.858%2039.481t-31.39%2026.088q-2.79%201.395-6.976%201.395-7.254%200-12.556-5.162t-5.301-12.695q0-5.859%203.348-9.905t8.091-6.976%209.487-6.417%208.091-9.905%203.348-15.904-3.348-15.904-8.091-9.905-9.487-6.417-8.091-6.976-3.348-9.905q0-7.534%205.301-12.695t12.556-5.162q4.185%200%206.976%201.395%2019.531%207.534%2031.39%2025.949t11.858%2039.621zM392.857%20250q0%2042.69-23.716%2078.823t-62.779%2052.595q-3.627%201.395-6.976%201.395-7.534%200-12.835-5.301t-5.301-12.556q0-10.882%2010.882-16.462%2015.625-8.091%2021.206-12.277%2020.647-15.067%2032.227-37.807t11.579-48.41-11.579-48.41-32.227-37.807q-5.581-4.185-21.206-12.277-10.882-5.581-10.882-16.462%200-7.254%205.301-12.556t12.556-5.301q3.627%200%207.254%201.395%2039.063%2016.462%2062.779%2052.595t23.716%2078.823zM464.286%20250q0%2064.174-35.435%20117.885t-94.308%2079.102q-3.627%201.395-7.254%201.395-7.254%200-12.556-5.301t-5.301-12.556q0-10.044%2010.882-16.462%201.953-1.116%206.278-2.93t6.278-2.93q12.835-6.976%2022.879-14.23%2034.319-25.391%2053.571-63.337t19.252-80.636-19.252-80.636-53.571-63.337q-10.044-7.254-22.879-14.23-1.953-1.116-6.278-2.93t-6.278-2.93q-10.882-6.417-10.882-16.462%200-7.254%205.301-12.556t12.556-5.301q3.627%200%207.254%201.395%2058.873%2025.391%2094.308%2079.102t35.435%20117.885z%22%20fill%3D%22%23ffffff%22%20%2F%3E%3C%2Fsvg%3E') }
.ui-nosvg .ui-icon-volume-up:after { background-image: url('png_images/volume-up.png'); }
.ui-icon-volume-off:after { background-image: url('data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%20Tiny%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11-tiny.dtd%22%3E%3Csvg%20version%3D%221.1%22%20baseProfile%3D%22tiny%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20width%3D%2216px%22%20height%3D%2216px%22%20viewBox%3D%220%200%20500%20500%22%20xml%3Aspace%3D%22preserve%22%3E%20%3Cpath%20d%3D%22M214.286%2098.214v303.571q0%207.254-5.301%2012.556t-12.556%205.301-12.556-5.301l-92.913-92.913h-73.103q-7.254%200-12.556-5.301t-5.301-12.556v-107.143q0-7.254%205.301-12.556t12.556-5.301h73.103l92.913-92.913q5.301-5.301%2012.556-5.301t12.556%205.301%205.301%2012.556z%22%20fill%3D%22%23ffffff%22%20%2F%3E%3C%2Fsvg%3E') }
.ui-nosvg .ui-icon-volume-off:after { background-image: url('png_images/volume-off.png'); }
.ui-icon-volume-down:after { background-image: url('data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%20Tiny%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11-tiny.dtd%22%3E%3Csvg%20version%3D%221.1%22%20baseProfile%3D%22tiny%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20width%3D%2216px%22%20height%3D%2216px%22%20viewBox%3D%220%200%20500%20500%22%20xml%3Aspace%3D%22preserve%22%3E%20%3Cpath%20d%3D%22M214.286%2098.214v303.571q0%207.254-5.301%2012.556t-12.556%205.301-12.556-5.301l-92.913-92.913h-73.103q-7.254%200-12.556-5.301t-5.301-12.556v-107.143q0-7.254%205.301-12.556t12.556-5.301h73.103l92.913-92.913q5.301-5.301%2012.556-5.301t12.556%205.301%205.301%2012.556zM321.429%20250q0%2021.206-11.858%2039.481t-31.39%2026.088q-2.79%201.395-6.976%201.395-7.254%200-12.556-5.162t-5.301-12.695q0-5.859%203.348-9.905t8.091-6.976%209.487-6.417%208.091-9.905%203.348-15.904-3.348-15.904-8.091-9.905-9.487-6.417-8.091-6.976-3.348-9.905q0-7.534%205.301-12.695t12.556-5.162q4.185%200%206.976%201.395%2019.531%207.534%2031.39%2025.949t11.858%2039.621z%22%20fill%3D%22%23ffffff%22%20%2F%3E%3C%2Fsvg%3E') }
.ui-nosvg .ui-icon-volume-down:after { background-image: url('png_images/volume-down.png'); }
.ui-icon-map-marker:after { background-image: url('data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%20Tiny%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11-tiny.dtd%22%3E%3Csvg%20version%3D%221.1%22%20baseProfile%3D%22tiny%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20width%3D%2216px%22%20height%3D%2216px%22%20viewBox%3D%220%200%20500%20500%22%20xml%3Aspace%3D%22preserve%22%3E%20%3Cpath%20d%3D%22M214.286%20178.571q0-29.576-20.926-50.502t-50.502-20.926-50.502%2020.926-20.926%2050.502%2020.926%2050.502%2050.502%2020.926%2050.502-20.926%2020.926-50.502zM285.714%20178.571q0%2030.413-9.208%2049.944l-101.562%20215.96q-4.464%209.208-13.253%2014.509t-18.833%205.301-18.833-5.301-12.974-14.509l-101.841-215.96q-9.208-19.531-9.208-49.944%200-59.152%2041.853-101.004t101.004-41.853%20101.004%2041.853%2041.853%20101.004z%22%20fill%3D%22%23ffffff%22%20%2F%3E%3C%2Fsvg%3E') }
.ui-nosvg .ui-icon-map-marker:after { background-image: url('png_images/map-marker.png'); }
.ui-icon-male:after { background-image: url('data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%20Tiny%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11-tiny.dtd%22%3E%3Csvg%20version%3D%221.1%22%20baseProfile%3D%22tiny%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20width%3D%2216px%22%20height%3D%2216px%22%20viewBox%3D%220%200%20500%20500%22%20xml%3Aspace%3D%22preserve%22%3E%20%3Cpath%20d%3D%22M285.714%20196.429v116.071q0%2011.161-7.813%2018.973t-18.973%207.813-18.973-7.813-7.813-18.973v-98.214h-17.857v254.464q0%2012.835-9.208%2022.042t-22.042%209.208-22.042-9.208-9.208-22.042v-129.464h-17.857v129.464q0%2012.835-9.208%2022.042t-22.042%209.208-22.042-9.208-9.208-22.042v-254.464h-17.857v98.214q0%2011.161-7.813%2018.973t-18.973%207.813-18.973-7.813-7.813-18.973v-116.071q0-22.321%2015.625-37.946t37.946-15.625h178.571q22.321%200%2037.946%2015.625t15.625%2037.946zM205.357%2071.429q0%2025.949-18.276%2044.224t-44.224%2018.276-44.224-18.276-18.276-44.224%2018.276-44.224%2044.224-18.276%2044.224%2018.276%2018.276%2044.224z%22%20fill%3D%22%23ffffff%22%20%2F%3E%3C%2Fsvg%3E') }
.ui-nosvg .ui-icon-male:after { background-image: url('png_images/male.png'); }
.ui-icon-question-circle:after { background-image: url('data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%20Tiny%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11-tiny.dtd%22%3E%3Csvg%20version%3D%221.1%22%20baseProfile%3D%22tiny%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20width%3D%2216px%22%20height%3D%2216px%22%20viewBox%3D%220%200%20500%20500%22%20xml%3Aspace%3D%22preserve%22%3E%20%3Cpath%20d%3D%22M250%20383.929v-53.571q0-3.906-2.511-6.417t-6.417-2.511h-53.571q-3.906%200-6.417%202.511t-2.511%206.417v53.571q0%203.906%202.511%206.417t6.417%202.511h53.571q3.906%200%206.417-2.511t2.511-6.417zM321.429%20196.429q0-24.554-15.485-45.48t-38.644-32.366-47.433-11.44q-67.801%200-103.516%2059.431-4.185%206.696%202.232%2011.719l36.831%2027.902q1.953%201.674%205.301%201.674%204.464%200%206.976-3.348%2014.788-18.973%2023.996-25.669%209.487-6.696%2023.996-6.696%2013.393%200%2023.856%207.254t10.463%2016.462q0%2010.603-5.581%2017.020t-18.973%2012.556q-17.578%207.813-32.227%2024.135t-14.648%2035.017v10.044q0%203.906%202.511%206.417t6.417%202.511h53.571q3.906%200%206.417-2.511t2.511-6.417q0-5.301%205.999-13.812t15.207-13.812q8.929-5.022%2013.672-7.952t12.835-9.766%2012.417-13.393%207.813-16.88%203.488-22.601zM428.571%20250q0%2058.315-28.739%20107.562t-77.985%2077.985-107.562%2028.739-107.562-28.739-77.985-77.985-28.739-107.562%2028.739-107.562%2077.985-77.985%20107.562-28.739%20107.562%2028.739%2077.985%2077.985%2028.739%20107.562z%22%20fill%3D%22%23ffffff%22%20%2F%3E%3C%2Fsvg%3E') }
.ui-nosvg .ui-icon-question-circle:after { background-image: url('png_images/question-circle.png'); }

BIN
css/images/ajax-loader.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

2336
css/index.css Normal file

File diff suppressed because it is too large Load Diff

3
css/jquery.mobile.icons.min.css vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

640
css/leaflet.css Normal file
View File

@@ -0,0 +1,640 @@
/* required styles */
.leaflet-pane,
.leaflet-tile,
.leaflet-marker-icon,
.leaflet-marker-shadow,
.leaflet-tile-container,
.leaflet-pane > svg,
.leaflet-pane > canvas,
.leaflet-zoom-box,
.leaflet-image-layer,
.leaflet-layer {
position: absolute;
left: 0;
top: 0;
}
.leaflet-container {
overflow: hidden;
}
.leaflet-tile,
.leaflet-marker-icon,
.leaflet-marker-shadow {
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
-webkit-user-drag: none;
}
/* Prevents IE11 from highlighting tiles in blue */
.leaflet-tile::selection {
background: transparent;
}
/* Safari renders non-retina tile on retina better with this, but Chrome is worse */
.leaflet-safari .leaflet-tile {
image-rendering: -webkit-optimize-contrast;
}
/* hack that prevents hw layers "stretching" when loading new tiles */
.leaflet-safari .leaflet-tile-container {
width: 1600px;
height: 1600px;
-webkit-transform-origin: 0 0;
}
.leaflet-marker-icon,
.leaflet-marker-shadow {
display: block;
}
/* .leaflet-container svg: reset svg max-width decleration shipped in Joomla! (joomla.org) 3.x */
/* .leaflet-container img: map is broken in FF if you have max-width: 100% on tiles */
.leaflet-container .leaflet-overlay-pane svg,
.leaflet-container .leaflet-marker-pane img,
.leaflet-container .leaflet-shadow-pane img,
.leaflet-container .leaflet-tile-pane img,
.leaflet-container img.leaflet-image-layer,
.leaflet-container .leaflet-tile {
max-width: none !important;
max-height: none !important;
}
.leaflet-container.leaflet-touch-zoom {
-ms-touch-action: pan-x pan-y;
touch-action: pan-x pan-y;
}
.leaflet-container.leaflet-touch-drag {
-ms-touch-action: pinch-zoom;
/* Fallback for FF which doesn't support pinch-zoom */
touch-action: none;
touch-action: pinch-zoom;
}
.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom {
-ms-touch-action: none;
touch-action: none;
}
.leaflet-container {
-webkit-tap-highlight-color: transparent;
}
.leaflet-container a {
-webkit-tap-highlight-color: rgba(51, 181, 229, 0.4);
}
.leaflet-tile {
filter: inherit;
visibility: hidden;
}
.leaflet-tile-loaded {
visibility: inherit;
}
.leaflet-zoom-box {
width: 0;
height: 0;
-moz-box-sizing: border-box;
box-sizing: border-box;
z-index: 800;
}
/* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */
.leaflet-overlay-pane svg {
-moz-user-select: none;
}
.leaflet-pane { z-index: 400; }
.leaflet-tile-pane { z-index: 200; }
.leaflet-overlay-pane { z-index: 400; }
.leaflet-shadow-pane { z-index: 500; }
.leaflet-marker-pane { z-index: 600; }
.leaflet-tooltip-pane { z-index: 650; }
.leaflet-popup-pane { z-index: 700; }
.leaflet-map-pane canvas { z-index: 100; }
.leaflet-map-pane svg { z-index: 200; }
.leaflet-vml-shape {
width: 1px;
height: 1px;
}
.lvml {
behavior: url(#default#VML);
display: inline-block;
position: absolute;
}
/* control positioning */
.leaflet-control {
position: relative;
z-index: 800;
pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */
pointer-events: auto;
}
.leaflet-top,
.leaflet-bottom {
position: absolute;
z-index: 1000;
pointer-events: none;
}
.leaflet-top {
top: 0;
}
.leaflet-right {
right: 0;
}
.leaflet-bottom {
bottom: 0;
}
.leaflet-left {
left: 0;
}
.leaflet-control {
float: left;
clear: both;
}
.leaflet-right .leaflet-control {
float: right;
}
.leaflet-top .leaflet-control {
margin-top: 10px;
}
.leaflet-bottom .leaflet-control {
margin-bottom: 10px;
}
.leaflet-left .leaflet-control {
margin-left: 10px;
}
.leaflet-right .leaflet-control {
margin-right: 10px;
}
/* zoom and fade animations */
.leaflet-fade-anim .leaflet-tile {
will-change: opacity;
}
.leaflet-fade-anim .leaflet-popup {
opacity: 0;
-webkit-transition: opacity 0.2s linear;
-moz-transition: opacity 0.2s linear;
transition: opacity 0.2s linear;
}
.leaflet-fade-anim .leaflet-map-pane .leaflet-popup {
opacity: 1;
}
.leaflet-zoom-animated {
-webkit-transform-origin: 0 0;
-ms-transform-origin: 0 0;
transform-origin: 0 0;
}
.leaflet-zoom-anim .leaflet-zoom-animated {
will-change: transform;
}
.leaflet-zoom-anim .leaflet-zoom-animated {
-webkit-transition: -webkit-transform 0.25s cubic-bezier(0,0,0.25,1);
-moz-transition: -moz-transform 0.25s cubic-bezier(0,0,0.25,1);
transition: transform 0.25s cubic-bezier(0,0,0.25,1);
}
.leaflet-zoom-anim .leaflet-tile,
.leaflet-pan-anim .leaflet-tile {
-webkit-transition: none;
-moz-transition: none;
transition: none;
}
.leaflet-zoom-anim .leaflet-zoom-hide {
visibility: hidden;
}
/* cursors */
.leaflet-interactive {
cursor: pointer;
}
.leaflet-grab {
cursor: -webkit-grab;
cursor: -moz-grab;
cursor: grab;
}
.leaflet-crosshair,
.leaflet-crosshair .leaflet-interactive {
cursor: crosshair;
}
.leaflet-popup-pane,
.leaflet-control {
cursor: auto;
}
.leaflet-dragging .leaflet-grab,
.leaflet-dragging .leaflet-grab .leaflet-interactive,
.leaflet-dragging .leaflet-marker-draggable {
cursor: move;
cursor: -webkit-grabbing;
cursor: -moz-grabbing;
cursor: grabbing;
}
/* marker & overlays interactivity */
.leaflet-marker-icon,
.leaflet-marker-shadow,
.leaflet-image-layer,
.leaflet-pane > svg path,
.leaflet-tile-container {
pointer-events: none;
}
.leaflet-marker-icon.leaflet-interactive,
.leaflet-image-layer.leaflet-interactive,
.leaflet-pane > svg path.leaflet-interactive,
svg.leaflet-image-layer.leaflet-interactive path {
pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */
pointer-events: auto;
}
/* visual tweaks */
.leaflet-container {
background: #ddd;
outline: 0;
}
.leaflet-container a {
color: #0078A8;
}
.leaflet-container a.leaflet-active {
outline: 2px solid orange;
}
.leaflet-zoom-box {
border: 2px dotted #38f;
background: rgba(255,255,255,0.5);
}
/* general typography */
.leaflet-container {
font: 12px/1.5 "Helvetica Neue", Arial, Helvetica, sans-serif;
}
/* general toolbar styles */
.leaflet-bar {
box-shadow: 0 1px 5px rgba(0,0,0,0.65);
border-radius: 4px;
}
.leaflet-bar a,
.leaflet-bar a:hover {
background-color: #fff;
border-bottom: 1px solid #ccc;
width: 26px;
height: 26px;
line-height: 26px;
display: block;
text-align: center;
text-decoration: none;
color: black;
}
.leaflet-bar a,
.leaflet-control-layers-toggle {
background-position: 50% 50%;
background-repeat: no-repeat;
display: block;
}
.leaflet-bar a:hover {
background-color: #f4f4f4;
}
.leaflet-bar a:first-child {
border-top-left-radius: 4px;
border-top-right-radius: 4px;
}
.leaflet-bar a:last-child {
border-bottom-left-radius: 4px;
border-bottom-right-radius: 4px;
border-bottom: none;
}
.leaflet-bar a.leaflet-disabled {
cursor: default;
background-color: #f4f4f4;
color: #bbb;
}
.leaflet-touch .leaflet-bar a {
width: 30px;
height: 30px;
line-height: 30px;
}
.leaflet-touch .leaflet-bar a:first-child {
border-top-left-radius: 2px;
border-top-right-radius: 2px;
}
.leaflet-touch .leaflet-bar a:last-child {
border-bottom-left-radius: 2px;
border-bottom-right-radius: 2px;
}
/* zoom control */
.leaflet-control-zoom-in,
.leaflet-control-zoom-out {
font: bold 18px 'Lucida Console', Monaco, monospace;
text-indent: 1px;
}
.leaflet-touch .leaflet-control-zoom-in, .leaflet-touch .leaflet-control-zoom-out {
font-size: 22px;
}
/* layers control */
.leaflet-control-layers {
box-shadow: 0 1px 5px rgba(0,0,0,0.4);
background: #fff;
border-radius: 5px;
}
.leaflet-control-layers-toggle {
background-image: url(images/layers.png);
width: 36px;
height: 36px;
}
.leaflet-retina .leaflet-control-layers-toggle {
background-image: url(images/layers-2x.png);
background-size: 26px 26px;
}
.leaflet-touch .leaflet-control-layers-toggle {
width: 44px;
height: 44px;
}
.leaflet-control-layers .leaflet-control-layers-list,
.leaflet-control-layers-expanded .leaflet-control-layers-toggle {
display: none;
}
.leaflet-control-layers-expanded .leaflet-control-layers-list {
display: block;
position: relative;
}
.leaflet-control-layers-expanded {
padding: 6px 10px 6px 6px;
color: #333;
background: #fff;
}
.leaflet-control-layers-scrollbar {
overflow-y: scroll;
overflow-x: hidden;
padding-right: 5px;
}
.leaflet-control-layers-selector {
margin-top: 2px;
position: relative;
top: 1px;
}
.leaflet-control-layers label {
display: block;
}
.leaflet-control-layers-separator {
height: 0;
border-top: 1px solid #ddd;
margin: 5px -10px 5px -6px;
}
/* Default icon URLs */
.leaflet-default-icon-path {
background-image: url(images/marker-icon.png);
}
/* attribution and scale controls */
.leaflet-container .leaflet-control-attribution {
background: #fff;
background: rgba(255, 255, 255, 0.7);
margin: 0;
}
.leaflet-control-attribution,
.leaflet-control-scale-line {
padding: 0 5px;
color: #333;
}
.leaflet-control-attribution a {
text-decoration: none;
}
.leaflet-control-attribution a:hover {
text-decoration: underline;
}
.leaflet-container .leaflet-control-attribution,
.leaflet-container .leaflet-control-scale {
font-size: 11px;
}
.leaflet-left .leaflet-control-scale {
margin-left: 5px;
}
.leaflet-bottom .leaflet-control-scale {
margin-bottom: 5px;
}
.leaflet-control-scale-line {
border: 2px solid #777;
border-top: none;
line-height: 1.1;
padding: 2px 5px 1px;
font-size: 11px;
white-space: nowrap;
overflow: hidden;
-moz-box-sizing: border-box;
box-sizing: border-box;
background: #fff;
background: rgba(255, 255, 255, 0.5);
}
.leaflet-control-scale-line:not(:first-child) {
border-top: 2px solid #777;
border-bottom: none;
margin-top: -2px;
}
.leaflet-control-scale-line:not(:first-child):not(:last-child) {
border-bottom: 2px solid #777;
}
.leaflet-touch .leaflet-control-attribution,
.leaflet-touch .leaflet-control-layers,
.leaflet-touch .leaflet-bar {
box-shadow: none;
}
.leaflet-touch .leaflet-control-layers,
.leaflet-touch .leaflet-bar {
border: 2px solid rgba(0,0,0,0.2);
background-clip: padding-box;
}
/* popup */
.leaflet-popup {
position: absolute;
text-align: center;
margin-bottom: 20px;
}
.leaflet-popup-content-wrapper {
padding: 1px;
text-align: left;
border-radius: 12px;
}
.leaflet-popup-content {
margin: 13px 19px;
line-height: 1.4;
}
.leaflet-popup-content p {
margin: 18px 0;
}
.leaflet-popup-tip-container {
width: 40px;
height: 20px;
position: absolute;
left: 50%;
margin-left: -20px;
overflow: hidden;
pointer-events: none;
}
.leaflet-popup-tip {
width: 17px;
height: 17px;
padding: 1px;
margin: -10px auto 0;
-webkit-transform: rotate(45deg);
-moz-transform: rotate(45deg);
-ms-transform: rotate(45deg);
transform: rotate(45deg);
}
.leaflet-popup-content-wrapper,
.leaflet-popup-tip {
background: white;
color: #333;
box-shadow: 0 3px 14px rgba(0,0,0,0.4);
}
.leaflet-container a.leaflet-popup-close-button {
position: absolute;
top: 0;
right: 0;
padding: 4px 4px 0 0;
border: none;
text-align: center;
width: 18px;
height: 14px;
font: 16px/14px Tahoma, Verdana, sans-serif;
color: #c3c3c3;
text-decoration: none;
font-weight: bold;
background: transparent;
}
.leaflet-container a.leaflet-popup-close-button:hover {
color: #999;
}
.leaflet-popup-scrolled {
overflow: auto;
border-bottom: 1px solid #ddd;
border-top: 1px solid #ddd;
}
.leaflet-oldie .leaflet-popup-content-wrapper {
zoom: 1;
}
.leaflet-oldie .leaflet-popup-tip {
width: 24px;
margin: 0 auto;
-ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)";
filter: progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678);
}
.leaflet-oldie .leaflet-popup-tip-container {
margin-top: -1px;
}
.leaflet-oldie .leaflet-control-zoom,
.leaflet-oldie .leaflet-control-layers,
.leaflet-oldie .leaflet-popup-content-wrapper,
.leaflet-oldie .leaflet-popup-tip {
border: 1px solid #999;
}
/* div icon */
.leaflet-div-icon {
background: #fff;
border: 1px solid #666;
}
/* Tooltip */
/* Base styles for the element that has a tooltip */
.leaflet-tooltip {
position: absolute;
padding: 6px;
background-color: #fff;
border: 1px solid #fff;
border-radius: 3px;
color: #222;
white-space: nowrap;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
pointer-events: none;
box-shadow: 0 1px 3px rgba(0,0,0,0.4);
}
.leaflet-tooltip.leaflet-clickable {
cursor: pointer;
pointer-events: auto;
}
.leaflet-tooltip-top:before,
.leaflet-tooltip-bottom:before,
.leaflet-tooltip-left:before,
.leaflet-tooltip-right:before {
position: absolute;
pointer-events: none;
border: 6px solid transparent;
background: transparent;
content: "";
}
/* Directions */
.leaflet-tooltip-bottom {
margin-top: 6px;
}
.leaflet-tooltip-top {
margin-top: -6px;
}
.leaflet-tooltip-bottom:before,
.leaflet-tooltip-top:before {
left: 50%;
margin-left: -6px;
}
.leaflet-tooltip-top:before {
bottom: 0;
margin-bottom: -12px;
border-top-color: #fff;
}
.leaflet-tooltip-bottom:before {
top: 0;
margin-top: -12px;
margin-left: -6px;
border-bottom-color: #fff;
}
.leaflet-tooltip-left {
margin-left: -6px;
}
.leaflet-tooltip-right {
margin-left: 6px;
}
.leaflet-tooltip-left:before,
.leaflet-tooltip-right:before {
top: 50%;
margin-top: -6px;
}
.leaflet-tooltip-left:before {
right: 0;
margin-right: -12px;
border-left-color: #fff;
}
.leaflet-tooltip-right:before {
left: 0;
margin-left: -12px;
border-right-color: #fff;
}

204
css/slick-theme.css Normal file
View File

@@ -0,0 +1,204 @@
@charset 'UTF-8';
/* Slider */
.slick-loading .slick-list
{
background: #fff url('./ajax-loader.gif') center center no-repeat;
}
/* Icons */
@font-face
{
font-family: 'slick';
font-weight: normal;
font-style: normal;
src: url('./fonts/slick.eot');
src: url('./fonts/slick.eot?#iefix') format('embedded-opentype'), url('./fonts/slick.woff') format('woff'), url('./fonts/slick.ttf') format('truetype'), url('./fonts/slick.svg#slick') format('svg');
}
/* Arrows */
.slick-prev,
.slick-next
{
font-size: 0;
line-height: 0;
position: absolute;
top: 50%;
display: block;
width: 20px;
height: 20px;
padding: 0;
-webkit-transform: translate(0, -50%);
-ms-transform: translate(0, -50%);
transform: translate(0, -50%);
cursor: pointer;
color: transparent;
border: none;
outline: none;
background: transparent;
}
.slick-prev:hover,
.slick-prev:focus,
.slick-next:hover,
.slick-next:focus
{
color: transparent;
outline: none;
background: transparent;
}
.slick-prev:hover:before,
.slick-prev:focus:before,
.slick-next:hover:before,
.slick-next:focus:before
{
opacity: 1;
}
.slick-prev.slick-disabled:before,
.slick-next.slick-disabled:before
{
opacity: .25;
}
.slick-prev:before,
.slick-next:before
{
font-family: 'slick';
font-size: 20px;
line-height: 1;
opacity: .75;
color: white;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.slick-prev
{
left: -25px;
}
[dir='rtl'] .slick-prev
{
right: -25px;
left: auto;
}
.slick-prev:before
{
content: '←';
}
[dir='rtl'] .slick-prev:before
{
content: '→';
}
.slick-next
{
right: -25px;
}
[dir='rtl'] .slick-next
{
right: auto;
left: -25px;
}
.slick-next:before
{
content: '→';
}
[dir='rtl'] .slick-next:before
{
content: '←';
}
/* Dots */
.slick-dotted.slick-slider
{
margin-bottom: 30px;
}
.slick-dots
{
position: absolute;
bottom: -25px;
display: block;
width: 100%;
padding: 0;
margin: 0;
list-style: none;
text-align: center;
}
.slick-dots li
{
position: relative;
display: inline-block;
width: 20px;
height: 20px;
margin: 0 5px;
padding: 0;
cursor: pointer;
}
.slick-dots li button
{
font-size: 0;
line-height: 0;
display: block;
width: 20px;
height: 20px;
padding: 5px;
cursor: pointer;
color: transparent;
border: 0;
outline: none;
background: transparent;
}
.slick-dots li button:hover,
.slick-dots li button:focus
{
outline: none;
}
.slick-dots li button:hover:before,
.slick-dots li button:focus:before
{
opacity: 1;
}
.slick-dots li button:before
{
font-family: 'slick';
font-size: 6px;
line-height: 20px;
position: absolute;
top: 0;
left: 0;
width: 20px;
height: 20px;
content: '•';
text-align: center;
opacity: .25;
color: black;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.slick-dots li.slick-active button:before
{
opacity: .75;
color: black;
}

119
css/slick.css Normal file
View File

@@ -0,0 +1,119 @@
/* Slider */
.slick-slider
{
position: relative;
display: block;
box-sizing: border-box;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
-webkit-touch-callout: none;
-khtml-user-select: none;
-ms-touch-action: pan-y;
touch-action: pan-y;
-webkit-tap-highlight-color: transparent;
}
.slick-list
{
position: relative;
display: block;
overflow: hidden;
margin: 0;
padding: 0;
}
.slick-list:focus
{
outline: none;
}
.slick-list.dragging
{
cursor: pointer;
cursor: hand;
}
.slick-slider .slick-track,
.slick-slider .slick-list
{
-webkit-transform: translate3d(0, 0, 0);
-moz-transform: translate3d(0, 0, 0);
-ms-transform: translate3d(0, 0, 0);
-o-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
}
.slick-track
{
position: relative;
top: 0;
left: 0;
display: block;
margin-left: auto;
margin-right: auto;
}
.slick-track:before,
.slick-track:after
{
display: table;
content: '';
}
.slick-track:after
{
clear: both;
}
.slick-loading .slick-track
{
visibility: hidden;
}
.slick-slide
{
display: none;
float: left;
height: 100%;
min-height: 1px;
}
[dir='rtl'] .slick-slide
{
float: right;
}
.slick-slide img
{
display: block;
}
.slick-slide.slick-loading img
{
display: none;
}
.slick-slide.dragging img
{
pointer-events: none;
}
.slick-initialized .slick-slide
{
display: block;
}
.slick-loading .slick-slide
{
visibility: hidden;
}
.slick-vertical .slick-slide
{
display: block;
height: auto;
border: 1px solid transparent;
}
.slick-arrow.slick-hidden {
display: none;
}

204
css/slick/slick-theme.css Normal file
View File

@@ -0,0 +1,204 @@
@charset 'UTF-8';
/* Slider */
.slick-loading .slick-list
{
background: #fff url('./ajax-loader.gif') center center no-repeat;
}
/* Icons */
@font-face
{
font-family: 'slick';
font-weight: normal;
font-style: normal;
src: url('./fonts/slick.eot');
src: url('./fonts/slick.eot?#iefix') format('embedded-opentype'), url('./fonts/slick.woff') format('woff'), url('./fonts/slick.ttf') format('truetype'), url('./fonts/slick.svg#slick') format('svg');
}
/* Arrows */
.slick-prev,
.slick-next
{
font-size: 0;
line-height: 0;
position: absolute;
top: 50%;
display: block;
width: 20px;
height: 20px;
padding: 0;
-webkit-transform: translate(0, -50%);
-ms-transform: translate(0, -50%);
transform: translate(0, -50%);
cursor: pointer;
color: transparent;
border: none;
outline: none;
background: transparent;
}
.slick-prev:hover,
.slick-prev:focus,
.slick-next:hover,
.slick-next:focus
{
color: transparent;
outline: none;
background: transparent;
}
.slick-prev:hover:before,
.slick-prev:focus:before,
.slick-next:hover:before,
.slick-next:focus:before
{
opacity: 1;
}
.slick-prev.slick-disabled:before,
.slick-next.slick-disabled:before
{
opacity: .25;
}
.slick-prev:before,
.slick-next:before
{
font-family: 'slick';
font-size: 20px;
line-height: 1;
opacity: .75;
color: white;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.slick-prev
{
left: -25px;
}
[dir='rtl'] .slick-prev
{
right: -25px;
left: auto;
}
.slick-prev:before
{
content: '←';
}
[dir='rtl'] .slick-prev:before
{
content: '→';
}
.slick-next
{
right: -25px;
}
[dir='rtl'] .slick-next
{
right: auto;
left: -25px;
}
.slick-next:before
{
content: '→';
}
[dir='rtl'] .slick-next:before
{
content: '←';
}
/* Dots */
.slick-dotted.slick-slider
{
margin-bottom: 30px;
}
.slick-dots
{
position: absolute;
bottom: -25px;
display: block;
width: 100%;
padding: 0;
margin: 0;
list-style: none;
text-align: center;
}
.slick-dots li
{
position: relative;
display: inline-block;
width: 20px;
height: 20px;
margin: 0 5px;
padding: 0;
cursor: pointer;
}
.slick-dots li button
{
font-size: 0;
line-height: 0;
display: block;
width: 20px;
height: 20px;
padding: 5px;
cursor: pointer;
color: transparent;
border: 0;
outline: none;
background: transparent;
}
.slick-dots li button:hover,
.slick-dots li button:focus
{
outline: none;
}
.slick-dots li button:hover:before,
.slick-dots li button:focus:before
{
opacity: 1;
}
.slick-dots li button:before
{
font-family: 'slick';
font-size: 6px;
line-height: 20px;
position: absolute;
top: 0;
left: 0;
width: 20px;
height: 20px;
content: '•';
text-align: center;
opacity: .25;
color: black;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.slick-dots li.slick-active button:before
{
opacity: .75;
color: black;
}

119
css/slick/slick.css Normal file
View File

@@ -0,0 +1,119 @@
/* Slider */
.slick-slider
{
position: relative;
display: block;
box-sizing: border-box;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
-webkit-touch-callout: none;
-khtml-user-select: none;
-ms-touch-action: pan-y;
touch-action: pan-y;
-webkit-tap-highlight-color: transparent;
}
.slick-list
{
position: relative;
display: block;
overflow: hidden;
margin: 0;
padding: 0;
}
.slick-list:focus
{
outline: none;
}
.slick-list.dragging
{
cursor: pointer;
cursor: hand;
}
.slick-slider .slick-track,
.slick-slider .slick-list
{
-webkit-transform: translate3d(0, 0, 0);
-moz-transform: translate3d(0, 0, 0);
-ms-transform: translate3d(0, 0, 0);
-o-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
}
.slick-track
{
position: relative;
top: 0;
left: 0;
display: block;
margin-left: auto;
margin-right: auto;
}
.slick-track:before,
.slick-track:after
{
display: table;
content: '';
}
.slick-track:after
{
clear: both;
}
.slick-loading .slick-track
{
visibility: hidden;
}
.slick-slide
{
display: none;
float: left;
height: 100%;
min-height: 1px;
}
[dir='rtl'] .slick-slide
{
float: right;
}
.slick-slide img
{
display: block;
}
.slick-slide.slick-loading img
{
display: none;
}
.slick-slide.dragging img
{
pointer-events: none;
}
.slick-initialized .slick-slide
{
display: block;
}
.slick-loading .slick-slide
{
visibility: hidden;
}
.slick-vertical .slick-slide
{
display: block;
height: auto;
border: 1px solid transparent;
}
.slick-arrow.slick-hidden {
display: none;
}

1
css/sweetalert2.min.css vendored Normal file

File diff suppressed because one or more lines are too long

BIN
img/bus3_64.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

BIN
img/bus64.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

BIN
img/busr64.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

BIN
img/google_play.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

BIN
img/gpsloc_azul.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
img/gpsloc_rojo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
img/logoEmtusaAzul152.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

6
img/movile-euro.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 7.3 KiB

BIN
img/reloj.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

BIN
img/stck-walk-wht.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 875 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 888 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 144 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 161 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 277 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 259 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 424 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 534 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 388 KiB

848
index.html Normal file
View File

@@ -0,0 +1,848 @@
<!DOCTYPE html>
<html lang="es">
<head>
<title>Emtusa Huelva</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<!--<meta http-equiv="Content-Security-Policy" content="default-src https://codepush.appcenter.ms 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *" />-->
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
<meta name="format-detection" content="telephone=no">
<meta charset="utf-8">
<meta http-equiv="Expires" content="0">
<meta http-equiv="Last-Modified" content="0">
<meta http-equiv="Cache-Control" content="no-cache">
<meta http-equiv="Pragma" content="no-cache">
<meta name="mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-title" content="Emtusa">
<link rel="manifest" href="/manifest.json">
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
<link rel="stylesheet" href="https://code.getmdl.io/1.3.0/material.light_blue-blue.min.css" />
<link rel="stylesheet" type="text/css" href="./css/icomoon.css">
<link rel="stylesheet" type="text/css" href="./css/EmtusaMobileTheme.min.css" />
<link rel="stylesheet" type="text/css" href="./css/jquery.mobile.structure-1.4.5.min.css" />
<link rel="stylesheet" type="text/css" href="./css/jquery.mobile.icons.min.css" />
<link rel="stylesheet" type="text/css" href="./css/sweetalert2.min.css">
<link rel="stylesheet" type="text/css" href="./css/icon-pack-custom.css" />
<link rel="stylesheet" type="text/css" href="./css/leaflet.css" />
<link rel="stylesheet" type="text/css" href="./css/index.css">
<link rel="stylesheet" href="./css/getmdl-select.min.css">
<link rel="stylesheet" type="text/css" href="./slick/slick.css" />
<link rel="stylesheet" type="text/css" href="slick/slick-theme.css" />
</head>
<body class="bodyClass">
<div class="ayuda">
<p style="top: 80px;left: 43px;">
<i class="material-icons">call_received</i>
<span>Nombre de Parada</span>
</p>
<p style="top: 67px;left: 159px;">
<i class="material-icons">call_received</i>
<span>Tiempo Para llegar</span>
</p>
</div>
<!--Splash Screen-->
<div id="loader-wrapper">
<div class="loadingBar">
<h5 id="loadText" class="dataText">Comprobando Información</h5>
</div>
<div id="loader">
<h3 class="loader-font">
<span class="icon-emtusaLogo" style="font-size: 117px;"></span><br />EMTUSA<br />HUELVA
<div class="spinner">
<div class="bounce1"></div>
<div class="bounce2"></div>
<div class="bounce3"></div>
</div>
</h3>
</div>
<div class="loader-section section-left"></div>
<div class="loader-section section-right"></div>
</div>
<!--popup Sin conexion-->
<div id="sinInternet" class="conectado">
<span>Sin conexión de red</span>
</div>
<!--Botón control por voz-->
<div id="voz" class="btnAudio">
<button id="btnMic" class="mdl-button mdl-js-button mdl-button--fab mdl-button--colored btnMapa" data-role="none" style="display:none;bottom: 10px;right: 10px;z-index: 2060;overflow: unset;" data-upgraded=",MaterialButton">
<i class="material-icons">mic</i>
<div id="radar" class="radar" style="display: none;"></div>
</button>
</div>
<!--PAGINA INICIO-->
<div id="pageInicio" data-role="page">
<div class="headInicio" data-role="header" data-position="fixed" class="logo" style="height:75px">
<h1 style="top:0;">
<span id="titleApp" style="display:none">AppTwo</span>
<a><img src="./img/logoEmtusaAzul152.png" height="76" width="76"></a>
</h1>
</div>
<div class="contentInicio" data-role="content" style="top:60px;overflow-x:visible;bottom:30px">
<div id="" style="margin-top:25px;">
<ul class="collection">
<li class="collection-item avatar" onclick="$.mobile.changePage('#pageLinea');">
<i class="square" style="text-shadow:none;background-color: #169ff1;"><i class="material-icons mdl-list__item-avatar" style="background-color:transparent">view_list</i></i>
<span class="title"><b>Líneas</b></span>
<p style="color: #7e7e7e;">Muestra las paradas de las lineas y los tiempos de llegada de los autobuses.</p>
</li>
<li class="collection-item avatar" onclick="$.mobile.changePage('#pageMapa');">
<i class="square" style="text-shadow:none;background-color: #169ff1;"><i class="material-icons mdl-list__item-avatar" style="background-color:transparent">location_on</i></i>
<span class="title"><b>Mapa</b></span>
<p style="color: #7e7e7e;">Muestra líneas y paradas representadas en el mapa.</p>
</li>
<li class="collection-item avatar" onclick="$.mobile.changePage('#pageComoLLegar');">
<i class="square" style="text-shadow:none;background-color: #169ff1;"><i class="material-icons mdl-list__item-avatar" style="background-color:transparent">near_me</i></i>
<span class="title"><b>Cómo Llegar</b></span>
<p style="color: #7e7e7e;">Te permite ver como llegar desde un lugar a otro a través de las líneas disponibles.</p>
</li>
<li class="collection-item avatar" onclick="$.mobile.changePage('#pageFavoritos');">
<i class="square" style="text-shadow:none;background-color: #169ff1;"><i class="material-icons mdl-list__item-avatar" style="background-color:transparent">star_rate</i></i>
<span class="title"><b>Mis Paradas</b></span>
<p style="color: #7e7e7e;">Permite crear, editar y ver paradas guardadas como favoritas.</p>
</li>
<li class="collection-item avatar" onclick="$.mobile.changePage('#pageAlarmaLlegada');">
<i class="square" style="text-shadow:none;background-color: #169ff1;"><i class="material-icons mdl-list__item-avatar" style="background-color:transparent">alarm</i></i>
<span class="title"><b>Alarma de Bajada</b></span>
<p style="color: #7e7e7e;">Crea una alarma para saber cuando debes bajarte.</p>
</li>
<!--<li class="collection-item avatar" onclick="$.mobile.changePage('#pageAlarma');">
<i class="square" style="text-shadow:none;background-color: #169ff1;"><i class="material-icons mdl-list__item-avatar" style="background-color:transparent">alarm</i></i>
<span class="title"><b>Alarmas de Llegada</b></span>
<p style="color: #7e7e7e;">Crea una alarmas para avisarte de coger el autobús</p>
</li>-->
<li class="collection-item avatar" onclick="$.mobile.changePage('#pageBuscarParada');">
<i class="square" style="text-shadow:none;background-color: #169ff1;"><i class="material-icons mdl-list__item-avatar" style="background-color:transparent">search</i></i>
<span class="title"><b>Buscar</b></span>
<p style="color: #7e7e7e;">Busca paradas por nombre o código.</p>
</li>
<li class="collection-item avatar" onclick="$.mobile.changePage('#pageInfo');" id="iniInfo">
<i class="square" style="text-shadow:none;background-color: #169ff1;"><i class="material-icons mdl-list__item-avatar" style="background-color:transparent">new_releases</i></i>
<span class="title"><b>Noticias y Avisos</b></span>
<p style="color: #7e7e7e;">Obtén toda la información actual sobre Emtusa y sus líneas </p>
</li>
<li class="collection-item avatar" onclick="Recargar()">
<i class="square" style="text-shadow:none;background-color: #169ff1;"><i class="material-icons mdl-list__item-avatar" style="background-color:transparent">euro_symbol</i></i>
<span class="title"><b>Recargas de Tarjetas</b></span>
<p style="color: #7e7e7e;">Recarga la tarjeta sin salir de casa. </p>
</li>
<li class="collection-item avatar" onclick="PagoMovil()">
<i class="square" style="text-shadow:none;background-color: #169ff1;"><img src="img/movile-euro.svg" width="36" /></i>
<span class="title"><b>Pago con Móvil</b></span>
<p style="color: #7e7e7e;">El billete en tu móvil. </p>
</li>
<li class="collection-item avatar" onclick="goQR()">
<i class="square" style="text-shadow:none;background-color: #169ff1;">
<img width="40" height="40" style="padding-left: 6px;" src="data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%20Tiny%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11-tiny.dtd%22%3E%3Csvg%20version%3D%221.1%22%20baseProfile%3D%22tiny%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20width%3D%2216px%22%20height%3D%2216px%22%20viewBox%3D%220%200%20500%20500%22%20xml%3Aspace%3D%22preserve%22%3E%20%3Cpath%20d%3D%22M107.143%20321.429v35.714h-35.714v-35.714h35.714zM107.143%20107.143v35.714h-35.714v-35.714h35.714zM321.429%20107.143v35.714h-35.714v-35.714h35.714zM35.714%20392.578h107.143v-106.864h-107.143v106.864zM35.714%20178.571h107.143v-107.143h-107.143v107.143zM250%20178.571h107.143v-107.143h-107.143v107.143zM178.571%20250v178.571h-178.571v-178.571h178.571zM321.429%20392.857v35.714h-35.714v-35.714h35.714zM392.857%20392.857v35.714h-35.714v-35.714h35.714zM392.857%20250v107.143h-107.143v-35.714h-35.714v107.143h-35.714v-178.571h107.143v35.714h35.714v-35.714h35.714zM178.571%2035.714v178.571h-178.571v-178.571h178.571zM392.857%2035.714v178.571h-178.571v-178.571h178.571z%22%20fill%3D%22%23ffffff%22%20%2F%3E%3C%2Fsvg%3E">
</i>
<span class="title"><b>Escanear código QR</b></span>
<p style="color: #7e7e7e;">Escanea el código QR de la parada para obtener sus tiempos.</p>
</li>
<li class="collection-item avatar" onclick="$.mobile.changePage('#pageAyudaPpal');">
<i class="square" style="text-shadow:none;background-color: #169ff1;">
<img width="40" height="40" style="padding-left:11px" src="data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%20Tiny%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11-tiny.dtd%22%3E%3Csvg%20version%3D%221.1%22%20baseProfile%3D%22tiny%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20width%3D%2216px%22%20height%3D%2216px%22%20viewBox%3D%220%200%20500%20500%22%20xml%3Aspace%3D%22preserve%22%3E%20%3Cpath%20d%3D%22M196.429%20350.446v66.964q0%204.464-3.348%207.813t-7.813%203.348h-66.964q-4.464%200-7.813-3.348t-3.348-7.813v-66.964q0-4.464%203.348-7.813t7.813-3.348h66.964q4.464%200%207.813%203.348t3.348%207.813zM284.598%20183.036q0%2015.067-4.325%2028.181t-9.766%2021.345-15.346%2016.602-16.043%2012.137-17.020%209.905q-11.44%206.417-19.113%2018.136t-7.673%2018.694q0%204.743-3.348%209.068t-7.813%204.325h-66.964q-4.185%200-7.115-5.162t-2.93-10.463v-12.556q0-23.159%2018.136-43.667t39.899-30.273q16.462-7.534%2023.438-15.625t6.976-21.206q0-11.719-12.974-20.647t-29.995-8.929q-18.136%200-30.134%208.091-9.766%206.976-29.855%2032.087-3.627%204.464-8.649%204.464-3.348%200-6.976-2.232l-45.759-34.877q-3.627-2.79-4.325-6.976t1.535-7.813q44.643-74.219%20129.464-74.219%2022.321%200%2044.922%208.649t40.737%2023.159%2029.576%2035.575%2011.44%2044.224z%22%20fill%3D%22%23ffffff%22%20%2F%3E%3C%2Fsvg%3E" />
</i>
<span class="title"><b>Ayuda</b></span>
<p style="color: #7e7e7e;">Consulta manuales de uso de la aplicación. </p>
</li>
<li class="collection-item avatar" onclick="$.mobile.changePage('#pageOpciones');">
<i class="square" style="text-shadow:none;background-color: #169ff1;"><i class="material-icons mdl-list__item-avatar" style="background-color:transparent">settings</i></i>
<span class="title"><b>Opciones</b></span>
<p style="color: #7e7e7e;">Ajustes y configuración de la APP. </p>
</li>
</ul>
</div>
</div>
<div id="urlApp" class="version2" onclick=""></div>
<div id="versionApp" class="version" onclick="$.mobile.changePage('#pageVersiones');"></div>
<div id="irGplay" class="gplay" onclick="irGplay()" style="display:none"><a><img src="./img/google_play.png" alt="GooglePlay" height="20" width="20"></a></div>
<div id="errorApp" class="gplay" onclick="$.mobile.changePage('#pageError');" style="display:none">
<img heigth="20" width="20" src="data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20fill%3D%22%23169FF1%22%20d%3D%22M12.601%2C11.187C13.476%2C10.018%2C14%2C8.572%2C14%2C7c0-3.866-3.134-7-7-7C5.428%2C0%2C3.982%2C0.524%2C2.813%2C1.399L2.757%2C1.343L2.053%2C2.048%20L2.048%2C2.053L1.343%2C2.758l0.056%2C0.056C0.524%2C3.982%2C0%2C5.428%2C0%2C7c0%2C3.866%2C3.134%2C7%2C7%2C7c1.572%2C0%2C3.018-0.524%2C4.187-1.399l0.056%2C0.057%20l0.705-0.705l0.005-0.005l0.705-0.705L12.601%2C11.187z%20M7%2C2c2.761%2C0%2C5%2C2.238%2C5%2C5c0%2C1.019-0.308%2C1.964-0.832%2C2.754L4.246%2C2.832%20C5.036%2C2.308%2C5.981%2C2%2C7%2C2z%20M7%2C12c-2.761%2C0-5-2.238-5-5c0-1.019%2C0.308-1.964%2C0.832-2.754l6.922%2C6.922C8.964%2C11.692%2C8.019%2C12%2C7%2C12z%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E">
</div>
<div id="ins" class="inspector" onclick="$.mobile.changePage('#pageIns');" style="display:none">
<img heigth="20" width="20" src="data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20style%3D%22fill%3A%23169FF1%3B%22%20d%3D%22M7%2C2C3%2C2%2C0%2C7%2C0%2C7s3%2C5%2C7%2C5s7-5%2C7-5S11%2C2%2C7%2C2z%20M7%2C10c-1.657%2C0-3-1.344-3-3c0-1.657%2C1.343-3%2C3-3%20s3%2C1.343%2C3%2C3C10%2C8.656%2C8.657%2C10%2C7%2C10z%20M7%2C6C6.448%2C6%2C6%2C6.447%2C6%2C7c0%2C0.553%2C0.448%2C1%2C1%2C1s1-0.447%2C1-1C8%2C6.447%2C7.552%2C6%2C7%2C6z%22%2F%3E%3C%2Fsvg%3E">
</div>
</div>
<!--PAGE MAPA-->
<div data-url="pageMapa" data-role="page" id="pageMapa">
<div data-role="header" data-position="fixed" id="headMapa">
<div data-type="horizontal" data-role="controlgroup" class="btn ui-btn-left noRadius">
<button class="menuButton menuButtonMenu">
<i class="material-icons mdl-list__item-avatar homeClass">home</i>
</button>
</div>
<h1 id="toptitleMapas">
<span class="headName">EMTUSA: </span><span id="toptitleMapasText">MAPA</span>
</h1>
<div data-type="horizontal" data-role="controlgroup" class="btn ui-btn-right noRadius">
<button class="menuButton menuAyuda" ayuda="ayuMapa"><span class=" icon-question"></span></button>
</div>
</div>
<div role="main" class="ui-content noFooter" data-role="content" id="contentMapa">
<div id="mapCanvas" class="mapCanvas"></div>
<div id="lineasMapa" class="rutasComoLlegar" style="display:block">
<center><b style="color: #448aff;cursor:pointer" onclick="AnimarLista()">Líneas</b></center>
<div id="containerLineasMapa" style="display:none;height:0px;overflow:auto">
<ul id="listaLineasMapa" class="collection"></ul>
<div style="display: inline-flex;white-space: nowrap;text-align: center;padding-left: 15px;padding-top: 5px;" onclick="CambiarVistaLineas('checkboxTodasLineas')">
<p style="margin:0px">
<input type="checkbox" class="filled-in todaslinB" data-role="none" name="checkboxMapa" id="checkboxTodasLineasB" disabled="disabled">
<label for="checkboxTodasLineasB"></label>
</p>
<p id="textcheckboxTodasLineasB" style="margin:0px;padding-top:5px;margin-left:3px;font-size: 15px;">Ver Todas</p>
</div>
</div>
</div>
<div>
<button class="mdl-button mdl-js-button mdl-button--fab mdl-button--mini-fab mdl-button--colored btnMapa" data-role="none" style="top: 10px;right: 5px;" onclick="$('#btnTextoMapa').toggleClass('active')">
<i class="material-icons">search</i>
</button>
<button class="mdl-button mdl-js-button mdl-button--fab mdl-button--mini-fab mdl-button--colored btnMapa" data-role="none" style="top: 60px;right: 5px;" onclick="GetLocation()">
<i class="material-icons">gps_fixed</i>
</button>
<button id="btnCentrar" class="mdl-button mdl-js-button mdl-button--fab mdl-button--mini-fab mdl-button--colored btnMapa" data-role="none" style="top: 110px;right: 5px;" onclick="CentrarMapa()">
<i class="material-icons">center_focus_weak</i>
</button>
<button id="btnCercanas" class="mdl-button mdl-js-button mdl-button--fab mdl-button--mini-fab mdl-button--colored btnMapa" data-role="none" style="top: 160px;right: 5px;" onclick="TrigerMostrarCercanas()">
<img src="./img/stck-walk-wht.png" height="25" width="25">
</button>
<div id="btnTextoMapa" class="btnMapa">
<div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label" data-role="none">
<input class="mdl-textfield__input" type="text" id="txtBuscarParada">
<label class="mdl-textfield__label" for="sample3">Ubicación:</label>
</div>
</div>
<div class="lineasMostradas">
</div>
</div>
</div>
<div data-role="popup" id="popupPuntoInteres" data-dismissible="false" style="max-height:550px;overflow:auto">
<div data-role="header">
<h1 id="popupHeader">Datos del nuevo punto</h1>
</div>
<div data-role="main" style="padding:5px">
<p id="lblId" style="display:none"></p>
<p id="lblLat" style="display:none"></p><p id="lblLng" style="display:none"></p>
<table style="">
<tr>
<td class="textoPtoInt">Nombre:<input id="txtFix" type="reset" maxlength="35" placeholder="Nombre..." data-role="none" data-clear-btn="true" class="jqueryBug"></td>
<td><input id="txtPopNombre" type="text" maxlength="35" placeholder="Nombre..." data-clear-btn="true" class="controls ui-input-text"></td>
</tr>
<tr>
<td class="textoPtoInt">Dirección:</td>
<td><input id="txtPopDirec" type="text" maxlength="100" placeholder="Dirección..." data-clear-btn="true" class="controls ui-input-text"></td>
</tr>
<tr>
<td class="textoPtoInt">Teléfono:</td>
<td><input id="txtPopTlfn" type="text" maxlength="100" placeholder="Teléfono..." data-clear-btn="true" class="controls ui-input-text"></td>
</tr>
<tr>
<td class="textoPtoInt">Url:</td>
<td><input id="txtPopUrl" type="text" maxlength="100" placeholder="Url..." data-clear-btn="true" class="controls ui-input-text"></td>
</tr>
<tr>
<td class="textoPtoInt">Icono:</td>
<td>
<div class="styled-select selectShadow" style="width:100%;">
<select name="selectIcono" id="selectIcono" data-mini="true" data-inline="true" data-role="none">
<option value="1" selected>General</option>
<option value="2">Restaurante</option>
<option value="3">Monumento</option>
<option value="4">Hotel</option>
<option value="5">Tienda</option>
</select>
</div>
</td>
</tr>
<tr>
<td class="textoPtoInt">Descripción:</td>
<td><textarea id="txtPopDesc" rows="4" cols="50" placeholder="Descripción..." maxlength="300" data-clear-btn="true"></textarea></td>
</tr>
<tr>
<td class="textoPtoInt">Foto:</td>
<td><input type='file' class="controls" id="inputFotos" data-role="none" style="width: 156px;" /></td>
</tr>
</table>
<center>
<img id="myImg" src="#" alt="your image" style="max-width:95%; display:none" />
</center> <br />
<a class="ui-btn ui-corner-all ui-shadow ui-btn-inline noRadius" data-rel="back">Cancelar</a>
<a id="btnGuardarPto" class="ui-btn ui-corner-all ui-shadow ui-btn-inline noRadius">Guardar</a>
</div>
</div>
</div>
<!--ESQUEMA-->
<div id="pageLinea" data-role="page" data-tap-toggle="false" data-hide-during-focus="">
<div data-role="header" data-position="fixed">
<div data-type="horizontal" data-role="controlgroup" class="btn ui-btn-left noRadius">
<button class="menuButton menuButtonMenu">
<i class="material-icons mdl-list__item-avatar homeClass">home</i>
</button>
</div>
<h1 id="toptitleLineas">
<span class="headName">EMTUSA: </span>LÍNEAS
</h1>
<div data-type="horizontal" data-role="controlgroup" class="btn ui-btn-right noRadius ui-controlgroup ui-controlgroup-horizontal ui-corner-all">
<div class="ui-controlgroup-controls ">
<div style="display: inline-flex;white-space: nowrap;text-align: center;padding-left: 5px;padding-top: 5px;" onclick="CambiarVistaLineas('checkboxTodasLineas')">
<p style="margin:0px">
<input type="checkbox" class="filled-in todaslin" data-role="none" name="checkboxMapa" id="checkboxTodasLineas">
<label for="checkboxTodasLineas"></label>
</p>
<p id="textcheckboxTodasLineas" style="margin:0px;padding-top:5px;margin-left:3px;color: white;font-size: 15px;">Ver Todas</p>
</div>
</div>
</div>
</div>
<div data-role="content" class="noFooter">
<div id="ListaLineas" style="margin-top:5px;">
</div>
</div>
</div>
<div id="pageLineaVer" data-role="page" data-tap-toggle="false" data-hide-during-focus="">
<div data-role="header" data-position="fixed">
<div data-type="horizontal" data-role="controlgroup" class="btn ui-btn-left noRadius">
<button class="menuButton menuButtonMenu">
<i class="material-icons mdl-list__item-avatar homeClass">home</i>
</button>
<button class="menuButton" onclick="history.back()"><span class=" icon-arrow-left2"></span></button>
</div>
<h1 id="toptitleLineasVer">
<span class="headName">EMTUSA </span><span id="toptitleLineasVerText"></span>
</h1>
<div data-type="horizontal" data-role="controlgroup" class="btn ui-btn-right noRadius">
<button id="cambiarTimeout" style="color: rgb(255, 241, 168);display:none;" class="boxShadow ui-btn ui-btn-inline ui-btn-mini openMenu" data-role="button">Parar</button>
<button class="menuButton" id="recEsquema" style="color: rgb(255, 241, 168);display:none;"><span class=" icon-spinner11"></span></button>
<button class="menuButton menuAyuda" ayuda="ayuLineas" onclick="goQR()"><span class=" icon-question"></span></button>
</div>
</div>
<div data-role="content" class="noFooter">
<center>
<div id="verLineasContNombre" class="TituloLineaEsquema" onclick="$.mobile.changePage('#pageLinea');">
<b id="headLineasVer" class="ellip ellip-line" style="font-size:28px;"></b>
</div>
<div name="ListLineasPageLineas" id="ListLineasPageLineas" class="paradasList" style="margin-top:10px">
<b>Cargando, por favor espere...</b>
</div>
</center>
</div>
</div>
<!--COMO LLEGAR-->
<div data-url="pageComoLLegar" data-role="page" id="pageComoLLegar">
<div data-role="header" data-position="fixed" id="headMapa">
<div data-type="horizontal" data-role="controlgroup" class="btn ui-btn-left noRadius">
<button class="menuButton menuButtonMenu">
<i class="material-icons mdl-list__item-avatar homeClass">home</i>
</button>
</div>
<h1 id="toptitleMapas">
<span class="headName">EMTUSA: </span><span id="toptitleMapasText">Cómo Llegar</span>
</h1>
<div data-type="horizontal" data-role="controlgroup" class="btn ui-btn-right noRadius">
<button class="menuButton menuAyuda" ayuda="ayuMapa"><span class=" icon-question"></span></button>
</div>
</div>
<div role="main" class="ui-content noFooter" data-role="content" id="contentMapaCL">
<div id="divComoLlegar">
<div id="MenuMapaCL">
<table style="width:100%">
<tr>
<td style="width: 30px;"><img src="./img/gpsloc_azul.png" height="24" width="24"></td>
<td>
<div id="divTxtOrigen" class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label" data-role="none" style="width:100%">
<input class="mdl-textfield__input" type="text" id="txtOrigen" data-role="none" onClick="this.setSelectionRange(0, this.value.length)" />
<label class="mdl-textfield__label" for="txtOrigen" data-role="none">Origen</label>
</div>
</td>
<td style="width: 40px;text-align: center;cursor:pointer"><i class="material-icons" onclick="MiUbicacion()">gps_fixed</i></td>
</tr>
<tr>
<td><img src="./img/gpsloc_rojo.png" height="24" width="24"></td>
<td>
<div id="divTxtDestino" class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label" data-role="none" style="width:100%">
<input class="mdl-textfield__input" type="text" id="txtDestino" data-role="none" onClick="this.setSelectionRange(0, this.value.length)">
<label class="mdl-textfield__label" for="txtDestino" data-role="none">Destino</label>
</div>
</td>
<td style="width: 40px;text-align: center;cursor:pointer"> <i class="material-icons" onclick="InvertirBusqueda()">swap_vert</i> </td>
</tr>
</table>
</div>
<div>
<i class="sqInfoRuta square" onclick="$('#listRutas').toggle()"></i>
<div id="mapCanvasCL" class="mapCanvas"></div>
</div>
<div id="rutasSugeridas" class="rutasComoLlegar">
<center><b style="color: #448aff;cursor:pointer" onclick="AnimarListaRutas()">Rutas Sugeridas</b></center>
<div id="containerRutasSugeridas" style="display:none;height:0px;overflow:auto">
<p class="center subColor" style="font-size:10px"> No hay rutas disponibles, marque un origen y un destino primero.</p>
</div>
</div>
</div>
<div id="toastDestino" class="toast" style="display:none">
<div class="toastCenter">
<p id="toastParagraph" class="toastParagraph blinkM">Calculando rutas espere...</p>
</div>
</div>
</div>
</div>
<!--BUSQUEDA-->
<div id="pageBuscarParada" data-role="page">
<div data-role="header" data-position="fixed">
<div data-type="horizontal" data-role="controlgroup" class="btn ui-btn-left noRadius">
<button class="menuButton menuButtonMenu">
<i class="material-icons mdl-list__item-avatar homeClass">home</i>
</button>
</div>
<h1>
<span class="headName">EMTUSA: </span>BUSCAR
</h1>
<div data-type="horizontal" data-role="controlgroup" class="btn ui-btn-right noRadius">
<button class="menuButton" onclick="MostrarAyuda('ayuBuscar')"><span class=" icon-question"></span></button>
</div>
</div>
<div data-role="content" class="noFooter" id="divEmtusaBuscar">
<div>
<div style="padding:5px">
<!--<div style="display:inline-flex;padding-left:10px">-->
<input autocomplete="off" id="txtBuscar" class="controls ui-input-text " type="text" placeholder="Escriba Nombre o C&oacute;digo de parada" data-clear-btn="true" />
</div>
<div id="resultadoBusqueda" class="resultadoBusqueda"></div>
</div>
<!--<div id="contParCercanasBusqueda" class="">
<h4 class="centradoH">Paradas Más Cercanas</h4>
<div id="tabParadasCercanas" data-role="tabs" class="tabParadasCercanas estiloCercanasTab" style="display:none">
<div data-role="navbar">
<ul style="box-shadow: 0 2px 2px lightgrey;border-radius: 0;">
<li><a id="navCercanasLinea" href="#cercanasLinea" class="btn ui-btn-active btnPtoInteres" style="margin:0px !important">Por Línea y Sentido</a></li>
<li><a id="navCercanasOrden" href="#cercanasOrden" class="btn ui-btn btnPtoInteres" style="margin:0px !important">Por Distancia</a></li>
</ul>
</div>
<div id="cercanasLinea" class="favoritoTabs pad">
</div>
<div id="cercanasOrden" class="favoritoTabs pad">
</div>
</div>
<center>
<div id="mensParCer" style="display:none;padding-left:5px;padding-right:5px;">
<p style="font-size: 13px;">
Para ver sus paradas cercanas debe establecer su ubicación primero.
<br>Puede localizarse pulsando en el botón a continuación.<br />
</p>
<button id="localizarme" class=" materialButton locOrigen ui-btn ui-shadow ui-corner-all" style="width:155px">
<span class="icon-map" style="font-size: 20px;margin-right: 5px;"></span>Localizarme
</button>
</div>
</center>
</div>-->
</div>
</div>
<!--PAGINA INFORMACION/AVISOS (RSS EMTUSA)-->
<div id="pageInfo" data-role="page">
<div data-role="panel" id="panelNoticias" data-position="right" data-swipe-close="false">
<center><p style="margin: 0;font-weight:bold">Marcar todos los avisos como:</p></center>
<center>
<button id="desmarcarNot" class="mdl-button mdl-js-button mdl-button--raised mdl-button--colored mdl-js-ripple-effect" data-role="none">
Sin leer
</button>
<button id="marcarNot" class="mdl-button mdl-js-button mdl-button--raised mdl-button--colored mdl-js-ripple-effect" data-role="none">
Leidos
</button>
<p class="miniText"><b>Fecha Avi. más actual Visto: </b><span id="ultPuls" style="margin-top: 5px;"></span></p>
<p class="miniText"><b>Avisos sin ver: </b><span class="numAvisos"></span></p>
<button id="actAhora" class="mdl-button mdl-js-button mdl-button--raised mdl-button--colored mdl-js-ripple-effect" data-role="none">
<span class="icon-spinner11" style="font-size: 20px;margin-right: 5px;"></span>Actualizar Avisos
</button>
<p class="miniText">
<b>Avisos Actualizados el:</b>
<span id="ultAct"></span>
</p>
</center>
</div>
<div data-role="header" data-position="fixed">
<div data-type="horizontal" data-role="controlgroup" class="btn ui-btn-left noRadius">
<button class="menuButton menuButtonMenu">
<i class="material-icons mdl-list__item-avatar homeClass">home</i>
</button>
</div>
<h1>
<span class="headName">EMTUSA: </span><span>AVISOS </span><span class="numAvisosMenu"></span>
</h1>
<div data-type="horizontal" data-role="controlgroup" class="btn ui-btn-right noRadius">
<button class="menuButton" onclick="AbrirAyuda('ayudaNoticias');"><span class=" icon-question"></span></button>
<button id="gestionNoticias" class="menuButton menuButtonGest" onclick="$('#panelNoticias').panel().panel('open');">Gestión</button>
</div>
</div>
<div data-role="content" class="noFooter">
<center style="color: #aaa;">Pulse sobre un Aviso o Noticia para ver su contenido.</center>
<div id="divEmtusaNoticias">
</div>
</div>
</div>
<div id="ventanaAyuda">
<div data-role="header" data-position="fixed" role="banner" style="background-color: #169FF1;color: white;text-shadow: 0 1px black;" class="ui-header ui-bar-inherit ui-header-fixed slidedown">
<div data-type="horizontal" data-role="controlgroup" class="btn ui-btn-left noRadius">
<button class="menuButton" onclick="history.back()"><span class=" icon-arrow-left2"></span></button>
</div>
<h1 class="ui-title" role="heading" aria-level="1">
<span class="headName">EMTUSA:</span> <span id="vntAyudaTitulo">AYUDA</span>
</h1>
</div>
<div id="vAyudaTexto"></div>
</div>
<!--FAVORITOS-->
<div id="pageFavoritos" data-role="page">
<div data-role="header" data-position="fixed">
<div data-type="horizontal" data-role="controlgroup" class="btn ui-btn-left noRadius">
<button class="menuButton menuButtonMenu">
<i class="material-icons mdl-list__item-avatar homeClass">home</i>
</button>
</div>
<h1>
<span class="headName">EMTUSA:</span> MIS PARADAS
</h1>
<div data-type="horizontal" data-role="controlgroup" class="btn ui-btn-right noRadius">
<button class="menuButton" onclick="AbrirAyuda('ayudaFavoritos');"><span class=" icon-question"></span></button>
</div>
</div>
<div data-role="content" class="noFooter" id="divEmtusaFavoritos">
<p id="InfoFavoritos" class="center subColor" style="margin-bottom: 0px;">Pulsa sobre un favorito para obtener más información</p>
<div id="divFavoritos">
<ul id="listaFavoritos" class="mdl-list" style="margin-top: 0px;margin-bottom: 0px;"></ul>
</div>
<button class="mdl-button mdl-js-button mdl-button--fab mdl-button--colored btnMapa" data-role="none" style="bottom: 15px;right: 5px;" onclick="CrearFavorito()">
<i class="material-icons">add</i>
</button>
<span class="ultActFavoritos subColor"></span>
</div>
<div data-role="popup" id="selFavPopup">
<p></p>
</div>
</div>
<!--ALERTAS-->
<div id="pageAlarmaLlegada" data-role="page" data-tap-toggle="false" data-hide-during-focus="">
<div data-role="header" data-position="fixed">
<div data-type="horizontal" data-role="controlgroup" class="btn ui-btn-left noRadius">
<button class="menuButton menuButtonMenu">
<i class="material-icons mdl-list__item-avatar homeClass">home</i>
</button>
</div>
<h1 id="toptitleLineas">
<span class="headName">EMTUSA: </span>ALERTA DE BAJADA
</h1>
<div data-type="horizontal" data-role="controlgroup" class="btn ui-btn-right noRadius">
<button class="menuButton" onclick="AbrirAyuda('ayudaAlarmasBus');"><span class=" icon-question"></span></button>
</div>
</div>
<div data-role="content" class="noFooter">
<div id="formularioAlarma" style="max-width: 300px;margin: 0 auto;">
<div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label getmdl-select" data-role="none">
<input type="text" value="" class="mdl-textfield__input" id="ddLinea" readonly data-role="none">
<input type="hidden" value="" name="ddLinea" data-role="none">
<i class="mdl-icon-toggle__label material-icons">keyboard_arrow_down</i>
<label for="ddLinea" class="mdl-textfield__label">Línea</label>
<ul for="ddLinea" class="mdl-menu mdl-menu--bottom-left mdl-js-menu"></ul>
</div>
<div id="getmdl_Parada" class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label getmdl-select" data-role="none">
<input type="text" value="" class="mdl-textfield__input" id="ddParada" readonly data-role="none">
<input type="hidden" value="" name="ddParada" data-role="none">
<i class="mdl-icon-toggle__label material-icons">keyboard_arrow_down</i>
<label for="ddParada" class="mdl-textfield__label">Parada</label>
<ul for="ddParada" class="mdl-menu mdl-menu--bottom-left mdl-js-menu"></ul>
</div>
<div id="getmdl_Buses" class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label getmdl-select" data-role="none">
<input type="text" value="" class="mdl-textfield__input" id="ddBus" readonly data-role="none">
<input type="hidden" value="" name="ddBus" data-role="none">
<i class="mdl-icon-toggle__label material-icons">keyboard_arrow_down</i>
<label for="ddBus" class="mdl-textfield__label">Código Autobús</label>
<ul for="ddBus" class="mdl-menu mdl-menu--bottom-left mdl-js-menu"></ul>
</div>
<!--<div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label mdl-textfield--floating-label" data-role="none" style="width:100%">
<input class="mdl-textfield__input" type="text" id="txtCodigoBus">
<label class="mdl-textfield__label" for="sample3">Código Autobús</label>
</div>-->
<div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label getmdl-select " data-role="none">
<input type="text" value="" class="mdl-textfield__input" id="ddAvisame" readonly data-role="none">
<input type="hidden" value="" name="ddAvisame" data-role="none">
<i class="mdl-icon-toggle__label material-icons">keyboard_arrow_down</i>
<label for="ddAvisame" class="mdl-textfield__label">Avisame</label>
<ul for="ddAvisame" class="mdl-menu mdl-menu--bottom-left mdl-js-menu">
<li class="mdl-menu__item" data-val="1">1 parada antes</li>
<li class="mdl-menu__item" data-val="2">2 parada antes</li>
<li class="mdl-menu__item" data-val="3">3 parada antes</li>
<li class="mdl-menu__item" data-val="4">4 parada antes</li>
<li class="mdl-menu__item" data-val="5">5 parada antes</li>
<!--<li class="mdl-menu__item" data-val="1m">1 minutos antes</li>
<li class="mdl-menu__item" data-val="2m">2 minutos antes</li>
<li class="mdl-menu__item" data-val="3m">3 minutos antes</li>
<li class="mdl-menu__item" data-val="4m">4 minutos antes</li>
<li class="mdl-menu__item" data-val="5m">5 minutos antes</li>
<li class="mdl-menu__item" data-val="10m">10 minutos antes</li>
<li class="mdl-menu__item" data-val="15m">15 minutos antes</li>-->
</ul>
</div>
<button id="btnAlarmaBajada" class="mdl-button mdl-js-button mdl-button--raised mdl-button--colored mdl-js-ripple-effect" data-role="none">
Crear Alarma
</button>
</div>
<div id="AlarmaBus">
<div id="mapCanvasAlarma" class="mapCanvas"></div>
<div id="rutasSugeridas" class="rutasComoLlegar">
<center><b style="color: #448aff;cursor:pointer" onclick="AnimarAlarmas()">Información Autobus</b></center>
<div id="ventanaDatosBajada" style="display:none;height:0px;overflow:auto;padding: 15px;">
</div>
</div>
</div>
<div id="AlarmaFinalizada" style="text-align: center;">
</div>
<button id="btnCancAlarma" class="mdl-button mdl-js-button mdl-button--fab mdl-button--mini-fab mdl-button--colored btnMapa" data-role="none" style="top: 10px;right: 5px;background-color: red;display:none" onclick="AlarmaFinalizada('Cancelar')">
<i class="material-icons">alarm_off</i>
</button>
</div>
</div>
<div id="pageAlarma" data-role="page">
<div data-role="header" data-position="fixed">
<div data-type="horizontal" data-role="controlgroup" class="btn ui-btn-left noRadius">
<button class="menuButton menuButtonMenu">
<i class="material-icons mdl-list__item-avatar homeClass">home</i>
</button>
</div>
<h1>
<span class="headName">EMTUSA:</span> ALERTAS
</h1>
<div data-type="horizontal" data-role="controlgroup" class="btn ui-btn-right noRadius">
<button class="menuButton" onclick="MostrarAyuda('ayuFavoritos')"><span class=" icon-question"></span></button>
</div>
</div>
<div data-role="content" class="noFooter" id="divEmtusaAlarmas">
<p id="InfoAlarmas" class="center subColor" style="margin-bottom: 0px;padding:5px;">Las alarmas proporcionan una estimación teórica para que el usuario pueda saber cuando pueda saber cuando pasa el autobús y se le avise de su paso.<br /> Estas alarmas son orientativas, desde Emtusa no nos hacemos responsables de problemas ocasionados por fallo en los avisos</p>
<div id="divAlarmas">
<ul id="listaAlarmas" class="mdl-list" style="margin-top: 0px;margin-bottom: 0px;"></ul>
</div>
<button class="mdl-button mdl-js-button mdl-button--fab mdl-button--colored btnMapa" data-role="none" style="bottom: 15px;right: 5px;" onclick="CrearAlerta()">
<i class="material-icons">add</i>
</button>
<span class="ultActAlarmas subColor"></span>
</div>
<div data-role="popup" id="selAlarmPopup">
<p></p>
</div>
</div>
<!--OPCIONES-->
<div id="pageOpciones" data-role="page">
<div data-role="header" data-position="fixed">
<button class="menuButton menuButtonMenu">
<i class="material-icons mdl-list__item-avatar homeClass">home</i>
</button>
<!--<a id="btnSalirOpciones" class="ui-btn ui-mini ui-icon-carat-l ui-btn-icon-notext" data-role="button">aaa</a>-->
<h1>
<span class="headName">EMTUSA:</span> OPCIONES
</h1>
<div data-type="horizontal" data-role="controlgroup" class="btn ui-btn-right noRadius">
<button class="menuButton" onclick="MostrarAyuda('ayuOpc')"><span class=" icon-question"></span></button>
</div>
<!--<a id="btnNuevoFavorito" onclick="MostrarAyuda('ayuOpc')" class="boxShadow ui-btn ui-btn-inline ui-btn-mini ui-btn-right openMenu" data-role="button">Ayuda</a>-->
</div>
<center>
<div data-role="content" class="noFooter" id="divContentOpciones">
<!--<div class="opcP"><center><b>Opciones Generales</b></center></div>-->
<div class="opcDiv">
<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect" for="switch-MostrarBus" data-role="none">
<input type="checkbox" id="switch-MostrarBus" class="mdl-switch__input" data-role="none" onclick="MostrarAutobus()">
<span class="mdl-switch__label" data-role="none">Mostrar Autobuses Mapa</span>
</label>
<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect" for="switch-VerCorrespondencias" data-role="none">
<input type="checkbox" id="switch-VerCorrespondencias" class="mdl-switch__input" data-role="none" onclick="VerCorrespondencias()">
<span class="mdl-switch__label" data-role="none">Ver Correspondencias</span>
</label>
<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect" for="switch-VerHoraLlegada" data-role="none">
<input type="checkbox" id="switch-VerHoraLlegada" class="mdl-switch__input" data-role="none" onclick="VerHoraLlegada()">
<span class="mdl-switch__label" data-role="none">Ver Hora de Llegada</span>
</label>
<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect" for="switch-FavoritosIniciar" data-role="none">
<input type="checkbox" id="switch-FavoritosIniciar" class="mdl-switch__input" data-role="none" onclick="FavoritosInicio()">
<span class="mdl-switch__label" data-role="none">Favoritos al iniciar</span>
</label>
<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect" for="switch-Vibracion" data-role="none" onclick="Vibracion()">
<input type="checkbox" id="switch-Vibracion" class="mdl-switch__input" data-role="none">
<span class="mdl-switch__label" data-role="none">Vibración</span>
</label>
<!--<div class="styled-select" style="width:100%; margin-bottom: 5px;">
<select name="selectComoLlegarMetros" id="selectTiempoRecarga" data-role="none">
<option value="15000">15 segundos</option>
<option value="30000">30 segundos</option>
<option value="60000">1 minutos</option>
<option value="300000">5 minutos</option>
<option value="0">No recargar</option>
</select>
</div>-->
</div>
<!--<div class="opcP" style="margin-top:5px;"><center><b>Otras Operaciones</b></center></div>-->
<div class="opcDiv" style="border-top: 1px solid #9e9e9e;">
<div style="display:flex">
<button id="recargar" class=" materialButton ui-btn ui-shadow ui-corner-all" style="width: 49%;margin-right: 5px;">
<span class="icon-spinner11" style="font-size: 20px;margin-right: 5px;"></span>Reiniciar
</button>
<button id="verVersion" class=" materialButton ui-btn ui-shadow ui-corner-all" style="width: 49%;" onclick="$.mobile.changePage('#pageVersiones');">
<span class="icon-eye" style="font-size: 20px;margin-right: 5px;"></span>Versión
</button>
</div>
<button id="borrar" class=" materialButton ui-btn ui-shadow ui-corner-all" style="background-color: #ff6961 !important;border-color: #ff6961 !important;">
<span class=" icon-bin2" style="font-size: 20px;margin-right: 5px;"></span>Reestablecer APP
</button>
</div>
</div>
</center>
</div>
<!--VERSIONES-->
<div id="pageVersiones" data-role="page">
<div data-role="header" data-position="fixed">
<div data-type="horizontal" data-role="controlgroup" class="btn ui-btn-left noRadius">
<button class="menuButton" onclick="history.back()">
<i class="material-icons mdl-list__item-avatar homeClass">arrow_back</i>
</button>
</div>
<h1>
<span class="headName">EMTUSA:</span> VERSIONES
</h1>
</div>
<div data-role="content" class="noFooter">
<div class="textoAyuda" onclick="MostrarVersion('pgRestricionesP')" id="pgVersiones" style="display:none">! Nueva Version</div>
<div class="textoAyuda" onclick="MostrarVersion('verpgRestriccionesP')" id="pgRestriciones" style="display:none">! Restricciones</div>
<div class="textoAyuda" onclick="MostrarVersion('ver100')">Versión 1.00</div>
<div style="display:none">
<div id="verpgVersionesP">
<h3>! Nueva Version</h3>
<p id="pgRestricionesP">
</p>
</div>
<div id="verpgRestriccionesP">
<h3>! Restricciones</h3>
<p id="pgRestricionesP">
</p>
</div>
<div id="ver100">
<div class="versionPG">
<h4 style="text-align:center">Versión 0.32</h4>
<p>
- Nuevo Diseño. <br />
- Mucho más rapida.<br />
- Más Ligera <br />
- Consume menos.
</p>
</div>
</div>
</div>
</div>
</div>
<!--AYUDAS-->
<div id="pageAyudaPpal" data-role="page">
<div data-role="header" data-position="fixed">
<div data-type="horizontal" data-role="controlgroup" class="btn ui-btn-left noRadius">
<button class="menuButton menuButtonMenu">
<i class="material-icons mdl-list__item-avatar homeClass">home</i>
</button>
</div>
<h1>
<span class="headName">EMTUSA:</span> AYUDA
</h1>
</div>
<div data-role="content" class="noFooter">
<div class="textoAyuda" onclick="AbrirAyuda('ayudaFavoritos')">Favoritos</div>
<div class="textoAyuda" onclick="AbrirAyuda('ayudaAlarmasBus')">Alerta de bajada</div>
<div class="textoAyuda" onclick="AbrirAyuda('ayudaNoticias')">Noticias</div>
</div>
</div>
<div id="pageAyuda" data-role="page">
<div data-role="header" data-position="fixed">
<div data-type="horizontal" data-role="controlgroup" class="btn ui-btn-left noRadius">
<button class="menuButton" onclick=" CerrarAyuda()">
<i class="material-icons mdl-list__item-avatar homeClass">arrow_back</i>
</button>
</div>
<h1>
<span class="headName">EMTUSA:</span> AYUDA
</h1>
</div>
<div data-role="content" class="noFooter" id="divPageAyuda">
<div class="btnHelpLeft Pointer" onclick="AnteriorAyuda()">
<i class="material-icons">arrow_back</i>
</div>
<div id="ayudaFavoritos" class="slickClass">
<div><img src="./img/tutorial/Favoritos-1.1.png" border="0"></div>
<div><img src="./img/tutorial/Favoritos-2.jpg" border="0"></div>
<div><img src="./img/tutorial/Favoritos-2.1.png" border="0"></div>
<div><img src="./img/tutorial/Favoritos-2.2.png" border="0"></div>
<div><img src="./img/tutorial/Favoritos-2.3.png" border="0"></div>
<div><img src="./img/tutorial/Favoritos-3.1.png" border="0"></div>
<div><img src="./img/tutorial/Favoritos-3.2.png" border="0"></div>
<div><img src="./img/tutorial/Favoritos-4.1.png" border="0"></div>
</div>
<div id="ayudaAlarmasBus" class="slickClass">
<div><img src="./img/tutorial/AlarmaBB-1.1.png" border="0"></div>
<div><img src="./img/tutorial/AlarmaBB-1.2.png" border="0"></div>
<div><img src="./img/tutorial/AlarmaBB-1.3.png" border="0"></div>
<div><img src="./img/tutorial/AlarmaBB-1.4.png" border="0"></div>
<div><img src="./img/tutorial/AlarmaBB-2.1.png" border="0"></div>
<div><img src="./img/tutorial/AlarmaBB-2.2.png" border="0"></div>
<div><img src="./img/tutorial/AlarmaBB-3.1.png" border="0"></div>
</div>
<div id="ayudaNoticias" class="slickClass">
<div><img src="./img/tutorial/Noticias-1.1.png" border="0"></div>
<div><img src="./img/tutorial/Noticias-2.1.png" border="0"></div>
</div>
<div class="btnHelpRight Pointer" onclick="SiguienteAyuda()">
<i class="material-icons">arrow_forward</i>
</div>
</div>
</div>
<script src="cordova.js"></script>
<script type="text/javascript" src="./js/jquery-1.11.1.min.js"></script>
<script type="text/javascript" src="./js/jquery.mobile-1.4.5.min.js"></script>
<script type="text/javascript" src="./js/leaflet.js"></script>
<script type="text/javascript" src="./js/index.js"></script>
<!--<script type="text/javascript" src="./js/nativo.js"></script>-->
<script type="text/javascript" src="./js/jquery.cookie.js"></script>
<script type="text/javascript" src="./js/jquery.storageapi.min.js"></script>
<script type="text/javascript" src="./js/json2.js"></script>
<script type="text/javascript" src="./js/annyang.min.js"></script>
<script type="text/javascript" src="./js/sweetalert2.min.js"></script>
<!--<script type="text/javascript" src="./js/infobox.js"></script>-->
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<!--<script type="text/javascript" src="./js/jquery-ui.min.js"></script>-->
<script type="text/javascript" src="./js/jquery.ui.touch-punch.min.js"></script>
<script type="text/javascript" src="./js/jszip.min.js"></script>
<script type="text/javascript" src="./js/jszip-utils.min.js"></script>
<script defer src="https://code.getmdl.io/1.3.0/material.min.js"></script>
<script type="text/javascript" src="./js/getmdl-select.min.js"></script>
<script type="text/javascript" src="./js/osrm.js"></script>
<script type="text/javascript" src="./slick/slick.min.js"></script>
</body>
</html>

680
js/annyang.min.js vendored Normal file
View File

@@ -0,0 +1,680 @@
//! annyang
//! version : 2.6.0
//! author : Tal Ater @TalAter
//! license : MIT
//! https://www.TalAter.com/annyang/
(function (root, factory) {
"use strict";
if (typeof define === 'function' && define.amd) { // AMD + global
define([], function () {
return (root.annyang = factory(root));
});
} else if (typeof module === 'object' && module.exports) { // CommonJS
module.exports = factory(root);
} else { // Browser globals
root.annyang = factory(root);
}
}(typeof window !== 'undefined' ? window : this, function (root, undefined) {
"use strict";
/**
* # Quick Tutorial, Intro and Demos
*
* The quickest way to get started is to visit the [annyang homepage](https://www.talater.com/annyang/).
*
* For a more in-depth look at annyang, read on.
*
* # API Reference
*/
var annyang;
// Get the SpeechRecognition object, while handling browser prefixes
var SpeechRecognition = root.SpeechRecognition ||
root.webkitSpeechRecognition ||
root.mozSpeechRecognition ||
root.msSpeechRecognition ||
root.oSpeechRecognition;
// Check browser support
// This is done as early as possible, to make it as fast as possible for unsupported browsers
if (!SpeechRecognition) {
return null;
}
var commandsList = [];
var recognition;
var callbacks = { start: [], error: [], end: [], soundstart: [], result: [], resultMatch: [], resultNoMatch: [], errorNetwork: [], errorPermissionBlocked: [], errorPermissionDenied: [] };
var autoRestart;
var lastStartedAt = 0;
var autoRestartCount = 0;
var debugState = false;
var debugStyle = 'font-weight: bold; color: #00f;';
var pauseListening = false;
var isListening = false;
// The command matching code is a modified version of Backbone.Router by Jeremy Ashkenas, under the MIT license.
var optionalParam = /\s*\((.*?)\)\s*/g;
var optionalRegex = /(\(\?:[^)]+\))\?/g;
var namedParam = /(\(\?)?:\w+/g;
var splatParam = /\*\w+/g;
var escapeRegExp = /[\-{}\[\]+?.,\\\^$|#]/g;
var commandToRegExp = function(command) {
command = command.replace(escapeRegExp, '\\$&')
.replace(optionalParam, '(?:$1)?')
.replace(namedParam, function(match, optional) {
return optional ? match : '([^\\s]+)';
})
.replace(splatParam, '(.*?)')
.replace(optionalRegex, '\\s*$1?\\s*');
return new RegExp('^' + command + '$', 'i');
};
// This method receives an array of callbacks to iterate over, and invokes each of them
var invokeCallbacks = function(callbacks, ...args) {
callbacks.forEach(function(callback) {
callback.callback.apply(callback.context, args);
});
};
var isInitialized = function() {
return recognition !== undefined;
};
// method for logging in developer console when debug mode is on
var logMessage = function(text, extraParameters) {
if (text.indexOf('%c') === -1 && !extraParameters) {
console.log(text);
} else {
console.log(text, extraParameters || debugStyle);
}
};
var initIfNeeded = function() {
if (!isInitialized()) {
annyang.init({}, false);
}
};
var registerCommand = function(command, callback, originalPhrase) {
commandsList.push({ command, callback, originalPhrase });
if (debugState) {
logMessage('Command successfully loaded: %c'+originalPhrase, debugStyle);
}
};
var parseResults = function(results) {
invokeCallbacks(callbacks.result, results);
var commandText;
// go over each of the 5 results and alternative results received (we've set maxAlternatives to 5 above)
for (let i = 0; i<results.length; i++) {
// the text recognized
commandText = results[i].trim();
if (debugState) {
logMessage('Speech recognized: %c'+commandText, debugStyle);
}
// try and match recognized text to one of the commands on the list
for (let j = 0, l = commandsList.length; j < l; j++) {
var currentCommand = commandsList[j];
var result = currentCommand.command.exec(commandText);
if (result) {
var parameters = result.slice(1);
if (debugState) {
logMessage('command matched: %c'+currentCommand.originalPhrase, debugStyle);
if (parameters.length) {
logMessage('with parameters', parameters);
}
}
// execute the matched command
currentCommand.callback.apply(this, parameters);
invokeCallbacks(callbacks.resultMatch, commandText, currentCommand.originalPhrase, results);
return;
}
}
}
invokeCallbacks(callbacks.resultNoMatch, results);
};
annyang = {
/**
* Initialize annyang with a list of commands to recognize.
*
* #### Examples:
* ````javascript
* var commands = {'hello :name': helloFunction};
* var commands2 = {'hi': helloFunction};
*
* // initialize annyang, overwriting any previously added commands
* annyang.init(commands, true);
* // adds an additional command without removing the previous commands
* annyang.init(commands2, false);
* ````
* As of v1.1.0 it is no longer required to call init(). Just start() listening whenever you want, and addCommands() whenever, and as often as you like.
*
* @param {Object} commands - Commands that annyang should listen to
* @param {boolean} [resetCommands=true] - Remove all commands before initializing?
* @method init
* @deprecated
* @see [Commands Object](#commands-object)
*/
init: function(commands, resetCommands = true) {
// Abort previous instances of recognition already running
if (recognition && recognition.abort) {
recognition.abort();
}
// initiate SpeechRecognition
recognition = new SpeechRecognition();
// Set the max number of alternative transcripts to try and match with a command
recognition.maxAlternatives = 5;
// In HTTPS, turn off continuous mode for faster results.
// In HTTP, turn on continuous mode for much slower results, but no repeating security notices
recognition.continuous = root.location.protocol === 'http:';
// Sets the language to the default 'en-US'. This can be changed with annyang.setLanguage()
recognition.lang = 'en-US';
recognition.onstart = function() {
isListening = true;
invokeCallbacks(callbacks.start);
};
recognition.onsoundstart = function() {
invokeCallbacks(callbacks.soundstart);
};
recognition.onerror = function(event) {
invokeCallbacks(callbacks.error, event);
switch (event.error) {
case 'network':
invokeCallbacks(callbacks.errorNetwork, event);
break;
case 'not-allowed':
case 'service-not-allowed':
// if permission to use the mic is denied, turn off auto-restart
autoRestart = false;
// determine if permission was denied by user or automatically.
if (new Date().getTime()-lastStartedAt < 200) {
invokeCallbacks(callbacks.errorPermissionBlocked, event);
} else {
invokeCallbacks(callbacks.errorPermissionDenied, event);
}
break;
}
};
recognition.onend = function() {
isListening = false;
invokeCallbacks(callbacks.end);
// annyang will auto restart if it is closed automatically and not by user action.
if (autoRestart) {
// play nicely with the browser, and never restart annyang automatically more than once per second
var timeSinceLastStart = new Date().getTime()-lastStartedAt;
autoRestartCount += 1;
if (autoRestartCount % 10 === 0) {
if (debugState) {
logMessage('Speech Recognition is repeatedly stopping and starting. See http://is.gd/annyang_restarts for tips.');
}
}
if (timeSinceLastStart < 1000) {
setTimeout(function() {
annyang.start({ paused: pauseListening });
}, 1000-timeSinceLastStart);
} else {
annyang.start({ paused: pauseListening });
}
}
};
recognition.onresult = function(event) {
if(pauseListening) {
if (debugState) {
logMessage('Speech heard, but annyang is paused');
}
return false;
}
// Map the results to an array
var SpeechRecognitionResult = event.results[event.resultIndex];
var results = [];
for (let k = 0; k<SpeechRecognitionResult.length; k++) {
results[k] = SpeechRecognitionResult[k].transcript;
}
parseResults(results);
};
// build commands list
if (resetCommands) {
commandsList = [];
}
if (commands.length) {
this.addCommands(commands);
}
},
/**
* Start listening.
* It's a good idea to call this after adding some commands first, but not mandatory.
*
* Receives an optional options object which supports the following options:
*
* - `autoRestart` (boolean, default: true) Should annyang restart itself if it is closed indirectly, because of silence or window conflicts?
* - `continuous` (boolean) Allow forcing continuous mode on or off. Annyang is pretty smart about this, so only set this if you know what you're doing.
* - `paused` (boolean, default: true) Start annyang in paused mode.
*
* #### Examples:
* ````javascript
* // Start listening, don't restart automatically
* annyang.start({ autoRestart: false });
* // Start listening, don't restart automatically, stop recognition after first phrase recognized
* annyang.start({ autoRestart: false, continuous: false });
* ````
* @param {Object} [options] - Optional options.
* @method start
*/
start: function(options) {
initIfNeeded();
options = options || {};
if (options.paused !== undefined) {
pauseListening = !!options.paused;
} else {
pauseListening = false;
}
if (options.autoRestart !== undefined) {
autoRestart = !!options.autoRestart;
} else {
autoRestart = true;
}
if (options.continuous !== undefined) {
recognition.continuous = !!options.continuous;
}
lastStartedAt = new Date().getTime();
try {
recognition.start();
} catch(e) {
if (debugState) {
logMessage(e.message);
}
}
},
/**
* Stop listening, and turn off mic.
*
* Alternatively, to only temporarily pause annyang responding to commands without stopping the SpeechRecognition engine or closing the mic, use pause() instead.
* @see [pause()](#pause)
*
* @method abort
*/
abort: function() {
autoRestart = false;
autoRestartCount = 0;
if (isInitialized()) {
recognition.abort();
}
},
/**
* Pause listening. annyang will stop responding to commands (until the resume or start methods are called), without turning off the browser's SpeechRecognition engine or the mic.
*
* Alternatively, to stop the SpeechRecognition engine and close the mic, use abort() instead.
* @see [abort()](#abort)
*
* @method pause
*/
pause: function() {
pauseListening = true;
},
/**
* Resumes listening and restores command callback execution when a result matches.
* If SpeechRecognition was aborted (stopped), start it.
*
* @method resume
*/
resume: function() {
annyang.start();
},
/**
* Turn on output of debug messages to the console. Ugly, but super-handy!
*
* @param {boolean} [newState=true] - Turn on/off debug messages
* @method debug
*/
debug: function(newState = true) {
debugState = !!newState;
},
/**
* Set the language the user will speak in. If this method is not called, defaults to 'en-US'.
*
* @param {String} language - The language (locale)
* @method setLanguage
* @see [Languages](https://github.com/TalAter/annyang/blob/master/docs/FAQ.md#what-languages-are-supported)
*/
setLanguage: function(language) {
initIfNeeded();
recognition.lang = language;
},
/**
* Add commands that annyang will respond to. Similar in syntax to init(), but doesn't remove existing commands.
*
* #### Examples:
* ````javascript
* var commands = {'hello :name': helloFunction, 'howdy': helloFunction};
* var commands2 = {'hi': helloFunction};
*
* annyang.addCommands(commands);
* annyang.addCommands(commands2);
* // annyang will now listen to all three commands
* ````
*
* @param {Object} commands - Commands that annyang should listen to
* @method addCommands
* @see [Commands Object](#commands-object)
*/
addCommands: function(commands) {
var cb;
initIfNeeded();
for (let phrase in commands) {
if (commands.hasOwnProperty(phrase)) {
cb = root[commands[phrase]] || commands[phrase];
if (typeof cb === 'function') {
// convert command to regex then register the command
registerCommand(commandToRegExp(phrase), cb, phrase);
} else if (typeof cb === 'object' && cb.regexp instanceof RegExp) {
// register the command
registerCommand(new RegExp(cb.regexp.source, 'i'), cb.callback, phrase);
} else {
if (debugState) {
logMessage('Can not register command: %c'+phrase, debugStyle);
}
continue;
}
}
}
},
/**
* Remove existing commands. Called with a single phrase, array of phrases, or methodically. Pass no params to remove all commands.
*
* #### Examples:
* ````javascript
* var commands = {'hello': helloFunction, 'howdy': helloFunction, 'hi': helloFunction};
*
* // Remove all existing commands
* annyang.removeCommands();
*
* // Add some commands
* annyang.addCommands(commands);
*
* // Don't respond to hello
* annyang.removeCommands('hello');
*
* // Don't respond to howdy or hi
* annyang.removeCommands(['howdy', 'hi']);
* ````
* @param {String|Array|Undefined} [commandsToRemove] - Commands to remove
* @method removeCommands
*/
removeCommands: function(commandsToRemove) {
if (commandsToRemove === undefined) {
commandsList = [];
} else {
commandsToRemove = Array.isArray(commandsToRemove) ? commandsToRemove : [commandsToRemove];
commandsList = commandsList.filter(command => {
for (let i = 0; i<commandsToRemove.length; i++) {
if (commandsToRemove[i] === command.originalPhrase) {
return false;
}
}
return true;
});
}
},
/**
* Add a callback function to be called in case one of the following events happens:
*
* * `start` - Fired as soon as the browser's Speech Recognition engine starts listening
* * `soundstart` - Fired as soon as any sound (possibly speech) has been detected.
* This will fire once per Speech Recognition starting. See https://is.gd/annyang_sound_start
* * `error` - Fired when the browser's Speech Recogntion engine returns an error, this generic error callback will be followed by more accurate error callbacks (both will fire if both are defined)
* Callback function will be called with the error event as the first argument
* * `errorNetwork` - Fired when Speech Recognition fails because of a network error
* Callback function will be called with the error event as the first argument
* * `errorPermissionBlocked` - Fired when the browser blocks the permission request to use Speech Recognition.
* Callback function will be called with the error event as the first argument
* * `errorPermissionDenied` - Fired when the user blocks the permission request to use Speech Recognition.
* Callback function will be called with the error event as the first argument
* * `end` - Fired when the browser's Speech Recognition engine stops
* * `result` - Fired as soon as some speech was identified. This generic callback will be followed by either the `resultMatch` or `resultNoMatch` callbacks.
* Callback functions for to this event will be called with an array of possible phrases the user said as the first argument
* * `resultMatch` - Fired when annyang was able to match between what the user said and a registered command
* Callback functions for this event will be called with three arguments in the following order:
* * The phrase the user said that matched a command
* * The command that was matched
* * An array of possible alternative phrases the user might have said
* * `resultNoMatch` - Fired when what the user said didn't match any of the registered commands.
* Callback functions for this event will be called with an array of possible phrases the user might've said as the first argument
*
* #### Examples:
* ````javascript
* annyang.addCallback('error', function() {
* $('.myErrorText').text('There was an error!');
* });
*
* annyang.addCallback('resultMatch', function(userSaid, commandText, phrases) {
* console.log(userSaid); // sample output: 'hello'
* console.log(commandText); // sample output: 'hello (there)'
* console.log(phrases); // sample output: ['hello', 'halo', 'yellow', 'polo', 'hello kitty']
* });
*
* // pass local context to a global function called notConnected
* annyang.addCallback('errorNetwork', notConnected, this);
* ````
* @param {String} type - Name of event that will trigger this callback
* @param {Function} callback - The function to call when event is triggered
* @param {Object} [context] - Optional context for the callback function
* @method addCallback
*/
addCallback: function(type, callback, context) {
var cb = root[callback] || callback;
if (typeof cb === 'function' && callbacks[type] !== undefined) {
callbacks[type].push({callback: cb, context: context || this});
}
},
/**
* Remove callbacks from events.
*
* - Pass an event name and a callback command to remove that callback command from that event type.
* - Pass just an event name to remove all callback commands from that event type.
* - Pass undefined as event name and a callback command to remove that callback command from all event types.
* - Pass no params to remove all callback commands from all event types.
*
* #### Examples:
* ````javascript
* annyang.addCallback('start', myFunction1);
* annyang.addCallback('start', myFunction2);
* annyang.addCallback('end', myFunction1);
* annyang.addCallback('end', myFunction2);
*
* // Remove all callbacks from all events:
* annyang.removeCallback();
*
* // Remove all callbacks attached to end event:
* annyang.removeCallback('end');
*
* // Remove myFunction2 from being called on start:
* annyang.removeCallback('start', myFunction2);
*
* // Remove myFunction1 from being called on all events:
* annyang.removeCallback(undefined, myFunction1);
* ````
*
* @param type Name of event type to remove callback from
* @param callback The callback function to remove
* @returns undefined
* @method removeCallback
*/
removeCallback: function(type, callback) {
var compareWithCallbackParameter = function(cb) {
return cb.callback !== callback;
};
// Go over each callback type in callbacks store object
for (let callbackType in callbacks) {
if (callbacks.hasOwnProperty(callbackType)) {
// if this is the type user asked to delete, or he asked to delete all, go ahead.
if (type === undefined || type === callbackType) {
// If user asked to delete all callbacks in this type or all types
if (callback === undefined) {
callbacks[callbackType] = [];
} else {
// Remove all matching callbacks
callbacks[callbackType] = callbacks[callbackType].filter(compareWithCallbackParameter);
}
}
}
}
},
/**
* Returns true if speech recognition is currently on.
* Returns false if speech recognition is off or annyang is paused.
*
* @return boolean true = SpeechRecognition is on and annyang is listening
* @method isListening
*/
isListening: function() {
return isListening && !pauseListening;
},
/**
* Returns the instance of the browser's SpeechRecognition object used by annyang.
* Useful in case you want direct access to the browser's Speech Recognition engine.
*
* @returns SpeechRecognition The browser's Speech Recognizer currently used by annyang
* @method getSpeechRecognizer
*/
getSpeechRecognizer: function() {
return recognition;
},
/**
* Simulate speech being recognized. This will trigger the same events and behavior as when the Speech Recognition
* detects speech.
*
* Can accept either a string containing a single sentence, or an array containing multiple sentences to be checked
* in order until one of them matches a command (similar to the way Speech Recognition Alternatives are parsed)
*
* #### Examples:
* ````javascript
* annyang.trigger('Time for some thrilling heroics');
* annyang.trigger(
* ['Time for some thrilling heroics', 'Time for some thrilling aerobics']
* );
* ````
*
* @param string|array sentences A sentence as a string or an array of strings of possible sentences
* @returns undefined
* @method trigger
*/
trigger: function(sentences) {
if(!annyang.isListening()) {
if (debugState) {
if (!isListening) {
logMessage('Cannot trigger while annyang is aborted');
} else {
logMessage('Speech heard, but annyang is paused');
}
}
return;
}
if (!Array.isArray(sentences)) {
sentences = [sentences];
}
parseResults(sentences);
}
};
return annyang;
}));
/**
* # Good to Know
*
* ## Commands Object
*
* Both the [init()]() and addCommands() methods receive a `commands` object.
*
* annyang understands commands with `named variables`, `splats`, and `optional words`.
*
* * Use `named variables` for one word arguments in your command.
* * Use `splats` to capture multi-word text at the end of your command (greedy).
* * Use `optional words` or phrases to define a part of the command as optional.
*
* #### Examples:
* ````html
* <script>
* var commands = {
* // annyang will capture anything after a splat (*) and pass it to the function.
* // e.g. saying "Show me Batman and Robin" will call showFlickr('Batman and Robin');
* 'show me *tag': showFlickr,
*
* // A named variable is a one word variable, that can fit anywhere in your command.
* // e.g. saying "calculate October stats" will call calculateStats('October');
* 'calculate :month stats': calculateStats,
*
* // By defining a part of the following command as optional, annyang will respond
* // to both: "say hello to my little friend" as well as "say hello friend"
* 'say hello (to my little) friend': greeting
* };
*
* var showFlickr = function(tag) {
* var url = 'http://api.flickr.com/services/rest/?tags='+tag;
* $.getJSON(url);
* }
*
* var calculateStats = function(month) {
* $('#stats').text('Statistics for '+month);
* }
*
* var greeting = function() {
* $('#greeting').text('Hello!');
* }
* </script>
* ````
*
* ### Using Regular Expressions in commands
* For advanced commands, you can pass a regular expression object, instead of
* a simple string command.
*
* This is done by passing an object containing two properties: `regexp`, and
* `callback` instead of the function.
*
* #### Examples:
* ````javascript
* var calculateFunction = function(month) { console.log(month); }
* var commands = {
* // This example will accept any word as the "month"
* 'calculate :month stats': calculateFunction,
* // This example will only accept months which are at the start of a quarter
* 'calculate :quarter stats': {'regexp': /^calculate (January|April|July|October) stats$/, 'callback': calculateFunction}
* }
````
*
*/

2
js/getmdl-select.min.js vendored Normal file
View File

@@ -0,0 +1,2 @@
"use strict";!function(){function e(){getmdlSelect.init(".getmdl-select")}window.addEventListener?window.addEventListener("load",e,!1):window.attachEvent&&window.attachEvent("onload",e)}();var getmdlSelect={_defaultValue:{width:300},_addEventListeners:function(e){var t=e.querySelector("input"),n=e.querySelector('input[type="hidden"]'),l=e.querySelectorAll("li"),a=e.querySelector(".mdl-js-menu"),o=e.querySelector(".mdl-icon-toggle__label"),i="",c="",s="",u=!1,d=function(o){var i=o.textContent.trim();if(t.value=i,l.forEach(function(e){e.classList.remove("selected")}),o.classList.add("selected"),e.MaterialTextfield.change(i),setTimeout(function(){e.MaterialTextfield.updateClasses_()},250),n.value=o.dataset.val||"",c=t.value,s=n.value,"createEvent"in document){var u=document.createEvent("HTMLEvents");u.initEvent("change",!1,!0),a.MaterialMenu.hide(),t.dispatchEvent(u)}else t.fireEvent("onchange")},r=function(){u=!1,t.value=c,n.value=s,e.querySelector(".mdl-menu__container").classList.contains("is-visible")||e.classList.remove("is-focused");var l=document.querySelectorAll(".getmdl-select .mdl-js-menu");[].forEach.call(l,function(e){e.MaterialMenu.hide()});var o=new Event("closeSelect");a.dispatchEvent(o)};document.body.addEventListener("click",r,!1),e.onkeydown=function(l){9==l.keyCode&&(t.value=c,n.value=s,a.MaterialMenu.hide(),e.classList.remove("is-focused"))},t.onfocus=function(e){a.MaterialMenu.show(),a.focus(),u=!0},t.onblur=function(e){e.stopPropagation()},t.onclick=function(t){t.stopPropagation(),a.classList.contains("is-visible")?(a.MaterialMenu.hide(),u=!1):(a.MaterialMenu.show(),r(),e.classList.add("is-focused"),u=!0)},t.onkeydown=function(l){27==l.keyCode&&(t.value=c,n.value=s,a.MaterialMenu.hide(),e.MaterialTextfield.onBlur_(),""!==i&&(e.querySelector(".mdl-textfield__label").textContent=i,i=""))},a.addEventListener("closeSelect",function(l){t.value=c,n.value=s,e.classList.remove("is-focused"),""!==i&&(e.querySelector(".mdl-textfield__label").textContent=i,i="")}),a.onkeydown=function(l){27==l.keyCode&&(t.value=c,n.value=s,e.classList.remove("is-focused"),""!==i&&(e.querySelector(".mdl-textfield__label").textContent=i,i=""))},o&&(o.onclick=function(l){l.stopPropagation(),u?(a.MaterialMenu.hide(),u=!1,e.classList.remove("is-focused"),e.MaterialTextfield.onBlur_(),t.value=c,n.value=s):(r(),e.MaterialTextfield.onFocus_(),t.focus(),a.MaterialMenu.show(),u=!0)}),[].forEach.call(l,function(n){n.onfocus=function(){e.classList.add("is-focused");var l=n.textContent.trim();t.value=l,e.classList.contains("mdl-textfield--floating-label")||""!=i||(i=e.querySelector(".mdl-textfield__label").textContent.trim(),e.querySelector(".mdl-textfield__label").textContent="")},n.onclick=function(){d(n)},n.dataset.selected&&d(n)})},init:function(e){var t=document.querySelectorAll(e);[].forEach.call(t,function(e){getmdlSelect._addEventListeners(e),componentHandler.upgradeElement(e),componentHandler.upgradeElement(e.querySelector("ul"))})}};
//# sourceMappingURL=getmdl-select.min.js.map

6227
js/index.js Normal file

File diff suppressed because it is too large Load Diff

4
js/jquery-1.11.1.min.js vendored Normal file

File diff suppressed because one or more lines are too long

114
js/jquery.cookie.js Normal file
View File

@@ -0,0 +1,114 @@
/*!
* jQuery Cookie Plugin v1.4.1
* https://github.com/carhartl/jquery-cookie
*
* Copyright 2006, 2014 Klaus Hartl
* Released under the MIT license
*/
(function (factory) {
if (typeof define === 'function' && define.amd) {
// AMD (Register as an anonymous module)
define(['jquery'], factory);
} else if (typeof exports === 'object') {
// Node/CommonJS
module.exports = factory(require('jquery'));
} else {
// Browser globals
factory(jQuery);
}
}(function ($) {
var pluses = /\+/g;
function encode(s) {
return config.raw ? s : encodeURIComponent(s);
}
function decode(s) {
return config.raw ? s : decodeURIComponent(s);
}
function stringifyCookieValue(value) {
return encode(config.json ? JSON.stringify(value) : String(value));
}
function parseCookieValue(s) {
if (s.indexOf('"') === 0) {
// This is a quoted cookie as according to RFC2068, unescape...
s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\');
}
try {
// Replace server-side written pluses with spaces.
// If we can't decode the cookie, ignore it, it's unusable.
// If we can't parse the cookie, ignore it, it's unusable.
s = decodeURIComponent(s.replace(pluses, ' '));
return config.json ? JSON.parse(s) : s;
} catch(e) {}
}
function read(s, converter) {
var value = config.raw ? s : parseCookieValue(s);
return $.isFunction(converter) ? converter(value) : value;
}
var config = $.cookie = function (key, value, options) {
// Write
if (arguments.length > 1 && !$.isFunction(value)) {
options = $.extend({}, config.defaults, options);
if (typeof options.expires === 'number') {
var days = options.expires, t = options.expires = new Date();
t.setMilliseconds(t.getMilliseconds() + days * 864e+5);
}
return (document.cookie = [
encode(key), '=', stringifyCookieValue(value),
options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
options.path ? '; path=' + options.path : '',
options.domain ? '; domain=' + options.domain : '',
options.secure ? '; secure' : ''
].join(''));
}
// Read
var result = key ? undefined : {},
// To prevent the for loop in the first place assign an empty array
// in case there are no cookies at all. Also prevents odd result when
// calling $.cookie().
cookies = document.cookie ? document.cookie.split('; ') : [],
i = 0,
l = cookies.length;
for (; i < l; i++) {
var parts = cookies[i].split('='),
name = decode(parts.shift()),
cookie = parts.join('=');
if (key === name) {
// If second argument (value) is a function it's a converter...
result = read(cookie, value);
break;
}
// Prevent storing a cookie that we couldn't decode.
if (!key && (cookie = read(cookie)) !== undefined) {
result[name] = cookie;
}
}
return result;
};
config.defaults = {};
$.removeCookie = function (key, options) {
// Must not alter options, thus extending a fresh object...
$.cookie(key, '', $.extend({}, options, { expires: -1 }));
return !$.cookie(key);
};
}));

10
js/jquery.mobile-1.4.5.min.js vendored Normal file

File diff suppressed because one or more lines are too long

2
js/jquery.storageapi.min.js vendored Normal file

File diff suppressed because one or more lines are too long

11
js/jquery.ui.touch-punch.min.js vendored Normal file
View File

@@ -0,0 +1,11 @@
/*!
* jQuery UI Touch Punch 0.2.3
*
* Copyright 20112014, Dave Furfero
* Dual licensed under the MIT or GPL Version 2 licenses.
*
* Depends:
* jquery.ui.widget.js
* jquery.ui.mouse.js
*/
!function(a){function f(a,b){if(!(a.originalEvent.touches.length>1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);

519
js/json2.js Normal file
View File

@@ -0,0 +1,519 @@
/*
json2.js
2015-05-03
Public Domain.
NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
See http://www.JSON.org/js.html
This code should be minified before deployment.
See http://javascript.crockford.com/jsmin.html
USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO
NOT CONTROL.
This file creates a global JSON object containing two methods: stringify
and parse. This file is provides the ES5 JSON capability to ES3 systems.
If a project might run on IE8 or earlier, then this file should be included.
This file does nothing on ES5 systems.
JSON.stringify(value, replacer, space)
value any JavaScript value, usually an object or array.
replacer an optional parameter that determines how object
values are stringified for objects. It can be a
function or an array of strings.
space an optional parameter that specifies the indentation
of nested structures. If it is omitted, the text will
be packed without extra whitespace. If it is a number,
it will specify the number of spaces to indent at each
level. If it is a string (such as '\t' or '&nbsp;'),
it contains the characters used to indent at each level.
This method produces a JSON text from a JavaScript value.
When an object value is found, if the object contains a toJSON
method, its toJSON method will be called and the result will be
stringified. A toJSON method does not serialize: it returns the
value represented by the name/value pair that should be serialized,
or undefined if nothing should be serialized. The toJSON method
will be passed the key associated with the value, and this will be
bound to the value
For example, this would serialize Dates as ISO strings.
Date.prototype.toJSON = function (key) {
function f(n) {
// Format integers to have at least two digits.
return n < 10
? '0' + n
: n;
}
return this.getUTCFullYear() + '-' +
f(this.getUTCMonth() + 1) + '-' +
f(this.getUTCDate()) + 'T' +
f(this.getUTCHours()) + ':' +
f(this.getUTCMinutes()) + ':' +
f(this.getUTCSeconds()) + 'Z';
};
You can provide an optional replacer method. It will be passed the
key and value of each member, with this bound to the containing
object. The value that is returned from your method will be
serialized. If your method returns undefined, then the member will
be excluded from the serialization.
If the replacer parameter is an array of strings, then it will be
used to select the members to be serialized. It filters the results
such that only members with keys listed in the replacer array are
stringified.
Values that do not have JSON representations, such as undefined or
functions, will not be serialized. Such values in objects will be
dropped; in arrays they will be replaced with null. You can use
a replacer function to replace those with JSON values.
JSON.stringify(undefined) returns undefined.
The optional space parameter produces a stringification of the
value that is filled with line breaks and indentation to make it
easier to read.
If the space parameter is a non-empty string, then that string will
be used for indentation. If the space parameter is a number, then
the indentation will be that many spaces.
Example:
text = JSON.stringify(['e', {pluribus: 'unum'}]);
// text is '["e",{"pluribus":"unum"}]'
text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t');
// text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]'
text = JSON.stringify([new Date()], function (key, value) {
return this[key] instanceof Date
? 'Date(' + this[key] + ')'
: value;
});
// text is '["Date(---current time---)"]'
JSON.parse(text, reviver)
This method parses a JSON text to produce an object or array.
It can throw a SyntaxError exception.
The optional reviver parameter is a function that can filter and
transform the results. It receives each of the keys and values,
and its return value is used instead of the original value.
If it returns what it received, then the structure is not modified.
If it returns undefined then the member is deleted.
Example:
// Parse the text. Values that look like ISO date strings will
// be converted to Date objects.
myData = JSON.parse(text, function (key, value) {
var a;
if (typeof value === 'string') {
a =
/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
if (a) {
return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],
+a[5], +a[6]));
}
}
return value;
});
myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) {
var d;
if (typeof value === 'string' &&
value.slice(0, 5) === 'Date(' &&
value.slice(-1) === ')') {
d = new Date(value.slice(5, -1));
if (d) {
return d;
}
}
return value;
});
This is a reference implementation. You are free to copy, modify, or
redistribute.
*/
/*jslint
eval, for, this
*/
/*property
JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,
getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,
lastIndex, length, parse, prototype, push, replace, slice, stringify,
test, toJSON, toString, valueOf
*/
// Create a JSON object only if one does not already exist. We create the
// methods in a closure to avoid creating global variables.
if (typeof JSON !== 'object') {
JSON = {};
}
(function () {
'use strict';
var rx_one = /^[\],:{}\s]*$/,
rx_two = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
rx_three = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
rx_four = /(?:^|:|,)(?:\s*\[)+/g,
rx_escapable = /[\\\"\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
rx_dangerous = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
function f(n) {
// Format integers to have at least two digits.
return n < 10
? '0' + n
: n;
}
function this_value() {
return this.valueOf();
}
if (typeof Date.prototype.toJSON !== 'function') {
Date.prototype.toJSON = function () {
return isFinite(this.valueOf())
? this.getUTCFullYear() + '-' +
f(this.getUTCMonth() + 1) + '-' +
f(this.getUTCDate()) + 'T' +
f(this.getUTCHours()) + ':' +
f(this.getUTCMinutes()) + ':' +
f(this.getUTCSeconds()) + 'Z'
: null;
};
Boolean.prototype.toJSON = this_value;
Number.prototype.toJSON = this_value;
String.prototype.toJSON = this_value;
}
var gap,
indent,
meta,
rep;
function quote(string) {
// If the string contains no control characters, no quote characters, and no
// backslash characters, then we can safely slap some quotes around it.
// Otherwise we must also replace the offending characters with safe escape
// sequences.
rx_escapable.lastIndex = 0;
return rx_escapable.test(string)
? '"' + string.replace(rx_escapable, function (a) {
var c = meta[a];
return typeof c === 'string'
? c
: '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
}) + '"'
: '"' + string + '"';
}
function str(key, holder) {
// Produce a string from holder[key].
var i, // The loop counter.
k, // The member key.
v, // The member value.
length,
mind = gap,
partial,
value = holder[key];
// If the value has a toJSON method, call it to obtain a replacement value.
if (value && typeof value === 'object' &&
typeof value.toJSON === 'function') {
value = value.toJSON(key);
}
// If we were called with a replacer function, then call the replacer to
// obtain a replacement value.
if (typeof rep === 'function') {
value = rep.call(holder, key, value);
}
// What happens next depends on the value's type.
switch (typeof value) {
case 'string':
return quote(value);
case 'number':
// JSON numbers must be finite. Encode non-finite numbers as null.
return isFinite(value)
? String(value)
: 'null';
case 'boolean':
case 'null':
// If the value is a boolean or null, convert it to a string. Note:
// typeof null does not produce 'null'. The case is included here in
// the remote chance that this gets fixed someday.
return String(value);
// If the type is 'object', we might be dealing with an object or an array or
// null.
case 'object':
// Due to a specification blunder in ECMAScript, typeof null is 'object',
// so watch out for that case.
if (!value) {
return 'null';
}
// Make an array to hold the partial results of stringifying this object value.
gap += indent;
partial = [];
// Is the value an array?
if (Object.prototype.toString.apply(value) === '[object Array]') {
// The value is an array. Stringify every element. Use null as a placeholder
// for non-JSON values.
length = value.length;
for (i = 0; i < length; i += 1) {
partial[i] = str(i, value) || 'null';
}
// Join all of the elements together, separated with commas, and wrap them in
// brackets.
v = partial.length === 0
? '[]'
: gap
? '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']'
: '[' + partial.join(',') + ']';
gap = mind;
return v;
}
// If the replacer is an array, use it to select the members to be stringified.
if (rep && typeof rep === 'object') {
length = rep.length;
for (i = 0; i < length; i += 1) {
if (typeof rep[i] === 'string') {
k = rep[i];
v = str(k, value);
if (v) {
partial.push(quote(k) + (
gap
? ': '
: ':'
) + v);
}
}
}
} else {
// Otherwise, iterate through all of the keys in the object.
for (k in value) {
if (Object.prototype.hasOwnProperty.call(value, k)) {
v = str(k, value);
if (v) {
partial.push(quote(k) + (
gap
? ': '
: ':'
) + v);
}
}
}
}
// Join all of the member texts together, separated with commas,
// and wrap them in braces.
v = partial.length === 0
? '{}'
: gap
? '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}'
: '{' + partial.join(',') + '}';
gap = mind;
return v;
}
}
// If the JSON object does not yet have a stringify method, give it one.
if (typeof JSON.stringify !== 'function') {
meta = { // table of character substitutions
'\b': '\\b',
'\t': '\\t',
'\n': '\\n',
'\f': '\\f',
'\r': '\\r',
'"': '\\"',
'\\': '\\\\'
};
JSON.stringify = function (value, replacer, space) {
// The stringify method takes a value and an optional replacer, and an optional
// space parameter, and returns a JSON text. The replacer can be a function
// that can replace values, or an array of strings that will select the keys.
// A default replacer method can be provided. Use of the space parameter can
// produce text that is more easily readable.
var i;
gap = '';
indent = '';
// If the space parameter is a number, make an indent string containing that
// many spaces.
if (typeof space === 'number') {
for (i = 0; i < space; i += 1) {
indent += ' ';
}
// If the space parameter is a string, it will be used as the indent string.
} else if (typeof space === 'string') {
indent = space;
}
// If there is a replacer, it must be a function or an array.
// Otherwise, throw an error.
rep = replacer;
if (replacer && typeof replacer !== 'function' &&
(typeof replacer !== 'object' ||
typeof replacer.length !== 'number')) {
throw new Error('JSON.stringify');
}
// Make a fake root object containing our value under the key of ''.
// Return the result of stringifying the value.
return str('', {'': value});
};
}
// If the JSON object does not yet have a parse method, give it one.
if (typeof JSON.parse !== 'function') {
JSON.parse = function (text, reviver) {
// The parse method takes a text and an optional reviver function, and returns
// a JavaScript value if the text is a valid JSON text.
var j;
function walk(holder, key) {
// The walk method is used to recursively walk the resulting structure so
// that modifications can be made.
var k, v, value = holder[key];
if (value && typeof value === 'object') {
for (k in value) {
if (Object.prototype.hasOwnProperty.call(value, k)) {
v = walk(value, k);
if (v !== undefined) {
value[k] = v;
} else {
delete value[k];
}
}
}
}
return reviver.call(holder, key, value);
}
// Parsing happens in four stages. In the first stage, we replace certain
// Unicode characters with escape sequences. JavaScript handles many characters
// incorrectly, either silently deleting them, or treating them as line endings.
text = String(text);
rx_dangerous.lastIndex = 0;
if (rx_dangerous.test(text)) {
text = text.replace(rx_dangerous, function (a) {
return '\\u' +
('0000' + a.charCodeAt(0).toString(16)).slice(-4);
});
}
// In the second stage, we run the text against regular expressions that look
// for non-JSON patterns. We are especially concerned with '()' and 'new'
// because they can cause invocation, and '=' because it can cause mutation.
// But just to be safe, we want to reject all unexpected forms.
// We split the second stage into 4 regexp operations in order to work around
// crippling inefficiencies in IE's and Safari's regexp engines. First we
// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we
// replace all simple value tokens with ']' characters. Third, we delete all
// open brackets that follow a colon or comma or that begin the text. Finally,
// we look to see that the remaining characters are only whitespace or ']' or
// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.
if (
rx_one.test(
text
.replace(rx_two, '@')
.replace(rx_three, ']')
.replace(rx_four, '')
)
) {
// In the third stage we use the eval function to compile the text into a
// JavaScript structure. The '{' operator is subject to a syntactic ambiguity
// in JavaScript: it can begin a block or an object literal. We wrap the text
// in parens to eliminate the ambiguity.
j = eval('(' + text + ')');
// In the optional fourth stage, we recursively walk the new structure, passing
// each name/value pair to a reviver function for possible transformation.
return typeof reviver === 'function'
? walk({'': j}, '')
: j;
}
// If the text is not JSON parseable, then a SyntaxError is thrown.
throw new SyntaxError('JSON.parse');
};
}
}());

10
js/jszip-utils.min.js vendored Normal file
View File

@@ -0,0 +1,10 @@
/*!
JSZipUtils - A collection of cross-browser utilities to go along with JSZip.
<http://stuk.github.io/jszip-utils>
(c) 2014 Stuart Knightley, David Duponchel
Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip-utils/master/LICENSE.markdown.
*/
!function(a){"object"==typeof exports?module.exports=a():"function"==typeof define&&define.amd?define(a):"undefined"!=typeof window?window.JSZipUtils=a():"undefined"!=typeof global?global.JSZipUtils=a():"undefined"!=typeof self&&(self.JSZipUtils=a())}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=c[g]={exports:{}};b[g][0].call(j.exports,function(a){var c=b[g][1][a];return e(c?c:a)},j,j.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g<d.length;g++)e(d[g]);return e}({1:[function(a,b){"use strict";function c(){try{return new window.XMLHttpRequest}catch(a){}}function d(){try{return new window.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}}var e={};e._getBinaryFromXHR=function(a){return a.response||a.responseText};var f=window.ActiveXObject?function(){return c()||d()}:c;e.getBinaryContent=function(a,b){try{var c=f();c.open("GET",a,!0),"responseType"in c&&(c.responseType="arraybuffer"),c.overrideMimeType&&c.overrideMimeType("text/plain; charset=x-user-defined"),c.onreadystatechange=function(){var d,f;if(4===c.readyState)if(200===c.status||0===c.status){d=null,f=null;try{d=e._getBinaryFromXHR(c)}catch(g){f=new Error(g)}b(f,d)}else b(new Error("Ajax error for "+a+" : "+this.status+" "+this.statusText),null)},c.send()}catch(d){b(new Error(d),null)}},b.exports=e},{}]},{},[1])(1)});

15
js/jszip.min.js vendored Normal file

File diff suppressed because one or more lines are too long

5
js/leaflet.js Normal file

File diff suppressed because one or more lines are too long

4
js/osrm.js Normal file

File diff suppressed because one or more lines are too long

1
js/sweetalert2.min.js vendored Normal file

File diff suppressed because one or more lines are too long

BIN
logoEmtusaAzul152.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

41
manifest.json Normal file
View File

@@ -0,0 +1,41 @@
{
"name": "Emtusa WebApp",
"short_name": "APPEmtusa",
"icons": [
{
"src": "logoEmtusaAzul16.png",
"sizes": "16x16",
"type": "image/png",
"density": 1.0
},
{
"src": "logoEmtusaAzul152.png",
"sizes": "152x152",
"type": "image/png",
"density": 1.0
},
{
"src": "logoEmtusaAzul196.png",
"sizes": "196x196",
"type": "image/png",
"density": 1.0
}
],
"permissions": ["http://www.emtusahuelva.es/","http://www.emtusahuelva.com/"],
"description": "Aplicacion de autobuses de Huelva",
"start_url": "index.html",
"display": "standalone",
"orientation": "landscape",
"background_color": "#169FF1",
"theme_color": "#169FF1",
"dir": "ltr",
"related_applications": [
{
"platform": "play",
"url": "https://play.google.com/store/apps/details?id=net.tecnosis.EmtusaHuelva",
"id": "net.tecnosis.EmtusaHuelva"
}, {
"platform": "itunes",
"url": "https://itunes.apple.com/es/app/appemtusa-mapa-lineas-y-paradas/id1134003175?mt=8"
}]
}

6227
slick/index.js Normal file

File diff suppressed because it is too large Load Diff

204
slick/slick-theme.css Normal file
View File

@@ -0,0 +1,204 @@
@charset 'UTF-8';
/* Slider */
.slick-loading .slick-list
{
background: #fff url('./ajax-loader.gif') center center no-repeat;
}
/* Icons */
@font-face
{
font-family: 'slick';
font-weight: normal;
font-style: normal;
src: url('./fonts/slick.eot');
src: url('./fonts/slick.eot?#iefix') format('embedded-opentype'), url('./fonts/slick.woff') format('woff'), url('./fonts/slick.ttf') format('truetype'), url('./fonts/slick.svg#slick') format('svg');
}
/* Arrows */
.slick-prev,
.slick-next
{
font-size: 0;
line-height: 0;
position: absolute;
top: 50%;
display: block;
width: 20px;
height: 20px;
padding: 0;
-webkit-transform: translate(0, -50%);
-ms-transform: translate(0, -50%);
transform: translate(0, -50%);
cursor: pointer;
color: transparent;
border: none;
outline: none;
background: transparent;
}
.slick-prev:hover,
.slick-prev:focus,
.slick-next:hover,
.slick-next:focus
{
color: transparent;
outline: none;
background: transparent;
}
.slick-prev:hover:before,
.slick-prev:focus:before,
.slick-next:hover:before,
.slick-next:focus:before
{
opacity: 1;
}
.slick-prev.slick-disabled:before,
.slick-next.slick-disabled:before
{
opacity: .25;
}
.slick-prev:before,
.slick-next:before
{
font-family: 'slick';
font-size: 20px;
line-height: 1;
opacity: .75;
color: white;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.slick-prev
{
left: -25px;
}
[dir='rtl'] .slick-prev
{
right: -25px;
left: auto;
}
.slick-prev:before
{
content: '←';
}
[dir='rtl'] .slick-prev:before
{
content: '→';
}
.slick-next
{
right: -25px;
}
[dir='rtl'] .slick-next
{
right: auto;
left: -25px;
}
.slick-next:before
{
content: '→';
}
[dir='rtl'] .slick-next:before
{
content: '←';
}
/* Dots */
.slick-dotted.slick-slider
{
margin-bottom: 30px;
}
.slick-dots
{
position: absolute;
bottom: -25px;
display: block;
width: 100%;
padding: 0;
margin: 0;
list-style: none;
text-align: center;
}
.slick-dots li
{
position: relative;
display: inline-block;
width: 20px;
height: 20px;
margin: 0 5px;
padding: 0;
cursor: pointer;
}
.slick-dots li button
{
font-size: 0;
line-height: 0;
display: block;
width: 20px;
height: 20px;
padding: 5px;
cursor: pointer;
color: transparent;
border: 0;
outline: none;
background: transparent;
}
.slick-dots li button:hover,
.slick-dots li button:focus
{
outline: none;
}
.slick-dots li button:hover:before,
.slick-dots li button:focus:before
{
opacity: 1;
}
.slick-dots li button:before
{
font-family: 'slick';
font-size: 6px;
line-height: 20px;
position: absolute;
top: 0;
left: 0;
width: 20px;
height: 20px;
content: '•';
text-align: center;
opacity: .25;
color: black;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.slick-dots li.slick-active button:before
{
opacity: .75;
color: black;
}

119
slick/slick.css Normal file
View File

@@ -0,0 +1,119 @@
/* Slider */
.slick-slider
{
position: relative;
display: block;
box-sizing: border-box;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
-webkit-touch-callout: none;
-khtml-user-select: none;
-ms-touch-action: pan-y;
touch-action: pan-y;
-webkit-tap-highlight-color: transparent;
}
.slick-list
{
position: relative;
display: block;
overflow: hidden;
margin: 0;
padding: 0;
}
.slick-list:focus
{
outline: none;
}
.slick-list.dragging
{
cursor: pointer;
cursor: hand;
}
.slick-slider .slick-track,
.slick-slider .slick-list
{
-webkit-transform: translate3d(0, 0, 0);
-moz-transform: translate3d(0, 0, 0);
-ms-transform: translate3d(0, 0, 0);
-o-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
}
.slick-track
{
position: relative;
top: 0;
left: 0;
display: block;
margin-left: auto;
margin-right: auto;
}
.slick-track:before,
.slick-track:after
{
display: table;
content: '';
}
.slick-track:after
{
clear: both;
}
.slick-loading .slick-track
{
visibility: hidden;
}
.slick-slide
{
display: none;
float: left;
height: 100%;
min-height: 1px;
}
[dir='rtl'] .slick-slide
{
float: right;
}
.slick-slide img
{
display: block;
}
.slick-slide.slick-loading img
{
display: none;
}
.slick-slide.dragging img
{
pointer-events: none;
}
.slick-initialized .slick-slide
{
display: block;
}
.slick-loading .slick-slide
{
visibility: hidden;
}
.slick-vertical .slick-slide
{
display: block;
height: auto;
border: 1px solid transparent;
}
.slick-arrow.slick-hidden {
display: none;
}

1
slick/slick.min.js vendored Normal file

File diff suppressed because one or more lines are too long