Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 1 addition & 5 deletions example/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,10 @@ description: Examples
version: 0.0.1

environment:
sdk: '>=1.20.1 <2.0.0'
sdk: '>=2.12.1 <3.0.0'

dependencies:
clippy:
path: '../'

dev_dependencies:
test: ^0.12.0
build_runner: ^0.10.0
build_test: ^0.10.2
build_web_compilers: ^0.4.0
6 changes: 3 additions & 3 deletions example/web/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@ main() {
final copyElementBtn = document.querySelector('.copy-element-btn');
final copyElementTarget = document.querySelector('.copy-element-target');

copyTextBtn.onClick.listen((_) {
copyTextBtn?.onClick.listen((_) {
clippy.write(new DateTime.now().toIso8601String());
addAction('Copy: from plain text');
});
copyElementBtn.onClick.listen((_) {
copyElementBtn?.onClick.listen((_) {
clippy.write(copyElementTarget);
addAction('Copy: from element');
});
Expand All @@ -22,5 +22,5 @@ main() {
addAction(text) {
final ul = document.querySelector('.actions');

ul.children.add(new LIElement()..text = text);
ul?.children.add(new LIElement()..text = text);
}
10 changes: 5 additions & 5 deletions lib/browser.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ Future<bool> write([input]) async {
if (input is Element) {
return await clipboard.write(input);
} else if (input is String) {
return await _writeText(input);
return await _writeText(input) ?? false;
} else {
return await clipboard.write();
}
Expand All @@ -18,13 +18,13 @@ Stream<String> get onPaste => clipboard.onPaste;

Future<Null> _writeText(String text) async {
final element = _createFakeElement(text);
document.body.children.add(element);
document.body?.children.add(element);
await clipboard.write(element);
document.body.children.remove(element);
document.body?.children.remove(element);
}

TextAreaElement _createFakeElement(String text) {
final isRtl = document.documentElement.getAttribute('dir') == 'rtl';
final isRtl = document.documentElement?.getAttribute('dir') == 'rtl';
final fakeElem = new TextAreaElement();

// Prevent zooming on iOS
Expand All @@ -42,7 +42,7 @@ TextAreaElement _createFakeElement(String text) {
fakeElem.style.left = '-9999px';
}
// Move element to the same position vertically
final yPosition = window.pageYOffset ?? document.documentElement.scrollTop;
final yPosition = window.pageYOffset;
fakeElem.style.top = '${yPosition}px';

fakeElem.setAttribute('readonly', '');
Expand Down
20 changes: 10 additions & 10 deletions lib/src/browser.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@ import 'package:clippy/src/clipboard.dart';

class BrowserClipboard implements Clipboard {
@override
Future<bool> write([covariant Element element]) async {
Future<bool> write([covariant Element? element]) async {
if (element != null) {
selectText(element);
}
var result = document.execCommand('copy');

if (element != null) {
window.getSelection().removeAllRanges();
window.getSelection()?.removeAllRanges();
}
return result;
}
Expand All @@ -27,15 +27,15 @@ class BrowserClipboard implements Clipboard {
}

String _textConverter(ClipboardEvent input) {
return input.clipboardData.getData('text/plain');
return input.clipboardData?.getData('text/plain') ?? "";
}

selectText(Element element) {
var selectedText = '';

if (element is SelectElement) {
element.focus();
selectedText = element.value;
selectedText = element.value ?? '';
} else if (element is InputElement) {
final isReadOnly = element.getAttribute('readonly') != null;

Expand All @@ -44,13 +44,13 @@ selectText(Element element) {
}

element.select();
element.setSelectionRange(0, element.value.length);
element.setSelectionRange(0, element.value?.length ?? 0);

if (!isReadOnly) {
element.attributes.remove('readonly');
}

selectedText = element.value;
selectedText = element.value ?? '';
} else if (element is TextAreaElement) {
final isReadOnly = element.getAttribute('readonly') != null;

Expand All @@ -59,13 +59,13 @@ selectText(Element element) {
}

element.select();
element.setSelectionRange(0, element.value.length);
element.setSelectionRange(0, element.value?.length ?? 0);

if (!isReadOnly) {
element.attributes.remove('readonly');
}

selectedText = element.value;
selectedText = element.value ?? '';
} else {
if (element.getAttribute('contenteditable') != null) {
element.focus();
Expand All @@ -75,8 +75,8 @@ selectText(Element element) {
var range = document.createRange();

range.selectNodeContents(element);
selection.removeAllRanges();
selection.addRange(range);
selection?.removeAllRanges();
selection?.addRange(range);

selectedText = selection.toString();
}
Expand Down
4 changes: 2 additions & 2 deletions pubspec.yaml
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
name: clippy
description: Access system clipboard in Dart (Server & Browser).
version: 1.0.0
version: 2.0.0
homepage: https://github.com/andresaraujo/clippy
author: Andres Araujo <a.araujo.azua@gmail.com>

environment:
sdk: '>=2.0.0-dev <3.0.0'
sdk: '>=2.12.0-dev <3.0.0'

dependencies:
path: ^1.4.2
Expand Down