UNPKG

acha-framework

Version:

is a modular framework on both client (angular.js) and server (node.js) side, it provides security, orm, ioc, obfuscation and ...

118 lines 3.82 kB
(function ($, angular, underscore, window, document, undefined) { 'use strict'; angular.module('frontend.directives').factory('dropdownService', [ 'apiService', function (apiService) { return { get: function (backend, data) { return apiService(backend, data); } }; } ]).directive('dropdown', [ '$document', '$filter', 'dropdownService', function ($document, $filter, dropdownService) { return { restrict: 'E', replace: true, scope: { tag: '<?', disabled: '=?', visible: '=?', cssClass: '=?', model: '=?', textField: '=?', valueField: '=?', items: '=?', backend: '=?', onChange: '=?', placeHolder: '=?', placeHolderTranslate: '=?', backendData: '=?' }, templateUrl: '/templates/framework/directives/dropdown/template.html', link: function (scope, element, attr) { scope.vm = { plate: false, waiting: false, selectedItemText: '' }; scope.vm.init = function () { if (angular.isUndefined(scope.disabled)) { scope.disabled = false; } if (angular.isUndefined(scope.visible)) { scope.visible = true; } if (angular.isUndefined(scope.items)) { scope.items = []; } if (angular.isUndefined(scope.cssClass)) { scope.cssClass = ''; } if (angular.isUndefined(scope.textField)) { scope.textField = 'text'; } if (angular.isUndefined(scope.valueField)) { scope.valueField = 'value'; } scope.vm.bind(); }; scope.vm.closeElseWhere = function (e) { scope.$apply(function () { scope.vm.plate = false; }); }; scope.vm.prevent = function ($event) { $event.stopPropagation(); $event.preventDefault(); }; scope.vm.getText = function () { if (scope.model === undefined || scope.model === null) { return $filter('textOrTranslate')(scope.placeHolder, scope.placeHolderTranslate); } return scope.vm.selectedItemText; }; scope.vm.toggle = function () { if (scope.disabled) return; scope.vm.plate = !scope.vm.plate; }; scope.vm.bind = function () { scope.$on('$destroy', function () { $document.off('click', scope.vm.closeElseWhere); }); $document.on('click', scope.vm.closeElseWhere); scope.$watch('model', function (val, old) { if (angular.isFunction(scope.onChange)) { scope.onChange(val, scope.tag); } }); scope.$watch('backend', scope.vm.transport); }; scope.vm.transport = function (backend) { if (!backend) return; scope.vm.waiting = true; dropdownService.get(backend, scope.backendData).then(function (res) { scope.vm.waiting = false; if (res.status) { scope.items = res.data || []; } }); }; scope.vm.onPick = function (item) { if (scope.disabled) return; scope.model = item[scope.valueField]; scope.vm.selectedItemText = item[scope.textField]; scope.vm.plate = false; }; scope.vm.init(); } }; } ]); }(jQuery, angular, _, window, document));