An error occurred while loading the file. Please try again.
Cleave.angular.js 2.01 KiB
angular.module('cleave.js', [])
    .directive('cleave', function () {
        return {
            restrict: 'A',
            require: 'ngModel',
            scope: {
                cleave: '&',
                onInit: '&?',
                onValueChange: '&?'
            compile: function () {
                return {
                    pre: function ($scope, $element, attrs, ngModelCtrl) {
                        // eslint-disable-next-line
                        $scope.instance = new Cleave($element[0], $scope.cleave());
                        if ($scope.onInit) {
                            $scope.onInit()($scope.instance);
                        ngModelCtrl.$formatters.push(function (val) {
                            $scope.instance.setRawValue(val);
                            return $scope.instance.getFormattedValue();
                        });
                        ngModelCtrl.$parsers.push(function (newFormattedValue) {
                            if ($scope.onValueChange) {
                                $scope.onValueChange()(newFormattedValue);
                            return $scope.instance.getRawValue();
                        });
                        // Recreate cleave instance if any cleave options change
                        $scope.$watch(function() {
                            return $scope.cleave();
                            // eslint-disable-next-line
                        }, function (newOptions, oldOptions) {
                            $scope.instance.destroy();
                            // eslint-disable-next-line
                            $scope.instance = new Cleave($element[0], newOptions);
                        }, true);
                        $scope.$on('$destroy', function () {
                            $scope.instance.destroy();
                            $scope.instance = null;
                        });
    });