logger.coffee 1.57 KB
Newer Older
1
class @Logger
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

  # listeners[event_type][element] -> list of callbacks
  listeners = {}
  @log: (event_type, data, element = null) ->
    # Check to see if we're listening for the event type.
    if event_type of listeners
      # Cool.  Do the elements also match?
      # null element in the listener dictionary means any element will do.
      # null element in the @log call means we don't know the element name.
      if null of listeners[event_type]
        # Make the callbacks.
        for callback in listeners[event_type][null]
          callback(event_type, data, element)
      else if element of listeners[event_type]
        for callback in listeners[event_type][element]
          callback(event_type, data, element)

    # Regardless of whether any callbacks were made, log this event.
20
    $.postWithPrefix '/event',
21 22 23 24
      event_type: event_type
      event: JSON.stringify(data)
      page: window.location.href

25 26 27 28 29 30 31 32 33 34
  @listen: (event_type, element, callback) ->
    # Add a listener.  If you want any element to trigger this listener,
    # do element = null
    if event_type not of listeners
      listeners[event_type] = {}
    if element not of listeners[event_type]
      listeners[event_type][element] = [callback]
    else
      listeners[event_type][element].push callback

35 36
  @bind: ->
    window.onunload = ->
37 38
      $.ajaxWithPrefix
        url: "/event"
39 40 41 42 43 44
        data:
          event_type: 'page_close'
          event: ''
          page: window.location.href
        async: false

45 46 47

# log_event exists for compatibility reasons
# and will soon be deprecated.
48
@log_event = Logger.log