regenpreview.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. // Текущее состояние страницы
  2. // 0 - режим редактирования
  3. // 1 - режим просмотра превью
  4. var current_state = 0;
  5. var markup_area = $('#markuparea');
  6. var preview_area = $('#preview');
  7. var saveButton = $('#saveMarkupButton');
  8. $(document).ready(function() {
  9. textAreaAdjust(document.getElementById("markuparea"));
  10. $("#saveForm").submit(function(e) {
  11. e.preventDefault();
  12. saveMarkup();
  13. });
  14. // Сохранение на Ctrl+S
  15. document.addEventListener("keydown", function(e) {
  16. if (e.keyCode === 83 && (navigator.platform.match("Mac") ? e.metaKey : e.ctrlKey)) {
  17. e.preventDefault();
  18. saveMarkup();
  19. }
  20. }, false);
  21. // Вставка картинок на Ctrl+V
  22. // https://stackoverflow.com/a/6338207
  23. $("#markuparea").on('paste', function (e) {
  24. let items = (e.clipboardData || e.originalEvent.clipboardData).items;
  25. for (let index in items) {
  26. let item = items[index];
  27. if (item.kind === 'file') {
  28. // Загрузка файла через jQuery AJAX
  29. // https://stackoverflow.com/a/13333478
  30. var fd = new FormData();
  31. fd.append('file', item.getAsFile());
  32. $.ajax({
  33. url: "/regen/upload-image",
  34. type: "post",
  35. data: fd,
  36. processData: false,
  37. contentType: false,
  38. success: function (response) {
  39. response = JSON.parse(response);
  40. if (response.ok) {
  41. const line = "?"+response.filename+":"+"Подпись изображения";
  42. markup_area.val(markup_area.val() + line);
  43. }
  44. }
  45. });
  46. }
  47. }
  48. });
  49. $("#switchPreview").click(function() {
  50. markup_area.hide();
  51. preview_area.show();
  52. updatePreview();
  53. saveMarkup();
  54. });
  55. $("#switchMarkup").click(function() {
  56. markup_area.show();
  57. preview_area.hide();
  58. saveMarkup();
  59. });
  60. $("#printReport").click(function() {
  61. saveMarkup();
  62. updatePreview(true);
  63. })
  64. });
  65. // При печати текста заставляет textbox расширяться
  66. function textAreaAdjust(element) {
  67. element.style.height = "1px";
  68. element.style.height = (25+element.scrollHeight)+"px";
  69. }
  70. function updatePreview(then_print=false) {
  71. const str = document.location.toString();
  72. const slash_idx = str.lastIndexOf('/');
  73. const report_id = str.substring(slash_idx + 1);
  74. $.post(
  75. "/regen/gethtml",
  76. {
  77. markup: markup_area.val(),
  78. report_id: report_id
  79. },
  80. function (data, textStatus, xhr) {
  81. $("#preview").html(data);
  82. if (then_print) {
  83. window.print();
  84. }
  85. }
  86. );
  87. }
  88. // Сохраняет разметку для данного отчёта
  89. function saveMarkup() {
  90. $.ajax({
  91. url: "/reports/update",
  92. type: "post",
  93. data: {
  94. id: $("#idInput").val(),
  95. markup: $("#markuparea").val()
  96. },
  97. success: function() {
  98. saveButton.blur();
  99. }
  100. });
  101. }