johnhamelink
12/2/2013 - 2:56 PM

make_badges.js.coffee

Array.prototype.compact = -> @filter((n) -> n) # remove blank values

$ ->
  $('.menu-inner').accordion
    heightStyle: "content"
    collapsible: true

BadgeMaker = angular.module 'BadgeMaker', []


BadgeMaker.controller 'MakeBadgesCtrl', ['$scope', '$http', '$timeout', ($scope, $http, $timeout) ->

  $scope.reload = ->
    location.reload()


  $scope.reset = ->
    $scope.badge = {
      finished: false
      uid: ""

      category: 0
      colour: "00"
      customisation: []
      name: ""
      level: ""
      description: ""
      icon: ""
    }


  $scope.reset()



  $scope.swatch_scaffolding = ->
    if typeof $scope.swatches_cache != 'object'
      $http.get("/swatches.json")
      .success (data) ->
        $scope.swatches_cache = [ swatch[0] for swatch in data ][0]

    $scope.swatches_cache


  $scope.icon_scaffolding = ->
    if typeof $scope.icons_cache != 'object'
      $http.get("/icons.json")
      .success (data) ->
        $scope.icons_cache = data[0]

    $scope.icons_cache


  $scope.scaffolding_requested = false
  $scope.scaffolding = ->
    unless $scope.scaffolding_requested
      $scope.scaffolding_requested = true

      $http.get("/scaffolding.json")
      .success (data) ->
        $scope.scaffolding_cache = [ scaffold[0][0] for scaffold in data ][0]

      .error (data, status, headers, config) ->
        $scope.scaffolding_requested = false

    $scope.scaffolding_cache || []



  $scope.categories = ->
    if typeof $scope.categories_cache != 'object' or Object.keys($scope.categories_cache).length == 0

      $scope.categories_cache = []
      for shape in $scope.scaffolding()
        $scope.categories_cache.push shape[0][0]

      $scope.badge.customisation[0] = $scope.categories_cache[$scope.badge.category].char unless $scope.badge.customisation[0]

    $scope.categories_cache



  $scope.customisations = ->
    return [] if "" == $scope.badge.category
    $scope.scaffolding()[$scope.badge.category]


  $scope.icons = ->
    return [] if "" == $scope.badge.colour
    $scope.icon_scaffolding()


  $scope.base_thumbnail = (attributes) ->
    while undefined == attributes['thumb'] or undefined == attributes
      attributes = attributes[0]

    attributes['thumb']


  $scope.colours = ->
    return [] if "" == $scope.badge.category
    $scope.swatch_scaffolding()


  $scope.badge_changed = ->
    return false if JSON.stringify($scope.badge) == $scope.badge_old

    $scope.badge_old = JSON.stringify $scope.badge
    true


  $scope.badge_preview_url = ->
    if $scope.badge_changed()

      $scope.badge_preview_url_cache = "/b/" + [
        $scope.badge.colour
        $scope.badge.customisation.join('-').replace(/-+/g, "-")
        encodeURIComponent($scope.badge.name || " ")
        encodeURIComponent($scope.badge.level || " ")
        $scope.badge.icon
      ].join('/')

    $scope.badge_preview_url_cache



  $scope.badge_url = ""


  $scope.save = ->
    $scope.badge.finished = true
    $scope.badge_url = $scope.badge_preview_url()

    $http
      method: "POST"
      url: "/save"

      headers:
        'Content-Type': 'application/x-www-form-urlencoded'

      data: $.param
        path: $scope.badge_url
        title: $scope.badge.name
        level: $scope.badge.level
        description: $scope.badge.description

    .success (data) -> $scope.badge.uid = data


  $scope.shared_by_email = false
  $scope.share_email = ->
    $http
      method: "POST"
      url: "/share/email"

      headers:
        'Content-Type': 'application/x-www-form-urlencoded'

      data: $.param
        image_link: $scope.badge_url
        email: $scope.share_email_address

    .success (data) -> $scope.shared_by_email = true


  $scope.shared_on_twitter = false
  $scope.share_twitter = ->
    $http
      method: "POST"
      url: "/share/twitter"

      headers:
        'Content-Type': 'application/x-www-form-urlencoded'

      data: $.param
        link: $scope.badge_url
        handle: $scope.share_twitter_handle

    .success (data) -> $scope.shared_on_twitter = true


]