mtimer/system/formspecs/timezone_offset.lua
2021-10-06 01:43:53 +02:00

80 lines
2.9 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- # vim: nowrap
--
-- Set Vim to no-wrapping mode because of some lines not fitting within the 80
-- characters width limit due to overall readability of the code.
-- Localise needed functions
local m = mtimer
local S = m.translator
local esc = minetest.formspec_escape
-- Render the world map
--
-- This function renders the world map with the marker of the current time
-- zone offset and the buttons for selecting the new time zone.
--
-- @param offset The current offset as number
-- @return string The formspec code for the rendered world map
local render_world_map = function (offset)
local zones_multiplicator = 10/25
local marker_pos = (5 + (offset * zones_multiplicator)) - 0.2
local buttons = ''
for zone = -12,12,1 do
local position = (5 + (zone * zones_multiplicator)) - 0.2
local template = 'image_button[+position,0;0.4,5;+texture;+id;;;false]'
local infotext = S('Set timezone offset to @1', zone)
local tooltip = 'tooltip[new_offset_'..zone..';'..infotext..']'
local button = template:gsub('%+%w+',{
['+position'] = position,
['+texture'] = 'mtimer_transparent.png',
['+id'] = 'new_offset_'..zone
})
buttons = buttons..' '..button..tooltip
end
return table.concat({
'image[0,0;10,5;mtimer_world_map.png^[opacity:96]',
'box[0,0;10,5;#00000060]', -- background
'box['..marker_pos..',0;0.4,5;#729fcf]',
buttons
}, ' ')
end
mtimer.dialog.timezone_offset = function (player_name)
local time_data = mtimer.get_times(player_name).real_time
local offset = time_data.times.offset
local dst_info = esc(S('Please note that daylight saving time (DST) is ignored entirely due to minimizing implementation complexity. You need to manually adjust the time zone in order to adapt to any DST changes. This messes up the visual representation a bit (but its not very accurate anyways …).'))
mtimer.show_formspec('mtimer:timezone_offset', {
title = S('Timezone Offset'),
show_to = player_name,
width = 10,
height = 9.5,
formspec = {
'container[0,0]',
'field_close_on_enter[offset;false]',
'label[3.25,0.25;'..S('set a value between -12 and +12 hours')..']',
'field[0,0;3,0.5;offset;;'..offset..']',
'box[0,0.75;+contentWidth,0.02;#ffffff]',
'container_end[]',
'container[0,1]',
render_world_map(offset),
'box[0,5.25;+contentWidth,0.02;#ffffff]',
'container_end[]',
'container[0,6.625]',
'label[0,0;'..S('Current server time: @1', time_data.times.server_time)..']',
'label[0,0.4;'.. S('Calculated local time: @1', time_data.times.local_time)..']',
'box[0,0.75;+contentWidth,0.02;#ffffff]',
'textarea[0,1;10,3;;;'..dst_info..']',
'container_end[]',
}
})
end