load_editor.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. function do_insert_data(name, data, monaco_name) {
  2. if(!document.getElementById(monaco_name)) {
  3. // https://stackoverflow.com/questions/11076975/insert-text-into-textarea-at-cursor-position-javascript
  4. if(document.selection) {
  5. document.getElementById(name).focus();
  6. var sel = document.selection.createRange();
  7. sel.text = data;
  8. } else if(
  9. document.getElementById(name).selectionStart ||
  10. document.getElementById(name).selectionStart == '0'
  11. ) {
  12. var startPos = document.getElementById(name).selectionStart;
  13. var endPos = document.getElementById(name).selectionEnd;
  14. var myPos = document.getElementById(name).value;
  15. document.getElementById(name).value = myPos.substring(0, startPos) + data + myPos.substring(endPos, myPos.length);
  16. } else {
  17. document.getElementById(name).value += data;
  18. }
  19. } else {
  20. var selection = editor.getSelection();
  21. var id = { major: 1, minor: 1 };
  22. var text = data;
  23. var op = {
  24. identifier: id,
  25. range: selection,
  26. text: text,
  27. forceMoveMarkers: true
  28. };
  29. editor.executeEdits("my-source", [op]);
  30. }
  31. }
  32. // 아직 개편이 더 필요함
  33. function do_paste_image(name, monaco_name) {
  34. window.addEventListener('DOMContentLoaded', function() {
  35. if(
  36. document.cookie.match(opennamu_cookie_split_regex('main_css_image_paste')) &&
  37. document.cookie.match(opennamu_cookie_split_regex('main_css_image_paste'))[1] === 'use'
  38. ) {
  39. let textarea;
  40. if(!document.getElementById(monaco_name)) {
  41. textarea = document.getElementById(monaco_name);
  42. } else {
  43. textarea = document.getElementById(name);
  44. }
  45. if(textarea) {
  46. textarea.addEventListener("paste", pasteListener);
  47. }
  48. }
  49. });
  50. }
  51. function pasteListener(e) {
  52. // find file
  53. if(e.clipboardData && e.clipboardData.items) {
  54. const items = e.clipboardData.items;
  55. let haveImageInClipboard = false;
  56. const formData = new FormData();
  57. for(let i = 0; i < items.length; i++) {
  58. if(items[i].type.indexOf("image") !== -1) {
  59. const file = items[i].getAsFile();
  60. const customName = prompt("파일 이름 (확장자 제외)");
  61. if (!customName) {
  62. return alert("파일 이름 없음");
  63. }
  64. var file_name = customName + ".png";
  65. const customFile = new File([file], file_name, { type: file.type });
  66. formData.append("f_data[]", customFile);
  67. haveImageInClipboard = true;
  68. e.preventDefault();
  69. break;
  70. }
  71. }
  72. if(!haveImageInClipboard) {
  73. return;
  74. }
  75. // send to server
  76. fetch("/upload", {
  77. method: "POST",
  78. body: formData,
  79. }).then((res) => {
  80. if (res.status === 200 || res.status === 201) {
  81. const url = res.url;
  82. alert(
  83. '업로드 완료 : ' +
  84. '[[파일:' + file_name + ']]'
  85. );
  86. } else {
  87. console.error("[ERROR] PasteUpload Fail :", res.statusText);
  88. if(res.status === 400) {
  89. alert("파일 이름 중복");
  90. } else if(res.status === 401) {
  91. alert("권한 부족");
  92. } else {
  93. alert("업로드 실패");
  94. }
  95. }
  96. }).catch((err) => {
  97. console.error("오류 내역 :", JSON.stringify(err), err);
  98. alert("업로드 실패");
  99. });
  100. }
  101. }