mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-07-15 16:44:36 +00:00
Added commit info from RSS.
This commit is contained in:
parent
cb33135800
commit
380f112bd1
3 changed files with 290 additions and 23 deletions
27
css/main.css
27
css/main.css
|
|
@ -116,13 +116,13 @@ a.media-subheading:hover {
|
||||||
.site .banner {
|
.site .banner {
|
||||||
/* Gradient generated using http://www.colorzilla.com/gradient-editor/ */
|
/* Gradient generated using http://www.colorzilla.com/gradient-editor/ */
|
||||||
background: #aa0000; /* Old browsers */
|
background: #aa0000; /* Old browsers */
|
||||||
background: -moz-linear-gradient(top, #aa0000 0%, #770000 100%); /* FF3.6+ */
|
background: -moz-linear-gradient(top, #aa0000 0%, #660000 100%); /* FF3.6+ */
|
||||||
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#aa0000), color-stop(100%,#770000)); /* Chrome,Safari4+ */
|
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#aa0000), color-stop(100%,#660000)); /* Chrome,Safari4+ */
|
||||||
background: -webkit-linear-gradient(top, #aa0000 0%,#770000 100%); /* Chrome10+,Safari5.1+ */
|
background: -webkit-linear-gradient(top, #aa0000 0%,#660000 100%); /* Chrome10+,Safari5.1+ */
|
||||||
background: -o-linear-gradient(top, #aa0000 0%,#770000 100%); /* Opera 11.10+ */
|
background: -o-linear-gradient(top, #aa0000 0%,#660000 100%); /* Opera 11.10+ */
|
||||||
background: -ms-linear-gradient(top, #aa0000 0%,#770000 100%); /* IE10+ */
|
background: -ms-linear-gradient(top, #aa0000 0%,#660000 100%); /* IE10+ */
|
||||||
background: linear-gradient(to bottom, #aa0000 0%,#770000 100%); /* W3C */
|
background: linear-gradient(to bottom, #aa0000 0%,#660000 100%); /* W3C */
|
||||||
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#aa0000', endColorstr='#770000',GradientType=0 ); /* IE6-9 */
|
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#aa0000', endColorstr='#660000',GradientType=0 ); /* IE6-9 */
|
||||||
color: white;
|
color: white;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -163,6 +163,19 @@ a.media-subheading:hover {
|
||||||
list-style-type: lower-alpha;
|
list-style-type: lower-alpha;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.site .timeago {
|
||||||
|
font-size: smaller;
|
||||||
|
color: gray;
|
||||||
|
margin-top: 0;
|
||||||
|
margin-left: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre.inline {
|
||||||
|
display: inline;
|
||||||
|
padding: 3px;
|
||||||
|
margin: 0 5px;
|
||||||
|
}
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------------
|
/*-----------------------------------------------------------------------------
|
||||||
* Static pages
|
* Static pages
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
71
index.html
71
index.html
|
|
@ -56,28 +56,26 @@ root: .
|
||||||
|
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-6">
|
<div class="col-sm-4">
|
||||||
<h2 class="status">Status</h2>
|
<h2 class="status">Activity</h2>
|
||||||
<table class="borderless history table">
|
<p id="activity-loading">Loading activity...</p>
|
||||||
<tr>
|
</div>
|
||||||
<td>Current version</td>
|
|
||||||
<td>Torque 3D 3.5.1 <br />
|
|
||||||
Project Manager 2.1 <br />
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
|
<div class="col-sm-4">
|
||||||
|
<h2 class="status">Status</h2>
|
||||||
|
<table class="borderless table">
|
||||||
<tr>
|
<tr>
|
||||||
<td>Build</td>
|
<td>Continuous</td>
|
||||||
<td>
|
<td><img src="http://builds.garagegames.com/app/rest/builds/buildType:(id:bt79)/statusIcon"></img></td>
|
||||||
<table>
|
</tr>
|
||||||
<tr><td>Nightly:</td><td> <img src="http://builds.garagegames.com/app/rest/builds/buildType:(id:bt79)/statusIcon"></img></td></tr>
|
<tr>
|
||||||
<tr><td>Release:</td><td> <img src="http://builds.garagegames.com/app/rest/builds/buildType:(id:bt79)/statusIcon"></img></td></tr>
|
<td>Release</td>
|
||||||
</table>
|
<td><img src="http://builds.garagegames.com/app/rest/builds/buildType:(id:bt79)/statusIcon"></img></td>
|
||||||
</td>
|
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-sm-6">
|
<div class="col-sm-4">
|
||||||
<h2>Issues</h2>
|
<h2>Issues</h2>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="https://github.com/GarageGames/Torque3D/issues/new">Report an issue</a></li>
|
<li><a href="https://github.com/GarageGames/Torque3D/issues/new">Report an issue</a></li>
|
||||||
|
|
@ -116,6 +114,7 @@ root: .
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<script type="text/javascript" src="{{page.root}}/js/jquery.cycle.all.js"></script>
|
<script type="text/javascript" src="{{page.root}}/js/jquery.cycle.all.js"></script>
|
||||||
|
<script type="text/javascript" src="{{page.root}}/js/jquery.timeago.js"></script>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
var images = {
|
var images = {
|
||||||
|
|
@ -152,6 +151,7 @@ $(document).ready(function() {
|
||||||
return o;
|
return o;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: ensure no duplicate images occur.
|
||||||
function createBreaks() {
|
function createBreaks() {
|
||||||
var breaks = $('div.break');
|
var breaks = $('div.break');
|
||||||
var delay = 0;
|
var delay = 0;
|
||||||
|
|
@ -169,5 +169,44 @@ $(document).ready(function() {
|
||||||
};
|
};
|
||||||
|
|
||||||
createBreaks();
|
createBreaks();
|
||||||
|
|
||||||
|
var numResults = 2;
|
||||||
|
var feed = 'https://github.com/GarageGames/Torque3D/commits/development.atom';
|
||||||
|
var googleAPI = document.location.protocol +
|
||||||
|
'//ajax.googleapis.com/ajax/services/feed/load?' +
|
||||||
|
'v=1.0' +
|
||||||
|
'&num=' + numResults +
|
||||||
|
'&callback=?&q=';
|
||||||
|
var url = googleAPI + encodeURIComponent(feed);
|
||||||
|
$.ajax({
|
||||||
|
url: url,
|
||||||
|
dataType: 'json',
|
||||||
|
success: function (data) {
|
||||||
|
if(data.responseData.feed && data.responseData.feed.entries) {
|
||||||
|
var list = $('<ul/>').addClass('list-unstyled');
|
||||||
|
$.each(data.responseData.feed.entries, function (i, e) {
|
||||||
|
var li = $('<li/>').appendTo(list);
|
||||||
|
var hash = e.link.split('/').pop().substr(0, 6);
|
||||||
|
var hashel = $('<pre/>').addClass('inline').appendTo(li);
|
||||||
|
hashel.append($('<a/>')
|
||||||
|
.text(hash)
|
||||||
|
.attr('href', e.link)
|
||||||
|
.attr('target', '_blank'));
|
||||||
|
|
||||||
|
var content = e.contentSnippet.split('\n').pop();
|
||||||
|
li.append($('<span/>')
|
||||||
|
.addClass('commit')
|
||||||
|
.text(content));
|
||||||
|
|
||||||
|
var d = new Date(e.publishedDate);
|
||||||
|
var stamp = $('<p/>').addClass('timeago').text('by ' + e.author + ' ').appendTo(li);
|
||||||
|
stamp.append($('<span/>')
|
||||||
|
.attr('title', d.toISOString())
|
||||||
|
.timeago());
|
||||||
|
});
|
||||||
|
$('#activity-loading').replaceWith(list);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
215
js/jquery.timeago.js
Normal file
215
js/jquery.timeago.js
Normal file
|
|
@ -0,0 +1,215 @@
|
||||||
|
/**
|
||||||
|
* Timeago is a jQuery plugin that makes it easy to support automatically
|
||||||
|
* updating fuzzy timestamps (e.g. "4 minutes ago" or "about 1 day ago").
|
||||||
|
*
|
||||||
|
* @name timeago
|
||||||
|
* @version 1.4.1
|
||||||
|
* @requires jQuery v1.2.3+
|
||||||
|
* @author Ryan McGeary
|
||||||
|
* @license MIT License - http://www.opensource.org/licenses/mit-license.php
|
||||||
|
*
|
||||||
|
* For usage and examples, visit:
|
||||||
|
* http://timeago.yarp.com/
|
||||||
|
*
|
||||||
|
* Copyright (c) 2008-2013, Ryan McGeary (ryan -[at]- mcgeary [*dot*] org)
|
||||||
|
*/
|
||||||
|
|
||||||
|
(function (factory) {
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
// AMD. Register as an anonymous module.
|
||||||
|
define(['jquery'], factory);
|
||||||
|
} else {
|
||||||
|
// Browser globals
|
||||||
|
factory(jQuery);
|
||||||
|
}
|
||||||
|
}(function ($) {
|
||||||
|
$.timeago = function(timestamp) {
|
||||||
|
if (timestamp instanceof Date) {
|
||||||
|
return inWords(timestamp);
|
||||||
|
} else if (typeof timestamp === "string") {
|
||||||
|
return inWords($.timeago.parse(timestamp));
|
||||||
|
} else if (typeof timestamp === "number") {
|
||||||
|
return inWords(new Date(timestamp));
|
||||||
|
} else {
|
||||||
|
return inWords($.timeago.datetime(timestamp));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var $t = $.timeago;
|
||||||
|
|
||||||
|
$.extend($.timeago, {
|
||||||
|
settings: {
|
||||||
|
refreshMillis: 60000,
|
||||||
|
allowPast: true,
|
||||||
|
allowFuture: false,
|
||||||
|
localeTitle: false,
|
||||||
|
cutoff: 0,
|
||||||
|
strings: {
|
||||||
|
prefixAgo: null,
|
||||||
|
prefixFromNow: null,
|
||||||
|
suffixAgo: "ago",
|
||||||
|
suffixFromNow: "from now",
|
||||||
|
inPast: 'any moment now',
|
||||||
|
seconds: "less than a minute",
|
||||||
|
minute: "about a minute",
|
||||||
|
minutes: "%d minutes",
|
||||||
|
hour: "about an hour",
|
||||||
|
hours: "about %d hours",
|
||||||
|
day: "a day",
|
||||||
|
days: "%d days",
|
||||||
|
month: "about a month",
|
||||||
|
months: "%d months",
|
||||||
|
year: "about a year",
|
||||||
|
years: "%d years",
|
||||||
|
wordSeparator: " ",
|
||||||
|
numbers: []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
inWords: function(distanceMillis) {
|
||||||
|
if(!this.settings.allowPast && ! this.settings.allowFuture) {
|
||||||
|
throw 'timeago allowPast and allowFuture settings can not both be set to false.';
|
||||||
|
}
|
||||||
|
|
||||||
|
var $l = this.settings.strings;
|
||||||
|
var prefix = $l.prefixAgo;
|
||||||
|
var suffix = $l.suffixAgo;
|
||||||
|
if (this.settings.allowFuture) {
|
||||||
|
if (distanceMillis < 0) {
|
||||||
|
prefix = $l.prefixFromNow;
|
||||||
|
suffix = $l.suffixFromNow;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!this.settings.allowPast && distanceMillis >= 0) {
|
||||||
|
return this.settings.strings.inPast;
|
||||||
|
}
|
||||||
|
|
||||||
|
var seconds = Math.abs(distanceMillis) / 1000;
|
||||||
|
var minutes = seconds / 60;
|
||||||
|
var hours = minutes / 60;
|
||||||
|
var days = hours / 24;
|
||||||
|
var years = days / 365;
|
||||||
|
|
||||||
|
function substitute(stringOrFunction, number) {
|
||||||
|
var string = $.isFunction(stringOrFunction) ? stringOrFunction(number, distanceMillis) : stringOrFunction;
|
||||||
|
var value = ($l.numbers && $l.numbers[number]) || number;
|
||||||
|
return string.replace(/%d/i, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
var words = seconds < 45 && substitute($l.seconds, Math.round(seconds)) ||
|
||||||
|
seconds < 90 && substitute($l.minute, 1) ||
|
||||||
|
minutes < 45 && substitute($l.minutes, Math.round(minutes)) ||
|
||||||
|
minutes < 90 && substitute($l.hour, 1) ||
|
||||||
|
hours < 24 && substitute($l.hours, Math.round(hours)) ||
|
||||||
|
hours < 42 && substitute($l.day, 1) ||
|
||||||
|
days < 30 && substitute($l.days, Math.round(days)) ||
|
||||||
|
days < 45 && substitute($l.month, 1) ||
|
||||||
|
days < 365 && substitute($l.months, Math.round(days / 30)) ||
|
||||||
|
years < 1.5 && substitute($l.year, 1) ||
|
||||||
|
substitute($l.years, Math.round(years));
|
||||||
|
|
||||||
|
var separator = $l.wordSeparator || "";
|
||||||
|
if ($l.wordSeparator === undefined) { separator = " "; }
|
||||||
|
return $.trim([prefix, words, suffix].join(separator));
|
||||||
|
},
|
||||||
|
|
||||||
|
parse: function(iso8601) {
|
||||||
|
var s = $.trim(iso8601);
|
||||||
|
s = s.replace(/\.\d+/,""); // remove milliseconds
|
||||||
|
s = s.replace(/-/,"/").replace(/-/,"/");
|
||||||
|
s = s.replace(/T/," ").replace(/Z/," UTC");
|
||||||
|
s = s.replace(/([\+\-]\d\d)\:?(\d\d)/," $1$2"); // -04:00 -> -0400
|
||||||
|
s = s.replace(/([\+\-]\d\d)$/," $100"); // +09 -> +0900
|
||||||
|
return new Date(s);
|
||||||
|
},
|
||||||
|
datetime: function(elem) {
|
||||||
|
var iso8601 = $t.isTime(elem) ? $(elem).attr("datetime") : $(elem).attr("title");
|
||||||
|
return $t.parse(iso8601);
|
||||||
|
},
|
||||||
|
isTime: function(elem) {
|
||||||
|
// jQuery's `is()` doesn't play well with HTML5 in IE
|
||||||
|
return $(elem).get(0).tagName.toLowerCase() === "time"; // $(elem).is("time");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// functions that can be called via $(el).timeago('action')
|
||||||
|
// init is default when no action is given
|
||||||
|
// functions are called with context of a single element
|
||||||
|
var functions = {
|
||||||
|
init: function(){
|
||||||
|
var refresh_el = $.proxy(refresh, this);
|
||||||
|
refresh_el();
|
||||||
|
var $s = $t.settings;
|
||||||
|
if ($s.refreshMillis > 0) {
|
||||||
|
this._timeagoInterval = setInterval(refresh_el, $s.refreshMillis);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
update: function(time){
|
||||||
|
var parsedTime = $t.parse(time);
|
||||||
|
$(this).data('timeago', { datetime: parsedTime });
|
||||||
|
if($t.settings.localeTitle) $(this).attr("title", parsedTime.toLocaleString());
|
||||||
|
refresh.apply(this);
|
||||||
|
},
|
||||||
|
updateFromDOM: function(){
|
||||||
|
$(this).data('timeago', { datetime: $t.parse( $t.isTime(this) ? $(this).attr("datetime") : $(this).attr("title") ) });
|
||||||
|
refresh.apply(this);
|
||||||
|
},
|
||||||
|
dispose: function () {
|
||||||
|
if (this._timeagoInterval) {
|
||||||
|
window.clearInterval(this._timeagoInterval);
|
||||||
|
this._timeagoInterval = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
$.fn.timeago = function(action, options) {
|
||||||
|
var fn = action ? functions[action] : functions.init;
|
||||||
|
if(!fn){
|
||||||
|
throw new Error("Unknown function name '"+ action +"' for timeago");
|
||||||
|
}
|
||||||
|
// each over objects here and call the requested function
|
||||||
|
this.each(function(){
|
||||||
|
fn.call(this, options);
|
||||||
|
});
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
|
||||||
|
function refresh() {
|
||||||
|
var data = prepareData(this);
|
||||||
|
var $s = $t.settings;
|
||||||
|
|
||||||
|
if (!isNaN(data.datetime)) {
|
||||||
|
if ( $s.cutoff == 0 || Math.abs(distance(data.datetime)) < $s.cutoff) {
|
||||||
|
$(this).text(inWords(data.datetime));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
function prepareData(element) {
|
||||||
|
element = $(element);
|
||||||
|
if (!element.data("timeago")) {
|
||||||
|
element.data("timeago", { datetime: $t.datetime(element) });
|
||||||
|
var text = $.trim(element.text());
|
||||||
|
if ($t.settings.localeTitle) {
|
||||||
|
element.attr("title", element.data('timeago').datetime.toLocaleString());
|
||||||
|
} else if (text.length > 0 && !($t.isTime(element) && element.attr("title"))) {
|
||||||
|
element.attr("title", text);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return element.data("timeago");
|
||||||
|
}
|
||||||
|
|
||||||
|
function inWords(date) {
|
||||||
|
return $t.inWords(distance(date));
|
||||||
|
}
|
||||||
|
|
||||||
|
function distance(date) {
|
||||||
|
return (new Date().getTime() - date.getTime());
|
||||||
|
}
|
||||||
|
|
||||||
|
// fix for IE6 suckage
|
||||||
|
document.createElement("abbr");
|
||||||
|
document.createElement("time");
|
||||||
|
}));
|
||||||
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue