<div class="status-spoiler {{isStatusInNotification ? 'status-in-notification' : ''}} {{isStatusInOwnThread ? 'status-in-own-thread' : ''}}"> <p>{{originalStatus.spoiler_text}}</p> </div> <div class="status-spoiler-button {{isStatusInOwnThread ? 'status-in-own-thread' : ''}}"> <button type="button" delegate-key="{{delegateKey}}"> {{spoilerShown ? 'Show less' : 'Show more'}} </button> </div> <style> .status-spoiler { grid-area: spoiler; word-wrap: break-word; overflow: hidden; white-space: pre-wrap; font-size: 0.9em; margin: 10px 5px; } .status-spoiler.status-in-own-thread { font-size: 1.3em; margin: 20px 5px 10px; } .status-spoiler.status-in-notification { color: var(--very-deemphasized-text-color); } .status-spoiler-button { grid-area: spoiler-btn; margin: 10px 5px; } .status-spoiler-button.status-in-own-thread { } .status-spoiler-button button { padding: 5px 10px; font-size: 1.1em; } </style> <script> import { store } from '../../_store/store' import { registerClickDelegate, unregisterClickDelegate } from '../../_utils/delegate' import { mark, stop } from '../../_utils/marks' export default { oncreate() { registerClickDelegate(this.get('delegateKey'), () => this.onClickSpoilerButton()) }, ondestroy() { unregisterClickDelegate(this.get('delegateKey')) }, store: () => store, computed: { delegateKey: (uuid) => `spoiler-${uuid}` }, methods: { onClickSpoilerButton() { requestAnimationFrame(() => { mark('clickSpoilerButton') let uuid = this.get('uuid') let $spoilersShown = this.store.get('spoilersShown') $spoilersShown[uuid] = !$spoilersShown[uuid] this.store.set({'spoilersShown': $spoilersShown}) this.fire('recalculateHeight') stop('clickSpoilerButton') }) } } } </script>