UNPKG

@heknon/node-webtop

Version:

A Backend for an unofficial WebTop (SmartSchool - Israel) API.

68 lines (67 loc) 2.69 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const cheerio_1 = require("cheerio"); const utils_1 = require("../utils"); /** * construct timetable type @see {TimeTable} * @param timetableHtml the timetable html of webtop from https://www.webtop.co.il/pupilCardData.aspx?viewID=10&id=0&year=0 */ function constructTimeTable(timetableHtml, removeEmptyHours) { const $ = cheerio_1.load(timetableHtml); const tt = [null, null, null, null, null, null]; const days = $('.scheduale-day-wrapper'); const hourMap = getHourMap($); days.each((dayNum, day) => { const ttDay = {}; const todayClasses = []; let currHour = {}; let hourNum = 0; day.children.forEach((hourData, i) => { const hour = hourMap[hourNum]; if ((i & 1) === 1) { if (hourData.children.length == 1) { if (!removeEmptyHours) todayClasses.push(currHour); currHour = {}; } else { const details = $(hourData.children[0]).text().split(','); currHour.subjectName = details[0]; currHour.teacherName = details[1].trimLeft(); const room = details[2].slice(5, details[2].length); currHour.room = utils_1.isStringNumber(room) ? Number.parseInt(room) : room.trimLeft(); todayClasses.push(currHour); currHour = {}; } ++hourNum; } else { currHour.lessonSchoolBeginHour = hourNum; currHour.lessonStartTime = hour.from; currHour.lessonEndTime = hour.to; } }); ttDay.day = utils_1.dayNumberToString(dayNum + 1); ttDay.dayNum = dayNum + 1; ttDay.todayClasses = todayClasses; tt[dayNum] = ttDay; }); return tt; } exports.constructTimeTable = constructTimeTable; const getHourMap = ($) => { const times = Array(); $("#day_1").children('.scheduale-hour-name').each((i, elem) => { const hoursStr = $(elem.children[1]).text(); let hours = hoursStr.length <= 2 ? null : hoursStr.match(/\d{1,2}:\d{1,2}\d/g); if (hours === null && i === 12) hours = ['17:10', '17:55']; else if (hours === null && i === 13) hours = ['18:00', '18:45']; times.push({ from: utils_1.constructTime(hours[0]), to: utils_1.constructTime(hours[1]) }); }); return times; };