%PDF- %PDF-
| Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/vendor/npm-asset/at.js/src/ |
| Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/vendor/npm-asset/at.js/src/view.coffee |
# View class to control how At.js's view showing.
# All classes share the same DOM view.
class View
# @param controller [Object] The Controller.
constructor: (@context) ->
@$el = $("<div class='atwho-view'><ul class='atwho-view-ul'></ul></div>")
@$elUl = @$el.children();
@timeoutID = null
# create HTML DOM of list view if it does not exist
@context.$el.append(@$el)
this.bindEvent()
init: ->
id = @context.getOpt("alias") || @context.at.charCodeAt(0)
header_tpl = this.context.getOpt("headerTpl")
if (header_tpl && this.$el.children().length == 1)
this.$el.prepend(header_tpl)
@$el.attr('id': "at-view-#{id}")
destroy: ->
@$el.remove()
bindEvent: ->
$menu = @$el.find('ul')
lastCoordX = 0
lastCoordY = 0
$menu.on 'mousemove.atwho-view','li', (e) =>
# If the mouse hasn't actually moved then exit.
return if lastCoordX == e.clientX and lastCoordY == e.clientY
lastCoordX = e.clientX
lastCoordY = e.clientY
$cur = $(e.currentTarget)
return if $cur.hasClass('cur')
$menu.find('.cur').removeClass 'cur'
$cur.addClass 'cur'
.on 'click.atwho-view', 'li', (e) =>
$menu.find('.cur').removeClass 'cur'
$(e.currentTarget).addClass 'cur'
this.choose(e)
e.preventDefault()
# Check if view is visible
#
# @return [Boolean]
visible: ->
$.expr.filters.visible(@$el[0])
highlighted: ->
@$el.find(".cur").length > 0
choose: (e) ->
if ($li = @$el.find ".cur").length
content = @context.insertContentFor $li
@context._stopDelayedCall()
@context.insert @context.callbacks("beforeInsert").call(@context, content, $li, e), $li
@context.trigger "inserted", [$li, e]
this.hide(e)
@stopShowing = yes if @context.getOpt("hideWithoutSuffix")
reposition: (rect) ->
_window = if @context.app.iframeAsRoot then @context.app.window else window
if rect.bottom + @$el.height() - $(_window).scrollTop() > $(_window).height()
rect.bottom = rect.top - @$el.height()
if rect.left > overflowOffset = $(_window).width() - @$el.width() - 5
rect.left = overflowOffset
offset = {left:rect.left, top:rect.bottom}
@context.callbacks("beforeReposition")?.call(@context, offset)
@$el.offset offset
@context.trigger "reposition", [offset]
next: ->
cur = @$el.find('.cur').removeClass('cur')
next = cur.next()
next = @$el.find('li:first') if not next.length
next.addClass 'cur'
nextEl = next[0]
offset = nextEl.offsetTop + nextEl.offsetHeight + (if nextEl.nextSibling then nextEl.nextSibling.offsetHeight else 0)
@scrollTop Math.max(0, offset - this.$el.height())
prev: ->
cur = @$el.find('.cur').removeClass('cur')
prev = cur.prev()
prev = @$el.find('li:last') if not prev.length
prev.addClass 'cur'
prevEl = prev[0]
offset = prevEl.offsetTop + prevEl.offsetHeight + (if prevEl.nextSibling then prevEl.nextSibling.offsetHeight else 0)
@scrollTop Math.max(0, offset - this.$el.height())
scrollTop: (scrollTop) ->
scrollDuration = @context.getOpt('scrollDuration')
if scrollDuration
@$elUl.animate {scrollTop: scrollTop}, scrollDuration
else
@$elUl.scrollTop(scrollTop)
show: ->
if @stopShowing
@stopShowing = false
return
if not this.visible()
@$el.show()
@$el.scrollTop 0
@context.trigger 'shown'
this.reposition(rect) if rect = @context.rect()
hide: (e, time) ->
return if not this.visible()
if isNaN(time)
@$el.hide()
@context.trigger 'hidden', [e]
else
callback = => this.hide()
clearTimeout @timeoutID
@timeoutID = setTimeout callback, time
# render list view
render: (list) ->
if not ($.isArray(list) and list.length > 0)
this.hide()
return
@$el.find('ul').empty()
$ul = @$el.find('ul')
tpl = @context.getOpt('displayTpl')
for item in list
item = $.extend {}, item, {'atwho-at': @context.at}
li = @context.callbacks("tplEval").call(@context, tpl, item, "onDisplay")
$li = $ @context.callbacks("highlighter").call(@context, li, @context.query.text)
$li.data("item-data", item)
$ul.append $li
this.show()
$ul.find("li:first").addClass "cur" if @context.getOpt('highlightFirst')