mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-25 20:46:48 +00:00
54 lines
1.5 KiB
CoffeeScript
54 lines
1.5 KiB
CoffeeScript
angular.module("admin.utils").directive "ofnSelect2", ($sanitize, $timeout, $filter) ->
|
|
require: 'ngModel'
|
|
restrict: 'C'
|
|
scope:
|
|
data: "="
|
|
minSearch: "@"
|
|
text: "@"
|
|
blank: "=?"
|
|
filter: "=?"
|
|
onSelecting: "=?"
|
|
multiple: '@'
|
|
link: (scope, element, attrs, ngModel) ->
|
|
$timeout ->
|
|
scope.text ?= 'name'
|
|
scope.multiple ?= false
|
|
scope.filter ?= -> true
|
|
scope.placeholder ?= t('admin.choose')
|
|
|
|
if scope.data.$promise
|
|
# Initialize with empty data set, while we wait for data
|
|
element.select2(data:[], placeholder: scope.placeholder)
|
|
scope.data.$promise.then -> init()
|
|
else
|
|
init()
|
|
|
|
element.on "select2-opening", scope.onSelecting || angular.noop
|
|
|
|
attrs.$observe 'disabled', (value) ->
|
|
element.select2('enable', !value)
|
|
|
|
ngModel.$formatters.push (value) ->
|
|
element.select2('val', value)
|
|
value
|
|
|
|
ngModel.$parsers.push (value) ->
|
|
return value.split(",") if scope.multiple
|
|
value
|
|
|
|
init = ->
|
|
scope.data.unshift(scope.blank) if scope.blank? && typeof scope.blank is "object"
|
|
|
|
item.name = $sanitize(item.name) for item in scope.data
|
|
element.select2
|
|
multiple: scope.multiple
|
|
placeholder: scope.placeholder
|
|
minimumResultsForSearch: scope.minSearch || 0
|
|
data: ->
|
|
filtered = $filter('filter')(scope.data,scope.filter)
|
|
{ results: filtered, text: scope.text }
|
|
formatSelection: (item) ->
|
|
item[scope.text]
|
|
formatResult: (item) ->
|
|
item[scope.text]
|