diff --git a/routes/_actions/autosuggest.js b/routes/_actions/autosuggest.js new file mode 100644 index 0000000..43facca --- /dev/null +++ b/routes/_actions/autosuggest.js @@ -0,0 +1,62 @@ +import { store } from '../_store/store' + +export async function insertUsername (realm, username, startIndex, endIndex) { + let { currentInstance } = store.get() + let oldText = store.getComposeData(realm, 'text') + let pre = oldText.substring(0, startIndex) + let post = oldText.substring(endIndex) + let newText = `${pre}@${username} ${post}` + store.setComposeData(realm, {text: newText}) + store.setForAutosuggest(currentInstance, realm, {autosuggestSearchResults: []}) +} + +export async function clickSelectedAutosuggestionUsername (realm) { + let { + composeSelectionStart, + autosuggestSearchText, + autosuggestSelected, + autosuggestSearchResults + } = store.get() + let account = autosuggestSearchResults[autosuggestSelected] + let startIndex = composeSelectionStart - autosuggestSearchText.length + let endIndex = composeSelectionStart + await insertUsername(realm, account.acct, startIndex, endIndex) +} + +export function insertEmojiAtPosition (realm, emoji, startIndex, endIndex) { + let { currentInstance } = store.get() + let oldText = store.getComposeData(realm, 'text') || '' + let pre = oldText.substring(0, startIndex) + let post = oldText.substring(endIndex) + let newText = `${pre}:${emoji.shortcode}: ${post}` + store.setComposeData(realm, {text: newText}) + store.setForAutosuggest(currentInstance, realm, {autosuggestSearchResults: []}) +} + +export async function clickSelectedAutosuggestionEmoji (realm) { + let { + composeSelectionStart, + autosuggestSearchText, + autosuggestSelected, + autosuggestSearchResults + } = store.get() + let emoji = autosuggestSearchResults[autosuggestSelected] + let startIndex = composeSelectionStart - autosuggestSearchText.length + let endIndex = composeSelectionStart + await insertEmojiAtPosition(realm, emoji, startIndex, endIndex) +} + +export function selectAutosuggestItem (item) { + let { + currentComposeRealm, + composeSelectionStart, + autosuggestSearchText + } = store.get() + let startIndex = composeSelectionStart - autosuggestSearchText.length + let endIndex = composeSelectionStart + if (item.acct) { + /* no await */ insertUsername(currentComposeRealm, item.acct, startIndex, endIndex) + } else { + /* no await */ insertEmojiAtPosition(currentComposeRealm, item, startIndex, endIndex) + } +} diff --git a/routes/_actions/compose.js b/routes/_actions/compose.js index 5a763d1..81d432a 100644 --- a/routes/_actions/compose.js +++ b/routes/_actions/compose.js @@ -50,28 +50,6 @@ export async function postStatus (realm, text, inReplyToId, mediaIds, } } -export async function insertUsername (realm, username, startIndex, endIndex) { - let oldText = store.getComposeData(realm, 'text') - let pre = oldText.substring(0, startIndex) - let post = oldText.substring(endIndex) - let newText = `${pre}@${username} ${post}` - store.setComposeData(realm, {text: newText}) -} - -export async function clickSelectedAutosuggestionUsername (realm) { - let { - composeSelectionStart, - composeAutosuggestionSearchText, - composeAutosuggestionSelected, - composeAutosuggestionSearchResults - } = store.get() - composeAutosuggestionSelected = composeAutosuggestionSelected || 0 - let account = composeAutosuggestionSearchResults[composeAutosuggestionSelected] - let startIndex = composeSelectionStart - composeAutosuggestionSearchText.length - let endIndex = composeSelectionStart - await insertUsername(realm, account.acct, startIndex, endIndex) -} - export function setReplySpoiler (realm, spoiler) { let contentWarning = store.getComposeData(realm, 'contentWarning') let contentWarningShown = store.getComposeData(realm, 'contentWarningShown') diff --git a/routes/_actions/emoji.js b/routes/_actions/emoji.js index d63a6a2..7877bfe 100644 --- a/routes/_actions/emoji.js +++ b/routes/_actions/emoji.js @@ -28,25 +28,3 @@ export function insertEmoji (realm, emoji) { let newText = `${pre}:${emoji.shortcode}: ${post}` store.setComposeData(realm, {text: newText}) } - -export function insertEmojiAtPosition (realm, emoji, startIndex, endIndex) { - let oldText = store.getComposeData(realm, 'text') || '' - let pre = oldText.substring(0, startIndex) - let post = oldText.substring(endIndex) - let newText = `${pre}:${emoji.shortcode}: ${post}` - store.setComposeData(realm, {text: newText}) -} - -export async function clickSelectedAutosuggestionEmoji (realm) { - let { - composeSelectionStart, - composeAutosuggestionSearchText, - composeAutosuggestionSelected, - composeAutosuggestionSearchResults - } = store.get() - composeAutosuggestionSelected = composeAutosuggestionSelected || 0 - let emoji = composeAutosuggestionSearchResults[composeAutosuggestionSelected] - let startIndex = composeSelectionStart - composeAutosuggestionSearchText.length - let endIndex = composeSelectionStart - await insertEmojiAtPosition(realm, emoji, startIndex, endIndex) -} diff --git a/routes/_components/compose/ComposeAutosuggest.html b/routes/_components/compose/ComposeAutosuggest.html index e7c6a9f..b12902b 100644 --- a/routes/_components/compose/ComposeAutosuggest.html +++ b/routes/_components/compose/ComposeAutosuggest.html @@ -1,10 +1,10 @@