Cambios para integrar los episodios de animes.

master
Araozu 2020-05-04 21:56:03 -05:00
parent fa70eb8540
commit 85c5032f3b
12 changed files with 162 additions and 114 deletions

View File

@ -47,7 +47,7 @@
{
"anime_id": 29,
"titulo": "Irozuku Sekai no Ashita Kara",
"link": "/Anime/2018/Otono/IrozuKai",
"link": "/Anime/IrozuKai",
"imgurl": "https://cdn.myanimelist.net/images/anime/1424/93855l.jpg",
"descripcion": "Ambientada en la ciudad de Nagasaki, la historia tiene lugar en un mundo en el que una cantidad minúscula de magia permanece en la vida cotidiana. Hitomi Tsukishiro es una descendiente de 17 años de una familia de brujas que creció con emociones vivas, ya que perdió su sentido del color a una edad muy temprana. Sintiéndose mal por el futuro de su nieta, Kohaku, una gran bruja, envía a Hitomi al pasado, el año 2018. Mediante intercambios con su abuela de 17 años y los miembros de su club, la historia sigue el crecimiento de Hitomi como persona.",
"estudio": "P.A. Works",
@ -62,7 +62,7 @@
{
"anime_id": 28,
"titulo": "Goblin Slayer",
"link": "/Anime/2018/Otono/Goblin-Slayer",
"link": "/Anime/Goblin-Slayer",
"imgurl": "https://cdn.myanimelist.net/images/anime/1949/93415l.jpg",
"descripcion": "Una joven sacerdotisa formó su primer grupo de aventureros, pero casi inmediatamente se encuentran angustiados. Es el Asesino de Duendes que viene a su rescate, un hombre que dedicó su vida al exterminio de todos los duendes, por cualquier medio necesario. Y cuando los rumores de sus hazañas comienzan a circular, no hay forma de saber quién podría venir a continuación...",
"estudio": "White Fox",
@ -77,7 +77,7 @@
{
"anime_id": 27,
"titulo": "Overlord 3",
"link": "/Anime/2018/Verano/Overlord-3",
"link": "/Anime/Overlord-3",
"imgurl": "https://cdn.myanimelist.net/images/anime/1511/93473l.jpg",
"descripcion": "Tercera temporada de Overlord.",
"estudio": "Madhouse",
@ -92,7 +92,7 @@
{
"anime_id": 26,
"titulo": "Banana Fish",
"link": "/Anime/2018/Verano/Banana-Fish",
"link": "/Anime/Banana-Fish",
"imgurl": "https://cdn.myanimelist.net/images/anime/1190/93472l.jpg",
"descripcion": "La naturaleza hizo a Ash Lynx hermoso; la crianza lo convirtió en un asesino despiadado y frío. Un fugitivo lo crió como el heredero adoptivo y el juguete sexual de Papa Dino Golzine, Ash, ahora a la edad rebelde de diecisiete años, abandona el reino sostenido por el diablo que lo crió.",
"estudio": "MAPPA",
@ -107,7 +107,7 @@
{
"anime_id": 25,
"titulo": "Steins;Gate 0",
"link": "/Anime/2018/Primavera/Steins;Gate-0",
"link": "/Anime/Steins-Gate-0",
"imgurl": "https://cdn.myanimelist.net/images/anime/1768/93520l.jpg",
"descripcion": "La oscura historia no contada de Steins;Gate muestra al excéntrico científico loco Okabe, que lucha por recuperarse de un intento fallido de rescatar a Kurisu. Decide darse por vencido y abandona a su animado álter ego científico, en la búsqueda de olvidar el pasado. Cuando todo parece ser normal, aparentemente recuerda el pasado al conocer a un conocido de Kurisu... ",
"estudio": "White Fox",
@ -122,7 +122,7 @@
{
"anime_id": 24,
"titulo": "Mahou Shoujo Site",
"link": "/Anime/2018/Primavera/Mahou-Shoujo-Site",
"link": "/Anime/Mahou-Shoujo-Site",
"imgurl": "https://cdn.myanimelist.net/images/anime/1720/95064l.jpg",
"descripcion": "Aya Asagiri es una chica de secundaria que tiene problemas tanto en la escuela con el acoso escolar como en el hogar debido al abuso físico de su hermano. Al navegar en línea, aparece un sitio web en su computadora con una persona de aspecto espeluznante. Esta persona parece tener piedad de ella, y anuncia que le ha otorgado poderes mágicos a Asagiri. ",
"estudio": "production doA",
@ -137,7 +137,7 @@
{
"anime_id": 23,
"titulo": "Wotaku ni Koi wa Muzukashii",
"link": "/Anime/2018/Primavera/WotaKoi",
"link": "/Anime/WotaKoi",
"imgurl": "https://cdn.myanimelist.net/images/anime/1864/93518l.jpg",
"descripcion": "Después de descubrir que trabajan en la misma compañía, un otaku enloquecido y un fujoshi se reúnen por primera vez desde la secundaria. Después de algunas sesiones de bebida después del trabajo comienzan a salir, pero ¿será una relación perfecta para los dos? ",
"estudio": "A-1 Pictures",
@ -152,7 +152,7 @@
{
"anime_id": 22,
"titulo": "Shokugeki no Soma: San no Sara - Toutsuki Ressha-hen",
"link": "/Anime/2018/Primavera/Shokugeki-no-Soma-3-2",
"link": "/Anime/Shokugeki-no-Soma-3-2",
"imgurl": "https://cdn.myanimelist.net/images/anime/1604/93531l.jpg",
"descripcion": "El segundo platillo de Shokugeki no Soma: San no Sara",
"estudio": "J.C. Staff",
@ -167,7 +167,7 @@
{
"anime_id": 21,
"titulo": "Violet Evergarden",
"link": "/Anime/2018/Invierno/Violet-Evergarden",
"link": "/Anime/Violet-Evergarden",
"imgurl": "https://cdn.myanimelist.net/images/anime/1795/95088l.jpg",
"descripcion": "Hay palabras que Violet escuchó en el campo de batalla, las cuales no puede olvidar. Esas palabras le fueron dadas por alguien que conocía, más que nadie. Ella aún no conoce su significado. ",
"estudio": "Kyoto Animation",
@ -182,7 +182,7 @@
{
"anime_id": 20,
"titulo": "Inuyashiki",
"link": "/Anime/2017/Otono/Inuyashiki",
"link": "/Anime/Inuyashiki",
"imgurl": "https://cdn.myanimelist.net/images/anime/3/88470l.jpg",
"descripcion": "Inuyashiki Ichirou está de mala suerte. Justo cuando parece que las cosas no pueden empeorar, una luz cegadora en el cielo nocturno golpea la tierra donde se encuentra Ichirou. ",
"estudio": "MAPPA",
@ -197,7 +197,7 @@
{
"anime_id": 19,
"titulo": "Kekkai Sensen and Beyond",
"link": "/Anime/2017/Otono/Kekkai-Sensen-Beyond",
"link": "/Anime/Kekkai-Sensen-Beyond",
"imgurl": "https://cdn.myanimelist.net/images/anime/9/88281l.jpg",
"descripcion": "Segunda temporada de Kekkai Sensen.",
"estudio": "Bones",
@ -212,7 +212,7 @@
{
"anime_id": 18,
"titulo": "Just Because!",
"link": "/Anime/2017/Otono/Just-Because",
"link": "/Anime/Just-Because",
"imgurl": "https://cdn.myanimelist.net/images/anime/3/88185l.jpg",
"descripcion": "Al final del segundo semestre del tercer año de preparatoria, cuatro estudiantes están listos para graduarse y pueden sentir el final de su vida en la preparatoria. Pero eso cambia un poco con la llegada de un estudiante transferido. ",
"estudio": "Pine Jam",
@ -227,7 +227,7 @@
{
"anime_id": 17,
"titulo": "Shokugeki no Soma: San no Sara",
"link": "/Anime/2017/Otono/Shokugeki-no-Soma-3",
"link": "/Anime/Shokugeki-no-Soma-3",
"imgurl": "https://cdn.myanimelist.net/images/anime/4/86603l.jpg",
"descripcion": "Tercera temporada de Shokugeki no Soma",
"estudio": "J.C. Staff",
@ -242,7 +242,7 @@
{
"anime_id": 16,
"titulo": "Kakegurui",
"link": "/Anime/2017/Verano/Kakegurui",
"link": "/Anime/Kakegurui",
"imgurl": "https://cdn.myanimelist.net/images/anime/3/86578l.jpg",
"descripcion": "Academia Privada Hyakkaou. Una institución para los privilegiados con un currículo muy peculiar. Veras, cuando eres de los hijos e hijas de los más ricos de los ricos, no es la destreza atlética o la inteligencia lo que te mantiene por delante. Es leer a tu oponente, el arte del trato. ¿Qué mejor manera de afilar esas habilidades que con un riguroso plan de estudios de juegos de azar? ",
"estudio": "MAPPA",
@ -257,7 +257,7 @@
{
"anime_id": 15,
"titulo": "Re:Creators",
"link": "/Anime/2017/Verano/Re:Creators",
"link": "/Anime/Re:Creators",
"imgurl": "https://cdn.myanimelist.net/images/anime/11/85469l.jpg",
"descripcion": "Los humanos han creado muchas historias. Felicidad, tristeza, ira, emociones profundas. Las historias sacuden nuestro corazón y nos fascinan. Sin embargo, estos son sólo los pensamientos de los espectadores. Pero ¿y si los personajes de la historia tienen intenciones?",
"estudio": "TROYCA",
@ -272,7 +272,7 @@
{
"anime_id": 14,
"titulo": "Flip Flappers",
"link": "/Anime/2016/Otono/Flip-Flappers",
"link": "/Anime/Flip-Flappers",
"imgurl": "https://cdn.myanimelist.net/images/anime/4/82292l.jpg",
"descripcion": "Cocona, que lleva una vida normal, se encuentra un día con Papika, y juntas van a Pure Illusion, a conseguir fragmentos, que se dice pueden conceder deseos.",
"estudio": "Studio 3Hz",

View File

@ -19,10 +19,27 @@
components:
'barra-lateral': barraLateral
mounted: ->
store = @$store
resTxt = await fetch "#{this.$store.state.servidor}/data/animes.json"
resultado = await resTxt.json()
store.commit "establecerAnime", resultado
vm = this
do =>
resTxt = await fetch "#{@$store.state.servidor}/data/animes.json"
resultado = await resTxt.json()
vm.$store.commit "establecerAnime", resultado
do =>
epsRaw = await fetch "#{@$store.state.servidor}/data/episodios.json"
eps = await epsRaw.json()
vm.$store.commit "establecerEpisodios", eps
do =>
epsOpcRaw = await fetch "#{@$store.state.servidor}/data/episodios_opciones.json"
epsOpc = await epsOpcRaw.json()
vm.$store.commit "establecerEpisodiosOpciones", epsOpc
do =>
epsOpcMetaRaw = await fetch "#{@$store.state.servidor}/data/episodios_opciones_meta.json"
epsOpcMeta = await epsOpcMetaRaw.json()
vm.$store.commit "establecerEpisodiosOpcionesMeta", epsOpcMeta
#

View File

@ -19,11 +19,11 @@
div.temporada Temporada: {{ anime.temporada + " " + anime.anio }}
div.fuente Fuente: {{ anime.fuente }}
div.generos Generos: {{ anime.generos }}
op-ed(:anime_ID="anime.anime_ID" :color="anime.color")
op-ed(:anime_ID="anime.anime_id" :color="anime.color")
br
div.tarjeta.aviso(:style="colorBackground") {{ aviso }}
br
panel-de-descarga(:animeid="anime.anime_ID" :color="anime.color"
panel-de-descarga(:animeid="anime.anime_id" :color="anime.color"
:cambiar-aviso="cambiarAviso")
br
div.tarjeta.background__disqus
@ -58,7 +58,9 @@
vm = this
animes = @$store.state.animes
resultado = -1
console.log animes
for anime in animes
console.log "Param is #{@$route.params.nombre}"
if anime.link is "/Anime/" + @$route.params.nombre
vm.anime = anime
resultado = 1
@ -80,9 +82,7 @@
]
#
#
</script>
<style scoped lang="sass">

View File

@ -25,8 +25,7 @@
<span v-for="(ep, num) in opcion.eps" class="panel__descripcion__link">
<br>
Episodio {{ num }} ->
<a :href="ep.link" target="_blank" :style="'color: ' + balancearColor"
@mousedown.stop="incrementarContador(ep.ep_ID, $event)">
<a :href="ep.link" target="_blank" :style="'color: ' + balancearColor">
{{ ep.peso }}
</a>
</span>
@ -42,13 +41,11 @@
</template>
<script>
import YAML from "yaml"
const esModoOscuro = false;
export default {
name: "panelDeDescarga",
data: function () {
data () {
return {
posActual: '1',
datos: {},
@ -70,6 +67,11 @@
required: true
}
},
watch: {
epsOpcionesMeta() {
this.actualizarEpsOpciones();
}
},
computed: {
balancearColor() {
const color = this.color;
@ -85,6 +87,12 @@
return color;
}
},
epsOpciones() {
return this.$store.state.episodios_opciones;
},
epsOpcionesMeta() {
return this.$store.state.episodios_opciones_meta;
}
},
methods: {
@ -119,22 +127,41 @@
elemNuevo + " " + elemAnterior + " " + opcionAnterior + " " + opcionNueva);
}
},
incrementarContador(ep_ID, evento) {
const xhr = new XMLHttpRequest();
xhr.open("PUT", `${this.$store.state.servidor}/links`);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.onload = () => {
console.log(xhr.responseText);
};
xhr.send(`ep_ID=${ep_ID}`);
actualizarEpsOpciones() {
console.log("Llamando...");
const vm = this;
const epsOpciones = this.epsOpciones;
const epsOpcionesMeta = this.epsOpcionesMeta;
if (epsOpcionesMeta.length > 0) {
const opcionMeta = epsOpcionesMeta.find(x => x.anime_id === this.animeid);
vm.mostrarSpinnerParaCargaDeEps = false;
this.datos = epsOpciones;
this.datosCorrectos = true;
vm.cambiarAviso(opcionMeta.aviso);
} else {
vm.mostrarSpinnerParaCargaDeEps = false;
}
}
},
created() {
mounted () {
console.log("Montado");
this.actualizarEpsOpciones();
}
/*
mounted() {
const xhr = new XMLHttpRequest();
const vm = this;
const epsOpciones = this.$store.state.episodios_opciones;
if (epsOpciones.length > 0) {
const epsOpciones = epsOpciones.filter(x => true);
vm.mostrarSpinnerParaCargaDeEps = false;
this.datos = epsOpciones;
this.datosCorrectos = true;
} else {
vm.mostrarSpinnerParaCargaDeEps = false;
}
xhr.open("POST", `${this.$store.state.servidor}/links`);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.onload = () => {
@ -156,7 +183,7 @@
};
xhr.send(`animeID=${this.animeid}`);
}
} // */
}
</script>

View File

@ -1,25 +1,14 @@
<template lang="pug">
div(:id="`tarjeta${indice}`" :style="indice !== '1'? 'display: none' : ''")
div.notf(v-if="enEmision")
div.titulo(:style="'color: ' + color") Notificaciones
br
div.notf--ind(v-if="$store.state.navegador_hash !== '' || true")
boton-nuevos-eps(:opcion="opcion.opcion_ID")
span Avísame cuando salgan nuevos episodios.
template(v-else)
span Suscríbete&nbsp;
router-link(to="/ajustes" :style="'color: ' + color") aquí
span &nbsp;para recibir notificaciones cuando salgan episodios nuevos.
br
div.titulo(:style="'color: ' + color") Links
p Todos los links se abren en una pestaña nueva.<br>
span.link(v-for="(ep, num) in opcion.eps")
br
span Episodio {{ num }} ->
span Episodio {{ ep.num_ep }} ->&nbsp;
a(
:href="ep.link" target="_blank" :style="'color: ' + color"
@mousedown.stop="incrementarContador(ep.ep_ID, $event)"
) {{ ep.peso }}
//
</template>
<!-- TODO: arreglar funcionamiento de los links -->
@ -32,7 +21,7 @@
"boton-nuevos-eps": botonNuevosEps
props:
indice:
type: String
type: Number
required: true
opcion:
type: Object

View File

@ -45,6 +45,10 @@
cambiarAviso:
type: Function,
required: true
computed:
eps: -> @$store.state.episodios
epsOpciones: -> @$store.state.episodios_opciones
epsOpcionesMeta: -> @$store.state.episodios_opciones_meta
methods:
cambiarDescripcionDescarga: (idDestino) ->
quitarClase = (nombre, nombreClase) =>
@ -84,30 +88,40 @@
console.log xhr.responseText
xhr.send "ep_ID=#{ep_ID}"
created: ->
xhr = new XMLHttpRequest()
vm = this
actualizarOpciones: () ->
vm = this
eps = @eps
epsOpciones = @epsOpciones
epsOpcionesMeta = @epsOpcionesMeta
animeId = @animeid
if epsOpcionesMeta.length > 0
opcionMeta = epsOpcionesMeta.find (x) => x.anime_id == animeId
if opcionMeta?
opciones = epsOpciones.filter (x) => x.links_id == opcionMeta.links_id
vm.mostrarSpinnerParaCargaDeEps = false
vm.datos = opciones.map (opcion) =>
episodios = eps.filter (ep) => ep.opcion_id == opcion.opcion_id
console.log episodios
{ eps: episodios, opcion... }
xhr.open "POST", "#{this.$store.state.servidor}/links"
xhr.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
xhr.onload = ->
try
data = YAML.parse xhr.responseText
if data.exito
vm.datos = data.payload["opciones"]
vm.sigEp = data.payload.sigEp
vm.datosCorrectos = true
vm.cambiarAviso data.payload.aviso
vm.cambiarAviso(opcionMeta.aviso)
else
vm.mostrarSpinnerParaCargaDeEps = false
console.log ("Error al recibir los eps del anime. resp:\n" + xhr.responseText)
catch e
else
vm.mostrarSpinnerParaCargaDeEps = false
console.log ("Error al recibir los eps del anime:\n" + e + "\n" + xhr.responseText)
xhr.send "animeID=#{this.animeid}"
#
created: ->
vm = this
intervalo = setInterval (=>
if vm.epsOpciones.length > 0 && vm.epsOpcionesMeta.length > 0 && vm.eps.length > 0
clearInterval intervalo
vm.actualizarOpciones()
), 250
#
</script>
<style scoped lang="sass">

View File

@ -15,7 +15,7 @@
name: "variante"
props:
indice:
type: String
type: Number
required: true
opcion:
type: Object

View File

@ -16,14 +16,6 @@
hr
br
router-link(to="/")
i.material-icons.texto2.mostrarEnTablet(title="Nosotros") group
br.mostrarEnTablet
router-link(to="/")
i.material-icons.texto2.mostrarEnTablet(title="Ayuda") help
br.mostrarEnTablet
a(href="https://github.com/Araozu/PseudoSubs_" target="_blank" title="GitHub")
img.imgGitHub.texto2.mostrarEnTablet(
:src="modoSiguiente === 'oscuro'? '/img/github.svg': '/img/githubOsc.svg' ")
@ -47,7 +39,7 @@
div.inferior.texto2.fondo1.mostrarEnMovil
span.tituloInf
template(v-for="i in $store.state.rutaActual")
router-link.linkBarra(:to="i.ruta") {{ i.nombre }}
router-link.linkBarra(:to="i.ruta? i.ruta: '/'") {{ i.nombre }}
span >
div.links
i.material-icons.texto2.mostrarEnTablet(@click="cambiarModoColor()").

View File

@ -4,15 +4,36 @@ import YAML from "yaml"
Vue.use(Vuex)
DEV = process.env.NODE_ENV == "development"
almacenarEnLocalStorage = (clave, valor, fnActualizar) =>
datosTxt = JSON.stringify valor
datosLocal = localStorage?.getItem clave
unless datosTxt is datosLocal
localStorage?.setItem clave, datosTxt
fnActualizar valor
export default new Vuex.Store
state:
servidor: unless DEV then "" else ""
servidor: ""
animes:
if localStorage?
YAML.parse ((localStorage.getItem "animes") ? "[]")
JSON.parse ((localStorage.getItem "animes") ? "[]")
else []
episodios:
if localStorage?
JSON.parse ((localStorage.getItem "episodios") ? "[]")
else []
episodios_opciones:
if localStorage?
JSON.parse ((localStorage.getItem "episodios_opciones") ? "[]")
else []
episodios_opciones_meta:
if localStorage?
JSON.parse ((localStorage.getItem "episodios_opciones_meta") ? "[]")
else []
modoColor: (localStorage?.getItem "modoColor") ? "claro"
@ -29,19 +50,25 @@ export default new Vuex.Store
suscripciones:
if localStorage?
YAML.parse ((localStorage.getItem "suscripciones") ? "{}")
JSON.parse ((localStorage.getItem "suscripciones") ? "{}")
else {}
mutations:
establecerAnime: (state, animes) ->
animesTxt = YAML.stringify animes
animesLocal = localStorage?.getItem "animes"
unless animesTxt is animesLocal
localStorage?.setItem "animes", animesTxt
state.animes = animes
if DEV then console.log "Actualicé los animes"
else
if DEV then console.log "Ahorré tener que actualizar todo v:"
fnActualizar = (v) => state.animes = v
almacenarEnLocalStorage "animes", animes, fnActualizar
establecerEpisodios: (state, episodios) ->
fnActualizar = (v) => state.episodios = v
almacenarEnLocalStorage "episodios", episodios, fnActualizar
establecerEpisodiosOpciones: (state, episodios) ->
fnActualizar = (v) => state.episodios_opciones = v
almacenarEnLocalStorage "episodios_opciones", episodios, fnActualizar
establecerEpisodiosOpcionesMeta: (state, episodios) ->
fnActualizar = (v) => state.episodios_opciones_meta = v
almacenarEnLocalStorage "episodios_opciones_meta", episodios, fnActualizar
cambiarModoColor: (state, color) ->
state.modoColor = color
@ -61,22 +88,4 @@ export default new Vuex.Store
cambiarRutaActual: (state, valor) ->
state.rutaActual = valor
cambiarNavegador_hash: (state, valor) ->
state.navegador_hash = valor
if localStorage? then localStorage.setItem "navegador_hash", valor
agregarSuscripcion: (state, opcion) ->
nuevasSuscr = Object.assign({}, state.suscripciones)
nuevasSuscr[opcion] = true
state.suscripciones = nuevasSuscr
if localStorage?
localStorage.setItem "suscripciones", (YAML.stringify nuevasSuscr)
eliminarSuscripcion: (state, opcion) ->
nuevasSuscr = Object.assign {}, state.suscripciones[opcion]
delete nuevasSuscr[opcion]
state.suscripciones = nuevasSuscr
if localStorage?
localStorage.setItem "suscripciones", (YAML.stringify nuevasSuscr)
actions: {}