autogostpreview.js 3.0 KB

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