Sha256: 4a7542f4d87108e2427a3cc77d3ffea67d538ce8298bef77dd7ff04394b38d96

Contents?: true

Size: 1.66 KB

Versions: 1

Compression:

Stored size: 1.66 KB

Contents

u = up.util
e = up.element

class up.FollowVariant

  constructor: (selector, options) ->
    # @followLink() will wrap @followNow() with event submission and [up-active] feedback
    @followNow = options.follow
    @preloadLink = options.preload
    @selectors = u.splitValues(selector, ',')

  onClick: (event, link) =>
    if up.link.shouldProcessEvent(event, link)
      if e.matches(link, '[up-instant]')
        # If the link was already processed on mousedown, we still need
        # to prevent this later click event's chain.
        up.event.halt(event)
      else
        up.event.consumeAction(event)
        @followLink(link)
    else
      # For tests
      up.link.allowDefault(event)

  onMousedown: (event, link) =>
    if up.link.shouldProcessEvent(event, link)
      up.event.consumeAction(event)
      @followLink(link)

  fullSelector: (additionalClause = '') =>
    parts = []
    @selectors.forEach (variantSelector) ->
      for tagSelector in ['a', '[up-href]']
        parts.push "#{tagSelector}#{variantSelector}#{additionalClause}"
    parts.join(', ')

  registerEvents: ->
    up.on 'click', @fullSelector(), (args...) =>
      u.muteRejection @onClick(args...)
    up.on 'mousedown', @fullSelector('[up-instant]'), (args...) =>
      u.muteRejection @onMousedown(args...)

  followLink: (link, options = {}) =>
    promise = up.event.whenEmitted('up:link:follow', log: 'Following link', target: link)
    promise = promise.then =>
      up.feedback.start(link) unless options.preload
      @followNow(link, options)
    unless options.preload
      promise = promise.then -> up.feedback.stop(link)
    promise

  matchesLink: (link) =>
    e.matches(link, @fullSelector())

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
unpoly-rails-0.60.0 lib/assets/javascripts/unpoly/classes/follow_variant.coffee