From fe66f7d10f5b88ec64a40c934c26e515e50e4dc0 Mon Sep 17 00:00:00 2001 From: Pau Benet Prat Date: Fri, 24 Feb 2017 17:08:55 +0100 Subject: [PATCH 1/4] Quote and code button available as parametrizable settings --- src/bootstrap-markdown-editor.js | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/bootstrap-markdown-editor.js b/src/bootstrap-markdown-editor.js index 16ae146..730289c 100644 --- a/src/bootstrap-markdown-editor.js +++ b/src/bootstrap-markdown-editor.js @@ -111,6 +111,13 @@ } } + function insertBetweenText (editor, stringBefore, stringAfter) { + editor.navigateLineStart(); + editor.insert(stringBefore + '\n\n'); + editor.insert(stringAfter); + editor.navigateUp(); + } + function editorHtml (content, options) { var html = ''; @@ -132,6 +139,12 @@ html += '
'; html += ''; html += ''; + if (options.code === true) { + html += ''; + } + if (options.quote === true) { + html += ''; + } html += '
'; // .btn-group html += '
'; @@ -291,6 +304,12 @@ } else if (btnType === 'ol') { insertBeforeText(editor, '1.'); + } else if (btnType === 'quote') { + insertBeforeText(editor, '>'); + + } else if (btnType === 'code') { + insertBetweenText(editor, '```', '```'); + } else if (btnType === 'bold') { editor.execCommand('bold'); @@ -413,6 +432,8 @@ btnItalic: 'Italic', btnList: 'Unordered list', btnOrderedList: 'Ordered list', + btnCode: 'Code', + btnQuote: 'Quote', btnLink: 'Link', btnImage: 'Insert image', btnUpload: 'Upload image', From f2e2d693607fab6ad1fc52e95bb8b5f0dfef59a1 Mon Sep 17 00:00:00 2001 From: Pau Benet Prat Date: Fri, 24 Feb 2017 17:32:53 +0100 Subject: [PATCH 2/4] console better icon than asterisk code command added instead of insertBetween --- src/bootstrap-markdown-editor.js | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/src/bootstrap-markdown-editor.js b/src/bootstrap-markdown-editor.js index 730289c..adb0c14 100644 --- a/src/bootstrap-markdown-editor.js +++ b/src/bootstrap-markdown-editor.js @@ -97,6 +97,21 @@ }, readOnly: false }); + + editor.commands.addCommand({ + name: 'code', + bindKey: {win: 'Ctrl-Y', mac: 'Command-Y'}, + exec: function (editor) { + var selectedText = editor.session.getTextRange(editor.getSelectionRange()); + + if (selectedText === '') { + snippetManager.insertSnippet(editor, '```\n${1:text}\n```'); + } else { + snippetManager.insertSnippet(editor, '```\n' + selectedText + '\n```'); + } + }, + readOnly: false + }); } function insertBeforeText (editor, string) { @@ -111,13 +126,6 @@ } } - function insertBetweenText (editor, stringBefore, stringAfter) { - editor.navigateLineStart(); - editor.insert(stringBefore + '\n\n'); - editor.insert(stringAfter); - editor.navigateUp(); - } - function editorHtml (content, options) { var html = ''; @@ -140,7 +148,7 @@ html += ''; html += ''; if (options.code === true) { - html += ''; + html += ''; } if (options.quote === true) { html += ''; @@ -307,9 +315,6 @@ } else if (btnType === 'quote') { insertBeforeText(editor, '>'); - } else if (btnType === 'code') { - insertBetweenText(editor, '```', '```'); - } else if (btnType === 'bold') { editor.execCommand('bold'); @@ -319,6 +324,9 @@ } else if (btnType === 'link') { editor.execCommand('link'); + } else if (btnType === 'code') { + editor.execCommand('code'); + } else if (btnType === 'image') { if (selectedText === '') { snippetManager.insertSnippet(editor, '![${1:text}](http://$2)'); From 818ebb05485597aefc054c25b39deba65fc935b2 Mon Sep 17 00:00:00 2001 From: Pau Benet Prat Date: Tue, 28 Feb 2017 15:50:46 +0100 Subject: [PATCH 3/4] bower update --- bower.json | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/bower.json b/bower.json index f8df168..ca06236 100644 --- a/bower.json +++ b/bower.json @@ -5,7 +5,12 @@ "authors": [ "Ignacio de Tomás " ], - "keywords": ["markdown", "bootstrap", "editor", "ace"], + "keywords": [ + "markdown", + "bootstrap", + "editor", + "ace" + ], "license": "MIT", "ignore": [ "**/.*", @@ -14,6 +19,6 @@ ], "dependencies": { "bootstrap": "~3.3.1", - "ace-builds": "~1.1.8" + "ace-builds": "^1.2.6" } } From 5be20fcf983a9a7f05b90a41aa55dc9f320f94fa Mon Sep 17 00:00:00 2001 From: Pau Benet Prat Date: Tue, 28 Feb 2017 16:17:44 +0100 Subject: [PATCH 4/4] files minified --- dist/css/bootstrap-markdown-editor.css | 2 +- dist/js/bootstrap-markdown-editor.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dist/css/bootstrap-markdown-editor.css b/dist/css/bootstrap-markdown-editor.css index db5fd78..228b955 100644 --- a/dist/css/bootstrap-markdown-editor.css +++ b/dist/css/bootstrap-markdown-editor.css @@ -1,6 +1,6 @@ /*! * Bootstrap Markdown Editor v2.0.2 (https://github.com/inacho/bootstrap-markdown-editor) - * Copyright 2016 Ignacio de Tomás + * Copyright 2017 Ignacio de Tomás * Licensed under MIT (https://github.com/inacho/bootstrap-markdown-editor/blob/master/LICENSE) */ diff --git a/dist/js/bootstrap-markdown-editor.js b/dist/js/bootstrap-markdown-editor.js index cb6854f..a014db9 100644 --- a/dist/js/bootstrap-markdown-editor.js +++ b/dist/js/bootstrap-markdown-editor.js @@ -1,7 +1,7 @@ /*! * Bootstrap Markdown Editor v2.0.2 (https://github.com/inacho/bootstrap-markdown-editor) - * Copyright 2016 Ignacio de Tomás + * Copyright 2017 Ignacio de Tomás * Licensed under MIT (https://github.com/inacho/bootstrap-markdown-editor/blob/master/LICENSE) */ -!function(a){"use strict";function b(b,c,d,e,f){if(c.length){f.show();var g=new FormData,h=0;for(h=0;h1&&(b="\n");for(var c=0;ce&&(c=d-e,b.css("height",c+"px"))}function d(a,b){a.commands.addCommand({name:"bold",bindKey:{win:"Ctrl-B",mac:"Command-B"},exec:function(a){var c=a.session.getTextRange(a.getSelectionRange());""===c?b.insertSnippet(a,"**${1:text}**"):b.insertSnippet(a,"**"+c+"**")},readOnly:!1}),a.commands.addCommand({name:"italic",bindKey:{win:"Ctrl-I",mac:"Command-I"},exec:function(a){var c=a.session.getTextRange(a.getSelectionRange());""===c?b.insertSnippet(a,"*${1:text}*"):b.insertSnippet(a,"*"+c+"*")},readOnly:!1}),a.commands.addCommand({name:"link",bindKey:{win:"Ctrl-K",mac:"Command-K"},exec:function(a){var c=a.session.getTextRange(a.getSelectionRange());""===c?b.insertSnippet(a,"[${1:text}](http://$2)"):b.insertSnippet(a,"["+c+"](http://$1)")},readOnly:!1})}function e(a,b){0===a.getCursorPosition().column?(a.navigateLineStart(),a.insert(b+" ")):(a.navigateLineStart(),a.insert(b+" "),a.navigateLineEnd())}function f(b,c){var d="";return d+='
',d+='
',d+='
',d+='
',d+='',d+='',d+='',d+="
",d+='
',d+='',d+='',d+="
",d+='
',d+='',d+='',d+="
",d+='
',d+='',d+='',c.imageUpload===!0&&(d+='
'),d+="
",c.fullscreen===!0&&(d+='
',d+='",d+="
"),c.preview===!0&&(d+='
',d+='",d+='",d+="
"),d+="
",d+="
",d+='
'+a("
").text(b).html()+"
",d+=''}var g={init:function(g){var h,i=a.extend(!0,{},a.fn.markdownEditor.defaults,g),j=this,k=!1,l=!1;j.addClass("md-textarea-hidden"),h=a("
"),j.after(h),h.addClass("md-container").html(f(j.val(),i)),"function"==typeof a().tooltip&&h.find('[data-mdtooltip="tooltip"]').tooltip({container:"body"});var m=h.find(".md-editor"),n=h.find(".md-preview"),o=h.find(".md-loading");h.css({width:i.width}),m.css({height:i.height,fontSize:i.fontSize}),n.css({height:i.height});var p,q=ace.edit(m[0]);return q.setTheme("ace/theme/"+i.theme),q.getSession().setMode("ace/mode/markdown"),q.getSession().setUseWrapMode(!0),q.getSession().setUseSoftTabs(i.softTabs),q.getSession().on("change",function(){j.val(q.getSession().getValue())}),q.setHighlightActiveLine(!1),q.setShowPrintMargin(!1),q.renderer.setShowGutter(!1),ace.config.loadModule("ace/ext/language_tools",function(){p=ace.require("ace/snippets").snippetManager,d(q,p)}),i.imageUpload&&(h.find(".md-input-upload").on("change",function(){var c=a(this).get(0).files;b(i.uploadPath,c,q,p,o)}),h.on("dragenter",function(a){a.stopPropagation(),a.preventDefault()}),h.on("dragover",function(a){a.stopPropagation(),a.preventDefault()}),h.on("drop",function(a){a.preventDefault();var c=a.originalEvent.dataTransfer.files;b(i.uploadPath,c,q,p,o)})),i.fullscreen===!0&&a(window).resize(function(){l===!0&&c(k===!1?m:n)}),h.find(".md-btn").click(function(){var b=a(this).data("btn"),d=q.session.getTextRange(q.getSelectionRange());"h1"===b?e(q,"#"):"h2"===b?e(q,"##"):"h3"===b?e(q,"###"):"ul"===b?e(q,"*"):"ol"===b?e(q,"1."):"bold"===b?q.execCommand("bold"):"italic"===b?q.execCommand("italic"):"link"===b?q.execCommand("link"):"image"===b?""===d?p.insertSnippet(q,"![${1:text}](http://$2)"):p.insertSnippet(q,"!["+d+"](http://$1)"):"edit"===b?(k=!1,n.hide(),m.show(),h.find(".btn-edit").addClass("active"),h.find(".btn-preview").removeClass("active"),l===!0&&c(m)):"preview"===b?(k=!0,n.html('

'+i.label.loading+"...

"),i.onPreview(q.getSession().getValue(),function(a){n.html(a)}),m.hide(),n.show(),h.find(".btn-preview").addClass("active"),h.find(".btn-edit").removeClass("active"),l===!0&&c(n)):"fullscreen"===b&&(l===!0?(l=!1,a("body, html").removeClass("md-body-fullscreen"),h.removeClass("md-fullscreen"),m.css("height",i.height),n.css("height",i.height)):(l=!0,a("body, html").addClass("md-body-fullscreen"),h.addClass("md-fullscreen"),c(k===!1?m:n)),q.resize()),q.focus()}),this},content:function(){var a=ace.edit(this.find(".md-editor")[0]);return a.getSession().getValue()},setContent:function(a){var b=ace.edit(this.find(".md-editor")[0]);b.setValue(a,1)}};a.fn.markdownEditor=function(b){return g[b]?g[b].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof b&&b?void a.error("Method "+b+" does not exist on jQuery.markdownEditor"):g.init.apply(this,arguments)},a.fn.markdownEditor.defaults={width:"100%",height:"400px",fontSize:"14px",theme:"tomorrow",softTabs:!0,fullscreen:!0,imageUpload:!1,uploadPath:"",preview:!1,onPreview:function(a,b){b(a)},label:{btnHeader1:"Header 1",btnHeader2:"Header 2",btnHeader3:"Header 3",btnBold:"Bold",btnItalic:"Italic",btnList:"Unordered list",btnOrderedList:"Ordered list",btnLink:"Link",btnImage:"Insert image",btnUpload:"Upload image",btnEdit:"Edit",btnPreview:"Preview",btnFullscreen:"Fullscreen",loading:"Loading"}}}(jQuery); \ No newline at end of file +!function(a){"use strict";function b(b,c,d,e,f){if(c.length){f.show();var g=new FormData,h=0;for(h=0;h1&&(b="\n");for(var c=0;ce&&(c=d-e,b.css("height",c+"px"))}function d(a,b){a.commands.addCommand({name:"bold",bindKey:{win:"Ctrl-B",mac:"Command-B"},exec:function(a){var c=a.session.getTextRange(a.getSelectionRange());""===c?b.insertSnippet(a,"**${1:text}**"):b.insertSnippet(a,"**"+c+"**")},readOnly:!1}),a.commands.addCommand({name:"italic",bindKey:{win:"Ctrl-I",mac:"Command-I"},exec:function(a){var c=a.session.getTextRange(a.getSelectionRange());""===c?b.insertSnippet(a,"*${1:text}*"):b.insertSnippet(a,"*"+c+"*")},readOnly:!1}),a.commands.addCommand({name:"link",bindKey:{win:"Ctrl-K",mac:"Command-K"},exec:function(a){var c=a.session.getTextRange(a.getSelectionRange());""===c?b.insertSnippet(a,"[${1:text}](http://$2)"):b.insertSnippet(a,"["+c+"](http://$1)")},readOnly:!1}),a.commands.addCommand({name:"code",bindKey:{win:"Ctrl-Y",mac:"Command-Y"},exec:function(a){var c=a.session.getTextRange(a.getSelectionRange());""===c?b.insertSnippet(a,"```\n${1:text}\n```"):b.insertSnippet(a,"```\n"+c+"\n```")},readOnly:!1})}function e(a,b){0===a.getCursorPosition().column?(a.navigateLineStart(),a.insert(b+" ")):(a.navigateLineStart(),a.insert(b+" "),a.navigateLineEnd())}function f(b,c){var d="";return d+='
',d+='
',d+='
',d+='
',d+='',d+='',d+='',d+="
",d+='
',d+='',d+='',d+="
",d+='
',d+='',d+='',c.code===!0&&(d+=''),c.quote===!0&&(d+=''),d+="
",d+='
',d+='',d+='',c.imageUpload===!0&&(d+='
'),d+="
",c.fullscreen===!0&&(d+='
',d+='",d+="
"),c.preview===!0&&(d+='
',d+='",d+='",d+="
"),d+="
",d+="
",d+='
'+a("
").text(b).html()+"
",d+=''}var g={init:function(g){var h,i=a.extend(!0,{},a.fn.markdownEditor.defaults,g),j=this,k=!1,l=!1;j.addClass("md-textarea-hidden"),h=a("
"),j.after(h),h.addClass("md-container").html(f(j.val(),i)),"function"==typeof a().tooltip&&h.find('[data-mdtooltip="tooltip"]').tooltip({container:"body"});var m=h.find(".md-editor"),n=h.find(".md-preview"),o=h.find(".md-loading");h.css({width:i.width}),m.css({height:i.height,fontSize:i.fontSize}),n.css({height:i.height});var p,q=ace.edit(m[0]);return q.setTheme("ace/theme/"+i.theme),q.getSession().setMode("ace/mode/markdown"),q.getSession().setUseWrapMode(!0),q.getSession().setUseSoftTabs(i.softTabs),q.getSession().on("change",function(){j.val(q.getSession().getValue())}),q.setHighlightActiveLine(!1),q.setShowPrintMargin(!1),q.renderer.setShowGutter(!1),ace.config.loadModule("ace/ext/language_tools",function(){p=ace.require("ace/snippets").snippetManager,d(q,p)}),i.imageUpload&&(h.find(".md-input-upload").on("change",function(){var c=a(this).get(0).files;b(i.uploadPath,c,q,p,o)}),h.on("dragenter",function(a){a.stopPropagation(),a.preventDefault()}),h.on("dragover",function(a){a.stopPropagation(),a.preventDefault()}),h.on("drop",function(a){a.preventDefault();var c=a.originalEvent.dataTransfer.files;b(i.uploadPath,c,q,p,o)})),i.fullscreen===!0&&a(window).resize(function(){l===!0&&c(k===!1?m:n)}),h.find(".md-btn").click(function(){var b=a(this).data("btn"),d=q.session.getTextRange(q.getSelectionRange());"h1"===b?e(q,"#"):"h2"===b?e(q,"##"):"h3"===b?e(q,"###"):"ul"===b?e(q,"*"):"ol"===b?e(q,"1."):"quote"===b?e(q,">"):"bold"===b?q.execCommand("bold"):"italic"===b?q.execCommand("italic"):"link"===b?q.execCommand("link"):"code"===b?q.execCommand("code"):"image"===b?""===d?p.insertSnippet(q,"![${1:text}](http://$2)"):p.insertSnippet(q,"!["+d+"](http://$1)"):"edit"===b?(k=!1,n.hide(),m.show(),h.find(".btn-edit").addClass("active"),h.find(".btn-preview").removeClass("active"),l===!0&&c(m)):"preview"===b?(k=!0,n.html('

'+i.label.loading+"...

"),i.onPreview(q.getSession().getValue(),function(a){n.html(a)}),m.hide(),n.show(),h.find(".btn-preview").addClass("active"),h.find(".btn-edit").removeClass("active"),l===!0&&c(n)):"fullscreen"===b&&(l===!0?(l=!1,a("body, html").removeClass("md-body-fullscreen"),h.removeClass("md-fullscreen"),m.css("height",i.height),n.css("height",i.height)):(l=!0,a("body, html").addClass("md-body-fullscreen"),h.addClass("md-fullscreen"),c(k===!1?m:n)),q.resize()),q.focus()}),this},content:function(){var a=ace.edit(this.find(".md-editor")[0]);return a.getSession().getValue()},setContent:function(a){var b=ace.edit(this.find(".md-editor")[0]);b.setValue(a,1)}};a.fn.markdownEditor=function(b){return g[b]?g[b].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof b&&b?void a.error("Method "+b+" does not exist on jQuery.markdownEditor"):g.init.apply(this,arguments)},a.fn.markdownEditor.defaults={width:"100%",height:"400px",fontSize:"14px",theme:"tomorrow",softTabs:!0,fullscreen:!0,imageUpload:!1,uploadPath:"",preview:!1,onPreview:function(a,b){b(a)},label:{btnHeader1:"Header 1",btnHeader2:"Header 2",btnHeader3:"Header 3",btnBold:"Bold",btnItalic:"Italic",btnList:"Unordered list",btnOrderedList:"Ordered list",btnCode:"Code",btnQuote:"Quote",btnLink:"Link",btnImage:"Insert image",btnUpload:"Upload image",btnEdit:"Edit",btnPreview:"Preview",btnFullscreen:"Fullscreen",loading:"Loading"}}}(jQuery); \ No newline at end of file