npm-run-build tenant view
diff --git a/xos/core/xoslib/dashboards/xosTenant.html b/xos/core/xoslib/dashboards/xosTenant.html
index 8881bb8..1283a67 100644
--- a/xos/core/xoslib/dashboards/xosTenant.html
+++ b/xos/core/xoslib/dashboards/xosTenant.html
@@ -1,122 +1,21 @@
-<script src="{{ STATIC_URL }}/js/vendor/underscore-min.js"></script>
-<script src="{{ STATIC_URL }}/js/vendor/backbone.js"></script>
-<script src="{{ STATIC_URL }}/js/vendor/backbone.syphon.js"></script>
-<script src="{{ STATIC_URL }}/js/vendor/backbone.wreqr.js"></script>
-<script src="{{ STATIC_URL }}/js/vendor/backbone.babysitter.js"></script>
-<script src="{{ STATIC_URL }}/js/vendor/backbone.marionette.js"></script>
+<!-- browserSync -->
-<link rel="stylesheet" type="text/css" href="{% static 'css/xosTenantDashboard.css' %}" media="all" >
-<link rel="stylesheet" type="text/css" href="{% static 'css/xosAdminSite.css' %}" media="all" >
+<!-- endcss -->
+<!-- inject:css -->
+<link rel="stylesheet" href="/static/css/xosTenant.css">
+<!-- endinject -->
+<p>
+ hello
+</p>
-<script src="{{ STATIC_URL }}/js/xoslib/xos-util.js"></script>
-<script src="{{ STATIC_URL }}/js/xoslib/xos-defaults.js"></script>
-<script src="{{ STATIC_URL }}/js/xoslib/xos-validators.js"></script>
-<script src="{{ STATIC_URL }}/js/xoslib/xos-backbone.js"></script>
-<script src="{{ STATIC_URL }}/js/xoslib/xosHelper.js"></script>
-<script src="{{ STATIC_URL }}/js/picker.js"></script>
-<script src="{{ STATIC_URL }}/js/xosTenant.js"></script>
-
-<script type="text/template" id="xos-tenant-buttons-template">
- <div class="box save-box">
- <button class="btn btn-high btn-success btn-tenant-create">Create New Slice</button>
- <button class="btn btn-high btn-danger btn-tenant-delete">Delete Slice</button>
- <button class="btn btn-high btn-primary btn-tenant-add-user">Edit Users</button>
- <button class="btn btn-high btn-primary btn-tenant-download-ssh">SSH Commands</button>
- <button class="btn btn-high btn-success btn-tenant-save">Save</button>
- </div>
-</script>
-
-<script type="text/template" id="xos-tenant-buttons-noslice-template">
- <div class="box save-box">
- <button class="btn btn-high btn-tenant-create">Create New Slice</button>
- </div>
-</script>
-
-<script type="text/template" id="xos-log-template">
- <tr id="<%= logMessageId %>" class="xos-log xos-<%= statusclass %>">
- <td><%= what %><br>
- <%= status %> <%= statusText %>
- </td>
- </tr>
-</script>
-
-<script type="text/template" id="tenant-sanity-check">
- Tenant view sanity check failed:
- <ul>
- <% for (index in errors) { %>
- <li><%= errors[index] %></li>
- <% } %>
- </ul>
- Steps to correct issues in the tenant view:
- <ol>
- <li>Make sure that the tenant view is linked to at least one deployment. You
- may find the list of dashboard views at <a href="/admin/core/dashboardview/">here</a>.
- Deployments currently attached to the tenant view are: <%= blessed_deployment_names.join(",") %>
- </li>
- <li>Make sure that at least one Image and one Flavor is attached to a tenant view deployment.</li>
- <li>Make sure at least one Site is attached to a tenant view deployment.</li>
- <li>Make sure at least one of the Sites has one or more nodes attached to it.</li>
- </ol>
-</script>
-
-<script type="text/template" id="tenant-edit-users">
- <%= xosPickerTemplate({pickedItems: model.usersBuffer,
- unpickedItems: array_subtract(xos.tenant().current_user_site_users, model.usersBuffer),
- id: "users",
- fieldName: "users",
- detailView: detailView,
- lookupFunc: function(x) { return array_pair_lookup(x,
- $.merge($.merge([], xos.tenant().current_user_site_user_names), model.user_namesOrig),
- $.merge($.merge([], xos.tenant().current_user_site_users), model.usersOrig)); },
- } ) %>
-</script>
-
-<div id="xos-confirm-dialog" title="Confirmation Required">
- Are you sure about this?
+<div ng-app="xos.tenant" id="xosTenant" class="container-fluid">
+ <div ui-sref="createslice"></div>
+ <div ui-view></div>
+ <div></div>
</div>
-<div id="tenant-addslice-dialog" title="Create New Slice">
-<div id="tenant-addslice-interior"></div>
-</div>
-<div id="tenant-edit-users-dialog" title="Edit Users">
-<div id="tenant-edit-users-interior"></div>
-</div>
-
-<div id="tenant-ssh-commands-dialog" title="SSH Commands">
-<div id="tenant-ssh-commands-interior"></div>
-</div>
-
-<div id="xos-error-dialog" title="Error Message">
-</div>
-
-<div id="xos-tenant-view-panel"> <!-- contentPanel"> -->
-<div id="contentTitle">
-</div>
-<div id="contentButtonPanel">
-
-<div id="rightButtonPanel"></div>
-
-<div class="box" id="logPanel">
-<table id="logTable">
-<tbody>
-</tbody>
-</table> <!-- end logTable -->
-</div> <!-- end logPanel -->
-</div> <!-- end contentButtonPanel -->
-
-<div id="contentInner">
-
-<div id="tenantSliceSelector">
-</div>
-<div id="tenantSummary">
-</div>
-<div id="tenantSiteList">
-</div>
-<div id="tenantButtons">
-</div>
-
-</div> <!-- end contentInner -->
-</div> <!-- end contentPanel -->
-
-{% include 'xosAdmin.html' %}
+<!-- endjs -->
+<!-- inject:js -->
+<script src="/static/js/xosTenant.js"></script>
+<!-- endinject -->
\ No newline at end of file
diff --git a/xos/core/xoslib/static/css/xosTenant.css b/xos/core/xoslib/static/css/xosTenant.css
new file mode 100644
index 0000000..1675325
--- /dev/null
+++ b/xos/core/xoslib/static/css/xosTenant.css
@@ -0,0 +1 @@
+#xosTenant a{margin-bottom:15px}
\ No newline at end of file
diff --git a/xos/core/xoslib/static/js/xosTenant.js b/xos/core/xoslib/static/js/xosTenant.js
index 0bd3604..919e6f8 100644
--- a/xos/core/xoslib/static/js/xosTenant.js
+++ b/xos/core/xoslib/static/js/xosTenant.js
@@ -1,524 +1 @@
-
-/* globals XOSModel, XOSCollection */
-/* eslint-disable no-undef, guard-for-in, new-cap, space-before-blocks, no-unused-vars, no-alert, eqeqeq */
-
-XOSTenantSite = XOSModel.extend({
- listFields: ['name', 'allocated'],
- modelName: 'tenantSite',
- collectionName: 'tenantSites'
-});
-
-XOSTenantSiteCollection = XOSCollection.extend({
- listFields: ['name', 'allocated', 'ready'],
- modelName: 'tenantSite',
- collectionName: 'tenantSites',
-
- getFromSlice: function(slice) {
- var tenantSites = [];
- var id = 0;
- var that = this;
-
- for (siteName in slice.attributes.site_allocation) {
- allocated = slice.attributes.site_allocation[siteName];
- ready = slice.attributes.site_ready[siteName] || 0;
- tenantSites.push(new XOSTenantSite({name: siteName, allocated: allocated, ready: ready, id: id}));
- id = id + 1;
- }
-
- for (index in xos.tenantview.models[0].attributes.blessed_site_names) {
- siteName = xos.tenantview.models[0].attributes.blessed_site_names[index];
- if (! (siteName in slice.attributes.site_allocation)) {
- tenantSites.push(new XOSTenantSite({name: siteName, allocated: 0, ready: 0, id: id}));
- id = id + 1;
- }
- }
- this.set(tenantSites);
-
- this.listenTo(slice, 'change', function() {
- that.getReadyFromSlice(slice);
- });
- },
-
- getReadyFromSlice: function(slice) {
- for (siteName in slice.attributes.site_ready) {
- ready = slice.attributes.site_ready[siteName];
- for (index in this.models) {
- tenantSite = this.models[index];
- if (tenantSite.attributes.name == siteName) {
- tenantSite.set('ready', ready);
- }
- }
- }
- },
-
- putToSlice: function(slice) {
- slice.attributes.site_allocation = {};
- for (index in this.models) {
- var model = this.models[index];
-
- slice.attributes.site_allocation[ model.attributes.name ] = model.attributes.allocated;
- }
- },
-});
-
-XOSEditUsersView = Marionette.ItemView.extend({
- template: '#tenant-edit-users',
- viewInitializers: [],
-
- onShow: function() {
- _.each(this.viewInitializers, function(initializer) {
- initializer();
- });
- },
-
- templateHelpers: function() {
- return {detailView: this, model: this.model};
- }
-
-});
-
-XOSTenantSummaryView = XOSDetailView.extend({
- events: {'change': 'onChange'},
-
- onChange: function(e) {
- XOSTenantApp.setDirty(true);
- },
-
- saveSuccess: function() {
- XOSTenantApp.setDirty(false);
- },
-
-});
-
-
-XOSTenantButtonView = Marionette.ItemView.extend({
- template: '#xos-tenant-buttons-template',
-
- events: {'click button.btn-tenant-create': 'createClicked',
- 'click button.btn-tenant-delete': 'deleteClicked',
- 'click button.btn-tenant-add-user': 'addUserClicked',
- 'click button.btn-tenant-save': 'saveClicked',
- 'click button.btn-tenant-download-ssh': 'downloadClicked',
- },
-
- createClicked: function() {
- XOSTenantApp.addSlice();
- },
-
- deleteClicked: function() {
- XOSTenantApp.deleteSlice(this.options.linkedView.model);
- },
-
- addUserClicked: function() {
- XOSTenantApp.editUsers(this.options.linkedView.model);
- },
-
- downloadClicked: function() {
- XOSTenantApp.downloadSSH(this.options.linkedView.model);
- },
-
- saveClicked: function(e) {
- var model = this.options.linkedView.model;
-
- model.tenantSiteCollection.putToSlice(model);
- model.attributes.users = model.usersBuffer;
-
- e.preventDefault();
- this.options.linkedView.save();
- //this.options.linkedView.submitContinueClicked.call(this.options.linkedView, e);
- //XOSTenantApp.setDirty(false);
- }
-});
-
-XOSTenantApp = new XOSApplication({
- logTableId: '#logTable',
- statusMsgId: '#statusMsg',
- hideTabsByDefault: true,
- dirty: false,
- varName: 'XOSTenantApp',
-});
-
-XOSTenantApp.addRegions({
- tenantSliceSelector: '#tenantSliceSelector',
- tenantSummary: '#tenantSummary',
- tenantSiteList: '#tenantSiteList',
- tenantButtons: '#tenantButtons',
- tenantAddSliceInterior: '#tenant-addslice-interior',
- tenantEditUsersInterior: '#tenant-edit-users-interior',
- tenantSSHCommandsInterior: '#tenant-ssh-commands-interior',
-});
-
-XOSTenantApp.setDirty = function(dirty) {
- XOSTenantApp.dirty = dirty;
- if (dirty) {
- $('button.btn-tenant-save').addClass('btn-success');
- }
- else {
- $('button.btn-tenant-save').removeClass('btn-success');
- }
-};
-
-XOSTenantApp.buildViews = function() {
- XOSTenantApp.tenantSites = new XOSTenantSiteCollection();
-
- tenantSummaryClass = XOSTenantSummaryView.extend({
- template: '#xos-detail-template',
- app: XOSTenantApp,
- detailFields: ['serviceClass', 'default_image', 'default_flavor', 'network_ports'],
- fieldDisplayNames: {
- serviceClass: 'Service Level',
- default_flavor: 'Flavor',
- default_image: 'Image',
- mount_data_sets: 'Data Sets'
- },
- helpText: {
- 'serviceClass': 'Existing instances will be re-instantiated if changed',
- 'default_image': 'Existing instances will be re-instantiated if changed',
- 'default_flavor': 'Existing instances will be re-instantiated if changed'
- },
- onShow: function() {
- // the slice selector is in a different table, so make every label cell the maximal width
- make_same_width('#xos-tenant-view-panel', '.xos-label-cell');
- },
- });
-
- XOSTenantApp.tenantSummaryView = tenantSummaryClass;
-
- tenantAddClass = XOSDetailView.extend({
- template: '#xos-detail-template',
- app: XOSTenantApp,
- detailFields: ['name', 'description']
- });
-
- XOSTenantApp.tenantAddView = tenantAddClass;
-
- tenantSiteItemClass = XOSItemView.extend({
- template: '#xos-listitem-template',
- app: XOSTenantApp
- });
-
- XOSTenantApp.tenantSiteItemView = tenantSiteItemClass;
-
- tenantSiteListClass = XOSDataTableView.extend({
- template: '#xos-list-template',
- app: XOSTenantApp,
- childView: tenantSiteItemClass,
- collection: XOSTenantApp.tenantSites,
- title: 'sites',
- inputType: {allocated: 'spinner'},
- noDeleteColumn: true,
- disablePaginate: true,
- disableFilter: true,
- fieldDisplayNames: {name: 'Site'},
- });
-
- XOSTenantApp.tenantSiteListView = tenantSiteListClass;
-
- XOSTenantApp.tenantSliceSelectorView = SliceSelectorView.extend({
- sliceChanged: function(id) {
- XOSTenantApp.navToSlice(id);
- },
- filter: function(slice) {
- return slice.attributes.current_user_can_see;
- },
- });
-
- xos.sites.fetch();
- xos.slicesPlus.fetch();
- xos.tenantview.fetch();
-};
-
-make_choices = function(list_of_names, list_of_values) {
- var result = [];
- var displayName;
-
- if (!list_of_values) {
- for (var index in list_of_names) {
- displayName = list_of_names[index];
- result.push([displayName, displayName]);
- }
- }
- else {
- for (var index in list_of_names) {
- displayName = list_of_names[index];
- id = list_of_values[index];
- result.push([displayName, id]);
- }
- }
- return result;
-};
-
-XOSTenantApp.navToSlice = function(id) {
- XOSTenantApp.viewSlice(xos.slicesPlus.get(id));
-};
-
-XOSTenantApp.adjustCollectionField = function(collectionName, id, fieldName, amount) {
- model = XOSTenantApp[collectionName].get(id);
- model.set(fieldName, Math.max(model.get(fieldName) + amount, 0));
- XOSTenantApp.setDirty(true);
-};
-
-XOSTenantApp.addSlice = function() {
- var app = this;
-
- if (!xos.tenant().current_user_can_create_slice) {
- window.alert('You do not have sufficient rights to create a slice on your site');
- return;
- }
-
- model = new xos.slicesPlus.model({
- site: xos.tenant().current_user_site_id,
- name: xos.tenant().current_user_login_base + '_',
- creator: xos.tenant().current_user_id
- });
-
- var detailView = new XOSTenantApp.tenantAddView({
- model: model,
- collection: xos.slicesPlus,
- noSubmitButton: true,
- });
-
- detailView.dialog = $('#tenant-addslice-dialog');
- app.tenantAddSliceInterior.show(detailView);
-
- $('#tenant-addslice-dialog').dialog({
- autoOpen: false,
- modal: true,
- width: 640,
- buttons: {
- 'Create Slice': function() {
- var addDialog = this;
-
- detailView.synchronous = true;
- detailView.afterSave = function() {
- $(addDialog).dialog('close');
- XOSTenantApp.navToSlice(detailView.model.id);
- };
- detailView.save();
- },
- 'Cancel': function() {
- $(this).dialog('close');
- }
- }
- });
- $('#tenant-addslice-dialog').dialog('open');
-};
-
-XOSTenantApp.editUsers = function(model) {
- var app = this;
- var detailView = new XOSEditUsersView({model: model, collection: xos.slicesPlus});
-
- detailView.dialog = $('#tenant-edit-users-dialog');
- app.tenantEditUsersInterior.show(detailView);
-
- $('#tenant-edit-users-dialog').dialog({
- autoOpen: false,
- modal: true,
- width: 640,
- buttons: {
- 'Ok': function() {
- var editDialog = this;
- var user_ids = all_options($('#tenant-edit-users-dialog').find('.select-picker-to'));
-
- user_ids = user_ids.map(function(x) {
- return parseInt(x,10);
- });
-
- if (!array_same_elements(user_ids, model.usersBuffer)) {
- XOSTenantApp.setDirty(true);
- }
- model.usersBuffer = user_ids;
- $(editDialog).dialog('close');
- },
- 'Cancel': function() {
- $(this).dialog('close');
- }
- }
- });
- $('#tenant-edit-users-dialog').dialog('open');
-};
-
-XOSTenantApp.downloadSSH = function(model) {
- var sshCommands = '';
-
- for (index in model.attributes.sliceInfo.sshCommands) {
- sshCommand = model.attributes.sliceInfo.sshCommands[index];
- sshCommands = sshCommands + sshCommand + '\n';
- }
-
- if (sshCommands.length == 0) {
- alert('this slice has no instantiated instances yet');
- return;
- }
-
- var htmlView = new HTMLView({
- html: '<pre style="overflow: auto; word-wrap: normal; white-space: pre; word-wrap: normal;">' +
- sshCommands + '</pre>'
- });
-
- XOSTenantApp.tenantSSHCommandsInterior.show(htmlView);
-
- $('#tenant-ssh-commands-dialog').dialog({
- autoOpen: false,
- modal: true,
- width: 640,
- buttons: {
- 'Download': function() {
- var dlLink = document.createElement('a');
-
- dlLink.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(sshCommands));
- dlLink.setAttribute('download', 'sshcommands.txt');
- dlLink.click();
-
- //window.open('data:text/text,' + encodeURIComponent(sshCommands));
- },
- 'Close': function() {
- $(this).dialog('close');
- },
- }
- });
- $('#tenant-ssh-commands-dialog').dialog('open');
-};
-
-XOSTenantApp.deleteSlice = function(model) {
- var app = this;
-
- app.deleteDialog(model, function() {
- app.viewSlice(undefined);
- });
-};
-
-XOSTenantApp.viewSlice = function(model) {
- if (XOSTenantApp.dirty) {
- if (!confirm('The current instance has unsaved data -- view new instance anyway ?')) {
- $('#tenantSliceSelector select').val(XOSTenantApp.currentSlice.id);
- return;
- }
- }
-
- XOSTenantApp.setDirty(false);
-
- if (!model && xos.slicesPlus.models.length > 0) {
- model = xos.slicesPlus.models[0];
- }
-
- if (model) {
- sliceSelector = new XOSTenantApp.tenantSliceSelectorView({
- collection: xos.slicesPlus,
- selectedID: model ? model.id : null,
- });
-
- XOSTenantApp.sliceSelector = sliceSelector;
- XOSTenantApp.tenantSliceSelector.show(sliceSelector);
-
- tenantSummary = new XOSTenantApp.tenantSummaryView({
- model: model,
- choices: {
- mount_data_sets: make_choices(xos.tenant().public_volume_names, null),
- serviceClass: make_choices(xos.tenant().blessed_service_class_names, xos.tenant().blessed_service_classes),
- default_image: make_choices(xos.tenant().blessed_image_names, xos.tenant().blessed_images),
- default_flavor: make_choices(xos.tenant().blessed_flavor_names, xos.tenant().blessed_flavors)
- },
- });
-
- XOSTenantApp.tenantSummary.show(tenantSummary);
-
- tenantSites = new XOSTenantSiteCollection();
- tenantSites.getFromSlice(model);
- model.usersBuffer = model.attributes.users; /* save a copy of 'users' that we can edit. This prevents another view (developer) from overwriting our copy with a fetch from the server */
- model.usersOrig = model.attributes.users; /* save an immutable copy that we'll use for username lookups */
- model.user_namesOrig = model.attributes.user_names;
- model.tenantSiteCollection = tenantSites;
- XOSTenantApp.tenantSites = tenantSites;
-
- tenantSiteList = new XOSTenantApp.tenantSiteListView({collection: tenantSites});
- XOSTenantApp.tenantSiteList.show(tenantSiteList);
- // on xos.slicePlus.sort, need to update xostenantapp.tenantSites
-
- XOSTenantApp.tenantButtons.show(
- new XOSTenantButtonView({
- app: XOSTenantApp,
- linkedView: tenantSummary
- })
- );
-
- XOSTenantApp.currentSlice = model;
- }
- else {
- XOSTenantApp.tenantSliceSelector.show(new HTMLView({html: ''}));
- XOSTenantApp.tenantSummary.show(new HTMLView({html: 'You have no slices'}));
- XOSTenantApp.tenantSiteList.show(new HTMLView({html: ''}));
- XOSTenantApp.tenantButtons.show(
- new XOSTenantButtonView({
- template: '#xos-tenant-buttons-noslice-template',
- app: XOSTenantApp,
- linkedView: tenantSummary
- })
- );
- }
-};
-
-XOSTenantApp.sanityCheck = function() {
- errors = [];
- if (xos.tenant().blessed_deployments && xos.tenant().blessed_deployments.length == 0) {
- errors.push('no blessed deployments');
- }
- if (xos.tenant().blessed_service_classes.length == 0) {
- errors.push('no blessed service classes');
- }
- if (xos.tenant().blessed_flavors.length == 0) {
- errors.push('no blessed flavors');
- }
- if (xos.tenant().blessed_images.length == 0) {
- errors.push('no blessed images');
- }
- if (xos.tenant().blessed_sites.length == 0) {
- errors.push('no blessed sites');
- }
- if (xos.tenant().current_user_site_id == null) {
- errors.push('current user does not have a site');
- }
-
- if (errors.length > 0) {
- t = templateFromId('#tenant-sanity-check');
- $('#tenantSummary').html(t({
- errors: errors,
- blessed_deployment_names:
- xos.tenant().blessed_deployment_names
- }));
- return false;
- }
-
- return true;
-};
-
-XOSTenantApp.collectionLoadChange = function() {
- stats = xos.getCollectionStatus();
-
- if (!XOSTenantApp.navigationStarted) {
- if (stats['isLoaded'] + stats['failedLoad'] >= stats['startedLoad']) {
- if (XOSTenantApp.sanityCheck()) {
- XOSTenantApp.viewSlice(undefined);
- }
- }
- else {
- $('#tenantSummary').html('<h3>Loading...</h3><div id="xos-startup-progress"></div>');
- $('#xos-startup-progress').progressbar({value: stats['completedLoad'], max: stats['startedLoad']});
- }
- }
-};
-
-XOSTenantApp.on('start', function() {
- XOSTenantApp.buildViews();
-
- // fire it once to initially show the progress bar
- XOSTenantApp.collectionLoadChange();
-
- // fire it each time the collection load status is updated
- Backbone.on('xoslib:collectionLoadChange', XOSTenantApp.collectionLoadChange);
-});
-
-$(document).ready(function() {
- XOSTenantApp.start();
-});
-/* eslint-enable */
+"use strict";angular.module("xos.tenant",["ngResource","ngCookies","ui.router","xos.helpers"]).config(["$stateProvider",function(e){e.state("user-list",{url:"/",template:"<users-list></users-list>"}).state("site",{url:"/site/:id",template:"<site-detail></site-detail>"}).state("createslice",{url:"/site/:site/slice/:id?",template:"<create-slice></create-slice>"})}]).config(["$httpProvider",function(e){e.interceptors.push("NoHyperlinks")}]).directive("usersList",function(){return{restrict:"E",scope:{},bindToController:!0,controllerAs:"vm",templateUrl:"templates/users-list.tpl.html",controller:["Sites","SlicesPlus",function(e,t){var i=this;this.tableConfig={columns:[{label:"Site1",prop:"name",link:function(e){return"/#/site/"+e.id}},{label:"Allocated",prop:"instance_total"},{label:"Ready",prop:"instance_total_ready"}]},e.query().$promise.then(function(e){return i.sites=e,t.query().$promise}).then(function(e){i.slices=e,i.site_list=i.returnData(i.sites,i.slices)})["catch"](function(e){throw new Error(e)}),this.returnData=function(e,t){var i,s=0,l=[];for(i=0;i<e.length;i++){var n=0,a=0;for(s=0;s<t.length;s++)null!=e[i].id&&null!=t[s].site&&e[i].id===t[s].site&&(n+=t[s].instance_total,a+=t[s].instance_total_ready);var r={id:e[i].id,name:e[i].name,instance_total:n,instance_total_ready:a};l.push(r)}return l}}]}}).directive("siteDetail",function(){return{restrict:"E",scope:{},bindToController:!0,controllerAs:"sl",templateUrl:"templates/slicelist.html",controller:["SlicesPlus","$stateParams",function(e,t){var i=this;this.siteId=t.id,this.tableConfig={columns:[{label:"Slice List",prop:"name",link:function(e){return"/#/site/"+e.site+"/slice/"+e.id}},{label:"Allocated",prop:"instance_total"},{label:"Ready",prop:"instance_total_ready"}]},e.query({site:t.id}).$promise.then(function(e){i.sliceList=e})["catch"](function(e){throw new Error(e)})}]}}).directive("createSlice",function(){return{restrict:"E",scope:{},bindToController:!0,controllerAs:"cs",templateUrl:"templates/createslice.html",controller:["Slices","SlicesPlus","Sites","Images","$stateParams","$http","$state","$q",function(e,t,i,s,l,n,a,r){var o=this;this.config={exclude:["site","password","last_login","mount_data_sets","default_flavor","creator","exposed_ports","networks","omf_friendly","omf_friendly","no_sync","no_policy","lazy_blocked","write_protect","deleted","backend_status","backend_register","policed","enacted","updated","created","validators","humanReadableName"],formName:"SliceDetails",feedback:{show:!1,message:"Form submitted successfully !!!",type:"success"},actions:[{label:"Save",icon:"ok",cb:function(e,t){d(e,t).then(function(){a.go("site",{id:o.model.site})})},"class":"success"},{label:"Save and continue editing",icon:"ok",cb:function(e,t){d(e,t)},"class":"primary"},{label:"Save and add another",icon:"ok",cb:function(e,t){d(e,t).then(function(){a.go("createslice",{site:o.model.site,id:""})})},"class":"primary"}],fields:{site:{label:"Site",type:"select",validators:{required:!0},hint:"The Site this Slice belongs to",options:[]},name:{label:"Name",type:"string",hint:"The Name of the Slice",validators:{required:!0}},serviceClass:{label:"ServiceClass",type:"select",validators:{required:!0},hint:"The Site this Slice belongs to",options:[{id:1,label:"Best effort"}]},enabled:{label:"Enabled",type:"boolean",hint:"Status for this Slice"},description:{label:"Description",type:"string",hint:"High level description of the slice and expected activities",validators:{required:!1,minlength:10}},service:{label:"Service",type:"select",validators:{required:!1},options:[{id:0,label:"--------"}]},slice_url:{label:"Slice url",type:"string",validators:{required:!1,minlength:10}},max_instances:{label:"Max Instances",type:"number",validators:{required:!1,min:0}},default_isolation:{label:"Default Isolation",type:"select",validators:{required:!1},options:[{id:"vm",label:"Virtual Machine"},{id:"container",label:"Container"},{id:"container_vm",label:"Container in VM"}]},default_image:{label:"Default image",type:"select",validators:{required:!1},options:[]},network:{label:"Network",type:"select",validators:{required:!1},options:[{id:"default",label:"Default"},{id:"host",label:"Host"},{id:"bridged",label:"Bridged"},{id:"noauto",label:"No Automatic Networks"}]}}};var c;s.query().$promise.then(function(e){o.users=e,c=o.users,o.optionValImg=o.setData(c,{field1:"id",field2:"name"}),o.config.fields.default_image.options=o.optionValImg})["catch"](function(e){throw new Error(e)}),this.setData=function(e,t){var i,s=[];for(i=0;i<e.length;i++){var l={id:e[i][t.field1],label:e[i][t.field2]};s.push(l)}return s},l.id?(delete this.config.fields.site,this.config.exclude.push("site"),e.get({id:l.id}).$promise.then(function(e){o.users=e,c=e,o.model=c})["catch"](function(e){throw new Error(e)})):(this.model={},n.get("/xoslib/tenantview/").success(function(e){o.userList=e,console.log(o.userList),o.model.creator=o.userList.current_user_id}),i.query().$promise.then(function(e){o.users_site=e,o.optionVal=o.setData(o.users_site,{field1:"id",field2:"name"}),o.config.fields.site.options=o.optionVal})["catch"](function(e){throw new Error(e)}));var d=function(t,i){var s=r.defer();if(delete t.networks,i.$valid){if(t.id)var l=e.update(t).$promise;else var l=e.save(t).$promise;l.then(function(e){o.model=e,o.config.feedback.show=!0,s.resolve(o.model)})["catch"](function(e){o.config.feedback.show=!0,o.config.feedback.type="danger",e.data&&e.data.detail?o.config.feedback.message=e.data.detail:o.config.feedback.message=e.statusText,s.reject(e)})}return s.promise}}]}}),angular.module("xos.tenant").run(["$templateCache",function(e){e.put("templates/createslice.html",'<!--<xos-table config="cs.tableConfig" data="cs.sites"></xos-table>-->\r\n<h2>Slice Details</h2>\r\n<hr></hr>\r\n<xos-form ng-model="cs.model" config="cs.config" ></xos-form>\r\n\r\n<!--<pre>-->\r\n<!--<!–{{cs.users | json}}–>-->\r\n\r\n<!--{{cs.users.name | json}}-->\r\n\r\n<!--</pre>-->'),e.put("templates/slicelist.html",'<!--<span ng-bind="siteNameSe"></span>-->\r\n<!--<xos-field></xos-field>-->\r\n<a class="addlink btn btn-info" ui-sref="createslice({site: sl.siteId})"><i class="glyphicon glyphicon-plus-sign"></i> Create Slice</a>\r\n<xos-table config="sl.tableConfig" data="sl.sliceList"></xos-table>\r\n<!--<div ui-view="sliceDetails"></div>-->\r\n<!--<pre>{{sl.users[0].site}}</pre>-->\r\n'),e.put("templates/users-list.tpl.html",'<xos-table config="vm.tableConfig" data="vm.site_list"></xos-table>')}]),angular.module("xos.tenant").run(["$location",function(e){e.path("/")}]);
\ No newline at end of file