diff --git a/README.md b/README.md index 0824dde..a720d52 100755 --- a/README.md +++ b/README.md @@ -1,6 +1,79 @@ # Horarios UNSA -> ¡Ahora con JSX! +Horarios UNSA es una página que permite a los alumnos de la Universidad Nacional de San Agustin +crear fácilmente sus horarios, sin que se crucen horas. + +https://horarios.araozu.dev + +## Configuración + +Requisitos: + +- Node.js LTS +- pnpm, npm o yarn +- Conocimientos de pnpm/npm/yarn, TypeScript, JSX, Solid.js y Aphrodite css + +Instalación: + +- Clonar el repositorio +- Instalar dependencias +- Ejecutar script `start` para ejecutar el servidor, o `build` para compilarlo + +## Arquitectura + +## Formato de horarios + +La información de los horarios se almacena en public/horarios/ en formato YAML. + +El formato es el siguiente: + +```ts +interface DatosCarrera { + titulo: string, + // Contiene información adicional del horario + descripcion: string, + // Fecha de creación del horario en formato YYYYMMDD + version: number, + // Datos de los años de las carreras + años: { + // key es el nombre del año: 1er año, 2do año, etc + [key: string]: { + // nombre es el nombre del curso. + // Este nombre es referencial, no se muestra + // en el programa + [nombre: string]: Curso, + }, + }, +} + +interface Curso { + // Nombre completo del curso + nombre: string, + // Nombre del curso abreviado + abreviado: string, + // Información de las horas de teoria + Teoria: { + // grupo es una letra: A, B, C, D + [grupo: string]: DatosGrupo, + }, + // Información de las horas de laboratorio + Laboratorio?: { + // grupo es una letra: A, B, C, D + [grupo: string]: DatosGrupo, + }, +} + +interface DatosGrupo { + // Nombre del docente de este grupo + Docente: string, + /* + Las horas del curso en el siguiente formato: DD_HHMM + DD puede ser Lu, Ma, Mi, Ju, Vi + Ejm: Ma0850, Vi1640, Ju1550 + */ + Horas: string[] +} +``` ## Versiones anteriores diff --git a/src/App.tsx b/src/App.tsx index d17310e..267e5e6 100755 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,48 +1,10 @@ -import { BarraSuperior } from "./BarraSuperior" -import { ContenedorHorarios } from "./ContenedorHorarios/ContenedorHorarios" -import { Wallpaper } from "./Wallpaper" -import { Show, createSignal } from "solid-js" -import { css } from "aphrodite" -import { estilosGlobales } from "./Estilos" -import { Creditos } from "./Creditos" +import {Main} from "./Views/Main" +import {Index} from "./Views/Index" function App() { - /// @ts-ignore - const soportaBackdropFilter = document.body.style.backdropFilter !== undefined - const mostrarMensajeBackdropFilterRaw = !localStorage.getItem("mensaje-backdrop-filter-oculto") - - const [mostrarMensajeBackdropFilter, setMostrarMensaje] = createSignal(mostrarMensajeBackdropFilterRaw) - - const ocultarMensajeBackdropFilter = () => { - setMostrarMensaje(false) - localStorage.setItem("mensaje-backdrop-filter-oculto", "true") - } - return ( -
- - - -
- Tu navegador no soporta "backdrop-filter". Este es solo un efecto - visual, no afecta la funcionalidad de la página.  - - No volver a mostrar. - -
-
-
- Solo teoria por ahora. Actualizado el 2021/03/28. Fuente:  - - Página de Facebook de la escuela. - -
-
- - +
+
) } diff --git a/src/BarraSuperior.tsx b/src/BarraSuperior.tsx index 337431d..12784a6 100755 --- a/src/BarraSuperior.tsx +++ b/src/BarraSuperior.tsx @@ -102,8 +102,8 @@ export function BarraSuperior() { - 2021-A Ingeniería de Sistemas + 2021-A ) } diff --git a/src/Estilos.ts b/src/Estilos.ts index 877bd91..a26e709 100755 --- a/src/Estilos.ts +++ b/src/Estilos.ts @@ -2,6 +2,7 @@ import { StyleSheet } from "aphrodite" export const estilosGlobales = StyleSheet.create({ contenedor: { + boxSizing: "border-box", margin: "0.3rem", padding: "0.5rem 0.5rem", borderRadius: "0.4rem", @@ -16,7 +17,7 @@ export const estilosGlobales = StyleSheet.create({ transition: "background-color 200ms", textDecoration: "underline solid white 2px", ":hover": { - backgroundColor: "rgba(200, 200, 200, 0.3)", + backgroundColor: "rgba(200, 200, 200, 0.4)", }, }, contenedorCursorSoft: { diff --git a/src/Views/Index.tsx b/src/Views/Index.tsx new file mode 100644 index 0000000..290322a --- /dev/null +++ b/src/Views/Index.tsx @@ -0,0 +1,70 @@ +import { BarraSuperior } from "../BarraSuperior" +import { Wallpaper } from "../Wallpaper" +import { estilosGlobales } from "../Estilos" +import { StyleSheet, css } from "aphrodite" + +const e = StyleSheet.create({ + contenedorGlobal: { + width: "100vw", + height: "100vh", + display: "flex", + alignItems: "center", + justifyContent: "center", + }, + cont: { + width: "30rem", + }, + parrafo: { + textAlign: "justify", + lineHeight: "1.4rem", + }, + botonAccion: { + width: "30rem", + display: "inline-block", + textAlign: "center", + }, + iconoGitHub: { + fontSize: "1.25rem", + verticalAlign: "bottom", + marginRight: "0.5rem", + }, +}) + +export function Index() { + return ( +
+ +
+
+

Horarios UNSA

+

+ Esta página te permite crear tu horario fácilmente, sin importar de que + año son los cursos. +

+

+ Ingeniería de Sistemas cuenta con horarios de teoria y laboratorio automáticos, + el resto de carreras solo cuenta con teoria y necesitan que el alumno inicie + sesión. +

+

+ Se recomienda usar un computador/laptop y un navegador actualizado (Firefox, Chrome, Qutebrowser). +

+
+ + + + + Código fuente en GitHub + +
+
+ ) +} diff --git a/src/Views/Main.tsx b/src/Views/Main.tsx new file mode 100644 index 0000000..682dfb9 --- /dev/null +++ b/src/Views/Main.tsx @@ -0,0 +1,50 @@ +import { BarraSuperior } from "../BarraSuperior" +import { ContenedorHorarios } from "../ContenedorHorarios/ContenedorHorarios" +import { Wallpaper } from "../Wallpaper" +import { Show, createSignal } from "solid-js" +import { css } from "aphrodite" +import { estilosGlobales } from "../Estilos" +import { Creditos } from "../Creditos" + +export function Main() { + /// @ts-ignore + const soportaBackdropFilter = document.body.style.backdropFilter !== undefined + const mostrarMensajeBackdropFilterRaw = !localStorage.getItem("mensaje-backdrop-filter-oculto") + + const [mostrarMensajeBackdropFilter, setMostrarMensaje] = createSignal(mostrarMensajeBackdropFilterRaw) + + const ocultarMensajeBackdropFilter = () => { + setMostrarMensaje(false) + localStorage.setItem("mensaje-backdrop-filter-oculto", "true") + } + + return ( +
+ + + +
+ Tu navegador no soporta "backdrop-filter". Este es solo un efecto + visual, no afecta la funcionalidad de la página.  + + No volver a mostrar. + +
+
+ {/* +
+ Solo teoria por ahora. Actualizado el 2021/03/28. Fuente:  + + Página de Facebook de la escuela. + +
+ */} +
+ + +
+ ) +}