Merge pull request from ArthurHoaro/theme/timezone

Change timezone data structure send to the templates
This commit is contained in:
ArthurHoaro 2017-04-25 19:09:13 +02:00 committed by GitHub
commit 4c7045229c
12 changed files with 289 additions and 144 deletions

View file

@ -73,15 +73,35 @@
<div class="pure-u-lg-{$ratioLabel} pure-u-1 ">
<div class="form-label">
<label>
<span class="label-name">{'Timezone'|t}</span>
<span class="label-name">{'Timezone'|t}</span><br>
<span class="label-desc">{'Continent'|t} &middot; {'City'|t}</span>
</label>
</div>
</div>
<div class="pure-u-lg-{$ratioInput} pure-u-1 ">
<div class="form-input">
{ignore}FIXME! too hackish, needs to be fixed upstream{/ignore}
<div class="timezone" id="timezone-remove">{$timezone_form}</div>
<div class="timezone" id="timezone-add"></div>
<div class="timezone">
<select id="continent" name="continent">
{loop="$continents"}
{if="$key !== 'selected'"}
<option value="{$value}" {if="$continents.selected === $value"}selected{/if}>
{$value}
</option>
{/if}
{/loop}
</select>
<select id="city" name="city">
{loop="$cities"}
{if="$key !== 'selected'"}
<option value="{$value.city}"
{if="$cities.selected === $value.city"}selected{/if}
data-continent="{$value.continent}">
{$value.city}
</option>
{/if}
{/loop}
</select>
</div>
</div>
</div>
</div>

View file

@ -50,23 +50,6 @@
</div>
</div>
<div class="pure-g">
<div class="pure-u-lg-{$ratioLabel} pure-u-1 ">
<div class="form-label">
<label>
<span class="label-name">{'Timezone'|t}</span>
</label>
</div>
</div>
<div class="pure-u-lg-{$ratioInput} pure-u-1 ">
<div class="form-input">
{ignore}FIXME! too hackish, needs to be fixed upstream{/ignore}
<div class="timezone" id="timezone-remove">{$timezone_html}</div>
<div class="timezone" id="timezone-add"></div>
</div>
</div>
</div>
<div class="pure-g">
<div class="pure-u-lg-{$ratioLabel} pure-u-1">
<div class="form-label">
@ -82,6 +65,43 @@
</div>
</div>
<div class="pure-g">
<div class="pure-u-lg-{$ratioLabel} pure-u-1">
<div class="form-label">
<label>
<span class="label-name">{'Timezone'|t}</span><br>
<span class="label-desc">{'Continent'|t} &middot; {'City'|t}</span>
</label>
</div>
</div>
<div class="pure-u-lg-{$ratioInput} pure-u-1">
<div class="form-input">
<div class="timezone">
<select id="continent" name="continent">
{loop="$continents"}
{if="$key !== 'selected'"}
<option value="{$value}" {if="$continents.selected === $value"}selected{/if}>
{$value}
</option>
{/if}
{/loop}
</select>
<select id="city" name="city">
{loop="$cities"}
{if="$key !== 'selected'"}
<option value="{$value.city}"
{if="$cities.selected === $value.city"}selected{/if}
data-continent="{$value.continent}">
{$value.city}
</option>
{/if}
{/loop}
</select>
</div>
</div>
</div>
</div>
<div class="pure-g">
<div class="pure-u-lg-{$ratioLabel} pure-u-7-8">
<div class="form-label">

View file

@ -76,9 +76,12 @@ window.onload = function () {
}
}
document.getElementById('menu-toggle').addEventListener('click', function (e) {
toggleMenu();
});
var menuToggle = document.getElementById('menu-toggle');
if (menuToggle != null) {
menuToggle.addEventListener('click', function (e) {
toggleMenu();
});
}
window.addEventListener(WINDOW_CHANGE_EVENT, closeMenu);
})(this, this.document);
@ -298,21 +301,6 @@ window.onload = function () {
});
}
/**
* TimeZome select
* FIXME! way too hackish
*/
var toRemove = document.getElementById('timezone-remove');
if (toRemove != null) {
var firstSelect = toRemove.getElementsByTagName('select')[0];
var secondSelect = toRemove.getElementsByTagName('select')[1];
toRemove.parentNode.removeChild(toRemove);
var toAdd = document.getElementById('timezone-add');
var newTimezone = '<span class="timezone-continent">Continent ' + firstSelect.outerHTML + '</span>';
newTimezone += ' <span class="timezone-country">Country ' + secondSelect.outerHTML + '</span>';
toAdd.innerHTML = newTimezone;
}
/**
* Awesomplete trigger.
*/
@ -365,6 +353,15 @@ window.onload = function () {
}
});
});
var continent = document.getElementById('continent');
var city = document.getElementById('city');
if (continent != null && city != null) {
continent.addEventListener('change', function(event) {
hideTimezoneCities(city, continent.options[continent.selectedIndex].value, true);
});
hideTimezoneCities(city, continent.options[continent.selectedIndex].value, false);
}
};
function activateFirefoxSocial(node) {
@ -390,3 +387,25 @@ function activateFirefoxSocial(node) {
var activate = new CustomEvent("ActivateSocialFeature");
node.dispatchEvent(activate);
}
/**
* Add the class 'hidden' to city options not attached to the current selected continent.
*
* @param cities List of <option> elements
* @param currentContinent Current selected continent
* @param reset Set to true to reset the selected value
*/
function hideTimezoneCities(cities, currentContinent, reset = false) {
var first = true;
[].forEach.call(cities, function(option) {
if (option.getAttribute('data-continent') != currentContinent) {
option.className = 'hidden';
} else {
option.className = '';
if (reset === true && first === true) {
option.setAttribute('selected', 'selected');
first = false;
}
}
});
}

View file

@ -4,7 +4,6 @@
<body onload="document.configform.title.focus();">
<div id="pageheader">
{include="page.header"}
{$timezone_js}
<form method="POST" action="#" name="configform" id="configform">
<input type="hidden" name="token" value="{$token}">
<table id="configuration_table">
@ -35,7 +34,28 @@
<tr>
<td><b>Timezone:</b></td>
<td>{$timezone_form}</td>
<td>
<select id="continent" name="continent">
{loop="$continents"}
{if="$key !== 'selected'"}
<option value="{$value}" {if="$continents.selected === $value"}selected{/if}>
{$value}
</option>
{/if}
{/loop}
</select>
<select id="city" name="city">
{loop="$cities"}
{if="$key !== 'selected'"}
<option value="{$value.city}"
{if="$cities.selected === $value.city"}selected{/if}
data-continent="{$value.continent}">
{$value.city}
</option>
{/if}
{/loop}
</select>
</td>
</tr>
<tr>

View file

@ -41,6 +41,10 @@ strong {
font-weight: bold;
}
.hidden {
display: none;
}
/* Buttons */
.bigbutton, #pageheader a.bigbutton {
background-color: #c0c0c0;

View file

@ -1,6 +1,6 @@
<!DOCTYPE html>
<html>
<head>{include="includes"}{$timezone_js}</head>
<head>{include="includes"}</head>
<body onload="document.installform.setlogin.focus();">
<div id="install">
<h1>Shaarli</h1>
@ -9,7 +9,31 @@
<table>
<tr><td><b>Login:</b></td><td><input type="text" name="setlogin" size="30"></td></tr>
<tr><td><b>Password:</b></td><td><input type="password" name="setpassword" size="30"></td></tr>
{$timezone_html}
<tr>
<td><b>Timezone:</b></td>
<td>
<select id="continent" name="continent">
{loop="$continents"}
{if="$key !== 'selected'"}
<option value="{$value}" {if="$continents.selected === $value"}selected{/if}>
{$value}
</option>
{/if}
{/loop}
</select>
<select id="city" name="city">
{loop="$cities"}
{if="$key !== 'selected'"}
<option value="{$value.city}"
{if="$cities.selected === $value.city"}selected{/if}
data-continent="{$value.continent}">
{$value.city}
</option>
{/if}
{/loop}
</select>
</td>
</tr>
<tr><td><b>Page title:</b></td><td><input type="text" name="title" size="30"></td></tr>
<tr><td valign="top"><b>Update:</b></td><td>
<input type="checkbox" name="updateCheck" id="updateCheck" checked="checked"><label for="updateCheck">&nbsp;Notify me when a new release is ready</label></td>

32
tpl/vintage/js/shaarli.js Normal file
View file

@ -0,0 +1,32 @@
window.onload = function () {
var continent = document.getElementById('continent');
var city = document.getElementById('city');
if (continent != null && city != null) {
continent.addEventListener('change', function(event) {
hideTimezoneCities(city, continent.options[continent.selectedIndex].value, true);
});
hideTimezoneCities(city, continent.options[continent.selectedIndex].value, false);
}
};
/**
* Add the class 'hidden' to city options not attached to the current selected continent.
*
* @param cities List of <option> elements
* @param currentContinent Current selected continent
* @param reset Set to true to reset the selected value
*/
function hideTimezoneCities(cities, currentContinent, reset = false) {
var first = true;
[].forEach.call(cities, function(option) {
if (option.getAttribute('data-continent') != currentContinent) {
option.className = 'hidden';
} else {
option.className = '';
if (reset === true && first === true) {
option.setAttribute('selected', 'selected');
first = false;
}
}
});
}

View file

@ -26,6 +26,7 @@
<script>function confirmDeleteLink() { var agree=confirm("Are you sure you want to delete this link ?"); if (agree) return true ; else return false ; }</script>
{/if}
<script src="js/shaarli.js"></script>
{loop="$plugins_footer.js_files"}
<script src="{$value}#"></script>
{/loop}