diff --git a/Cargo.lock b/Cargo.lock index f6d47c5..99526e1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -324,9 +324,9 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[package]] name = "js-sys" -version = "0.3.50" +version = "0.3.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d99f9e3e84b8f67f846ef5b4cbbc3b1c29f6c759fcbce6f01aa0e73d932a24c" +checksum = "671a26f820db17c2a2750743f1dd03bafd15b98c9f30c7c2628c024c05d73397" dependencies = [ "wasm-bindgen", ] @@ -1097,9 +1097,9 @@ checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" [[package]] name = "wasm-bindgen" -version = "0.2.73" +version = "0.2.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83240549659d187488f91f33c0f8547cbfef0b2088bc470c116d1d260ef623d9" +checksum = "27370197c907c55e3f1a9fbe26f44e937fe6451368324e009cba39e139dc08ad" dependencies = [ "cfg-if", "serde", @@ -1109,9 +1109,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.73" +version = "0.2.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae70622411ca953215ca6d06d3ebeb1e915f0f6613e3b495122878d7ebec7dae" +checksum = "53e04185bfa3a779273da532f5025e33398409573f348985af9a1cbf3774d3f4" dependencies = [ "bumpalo", "lazy_static", @@ -1136,9 +1136,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.73" +version = "0.2.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e734d91443f177bfdb41969de821e15c516931c3c3db3d318fa1b68975d0f6f" +checksum = "17cae7ff784d7e83a2fe7611cfe766ecf034111b49deb850a3dc7699c08251f5" dependencies = [ "quote 1.0.9", "wasm-bindgen-macro-support", @@ -1146,9 +1146,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.73" +version = "0.2.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d53739ff08c8a68b0fdbcd54c372b8ab800b1449ab3c9d706503bc7dd1621b2c" +checksum = "99ec0dc7a4756fffc231aab1b9f2f578d23cd391390ab27f952ae0c9b3ece20b" dependencies = [ "proc-macro2 1.0.26", "quote 1.0.9", @@ -1159,15 +1159,15 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.73" +version = "0.2.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9a543ae66aa233d14bb765ed9af4a33e81b8b58d1584cf1b47ff8cd0b9e4489" +checksum = "d554b7f530dee5964d9a9468d95c1f8b8acae4f282807e7d27d4b03099a46744" [[package]] name = "web-sys" -version = "0.3.50" +version = "0.3.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a905d57e488fec8861446d3393670fb50d27a262344013181c2cdf9fff5481be" +checksum = "7b17e741662c70c8bd24ac5c5b18de314a2c26c32bf8346ee1e6f53de919c283" dependencies = [ "js-sys", "wasm-bindgen", diff --git a/Cargo.toml b/Cargo.toml index bc9751e..eb9b698 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,6 +4,12 @@ version = "0.1.0" authors = ["Stephen Solka "] edition = "2018" +[build] +rustflags = ["--cfg=web_sys_unstable_apis"] + +[target.wasm32-unknown-unknown] +rustflags = ["--cfg=web_sys_unstable_apis"] + [lib] crate-type = ["cdylib"] @@ -32,8 +38,10 @@ version = "^0" default-features = false [dependencies.web-sys] -version = "0.3.49" +version = "0.3.57" features = [ 'Window', - 'console' + 'console', + 'Navigator', + 'Clipboard' ] diff --git a/README.md b/README.md index bb43e43..923bba8 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ everything below the --- will be replaced when calling extract - **Extract**: Replace url or document with readable markdown extracted from the sites html content - **Title Only**: Replace url or document with a markdown anchor with the title extracted from the page content -- **Import from Clipboard**: Extract content from url that is found in your clipboard and dump it at your cursor. Desktop only +- **Import from Clipboard**: Extract content from url that is found in your clipboard and dump it at your cursor. # Youtube diff --git a/manifest.json b/manifest.json index 3e32f8f..5d2b838 100644 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,7 @@ { "id": "extract-url", "name": "Extract url content", - "version": "0.10.0", + "version": "0.11.0", "description": "Extract url converting content into markdown", "author": "Stephen Solka", "authorUrl": "https://github.com/trashhalo", diff --git a/package.json b/package.json index b985486..148106f 100644 --- a/package.json +++ b/package.json @@ -6,8 +6,8 @@ "scripts": { "esbuild-dev": "esbuild index.js --platform=node --external:obsidian --external:electron --loader:.wasm=base64 --bundle --outfile=main.js", "esbuild-release": "esbuild index.js --platform=node --external:obsidian --external:electron --loader:.wasm=base64 --bundle --outfile=main.js --minify", - "build": "wasm-pack build --target web && yarn esbuild-release", - "dev": "wasm-pack build --dev --target web && yarn esbuild-dev" + "build": "export RUSTFLAGS=--cfg=web_sys_unstable_apis && wasm-pack build --target web && yarn esbuild-release", + "dev": "export RUSTFLAGS=--cfg=web_sys_unstable_apis && wasm-pack build --dev --target web && yarn esbuild-dev" }, "keywords": [], "author": "", diff --git a/src/extract.rs b/src/extract.rs index 520cf75..cc127f0 100644 --- a/src/extract.rs +++ b/src/extract.rs @@ -1,6 +1,5 @@ use crate::obsidian; use crate::request; -use crate::shim; use crate::transform; use js_sys::{Error, JsString, Promise}; use thiserror::Error; @@ -9,6 +8,7 @@ use wasm_bindgen::prelude::*; use wasm_bindgen::JsCast; use wasm_bindgen_futures::{future_to_promise, JsFuture}; use web_sys::console; +use web_sys::window; use yaml_rust::emitter::{EmitError, YamlEmitter}; use yaml_rust::scanner::ScanError; @@ -109,6 +109,12 @@ pub enum ExtractError { #[error("error transforming content. {0}")] Transform(#[from] transform::TransformError), + + #[error("no clipboard available")] + NoClipboard, + + #[error("no url in clipboard")] + NoClipboardContent, } impl std::convert::From for ExtractError { @@ -127,6 +133,20 @@ impl std::convert::From for ExtractError { } } +async fn read_clipboard() -> Result { + Ok(JsFuture::from( + window() + .ok_or(ExtractError::NoClipboard)? + .navigator() + .clipboard() + .ok_or(ExtractError::NoClipboard)? + .read_text(), + ) + .await? + .as_string() + .ok_or(ExtractError::NoClipboardContent)?) +} + async fn extract_url( plugin: &obsidian::Plugin, title_only: bool, @@ -140,7 +160,7 @@ async fn extract_url( let view: obsidian::MarkdownView = md_view.dyn_into()?; let editor = view.source_mode().cm_editor(); let url_str = if use_clipboard { - shim::clipboard_read_text() + read_clipboard().await? } else { editor.get_selection() }; diff --git a/src/lib.rs b/src/lib.rs index ca5661f..05700d8 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -14,9 +14,7 @@ use wasm_bindgen::prelude::*; pub async fn onload(plugin: obsidian::Plugin) { plugin.addCommand(JsValue::from(extract::command_extract_url())); plugin.addCommand(JsValue::from(extract::command_extract_url_from_url())); - if *obsidian::DESKTOP { - plugin.addCommand(JsValue::from(extract::command_import_url())); - } + plugin.addCommand(JsValue::from(extract::command_import_url())); plugin.addCommand(JsValue::from(archive::command_archive())); }