From dee976cf1a6af09bed30fd2a4398653f0b773380 Mon Sep 17 00:00:00 2001 From: digital-gnome <31593470+digital-gnome@users.noreply.github.com> Date: Wed, 13 Dec 2017 22:24:33 -0500 Subject: [PATCH] parseRows just needs to recreate the php logic --- web/skins/classic/views/js/filter.js | 140 +++++++++++++++++++-------- 1 file changed, 99 insertions(+), 41 deletions(-) diff --git a/web/skins/classic/views/js/filter.js b/web/skins/classic/views/js/filter.js index cc29cf095..25e5d58a6 100644 --- a/web/skins/classic/views/js/filter.js +++ b/web/skins/classic/views/js/filter.js @@ -98,54 +98,112 @@ function deleteFilter( element, name ) { } function parseRows (rows) { - for (let i = 0; i < rows.length; i++) { //Traverse terms(rows) - let inputs = rows[i].children; //Array of tds - if (i == 0) $j(inputs[0]).html(' '); //Remove and from first term - if (rows.length -1 > 0 && i > 0 && inputs[0].children.length == 0) { //add and/or to 1+ if doesn't exist - $j(inputs[0]).html(''); + for (let rowNum = 0; rowNum < rows.length; rowNum++) { //Each row is a term + let queryPrefix = 'filter[Query][terms]['; + let inputTds = rows.eq(rowNum).children(); + + if (rowNum == 0) inputTds.eq(0).html(' '); //Remove and from first term + if (rowNum > 0) { //add and/or to 1+ + let cnjVal = inputTds.eq(0).children().val(); + let conjSelect = $j('').attr('name', queryPrefix + rowNum + '][cnj]').attr('id', queryPrefix + rowNum + '][cnj]'); + $j.each(conjTypes, function (i) { + conjSelect.append(''); + }); + inputTds.eq(0).html(conjSelect).children().val(cnjVal); } + let brackets = rows.length - 2; - if (brackets > 0) { //add bracket td to all rows - let obr = ''; - for (let k = 1; k <= brackets; k++) {//build bracket options - obr += ''; - cbr += ''; + if (brackets > 0) { //add bracket select to all rows + let obrSelect = $j('').attr('name', queryPrefix + rowNum + '][obr]').attr('id', queryPrefix + rowNum + '][obr]'); + let cbrSelect = $j('').attr('name', queryPrefix + rowNum + '][cbr]').attr('id', queryPrefix + rowNum + '][cbr]'); + obrSelect.append(''); + cbrSelect.append(''); } - obr += ''; - cbr += ''; - let obrVal = $j(inputs[1]).children().val(); //Save currently selected bracket option - let cbrVal = $j(inputs[5]).children().val(); - $j(inputs[1]).html(obr).children().val(obrVal); //Set bracket contents and assign saved value - $j(inputs[5]).html(cbr).children().val(cbrVal); + let obrVal = inputTds.eq(1).children().val(); //Save currently selected bracket option + let cbrVal = inputTds.eq(5).children().val(); + inputTds.eq(1).html(obrSelect).children().val(obrVal); //Set bracket contents and assign saved value + inputTds.eq(5).html(cbrSelect).children().val(cbrVal); } else { - $j(inputs[1]).html(' '); - $j(inputs[5]).html(' '); + inputTds.eq(1).html(' '); + inputTds.eq(5).html(' '); } - if ($j(inputs[2]).children().val() == "Archived") { //Archived filter is very different. Handles html changes. - $j(inputs[3]).html('equal to'); - $j(inputs[4]).html(''); - } else if ($j(inputs[3]).children().attr('type') == 'hidden' ) { - $j(inputs[3]).html(''); - $j(inputs[4]).html(''); + + if (rows.length == 1) { + inputTds.eq(6).find(':input[value="-"]').prop('disabled', true); + } else { + inputTds.eq(6).find(':input[value="-"]').prop('disabled', false); } - for (let j = 0; j < inputs.length; j++) { //Set all query array values in case any were missed - let input = inputs[j].children; - if (input.length) { //Ignore placeholders. - if (input[0].type == 'button' && rows.length == 1) { //if add/delete button disable when only term - $j(input[1]).prop('disabled', true); - } else if (input[0].type == 'button') { //Enable if more than one term - $j(input[1]).prop('disabled', false); - } else { // Set all non-button array values - let term = input[0].name.split(/[[\]]{1,2}/); - term.length--; - term.shift(); - term[2] = i; - input[0].name = 'filter'+stringFilter(term); - input[0].id = 'filter'+stringFilter(term); - } + + if (inputTds.eq(2).children().val() == "Archived") { + inputTds.eq(3).html('equal to'); + let archiveSelect = $j('').attr('name', queryPrefix + rowNum + '][val]').attr('id', queryPrefix + rowNum + '][val]'); + for (let i = 0; i < archiveTypes.length; i++) { + archiveSelect.append(''); } - } + let archiveVal = inputTds.eq(4).children().val(); + inputTds.eq(4).html(archiveSelect).children().val(archiveVal); + + } else if (inputTds.eq(2).children().val().indexOf('Weekday') >= 0) { + let weekdaySelect = $j('').attr('name', queryPrefix + rowNum + '][val]').attr('id', queryPrefix + rowNum + '][val]'); + for (let i = 0; i < weekdays.length; i++) { + weekdaySelect.append(''); + } + let weekdayVal = inputTds.eq(4).children().val(); + inputTds.eq(4).html(weekdaySelect).children().val(weekdayVal); + + } else if (inputTds.eq(2).children().val() == 'StateId') { + let stateSelect = $j('').attr('name', queryPrefix + rowNum + '][val]').attr('id', queryPrefix + rowNum + '][val]'); + for (let key in states) { + stateSelect.append(''); + } + let stateVal = inputTds.eq(4).children().val(); + inputTds.eq(4).html(weekdaySelect).children().val(stateVal) + + + } else if (inputTds.eq(2).children().val() == 'ServerId') { + let serverSelect = $j('').attr('name', queryPrefix + rowNum + '][val]').attr('id', queryPrefix + rowNum + '][val]'); + for (let key in servers) { + serverSelect.append(''); + } + let serverVal = inputTds.eq(4).children().val(); + inputTds.eq(4).html(weekdaySelect).children().val(serverVal) + + } else if (inputTds.eq(2).children().val() == 'StorageId') { + let storageSelect = $j('').attr('name', queryPrefix + rowNum + '][val]').attr('id', queryPrefix + rowNum + '][val]'); + for (let i=0; i < storageareas.length; i++) { + storageSelect.append(''); + } + let storageVal = inputTds.eq(4).children().val(); + inputTds.eq(4).html(storageSelect).children().val(storageVal) + + } else if (inputTds.eq(2).children().val() == 'MonitorName') { + let monitorSelect = $j('').attr('name', queryPrefix + rowNum + '][val]').attr('id', queryPrefix + rowNum + '][val]'); + for (let key in monitors) { + monitorSelect.append(''); + } + let monitorVal = inputTds.eq(4).children().val(); + inputTds.eq(4).html(monitorSelect).children().val(monitorVal) + } else { + let opSelect = $j('').attr('name', queryPrefix + rowNum + '][op]').attr('id', queryPrefix + rowNum + '][op]'); + for (let key in opTypes) { + opSelect.append(''); + } + let opVal = inputTds.eq(3).children().val(); + inputTds.eq(3).html(opSelect).children().val(opVal) + let textInput = $j('').attr('type', 'text').attr('name', queryPrefix + rowNum + '][val]').attr('id', queryPrefix + rowNum + '][val]') + let textVal = inputTds.eq(4).children().val(); + inputTds.eq(4).html(textInput).children().val(textVal); + } + let attr = inputTds.find("[name$='attr\\]']") // Set attr list id and name + let term = attr.attr('name').split(/[[\]]{1,2}/); + term.length--; + term.shift(); + term[2] = rowNum; + inputTds.eq(2).children().attr('name', 'filter'+stringFilter(term)); + inputTds.eq(2).children().attr('id', 'filter'+stringFilter(term)); } history.replaceState(null, null, '?view=filter&' + $j('#contentForm').serialize()); }