diff --git a/ghost/admin/markdown-actions.js b/ghost/admin/markdown-actions.js index 11157ec743..3c2325470b 100644 --- a/ghost/admin/markdown-actions.js +++ b/ghost/admin/markdown-actions.js @@ -15,10 +15,52 @@ self.replace(); }, replace: function () { - var text = this.elem.getSelection(), md; - if (this.options.syntax[this.style]) { - md = this.options.syntax[this.style].replace('$1', text); - this.elem.replaceSelection(md); + var text = this.elem.getSelection(), pass = true, md, cursor, word; + switch (this.style) { + case "link": + md = this.options.syntax.link.replace('$1', text); + this.elem.replaceSelection(md, "end"); + cursor = this.elem.getCursor(); + this.elem.setSelection({line: cursor.line, ch: cursor.ch - 8}, {line: cursor.line, ch: cursor.ch - 1}); + pass = false; + break; + case "image": + md = this.options.syntax.image.replace('$1', text); + this.elem.replaceSelection(md, "end"); + cursor = this.elem.getCursor(); + this.elem.setSelection({line: cursor.line, ch: cursor.ch - 8}, {line: cursor.line, ch: cursor.ch - 1}); + pass = false; + break; + case "uppercase": + md = text.toLocaleUpperCase(); + break; + case "lowercase": + md = text.toLocaleLowerCase(); + break; + case "titlecase": + md = text.replace(/\w\S*/g, function (text) {return text.charAt(0).toUpperCase() + text.substr(1).toLowerCase(); }); + break; + case "selectword": + cursor = this.elem.getCursor(); + word = this.elem.getTokenAt(cursor); + if (!/\w$/g.test(word.string)) { + this.elem.setSelection({line: cursor.line, ch: word.start}, {line: cursor.line, ch: word.end - 1}); + } else { + this.elem.setSelection({line: cursor.line, ch: word.start}, {line: cursor.line, ch: word.end}); + } + break; + case "list": + md = text.replace(/^/gm, "* "); + this.elem.replaceSelection("\n" + md + "\n", "end"); + pass = false; + break; + default: + if (this.options.syntax[this.style]) { + md = this.options.syntax[this.style].replace('$1', text); + } + } + if (pass && md) { + this.elem.replaceSelection(md, "end"); } } }; diff --git a/ghost/admin/views/editor.js b/ghost/admin/views/editor.js index 3e89b03235..547905e18b 100644 --- a/ghost/admin/views/editor.js +++ b/ghost/admin/views/editor.js @@ -23,7 +23,12 @@ {'key': 'Ctrl+Shift+L', 'style': 'link'}, {'key': 'Ctrl+Shift+I', 'style': 'image'}, {'key': 'Ctrl+Q', 'style': 'blockquote'}, - {'key': 'Ctrl+Shift+1', 'style': 'currentdate'} + {'key': 'Ctrl+Shift+1', 'style': 'currentdate'}, + {'key': 'Ctrl+U', 'style': 'uppercase'}, + {'key': 'Ctrl+Shift+U', 'style': 'lowercase'}, + {'key': 'Ctrl+Alt+Shift+U', 'style': 'titlecase'}, + {'key': 'Ctrl+Alt+W', 'style': 'selectword'}, + {'key': 'Ctrl+L', 'style': 'list'} ]; // The publish bar associated with a post, which has the TagWidget and