all files / src/components/autocomplete/ autocomplete.ts

24.32% Statements 9/37
0% Branches 0/6
7.14% Functions 1/14
24.32% Lines 9/37
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96                                                                                                                                                                             
"use strict";
var OsAutocomplete = (function () {
    function OsAutocomplete($scope, $element) {
        this.$scope = $scope;
        this.$element = $element;
        this.scope = $scope;
        this.parent = $scope.$parent;
    }
    OsAutocomplete.prototype.fetchResults = function () {
        return this.parent.$eval(this.itemNames);
    };
    OsAutocomplete.$inject = ['$scope', '$element'];
    return OsAutocomplete;
}());
exports.OsAutocomplete = OsAutocomplete;
angular
    .module('osElements')
    .directive('osSyncScope', function ($compile) {
    return {
        restrict: 'AE',
        compile: compile,
        terminal: true,
        transclude: 'element'
    };
    function compile(tElement, tAttr, transclude) {
        return function postLink(scope, element, attr) {
            var ctrl = scope.osAutocomplete;
            var newScope = ctrl.parent.$new();
            transclude(newScope, function (clone) {
                element.after(clone);
            });
            connectScopes();
            function connectScopes() {
                var scopeDigesting = false;
                var newScopeDigesting = false;
                scope.$watch(function () {
                    if (newScopeDigesting || scopeDigesting) {
                        return;
                    }
                    scopeDigesting = true;
                    scope.$$postDigest(function () {
                        if (!newScopeDigesting) {
                            newScope.$digest();
                        }
                        scopeDigesting = newScopeDigesting = false;
                    });
                });
                newScope.$watch(function () {
                    newScopeDigesting = true;
                });
            }
        };
    }
})
    .directive('osAutocomplete', function () {
    return {
        scope: {
            placeholder: '@',
            disabled: '=?ngDisabled',
            minLength: '=?',
            noCache: '=?',
            selectedItem: '=?',
            itemNames: '@osItems',
            searchText: '=?osSearchText'
        },
        controller: OsAutocomplete,
        controllerAs: 'osAutocomplete',
        bindToController: true,
        template: function (element, attr) {
            var notFound = element.find('os-autocomplete-no-found').detach();
            var result = element.find('os-autocomplete-item-template').detach();
            return '\
        <md-autocomplete \
        ng-disabled="osAutocomplete.disabled" \
        md-no-cache="osAutocomplete.noCache" \
        md-selected-item="osAutocomplete.selectedItem" \
        \
        md-search-text="osAutocomplete.searchText" \
        \
        md-items="item in osAutocomplete.fetchResults(osAutocomplete.searchText)" \
        md-item-text="' + attr.osItemText + '" \
        md-min-length="osAutocomplete.minLength" \
        placeholder="{{ osAutocomplete.placeholder }}"> \
        \
        <md-item-template>' + result.html() + '</md-item-template>  \
        \
        <md-not-found><os-sync-scope>' + notFound.html() + '</os-sync-scope></md-not-found>  \
        </md-autocomplete>';
        },
        link: function (scope, element, attr, ctrl) {
        }
    };
});
;