feat: show lastest result in nowday #19
@@ -26,6 +26,7 @@ fetch("https://api.ipify.org?format=json").then(response => {
|
||||
let goodFortunes = [];
|
||||
let badFortunes = [];
|
||||
let special_events = [];
|
||||
var fortune_generated = false;
|
||||
|
||||
// using async and await to prevent fetching the data too late...
|
||||
async function fetch_data(){
|
||||
@@ -108,7 +109,7 @@ async function init_page(){
|
||||
$('#month').html(showMonth);
|
||||
$('#date').html(showDate);
|
||||
$('#weekday').html(showDay);
|
||||
|
||||
|
||||
let eventIndex_1 = -1, eventIndex_2 = -1;
|
||||
// check if there is special event today
|
||||
for(let i = 0; i < special_events.length; i++){
|
||||
@@ -124,7 +125,7 @@ async function init_page(){
|
||||
// if there is upcoming event then show
|
||||
if(eventIndex_1 != -1){
|
||||
let days = daysDiff(eventIndex_1);
|
||||
let upcoming_event_1 = `<span style='font-size:5vmin; color:${descColor};'>距離<b style='color:${specialEventColor}'>${special_events[eventIndex_1].event}</b>還剩<b style='color:${daystoSpecialEvent}'>${days}</b>天</span>`;
|
||||
let upcoming_event_1 = `<span style='font-size:5vmin; color:${descColor};'>距離<b style='color:${specialEventColor}'>${special_events[eventIndex_1].event}</b>還剩<b style='color:${daystoSpecialEvent}'>${days}</b>天</span>`;
|
||||
$('#upcoming-event-1').html(upcoming_event_1);
|
||||
}
|
||||
if(eventIndex_2 != -1){
|
||||
@@ -138,6 +139,16 @@ async function init_page(){
|
||||
let special_event_today = `<span style='font-size:9vmin; color:${descColor};'>今日是<b style='color:${goodColor};'>${special_events[special_events_index].event}</b></span>`;
|
||||
$('#special-day').html(special_event_today);
|
||||
}
|
||||
|
||||
let last_date_str = localStorage.getItem('last_date');
|
||||
if (last_date_str !== null && last_date_str !== undefined) {
|
||||
let now_date = new Date();
|
||||
let last_date = new Date(last_date_str);
|
||||
if (now_date.getFullYear() === last_date.getFullYear() && now_date.getMonth() === last_date.getMonth() && now_date.getDate() === last_date.getDate()) {
|
||||
fortune_generated = true;
|
||||
Appear();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// event bar
|
||||
@@ -154,23 +165,41 @@ function Appear() {
|
||||
$('#init-page').hide();
|
||||
$('#result-page').show();
|
||||
|
||||
// transform ip to four numbers
|
||||
let num = ip.split(".").map(num => parseInt(num));
|
||||
|
||||
|
||||
// some lengths
|
||||
const goodLen = goodFortunes.length;
|
||||
const badLen = badFortunes.length;
|
||||
const statusLen = fortuneStatus.length;
|
||||
|
||||
// TODO: improve the hash process
|
||||
let hashDate = Math.round(Math.log10(year * ((month << (Math.log10(num[3]) + day - 1)) * (date << Math.log10(num[2] << day)))));
|
||||
let seed1 = (num[0] >> hashDate) * (num[1] >> Math.min(hashDate, 2)) + (num[2] << 1) * (num[3] >> 3) + (date << 3) * (month << hashDate) + (year * day) >> 2;
|
||||
let seed2 = (num[0] << (hashDate + 2)) * (num[1] << hashDate) + (num[2] << 1) * (num[3] << 3) + (date << (hashDate - 1)) * (month << 4) + year >> hashDate + (date * day) >> 1;
|
||||
|
||||
// decide the status
|
||||
let status_index = ((seed1 + seed2) % statusLen + statusLen) % statusLen;
|
||||
let status_index = -1;
|
||||
let seed1 = -1;
|
||||
let seed2 = -1;
|
||||
|
||||
if (fortune_generated == false) {
|
||||
// transform ip to four numbers
|
||||
let num = ip.split(".").map(num => parseInt(num));
|
||||
|
||||
// TODO: improve the hash process
|
||||
let hashDate = Math.round(Math.log10(year * ((month << (Math.log10(num[3]) + day - 1)) * (date << Math.log10(num[2] << day)))));
|
||||
seed1 = (num[0] >> hashDate) * (num[1] >> Math.min(hashDate, 2)) + (num[2] << 1) * (num[3] >> 3) + (date << 3) * (month << hashDate) + (year * day) >> 2;
|
||||
seed2 = (num[0] << (hashDate + 2)) * (num[1] << hashDate) + (num[2] << 1) * (num[3] << 3) + (date << (hashDate - 1)) * (month << 4) + year >> hashDate + (date * day) >> 1;
|
||||
|
||||
// decide the status
|
||||
status_index = ((seed1 + seed2) % statusLen + statusLen) % statusLen;
|
||||
|
||||
// update last record
|
||||
localStorage.setItem('last_date', d.toISOString());
|
||||
localStorage.setItem('last_status_index', status_index.toString());
|
||||
localStorage.setItem('last_seed1', seed1.toString());
|
||||
localStorage.setItem('last_seed2', seed2.toString());
|
||||
} else {
|
||||
status_index = parseInt(localStorage.getItem('last_status_index'));
|
||||
seed1 = parseInt(localStorage.getItem('last_seed1'));
|
||||
seed2 = parseInt(localStorage.getItem('last_seed2'));
|
||||
}
|
||||
|
||||
let status = `<span style='font-size:12vmin; color:${textColor[status_index]};'><b>§ ${fortuneStatus[status_index]} §</b></span>`;
|
||||
|
||||
|
||||
if(special){
|
||||
status_index = special_events[special_events_index].status_index;
|
||||
let special_status = `<span style='font-size:12vmin; color:${textColor[status_index]};'><b>§ ${fortuneStatus[status_index]} §</b></span>`;
|
||||
@@ -187,35 +216,35 @@ function Appear() {
|
||||
let l2 = (((seed1 << 1) + date) % goodLen + goodLen) % goodLen;
|
||||
while(set.has(goodFortunes[l2].event)){
|
||||
l2 = (l2 + 1) % goodLen;
|
||||
}
|
||||
}
|
||||
set.add(goodFortunes[l2].event);
|
||||
let r1 = (((seed1 >> 1) + (d.getMonth() << 3)) % badLen + badLen) % badLen;
|
||||
while(set.has(badFortunes[r1].event)){
|
||||
r1 = (r1 + 2) % badLen;
|
||||
}
|
||||
}
|
||||
set.add(badFortunes[r1].event);
|
||||
let r2 = ((((((seed1 << 3) + (d.getFullYear() >> 5) * (date << 2)) % badLen) * seed2) >> 6) % badLen + badLen) % badLen;
|
||||
while(set.has(badFortunes[r2].event)){
|
||||
r2 = (r2 + 1) % badLen;
|
||||
}
|
||||
|
||||
// organize the stuffs below this line...
|
||||
}
|
||||
|
||||
// organize the stuffs below this line...
|
||||
let l_1_event = good_span(goodFortunes[l1].event);
|
||||
let l_1_desc = desc_span(goodFortunes[l1].description);
|
||||
let l_1_desc = desc_span(goodFortunes[l1].description);
|
||||
let l_2_event = good_span(goodFortunes[l2].event);
|
||||
let l_2_desc = desc_span(goodFortunes[l2].description);
|
||||
let r_1_event = bad_span(badFortunes[r1].event);
|
||||
let r_1_desc = desc_span(badFortunes[r1].description);
|
||||
let r_2_event = bad_span(badFortunes[r2].event);
|
||||
let r_2_desc = desc_span(badFortunes[r2].description);
|
||||
|
||||
|
||||
if(special){
|
||||
// instead clear variable name, use short variable name for here... cuz it's too repetitive
|
||||
let Data = special_events[special_events_index];
|
||||
if(status_index == 0){
|
||||
J_r_1_event.html(allGood);
|
||||
}
|
||||
else{
|
||||
else{
|
||||
J_r_1_event.html(bad_span(Data.badFortunes.r_1_event));
|
||||
J_r_1_desc.html(desc_span(Data.badFortunes.r_1_desc));
|
||||
J_r_2_event.html(bad_span(Data.badFortunes.r_2_event));
|
||||
@@ -273,4 +302,4 @@ function getLuck() {
|
||||
Update();
|
||||
}
|
||||
|
||||
init_page();
|
||||
init_page();
|
||||
|
||||
Reference in New Issue
Block a user