diff --git a/src/components/settings_modal/admin_tabs/emoji_tab.js b/src/components/settings_modal/admin_tabs/emoji_tab.js index 58e1468f89450b102a4ed07efb561d532105ef1e..b8986f6e88e8519e54a16a9eb3fd4eed0d51079f 100644 --- a/src/components/settings_modal/admin_tabs/emoji_tab.js +++ b/src/components/settings_modal/admin_tabs/emoji_tab.js @@ -31,7 +31,10 @@ const EmojiTab = { newPackName: '', deleteModalVisible: false, remotePackInstance: '', - remotePackDownloadAs: '' + remotePackDownloadAs: '', + + remotePackURL: '', + remotePackFile: null } }, @@ -231,6 +234,47 @@ const EmojiTab = { this.remotePackDownloadAs = '' }) }, + dlRemoteURLPack () { + this.$store.state.api.backendInteractor.downloadRemoteEmojiPackZIP({ + url: this.remotePackURL, packName: this.newPackName + }) + .then(data => data.json()) + .then(resp => { + if (resp === 'ok') { + this.$refs.additionalRemotePopover.hidePopover() + + return this.refreshPackList() + } else { + this.displayError(resp.error) + return Promise.reject(resp) + } + }).then(done => { + this.packName = this.newPackName + this.newPackName = '' + this.remotePackURL = '' + }) + }, + dlRemoteFilePack () { + this.$store.state.api.backendInteractor.downloadRemoteEmojiPackZIP({ + file: this.remotePackFile[0], packName: this.newPackName + }) + .then(data => data.json()) + .then(resp => { + if (resp === 'ok') { + this.$refs.additionalRemotePopover.hidePopover() + + return this.refreshPackList() + } else { + this.displayError(resp.error) + return Promise.reject(resp) + } + }).then(done => { + this.packName = this.newPackName + this.newPackName = '' + this.remotePackURL = '' + }) + }, + displayError (msg) { this.$store.dispatch('pushGlobalNotice', { messageKey: 'admin_dash.emoji.error', diff --git a/src/components/settings_modal/admin_tabs/emoji_tab.vue b/src/components/settings_modal/admin_tabs/emoji_tab.vue index 5742d2ce9fa7359147e3df2e5418b0bdf0219a4d..7e88b469e71c7ac82734c4b5059330821fd6f388 100644 --- a/src/components/settings_modal/admin_tabs/emoji_tab.vue +++ b/src/components/settings_modal/admin_tabs/emoji_tab.vue @@ -62,6 +62,57 @@ </template> </Popover> </button> + <button class="button button-default emoji-panel-additional-actions" + @click="$refs.additionalRemotePopover.showPopover"> + <FAIcon + icon="chevron-down" + /> + + <Popover + ref="additionalRemotePopover" + popover-class="emoji-tab-edit-popover popover-default" + trigger="click" + placement="bottom" + bound-to-selector=".emoji-tab" + :bound-to="{ x: 'container' }" + :offset="{ y: 5 }" + > + <template #content> + <div class="emoji-tab-popover-input"> + <h3>{{ $t('admin_dash.emoji.new_pack_name') }}</h3> + <input + v-model="newPackName" + :placeholder="$t('admin_dash.emoji.new_pack_name')" + class="input" + > + <h3>Import pack from URL</h3> + <input + v-model="remotePackURL" + class="input" + placeholder="Pack .zip URL" + > + <button + class="button button-default btn emoji-tab-popover-button" + type="button" + :disabled="this.newPackName.trim() === '' || this.remotePackURL.trim() === ''" + @click="dlRemoteURLPack">Import</button> + <h3>Import pack from a file</h3> + <input + type="file" + accept="application/zip" + class="emoji-tab-popover-file input" + @change="remotePackFile = $event.target.files" + > + <button + class="button button-default btn emoji-tab-popover-button" + type="button" + :disabled="this.newPackName.trim() === '' || remotePackFile === null || remotePackFile.length === 0" + @click="dlRemoteFilePack">Import</button> + + </div> + </template> + </Popover> + </button> </li> <h3>{{ $t('admin_dash.emoji.emoji_packs') }}</h3> diff --git a/src/services/api/api.service.js b/src/services/api/api.service.js index bcc346866f61ea76c9bf4a96a71a9d0d91831eed..e3e8982a135aafc57f2ae6201fcc4b8dad5f1a50 100644 --- a/src/services/api/api.service.js +++ b/src/services/api/api.service.js @@ -121,6 +121,7 @@ const PLEROMA_EMOJI_IMPORT_FS_URL = '/api/pleroma/emoji/packs/import' const PLEROMA_EMOJI_PACKS_URL = (page, pageSize) => `/api/v1/pleroma/emoji/packs?page=${page}&page_size=${pageSize}` const PLEROMA_EMOJI_PACK_URL = (name) => `/api/v1/pleroma/emoji/pack?name=${name}` const PLEROMA_EMOJI_PACKS_DL_REMOTE_URL = '/api/v1/pleroma/emoji/packs/download' +const PLEROMA_EMOJI_PACKS_DL_REMOTE_ZIP_URL = '/api/v1/pleroma/emoji/packs/download_zip' const PLEROMA_EMOJI_PACKS_LS_REMOTE_URL = (url, page, pageSize) => `/api/v1/pleroma/emoji/packs/remote?url=${url}&page=${page}&page_size=${pageSize}` const PLEROMA_EMOJI_UPDATE_FILE_URL = (name) => `/api/v1/pleroma/emoji/packs/files?name=${name}` @@ -1903,6 +1904,18 @@ const downloadRemoteEmojiPack = ({ instance, packName, as }) => { ) } +const downloadRemoteEmojiPackZIP = ({ url, packName, file }) => { + const data = new FormData() + if (file) data.set('file', file) + if (url) data.set('url', url) + data.set('name', packName) + + return fetch( + PLEROMA_EMOJI_PACKS_DL_REMOTE_ZIP_URL, + { method: 'POST', body: data } + ) +} + const saveEmojiPackMetadata = ({ name, newData }) => { return fetch( PLEROMA_EMOJI_PACK_URL(name), @@ -2108,6 +2121,7 @@ const apiService = { deleteEmojiFile, listRemoteEmojiPacks, downloadRemoteEmojiPack, + downloadRemoteEmojiPackZIP, fetchBookmarkFolders, createBookmarkFolder, updateBookmarkFolder,