b73935b1e33871fc431318f4dd1c7264b9110e958a3b2ae0649e56397b9d4497bc447266db6a24e398dfea2175a5a3539e6ac5e5bf01e539450b6555406e18 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. window.onload = function () {
  2. 'use strict';
  3. const undoManager = new window.UndoManager();
  4. const circleDrawer = new CircleDrawer('view', undoManager);
  5. const ctrlLimit = document.getElementById('ctrlLimit');
  6. const btnUndo = document.getElementById('btnUndo');
  7. const btnRedo = document.getElementById('btnRedo');
  8. const btnClearMemory = document.getElementById('btnClearMemory');
  9. const btnClearScreen = document.getElementById('btnClearScreen');
  10. const btnGroup = document.getElementById('btnGroup');
  11. function updateUI() {
  12. btnUndo.disabled = !undoManager.hasUndo();
  13. btnRedo.disabled = !undoManager.hasRedo();
  14. }
  15. undoManager.setCallback(updateUI);
  16. btnUndo.addEventListener('click', function () {
  17. undoManager.undo();
  18. updateUI();
  19. });
  20. btnRedo.addEventListener('click', function () {
  21. undoManager.redo();
  22. updateUI();
  23. });
  24. btnClearMemory.addEventListener('click', function () {
  25. undoManager.clear();
  26. updateUI();
  27. });
  28. btnClearScreen.addEventListener('click', function () {
  29. circleDrawer.clearAll();
  30. undoManager.clear();
  31. updateUI();
  32. });
  33. btnGroup.addEventListener('click', function () {
  34. const c = btnGroup.classList;
  35. c.toggle('active');
  36. if (c.contains('active')) {
  37. circleDrawer.setGroupId(new Date().getTime());
  38. } else {
  39. circleDrawer.clearGroupId();
  40. }
  41. });
  42. function handleLimit(rawLimit) {
  43. const limit = parseInt(rawLimit, 10);
  44. if (!isNaN(limit)) {
  45. undoManager.setLimit(limit);
  46. }
  47. updateUI();
  48. }
  49. ctrlLimit.addEventListener('change', function () {
  50. handleLimit(this.value);
  51. });
  52. ctrlLimit.addEventListener('input', function () {
  53. handleLimit(this.value);
  54. });
  55. updateUI();
  56. };