Make use of HTML5's time element
This commit is contained in:
parent
c6407478e7
commit
ce6fa9af95
@ -208,7 +208,7 @@ body > h1 {
|
|||||||
text-align: right;
|
text-align: right;
|
||||||
}
|
}
|
||||||
|
|
||||||
#body h2.date {
|
#body h2 {
|
||||||
text-transform: none;
|
text-transform: none;
|
||||||
font-size: medium;
|
font-size: medium;
|
||||||
color: #333;
|
color: #333;
|
||||||
|
@ -49,9 +49,9 @@
|
|||||||
<dl>
|
<dl>
|
||||||
<dt>Last updated:</dt>
|
<dt>Last updated:</dt>
|
||||||
<dd>
|
<dd>
|
||||||
<span class="date" title="GMT">
|
<time datetime="{atom:updated}" title="GMT">
|
||||||
<xsl:value-of select="atom:updated/@planet:format"/>
|
<xsl:value-of select="atom:updated/@planet:format"/>
|
||||||
</span>
|
</time>
|
||||||
</dd>
|
</dd>
|
||||||
<dt>Powered by:</dt>
|
<dt>Powered by:</dt>
|
||||||
<dd>
|
<dd>
|
||||||
@ -165,10 +165,12 @@
|
|||||||
<xsl:if test="not(preceding-sibling::atom:entry
|
<xsl:if test="not(preceding-sibling::atom:entry
|
||||||
[substring(atom:updated,1,10) = $date])">
|
[substring(atom:updated,1,10) = $date])">
|
||||||
<xsl:text> </xsl:text>
|
<xsl:text> </xsl:text>
|
||||||
<h2 class="date">
|
<h2>
|
||||||
<xsl:value-of select="substring-before(atom:updated/@planet:format,', ')"/>
|
<time datetime="{$date}">
|
||||||
<xsl:text>, </xsl:text>
|
<xsl:value-of select="substring-before(atom:updated/@planet:format,', ')"/>
|
||||||
<xsl:value-of select="substring-before(substring-after(atom:updated/@planet:format,', '), ' ')"/>
|
<xsl:text>, </xsl:text>
|
||||||
|
<xsl:value-of select="substring-before(substring-after(atom:updated/@planet:format,', '), ' ')"/>
|
||||||
|
</time>
|
||||||
</h2>
|
</h2>
|
||||||
</xsl:if>
|
</xsl:if>
|
||||||
|
|
||||||
@ -231,9 +233,9 @@
|
|||||||
<xsl:text> at </xsl:text>
|
<xsl:text> at </xsl:text>
|
||||||
</xsl:when>
|
</xsl:when>
|
||||||
</xsl:choose>
|
</xsl:choose>
|
||||||
<span class="date" title="GMT">
|
<time datetime="{atom:updated}" title="GMT">
|
||||||
<xsl:value-of select="atom:updated/@planet:format"/>
|
<xsl:value-of select="atom:updated/@planet:format"/>
|
||||||
</span>
|
</time>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -134,11 +134,27 @@ function addOption(event) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// convert date to local time
|
// Parse an HTML5-liberalized version of RFC 3339 datetime values
|
||||||
|
Date.parseRFC3339 = function (string) {
|
||||||
|
var date=new Date();
|
||||||
|
date.setTime(0);
|
||||||
|
var match = string.match(/(\d{4})-(\d\d)-(\d\d)\s*(?:[\sT]\s*(\d\d):(\d\d)(?::(\d\d))?(\.\d*)?\s*(Z|([-+])(\d\d):(\d\d))?)?/);
|
||||||
|
if (!match) return;
|
||||||
|
if (match[2]) match[2]--;
|
||||||
|
if (match[7]) match[7] = (match[7]+'000').substring(1,4);
|
||||||
|
var field = [null,'FullYear','Month','Date','Hours','Minutes','Seconds','Milliseconds'];
|
||||||
|
for (var i=1; i<=7; i++) if (match[i]) date['setUTC'+field[i]](match[i]);
|
||||||
|
if (match[9]) date.setTime(date.getTime()+
|
||||||
|
(match[9]=='-'?1:-1)*(match[10]*3600000+match[11]*60000) );
|
||||||
|
return date.getTime();
|
||||||
|
}
|
||||||
|
|
||||||
|
// convert datetime to local date
|
||||||
var localere = /^(\w+) (\d+) (\w+) \d+ 0?(\d\d?:\d\d):\d\d ([AP]M) (EST|EDT|CST|CDT|MST|MDT|PST|PDT)/;
|
var localere = /^(\w+) (\d+) (\w+) \d+ 0?(\d\d?:\d\d):\d\d ([AP]M) (EST|EDT|CST|CDT|MST|MDT|PST|PDT)/;
|
||||||
function localizeDate(element) {
|
function localizeDate(element) {
|
||||||
var date = new Date();
|
var date = new Date();
|
||||||
date.setTime(Date.parse(element.innerHTML + " GMT"));
|
date.setTime(Date.parseRFC3339(element.getAttribute('datetime')));
|
||||||
|
if (!date.getTime()) return;
|
||||||
|
|
||||||
var local = date.toLocaleString();
|
var local = date.toLocaleString();
|
||||||
var match = local.match(localere);
|
var match = local.match(localere);
|
||||||
@ -160,13 +176,13 @@ function localizeDate(element) {
|
|||||||
// find entries (and localizeDates)
|
// find entries (and localizeDates)
|
||||||
function findEntries() {
|
function findEntries() {
|
||||||
|
|
||||||
var span = document.getElementsByTagName('span');
|
var times = document.getElementsByTagName('time');
|
||||||
|
|
||||||
for (var i=0; i<span.length; i++) {
|
for (var i=0; i<times.length; i++) {
|
||||||
if (span[i].className == "date" && span[i].title == "GMT") {
|
if (times[i].title == "GMT") {
|
||||||
var date = localizeDate(span[i]);
|
var date = localizeDate(times[i]);
|
||||||
|
|
||||||
var parent = span[i];
|
var parent = times[i];
|
||||||
while (parent &&
|
while (parent &&
|
||||||
(!parent.className || parent.className.split(' ')[0] != 'news')) {
|
(!parent.className || parent.className.split(' ')[0] != 'news')) {
|
||||||
parent = parent.parentNode;
|
parent = parent.parentNode;
|
||||||
@ -174,8 +190,9 @@ function findEntries() {
|
|||||||
|
|
||||||
if (parent) {
|
if (parent) {
|
||||||
var info = entries[entries.length] = new Object();
|
var info = entries[entries.length] = new Object();
|
||||||
info.parent = parent;
|
info.parent = parent;
|
||||||
info.date = date;
|
info.date = date;
|
||||||
|
info.datetime = times[i].getAttribute('datetime').substring(0,10);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -184,7 +201,7 @@ function findEntries() {
|
|||||||
|
|
||||||
// insert/remove date headers to indicate change of date in local time zone
|
// insert/remove date headers to indicate change of date in local time zone
|
||||||
function moveDateHeaders() {
|
function moveDateHeaders() {
|
||||||
lastdate = ''
|
var lastdate = ''
|
||||||
for (var i=0; i<entries.length; i++) {
|
for (var i=0; i<entries.length; i++) {
|
||||||
var parent = entries[i].parent;
|
var parent = entries[i].parent;
|
||||||
var date = entries[i].date;
|
var date = entries[i].date;
|
||||||
@ -198,13 +215,16 @@ function moveDateHeaders() {
|
|||||||
if (lastdate == date) {
|
if (lastdate == date) {
|
||||||
sibling.parentNode.removeChild(sibling);
|
sibling.parentNode.removeChild(sibling);
|
||||||
} else {
|
} else {
|
||||||
sibling.innerHTML = date;
|
sibling.childNodes[0].innerHTML = date;
|
||||||
|
sibling.childNodes[0].setAttribute('datetime',entries[i].datetime);
|
||||||
lastdate = date;
|
lastdate = date;
|
||||||
}
|
}
|
||||||
} else if (lastdate != date) {
|
} else if (lastdate != date) {
|
||||||
var h2 = document.createElement('h2');
|
var h2 = document.createElement('h2');
|
||||||
h2.className = 'date'
|
var time = document.createElement('time');
|
||||||
h2.appendChild(document.createTextNode(date));
|
time.setAttribute('datetime',entries[i].datetime);
|
||||||
|
time.appendChild(document.createTextNode(date));
|
||||||
|
h2.appendChild(time);
|
||||||
parent.parentNode.insertBefore(h2, parent);
|
parent.parentNode.insertBefore(h2, parent);
|
||||||
lastdate = date;
|
lastdate = date;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user