diff options
author | Phil Hughes <me@iamphill.com> | 2018-10-26 07:56:32 +0000 |
---|---|---|
committer | Phil Hughes <me@iamphill.com> | 2018-10-26 07:56:32 +0000 |
commit | 2bbfca8240c605e3b1c4aed18cadda4f6403e138 (patch) | |
tree | e2f0c8686d6b1f6ffd09fe4c6927c8133a4f8693 | |
parent | f659f8cf878bcce1e4fbf4763ec8daaeb3300f32 (diff) | |
parent | 861772846bd7725eb630a0bda40a3be1ec112af4 (diff) | |
download | gitlab-ce-2bbfca8240c605e3b1c4aed18cadda4f6403e138.tar.gz |
Merge branch '52115-Link-button-in-markdown-editor-should-recognize-URLs' into 'master'
Link button in markdown editor recognize URLs
Closes #52115
See merge request gitlab-org/gitlab-ce!22547
3 files changed, 49 insertions, 0 deletions
diff --git a/app/assets/javascripts/lib/utils/text_markdown.js b/app/assets/javascripts/lib/utils/text_markdown.js index e26a6b986be..c52cfb806a2 100644 --- a/app/assets/javascripts/lib/utils/text_markdown.js +++ b/app/assets/javascripts/lib/utils/text_markdown.js @@ -2,6 +2,8 @@ import $ from 'jquery'; import { insertText } from '~/lib/utils/common_utils'; +const LINK_TAG_PATTERN = '[{text}](url)'; + function selectedText(text, textarea) { return text.substring(textarea.selectionStart, textarea.selectionEnd); } @@ -76,6 +78,21 @@ export function insertMarkdownText({ textArea, text, tag, blockTag, selected, wr removedFirstNewLine = false; currentLineEmpty = false; + // check for link pattern and selected text is an URL + // if so fill in the url part instead of the text part of the pattern. + if (tag === LINK_TAG_PATTERN) { + if (URL) { + try { + const ignoredUrl = new URL(selected); + // valid url + tag = '[text]({text})'; + select = 'text'; + } catch (e) { + // ignore - no valid url + } + } + } + // Remove the first newline if (selected.indexOf('\n') === 0) { removedFirstNewLine = true; diff --git a/changelogs/unreleased/52115-Link-button-in-markdown-editor-should-recognize-URLs.yml b/changelogs/unreleased/52115-Link-button-in-markdown-editor-should-recognize-URLs.yml new file mode 100644 index 00000000000..8521335c2ea --- /dev/null +++ b/changelogs/unreleased/52115-Link-button-in-markdown-editor-should-recognize-URLs.yml @@ -0,0 +1,5 @@ +--- +title: Link button in markdown editor recognize URLs +merge_request: 1983 +author: Johann Hubert Sonntagbauer +type: changed diff --git a/spec/javascripts/lib/utils/text_markdown_spec.js b/spec/javascripts/lib/utils/text_markdown_spec.js index bb7a29fe30a..b9e805628f8 100644 --- a/spec/javascripts/lib/utils/text_markdown_spec.js +++ b/spec/javascripts/lib/utils/text_markdown_spec.js @@ -166,6 +166,33 @@ describe('init markdown', () => { expect(textArea.selectionStart).toEqual(expectedText.lastIndexOf(select)); expect(textArea.selectionEnd).toEqual(expectedText.lastIndexOf(select) + select.length); }); + + it('should support selected urls', () => { + const expectedUrl = 'http://www.gitlab.com'; + const expectedSelectionText = 'text'; + const expectedText = `text [${expectedSelectionText}](${expectedUrl}) text`; + const initialValue = `text ${expectedUrl} text`; + + textArea.value = initialValue; + const selectedIndex = initialValue.indexOf(expectedUrl); + textArea.setSelectionRange(selectedIndex, selectedIndex + expectedUrl.length); + + insertMarkdownText({ + textArea, + text: textArea.value, + tag, + blockTag: null, + selected: expectedUrl, + wrap: false, + select, + }); + + expect(textArea.value).toEqual(expectedText); + expect(textArea.selectionStart).toEqual(expectedText.indexOf(expectedSelectionText, 1)); + expect(textArea.selectionEnd).toEqual( + expectedText.indexOf(expectedSelectionText, 1) + expectedSelectionText.length, + ); + }); }); }); }); |