diff --git a/src/web/InputWaiter.mjs b/src/web/InputWaiter.mjs index 7e486a62..14ac01df 100644 --- a/src/web/InputWaiter.mjs +++ b/src/web/InputWaiter.mjs @@ -327,7 +327,7 @@ class InputWaiter { fileLoaded.textContent = ""; inputText.style.overflow = "auto"; - inputText.classList.remove("blur"); + inputText.classList.remove("blur"); const lines = inputData.input.length < (this.app.options.ioDisplayThreshold * 1024) ? inputData.input.count("\n") + 1 : null; diff --git a/src/web/Manager.mjs b/src/web/Manager.mjs index 390e64dd..23a035af 100755 --- a/src/web/Manager.mjs +++ b/src/web/Manager.mjs @@ -201,6 +201,17 @@ class Manager { document.getElementById("btn-previous-output-tab").addEventListener("click", this.output.changeTabLeft.bind(this.output)); document.getElementById("btn-next-output-tab").addEventListener("click", this.output.changeTabRight.bind(this.output)); document.getElementById("btn-go-to-output-tab").addEventListener("click", this.output.goToTab.bind(this.output)); + document.getElementById("btn-find-output-tab").addEventListener("click", this.output.findTab.bind(this.output)); + document.getElementById("output-show-pending").addEventListener("change", this.output.filterTabSearch.bind(this.output)); + document.getElementById("output-show-baking").addEventListener("change", this.output.filterTabSearch.bind(this.output)); + document.getElementById("output-show-baked").addEventListener("change", this.output.filterTabSearch.bind(this.output)); + document.getElementById("output-content-filter").addEventListener("change", this.output.filterTabSearch.bind(this.output)); + document.getElementById("output-content-filter").addEventListener("keyup", this.output.filterTabSearch.bind(this.output)); + document.getElementById("output-num-results").addEventListener("change", this.output.filterTabSearch.bind(this.output)); + document.getElementById("output-num-results").addEventListener("keyup", this.output.filterTabSearch.bind(this.output)); + document.getElementById("output-filter-refresh").addEventListener("click", this.output.filterTabSearch.bind(this.output)); + // this.addDynamicListener(".output-filter-result", "click", this.output.filterItemClick, this.output); + // Options document.getElementById("options").addEventListener("click", this.options.optionsClick.bind(this.options)); diff --git a/src/web/OutputWaiter.mjs b/src/web/OutputWaiter.mjs index 3ea63bb7..fffcc4fd 100755 --- a/src/web/OutputWaiter.mjs +++ b/src/web/OutputWaiter.mjs @@ -528,8 +528,8 @@ class OutputWaiter { const downloadButton = document.getElementById("save-all-to-file"); downloadButton.classList.add("spin"); - downloadButton.title = `Downloading ${inputNums.length} files...`; - downloadButton.setAttribute("data-original-title", `Downloading ${inputNums.length} files...`); + downloadButton.title = `Zipping ${inputNums.length} files...`; + downloadButton.setAttribute("data-original-title", `Zipping ${inputNums.length} files...`); downloadButton.firstElementChild.innerHTML = "autorenew"; @@ -1170,7 +1170,7 @@ class OutputWaiter { * @returns {boolean} */ containsCR() { - return this.getActive(true).indexOf("\r") >= 0; + return this.getActive(false).indexOf("\r") >= 0; } /** @@ -1256,6 +1256,83 @@ class OutputWaiter { this.app.resetLayout(); } } + + /** + * Handler for find tab button clicked + */ + findTab() { + this.filterTabSearch(); + $("#output-tab-modal").modal(); + } + + /** + * Searches the outputs using the filter settings and displays the results + */ + filterTabSearch() { + const showPending = document.getElementById("output-show-pending").checked, + showBaking = document.getElementById("output-show-baking").checked, + showBaked = document.getElementById("output-show-baked").checked, + showStale = document.getElementById("output-show-stale").checked, + showErrored = document.getElementById("output-show-errored").checked, + contentFilter = document.getElementById("output-content-filter").value, + resultsList = document.getElementById("output-search-results"), + numResults = parseInt(document.getElementById("output-num-results").value, 10), + inputNums = Object.keys(this.outputs), + results = []; + + // Search through the outputs for matching output results + for (let i = 0; i < inputNums.length; i++) { + const iNum = inputNums[i], + output = this.outputs[iNum]; + + if (output.status === "pending" && showPending || + output.status === "baking" && showBaking || + output.status === "errored" && showErrored || + output.status === "stale" && showStale || + output.status === "inactive" && showStale) { + const outDisplay = { + "pending": "Not baked yet", + "baking": "Baking", + "errored": "Errored", + "stale": "Stale (output is out of date)", + "inactive": "Not baked yet" + }; + results.push({ + inputNum: iNum, + textDisplay: outDisplay[output.status] + }); + } else if (output.status === "baked" && showBaked) { + let data = this.getOutput(iNum, false).slice(0, 4096); + if (typeof data !== "string") { + data = Utils.arrayBufferToStr(data); + } + data = data.replace(/[\r\n]/g, ""); + if (data.toLowerCase().includes(contentFilter)) { + results.push({ + inputNum: iNum, + textDisplay: data.slice(0, 100) + }); + } + } + + if (results.length >= numResults) { + break; + } + } + + for (let i = resultsList.children.length - 1; i >= 0; i--) { + resultsList.children.item(i).remove(); + } + + for (let i = 0; i < results.length; i++) { + const newListItem = document.createElement("li"); + newListItem.classList.add("output-filter-result"); + newListItem.setAttribute("inputNum", results[i].inputNum); + newListItem.innerText = `${results[i].inputNum}: ${results[i].textDisplay}`; + + resultsList.appendChild(newListItem); + } + } } export default OutputWaiter; diff --git a/src/web/WorkerWaiter.mjs b/src/web/WorkerWaiter.mjs index 711014aa..f9bcf281 100644 --- a/src/web/WorkerWaiter.mjs +++ b/src/web/WorkerWaiter.mjs @@ -365,7 +365,12 @@ class WorkerWaiter { * @param {boolean} step */ bake(recipeConfig, options, progress, step) { + for (let i = this.chefWorkers.length - 1; i >= 0; i--) { + this.removeChefWorker(this.chefWorkers[i]); + } + this.setBakingStatus(true); + this.manager.recipe.updateBreakpointIndicator(false); this.bakeStartTime = new Date().getTime(); this.bakeId++; this.recipeConfig = recipeConfig; diff --git a/src/web/html/index.html b/src/web/html/index.html index 46c1b3c7..906822b8 100755 --- a/src/web/html/index.html +++ b/src/web/html/index.html @@ -331,9 +331,17 @@ < - + + > @@ -770,19 +778,19 @@ + +