codecombat/app/lib/utils.coffee

69 lines
2.3 KiB
CoffeeScript
Raw Normal View History

2014-01-03 13:32:13 -05:00
module.exports.clone = (obj) ->
return obj if obj is null or typeof (obj) isnt "object"
temp = obj.constructor()
for key of obj
temp[key] = module.exports.clone(obj[key])
temp
module.exports.combineAncestralObject = (obj, propertyName) ->
combined = {}
while obj?[propertyName]
for key, value of obj[propertyName]
continue if combined[key]
combined[key] = value
if obj.__proto__
obj = obj.__proto__
else
# IE has no __proto__. TODO: does this even work? At most it doesn't crash.
obj = Object.getPrototypeOf(obj)
combined
module.exports.normalizeFunc = (func_thing, object) ->
# func could be a string to a function in this class
# or a function in its own right
object ?= {}
if _.isString(func_thing)
func = object[func_thing]
if not func
console.error("Could not find method", func_thing, 'in object', @)
return => null # always return a func, or Mediator will go boom
func_thing = func
2014-01-10 19:48:28 -05:00
return func_thing
module.exports.hexToHSL = (hex) ->
rgbToHsl(hexToR(hex), hexToG(hex), hexToB(hex))
hexToR = (h) -> parseInt (cutHex(h)).substring(0, 2), 16
hexToG = (h) -> parseInt (cutHex(h)).substring(2, 4), 16
hexToB = (h) -> parseInt (cutHex(h)).substring(4, 6), 16
cutHex = (h) -> (if (h.charAt(0) is "#") then h.substring(1, 7) else h)
module.exports.hslToHex = (hsl) ->
'#' + (toHex(n) for n in hslToRgb(hsl...)).join('')
toHex = (n) ->
h = Math.floor(n).toString(16)
h = '0'+h if h.length is 1
2014-03-12 15:30:43 -04:00
h
i18n = (say, target, language=me.lang(), fallback='en') ->
generalResult = null
fallbackResult = null
fallforwardResult = null # If a general language isn't available, the first specific one will do
matches = (/\w+/gi).exec(language)
generalName = matches[0] if matches
for locale in say?.i18n
if target of say[locale]
result = say[locale][target]
else continue
return result if locale == language
generalResult = result if locale == generalName
fallbackResult = result if locale == fallback
fallforwardResult = result if locale.indexOf language != -1 and not fallforwardResult?
return generalResult if generalResult?
return fallbackResult if fallbackResult?
return fallforwardResult if fallforwardResult?
return say.text if 'text' of say
null