2
0

script.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. function gradioApp() {
  2. const elems = document.getElementsByTagName('gradio-app')
  3. const elem = elems.length == 0 ? document : elems[0]
  4. if (elem !== document) elem.getElementById = function(id){ return document.getElementById(id) }
  5. return elem.shadowRoot ? elem.shadowRoot : elem
  6. }
  7. function get_uiCurrentTab() {
  8. return gradioApp().querySelector('#tabs button:not(.border-transparent)')
  9. }
  10. function get_uiCurrentTabContent() {
  11. return gradioApp().querySelector('.tabitem[id^=tab_]:not([style*="display: none"])')
  12. }
  13. uiUpdateCallbacks = []
  14. uiLoadedCallbacks = []
  15. uiTabChangeCallbacks = []
  16. optionsChangedCallbacks = []
  17. let uiCurrentTab = null
  18. function onUiUpdate(callback){
  19. uiUpdateCallbacks.push(callback)
  20. }
  21. function onUiLoaded(callback){
  22. uiLoadedCallbacks.push(callback)
  23. }
  24. function onUiTabChange(callback){
  25. uiTabChangeCallbacks.push(callback)
  26. }
  27. function onOptionsChanged(callback){
  28. optionsChangedCallbacks.push(callback)
  29. }
  30. function runCallback(x, m){
  31. try {
  32. x(m)
  33. } catch (e) {
  34. (console.error || console.log).call(console, e.message, e);
  35. }
  36. }
  37. function executeCallbacks(queue, m) {
  38. queue.forEach(function(x){runCallback(x, m)})
  39. }
  40. var executedOnLoaded = false;
  41. document.addEventListener("DOMContentLoaded", function() {
  42. var mutationObserver = new MutationObserver(function(m){
  43. if(!executedOnLoaded && gradioApp().querySelector('#txt2img_prompt')){
  44. executedOnLoaded = true;
  45. executeCallbacks(uiLoadedCallbacks);
  46. }
  47. executeCallbacks(uiUpdateCallbacks, m);
  48. const newTab = get_uiCurrentTab();
  49. if ( newTab && ( newTab !== uiCurrentTab ) ) {
  50. uiCurrentTab = newTab;
  51. executeCallbacks(uiTabChangeCallbacks);
  52. }
  53. });
  54. mutationObserver.observe( gradioApp(), { childList:true, subtree:true })
  55. });
  56. /**
  57. * Add a ctrl+enter as a shortcut to start a generation
  58. */
  59. document.addEventListener('keydown', function(e) {
  60. var handled = false;
  61. if (e.key !== undefined) {
  62. if((e.key == "Enter" && (e.metaKey || e.ctrlKey || e.altKey))) handled = true;
  63. } else if (e.keyCode !== undefined) {
  64. if((e.keyCode == 13 && (e.metaKey || e.ctrlKey || e.altKey))) handled = true;
  65. }
  66. if (handled) {
  67. button = get_uiCurrentTabContent().querySelector('button[id$=_generate]');
  68. if (button) {
  69. button.click();
  70. }
  71. e.preventDefault();
  72. }
  73. })
  74. /**
  75. * checks that a UI element is not in another hidden element or tab content
  76. */
  77. function uiElementIsVisible(el) {
  78. let isVisible = !el.closest('.\\!hidden');
  79. if ( ! isVisible ) {
  80. return false;
  81. }
  82. while( isVisible = el.closest('.tabitem')?.style.display !== 'none' ) {
  83. if ( ! isVisible ) {
  84. return false;
  85. } else if ( el.parentElement ) {
  86. el = el.parentElement
  87. } else {
  88. break;
  89. }
  90. }
  91. return isVisible;
  92. }