@@ -2341,29 +2341,19 @@ SM.Collection.LabelsMenu = Ext.extend(Ext.menu.Menu, {
SM.Collection.LabelAssetsForm = Ext.extend(Ext.form.FormPanel, {
initComponent: function () {
- let me = this
- this.assetsGrid = new SM.StigAssetsGrid({
- name: 'assets',
- collectionId: this.collectionId,
- isValid: () => {
- // override of SM.StigAssetsGrid
- return true
- },
- })
- this.assetsGrid.getSelectionModel().addListener('rowselect', function (sm, rowIndex, record) {
- if (!record.data.labelIds.includes(me.labelId)) {
- record.data.labelIds.push(me.labelId)
- record.commit()
- }
- })
- this.assetsGrid.getSelectionModel().addListener('rowdeselect', function (sm, rowIndex, record) {
- record.data.labelIds = record.data.labelIds.filter( i => i !== me.labelId)
- record.commit()
- })
+ let _this = this
if (! this.collectionId) {
throw ('missing property collectionId')
}
- const labelSpan = SM.Collection.LabelTpl.apply(SM.Cache.CollectionMap.get(this.collectionId).labelMap.get(this.labelId))
+ const assetSelectionPanel = new SM.AssetSelection.SelectingPanel({
+ name: 'assets',
+ collectionId: this.collectionId,
+ isFormField: true,
+ selectionsGridTitle: 'Tagged'
+ })
+ const labelData = {...SM.Cache.CollectionMap.get(this.collectionId).labelMap.get(this.labelId)}
+ labelData.extraCls = 'sm-jumbo-sprite'
+ const labelSpan = SM.Collection.LabelTpl.apply(labelData)
const labelField = new Ext.form.DisplayField({
fieldLabel: 'Label',
hideLabel: true,
@@ -2380,28 +2370,29 @@ SM.Collection.LabelAssetsForm = Ext.extend(Ext.form.FormPanel, {
items: [
{
xtype: 'fieldset',
- title: 'Label',
+ title: 'Label',
items: [
labelField
]
},
{
xtype: 'fieldset',
- title: 'Tagged Assets',
+ title: 'Tagged Assets',
anchor: "100% -70",
layout: 'fit',
items: [
- this.assetsGrid
+ assetSelectionPanel
]
}
],
buttons: [{
text: this.btnText || 'Save',
- collectionId: me.collectionId,
+ collectionId: _this.collectionId,
formBind: true,
handler: this.btnHandler || function () {}
- }]
+ }],
+ assetSelectionPanel
}
Ext.apply(this, Ext.apply(this.initialConfig, config))
@@ -2410,11 +2401,15 @@ SM.Collection.LabelAssetsForm = Ext.extend(Ext.form.FormPanel, {
},
initPanel: async function () {
try {
- await this.assetsGrid.store.loadPromise()
+ this.el.mask('')
+ await this.assetSelectionPanel.initPanel({labelId: this.labelId})
}
catch (e) {
SM.Error.handleError(e)
}
+ finally {
+ this.el.unmask()
+ }
}
})
@@ -2422,21 +2417,19 @@ SM.Collection.showLabelAssetsWindow = async function ( collectionId, labelId ) {
try {
let labelAssetsFormPanel = new SM.Collection.LabelAssetsForm({
collectionId,
- labelId: labelId,
+ labelId,
btnHandler: async function( btn ){
try {
- if (labelAssetsFormPanel.getForm().isValid()) {
- let values = labelAssetsFormPanel.getForm().getFieldValues(false, true) // dirtyOnly=false, getDisabled=true
- let result = await Ext.Ajax.requestPromise({
- url: `${STIGMAN.Env.apiBase}/collections/${collectionId}/labels/${labelId}/assets`,
- method: 'PUT',
- headers: { 'Content-Type': 'application/json;charset=utf-8' },
- jsonData: values.assets
- })
- const apiLabelAssets = JSON.parse(result.response.responseText)
- SM.Dispatcher.fireEvent('labelassetschanged', collectionId, labelId, apiLabelAssets)
- appwindow.close()
- }
+ let values = labelAssetsFormPanel.getForm().getFieldValues(false, true) // dirtyOnly=false, getDisabled=true
+ let result = await Ext.Ajax.requestPromise({
+ url: `${STIGMAN.Env.apiBase}/collections/${collectionId}/labels/${labelId}/assets`,
+ method: 'PUT',
+ headers: { 'Content-Type': 'application/json;charset=utf-8' },
+ jsonData: values.assets
+ })
+ const apiLabelAssets = JSON.parse(result.response.responseText)
+ SM.Dispatcher.fireEvent('labelassetschanged', collectionId, labelId, apiLabelAssets)
+ appwindow.close()
}
catch (e) {
SM.Error.handleError(e)
@@ -2447,13 +2440,19 @@ SM.Collection.showLabelAssetsWindow = async function ( collectionId, labelId ) {
/******************************************************/
// Form window
/******************************************************/
+ const height = Ext.getBody().getHeight() - 80
+ const width = Math.min(Math.floor(Ext.getBody().getWidth() * 0.75), 1280)
var appwindow = new Ext.Window({
- title: 'Tagged Assets, Label ID ' + labelId,
+ title: 'Tagged Assets',
+ resizable: true,
cls: 'sm-dialog-window sm-round-panel',
modal: true,
hidden: true,
- width: 510,
- height:660,
+ width,
+ height,
+ minWidth: 810,
+ minHeight: 460,
+ maximizable: true,
layout: 'fit',
plain:true,
bodyStyle:'padding:10px;',
@@ -2461,23 +2460,10 @@ SM.Collection.showLabelAssetsWindow = async function ( collectionId, labelId ) {
items: labelAssetsFormPanel
});
- appwindow.render(Ext.getBody())
+ appwindow.show(Ext.getBody())
await labelAssetsFormPanel.initPanel() // Load asset grid store
- let result = await Ext.Ajax.requestPromise({
- url: `${STIGMAN.Env.apiBase}/assets`,
- method: 'GET',
- params: {
- collectionId,
- labelId
- }
- })
- const apiLabelAssets = JSON.parse(result.response.responseText)
- labelAssetsFormPanel.getForm().setValues({
- labelId,
- assets: apiLabelAssets
- })
-
+
appwindow.show(document.body);
}
catch (e) {
diff --git a/client/src/js/SM/CollectionStig.js b/client/src/js/SM/CollectionStig.js
index 046eceddc..85d61a634 100644
--- a/client/src/js/SM/CollectionStig.js
+++ b/client/src/js/SM/CollectionStig.js
@@ -290,226 +290,6 @@ SM.CollectionStigsGrid = Ext.extend(Ext.grid.GridPanel, {
})
Ext.reg('sm-collection-stigs-grid', SM.CollectionStigsGrid)
-/**
- * @class SM.StigAssetsGrid
- * @extends Ext.grid.GridPanel
- * GridPanel class that displays STIG -> Assets data
- * @constructor
- * Create a GridPanel with associated components (store, column model, view, selection model)
- * @param {Object} config The config object
- * @xtype sm-asset-stig-grid
- */
-SM.StigAssetsGrid = Ext.extend(Ext.grid.GridPanel, {
- filterStore: function () {
- let selectionsOnly = ! this.getTopToolbar().button.pressed
- let value = this.getTopToolbar().filterField.getValue()
- let sm = this.getSelectionModel()
- //var selectionsOnly = ! btnPressed;
- if (! value || value === '') {
- if (selectionsOnly) {
- this.store.filterBy(sm.isSelected, sm);
- } else {
- this.store.clearFilter()
- }
- } else {
- if (selectionsOnly) {
- this.store.filter([
- {
- property:'name',
- value:value,
- anyMatch:true,
- caseSensitive:false
- },{
- fn: sm.isSelected,
- scope: sm
- }
- ]);
- } else {
- this.store.filter({property:'name',value:value,anyMatch:true,caseSensitive:false});
- }
- }
- },
- initComponent: function() {
- const _this = this
- let fields = Ext.data.Record.create([
- {name:'assetId',type:'string'},
- {name:'name',type:'string'},
- {name:'labelIds'},
- {name:'collection'}
- ])
- let store = new Ext.data.JsonStore({
- url: `${STIGMAN.Env.apiBase}/assets`,
- baseParams: {
- collectionId: this.collectionId
- },
- grid: this,
- // reader: reader,
- autoLoad: false,
- restful: true,
- encode: false,
- idProperty: 'assetId',
- sortInfo: {
- field: 'name',
- direction: 'ASC'
- },
- fields: fields,
- listeners: {
- load: function (store,records) {
- store.grid.filterStore.call(store.grid)
- }
- }
- })
- const totalTextCmp = new SM.RowCountTextItem ({
- store: store,
- noun: 'asset',
- iconCls: 'sm-asset-icon'
- })
- let sm = new Ext.grid.CheckboxSelectionModel({
- checkOnly: false,
- onRefresh: function() {
- // override to render selections properly after a grid refresh
- var ds = this.grid.store, index;
- var s = this.getSelections();
- for(var i = 0, len = s.length; i < len; i++){
- var r = s[i];
- if((index = ds.indexOfId(r.id)) != -1){
- this.grid.view.addRowClass(index, this.grid.view.selectedRowClass);
- }
- }
- }
- })
- let config = {
- isFormField: true,
- editingCls: 'red-panel',
- editing: false,
- layout: 'fit',
- store: store,
- listeners: {
- viewready: function(grid) {
- // One final refresh to style filtered rows that are also selected
- grid.view.refresh()
- },
- },
- columns: [
- sm,
- {
- header: "Asset"
- ,width: 150
- ,dataIndex:'name'
- ,sortable: true
- },
- {
- header: "Labels",
- width: 120,
- dataIndex: 'labelIds',
- sortable: false,
- filter: {
- type: 'values',
- collectionId: _this.collectionId,
- renderer: SM.ColumnFilters.Renderers.labels
- },
- renderer: function (value, metadata, record) {
- const labels = []
- for (const labelId of value) {
- const label = SM.Cache.CollectionMap.get(_this.collectionId).labelMap.get(labelId)
- if (label) labels.push(label)
- }
- labels.sort((a,b) => a.name.localeCompare(b.name))
- metadata.attr = 'style="white-space:normal;"'
- return SM.Collection.LabelArrayTpl.apply(labels)
- }
- }
- ],
- border: true,
- loadMask: false,
- stripeRows: true,
- sm: sm,
- view: new SM.ColumnFilters.GridView({
- forceFit: true,
- emptyText: 'No Assets to display',
- selectedRowClass: 'x-grid3-row-selected-checkonly',
- listeners: {
- // beforerefresh: function (view) {
- // view.grid.getEl().mask('Refreshing...')
- // },
- refresh: function (view) {
- view.grid.getEl().unmask()
- }
- }
- }),
- onEditChange: function (editing) {
- this.view.selectedRowClass = editing ? 'x-grid3-row-selected' : 'x-grid3-row-selected-checkonly'
- this.view.refresh()
- this.editing = editing
- this.fireEvent('mouseover')
- },
- tbar: new SM.SelectingGridToolbar({
- filterFn: this.filterStore,
- triggerEmptyText: 'Name filter...',
- btnText: 'Assign Assets',
- gridId: this.id
- }),
- bbar: new Ext.Toolbar({
- items: [
- {
- xtype: 'tbbutton',
- grid: this,
- iconCls: 'icon-refresh',
- tooltip: 'Reload this grid',
- width: 20,
- handler: function(btn){
- btn.grid.store.reload();
- }
- },{
- xtype: 'tbseparator'
- },{
- xtype: 'exportbutton',
- hasMenu: false,
- gridBasename: 'Assets (grid)',
- storeBasename: 'Assets (store)',
- iconCls: 'sm-export-icon',
- text: 'CSV'
- },{
- xtype: 'tbfill'
- },{
- xtype: 'tbseparator'
- },
- totalTextCmp
- ]
- }),
- getValue: function() {
- return JSON.parse(encodeSm(sm,'assetId'))
- },
- setValue: function (apiAssets) {
- const sm = this.getSelectionModel()
- const assetIds = apiAssets.map(o => o.assetId)
- const selectedRecords = []
- for( let i=0; i < assetIds.length; i++ ) {
- let record = store.getById( assetIds[i] )
- selectedRecords.push(record)
- }
- this.store.clearFilter(true)
- const origSilent = sm.silent
- sm.silent = true
- sm.selectRecords(selectedRecords)
- sm.silent = origSilent
- this.filterStore.call(this)
- this.originalAssetIds = assetIds
- },
- markInvalid: function() {},
- clearInvalid: function() {},
- getName: () => this.name,
- validate: () => true
- }
- Ext.apply(this, Ext.apply(this.initialConfig, config))
- SM.StigAssetsGrid.superclass.initComponent.call(this);
- },
- isValid: function () {
- return this.getSelectionModel().getCount() > 0
- }
-})
-Ext.reg('sm-stig-assets-grid', SM.StigAssetsGrid)
-
SM.StigRevisionComboBox = Ext.extend(SM.Global.HelperComboBox, {
initComponent: function () {
const _this = this
@@ -542,30 +322,49 @@ SM.CollectionStigProperties = Ext.extend(Ext.form.FormPanel, {
if (! this.collectionId) {
throw ('missing property collectionId')
}
- const stigAssetsGrid = new SM.StigAssetsGrid({
+ const assetSelectionPanel = new SM.AssetSelection.SelectingPanel({
name: 'assets',
- benchmarkId: this.benchmarkId,
- collectionId: this.collectionId
+ collectionId: this.collectionId,
+ isFormField: true,
+ listeners: {
+ assetselectionschanged: setButtonState
+ }
})
- stigAssetsGrid.getSelectionModel().addListener('selectionchange', setButtonState)
const stigField = new SM.StigSelectionField({
name: 'benchmarkId',
submitValue: false,
fieldLabel: 'BenchmarkId',
hideTrigger: false,
- anchor: '100%',
- // width: 350,
+ width: 350,
autoLoad: false,
allowBlank: false,
filteringStore: this.stigFilteringStore,
initialBenchmarkId: this.benchmarkId,
fireSelectOnSetValue: true,
+ enableKeyEvents: true,
+ valid: false,
listeners: {
select: function (combo, record, index) {
const revisions = [['latest', 'Most recent revision'], ...record.data.revisions.map( rev => [rev.revisionStr, `${rev.revisionStr} (${rev.benchmarkDate})`])]
revisionComboBox.store.loadData(revisions)
revisionComboBox.setValue(record.data.benchmarkId === _this.benchmarkId ? _this.defaultRevisionStr : 'latest')
+ assetSelectionPanel.trackedProperty = { dataProperty: 'benchmarkIds', value: record.data.benchmarkId }
+ stigField.valid = true
+ setButtonState()
+ },
+ invalid: function (field) {
+ field.valid = false
setButtonState()
+ },
+ valid: function (field) {
+ field.valid = true
+ setButtonState()
+ },
+ blur: function (field) {
+ this.setValue(this.getRawValue())
+ },
+ render: function (field) {
+ field.el.dom.addEventListener('blur', () => field.fireEvent('blur'))
}
}
})
@@ -586,12 +385,18 @@ SM.CollectionStigProperties = Ext.extend(Ext.form.FormPanel, {
})
function setButtonState () {
- const currentAssetIds = stigAssetsGrid.getValue()
- const currentBenchmarkId = stigField.getValue()
+ if (!stigField.valid) {
+ assetFieldSet.disable()
+ saveBtn.disable()
+ return
+ }
+ assetFieldSet.enable()
+ const currentBenchmarkId = stigField.getRawValue()
const currentRevisionStr = revisionComboBox.getValue()
- const originalAssetIds = stigAssetsGrid.originalAssetIds
+ const currentAssetIds = assetSelectionPanel.getValue()
+ const originalAssetIds = assetSelectionPanel.originalAssetIds
- if (!currentAssetIds.length || currentBenchmarkId === '' || currentRevisionStr === '') {
+ if (!currentAssetIds.length) {
saveBtn.disable()
return
}
@@ -602,6 +407,12 @@ SM.CollectionStigProperties = Ext.extend(Ext.form.FormPanel, {
saveBtn.setDisabled(revisionUnchanged && assetsUnchanged)
}
+ const assetFieldSet = new Ext.form.FieldSet({
+ title: 'Asset assignments',
+ anchor: "100% -95",
+ layout: 'fit',
+ items: [assetSelectionPanel]
+ })
let config = {
baseCls: 'x-plain',
// height: 400,
@@ -611,25 +422,18 @@ SM.CollectionStigProperties = Ext.extend(Ext.form.FormPanel, {
items: [
{
xtype: 'fieldset',
- title: 'STIG information',
+ title: 'STIG information',
items: [
stigField,
revisionComboBox
]
},
- {
- xtype: 'fieldset',
- title: 'Asset Assignments',
- anchor: "100% -95",
- layout: 'fit',
- items: [stigAssetsGrid]
- }
-
+ assetFieldSet
],
buttons: [saveBtn],
stigField,
revisionComboBox,
- stigAssetsGrid
+ assetSelectionPanel
}
Ext.apply(this, Ext.apply(this.initialConfig, config))
@@ -641,21 +445,10 @@ SM.CollectionStigProperties = Ext.extend(Ext.form.FormPanel, {
this.el.mask('')
const promises = [
this.stigField.store.loadPromise(),
- this.stigAssetsGrid.store.loadPromise()
+ this.assetSelectionPanel.initPanel({benchmarkId})
]
- if (benchmarkId) {
- promises.push(Ext.Ajax.requestPromise({
- responseType: 'json',
- url: `${STIGMAN.Env.apiBase}/collections/${collectionId}/stigs/${benchmarkId}/assets`,
- method: 'GET'
- }))
- }
- const results = await Promise.all(promises)
-
- this.getForm().setValues({
- benchmarkId,
- assets: results[2] || []
- })
+ await Promise.all(promises)
+ this.getForm().setValues({benchmarkId})
}
finally {
this.el.unmask()
@@ -674,26 +467,24 @@ async function showCollectionStigProps( benchmarkId, defaultRevisionStr, parentG
stigFilteringStore: parentGrid.store,
btnHandler: async function( btn ){
try {
- if (stigPropsFormPanel.getForm().isValid()) {
- stigPropsFormPanel.el.mask('Updating')
- const values = stigPropsFormPanel.getForm().getFieldValues(false, true) // dirtyOnly=false, getDisabled=true
- const jsonData = {}
- if (values.defaultRevisionStr) {
- jsonData.defaultRevisionStr = values.defaultRevisionStr
- }
- if (values.assets) {
- jsonData.assetIds = values.assets
- }
- let result = await Ext.Ajax.requestPromise({
- url: `${STIGMAN.Env.apiBase}/collections/${btn.collectionId}/stigs/${values.benchmarkId}`,
- method: 'POST',
- headers: { 'Content-Type': 'application/json;charset=utf-8' },
- jsonData
- })
- const apiStigAssets = JSON.parse(result.response.responseText)
- SM.Dispatcher.fireEvent('stigassetschanged', btn.collectionId, values.benchmarkId, apiStigAssets)
- appwindow.close()
+ stigPropsFormPanel.el.mask('Updating')
+ const values = stigPropsFormPanel.getForm().getFieldValues(false, true) // dirtyOnly=false, getDisabled=true
+ const jsonData = {}
+ if (values.defaultRevisionStr) {
+ jsonData.defaultRevisionStr = values.defaultRevisionStr
+ }
+ if (values.assets) {
+ jsonData.assetIds = values.assets
}
+ let result = await Ext.Ajax.requestPromise({
+ url: `${STIGMAN.Env.apiBase}/collections/${btn.collectionId}/stigs/${values.benchmarkId}`,
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json;charset=utf-8' },
+ jsonData
+ })
+ const apiStigAssets = JSON.parse(result.response.responseText)
+ SM.Dispatcher.fireEvent('stigassetschanged', btn.collectionId, values.benchmarkId, apiStigAssets)
+ appwindow.close()
}
catch (e) {
SM.Error.handleError(e)
@@ -707,13 +498,19 @@ async function showCollectionStigProps( benchmarkId, defaultRevisionStr, parentG
/******************************************************/
// Form window
/******************************************************/
+ const height = Ext.getBody().getHeight() - 80
+ const width = Math.min(Math.floor(Ext.getBody().getWidth() * 0.75), 1280)
appwindow = new Ext.Window({
title: 'STIG Assignments',
+ resizable: true,
cls: 'sm-dialog-window sm-round-panel',
modal: true,
hidden: true,
- width: 510,
- height:660,
+ width,
+ height,
+ minWidth: 810,
+ minHeight: 460,
+ maximizable: true,
layout: 'fit',
plain:true,
bodyStyle:'padding:10px;',
diff --git a/client/src/js/SM/WhatsNew.js b/client/src/js/SM/WhatsNew.js
index 81d210fde..f0316fe8a 100644
--- a/client/src/js/SM/WhatsNew.js
+++ b/client/src/js/SM/WhatsNew.js
@@ -1,6 +1,25 @@
Ext.ns('SM.WhatsNew')
SM.WhatsNew.Sources = [
+ {
+ date: '2023-10-31',
+ header: `New Interfaces for Managing Asset Labels and STIG Assignments`,
+ body: `
+
+ Managing a Collection's Asset Labels and STIG Assignments should now be a more streamlined and informative experience. Just drag and drop Assets between the two panels to add or remove the selected Label or STIG:
+
+
+
+ The new interface also provides additional information about your Assets to help find what you're looking for. Hover over the Asset's name to see its currently assigned STIGs:
+
+
+
+ Click on a column header to filter on that column's data, or to add or remove columns of Asset information:
+
+
+
+ `
+ },
{
date: '2023-09-26',
header: `Export Results to Another Collection`,
diff --git a/client/src/js/overrides.js b/client/src/js/overrides.js
index 0b150207a..39c458bd8 100644
--- a/client/src/js/overrides.js
+++ b/client/src/js/overrides.js
@@ -644,7 +644,17 @@ Ext.override(Ext.form.ComboBox, {
Ext.form.ComboBox.superclass.setValue.call(this, text);
this.value = v;
return this;
- }
+ },
+ onSelect : function(record, index){
+ if(this.fireEvent('beforeselect', this, record, index) !== false){
+ this.setValue(record.data[this.valueField || this.displayField]);
+ this.collapse();
+ if (!this.fireSelectOnSetValue) {
+ this.fireEvent('select', this, record, index);
+ }
+ }
+ },
+
});
// END enable comboBox setValue() to fire the select event
diff --git a/client/src/js/resources.js b/client/src/js/resources.js
index 6a3e9ba7e..a6418344e 100644
--- a/client/src/js/resources.js
+++ b/client/src/js/resources.js
@@ -59,6 +59,7 @@ const scripts = [
'js/SM/Library.js',
'js/SM/StigRevision.js',
'js/SM/Inventory.js',
+ 'js/SM/AssetSelection.js',
'js/library.js',
'js/userAdmin.js',
'js/collectionAdmin.js',
diff --git a/docs/assets/images/collection-manage-revision-pinning.png b/docs/assets/images/collection-manage-revision-pinning.png
index 224c20604..709b16e6d 100644
Binary files a/docs/assets/images/collection-manage-revision-pinning.png and b/docs/assets/images/collection-manage-revision-pinning.png differ
diff --git a/docs/assets/images/collection-manage-tag-assets-assign-label-modal.png b/docs/assets/images/collection-manage-tag-assets-assign-label-modal.png
deleted file mode 100644
index 08eb898e9..000000000
Binary files a/docs/assets/images/collection-manage-tag-assets-assign-label-modal.png and /dev/null differ
diff --git a/docs/assets/images/collection-manage-tag-assets-modal.png b/docs/assets/images/collection-manage-tag-assets-modal.png
index 586a1af1c..008557a9b 100644
Binary files a/docs/assets/images/collection-manage-tag-assets-modal.png and b/docs/assets/images/collection-manage-tag-assets-modal.png differ
diff --git a/docs/assets/images/stig-assignments.png b/docs/assets/images/stig-assignments.png
index c5c17b517..9b2fd8c97 100644
Binary files a/docs/assets/images/stig-assignments.png and b/docs/assets/images/stig-assignments.png differ
diff --git a/docs/assets/images/stigs-panel.png b/docs/assets/images/stigs-panel.png
index fb92249c6..d34578465 100644
Binary files a/docs/assets/images/stigs-panel.png and b/docs/assets/images/stigs-panel.png differ
diff --git a/docs/user-guide/user-guide.rst b/docs/user-guide/user-guide.rst
index 6a28550dd..c92e6a37e 100644
--- a/docs/user-guide/user-guide.rst
+++ b/docs/user-guide/user-guide.rst
@@ -1058,19 +1058,12 @@ Double-click an existing label to edit it.
-------------------------------
-When a Label is selected in Label tab of the Collection Properties Panel, the "Tag Assets..." button is enabled. Click the "Tag Assets..." button to view the Assets that are tagged with that label. Click the "Assign Assets" button on this screen to tag new Assets with that label.
+When a Label is selected in Label tab of the Collection Properties Panel, the "Tag Assets..." button is enabled. Click the "Tag Assets..." button to view and tag Assets with the selected Label. Hover over the Asset's name to see its currently assigned STIGs. Click on a column header to filter on that column's data, or to add or remove columns of Asset information.
.. thumbnail:: /assets/images/collection-manage-tag-assets-modal.png
:width: 50%
:show_caption: True
- :title: View the Assets tagged with a Particular Label
-
-|
-
-.. thumbnail:: /assets/images/collection-manage-tag-assets-assign-label-modal.png
- :width: 50%
- :show_caption: True
- :title: Tag new Assets with a Label
+ :title: View and tag Assets with the selected Label
|
@@ -1307,7 +1300,7 @@ This panel lists all the STIGs that have been assigned to at least one Asset in
Assign STIG
~~~~~~~~~~~~~~~~~~~~~~
-Select Assign STIG to add a new STIG to the Collection. A popup will allow you to select a STIG that is not yet assigned to an Asset. Click the Assign STIG button on this popup to select Assets that should have this STIG assigned to them.
+Select Assign STIG to add a new STIG to the Collection. A popup will allow you to view any Assets that are assigned the selected STIG, and to assign that STIG to new Assets. Hover over the Asset's name to see its currently assigned STIGs. Click on a column header to filter on that column's data, or to add or remove columns of Asset information.
.. thumbnail:: /assets/images/stig-assignments.png
:width: 50%