Compare commits
41 commits
2d26737bab
...
c11ebb1e7f
Author | SHA1 | Date | |
---|---|---|---|
|
c11ebb1e7f | ||
|
1f56401a8e | ||
|
6dfb213dfe | ||
|
a5c4853987 | ||
|
acd4453380 | ||
|
66f35f15af | ||
|
292e0dab08 | ||
|
31609da231 | ||
|
d5b554f5af | ||
|
391f7e0711 | ||
|
ac44c1bc11 | ||
|
66963427bd | ||
|
78cbbf651d | ||
|
57fd447038 | ||
|
64cf4c7bb8 | ||
|
fe4867474b | ||
|
5ef527d747 | ||
|
b94d389b7f | ||
|
a2a0559c8f | ||
|
5b3484dd7d | ||
|
dbbae642ef | ||
|
0c4fd2d50d | ||
|
af5729844e | ||
|
85a063f056 | ||
|
8bf12a5359 | ||
|
cd46f324d2 | ||
|
ec11bdfc2b | ||
|
cb19ffb95e | ||
|
06b0ccde99 | ||
|
88067c607b | ||
|
02c5ee9c49 | ||
|
28a38d413d | ||
|
77a84c3009 | ||
|
e89e505753 | ||
|
f4685c59b8 | ||
|
c4d3d9def4 | ||
|
cdc541e81d | ||
|
02e1e5cca4 | ||
|
0d2295e065 | ||
|
ee155f15b7 | ||
|
b7b0d8c6af |
68 changed files with 881 additions and 713 deletions
|
@ -1,5 +1,5 @@
|
||||||
// https://github.com/shelljs/shelljs
|
// https://github.com/shelljs/shelljs
|
||||||
require('./check-versions')()
|
import('./check-versions.mjs').then(m => m.default())
|
||||||
require('shelljs/global')
|
require('shelljs/global')
|
||||||
env.NODE_ENV = 'production'
|
env.NODE_ENV = 'production'
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,7 @@
|
||||||
var semver = require('semver')
|
import semver from 'semver'
|
||||||
var chalk = require('chalk')
|
import chalk from 'chalk'
|
||||||
var packageConfig = require('../package.json')
|
|
||||||
var exec = function (cmd) {
|
import packageConfig from '../package.json' with { type: 'json' }
|
||||||
return require('child_process')
|
|
||||||
.execSync(cmd).toString().trim()
|
|
||||||
}
|
|
||||||
|
|
||||||
var versionRequirements = [
|
var versionRequirements = [
|
||||||
{
|
{
|
||||||
|
@ -14,10 +11,10 @@ var versionRequirements = [
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
module.exports = function () {
|
export default function () {
|
||||||
var warnings = []
|
const warnings = []
|
||||||
for (var i = 0; i < versionRequirements.length; i++) {
|
for (let i = 0; i < versionRequirements.length; i++) {
|
||||||
var mod = versionRequirements[i]
|
const mod = versionRequirements[i]
|
||||||
if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) {
|
if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) {
|
||||||
warnings.push(mod.name + ': ' +
|
warnings.push(mod.name + ': ' +
|
||||||
chalk.red(mod.currentVersion) + ' should be ' +
|
chalk.red(mod.currentVersion) + ' should be ' +
|
||||||
|
@ -28,8 +25,8 @@ module.exports = function () {
|
||||||
|
|
||||||
if (warnings.length) {
|
if (warnings.length) {
|
||||||
console.warn(chalk.yellow('\nTo use this template, you must update following to modules:\n'))
|
console.warn(chalk.yellow('\nTo use this template, you must update following to modules:\n'))
|
||||||
for (var i = 0; i < warnings.length; i++) {
|
for (let i = 0; i < warnings.length; i++) {
|
||||||
var warning = warnings[i]
|
const warning = warnings[i]
|
||||||
console.warn(' ' + warning)
|
console.warn(' ' + warning)
|
||||||
}
|
}
|
||||||
console.warn()
|
console.warn()
|
|
@ -1,4 +1,4 @@
|
||||||
require('./check-versions')()
|
import('./check-versions.mjs').then(m => m.default())
|
||||||
var config = require('../config')
|
var config = require('../config')
|
||||||
if (!process.env.NODE_ENV) process.env.NODE_ENV = config.dev.env
|
if (!process.env.NODE_ENV) process.env.NODE_ENV = config.dev.env
|
||||||
var path = require('path')
|
var path = require('path')
|
||||||
|
|
1
changelog.d/always-jpeg.add
Normal file
1
changelog.d/always-jpeg.add
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Added option to always convert images to JPEG format instead of using WebP when compressing images.
|
1
changelog.d/pinia.change
Normal file
1
changelog.d/pinia.change
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Partially migrated from vuex to pinia
|
24
package.json
24
package.json
|
@ -37,7 +37,7 @@
|
||||||
"localforage": "1.10.0",
|
"localforage": "1.10.0",
|
||||||
"pako": "^2.1.0",
|
"pako": "^2.1.0",
|
||||||
"parse-link-header": "2.0.0",
|
"parse-link-header": "2.0.0",
|
||||||
"phoenix": "1.7.18",
|
"phoenix": "1.7.19",
|
||||||
"pinia": "^2.0.33",
|
"pinia": "^2.0.33",
|
||||||
"punycode.js": "2.3.1",
|
"punycode.js": "2.3.1",
|
||||||
"qrcode": "1.5.4",
|
"qrcode": "1.5.4",
|
||||||
|
@ -66,13 +66,13 @@
|
||||||
"babel-loader": "9.2.1",
|
"babel-loader": "9.2.1",
|
||||||
"babel-plugin-lodash": "3.3.4",
|
"babel-plugin-lodash": "3.3.4",
|
||||||
"chai": "4.5.0",
|
"chai": "4.5.0",
|
||||||
"chalk": "1.1.3",
|
"chalk": "5.4.1",
|
||||||
"chromedriver": "108.0.0",
|
"chromedriver": "132.0.2",
|
||||||
"connect-history-api-fallback": "2.0.0",
|
"connect-history-api-fallback": "2.0.0",
|
||||||
"copy-webpack-plugin": "11.0.0",
|
"copy-webpack-plugin": "12.0.2",
|
||||||
"cross-spawn": "7.0.6",
|
"cross-spawn": "7.0.6",
|
||||||
"css-loader": "6.11.0",
|
"css-loader": "7.1.2",
|
||||||
"css-minimizer-webpack-plugin": "4.2.2",
|
"css-minimizer-webpack-plugin": "7.0.0",
|
||||||
"custom-event-polyfill": "1.0.7",
|
"custom-event-polyfill": "1.0.7",
|
||||||
"eslint": "8.57.1",
|
"eslint": "8.57.1",
|
||||||
"eslint-config-standard": "17.1.0",
|
"eslint-config-standard": "17.1.0",
|
||||||
|
@ -106,12 +106,12 @@
|
||||||
"ora": "0.4.1",
|
"ora": "0.4.1",
|
||||||
"postcss": "8.5.1",
|
"postcss": "8.5.1",
|
||||||
"postcss-html": "^1.5.0",
|
"postcss-html": "^1.5.0",
|
||||||
"postcss-loader": "7.0.2",
|
"postcss-loader": "7.3.4",
|
||||||
"postcss-scss": "^4.0.6",
|
"postcss-scss": "^4.0.6",
|
||||||
"sass": "1.60.0",
|
"sass": "1.83.4",
|
||||||
"sass-loader": "13.3.3",
|
"sass-loader": "13.3.3",
|
||||||
"selenium-server": "3.141.59",
|
"selenium-server": "3.141.59",
|
||||||
"semver": "7.6.3",
|
"semver": "7.7.0",
|
||||||
"serviceworker-webpack5-plugin": "2.0.0",
|
"serviceworker-webpack5-plugin": "2.0.0",
|
||||||
"shelljs": "0.8.5",
|
"shelljs": "0.8.5",
|
||||||
"sinon": "15.2.0",
|
"sinon": "15.2.0",
|
||||||
|
@ -123,11 +123,11 @@
|
||||||
"stylelint-config-standard": "29.0.0",
|
"stylelint-config-standard": "29.0.0",
|
||||||
"stylelint-rscss": "0.4.0",
|
"stylelint-rscss": "0.4.0",
|
||||||
"stylelint-webpack-plugin": "^3.3.0",
|
"stylelint-webpack-plugin": "^3.3.0",
|
||||||
"vue-loader": "17.0.1",
|
"vue-loader": "17.4.2",
|
||||||
"vue-style-loader": "4.1.3",
|
"vue-style-loader": "4.1.3",
|
||||||
"webpack": "5.75.0",
|
"webpack": "5.97.1",
|
||||||
"webpack-dev-middleware": "3.7.3",
|
"webpack-dev-middleware": "3.7.3",
|
||||||
"webpack-hot-middleware": "2.25.3",
|
"webpack-hot-middleware": "2.26.1",
|
||||||
"webpack-merge": "0.20.0"
|
"webpack-merge": "0.20.0"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
|
|
|
@ -17,9 +17,9 @@ import { applyConfig } from '../services/style_setter/style_setter.js'
|
||||||
import FaviconService from '../services/favicon_service/favicon_service.js'
|
import FaviconService from '../services/favicon_service/favicon_service.js'
|
||||||
import { initServiceWorker, updateFocus } from '../services/sw/sw.js'
|
import { initServiceWorker, updateFocus } from '../services/sw/sw.js'
|
||||||
|
|
||||||
import { useI18nStore } from '../stores/i18n'
|
import { useI18nStore } from 'src/stores/i18n'
|
||||||
import { useInterfaceStore } from '../stores/interface'
|
import { useInterfaceStore } from 'src/stores/interface'
|
||||||
import { useAnnouncementsStore } from '../stores/announcements'
|
import { useAnnouncementsStore } from 'src/stores/announcements'
|
||||||
|
|
||||||
let staticInitialResults = null
|
let staticInitialResults = null
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@ import { library } from '@fortawesome/fontawesome-svg-core'
|
||||||
import {
|
import {
|
||||||
faEllipsisV
|
faEllipsisV
|
||||||
} from '@fortawesome/free-solid-svg-icons'
|
} from '@fortawesome/free-solid-svg-icons'
|
||||||
import { useReportsStore } from '../../stores/reports'
|
import { useReportsStore } from 'src/stores/reports'
|
||||||
|
|
||||||
library.add(
|
library.add(
|
||||||
faEllipsisV
|
faEllipsisV
|
||||||
|
|
|
@ -2,7 +2,7 @@ import { mapState } from 'vuex'
|
||||||
import AnnouncementEditor from '../announcement_editor/announcement_editor.vue'
|
import AnnouncementEditor from '../announcement_editor/announcement_editor.vue'
|
||||||
import RichContent from '../rich_content/rich_content.jsx'
|
import RichContent from '../rich_content/rich_content.jsx'
|
||||||
import localeService from '../../services/locale/locale.service.js'
|
import localeService from '../../services/locale/locale.service.js'
|
||||||
import { useAnnouncementsStore } from '../../stores/announcements'
|
import { useAnnouncementsStore } from 'src/stores/announcements'
|
||||||
|
|
||||||
const Announcement = {
|
const Announcement = {
|
||||||
components: {
|
components: {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import { mapState } from 'vuex'
|
import { mapState } from 'vuex'
|
||||||
import Announcement from '../announcement/announcement.vue'
|
import Announcement from '../announcement/announcement.vue'
|
||||||
import AnnouncementEditor from '../announcement_editor/announcement_editor.vue'
|
import AnnouncementEditor from '../announcement_editor/announcement_editor.vue'
|
||||||
import { useAnnouncementsStore } from '../../stores/announcements'
|
import { useAnnouncementsStore } from 'src/stores/announcements'
|
||||||
|
|
||||||
const AnnouncementsPage = {
|
const AnnouncementsPage = {
|
||||||
components: {
|
components: {
|
||||||
|
|
|
@ -18,7 +18,7 @@ import {
|
||||||
faPencilAlt,
|
faPencilAlt,
|
||||||
faAlignRight
|
faAlignRight
|
||||||
} from '@fortawesome/free-solid-svg-icons'
|
} from '@fortawesome/free-solid-svg-icons'
|
||||||
import { useMediaViewerStore } from '../../stores/media_viewer'
|
import { useMediaViewerStore } from 'src/stores/media_viewer'
|
||||||
|
|
||||||
library.add(
|
library.add(
|
||||||
faFile,
|
faFile,
|
||||||
|
|
|
@ -14,7 +14,7 @@ import {
|
||||||
faChevronLeft
|
faChevronLeft
|
||||||
} from '@fortawesome/free-solid-svg-icons'
|
} from '@fortawesome/free-solid-svg-icons'
|
||||||
import { buildFakeMessage } from '../../services/chat_utils/chat_utils.js'
|
import { buildFakeMessage } from '../../services/chat_utils/chat_utils.js'
|
||||||
import { useInterfaceStore } from '../../stores/interface.js'
|
import { useInterfaceStore } from 'src/stores/interface.js'
|
||||||
|
|
||||||
library.add(
|
library.add(
|
||||||
faChevronDown,
|
faChevronDown,
|
||||||
|
|
|
@ -13,7 +13,7 @@ import {
|
||||||
faTimes,
|
faTimes,
|
||||||
faEllipsisH
|
faEllipsisH
|
||||||
} from '@fortawesome/free-solid-svg-icons'
|
} from '@fortawesome/free-solid-svg-icons'
|
||||||
import { useInterfaceStore } from '../../stores/interface'
|
import { useInterfaceStore } from 'src/stores/interface'
|
||||||
|
|
||||||
library.add(
|
library.add(
|
||||||
faTimes,
|
faTimes,
|
||||||
|
|
|
@ -14,7 +14,7 @@ import {
|
||||||
faCog,
|
faCog,
|
||||||
faInfoCircle
|
faInfoCircle
|
||||||
} from '@fortawesome/free-solid-svg-icons'
|
} from '@fortawesome/free-solid-svg-icons'
|
||||||
import { useInterfaceStore } from '../../stores/interface'
|
import { useInterfaceStore } from 'src/stores/interface'
|
||||||
|
|
||||||
library.add(
|
library.add(
|
||||||
faSignInAlt,
|
faSignInAlt,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import EditStatusForm from '../edit_status_form/edit_status_form.vue'
|
import EditStatusForm from '../edit_status_form/edit_status_form.vue'
|
||||||
import Modal from '../modal/modal.vue'
|
import Modal from '../modal/modal.vue'
|
||||||
import get from 'lodash/get'
|
import get from 'lodash/get'
|
||||||
import { useEditStatusStore } from '../../stores/editStatus'
|
import { useEditStatusStore } from 'src/stores/editStatus'
|
||||||
|
|
||||||
const EditStatusModal = {
|
const EditStatusModal = {
|
||||||
components: {
|
components: {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { mapGetters } from 'vuex'
|
import { mapGetters } from 'vuex'
|
||||||
import { mapState as mapPiniaState } from 'pinia'
|
import { mapState as mapPiniaState } from 'pinia'
|
||||||
import { useAnnouncementsStore } from '../../stores/announcements'
|
import { useAnnouncementsStore } from 'src/stores/announcements'
|
||||||
|
|
||||||
import { library } from '@fortawesome/fontawesome-svg-core'
|
import { library } from '@fortawesome/fontawesome-svg-core'
|
||||||
import {
|
import {
|
||||||
|
@ -9,7 +9,7 @@ import {
|
||||||
faBullhorn
|
faBullhorn
|
||||||
} from '@fortawesome/free-solid-svg-icons'
|
} from '@fortawesome/free-solid-svg-icons'
|
||||||
|
|
||||||
import { useInterfaceStore } from '../../stores/interface'
|
import { useInterfaceStore } from 'src/stores/interface'
|
||||||
|
|
||||||
library.add(
|
library.add(
|
||||||
faUserPlus,
|
faUserPlus,
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { useMediaViewerStore } from '../../stores/media_viewer'
|
import { useMediaViewerStore } from 'src/stores/media_viewer'
|
||||||
import Attachment from '../attachment/attachment.vue'
|
import Attachment from '../attachment/attachment.vue'
|
||||||
import { sumBy, set } from 'lodash'
|
import { sumBy, set } from 'lodash'
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@ import { library } from '@fortawesome/fontawesome-svg-core'
|
||||||
import {
|
import {
|
||||||
faTimes
|
faTimes
|
||||||
} from '@fortawesome/free-solid-svg-icons'
|
} from '@fortawesome/free-solid-svg-icons'
|
||||||
import { useInterfaceStore } from '../../stores/interface'
|
import { useInterfaceStore } from 'src/stores/interface'
|
||||||
|
|
||||||
library.add(
|
library.add(
|
||||||
faTimes
|
faTimes
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { useListsStore } from '../../stores/lists'
|
import { useListsStore } from 'src/stores/lists'
|
||||||
import ListsCard from '../lists_card/lists_card.vue'
|
import ListsCard from '../lists_card/lists_card.vue'
|
||||||
|
|
||||||
const Lists = {
|
const Lists = {
|
||||||
|
|
|
@ -10,8 +10,8 @@ import {
|
||||||
faSearch,
|
faSearch,
|
||||||
faChevronLeft
|
faChevronLeft
|
||||||
} from '@fortawesome/free-solid-svg-icons'
|
} from '@fortawesome/free-solid-svg-icons'
|
||||||
import { useInterfaceStore } from '../../stores/interface'
|
import { useInterfaceStore } from 'src/stores/interface'
|
||||||
import { useListsStore } from '../../stores/lists'
|
import { useListsStore } from 'src/stores/lists'
|
||||||
|
|
||||||
library.add(
|
library.add(
|
||||||
faSearch,
|
faSearch,
|
||||||
|
|
|
@ -2,7 +2,7 @@ import { mapState } from 'vuex'
|
||||||
import { mapState as mapPiniaState } from 'pinia'
|
import { mapState as mapPiniaState } from 'pinia'
|
||||||
import NavigationEntry from 'src/components/navigation/navigation_entry.vue'
|
import NavigationEntry from 'src/components/navigation/navigation_entry.vue'
|
||||||
import { getListEntries } from 'src/components/navigation/filter.js'
|
import { getListEntries } from 'src/components/navigation/filter.js'
|
||||||
import { useListsStore } from '../../stores/lists'
|
import { useListsStore } from 'src/stores/lists'
|
||||||
|
|
||||||
export const ListsMenuContent = {
|
export const ListsMenuContent = {
|
||||||
props: [
|
props: [
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { useListsStore } from '../../stores/lists'
|
import { useListsStore } from 'src/stores/lists'
|
||||||
import Timeline from '../timeline/timeline.vue'
|
import Timeline from '../timeline/timeline.vue'
|
||||||
const ListsTimeline = {
|
const ListsTimeline = {
|
||||||
data () {
|
data () {
|
||||||
|
|
|
@ -13,7 +13,7 @@ import {
|
||||||
faCircleNotch,
|
faCircleNotch,
|
||||||
faTimes
|
faTimes
|
||||||
} from '@fortawesome/free-solid-svg-icons'
|
} from '@fortawesome/free-solid-svg-icons'
|
||||||
import { useMediaViewerStore } from '../../stores/media_viewer'
|
import { useMediaViewerStore } from 'src/stores/media_viewer'
|
||||||
|
|
||||||
library.add(
|
library.add(
|
||||||
faChevronLeft,
|
faChevronLeft,
|
||||||
|
|
|
@ -76,9 +76,9 @@ const mediaUpload = {
|
||||||
const testCanvas = document.createElement('canvas')
|
const testCanvas = document.createElement('canvas')
|
||||||
const supportsWebP = testCanvas.toDataURL('image/webp').startsWith('data:image/webp')
|
const supportsWebP = testCanvas.toDataURL('image/webp').startsWith('data:image/webp')
|
||||||
|
|
||||||
// Convert to WebP if supported, otherwise JPEG
|
// Convert to WebP if supported and alwaysUseJpeg is false, otherwise JPEG
|
||||||
const type = supportsWebP ? 'image/webp' : 'image/jpeg'
|
const type = (!this.$store.getters.mergedConfig.alwaysUseJpeg && supportsWebP) ? 'image/webp' : 'image/jpeg'
|
||||||
const extension = supportsWebP ? '.webp' : '.jpg'
|
const extension = type === 'image/webp' ? '.webp' : '.jpg'
|
||||||
|
|
||||||
// Remove the original extension and add new one
|
// Remove the original extension and add new one
|
||||||
const newFileName = file.name.replace(/\.[^/.]+$/, '') + extension
|
const newFileName = file.name.replace(/\.[^/.]+$/, '') + extension
|
||||||
|
|
|
@ -18,7 +18,7 @@ import {
|
||||||
faMinus,
|
faMinus,
|
||||||
faCheckDouble
|
faCheckDouble
|
||||||
} from '@fortawesome/free-solid-svg-icons'
|
} from '@fortawesome/free-solid-svg-icons'
|
||||||
import { useAnnouncementsStore } from '../../stores/announcements'
|
import { useAnnouncementsStore } from 'src/stores/announcements'
|
||||||
|
|
||||||
library.add(
|
library.add(
|
||||||
faTimes,
|
faTimes,
|
||||||
|
|
|
@ -3,7 +3,7 @@ import { library } from '@fortawesome/fontawesome-svg-core'
|
||||||
import {
|
import {
|
||||||
faPen
|
faPen
|
||||||
} from '@fortawesome/free-solid-svg-icons'
|
} from '@fortawesome/free-solid-svg-icons'
|
||||||
import { usePostStatusStore } from '../../stores/postStatus'
|
import { usePostStatusStore } from 'src/stores/postStatus'
|
||||||
|
|
||||||
library.add(
|
library.add(
|
||||||
faPen
|
faPen
|
||||||
|
|
|
@ -4,7 +4,7 @@ import OptionalRouterLink from 'src/components/optional_router_link/optional_rou
|
||||||
import { library } from '@fortawesome/fontawesome-svg-core'
|
import { library } from '@fortawesome/fontawesome-svg-core'
|
||||||
import { faThumbtack } from '@fortawesome/free-solid-svg-icons'
|
import { faThumbtack } from '@fortawesome/free-solid-svg-icons'
|
||||||
import { mapStores } from 'pinia'
|
import { mapStores } from 'pinia'
|
||||||
import { useAnnouncementsStore } from '../../stores/announcements'
|
import { useAnnouncementsStore } from 'src/stores/announcements'
|
||||||
|
|
||||||
library.add(faThumbtack)
|
library.add(faThumbtack)
|
||||||
|
|
||||||
|
|
|
@ -15,8 +15,8 @@ import {
|
||||||
import FaviconService from '../../services/favicon_service/favicon_service.js'
|
import FaviconService from '../../services/favicon_service/favicon_service.js'
|
||||||
import { library } from '@fortawesome/fontawesome-svg-core'
|
import { library } from '@fortawesome/fontawesome-svg-core'
|
||||||
import { faCircleNotch, faArrowUp, faMinus } from '@fortawesome/free-solid-svg-icons'
|
import { faCircleNotch, faArrowUp, faMinus } from '@fortawesome/free-solid-svg-icons'
|
||||||
import { useInterfaceStore } from '../../stores/interface'
|
import { useInterfaceStore } from 'src/stores/interface'
|
||||||
import { useAnnouncementsStore } from '../../stores/announcements'
|
import { useAnnouncementsStore } from 'src/stores/announcements'
|
||||||
|
|
||||||
library.add(
|
library.add(
|
||||||
faCircleNotch,
|
faCircleNotch,
|
||||||
|
|
|
@ -2,7 +2,7 @@ import Timeago from 'components/timeago/timeago.vue'
|
||||||
import genRandomSeed from '../../services/random_seed/random_seed.service.js'
|
import genRandomSeed from '../../services/random_seed/random_seed.service.js'
|
||||||
import RichContent from 'components/rich_content/rich_content.jsx'
|
import RichContent from 'components/rich_content/rich_content.jsx'
|
||||||
import { forEach, map } from 'lodash'
|
import { forEach, map } from 'lodash'
|
||||||
import { usePollsStore } from '../../stores/polls'
|
import { usePollsStore } from 'src/stores/polls'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'Poll',
|
name: 'Poll',
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import PostStatusForm from '../post_status_form/post_status_form.vue'
|
import PostStatusForm from '../post_status_form/post_status_form.vue'
|
||||||
import Modal from '../modal/modal.vue'
|
import Modal from '../modal/modal.vue'
|
||||||
import get from 'lodash/get'
|
import get from 'lodash/get'
|
||||||
import { usePostStatusStore } from '../../stores/postStatus'
|
import { usePostStatusStore } from 'src/stores/postStatus'
|
||||||
|
|
||||||
const PostStatusModal = {
|
const PostStatusModal = {
|
||||||
components: {
|
components: {
|
||||||
|
|
|
@ -3,7 +3,7 @@ import { mapGetters } from 'vuex'
|
||||||
import { mapState } from 'pinia'
|
import { mapState } from 'pinia'
|
||||||
import { library } from '@fortawesome/fontawesome-svg-core'
|
import { library } from '@fortawesome/fontawesome-svg-core'
|
||||||
import { faFilter, faFont, faWrench } from '@fortawesome/free-solid-svg-icons'
|
import { faFilter, faFont, faWrench } from '@fortawesome/free-solid-svg-icons'
|
||||||
import { useInterfaceStore } from '../../stores/interface'
|
import { useInterfaceStore } from 'src/stores/interface'
|
||||||
|
|
||||||
library.add(
|
library.add(
|
||||||
faFilter,
|
faFilter,
|
||||||
|
|
|
@ -4,7 +4,7 @@ import { mapGetters } from 'vuex'
|
||||||
import { mapState } from 'pinia'
|
import { mapState } from 'pinia'
|
||||||
import { library } from '@fortawesome/fontawesome-svg-core'
|
import { library } from '@fortawesome/fontawesome-svg-core'
|
||||||
import { faList, faFolderTree, faBars, faWrench } from '@fortawesome/free-solid-svg-icons'
|
import { faList, faFolderTree, faBars, faWrench } from '@fortawesome/free-solid-svg-icons'
|
||||||
import { useInterfaceStore } from '../../stores/interface'
|
import { useInterfaceStore } from 'src/stores/interface'
|
||||||
|
|
||||||
library.add(
|
library.add(
|
||||||
faList,
|
faList,
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { useReportsStore } from '../../stores/reports'
|
import { useReportsStore } from 'src/stores/reports'
|
||||||
import Select from '../select/select.vue'
|
import Select from '../select/select.vue'
|
||||||
import StatusContent from '../status_content/status_content.vue'
|
import StatusContent from '../status_content/status_content.vue'
|
||||||
import Timeago from '../timeago/timeago.vue'
|
import Timeago from '../timeago/timeago.vue'
|
||||||
|
|
|
@ -21,7 +21,7 @@ import {
|
||||||
import {
|
import {
|
||||||
faWindowMinimize
|
faWindowMinimize
|
||||||
} from '@fortawesome/free-regular-svg-icons'
|
} from '@fortawesome/free-regular-svg-icons'
|
||||||
import { useInterfaceStore } from '../../stores/interface'
|
import { useInterfaceStore } from 'src/stores/interface'
|
||||||
|
|
||||||
const PLEROMAFE_SETTINGS_MAJOR_VERSION = 1
|
const PLEROMAFE_SETTINGS_MAJOR_VERSION = 1
|
||||||
const PLEROMAFE_SETTINGS_MINOR_VERSION = 0
|
const PLEROMAFE_SETTINGS_MINOR_VERSION = 0
|
||||||
|
|
|
@ -269,6 +269,14 @@
|
||||||
{{ $t('settings.image_compression') }}
|
{{ $t('settings.image_compression') }}
|
||||||
</BooleanSetting>
|
</BooleanSetting>
|
||||||
</li>
|
</li>
|
||||||
|
<li>
|
||||||
|
<BooleanSetting
|
||||||
|
path="alwaysUseJpeg"
|
||||||
|
expert="1"
|
||||||
|
>
|
||||||
|
{{ $t('settings.always_use_jpeg') }}
|
||||||
|
</BooleanSetting>
|
||||||
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<BooleanSetting
|
<BooleanSetting
|
||||||
path="useContainFit"
|
path="useContainFit"
|
||||||
|
|
|
@ -21,7 +21,7 @@ import {
|
||||||
faPlus,
|
faPlus,
|
||||||
faCircleNotch
|
faCircleNotch
|
||||||
} from '@fortawesome/free-solid-svg-icons'
|
} from '@fortawesome/free-solid-svg-icons'
|
||||||
import { useInterfaceStore } from '../../../stores/interface'
|
import { useInterfaceStore } from 'src/stores/interface'
|
||||||
|
|
||||||
library.add(
|
library.add(
|
||||||
faTimes,
|
faTimes,
|
||||||
|
|
|
@ -43,7 +43,7 @@ import Checkbox from 'src/components/checkbox/checkbox.vue'
|
||||||
import Select from 'src/components/select/select.vue'
|
import Select from 'src/components/select/select.vue'
|
||||||
|
|
||||||
import Preview from './theme_preview.vue'
|
import Preview from './theme_preview.vue'
|
||||||
import { useInterfaceStore } from '../../../../stores/interface'
|
import { useInterfaceStore } from 'src/stores/interface'
|
||||||
|
|
||||||
// List of color values used in v1
|
// List of color values used in v1
|
||||||
const v1OnlyNames = [
|
const v1OnlyNames = [
|
||||||
|
|
|
@ -4,7 +4,7 @@ import {
|
||||||
faBullhorn,
|
faBullhorn,
|
||||||
faTimes
|
faTimes
|
||||||
} from '@fortawesome/free-solid-svg-icons'
|
} from '@fortawesome/free-solid-svg-icons'
|
||||||
import { useShoutStore } from '../../stores/shout'
|
import { useShoutStore } from 'src/stores/shout'
|
||||||
|
|
||||||
library.add(
|
library.add(
|
||||||
faBullhorn,
|
faBullhorn,
|
||||||
|
|
|
@ -21,9 +21,9 @@ import {
|
||||||
faList,
|
faList,
|
||||||
faFilePen
|
faFilePen
|
||||||
} from '@fortawesome/free-solid-svg-icons'
|
} from '@fortawesome/free-solid-svg-icons'
|
||||||
import { useShoutStore } from '../../stores/shout'
|
import { useShoutStore } from 'src/stores/shout'
|
||||||
import { useInterfaceStore } from '../../stores/interface'
|
import { useInterfaceStore } from 'src/stores/interface'
|
||||||
import { useAnnouncementsStore } from '../../stores/announcements'
|
import { useAnnouncementsStore } from 'src/stores/announcements'
|
||||||
|
|
||||||
library.add(
|
library.add(
|
||||||
faSignInAlt,
|
faSignInAlt,
|
||||||
|
|
|
@ -13,7 +13,7 @@ import {
|
||||||
faLink,
|
faLink,
|
||||||
faPollH
|
faPollH
|
||||||
} from '@fortawesome/free-solid-svg-icons'
|
} from '@fortawesome/free-solid-svg-icons'
|
||||||
import { useMediaViewerStore } from '../../stores/media_viewer'
|
import { useMediaViewerStore } from 'src/stores/media_viewer'
|
||||||
|
|
||||||
library.add(
|
library.add(
|
||||||
faCircleNotch,
|
faCircleNotch,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import { get } from 'lodash'
|
import { get } from 'lodash'
|
||||||
import Modal from '../modal/modal.vue'
|
import Modal from '../modal/modal.vue'
|
||||||
import Status from '../status/status.vue'
|
import Status from '../status/status.vue'
|
||||||
import { useStatusHistoryStore } from '../../stores/statusHistory'
|
import { useStatusHistoryStore } from 'src/stores/statusHistory'
|
||||||
|
|
||||||
const StatusHistoryModal = {
|
const StatusHistoryModal = {
|
||||||
components: {
|
components: {
|
||||||
|
|
|
@ -4,7 +4,7 @@ import { mapState } from 'pinia'
|
||||||
import { FontAwesomeIcon as FAIcon } from '@fortawesome/vue-fontawesome'
|
import { FontAwesomeIcon as FAIcon } from '@fortawesome/vue-fontawesome'
|
||||||
|
|
||||||
import './tab_switcher.scss'
|
import './tab_switcher.scss'
|
||||||
import { useInterfaceStore } from '../../stores/interface'
|
import { useInterfaceStore } from 'src/stores/interface'
|
||||||
|
|
||||||
const findFirstUsable = (slots) => slots.findIndex(_ => _.props)
|
const findFirstUsable = (slots) => slots.findIndex(_ => _.props)
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@ import QuickViewSettings from '../quick_view_settings/quick_view_settings.vue'
|
||||||
import { debounce, throttle, keyBy } from 'lodash'
|
import { debounce, throttle, keyBy } from 'lodash'
|
||||||
import { library } from '@fortawesome/fontawesome-svg-core'
|
import { library } from '@fortawesome/fontawesome-svg-core'
|
||||||
import { faCircleNotch, faCirclePlus, faCog, faMinus, faArrowUp, faCheck } from '@fortawesome/free-solid-svg-icons'
|
import { faCircleNotch, faCirclePlus, faCog, faMinus, faArrowUp, faCheck } from '@fortawesome/free-solid-svg-icons'
|
||||||
import { useInterfaceStore } from '../../stores/interface'
|
import { useInterfaceStore } from 'src/stores/interface'
|
||||||
|
|
||||||
library.add(
|
library.add(
|
||||||
faCircleNotch,
|
faCircleNotch,
|
||||||
|
|
|
@ -9,8 +9,8 @@ import { filterNavigation } from 'src/components/navigation/filter.js'
|
||||||
import {
|
import {
|
||||||
faChevronDown
|
faChevronDown
|
||||||
} from '@fortawesome/free-solid-svg-icons'
|
} from '@fortawesome/free-solid-svg-icons'
|
||||||
import { useInterfaceStore } from '../../stores/interface'
|
import { useInterfaceStore } from 'src/stores/interface'
|
||||||
import { useListsStore } from '../../stores/lists'
|
import { useListsStore } from 'src/stores/lists'
|
||||||
|
|
||||||
library.add(faChevronDown)
|
library.add(faChevronDown)
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@ import RichContent from 'src/components/rich_content/rich_content.jsx'
|
||||||
import MuteConfirm from '../confirm_modal/mute_confirm.vue'
|
import MuteConfirm from '../confirm_modal/mute_confirm.vue'
|
||||||
import generateProfileLink from 'src/services/user_profile_link_generator/user_profile_link_generator'
|
import generateProfileLink from 'src/services/user_profile_link_generator/user_profile_link_generator'
|
||||||
import { mapGetters } from 'vuex'
|
import { mapGetters } from 'vuex'
|
||||||
import { usePostStatusStore } from '../../stores/postStatus'
|
import { usePostStatusStore } from 'src/stores/postStatus'
|
||||||
import { library } from '@fortawesome/fontawesome-svg-core'
|
import { library } from '@fortawesome/fontawesome-svg-core'
|
||||||
import {
|
import {
|
||||||
faBell,
|
faBell,
|
||||||
|
@ -22,6 +22,7 @@ import {
|
||||||
faTimes,
|
faTimes,
|
||||||
faExpandAlt
|
faExpandAlt
|
||||||
} from '@fortawesome/free-solid-svg-icons'
|
} from '@fortawesome/free-solid-svg-icons'
|
||||||
|
|
||||||
import { useMediaViewerStore } from '../../stores/media_viewer'
|
import { useMediaViewerStore } from '../../stores/media_viewer'
|
||||||
import { useInterfaceStore } from '../../stores/interface'
|
import { useInterfaceStore } from '../../stores/interface'
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ import { mapState } from 'pinia'
|
||||||
|
|
||||||
import DialogModal from '../dialog_modal/dialog_modal.vue'
|
import DialogModal from '../dialog_modal/dialog_modal.vue'
|
||||||
import Popover from '../popover/popover.vue'
|
import Popover from '../popover/popover.vue'
|
||||||
import { useListsStore } from '../../stores/lists'
|
import { useListsStore } from 'src/stores/lists'
|
||||||
|
|
||||||
library.add(faChevronRight)
|
library.add(faChevronRight)
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@ import List from '../list/list.vue'
|
||||||
import Checkbox from '../checkbox/checkbox.vue'
|
import Checkbox from '../checkbox/checkbox.vue'
|
||||||
import Modal from '../modal/modal.vue'
|
import Modal from '../modal/modal.vue'
|
||||||
import UserLink from '../user_link/user_link.vue'
|
import UserLink from '../user_link/user_link.vue'
|
||||||
import { useReportsStore } from '../../stores/reports'
|
import { useReportsStore } from 'src/stores/reports'
|
||||||
|
|
||||||
const UserReportingModal = {
|
const UserReportingModal = {
|
||||||
components: {
|
components: {
|
||||||
|
|
|
@ -440,6 +440,7 @@
|
||||||
"attachmentRadius": "Attachments",
|
"attachmentRadius": "Attachments",
|
||||||
"attachments": "Attachments",
|
"attachments": "Attachments",
|
||||||
"image_compression": "Compress images before uploading",
|
"image_compression": "Compress images before uploading",
|
||||||
|
"always_use_jpeg": "Always convert images to JPEG format",
|
||||||
"avatar": "Avatar",
|
"avatar": "Avatar",
|
||||||
"avatarAltRadius": "Avatars (notifications)",
|
"avatarAltRadius": "Avatars (notifications)",
|
||||||
"avatarRadius": "Avatars",
|
"avatarRadius": "Avatars",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import merge from 'lodash.merge'
|
import merge from 'lodash.merge'
|
||||||
import { each, get, set, cloneDeep } from 'lodash'
|
import { each, get, set, cloneDeep } from 'lodash'
|
||||||
import { useInterfaceStore } from '../stores/interface'
|
import { useInterfaceStore } from 'src/stores/interface'
|
||||||
import { storage } from './storage.js'
|
import { storage } from './storage.js'
|
||||||
|
|
||||||
let loaded = false
|
let loaded = false
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { useInterfaceStore } from '../stores/interface'
|
import { useInterfaceStore } from 'src/stores/interface'
|
||||||
|
|
||||||
export default (store) => {
|
export default (store) => {
|
||||||
store.subscribe((mutation, state) => {
|
store.subscribe((mutation, state) => {
|
||||||
|
|
|
@ -7,7 +7,6 @@ import './lib/event_target_polyfill.js'
|
||||||
import instanceModule from './modules/instance.js'
|
import instanceModule from './modules/instance.js'
|
||||||
import statusesModule from './modules/statuses.js'
|
import statusesModule from './modules/statuses.js'
|
||||||
import notificationsModule from './modules/notifications.js'
|
import notificationsModule from './modules/notifications.js'
|
||||||
import listsModule from './modules/lists.js'
|
|
||||||
import usersModule from './modules/users.js'
|
import usersModule from './modules/users.js'
|
||||||
import apiModule from './modules/api.js'
|
import apiModule from './modules/api.js'
|
||||||
import configModule from './modules/config.js'
|
import configModule from './modules/config.js'
|
||||||
|
@ -94,7 +93,6 @@ const persistedStateOptions = {
|
||||||
instance: instanceModule,
|
instance: instanceModule,
|
||||||
// TODO refactor users/statuses modules, they depend on each other
|
// TODO refactor users/statuses modules, they depend on each other
|
||||||
users: usersModule,
|
users: usersModule,
|
||||||
lists: listsModule,
|
|
||||||
statuses: statusesModule,
|
statuses: statusesModule,
|
||||||
notifications: notificationsModule,
|
notifications: notificationsModule,
|
||||||
api: apiModule,
|
api: apiModule,
|
||||||
|
|
|
@ -2,8 +2,8 @@ import backendInteractorService from '../services/backend_interactor_service/bac
|
||||||
import { WSConnectionStatus } from '../services/api/api.service.js'
|
import { WSConnectionStatus } from '../services/api/api.service.js'
|
||||||
import { maybeShowChatNotification } from '../services/chat_utils/chat_utils.js'
|
import { maybeShowChatNotification } from '../services/chat_utils/chat_utils.js'
|
||||||
import { Socket } from 'phoenix'
|
import { Socket } from 'phoenix'
|
||||||
import { useShoutStore } from '../stores/shout.js'
|
import { useShoutStore } from 'src/stores/shout.js'
|
||||||
import { useInterfaceStore } from '../stores/interface.js'
|
import { useInterfaceStore } from 'src/stores/interface.js'
|
||||||
|
|
||||||
const retryTimeout = (multiplier) => 1000 * multiplier
|
const retryTimeout = (multiplier) => 1000 * multiplier
|
||||||
|
|
||||||
|
|
|
@ -3,8 +3,8 @@ import { applyConfig } from '../services/style_setter/style_setter.js'
|
||||||
import messages from '../i18n/messages'
|
import messages from '../i18n/messages'
|
||||||
import { set } from 'lodash'
|
import { set } from 'lodash'
|
||||||
import localeService from '../services/locale/locale.service.js'
|
import localeService from '../services/locale/locale.service.js'
|
||||||
import { useI18nStore } from '../stores/i18n.js'
|
import { useI18nStore } from 'src/stores/i18n.js'
|
||||||
import { useInterfaceStore } from '../stores/interface.js'
|
import { useInterfaceStore } from 'src/stores/interface.js'
|
||||||
|
|
||||||
import { defaultState } from './default_config_state.js'
|
import { defaultState } from './default_config_state.js'
|
||||||
|
|
||||||
|
@ -36,8 +36,6 @@ export const multiChoiceProperties = [
|
||||||
'unsavedPostAction' // save | discard | confirm
|
'unsavedPostAction' // save | discard | confirm
|
||||||
]
|
]
|
||||||
|
|
||||||
console.log('TEST', defaultState)
|
|
||||||
|
|
||||||
// caching the instance default properties
|
// caching the instance default properties
|
||||||
export const instanceDefaultProperties = Object.entries(defaultState)
|
export const instanceDefaultProperties = Object.entries(defaultState)
|
||||||
.filter(([key, value]) => value === undefined)
|
.filter(([key, value]) => value === undefined)
|
||||||
|
|
|
@ -160,5 +160,6 @@ export const defaultState = {
|
||||||
useAbsoluteTimeFormat: undefined, // instance default
|
useAbsoluteTimeFormat: undefined, // instance default
|
||||||
absoluteTimeFormatMinAge: undefined, // instance default
|
absoluteTimeFormatMinAge: undefined, // instance default
|
||||||
absoluteTime12h: undefined, // instance default
|
absoluteTime12h: undefined, // instance default
|
||||||
imageCompression: true
|
imageCompression: true,
|
||||||
|
alwaysUseJpeg: false
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import apiService from '../services/api/api.service.js'
|
import apiService from '../services/api/api.service.js'
|
||||||
import { instanceDefaultProperties } from './config.js'
|
import { instanceDefaultProperties } from './config.js'
|
||||||
import { langCodeToCldrName, ensureFinalFallback } from '../i18n/languages.js'
|
import { langCodeToCldrName, ensureFinalFallback } from '../i18n/languages.js'
|
||||||
import { useInterfaceStore } from '../stores/interface.js'
|
import { useInterfaceStore } from 'src/stores/interface.js'
|
||||||
|
|
||||||
const SORTED_EMOJI_GROUP_IDS = [
|
const SORTED_EMOJI_GROUP_IDS = [
|
||||||
'smileys-and-emotion',
|
'smileys-and-emotion',
|
||||||
|
|
|
@ -1,130 +0,0 @@
|
||||||
import { remove, find } from 'lodash'
|
|
||||||
|
|
||||||
export const defaultState = {
|
|
||||||
allLists: [],
|
|
||||||
allListsObject: {}
|
|
||||||
}
|
|
||||||
|
|
||||||
export const mutations = {
|
|
||||||
setLists (state, value) {
|
|
||||||
state.allLists = value
|
|
||||||
},
|
|
||||||
setList (state, { listId, title }) {
|
|
||||||
if (!state.allListsObject[listId]) {
|
|
||||||
state.allListsObject[listId] = { accountIds: [] }
|
|
||||||
}
|
|
||||||
state.allListsObject[listId].title = title
|
|
||||||
|
|
||||||
const entry = find(state.allLists, { id: listId })
|
|
||||||
if (!entry) {
|
|
||||||
state.allLists.push({ id: listId, title })
|
|
||||||
} else {
|
|
||||||
entry.title = title
|
|
||||||
}
|
|
||||||
},
|
|
||||||
setListAccounts (state, { listId, accountIds }) {
|
|
||||||
if (!state.allListsObject[listId]) {
|
|
||||||
state.allListsObject[listId] = { accountIds: [] }
|
|
||||||
}
|
|
||||||
state.allListsObject[listId].accountIds = accountIds
|
|
||||||
},
|
|
||||||
addListAccount (state, { listId, accountId }) {
|
|
||||||
if (!state.allListsObject[listId]) {
|
|
||||||
state.allListsObject[listId] = { accountIds: [] }
|
|
||||||
}
|
|
||||||
state.allListsObject[listId].accountIds.push(accountId)
|
|
||||||
},
|
|
||||||
removeListAccount (state, { listId, accountId }) {
|
|
||||||
if (!state.allListsObject[listId]) {
|
|
||||||
state.allListsObject[listId] = { accountIds: [] }
|
|
||||||
}
|
|
||||||
const { accountIds } = state.allListsObject[listId]
|
|
||||||
const set = new Set(accountIds)
|
|
||||||
set.delete(accountId)
|
|
||||||
state.allListsObject[listId].accountIds = [...set]
|
|
||||||
},
|
|
||||||
deleteList (state, { listId }) {
|
|
||||||
delete state.allListsObject[listId]
|
|
||||||
remove(state.allLists, list => list.id === listId)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const actions = {
|
|
||||||
setLists ({ commit }, value) {
|
|
||||||
commit('setLists', value)
|
|
||||||
},
|
|
||||||
createList ({ rootState, commit }, { title }) {
|
|
||||||
return rootState.api.backendInteractor.createList({ title })
|
|
||||||
.then((list) => {
|
|
||||||
commit('setList', { listId: list.id, title })
|
|
||||||
return list
|
|
||||||
})
|
|
||||||
},
|
|
||||||
fetchList ({ rootState, commit }, { listId }) {
|
|
||||||
return rootState.api.backendInteractor.getList({ listId })
|
|
||||||
.then((list) => commit('setList', { listId: list.id, title: list.title }))
|
|
||||||
},
|
|
||||||
fetchListAccounts ({ rootState, commit }, { listId }) {
|
|
||||||
return rootState.api.backendInteractor.getListAccounts({ listId })
|
|
||||||
.then((accountIds) => commit('setListAccounts', { listId, accountIds }))
|
|
||||||
},
|
|
||||||
setList ({ rootState, commit }, { listId, title }) {
|
|
||||||
rootState.api.backendInteractor.updateList({ listId, title })
|
|
||||||
commit('setList', { listId, title })
|
|
||||||
},
|
|
||||||
setListAccounts ({ rootState, commit }, { listId, accountIds }) {
|
|
||||||
const saved = rootState.lists.allListsObject[listId].accountIds || []
|
|
||||||
const added = accountIds.filter(id => !saved.includes(id))
|
|
||||||
const removed = saved.filter(id => !accountIds.includes(id))
|
|
||||||
commit('setListAccounts', { listId, accountIds })
|
|
||||||
if (added.length > 0) {
|
|
||||||
rootState.api.backendInteractor.addAccountsToList({ listId, accountIds: added })
|
|
||||||
}
|
|
||||||
if (removed.length > 0) {
|
|
||||||
rootState.api.backendInteractor.removeAccountsFromList({ listId, accountIds: removed })
|
|
||||||
}
|
|
||||||
},
|
|
||||||
addListAccount ({ rootState, commit }, { listId, accountId }) {
|
|
||||||
return rootState
|
|
||||||
.api
|
|
||||||
.backendInteractor
|
|
||||||
.addAccountsToList({ listId, accountIds: [accountId] })
|
|
||||||
.then((result) => {
|
|
||||||
commit('addListAccount', { listId, accountId })
|
|
||||||
return result
|
|
||||||
})
|
|
||||||
},
|
|
||||||
removeListAccount ({ rootState, commit }, { listId, accountId }) {
|
|
||||||
return rootState
|
|
||||||
.api
|
|
||||||
.backendInteractor
|
|
||||||
.removeAccountsFromList({ listId, accountIds: [accountId] })
|
|
||||||
.then((result) => {
|
|
||||||
commit('removeListAccount', { listId, accountId })
|
|
||||||
return result
|
|
||||||
})
|
|
||||||
},
|
|
||||||
deleteList ({ rootState, commit }, { listId }) {
|
|
||||||
rootState.api.backendInteractor.deleteList({ listId })
|
|
||||||
commit('deleteList', { listId })
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export const getters = {
|
|
||||||
findListTitle: state => id => {
|
|
||||||
if (!state.allListsObject[id]) return
|
|
||||||
return state.allListsObject[id].title
|
|
||||||
},
|
|
||||||
findListAccounts: state => id => {
|
|
||||||
return [...state.allListsObject[id].accountIds]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const lists = {
|
|
||||||
state: defaultState,
|
|
||||||
mutations,
|
|
||||||
actions,
|
|
||||||
getters
|
|
||||||
}
|
|
||||||
|
|
||||||
export default lists
|
|
|
@ -11,7 +11,7 @@ import {
|
||||||
closeAllDesktopNotifications
|
closeAllDesktopNotifications
|
||||||
} from '../services/desktop_notification_utils/desktop_notification_utils.js'
|
} from '../services/desktop_notification_utils/desktop_notification_utils.js'
|
||||||
|
|
||||||
import { useReportsStore } from '../stores/reports.js'
|
import { useReportsStore } from 'src/stores/reports.js'
|
||||||
|
|
||||||
const emptyNotifications = () => ({
|
const emptyNotifications = () => ({
|
||||||
desktopNotificationSilence: true,
|
desktopNotificationSilence: true,
|
||||||
|
|
|
@ -125,6 +125,7 @@ export const _getRecentData = (cache, live, isTest) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
const merge = (a, b) => ({
|
const merge = (a, b) => ({
|
||||||
|
_user: a._user ?? b._user,
|
||||||
_version: a._version ?? b._version,
|
_version: a._version ?? b._version,
|
||||||
_timestamp: a._timestamp ?? b._timestamp,
|
_timestamp: a._timestamp ?? b._timestamp,
|
||||||
needUpload: b.needUpload ?? a.needUpload,
|
needUpload: b.needUpload ?? a.needUpload,
|
||||||
|
|
|
@ -3,7 +3,7 @@ import { windowWidth, windowHeight } from '../services/window_utils/window_utils
|
||||||
import oauthApi from '../services/new_api/oauth.js'
|
import oauthApi from '../services/new_api/oauth.js'
|
||||||
import { compact, map, each, mergeWith, last, concat, uniq, isArray } from 'lodash'
|
import { compact, map, each, mergeWith, last, concat, uniq, isArray } from 'lodash'
|
||||||
import { registerPushNotifications, unregisterPushNotifications } from '../services/sw/sw.js'
|
import { registerPushNotifications, unregisterPushNotifications } from '../services/sw/sw.js'
|
||||||
import { useInterfaceStore } from '../stores/interface.js'
|
import { useInterfaceStore } from 'src/stores/interface.js'
|
||||||
|
|
||||||
// TODO: Unify with mergeOrAdd in statuses.js
|
// TODO: Unify with mergeOrAdd in statuses.js
|
||||||
export const mergeOrAdd = (arr, obj, item) => {
|
export const mergeOrAdd = (arr, obj, item) => {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { useListsStore } from '../../stores/lists.js'
|
import { useListsStore } from 'src/stores/lists.js'
|
||||||
import apiService from '../api/api.service.js'
|
import apiService from '../api/api.service.js'
|
||||||
import { promiseInterval } from '../promise_interval/promise_interval.js'
|
import { promiseInterval } from '../promise_interval/promise_interval.js'
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { muteWordHits } from '../status_parser/status_parser.js'
|
import { muteWordHits } from '../status_parser/status_parser.js'
|
||||||
import { showDesktopNotification } from '../desktop_notification_utils/desktop_notification_utils.js'
|
import { showDesktopNotification } from '../desktop_notification_utils/desktop_notification_utils.js'
|
||||||
import { useI18nStore } from '../../stores/i18n.js'
|
import { useI18nStore } from 'src/stores/i18n.js'
|
||||||
import { useAnnouncementsStore } from 'src/stores/announcements'
|
import { useAnnouncementsStore } from 'src/stores/announcements'
|
||||||
|
|
||||||
import FaviconService from 'src/services/favicon_service/favicon_service.js'
|
import FaviconService from 'src/services/favicon_service/favicon_service.js'
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { useInterfaceStore } from '../../stores/interface.js'
|
import { useInterfaceStore } from 'src/stores/interface.js'
|
||||||
import apiService from '../api/api.service.js'
|
import apiService from '../api/api.service.js'
|
||||||
import { promiseInterval } from '../promise_interval/promise_interval.js'
|
import { promiseInterval } from '../promise_interval/promise_interval.js'
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@ import { camelCase } from 'lodash'
|
||||||
|
|
||||||
import apiService from '../api/api.service.js'
|
import apiService from '../api/api.service.js'
|
||||||
import { promiseInterval } from '../promise_interval/promise_interval.js'
|
import { promiseInterval } from '../promise_interval/promise_interval.js'
|
||||||
import { useInterfaceStore } from '../../stores/interface.js'
|
import { useInterfaceStore } from 'src/stores/interface.js'
|
||||||
|
|
||||||
const update = ({ store, statuses, timeline, showImmediately, userId, listId, pagination }) => {
|
const update = ({ store, statuses, timeline, showImmediately, userId, listId, pagination }) => {
|
||||||
const ccTimeline = camelCase(timeline)
|
const ccTimeline = camelCase(timeline)
|
||||||
|
|
|
@ -56,7 +56,7 @@ export const useListsStore = defineStore('lists', {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
setListAccounts ({ listId, accountIds }) {
|
setListAccounts ({ listId, accountIds }) {
|
||||||
const saved = this.allListsObject[listId].accountIds || []
|
const saved = this.allListsObject[listId]?.accountIds || []
|
||||||
const added = accountIds.filter(id => !saved.includes(id))
|
const added = accountIds.filter(id => !saved.includes(id))
|
||||||
const removed = saved.filter(id => !accountIds.includes(id))
|
const removed = saved.filter(id => !accountIds.includes(id))
|
||||||
if (!this.allListsObject[listId]) {
|
if (!this.allListsObject[listId]) {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import { defineStore } from 'pinia'
|
import { defineStore } from 'pinia'
|
||||||
|
|
||||||
import filter from 'lodash/filter'
|
import filter from 'lodash/filter'
|
||||||
import { useInterfaceStore } from '../stores/interface'
|
import { useInterfaceStore } from 'src/stores/interface'
|
||||||
|
|
||||||
export const useReportsStore = defineStore('reports', {
|
export const useReportsStore = defineStore('reports', {
|
||||||
state: () => ({
|
state: () => ({
|
||||||
|
|
|
@ -74,7 +74,7 @@ describe('The serverSideStorage module', () => {
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
it.only('should reset local timestamp to remote if contents are the same', () => {
|
it('should reset local timestamp to remote if contents are the same', () => {
|
||||||
const state = {
|
const state = {
|
||||||
...cloneDeep(defaultState),
|
...cloneDeep(defaultState),
|
||||||
cache: null
|
cache: null
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import { createPinia, setActivePinia } from 'pinia'
|
import { createPinia, setActivePinia } from 'pinia'
|
||||||
import { useListsStore } from '../../../../src/stores/lists.js'
|
import { useListsStore } from 'src/stores/lists.js'
|
||||||
import { createStore } from 'vuex'
|
import { createStore } from 'vuex'
|
||||||
import apiModule from '../../../../src/modules/api.js'
|
import apiModule from 'src/modules/api.js'
|
||||||
|
|
||||||
setActivePinia(createPinia())
|
setActivePinia(createPinia())
|
||||||
const store = useListsStore()
|
const store = useListsStore()
|
||||||
|
|
Loading…
Add table
Reference in a new issue