Agregada funcionalidad minima.

This commit is contained in:
Araozu 2020-01-22 19:18:07 -05:00
parent 15ec2e23bf
commit a389cfb28a
25 changed files with 1272 additions and 8350 deletions

View File

@ -4,19 +4,26 @@
"private": true,
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build"
"build": "vue-cli-service build --modern",
"deploy": "vue-cli-service build --modern & cd dist & surge"
},
"dependencies": {
"core-js": "^3.3.2",
"register-service-worker": "^1.6.2",
"vue": "^2.6.10",
"vue-router": "^3.1.3",
"vuex": "^3.0.1"
"vuex": "^3.0.1",
"yaml": "^1.7.2"
},
"devDependencies": {
"@vue/cli-plugin-babel": "^4.0.0",
"@vue/cli-plugin-pwa": "^4.0.0",
"@vue/cli-service": "^4.0.0",
"coffee-loader": "^0.9.0",
"coffeescript": "^2.4.1",
"normalize-css": "^2.3.1",
"pug": "^2.0.4",
"pug-plain-loader": "^1.0.0",
"sass": "^1.19.0",
"sass-loader": "^8.0.0",
"vue-template-compiler": "^2.6.10"

1
public/CNAME Normal file
View File

@ -0,0 +1 @@
https://araozu.pro

View File

@ -0,0 +1,413 @@
titulo: Horarios 2018-2, Ingeniería de Sistemas.
años:
1er año:
Calculo 1:
nombre: Cálculo en 1 variable
abreviado: C1V
Teoria:
A:
Docente: Doris Tupacyupanqui
Horas:
- Ma1130
- Ma1220
- Ma1310
- Mi0850
- Mi0940
- Vi0700
- Vi0750
B:
Docente: Pablo Quicaño
Horas:
- Lu1640
- Ma1740
- Ma1830
- Ma1920
- Ju1740
- Ju1920
- Ju1830
Discretas 2:
nombre: Estructuras Discretas 2
abreviado: ED2
Teoria:
A:
Docente: Olha Sharhorodska
Horas:
- Mi1220
- Mi1310
- Ju1220
- Ju1310
B:
Docente: Olha Sharhorodska
Horas:
- Mi1400
- Mi1450
- Vi1550
- Vi1640
Web 1:
nombre: Programacion Web 1
abreviado: PW1
Teoria:
A:
Docente: Richart Escobedo
Horas:
- Ma0940
- Ma1040
B:
Docente: Carlo Corrales
Horas:
- Lu1220
- Lu1310
Laboratorio:
A:
Docente: Richart Escobedo
Horas:
- Ma1130
- Ma1220
- Mi0850
- Mi0940
B:
Docente: Carlo Corrales
Horas:
- Lu1400
- Lu1450
- Mi1550
- Mi1640
C:
Docente: Richart Escobedo
Horas:
- Ma1550
- Ma1640
- Lu1740
- Lu1830
D:
Docente: Carlo Corrales
Horas:
- Lu1740
- Lu1830
- Mi1740
- Mi1830
E:
Docente: Carlo Corrales
Horas:
- Lu1550
- Lu1640
- Ma1740
- Ma1830
FP2:
nombre: Fundamentos de Programacion 2
abreviado: FP2
Teoria:
A:
Docente: Marco Aedo
Horas:
- Lu0850
- Lu0940
- Vi1220
- Vi1310
B:
Docente: Marco Aedo
Horas:
- Ju1550
- Ju1640
- Vi1400
- Vi1450
Laboratorio:
A:
Docente: Marco Aedo
Horas:
- Lu1040
- Lu1130
- Ju1040
- Ju1130
B:
Docente: Marco Aedo
Horas:
- Ju1400
- Ju1450
- Vi1550
- Vi1640
C:
Docente: Marco Aedo
Horas:
- Ju0850
- Ju0940
- Vi1040
- Vi1130
D:
Docente: Karim Guevara
Horas:
- Vi0850
- Vi0940
- Ju0850
- Ju0940
E:
Docente: Ernesto Suarez
Horas:
- Mi1040
- Mi1130
- Ju0700
- Ju0750
Comunicacion Integral:
nombre: Comunicacion Integral
abreviado: CI
Teoria:
A:
Docente: "?"
Horas:
- Lu0700
- Lu0750
- Mi0700
- Mi0750
B:
Docente: "?"
Horas:
- Ma1400
- Ma1450
- Ju1400
- Ju1450
Realidad Nacional:
nombre: Realidad Nacional
abreviado: RN
Teoria:
A:
Docente: "?"
Horas:
- Ma0700
- Ma0750
- Ma0850
B:
Docente: "?"
Horas:
- Lu1400
- Lu1450
- Lu1550
2do año:
Ecologia:
nombre: Ecologia y Medio Ambiente
abreviado: ECA
Teoria:
A:
Docente: "?"
Horas:
- Lu0700
- Lu0750
- Lu0850
B:
Docente: "?"
Horas:
- Mi1400
- Mi1450
- Mi1550
Estadistica:
nombre: Estadistica y Matematica
abreviado: EMAT
Teoria:
A:
Docente: Antonia Quispe
Horas:
- Mi0700
- Mi0750
- Vi0850
- Vi0940
B:
Docente: Esther Yanapa
Horas:
- Ma1550
- Ma1640
- Ju1830
- Ju1920
Laboratorio:
A:
Docente: Antonia Quispe
Horas:
- Mi0850
- Mi0940
B:
Docente: Esther Yanapa
Horas:
- Ma1740
- Ma1830
C:
Docente: Esther Yanapa
Horas:
- Ma0700
- Ma0750
D:
Docente: Esther Yanapa
Horas:
- Ma0850
- Ma0940
Arquitectura de Computadoras:
nombre: Arquitectura de Computadoras
abreviado: AC
Teoria:
A:
Docente: Pedro Rodriguez Gonzales
Horas:
- Ju0850
- Ju0940
- Vi1040
B:
Docente: Pedro Rodriguez Gonzales
Horas:
- Ju1550
- Ju1640
- Ju1740
Laboratorio:
A:
Docente: Pedro Rodriguez Gonzales
Horas:
- Ju0700
- Ju0750
B:
Docente: Pedro Rodriguez Gonzales
Horas:
- Vi1220
- Vi1310
C:
Docente: Pedro Rodriguez Gonzales
Horas:
- Vi0700
- Vi0750
D:
Docente: Pedro Rodriguez Gonzales
Horas:
- Vi0850
- Vi0940
Metodos de Investigacion y Redaccion:
nombre: Metodos de Investigacion y Redaccion
abreviado: MIR
Teoria:
A:
Docente: Jesus Zuniga Cueva
Horas:
- Mi1040
- Mi1130
- Mi1220
B:
Docente: Jesus Zuniga Cueva
Horas:
- Lu1220
- Lu1310
- Mi1310
C:
Docente: Jesus Zuniga Cueva
Horas:
- Ma1040
- Ma1130
- Ma1220
Interaccion Humano Computador->IHC:
nombre: Interaccion Humano Computador
abreviado: IHC
Teoria:
A:
Docente: Olha Sharhorodska
Horas:
- Ju1040
- Ju1130
- Vi1220
- Vi1310
B:
Docente: Olha Sharhorodska
Horas:
- Ju1400
- Ju1450
- Vi1400
- Vi1450
Laboratorio:
A:
Docente: Richart Escobedo
Horas:
- Lu1040
- Lu1130
B:
Docente: Richart Escobedo
Horas:
- Lu1550
- Lu1640
C:
Docente: Richart Escobedo
Horas:
- Ma1740
- Ma1830
D:
Docente: Juan Ramirez Ticona
Horas:
- Lu1550
- Lu1640
Enfoque Empresarial->EE:
nombre: Enfoque Empresarial
abreviado: EE
Teoria:
A:
Docente: Juan C. Juarez Bueno
Horas:
- Lu0940
- Ma0850
- Ma0940
- Ju1220
- Ju1310
B:
Docente: Juan C. Juarez Bueno
Horas:
- Ma1310
- Ma1400
- Ma1450
- Vi1550
- Vi1640
Analisis y Disenio de Algoritmos->ADA:
nombre: Analisis y Diseño de Algoritmos
abreviado: ADA
Teoria:
A:
Docente: Atencio Torres Carlos
Horas:
- Lu1400
- Lu1450
- Vi0700
- Vi0750
B:
Docente: Atencio Torres Carlos
Horas:
- Lu1740
- Lu1830
- Vi1740
- Vi1830
Laboratorio:
A:
Docente: Christian Portugal
Horas:
- Lu1400
- Lu1450
B:
Docente: Christian Portugal
Horas:
- Mi1550
- Mi1640
C:
Docente: Christian Portugal
Horas:
- Mi1740
- Mi1830
3er año:
Construccion de Software->CS: {}
Redes y Comunicacion de Datos-> RCD: {}
Tecnologia de Objetos->TO: {}
4to año:
Aspectos Formales de Verif. y Esp.->AFVE: {}
Gestion de Proyectos de Software->GPS: {}
5to año:
Topicos Avanzados en Ing. de Software->TAIS: {}
Practicas Pre-Profesionales:
nombre: Practicas Pre-Profesionales
abreviado: PPP
Teoria:
A:
Docente: Ernesto Suarez
Horas:
- Ma1550
- Ma1640
- Mi0700
- Mi0750
- Ju0850
- Ju0940

View File

@ -0,0 +1,125 @@
titulo: Horarios 2019-2, Ingeniería de Sistemas.
años:
2do año:
Estadistica:
nombre: Estadistica Matemática, Probabilidades y Métodos Empíricos
abreviado: EMAT
Teoria:
A:
Docente: Antonia Quispe
Horas:
- Lu0850
- Lu0940
- Ju0700
- Ju0750
B:
Docente: Antonia Quispe
Horas:
- Ma1040
- Ma1130
- Ju1640
- Ju1740
Laboratorio:
A:
Docente: Antonia Quispe
Horas:
- Ma0850
- Ma0940
B:
Docente: Antonia Quispe
Horas:
- Lu1040
- Lu1130
C:
Docente: Antonia Quispe
Horas:
- Ju0850
- Ju0940
D:
Docente: Antonia Quispe
Horas:
- Vi1040
- Vi1130
Analisis y Diseño de Algoritmos:
nombre: Analisis y Diseño de Algoritmos
abreviado: ADA
Teoria:
A:
Docente: O. Ramirez
Horas:
- Lu1400
- Lu1450
- Mi1550
- Mi1640
B:
Docente: O. Ramirez
Horas:
- Lu1550
- Lu1640
- Mi1740
- Mi1830
Laboratorio:
A:
Docente: Cristian Portugal
Horas:
- Lu1400
- Lu1450
B:
Docente: Cristian Portugal
Horas:
- Lu1550
- Lu1640
C:
Docente: Cristian Portugal
Horas:
- Lu1740
- Lu1830
Enfoque Empresarial:
nombre: Enfoque Empresarial
abreviado: EE
Teoria:
A:
Docente: Juan C. Juarez
Horas:
- Lu1040
- Lu1130
- Lu1220
- Mi0850
- Mi0940
B:
Docente: Edward Zarate
Horas:
- Lu1830
- Ma1400
- Ma1450
- Vi1550
- Vi1640
3er año:
Construccion de Software:
nombre: Construcción de Software
abreviado: CS
Teoria:
A:
Docente: V. Cornejo
Horas:
- Lu0850
- Lu0940
Sistemas Operativos:
nombre: Sistemas Operativos
abreviado: SO
Teoria:
A:
Docente: Karim Guevara
Horas:
- Ma0700
- Ma0750
- Ju0700
- Ju0750
B:
Docente: Karim Guevara
Horas:
- Ju1400
- Ju1450
- Vi1400
- Vi1450

View File

@ -5,11 +5,19 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
<title>horarios</title>
<title>Horarios UNSA</title>
<link href="https://fonts.googleapis.com/css?family=Roboto&display=swap" rel="stylesheet">
</head>
<body>
<noscript>
<strong>We're sorry but horarios doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
<strong>
Increible lo que se puede hacer hoy en dia... Con JavaScript.
<br>
<br>
Actívalo para acceder a la página.
</strong>
</noscript>
<div id="app"></div>
<!-- built files will be auto injected -->

View File

@ -1,32 +1,37 @@
<template>
<div id="app">
<div id="nav">
<router-link to="/">Home</router-link> |
<router-link to="/about">About</router-link>
</div>
<router-view/>
</div>
<template lang="pug">
div.contenedor
barra-lateral
div.der(:style="'max-height: ' + alto + 'px;'")
router-view
//
</template>
<style lang="scss">
#app {
font-family: 'Avenir', Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
}
<script lang="coffee">
import barraLateral from "./components/App/barra-lateral.vue"
#nav {
padding: 30px;
export default
name: "App"
components: { barraLateral }
data: ->
alto: window.innerHeight
a {
font-weight: bold;
color: #2c3e50;
#
</script>
&.router-link-exact-active {
color: #42b983;
}
}
}
<style lang="sass">
.contenedor
display: grid
grid-template-columns: 400px auto
.der
position: relative
top: 0
right: 0
overflow-y: scroll
overflow-x: hidden
//
</style>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.7 KiB

View File

@ -0,0 +1,51 @@
<template lang="pug">
div.lateral(:style="'min-height: ' + alto + 'px;'")
h1 Horarios UNSA
br
br
div.info
p 2019-2
p Facultad de Producción y Servicios
p Escuela Profesional de Ingeniería de Sistemas
br
br
modo-color
h2 Inicio
h2 Otros
//
</template>
<script lang="coffee">
import modoColor from "./modo-color.vue"
export default
name: "barra-lateral"
components: { modoColor }
data: ->
alto: window.innerHeight
#
</script>
<style scoped lang="sass">
.lateral
display: block
position: relative
top: 0
box-shadow: 2px 0 10px 0 lightgray
h1
text-align: center
h2
margin: 0
padding: 15px 10px
.info p
margin: 10px 20px
font-family: "Product Sans", Roboto, sans-serif
//
</style>

View File

@ -0,0 +1,29 @@
<template lang="pug">
form(@submit.prevent)
label(for="selector_modo_color") Modo de color:
br
select#selector_modo_color(v-model="opcion")
option(selected) Claro
option Oscuro
//
</template>
<script lang="coffee">
export default
name: "modo-color"
data: ->
opcion: "Claro"
watch:
opcion: (nuevo) ->
console.log "Cambiado a #{nuevo}"
#
</script>
<style scoped lang="sass">
//
</style>

View File

@ -1,58 +0,0 @@
<template>
<div class="hello">
<h1>{{ msg }}</h1>
<p>
For a guide and recipes on how to configure / customize this project,<br>
check out the
<a href="https://cli.vuejs.org" target="_blank" rel="noopener">vue-cli documentation</a>.
</p>
<h3>Installed CLI Plugins</h3>
<ul>
<li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-babel" target="_blank" rel="noopener">babel</a></li>
<li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-pwa" target="_blank" rel="noopener">pwa</a></li>
</ul>
<h3>Essential Links</h3>
<ul>
<li><a href="https://vuejs.org" target="_blank" rel="noopener">Core Docs</a></li>
<li><a href="https://forum.vuejs.org" target="_blank" rel="noopener">Forum</a></li>
<li><a href="https://chat.vuejs.org" target="_blank" rel="noopener">Community Chat</a></li>
<li><a href="https://twitter.com/vuejs" target="_blank" rel="noopener">Twitter</a></li>
<li><a href="https://news.vuejs.org" target="_blank" rel="noopener">News</a></li>
</ul>
<h3>Ecosystem</h3>
<ul>
<li><a href="https://router.vuejs.org" target="_blank" rel="noopener">vue-router</a></li>
<li><a href="https://vuex.vuejs.org" target="_blank" rel="noopener">vuex</a></li>
<li><a href="https://github.com/vuejs/vue-devtools#vue-devtools" target="_blank" rel="noopener">vue-devtools</a></li>
<li><a href="https://vue-loader.vuejs.org" target="_blank" rel="noopener">vue-loader</a></li>
<li><a href="https://github.com/vuejs/awesome-vue" target="_blank" rel="noopener">awesome-vue</a></li>
</ul>
</div>
</template>
<script>
export default {
name: 'HelloWorld',
props: {
msg: String
}
}
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped lang="scss">
h3 {
margin: 40px 0 0;
}
ul {
list-style-type: none;
padding: 0;
}
li {
display: inline-block;
margin: 0 10px;
}
a {
color: #42b983;
}
</style>

View File

@ -0,0 +1,32 @@
<template lang="pug">
div
h3 {{ nombreAño }}
tabla-horarios(:nombreAño="nombreAño")
curso(v-for="(curso, n) in año" :key="n" :curso="curso" :nombreAño="nombreAño")
//
</template>
<script lang="coffee">
import curso from "./curso.vue"
import tablaHorarios from "./tabla-horarios.vue"
export default
name: "Anio"
components: { curso, tablaHorarios }
props:
año:
type: Object
required: true
nombreAño:
type: String
required: true
#
</script>
<style scoped lang="sass">
//
</style>

View File

@ -0,0 +1,147 @@
<template lang="pug">
div.info_curso
h4.titulo_curso(@mouseenter="resaltarTodasCeldas" @mouseleave="quitarResaltadoCeldas")
span.ancho {{ curso.abreviado }} >&nbsp;
| {{ curso.nombre }}
table.datos
tr
td(v-for="(grupos, profesor) in teoria")
span.ancho |&nbsp;
| {{ profesor }}
span.ancho.cursor_click.ancho__teoria(
v-for="grupo in grupos"
@mouseenter="resaltarCeldasGrupo(grupo, false)"
@mouseleave="quitarResaltadoGrupo(grupo, false)")
| {{ grupo }}&nbsp;
tr
template(v-if="!laboratorioVacio")
td(v-for="(grupos, profesor) in laboratorio")
span.ancho |&nbsp;
| {{ profesor }}
span.ancho.cursor_click.ancho__lab(
v-for="grupo in grupos"
@mouseenter="resaltarCeldasGrupo(grupo, true)"
@mouseleave="quitarResaltadoGrupo(grupo, true)")
| L{{ grupo }}&nbsp;
template(v-else)
td
span.ancho | _
//
</template>
<script lang="coffee">
import { resaltarCurso, removerResaltadoCurso, resaltarGrupoCurso, removerResaltadoGrupo } from "./tablaHorarios/funcionesResaltado.coffee"
export default
name: "curso"
props:
curso:
type: Object
required: true
nombreAño:
type: String
required: true
computed:
teoria: ->
vm = this
profesores = {}
for n, grupo of vm.curso.Teoria
docente = grupo.Docente
unless profesores[docente]?
profesores[docente] = []
profesores[docente].push(n)
profesores
laboratorio: ->
vm = this
profesores = {}
for n, grupo of vm.curso.Laboratorio
docente = grupo.Docente
unless profesores[docente]?
profesores[docente] = []
profesores[docente].push(n)
profesores
laboratorioVacio: ->
labs = this.laboratorio
estaVacio = yes
for i of labs
estaVacio = no
break
estaVacio
methods:
procesarTeoria: () ->
nombreAño = @nombreAño
cursoAbreviado = @curso.abreviado
curso = @curso
nombreStore = "_" + (nombreAño.substring 0, nombreAño.indexOf " ")
for nombreGrupo, { Horas } of curso.Teoria
for horaId in Horas
datos = { cursoAbreviado, nombreGrupo, esLab: no }
idCelda = nombreStore + horaId
@$store.commit "agregarACelda", {idCelda, datos}
for nombreGrupo, { Horas } of curso.Laboratorio
for horaId in Horas
datos = { cursoAbreviado, nombreGrupo, esLab: yes }
idCelda = nombreStore + horaId
@$store.commit "agregarACelda", {idCelda, datos}
resaltarTodasCeldas: () ->
resaltarCurso @nombreAño, @curso.abreviado
quitarResaltadoCeldas: () ->
removerResaltadoCurso @nombreAño, @curso.abreviado
resaltarCeldasGrupo: (grupo, esLab) ->
resaltarGrupoCurso @nombreAño, @curso.abreviado, grupo, esLab
quitarResaltadoGrupo: (grupo, esLab) ->
removerResaltadoGrupo @nombreAño, @curso.abreviado, grupo, esLab
mounted: ->
@procesarTeoria()
#
</script>
<style scoped lang="sass">
.titulo_curso
display: inline-block
cursor: default
&:hover
text-decoration: underline
.info_curso
display: inline-block
padding: 1rem
vertical-align: top
h4
margin-top: 1rem
margin-bottom: 0.25rem
.teoria, .laboratorio, .datos
white-space: pre
.ancho
font:
family: "Fira Code", monospace
user-select: none
.cursor_click
cursor: pointer
.ancho__teoria:hover
background-color: var(--colorTeoria)
color: white
.ancho__lab:hover
background-color: var(--colorLab)
color: white
//
</style>

View File

@ -0,0 +1,73 @@
<template lang="pug">
table.tabla_horario(border="1")
thead
tr
td Hora
td(v-for="dia in dias") {{ dia }}
tbody
tr(v-for="hora in horas")
td {{ hora }}
celda(v-for="(dia, i) in dias" :key="i"
:dia="dia"
:hora="hora"
:nombreAño="nombreAño"
:nombreStore="nombreStore")
//
</template>
<script lang="coffee">
import celda from "./tablaHorarios/celda.vue"
export default
name: "tabla-horarios"
components: { celda }
data: ->
dias: ["Lunes", "Martes", "Miercoles", "Jueves", "Viernes"]
horas: [
"07:00 - 07:50"
"07:50 - 08:40"
"08:40 - 08:50"
"08:50 - 09:40"
"09:40 - 10:30"
"10:30 - 10:40"
"10:40 - 11:30"
"11:30 - 12:20"
"12:20 - 13:10"
"13:10 - 14:00"
"14:00 - 14:50"
"14:50 - 15:40"
"15:40 - 15:50"
"15:50 - 16:40"
"16:40 - 17:30"
"17:30 - 17:40"
"17:40 - 18:30"
"18:30 - 19:20"
"19:20 - 20:10"
]
props:
nombreAño:
type: String
required: true
computed:
nombreStore: -> "_" + (@nombreAño.substring 0, @nombreAño.indexOf " ")
#
</script>
<style scoped lang="sass">
.tabla_horario
width: 100%
border-color: rgba(135, 135, 135, 0.51)
tr
vertical-align: middle
text-align: center
td:first-child
width: 8rem
//
</style>

View File

@ -0,0 +1,92 @@
<template lang="pug">
span.celda(:class="clases" :eslab="datos.esLab? 'true': 'false'"
@mouseenter="resaltarCeldasGrupo"
@mouseleave="quitarResaltadoGrupo"
@click="toggleActivo")
| {{ datos.cursoAbreviado }}
span {{ (datos.esLab? "L": "") + datos.nombreGrupo }}&nbsp;
//
</template>
<script lang="coffee">
import { resaltarGrupoCurso, removerResaltadoGrupo } from "./funcionesResaltado.coffee"
export default
name: "celda-curso"
props:
datos:
type: Object
required: yes
nombreAño:
type: String
required: yes
data: ->
celdaCursoActiva: no
computed:
clases: ->
res = []
esLab = @datos.esLab
cursoAbreviado = @datos.cursoAbreviado
nombreGrupo = @datos.nombreGrupo
nombreAño = @nombreAño.substring 0, (@nombreAño.indexOf " ")
res.push if esLab then "celda__lab" else "celda__teoria"
# _PW1
res.push "_#{ nombreAño }_#{ cursoAbreviado }"
# _PW1_LB
res.push "_#{ nombreAño }_#{ cursoAbreviado }_#{ if esLab then 'L' else '' }#{ nombreGrupo }"
res
cursoAbreviado: -> @datos.cursoAbreviado
nombreGrupo: -> @datos.nombreGrupo
esLab: -> @datos.esLab
methods:
resaltarCeldasGrupo: () ->
resaltarGrupoCurso @nombreAño, @cursoAbreviado, @nombreGrupo, @esLab
quitarResaltadoGrupo: () ->
removerResaltadoGrupo @nombreAño, @cursoAbreviado, @nombreGrupo, @esLab
activarGrupo: () ->
resaltarGrupoCurso @nombreAño, @cursoAbreviado, @nombreGrupo, @esLab
desactivarGrupo: () ->
removerResaltadoGrupo @nombreAño, @cursoAbreviado, @nombreGrupo, @esLab
# TODO: Hacer que el state se almacene en los elementos HTML en si
toggleActivo: () ->
@celdaCursoActiva = !@celdaCursoActiva
if @celdaCursoActiva
@activarGrupo()
else
@desactivarGrupo()
#
</script>
<style scoped lang="sass">
$duracionTransicion: 100ms
.celda
white-space: pre
font-family: "Fira Code", monospace
cursor: pointer
user-select: none
transition: background-color $duracionTransicion linear, color $duracionTransicion linear
.celda__teoria
color: var(--colorTeoria)
.celda__teoria:hover, .celda__teoria--resaltado, .celda__teoria--activo
background-color: var(--colorTeoria)
color: white
.celda__lab
color: var(--colorLab)
.celda__lab:hover, .celda__lab--resaltado, .celda__lab--activo
background-color: var(--colorLab)
color: white
//
</style>

View File

@ -0,0 +1,77 @@
<template lang="pug">
td(:class="clases")
celda-curso(v-for="(datos, i) in datosCeldas" :key="i" :datos="datos" :nombreAño="nombreAño")
//
</template>
<script lang="coffee">
import celdaCurso from "./celda-curso.vue"
export default
name: "celda",
components: { celdaCurso }
props:
dia:
type: String
required: yes
hora:
type: String
required: yes
nombreAño:
type: String
required: yes
nombreStore:
type: String
required: yes
data: ->
datosCeldas: []
computed:
identificadoresCelda: ->
clases = []
parteDia = @dia.substring 0, 2
clases.push ("_" + parteDia)
parteHora = (@hora.substring 0, 2) + (@hora.substring 3, 5)
clases.push ("_" + parteHora)
clases.push ("_" + parteDia + parteHora)
nombreAño = @nombreAño
claseAño = nombreAño.substring 0, (nombreAño.indexOf " ")
clases.push ("_" + claseAño)
id = "_" + claseAño + parteDia + parteHora
clases.push id
[id, clases]
idCelda: -> @identificadoresCelda[0]
clases: -> @identificadoresCelda[1]
methods:
registrarCelda: -> @$store.commit "registrarCelda", @idCelda
recuperarDatosCeldas: -> @datosCeldas = @$store.state.celdas[@idCelda]
mounted: ->
vm = this
idCelda = @identificadoresCelda[0]
promesa = new Promise (resolve) =>
intervalo = setInterval (=>
unless vm.$store.state.celdas[idCelda] is undefined
clearInterval intervalo
resolve()
), 250
@registrarCelda()
await promesa
@recuperarDatosCeldas()
#
</script>
<style scoped lang="sass">
//
</style>

View File

@ -0,0 +1,84 @@
#: Txt -> Txt -> ()
export resaltarCurso = (nombreAño, cursoAbreviado) =>
nombreAñoF = nombreAño.substring 0, (nombreAño.indexOf " ")
clase = "_#{ nombreAñoF }_#{ cursoAbreviado }"
elementos = document.getElementsByClassName clase
for elemento in elementos
nuevaClase =
if (elemento.getAttribute "eslab") is "true"
"celda__lab--resaltado"
else
"celda__teoria--resaltado"
elemento.className += " #{nuevaClase}"
export removerResaltadoCurso = (nombreAño, cursoAbreviado) =>
nombreAñoF = nombreAño.substring 0, (nombreAño.indexOf " ")
clase = "_#{ nombreAñoF }_#{ cursoAbreviado }"
elementos = document.getElementsByClassName clase
for elemento in elementos
clases = elemento.className
clasesNueva = clases.replace "celda__lab--resaltado", ""
clasesNueva = clasesNueva.replace "celda__teoria--resaltado", ""
elemento.className = clasesNueva
export resaltarGrupoCurso = (nombreAño, cursoAbreviado, grupo, esLab) =>
nombreAñoF = nombreAño.substring 0, (nombreAño.indexOf " ")
clase = "_#{ nombreAñoF }_#{ cursoAbreviado }_#{ (if esLab then 'L' else '') + grupo }"
elementos = document.getElementsByClassName clase
for elemento in elementos
if (elemento.getAttribute "eslab") is esLab.toString()
nuevaClase = "celda__#{ if esLab then 'lab' else 'teoria' }--resaltado"
elemento.className += " #{nuevaClase}"
export removerResaltadoGrupo = (nombreAño, cursoAbreviado, grupo, esLab) =>
nombreAñoF = nombreAño.substring 0, (nombreAño.indexOf " ")
clase = "_#{ nombreAñoF }_#{ cursoAbreviado }_#{ (if esLab then 'L' else '') + grupo }"
elementos = document.getElementsByClassName clase
for elemento in elementos
if (elemento.getAttribute "eslab") is esLab.toString()
clases = elemento.className
clasesNueva = clases.replace "celda__lab--resaltado", ""
clasesNueva = clasesNueva.replace "celda__teoria--resaltado", ""
elemento.className = clasesNueva
export registrarCurso = (nombreAño, cursoAbreviado, grupo, esLab) =>
nombreAñoF = nombreAño.substring 0, (nombreAño.indexOf " ")
clase = "_#{ nombreAñoF }_#{ cursoAbreviado }_#{ (if esLab then 'L' else '') + grupo }"
elementos = document.getElementsByClassName clase
for elemento in elementos
if (elemento.getAttribute "eslab") is esLab.toString()
nuevaClase = "celda__#{ if esLab then 'lab' else 'teoria' }--activo"
elemento.className += " #{nuevaClase}"
export desregistrarCurso = (nombreAño, cursoAbreviado, grupo, esLab) =>
nombreAñoF = nombreAño.substring 0, (nombreAño.indexOf " ")
clase = "_#{ nombreAñoF }_#{ cursoAbreviado }_#{ (if esLab then 'L' else '') + grupo }"
elementos = document.getElementsByClassName clase
for elemento in elementos
if (elemento.getAttribute "eslab") is esLab.toString()
clases = elemento.className
clasesNueva = clases.replace "celda__lab--activo", ""
clasesNueva = clasesNueva.replace "celda__teoria--activo", ""
elemento.className = clasesNueva

View File

@ -3,6 +3,8 @@ import App from './App.vue'
import router from './router'
import store from './store'
import './registerServiceWorker'
import "normalize-css"
import "./sass/Global.sass"
Vue.config.productionTip = false

View File

@ -1,27 +1,19 @@
import Vue from 'vue'
import VueRouter from 'vue-router'
import Home from '../views/Home.vue'
import Inicio from '../views/Inicio.vue'
Vue.use(VueRouter)
Vue.use(VueRouter);
const routes = [
{
path: '/',
name: 'home',
component: Home
},
{
path: '/about',
name: 'about',
// route level code-splitting
// this generates a separate chunk (about.[hash].js) for this route
// which is lazy-loaded when the route is visited.
component: () => import(/* webpackChunkName: "about" */ '../views/About.vue')
name: 'Inicio',
component: Inicio
}
]
];
const router = new VueRouter({
routes
})
});
export default router

17
src/sass/Global.sass Normal file
View File

@ -0,0 +1,17 @@
\:root
--colorTexto: #d7d7d7
--colorFondo: #0E1419
--colorTeoria: #3f77f3
--colorLab: #e4564a
/* black white */
html
font-family: "Roboto", sans-serif
color: var(--colorTexto)
background-color: var(--colorFondo)
h1, h2, h3
font-family: "Product Sans", Roboto, sans-serif
//

View File

@ -1,15 +1,21 @@
import Vue from 'vue'
import Vuex from 'vuex'
import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex)
Vue.use(Vuex);
export default new Vuex.Store({
state: {
celdas: {}
},
mutations: {
registrarCelda(state, idCelda) {
state.celdas[idCelda] = [];
},
agregarACelda(state, {idCelda, datos}) {
state.celdas[idCelda].push(datos);
}
},
actions: {
},
modules: {
}
})
});

View File

@ -1,5 +0,0 @@
<template>
<div class="about">
<h1>This is an about page</h1>
</div>
</template>

View File

@ -1,18 +0,0 @@
<template>
<div class="home">
<img alt="Vue logo" src="../assets/logo.png">
<HelloWorld msg="Welcome to Your Vue.js App"/>
</div>
</template>
<script>
// @ is an alias to /src
import HelloWorld from '@/components/HelloWorld.vue'
export default {
name: 'home',
components: {
HelloWorld
}
}
</script>

30
src/views/Inicio.vue Normal file
View File

@ -0,0 +1,30 @@
<template lang="pug">
div.home
h2.titulo {{ datos.titulo }}
anio(v-for="(año, i) in datos.años" :key="i"
:año="año" :nombreAño="i"
)
//
</template>
<script lang="coffee">
import anio from "../components/Inicio/anio.vue"
import YAML from "yaml"
export default
name: 'home'
components: { anio }
data: ->
datos:
titulo: "Cargando..."
años: {}
created: ->
vm = this
resRaw = await fetch "/horarios/2018_2_fps_epis.yaml"
res = YAML.parse await resRaw.text()
vm.datos = res
#
</script>

17
vue.config.js Normal file
View File

@ -0,0 +1,17 @@
module.exports = {
configureWebpack: {
module: {
rules: [
{
test: /\.coffee$/,
loader: 'coffee-loader',
}
]
},
devServer: {
compress: true,
disableHostCheck: true
}
},
productionSourceMap: false
};

8205
yarn.lock

File diff suppressed because it is too large Load Diff