parent
							
								
									a875386539
								
							
						
					
					
						commit
						a82c44c21f
					
				
					 6 changed files with 42 additions and 5 deletions
				
			
		| 
						 | 
				
			
			@ -22,7 +22,7 @@ export async function insertHandleForReply (statusId) {
 | 
			
		|||
 | 
			
		||||
export async function postStatus (realm, text, inReplyToId, mediaIds,
 | 
			
		||||
                                  sensitive, spoilerText, visibility,
 | 
			
		||||
                                  mediaDescriptions = []) {
 | 
			
		||||
                                  mediaDescriptions = [], inReplyToUuid) {
 | 
			
		||||
  let instanceName = store.get('currentInstance')
 | 
			
		||||
  let accessToken = store.get('accessToken')
 | 
			
		||||
  let online = store.get('online')
 | 
			
		||||
| 
						 | 
				
			
			@ -43,7 +43,7 @@ export async function postStatus (realm, text, inReplyToId, mediaIds,
 | 
			
		|||
      inReplyToId, mediaIds, sensitive, spoilerText, visibility)
 | 
			
		||||
    addStatusOrNotification(instanceName, 'home', status)
 | 
			
		||||
    store.clearComposeData(realm)
 | 
			
		||||
    emit('postedStatus', realm)
 | 
			
		||||
    emit('postedStatus', realm, inReplyToUuid)
 | 
			
		||||
  } catch (e) {
 | 
			
		||||
    console.error(e)
 | 
			
		||||
    toast.say('Unable to post status: ' + (e.message || ''))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -215,6 +215,7 @@
 | 
			
		|||
        let inReplyTo = (realm === 'home' || realm === 'dialog') ? null : realm
 | 
			
		||||
        let overLimit = this.get('overLimit')
 | 
			
		||||
        let mediaDescriptions = this.get('mediaDescriptions')
 | 
			
		||||
        let inReplyToUuid = this.get('inReplyToUuid')
 | 
			
		||||
 | 
			
		||||
        if (!text || overLimit) {
 | 
			
		||||
          return // do nothing if invalid
 | 
			
		||||
| 
						 | 
				
			
			@ -222,7 +223,8 @@
 | 
			
		|||
 | 
			
		||||
        /* no await */
 | 
			
		||||
        postStatus(realm, text, inReplyTo, mediaIds,
 | 
			
		||||
          sensitive, contentWarning, postPrivacyKey, mediaDescriptions)
 | 
			
		||||
          sensitive, contentWarning, postPrivacyKey,
 | 
			
		||||
          mediaDescriptions, inReplyToUuid)
 | 
			
		||||
      },
 | 
			
		||||
      setupStickyObserver() {
 | 
			
		||||
        this.__stickyObserver = new IntersectionObserver(entries => {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,7 +5,7 @@
 | 
			
		|||
         aria-posinset="{{index}}"
 | 
			
		||||
         aria-setsize="{{length}}"
 | 
			
		||||
         aria-label="{{ariaLabel}}"
 | 
			
		||||
         on:recalculateHeight >
 | 
			
		||||
         on:recalculateHeight>
 | 
			
		||||
  {{#if showHeader}}
 | 
			
		||||
    <StatusHeader :notification :notificationId :status :statusId :timelineType
 | 
			
		||||
                  :account :accountId :uuid :isStatusInNotification />
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,6 +6,7 @@
 | 
			
		|||
              isReply="true"
 | 
			
		||||
              replyVisibility="{{visibility}}"
 | 
			
		||||
              replySpoiler="{{spoilerText}}"
 | 
			
		||||
              inReplyToUuid="{{uuid}}"
 | 
			
		||||
  />
 | 
			
		||||
</div>
 | 
			
		||||
<style>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,6 @@
 | 
			
		|||
<div class="status-toolbar {{isStatusInOwnThread ? 'status-in-own-thread' : ''}}">
 | 
			
		||||
<div class="status-toolbar {{isStatusInOwnThread ? 'status-in-own-thread' : ''}}" ref:node>
 | 
			
		||||
  <IconButton
 | 
			
		||||
    className="status-toolbar-reply-button"
 | 
			
		||||
    label="{{replyLabel}}"
 | 
			
		||||
    pressable="true"
 | 
			
		||||
    pressed="{{replyShown}}"
 | 
			
		||||
| 
						 | 
				
			
			@ -49,6 +50,7 @@
 | 
			
		|||
  import { importDialogs } from '../../_utils/asyncModules'
 | 
			
		||||
  import { updateProfileAndRelationship } from '../../_actions/accounts'
 | 
			
		||||
  import { FAVORITE_ANIMATION, REBLOG_ANIMATION } from '../../_static/animations'
 | 
			
		||||
  import { on } from '../../_utils/eventBus'
 | 
			
		||||
 | 
			
		||||
  export default {
 | 
			
		||||
    oncreate() {
 | 
			
		||||
| 
						 | 
				
			
			@ -56,6 +58,7 @@
 | 
			
		|||
      registerClickDelegate(this.get('reblogKey'), (e) => this.onReblogClick(e))
 | 
			
		||||
      registerClickDelegate(this.get('replyKey'), (e) => this.onReplyClick(e))
 | 
			
		||||
      registerClickDelegate(this.get('optionsKey'), (e) => this.onOptionsClick(e))
 | 
			
		||||
      on('postedStatus', this, this.onPostedStatus)
 | 
			
		||||
    },
 | 
			
		||||
    ondestroy() {
 | 
			
		||||
      unregisterClickDelegate(this.get('favoriteKey'))
 | 
			
		||||
| 
						 | 
				
			
			@ -104,6 +107,16 @@
 | 
			
		|||
        let dialogs = await importDialogs()
 | 
			
		||||
        await updateRelationshipPromise
 | 
			
		||||
        dialogs.showStatusOptionsDialog(originalStatusId)
 | 
			
		||||
      },
 | 
			
		||||
      onPostedStatus(realm, inReplyToUuid) {
 | 
			
		||||
        if (realm !== this.get('originalStatusId') ||
 | 
			
		||||
            inReplyToUuid !== this.get('uuid')) {
 | 
			
		||||
          return
 | 
			
		||||
        }
 | 
			
		||||
        try {
 | 
			
		||||
          // return status to the reply button after posting a reply
 | 
			
		||||
          this.refs.node.querySelector('.status-toolbar-reply-button').focus()
 | 
			
		||||
        } catch (e) { /* ignore */ }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    data: () => ({
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										21
									
								
								tests/spec/111-focus.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								tests/spec/111-focus.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,21 @@
 | 
			
		|||
import {
 | 
			
		||||
  composeInput, getActiveElementClass,
 | 
			
		||||
  getNthComposeReplyButton,
 | 
			
		||||
  getNthComposeReplyInput, getNthReplyButton,
 | 
			
		||||
  getNthStatus
 | 
			
		||||
} from '../utils'
 | 
			
		||||
import { foobarRole } from '../roles'
 | 
			
		||||
 | 
			
		||||
fixture`111-focus.js`
 | 
			
		||||
  .page`http://localhost:4002`
 | 
			
		||||
 | 
			
		||||
test('replying to a toot returns focus to reply button', async t => {
 | 
			
		||||
  await t.useRole(foobarRole)
 | 
			
		||||
    .typeText(composeInput, 'I would like, if I may, to take you on a strange journey', {paste: true})
 | 
			
		||||
    .pressKey('ctrl+enter')
 | 
			
		||||
    .expect(getNthStatus(0).find('.status-content').innerText).contains('I would like, if I may, to take you on a strange journey')
 | 
			
		||||
    .click(getNthReplyButton(0))
 | 
			
		||||
    .typeText(getNthComposeReplyInput(0), 'How strange was it?', {paste: true})
 | 
			
		||||
    .click(getNthComposeReplyButton(0))
 | 
			
		||||
    .expect(getActiveElementClass()).contains('status-toolbar-reply-button', {timeout: 20000})
 | 
			
		||||
})
 | 
			
		||||
		Loading…
	
	Add table
		
		Reference in a new issue