blob: 9fac3216860584a9a840e077d9932d668288b281 [file]
/* eslint-disable */
function populateTechniques(parentId, abilities) {
let parent = $('#'+parentId);
$(parent).find('#ability-technique-filter').empty().append("<option disabled='disabled' selected>Choose a technique</option>");
let tactic = $(parent).find('#ability-tactic-filter').find(':selected').data('tactic');
let found = [];
abilities.forEach(function(ability) {
if (ability.tactic.includes(tactic) && !found.includes(ability.technique_id)) {
found.push(ability.technique_id);
appendTechniqueToList(parentId, tactic, ability);
}
});
}
/**
* Populate the abilities dropdown based on selected technique
* @param {string} parentId - Parent ID used to search for dropdowns
* @param {object[]} abilities - Abilities object array
*/
function populateAbilities(parentId, abilities) {
let parent = $('#' + parentId);
// Collect abilities matching technique
let techniqueAbilities = [];
let attack_id = $(parent).find('#ability-technique-filter').find(':selected').data('technique');
abilities.forEach(function (ability) {
if (ability.technique_id === attack_id) {
techniqueAbilities.push(ability);
}
});
// Clear, then populate the ability dropdown
$(parent).find('#ability-ability-filter').empty().append('<option disabled="disabled" selected>' + techniqueAbilities.length + ' abilities</option>');
techniqueAbilities.forEach(function (ability) {
appendAbilityToList(parentId, ability);
});
}
function appendTechniqueToList(parentId, tactic, value) {
$('#'+parentId).find('#ability-technique-filter').append($("<option></option>")
.attr("value", value['technique_id'])
.data("technique", value['technique_id'])
.text(value['technique_id'] + ' | '+ value['technique_name']));
}
function appendAbilityToList(parentId, value) {
$('#'+parentId).find('#ability-ability-filter').append($("<option></option>")
.attr("value", value['name'])
.data("ability", value)
.text(value['name']));
}
function searchAbilities(parent, abilities){
let pElem = $('#'+parent);
pElem.find('#ability-technique-filter').empty().append("<option disabled='disabled' selected>All Techniques</option>");;
let abList = pElem.find('#ability-ability-filter');
abList.empty();
let val = pElem.find('#ability-search-filter').val().toLowerCase();
let added = [];
if (val) {
abilities.forEach(function(ab) {
let commandHasSearch = false;
ab['executors'].forEach(function(executor) {
if (executor['command'] != null && executor['command'].toLowerCase().includes(val)) {
commandHasSearch = true;
}
});
let nameHasSearch = ab['name'].toLowerCase().includes(val);
let descriptionHasSearch = ab['description'].toLowerCase().includes(val);
if ((nameHasSearch || descriptionHasSearch || commandHasSearch) && !added.includes(ab['ability_id'])) {
added.push(ab['ability_id']);
appendAbilityToList(parent, ab);
}
});
}
abList.prepend("<option disabled='disabled' selected>"+added.length+" abilities</option>");
}