diff --git a/WebGUI/html/ConfigurationGUI.html b/WebGUI/html/ConfigurationGUI.html index 248d5c5e0..e57269541 100644 --- a/WebGUI/html/ConfigurationGUI.html +++ b/WebGUI/html/ConfigurationGUI.html @@ -667,6 +667,7 @@ var _msChosenGroupName; var _msChosenGroupKey; var _groupViewFilterIndex = 2; //-1=all, 0=context, 1=backbone, 2=configuration + var showGroupSearch = false; var _mouseIsSelecting = false; //to block switching cells when selecting text @@ -2025,9 +2026,7 @@ var str = ""; str += "
Group View
"; //Note: this is children[0] tag is used in some place to determine mode after a series of events - var tableNames, tableVersions; var backLinkStr; - var tableName, tableVersion; backLinkStr = "setupGroupViewMode();"; @@ -2055,9 +2054,14 @@ str += "" + - "Create a new Group"; + "Create a new Group "; + str += "" + + "Search in Groups"; str += "
"; @@ -2087,6 +2091,30 @@ "'>" + "View Latest Key for Selected Group"; + str += "
"; + str += "
"; + + str += "
Keyword to search for... "; + str += "
"; + + str += "
Range of group keys... "; + str += "
"; + + str += "
Minimum occurrence threshold... "; + str += "
"; + + str += "
"; + str += "
"; str += "
"; @@ -2104,7 +2132,7 @@ //////////// make search box { - var noMultiSelect = true; // true or false (false for multiselect functionality) + var noMultiSelect = false; // true or false (false for multiselect functionality) var msValues = []; //group names for multi-select var msKeys = []; //group keys for multi-select @@ -2226,36 +2254,41 @@ function groupSearchSelectionHandler(el) { var i = MultiSelectBox.getSelectedIndex(el); var selArr = MultiSelectBox.getSelectionArray(el); - if (selArr[i]) { - Debug.log("Chosen element index:" + i + - " value:" + el.innerHTML + - " key:" + el.getAttribute("key-value") + - " type:" + el.getAttribute("type-value")); - var keyArr = el.getAttribute("key-value").split('-'); - - _msChosenGroupName = keyArr[keyArr.length - 1]; - _msChosenGroupKey = keyArr[keyArr.length - 2]; - - //copy selected div and show as selected - var srcEl = document.getElementById("groupViewGroupDiv-" + - _msChosenGroupName + "-" + _msChosenGroupKey); - var str = ""; - - str += ""; - str += "Selected Group: " + _msChosenGroupName; - str += "
"; - str += srcEl.innerHTML; - str += "
"; - el = document.getElementById('msSelectedGroupDiv'); - el.innerHTML = str; - } - else { - _msChosenGroupName = ""; - _msChosenGroupKey = ""; - el = document.getElementById('msSelectedGroupDiv'); - el.innerHTML = ""; + var str = ""; + for(var j=0; j el.textContent).join(','); + Debug.log("optionGroups: " + optionGroups); + + DesktopContent.XMLHttpRequest("Request?RequestType=SearchFieldInGroup" + + "&searchText=" + searchText + + "&filterValue=" + isActiveOnlyChecked + + "&groupType=" + groupType + + "&optionGroups=" + optionGroups + + "&versionsToCheck=" + searchVersionToCheck, + "", + function(req){ + var req = arguments[0]; + var errStr = arguments[2]; + if (errStr) { + console.error(errStr); + return; + } + + const groupTableMap = new Map(); + var groupTableMatches = DesktopContent.getXMLChildren(req, "GroupTableMatch"); + + Debug.log("GroupTableMatch elements found:", groupTableMatches.length); + + for (var i = 0; i < groupTableMatches.length; i++) { + var groupTable = groupTableMatches[i]; + var groupTableInfo = groupTable.getAttribute("value").split("/"); + var groupName = groupTableInfo[0]; + var tableName = groupTableInfo[1]; + var matchRow = DesktopContent.getXMLValue(groupTable, "MatchRow"); + var matchColumn = DesktopContent.getXMLValue(groupTable, "MatchColumn"); + var matchTableVersion = DesktopContent.getXMLValue(groupTable, "MatchTableVersion"); + var matchGroupVersion = DesktopContent.getXMLValue(groupTable, "MatchGroupVersion"); + // Process each match... + + Debug.log("Match found:", { groupName: groupName, groupVersion: matchGroupVersion, tableName: tableName, tableVersion: matchTableVersion, row: matchRow, column: matchColumn }); + var mapKey = groupName+"-"+tableName+"-"+matchColumn+"-"+matchTableVersion+"-"+matchGroupVersion; + if (!groupTableMap.has(mapKey)) + groupTableMap.set(mapKey, 0); + else + groupTableMap.set(mapKey, groupTableMap.get(mapKey) + 1); + } // end groupTableMatches loop + + // Display results + var resultStr = "Search Results for: " + searchText + "\n"; + if (groupTableMap.size === 0) { + resultStr += "
No matches found."; + } else { + var previousGroupName = ""; + var previousGroupKey = ""; + var previousTableName = ""; + for(var i=0; i v" + parts[4] + "\n"; + previousGroupName = parts[0]; + previousGroupKey = parts[4]; + previousTableName = ""; + } + if(parts[1] != previousTableName) + { + resultStr += "\t" + + "Table " + parts[1] + "-v" + parts[3] + "
"; + previousTableName = parts[1]; + } + if(parts[1] == "") + Debug.log('Warning: Empty table name for group ' + parts[0] + ' (' + parts[4] + ')'); + resultStr += "\t\tColumn: " + parts[2] + "" + + ", Count: " + (groupTableMap.get(Array.from(groupTableMap.keys())[i]) + 1) + "" + + "\n"; + } // end groupTableMap loop + } + Debug._errTruncLen = -1; + Debug.info(DesktopContent.tooltipConditionString(resultStr)); + Debug._errTruncLen = undefined; + }, + "searchTextInGroup" + ); + } //end searchTextInGroup() + //============================================================================== //gotoSelectedMSGroup ~~ function gotoSelectedMSGroup() { @@ -3753,6 +3893,15 @@ // Attach mouseup listener to window to handle drag end anywhere (only once) if (!windowMouseupRegistered) { window.addEventListener('mouseup', () => { + // do not interrupt highlighting and text input + const activeEl = document.activeElement; + const hasTextSelection = window.getSelection && !window.getSelection().isCollapsed; + if (_mouseIsSelecting || hasTextSelection || + (activeEl && (activeEl.tagName === "INPUT" || + activeEl.tagName === "TEXTAREA" || + activeEl.isContentEditable))) { + return; + } isDragging = false; document.body.classList.remove('no-select'); window.getSelection().removeAllRanges(); @@ -7756,12 +7905,12 @@ var str = ""; str += "
Table Version A to compare... "; - str += ""; + str += "
"; str += "
"; str += "Table Version B to compare... "; - str += ""; + str += "
"; str += "
"; str += "
"; str += "= 0 && i < 5) { el.innerHTML = ""; return; } //hide if already shown + + var str = ""; + str += "
"; + + str += "
Keyword to search for... "; + str += "
"; + + str += "
Version to search for... "; + str += "
"; + + str += "
Minimum occurrence threshold... "; + str += "
"; + str += ""; + str += "
"; + el.innerHTML = str; + } //end setupSearchAllTableVersions() + //============================================================================== //setupCopyAndMoveRows function setupCopyAndMoveRows() { @@ -7848,17 +8028,16 @@ var str = ""; str += "
Source starting row or Source Version... "; - str += ""; + str += "
"; str += "
"; str += "Number of rows to Copy or Move... "; - str += ""; + str += "
"; str += "
"; str += "Destination row (-1 for new last row)... "; - str += ""; - + str += "
"; //make div for translating innerHTML and value str += ""; @@ -8128,13 +8307,13 @@ _lastFindRow = _lastFindCol = -1; //initialize find location var str = ""; str += "
Search in column ('*' for all)...
"; - str += ""; + str += ""; str += "
"; str += "For text...
"; - str += ""; + str += ""; str += "
"; str += "Replace with...
"; - str += ""; + str += ""; //make div for translating innerHTML and value str += ""; @@ -8694,7 +8873,7 @@ str += "
"; str += "Table:"; str += "