Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
93 lines
2.3 KiB
JavaScript
Executable file
93 lines
2.3 KiB
JavaScript
Executable file
/*global Utils */
|
|
(function(exports) {
|
|
'use strict';
|
|
|
|
var updateTimer = null;
|
|
|
|
var TimeHeaders = {
|
|
init: function th_init() {
|
|
onvisibilityChange();
|
|
document.addEventListener('visibilitychange', onvisibilityChange);
|
|
window.addEventListener('timeformatchange', ontimeFormatChange);
|
|
window.addEventListener('languagechange', onlanguageChange);
|
|
},
|
|
startScheduler: function th_startScheduler() {
|
|
var now = Date.now(),
|
|
nextTimeout = new Date(now + 60000);
|
|
nextTimeout.setSeconds(0);
|
|
nextTimeout.setMilliseconds(0);
|
|
|
|
// stop updateTimer first
|
|
this.stopScheduler();
|
|
|
|
// then register a new one
|
|
updateTimer = setTimeout(function() {
|
|
this.updateAll('header[data-time-update=repeat]');
|
|
this.startScheduler();
|
|
}.bind(this), nextTimeout.getTime() - now);
|
|
},
|
|
stopScheduler: function th_stopScheduler() {
|
|
clearTimeout(updateTimer);
|
|
},
|
|
updateAll: function th_updateAll(selector) {
|
|
selector = selector || '[data-time-update]';
|
|
var elements = document.querySelectorAll(selector),
|
|
length = elements.length,
|
|
i;
|
|
|
|
for (i = 0; i < length; i++) {
|
|
this.update(elements[i]);
|
|
}
|
|
},
|
|
update: function th_update(element) {
|
|
var ts = element.dataset.time;
|
|
if (!ts) {
|
|
return;
|
|
}
|
|
|
|
// only date
|
|
if (element.dataset.dateOnly === 'true') {
|
|
Utils.setHeaderDate({
|
|
time: ts,
|
|
element: element,
|
|
withTime: false
|
|
});
|
|
|
|
// only time
|
|
} else if (element.dataset.timeOnly === 'true') {
|
|
element.removeAttribute('data-l10n-id');
|
|
element.textContent = Utils.getFormattedHour(ts);
|
|
|
|
// date + time
|
|
} else {
|
|
Utils.setHeaderDate({
|
|
time: ts,
|
|
element: element,
|
|
withTime: true
|
|
});
|
|
}
|
|
}
|
|
};
|
|
|
|
function onvisibilityChange() {
|
|
if (document.hidden) {
|
|
TimeHeaders.stopScheduler();
|
|
}
|
|
else {
|
|
TimeHeaders.updateAll();
|
|
TimeHeaders.startScheduler();
|
|
}
|
|
}
|
|
|
|
function ontimeFormatChange() {
|
|
Utils.resetDateFormatters();
|
|
TimeHeaders.updateAll();
|
|
}
|
|
|
|
function onlanguageChange() {
|
|
Utils.resetDateFormatters();
|
|
TimeHeaders.updateAll();
|
|
}
|
|
|
|
exports.TimeHeaders = TimeHeaders;
|
|
}(this));
|