61842beb3b
* ui: Add with-copyable modifier * Use with-copyable modifier for our own CopyButton * Move copy-button styling and remove most of `copy-btn`
80 lines
2.5 KiB
Plaintext
80 lines
2.5 KiB
Plaintext
# with-copyable
|
|
|
|
Modifier for adding copy-to-clipboard functionality to any component to allow
|
|
the user to easily copy specified text to their clipboard by clicking on
|
|
something. Mainly an Ember flavoured wrapper for
|
|
[Clipboard.js](https://clipboardjs.com/) which the modifier uses for all its
|
|
functionality.
|
|
|
|
You can either explicitly specify the content to be copied to the users
|
|
clipboard using the first (and only) parameter but if this is omitted it will
|
|
use the content (`innerText`) of the DOM element it is attached to.
|
|
|
|
Usually you will want to provide a `success` and `error` callback which you
|
|
can provide with named parameters. An escape hatch through to Clipboard.js
|
|
options is also provided via the `options` named parameter.
|
|
|
|
|
|
```hbs preview-template
|
|
<figure>
|
|
<figcaption>Explicitly specifying the text to be copied as the first parameter</figcaption>
|
|
<button
|
|
{{with-copyable "Copied text"
|
|
success=(action (mut this.copied) value="text")
|
|
error=(noop)
|
|
}}
|
|
type="button"
|
|
>Click me</button>
|
|
|
|
<pre>Clipboard Contents:
|
|
{{this.copied}}</pre>
|
|
</figure>
|
|
```
|
|
|
|
```hbs preview-template
|
|
<figure>
|
|
<figcaption>Defaulting to the innerText of the DOM element</figcaption>
|
|
<button
|
|
{{with-copyable success=(action (mut this.copied) value="text")}}
|
|
type="button"
|
|
>Click <span><br />me</span></button>
|
|
|
|
<pre>Clipboard Contents:
|
|
{{this.copied}}</pre>
|
|
</figure>
|
|
```
|
|
|
|
The Clipboard.js class is provided via a `clipboard/os` Service, also includes
|
|
a `clipboard/local-storage` Service that automatically replaces the OS based
|
|
clipboard during testing to enable you to assert for text that would be copied
|
|
to the clipboard. During acceptance testing there is a specific step
|
|
specifically for this so you don't have to think about it:
|
|
|
|
```gherkin acceptance-test
|
|
Scenario:
|
|
When I click copyButton
|
|
Then I copied "stringToCopy"
|
|
```
|
|
|
|
## Positional Arguments
|
|
|
|
| Argument | Type | Default | Description |
|
|
| --- | --- | --- | --- |
|
|
| `value` | `String` | The `innerText` of the element | The string to be copied to the clipboard on click |
|
|
|
|
## Named Arguments
|
|
|
|
| Argument | Type | Default | Description |
|
|
| --- | --- | --- | --- |
|
|
| `success` | `Function` | `(e) => {}` | A function to be called when the text has been successfully copied to the users clipboard |
|
|
| `error` | `Function` | `(e) => {}` | A function to be called when there was an error copying text to the users clipboard |
|
|
| `options` | `Object` | `{}` | An object containing any documented Clipboard.js options |
|
|
|
|
|
|
|
|
## See
|
|
|
|
- [Modifier Source Code](./index.js)
|
|
|
|
---
|