aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShpuld Shpludson <shp@cock.li>2020-09-04 08:38:13 +0000
committerShpuld Shpludson <shp@cock.li>2020-09-04 08:38:13 +0000
commite331db79e50d4056cf61baa5ece88ad74e7e7fcf (patch)
tree5ed760ab6d5b267625169bffc424103a891a8b41 /src
parentc89ac79140e059f89d4da88ce49c9bb24db4cc20 (diff)
parenta73b09c73202117ffa3fecf7a9185981d6696912 (diff)
Merge branch 'develop' into 'fix/wait-for-request-before-starting-interval'
# Conflicts: # CHANGELOG.md
Diffstat (limited to 'src')
-rw-r--r--src/components/password_reset/password_reset.js5
-rw-r--r--src/components/post_status_form/post_status_form.js3
-rw-r--r--src/components/post_status_form/post_status_form.vue7
-rw-r--r--src/components/settings_modal/settings_modal_content.js28
-rw-r--r--src/components/settings_modal/settings_modal_content.vue9
-rw-r--r--src/components/tab_switcher/tab_switcher.js23
-rw-r--r--src/i18n/de.json1
-rw-r--r--src/i18n/en.json1
-rw-r--r--src/i18n/eo.json1
-rw-r--r--src/i18n/es.json1
-rw-r--r--src/i18n/eu.json1
-rw-r--r--src/i18n/fi.json1
-rw-r--r--src/i18n/fr.json1
-rw-r--r--src/i18n/it.json1
-rw-r--r--src/i18n/ja_easy.json1
-rw-r--r--src/i18n/ja_pedantic.json1
-rw-r--r--src/i18n/nl.json1
-rw-r--r--src/i18n/pl.json1
-rw-r--r--src/i18n/ru.json1
-rw-r--r--src/i18n/zh.json1
-rw-r--r--src/modules/interface.js11
-rw-r--r--src/services/completion/completion.js50
22 files changed, 94 insertions, 56 deletions
diff --git a/src/components/password_reset/password_reset.js b/src/components/password_reset/password_reset.js
index 62e74e30..5d21d720 100644
--- a/src/components/password_reset/password_reset.js
+++ b/src/components/password_reset/password_reset.js
@@ -47,11 +47,6 @@ const passwordReset = {
if (status === 204) {
this.success = true
this.error = null
- } else if (status === 404 || status === 400) {
- this.error = this.$t('password_reset.not_found')
- this.$nextTick(() => {
- this.$refs.email.focus()
- })
} else if (status === 429) {
this.throttled = true
this.error = this.$t('password_reset.too_many_requests')
diff --git a/src/components/post_status_form/post_status_form.js b/src/components/post_status_form/post_status_form.js
index e7094bec..ad149506 100644
--- a/src/components/post_status_form/post_status_form.js
+++ b/src/components/post_status_form/post_status_form.js
@@ -555,6 +555,9 @@ const PostStatusForm = {
},
updateIdempotencyKey () {
this.idempotencyKey = Date.now().toString()
+ },
+ openProfileTab () {
+ this.$store.dispatch('openSettingsModalTab', 'profile')
}
}
}
diff --git a/src/components/post_status_form/post_status_form.vue b/src/components/post_status_form/post_status_form.vue
index 520c03ea..d67d9ae9 100644
--- a/src/components/post_status_form/post_status_form.vue
+++ b/src/components/post_status_form/post_status_form.vue
@@ -23,9 +23,12 @@
tag="p"
class="visibility-notice"
>
- <router-link :to="{ name: 'user-settings' }">
+ <a
+ href="#"
+ @click="openProfileTab"
+ >
{{ $t('post_status.account_not_locked_warning_link') }}
- </router-link>
+ </a>
</i18n>
<p
v-if="!hideScopeNotice && newStatus.visibility === 'public'"
diff --git a/src/components/settings_modal/settings_modal_content.js b/src/components/settings_modal/settings_modal_content.js
index 48101a90..ef1a5ffa 100644
--- a/src/components/settings_modal/settings_modal_content.js
+++ b/src/components/settings_modal/settings_modal_content.js
@@ -27,6 +27,34 @@ const SettingsModalContent = {
computed: {
isLoggedIn () {
return !!this.$store.state.users.currentUser
+ },
+ open () {
+ return this.$store.state.interface.settingsModalState !== 'hidden'
+ }
+ },
+ methods: {
+ onOpen () {
+ const targetTab = this.$store.state.interface.settingsModalTargetTab
+ // We're being told to open in specific tab
+ if (targetTab) {
+ const tabIndex = this.$refs.tabSwitcher.$slots.default.findIndex(elm => {
+ return elm.data && elm.data.attrs['data-tab-name'] === targetTab
+ })
+ if (tabIndex >= 0) {
+ this.$refs.tabSwitcher.setTab(tabIndex)
+ }
+ }
+ // Clear the state of target tab, so that next time settings is opened
+ // it doesn't force it.
+ this.$store.dispatch('clearSettingsModalTargetTab')
+ }
+ },
+ mounted () {
+ this.onOpen()
+ },
+ watch: {
+ open: function (value) {
+ if (value) this.onOpen()
}
}
}
diff --git a/src/components/settings_modal/settings_modal_content.vue b/src/components/settings_modal/settings_modal_content.vue
index 2156844f..bc30a0ff 100644
--- a/src/components/settings_modal/settings_modal_content.vue
+++ b/src/components/settings_modal/settings_modal_content.vue
@@ -8,6 +8,7 @@
<div
:label="$t('settings.general')"
icon="wrench"
+ data-tab-name="general"
>
<GeneralTab />
</div>
@@ -15,6 +16,7 @@
v-if="isLoggedIn"
:label="$t('settings.profile_tab')"
icon="user"
+ data-tab-name="profile"
>
<ProfileTab />
</div>
@@ -22,18 +24,21 @@
v-if="isLoggedIn"
:label="$t('settings.security_tab')"
icon="lock"
+ data-tab-name="security"
>
<SecurityTab />
</div>
<div
:label="$t('settings.filtering')"
icon="filter"
+ data-tab-name="filtering"
>
<FilteringTab />
</div>
<div
:label="$t('settings.theme')"
icon="brush"
+ data-tab-name="theme"
>
<ThemeTab />
</div>
@@ -41,6 +46,7 @@
v-if="isLoggedIn"
:label="$t('settings.notifications')"
icon="bell-ringing-o"
+ data-tab-name="notifications"
>
<NotificationsTab />
</div>
@@ -48,6 +54,7 @@
v-if="isLoggedIn"
:label="$t('settings.data_import_export_tab')"
icon="download"
+ data-tab-name="dataImportExport"
>
<DataImportExportTab />
</div>
@@ -56,12 +63,14 @@
:label="$t('settings.mutes_and_blocks')"
:fullHeight="true"
icon="eye-off"
+ data-tab-name="mutesAndBlocks"
>
<MutesAndBlocksTab />
</div>
<div
:label="$t('settings.version.title')"
icon="info-circled"
+ data-tab-name="version"
>
<VersionTab />
</div>
diff --git a/src/components/tab_switcher/tab_switcher.js b/src/components/tab_switcher/tab_switcher.js
index 40b5b3ca..9c1da354 100644
--- a/src/components/tab_switcher/tab_switcher.js
+++ b/src/components/tab_switcher/tab_switcher.js
@@ -60,16 +60,19 @@ export default Vue.component('tab-switcher', {
}
},
methods: {
- activateTab (index) {
+ clickTab (index) {
return (e) => {
e.preventDefault()
- if (typeof this.onSwitch === 'function') {
- this.onSwitch.call(null, this.$slots.default[index].key)
- }
- this.active = index
- if (this.scrollableTabs) {
- this.$refs.contents.scrollTop = 0
- }
+ this.setTab(index)
+ }
+ },
+ setTab (index) {
+ if (typeof this.onSwitch === 'function') {
+ this.onSwitch.call(null, this.$slots.default[index].key)
+ }
+ this.active = index
+ if (this.scrollableTabs) {
+ this.$refs.contents.scrollTop = 0
}
}
},
@@ -88,7 +91,7 @@ export default Vue.component('tab-switcher', {
<div class={classesWrapper.join(' ')}>
<button
disabled={slot.data.attrs.disabled}
- onClick={this.activateTab(index)}
+ onClick={this.clickTab(index)}
class={classesTab.join(' ')}>
<img src={slot.data.attrs.image} title={slot.data.attrs['image-tooltip']}/>
{slot.data.attrs.label ? '' : slot.data.attrs.label}
@@ -100,7 +103,7 @@ export default Vue.component('tab-switcher', {
<div class={classesWrapper.join(' ')}>
<button
disabled={slot.data.attrs.disabled}
- onClick={this.activateTab(index)}
+ onClick={this.clickTab(index)}
class={classesTab.join(' ')}
type="button"
>
diff --git a/src/i18n/de.json b/src/i18n/de.json
index 3014b870..6fe6ab2c 100644
--- a/src/i18n/de.json
+++ b/src/i18n/de.json
@@ -478,7 +478,6 @@
"placeholder": "Dein Benutzername oder die zugehörige E-Mail-Adresse",
"check_email": "Im E-Mail-Posteingang des angebenen Kontos müsste sich jetzt (oder zumindest in Kürze) die E-Mail mit dem Link zum Passwortzurücksetzen befinden.",
"return_home": "Zurück zur Heimseite",
- "not_found": "Benutzername/E-Mail-Adresse nicht gefunden. Vertippt?",
"too_many_requests": "Kurze Pause. Zu viele Versuche. Bitte, später nochmal probieren.",
"password_reset_disabled": "Passwortzurücksetzen deaktiviert. Bitte Administrator kontaktieren.",
"password_reset_required": "Passwortzurücksetzen erforderlich.",
diff --git a/src/i18n/en.json b/src/i18n/en.json
index e05ac907..8540f551 100644
--- a/src/i18n/en.json
+++ b/src/i18n/en.json
@@ -774,7 +774,6 @@
"placeholder": "Your email or username",
"check_email": "Check your email for a link to reset your password.",
"return_home": "Return to the home page",
- "not_found": "We couldn't find that email or username.",
"too_many_requests": "You have reached the limit of attempts, try again later.",
"password_reset_disabled": "Password reset is disabled. Please contact your instance administrator.",
"password_reset_required": "You must reset your password to log in.",
diff --git a/src/i18n/eo.json b/src/i18n/eo.json
index b66f557a..e73ac2f8 100644
--- a/src/i18n/eo.json
+++ b/src/i18n/eo.json
@@ -776,7 +776,6 @@
"password_reset_required": "Vi devas restarigi vian pasvorton por saluti.",
"password_reset_disabled": "Restarigado de pasvortoj estas malŝaltita. Bonvolu kontakti la administranton de via nodo.",
"too_many_requests": "Vi atingis la limon de provoj, reprovu pli poste.",
- "not_found": "Ni ne trovis tiun retpoŝtadreson aŭ uzantonomon.",
"return_home": "Reiri al la hejmpaĝo",
"check_email": "Kontrolu vian retpoŝton pro ligilo por restarigi vian pasvorton.",
"placeholder": "Via retpoŝtadreso aŭ uzantonomo",
diff --git a/src/i18n/es.json b/src/i18n/es.json
index 3f313eb3..50bdcfb4 100644
--- a/src/i18n/es.json
+++ b/src/i18n/es.json
@@ -624,7 +624,6 @@
"placeholder": "Su correo electrónico o nombre de usuario",
"check_email": "Revise su correo electrónico para obtener un enlace para restablecer su contraseña.",
"return_home": "Volver a la página de inicio",
- "not_found": "No pudimos encontrar ese correo electrónico o nombre de usuario.",
"too_many_requests": "Has alcanzado el límite de intentos, vuelve a intentarlo más tarde.",
"password_reset_disabled": "El restablecimiento de contraseñas está deshabilitado. Póngase en contacto con el administrador de su instancia."
}
diff --git a/src/i18n/eu.json b/src/i18n/eu.json
index f04203f0..ad3e02a0 100644
--- a/src/i18n/eu.json
+++ b/src/i18n/eu.json
@@ -626,7 +626,6 @@
"placeholder": "Zure e-posta edo erabiltzaile izena",
"check_email": "Begiratu zure posta elektronikoa pasahitza berrezarri ahal izateko.",
"return_home": "Itzuli hasierara",
- "not_found": "Ezin izan dugu helbide elektroniko edo erabiltzaile hori aurkitu.",
"too_many_requests": "Saiakera gehiegi burutu ditzu, saiatu berriro geroxeago.",
"password_reset_disabled": "Pasahitza berrezartzea debekatuta dago. Mesedez, jarri harremanetan instantzia administratzailearekin.",
"password_reset_required": "Pasahitza berrezarri behar duzu saioa hasteko.",
diff --git a/src/i18n/fi.json b/src/i18n/fi.json
index 510b2234..3832dcaa 100644
--- a/src/i18n/fi.json
+++ b/src/i18n/fi.json
@@ -752,7 +752,6 @@
"password_reset": "Salasanan nollaus",
"placeholder": "Sähköpostiosoite tai käyttäjänimi",
"return_home": "Palaa etusivulle",
- "not_found": "Sähköpostiosoitetta tai käyttäjänimeä ei löytynyt.",
"too_many_requests": "Olet käyttänyt kaikki yritykset, yritä uudelleen myöhemmin.",
"password_reset_required": "Sinun täytyy vaihtaa salasana kirjautuaksesi."
},
diff --git a/src/i18n/fr.json b/src/i18n/fr.json
index 794ed812..3b7eefaf 100644
--- a/src/i18n/fr.json
+++ b/src/i18n/fr.json
@@ -730,7 +730,6 @@
"instruction": "Entrer votre address de courriel ou votre nom utilisateur. Nous enverrons un lien pour changer votre mot de passe.",
"placeholder": "Votre email ou nom d'utilisateur",
"return_home": "Retourner à la page d'accueil",
- "not_found": "Email ou nom d'utilisateur inconnu.",
"too_many_requests": "Vos avez atteint la limite d'essais, essayez plus tard.",
"password_reset_required": "Vous devez changer votre mot de passe pour vous authentifier."
}
diff --git a/src/i18n/it.json b/src/i18n/it.json
index b88fdd29..474e7fde 100644
--- a/src/i18n/it.json
+++ b/src/i18n/it.json
@@ -745,7 +745,6 @@
"password_reset_required": "Devi reimpostare la tua password per poter continuare.",
"password_reset_disabled": "Non puoi azzerare la tua password. Contatta il tuo amministratore.",
"too_many_requests": "Hai raggiunto il numero massimo di tentativi, riprova più tardi.",
- "not_found": "Non ho trovato questa email o nome utente.",
"return_home": "Torna alla pagina principale",
"check_email": "Controlla la tua posta elettronica.",
"placeholder": "La tua email o nome utente",
diff --git a/src/i18n/ja_easy.json b/src/i18n/ja_easy.json
index 255648e7..991f3762 100644
--- a/src/i18n/ja_easy.json
+++ b/src/i18n/ja_easy.json
@@ -666,7 +666,6 @@
"placeholder": "あなたのメールアドレスかユーザーめい",
"check_email": "パスワードをリセットするためのリンクがかかれたメールが、とどいているかどうか、みてください。",
"return_home": "ホームページにもどる",
- "not_found": "そのメールアドレスまたはユーザーめいを、みつけることができませんでした。",
"too_many_requests": "パスワードリセットを、ためすことが、おおすぎます。しばらくしてから、ためしてください。",
"password_reset_disabled": "このインスタンスでは、パスワードリセットは、できません。インスタンスのアドミニストレーターに、おといあわせください。",
"password_reset_required": "ログインするには、パスワードをリセットしてください。",
diff --git a/src/i18n/ja_pedantic.json b/src/i18n/ja_pedantic.json
index 07fea45d..e2de1066 100644
--- a/src/i18n/ja_pedantic.json
+++ b/src/i18n/ja_pedantic.json
@@ -625,7 +625,6 @@
"placeholder": "メールアドレスまたはユーザー名",
"check_email": "パスワードをリセットするためのリンクが記載されたメールが届いているか確認してください。",
"return_home": "ホームページに戻る",
- "not_found": "メールアドレスまたはユーザー名が見つかりませんでした。",
"too_many_requests": "試行回数の制限に達しました。しばらく時間を置いてから再試行してください。",
"password_reset_disabled": "このインスタンスではパスワードリセットは無効になっています。インスタンスの管理者に連絡してください。"
}
diff --git a/src/i18n/nl.json b/src/i18n/nl.json
index e7509f12..a01e57a0 100644
--- a/src/i18n/nl.json
+++ b/src/i18n/nl.json
@@ -677,7 +677,6 @@
"password_reset_required": "Je dient je wachtwoord opnieuw in te stellen om in te kunnen loggen.",
"password_reset_disabled": "Wachtwoord reset is uitgeschakeld. Neem contact op met de beheerder van deze instantie.",
"too_many_requests": "Je hebt het maximaal aantal pogingen bereikt, probeer het later opnieuw.",
- "not_found": "We kunnen die email of gebruikersnaam niet vinden.",
"return_home": "Terugkeren naar de home pagina",
"check_email": "Controleer je email inbox voor een link om je wachtwoord opnieuw in te stellen.",
"placeholder": "Je email of gebruikersnaam",
diff --git a/src/i18n/pl.json b/src/i18n/pl.json
index 5863ba8e..05a7edf7 100644
--- a/src/i18n/pl.json
+++ b/src/i18n/pl.json
@@ -753,7 +753,6 @@
"placeholder": "Twój email lub nazwa użytkownika",
"check_email": "Sprawdź pocztę, aby uzyskać link do zresetowania hasła.",
"return_home": "Wróć do strony głównej",
- "not_found": "Nie mogliśmy znaleźć tego emaila lub nazwy użytkownika.",
"too_many_requests": "Przekroczyłeś(-aś) limit prób, spróbuj ponownie później.",
"password_reset_disabled": "Resetowanie hasła jest wyłączone. Proszę skontaktuj się z administratorem tej instancji.",
"password_reset_required": "Musisz zresetować hasło, by się zalogować.",
diff --git a/src/i18n/ru.json b/src/i18n/ru.json
index df172935..3444a26d 100644
--- a/src/i18n/ru.json
+++ b/src/i18n/ru.json
@@ -420,7 +420,6 @@
"placeholder": "Ваш email или имя пользователя",
"check_email": "Проверьте ваш email и перейдите по ссылке для сброса пароля.",
"return_home": "Вернуться на главную страницу",
- "not_found": "Мы не смогли найти аккаунт с таким email-ом или именем пользователя.",
"too_many_requests": "Вы исчерпали допустимое количество попыток, попробуйте позже.",
"password_reset_disabled": "Сброс пароля отключен. Cвяжитесь с администратором вашего сервера."
},
diff --git a/src/i18n/zh.json b/src/i18n/zh.json
index 24b799df..8c693f4d 100644
--- a/src/i18n/zh.json
+++ b/src/i18n/zh.json
@@ -640,7 +640,6 @@
"placeholder": "你的电邮地址或者用户名",
"check_email": "检查你的邮箱,会有一个链接用于重置密码。",
"return_home": "回到首页",
- "not_found": "我们无法找到匹配的邮箱地址或者用户名。",
"too_many_requests": "你触发了尝试的限制,请稍后再试。",
"password_reset_disabled": "密码重置已经被禁用。请联系你的实例管理员。"
},
diff --git a/src/modules/interface.js b/src/modules/interface.js
index 748d3025..d6db32fd 100644
--- a/src/modules/interface.js
+++ b/src/modules/interface.js
@@ -3,6 +3,7 @@ import { set, delete as del } from 'vue'
const defaultState = {
settingsModalState: 'hidden',
settingsModalLoaded: false,
+ settingsModalTargetTab: null,
settings: {
currentSaveStateNotice: null,
noticeClearTimeout: null,
@@ -62,6 +63,9 @@ const interfaceMod = {
state.settingsModalLoaded = true
}
},
+ setSettingsModalTargetTab (state, value) {
+ state.settingsModalTargetTab = value
+ },
pushGlobalNotice (state, notice) {
state.globalNotices.push(notice)
},
@@ -97,6 +101,13 @@ const interfaceMod = {
togglePeekSettingsModal ({ commit }) {
commit('togglePeekSettingsModal')
},
+ clearSettingsModalTargetTab ({ commit }) {
+ commit('setSettingsModalTargetTab', null)
+ },
+ openSettingsModalTab ({ commit }, value) {
+ commit('setSettingsModalTargetTab', value)
+ commit('openSettingsModal')
+ },
pushGlobalNotice (
{ commit, dispatch },
{
diff --git a/src/services/completion/completion.js b/src/services/completion/completion.js
index df83d03d..8a6eba7e 100644
--- a/src/services/completion/completion.js
+++ b/src/services/completion/completion.js
@@ -5,7 +5,7 @@ export const replaceWord = (str, toReplace, replacement) => {
}
export const wordAtPosition = (str, pos) => {
- const words = splitIntoWords(str)
+ const words = splitByWhitespaceBoundary(str)
const wordsWithPosition = addPositionToWords(words)
return find(wordsWithPosition, ({ start, end }) => start <= pos && end > pos)
@@ -34,36 +34,36 @@ export const addPositionToWords = (words) => {
}, [])
}
-export const splitIntoWords = (str) => {
- // Split at word boundaries
- const regex = /\b/
- const triggers = /[@#:]+$/
-
- let split = str.split(regex)
-
- // Add trailing @ and # to the following word.
- const words = reduce(split, (result, word) => {
- if (result.length > 0) {
- let previous = result.pop()
- const matches = previous.match(triggers)
- if (matches) {
- previous = previous.replace(triggers, '')
- word = matches[0] + word
- }
- result.push(previous)
+export const splitByWhitespaceBoundary = (str) => {
+ let result = []
+ let currentWord = ''
+ for (let i = 0; i < str.length; i++) {
+ const currentChar = str[i]
+ // Starting a new word
+ if (!currentWord) {
+ currentWord = currentChar
+ continue
}
- result.push(word)
-
- return result
- }, [])
-
- return words
+ // current character is whitespace while word isn't, or vice versa:
+ // add our current word to results, start over the current word.
+ if (!!currentChar.trim() !== !!currentWord.trim()) {
+ result.push(currentWord)
+ currentWord = currentChar
+ continue
+ }
+ currentWord += currentChar
+ }
+ // Add the last word we were working on
+ if (currentWord) {
+ result.push(currentWord)
+ }
+ return result
}
const completion = {
wordAtPosition,
addPositionToWords,
- splitIntoWords,
+ splitByWhitespaceBoundary,
replaceWord
}