1
0
mirror of https://github.com/phpbb/phpbb.git synced 2025-08-08 01:36:57 +02:00

[feature/new-tz-handling] Introduce 2 step timezone selection using javascript

PHPBB3-9558
This commit is contained in:
Joas Schilling
2012-06-05 21:44:44 +02:00
parent 3c6272ff04
commit 66f7d45603
7 changed files with 107 additions and 22 deletions

View File

@@ -1,10 +1,37 @@
function phpbb_preselect_tz_select()
function phpbb_switch_tz_date(keep_selection)
{
var selector = document.getElementsByClassName('tz_select')[0];
if (selector.value)
{
return;
var timezone_groups = document.getElementById("timezone");
for (var i = 0; i < timezone_groups.childElementCount; i++) {
if (timezone_groups.children[i].tagName == "OPTGROUP" &&
timezone_groups.children[i].label != document.getElementById("tz_date").value)
{
timezone_groups.children[i].style.display = "none";
}
else if (timezone_groups.children[i].tagName == "OPTGROUP")
{
// Display other options
timezone_groups.children[i].style.display = "block";
}
}
if (typeof keep_selection !== 'undefined')
{
if (!keep_selection)
{
timezone_groups.children[0].selected = true;
}
}
}
function phpbb_enable_tz_dates()
{
var tz_select_date = document.getElementById("tz_select_date");
tz_select_date.style.display = "block";
}
function phpbb_preselect_tz_select(force_selector, l_suggestion)
{
var selector = document.getElementById('tz_date');
// The offset returned here is in minutes and negated.
// http://www.w3schools.com/jsref/jsref_getTimezoneOffset.asp
var offset = (new Date()).getTimezoneOffset();
@@ -42,12 +69,26 @@ function phpbb_preselect_tz_select()
var option = selector.options[i];
if (option.value.substring(0, prefix_length) == prefix)
{
// Firefox scrolls the selector only to put the option into view;
// for negative-offset timezones, this means the first timezone
// of a particular offset will be the bottom one, and selected,
// with all other timezones not visible. Not much can be done
// about that here unfortunately.
option.selected = true;
if (selector.value && selector.value != option.value && !force_selector)
{
// We do not select the option for the user, but notify him,
// that we would suggest a different setting.
document.getElementById("tz_select_date_suggest").style.display = "inline";
document.getElementById("tz_select_date_suggest").title = l_suggestion.replace("%s", option.innerHTML);
document.getElementById("tz_select_date_suggest").innerHTML = l_suggestion.replace("%s", option.innerHTML.substring(0, 9));
phpbb_switch_tz_date(true);
}
else
{
// Firefox scrolls the selector only to put the option into view;
// for negative-offset timezones, this means the first timezone
// of a particular offset will be the bottom one, and selected,
// with all other timezones not visible. Not much can be done
// about that here unfortunately.
option.selected = true;
phpbb_switch_tz_date(!force_selector);
document.getElementById("tz_select_date_suggest").style.display = "none";
}
break;
}
}