You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

90 lines
2.9KB

  1. function Редактор(события, имяРедактора, имяВоспроизведения)
  2. {
  3. this.создать = function()
  4. {
  5. this.установитьAce();
  6. this.улавливатьЗавершениеРедактирования();
  7. this.пз = new ПараметрыЗапуска();
  8. this.задатьКодПриЗапуске();
  9. события.подписать(this);
  10. };
  11. this.задатьКодПриЗапуске = function()
  12. {
  13. var z64 = this.пз.параметры["z64"];
  14. if (z64)
  15. {
  16. var код = изZ64(z64);
  17. this.ace.session.setValue(код);
  18. }
  19. };
  20. this.исполнитьКод = function()
  21. {
  22. var содержимое = this.ace.session.getValue();
  23. var z64 = вZ64(содержимое);
  24. var путь = window.location.pathname + "?z64=" + z64;
  25. history.pushState(null, "", путь);
  26. var воспроизведение = document.getElementById("воспроизведение");
  27. var адрес = "../проигрыватель/index.html?z64=" + z64;
  28. воспроизведение.src = адрес;
  29. };
  30. this.обработатьСобытие = function(событие)
  31. {
  32. if (событие == "завершили редактирование")
  33. {
  34. this.проверитьКорректностьКода();
  35. }
  36. else if (событие == "код корректен")
  37. {
  38. this.исполнитьКод();
  39. }
  40. };
  41. this.установитьAce = function()
  42. {
  43. var область = document.getElementById(имяРедактора);
  44. this.ace = window.ace.edit(имяРедактора);
  45. this.ace.session.setMode("ace/mode/javascript");
  46. this.ace.session.setUseWrapMode(true);
  47. }
  48. this.улавливатьЗавершениеРедактирования = function()
  49. {
  50. var тут = this;
  51. this.ace.session.on("change", function(дельта) {
  52. const билет = uuid();
  53. тут.билет = билет;
  54. setTimeout(
  55. function()
  56. {
  57. if (билет == тут.билет)
  58. {
  59. события.уведомить("завершили редактирование");
  60. }
  61. },
  62. 1000
  63. );
  64. });
  65. };
  66. this.проверитьКорректностьКода = function()
  67. {
  68. try
  69. {
  70. eval(this.ace.session.getValue());
  71. события.уведомить("код корректен");
  72. }
  73. catch (ошибка)
  74. {
  75. события.уведомить("код некорректен");
  76. }
  77. };
  78. // Конструктор.
  79. this.создать();
  80. }