forked from thedjpetersen/subway
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
updated bootstrap added avatars and modified design
- Loading branch information
1 parent
a0394a1
commit 39943f8
Showing
11 changed files
with
327 additions
and
463 deletions.
There are no files selected for viewing
Binary file not shown.
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,109 @@ | ||
var zeropad = function (num) { | ||
return ((num < 10) ? '0' : '') + num; | ||
}; | ||
var iso8601 = function (date) { | ||
return date.getUTCFullYear() | ||
+ "-" + zeropad(date.getUTCMonth()+1) | ||
+ "-" + zeropad(date.getUTCDate()) | ||
+ "T" + zeropad(date.getUTCHours()) | ||
+ ":" + zeropad(date.getUTCMinutes()) | ||
+ ":" + zeropad(date.getUTCSeconds()) + "Z"; | ||
}; | ||
|
||
function prepareDynamicDates() { | ||
$('abbr.loaded').attr("title", iso8601(new Date())); | ||
$('abbr.modified').attr("title", iso8601(new Date(document.lastModified))); | ||
} | ||
|
||
function loadNumbers() { | ||
jQuery.timeago.settings.strings.numbers = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"]; | ||
} | ||
function unloadNumbers() { | ||
jQuery.timeago.settings.strings.numbers = []; | ||
} | ||
|
||
function loadPigLatin() { | ||
jQuery.timeago.settings.strings = { | ||
suffixAgo: "ago-hay", | ||
suffixFromNow: "omNow-fray", | ||
seconds: "ess-lay an-thay a-hay inute-may", | ||
minute: "about-hay a-hay inute-may", | ||
minutes: "%d inutes-may", | ||
hour: "about-hay an-hay hour-hay", | ||
hours: "about-hay %d hours-hay", | ||
day: "a-hay ay-day", | ||
days: "%d ays-day", | ||
month: "about-hay a-hay onth-may", | ||
months: "%d onths-may", | ||
year: "about-hay a-hay ear-yay", | ||
years: "%d years-yay" | ||
}; | ||
} | ||
|
||
function loadRussian() { | ||
(function() { | ||
function numpf(n, f, s, t) { | ||
// f - 1, 21, 31, ... | ||
// s - 2-4, 22-24, 32-34 ... | ||
// t - 5-20, 25-30, ... | ||
var n10 = n % 10; | ||
if ( (n10 == 1) && ( (n == 1) || (n > 20) ) ) { | ||
return f; | ||
} else if ( (n10 > 1) && (n10 < 5) && ( (n > 20) || (n < 10) ) ) { | ||
return s; | ||
} else { | ||
return t; | ||
} | ||
} | ||
|
||
jQuery.timeago.settings.strings = { | ||
prefixAgo: null, | ||
prefixFromNow: "через", | ||
suffixAgo: "назад", | ||
suffixFromNow: null, | ||
seconds: "меньше минуты", | ||
minute: "минуту", | ||
minutes: function(value) { return numpf(value, "%d минута", "%d минуты", "%d минут"); }, | ||
hour: "чаÑ", | ||
hours: function(value) { return numpf(value, "%d чаÑ", "%d чаÑа", "%d чаÑов"); }, | ||
day: "день", | ||
days: function(value) { return numpf(value, "%d день", "%d днÑ", "%d дней"); }, | ||
month: "меÑÑц", | ||
months: function(value) { return numpf(value, "%d меÑÑц", "%d меÑÑца", "%d меÑÑцев"); }, | ||
year: "год", | ||
years: function(value) { return numpf(value, "%d год", "%d года", "%d лет"); } | ||
}; | ||
})(); | ||
} | ||
|
||
function loadMillis() { | ||
var millisSubstitution = function(number, millis) { return millis + " milliseconds"; }; | ||
jQuery.timeago.settings.strings = { | ||
suffixAgo: "ago", | ||
suffixFromNow: "from now", | ||
seconds: millisSubstitution, | ||
minute: millisSubstitution, | ||
minutes: millisSubstitution, | ||
hour: millisSubstitution, | ||
hours: millisSubstitution, | ||
day: millisSubstitution, | ||
days: millisSubstitution, | ||
month: millisSubstitution, | ||
months: millisSubstitution, | ||
year: millisSubstitution, | ||
years: millisSubstitution | ||
}; | ||
} | ||
|
||
function loadNoSpaces() { | ||
jQuery.extend(jQuery.timeago.settings.strings, { | ||
minutes: "%dminutes", | ||
wordSeparator: "" | ||
}); | ||
} | ||
|
||
function loadYoungOldYears() { | ||
jQuery.extend(jQuery.timeago.settings.strings, { | ||
years: function(value) { return (value < 21) ? "%d young years" : "%d old years"; } | ||
}); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,152 @@ | ||
/** | ||
* 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 0.11.4 | ||
* @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-2012, Ryan McGeary (ryan -[at]- mcgeary [*dot*] org) | ||
*/ | ||
(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, | ||
allowFuture: false, | ||
strings: { | ||
prefixAgo: null, | ||
prefixFromNow: null, | ||
suffixAgo: "ago", | ||
suffixFromNow: "from 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) { | ||
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; | ||
} | ||
} | ||
|
||
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 === undefined ? " " : $l.wordSeparator; | ||
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 | ||
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"); | ||
} | ||
}); | ||
|
||
$.fn.timeago = function() { | ||
var self = this; | ||
self.each(refresh); | ||
|
||
var $s = $t.settings; | ||
if ($s.refreshMillis > 0) { | ||
setInterval(function() { self.each(refresh); }, $s.refreshMillis); | ||
} | ||
return self; | ||
}; | ||
|
||
function refresh() { | ||
var data = prepareData(this); | ||
if (!isNaN(data.datetime)) { | ||
$(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 (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"); | ||
}(jQuery)); |
Oops, something went wrong.