- {{t queue}}: {{queue.name}}
+ Queue: {{queue.name}}
{{#each job in queue}}
{{#view Travis.QueueItemView jobBinding="job"}}
@@ -15,7 +15,7 @@
{{/if}}
{{/view}}
{{else}}
- {{t no_job}}
+ There are no jobs
{{/each}}
diff --git a/assets/scripts/app/templates/repos/list.hbs b/assets/scripts/app/templates/repos/list.hbs
index fdc34ee5..41acd7be 100644
--- a/assets/scripts/app/templates/repos/list.hbs
+++ b/assets/scripts/app/templates/repos/list.hbs
@@ -21,11 +21,11 @@
{{/with}}
- {{t repositories.duration}}:
+ Duration:
{{formatDuration lastBuildDuration}}
- {{t repositories.finished_at}}:
+ Finished:
{{formatTime lastBuildFinishedAt}}
diff --git a/assets/scripts/app/templates/repos/list/tabs.hbs b/assets/scripts/app/templates/repos/list/tabs.hbs
index 04d03fa3..1286c1fe 100644
--- a/assets/scripts/app/templates/repos/list/tabs.hbs
+++ b/assets/scripts/app/templates/repos/list/tabs.hbs
@@ -1,13 +1,13 @@
diff --git a/assets/scripts/app/templates/repos/show/tabs.hbs b/assets/scripts/app/templates/repos/show/tabs.hbs
index e94d49e3..4ff5617f 100644
--- a/assets/scripts/app/templates/repos/show/tabs.hbs
+++ b/assets/scripts/app/templates/repos/show/tabs.hbs
@@ -3,7 +3,7 @@
{{#if repo.slug}}
{{#link-to "repo" repo currentWhen="repo.index"}}
- {{t repositories.tabs.current}}
+ Current
{{/link-to}}
{{/if}}
@@ -12,7 +12,7 @@
{{#if repo.slug}}
{{#link-to "builds" repo}}
- {{t repositories.tabs.build_history}}
+ Build History
{{/link-to}}
{{/if}}
@@ -21,7 +21,7 @@
{{#if repo.slug}}
{{#link-to "pullRequests" repo}}
- {{t repositories.tabs.pull_requests}}
+ Pull Requests
{{/link-to}}
{{/if}}
@@ -30,7 +30,7 @@
{{#if repo.slug}}
{{#link-to "branches" repo}}
- {{t repositories.tabs.branches}}
+ Branch Summary
{{/link-to}}
{{/if}}
@@ -40,7 +40,7 @@
{{#if build.id}}
{{#if repo.slug}}
{{#link-to "build" repo build}}
- {{t repositories.tabs.build}} #{{build.number}}
+ Build #{{build.number}}
{{/link-to}}
{{/if}}
{{/if}}
@@ -51,7 +51,7 @@
{{#if job.id}}
{{#if repo.slug}}
{{#link-to "job" repo job}}
- {{t repositories.tabs.job}} #{{job.number}}
+ Job #{{job.number}}
{{/link-to}}
{{/if}}
{{/if}}
diff --git a/assets/scripts/app/templates/status_images.hbs b/assets/scripts/app/templates/status_images.hbs
index 18c57d1b..9d393828 100644
--- a/assets/scripts/app/templates/status_images.hbs
+++ b/assets/scripts/app/templates/status_images.hbs
@@ -1,6 +1,6 @@
- {{t repositories.branch}}:
+ Branch:
{{#if view.branches.isLoaded}}
{{view Ember.Select contentBinding="view.branches" selectionBinding="view.statusImageBranch" optionLabelPath="content.commit.branch" optionValuePath="content.commit.branch"}}
{{else}}
@@ -8,27 +8,27 @@
{{/if}}
- {{t repositories.image_url}}:
+ Image URL:
- {{t repositories.markdown}}:
+ Markdown:
- {{t repositories.textile}}:
+ Textile:
- {{t repositories.rdoc}}:
+ RDOC:
- {{t repositories.asciidoc}}:
+ AsciiDoc:
- {{t repositories.rst}}:
+ :
diff --git a/assets/scripts/app/views/profile.coffee b/assets/scripts/app/views/profile.coffee
index b704a2b1..879a163b 100644
--- a/assets/scripts/app/views/profile.coffee
+++ b/assets/scripts/app/views/profile.coffee
@@ -41,29 +41,5 @@ Travis.reopen
userBinding: 'controller.user'
gravatarUrl: (->
- "#{location.protocol}//www.gravatar.com/avatar/#{@get('user.gravatarId')}?s=96&d=mm"
- ).property('user.gravatarId')
-
- locale: (->
- @get('user.locale')
- ).property('user.locale')
-
- locales: (->
- [
- { key: null, name: '' }
- { key: 'en', name: 'English' }
- { key: 'es', name: 'Español' }
- { key: 'fr', name: 'Français' }
- { key: 'ja', name: '日本語' }
- { key: 'nl', name: 'Nederlands' }
- { key: 'nb', name: 'Norsk Bokmål' }
- { key: 'pl', name: 'Polski' }
- { key: 'pt-BR', name: 'Português brasileiro' }
- { key: 'ru', name: 'Русский' }
- { key: 'de', name: 'Deutsch' }
- ]
- ).property()
-
- change: ->
- return unless $('#locale').val()
- @get('user').updateLocale($('#locale').val())
+ "#{location.protocol}//www.gravatar.com/avatar/#{@get('user.gravatarId')}?s=200&d=mm"
+ ).property('user.gravatarId')
\ No newline at end of file
diff --git a/assets/scripts/lib/ext/i18n.coffee b/assets/scripts/lib/ext/i18n.coffee
deleted file mode 100644
index 5eec7d69..00000000
--- a/assets/scripts/lib/ext/i18n.coffee
+++ /dev/null
@@ -1,5 +0,0 @@
-I18n.missingTranslation = ->
- key = arguments[arguments.length - 1]
- value = key.split('.').pop()
- $.titleize(value)
-
diff --git a/assets/scripts/spec/spec_helper.coffee b/assets/scripts/spec/spec_helper.coffee
index c3edead9..da2366b1 100644
--- a/assets/scripts/spec/spec_helper.coffee
+++ b/assets/scripts/spec/spec_helper.coffee
@@ -26,7 +26,6 @@ window.signInUser = (data) ->
created_at: "2011-05-10T15:43:59Z"
gravatar_id: "582034b63279abeaa8e76acf12f5ee30"
is_syncing: false
- locale: "en"
name: "Tyrion"
synced_at: "2013-12-09T09:41:47Z"
}
diff --git a/assets/scripts/spec/unit/user_spec.coffee b/assets/scripts/spec/unit/user_spec.coffee
index 8df3fcdb..81df96dc 100644
--- a/assets/scripts/spec/unit/user_spec.coffee
+++ b/assets/scripts/spec/unit/user_spec.coffee
@@ -17,7 +17,6 @@ test '', ->
created_at: "2011-05-10T15:43:59Z"
gravatar_id: "582034b63279abeaa8e76acf12f5ee30"
is_syncing: false
- locale: "en"
name: "Tyrion"
synced_at: "2013-12-09T09:41:47Z"
}
diff --git a/assets/scripts/travis.coffee b/assets/scripts/travis.coffee
index 95770a69..f01a0e0b 100644
--- a/assets/scripts/travis.coffee
+++ b/assets/scripts/travis.coffee
@@ -154,7 +154,6 @@ Travis.Router.reopen
Ember.LinkView.reopen
loadingClass: 'loading_link'
-require 'ext/i18n'
require 'travis/ajax'
require 'travis/adapter'
require 'routes'
@@ -169,8 +168,6 @@ require 'templates'
require 'views'
require 'components'
-require 'config/locales'
-
require 'travis/instrumentation'
Travis.setup()
diff --git a/assets/scripts/vendor/i18n.js b/assets/scripts/vendor/i18n.js
deleted file mode 100644
index 43641346..00000000
--- a/assets/scripts/vendor/i18n.js
+++ /dev/null
@@ -1,532 +0,0 @@
-// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf
-if (!Array.prototype.indexOf) {
- Array.prototype.indexOf = function(searchElement /*, fromIndex */) {
- "use strict";
-
- if (this === void 0 || this === null) {
- throw new TypeError();
- }
-
- var t = Object(this);
- var len = t.length >>> 0;
-
- if (len === 0) {
- return -1;
- }
-
- var n = 0;
- if (arguments.length > 0) {
- n = Number(arguments[1]);
- if (n !== n) { // shortcut for verifying if it's NaN
- n = 0;
- } else if (n !== 0 && n !== (Infinity) && n !== -(Infinity)) {
- n = (n > 0 || -1) * Math.floor(Math.abs(n));
- }
- }
-
- if (n >= len) {
- return -1;
- }
-
- var k = n >= 0
- ? n
- : Math.max(len - Math.abs(n), 0);
-
- for (; k < len; k++) {
- if (k in t && t[k] === searchElement) {
- return k;
- }
- }
-
- return -1;
- };
-}
-
-// Instantiate the object
-window.I18n = {};
-
-// Set default locale to english
-I18n.defaultLocale = "en";
-
-// Set default handling of translation fallbacks to false
-I18n.fallbacks = false;
-
-// Set default separator
-I18n.defaultSeparator = ".";
-
-// Set current locale to null
-I18n.locale = null;
-
-// Set the placeholder format. Accepts `{{placeholder}}` and `%{placeholder}`.
-I18n.PLACEHOLDER = /(?:\{\{|%\{)(.*?)(?:\}\}?)/gm;
-
-I18n.fallbackRules = {
-};
-
-I18n.pluralizationRules = {
- en: function (n) {
- return n == 0 ? ["zero", "none", "other"] : n == 1 ? "one" : "other";
- }
-};
-
-I18n.getFallbacks = function(locale) {
- if (locale === I18n.defaultLocale) {
- return [];
- } else if (!I18n.fallbackRules[locale]) {
- var rules = []
- , components = locale.split("-");
-
- for (var l = 1; l < components.length; l++) {
- rules.push(components.slice(0, l).join("-"));
- }
-
- rules.push(I18n.defaultLocale);
-
- I18n.fallbackRules[locale] = rules;
- }
-
- return I18n.fallbackRules[locale];
-}
-
-I18n.isValidNode = function(obj, node, undefined) {
- return obj[node] !== null && obj[node] !== undefined;
-};
-
-I18n.lookup = function(scope, options) {
- var options = options || {}
- , lookupInitialScope = scope
- , translations = this.prepareOptions(I18n.translations)
- , locale = options.locale || I18n.currentLocale()
- , messages = translations[locale] || {}
- , options = this.prepareOptions(options)
- , currentScope
- ;
-
- if (typeof(scope) == "object") {
- scope = scope.join(this.defaultSeparator);
- }
-
- if (options.scope) {
- scope = options.scope.toString() + this.defaultSeparator + scope;
- }
-
- scope = scope.split(this.defaultSeparator);
-
- while (messages && scope.length > 0) {
- currentScope = scope.shift();
- messages = messages[currentScope];
- }
-
- if (!messages) {
- if (I18n.fallbacks) {
- var fallbacks = this.getFallbacks(locale);
- for (var fallback = 0; fallback < fallbacks.length; fallbacks++) {
- messages = I18n.lookup(lookupInitialScope, this.prepareOptions({locale: fallbacks[fallback]}, options));
- if (messages) {
- break;
- }
- }
- }
-
- if (!messages && this.isValidNode(options, "defaultValue")) {
- messages = options.defaultValue;
- }
- }
-
- return messages;
-};
-
-// Merge serveral hash options, checking if value is set before
-// overwriting any value. The precedence is from left to right.
-//
-// I18n.prepareOptions({name: "John Doe"}, {name: "Mary Doe", role: "user"});
-// #=> {name: "John Doe", role: "user"}
-//
-I18n.prepareOptions = function() {
- var options = {}
- , opts
- , count = arguments.length
- ;
-
- for (var i = 0; i < count; i++) {
- opts = arguments[i];
-
- if (!opts) {
- continue;
- }
-
- for (var key in opts) {
- if (!this.isValidNode(options, key)) {
- options[key] = opts[key];
- }
- }
- }
-
- return options;
-};
-
-I18n.interpolate = function(message, options) {
- options = this.prepareOptions(options);
- var matches = message.match(this.PLACEHOLDER)
- , placeholder
- , value
- , name
- ;
-
- if (!matches) {
- return message;
- }
-
- for (var i = 0; placeholder = matches[i]; i++) {
- name = placeholder.replace(this.PLACEHOLDER, "$1");
-
- value = options[name];
-
- if (!this.isValidNode(options, name)) {
- value = "[missing " + placeholder + " value]";
- }
-
- regex = new RegExp(placeholder.replace(/\{/gm, "\\{").replace(/\}/gm, "\\}"));
- message = message.replace(regex, value);
- }
-
- return message;
-};
-
-I18n.translate = function(scope, options) {
- options = this.prepareOptions(options);
- var translation = this.lookup(scope, options);
-
- try {
- if (typeof(translation) == "object") {
- if (typeof(options.count) == "number") {
- return this.pluralize(options.count, scope, options);
- } else {
- return translation;
- }
- } else {
- return this.interpolate(translation, options);
- }
- } catch(err) {
- return this.missingTranslation(scope);
- }
-};
-
-I18n.localize = function(scope, value) {
- switch (scope) {
- case "currency":
- return this.toCurrency(value);
- case "number":
- scope = this.lookup("number.format");
- return this.toNumber(value, scope);
- case "percentage":
- return this.toPercentage(value);
- default:
- if (scope.match(/^(date|time)/)) {
- return this.toTime(scope, value);
- } else {
- return value.toString();
- }
- }
-};
-
-I18n.parseDate = function(date) {
- var matches, convertedDate;
-
- // we have a date, so just return it.
- if (typeof(date) == "object") {
- return date;
- };
-
- // it matches the following formats:
- // yyyy-mm-dd
- // yyyy-mm-dd[ T]hh:mm::ss
- // yyyy-mm-dd[ T]hh:mm::ss
- // yyyy-mm-dd[ T]hh:mm::ssZ
- // yyyy-mm-dd[ T]hh:mm::ss+0000
- //
- matches = date.toString().match(/(\d{4})-(\d{2})-(\d{2})(?:[ T](\d{2}):(\d{2}):(\d{2}))?(Z|\+0000)?/);
-
- if (matches) {
- for (var i = 1; i <= 6; i++) {
- matches[i] = parseInt(matches[i], 10) || 0;
- }
-
- // month starts on 0
- matches[2] -= 1;
-
- if (matches[7]) {
- convertedDate = new Date(Date.UTC(matches[1], matches[2], matches[3], matches[4], matches[5], matches[6]));
- } else {
- convertedDate = new Date(matches[1], matches[2], matches[3], matches[4], matches[5], matches[6]);
- }
- } else if (typeof(date) == "number") {
- // UNIX timestamp
- convertedDate = new Date();
- convertedDate.setTime(date);
- } else if (date.match(/\d+ \d+:\d+:\d+ [+-]\d+ \d+/)) {
- // a valid javascript format with timezone info
- convertedDate = new Date();
- convertedDate.setTime(Date.parse(date))
- } else {
- // an arbitrary javascript string
- convertedDate = new Date();
- convertedDate.setTime(Date.parse(date));
- }
-
- return convertedDate;
-};
-
-I18n.toTime = function(scope, d) {
- var date = this.parseDate(d)
- , format = this.lookup(scope)
- ;
-
- if (date.toString().match(/invalid/i)) {
- return date.toString();
- }
-
- if (!format) {
- return date.toString();
- }
-
- return this.strftime(date, format);
-};
-
-I18n.strftime = function(date, format) {
- var options = this.lookup("date");
-
- if (!options) {
- return date.toString();
- }
-
- options.meridian = options.meridian || ["AM", "PM"];
-
- var weekDay = date.getDay()
- , day = date.getDate()
- , year = date.getFullYear()
- , month = date.getMonth() + 1
- , hour = date.getHours()
- , hour12 = hour
- , meridian = hour > 11 ? 1 : 0
- , secs = date.getSeconds()
- , mins = date.getMinutes()
- , offset = date.getTimezoneOffset()
- , absOffsetHours = Math.floor(Math.abs(offset / 60))
- , absOffsetMinutes = Math.abs(offset) - (absOffsetHours * 60)
- , timezoneoffset = (offset > 0 ? "-" : "+") + (absOffsetHours.toString().length < 2 ? "0" + absOffsetHours : absOffsetHours) + (absOffsetMinutes.toString().length < 2 ? "0" + absOffsetMinutes : absOffsetMinutes)
- ;
-
- if (hour12 > 12) {
- hour12 = hour12 - 12;
- } else if (hour12 === 0) {
- hour12 = 12;
- }
-
- var padding = function(n) {
- var s = "0" + n.toString();
- return s.substr(s.length - 2);
- };
-
- var f = format;
- f = f.replace("%a", options.abbr_day_names[weekDay]);
- f = f.replace("%A", options.day_names[weekDay]);
- f = f.replace("%b", options.abbr_month_names[month]);
- f = f.replace("%B", options.month_names[month]);
- f = f.replace("%d", padding(day));
- f = f.replace("%e", day);
- f = f.replace("%-d", day);
- f = f.replace("%H", padding(hour));
- f = f.replace("%-H", hour);
- f = f.replace("%I", padding(hour12));
- f = f.replace("%-I", hour12);
- f = f.replace("%m", padding(month));
- f = f.replace("%-m", month);
- f = f.replace("%M", padding(mins));
- f = f.replace("%-M", mins);
- f = f.replace("%p", options.meridian[meridian]);
- f = f.replace("%S", padding(secs));
- f = f.replace("%-S", secs);
- f = f.replace("%w", weekDay);
- f = f.replace("%y", padding(year));
- f = f.replace("%-y", padding(year).replace(/^0+/, ""));
- f = f.replace("%Y", year);
- f = f.replace("%z", timezoneoffset);
-
- return f;
-};
-
-I18n.toNumber = function(number, options) {
- options = this.prepareOptions(
- options,
- this.lookup("number.format"),
- {precision: 3, separator: ".", delimiter: ",", strip_insignificant_zeros: false}
- );
-
- var negative = number < 0
- , string = Math.abs(number).toFixed(options.precision).toString()
- , parts = string.split(".")
- , precision
- , buffer = []
- , formattedNumber
- ;
-
- number = parts[0];
- precision = parts[1];
-
- while (number.length > 0) {
- buffer.unshift(number.substr(Math.max(0, number.length - 3), 3));
- number = number.substr(0, number.length -3);
- }
-
- formattedNumber = buffer.join(options.delimiter);
-
- if (options.precision > 0) {
- formattedNumber += options.separator + parts[1];
- }
-
- if (negative) {
- formattedNumber = "-" + formattedNumber;
- }
-
- if (options.strip_insignificant_zeros) {
- var regex = {
- separator: new RegExp(options.separator.replace(/\./, "\\.") + "$")
- , zeros: /0+$/
- };
-
- formattedNumber = formattedNumber
- .replace(regex.zeros, "")
- .replace(regex.separator, "")
- ;
- }
-
- return formattedNumber;
-};
-
-I18n.toCurrency = function(number, options) {
- options = this.prepareOptions(
- options,
- this.lookup("number.currency.format"),
- this.lookup("number.format"),
- {unit: "$", precision: 2, format: "%u%n", delimiter: ",", separator: "."}
- );
-
- number = this.toNumber(number, options);
- number = options.format
- .replace("%u", options.unit)
- .replace("%n", number)
- ;
-
- return number;
-};
-
-I18n.toHumanSize = function(number, options) {
- var kb = 1024
- , size = number
- , iterations = 0
- , unit
- , precision
- ;
-
- while (size >= kb && iterations < 4) {
- size = size / kb;
- iterations += 1;
- }
-
- if (iterations === 0) {
- unit = this.t("number.human.storage_units.units.byte", {count: size});
- precision = 0;
- } else {
- unit = this.t("number.human.storage_units.units." + [null, "kb", "mb", "gb", "tb"][iterations]);
- precision = (size - Math.floor(size) === 0) ? 0 : 1;
- }
-
- options = this.prepareOptions(
- options,
- {precision: precision, format: "%n%u", delimiter: ""}
- );
-
- number = this.toNumber(size, options);
- number = options.format
- .replace("%u", unit)
- .replace("%n", number)
- ;
-
- return number;
-};
-
-I18n.toPercentage = function(number, options) {
- options = this.prepareOptions(
- options,
- this.lookup("number.percentage.format"),
- this.lookup("number.format"),
- {precision: 3, separator: ".", delimiter: ""}
- );
-
- number = this.toNumber(number, options);
- return number + "%";
-};
-
-I18n.pluralizer = function(locale) {
- pluralizer = this.pluralizationRules[locale];
- if (pluralizer !== undefined) return pluralizer;
- return this.pluralizationRules["en"];
-};
-
-I18n.findAndTranslateValidNode = function(keys, translation) {
- for (i = 0; i < keys.length; i++) {
- key = keys[i];
- if (this.isValidNode(translation, key)) return translation[key];
- }
- return null;
-};
-
-I18n.pluralize = function(count, scope, options) {
- var translation;
-
- try {
- translation = this.lookup(scope, options);
- } catch (error) {}
-
- if (!translation) {
- return this.missingTranslation(scope);
- }
-
- var message;
- options = this.prepareOptions(options);
- options.count = count.toString();
-
- pluralizer = this.pluralizer(this.currentLocale());
- key = pluralizer(Math.abs(count));
- keys = ((typeof key == "object") && (key instanceof Array)) ? key : [key];
-
- message = this.findAndTranslateValidNode(keys, translation);
- if (message == null) message = this.missingTranslation(scope, keys[0]);
-
- return this.interpolate(message, options);
-};
-
-I18n.missingTranslation = function() {
- var message = '[missing "' + this.currentLocale()
- , count = arguments.length
- ;
-
- for (var i = 0; i < count; i++) {
- message += "." + arguments[i];
- }
-
- message += '" translation]';
-
- return message;
-};
-
-I18n.currentLocale = function() {
- return (I18n.locale || I18n.defaultLocale);
-};
-
-// shortcuts
-I18n.t = I18n.translate;
-I18n.l = I18n.localize;
-I18n.p = I18n.pluralize;
-
diff --git a/assets/styles/_mixins/colors.sass b/assets/styles/_mixins/colors.sass
index 9c0be63e..a45a8886 100644
--- a/assets/styles/_mixins/colors.sass
+++ b/assets/styles/_mixins/colors.sass
@@ -68,7 +68,7 @@ $color-bg-log-hover: $gray-dark-2
$color-bg-log-highlight: $gray-dark-3
$color-bg-log-fold-highlight: $gray-dark-4
$color-bg-slider: $slate-blue-3
-$color-bg-left: $gray-light-4
+$color-bg-left: #fbfbfa
$color-bg-list-odd: $white
$color-bg-list-even: $gray-light-3
$color-bg-hooks-odd: $slate-blue-4
diff --git a/assets/styles/profile.sass b/assets/styles/profile.sass
index df912790..dea6e25f 100644
--- a/assets/styles/profile.sass
+++ b/assets/styles/profile.sass
@@ -10,22 +10,29 @@
img
float: left
- width: 48px
- height: 48px
+ width: 100px
+ height: 100px
margin: 3px 20px 0 0
- @include border-radius(4px)
+ @include border-radius(100px)
background-color: $color-bg-light
dl.profile
display: table
+ font-size: 18px
+ line-height: 30px
margin: 0 0 20px 0
div
display: table-row
dt
+ color: #939386
+ font-weight: 600
display: table-cell
padding-right: 20px
dd
margin-left: 0
+ color: #337389
+ a
+ color: #337389
form
clear: left