martor-mau-min-backup.js 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810
  1. // Situs js minify: https://javascript-minifier.com/
  2. // Situs css minify: https://cssminifier.com/
  3. /**
  4. * Name : Martor v1.3.1
  5. * Created by : Agus Makmun (Summon Agus)
  6. * Release date : 02-Sep-2018
  7. * License : GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007
  8. * Repository : https://github.com/agusmakmun/django-markdown-editor
  9. **/
  10. (function ($) {
  11. if (!$) {
  12. $ = django.jQuery;
  13. }
  14. $.fn.martor = function() {
  15. var martor = $(this);
  16. var mainMartor = $('.main-martor');
  17. martor.trigger('martor.init');
  18. var getCookie = function(name) {
  19. var cookieValue = null;
  20. var i = 0;
  21. if (document.cookie && document.cookie !== '') {
  22. var cookies = document.cookie.split(';');
  23. for (i; i < cookies.length; i++) {
  24. var cookie = jQuery.trim(cookies[i]);
  25. if (cookie.substring(0, name.length + 1) === (name + '=')) {
  26. cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
  27. break;
  28. }
  29. }
  30. }
  31. return cookieValue;
  32. }
  33. mainMartor.each(function(i, obj) {
  34. var field_name = $(obj).data('field-name');
  35. var textareaId = $('#id_'+field_name);
  36. var editorId = 'martor-'+field_name;
  37. var editor = ace.edit(editorId);
  38. var editorConfig = JSON.parse(textareaId.data('enable-configs').replace(/'/g, '"'));
  39. editor.setTheme('ace/theme/github');
  40. editor.getSession().setMode('ace/mode/markdown');
  41. editor.getSession().setUseWrapMode(true);
  42. editor.$blockScrolling = Infinity;
  43. editor.renderer.setScrollMargin(10, 10);
  44. editor.setAutoScrollEditorIntoView(true);
  45. editor.setOptions({
  46. enableBasicAutocompletion: true,
  47. enableSnippets: true,
  48. enableLiveAutocompletion: true,
  49. enableMultiselect: false
  50. });
  51. if (editorConfig.living == 'true') {
  52. $(obj).addClass('enable-living');
  53. }
  54. var emojiWordCompleter = {
  55. getCompletions: function(editor, session, pos, prefix, callback) {
  56. var wordList = emojis;
  57. var obj = editor.getSession().getTokenAt(pos.row, pos.column.count);
  58. var curTokens = obj.value.split(/\s+/);
  59. var lastToken = curTokens[curTokens.length-1];
  60. if (lastToken[0] == ':') {
  61. callback(null, wordList.map(function(word) {
  62. return {
  63. caption: word,
  64. value: word.replace(':', '') + ' ',
  65. meta: 'emoji'
  66. };
  67. }));
  68. }
  69. }
  70. }
  71. var mentionWordCompleter = {
  72. getCompletions: function(editor, session, pos, prefix, callback) {
  73. var obj = editor.getSession().getTokenAt(pos.row, pos.column.count);
  74. var curTokens = obj.value.split(/\s+/);
  75. var lastToken = curTokens[curTokens.length-1];
  76. if (lastToken[0] == '@' && lastToken[1] == '[') {
  77. username = lastToken.replace(/([\@\[/\]/])/g, '');
  78. $.ajax({
  79. url: textareaId.data('search-users-url'),
  80. data: {
  81. 'username': username,
  82. 'csrfmiddlewaretoken': getCookie('csrftoken')
  83. },
  84. success: function(data) {
  85. if (data['status'] == 200) {
  86. var wordList = [];
  87. for (var i = 0; i < data['data'].length; i++) {
  88. wordList.push(data['data'][i].username)
  89. }
  90. callback(null, wordList.map(function(word) {
  91. return {
  92. caption: word,
  93. value: word,
  94. meta: 'username'
  95. };
  96. }));
  97. }
  98. }
  99. });
  100. }
  101. }
  102. }
  103. if (editorConfig.mention === 'true') {
  104. editor.completers = [emojiWordCompleter, mentionWordCompleter]
  105. }else {
  106. editor.completers = [emojiWordCompleter]
  107. }
  108. textareaId.attr({'style': 'display:none'});
  109. $(obj).find('.martor-toolbar').find('.markdown-selector').attr({'data-field-name': field_name});
  110. $(obj).find('.upload-progress').attr({'data-field-name': field_name});
  111. $(obj).find('.modal-help-guide').attr({'data-field-name': field_name});
  112. $(obj).find('.modal-emoji').attr({'data-field-name': field_name});
  113. editor.on('change', function(evt){
  114. var value = editor.getValue();
  115. textareaId.val(value);
  116. });
  117. $('#'+editorId).resizable({
  118. direction: 'bottom',
  119. stop: function() {
  120. editor.resize();
  121. }
  122. });
  123. var currentTab = $('.tab.segment[data-tab=preview-tab-'+field_name+']');
  124. var previewTabButton = $('.item[data-tab=preview-tab-'+field_name+']');
  125. var refreshPreview = function() {
  126. var value = editor.getValue();
  127. var form = new FormData();
  128. form.append('content', value);
  129. form.append('csrfmiddlewaretoken', getCookie('csrftoken'));
  130. $.ajax({
  131. url: textareaId.data('markdownfy-url'),
  132. type: 'POST',
  133. data: form,
  134. processData: false,
  135. contentType: false,
  136. success: function(response) {
  137. if(response){
  138. currentTab.html(response);
  139. $('pre').each(function(i, block){
  140. hljs.highlightBlock(block);
  141. });
  142. }else {currentTab.html('<p>Nothing to preview</p>');}
  143. },
  144. error: function(response) {
  145. console.log("error", response);
  146. }
  147. });
  148. };
  149. if (editorConfig.living === 'true') {
  150. editor.on('change', refreshPreview);
  151. }else {
  152. previewTabButton.click(function(){
  153. $(this).closest('.tab-martor-menu').find('.martor-toolbar').hide();
  154. refreshPreview();
  155. });
  156. }
  157. var editorTabButton = $('.item[data-tab=editor-tab-'+field_name+']');
  158. editorTabButton.click(function(){
  159. $(this).closest('.tab-martor-menu').find('.martor-toolbar').show();
  160. });
  161. var markdownToBold = function(editor) {
  162. var originalRange = editor.getSelectionRange();
  163. if (editor.selection.isEmpty()) {
  164. var curpos = editor.getCursorPosition();
  165. editor.session.insert(curpos, ' **** ');
  166. editor.focus();
  167. editor.selection.moveTo(curpos.row, curpos.column+3);
  168. }else {
  169. var range = editor.getSelectionRange();
  170. var text = editor.session.getTextRange(range);
  171. editor.session.replace(range, '**'+text+'**');
  172. originalRange.end.column += 4;
  173. editor.focus();
  174. editor.selection.setSelectionRange(originalRange);
  175. }
  176. };
  177. var markdownToItalic = function(editor) {
  178. var originalRange = editor.getSelectionRange();
  179. if (editor.selection.isEmpty()) {
  180. var curpos = editor.getCursorPosition();
  181. editor.session.insert(curpos, ' __ ');
  182. editor.focus();
  183. editor.selection.moveTo(curpos.row, curpos.column+2);
  184. }else {
  185. var range = editor.getSelectionRange();
  186. var text = editor.session.getTextRange(range);
  187. editor.session.replace(range, '_'+text+'_');
  188. originalRange.end.column += 2;
  189. editor.focus();
  190. editor.selection.setSelectionRange(originalRange);
  191. }
  192. };
  193. var markdownToUnderscores = function(editor) {
  194. var originalRange = editor.getSelectionRange();
  195. if (editor.selection.isEmpty()) {
  196. var curpos = editor.getCursorPosition();
  197. editor.session.insert(curpos, ' ++++ ');
  198. editor.focus();
  199. editor.selection.moveTo(curpos.row, curpos.column+3);
  200. }else {
  201. var range = editor.getSelectionRange();
  202. var text = editor.session.getTextRange(range);
  203. editor.session.replace(range, '++'+text+'++');
  204. originalRange.end.column += 4;
  205. editor.focus();
  206. editor.selection.setSelectionRange(originalRange);
  207. }
  208. };
  209. var markdownToStrikethrough = function(editor) {
  210. var originalRange = editor.getSelectionRange();
  211. if (editor.selection.isEmpty()) {
  212. var curpos = editor.getCursorPosition();
  213. editor.session.insert(curpos, ' ~~~~ ');
  214. editor.focus();
  215. editor.selection.moveTo(curpos.row, curpos.column+3);
  216. }else {
  217. var range = editor.getSelectionRange();
  218. var text = editor.session.getTextRange(range);
  219. editor.session.replace(range, '~~'+text+'~~');
  220. originalRange.end.column += 4;
  221. editor.focus();
  222. editor.selection.setSelectionRange(originalRange);
  223. }
  224. };
  225. var markdownToHorizontal = function(editor) {
  226. var originalRange = editor.getSelectionRange();
  227. if (editor.selection.isEmpty()) {
  228. var curpos = editor.getCursorPosition();
  229. editor.session.insert(curpos, '\n\n----------\n\n');
  230. editor.focus();
  231. editor.selection.moveTo(curpos.row+4, curpos.column+10);
  232. }
  233. else {
  234. var range = editor.getSelectionRange();
  235. var text = editor.session.getTextRange(range);
  236. editor.session.replace(range, '\n\n----------\n\n'+text);
  237. editor.focus();
  238. editor.selection.moveTo(
  239. originalRange.end.row+4,
  240. originalRange.end.column+10
  241. );
  242. }
  243. };
  244. var markdownToH1 = function(editor) {
  245. var originalRange = editor.getSelectionRange();
  246. if (editor.selection.isEmpty()) {
  247. var curpos = editor.getCursorPosition();
  248. editor.session.insert(curpos, '\n\n# ');
  249. editor.focus();
  250. editor.selection.moveTo(curpos.row+2, curpos.column+2);
  251. }
  252. else {
  253. var range = editor.getSelectionRange();
  254. var text = editor.session.getTextRange(range);
  255. editor.session.replace(range, '\n\n# '+text+'\n');
  256. editor.focus();
  257. editor.selection.moveTo(
  258. originalRange.end.row+2,
  259. originalRange.end.column+2
  260. );
  261. }
  262. };
  263. var markdownToH2 = function(editor) {
  264. var originalRange = editor.getSelectionRange();
  265. if (editor.selection.isEmpty()) {
  266. var curpos = editor.getCursorPosition();
  267. editor.session.insert(curpos, '\n\n## ');
  268. editor.focus();
  269. editor.selection.moveTo(curpos.row+2, curpos.column+3);
  270. }
  271. else {
  272. var range = editor.getSelectionRange();
  273. var text = editor.session.getTextRange(range);
  274. editor.session.replace(range, '\n\n## '+text+'\n');
  275. editor.focus();
  276. editor.selection.moveTo(
  277. originalRange.end.row+2,
  278. originalRange.end.column+3
  279. );
  280. }
  281. };
  282. var markdownToH3 = function(editor) {
  283. var originalRange = editor.getSelectionRange();
  284. if (editor.selection.isEmpty()) {
  285. var curpos = editor.getCursorPosition();
  286. editor.session.insert(curpos, '\n\n### ');
  287. editor.focus();
  288. editor.selection.moveTo(curpos.row+2, curpos.column+4);
  289. }
  290. else {
  291. var range = editor.getSelectionRange();
  292. var text = editor.session.getTextRange(range);
  293. editor.session.replace(range, '\n\n### '+text+'\n');
  294. editor.focus();
  295. editor.selection.moveTo(
  296. originalRange.end.row+2,
  297. originalRange.end.column+4
  298. );
  299. }
  300. };
  301. var markdownToPre = function(editor) {
  302. var originalRange = editor.getSelectionRange();
  303. if (editor.selection.isEmpty()) {
  304. var curpos = editor.getCursorPosition();
  305. editor.session.insert(curpos, '\n\n```\n\n```\n');
  306. editor.focus();
  307. editor.selection.moveTo(curpos.row+3, curpos.column);
  308. }
  309. else {
  310. var range = editor.getSelectionRange();
  311. var text = editor.session.getTextRange(range);
  312. editor.session.replace(range, '\n\n```\n'+text+'\n```\n');
  313. editor.focus();
  314. editor.selection.moveTo(
  315. originalRange.end.row+3,
  316. originalRange.end.column+3
  317. );
  318. }
  319. };
  320. var markdownToCode = function(editor) {
  321. var originalRange = editor.getSelectionRange();
  322. if (editor.selection.isEmpty()) {
  323. var curpos = editor.getCursorPosition();
  324. editor.session.insert(curpos, ' `` ');
  325. editor.focus();
  326. editor.selection.moveTo(curpos.row, curpos.column+2);
  327. }else {
  328. var range = editor.getSelectionRange();
  329. var text = editor.session.getTextRange(range);
  330. editor.session.replace(range, '`'+text+'`');
  331. originalRange.end.column += 2;
  332. editor.focus();
  333. editor.selection.setSelectionRange(originalRange);
  334. }
  335. };
  336. var markdownToBlockQuote = function(editor) {
  337. var originalRange = editor.getSelectionRange();
  338. if (editor.selection.isEmpty()) {
  339. var curpos = editor.getCursorPosition();
  340. editor.session.insert(curpos, '\n\n> \n');
  341. editor.focus();
  342. editor.selection.moveTo(curpos.row+2, curpos.column+2);
  343. }
  344. else {
  345. var range = editor.getSelectionRange();
  346. var text = editor.session.getTextRange(range);
  347. editor.session.replace(range, '\n\n> '+text+'\n');
  348. editor.focus();
  349. editor.selection.moveTo(
  350. originalRange.end.row+2,
  351. originalRange.end.column+2
  352. );
  353. }
  354. };
  355. var markdownToUnorderedList = function(editor) {
  356. var originalRange = editor.getSelectionRange();
  357. if (editor.selection.isEmpty()) {
  358. var curpos = editor.getCursorPosition();
  359. editor.session.insert(curpos, '\n\n* ');
  360. editor.focus();
  361. editor.selection.moveTo(curpos.row+2, curpos.column+2);
  362. }
  363. else {
  364. var range = editor.getSelectionRange();
  365. var text = editor.session.getTextRange(range);
  366. editor.session.replace(range, '\n\n* '+text);
  367. editor.focus();
  368. editor.selection.moveTo(
  369. originalRange.end.row+2,
  370. originalRange.end.column+2
  371. );
  372. }
  373. };
  374. var markdownToOrderedList = function(editor) {
  375. var originalRange = editor.getSelectionRange();
  376. if (editor.selection.isEmpty()) {
  377. var curpos = editor.getCursorPosition();
  378. editor.session.insert(curpos, '\n\n1. ');
  379. editor.focus();
  380. editor.selection.moveTo(curpos.row+2, curpos.column+3);
  381. }
  382. else {
  383. var range = editor.getSelectionRange();
  384. var text = editor.session.getTextRange(range);
  385. editor.session.replace(range, '\n\n1. '+text);
  386. editor.focus();
  387. editor.selection.moveTo(
  388. originalRange.end.row+2,
  389. originalRange.end.column+3
  390. );
  391. }
  392. };
  393. var markdownToLink = function(editor) {
  394. var originalRange = editor.getSelectionRange();
  395. if (editor.selection.isEmpty()) {
  396. var curpos = editor.getCursorPosition();
  397. editor.session.insert(curpos, ' [](http://) ');
  398. editor.focus();
  399. editor.selection.moveTo(curpos.row, curpos.column+2);
  400. }else {
  401. var range = editor.getSelectionRange();
  402. var text = editor.session.getTextRange(range);
  403. editor.session.replace(range, '['+text+'](http://) ');
  404. editor.focus();
  405. editor.selection.moveTo(
  406. originalRange.end.row,
  407. originalRange.end.column+10
  408. );
  409. }
  410. };
  411. var markdownToImageLink = function(editor, imageData) {
  412. var originalRange = editor.getSelectionRange();
  413. if (typeof(imageData) === 'undefined') {
  414. if (editor.selection.isEmpty()) {
  415. var curpos = editor.getCursorPosition();
  416. editor.session.insert(curpos, ' ![](http://) ');
  417. editor.focus();
  418. editor.selection.moveTo(curpos.row, curpos.column+3);
  419. }else {
  420. var range = editor.getSelectionRange();
  421. var text = editor.session.getTextRange(range);
  422. editor.session.replace(range, '!['+text+'](http://) ');
  423. editor.focus();
  424. editor.selection.moveTo(
  425. originalRange.end.row,
  426. originalRange.end.column+11
  427. );
  428. }
  429. }else {
  430. var curpos = editor.getCursorPosition();
  431. editor.session.insert(curpos, '!['+imageData.name+']('+imageData.link+') ');
  432. editor.focus();
  433. editor.selection.moveTo(
  434. curpos.row,
  435. curpos.column+imageData.name.length+2
  436. );
  437. }
  438. };
  439. var markdownToMention = function(editor) {
  440. var originalRange = editor.getSelectionRange();
  441. if (editor.selection.isEmpty()) {
  442. var curpos = editor.getCursorPosition();
  443. editor.session.insert(curpos, ' @[]');
  444. editor.focus();
  445. editor.selection.moveTo(curpos.row, curpos.column+3);
  446. }else {
  447. var range = editor.getSelectionRange();
  448. var text = editor.session.getTextRange(range);
  449. editor.session.replace(range, '@['+text+']');
  450. editor.focus();
  451. editor.selection.moveTo(
  452. originalRange.end.row,
  453. originalRange.end.column+3
  454. )
  455. }
  456. };
  457. var markdownToEmoji = function(editor, data_target) {
  458. var curpos = editor.getCursorPosition();
  459. editor.session.insert(curpos, ' '+data_target+' ');
  460. editor.focus();
  461. editor.selection.moveTo(curpos.row, curpos.column+data_target.length+2);
  462. };
  463. var markdownToUploadImage = function(editor) {
  464. var firstForm = $('#'+editorId).closest('form').get(0);
  465. var field_name = editor.container.id.replace('martor-', '');
  466. var form = new FormData(firstForm);
  467. form.append('csrfmiddlewaretoken', getCookie('csrftoken'));
  468. $.ajax({
  469. url: textareaId.data('upload-url'),
  470. type: 'POST',
  471. data: form,
  472. async: true,
  473. cache: false,
  474. contentType: false,
  475. enctype: 'multipart/form-data',
  476. processData: false,
  477. beforeSend: function() {
  478. console.log('Uploading...');
  479. $('.upload-progress[data-field-name='+field_name+']').show();
  480. },
  481. success: function (response) {
  482. $('.upload-progress[data-field-name='+field_name+']').hide();
  483. if (response.status == 200) {
  484. console.log(response);
  485. markdownToImageLink(
  486. editor=editor,
  487. imageData={name: response.name, link: response.link}
  488. );
  489. }else if (response.status == 403) {
  490. alert(response.data.error);
  491. }
  492. else {
  493. console.log(response)
  494. }
  495. },
  496. error: function(response) {
  497. console.log("error", response);
  498. $('.upload-progress[data-field-name='+field_name+']').hide();
  499. }
  500. });
  501. return false;
  502. };
  503. editor.commands.addCommand({
  504. name: 'markdownToBold',
  505. bindKey: {win: 'Ctrl-B', mac: 'Command-B'},
  506. exec: function(editor) {
  507. markdownToBold(editor);
  508. },
  509. readOnly: true
  510. });
  511. editor.commands.addCommand({
  512. name: 'markdownToItalic',
  513. bindKey: {win: 'Ctrl-I', mac: 'Command-I'},
  514. exec: function(editor) {
  515. markdownToItalic(editor);
  516. },
  517. readOnly: true
  518. });
  519. editor.commands.addCommand({
  520. name: 'markdownToUnderscores',
  521. bindKey: {win: 'Ctrl-Shift-U', mac: 'Command-Option-U'},
  522. exec: function(editor) {
  523. markdownToUnderscores(editor);
  524. },
  525. readOnly: true
  526. });
  527. editor.commands.addCommand({
  528. name: 'markdownToStrikethrough',
  529. bindKey: {win: 'Ctrl-Shift-S', mac: 'Command-Option-S'},
  530. exec: function(editor) {
  531. markdownToStrikethrough(editor);
  532. },
  533. readOnly: true
  534. });
  535. editor.commands.addCommand({
  536. name: 'markdownToHorizontal',
  537. bindKey: {win: 'Ctrl-H', mac: 'Command-H'},
  538. exec: function(editor) {
  539. markdownToHorizontal(editor);
  540. },
  541. readOnly: true
  542. });
  543. editor.commands.addCommand({
  544. name: 'markdownToH1',
  545. bindKey: {win: 'Ctrl-Alt-1', mac: 'Command-Option-1'},
  546. exec: function(editor) {
  547. markdownToH1(editor);
  548. },
  549. readOnly: true
  550. });
  551. editor.commands.addCommand({
  552. name: 'markdownToH2',
  553. bindKey: {win: 'Ctrl-Alt-2', mac: 'Command-Option-3'},
  554. exec: function(editor) {
  555. markdownToH2(editor);
  556. },
  557. readOnly: true
  558. });
  559. editor.commands.addCommand({
  560. name: 'markdownToH3',
  561. bindKey: {win: 'Ctrl-Alt-3', mac: 'Command-Option-3'},
  562. exec: function(editor) {
  563. markdownToH3(editor);
  564. },
  565. readOnly: true
  566. });
  567. editor.commands.addCommand({
  568. name: 'markdownToPre',
  569. bindKey: {win: 'Ctrl-Alt-P', mac: 'Command-Option-P'},
  570. exec: function(editor) {
  571. markdownToPre(editor);
  572. },
  573. readOnly: true
  574. });
  575. editor.commands.addCommand({
  576. name: 'markdownToCode',
  577. bindKey: {win: 'Ctrl-Alt-C', mac: 'Command-Option-C'},
  578. exec: function(editor) {
  579. markdownToCode(editor);
  580. },
  581. readOnly: true
  582. });
  583. editor.commands.addCommand({
  584. name: 'markdownToBlockQuote',
  585. bindKey: {win: 'Ctrl-Q', mac: 'Command-Q'},
  586. exec: function(editor) {
  587. markdownToBlockQuote(editor);
  588. },
  589. readOnly: true
  590. });
  591. editor.commands.addCommand({
  592. name: 'markdownToUnorderedList',
  593. bindKey: {win: 'Ctrl-U', mac: 'Command-U'},
  594. exec: function(editor) {
  595. markdownToUnorderedList(editor);
  596. },
  597. readOnly: true
  598. });
  599. editor.commands.addCommand({
  600. name: 'markdownToOrderedList',
  601. bindKey: {win: 'Ctrl-Shift+O', mac: 'Command-Option-O'},
  602. exec: function(editor) {
  603. markdownToOrderedList(editor);
  604. },
  605. readOnly: true
  606. });
  607. editor.commands.addCommand({
  608. name: 'markdownToLink',
  609. bindKey: {win: 'Ctrl-L', mac: 'Command-L'},
  610. exec: function(editor) {
  611. markdownToLink(editor);
  612. },
  613. readOnly: true
  614. });
  615. editor.commands.addCommand({
  616. name: 'markdownToImageLink',
  617. bindKey: {win: 'Ctrl-Shift-I', mac: 'Command-Option-I'},
  618. exec: function(editor) {
  619. markdownToImageLink(editor);
  620. },
  621. readOnly: true
  622. });
  623. if (editorConfig.mention === 'true') {
  624. editor.commands.addCommand({
  625. name: 'markdownToMention',
  626. bindKey: {win: 'Ctrl-M', mac: 'Command-M'},
  627. exec: function(editor) {
  628. markdownToMention(editor);
  629. },
  630. readOnly: true
  631. });
  632. }
  633. $('.markdown-bold[data-field-name='+field_name+']').click(function(){
  634. markdownToBold(editor);
  635. });
  636. $('.markdown-italic[data-field-name='+field_name+']').click(function(){
  637. markdownToItalic(editor);
  638. });
  639. $('.markdown-horizontal[data-field-name='+field_name+']').click(function(){
  640. markdownToHorizontal(editor);
  641. });
  642. $('.markdown-h1[data-field-name='+field_name+']').click(function(){
  643. markdownToH1(editor);
  644. });
  645. $('.markdown-h2[data-field-name='+field_name+']').click(function(){
  646. markdownToH2(editor);
  647. });
  648. $('.markdown-h3[data-field-name='+field_name+']').click(function(){
  649. markdownToH3(editor);
  650. });
  651. $('.markdown-pre[data-field-name='+field_name+']').click(function(){
  652. markdownToPre(editor);
  653. });
  654. $('.markdown-code[data-field-name='+field_name+']').click(function(){
  655. markdownToCode(editor);
  656. });
  657. $('.markdown-blockquote[data-field-name='+field_name+']').click(function(){
  658. markdownToBlockQuote(editor);
  659. });
  660. $('.markdown-unordered-list[data-field-name='+field_name+']').click(function(){
  661. markdownToUnorderedList(editor);
  662. });
  663. $('.markdown-ordered-list[data-field-name='+field_name+']').click(function(){
  664. markdownToOrderedList(editor);
  665. });
  666. $('.markdown-link[data-field-name='+field_name+']').click(function(){
  667. markdownToLink(editor);
  668. });
  669. $('.markdown-image-link[data-field-name='+field_name+']').click(function(){
  670. markdownToImageLink(editor);
  671. });
  672. var btnMention = $('.markdown-direct-mention[data-field-name='+field_name+']');
  673. var btnUpload = $('.markdown-image-upload[data-field-name='+field_name+']');
  674. if (editorConfig.mention === 'true' && editorConfig.imgur === 'true') {
  675. btnMention.click(function(){
  676. markdownToMention(editor);
  677. });
  678. btnUpload.on('change', function(evt){
  679. evt.preventDefault();
  680. markdownToUploadImage(editor);
  681. });
  682. }else if (editorConfig.mention === 'true' && editorConfig.imgur === 'false') {
  683. btnMention.click(function(){
  684. markdownToMention(editor);
  685. });
  686. btnUpload.remove();
  687. }else if (editorConfig.mention === 'false' && editorConfig.imgur === 'true') {
  688. btnMention.remove();
  689. btnUpload.on('change', function(evt){
  690. evt.preventDefault();
  691. markdownToUploadImage(editor);
  692. });
  693. }
  694. else {
  695. btnMention.remove();
  696. btnUpload.remove();
  697. $('.markdown-reference tbody tr')[1].remove();
  698. }
  699. $('.markdown-help[data-field-name='+field_name+']').click(function(){
  700. $('.modal-help-guide[data-field-name='+field_name+']').modal('show');
  701. });
  702. var mainMartor = $(obj);
  703. var martorField = $('.martor-field-'+field_name);
  704. var btnToggleMaximize = $('.markdown-toggle-maximize[data-field-name='+field_name+']');
  705. var handleToggleMinimize = function() {
  706. $(document.body).removeClass('overflow');
  707. $(this).attr({'title': 'Full Screen'});
  708. $(this).find('.minimize.icon').removeClass('minimize').addClass('maximize');
  709. $('.main-martor-fullscreen').find('.martor-preview').removeAttr('style');
  710. mainMartor.removeClass('main-martor-fullscreen');
  711. martorField.removeAttr('style');
  712. editor.resize();
  713. }
  714. var handleToggleMaximize = function(selector) {
  715. selector.attr({'title': 'Minimize'});
  716. selector.find('.maximize.icon').removeClass('maximize').addClass('minimize');
  717. mainMartor.addClass('main-martor-fullscreen');
  718. var clientHeight = document.body.clientHeight-90;
  719. martorField.attr({'style':'height:'+clientHeight+'px'});
  720. var preview = $('.main-martor-fullscreen').find('.martor-preview');
  721. preview.attr({'style': 'overflow-y: auto;height:'+clientHeight+'px'});
  722. editor.resize();
  723. selector.one('click', handleToggleMinimize);
  724. $(document.body).addClass('overflow');
  725. }
  726. btnToggleMaximize.on('click', function(){
  727. handleToggleMaximize($(this));
  728. });
  729. $(document).keyup(function(e) {
  730. if (e.keyCode == 27 && mainMartor.hasClass('main-martor-fullscreen')) {
  731. $('.minimize.icon').trigger('click');
  732. }
  733. });
  734. $('.markdown-emoji[data-field-name='+field_name+']').click(function(){
  735. var modalEmoji = $('.modal-emoji[data-field-name='+field_name+']');
  736. var emojiList = emojis;
  737. var segmentEmoji = modalEmoji.find('.emoji-content-body');
  738. var loaderInit = modalEmoji.find('.emoji-loader-init');
  739. segmentEmoji.html('');
  740. loaderInit.show();
  741. modalEmoji.modal({
  742. onVisible: function () {
  743. for (var i = 0; i < emojiList.length; i++) {
  744. var linkEmoji = textareaId.data('base-emoji-url') + emojiList[i].replace(/:/g, '') + '.png';
  745. segmentEmoji.append(''
  746. +'<div class="four wide column">'
  747. + '<p><a data-emoji-target="'+emojiList[i]+'" class="insert-emoji">'
  748. + '<img class="marked-emoji" src="'+linkEmoji+'"> '+emojiList[i]
  749. + '</a></p>'
  750. +'</div>');
  751. $('a[data-emoji-target="'+emojiList[i]+'"]').click(function(){
  752. markdownToEmoji(editor, $(this).data('emoji-target'));
  753. modalEmoji.modal('hide', 100);
  754. });
  755. }
  756. loaderInit.hide();
  757. modalEmoji.modal('refresh');
  758. }
  759. }).modal('show');
  760. });
  761. if (textareaId.val() != '') {
  762. editor.setValue(textareaId.val());
  763. }
  764. });
  765. };
  766. $(function() {
  767. $('.martor').martor();
  768. });
  769. })(jQuery);
  770. $( document ).ready(function(){
  771. // Semantic UI
  772. $('.ui.martor-toolbar .ui.dropdown').dropdown();
  773. $('.ui.tab-martor-menu .item').tab();
  774. });