fix: fix lint
This commit is contained in:
parent
8caa0c08c3
commit
4232da5e33
|
@ -9,7 +9,7 @@ const copyFile = promisify(fs.copyFile)
|
||||||
|
|
||||||
async function compileThirdPartyCss () {
|
async function compileThirdPartyCss () {
|
||||||
let css = await readFile(path.resolve(__dirname, '../node_modules/emoji-mart/css/emoji-mart.css'), 'utf8')
|
let css = await readFile(path.resolve(__dirname, '../node_modules/emoji-mart/css/emoji-mart.css'), 'utf8')
|
||||||
css = `/* compiled from emoji-mart.css */` + new CleanCSS().minify(css).styles
|
css = '/* compiled from emoji-mart.css */' + new CleanCSS().minify(css).styles
|
||||||
await writeFile(path.resolve(__dirname, '../static/emoji-mart.css'), css, 'utf8')
|
await writeFile(path.resolve(__dirname, '../static/emoji-mart.css'), css, 'utf8')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -57,9 +57,9 @@ const JSON_TEMPLATE = {
|
||||||
|
|
||||||
const HTML_HEADERS = {
|
const HTML_HEADERS = {
|
||||||
'cache-control': 'public,max-age=3600',
|
'cache-control': 'public,max-age=3600',
|
||||||
'content-security-policy': `script-src 'self' ` +
|
'content-security-policy': 'script-src \'self\' ' +
|
||||||
`${[inlineScriptChecksum].concat(sapperInlineScriptChecksums).map(_ => `'sha256-${_}'`).join(' ')}; ` +
|
`${[inlineScriptChecksum].concat(sapperInlineScriptChecksums).map(_ => `'sha256-${_}'`).join(' ')}; ` +
|
||||||
`worker-src 'self'; style-src 'self' 'unsafe-inline'; frame-src 'none'; object-src 'none'; manifest-src 'self'`,
|
'worker-src \'self\'; style-src \'self\' \'unsafe-inline\'; frame-src \'none\'; object-src \'none\'; manifest-src \'self\'',
|
||||||
'referrer-policy': 'no-referrer',
|
'referrer-policy': 'no-referrer',
|
||||||
'strict-transport-security': 'max-age=15552000; includeSubDomains',
|
'strict-transport-security': 'max-age=15552000; includeSubDomains',
|
||||||
'x-content-type-options': 'nosniff',
|
'x-content-type-options': 'nosniff',
|
||||||
|
|
|
@ -44,7 +44,7 @@ async function cloneMastodon () {
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log('Cloning mastodon...')
|
console.log('Cloning mastodon...')
|
||||||
await exec(`git clone --single-branch --branch ${GIT_BRANCH} ${GIT_URL} "${mastodonDir}"`)
|
await exec(`git clone --single-branch --branch ${GIT_BRANCH} ${GIT_URL} "${mastodonDir}"`)
|
||||||
await exec(`git fetch origin --tags`, { cwd: mastodonDir }) // may already be cloned, e.g. in CI
|
await exec('git fetch origin --tags', { cwd: mastodonDir }) // may already be cloned, e.g. in CI
|
||||||
await exec(`git checkout ${GIT_TAG_OR_COMMIT}`, { cwd: mastodonDir })
|
await exec(`git checkout ${GIT_TAG_OR_COMMIT}`, { cwd: mastodonDir })
|
||||||
await writeFile(path.join(dir, '../mastodon/.env'), envFile, 'utf8')
|
await writeFile(path.join(dir, '../mastodon/.env'), envFile, 'utf8')
|
||||||
}
|
}
|
||||||
|
|
|
@ -57,7 +57,7 @@ export async function logInToInstance () {
|
||||||
(err.knownError ? '' : (navigator.onLine
|
(err.knownError ? '' : (navigator.onLine
|
||||||
? `Is this a valid Mastodon instance? Is a browser extension
|
? `Is this a valid Mastodon instance? Is a browser extension
|
||||||
blocking the request? Are you in private browsing mode?`
|
blocking the request? Are you in private browsing mode?`
|
||||||
: `Are you offline?`))
|
: 'Are you offline?'))
|
||||||
const { instanceNameInSearch } = store.get()
|
const { instanceNameInSearch } = store.get()
|
||||||
store.set({
|
store.set({
|
||||||
logInToInstanceError: error,
|
logInToInstanceError: error,
|
||||||
|
|
|
@ -9,6 +9,6 @@ export async function shareStatus (status) {
|
||||||
url: status.url
|
url: status.url
|
||||||
})
|
})
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
toast.say(`Unable to share: ` + (e.message || ''))
|
toast.say('Unable to share: ' + (e.message || ''))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,7 +52,7 @@
|
||||||
data: () => ({
|
data: () => ({
|
||||||
loading: true,
|
loading: true,
|
||||||
accounts: [],
|
accounts: [],
|
||||||
accountActions: void 0
|
accountActions: undefined
|
||||||
}),
|
}),
|
||||||
store: () => store,
|
store: () => store,
|
||||||
components: {
|
components: {
|
||||||
|
|
|
@ -44,7 +44,7 @@
|
||||||
export default {
|
export default {
|
||||||
|
|
||||||
data: () => ({
|
data: () => ({
|
||||||
focus: void 0
|
focus: undefined
|
||||||
}),
|
}),
|
||||||
store: () => store,
|
store: () => store,
|
||||||
computed: {
|
computed: {
|
||||||
|
|
|
@ -48,9 +48,9 @@
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
data: () => ({
|
data: () => ({
|
||||||
className: void 0,
|
className: undefined,
|
||||||
loaded: false,
|
loaded: false,
|
||||||
error: void 0,
|
error: undefined,
|
||||||
isLink: false,
|
isLink: false,
|
||||||
size: 'medium'
|
size: 'medium'
|
||||||
}),
|
}),
|
||||||
|
|
|
@ -66,7 +66,7 @@
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
data: () => ({
|
data: () => ({
|
||||||
icon: void 0,
|
icon: undefined,
|
||||||
ariaTitle: ''
|
ariaTitle: ''
|
||||||
}),
|
}),
|
||||||
components: {
|
components: {
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
data: () => ({
|
data: () => ({
|
||||||
className: void 0,
|
className: undefined,
|
||||||
normalIconColor: false,
|
normalIconColor: false,
|
||||||
ariaLabel: '',
|
ariaLabel: '',
|
||||||
showIcon: false
|
showIcon: false
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<button type="button"
|
<button type="button"
|
||||||
title={label}
|
title={label}
|
||||||
aria-label={label}
|
aria-label={label}
|
||||||
aria-pressed={pressable ? !!pressed : void 0}
|
aria-pressed={pressable ? !!pressed : undefined}
|
||||||
aria-hidden={ariaHidden}
|
aria-hidden={ariaHidden}
|
||||||
class={computedClass}
|
class={computedClass}
|
||||||
{disabled}
|
{disabled}
|
||||||
|
@ -112,11 +112,11 @@
|
||||||
big: false,
|
big: false,
|
||||||
muted: false,
|
muted: false,
|
||||||
disabled: false,
|
disabled: false,
|
||||||
svgClassName: void 0,
|
svgClassName: undefined,
|
||||||
elementId: void 0,
|
elementId: undefined,
|
||||||
pressable: false,
|
pressable: false,
|
||||||
pressed: false,
|
pressed: false,
|
||||||
className: void 0,
|
className: undefined,
|
||||||
sameColorWhenPressed: false,
|
sameColorWhenPressed: false,
|
||||||
ariaHidden: false,
|
ariaHidden: false,
|
||||||
clickListener: true
|
clickListener: true
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
<script>
|
<script>
|
||||||
export default {
|
export default {
|
||||||
data: () => ({
|
data: () => ({
|
||||||
className: void 0
|
className: undefined
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -46,15 +46,15 @@
|
||||||
data: () => ({
|
data: () => ({
|
||||||
error: false,
|
error: false,
|
||||||
forceSize: false,
|
forceSize: false,
|
||||||
fallback: void 0,
|
fallback: undefined,
|
||||||
focus: void 0,
|
focus: undefined,
|
||||||
background: '',
|
background: '',
|
||||||
width: void 0,
|
width: undefined,
|
||||||
height: void 0,
|
height: undefined,
|
||||||
ariaHidden: false,
|
ariaHidden: false,
|
||||||
alt: '',
|
alt: '',
|
||||||
title: '',
|
title: '',
|
||||||
blurhash: void 0
|
blurhash: undefined
|
||||||
}),
|
}),
|
||||||
computed: {
|
computed: {
|
||||||
computedStyle: ({ background }) => {
|
computedStyle: ({ background }) => {
|
||||||
|
|
|
@ -68,7 +68,7 @@
|
||||||
},
|
},
|
||||||
data: () => ({
|
data: () => ({
|
||||||
oneTransparentPixel: ONE_TRANSPARENT_PIXEL,
|
oneTransparentPixel: ONE_TRANSPARENT_PIXEL,
|
||||||
focus: void 0
|
focus: undefined
|
||||||
}),
|
}),
|
||||||
components: {
|
components: {
|
||||||
PlayVideoIcon,
|
PlayVideoIcon,
|
||||||
|
|
|
@ -13,12 +13,12 @@
|
||||||
{
|
{
|
||||||
name: '',
|
name: '',
|
||||||
label: 'All',
|
label: 'All',
|
||||||
href: `/notifications`
|
href: '/notifications'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'mentions',
|
name: 'mentions',
|
||||||
label: 'Mentions',
|
label: 'Mentions',
|
||||||
href: `/notifications/mentions`
|
href: '/notifications/mentions'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}),
|
}),
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
data: () => ({
|
data: () => ({
|
||||||
className: void 0
|
className: undefined
|
||||||
}),
|
}),
|
||||||
components: {
|
components: {
|
||||||
SvgIcon
|
SvgIcon
|
||||||
|
|
|
@ -113,11 +113,13 @@
|
||||||
!!($autosuggestShown && composeFocused)
|
!!($autosuggestShown && composeFocused)
|
||||||
),
|
),
|
||||||
// text that is read to screen readers. based on https://haltersweb.github.io/Accessibility/autocomplete.html
|
// text that is read to screen readers. based on https://haltersweb.github.io/Accessibility/autocomplete.html
|
||||||
assertiveAriaText: ({ shouldBeShown,
|
assertiveAriaText: ({
|
||||||
|
shouldBeShown,
|
||||||
autosuggestSearchResults,
|
autosuggestSearchResults,
|
||||||
autosuggestSelected,
|
autosuggestSelected,
|
||||||
autosuggestType,
|
autosuggestType,
|
||||||
$omitEmojiInDisplayNames }) => {
|
$omitEmojiInDisplayNames
|
||||||
|
}) => {
|
||||||
if (!shouldBeShown || !autosuggestSearchResults || !autosuggestSearchResults.length) {
|
if (!shouldBeShown || !autosuggestSearchResults || !autosuggestSearchResults.length) {
|
||||||
return ''
|
return ''
|
||||||
}
|
}
|
||||||
|
|
|
@ -135,12 +135,12 @@
|
||||||
ComposePoll
|
ComposePoll
|
||||||
},
|
},
|
||||||
data: () => ({
|
data: () => ({
|
||||||
size: void 0,
|
size: undefined,
|
||||||
isReply: false,
|
isReply: false,
|
||||||
autoFocus: false,
|
autoFocus: false,
|
||||||
hideBottomBorder: false,
|
hideBottomBorder: false,
|
||||||
hidden: false,
|
hidden: false,
|
||||||
dialogId: void 0
|
dialogId: undefined
|
||||||
}),
|
}),
|
||||||
store: () => store,
|
store: () => store,
|
||||||
computed: {
|
computed: {
|
||||||
|
|
|
@ -151,24 +151,29 @@
|
||||||
// ctrl or cmd (on macs) was pressed; ctrl-enter means post a toot
|
// ctrl or cmd (on macs) was pressed; ctrl-enter means post a toot
|
||||||
const ctrlPressed = e.getModifierState('Control') || e.getModifierState('Meta')
|
const ctrlPressed = e.getModifierState('Control') || e.getModifierState('Meta')
|
||||||
switch (keyCode) {
|
switch (keyCode) {
|
||||||
case 9: // tab
|
case 9: { // tab
|
||||||
this.clickSelectedAutosuggestion(e)
|
this.clickSelectedAutosuggestion(e)
|
||||||
break
|
break
|
||||||
case 13: // enter
|
}
|
||||||
|
case 13: { // enter
|
||||||
const autosuggestionClicked = this.clickSelectedAutosuggestion(e)
|
const autosuggestionClicked = this.clickSelectedAutosuggestion(e)
|
||||||
if (!autosuggestionClicked && ctrlPressed) {
|
if (!autosuggestionClicked && ctrlPressed) {
|
||||||
this.fire('postAction')
|
this.fire('postAction')
|
||||||
}
|
}
|
||||||
break
|
break
|
||||||
case 38: // up
|
}
|
||||||
|
case 38: { // up
|
||||||
this.incrementAutosuggestSelected(-1, e)
|
this.incrementAutosuggestSelected(-1, e)
|
||||||
break
|
break
|
||||||
case 40: // down
|
}
|
||||||
|
case 40: { // down
|
||||||
this.incrementAutosuggestSelected(1, e)
|
this.incrementAutosuggestSelected(1, e)
|
||||||
break
|
break
|
||||||
case 27: // escape
|
}
|
||||||
|
case 27: { // escape
|
||||||
this.clearAutosuggestions(e)
|
this.clearAutosuggestions(e)
|
||||||
break
|
break
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
onCreateDialog.call(this)
|
onCreateDialog.call(this)
|
||||||
},
|
},
|
||||||
data: () => ({
|
data: () => ({
|
||||||
title: void 0,
|
title: undefined,
|
||||||
realm: 'dialog'
|
realm: 'dialog'
|
||||||
}),
|
}),
|
||||||
methods: {
|
methods: {
|
||||||
|
|
|
@ -48,10 +48,10 @@
|
||||||
onCreateDialog.call(this)
|
onCreateDialog.call(this)
|
||||||
},
|
},
|
||||||
data: () => ({
|
data: () => ({
|
||||||
component: void 0,
|
component: undefined,
|
||||||
text: void 0,
|
text: undefined,
|
||||||
onPositive: void 0,
|
onPositive: undefined,
|
||||||
onNegative: void 0,
|
onNegative: undefined,
|
||||||
title: '',
|
title: '',
|
||||||
positiveText: 'OK',
|
positiveText: 'OK',
|
||||||
negativeText: 'Cancel'
|
negativeText: 'Cancel'
|
||||||
|
|
|
@ -117,7 +117,7 @@
|
||||||
data: () => ({
|
data: () => ({
|
||||||
loading: true,
|
loading: true,
|
||||||
loaded: false,
|
loaded: false,
|
||||||
error: void 0
|
error: undefined
|
||||||
}),
|
}),
|
||||||
computed: {
|
computed: {
|
||||||
// try to estimate size of emoji-mart based on mobile vs desktop
|
// try to estimate size of emoji-mart based on mobile vs desktop
|
||||||
|
|
|
@ -42,8 +42,8 @@
|
||||||
onCreateDialog.call(this)
|
onCreateDialog.call(this)
|
||||||
},
|
},
|
||||||
data: () => ({
|
data: () => ({
|
||||||
positiveText: void 0,
|
positiveText: undefined,
|
||||||
negativeText: void 0,
|
negativeText: undefined,
|
||||||
className: ''
|
className: ''
|
||||||
}),
|
}),
|
||||||
methods: {
|
methods: {
|
||||||
|
|
|
@ -188,8 +188,8 @@
|
||||||
shouldAnimate: !process.browser || document.getElementsByClassName('modal-dialog').length < 2,
|
shouldAnimate: !process.browser || document.getElementsByClassName('modal-dialog').length < 2,
|
||||||
fadedIn: false,
|
fadedIn: false,
|
||||||
muted: false,
|
muted: false,
|
||||||
className: void 0,
|
className: undefined,
|
||||||
title: void 0,
|
title: undefined,
|
||||||
shrinkWidthToFit: false,
|
shrinkWidthToFit: false,
|
||||||
clickHeaderToClose: false
|
clickHeaderToClose: false
|
||||||
}),
|
}),
|
||||||
|
|
|
@ -185,8 +185,8 @@
|
||||||
},
|
},
|
||||||
store: () => store,
|
store: () => store,
|
||||||
data: () => ({
|
data: () => ({
|
||||||
account: void 0,
|
account: undefined,
|
||||||
status: void 0,
|
status: undefined,
|
||||||
positiveText: 'Report',
|
positiveText: 'Report',
|
||||||
reportMap: {},
|
reportMap: {},
|
||||||
recentStatuses: [],
|
recentStatuses: [],
|
||||||
|
@ -219,7 +219,7 @@
|
||||||
const { displayStatuses, account, comment, forward, reportMap } = this.get()
|
const { displayStatuses, account, comment, forward, reportMap } = this.get()
|
||||||
const statusIds = displayStatuses.map(({ id }) => id).filter(id => reportMap[id])
|
const statusIds = displayStatuses.map(({ id }) => id).filter(id => reportMap[id])
|
||||||
if (!statusIds.length) {
|
if (!statusIds.length) {
|
||||||
toast.say(`No toots to report.`)
|
toast.say('No toots to report.')
|
||||||
} else {
|
} else {
|
||||||
await reportStatuses(account, statusIds, comment, forward)
|
await reportStatuses(account, statusIds, comment, forward)
|
||||||
}
|
}
|
||||||
|
|
|
@ -79,7 +79,7 @@ export default {
|
||||||
mentions: ({ status }) => status.mentions || [],
|
mentions: ({ status }) => status.mentions || [],
|
||||||
mentionsUser: ({ mentions, verifyCredentialsId }) => !!mentions.find(_ => _.id === verifyCredentialsId),
|
mentionsUser: ({ mentions, verifyCredentialsId }) => !!mentions.find(_ => _.id === verifyCredentialsId),
|
||||||
mutingConversation: ({ status }) => !!status.muted,
|
mutingConversation: ({ status }) => !!status.muted,
|
||||||
muteConversationLabel: ({ mutingConversation }) => mutingConversation ? `Unmute conversation` : `Mute conversation`,
|
muteConversationLabel: ({ mutingConversation }) => mutingConversation ? 'Unmute conversation' : 'Mute conversation',
|
||||||
muteConversationIcon: ({ mutingConversation }) => mutingConversation ? '#fa-volume-up' : '#fa-volume-off',
|
muteConversationIcon: ({ mutingConversation }) => mutingConversation ? '#fa-volume-up' : '#fa-volume-off',
|
||||||
isPublicOrUnlisted: ({ visibility }) => visibility === 'public' || visibility === 'unlisted',
|
isPublicOrUnlisted: ({ visibility }) => visibility === 'public' || visibility === 'unlisted',
|
||||||
items: ({
|
items: ({
|
||||||
|
|
|
@ -23,9 +23,9 @@
|
||||||
export default {
|
export default {
|
||||||
oncreate,
|
oncreate,
|
||||||
data: () => ({
|
data: () => ({
|
||||||
title: void 0,
|
title: undefined,
|
||||||
positiveText: void 0,
|
positiveText: undefined,
|
||||||
negativeText: void 0
|
negativeText: undefined
|
||||||
}),
|
}),
|
||||||
methods: {
|
methods: {
|
||||||
show,
|
show,
|
||||||
|
|
|
@ -24,10 +24,10 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
data: () => ({
|
data: () => ({
|
||||||
props: void 0
|
props: undefined
|
||||||
}),
|
}),
|
||||||
components: {
|
components: {
|
||||||
ListItem
|
ListItem
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -54,7 +54,7 @@
|
||||||
},
|
},
|
||||||
store: () => store,
|
store: () => store,
|
||||||
data: () => ({
|
data: () => ({
|
||||||
overrideFollowing: void 0
|
overrideFollowing: undefined
|
||||||
}),
|
}),
|
||||||
computed: {
|
computed: {
|
||||||
accountId: ({ account }) => account.id,
|
accountId: ({ account }) => account.id,
|
||||||
|
|
|
@ -77,7 +77,7 @@
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
data: () => ({
|
data: () => ({
|
||||||
actions: void 0
|
actions: undefined
|
||||||
}),
|
}),
|
||||||
methods: {
|
methods: {
|
||||||
onButtonClick (event, action, accountId) {
|
onButtonClick (event, action, accountId) {
|
||||||
|
@ -96,4 +96,4 @@
|
||||||
AccountDisplayName
|
AccountDisplayName
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
<script>
|
<script>
|
||||||
export default {
|
export default {
|
||||||
data: () => ({
|
data: () => ({
|
||||||
label: void 0
|
label: undefined
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -17,8 +17,8 @@
|
||||||
<script>
|
<script>
|
||||||
export default {
|
export default {
|
||||||
data: () => ({
|
data: () => ({
|
||||||
ariaLabel: void 0,
|
ariaLabel: undefined,
|
||||||
className: void 0
|
className: undefined
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -37,8 +37,8 @@
|
||||||
<script>
|
<script>
|
||||||
export default {
|
export default {
|
||||||
data: () => ({
|
data: () => ({
|
||||||
icon: void 0,
|
icon: undefined,
|
||||||
ariaLabel: void 0
|
ariaLabel: undefined
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -2,11 +2,13 @@
|
||||||
import {
|
import {
|
||||||
isVisible,
|
isVisible,
|
||||||
firstVisibleElementIndex,
|
firstVisibleElementIndex,
|
||||||
scrollIntoViewIfNeeded } from '../../_utils/scrollIntoView'
|
scrollIntoViewIfNeeded
|
||||||
|
} from '../../_utils/scrollIntoView'
|
||||||
import {
|
import {
|
||||||
addShortcutFallback,
|
addShortcutFallback,
|
||||||
removeShortcutFallback,
|
removeShortcutFallback,
|
||||||
onKeyDownInShortcutScope } from '../../_utils/shortcuts'
|
onKeyDownInShortcutScope
|
||||||
|
} from '../../_utils/shortcuts'
|
||||||
import { smoothScroll } from '../../_utils/smoothScroll'
|
import { smoothScroll } from '../../_utils/smoothScroll'
|
||||||
import { getScrollContainer } from '../../_utils/scrollContainer'
|
import { getScrollContainer } from '../../_utils/scrollContainer'
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
<script>
|
<script>
|
||||||
import {
|
import {
|
||||||
addToShortcutScope,
|
addToShortcutScope,
|
||||||
removeFromShortcutScope } from '../../_utils/shortcuts'
|
removeFromShortcutScope
|
||||||
|
} from '../../_utils/shortcuts'
|
||||||
export default {
|
export default {
|
||||||
data: () => ({ scope: 'global', key: null }),
|
data: () => ({ scope: 'global', key: null }),
|
||||||
oncreate () {
|
oncreate () {
|
||||||
|
@ -18,7 +19,8 @@
|
||||||
event.preventDefault()
|
event.preventDefault()
|
||||||
this.fire('pressed', {
|
this.fire('pressed', {
|
||||||
key: event.key,
|
key: event.key,
|
||||||
timeStamp: event.timeStamp })
|
timeStamp: event.timeStamp
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -164,7 +164,7 @@ export default {
|
||||||
},
|
},
|
||||||
data: () => ({
|
data: () => ({
|
||||||
oneTransparentPixel: ONE_TRANSPARENT_PIXEL,
|
oneTransparentPixel: ONE_TRANSPARENT_PIXEL,
|
||||||
mouseover: void 0
|
mouseover: undefined
|
||||||
}),
|
}),
|
||||||
store: () => store,
|
store: () => store,
|
||||||
events: {
|
events: {
|
||||||
|
|
|
@ -176,8 +176,8 @@
|
||||||
Shortcut
|
Shortcut
|
||||||
},
|
},
|
||||||
data: () => ({
|
data: () => ({
|
||||||
notification: void 0,
|
notification: undefined,
|
||||||
replyVisibility: void 0,
|
replyVisibility: undefined,
|
||||||
contentPreloaded: false,
|
contentPreloaded: false,
|
||||||
enableShortcuts: null
|
enableShortcuts: null
|
||||||
}),
|
}),
|
||||||
|
@ -284,8 +284,10 @@
|
||||||
absoluteFormattedDate: ({ createdAtDateTS }) => absoluteDateFormatter.format(createdAtDateTS),
|
absoluteFormattedDate: ({ createdAtDateTS }) => absoluteDateFormatter.format(createdAtDateTS),
|
||||||
timeagoFormattedDate: ({ createdAtDateTS, $now }) => formatTimeagoDate(createdAtDateTS, $now),
|
timeagoFormattedDate: ({ createdAtDateTS, $now }) => formatTimeagoDate(createdAtDateTS, $now),
|
||||||
reblog: ({ status }) => status.reblog,
|
reblog: ({ status }) => status.reblog,
|
||||||
ariaLabel: ({ originalAccount, account, plainTextContent, timeagoFormattedDate, spoilerText,
|
ariaLabel: ({
|
||||||
showContent, reblog, notification, visibility, $omitEmojiInDisplayNames, $disableLongAriaLabels }) => (
|
originalAccount, account, plainTextContent, timeagoFormattedDate, spoilerText,
|
||||||
|
showContent, reblog, notification, visibility, $omitEmojiInDisplayNames, $disableLongAriaLabels
|
||||||
|
}) => (
|
||||||
getAccessibleLabelForStatus(originalAccount, account, plainTextContent,
|
getAccessibleLabelForStatus(originalAccount, account, plainTextContent,
|
||||||
timeagoFormattedDate, spoilerText, showContent,
|
timeagoFormattedDate, spoilerText, showContent,
|
||||||
reblog, notification, visibility, $omitEmojiInDisplayNames, $disableLongAriaLabels)
|
reblog, notification, visibility, $omitEmojiInDisplayNames, $disableLongAriaLabels)
|
||||||
|
@ -318,11 +320,13 @@
|
||||||
// This params list deliberately does *not* include `spoilersShown` or `replyShown`, because these
|
// This params list deliberately does *not* include `spoilersShown` or `replyShown`, because these
|
||||||
// change frequently and would therefore cause costly recomputes if included here.
|
// change frequently and would therefore cause costly recomputes if included here.
|
||||||
// The main goal here is to avoid typing by passing as many params as possible to child components.
|
// The main goal here is to avoid typing by passing as many params as possible to child components.
|
||||||
params: ({ notification, notificationId, status, statusId, timelineType,
|
params: ({
|
||||||
|
notification, notificationId, status, statusId, timelineType,
|
||||||
account, accountId, uuid, isStatusInNotification, isStatusInOwnThread,
|
account, accountId, uuid, isStatusInNotification, isStatusInOwnThread,
|
||||||
originalAccount, originalAccountId, visibility,
|
originalAccount, originalAccountId, visibility,
|
||||||
replyVisibility, spoilerText, originalStatus, originalStatusId, inReplyToId,
|
replyVisibility, spoilerText, originalStatus, originalStatusId, inReplyToId,
|
||||||
enableShortcuts, shortcutScope, originalStatusEmojis }) => ({
|
enableShortcuts, shortcutScope, originalStatusEmojis
|
||||||
|
}) => ({
|
||||||
notification,
|
notification,
|
||||||
notificationId,
|
notificationId,
|
||||||
status,
|
status,
|
||||||
|
|
|
@ -150,8 +150,8 @@
|
||||||
},
|
},
|
||||||
store: () => store,
|
store: () => store,
|
||||||
data: () => ({
|
data: () => ({
|
||||||
overrideNumReblogs: void 0,
|
overrideNumReblogs: undefined,
|
||||||
overrideNumFavs: void 0
|
overrideNumFavs: undefined
|
||||||
}),
|
}),
|
||||||
computed: {
|
computed: {
|
||||||
originalStatusId: ({ originalStatus }) => originalStatus.id,
|
originalStatusId: ({ originalStatus }) => originalStatus.id,
|
||||||
|
|
|
@ -107,11 +107,11 @@
|
||||||
case 'tag':
|
case 'tag':
|
||||||
return `Statuses: #${timelineValue} hashtag`
|
return `Statuses: #${timelineValue} hashtag`
|
||||||
case 'status':
|
case 'status':
|
||||||
return `Statuses: thread`
|
return 'Statuses: thread'
|
||||||
case 'account':
|
case 'account':
|
||||||
return `Statuses: account timeline`
|
return 'Statuses: account timeline'
|
||||||
case 'list':
|
case 'list':
|
||||||
return `Statuses: list`
|
return 'Statuses: list'
|
||||||
case 'notifications':
|
case 'notifications':
|
||||||
return `Notifications on ${$currentInstance}`
|
return `Notifications on ${$currentInstance}`
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,10 +21,10 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
data: () => ({
|
data: () => ({
|
||||||
props: void 0
|
props: undefined
|
||||||
}),
|
}),
|
||||||
components: {
|
components: {
|
||||||
VirtualListItem
|
VirtualListItem
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
computed: {
|
computed: {
|
||||||
list: ({ params, $lists }) => $lists && $lists.find(_ => _.id === params['listId']),
|
list: ({ params, $lists }) => $lists && $lists.find(_ => _.id === params.listId),
|
||||||
listTitle: ({ list }) => list ? list.title : ''
|
listTitle: ({ list }) => list ? list.title : ''
|
||||||
},
|
},
|
||||||
store: () => store,
|
store: () => store,
|
||||||
|
|
|
@ -59,7 +59,7 @@ export function timelineComputations (store) {
|
||||||
)
|
)
|
||||||
store.compute('currentTimelineValue', ['currentTimeline'], currentTimeline => {
|
store.compute('currentTimelineValue', ['currentTimeline'], currentTimeline => {
|
||||||
if (!currentTimeline) {
|
if (!currentTimeline) {
|
||||||
return void 0
|
return undefined
|
||||||
}
|
}
|
||||||
const split = currentTimeline.split('/')
|
const split = currentTimeline.split('/')
|
||||||
const len = split.length
|
const len = split.length
|
||||||
|
@ -152,7 +152,7 @@ export function timelineComputations (store) {
|
||||||
)
|
)
|
||||||
|
|
||||||
store.compute('timelineNotificationItemSummaries',
|
store.compute('timelineNotificationItemSummaries',
|
||||||
[`timelineData_timelineItemSummariesToAdd`, 'timelineFilterFunction', 'currentInstance'],
|
['timelineData_timelineItemSummariesToAdd', 'timelineFilterFunction', 'currentInstance'],
|
||||||
(root, timelineFilterFunction, currentInstance) => (
|
(root, timelineFilterFunction, currentInstance) => (
|
||||||
get(root, [currentInstance, 'notifications'])
|
get(root, [currentInstance, 'notifications'])
|
||||||
)
|
)
|
||||||
|
|
|
@ -16,5 +16,5 @@ export function createAutosuggestAccessibleLabel (
|
||||||
label = `${displayName} @${selected.acct}`
|
label = `${displayName} @${selected.acct}`
|
||||||
}
|
}
|
||||||
return `${label} (${selectedIndex + 1} of ${searchResults.length}). ` +
|
return `${label} (${selectedIndex + 1} of ${searchResults.length}). ` +
|
||||||
`Press up and down arrows to review and enter to select.`
|
'Press up and down arrows to review and enter to select.'
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import {
|
import {
|
||||||
getScrollContainer,
|
getScrollContainer,
|
||||||
getOffsetHeight } from './scrollContainer'
|
getOffsetHeight
|
||||||
|
} from './scrollContainer'
|
||||||
import { smoothScroll } from './smoothScroll'
|
import { smoothScroll } from './smoothScroll'
|
||||||
|
|
||||||
let mainNavElement
|
let mainNavElement
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
export function timelineItemToSummary (item) {
|
export function timelineItemToSummary (item) {
|
||||||
return {
|
return {
|
||||||
id: item.id,
|
id: item.id,
|
||||||
replyId: (item.in_reply_to_id) || void 0,
|
replyId: (item.in_reply_to_id) || undefined,
|
||||||
reblogId: (item.reblog && item.reblog.id) || void 0,
|
reblogId: (item.reblog && item.reblog.id) || undefined,
|
||||||
type: item.type || void 0
|
type: item.type || undefined
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,10 +5,10 @@
|
||||||
import crypto from 'crypto'
|
import crypto from 'crypto'
|
||||||
|
|
||||||
const baseScripts = [
|
const baseScripts = [
|
||||||
`__SAPPER__={baseUrl:"",preloaded:[{},{}]};`,
|
'__SAPPER__={baseUrl:"",preloaded:[{},{}]};',
|
||||||
`__SAPPER__={baseUrl:"",preloaded:[{}]};`,
|
'__SAPPER__={baseUrl:"",preloaded:[{}]};',
|
||||||
`__SAPPER__={baseUrl:"",preloaded:[{},null,null,{}]};`,
|
'__SAPPER__={baseUrl:"",preloaded:[{},null,null,{}]};',
|
||||||
`__SAPPER__={baseUrl:"",preloaded:[{},null,{}]};`
|
'__SAPPER__={baseUrl:"",preloaded:[{},null,{}]};'
|
||||||
]
|
]
|
||||||
|
|
||||||
const scriptsWithSW = baseScripts.map(script => (
|
const scriptsWithSW = baseScripts.map(script => (
|
||||||
|
|
|
@ -156,7 +156,7 @@ async function showRichNotification (data, notification) {
|
||||||
}
|
}
|
||||||
case 'reblog':
|
case 'reblog':
|
||||||
case 'favourite':
|
case 'favourite':
|
||||||
case 'poll':
|
case 'poll': {
|
||||||
await self.registration.showNotification(data.title, {
|
await self.registration.showNotification(data.title, {
|
||||||
badge,
|
badge,
|
||||||
icon,
|
icon,
|
||||||
|
@ -167,7 +167,8 @@ async function showRichNotification (data, notification) {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
break
|
break
|
||||||
case 'mention':
|
}
|
||||||
|
case 'mention': {
|
||||||
const isPublic = ['public', 'unlisted'].includes(notification.status.visibility)
|
const isPublic = ['public', 'unlisted'].includes(notification.status.visibility)
|
||||||
const actions = [
|
const actions = [
|
||||||
isPublic && {
|
isPublic && {
|
||||||
|
@ -196,6 +197,7 @@ async function showRichNotification (data, notification) {
|
||||||
actions
|
actions
|
||||||
})
|
})
|
||||||
break
|
break
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -50,8 +50,8 @@ test('content warnings can have emoji', async t => {
|
||||||
})
|
})
|
||||||
|
|
||||||
test('no XSS in content warnings or text', async t => {
|
test('no XSS in content warnings or text', async t => {
|
||||||
const pwned1 = `<script>alert("pwned!")</script>`
|
const pwned1 = '<script>alert("pwned!")</script>'
|
||||||
const pwned2 = `<script>alert("pwned from CW!")</script>`
|
const pwned2 = '<script>alert("pwned from CW!")</script>'
|
||||||
await loginAsFoobar(t)
|
await loginAsFoobar(t)
|
||||||
await t
|
await t
|
||||||
.typeText(composeInput, pwned1)
|
.typeText(composeInput, pwned1)
|
||||||
|
|
|
@ -101,7 +101,7 @@ test('Check status aria labels for de-emojified text', async t => {
|
||||||
.click(homeNavButton)
|
.click(homeNavButton)
|
||||||
.click(displayNameInComposeBox)
|
.click(displayNameInComposeBox)
|
||||||
.expect(getNthStatus(1).getAttribute('aria-label')).match(
|
.expect(getNthStatus(1).getAttribute('aria-label')).match(
|
||||||
new RegExp(`foo, hey ho lotsa emojos, (.* ago|just now), @foobar, Public`, 'i')
|
new RegExp('foo, hey ho lotsa emojos, (.* ago|just now), @foobar, Public', 'i')
|
||||||
)
|
)
|
||||||
.click(settingsNavButton)
|
.click(settingsNavButton)
|
||||||
.click(generalSettingsButton)
|
.click(generalSettingsButton)
|
||||||
|
|
|
@ -26,7 +26,7 @@ const INSTANCE_INFO = {
|
||||||
const createStatus = i => ({
|
const createStatus = i => ({
|
||||||
id: i.toString(),
|
id: i.toString(),
|
||||||
created_at: new Date().toISOString(),
|
created_at: new Date().toISOString(),
|
||||||
content: `Status #4{id}`,
|
content: 'Status #4{id}',
|
||||||
account: {
|
account: {
|
||||||
id: '1'
|
id: '1'
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,17 +63,17 @@ describe('test-emoji.js', function () {
|
||||||
it('does not replace non-emoji characters', function () {
|
it('does not replace non-emoji characters', function () {
|
||||||
const replacer = _ => `<div>${_}</div>`
|
const replacer = _ => `<div>${_}</div>`
|
||||||
assert.strictEqual(
|
assert.strictEqual(
|
||||||
replaceEmoji(`it's over #9000`, replacer),
|
replaceEmoji('it\'s over #9000', replacer),
|
||||||
`it's over #9000`
|
'it\'s over #9000'
|
||||||
)
|
)
|
||||||
assert.strictEqual(
|
assert.strictEqual(
|
||||||
replaceEmoji(`woot !@#$%^&*()~` + '`' + `{[}]:;"'<,>.?/£™℠®`, replacer),
|
replaceEmoji('woot !@#$%^&*()~' + '`' + '{[}]:;"\'<,>.?/£™℠®', replacer),
|
||||||
`woot !@#$%^&*()~` + '`' + `{[}]:;"'<,>.?/£™℠®`
|
'woot !@#$%^&*()~' + '`' + '{[}]:;"\'<,>.?/£™℠®'
|
||||||
)
|
)
|
||||||
|
|
||||||
assert.strictEqual(
|
assert.strictEqual(
|
||||||
replaceEmoji(`woot !@#$%^&*()~` + '`' + `{[}]:;"'<,>.?/£™℠®`, replacer),
|
replaceEmoji('woot !@#$%^&*()~' + '`' + '{[}]:;"\'<,>.?/£™℠®', replacer),
|
||||||
`woot !@#$%^&*()~` + '`' + `{[}]:;"'<,>.?/£™℠®`
|
'woot !@#$%^&*()~' + '`' + '{[}]:;"\'<,>.?/£™℠®'
|
||||||
)
|
)
|
||||||
|
|
||||||
// hidden VARIATION SELECTOR character is in here
|
// hidden VARIATION SELECTOR character is in here
|
||||||
|
@ -118,19 +118,19 @@ describe('test-emoji.js', function () {
|
||||||
const replacer = _ => ''
|
const replacer = _ => ''
|
||||||
assert.strictEqual(
|
assert.strictEqual(
|
||||||
replaceEmoji(`woot ${mindBlown}`, replacer),
|
replaceEmoji(`woot ${mindBlown}`, replacer),
|
||||||
`woot `
|
'woot '
|
||||||
)
|
)
|
||||||
assert.strictEqual(
|
assert.strictEqual(
|
||||||
replaceEmoji(`woot ${mindBlown} woot`, replacer),
|
replaceEmoji(`woot ${mindBlown} woot`, replacer),
|
||||||
`woot woot`
|
'woot woot'
|
||||||
)
|
)
|
||||||
assert.strictEqual(
|
assert.strictEqual(
|
||||||
replaceEmoji(`woot ${mindBlown}${elephant}`, replacer),
|
replaceEmoji(`woot ${mindBlown}${elephant}`, replacer),
|
||||||
`woot `
|
'woot '
|
||||||
)
|
)
|
||||||
assert.strictEqual(
|
assert.strictEqual(
|
||||||
replaceEmoji(`woot ${mindBlown}${elephant} woot`, replacer),
|
replaceEmoji(`woot ${mindBlown}${elephant} woot`, replacer),
|
||||||
`woot woot`
|
'woot woot'
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,8 @@ import {
|
||||||
onKeyDownInShortcutScope,
|
onKeyDownInShortcutScope,
|
||||||
popShortcutScope,
|
popShortcutScope,
|
||||||
pushShortcutScope,
|
pushShortcutScope,
|
||||||
removeFromShortcutScope } from '../../src/routes/_utils/shortcuts'
|
removeFromShortcutScope
|
||||||
|
} from '../../src/routes/_utils/shortcuts'
|
||||||
import assert from 'assert'
|
import assert from 'assert'
|
||||||
|
|
||||||
function KeyDownEvent (key) {
|
function KeyDownEvent (key) {
|
||||||
|
|
|
@ -50,7 +50,7 @@ export const neverMarkMediaSensitiveInput = $('#choice-never-mark-media-sensitiv
|
||||||
export const removeEmojiFromDisplayNamesInput = $('#choice-omit-emoji-in-display-names')
|
export const removeEmojiFromDisplayNamesInput = $('#choice-omit-emoji-in-display-names')
|
||||||
export const disableInfiniteScroll = $('#choice-disable-infinite-scroll')
|
export const disableInfiniteScroll = $('#choice-disable-infinite-scroll')
|
||||||
export const disableUnreadNotifications = $('#choice-disable-unread-notification-counts')
|
export const disableUnreadNotifications = $('#choice-disable-unread-notification-counts')
|
||||||
export const dialogOptionsOption = $(`.modal-dialog button`)
|
export const dialogOptionsOption = $('.modal-dialog button')
|
||||||
export const emojiSearchInput = $('.emoji-mart-search input')
|
export const emojiSearchInput = $('.emoji-mart-search input')
|
||||||
export const confirmationDialogOKButton = $('.confirmation-dialog-form-flex button:nth-child(1)')
|
export const confirmationDialogOKButton = $('.confirmation-dialog-form-flex button:nth-child(1)')
|
||||||
export const confirmationDialogCancelButton = $('.confirmation-dialog-form-flex button:nth-child(2)')
|
export const confirmationDialogCancelButton = $('.confirmation-dialog-form-flex button:nth-child(2)')
|
||||||
|
@ -353,7 +353,7 @@ export function getNthStatusAndImage (nStatus, nImage) {
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getFirstVisibleStatus () {
|
export function getFirstVisibleStatus () {
|
||||||
return $(`.list-item > article[aria-posinset]`).nth(0)
|
return $('.list-item > article[aria-posinset]').nth(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getNthReplyButton (n) {
|
export function getNthReplyButton (n) {
|
||||||
|
|
Loading…
Reference in a new issue