bootstrap.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  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. if (typeof options.format !== 'undefined' && options.format === 'html') {
  94. var origin = editor;
  95. var turndownService = new TurndownService();
  96. turndownService.use(turndownPluginGfm.gfm);
  97. var content = turndownService.turndown(origin.val());
  98. editor = origin.clone().removeAttr("name").removeAttr("id").val(content);
  99. origin.css("display", "none");
  100. editor.data("markdown-origin", origin);
  101. editor.insertAfter(origin);
  102. }
  103. (function (editor) {
  104. editor.markdown($.extend(true, {
  105. resize: 'vertical',
  106. language: 'zh',
  107. iconlibrary: 'fa',
  108. autofocus: false,
  109. savable: false,
  110. additionalButtons: [
  111. [{
  112. name: "groupCustom",
  113. data: [{
  114. name: "cmdUploadImage",
  115. toggle: false,
  116. title: "Upload image",
  117. icon: "fa fa-upload",
  118. }, {
  119. name: "cmdUploadFile",
  120. toggle: false,
  121. title: "Upload file",
  122. icon: "fa fa-cloud-upload",
  123. }, {
  124. name: "cmdSelectImage",
  125. toggle: false,
  126. title: "Select image",
  127. icon: "fa fa-file-image-o",
  128. callback: function (e) {
  129. parent.Fast.api.open("general/attachment/select?element_id=&multiple=true&mimetype=image/*", __('Choose'), {
  130. callback: function (data) {
  131. var urlArr = data.url.split(/\,/);
  132. insert(e, data.url, 'image');
  133. }
  134. });
  135. return false;
  136. }
  137. }, {
  138. name: "cmdSelectAttachment",
  139. toggle: false,
  140. title: "Select file",
  141. icon: "fa fa-file",
  142. callback: function (e) {
  143. parent.Fast.api.open("general/attachment/select?element_id=&multiple=true&mimetype=*", __('Choose'), {
  144. callback: function (data) {
  145. insert(e, data.url, 'file');
  146. }
  147. });
  148. return false;
  149. }
  150. }]
  151. }]
  152. ],
  153. onShow: function (e) {
  154. //添加上传图片按钮和上传附件按钮
  155. var imgBtn = $("button[data-handler='bootstrap-markdown-cmdUploadImage']", e.$editor);
  156. var fileBtn = $("button[data-handler='bootstrap-markdown-cmdUploadFile']", e.$editor);
  157. var btnParent = imgBtn.parent();
  158. btnParent.addClass("md-relative");
  159. 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>');
  160. upImgBtn.css(imgBtn.position()).appendTo(btnParent);
  161. var upFileBtn = $('<button type="button" class="uploadfile faupload" data-button="file" title="点击上传附件" data-multiple="true">点击上传附件</button>');
  162. upFileBtn.css(fileBtn.position()).appendTo(btnParent);
  163. upImgBtn.data("upload-success", function (data, ret) {
  164. insert(e, data.url, 'image');
  165. });
  166. upFileBtn.data("upload-success", function (data, ret) {
  167. insert(e, data.url, 'file');
  168. });
  169. Form.events.faupload(e.$editor);
  170. $(".uploadimage,.uploadfile", e.$editor).on("mouseenter", function () {
  171. ($(this).data("button") === 'image' ? imgBtn : fileBtn).addClass("active");
  172. }).on("mouseleave", function () {
  173. ($(this).data("button") === 'image' ? imgBtn : fileBtn).removeClass("active");
  174. });
  175. //粘贴上传
  176. $(e.$textarea).bind('paste', function (event) {
  177. var originalEvent;
  178. originalEvent = event.originalEvent;
  179. if (originalEvent.clipboardData && originalEvent.clipboardData.files.length > 0) {
  180. uploadFiles.call(e, originalEvent.clipboardData.files);
  181. return false;
  182. }
  183. });
  184. //拖拽上传
  185. $(e.$textarea).bind('drop', function (event) {
  186. var originalEvent;
  187. originalEvent = event.originalEvent;
  188. if (originalEvent.dataTransfer && originalEvent.dataTransfer.files.length > 0) {
  189. uploadFiles.call(e, originalEvent.dataTransfer.files);
  190. return false;
  191. }
  192. });
  193. },
  194. onChange: function (e) {
  195. var origin = $(e.$textarea).data("markdown-origin");
  196. if (origin) {
  197. origin.val(marked(e.$textarea.val()));
  198. }
  199. }
  200. }, editor.data("markdown-options") || {}));
  201. })(editor)
  202. });
  203. });
  204. }
  205. } catch (e) {
  206. }
  207. };
  208. });