angular.module('materialFilters', [])

.filter 'trimLength', ->
  return (input, num, scope) ->
    return input unless typeof input == 'string'
    return input.substring(0,num || 20) + '...'
.filter 'titleize', ->
  return (input) ->
    return unless input
    return input.replace(/\_/g,' ').replace(/\b[a-z]/g, (letter)->
      return letter[0].toUpperCase())
      .filter 'pluck', ->
  pluck = (objects, property) ->
    return [] if !(objects && property && angular.isArray(objects))
    property = String(property)
    return objects.map( (object) ->
      object = Object(object)
      return object[property] if (object.hasOwnProperty(property))
      return '')
  return (objects, property) ->
    return pluck(objects, property)
.filter 'unique', ->
  return (items, filterOn) ->
    return items if filterOn == false
    if (filterOn || angular.isUndefined(filterOn)) && angular.isArray(items)
      newItems = []
      extractValueToCompare = (item) ->
        if angular.isObject(item) && angular.isString(filterOn) then item[filterOn] else item
    for item in items
      for newItem in newItems
        isDuplicate = false
        if (angular.equals(extractValueToCompare(newItem), extractValueToCompare(item)))
          isDuplicate = true
          break
      newItems.push(item) if (!isDuplicate)
    items = newItems
  return items;
.filter 'join', ->
              return (list, token) ->
    return (list||[]).join(token)