mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-01-19 20:24:49 +00:00
Added commit info from RSS.
This commit is contained in:
parent
cb33135800
commit
380f112bd1
27
css/main.css
27
css/main.css
|
|
@ -116,13 +116,13 @@ a.media-subheading:hover {
|
|||
.site .banner {
|
||||
/* Gradient generated using http://www.colorzilla.com/gradient-editor/ */
|
||||
background: #aa0000; /* Old browsers */
|
||||
background: -moz-linear-gradient(top, #aa0000 0%, #770000 100%); /* FF3.6+ */
|
||||
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#aa0000), color-stop(100%,#770000)); /* Chrome,Safari4+ */
|
||||
background: -webkit-linear-gradient(top, #aa0000 0%,#770000 100%); /* Chrome10+,Safari5.1+ */
|
||||
background: -o-linear-gradient(top, #aa0000 0%,#770000 100%); /* Opera 11.10+ */
|
||||
background: -ms-linear-gradient(top, #aa0000 0%,#770000 100%); /* IE10+ */
|
||||
background: linear-gradient(to bottom, #aa0000 0%,#770000 100%); /* W3C */
|
||||
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#aa0000', endColorstr='#770000',GradientType=0 ); /* IE6-9 */
|
||||
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%,#660000)); /* Chrome,Safari4+ */
|
||||
background: -webkit-linear-gradient(top, #aa0000 0%,#660000 100%); /* Chrome10+,Safari5.1+ */
|
||||
background: -o-linear-gradient(top, #aa0000 0%,#660000 100%); /* Opera 11.10+ */
|
||||
background: -ms-linear-gradient(top, #aa0000 0%,#660000 100%); /* IE10+ */
|
||||
background: linear-gradient(to bottom, #aa0000 0%,#660000 100%); /* W3C */
|
||||
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#aa0000', endColorstr='#660000',GradientType=0 ); /* IE6-9 */
|
||||
color: white;
|
||||
}
|
||||
|
||||
|
|
@ -163,6 +163,19 @@ a.media-subheading:hover {
|
|||
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
|
||||
*/
|
||||
|
|
|
|||
71
index.html
71
index.html
|
|
@ -56,28 +56,26 @@ root: .
|
|||
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-sm-6">
|
||||
<h2 class="status">Status</h2>
|
||||
<table class="borderless history table">
|
||||
<tr>
|
||||
<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">Activity</h2>
|
||||
<p id="activity-loading">Loading activity...</p>
|
||||
</div>
|
||||
|
||||
<div class="col-sm-4">
|
||||
<h2 class="status">Status</h2>
|
||||
<table class="borderless table">
|
||||
<tr>
|
||||
<td>Build</td>
|
||||
<td>
|
||||
<table>
|
||||
<tr><td>Nightly:</td><td> <img src="http://builds.garagegames.com/app/rest/builds/buildType:(id:bt79)/statusIcon"></img></td></tr>
|
||||
<tr><td>Release:</td><td> <img src="http://builds.garagegames.com/app/rest/builds/buildType:(id:bt79)/statusIcon"></img></td></tr>
|
||||
</table>
|
||||
</td>
|
||||
<td>Continuous</td>
|
||||
<td><img src="http://builds.garagegames.com/app/rest/builds/buildType:(id:bt79)/statusIcon"></img></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Release</td>
|
||||
<td><img src="http://builds.garagegames.com/app/rest/builds/buildType:(id:bt79)/statusIcon"></img></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="col-sm-6">
|
||||
<div class="col-sm-4">
|
||||
<h2>Issues</h2>
|
||||
<ul>
|
||||
<li><a href="https://github.com/GarageGames/Torque3D/issues/new">Report an issue</a></li>
|
||||
|
|
@ -116,6 +114,7 @@ root: .
|
|||
{% endif %}
|
||||
|
||||
<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">
|
||||
$(document).ready(function() {
|
||||
var images = {
|
||||
|
|
@ -152,6 +151,7 @@ $(document).ready(function() {
|
|||
return o;
|
||||
}
|
||||
|
||||
// TODO: ensure no duplicate images occur.
|
||||
function createBreaks() {
|
||||
var breaks = $('div.break');
|
||||
var delay = 0;
|
||||
|
|
@ -169,5 +169,44 @@ $(document).ready(function() {
|
|||
};
|
||||
|
||||
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>
|
||||
|
|
|
|||
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…
Reference in a new issue