(function() {
var orderForType;
orderForType = {
'FixedProfile': -2000,
'PacProfile': -1000,
'VirtualProfile': 1000,
'SwitchProfile': 2000,
'RuleListProfile': 3000
};
angular.module('omegaDecoration', []).value('profileIcons', {
'DirectProfile': 'glyphicon-transfer',
'SystemProfile': 'glyphicon-off',
'AutoDetectProfile': 'glyphicon-file',
'FixedProfile': 'glyphicon-globe',
'PacProfile': 'glyphicon-file',
'VirtualProfile': 'glyphicon-question-sign',
'RuleListProfile': 'glyphicon-list',
'SwitchProfile': 'glyphicon-retweet'
}).constant('profileOrder', function(a, b) {
var diff;
diff = (orderForType[a.profileType] | 0) - (orderForType[b.profileType] | 0);
if (diff !== 0) {
return diff;
}
if (a.name === b.name) {
return 0;
} else if (a.name < b.name) {
return -1;
} else {
return 1;
}
}).constant('getVirtualTarget', function(profile, options) {
if ((profile != null ? profile.profileType : void 0) === 'VirtualProfile') {
return options != null ? options['+' + profile.defaultProfileName] : void 0;
}
}).directive('omegaProfileIcon', function(profileIcons, getVirtualTarget) {
return {
restrict: 'A',
template: '\n',
scope: {
'profile': '=?omegaProfileIcon',
'icon': '=?icon',
'color': '=?color',
'options': '=options'
},
link: function(scope, element, attrs, ngModel) {
scope.profileIcons = profileIcons;
scope.isVirtual = function(profile) {
return (profile != null ? profile.profileType : void 0) === 'VirtualProfile';
};
scope.getIcon = function(profile) {
var type, _ref, _ref1;
type = profile != null ? profile.profileType : void 0;
type = (_ref = (_ref1 = getVirtualTarget(profile, scope.options)) != null ? _ref1.profileType : void 0) != null ? _ref : type;
return profileIcons[type];
};
return scope.getColor = function(profile) {
var color;
color = void 0;
while (profile) {
color = profile.color;
profile = getVirtualTarget(profile, scope.options);
}
return color;
};
}
};
}).directive('omegaProfileInline', function() {
return {
restrict: 'A',
template: '\n{{dispName ? dispName(profile) : profile.name}}',
scope: {
'profile': '=omegaProfileInline',
'dispName': '=?dispName',
'options': '=options'
}
};
}).directive('omegaHtml', function($compile) {
return {
restrict: 'A',
link: function(scope, element, attrs, ngModel) {
var getHtml, locals;
locals = {
$profile: function(profile, dispName, options) {
if (profile == null) {
profile = 'profile';
}
if (dispName == null) {
dispName = 'dispNameFilter';
}
if (options == null) {
options = 'options';
}
return "";
}
};
getHtml = function() {
return scope.$eval(attrs.omegaHtml, locals);
};
return scope.$watch(getHtml, function(html) {
element.html(html);
return $compile(element.contents())(scope);
});
}
};
}).directive('omegaProfileSelect', function($timeout, profileIcons) {
return {
restrict: 'A',
templateUrl: 'partials/omega_profile_select.html',
require: '?ngModel',
scope: {
'profiles': '&omegaProfileSelect',
'defaultText': '@?defaultText',
'dispName': '=?dispName',
'options': '=options'
},
link: function(scope, element, attrs, ngModel) {
var updateView;
scope.profileIcons = profileIcons;
scope.currentProfiles = [];
scope.dispProfiles = void 0;
updateView = function() {
var profile, _i, _len, _ref, _results;
scope.profileIcon = '';
_ref = scope.currentProfiles;
_results = [];
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
profile = _ref[_i];
if (profile.name === scope.profileName) {
scope.selectedProfile = profile;
scope.profileIcon = profileIcons[profile.profileType];
break;
} else {
_results.push(void 0);
}
}
return _results;
};
scope.$watch(scope.profiles, (function(profiles) {
scope.currentProfiles = profiles || [];
if (scope.dispProfiles != null) {
scope.dispProfiles = currentProfiles;
}
return updateView();
}), true);
scope.toggled = function(open) {
if (open && (scope.dispProfiles == null)) {
scope.dispProfiles = scope.currentProfiles;
return scope.toggled = void 0;
}
};
if (ngModel) {
ngModel.$render = function() {
scope.profileName = ngModel.$viewValue;
return updateView();
};
}
scope.setProfileName = function(name) {
if (ngModel) {
ngModel.$setViewValue(name);
return ngModel.$render();
}
};
return scope.getName = function(profile) {
if (profile) {
return scope.dispName(profile) || profile.name;
}
};
}
};
});
}).call(this);