Update schoolCalendar.js

master
Ronin0000 2021-11-02 18:52:09 -07:00 committed by GitHub
parent fa5cbd71c6
commit 73819933ee
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 267 additions and 219 deletions

View File

@ -1,27 +1,86 @@
require("Font8x12").add(Graphics); require("Font8x12").add(Graphics);
require("Font7x11Numeric7Seg").add(Graphics); require("Font7x11Numeric7Seg", 2).add(Graphics);
function getBackgroundImage() {return require("heatshrink").decompress(atob("gMwyEgBAsAgQBCgcAggBCgsAgwBCg8AhABChMAhQBChcAhgBChsAhwBCh8AiEAiIBCiUAiYBCikAioBCi0Ai4BCjEAjIBCjUAjYBCjkAjoBCj0Aj4BBA"));} let nIntervId;
function getUpArrow() {return require("heatshrink").decompress(atob("hkOyANKmv9AIIjRCoYZRlvdAI8U3YVK3oBJC4Mc7YVRC4sc7gVCzoBNC4oZDGowXGR58lvoBFC9FcAIoXongBFC58dngBFC6EcAIoPHA"));} function redrawScreen() {
layout.render(layout.background);
layout.render(layout.buttons);
draw();
}
function getDownArrow() {return require("heatshrink").decompress(atob("hkOyALImv9AIojPmvdAIoXPlvdAIoXQ3oBFC9GdAIoXnkt9AIoPPAI8U3cc7cc7gBBDIVcAJYXFGYwXOLpU8AI4XBO5sdjgBFR54ZFBpIA=="));} function updateDay(ffunction,day){
if(ffunction == 1){
function getMenuIcon() {return require("heatshrink").decompress(atob("iEQyBC/AEU+rwBEn02js17st3stvklrkljkc/cc3cUzYBBD5AdUD4oA/P/4A/P/4A/ADoA=="));} switch (day) {
case 0:
function getDotIcon() {return require("heatshrink").decompress(atob("iEQyBC/AA0t3oBBA4ndAIIPGA4gAFkt9lt9AYIHEzoBBBIwRED41cks8AYIJGA44RGP8xtGP44RJBYh1CAIIHHBJJ/KroBBPoqBFB4YRDAA8dngHHBJKdq3oBDBI4RNP4l9AIYHHBJJBJks8AIIHTAH4ABA="));} return "Sunday";
case 1:
Bangle.setLCDMode("doublebuffered"); day = "Monday";
g.clear(); break;
g.setFont("8x12"); case 2:
g.drawString("Loading...",115,60); day = "Tuesday";
g.flip(); break;
case 3:
LIST = 1; day = "Wednesday";
INFORMATION = 2; break;
currentStage = LIST; case 4:
day = "Thursday";
var stage = 3; break;
case 5:
day = "Friday";
break;
case 6:
day = "Saturday";
}
return day;
}else if(ffunction == 2){
switch (day) {
case 0:
return "Sun";
case 1:
day = "Mon";
break;
case 2:
day = "Tue";
break;
case 3:
day = "Wed";
break;
case 4:
day = "Thu";
break;
case 5:
day = "Fri";
break;
case 6:
day = "Sat";
}
return day;
}else if(ffunction == 3){
switch (day) {
case 0:
return "S";
case 1:
day = "M";
break;
case 2:
day = "T";
break;
case 3:
day = "W";
break;
case 4:
day = "R";
break;
case 5:
day = "F";
break;
case 6:
day = "S";
}
return day;
}
}
function getScheduleTable() { function getScheduleTable() {
let schedule = [ let schedule = [
@ -90,21 +149,6 @@ function getScheduleTable() {
return schedule; return schedule;
} }
function splitter(str, l){
var strs = [];
while(str.length > l){
var pos = str.substring(0, l).lastIndexOf(' ');
pos = pos <= 0 ? l : pos;
strs.push(str.substring(0, pos));
var i = str.indexOf(' ', pos)+1;
if(i < pos || i > pos+l)
i = pos;
str = str.substring(i);
}
strs.push(str);
return strs;
}
function findNextScheduleIndex() { function findNextScheduleIndex() {
var schedule = getScheduleTable(); var schedule = getScheduleTable();
var currentDate = new Date(); var currentDate = new Date();
@ -120,10 +164,41 @@ function findNextScheduleIndex() {
return 0; return 0;
} }
var currentPositionTable = 0;
var numberOfItemsShown = 5;
function logDebug(message) {console.log(message);} function getUpArrow() {return require("heatshrink").decompress(atob("hkOyANKmv9AIIjRCoYZRlvdAI8U3YVK3oBJC4Mc7YVRC4sc7gVCzoBNC4oZDGowXGR58lvoBFC9FcAIoXongBFC58dngBFC6EcAIoPHA"));}
function getDownArrow() {return require("heatshrink").decompress(atob("hkOyALImv9AIojPmvdAIoXPlvdAIoXQ3oBFC9GdAIoXnkt9AIoPPAI8U3cc7cc7gBBDIVcAJYXFGYwXOLpU8AI4XBO5sdjgBFR54ZFBpIA=="));}
function getMenuIcon() {return require("heatshrink").decompress(atob("iEQyBC/AEU+rwBEn02js17st3stvklrkljkc/cc3cUzYBBD5AdUD4oA/P/4A/P/4A/ADoA=="));}
function getDotIcon() {return require("heatshrink").decompress(atob("iEQyBC/AA0t3oBBA4ndAIIPGA4gAFkt9lt9AYIHEzoBBBIwRED41cks8AYIJGA44RGP8xtGP44RJBYh1CAIIHHBJJ/KroBBPoqBFB4YRDAA8dngHHBJKdq3oBDBI4RNP4l9AIYHHBJJBJks8AIIHTAH4ABA="));}
var currentPositionTable = 0;
var numberOfItemsShown = 8;
//Table Positions:
var rectStart = 45;
var rectEnd = 65;
var rectStartX = 10;
var rectEndX = 210;
//Scences:
LIST = 1;
INFORMATION = 2;
currentStage = LIST;
function splitter(str, l){
var strs = [];
while(str.length > l){
var pos = str.substring(0, l).lastIndexOf(' ');
pos = pos <= 0 ? l : pos;
strs.push(str.substring(0, pos));
var i = str.indexOf(' ', pos)+1;
if(i < pos || i > pos+l)
i = pos;
str = str.substring(i);
}
strs.push(str);
return strs;
}
function updateMinutesToCurrentTime(currentMinuteFunction) { function updateMinutesToCurrentTime(currentMinuteFunction) {
if (currentMinuteFunction<10){ if (currentMinuteFunction<10){
@ -134,219 +209,192 @@ function updateMinutesToCurrentTime(currentMinuteFunction) {
return currentMinuteUpdatedFunction; return currentMinuteUpdatedFunction;
} }
function updateHoursToCurrentTime(currentHourFunction) { function renderBackground(l) {
if(currentHourFunction >= 13){ g.clearRect(0,0,240,20);
currentHourUpdatedFunction = currentHourFunction-12; g.drawImage(getBackgroundImage(),110,130,{scale:9,rotate:0});
}else{
currentHourUpdatedFunction = currentHourFunction;
}
return currentHourUpdatedFunction;
} }
function updateDay(ffunction,day){ function renderTable(l) {
if(ffunction == 1){ for(var x = 0;x<=numberOfItemsShown;x++){
switch (day) {
case 0:
return "Sunday";
case 1:
day = "Monday";
break;
case 2:
day = "Tuesday";
break;
case 3:
day = "Wednesday";
break;
case 4:
day = "Thursday";
break;
case 5:
day = "Friday";
break;
case 6:
day = "Saturday";
}
return day;
}else if(ffunction == 2){
switch (day) {
case 0:
return "Sun";
case 1:
day = "Mon";
break;
case 2:
day = "Tue";
break;
case 3:
day = "Wed";
break;
case 4:
day = "Thu";
break;
case 5:
day = "Fri";
break;
case 6:
day = "Sat";
}
return day;
}
}
function minimalDraw(mode) {
var foundSchedule = getScheduleTable();
var foundNumber = findNextScheduleIndex();
if(mode == 1){
if(currentStage == LIST){
for(var x = 0;x<=numberOfItemsShown;x++){
g.setColor(255,255,255);
g.drawRect(10,30+(x*20),220,50+(20*x));
g.setColor(255,205,0);
g.drawRect(10,30+(2*20),220,50+(2*20));
g.setColor(255,0,0);
g.drawRect(10,30+(currentPositionTable*20),220,50+(20*currentPositionTable));
g.setColor(255,255,255);
}
}
}else if(mode == 2){
for(var i = 0;i<=240;i++){
g.drawImage(getBackgroundImage(),i,120,{scale:5,rotate:0});
}
g.drawImage(getMenuIcon(),223.5,70);
scheduleMinuteUpdatedStart = updateMinutesToCurrentTime(foundSchedule[((foundNumber-2)+currentPositionTable)].sm);
scheduleHourUpdatedStart = updateHoursToCurrentTime(foundSchedule[((foundNumber-2)+currentPositionTable)].sh);
scheduleMinuteUpdatedEnd = updateMinutesToCurrentTime(foundSchedule[((foundNumber-2)+currentPositionTable)].em);
scheduleHourUpdatedEnd = updateHoursToCurrentTime(foundSchedule[((foundNumber-2)+currentPositionTable)].eh);
schduleDay = updateDay(1,foundSchedule[((foundNumber-2)+currentPositionTable)].dow);
g.setColor(255,255,255); g.setColor(255,255,255);
g.reset(); g.drawRect(rectStartX,rectStart+(x*20),rectEndX,rectEnd+(20*x));
g.setFont("8x12"); g.setColor(255,205,0);
g.drawString(foundSchedule[((foundNumber-2)+currentPositionTable)].cn,13,30); g.drawRect(rectStartX,rectStart+(2*20),rectEndX,rectEnd+(2*20));
g.drawString(schduleDay,13,45); g.setColor(255,0,0);
g.drawString(scheduleHourUpdatedStart+":"+scheduleMinuteUpdatedStart+"-"+scheduleHourUpdatedEnd+":"+scheduleMinuteUpdatedEnd,13,60); g.drawRect(rectStartX,rectStart+(currentPositionTable*20),rectEndX,rectEnd+(20*currentPositionTable));
}
}
function renderTableText(l){
var foundNumber = findNextScheduleIndex();
var foundSchedule = getScheduleTable();
var scheduleHourUpdated;
var scheduleMinuteUpdated;
var beforeFoundNumber = foundNumber - 2;
for(var x = 0;x<=numberOfItemsShown;x++){
var currentNumber = beforeFoundNumber + x;
if (beforeFoundNumber + x < 0) {
currentNumber = foundSchedule.length + beforeFoundNumber + x;
} else if (beforeFoundNumber + x > foundSchedule.length - 1) {
currentNumber = beforeFoundNumber + x - foundSchedule.length;
}
scheduleMinuteUpdatedStart = updateMinutesToCurrentTime(foundSchedule[currentNumber].sm);
scheduleHourUpdatedStart = foundSchedule[currentNumber].sh;
scheduleMinuteUpdatedEnd = updateMinutesToCurrentTime(foundSchedule[currentNumber].em);
scheduleHourUpdatedEnd = foundSchedule[currentNumber].eh;
scheduleDecriptionUpdated = foundSchedule[currentNumber].cn.substring(0, 20);
if(foundSchedule[currentNumber].cn.length >= 15){
scheduleDecriptionUpdated = foundSchedule[currentNumber].cn.substring(0, 20)+"...";
}
schduleDay = updateDay(3,foundSchedule[currentNumber].dow);
g.setFont("8x12");
g.drawString(scheduleHourUpdatedStart+":"+scheduleMinuteUpdatedStart+"-"+scheduleHourUpdatedEnd+":"+scheduleMinuteUpdatedEnd+" "+schduleDay+" "+scheduleDecriptionUpdated,13,50+(x*20));
}
}
function buttonsF(l){
if(currentStage == LIST){
g.drawImage(getDotIcon(),223.5,115);
}else{
g.drawImage(getMenuIcon(),223.5,115);
}
g.drawImage(getUpArrow(),225,30);
g.drawImage(getDownArrow(),225,215);
}
function draw() {
var currentDate = new Date();
var currentDayOfWeek = currentDate.getDay();
var currentHour = currentDate.getHours();
var currentMinute = currentDate.getMinutes();
var currentMinuteUpdated = updateMinutesToCurrentTime(currentMinute);
if (layout) {
if(currentStage == LIST){
layout.time.label = currentHour+":"+currentMinuteUpdated;
layout.time.x = 147;
layout.time.y = 10;
layout.render(layout.table);
layout.render(layout.tableText);
logDebug("Rendered"+currentPositionTable);
}else{
layout.time.label = currentHour+":"+currentMinuteUpdated;
layout.time.x = 147;
layout.time.y = 10;
layout.render(layout.info);
logDebug("Rendered"+currentPositionTable);
}
g.clearRect(150,0,220,35);
layout.render(layout.time);
} }
g.flip();
displayClock();
} }
function RedRectDown() { function RedRectDown() {
if(currentPositionTable > 0){ if(currentPositionTable > 0){
currentPositionTable -= 1; currentPositionTable -= 1;
minimalDraw(1); if(currentStage == INFORMATION){
redrawScreen();
}else{
draw();
}
} }
} }
function RedRectUp() { function RedRectUp() {
if(currentPositionTable < numberOfItemsShown){ if(currentPositionTable < numberOfItemsShown){
currentPositionTable += 1; currentPositionTable += 1;
minimalDraw(1); if(currentStage == INFORMATION){
redrawScreen();
}else{
draw();
}
} }
} }
function changeScene(){ function renderMiniBackground(l){
if(currentStage == INFORMATION){ for(var i = 233;i<=240;i++){
currentStage = LIST; g.drawImage(getBackgroundImage(),i,123,{scale:10,rotate:0});
displayClock();
setInterval(displayClock,500);
}else if(currentStage == LIST){
currentStage = INFORMATION;
} }
minimalDraw(2);
Bangle.buzz(1000,1000);
} }
function displayClock() { function renderLoading(l){
var currentDate = new Date(); g.setFont("8x12");
var currentDayOfWeek = currentDate.getDay(); g.drawString("Loading...",240/2-20,240/2-20);
var currentHour = currentDate.getHours(); }
var currentMinute = currentDate.getMinutes();
var currentMinuteUpdated; function renderInformation(l){
var currentHourUpdated;
currentMinuteUpdated = updateMinutesToCurrentTime(currentMinute);
currentHourUpdated = updateHoursToCurrentTime(currentHour);
g.setColor(255,255,255);
g.setFont("7x11Numeric7Seg",2);
var foundNumber = findNextScheduleIndex(); var foundNumber = findNextScheduleIndex();
var foundSchedule = getScheduleTable(); var foundSchedule = getScheduleTable();
var scheduleHourUpdated; scheduleMinuteUpdatedStart = updateMinutesToCurrentTime(foundSchedule[foundNumber].sm);
var scheduleMinuteUpdated; scheduleHourUpdatedStart = foundSchedule[foundNumber].sh;
for(var i = 0;i<=240;i++){ scheduleMinuteUpdatedEnd = updateMinutesToCurrentTime(foundSchedule[foundNumber].em);
g.drawImage(getBackgroundImage(),i,120,{scale:5,rotate:0}); scheduleHourUpdatedEnd = foundSchedule[foundNumber].eh;
} scheduleDay = updateDay(1,foundSchedule[((foundNumber-2)+currentPositionTable)].dow);
g.drawString(currentHourUpdated+":"+currentMinuteUpdated, 160, 0);
g.drawImage(getUpArrow(),225,5);
g.drawImage(getDownArrow(),225,140);
if(currentStage == LIST){
var beforeFoundNumber = foundNumber - 2;
for(var x = 0;x<=numberOfItemsShown;x++){
var currentNumber = beforeFoundNumber + x;
if (beforeFoundNumber + x < 0) {
currentNumber = foundSchedule.length + beforeFoundNumber + x;
} else if (beforeFoundNumber + x > foundSchedule.length - 1) {
currentNumber = beforeFoundNumber + x - foundSchedule.length;
}
g.drawImage(getDotIcon(),223.5,70);
scheduleMinuteUpdatedStart = updateMinutesToCurrentTime(foundSchedule[currentNumber].sm);
scheduleHourUpdatedStart = updateHoursToCurrentTime(foundSchedule[currentNumber].sh);
scheduleMinuteUpdatedEnd = updateMinutesToCurrentTime(foundSchedule[currentNumber].em);
scheduleHourUpdatedEnd = updateHoursToCurrentTime(foundSchedule[currentNumber].eh);
scheduleDecriptionUpdated = foundSchedule[currentNumber].cn.substring(0, 20);
if(foundSchedule[currentNumber].cn.length >= 20){
scheduleDecriptionUpdated = foundSchedule[currentNumber].cn.substring(0, 20)+"...";
}
schduleDay = updateDay(2,foundSchedule[currentNumber].dow);
g.setColor(255,255,255);
g.drawRect(10,30+(x*20),220,50+(20*x));
g.reset();
g.setFont("8x12");
g.drawString(scheduleHourUpdatedStart+":"+scheduleMinuteUpdatedStart+"-"+scheduleHourUpdatedEnd+":"+scheduleMinuteUpdatedEnd+" "+schduleDay+" "+scheduleDecriptionUpdated,13,35+(x*20));
g.setColor(255,205,0);
g.drawRect(10,30+(2*20),220,50+(2*20));
g.setColor(255,0,0);
g.drawRect(10,30+(currentPositionTable*20),220,50+(20*currentPositionTable));
}
}else if(currentStage == INFORMATION){
g.drawImage(getMenuIcon(),223.5,70);
scheduleMinuteUpdatedStart = updateMinutesToCurrentTime(foundSchedule[((foundNumber-2)+currentPositionTable)].sm);
scheduleHourUpdatedStart = updateHoursToCurrentTime(foundSchedule[((foundNumber-2)+currentPositionTable)].sh);
scheduleMinuteUpdatedEnd = updateMinutesToCurrentTime(foundSchedule[((foundNumber-2)+currentPositionTable)].em);
scheduleHourUpdatedEnd = updateHoursToCurrentTime(foundSchedule[((foundNumber-2)+currentPositionTable)].eh);
schduleDay = updateDay(1,foundSchedule[((foundNumber-2)+currentPositionTable)].dow);
g.setColor(255,255,255);
g.reset();
g.setFont("8x12",2);
var splitClassNames = splitter(foundSchedule[((foundNumber-2)+currentPositionTable)].cn, 15);
var currentY = 5;
for (var j=0; j < splitClassNames.length; j++) {
g.drawString(splitClassNames[j],13,currentY);
currentY = currentY + 25;
}
g.setFont("8x12");
g.drawString(schduleDay,13,currentY);
g.drawString(scheduleHourUpdatedStart+":"+scheduleMinuteUpdatedStart+"-"+scheduleHourUpdatedEnd+":"+scheduleMinuteUpdatedEnd,13,currentY+15);
}
g.flip();
g.setColor(255,255,255); g.setColor(255,255,255);
g.setFont("8x12",2);
var splitClassNames = splitter(foundSchedule[((foundNumber-2)+currentPositionTable)].cn, 15);
var currentY = 5;
for (var j=0; j < splitClassNames.length; j++) {
g.drawString(splitClassNames[j],13,currentY+50);
currentY = currentY + 25;
}
g.setFont("8x12");
g.drawString(schduleDay,13,currentY+50);
g.drawString(scheduleHourUpdatedStart+":"+scheduleMinuteUpdatedStart+"-"+scheduleHourUpdatedEnd+":"+scheduleMinuteUpdatedEnd,13,currentY+15+50);
} }
var Layout = require("Layout");
var layout = new Layout(
{type:"h", c: [
{type:"custom", render:renderTableText, id:"tableText"},
{type:"custom", render:buttonsF, id:"buttons"},
{type:"custom", render:renderBackground, id:"background"},
{type:"custom", render:renderTable, id:"table"},
{type:"custom", render:renderMiniBackground, id:"miniBackground"},
{type:"custom", render:renderLoading, id:"loading"},
{type:"custom", render:renderInformation, id:"info"},
{type:"txt", font:"7x11Numeric7Seg:2", label:"00:00", id:"time"},
]},
{type:"v", c:[
]},
{btns:[
{label:"", cb: RedRectUp()},
{label:"", cb: l=>print("Two")},
{label:"", cb: RedRectDown()}
]});
displayClock(); function getBackgroundImage() {return require("heatshrink").decompress(atob("j0ZyEKIf4A4gIB6gQB6gYB6ggB6goB6gwB6g4B6hAABAYIBHBZIVLAK8IhIBXgAThhQB6hYB6hgB6hoB6hwB6h4B6iAB6iIB6iQBHiAJOB54XSiYB6igB6ioB6iwB6i4B5A="));}
function logDebug(message) {console.log(message);}
function changeScene(){
layout.render(layout.buttons);
if(currentStage == INFORMATION){
currentStage = LIST;
nIntervId = setInterval(redrawScreen, 100000);
}else if(currentStage == LIST){
currentStage = INFORMATION;
clearInterval();
}
layout.render(layout.background);
layout.render(layout.buttons);
draw();
}
// timeout used to update every minute
var drawTimeout;
setInterval(draw, 15000);
var currentMinuteUpdatedFunction = "00";
var currentHourUpdatedFunction = 11;
var scheduleMinuteUpdatedStart = 35;
var scheduleHourUpdatedStart = 10;
var scheduleMinuteUpdatedEnd = currentMinuteUpdatedFunction;
var scheduleHourUpdatedEnd = 11;
setWatch(RedRectUp, BTN3, { repeat:true, edge:'rising', debounce : 50 }); setWatch(RedRectUp, BTN3, { repeat:true, edge:'rising', debounce : 50 });
setWatch(RedRectDown, BTN1, { repeat:true, edge:'rising', debounce : 50 }); setWatch(RedRectDown, BTN1, { repeat:true, edge:'rising', debounce : 50 });
setWatch(changeScene, BTN2, { repeat:true, edge:'rising', debounce : 50 }); setWatch(changeScene, BTN2, { repeat:true, edge:'rising', debounce : 50 });
setInterval(displayClock, 20000); layout.update();
layout.render(layout.loading);
layout.render(layout.background);
layout.render(layout.buttons);
setTimeout(displayClock,500); draw();