From 461b8e21594855d8212098b870bb20ab73a6a0d1 Mon Sep 17 00:00:00 2001 From: Gustavo Maximiliano Cortez Date: Thu, 9 Nov 2017 18:21:08 -0300 Subject: [PATCH 1/2] Copy to clipboard directive --- package.json | 1 - src/app/app.module.ts | 10 +++- .../copy-to-clipboard/copy-to-clipboard.ts | 56 +++++++++++++++++++ src/pages/receive/receive.html | 4 +- 4 files changed, 67 insertions(+), 4 deletions(-) create mode 100644 src/directives/copy-to-clipboard/copy-to-clipboard.ts diff --git a/package.json b/package.json index e99b7dd21..0196774c6 100644 --- a/package.json +++ b/package.json @@ -111,7 +111,6 @@ "ionic-plugin-keyboard": "^2.2.1", "ionicons": "^3.0.0", "lodash": "^4.17.4", - "ngx-clipboard": "^8.1.1", "preconditions": "^2.2.0", "rxjs": "^5.5.2", "simple-plist": "^0.2.1", diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 3c1d87647..112caba4f 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -94,10 +94,18 @@ import { TxConfirmNotificationProvider } from '../providers/tx-confirm-notificat import { TxFormatProvider } from '../providers/tx-format/tx-format'; import { WalletProvider } from '../providers/wallet/wallet'; +/* Directives */ + +import { CopyToClipboard } from '../directives/copy-to-clipboard/copy-to-clipboard'; + export function createTranslateLoader(http: HttpClient) { return new TranslatePoHttpLoader(http, 'assets/i18n', '.po'); } +let declarations: any = [ + CopyToClipboard +]; + let pages: any = [ AddPage, ChooseFeeLevelPage, @@ -187,7 +195,7 @@ let providers: any = [ ]; export function declarationsComponents() { - return pages; + return pages.concat(declarations); } export function entryComponents() { diff --git a/src/directives/copy-to-clipboard/copy-to-clipboard.ts b/src/directives/copy-to-clipboard/copy-to-clipboard.ts new file mode 100644 index 000000000..b11fe7617 --- /dev/null +++ b/src/directives/copy-to-clipboard/copy-to-clipboard.ts @@ -0,0 +1,56 @@ +import { DOCUMENT } from "@angular/platform-browser"; +import { Directive, Inject } from '@angular/core'; +import { ToastController } from 'ionic-angular'; +import { Clipboard } from '@ionic-native/clipboard'; +import { PlatformProvider } from '../../providers/platform/platform'; + +@Directive({ + selector: '[copy-to-clipboard]', // Attribute selector + inputs: [ 'value: copy-to-clipboard' ], + host: { + '(click)': 'copy()' + } +}) +export class CopyToClipboard { + + public value: string; + private dom: Document; + private isCordova: boolean; + private isNW: boolean; + + constructor( + @Inject( DOCUMENT ) dom: Document, + public toastCtrl: ToastController, + public clipboard: Clipboard, + public platform: PlatformProvider + ) { + console.log('Hello CopyToClipboardDirective Directive'); + this.isCordova = this.platform.isCordova; + this.isNW = this.platform.isNW; + this.dom = dom; + } + + private copyBrowser() { + let textarea = this.dom.createElement('textarea'); + this.dom.body.appendChild( textarea ); + textarea.value = this.value; + textarea.select(); + this.dom.execCommand('copy'); + } + + public copy() { + if (this.isCordova) { + this.clipboard.copy(this.value); + } else if (this.isNW) { + // TODO: Node-webkit won't be supported + } else { + this.copyBrowser(); + } + let showSuccess = this.toastCtrl.create({ + message: 'Copied to clipboard', + duration: 1000, + }); + showSuccess.present(); + } + +} diff --git a/src/pages/receive/receive.html b/src/pages/receive/receive.html index 4eac6ab36..b82af0fb6 100644 --- a/src/pages/receive/receive.html +++ b/src/pages/receive/receive.html @@ -14,8 +14,8 @@
- -
{{ address }}
+ +
{{ address }}