forked from cybrespace/pinafore
		
	
		
			
				
	
	
		
			64 lines
		
	
	
		
			No EOL
		
	
	
		
			1.4 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			No EOL
		
	
	
		
			1.4 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <ModalDialog
 | |
|   {id}
 | |
|   {label}
 | |
|   {title}
 | |
|   background="var(--main-bg)"
 | |
| >
 | |
|   <form class="copy-dialog-form">
 | |
|     <input value={text}
 | |
|            ref:input
 | |
|     >
 | |
|     <button type="button" on:click="onClick()">
 | |
|       Copy
 | |
|     </button>
 | |
|   </form>
 | |
| </ModalDialog>
 | |
| <style>
 | |
|   .copy-dialog-form {
 | |
|     display: grid;
 | |
|     grid-template-rows: min-content min-content;
 | |
|     grid-template-columns: 1fr;
 | |
|     grid-gap: 10px;
 | |
|     padding: 10px 20px;
 | |
|     width: 400px;
 | |
|     max-width: calc(100vw - 40px);
 | |
|   }
 | |
| </style>
 | |
| <script>
 | |
|   import ModalDialog from './ModalDialog.html'
 | |
|   import { show } from '../helpers/showDialog'
 | |
|   import { close } from '../helpers/closeDialog'
 | |
|   import { oncreate as onCreateDialog } from '../helpers/onCreateDialog'
 | |
|   import { toast } from '../../../_utils/toast'
 | |
|   import { doubleRAF } from '../../../_utils/doubleRAF'
 | |
| 
 | |
|   export default {
 | |
|     oncreate () {
 | |
|       onCreateDialog.call(this)
 | |
|       let { text } = this.get()
 | |
|       let { input } = this.refs
 | |
|       // double raf is to work around a11y-dialog trying to set the input
 | |
|       doubleRAF(() => {
 | |
|         input.focus()
 | |
|         input.setSelectionRange(0, text.length)
 | |
|       })
 | |
|     },
 | |
|     methods: {
 | |
|       show,
 | |
|       close,
 | |
|       onClick () {
 | |
|         let { input } = this.refs
 | |
|         input.select()
 | |
|         document.execCommand('copy')
 | |
|         toast.say('Copied to clipboard')
 | |
|         this.close()
 | |
|       }
 | |
|     },
 | |
|     data: () => ({
 | |
|       text: ''
 | |
|     }),
 | |
|     components: {
 | |
|       ModalDialog
 | |
|     }
 | |
|   }
 | |
| </script> |