| 
									
										
										
										
											2018-04-09 18:30:15 -07:00
										 |  |  | <div class="compose-media"> | 
					
						
							| 
									
										
										
										
											2018-05-01 17:05:36 -07:00
										 |  |  |   <img src={mediaItem.data.preview_url} alt={mediaItem.file.name}/> | 
					
						
							| 
									
										
										
										
											2018-04-09 18:30:15 -07:00
										 |  |  |   <div class="compose-media-delete"> | 
					
						
							|  |  |  |     <button class="compose-media-delete-button" | 
					
						
							| 
									
										
										
										
											2018-05-01 17:05:36 -07:00
										 |  |  |             aria-label="Delete {mediaItem.file.name}" | 
					
						
							| 
									
										
										
										
											2018-04-09 18:30:15 -07:00
										 |  |  |             on:click="onDeleteMedia()" > | 
					
						
							|  |  |  |       <svg class="compose-media-delete-button-svg"> | 
					
						
							|  |  |  |         <use xlink:href="#fa-times" /> | 
					
						
							|  |  |  |       </svg> | 
					
						
							|  |  |  |     </button> | 
					
						
							|  |  |  |   </div> | 
					
						
							|  |  |  |   <div class="compose-media-alt"> | 
					
						
							|  |  |  |     <input type="text" | 
					
						
							| 
									
										
										
										
											2018-08-17 22:44:53 -07:00
										 |  |  |            class="compose-media-alt-input" | 
					
						
							| 
									
										
										
										
											2018-04-09 18:30:15 -07:00
										 |  |  |            placeholder="Description" | 
					
						
							| 
									
										
										
										
											2018-05-01 17:05:36 -07:00
										 |  |  |            aria-label="Describe {mediaItem.file.name} for the visually impaired" | 
					
						
							| 
									
										
										
										
											2018-04-09 18:30:15 -07:00
										 |  |  |            bind:value=rawText | 
					
						
							|  |  |  |     > | 
					
						
							|  |  |  |   </div> | 
					
						
							|  |  |  | </div> | 
					
						
							|  |  |  | <style> | 
					
						
							|  |  |  |   .compose-media { | 
					
						
							|  |  |  |     height: 200px; | 
					
						
							|  |  |  |     overflow: hidden; | 
					
						
							|  |  |  |     flex-direction: column; | 
					
						
							|  |  |  |     position: relative; | 
					
						
							|  |  |  |     display: flex; | 
					
						
							|  |  |  |     background: var(--main-bg); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   .compose-media img { | 
					
						
							|  |  |  |     object-fit: contain; | 
					
						
							|  |  |  |     object-position: center center; | 
					
						
							|  |  |  |     flex: 1; | 
					
						
							|  |  |  |     height: 100%; | 
					
						
							|  |  |  |     width: 100%; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   .compose-media-alt { | 
					
						
							|  |  |  |     z-index: 10; | 
					
						
							|  |  |  |     position: absolute; | 
					
						
							|  |  |  |     bottom: 0; | 
					
						
							|  |  |  |     left: 0; | 
					
						
							|  |  |  |     right: 0; | 
					
						
							|  |  |  |     display: flex; | 
					
						
							|  |  |  |     justify-content: center; | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2018-08-17 22:44:53 -07:00
										 |  |  |   .compose-media-alt-input { | 
					
						
							| 
									
										
										
										
											2018-04-09 18:30:15 -07:00
										 |  |  |     width: 100%; | 
					
						
							|  |  |  |     font-size: 1.2em; | 
					
						
							|  |  |  |     background: var(--alt-input-bg); | 
					
						
							| 
									
										
										
										
											2018-08-17 22:44:53 -07:00
										 |  |  |     color: var(--body-text-color); | 
					
						
							| 
									
										
										
										
											2018-04-09 18:30:15 -07:00
										 |  |  |   } | 
					
						
							| 
									
										
										
										
											2018-08-17 22:44:53 -07:00
										 |  |  |   .compose-media-alt-input:focus { | 
					
						
							| 
									
										
										
										
											2018-04-09 18:30:15 -07:00
										 |  |  |     background: var(--main-bg); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   .compose-media-delete { | 
					
						
							|  |  |  |     position: absolute; | 
					
						
							|  |  |  |     z-index: 10; | 
					
						
							|  |  |  |     top: 0; | 
					
						
							|  |  |  |     right: 0; | 
					
						
							|  |  |  |     left: 0; | 
					
						
							|  |  |  |     display: flex; | 
					
						
							|  |  |  |     justify-content: flex-end; | 
					
						
							|  |  |  |     margin: 2px; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   .compose-media-delete-button { | 
					
						
							|  |  |  |     padding: 10px; | 
					
						
							|  |  |  |     background: none; | 
					
						
							|  |  |  |     border: none; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   .compose-media-delete-button:hover { | 
					
						
							|  |  |  |     background: var(--toast-border); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   .compose-media-delete-button-svg { | 
					
						
							|  |  |  |     fill: var(--button-text); | 
					
						
							|  |  |  |     width: 18px; | 
					
						
							|  |  |  |     height: 18px; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | </style> | 
					
						
							|  |  |  | <script> | 
					
						
							|  |  |  |   import { store } from '../../_store/store' | 
					
						
							|  |  |  |   import { deleteMedia } from '../../_actions/media' | 
					
						
							|  |  |  |   import debounce from 'lodash-es/debounce' | 
					
						
							|  |  |  |   import { scheduleIdleTask } from '../../_utils/scheduleIdleTask' | 
					
						
							| 
									
										
										
										
											2018-04-30 08:29:04 -07:00
										 |  |  |   import { observe } from 'svelte-extras' | 
					
						
							| 
									
										
										
										
											2018-04-09 18:30:15 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |   export default { | 
					
						
							| 
									
										
										
										
											2018-04-19 21:38:01 -07:00
										 |  |  |     oncreate () { | 
					
						
							| 
									
										
										
										
											2018-04-09 18:30:15 -07:00
										 |  |  |       this.setupSyncFromStore() | 
					
						
							|  |  |  |       this.setupSyncToStore() | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     data: () => ({ | 
					
						
							|  |  |  |       rawText: '' | 
					
						
							|  |  |  |     }), | 
					
						
							|  |  |  |     store: () => store, | 
					
						
							|  |  |  |     methods: { | 
					
						
							| 
									
										
										
										
											2018-04-30 08:29:04 -07:00
										 |  |  |       observe, | 
					
						
							| 
									
										
										
										
											2018-04-19 21:38:01 -07:00
										 |  |  |       setupSyncFromStore () { | 
					
						
							| 
									
										
										
										
											2018-08-26 18:54:59 -07:00
										 |  |  |         this.observe('media', media => { | 
					
						
							|  |  |  |           media = media || [] | 
					
						
							| 
									
										
										
										
											2018-04-19 09:37:05 -07:00
										 |  |  |           let { index, rawText } = this.get() | 
					
						
							| 
									
										
										
										
											2018-08-26 18:54:59 -07:00
										 |  |  |           let text = (media[index] && media[index].description) || '' | 
					
						
							| 
									
										
										
										
											2018-04-19 09:37:05 -07:00
										 |  |  |           if (rawText !== text) { | 
					
						
							| 
									
										
										
										
											2018-08-29 21:42:57 -07:00
										 |  |  |             this.set({ rawText: text }) | 
					
						
							| 
									
										
										
										
											2018-04-09 18:30:15 -07:00
										 |  |  |           } | 
					
						
							|  |  |  |         }) | 
					
						
							|  |  |  |       }, | 
					
						
							| 
									
										
										
										
											2018-04-19 21:38:01 -07:00
										 |  |  |       setupSyncToStore () { | 
					
						
							| 
									
										
										
										
											2018-04-09 18:30:15 -07:00
										 |  |  |         const saveStore = debounce(() => scheduleIdleTask(() => this.store.save()), 1000) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         this.observe('rawText', rawText => { | 
					
						
							| 
									
										
										
										
											2018-08-26 18:54:59 -07:00
										 |  |  |           let { realm, index, media } = this.get() | 
					
						
							|  |  |  |           if (media[index].description === rawText) { | 
					
						
							| 
									
										
										
										
											2018-04-09 18:30:15 -07:00
										 |  |  |             return | 
					
						
							|  |  |  |           } | 
					
						
							| 
									
										
										
										
											2018-08-26 18:54:59 -07:00
										 |  |  |           media[index].description = rawText | 
					
						
							| 
									
										
										
										
											2018-08-29 21:42:57 -07:00
										 |  |  |           store.setComposeData(realm, { media }) | 
					
						
							| 
									
										
										
										
											2018-04-09 18:30:15 -07:00
										 |  |  |           saveStore() | 
					
						
							| 
									
										
										
										
											2018-08-29 21:42:57 -07:00
										 |  |  |         }, { init: false }) | 
					
						
							| 
									
										
										
										
											2018-04-09 18:30:15 -07:00
										 |  |  |       }, | 
					
						
							| 
									
										
										
										
											2018-04-19 21:38:01 -07:00
										 |  |  |       onDeleteMedia () { | 
					
						
							| 
									
										
										
										
											2018-04-19 09:37:05 -07:00
										 |  |  |         let { | 
					
						
							|  |  |  |           realm, | 
					
						
							|  |  |  |           index | 
					
						
							|  |  |  |         } = this.get() | 
					
						
							|  |  |  |         deleteMedia(realm, index) | 
					
						
							| 
									
										
										
										
											2018-04-09 18:30:15 -07:00
										 |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | </script> |