makeClearPanelGrid.js 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. import { makeDiv,
  2. makeCenteredTextDiv,
  3. setElementPosition,
  4. getInputHeight } from '/domUtilities.js';
  5. import { getGridCoordinates,
  6. returnPanels } from './gridUtilities.js';
  7. import { jc as jcGlobal } from '/configuration.js';
  8. function makeTabsClearPanel(coords,
  9. tabs,
  10. gridContents,
  11. i,
  12. redraw,
  13. availablePanels) {
  14. const jc = jcGlobal.jc;
  15. const inputHeight = getInputHeight();
  16. const div = makeDiv();
  17. setElementPosition(div, coords);
  18. const tabsCoords = [coords[0],
  19. coords[1],
  20. coords[2],
  21. inputHeight];
  22. const contentCoords = [coords[0],
  23. coords[1] + inputHeight,
  24. coords[2],
  25. coords[3] - inputHeight];
  26. const tabsPanel = makeDiv();
  27. tabsPanel.style.background = jc.General.clearPanelColor;
  28. tabsPanel.style.opacity = 0;
  29. setElementPosition(tabsPanel, tabsCoords);
  30. const tabsDisplayPanel = makeCenteredTextDiv('clear panel');
  31. tabsDisplayPanel.style.background = jc.General.clearPanelColor;
  32. tabsDisplayPanel.style.opacity = 0;
  33. setElementPosition(tabsDisplayPanel, coords);
  34. div.append(tabsDisplayPanel, tabsPanel);
  35. tabsPanel.onmouseover = () => {
  36. tabsDisplayPanel.style.opacity = 1;
  37. };
  38. tabsPanel.onmouseleave = () => {
  39. tabsDisplayPanel.style.opacity = 0;
  40. };
  41. tabsPanel.onmousedown = () => {
  42. returnPanels(tabs.contents, availablePanels);
  43. gridContents[i] = undefined;
  44. redraw();
  45. };
  46. const currentContent = tabs.contents[tabs.getCurrentIndex()];
  47. if(currentContent.type === 'grid') {
  48. div.append(makeClearPanelGrid(contentCoords[0],
  49. contentCoords[1],
  50. contentCoords[2],
  51. contentCoords[3],
  52. currentContent.contents,
  53. currentContent.splits,
  54. currentContent.direction,
  55. redraw,
  56. jc,
  57. availablePanels));
  58. }else if(currentContent.type === 'tabs') {
  59. div.append(makeTabsClearPanel(contentCoords,
  60. currentContent,
  61. tabs.contents,
  62. tabs.getCurrentIndex(),
  63. redraw,
  64. availablePanels));
  65. }else {
  66. const panel = makeCenteredTextDiv('clear panel');
  67. setElementPosition(panel, contentCoords);
  68. panel.style.background = jc.General.clearPanelColor;
  69. panel.style.opacity = 0;
  70. panel.onmouseover = () => {
  71. panel.style.opacity = 1;
  72. };
  73. panel.onmouseleave = () => {
  74. panel.style.opacity = 0;
  75. };
  76. panel.onmousedown = () => {
  77. if(currentContent.type === 'grid' ||
  78. currentContent.type === 'tabs') {
  79. returnPanels(currentContent.contents, availablePanels);
  80. }else if(currentContent.label) {
  81. availablePanels.push(currentContent);
  82. }
  83. tabs.contents[tabs.getCurrentIndex()] = undefined;
  84. redraw();
  85. };
  86. div.append(panel);
  87. };
  88. return div;
  89. }
  90. function makeClearPanelGrid(x,
  91. y,
  92. width,
  93. height,
  94. contents,
  95. splits,
  96. direction,
  97. redraw,
  98. jc,
  99. availablePanels) {
  100. const div = makeDiv();
  101. setElementPosition(div, [x, y, width, height]);
  102. const coords = getGridCoordinates(x, y, width, height, splits, direction);
  103. contents.forEach((content, i) => {
  104. if(content.type === 'tabs') {
  105. div.append(makeTabsClearPanel(coords[i],
  106. contents[i],
  107. contents,
  108. i,
  109. redraw,
  110. availablePanels));
  111. }else if(content.type !== 'grid') {
  112. const panel = makeCenteredTextDiv('clear');
  113. panel.style.background = jc.General.clearPanelColor;
  114. setElementPosition(panel, coords[i]);
  115. panel.style.opacity = 0;
  116. panel.onmouseover = () => {
  117. panel.style.opacity = 1;
  118. };
  119. panel.onmouseleave = () => {
  120. panel.style.opacity = 0;
  121. };
  122. panel.onmousedown = () => {
  123. if(contents[i].label) {
  124. availablePanels.push(contents[i]);
  125. }
  126. contents[i] = undefined;
  127. redraw();
  128. };
  129. div.append(panel);
  130. }else {
  131. div.append(makeClearPanelGrid(coords[i][0],
  132. coords[i][1],
  133. coords[i][2],
  134. coords[i][3],
  135. contents[i].contents,
  136. contents[i].splits,
  137. contents[i].direction,
  138. redraw,
  139. jc,
  140. availablePanels));
  141. }
  142. });
  143. return div;
  144. }
  145. export { makeClearPanelGrid }