diff --git a/atom/common/api/atom_api_clipboard.cc b/atom/common/api/atom_api_clipboard.cc index e6119864cb61..da624a0a1ad3 100644 --- a/atom/common/api/atom_api_clipboard.cc +++ b/atom/common/api/atom_api_clipboard.cc @@ -37,6 +37,14 @@ struct Converter { namespace { +std::vector AvailableFormats(ui::ClipboardType type) { + std::vector format_types; + bool ignore; + ui::Clipboard* clipboard = ui::Clipboard::GetForCurrentThread(); + clipboard->ReadAvailableTypes(type, &format_types, &ignore); + return format_types; +} + bool Has(const std::string& format_string, ui::ClipboardType type) { ui::Clipboard* clipboard = ui::Clipboard::GetForCurrentThread(); ui::Clipboard::FormatType format(ui::Clipboard::GetFormatType(format_string)); @@ -64,6 +72,24 @@ void WriteText(const base::string16& text, ui::ClipboardType type) { writer.WriteText(text); } +base::string16 ReadHtml(ui::ClipboardType type) { + base::string16 data; + base::string16 html; + std::string url; + uint32 start; + uint32 end; + ui::Clipboard::GetForCurrentThread()->ReadHTML(type, &html, &url, + &start, &end); + data = html.substr(start, end - start); + return data; +} + +void WriteHtml(const base::string16& html, + ui::ClipboardType type) { + ui::ScopedClipboardWriter writer(type); + writer.WriteHTML(html, std::string()); +} + gfx::Image ReadImage(ui::ClipboardType type) { SkBitmap bitmap = ui::Clipboard::GetForCurrentThread()->ReadImage(type); return gfx::Image::CreateFrom1xBitmap(bitmap); @@ -81,10 +107,13 @@ void Clear(ui::ClipboardType type) { void Initialize(v8::Local exports, v8::Local unused, v8::Local context, void* priv) { mate::Dictionary dict(context->GetIsolate(), exports); + dict.SetMethod("_availableFormats", &AvailableFormats); dict.SetMethod("_has", &Has); dict.SetMethod("_read", &Read); dict.SetMethod("_readText", &ReadText); dict.SetMethod("_writeText", &WriteText); + dict.SetMethod("_readHtml", &ReadHtml); + dict.SetMethod("_writeHtml", &WriteHtml); dict.SetMethod("_readImage", &ReadImage); dict.SetMethod("_writeImage", &WriteImage); dict.SetMethod("_clear", &Clear); diff --git a/atom/common/api/lib/clipboard.coffee b/atom/common/api/lib/clipboard.coffee index 582feba4b1ef..44dadb8cd9ee 100644 --- a/atom/common/api/lib/clipboard.coffee +++ b/atom/common/api/lib/clipboard.coffee @@ -1,9 +1,12 @@ binding = process.atomBinding 'clipboard' module.exports = + availableFormats: (type='standard') -> binding._availableFormats type has: (format, type='standard') -> binding._has format, type read: (format, type='standard') -> binding._read format, type readText: (type='standard') -> binding._readText type writeText: (text, type='standard') -> binding._writeText text, type + readHtml: (type='standard') -> binding._readHtml type + writeHtml: (markup, type='standard') -> binding._writeHtml markup, type readImage: (type='standard') -> binding._readImage type writeImage: (image, type='standard') -> binding._writeImage image, type clear: (type='standard') -> binding._clear type diff --git a/docs/api/clipboard.md b/docs/api/clipboard.md index c0f830491c1b..b9ca8b3a9b90 100644 --- a/docs/api/clipboard.md +++ b/docs/api/clipboard.md @@ -30,6 +30,19 @@ Returns the content in clipboard as plain text. Writes the `text` into clipboard as plain text. +## clipboard.readHtml([type]) + +* `type` String + +Returns the content in clipboard as markup. + +## clipboard.writeHtml(markup[, type]) + +* `markup` String +* `type` String + +Writes the `markup` into clipboard. + ## clipboard.readImage([type]) * `type` String @@ -49,20 +62,29 @@ Writes the `image` into clipboard. Clears everything in clipboard. -## clipboard.has(format[, type]) +## clipboard.availableFormats([type]) -* `format` String +Returns an array of supported `format` for the clipboard `type`. + +## clipboard.has(data[, type]) + +* `data` String * `type` String -Returns whether clipboard has data in specified `format`. +Returns whether clipboard supports the format of specified `data`. + +```javascript +var clipboard = require('clipboard'); +console.log(clipboard.has('

selection

')); +``` **Note:** This API is experimental and could be removed in future. -## clipboard.read(format[, type]) +## clipboard.read(data[, type]) -* `format` String +* `data` String * `type` String -Reads the data in clipboard of the `format`. +Reads the `data` in clipboard. **Note:** This API is experimental and could be removed in future. diff --git a/spec/api-clipboard-spec.coffee b/spec/api-clipboard-spec.coffee index feadd15b0a6f..429fcbc2d0ad 100644 --- a/spec/api-clipboard-spec.coffee +++ b/spec/api-clipboard-spec.coffee @@ -18,3 +18,15 @@ describe 'clipboard module', -> text = '千江有水千江月,万里无云万里天' clipboard.writeText text assert.equal clipboard.readText(), text + + describe 'clipboard.readHtml()', -> + it 'returns markup correctly', -> + text = 'Hi' + markup = + if process.platform is 'darwin' + 'Hi' + else + 'Hi' + clipboard.writeHtml text + assert.equal clipboard.readHtml(), markup