decko-commons/decko

View on GitHub
mod/edit/assets/script/name_editor.js.coffee

Summary

Maintainability
Test Coverage
checkNameAfterTyping = null

$(window).ready ->
  $('body').on 'keyup', '.name-editor input', (event) ->
    clearTimeout(checkNameAfterTyping) if checkNameAfterTyping
    input = $(this)
    if event.which == 13
      checkName(input)
      checkNameAfterTyping = null
    else
      checkNameAfterTyping = setTimeout ->
          checkName(input)
          checkNameAfterTyping = null
        , 400

decko.pingName = (name, success)->
  $.getJSON decko.path(''), format: 'json', view: 'status', 'card[name]': name, success


checkName = (box) ->
  name = box.val()
  decko.pingName name, (data)->
    return null if box.val() != name # avert race conditions
    status = data['status']
    if status
      ed = box.parent()
      leg = box.closest('fieldset').find('legend')
      msg = leg.find '.name-messages'
      unless msg[0]
        msg = $('<span class="name-messages"></span>')
        leg.append msg?
      ed.removeClass 'real-name virtual-name known-name'

      # use id to avoid warning when renaming to name variant
      slot_id = box.slot().data 'cardId'
      if status != 'unknown' and !(slot_id && parseInt(slot_id) == data['id'])
        ed.addClass status + '-name known-name'
        qualifier = if status == 'virtual' then 'in virtual' else 'already in'
        href = decko.path(data['url_key'])
        msg.html "\"<a href='#{href}'>#{name}</a>\" #{qualifier} use"
      else
        msg.html ''