[feature/new-tz-handling] Use jQuery and INCLUDEJS for javascript

PHPBB3-9558
This commit is contained in:
Joas Schilling 2012-06-17 16:54:12 +02:00
parent 5f96e5d374
commit 5441ee1ee4
6 changed files with 72 additions and 69 deletions

View file

@ -1,29 +1,27 @@
function phpbb_switch_tz_date(keep_selection) function phpbb_switch_tz_date(keep_selection)
{ {
var timezone_groups = document.getElementById("timezone"); $('#timezone > optgroup').css("display", "none");
for (var i = 0; i < timezone_groups.childElementCount; i++) { $("#timezone > optgroup[label='" + $('#tz_date').val() + "']").css("display", "block");
if (timezone_groups.children[i].tagName == "OPTGROUP" &&
timezone_groups.children[i].label != document.getElementById("tz_date").value) if ($("#timezone > optgroup[label='" + $('#tz_date').val() + "'] > option").size() == 1)
{ {
timezone_groups.children[i].style.display = "none"; // If there is only one timezone for the selected date, we just select that automatically.
} $("#timezone > optgroup[label='" + $('#tz_date').val() + "'] > option:first").attr("selected", true);
else if (timezone_groups.children[i].tagName == "OPTGROUP") keep_selection = true;
{
// Display other options
timezone_groups.children[i].style.display = "block";
}
} }
if (typeof keep_selection !== 'undefined') if (typeof keep_selection !== 'undefined')
{ {
if (!keep_selection) if (!keep_selection)
{ {
timezone_groups.children[0].selected = true; $('#timezone > option:first').attr("selected", true);
} }
} }
} }
function phpbb_enable_tz_dates() function phpbb_enable_tz_dates()
{ {
var tz_select_date = document.getElementById("tz_select_date"); $('#tz_select_date').css("display", "block");
tz_select_date.style.display = "block";
} }
phpbb_enable_tz_dates();

View file

@ -14,7 +14,6 @@
{S_TZ_OPTIONS} {S_TZ_OPTIONS}
</select> </select>
<script type="text/javascript" src="{T_TEMPLATE_PATH}/timezone.js"></script> <!-- INCLUDEJS timezone.js -->
<script type="text/javascript">phpbb_enable_tz_dates();</script>
</dd> </dd>
</dl> </dl>

View file

@ -1,37 +1,32 @@
function phpbb_switch_tz_date(keep_selection) function phpbb_switch_tz_date(keep_selection)
{ {
var timezone_groups = document.getElementById("timezone"); $('#timezone > optgroup').css("display", "none");
for (var i = 0; i < timezone_groups.childElementCount; i++) { $("#timezone > optgroup[label='" + $('#tz_date').val() + "']").css("display", "block");
if (timezone_groups.children[i].tagName == "OPTGROUP" &&
timezone_groups.children[i].label != document.getElementById("tz_date").value) if ($("#timezone > optgroup[label='" + $('#tz_date').val() + "'] > option").size() == 1)
{ {
timezone_groups.children[i].style.display = "none"; // If there is only one timezone for the selected date, we just select that automatically.
} $("#timezone > optgroup[label='" + $('#tz_date').val() + "'] > option:first").attr("selected", true);
else if (timezone_groups.children[i].tagName == "OPTGROUP") keep_selection = true;
{
// Display other options
timezone_groups.children[i].style.display = "block";
}
} }
if (typeof keep_selection !== 'undefined') if (typeof keep_selection !== 'undefined')
{ {
if (!keep_selection) if (!keep_selection)
{ {
timezone_groups.children[0].selected = true; $('#timezone > option:first').attr("selected", true);
} }
} }
} }
function phpbb_enable_tz_dates() function phpbb_enable_tz_dates()
{ {
var tz_select_date = document.getElementById("tz_select_date"); $('#tz_select_date').css("display", "block");
tz_select_date.style.display = "block";
} }
function phpbb_preselect_tz_select(force_selector, l_suggestion) function phpbb_preselect_tz_select(force_selector, l_suggestion)
{ {
var selector = document.getElementById('tz_date');
// The offset returned here is in minutes and negated. // The offset returned here is in minutes and negated.
// http://www.w3schools.com/jsref/jsref_getTimezoneOffset.asp // http://www.w3schools.com/jsref/jsref_getTimezoneOffset.asp
var offset = (new Date()).getTimezoneOffset(); var offset = (new Date()).getTimezoneOffset();
@ -62,20 +57,23 @@ function phpbb_preselect_tz_select(force_selector, l_suggestion)
{ {
minutes = minutes.toString(); minutes = minutes.toString();
} }
var prefix = 'GMT' + sign + hours + ':' + minutes; var prefix = 'GMT' + sign + hours + ':' + minutes;
var prefix_length = prefix.length; var prefix_length = prefix.length;
for (var i = 0; i < selector.options.length; ++i)
var selector_options = $('#tz_date > option');
for (var i = 0; i < selector_options.length; ++i)
{ {
var option = selector.options[i]; var option = selector_options[i];
if (option.value.substring(0, prefix_length) == prefix) if (option.value.substring(0, prefix_length) == prefix)
{ {
if (selector.value && selector.value != option.value && !force_selector) if ($('#tz_date').val() != option.value && !force_selector)
{ {
// We do not select the option for the user, but notify him, // We do not select the option for the user, but notify him,
// that we would suggest a different setting. // that we would suggest a different setting.
document.getElementById("tz_select_date_suggest").style.display = "inline"; $('#tz_select_date_suggest').css("display", "inline");
document.getElementById("tz_select_date_suggest").title = l_suggestion.replace("%s", option.innerHTML); $('#tz_select_date_suggest').attr("title", l_suggestion.replace("%s", option.innerHTML));
document.getElementById("tz_select_date_suggest").innerHTML = l_suggestion.replace("%s", option.innerHTML.substring(0, 9)); $('#tz_select_date_suggest').html(l_suggestion.replace("%s", option.innerHTML.substring(0, 9)));
phpbb_switch_tz_date(true); phpbb_switch_tz_date(true);
} }
else else
@ -87,9 +85,12 @@ function phpbb_preselect_tz_select(force_selector, l_suggestion)
// about that here unfortunately. // about that here unfortunately.
option.selected = true; option.selected = true;
phpbb_switch_tz_date(!force_selector); phpbb_switch_tz_date(!force_selector);
document.getElementById("tz_select_date_suggest").style.display = "none"; $('#tz_select_date_suggest').css("display", "none");
} }
break; break;
} }
} }
} }
phpbb_enable_tz_dates();
phpbb_preselect_tz_select(is_registration, l_timezone_date_suggestion);

View file

@ -15,8 +15,10 @@
{S_TZ_OPTIONS} {S_TZ_OPTIONS}
</select> </select>
<script type="text/javascript" src="{T_SUPER_TEMPLATE_PATH}/timezone.js"></script> <script type="text/javascript">
<script type="text/javascript">phpbb_enable_tz_dates();</script> var is_registration = <!-- IF S_REGISTRATION -->true<!-- ELSE -->false<!-- ENDIF -->;
<script type="text/javascript">phpbb_preselect_tz_select(<!-- IF S_REGISTRATION -->true<!-- ELSE -->false<!-- ENDIF -->, '{L_TIMEZONE_DATE_SUGGESTION}');</script> var l_timezone_date_suggestion = "{L_TIMEZONE_DATE_SUGGESTION}";
</script>
<!-- INCLUDEJS template/timezone.js -->
</dd> </dd>
</dl> </dl>

View file

@ -1,37 +1,32 @@
function phpbb_switch_tz_date(keep_selection) function phpbb_switch_tz_date(keep_selection)
{ {
var timezone_groups = document.getElementById("timezone"); $('#timezone > optgroup').css("display", "none");
for (var i = 0; i < timezone_groups.childElementCount; i++) { $("#timezone > optgroup[label='" + $('#tz_date').val() + "']").css("display", "block");
if (timezone_groups.children[i].tagName == "OPTGROUP" &&
timezone_groups.children[i].label != document.getElementById("tz_date").value) if ($("#timezone > optgroup[label='" + $('#tz_date').val() + "'] > option").size() == 1)
{ {
timezone_groups.children[i].style.display = "none"; // If there is only one timezone for the selected date, we just select that automatically.
} $("#timezone > optgroup[label='" + $('#tz_date').val() + "'] > option:first").attr("selected", true);
else if (timezone_groups.children[i].tagName == "OPTGROUP") keep_selection = true;
{
// Display other options
timezone_groups.children[i].style.display = "block";
}
} }
if (typeof keep_selection !== 'undefined') if (typeof keep_selection !== 'undefined')
{ {
if (!keep_selection) if (!keep_selection)
{ {
timezone_groups.children[0].selected = true; $('#timezone > option:first').attr("selected", true);
} }
} }
} }
function phpbb_enable_tz_dates() function phpbb_enable_tz_dates()
{ {
var tz_select_date = document.getElementById("tz_select_date"); $('#tz_select_date').css("display", "block");
tz_select_date.style.display = "block";
} }
function phpbb_preselect_tz_select(force_selector, l_suggestion) function phpbb_preselect_tz_select(force_selector, l_suggestion)
{ {
var selector = document.getElementById('tz_date');
// The offset returned here is in minutes and negated. // The offset returned here is in minutes and negated.
// http://www.w3schools.com/jsref/jsref_getTimezoneOffset.asp // http://www.w3schools.com/jsref/jsref_getTimezoneOffset.asp
var offset = (new Date()).getTimezoneOffset(); var offset = (new Date()).getTimezoneOffset();
@ -62,20 +57,23 @@ function phpbb_preselect_tz_select(force_selector, l_suggestion)
{ {
minutes = minutes.toString(); minutes = minutes.toString();
} }
var prefix = 'GMT' + sign + hours + ':' + minutes; var prefix = 'GMT' + sign + hours + ':' + minutes;
var prefix_length = prefix.length; var prefix_length = prefix.length;
for (var i = 0; i < selector.options.length; ++i)
var selector_options = $('#tz_date > option');
for (var i = 0; i < selector_options.length; ++i)
{ {
var option = selector.options[i]; var option = selector_options[i];
if (option.value.substring(0, prefix_length) == prefix) if (option.value.substring(0, prefix_length) == prefix)
{ {
if (selector.value && selector.value != option.value && !force_selector) if ($('#tz_date').val() != option.value && !force_selector)
{ {
// We do not select the option for the user, but notify him, // We do not select the option for the user, but notify him,
// that we would suggest a different setting. // that we would suggest a different setting.
document.getElementById("tz_select_date_suggest").style.display = "inline"; $('#tz_select_date_suggest').css("display", "inline");
document.getElementById("tz_select_date_suggest").title = l_suggestion.replace("%s", option.innerHTML); $('#tz_select_date_suggest').attr("title", l_suggestion.replace("%s", option.innerHTML));
document.getElementById("tz_select_date_suggest").innerHTML = l_suggestion.replace("%s", option.innerHTML.substring(0, 9)); $('#tz_select_date_suggest').html(l_suggestion.replace("%s", option.innerHTML.substring(0, 9)));
phpbb_switch_tz_date(true); phpbb_switch_tz_date(true);
} }
else else
@ -87,9 +85,12 @@ function phpbb_preselect_tz_select(force_selector, l_suggestion)
// about that here unfortunately. // about that here unfortunately.
option.selected = true; option.selected = true;
phpbb_switch_tz_date(!force_selector); phpbb_switch_tz_date(!force_selector);
document.getElementById("tz_select_date_suggest").style.display = "none"; $('#tz_select_date_suggest').css("display", "none");
} }
break; break;
} }
} }
} }
phpbb_enable_tz_dates();
phpbb_preselect_tz_select(is_registration, l_timezone_date_suggestion);

View file

@ -15,8 +15,10 @@
{S_TZ_OPTIONS} {S_TZ_OPTIONS}
</select> </select>
<script type="text/javascript" src="{T_SUPER_TEMPLATE_PATH}/timezone.js"></script> <script type="text/javascript">
<script type="text/javascript">phpbb_enable_tz_dates();</script> var is_registration = <!-- IF S_REGISTRATION -->true<!-- ELSE -->false<!-- ENDIF -->;
<script type="text/javascript">phpbb_preselect_tz_select(<!-- IF S_REGISTRATION -->true<!-- ELSE -->false<!-- ENDIF -->, '{L_TIMEZONE_DATE_SUGGESTION}');</script> var l_timezone_date_suggestion = "{L_TIMEZONE_DATE_SUGGESTION}";
</script>
<!-- INCLUDEJS template/timezone.js -->
</td> </td>
</tr> </tr>