%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/default.coffee |
KEY_CODE =
ESC: 27
TAB: 9
ENTER: 13
CTRL: 17
A: 65
P: 80
N: 78
LEFT: 37
UP:38
RIGHT: 39
DOWN: 40
BACKSPACE: 8
SPACE: 32
# Functions set for handling and rendering the data.
# Others developers can override these methods to tweak At.js such as matcher.
# We can override them in `callbacks` settings.
#
# @mixin
#
# The context of these functions is `$.atwho.Controller` object and they are called in this sequences:
#
# [beforeSave, matcher, filter, remoteFilter, sorter, tplEvl, highlighter, beforeInsert, afterMatchFailed]
#
DEFAULT_CALLBACKS =
# It would be called to restructure the data before At.js invokes `Model#save` to save data
# By default, At.js will convert it to a Hash Array.
#
# @param data [Array] data to refacotor.
# @return [Array] Data after refactor.
beforeSave: (data) ->
Controller.arrayToDefaultHash data
# It would be called to match the `flag`.
# It will match at start of line or after whitespace
#
# @param flag [String] current `flag` ("@", etc)
# @param subtext [String] Text from start to current caret position.
# @param should_startWithSpace [boolean] accept white space as beginning of match.
# @param acceptSpaceBar [boolean] accept a space bar in the center of match,
# so you can match a first and last name, for ex.
#
# @return [String | null] Matched result.
matcher: (flag, subtext, should_startWithSpace, acceptSpaceBar) ->
# escape RegExp
flag = flag.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&")
flag = '(?:^|\\s)' + flag if should_startWithSpace
# À
_a = decodeURI("%C3%80")
# ÿ
_y = decodeURI("%C3%BF")
space = if acceptSpaceBar then "\ " else ""
regexp = new RegExp "#{flag}([A-Za-z#{_a}-#{_y}0-9_#{space}\'\.\+\-]*)$|#{flag}([^\\x00-\\xff]*)$",'gi'
match = regexp.exec subtext
if match then match[2] || match[1] else null
# ---------------------
# Filter data by matched string.
#
# @param query [String] Matched string.
# @param data [Array] data list
# @param searchKey [String] at char for searching.
#
# @return [Array] result data.
filter: (query, data, searchKey) ->
# !!null #=> false; !!undefined #=> false; !!'' #=> false;
_results = []
for item in data
_results.push item if ~new String(item[searchKey]).toLowerCase().indexOf query.toLowerCase()
_results
# If a function is given, At.js will invoke it if local filter can not find any data
#
# @param params [String] matched query
# @param callback [Function] callback to render page.
remoteFilter: null
# remoteFilter: (query, callback) ->
# $.ajax url,
# data: params
# success: (data) ->
# callback(data)
# Sorter data of course.
#
# @param query [String] matched string
# @param items [Array] data that was refactored
# @param searchKey [String] at char to search
#
# @return [Array] sorted data
sorter: (query, items, searchKey) ->
return items unless query
_results = []
for item in items
item.atwho_order = new String(item[searchKey]).toLowerCase().indexOf query.toLowerCase()
_results.push item if item.atwho_order > -1
_results.sort (a,b) -> a.atwho_order - b.atwho_order
# Evaluate the template either as a string or as a function
# this allows someone to pass in a set of data that needs a
# different template for different data results
#
# @param tpl [function] the template function or string
# @param map [Hash] Data map to eval.
tplEval: (tpl, map) ->
template = tpl
try
template = tpl(map) unless typeof tpl == 'string'
template.replace /\$\{([^\}]*)\}/g, (tag, key, pos) -> map[key]
catch error
""
# Highlight the `matched query` string.
#
# @param li [String] HTML String after eval.
# @param query [String] matched query.
#
# @return [String] highlighted string.
highlighter: (li, query) ->
return li if not query
regexp = new RegExp(">\\s*([^\<]*?)(" + query.replace("+","\\+") + ")([^\<]*)\\s*<", 'ig')
li.replace regexp, (str, $1, $2, $3) -> '> '+$1+'<strong>' + $2 + '</strong>'+$3+' <'
# What to do before inserting item's value into inputor.
#
# @param value [String] content to insert
# @param $li [jQuery Object] the chosen item
# @param e [event Object] from the user selection (keyDown or click)
beforeInsert: (value, $li, e) ->
value
# You can adjust the menu's offset here.
#
# @param offset [Hash] offset will be applied to menu
# beforeReposition: (offset) ->
# offset.left += 10
# offset.top += 10
# offset
beforeReposition: (offset) -> offset
afterMatchFailed: (at, el) ->