From e72003009d5b9c595b0d1813ebe636f5d0947be6 Mon Sep 17 00:00:00 2001 From: kawmra Date: Sun, 27 May 2018 19:42:41 +0900 Subject: [PATCH 1/2] Create a image tag when pasting image url --- browser/components/CodeEditor.js | 61 ++++++++++++++++++++++++-------- 1 file changed, 47 insertions(+), 14 deletions(-) diff --git a/browser/components/CodeEditor.js b/browser/components/CodeEditor.js index 7dfb6125..b278cba8 100644 --- a/browser/components/CodeEditor.js +++ b/browser/components/CodeEditor.js @@ -312,24 +312,57 @@ export default class CodeEditor extends React.Component { const taggedUrl = `<${pastedTxt}>` editor.replaceSelection(taggedUrl) + const isImageReponse = (response) => { + return response.headers.has('content-type') + && response.headers.get('content-type').match(/^image\/.+$/) + } + const replaceTaggedUrl = (replacement) => { + const value = editor.getValue() + const cursor = editor.getCursor() + const newValue = value.replace(taggedUrl, replacement) + editor.setValue(newValue) + editor.setCursor(cursor) + } + fetch(pastedTxt, { method: 'get' }).then((response) => { - return this.decodeResponse(response) - }).then((response) => { - const parsedResponse = (new window.DOMParser()).parseFromString(response, 'text/html') - const value = editor.getValue() - const cursor = editor.getCursor() - const LinkWithTitle = `[${parsedResponse.title}](${pastedTxt})` - const newValue = value.replace(taggedUrl, LinkWithTitle) - editor.setValue(newValue) - editor.setCursor(cursor) + if (isImageReponse(response)) { + return this.mapImageResponse(response, pastedTxt) + } else { + return this.mapNormalResponse(response, pastedTxt) + } + }).then((replacement) => { + replaceTaggedUrl(replacement) }).catch((e) => { - const value = editor.getValue() - const newValue = value.replace(taggedUrl, pastedTxt) - const cursor = editor.getCursor() - editor.setValue(newValue) - editor.setCursor(cursor) + replaceTaggedUrl(pastedTxt) + }) + } + + mapNormalResponse (response, pastedTxt) { + return this.decodeResponse(response).then((body) => { + return new Promise((resolve, reject) => { + try { + const parsedBody = (new window.DOMParser()).parseFromString(body, 'text/html') + const linkWithTitle = `[${parsedBody.title}](${pastedTxt})` + resolve(linkWithTitle) + } catch (e) { + reject(e) + } + }) + }) + } + + mapImageResponse (response, pastedTxt) { + return new Promise((resolve, reject) => { + try { + const url = response.url + const name = url.substring(url.lastIndexOf('/') + 1) + const imageLinkWithName = `![${name}](${pastedTxt})` + resolve(imageLinkWithName) + } catch (e) { + reject(e) + } }) } From d7ee06ce6da793a531953ea2d15cb45d1675048d Mon Sep 17 00:00:00 2001 From: kawmra Date: Sun, 27 May 2018 20:08:57 +0900 Subject: [PATCH 2/2] Fix lint error --- browser/components/CodeEditor.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/browser/components/CodeEditor.js b/browser/components/CodeEditor.js index b278cba8..e7110263 100644 --- a/browser/components/CodeEditor.js +++ b/browser/components/CodeEditor.js @@ -313,8 +313,8 @@ export default class CodeEditor extends React.Component { editor.replaceSelection(taggedUrl) const isImageReponse = (response) => { - return response.headers.has('content-type') - && response.headers.get('content-type').match(/^image\/.+$/) + return response.headers.has('content-type') && + response.headers.get('content-type').match(/^image\/.+$/) } const replaceTaggedUrl = (replacement) => { const value = editor.getValue()