const chalk = require('chalk'); const language = require('./app/module/language'); var display = [ [ { palabra: "It", estado: 1, id: "it" }, { palabra: " ", estado: 1, id: "" }, { palabra: "is", estado: 1, id: "is" }, { palabra: " ", estado: 0, id: "" }, { palabra: "twenty", estado: 0, id: "m_20" } ], [ { palabra: "quarter", estado: 0, id: "m_15" }, { palabra: " ", estado: 0, id: "" }, { palabra: "half", estado: 0, id: "m_30" } ], [ { palabra: "ten", estado: 0, id: "m_10" }, { palabra: "five", estado: 0, id: "m_5" }, { palabra: " ", estado: 0, id: "" }, { palabra: "past", estado: 0, id: "past" } ], [ { palabra: "to", estado: 0, id: "to" }, { palabra: " ", estado: 0, id: "" }, { palabra: "twelve", estado: 0, id: "h_0" }, { palabra: "one", estado: 0, id: "h_1" } ], [ { palabra: "two", estado: 0, id: "h_2" }, { palabra: "three", estado: 0, id: "h_3" }, { palabra: "four", estado: 0, id: "h_4" } ], [ { palabra: "five", estado: 0, id: "h_5" }, { palabra: "six", estado: 0, id: "h_6" }, { palabra: "seven", estado: 0, id: "h_7" } ], [ { palabra: "eight", estado: 0, id: "h_8" }, { palabra: "nine", estado: 0, id: "h_9" }, { palabra: "ten", estado: 0, id: "h_10" } ], [ { palabra: " ", estado: 0, id: "" }, { palabra: " ", estado: 0, id: "" }, { palabra: " ", estado: 0, id: "" }, { palabra: "eleven", estado: 0, id: "h_11" }, { palabra: " ", estado: 0, id: "" }, { palabra: " ", estado: 0, id: "" }, { palabra: " ", estado: 0, id: "" } ], [ { palabra: " ", estado: 0, id: "" }, { palabra: "O'Clock", estado: 0, id: "m_0" }, { palabra: " ", estado: 0, id: "" }, { palabra: "now", estado: 1, id: "now" } ], ] console.log(chalk.greenBright("---WordClock---")) /** * Reinicia el display a sus valores por defecto * */ function resetDisplay() { display.map(fila => { fila.map(columna => { if (columna.id == "it" || columna.id == "is" || columna.id == "now") { display[display.indexOf(fila)][fila.indexOf(columna)].estado = 1 } else { display[display.indexOf(fila)][fila.indexOf(columna)].estado = 0 } }) }) return display } /** * Crea la presentacion por pantalla y actualiza segun el estado del objeto display */ function actualizar_display() { console.clear() display.map(fila => { var show = [] fila.map(columna => { //evaluar si la columna tiene un estado activo o inactivo y guardar el estado if (columna.estado == 0) { show.push(chalk.gray(columna.palabra)) } else { show.push(chalk.yellowBright(columna.palabra)) } }) console.log(show.join("")) }) return display } /** * Actualiza el estado a activo * @param {string} id Recibe el id del elemento a actualizar */ function cambiar_estado(id) { display.map(fila => { fila.map(columna => { //buscar la hora correspondiente mediante el id y cambiar su estado a 1 if (columna.id == id) { display[display.indexOf(fila)][fila.indexOf(columna)].estado = 1 } }) }) return display } /** * Funcion de inicio. Configura la hora y los minutos y llama a las funciones que cambian los estados de cada palabra * @param {*} * @return {*} */ function hora() { resetDisplay() var now = new Date(); var hour = now.getHours(); var minute = now.getMinutes(); var offset; var next; hour = hour % 12; minute = minute - minute % 5; if (minute > 30) {//si hay mas de 30 minutos //activa la hora pasada tanto cambiar_estado("h_" + (hour + 1)) //activa el to cambiar_estado("to") } else { //activa la hora correspondiente cambiar_estado("h_" + hour) if (minute !== 0) { //activa la palabra pasado /past cambiar_estado("past") } } offset = (minute > 30) ? (60 - minute) : minute; minutes = { 0: "m_0", 5: "m_5", 10: "m_10", 15: "m_15", 20: "m_20", 30: "m_30", }; if (offset in minutes) { //activa los minutos cambiar_estado("m_" + offset) } else if (offset === 25) { cambiar_estado("m_20") cambiar_estado("m_25") } now.setTime(Date.now()); next = new Date(now.getTime()); next.setMinutes(minute + 5); next.setSeconds(0); next.setMilliseconds(0); actualizar_display() return display } /** * Permite reemplazar el array de display por el correspondiente segun el idioma seleccionado * @param {string} lang idioma a cambiar */ function cambiar_idioma(lang) { if (lang == "es" || lang == "en" || lang == "eo") { display = language[lang] return lang } else { console.log("argumento desconocido, usando idioma por defecto") return "en" } } cambiar_idioma(process.argv[2]) hora() setInterval(hora, 60000) exports.cambiar_idioma = cambiar_idioma