diff --git a/app/containers/new/controller.js b/app/containers/new/controller.js index 24e2834d2..dfe69b025 100644 --- a/app/containers/new/controller.js +++ b/app/containers/new/controller.js @@ -1,7 +1,8 @@ import Ember from 'ember'; import EditContainer from 'ui/mixins/edit-container'; +import EditLabels from 'ui/mixins/edit-labels'; -export default Ember.ObjectController.extend(EditContainer, { +export default Ember.ObjectController.extend(EditContainer, EditLabels, { queryParams: ['environmentId','containerId'], environmentId: null, containerId: null, diff --git a/app/containers/new/view.js b/app/containers/new/view.js index af93b1cc8..ef459f3c0 100644 --- a/app/containers/new/view.js +++ b/app/containers/new/view.js @@ -19,6 +19,7 @@ export default Ember.View.extend({ addDns: addAction('addDns', '.dns-value'), addDnsSearch: addAction('addDnsSearch', '.dns-search-value'), addDevice: addAction('addDevice', '.device-host'), + addLabel: addAction('addLabel', '.label-key'), selectTab: function(name) { this.set('context.tab',name); diff --git a/app/host/controller.js b/app/host/controller.js index 8f469d189..ddc5886ed 100644 --- a/app/host/controller.js +++ b/app/host/controller.js @@ -70,7 +70,7 @@ var HostController = Cattle.TransitioningResourceController.extend(DownloadMachi out.push({ label: 'Clone', icon: 'ss-copier', action: 'clone', enabled: true }); } - out.push({ label: 'Edit', icon: 'ss-write', action: 'edit', enabled: !!a.update }) + out.push({ label: 'Edit', icon: 'ss-write', action: 'edit', enabled: !!a.update }); return out; }.property('actions.{activate,deactivate,remove,purge,update}','machine','machine.links.config'), diff --git a/app/mixins/edit-container.js b/app/mixins/edit-container.js index 83c88107f..9df111f98 100644 --- a/app/mixins/edit-container.js +++ b/app/mixins/edit-container.js @@ -823,32 +823,6 @@ export default Ember.Mixin.create(Cattle.NewOrEditMixin, { }.observes('strEntryPoint'), // ---------------------------------- - // Labels - // ---------------------------------- - labelsArray: null, - initLabels: function() { - var obj = this.get('instance.labels')||{}; - var keys = Object.keys(obj); - var out = []; - keys.forEach(function(key) { - out.push({ key: key, value: obj[key] }); - }); - - this.set('labelsArray', out); - }, - - labelsChanged: function() { - // Sync with the actual environment object - var out = {}; - this.get('labelsArray').forEach(function(row) { - if ( row.key ) - { - out[row.key] = row.value; - } - }); - this.set('instance.labels', out); - }.observes('labelsArray.@each.{key,value}'), - // ---------------------------------- // Save // ---------------------------------- diff --git a/app/mixins/edit-labels.js b/app/mixins/edit-labels.js index 93f97c20c..2f429d6ca 100644 --- a/app/mixins/edit-labels.js +++ b/app/mixins/edit-labels.js @@ -3,18 +3,69 @@ import Ember from 'ember'; export default Ember.Mixin.create({ actions: { addLabel: function() { - this.get('labelsArray').pushObject({ + this.get('labelArray').pushObject({ key: '', value: '', }); }, removeLabel: function(obj) { - this.get('labelsArray').removeObject(obj); + this.get('labelArray').removeObject(obj); + }, + + pastedLabels: function(str, target) { + var ary = this.get('labelArray'); + str = str.trim(); + if ( str.indexOf('=') === -1 ) + { + // Just pasting a key + $(target).val(str); + return; + } + + var lines = str.split(/\r?\n/); + lines.forEach((line) => { + line = line.trim(); + if ( !line ) + { + return; + } + + var idx = line.indexOf('='); + var key = ''; + var val = ''; + if ( idx > 0 ) + { + key = line.substr(0,idx).trim(); + val = line.substr(idx+1).trim(); + } + else + { + key = line.trim(); + val = ''; + } + + var existing = ary.filterProperty('key',key)[0]; + if ( existing ) + { + Ember.set(existing,'value',val); + } + else + { + ary.pushObject({key: key, value: val}); + } + }); + + ary.forEach((item) => { + if ( !item.key && !item.value ) + { + ary.removeObject(item); + } + }); }, }, - labelsArray: null, + labelArray: null, initFields: function() { this._super(); @@ -22,5 +73,26 @@ export default Ember.Mixin.create({ }, initLabels: function() { - } + var obj = this.get('primaryResource.labels')||{}; + var keys = Object.keys(obj); + var out = []; + keys.forEach(function(key) { + out.push({ key: key, value: obj[key] }); + }); + + this.set('labelArray', out); + }, + + labelsChanged: function() { + // Sync with the actual environment object + var out = {}; + this.get('labelArray').forEach(function(row) { + if ( row.key ) + { + out[row.key] = row.value; + } + }); + this.set('primaryResource.labels', out); + }.observes('labelArray.@each.{key,value}'), + }); diff --git a/app/styles/layout.scss b/app/styles/layout.scss index b85e629ce..f2743681c 100644 --- a/app/styles/layout.scss +++ b/app/styles/layout.scss @@ -299,6 +299,7 @@ UL.list-lines { **********/ .footer-actions { margin: 20px 0; + padding-bottom: 20px; text-align: center; } diff --git a/app/templates/container/new-advanced.hbs b/app/templates/container/new-advanced.hbs index 216677a74..47e42b5b4 100644 --- a/app/templates/container/new-advanced.hbs +++ b/app/templates/container/new-advanced.hbs @@ -9,6 +9,7 @@
| Key | ++ | Value | ++ |
|---|---|---|---|
| + {{input-paste pasted="pastedLabels" class="form-control input-sm label-key" type="text" value=label.key placeholder="e.g. foo"}} + | + +
+ = + |
+
+ + {{input class="form-control input-sm" type="text" value=label.value placeholder="e.g. bar"}} + | + ++ + | +