grocy/js/lib/nightmode.js
2021-06-21 00:16:05 +02:00

144 lines
3.7 KiB
JavaScript

import { BoolVal } from '../helpers/extensions'
class Nightmode
{
constructor(Grocy)
{
this.Grocy = Grocy;
}
Initialize()
{
var self = this;
$("#night-mode-enabled").on("change", function()
{
var value = $(this).is(":checked");
if (value)
{
// Force disable auto night mode when night mode is enabled
$("#auto-night-mode-enabled").prop("checked", false);
$("#auto-night-mode-enabled").trigger("change");
$("body").addClass("night-mode");
}
else
{
$("body").removeClass("night-mode");
}
});
$("#auto-night-mode-enabled").on("change", function()
{
var value = $(this).is(":checked");
$("#auto-night-mode-time-range-from").prop("readonly", !value);
$("#auto-night-mode-time-range-to").prop("readonly", !value);
if (!value && !BoolVal(self.Grocy.UserSettings.night_mode_enabled))
{
$("body").removeClass("night-mode");
}
// Force disable night mode when auto night mode is enabled
if (value)
{
$("#night-mode-enabled").prop("checked", false);
$("#night-mode-enabled").trigger("change");
}
});
$(document).on("keyup", "#auto-night-mode-time-range-from, #auto-night-mode-time-range-to", function()
{
var value = $(this).val();
var valueIsValid = moment(value, "HH:mm", true).isValid();
if (valueIsValid)
{
$(this).removeClass("bg-danger");
}
else
{
$(this).addClass("bg-danger");
}
self.CheckNightMode();
});
$("#auto-night-mode-time-range-goes-over-midgnight").on("change", function()
{
self.CheckNightMode();
});
if (this.Grocy.UserId !== -1)
{
$("#night-mode-enabled").prop("checked", BoolVal(this.Grocy.UserSettings.night_mode_enabled));
$("#auto-night-mode-enabled").prop("checked", BoolVal(this.Grocy.UserSettings.auto_night_mode_enabled));
$("#auto-night-mode-time-range-goes-over-midgnight").prop("checked", BoolVal(this.Grocy.UserSettings.auto_night_mode_time_range_goes_over_midnight));
$("#auto-night-mode-enabled").trigger("change");
$("#auto-night-mode-time-range-from").val(this.Grocy.UserSettings.auto_night_mode_time_range_from);
$("#auto-night-mode-time-range-from").trigger("keyup");
$("#auto-night-mode-time-range-to").val(this.Grocy.UserSettings.auto_night_mode_time_range_to);
$("#auto-night-mode-time-range-to").trigger("keyup");
}
}
StartWatchdog()
{
if (this.Grocy.UserId !== -1)
{
this.CheckNightMode();
}
if (this.Grocy.Mode === "production")
{
setInterval(this.CheckNightMode, 60000);
}
else
{
setInterval(this.CheckNightMode, 4000);
}
}
CheckNightMode()
{
if (this.Grocy.UserId === -1 || !BoolVal(this.Grocy.UserSettings.auto_night_mode_enabled))
{
return;
}
var start = moment(this.Grocy.UserSettings.auto_night_mode_time_range_from, "HH:mm", true);
var end = moment(this.Grocy.UserSettings.auto_night_mode_time_range_to, "HH:mm", true);
var now = moment();
if (!start.isValid() || !end.isValid)
{
return;
}
if (BoolVal(this.Grocy.UserSettings.auto_night_mode_time_range_goes_over_midnight))
{
end.add(1, "day");
}
if (start.isSameOrBefore(now) && end.isSameOrAfter(now)) // We're INSIDE of night mode time range
{
if (!$("body").hasClass("night-mode"))
{
$("body").addClass("night-mode");
$("#currently-inside-night-mode-range").prop("checked", true);
$("#currently-inside-night-mode-range").trigger("change");
}
}
else // We're OUTSIDE of night mode time range
{
if ($("body").hasClass("night-mode"))
{
$("body").removeClass("night-mode");
$("#currently-inside-night-mode-range").prop("checked", false);
$("#currently-inside-night-mode-range").trigger("change");
}
}
}
}
export { Nightmode }