XingFramework/xing-frontend-utils

View on GitHub
src/xing-frontend-utils/components/stateAttrs/stateAttrs.js

Summary

Maintainability
C
1 day
Test Coverage
import {AsModule, DirectiveObject} from 'a1atscript';

@AsModule( 'stateAttrs', ['ui.router.state'])
@DirectiveObject('xngStateAttrs', ['$compile', '$state'])
export default class StateAttrs {
  constructor($compile, $state) {
    this.$compile = $compile;
    this.$state = $state;
    this.restrict = 'A';
    this.priority = -500;
  }

  getUiViewName(attrs, inherited) {
    var name = attrs.uiView || attrs.name || '';
    return name.indexOf('@') >= 0 ?  name :  (name + '@' + (inherited ? inherited.state.name : ''));
  }

  link(scope, element, attrs, controller, transcludeFn){
    var name = this.getUiViewName(attrs, element.inheritedData('$uiView'));
    var locals  = name && this.$state.$current && this.$state.$current.locals[name];
    if (locals) {
      var viewStateName = locals.$$state.self.name;
      var className = viewStateName.replace(/.*\./,'');
      var idName = viewStateName.replace(/\./g,'_');

      if(! attrs.id){
        attrs.$set("id", idName);
      }
      attrs.$addClass(className);
    }
  }
}