word2md.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. (function () {
  2. var options = {
  3. convertImage: mammoth.images.imgElement(function (image) {
  4. var result = "";
  5. return image.read("base64").then(function (imageBuffer, $callback) {
  6. var fileName = Date.parse(new Date());
  7. switch (image.contentType) {
  8. case "image/png":
  9. fileName += ".png";
  10. break;
  11. case "image/jpg":
  12. fileName += ".jpg";
  13. break
  14. case "image/jpeg":
  15. fileName += ".jpeg";
  16. break;
  17. case "image/gif":
  18. fileName += ".gif";
  19. break;
  20. default:
  21. layer.msg("不支持的图片格式");
  22. return;
  23. }
  24. var form = new FormData();
  25. form.append('editormd-image-file', base64ToBlob(imageBuffer, image.contentType), fileName);
  26. var layerIndex = 0;
  27. return {
  28. src: _ajax(window.imageUploadURL, form, function (ret) {
  29. if (ret.success == 1) {
  30. //return ret.url;
  31. //cm.replaceSelection("![](" + ret.url + ")");
  32. }
  33. console.log(ret.message);
  34. })
  35. };
  36. });
  37. })
  38. };
  39. var _ajax = function (url, data, callback) {
  40. $.ajax({
  41. "type": 'post',
  42. "cache": false,
  43. "url": url,
  44. "data": data,
  45. "dateType": "json",
  46. "processData": false,
  47. "contentType": false,
  48. "mimeType": "multipart/form-data",
  49. async: false,
  50. success: function (ret) {
  51. callback(JSON.parse(ret));
  52. result = JSON.parse(ret).url;
  53. },
  54. error: function (err) {
  55. console.log('请求失败')
  56. }
  57. })
  58. return result;
  59. };
  60. function base64ToBlob(base64, mime) {
  61. mime = mime || "";
  62. const sliceSize = 1024;
  63. const byteChars = window.atob(base64);
  64. const byteArrays = [];
  65. for (
  66. let offset = 0, len = byteChars.length;
  67. offset < len;
  68. offset += sliceSize) {
  69. const slice = byteChars.slice(offset, offset + sliceSize);
  70. const byteNumbers = new Array(slice.length);
  71. for (let i = 0; i < slice.length; i++) {
  72. byteNumbers[i] = slice.charCodeAt(i);
  73. }
  74. const byteArray = new Uint8Array(byteNumbers);
  75. byteArrays.push(byteArray);
  76. }
  77. return new Blob(byteArrays, {
  78. type: mime
  79. });
  80. }
  81. document.getElementById("document")
  82. .addEventListener("change", handleFileSelect, false);
  83. function handleFileSelect(event) {
  84. readFileInputEventAsArrayBuffer(event, function (arrayBuffer) {
  85. mammoth.convertToHtml({
  86. arrayBuffer: arrayBuffer
  87. }, options)
  88. .then(displayResult)
  89. .done();
  90. });
  91. }
  92. function displayResult(result) {
  93. document.getElementById("output").innerHTML = result.value;
  94. var messageHtml = result.messages.map(function (message) {
  95. return '<li class="' + message.type + '">' + escapeHtml(message.message) + "</li>";
  96. }).join("");
  97. document.getElementById("messages").innerHTML = "<ul>" + messageHtml + "</ul>";
  98. }
  99. function readFileInputEventAsArrayBuffer(event, callback) {
  100. var file = event.target.files[0];
  101. var reader = new FileReader();
  102. reader.onload = function (loadEvent) {
  103. var arrayBuffer = loadEvent.target.result;
  104. callback(arrayBuffer);
  105. };
  106. reader.readAsArrayBuffer(file);
  107. }
  108. function escapeHtml(value) {
  109. return value
  110. .replace(/&/g, '&amp;')
  111. .replace(/"/g, '&quot;')
  112. .replace(/</g, '&lt;')
  113. .replace(/>/g, '&gt;');
  114. }
  115. })();