{"version":3,"sources":["jsdelivr-header.js","/npm/edupage-parser@1.3.0/index.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACNA,MAAM,MAAE,OAAU,QAAQ,cAE1B,MAAM,cACJ,WAAA,CAAY,GACV,KAAK,UAAY,MAAM,GACvB,KAAK,QAAU,KAAK,UAAU,SAAS,GAAG,SAAS,GAAG,SAEtD,KAAK,MAAQ,CACX,QAAS,IACT,SAAU,IACV,WAAY,KACZ,UAAW,KACX,QAAS,MAGX,KAAK,OAAS,KAAK,QAChB,QAAO,GAA2B,SAAlB,EAAM,UACtB,QAAO,GAA8B,MAAtB,EAAK,WAAW,IAC/B,KAAI,IAAQ,CAAG,KAAM,EAAK,SAAS,GAAG,MAAO,EAAG,EAAK,WAAW,KACrE,CAEA,MAAA,CAAO,GACL,OAAQ,GACN,KAAK,KAAK,MAAM,QACd,MAAO,SACT,KAAK,KAAK,MAAM,SACd,MAAO,UACT,KAAK,KAAK,MAAM,WACd,MAAO,YACT,KAAK,KAAK,MAAM,UACd,MAAO,WACT,KAAK,KAAK,MAAM,QACd,MAAO,SAET,QACE,MAAO,GAEb,CAEA,OAAA,CAAQ,EAAQ,GACd,MAAM,EAAQ,GAEd,IAAK,MAAM,KAAQ,KAAK,OAClB,GAAU,EAAK,GAAK,GAAQ,EAAK,GACnC,EAAM,KAAK,EAAK,MAOpB,MAAO,CAAE,UAHS,EAAM,GAAG,MAAM,KAAK,GAGlB,QAFJ,EAAM,EAAM,OAAS,GAAG,MAAM,KAAK,GAGrD,CAEA,kBAAA,GAGE,OAFc,KAAK,QAAQ,GAAG,SAAS,GAAG,MAE7B,WAAW,WAC1B,CAEA,cAAA,GACE,MAAM,EAAY,KAAK,QAAQ,GAAG,SAAS,GAAG,MACxC,EAAY,CAAC,EAEb,EAAW,KAAK,QACnB,QAAO,GAA2B,SAAlB,EAAM,UACtB,KAAI,IAAW,CACd,OAAQ,EAAQ,WAAW,EAC3B,KAAM,EAAQ,WAAW,EAAI,EAAQ,WAAW,MAEhD,EAAG,EAAQ,WAAW,EACtB,YAAa,EAAQ,SAAS,GAAG,SAAS,GAAG,UAGjD,IAAK,MAAM,KAAW,EAAU,CAC9B,MAAO,EAAa,EAAa,GAAQ,EAAQ,YAAY,MAAM,OAC7D,UAAE,EAAS,QAAE,GAAY,KAAK,QAAQ,EAAQ,OAAQ,EAAQ,OAC7D,GAAiB,EAAY,MAAM,YACpC,EAAM,KAAK,OAAO,EAAQ,GAE1B,EAAe,CACnB,YAAa,EAAY,MAAM,MAAM,GAAG,QAAQ,IAAK,MACrD,iBAAkB,EACf,MAAM,KAAK,GACX,MAAM,KACN,KAAI,GAAW,EAAQ,OAAO,KAC9B,KAAK,IACR,cACA,iBAAkB,EACf,MAAM,KACN,KAAI,GAAW,EAAQ,OAAO,KAC9B,KAAK,IACR,cAAe,OAAO,EAAc,MAAM,MAAM,IAChD,YACA,UACA,OACA,OAGE,EAAU,GACZ,EAAU,GAAK,KAAK,GAEpB,EAAU,GAAO,CAAC,EAEtB,CAEA,MAAO,CACL,YACA,YAEJ,CAEA,YAAA,GACE,IAAI,EAEJ,MAAM,EAAY,CAAC,EACb,EAAc,KAAK,QAAQ,GAAG,SAAS,GAAG,MAAM,QAAQ,WAAY,IACpE,EAAmB,EACtB,MAAM,KACN,KAAI,GAAM,EAAG,OAAO,KACpB,KAAK,IAEF,EAAW,KAAK,QACnB,QAAO,GAA2B,SAAlB,EAAM,UACtB,KAAI,IAAW,CACd,OAAQ,EAAQ,WAAW,EAC3B,KAAM,EAAQ,WAAW,EAAI,EAAQ,WAAW,MAEhD,EAAG,EAAQ,WAAW,EACtB,YAAa,EAAQ,SAAS,GAAG,SAAS,GAAG,UAmCjD,OAhCA,EAAS,SAAQ,CAAC,EAAI,KACpB,MAAO,EAAa,EAAQ,GAAQ,EAAG,YAAY,MAAM,OACnD,UAAE,EAAS,QAAE,GAAY,KAAK,QAAQ,EAAG,OAAQ,EAAG,OACnD,GAAiB,EAAY,MAAM,QACpC,EAAM,KAAK,OAAO,EAAG,GAErB,EAAe,CACnB,YAAa,EAAY,MAAM,MAAM,GACrC,iBAAkB,EACf,MAAM,MAAM,GACZ,MAAM,KACN,KAAI,GAAM,EAAG,OAAO,KACpB,KAAK,IACR,OAAQ,EAAO,MAAM,KACrB,cAAe,OAAO,GACtB,YACA,UACA,OACA,OAGE,EAAU,GACZ,EAAU,GAAK,KAAK,GAEpB,EAAU,GAAO,CAAC,GAGhB,IAAU,EAAS,OAAS,IAC9B,EAAqB,EAAa,YACpC,IAGK,CACL,cACA,mBACA,YAAa,EACb,iBAAkB,EACf,MAAM,KACN,KAAI,GAAM,EAAG,OAAO,KACpB,KAAK,IACR,YAEJ,EAGF,OAAO,QAAU","file":"/npm/edupage-parser@1.3.0/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/edupage-parser@1.3.0/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","const { parse } = require(\"svg-parser\");\n\nclass EdupageParser {\n  constructor(svg) {\n    this.parsedSVG = parse(svg);\n    this.svgData = this.parsedSVG.children[0].children[1].children;\n\n    this.daysY = {\n      mondayY: 420,\n      tuesdayY: 726,\n      wednesdayY: 1032,\n      thursdayY: 1338,\n      fridayY: 1644\n    };\n\n    this.timesX = this.svgData\n      .filter(child => child.tagName === \"text\")\n      .filter(text => text.properties.y === 335)\n      .map(time => ({ time: time.children[0].value, x: time.properties.x }));\n  }\n\n  getDay(y) {\n    switch (y) {\n      case this.daysY.mondayY:\n        return \"Monday\";\n      case this.daysY.tuesdayY:\n        return \"Tuesday\";\n      case this.daysY.wednesdayY:\n        return \"Wednesday\";\n      case this.daysY.thursdayY:\n        return \"Thursday\";\n      case this.daysY.fridayY:\n        return \"Friday\";\n\n      default:\n        return \"\";\n    }\n  }\n\n  getTime(xStart, xEnd) {\n    const times = [];\n\n    for (const time of this.timesX) {\n      if (xStart <= time.x && xEnd >= time.x) {\n        times.push(time.time);\n      }\n    }\n\n    const startTime = times[0].split(\"-\")[0];\n    const endTime = times[times.length - 1].split(\"-\")[1];\n\n    return { startTime, endTime };\n  }\n\n  isTeacherTimetable() {\n    const title = this.svgData[0].children[0].value;\n\n    return title.startsWith(\"Teacher \");\n  }\n\n  parseTimetable() {\n    const groupName = this.svgData[0].children[0].value;\n    const timeTable = {};\n\n    const subjects = this.svgData\n      .filter(child => child.tagName === \"rect\")\n      .map(subject => ({\n        xStart: subject.properties.x,\n        xEnd: subject.properties.x + subject.properties.width,\n\n        y: subject.properties.y,\n        subjectInfo: subject.children[0].children[0].value\n      }));\n\n    for (const subject of subjects) {\n      const [subjectName, teacherName, room] = subject.subjectInfo.split(\"\\n\");\n      const { startTime, endTime } = this.getTime(subject.xStart, subject.xEnd);\n      const [sectionNumber] = subjectName.match(/\\(\\d+?\\)/);\n      const day = this.getDay(subject.y);\n\n      const oneTimeTable = {\n        subjectName: subjectName.split(\" (\")[0].replace(\"(\", \" (\"),\n        subjectNameShort: subjectName\n          .split(\"(\")[0]\n          .split(\" \")\n          .map(subject => subject.charAt(0))\n          .join(\"\"),\n        teacherName,\n        teacherNameShort: teacherName\n          .split(\" \")\n          .map(subject => subject.charAt(0))\n          .join(\"\"),\n        sectionNumber: Number(sectionNumber.match(/\\d/)[0]),\n        startTime,\n        endTime,\n        room,\n        day\n      };\n\n      if (timeTable[day]) {\n        timeTable[day].push(oneTimeTable);\n      } else {\n        timeTable[day] = [oneTimeTable];\n      }\n    }\n\n    return {\n      groupName,\n      timeTable\n    };\n  }\n\n  parseTeacher() {\n    let teacherSubjectName;\n\n    const timeTable = {};\n    const teacherName = this.svgData[0].children[0].value.replace(\"Teacher \", \"\");\n    const teacherNameShort = teacherName\n      .split(\" \")\n      .map(el => el.charAt(0))\n      .join(\"\");\n\n    const subjects = this.svgData\n      .filter(child => child.tagName === \"rect\")\n      .map(subject => ({\n        xStart: subject.properties.x,\n        xEnd: subject.properties.x + subject.properties.width,\n\n        y: subject.properties.y,\n        subjectInfo: subject.children[0].children[0].value\n      }));\n\n    subjects.forEach((el, index) => {\n      const [subjectName, groups, room] = el.subjectInfo.split(\"\\n\");\n      const { startTime, endTime } = this.getTime(el.xStart, el.xEnd);\n      const [sectionNumber] = subjectName.match(/(\\d)/);\n      const day = this.getDay(el.y);\n\n      const oneTimeTable = {\n        subjectName: subjectName.split(\" (\")[0],\n        subjectNameShort: subjectName\n          .split(\" (\")[0]\n          .split(\" \")\n          .map(el => el.charAt(0))\n          .join(\"\"),\n        groups: groups.split(\"/\"),\n        sectionNumber: Number(sectionNumber),\n        startTime,\n        endTime,\n        room,\n        day\n      };\n\n      if (timeTable[day]) {\n        timeTable[day].push(oneTimeTable);\n      } else {\n        timeTable[day] = [oneTimeTable];\n      }\n\n      if (index === subjects.length - 1) {\n        teacherSubjectName = oneTimeTable.subjectName;\n      }\n    });\n\n    return {\n      teacherName,\n      teacherNameShort,\n      subjectName: teacherSubjectName,\n      subjectNameShort: teacherSubjectName\n        .split(\" \")\n        .map(el => el.charAt(0))\n        .join(\"\"),\n      timeTable\n    };\n  }\n}\n\nmodule.exports = EdupageParser;\n"]}