diff --git a/assets/scripts/app/helpers/helpers.coffee b/assets/scripts/app/helpers/helpers.coffee index 34db8467..a0651ee2 100644 --- a/assets/scripts/app/helpers/helpers.coffee +++ b/assets/scripts/app/helpers/helpers.coffee @@ -1,131 +1,166 @@ require 'config/emoij' -@Travis.Helpers = - COLORS: - default: 'yellow' - passed: 'green' - failed: 'red' - errored: 'gray' - canceled: 'gray' +config_keys_map = Travis.CONFIG_KEYS_MAP +config = Travis.config +githubCommitUrl = Travis.Urls.githubCommit +currentDate = Travis.currentDate +timeago = $.timeago +intersect = $.intersect +only = $.only +mapObject = $.map - compact: (object) -> - result = {} - (result[key] = value unless $.isEmpty(value)) for key, value of object || {} - result +colors = { + default: 'yellow' + passed: 'green' + failed: 'red' + errored: 'gray' + canceled: 'gray' +} - safe: (string) -> - new Handlebars.SafeString(string) +compact = (object) -> + result = {} + (result[key] = value unless Ember.isEmpty(value)) for key, value of object || {} + result - colorForState: (state) -> - Travis.Helpers.COLORS[state] || Travis.Helpers.COLORS['default'] +safe = (string) -> + new Ember.Handlebars.SafeString(string) - formatCommit: (sha, branch) -> - Travis.Helpers.formatSha(sha) + if branch then " (#{branch})" else '' +colorForState = (state) -> + colors[state] || colors['default'] - formatSha: (sha) -> - (sha || '').substr(0, 7) +formatCommit = (sha, branch) -> + formatSha(sha) + if branch then " (#{branch})" else '' - formatConfig: (config) -> - config = $.only config, Object.keys(Travis.CONFIG_KEYS_MAP) - values = $.map config, (value, key) -> - value = (if value && value.join then value.join(', ') else value) || '' - if key == 'rvm' && "#{value}".match(/^\d+$/) - value = "#{value}.0" - '%@: %@'.fmt Travis.CONFIG_KEYS_MAP[key], value - if values.length == 0 then '-' else values.join(', ') +formatSha = (sha) -> + (sha || '').substr(0, 7) - formatMessage: (message, options) -> - message = message || '' - message = message.split(/\n/)[0] if options.short - message = @_emojize(@_escape(message)) - if !!options.repo - message = @githubify(message, options.repo.get('owner'), options.repo.get('name')) - if !!options.pre - message = message.replace /\n/g, '
' - message +formatConfig = (config) -> + config = only config, Object.keys(config_keys_map) + values = mapObject config, (value, key) -> + value = (if value && value.join then value.join(', ') else value) || '' + if key == 'rvm' && "#{value}".match(/^\d+$/) + value = "#{value}.0" + '%@: %@'.fmt config_keys_map[key], value + if values.length == 0 then '-' else values.join(', ') - pathFrom: (url) -> - (url || '').split('/').pop() +formatMessage = (message, options) -> + message = message || '' + message = message.split(/\n/)[0] if options.short + message = @_emojize(@_escape(message)) + if !!options.repo + message = @githubify(message, options.repo.get('owner'), options.repo.get('name')) + if !!options.pre + message = message.replace /\n/g, '
' + message - timeAgoInWords: (date) -> - $.timeago.distanceInWords date +pathFrom = (url) -> + (url || '').split('/').pop() - durationFrom: (started, finished) -> - started = started and @_toUtc(new Date(@_normalizeDateString(started))) - finished = if finished then @_toUtc(new Date(@_normalizeDateString(finished))) else @_nowUtc() - if started && finished then Math.round((finished - started) / 1000) else 0 +timeAgoInWords = (date) -> + timeago.distanceInWords date - timeInWords: (duration) -> - days = Math.floor(duration / 86400) - hours = Math.floor(duration % 86400 / 3600) - minutes = Math.floor(duration % 3600 / 60) - seconds = duration % 60 +durationFrom = (started, finished) -> + started = started and @_toUtc(new Date(@_normalizeDateString(started))) + finished = if finished then @_toUtc(new Date(@_normalizeDateString(finished))) else @_nowUtc() + if started && finished then Math.round((finished - started) / 1000) else 0 - if days > 0 - 'more than 24 hrs' - else - result = [] - result.push hours + ' hr' if hours is 1 - result.push hours + ' hrs' if hours > 1 - result.push minutes + ' min' if minutes > 0 - result.push seconds + ' sec' if seconds > 0 - if result.length > 0 then result.join(' ') else '-' +timeInWords = (duration) -> + days = Math.floor(duration / 86400) + hours = Math.floor(duration % 86400 / 3600) + minutes = Math.floor(duration % 3600 / 60) + seconds = duration % 60 - githubify: (text, owner, repo) -> - self = this - text = text.replace @_githubReferenceRegexp, (reference, matchedOwner, matchedRepo, matchedNumber) -> - self._githubReferenceLink(reference, { owner: owner, repo: repo }, { owner: matchedOwner, repo: matchedRepo, number: matchedNumber } ) - text = text.replace @_githubUserRegexp, (reference, username) -> - self._githubUserLink(reference, username) - text = text.replace @_githubCommitReferenceRegexp, (reference, matchedOwner, matchedRepo, matchedSHA) -> - self._githubCommitReferenceLink(reference, { owner: owner, repo: repo }, { owner: matchedOwner, repo: matchedRepo, sha: matchedSHA }) - text + if days > 0 + 'more than 24 hrs' + else + result = [] + result.push hours + ' hr' if hours is 1 + result.push hours + ' hrs' if hours > 1 + result.push minutes + ' min' if minutes > 0 + result.push seconds + ' sec' if seconds > 0 + if result.length > 0 then result.join(' ') else '-' - _githubReferenceRegexp: new RegExp("([\\w-]+)?\\/?([\\w-]+)?(?:#|gh-)(\\d+)", 'g') +githubify = (text, owner, repo) -> + self = this + text = text.replace @_githubReferenceRegexp, (reference, matchedOwner, matchedRepo, matchedNumber) -> + self._githubReferenceLink(reference, { owner: owner, repo: repo }, { owner: matchedOwner, repo: matchedRepo, number: matchedNumber } ) + text = text.replace @_githubUserRegexp, (reference, username) -> + self._githubUserLink(reference, username) + text = text.replace @_githubCommitReferenceRegexp, (reference, matchedOwner, matchedRepo, matchedSHA) -> + self._githubCommitReferenceLink(reference, { owner: owner, repo: repo }, { owner: matchedOwner, repo: matchedRepo, sha: matchedSHA }) + text - _githubReferenceLink: (reference, current, matched) -> - owner = matched.owner || current.owner - repo = matched.repo || current.repo - "#{reference}" +_githubReferenceRegexp = new RegExp("([\\w-]+)?\\/?([\\w-]+)?(?:#|gh-)(\\d+)", 'g') - _githubUserRegexp: new RegExp("\\B@([\\w-]+)", 'g') +_githubReferenceLink = (reference, current, matched) -> + owner = matched.owner || current.owner + repo = matched.repo || current.repo + "#{reference}" - _githubUserLink: (reference, username) -> - "#{reference}" +_githubUserRegexp = new RegExp("\\B@([\\w-]+)", 'g') - _githubCommitReferenceRegexp: new RegExp("([\\w-]+)?\\/([\\w-]+)?@([0-9A-Fa-f]+)", 'g') +_githubUserLink = (reference, username) -> + "#{reference}" - _githubCommitReferenceLink: (reference, current, matched) -> - owner = matched.owner || current.owner - repo = matched.repo || current.repo - url = "#{Travis.Urls.githubCommit("#{owner}/#{repo}", matched.sha)}" - "#{reference}" +_githubCommitReferenceRegexp = new RegExp("([\\w-]+)?\\/([\\w-]+)?@([0-9A-Fa-f]+)", 'g') - _normalizeDateString: (string) -> - if window.JHW - string = string.replace('T', ' ').replace(/-/g, '/') - string = string.replace('Z', '').replace(/\..*$/, '') - string +_githubCommitReferenceLink = (reference, current, matched) -> + owner = matched.owner || current.owner + repo = matched.repo || current.repo + url = "#{githubCommitUrl("#{owner}/#{repo}", matched.sha)}" + "#{reference}" - _nowUtc: -> - @_toUtc Travis.currentDate() +_normalizeDateString = (string) -> + if window.JHW + string = string.replace('T', ' ').replace(/-/g, '/') + string = string.replace('Z', '').replace(/\..*$/, '') + string - _toUtc: (date) -> - Date.UTC date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds() +_nowUtc = -> + @_toUtc currentDate() - _emojize: (text) -> - emojis = text.match(/:\S+?:/g) - if emojis isnt null - $.each emojis.uniq(), (ix, emoji) -> - strippedEmoji = emoji.substring(1, emoji.length - 1) - unless EmojiDictionary.indexOf(strippedEmoji) is -1 - image = '\''' - text = text.replace(new RegExp(emoji, 'g'), image) - text +_toUtc = (date) -> + Date.UTC date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds() - _escape: (text) -> - text.replace(/&/g, '&').replace(//g, '>' +_emojize = (text) -> + emojis = text.match(/:\S+?:/g) + if emojis isnt null + emojis.uniq().each (emoji, ix) -> + strippedEmoji = emoji.substring(1, emoji.length - 1) + unless EmojiDictionary.indexOf(strippedEmoji) is -1 + image = '\''' + text = text.replace(new RegExp(emoji, 'g'), image) + text - configKeys: (config) -> - return [] unless config - $.intersect($.keys(config), Object.keys(Travis.CONFIG_KEYS_MAP)) +_escape = (text) -> + text.replace(/&/g, '&').replace(//g, '>' + +configKeys = (config) -> + return [] unless config + intersect(Object.keys(config), Object.keys(config_keys_map)) + +Travis.Helpers = + configKeys: configKeys + _escape: _escape + _emojize: _emojize + _toUtc: _toUtc + _nowUtc: _nowUtc + _normalizeDateString: _normalizeDateString + _githubCommitReferenceLink: _githubCommitReferenceLink + _githubCommitReferenceRegexp: _githubCommitReferenceRegexp + _githubUserLink: _githubUserLink + _githubUserRegexp: _githubUserRegexp + _githubReferenceLink: _githubReferenceLink + _githubReferenceRegexp: _githubReferenceRegexp + githubify: githubify + timeInWords: timeInWords + durationFrom: durationFrom + timeAgoInWords: timeAgoInWords + pathFrom: pathFrom + formatMessage: formatMessage + formatConfig: formatConfig + formatSha: formatSha + formatCommit: formatCommit + colorForState: colorForState + safe: safe + compact: compact