App_Plugins/xeCustom/backoffice/app_bundle.js
//simulo angular.component per versioni di angular < 1.5 e anche bindToController per versioni < 1.3

simulo angular.component per versioni di angular < 1.5 e anche bindToController per versioni < 1.3
simulo angular . component per versioni di angular < 1 . 5 e anche bindToController per versioni < 1 . 3
function makeComponent(_a) {
        var EorA = _a.EorA, labels = _a.labels, inputs = _a.inputs, outputs = _a.outputs, bindings = _a.bindings, template = _a.template, controller = _a.controller, controllerAs = _a.controllerAs, require = _a.require, transclude = _a.transclude;
        var ddo = {};
        var ver = angular.version.full;
        var Bindings = bindings ? bindings.map(function (b) { return new Binding(b); }) : [];
        if (labels)
            Bindings = Bindings.concat(labels.map(function (l) { return new Binding(l, '@'); }));
        if (inputs)
            Bindings = Bindings.concat(inputs.map(function (i) { return new Binding(i, '<'); }));
        if (outputs)
            Bindings = Bindings.concat(outputs.map(function (o) { return new Binding(o, '&'); }));
        ddo.restrict = EorA || 'E';
        ddo.scope = {};
        Bindings.forEach(function (b) { return ddo.scope[b.locProp] =
            (ver >= "1.5" ? b.type : b.type.replace('<', '=')) + b.extAttr; });
        if (Bindings.length > 0 && ver >= "1.3") {
            ddo.bindToController = true;
        } 
        if (template) {
            if (template.lastIndexOf(".html") > 0 && template.indexOf("<") < 0 && template.indexOf(">") < 0) {
                ddo.templateUrl = template;
            }
            else {
                ddo.template = template;
            }
        }
        if (require) {
            ddo.require = require || "";
        }
        if (transclude) {
            ddo.transclude = !!transclude;
        }
        if (controller) {
            var hasAs = controller.indexOf(" as ");
            var ctrlAs = (hasAs > 0) ? controller.substring(hasAs + 4) : (controllerAs || "ctrl");
            ddo.controllerAs = ctrlAs;
            ddo.controller = (hasAs > 0) ? controller : controller + " as " + ctrlAs;
            ddo.link = function linkToController(scope, el, attr, ctrl) {
                if (!ddo.bindToController) {
                    var iall = Bindings.filter(function (b) { return b.isInput; }).map(function (i) { return i.locProp; });
                    if (iall)
                        scope.$watch("[" + iall.join(',') + "]", function syncFrom() {
                            iall.forEach(function (i) { return scope[ctrlAs][i] = scope[i]; });
                        }, true);
                    Bindings.filter(function (b) { return b.isOutput; }).forEach(function (o) {
                        scope[ctrlAs][o.locProp] = scope[o.locProp];
                    });
                    Bindings.filter(function (b) { return b.isSync; }).forEach(function (b) {
                        scope.$watch(ctrlAs + "." + b.locProp, function () { scope[b.locProp] = scope[ctrlAs][b.locProp]; });
                    });
                }
                if (require) {
                    var req = (['^', '?'].indexOf(require.charAt(0)) >= 0) ? require.substr(1) : require;
                    scope[ctrlAs][req] = ctrl;
                }
                if (typeof scope[ctrlAs].$onInit === "function") {
                    scope[ctrlAs].$onInit({ scope: scope, el: el, attr: attr, ctrl: ctrl });
                }
                if (typeof scope[ctrlAs].$onDestroy === "function") {
                    scope.$on("$destroy", function () { return scope[ctrlAs].$onDestroy(); });
                }
            };
        }
        return ddo; 
    }
function makeComponent ( _a ) { var EorA = _a . EorA , labels = _a . labels , inputs = _a . inputs , outputs = _a . outputs , bindings = _a . bindings , template = _a . template , controller = _a . controller , controllerAs = _a . controllerAs , require = _a . require , transclude = _a . transclude ; var ddo = { } ; var ver = angular . version . full ; var Bindings = bindings ? bindings . map ( function ( b ) { return new Binding ( b ) ; } ) : [ ] ; if ( labels ) Bindings = Bindings . concat ( labels . map ( function ( l ) { return new Binding ( l , '@' ) ; } ) ) ; if ( inputs ) Bindings = Bindings . concat ( inputs . map ( function ( i ) { return new Binding ( i , '<' ) ; } ) ) ; if ( outputs ) Bindings = Bindings . concat ( outputs . map ( function ( o ) { return new Binding ( o , '&' ) ; } ) ) ; ddo . restrict = EorA || 'E' ; ddo . scope = { } ; Bindings . forEach ( function ( b ) { return ddo . scope [ b . locProp ] = ( ver >= "1.5" ? b . type : b . type . replace ( '<' , '=' ) ) + b . extAttr ; } ) ; if ( Bindings . length > 0 && ver >= "1.3" ) { ddo . bindToController = true ; } if ( template ) { if ( template . lastIndexOf ( ".html" ) > 0 && template . indexOf ( "<" ) < 0 && template . indexOf ( ">" ) < 0 ) { ddo . templateUrl = template ; } else { ddo . template = template ; } } if ( require ) { ddo . require = require || "" ; } if ( transclude ) { ddo . transclude = ! ! transclude ; } if ( controller ) { var hasAs = controller . indexOf ( " as " ) ; var ctrlAs = ( hasAs > 0 ) ? controller . substring ( hasAs + 4 ) : ( controllerAs || "ctrl" ) ; ddo . controllerAs = ctrlAs ; ddo . controller = ( hasAs > 0 ) ? controller : controller + " as " + ctrlAs ; ddo . link = function linkToController ( scope , el , attr , ctrl ) { if ( ! ddo . bindToController ) { var iall = Bindings . filter ( function ( b ) { return b . isInput ; } ) . map ( function ( i ) { return i . locProp ; } ) ; if ( iall ) scope . $watch ( "[" + iall . join ( ',' ) + "]" , function syncFrom ( ) { iall . forEach ( function ( i ) { return scope [ ctrlAs ] [ i ] = scope [ i ] ; } ) ; } , true ) ; Bindings . filter ( function ( b ) { return b . isOutput ; } ) . forEach ( function ( o ) { scope [ ctrlAs ] [ o . locProp ] = scope [ o . locProp ] ; } ) ; Bindings . filter ( function ( b ) { return b . isSync ; } ) . forEach ( function ( b ) { scope . $watch ( ctrlAs + "." + b . locProp , function ( ) { scope [ b . locProp ] = scope [ ctrlAs ] [ b . locProp ] ; } ) ; } ) ; } if ( require ) { var req = ( [ '^' , '?' ] . indexOf ( require . charAt ( 0 ) ) >= 0 ) ? require . substr ( 1 ) : require ; scope [ ctrlAs ] [ req ] = ctrl ; } if ( typeof scope [ ctrlAs ] . $onInit === "function" ) { scope [ ctrlAs ] . $onInit ( { scope : scope , el : el , attr : attr , ctrl : ctrl } ) ; } if ( typeof scope [ ctrlAs ] . $onDestroy === "function" ) { scope . $on ( "$destroy" , function ( ) { return scope [ ctrlAs ] . $onDestroy ( ) ; } ) ; } } ; } return ddo ; }
simulo angular.component per versioni di angular < 1.5 e anche bindToController per versioni < 1.3
simulo angular . component per versioni di angular < 1 . 5 e anche bindToController per versioni < 1 . 3
//costruisco i bindings in base ai valori passati
 //riporto nello scope gli inputs con binding '@' (labels)
 //riporto nello scope gli inputs con binding '<' (one-way databound)
 //riporto nello scope gli output con binding '&' (event bound) 
 //setto restrict=tipo direttiva element o attribute (default 'E')
 //setto isolate scope per la direttiva e setto i bindings
 //se sono su angular>1.3 abilito bindToController per riportre in-out nel controllerAs
 //altrimento simulo bindToController usando la link function per "syncronizzare" in-out scope<-->ctrl
 //setto il template o il templateUrl controllando se il valore passato e' html o un url
 //setto il require se specificato --> nella link mi passa il ctrl = controller della direttiva richiesta
 //setto il transclude se specificato --> nel template posso usare <ng-transclude>
 //setto il controller as per gestire al direttiva, se non specificato il default AS è $ctrl
 //altrimenti simulo bindToController usando la link function per "syncronizzare" in-out scope<-->ctrl
 //ottimizzo faccio un watch di tutti gli inputs (come array) per intercettare tutte le modifiche runtime degl input e aggioranre il controllerAs 
 //per tutti gli input '=','<','@' creo un watch per intercettare le modifiche runtime dei valori scope --> ctrl 
 /*Bindings.filter(b => b.isInput).forEach(i=> {
                       scope.$watch(i.locProp, ()=> { scope[ctrlAs][i.locProp] = scope[i.locProp]; });
                    });*/ //per gli output basta semplicemente copiare i puntatori a funzione degli handle di evento da scope --> ctrl
 //sincornizzo input indietro da ctrl --> scope solo per '=' (two-way databound)
 //se ho require ignetto il ctrl richiesto nel ctrlAs
 //life-cycle hooks
 //ritorno il DirectiveDefinitionObject creato per gestire il Component
