From 271808b2780feb0872e29bc8ac47457cb671fc5d Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Fri, 24 Jun 2016 15:08:12 -0700 Subject: [PATCH 01/10] Support reading/writing bookmarks to clipboard --- atom/common/api/atom_api_clipboard.cc | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/atom/common/api/atom_api_clipboard.cc b/atom/common/api/atom_api_clipboard.cc index cb413800be..bda3b0c38c 100644 --- a/atom/common/api/atom_api_clipboard.cc +++ b/atom/common/api/atom_api_clipboard.cc @@ -122,6 +122,23 @@ void WriteHtml(const base::string16& html, mate::Arguments* args) { writer.WriteHTML(html, std::string()); } +v8::Local ReadBookmark(mate::Arguments* args) { + base::string16 title; + std::string url; + mate::Dictionary dict = mate::Dictionary::CreateEmpty(args->isolate()); + ui::Clipboard* clipboard = ui::Clipboard::GetForCurrentThread(); + clipboard->ReadBookmark(&title, &url); + dict.Set("title", title); + dict.Set("url", url); + return dict.GetHandle(); +} + +void WriteBookmark(const base::string16& title, const std::string& url, + mate::Arguments* args) { + ui::ScopedClipboardWriter writer(GetClipboardType(args)); + writer.WriteBookmark(title, url); +} + gfx::Image ReadImage(mate::Arguments* args) { ui::Clipboard* clipboard = ui::Clipboard::GetForCurrentThread(); SkBitmap bitmap = clipboard->ReadImage(GetClipboardType(args)); @@ -150,6 +167,8 @@ void Initialize(v8::Local exports, v8::Local unused, dict.SetMethod("writeRTF", &WriteRtf); dict.SetMethod("readHTML", &ReadHtml); dict.SetMethod("writeHTML", &WriteHtml); + dict.SetMethod("readBookmark", &ReadBookmark); + dict.SetMethod("writeBookmark", &WriteBookmark); dict.SetMethod("readImage", &ReadImage); dict.SetMethod("writeImage", &WriteImage); dict.SetMethod("clear", &Clear); From 358bf1bf69104e38cfd0cf7f7d893c7b003dcd95 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Fri, 24 Jun 2016 15:10:32 -0700 Subject: [PATCH 02/10] Add read/writeBookmark spec --- spec/api-clipboard-spec.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/spec/api-clipboard-spec.js b/spec/api-clipboard-spec.js index 344e01452f..1c3682ba2b 100644 --- a/spec/api-clipboard-spec.js +++ b/spec/api-clipboard-spec.js @@ -41,6 +41,16 @@ describe('clipboard module', function () { }) }) + describe('clipboard.readBookmark', function () { + it('returns title and url', function () { + clipboard.writeBookmark('a title', 'http://electron.atom.io') + assert.deepEqual(clipboard.readBookmark(), { + title: 'a title', + url: 'https://electron.atom.io' + }) + }) + }) + describe('clipboard.write()', function () { it('returns data correctly', function () { var text = 'test' From e802d0e4a098d97a91ef247f395e9fa0ca1551c7 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Fri, 24 Jun 2016 15:14:28 -0700 Subject: [PATCH 03/10] Add bookmark key to clipboard.write --- atom/common/api/atom_api_clipboard.cc | 8 ++++++-- spec/api-clipboard-spec.js | 3 +++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/atom/common/api/atom_api_clipboard.cc b/atom/common/api/atom_api_clipboard.cc index bda3b0c38c..01e670be92 100644 --- a/atom/common/api/atom_api_clipboard.cc +++ b/atom/common/api/atom_api_clipboard.cc @@ -54,12 +54,16 @@ std::string Read(const std::string& format_string, void Write(const mate::Dictionary& data, mate::Arguments* args) { ui::ScopedClipboardWriter writer(GetClipboardType(args)); - base::string16 text, html; + base::string16 text, html, bookmark; gfx::Image image; - if (data.Get("text", &text)) + if (data.Get("text", &text)) { writer.WriteText(text); + if (data.Get("bookmark", &bookmark)) + writer.WriteBookmark(bookmark, base::UTF16ToUTF8(text)); + } + if (data.Get("rtf", &text)) { std::string rtf = base::UTF16ToUTF8(text); writer.WriteRTF(rtf); diff --git a/spec/api-clipboard-spec.js b/spec/api-clipboard-spec.js index 1c3682ba2b..3915b550e2 100644 --- a/spec/api-clipboard-spec.js +++ b/spec/api-clipboard-spec.js @@ -58,16 +58,19 @@ describe('clipboard module', function () { var p = path.join(fixtures, 'assets', 'logo.png') var i = nativeImage.createFromPath(p) var markup = process.platform === 'darwin' ? "Hi" : process.platform === 'linux' ? 'Hi' : 'Hi' + var bookmark = {title: 'a title', url: 'test'} clipboard.write({ text: 'test', html: 'Hi', rtf: '{\\rtf1\\utf8 text}', + bookmark: 'a title', image: p }) assert.equal(clipboard.readText(), text) assert.equal(clipboard.readHTML(), markup) assert.equal(clipboard.readRTF(), rtf) assert.equal(clipboard.readImage().toDataURL(), i.toDataURL()) + assert.deepEqual(clipboard.readBookmark(), bookmark) }) }) }) From 9fab641ecb13a94177e1eb4ea30761757f7647a7 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Fri, 24 Jun 2016 15:16:05 -0700 Subject: [PATCH 04/10] Add missing rtf key --- docs/api/clipboard.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/api/clipboard.md b/docs/api/clipboard.md index c2a16a79b9..47fd0564ac 100644 --- a/docs/api/clipboard.md +++ b/docs/api/clipboard.md @@ -111,6 +111,7 @@ Reads `data` from the clipboard. * `text` String * `html` String * `image` [NativeImage](native-image.md) + * `rtf` String * `type` String (optional) ```javascript From a2ba778adcf6b776bc7122ba174a611c498990c2 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Fri, 24 Jun 2016 15:20:49 -0700 Subject: [PATCH 05/10] Document clipboard bookmark support --- docs/api/clipboard.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/docs/api/clipboard.md b/docs/api/clipboard.md index 47fd0564ac..ecd73a71cc 100644 --- a/docs/api/clipboard.md +++ b/docs/api/clipboard.md @@ -75,6 +75,21 @@ Returns the content in the clipboard as RTF. Writes the `text` into the clipboard in RTF. +### `clipboard.readBookmark([type])` + +* `type` String (optional) + +Returns an Object containing `title` and `url` string keys representing the +bookmark in clipboard. + +### `clipboard.writeBookmark(title, url[, type])` + +* `title` String +* `url` String +* `type` String (optional) + +Writes the `title` and `url` into the clipboard as a bookmark. + ### `clipboard.clear([type])` * `type` String (optional) @@ -112,6 +127,7 @@ Reads `data` from the clipboard. * `html` String * `image` [NativeImage](native-image.md) * `rtf` String + * `bookmark` String - The title of the url at `text`. * `type` String (optional) ```javascript From 30a628b46f0e6932ee164988cf38e41e7c02c8f1 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Fri, 24 Jun 2016 15:29:39 -0700 Subject: [PATCH 06/10] Remove unsupported type --- docs/api/clipboard.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/api/clipboard.md b/docs/api/clipboard.md index ecd73a71cc..9ac11706b9 100644 --- a/docs/api/clipboard.md +++ b/docs/api/clipboard.md @@ -75,9 +75,7 @@ Returns the content in the clipboard as RTF. Writes the `text` into the clipboard in RTF. -### `clipboard.readBookmark([type])` - -* `type` String (optional) +### `clipboard.readBookmark()` Returns an Object containing `title` and `url` string keys representing the bookmark in clipboard. From 6588b85ac951cf6ed24d89efdfaf5d5857c8324d Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Fri, 24 Jun 2016 15:31:15 -0700 Subject: [PATCH 07/10] Mention empty strings --- docs/api/clipboard.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/api/clipboard.md b/docs/api/clipboard.md index 9ac11706b9..a8c4605efa 100644 --- a/docs/api/clipboard.md +++ b/docs/api/clipboard.md @@ -78,7 +78,8 @@ Writes the `text` into the clipboard in RTF. ### `clipboard.readBookmark()` Returns an Object containing `title` and `url` string keys representing the -bookmark in clipboard. +bookmark in the clipboard. The `title` and `url` values will be empty strings +when the bookmark is unavailable. ### `clipboard.writeBookmark(title, url[, type])` From 5fbba2d27b98df0fd34deea563e85729383d3b43 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Fri, 24 Jun 2016 15:32:52 -0700 Subject: [PATCH 08/10] Add assertions for no available bookmark --- spec/api-clipboard-spec.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/spec/api-clipboard-spec.js b/spec/api-clipboard-spec.js index 3915b550e2..5116bd80c4 100644 --- a/spec/api-clipboard-spec.js +++ b/spec/api-clipboard-spec.js @@ -46,7 +46,13 @@ describe('clipboard module', function () { clipboard.writeBookmark('a title', 'http://electron.atom.io') assert.deepEqual(clipboard.readBookmark(), { title: 'a title', - url: 'https://electron.atom.io' + url: 'http://electron.atom.io' + }) + + clipboard.writeText('no bookmark') + assert.deepEqual(clipboard.readBookmark(), { + title: '', + url: '' }) }) }) From 9479536bb8cc8d15e043de0b07eee3d5d83b141d Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Fri, 24 Jun 2016 15:35:30 -0700 Subject: [PATCH 09/10] Tweak return value description --- docs/api/clipboard.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/api/clipboard.md b/docs/api/clipboard.md index a8c4605efa..c4ae96c4b1 100644 --- a/docs/api/clipboard.md +++ b/docs/api/clipboard.md @@ -77,9 +77,9 @@ Writes the `text` into the clipboard in RTF. ### `clipboard.readBookmark()` -Returns an Object containing `title` and `url` string keys representing the -bookmark in the clipboard. The `title` and `url` values will be empty strings -when the bookmark is unavailable. +Returns an Object containing `title` and `url` keys representing the bookmark in +the clipboard. The `title` and `url` values will be empty strings when the +bookmark is unavailable. ### `clipboard.writeBookmark(title, url[, type])` From f90ef128145600899427ef8c5629fa0cd794232d Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Fri, 24 Jun 2016 17:16:38 -0700 Subject: [PATCH 10/10] read/writeBookmark is not implemented on Linux --- docs/api/clipboard.md | 4 ++-- spec/api-clipboard-spec.js | 7 ++++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/docs/api/clipboard.md b/docs/api/clipboard.md index c4ae96c4b1..85712bc651 100644 --- a/docs/api/clipboard.md +++ b/docs/api/clipboard.md @@ -75,13 +75,13 @@ Returns the content in the clipboard as RTF. Writes the `text` into the clipboard in RTF. -### `clipboard.readBookmark()` +### `clipboard.readBookmark()` _macOS_ _Windows_ Returns an Object containing `title` and `url` keys representing the bookmark in the clipboard. The `title` and `url` values will be empty strings when the bookmark is unavailable. -### `clipboard.writeBookmark(title, url[, type])` +### `clipboard.writeBookmark(title, url[, type])` _macOS_ _Windows_ * `title` String * `url` String diff --git a/spec/api-clipboard-spec.js b/spec/api-clipboard-spec.js index 5116bd80c4..25b65b4784 100644 --- a/spec/api-clipboard-spec.js +++ b/spec/api-clipboard-spec.js @@ -43,6 +43,8 @@ describe('clipboard module', function () { describe('clipboard.readBookmark', function () { it('returns title and url', function () { + if (process.platform === 'linux') return + clipboard.writeBookmark('a title', 'http://electron.atom.io') assert.deepEqual(clipboard.readBookmark(), { title: 'a title', @@ -76,7 +78,10 @@ describe('clipboard module', function () { assert.equal(clipboard.readHTML(), markup) assert.equal(clipboard.readRTF(), rtf) assert.equal(clipboard.readImage().toDataURL(), i.toDataURL()) - assert.deepEqual(clipboard.readBookmark(), bookmark) + + if (process.platform !== 'linux') { + assert.deepEqual(clipboard.readBookmark(), bookmark) + } }) }) })