bootstrap.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. require.config({
  2. paths: {
  3. 'bootstrap-markdown': '../addons/markdown/js/bootstrap-markdown.min',
  4. 'hyperdown': '../addons/markdown/js/hyperdown.min',
  5. 'turndown': '../addons/markdown/js/turndown',
  6. },
  7. shim: {
  8. 'bootstrap-markdown': {
  9. deps: [
  10. 'jquery',
  11. 'css!../addons/markdown/css/bootstrap-markdown.css'
  12. ],
  13. exports: '$.fn.markdown'
  14. }
  15. }
  16. });
  17. require(['form', 'upload'], function (Form, Upload) {
  18. var _bindevent = Form.events.bindevent;
  19. Form.events.bindevent = function (form) {
  20. _bindevent.apply(this, [form]);
  21. var insert = function (e, url, type) {
  22. var urlArr = url.split(/\,/);
  23. $.each(urlArr, function () {
  24. var url = Fast.api.cdnurl(this, true);
  25. if (type && type == 'image') {
  26. e.replaceSelection("\n" + '![输入图片说明](' + url + ')');
  27. } else {
  28. e.replaceSelection("\n" + '[输入链接说明](' + url + ')');
  29. }
  30. });
  31. e.change(e);
  32. // e.$element.blur();
  33. // e.$element.focus();
  34. };
  35. try {
  36. if ($(Config.markdown.classname || '.editor', form).length > 0) {
  37. require(['bootstrap-markdown', 'hyperdown', 'turndown'], function (undefined, undefined, Turndown) {
  38. $.fn.markdown.messages.zh = {
  39. Bold: "粗体",
  40. Italic: "斜体",
  41. Heading: "标题",
  42. "URL/Link": "链接",
  43. Image: "图片",
  44. List: "列表",
  45. "Unordered List": "无序列表",
  46. "Ordered List": "有序列表",
  47. Code: "代码",
  48. Quote: "引用",
  49. Preview: "预览",
  50. "strong text": "粗体",
  51. "emphasized text": "强调",
  52. "heading text": "标题",
  53. "enter link description here": "输入链接说明",
  54. "Insert Hyperlink": "URL地址",
  55. "enter image description here": "输入图片说明",
  56. "Insert Image Hyperlink": "图片URL地址",
  57. "enter image title here": "在这里输入图片标题",
  58. "list text here": "这里是列表文本",
  59. "code text here": "这里输入代码",
  60. "quote here": "这里输入引用文本"
  61. };
  62. var parser = new HyperDown();
  63. window.marked = function (text) {
  64. return parser.makeHtml(text);
  65. };
  66. var uploadFiles;
  67. uploadFiles = async function (files) {
  68. var self = this;
  69. for (var i = 0; i < files.length; i++) {
  70. try {
  71. await new Promise((resolve) => {
  72. var url, html, file;
  73. file = files[i];
  74. Upload.api.send(file, function (data) {
  75. url = Fast.api.cdnurl(data.url, true);
  76. if (file.type.indexOf("image") !== -1) {
  77. insert(self, url, 'image');
  78. } else {
  79. insert(self, url, 'file');
  80. }
  81. resolve();
  82. }, function () {
  83. resolve();
  84. });
  85. });
  86. } catch (e) {
  87. }
  88. }
  89. };
  90. $(Config.markdown.classname || '.editor', form).each(function () {
  91. var options = $(this).data("markdown-options") || {};
  92. var editor = $(this);
  93. var format = typeof options.format !== 'undefined' ? options.format : Config.markdown.format;
  94. if (format === 'html') {
  95. var origin = editor;
  96. var turndownService = new TurndownService();
  97. turndownService.use(turndownPluginGfm.gfm);
  98. var content = turndownService.turndown(origin.val());
  99. editor = origin.clone().removeAttr("name").removeAttr("id").val(content);
  100. origin.css("display", "none");
  101. editor.data("markdown-origin", origin);
  102. editor.insertAfter(origin);
  103. }
  104. (function (editor) {
  105. editor.markdown($.extend(true, {
  106. resize: 'vertical',
  107. language: 'zh',
  108. iconlibrary: 'fa',
  109. autofocus: false,
  110. savable: false,
  111. additionalButtons: [
  112. [{
  113. name: "groupCustom",
  114. data: [{
  115. name: "cmdUploadImage",
  116. toggle: false,
  117. title: "Upload image",
  118. icon: "fa fa-upload",
  119. }, {
  120. name: "cmdUploadFile",
  121. toggle: false,
  122. title: "Upload file",
  123. icon: "fa fa-cloud-upload",
  124. }, {
  125. name: "cmdSelectImage",
  126. toggle: false,
  127. title: "Select image",
  128. icon: "fa fa-file-image-o",
  129. callback: function (e) {
  130. parent.Fast.api.open("general/attachment/select?element_id=&multiple=true&mimetype=image/*", __('Choose'), {
  131. callback: function (data) {
  132. var urlArr = data.url.split(/\,/);
  133. insert(e, data.url, 'image');
  134. }
  135. });
  136. return false;
  137. }
  138. }, {
  139. name: "cmdSelectAttachment",
  140. toggle: false,
  141. title: "Select file",
  142. icon: "fa fa-file",
  143. callback: function (e) {
  144. parent.Fast.api.open("general/attachment/select?element_id=&multiple=true&mimetype=*", __('Choose'), {
  145. callback: function (data) {
  146. insert(e, data.url, 'file');
  147. }
  148. });
  149. return false;
  150. }
  151. }]
  152. }]
  153. ],
  154. onShow: function (e) {
  155. //添加上传图片按钮和上传附件按钮
  156. var imgBtn = $("button[data-handler='bootstrap-markdown-cmdUploadImage']", e.$editor);
  157. var fileBtn = $("button[data-handler='bootstrap-markdown-cmdUploadFile']", e.$editor);
  158. var btnParent = imgBtn.parent();
  159. btnParent.addClass("md-relative");
  160. var upImgBtn = $('<button type="button" class="uploadimage faupload" data-button="image" title="点击上传图片" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp,image/webp" data-multiple="true">点击上传图片</button>');
  161. upImgBtn.css(imgBtn.position()).appendTo(btnParent);
  162. var upFileBtn = $('<button type="button" class="uploadfile faupload" data-button="file" title="点击上传附件" data-multiple="true">点击上传附件</button>');
  163. upFileBtn.css(fileBtn.position()).appendTo(btnParent);
  164. upImgBtn.data("upload-success", function (data, ret) {
  165. insert(e, data.url, 'image');
  166. });
  167. upFileBtn.data("upload-success", function (data, ret) {
  168. insert(e, data.url, 'file');
  169. });
  170. Form.events.faupload(e.$editor);
  171. $(".uploadimage,.uploadfile", e.$editor).on("mouseenter", function () {
  172. ($(this).data("button") === 'image' ? imgBtn : fileBtn).addClass("active");
  173. }).on("mouseleave", function () {
  174. ($(this).data("button") === 'image' ? imgBtn : fileBtn).removeClass("active");
  175. });
  176. //粘贴上传
  177. $(e.$textarea).bind('paste', function (event) {
  178. var originalEvent;
  179. originalEvent = event.originalEvent;
  180. if (originalEvent.clipboardData && originalEvent.clipboardData.files.length > 0) {
  181. uploadFiles.call(e, originalEvent.clipboardData.files);
  182. return false;
  183. }
  184. });
  185. //拖拽上传
  186. $(e.$textarea).bind('drop', function (event) {
  187. var originalEvent;
  188. originalEvent = event.originalEvent;
  189. if (originalEvent.dataTransfer && originalEvent.dataTransfer.files.length > 0) {
  190. uploadFiles.call(e, originalEvent.dataTransfer.files);
  191. return false;
  192. }
  193. });
  194. },
  195. onChange: function (e) {
  196. var origin = $(e.$textarea).data("markdown-origin");
  197. if (origin) {
  198. origin.val(marked(e.$textarea.val()));
  199. }
  200. }
  201. }, editor.data("markdown-options") || {}));
  202. })(editor)
  203. });
  204. });
  205. }
  206. } catch (e) {
  207. console.log(e);
  208. }
  209. };
  210. });