|
|
|
const MAX_HISTORY_LENGTH = 32; |
|
|
|
var key_down_history = []; |
|
var currentIndex = -1; |
|
var user_input_ta; |
|
|
|
var ga = document.getElementsByTagName("gradio-app"); |
|
var targetNode = ga[0]; |
|
var observer = new MutationObserver(function(mutations) { |
|
for (var i = 0; i < mutations.length; i++) { |
|
if (mutations[i].addedNodes.length) { |
|
var user_input_tb = document.getElementById('user_input_tb'); |
|
if (user_input_tb) { |
|
|
|
|
|
user_input_ta = user_input_tb.querySelector("textarea"); |
|
if (user_input_ta){ |
|
observer.disconnect(); |
|
|
|
user_input_ta.addEventListener("keydown", function (event) { |
|
var value = user_input_ta.value.trim(); |
|
|
|
if (event.code === 'ArrowUp' || event.code === 'ArrowDown') { |
|
|
|
if(value && key_down_history.indexOf(value) === -1) |
|
return; |
|
|
|
event.preventDefault(); |
|
var length = key_down_history.length; |
|
if(length === 0) { |
|
currentIndex = -1; |
|
return; |
|
} |
|
if (currentIndex === -1) { |
|
currentIndex = length; |
|
} |
|
if (event.code === 'ArrowUp' && currentIndex > 0) { |
|
currentIndex--; |
|
user_input_ta.value = key_down_history[currentIndex]; |
|
} else if (event.code === 'ArrowDown' && currentIndex < length - 1) { |
|
currentIndex++; |
|
user_input_ta.value = key_down_history[currentIndex]; |
|
} |
|
user_input_ta.selectionStart = user_input_ta.value.length; |
|
user_input_ta.selectionEnd = user_input_ta.value.length; |
|
const input_event = new InputEvent("input", {bubbles: true, cancelable: true}); |
|
user_input_ta.dispatchEvent(input_event); |
|
}else if(event.code === "Enter") { |
|
if (value) { |
|
currentIndex = -1; |
|
if(key_down_history.indexOf(value) === -1){ |
|
key_down_history.push(value); |
|
if (key_down_history.length > MAX_HISTORY_LENGTH) { |
|
key_down_history.shift(); |
|
} |
|
} |
|
} |
|
} |
|
}); |
|
break; |
|
} |
|
} |
|
} |
|
} |
|
}); |
|
|
|
|
|
observer.observe(targetNode, { childList: true , subtree: true }); |
|
|
|
|