(function(angular, $, _) { // example: // WISHLIST: Instead of global CRM.crmMailing.mailTokens, accept token list as an input angular.module('crmMailing').directive('crmMailingToken', function() { return { require: '^crmUiIdScope', scope: { onSelect: '@' }, template: '', link: function(scope, element, attrs, crmUiIdCtrl) { $(element).addClass('crm-action-menu fa-code').crmSelect2({ width: "12em", dropdownAutoWidth: true, data: CRM.crmMailing.mailTokens, placeholder: ts('Tokens') }); $(element).on('select2-selecting', function(e) { e.preventDefault(); $(element).select2('close').select2('val', ''); scope.$parent.$eval(attrs.onSelect, { token: {name: e.val} }); }); } }; }); })(angular, CRM.$, CRM._);