mirror of https://github.com/nextcloud/bookmarks
Upgrade "@nextcloud/vue": "^7.2.0" and use md icons consistently
Signed-off-by: Marcel Klehr <mklehr@gmx.net>
This commit is contained in:
parent
3a2d033ecc
commit
aa5ec41906
File diff suppressed because it is too large
Load Diff
|
@ -27,7 +27,7 @@
|
|||
"@nextcloud/event-bus": "^2.1.1",
|
||||
"@nextcloud/initial-state": "^1.2.1",
|
||||
"@nextcloud/router": "^2.0.0",
|
||||
"@nextcloud/vue": "^5.4.0",
|
||||
"@nextcloud/vue": "^7.2.0",
|
||||
"@nextcloud/vue-dashboard": "^2.0.1",
|
||||
"async-parallel": "^1.2.3",
|
||||
"clone-deep": "^4.0.1",
|
||||
|
@ -50,9 +50,9 @@
|
|||
"devDependencies": {
|
||||
"@nextcloud/babel-config": "^1.0.0",
|
||||
"@nextcloud/browserslist-config": "^2.3.0",
|
||||
"@nextcloud/eslint-config": "^6",
|
||||
"@nextcloud/eslint-config": "^8.1.4",
|
||||
"@nextcloud/stylelint-config": "^2",
|
||||
"@nextcloud/webpack-vue-config": "^4",
|
||||
"@nextcloud/webpack-vue-config": "^5.4.0",
|
||||
"@vue/test-utils": "^1.3.0"
|
||||
},
|
||||
"engines": {
|
||||
|
|
|
@ -5,8 +5,7 @@
|
|||
-->
|
||||
|
||||
<template>
|
||||
<Item
|
||||
:title="bookmark.title"
|
||||
<Item :title="bookmark.title"
|
||||
:tags="bookmark.tags"
|
||||
:rename-placeholder="t('bookmarks', 'Enter new title')"
|
||||
:select-label="t('bookmarks', 'Select bookmark')"
|
||||
|
@ -26,76 +25,76 @@
|
|||
<div class="bookmark__title">
|
||||
<h3 :title="bookmark.title">
|
||||
<span v-if="bookmark.preliminary" class="icon-loading-small bookmark__icon" />
|
||||
<figure
|
||||
v-else
|
||||
<figure v-else
|
||||
class="bookmark__icon"
|
||||
:style="{ backgroundImage: 'url(' + iconUrl + ')' }" />
|
||||
{{ bookmark.title }}
|
||||
</h3>
|
||||
<span
|
||||
v-if="bookmark.description"
|
||||
<span v-if="bookmark.description"
|
||||
v-tooltip="bookmark.description"
|
||||
class="bookmark__description"><figure class="icon-file" />
|
||||
{{ bookmark.description }}</span>
|
||||
</div>
|
||||
</template>
|
||||
<template #actions>
|
||||
<ActionButton
|
||||
icon="icon-info"
|
||||
:close-after-click="true"
|
||||
<NcActionButton :close-after-click="true"
|
||||
@click="onDetails">
|
||||
<template #icon>
|
||||
<InformationVariantIcon />
|
||||
</template>
|
||||
{{ t('bookmarks', 'Details') }}
|
||||
</ActionButton>
|
||||
<ActionCheckbox @change="onSelect">
|
||||
</NcActionButton>
|
||||
<NcActionCheckbox @change="onSelect">
|
||||
{{ t('bookmarks', 'Select bookmark') }}
|
||||
</ActionCheckbox>
|
||||
<ActionButton
|
||||
icon="icon-rename"
|
||||
:close-after-click="true"
|
||||
</NcActionCheckbox>
|
||||
<NcActionButton :close-after-click="true"
|
||||
@click="onRename">
|
||||
<template #icon>
|
||||
<PencilIcon />
|
||||
</template>
|
||||
{{ t('bookmarks', 'Rename') }}
|
||||
</ActionButton>
|
||||
<ActionButton
|
||||
:close-after-click="true"
|
||||
</NcActionButton>
|
||||
<NcActionButton :close-after-click="true"
|
||||
@click="onCopyUrl">
|
||||
<template #icon>
|
||||
<ContentCopyIcon :fill-color="colorMainText" />
|
||||
<ContentCopyIcon />
|
||||
</template>
|
||||
{{ t('bookmarks', 'Copy link') }}
|
||||
</ActionButton>
|
||||
<ActionButton :close-after-click="true" @click="onMove">
|
||||
</NcActionButton>
|
||||
<NcActionButton :close-after-click="true" @click="onMove">
|
||||
<template #icon>
|
||||
<FolderMoveIcon
|
||||
:fill-color="colorMainText" />
|
||||
<FolderMoveIcon />
|
||||
</template>
|
||||
{{ t('bookmarks', 'Move') }}
|
||||
</ActionButton>
|
||||
<ActionButton :close-after-click="true" @click="onCopy">
|
||||
</NcActionButton>
|
||||
<NcActionButton :close-after-click="true" @click="onCopy">
|
||||
<template #icon>
|
||||
<FolderPlusIcon
|
||||
:fill-color="colorMainText" />
|
||||
<FolderPlusIcon />
|
||||
</template>
|
||||
{{ t('bookmarks', 'Add to folders') }}
|
||||
</ActionButton>
|
||||
<ActionButton
|
||||
icon="icon-delete"
|
||||
:close-after-click="true"
|
||||
</NcActionButton>
|
||||
<NcActionButton :close-after-click="true"
|
||||
@click="onDelete">
|
||||
<template #icon>
|
||||
<DeleteIcon />
|
||||
</template>
|
||||
{{ t('bookmarks', 'Delete') }}
|
||||
</ActionButton>
|
||||
</NcActionButton>
|
||||
</template>
|
||||
</Item>
|
||||
</template>
|
||||
<script>
|
||||
import Item from './Item'
|
||||
import ActionButton from '@nextcloud/vue/dist/Components/ActionButton'
|
||||
import ActionCheckbox from '@nextcloud/vue/dist/Components/ActionCheckbox'
|
||||
import FolderPlusIcon from 'vue-material-design-icons/FolderPlus'
|
||||
import FolderMoveIcon from 'vue-material-design-icons/FolderMove'
|
||||
import ContentCopyIcon from 'vue-material-design-icons/ContentCopy'
|
||||
import Item from './Item.vue'
|
||||
import { NcActionButton, NcActionCheckbox } from '@nextcloud/vue'
|
||||
import FolderPlusIcon from 'vue-material-design-icons/FolderPlus.vue'
|
||||
import FolderMoveIcon from 'vue-material-design-icons/FolderMove.vue'
|
||||
import ContentCopyIcon from 'vue-material-design-icons/ContentCopy.vue'
|
||||
import PencilIcon from 'vue-material-design-icons/Pencil.vue'
|
||||
import InformationVariantIcon from 'vue-material-design-icons/InformationVariant.vue'
|
||||
import DeleteIcon from 'vue-material-design-icons/Delete.vue'
|
||||
import { getCurrentUser } from '@nextcloud/auth'
|
||||
import { generateUrl } from '@nextcloud/router'
|
||||
import { actions, mutations } from '../store/'
|
||||
import { actions, mutations } from '../store/index.js'
|
||||
import copy from 'copy-text-to-clipboard'
|
||||
import axios from '@nextcloud/axios'
|
||||
|
||||
|
@ -103,11 +102,14 @@ export default {
|
|||
name: 'Bookmark',
|
||||
components: {
|
||||
Item,
|
||||
ActionButton,
|
||||
ActionCheckbox,
|
||||
NcActionButton,
|
||||
NcActionCheckbox,
|
||||
FolderPlusIcon,
|
||||
FolderMoveIcon,
|
||||
ContentCopyIcon,
|
||||
PencilIcon,
|
||||
InformationVariantIcon,
|
||||
DeleteIcon,
|
||||
},
|
||||
props: {
|
||||
bookmark: {
|
||||
|
|
|
@ -13,26 +13,27 @@
|
|||
</template>
|
||||
<div v-else-if="bookmark.textContent" class="content" v-html="content" />
|
||||
<div v-else>
|
||||
<EmptyContent icon="icon-download">
|
||||
{{ t('bookmarks', 'Content pending') }}
|
||||
<template #desc>
|
||||
{{ t('bookmarks', 'This content is being downloaded for offline use. Please check back later.') }}
|
||||
<NcEmptyContent :title="t('bookmarks', 'Content pending')"
|
||||
:description="t('bookmarks', 'This content is being downloaded for offline use. Please check back later.')">
|
||||
<template #icon>
|
||||
<DownloadIcon />
|
||||
</template>
|
||||
</EmptyContent>
|
||||
</NcEmptyContent>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import DownloadIcon from 'vue-material-design-icons/Download.vue'
|
||||
import sanitizeHtml from 'sanitize-html'
|
||||
import { generateUrl, generateRemoteUrl } from '@nextcloud/router'
|
||||
import EmptyContent from '@nextcloud/vue/dist/Components/EmptyContent'
|
||||
import { NcEmptyContent } from '@nextcloud/vue'
|
||||
|
||||
const MIN_TEXT_LENGTH = 350
|
||||
|
||||
export default {
|
||||
name: 'BookmarkContent',
|
||||
components: { EmptyContent },
|
||||
components: { NcEmptyContent, DownloadIcon },
|
||||
computed: {
|
||||
isActive() {
|
||||
if (!this.$store.state.sidebar) return false
|
||||
|
@ -68,7 +69,7 @@ export default {
|
|||
<style>
|
||||
.bookmark-content {
|
||||
position: absolute;
|
||||
top: 50px;/* nc header bar */
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: max( min(27vw, 500px), 300px); /* side bar */
|
||||
bottom: 0;
|
||||
|
|
|
@ -6,62 +6,77 @@
|
|||
|
||||
<template>
|
||||
<div class="bulkediting">
|
||||
<Actions :primary="true" :menu-title="selectionDescription">
|
||||
<ActionButton icon="icon-external" close-after-click @click="onBulkOpen">
|
||||
{{ t('bookmarks', 'Open all selected') }}
|
||||
</ActionButton>
|
||||
<ActionButton close-after-click @click="onBulkMove">
|
||||
<NcActions :primary="true" :menu-title="selectionDescription">
|
||||
<NcActionButton close-after-click @click="onBulkOpen">
|
||||
<template #icon>
|
||||
<FolderMoveIcon :fill-color="colorMainText" class="action-button-mdi-icon" />
|
||||
<OpenInNewIcon />
|
||||
</template>
|
||||
{{ t('bookmarks', 'Open all selected') }}
|
||||
</NcActionButton>
|
||||
<NcActionButton close-after-click @click="onBulkMove">
|
||||
<template #icon>
|
||||
<FolderMoveIcon />
|
||||
</template>
|
||||
{{ t('bookmarks', 'Move selection') }}
|
||||
</ActionButton>
|
||||
<ActionButton v-if="!selectedFolders.length" close-after-click @click="onBulkCopy">
|
||||
</NcActionButton>
|
||||
<NcActionButton v-if="!selectedFolders.length" close-after-click @click="onBulkCopy">
|
||||
<template #icon>
|
||||
<FolderPlusIcon :fill-color="colorMainText" class="action-button-mdi-icon" />
|
||||
<FolderPlusIcon />
|
||||
</template>
|
||||
{{ t('bookmarks', 'Add to folders') }}
|
||||
</ActionButton>
|
||||
<ActionInput
|
||||
v-if="!selectedFolders.length"
|
||||
</NcActionButton>
|
||||
<NcActionInput v-if="!selectedFolders.length"
|
||||
:value="selectionTags"
|
||||
icon="icon-tag"
|
||||
type="multiselect"
|
||||
:options="allTags"
|
||||
:multiple="true"
|
||||
:taggable="true"
|
||||
@tag="onBulkTag([...selectionTags, $event])"
|
||||
@input="onBulkTag">
|
||||
<template #icon>
|
||||
<TagIcon />
|
||||
</template>
|
||||
{{ t('bookmarks', 'Edit tags of selection') }}
|
||||
</ActionInput>
|
||||
<ActionButton icon="icon-delete" close-after-click @click="onBulkDelete">
|
||||
</NcActionInput>
|
||||
<NcActionButton close-after-click @click="onBulkDelete">
|
||||
<template #icon>
|
||||
<DeleteIcon />
|
||||
</template>
|
||||
{{ t('bookmarks', 'Delete selection') }}
|
||||
</ActionButton>
|
||||
<ActionSeparator />
|
||||
<ActionButton icon="icon-checkmark" @click="onSelectAll">
|
||||
</NcActionButton>
|
||||
<NcActionSeparator />
|
||||
<NcActionButton @click="onSelectAll">
|
||||
<template #icon>
|
||||
<SelectAllIcon />
|
||||
</template>
|
||||
{{ t('bookmarks', 'Select all') }}
|
||||
</ActionButton>
|
||||
<ActionButton icon="icon-close" @click="onCancelSelection">
|
||||
</NcActionButton>
|
||||
<NcActionButton @click="onCancelSelection">
|
||||
<template #icon>
|
||||
<SelectOffIcon />
|
||||
</template>
|
||||
{{ t('bookmarks', 'Cancel selection') }}
|
||||
</ActionButton>
|
||||
</Actions>
|
||||
</NcActionButton>
|
||||
</NcActions>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
import Actions from '@nextcloud/vue/dist/Components/Actions'
|
||||
import ActionInput from '@nextcloud/vue/dist/Components/ActionInput'
|
||||
import ActionButton from '@nextcloud/vue/dist/Components/ActionButton'
|
||||
import ActionSeparator from '@nextcloud/vue/dist/Components/ActionSeparator'
|
||||
import FolderPlusIcon from 'vue-material-design-icons/FolderPlus'
|
||||
import FolderMoveIcon from 'vue-material-design-icons/FolderMove'
|
||||
import { actions, mutations } from '../store'
|
||||
import intersection from 'lodash/intersection'
|
||||
import { NcActions, NcActionSeparator, NcActionButton, NcActionInput } from '@nextcloud/vue'
|
||||
import FolderPlusIcon from 'vue-material-design-icons/FolderPlus.vue'
|
||||
import FolderMoveIcon from 'vue-material-design-icons/FolderMove.vue'
|
||||
import OpenInNewIcon from 'vue-material-design-icons/OpenInNew.vue'
|
||||
import TagIcon from 'vue-material-design-icons/Tag.vue'
|
||||
import SelectAllIcon from 'vue-material-design-icons/SelectAll.vue'
|
||||
import SelectOffIcon from 'vue-material-design-icons/SelectOff.vue'
|
||||
import DeleteIcon from 'vue-material-design-icons/Delete.vue'
|
||||
import { actions, mutations } from '../store/index.js'
|
||||
import intersection from 'lodash/intersection.js'
|
||||
|
||||
export default {
|
||||
name: 'BulkEditing',
|
||||
components: { ActionInput, ActionSeparator, FolderPlusIcon, FolderMoveIcon, ActionButton, Actions },
|
||||
components: { NcActionInput, NcActionSeparator, FolderPlusIcon, FolderMoveIcon, NcActionButton, NcActions, OpenInNewIcon, TagIcon, SelectAllIcon, SelectOffIcon, DeleteIcon },
|
||||
data() {
|
||||
return {
|
||||
selectionTags: [],
|
||||
|
@ -151,5 +166,6 @@ export default {
|
|||
opacity: 1 !important;
|
||||
padding: 0 !important;
|
||||
margin-top: 1px;
|
||||
min-width: 500px;
|
||||
}
|
||||
</style>
|
||||
|
|
|
@ -7,24 +7,28 @@
|
|||
<template>
|
||||
<div :class="['controls', $store.state.public && 'wide']">
|
||||
<div class="controls__left">
|
||||
<Actions v-if="$route.name === routes.FOLDER">
|
||||
<ActionButton @click="onClickBack">
|
||||
<ArrowLeftIcon slot="icon" :size="18" :fill-color="colorMainText" />
|
||||
<NcActions v-if="$route.name === routes.FOLDER">
|
||||
<NcActionButton @click="onClickBack">
|
||||
<template #icon>
|
||||
<ArrowLeftIcon />
|
||||
</template>
|
||||
{{ t('bookmarks', 'Go back') }}
|
||||
</ActionButton>
|
||||
</Actions>
|
||||
</NcActionButton>
|
||||
</NcActions>
|
||||
<template v-if="$route.name === routes.FOLDER">
|
||||
<h2><FolderIcon :size="18" :fill-color="colorMainText" /> <span>{{ folder.title }}</span></h2>
|
||||
<Actions v-if="permissions.canShare">
|
||||
<ActionButton icon="icon-share" :close-after-click="true" @click="onOpenFolderShare">
|
||||
<h2><FolderIcon /> <span>{{ folder.title }}</span></h2>
|
||||
<NcActions v-if="permissions.canShare">
|
||||
<NcActionButton :close-after-click="true" @click="onOpenFolderShare">
|
||||
<template #icon>
|
||||
<ShareVariantIcon />
|
||||
</template>
|
||||
{{ t('bookmarks', 'Share folder') }}
|
||||
</ActionButton>
|
||||
</Actions>
|
||||
</NcActionButton>
|
||||
</NcActions>
|
||||
</template>
|
||||
<template v-if="$route.name === routes.TAGS">
|
||||
<span class="icon-tag" />
|
||||
<Multiselect
|
||||
class="controls__tags"
|
||||
<TagIcon />
|
||||
<NcMultiselect class="controls__tags"
|
||||
:value="tags"
|
||||
:auto-limit="false"
|
||||
:limit="7"
|
||||
|
@ -33,101 +37,102 @@
|
|||
:placeholder="t('bookmarks', 'Select one or more tags')"
|
||||
@input="onTagsChange" />
|
||||
</template>
|
||||
<Actions
|
||||
v-if="!isPublic"
|
||||
<NcActions v-if="!isPublic"
|
||||
v-tooltip="t('bookmarks', 'New')"
|
||||
:title="t('bookmarks', 'New')"
|
||||
:default-icon="'icon-add'">
|
||||
<ActionButton
|
||||
icon="icon-link"
|
||||
:close-after-click="true"
|
||||
:title="t('bookmarks', 'New')">
|
||||
<template #icon>
|
||||
<PlusIcon />
|
||||
</template>
|
||||
<NcActionButton :close-after-click="true"
|
||||
@click="onAddBookmark">
|
||||
<template #icon>
|
||||
<EarthIcon />
|
||||
</template>
|
||||
{{
|
||||
t('bookmarks', 'New bookmark')
|
||||
}}
|
||||
</ActionButton>
|
||||
<ActionButton
|
||||
icon="icon-folder"
|
||||
:close-after-click="true"
|
||||
</NcActionButton>
|
||||
<NcActionButton :close-after-click="true"
|
||||
@click="onAddFolder">
|
||||
<template #icon>
|
||||
<FolderIcon />
|
||||
</template>
|
||||
{{ t('bookmarks', 'New folder') }}
|
||||
</ActionButton>
|
||||
</Actions>
|
||||
</NcActionButton>
|
||||
</NcActions>
|
||||
<BulkEditing v-if="hasSelection" />
|
||||
</div>
|
||||
<div class="controls__right">
|
||||
<Actions>
|
||||
<ActionButton
|
||||
:icon="
|
||||
viewMode === 'list'
|
||||
? 'icon-toggle-pictures'
|
||||
: 'icon-toggle-filelist'
|
||||
"
|
||||
@click="onToggleViewMode">
|
||||
<NcActions>
|
||||
<NcActionButton @click="onToggleViewMode">
|
||||
<template #icon>
|
||||
<ViewListIcon v-if="viewMode !== 'list'" />
|
||||
<ViewGridIcon v-else />
|
||||
</template>
|
||||
{{ viewMode === 'list' ? t('bookmarks', 'Change to grid view') : t('bookmarks', 'Change to list view') }}
|
||||
</ActionButton>
|
||||
</Actions>
|
||||
<Actions v-tooltip="sortingOptions[sorting].description">
|
||||
</NcActionButton>
|
||||
</NcActions>
|
||||
<NcActions v-tooltip="sortingOptions[sorting].description">
|
||||
<template #icon>
|
||||
<component :is="sortingOptions[sorting].icon" :size="20" :fill-color="colorMainText" />
|
||||
</template>
|
||||
<ActionButton v-for="(option, key) in sortingOptions"
|
||||
<NcActionButton v-for="(option, key) in sortingOptions"
|
||||
:key="key"
|
||||
:close-after-click="true"
|
||||
@click="onChangeSorting(key)">
|
||||
<template #icon>
|
||||
<component :is="option.icon"
|
||||
:size="20"
|
||||
:fill-color="key === sorting? colorPrimaryElement : colorMainText" />
|
||||
</template>
|
||||
{{ option.description }}
|
||||
</ActionButton>
|
||||
</Actions>
|
||||
<Actions force-menu>
|
||||
</NcActionButton>
|
||||
</NcActions>
|
||||
<NcActions force-menu>
|
||||
<template #icon>
|
||||
<RssIcon :fill-color="colorMainText" :size="20" class="action-button-mdi-icon" />
|
||||
<RssIcon />
|
||||
</template>
|
||||
<ActionButton
|
||||
:title="t('bookmarks', 'Copy RSS Feed of current view')"
|
||||
<NcActionButton :title="t('bookmarks', 'Copy RSS Feed of current view')"
|
||||
:close-after-click="true"
|
||||
@click="copyRssUrl">
|
||||
<template #icon>
|
||||
<RssIcon :fill-color="colorMainText" :size="20" class="action-button-mdi-icon" />
|
||||
<RssIcon />
|
||||
</template>
|
||||
{{ !$store.state.public? t('bookmarks', 'The RSS feed requires authentication with your Nextcloud credentials') : '' }}
|
||||
</ActionButton>
|
||||
</Actions>
|
||||
</NcActionButton>
|
||||
</NcActions>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import Multiselect from '@nextcloud/vue/dist/Components/Multiselect'
|
||||
import Actions from '@nextcloud/vue/dist/Components/Actions'
|
||||
import ActionButton from '@nextcloud/vue/dist/Components/ActionButton'
|
||||
import ActionInput from '@nextcloud/vue/dist/Components/ActionInput'
|
||||
import ActionRouter from '@nextcloud/vue/dist/Components/ActionRouter'
|
||||
import FolderIcon from 'vue-material-design-icons/Folder'
|
||||
import ArrowLeftIcon from 'vue-material-design-icons/ArrowLeft'
|
||||
import RssIcon from 'vue-material-design-icons/Rss'
|
||||
import SortAlphabeticalAscendingIcon from 'vue-material-design-icons/SortAlphabeticalAscending'
|
||||
import SortBoolAscendingIcon from 'vue-material-design-icons/SortBoolAscending'
|
||||
import SortClockAscendingOutlineIcon from 'vue-material-design-icons/SortClockAscendingOutline'
|
||||
import SortCalendarAscendingIcon from 'vue-material-design-icons/SortCalendarAscending'
|
||||
import SortAscendingIcon from 'vue-material-design-icons/SortAscending'
|
||||
import { actions, mutations } from '../store/'
|
||||
import { NcMultiselect, NcActions, NcActionButton, NcActionInput, NcActionRouter } from '@nextcloud/vue'
|
||||
import EarthIcon from 'vue-material-design-icons/Earth.vue'
|
||||
import ViewGridIcon from 'vue-material-design-icons/ViewGrid.vue'
|
||||
import ViewListIcon from 'vue-material-design-icons/ViewList.vue'
|
||||
import PlusIcon from 'vue-material-design-icons/Plus.vue'
|
||||
import FolderIcon from 'vue-material-design-icons/Folder.vue'
|
||||
import ArrowLeftIcon from 'vue-material-design-icons/ArrowLeft.vue'
|
||||
import RssIcon from 'vue-material-design-icons/Rss.vue'
|
||||
import SortAlphabeticalAscendingIcon from 'vue-material-design-icons/SortAlphabeticalAscending.vue'
|
||||
import SortBoolAscendingIcon from 'vue-material-design-icons/SortBoolAscending.vue'
|
||||
import SortClockAscendingOutlineIcon from 'vue-material-design-icons/SortClockAscendingOutline.vue'
|
||||
import SortCalendarAscendingIcon from 'vue-material-design-icons/SortCalendarAscending.vue'
|
||||
import SortAscendingIcon from 'vue-material-design-icons/SortAscending.vue'
|
||||
import ShareVariantIcon from 'vue-material-design-icons/ShareVariant.vue'
|
||||
import TagIcon from 'vue-material-design-icons/Tag.vue'
|
||||
import { actions, mutations } from '../store/index.js'
|
||||
import { generateUrl } from '@nextcloud/router'
|
||||
import BulkEditing from './BulkEditing'
|
||||
import BulkEditing from './BulkEditing.vue'
|
||||
import copy from 'copy-text-to-clipboard'
|
||||
|
||||
export default {
|
||||
name: 'Controls',
|
||||
components: {
|
||||
BulkEditing,
|
||||
Multiselect,
|
||||
Actions,
|
||||
ActionButton,
|
||||
ActionInput,
|
||||
ActionRouter,
|
||||
NcMultiselect,
|
||||
NcActions,
|
||||
NcActionButton,
|
||||
NcActionInput,
|
||||
NcActionRouter,
|
||||
RssIcon,
|
||||
SortAscendingIcon,
|
||||
SortCalendarAscendingIcon,
|
||||
|
@ -136,6 +141,12 @@ export default {
|
|||
SortBoolAscendingIcon,
|
||||
FolderIcon,
|
||||
ArrowLeftIcon,
|
||||
PlusIcon,
|
||||
ViewGridIcon,
|
||||
ViewListIcon,
|
||||
EarthIcon,
|
||||
ShareVariantIcon,
|
||||
TagIcon,
|
||||
},
|
||||
props: {},
|
||||
data() {
|
||||
|
@ -277,7 +288,7 @@ export default {
|
|||
</script>
|
||||
<style>
|
||||
.controls {
|
||||
padding: 0 8px 0 44px;
|
||||
padding: 4px 8px 0 44px;
|
||||
display: flex;
|
||||
position: absolute;
|
||||
z-index: 100;
|
||||
|
@ -291,9 +302,8 @@ export default {
|
|||
.controls h2 {
|
||||
margin: 0;
|
||||
margin-left: 10px;
|
||||
margin-right: 10px;
|
||||
display: flex;
|
||||
position: relative;
|
||||
top: -2px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
|
@ -301,11 +311,6 @@ export default {
|
|||
margin-left: 5px;
|
||||
}
|
||||
|
||||
.controls h2 > .material-design-icon {
|
||||
position: relative;
|
||||
top: 3px;
|
||||
}
|
||||
|
||||
.controls .action-item {
|
||||
height: 45px;
|
||||
}
|
||||
|
@ -334,12 +339,6 @@ export default {
|
|||
flex: 1;
|
||||
}
|
||||
|
||||
.controls__tags .multiselect__tags {
|
||||
border-top: none !important;
|
||||
border-left: none !important;
|
||||
border-right: none !important;
|
||||
}
|
||||
|
||||
.controls__right {
|
||||
flex: 2;
|
||||
display: flex;
|
||||
|
|
|
@ -5,25 +5,25 @@
|
|||
-->
|
||||
|
||||
<template>
|
||||
<Modal v-if="showModal" :title="title" @close="onClose">
|
||||
<NcModal v-if="showNcModal" :title="title" @close="onClose">
|
||||
<div class="copy-dialog">
|
||||
<FolderPicker :title="title" :filter="filterFolders" @submit="onSubmit" />
|
||||
</div>
|
||||
</Modal>
|
||||
</NcModal>
|
||||
</template>
|
||||
<script>
|
||||
import Modal from '@nextcloud/vue/dist/Components/Modal'
|
||||
import { actions, mutations } from '../store/'
|
||||
import FolderPicker from './FolderPicker'
|
||||
import { NcModal } from '@nextcloud/vue'
|
||||
import { actions, mutations } from '../store/index.js'
|
||||
import FolderPicker from './FolderPicker.vue'
|
||||
|
||||
export default {
|
||||
name: 'CopyDialog',
|
||||
components: {
|
||||
FolderPicker,
|
||||
Modal,
|
||||
NcModal,
|
||||
},
|
||||
computed: {
|
||||
showModal() {
|
||||
showNcModal() {
|
||||
return this.$store.state.displayCopyDialog
|
||||
},
|
||||
selection() {
|
||||
|
@ -40,7 +40,7 @@ export default {
|
|||
methods: {
|
||||
async onSubmit(folderId) {
|
||||
this.$store.commit(mutations.DISPLAY_COPY_DIALOG, false)
|
||||
await this.$store.dispatch(actions.COPY_SELECTION, folderId)
|
||||
await this.$store.dispatch(actions.NcNcModal, folderId)
|
||||
this.$store.commit(mutations.RESET_SELECTION)
|
||||
},
|
||||
onClose() {
|
||||
|
|
|
@ -6,41 +6,52 @@
|
|||
|
||||
<template>
|
||||
<div class="bookmarkslist__emptyBookmarks">
|
||||
<EmptyContent icon="icon-favorite">
|
||||
{{ t('bookmarks', 'Welcome to Bookmarks') }}
|
||||
<template #desc>
|
||||
<p>{{ t('bookmarks', 'This app allows you to manage links to your favorite places on the web.') }}</p>
|
||||
<p />
|
||||
<p>{{ t('bookmarks', 'Sort your bookmarks into folders, label them with tags and share them with others! The app will regularly check all your links for availability and display unavailable links. If you add a link to a file on the web, the file will be automatically downloaded to your Nextcloud Files. You can also import bookmarks exported from other services or directly sync bookmarks from all your browsers with this app.') }}</p>
|
||||
<p />
|
||||
<NcEmptyContent :title="t('bookmarks', 'Welcome to Bookmarks')" :description="t('bookmarks', 'This app allows you to manage links to your favorite places on the web. Sort your bookmarks into folders, label them with tags and share them with others! The app will regularly check all your links for availability and display unavailable links. If you add a link to a file on the web, the file will be automatically downloaded to your Nextcloud Files. You can also import bookmarks exported from other services or directly sync bookmarks from all your browsers with this app.')">
|
||||
<template #icon>
|
||||
<StarShootingIcon />
|
||||
</template>
|
||||
<template #action>
|
||||
<input ref="import"
|
||||
type="file"
|
||||
class="import"
|
||||
size="5"
|
||||
@change="onImportSubmit">
|
||||
<button @click="onCreateOpen">
|
||||
<NcButton @click="onCreateOpen">
|
||||
<template #icon>
|
||||
<PlusIcon />
|
||||
</template>
|
||||
{{ t('bookmarks', 'Add a bookmark') }}
|
||||
</button>
|
||||
<button @click="onImportOpen">
|
||||
<span :class="{'icon-upload': !importing, 'icon-loading-small': importing}" /> {{ t('bookmarks', 'Import bookmarks') }}
|
||||
</button>
|
||||
<button @click="onSyncOpen">
|
||||
<SyncIcon :fill-color="colorMainText" :size="18" :style="{opacity: 0.5, display: 'inline'}" /> {{ t('bookmarks', 'Sync with your browser') }}
|
||||
</button>
|
||||
</NcButton>
|
||||
<NcButton @click="onImportOpen">
|
||||
<template #icon>
|
||||
<UploadIcon v-if="!importing" />
|
||||
<NcLoadingIcon v-else />
|
||||
</template>
|
||||
{{ t('bookmarks', 'Import bookmarks') }}
|
||||
</NcButton>
|
||||
<NcButton @click="onSyncOpen">
|
||||
<template #icon>
|
||||
<SyncIcon />
|
||||
</template>
|
||||
{{ t('bookmarks', 'Sync with your browser') }}
|
||||
</NcButton>
|
||||
</template>
|
||||
</EmptyContent>
|
||||
</NcEmptyContent>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import EmptyContent from '@nextcloud/vue/dist/Components/EmptyContent'
|
||||
import { actions, mutations } from '../store'
|
||||
import { privateRoutes } from '../router'
|
||||
import SyncIcon from 'vue-material-design-icons/Sync'
|
||||
import { NcEmptyContent, NcButton, NcLoadingIcon } from '@nextcloud/vue'
|
||||
import { actions, mutations } from '../store/index.js'
|
||||
import { privateRoutes } from '../router.js'
|
||||
import SyncIcon from 'vue-material-design-icons/Sync.vue'
|
||||
import PlusIcon from 'vue-material-design-icons/Plus.vue'
|
||||
import UploadIcon from 'vue-material-design-icons/Upload.vue'
|
||||
import StarShootingIcon from 'vue-material-design-icons/StarShooting.vue'
|
||||
|
||||
export default {
|
||||
name: 'FirstRun',
|
||||
components: { EmptyContent, SyncIcon },
|
||||
components: { NcEmptyContent, SyncIcon, NcButton, PlusIcon, UploadIcon, NcLoadingIcon, StarShootingIcon },
|
||||
data() {
|
||||
return { importing: false }
|
||||
},
|
||||
|
@ -84,13 +95,7 @@ export default {
|
|||
left: -1000px;
|
||||
}
|
||||
|
||||
.material-design-icon {
|
||||
position: relative;
|
||||
top: 4px;
|
||||
display: inline-flex;
|
||||
}
|
||||
|
||||
p {
|
||||
button {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
</style>
|
||||
|
|
|
@ -39,52 +39,69 @@
|
|||
</div>
|
||||
</template>
|
||||
<template #actions>
|
||||
<ActionButton icon="icon-info" :close-after-click="true" @click="onDetails">
|
||||
<NcActionButton :close-after-click="true" @click="onDetails">
|
||||
<template #icon>
|
||||
<InformationVariantIcon />
|
||||
</template>
|
||||
{{ t('bookmarks', 'Details') }}
|
||||
</ActionButton>
|
||||
<ActionCheckbox @change="clickSelect">
|
||||
</NcActionButton>
|
||||
<NcActionCheckbox @change="clickSelect">
|
||||
{{ t('bookmarks', 'Select folder') }}
|
||||
</ActionCheckbox>
|
||||
<ActionButton v-if="permissions.canShare"
|
||||
</NcActionCheckbox>
|
||||
<NcActionButton v-if="permissions.canShare"
|
||||
icon="icon-share"
|
||||
:close-after-click="true"
|
||||
@click="onShare">
|
||||
<template #icon>
|
||||
<ShareVariantIcon />
|
||||
</template>
|
||||
{{ t('bookmarks', 'Share folder') }}
|
||||
</ActionButton>
|
||||
<ActionButton icon="icon-rename" :close-after-click="true" @click="onRename">
|
||||
</NcActionButton>
|
||||
<NcActionButton :close-after-click="true" @click="onRename">
|
||||
<template #icon>
|
||||
<PencilIcon />
|
||||
</template>
|
||||
{{ t('bookmarks', 'Rename folder') }}
|
||||
</ActionButton>
|
||||
<ActionButton :close-after-click="true" @click="onMove">
|
||||
</NcActionButton>
|
||||
<NcActionButton :close-after-click="true" @click="onMove">
|
||||
<template #icon>
|
||||
<FolderMoveIcon :fill-color="colorMainText" />
|
||||
</template>
|
||||
{{ t('bookmarks', 'Move folder') }}
|
||||
</ActionButton>
|
||||
<ActionButton icon="icon-delete" :close-after-click="true" @click="onDelete">
|
||||
</NcActionButton>
|
||||
<NcActionButton :close-after-click="true" @click="onDelete">
|
||||
<template #icon>
|
||||
<DeleteIcon />
|
||||
</template>
|
||||
{{ t('bookmarks', 'Delete folder') }}
|
||||
</ActionButton>
|
||||
</NcActionButton>
|
||||
</template>
|
||||
</Item>
|
||||
</template>
|
||||
<script>
|
||||
import { getCurrentUser } from '@nextcloud/auth'
|
||||
import FolderMoveIcon from 'vue-material-design-icons/FolderMove'
|
||||
import FolderIcon from 'vue-material-design-icons/Folder'
|
||||
import ShareVariantIcon from 'vue-material-design-icons/ShareVariant'
|
||||
import ActionButton from '@nextcloud/vue/dist/Components/ActionButton'
|
||||
import ActionCheckbox from '@nextcloud/vue/dist/Components/ActionCheckbox'
|
||||
import { actions, mutations } from '../store/'
|
||||
import Item from './Item'
|
||||
import FolderMoveIcon from 'vue-material-design-icons/FolderMove.vue'
|
||||
import FolderIcon from 'vue-material-design-icons/Folder.vue'
|
||||
import ShareVariantIcon from 'vue-material-design-icons/ShareVariant.vue'
|
||||
import DeleteIcon from 'vue-material-design-icons/Delete.vue'
|
||||
import PencilIcon from 'vue-material-design-icons/Pencil.vue'
|
||||
import InformationVariantIcon from 'vue-material-design-icons/InformationVariant.vue'
|
||||
import { NcActionButton, NcActionCheckbox } from '@nextcloud/vue'
|
||||
import { actions, mutations } from '../store/index.js'
|
||||
import Item from './Item.vue'
|
||||
|
||||
export default {
|
||||
name: 'Folder',
|
||||
components: {
|
||||
Item,
|
||||
ActionButton,
|
||||
ActionCheckbox,
|
||||
NcActionButton,
|
||||
NcActionCheckbox,
|
||||
FolderIcon,
|
||||
FolderMoveIcon,
|
||||
ShareVariantIcon,
|
||||
DeleteIcon,
|
||||
PencilIcon,
|
||||
InformationVariantIcon,
|
||||
},
|
||||
props: {
|
||||
folder: {
|
||||
|
|
|
@ -5,16 +5,16 @@
|
|||
-->
|
||||
|
||||
<template>
|
||||
<AppContentList :show-details="showDetails" @update:show-details="$emit('update:show-details', $event)">
|
||||
<NcAppContentList :show-details="showDetails" @update:show-details="$emit('update:show-details', $event)">
|
||||
<TreeFolder v-for="folder in rootFolder.children"
|
||||
:key="folder.id"
|
||||
:folder="folder"
|
||||
@select="onSelect($event)" />
|
||||
</AppContentList>
|
||||
</NcAppContentList>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import AppContentList from '@nextcloud/vue/dist/Components/AppContentList'
|
||||
import { NcAppContentList } from '@nextcloud/vue'
|
||||
import TreeFolder from './TreeFolder'
|
||||
import { privateRoutes } from '../router'
|
||||
|
||||
|
@ -22,7 +22,7 @@ export default {
|
|||
name: 'FolderOverview',
|
||||
components: {
|
||||
TreeFolder,
|
||||
AppContentList,
|
||||
NcAppContentList,
|
||||
},
|
||||
props: {
|
||||
showDetails: {
|
||||
|
|
|
@ -8,12 +8,12 @@
|
|||
<div class="folderpicker">
|
||||
<h2>{{ title }}</h2>
|
||||
<div class="currentfolder">
|
||||
<Actions v-if="currentFolder.id !== -1">
|
||||
<ActionButton @click="onSelect(currentFolder.parent_folder)">
|
||||
<NcActions v-if="currentFolder.id !== -1">
|
||||
<NcActionButton @click="onSelect(currentFolder.parent_folder)">
|
||||
<ArrowLeftIcon slot="icon" :size="18" :fill-color="colorMainText" />
|
||||
{{ t('bookmarks', 'Go back') }}
|
||||
</ActionButton>
|
||||
</Actions>
|
||||
</NcActionButton>
|
||||
</NcActions>
|
||||
<h2 v-if="currentFolder.id !== -1">
|
||||
<FolderIcon :fill-color="colorMainText" /><span>{{ currentFolder.title }}</span>
|
||||
</h2>
|
||||
|
@ -35,19 +35,18 @@
|
|||
</template>
|
||||
|
||||
<script>
|
||||
import Actions from '@nextcloud/vue/dist/Components/Actions'
|
||||
import ActionButton from '@nextcloud/vue/dist/Components/ActionButton'
|
||||
import FolderIcon from 'vue-material-design-icons/Folder'
|
||||
import ArrowLeftIcon from 'vue-material-design-icons/ArrowLeft'
|
||||
import HomeIcon from 'vue-material-design-icons/Home'
|
||||
import TreeFolder from './TreeFolder'
|
||||
import { NcActions, NcActionButton } from '@nextcloud/vue'
|
||||
import FolderIcon from 'vue-material-design-icons/Folder.vue'
|
||||
import ArrowLeftIcon from 'vue-material-design-icons/ArrowLeft.vue'
|
||||
import HomeIcon from 'vue-material-design-icons/Home.vue'
|
||||
import TreeFolder from './TreeFolder.vue'
|
||||
|
||||
export default {
|
||||
name: 'FolderPicker',
|
||||
components: {
|
||||
TreeFolder,
|
||||
Actions,
|
||||
ActionButton,
|
||||
NcActions,
|
||||
NcActionButton,
|
||||
FolderIcon,
|
||||
ArrowLeftIcon,
|
||||
HomeIcon,
|
||||
|
|
|
@ -5,21 +5,21 @@
|
|||
-->
|
||||
|
||||
<template>
|
||||
<Modal v-if="show" :title="t('bookmarks', 'Select folder')" @close="onClose">
|
||||
<NcModal v-if="show" :title="t('bookmarks', 'Select folder')" @close="onClose">
|
||||
<div class="folderpicker-dialog">
|
||||
<FolderPicker :title="t('bookmarks', 'Select folder')" @submit="onSelect" />
|
||||
</div>
|
||||
</Modal>
|
||||
</NcModal>
|
||||
</template>
|
||||
<script>
|
||||
import Modal from '@nextcloud/vue/dist/Components/Modal'
|
||||
import FolderPicker from './FolderPicker'
|
||||
import { NcModal } from '@nextcloud/vue'
|
||||
import FolderPicker from './FolderPicker.vue'
|
||||
|
||||
export default {
|
||||
name: 'FolderPickerDialog',
|
||||
components: {
|
||||
FolderPicker,
|
||||
Modal,
|
||||
NcModal,
|
||||
},
|
||||
props: {
|
||||
value: {
|
||||
|
|
|
@ -5,8 +5,7 @@
|
|||
-->
|
||||
|
||||
<template>
|
||||
<div
|
||||
v-drop-target="{allow: allowDrop, drop: (e) => $emit('drop', e)}"
|
||||
<div v-drop-target="{allow: allowDrop, drop: (e) => $emit('drop', e)}"
|
||||
:class="{
|
||||
item: true,
|
||||
active,
|
||||
|
@ -16,16 +15,14 @@
|
|||
:draggable="draggable && !renaming"
|
||||
@dragstart="onDragStart">
|
||||
<template v-if="!renaming">
|
||||
<a
|
||||
:href="url"
|
||||
<a :href="url"
|
||||
class="item__clickLink"
|
||||
tabindex="0"
|
||||
target="_blank"
|
||||
@click="onClick"
|
||||
@contextmenu="onRightClick">
|
||||
<div v-if="editable && selectable" ref="checkbox" class="item__checkbox">
|
||||
<input :checked="selected" class="checkbox" type="checkbox"><label
|
||||
v-tooltip="selectLabel"
|
||||
<input :checked="selected" class="checkbox" type="checkbox"><label v-tooltip="selectLabel"
|
||||
:aria-label="selectLabel"
|
||||
@click="$event.preventDefault(); $event.stopImmediatePropagation(); $emit('select');" />
|
||||
</div>
|
||||
|
@ -38,48 +35,46 @@
|
|||
</div>
|
||||
<div v-if="editable && !selected"
|
||||
ref="actions"
|
||||
class="item__actions"
|
||||
class="item__NcActions"
|
||||
@click="$event.preventDefault(); $event.stopPropagation()">
|
||||
<Actions ref="actions">
|
||||
<NcActions ref="actions">
|
||||
<slot name="actions" />
|
||||
</Actions>
|
||||
</NcActions>
|
||||
</div>
|
||||
</a>
|
||||
</template>
|
||||
<div v-else class="item__rename">
|
||||
<slot name="icon" />
|
||||
<input
|
||||
ref="input"
|
||||
<input ref="input"
|
||||
v-model="newTitle"
|
||||
type="text"
|
||||
:placeholder="renamePlaceholder"
|
||||
@keyup.enter="onRenameSubmit">
|
||||
<Actions>
|
||||
<ActionButton icon="icon-checkmark" @click="onRenameSubmit">
|
||||
<NcActions>
|
||||
<NcActionButton icon="icon-checkmark" @click="onRenameSubmit">
|
||||
{{ t('bookmarks', 'Submit') }}
|
||||
</ActionButton>
|
||||
</Actions>
|
||||
<Actions>
|
||||
<ActionButton icon="icon-close" @click="$emit('rename-cancel')">
|
||||
</NcActionButton>
|
||||
</NcActions>
|
||||
<NcActions>
|
||||
<NcActionButton icon="icon-close" @click="$emit('rename-cancel')">
|
||||
{{ t('bookmarks', 'Cancel') }}
|
||||
</ActionButton>
|
||||
</Actions>
|
||||
</NcActionButton>
|
||||
</NcActions>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import Vue from 'vue'
|
||||
import Actions from '@nextcloud/vue/dist/Components/Actions'
|
||||
import ActionButton from '@nextcloud/vue/dist/Components/ActionButton'
|
||||
import TagLine from './TagLine'
|
||||
import DragImage from './DragImage'
|
||||
import { mutations } from '../store'
|
||||
import { NcActions, NcActionButton } from '@nextcloud/vue'
|
||||
import TagLine from './TagLine.vue'
|
||||
import DragImage from './DragImage.vue'
|
||||
import { mutations } from '../store/index.js'
|
||||
|
||||
export default {
|
||||
name: 'Item',
|
||||
components: {
|
||||
Actions,
|
||||
ActionButton,
|
||||
NcActions,
|
||||
NcActionButton,
|
||||
TagLine,
|
||||
},
|
||||
props: {
|
||||
|
@ -308,7 +303,7 @@ export default {
|
|||
box-shadow: #aaa 0 0 3px inset;
|
||||
}
|
||||
|
||||
.item__actions {
|
||||
.item__NcActions {
|
||||
flex: 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
<template>
|
||||
<Modal v-if="showModal" :can-close="false">
|
||||
<NcModal v-if="showNcModal" :can-close="false">
|
||||
<div class="loading icon-loading">
|
||||
<h3>{{ title }}</h3>
|
||||
</div>
|
||||
</Modal>
|
||||
</NcModal>
|
||||
</template>
|
||||
<script>
|
||||
import Modal from '@nextcloud/vue/dist/Components/Modal'
|
||||
import { NcModal } from '@nextcloud/vue'
|
||||
|
||||
export default {
|
||||
name: 'LoadingModal',
|
||||
components: {
|
||||
Modal,
|
||||
NcModal,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
|
@ -22,7 +22,7 @@ export default {
|
|||
moveSelection: this.t('bookmkarks', 'Moving selection'),
|
||||
copySelection: this.t('bookmkarks', 'Adding selection to folders'),
|
||||
},
|
||||
showModal: false,
|
||||
showNcModal: false,
|
||||
showTimeout: null,
|
||||
}
|
||||
},
|
||||
|
@ -43,11 +43,11 @@ export default {
|
|||
state(newState, previous) {
|
||||
if (this.state && !previous) {
|
||||
this.showTimeout = setTimeout(() => {
|
||||
this.showModal = true
|
||||
this.showNcModal = true
|
||||
}, 500)
|
||||
} else if (!this.state && previous) {
|
||||
clearTimeout(this.showTimeout)
|
||||
this.showModal = false
|
||||
this.showNcModal = false
|
||||
}
|
||||
},
|
||||
},
|
||||
|
|
|
@ -5,25 +5,25 @@
|
|||
-->
|
||||
|
||||
<template>
|
||||
<Modal v-if="showModal" :title="title" @close="onClose">
|
||||
<NcModal v-if="showNcModal" :title="title" @close="onClose">
|
||||
<div class="move-dialog">
|
||||
<FolderPicker :title="title" :filter="filterFolders" @submit="onSubmit" />
|
||||
</div>
|
||||
</Modal>
|
||||
</NcModal>
|
||||
</template>
|
||||
<script>
|
||||
import Modal from '@nextcloud/vue/dist/Components/Modal'
|
||||
import { actions, mutations } from '../store/'
|
||||
import FolderPicker from './FolderPicker'
|
||||
import { NcModal } from '@nextcloud/vue'
|
||||
import { actions, mutations } from '../store/index.js'
|
||||
import FolderPicker from './FolderPicker.vue'
|
||||
|
||||
export default {
|
||||
name: 'MoveDialog',
|
||||
components: {
|
||||
FolderPicker,
|
||||
Modal,
|
||||
NcModal,
|
||||
},
|
||||
computed: {
|
||||
showModal() {
|
||||
showNcModal() {
|
||||
return this.$store.state.displayMoveDialog
|
||||
},
|
||||
selection() {
|
||||
|
|
|
@ -5,142 +5,140 @@
|
|||
-->
|
||||
|
||||
<template>
|
||||
<AppNavigation class="navigation">
|
||||
<NcAppNavigation class="navigation">
|
||||
<template #list>
|
||||
<AppNavigationItem key="menu-home"
|
||||
<NcAppNavigationItem key="menu-home"
|
||||
:to="{ name: routes.HOME }"
|
||||
icon="icon-home"
|
||||
:title="t('bookmarks', 'All bookmarks')"
|
||||
:exact="true">
|
||||
<AppNavigationCounter slot="counter">
|
||||
<HomeIcon slot="icon" />
|
||||
<NcAppNavigationCounter slot="counter">
|
||||
{{ allBookmarksCount | largeNumbers }}
|
||||
</AppNavigationCounter>
|
||||
</AppNavigationItem>
|
||||
<AppNavigationItem key="menu-recent"
|
||||
</NcAppNavigationCounter>
|
||||
</NcAppNavigationItem>
|
||||
<NcAppNavigationItem key="menu-recent"
|
||||
:to="{ name: routes.RECENT }"
|
||||
:title="t('bookmarks', 'Recent')">
|
||||
<HistoryIcon slot="icon" :size="18" :fill-color="colorMainText" />
|
||||
</AppNavigationItem>
|
||||
<AppNavigationItem
|
||||
key="menu-shared-folders"
|
||||
<HistoryIcon slot="icon" />
|
||||
</NcAppNavigationItem>
|
||||
<NcAppNavigationItem key="menu-shared-folders"
|
||||
:to="{ name: routes.SHARED_FOLDERS }"
|
||||
:title="t('bookmarks', 'Shared with you')">
|
||||
<ShareVariantIcon slot="icon" :size="18" :fill-color="colorMainText" />
|
||||
<AppNavigationCounter v-show="Boolean(sharedFoldersCount)" slot="counter">
|
||||
<ShareVariantIcon slot="icon" />
|
||||
<NcAppNavigationCounter v-show="Boolean(sharedFoldersCount)" slot="counter">
|
||||
{{ sharedFoldersCount | largeNumbers }}
|
||||
</AppNavigationCounter>
|
||||
</AppNavigationItem>
|
||||
<AppNavigationItem
|
||||
key="menu-archived"
|
||||
</NcAppNavigationCounter>
|
||||
</NcAppNavigationItem>
|
||||
<NcAppNavigationItem key="menu-archived"
|
||||
:to="{ name: routes.ARCHIVED }"
|
||||
:title="t('bookmarks', 'Files')">
|
||||
<FileDocumentMultipleIcon slot="icon"
|
||||
:size="18"
|
||||
:fill-color="colorMainText" />
|
||||
<AppNavigationCounter v-show="Boolean(archivedBookmarksCount)" slot="counter">
|
||||
<FileDocumentMultipleIcon slot="icon" />
|
||||
<NcAppNavigationCounter v-show="Boolean(archivedBookmarksCount)" slot="counter">
|
||||
{{ archivedBookmarksCount }}
|
||||
</AppNavigationCounter>
|
||||
</AppNavigationItem>
|
||||
<AppNavigationItem
|
||||
key="menu-duplicated"
|
||||
</NcAppNavigationCounter>
|
||||
</NcAppNavigationItem>
|
||||
<NcAppNavigationItem key="menu-duplicated"
|
||||
:to="{ name: routes.DUPLICATED }"
|
||||
:title="t('bookmarks', 'Duplicates')">
|
||||
<VectorLinkIcon slot="icon" :size="18" :fill-color="colorMainText" />
|
||||
<AppNavigationCounter v-show="Boolean(duplicatedBookmarksCount)" slot="counter">
|
||||
<VectorLinkIcon slot="icon" />
|
||||
<NcAppNavigationCounter v-show="Boolean(duplicatedBookmarksCount)" slot="counter">
|
||||
{{ duplicatedBookmarksCount | largeNumbers }}
|
||||
</AppNavigationCounter>
|
||||
</AppNavigationItem>
|
||||
<AppNavigationItem
|
||||
key="menu-unavailable"
|
||||
</NcAppNavigationCounter>
|
||||
</NcAppNavigationItem>
|
||||
<NcAppNavigationItem key="menu-unavailable"
|
||||
:to="{ name: routes.UNAVAILABLE }"
|
||||
:title="t('bookmarks', 'Broken links')">
|
||||
<LinkVariantOffIcon slot="icon" :size="18" :fill-color="colorMainText" />
|
||||
<AppNavigationCounter v-show="Boolean(unavailableBookmarksCount)" slot="counter">
|
||||
<LinkVariantOffIcon slot="icon" />
|
||||
<NcAppNavigationCounter v-show="Boolean(unavailableBookmarksCount)" slot="counter">
|
||||
{{ unavailableBookmarksCount | largeNumbers }}
|
||||
</AppNavigationCounter>
|
||||
</AppNavigationItem>
|
||||
<AppNavigationSpacer />
|
||||
<AppNavigationNewItem key="menu-new-tag"
|
||||
</NcAppNavigationCounter>
|
||||
</NcAppNavigationItem>
|
||||
<NcAppNavigationSpacer />
|
||||
<NcAppNavigationNewItem key="menu-new-tag"
|
||||
:title="t('bookmarks', 'New tag')"
|
||||
@new-item="onNewTag">
|
||||
<TagPlusIcon slot="icon" :size="18" :fill-color="colorMainText" />
|
||||
</AppNavigationNewItem>
|
||||
<TagPlusIcon slot="icon" />
|
||||
</NcAppNavigationNewItem>
|
||||
<template v-if="Boolean(tags.length)">
|
||||
<AppNavigationItem key="menu-tags"
|
||||
<NcAppNavigationItem key="menu-tags"
|
||||
:title="t('bookmarks', 'Search tags')"
|
||||
@click="onSearchTags">
|
||||
<TagMultipleIcon slot="icon" :size="18" :fill-color="colorMainText" />
|
||||
</AppNavigationItem>
|
||||
<AppNavigationItem v-for="tag in tags"
|
||||
<TagMultipleIcon slot="icon" />
|
||||
</NcAppNavigationItem>
|
||||
<NcAppNavigationItem v-for="tag in tags"
|
||||
:key="'tag-'+tag.name"
|
||||
v-drop-target="{allow: (e) => allowDropOnTag(tag.name, e), drop: (e) => onDropOnTag(tag.name, e)}"
|
||||
icon="icon-tag"
|
||||
:to="tag.route"
|
||||
:force-menu="true"
|
||||
:edit-label="t('bookmarks', 'Rename')"
|
||||
:editable="!isPublic"
|
||||
:title="tag.name"
|
||||
@update:title="onRenameTag(tag.name, $event)">
|
||||
<AppNavigationCounter slot="counter">
|
||||
<TagIcon slot="icon" />
|
||||
<NcAppNavigationCounter slot="counter">
|
||||
{{ tag.count | largeNumbers }}
|
||||
</AppNavigationCounter>
|
||||
</NcAppNavigationCounter>
|
||||
<template v-if="!isPublic" slot="actions">
|
||||
<ActionButton icon="icon-delete" :close-after-click="true" @click="onDeleteTag(tag.name)">
|
||||
<NcActionButton :close-after-click="true" @click="onDeleteTag(tag.name)">
|
||||
<template #icon>
|
||||
<DeleteIcon />
|
||||
</template>
|
||||
{{ t('bookmarks', 'Delete') }}
|
||||
</ActionButton>
|
||||
</NcActionButton>
|
||||
</template>
|
||||
</AppNavigationItem>
|
||||
<AppNavigationItem key="menu-untagged"
|
||||
</NcAppNavigationItem>
|
||||
<NcAppNavigationItem key="menu-untagged"
|
||||
:to="{ name: routes.UNTAGGED }"
|
||||
:title="t('bookmarks', 'Untagged')">
|
||||
<TagOffIcon slot="icon" :size="18" :fill-color="colorMainText" />
|
||||
</AppNavigationItem>
|
||||
<TagOffIcon slot="icon" />
|
||||
</NcAppNavigationItem>
|
||||
</template>
|
||||
<template v-if="Number(bookmarksLimit) > 0">
|
||||
<AppNavigationSpacer />
|
||||
<AppNavigationItem :pinned="true" icon="icon-quota" :title="t('bookmarks', '{used} bookmarks of {available} available', {used: allBookmarksCount, available: bookmarksLimit})">
|
||||
<NcAppNavigationSpacer />
|
||||
<NcAppNavigationItem :pinned="true" :title="t('bookmarks', '{used} bookmarks of {available} available', {used: allBookmarksCount, available: bookmarksLimit})">
|
||||
<template #icon>
|
||||
<GaugeIcon />
|
||||
</template>
|
||||
<ProgressBar :val="allBookmarksCount" :max="bookmarksLimit" />
|
||||
</AppNavigationItem>
|
||||
</NcAppNavigationItem>
|
||||
</template>
|
||||
</template>
|
||||
<template #footer>
|
||||
<AppNavigationSettings v-if="!isPublic">
|
||||
<NcAppNavigationSettings v-if="!isPublic">
|
||||
<Settings />
|
||||
</AppNavigationSettings>
|
||||
</NcAppNavigationSettings>
|
||||
</template>
|
||||
</AppNavigation>
|
||||
</NcAppNavigation>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import AppNavigation from '@nextcloud/vue/dist/Components/AppNavigation'
|
||||
import AppNavigationItem from '@nextcloud/vue/dist/Components/AppNavigationItem'
|
||||
import AppNavigationNewItem from '@nextcloud/vue/dist/Components/AppNavigationNewItem'
|
||||
import AppNavigationCounter from '@nextcloud/vue/dist/Components/AppNavigationCounter'
|
||||
import AppNavigationSettings from '@nextcloud/vue/dist/Components/AppNavigationSettings'
|
||||
import AppNavigationSpacer from '@nextcloud/vue/dist/Components/AppNavigationSpacer'
|
||||
import ActionButton from '@nextcloud/vue/dist/Components/ActionButton'
|
||||
import HistoryIcon from 'vue-material-design-icons/History'
|
||||
import TagOffIcon from 'vue-material-design-icons/TagOff'
|
||||
import LinkVariantOffIcon from 'vue-material-design-icons/LinkVariantOff'
|
||||
import ShareVariantIcon from 'vue-material-design-icons/ShareVariant'
|
||||
import FileDocumentMultipleIcon from 'vue-material-design-icons/FileDocumentMultiple'
|
||||
import TagPlusIcon from 'vue-material-design-icons/TagPlus'
|
||||
import TagMultipleIcon from 'vue-material-design-icons/TagMultiple'
|
||||
import VectorLinkIcon from 'vue-material-design-icons/VectorLink'
|
||||
import { NcActionButton, NcAppNavigation, NcAppNavigationItem, NcAppNavigationNewItem, NcAppNavigationCounter, NcAppNavigationSettings, NcAppNavigationSpacer } from '@nextcloud/vue'
|
||||
import HomeIcon from 'vue-material-design-icons/Home.vue'
|
||||
import HistoryIcon from 'vue-material-design-icons/History.vue'
|
||||
import TagOffIcon from 'vue-material-design-icons/TagOff.vue'
|
||||
import LinkVariantOffIcon from 'vue-material-design-icons/LinkVariantOff.vue'
|
||||
import ShareVariantIcon from 'vue-material-design-icons/ShareVariant.vue'
|
||||
import FileDocumentMultipleIcon from 'vue-material-design-icons/FileDocumentMultiple.vue'
|
||||
import TagPlusIcon from 'vue-material-design-icons/TagPlus.vue'
|
||||
import TagMultipleIcon from 'vue-material-design-icons/TagMultiple.vue'
|
||||
import VectorLinkIcon from 'vue-material-design-icons/VectorLink.vue'
|
||||
import TagIcon from 'vue-material-design-icons/Tag.vue'
|
||||
import DeleteIcon from 'vue-material-design-icons/Delete.vue'
|
||||
import GaugeIcon from 'vue-material-design-icons/Gauge.vue'
|
||||
import ProgressBar from 'vue-simple-progress'
|
||||
import Settings from './Settings'
|
||||
import { actions, mutations } from '../store/'
|
||||
import Settings from './Settings.vue'
|
||||
import { actions, mutations } from '../store/index.js'
|
||||
|
||||
export default {
|
||||
name: 'Navigation',
|
||||
components: {
|
||||
AppNavigation,
|
||||
AppNavigationItem,
|
||||
AppNavigationNewItem,
|
||||
AppNavigationCounter,
|
||||
AppNavigationSettings,
|
||||
AppNavigationSpacer,
|
||||
ActionButton,
|
||||
NcAppNavigation,
|
||||
NcAppNavigationItem,
|
||||
NcAppNavigationNewItem,
|
||||
NcAppNavigationCounter,
|
||||
NcAppNavigationSettings,
|
||||
NcAppNavigationSpacer,
|
||||
NcActionButton,
|
||||
Settings,
|
||||
ProgressBar,
|
||||
HistoryIcon,
|
||||
|
@ -151,6 +149,10 @@ export default {
|
|||
FileDocumentMultipleIcon,
|
||||
ShareVariantIcon,
|
||||
VectorLinkIcon,
|
||||
HomeIcon,
|
||||
TagIcon,
|
||||
DeleteIcon,
|
||||
GaugeIcon,
|
||||
},
|
||||
|
||||
filters: {
|
||||
|
|
|
@ -6,57 +6,79 @@
|
|||
|
||||
<template>
|
||||
<div class="bookmarkslist__emptyBookmarks">
|
||||
<EmptyContent v-if="$route.name === routes.ARCHIVED">
|
||||
{{ t('bookmarks', 'No bookmarked files') }}
|
||||
<template #desc>
|
||||
{{ t('bookmarks', 'Bookmarks to files like photos or PDFs will automatically be saved to your Nextcloud files, so you can still find them even when the link goes offline.') }}
|
||||
<NcEmptyContent v-if="$route.name === routes.ARCHIVED"
|
||||
:title="t('bookmarks', 'No bookmarked files')"
|
||||
:description="t('bookmarks', 'Bookmarks to files like photos or PDFs will automatically be saved to your Nextcloud files, so you can still find them even when the link goes offline.')">
|
||||
<template #icon>
|
||||
<FileDocumentMultipleIcon />
|
||||
</template>
|
||||
</EmptyContent>
|
||||
<EmptyContent v-else-if="$route.name === routes.UNAVAILABLE">
|
||||
{{ t('bookmarks', 'No broken links') }}
|
||||
<template #desc>
|
||||
{{ t('bookmarks', 'Bookmarked links are checked regularly and the ones that cannot be reached are listed here.') }}
|
||||
</NcEmptyContent>
|
||||
<NcEmptyContent v-else-if="$route.name === routes.UNAVAILABLE"
|
||||
:title="t('bookmarks', 'No broken links')"
|
||||
:description="t('bookmarks', 'Bookmarked links are checked regularly and the ones that cannot be reached are listed here.')">
|
||||
<template #icon>
|
||||
<LinkVariantOffIcon />
|
||||
</template>
|
||||
</EmptyContent>
|
||||
<EmptyContent v-else-if="$route.name === routes.SHARED_FOLDERS">
|
||||
{{ t('bookmarks', 'No shared folders') }}
|
||||
<template #desc>
|
||||
{{ t('bookmarks', 'You can share bookmark folders with others. All folders shared with you are listed here.') }}
|
||||
</NcEmptyContent>
|
||||
<NcEmptyContent v-else-if="$route.name === routes.SHARED_FOLDERS"
|
||||
:title="t('bookmarks', 'No shared folders')"
|
||||
:description="t('bookmarks', 'You can share bookmark folders with others. All folders shared with you are listed here.')">
|
||||
<template #icon>
|
||||
<ShareVariantIcon />
|
||||
</template>
|
||||
</EmptyContent>
|
||||
<EmptyContent v-else-if="$route.name === routes.DUPLICATED">
|
||||
{{ t('bookmarks', 'No duplicated bookmarks') }}
|
||||
<template #desc>
|
||||
{{ t('bookmarks', 'One bookmark can be in multiple folders at once. Updating it will update all copies. All duplicated bookmarks are listed here for convenience.') }}
|
||||
</NcEmptyContent>
|
||||
<NcEmptyContent v-else-if="$route.name === routes.DUPLICATED"
|
||||
:title="t('bookmarks', 'No duplicated bookmarks')"
|
||||
:description="t('bookmarks', 'One bookmark can be in multiple folders at once. Updating it will update all copies. All duplicated bookmarks are listed here for convenience.')">
|
||||
<template #icon>
|
||||
<VectorLinkIcon />
|
||||
</template>
|
||||
</EmptyContent>
|
||||
<EmptyContent v-else icon="icon-favorite">
|
||||
{{ t('bookmarks', 'No bookmarks here') }}
|
||||
<template v-if="!isPublic" #desc>
|
||||
<p>{{ t('bookmarks', 'Add bookmarks manually or import bookmarks from a HTML file.') }}</p>
|
||||
</NcEmptyContent>
|
||||
<NcEmptyContent v-else
|
||||
:title="t('bookmarks', 'No bookmarks here')"
|
||||
:description="t('bookmarks', 'Add bookmarks manually or import bookmarks from a HTML file.')">
|
||||
<template #icon>
|
||||
<StarShootingIcon />
|
||||
</template>
|
||||
<template v-if="!isPublic" #action>
|
||||
<input ref="import"
|
||||
type="file"
|
||||
class="import"
|
||||
size="5"
|
||||
@change="onImportSubmit">
|
||||
<button @click="onCreateOpen">
|
||||
<NcButton @click="onCreateOpen">
|
||||
<template #icon>
|
||||
<PlusIcon />
|
||||
</template>
|
||||
{{ t('bookmarks', 'Add a bookmark') }}
|
||||
</button>
|
||||
<button @click="onImportOpen">
|
||||
<span :class="{'icon-upload': !importing, 'icon-loading-small': importing}" /> {{ t('bookmarks', 'Import bookmarks') }}
|
||||
</button>
|
||||
</NcButton>
|
||||
<NcButton @click="onImportOpen">
|
||||
<template #icon>
|
||||
<UploadIcon v-if="!importing" />
|
||||
<NcLoadingIcon v-else />
|
||||
</template>
|
||||
{{ t('bookmarks', 'Import bookmarks') }}
|
||||
</NcButton>
|
||||
</template>
|
||||
</EmptyContent>
|
||||
</NcEmptyContent>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import EmptyContent from '@nextcloud/vue/dist/Components/EmptyContent'
|
||||
import { actions, mutations } from '../store'
|
||||
import { privateRoutes } from '../router'
|
||||
import { NcEmptyContent, NcButton, NcLoadingIcon } from '@nextcloud/vue'
|
||||
import { actions, mutations } from '../store/index.js'
|
||||
import { privateRoutes } from '../router.js'
|
||||
import StarShootingIcon from 'vue-material-design-icons/StarShooting.vue'
|
||||
import UploadIcon from 'vue-material-design-icons/Upload.vue'
|
||||
import PlusIcon from 'vue-material-design-icons/Plus.vue'
|
||||
import ShareVariantIcon from 'vue-material-design-icons/ShareVariant.vue'
|
||||
import VectorLinkIcon from 'vue-material-design-icons/VectorLink.vue'
|
||||
import LinkVariantOffIcon from 'vue-material-design-icons/LinkVariantOff.vue'
|
||||
import FileDocumentMultipleIcon from 'vue-material-design-icons/FileDocumentMultiple.vue'
|
||||
|
||||
export default {
|
||||
name: 'NoBookmarks',
|
||||
components: { EmptyContent },
|
||||
components: { NcEmptyContent, StarShootingIcon, NcButton, NcLoadingIcon, UploadIcon, PlusIcon, ShareVariantIcon, VectorLinkIcon, LinkVariantOffIcon, FileDocumentMultipleIcon },
|
||||
data() {
|
||||
return { importing: false }
|
||||
},
|
||||
|
@ -97,13 +119,7 @@ export default {
|
|||
left: -1000px;
|
||||
}
|
||||
|
||||
.material-design-icon {
|
||||
position: relative;
|
||||
top: 4px;
|
||||
display: inline-flex;
|
||||
}
|
||||
|
||||
p {
|
||||
button {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
</style>
|
||||
|
|
|
@ -5,8 +5,7 @@
|
|||
-->
|
||||
|
||||
<template>
|
||||
<AppSidebar
|
||||
v-if="isActive"
|
||||
<NcAppSidebar v-if="isActive"
|
||||
class="sidebar"
|
||||
:title="bookmark.title"
|
||||
:title-editable="editingTitle"
|
||||
|
@ -19,50 +18,70 @@
|
|||
@dismiss-editing="onEditTitleCancel"
|
||||
@close="onClose">
|
||||
<template v-if="!editingTitle" slot="secondary-actions">
|
||||
<ActionButton icon="icon-rename" @click="onEditTitle" />
|
||||
<NcActionButton @click="onEditTitle">
|
||||
<template #icon>
|
||||
<PencilIcon />
|
||||
</template>
|
||||
</NcActionButton>
|
||||
</template>
|
||||
<template v-if="editingTitle" slot="secondary-actions">
|
||||
<ActionButton icon="icon-close" @click="onEditTitleCancel" />
|
||||
<NcActionButton @click="onEditTitleCancel">
|
||||
<template #icon>
|
||||
<CloseIcon />
|
||||
</template>
|
||||
</NcActionButton>
|
||||
</template>
|
||||
<AppSidebarTab
|
||||
id="bookmark-details"
|
||||
<NcAppSidebarTab id="bookmark-details"
|
||||
:name="t('bookmarks', 'Details')"
|
||||
icon="icon-info"
|
||||
:order="0">
|
||||
<template #icon>
|
||||
<InformationVariantIcon />
|
||||
</template>
|
||||
<div>
|
||||
<div v-if="!editingUrl" class="details__line">
|
||||
<span class="icon-external" :aria-label="t('bookmarks', 'Link')" :title="t('bookmarks', 'Link')" />
|
||||
<OpenInNewIcon :aria-label="t('bookmarks', 'Link')" :title="t('bookmarks', 'Link')" />
|
||||
<a class="details__url" :href="bookmark.url">{{ bookmark.url }}</a>
|
||||
<Actions v-if="isEditable" class="details__action">
|
||||
<ActionButton icon="icon-rename" @click="onEditUrl" />
|
||||
</Actions>
|
||||
<NcActions v-if="isEditable" class="details__action">
|
||||
<NcActionButton @click="onEditUrl">
|
||||
<template #icon>
|
||||
<PencilIcon />
|
||||
</template>
|
||||
</NcActionButton>
|
||||
</NcActions>
|
||||
</div>
|
||||
<div v-else class="details__line">
|
||||
<span class="icon-external" :aria-label="t('bookmarks', 'Link')" :title="t('bookmarks', 'Link')" />
|
||||
<OpenInNewIcon :aria-label="t('bookmarks', 'Link')" :title="t('bookmarks', 'Link')" />
|
||||
<input v-model="url" class="details__url">
|
||||
<Actions class="details__action">
|
||||
<ActionButton icon="icon-confirm" @click="onEditUrlSubmit" />
|
||||
</Actions>
|
||||
<Actions class="details__action">
|
||||
<ActionButton icon="icon-close" @click="onEditUrlCancel" />
|
||||
</Actions>
|
||||
<NcActions class="details__action">
|
||||
<NcActionButton @click="onEditUrlSubmit">
|
||||
<template #icon>
|
||||
<ArrowRightIcon />
|
||||
</template>
|
||||
</NcActionButton>
|
||||
</NcActions>
|
||||
<NcActions class="details__action">
|
||||
<NcActionButton @click="onEditUrlCancel">
|
||||
<template #icon>
|
||||
<CloseIcon />
|
||||
</template>
|
||||
</NcActionButton>
|
||||
</NcActions>
|
||||
</div>
|
||||
<div class="details__line">
|
||||
<FolderIcon :fill-color="colorMainText" size="18" />
|
||||
<FolderIcon />
|
||||
<div class="folders">
|
||||
<span v-for="folderId in bookmark.folders"
|
||||
:key="folderId"
|
||||
v-tooltip="getFolderPath(folderId)"
|
||||
class="folders__folder"
|
||||
@click="onOpenFolder(folderId)">
|
||||
<FolderIcon :fill-color="colorMainText" /> {{ getFolder(folderId).title || (getFolder(folderId).parent_folder ? t('bookmarks', 'Untitled folder') : t('bookmarks', 'Root folder')) }}
|
||||
<FolderIcon /> {{ getFolder(folderId).title || (getFolder(folderId).parent_folder ? t('bookmarks', 'Untitled folder') : t('bookmarks', 'Root folder')) }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="details__line">
|
||||
<span class="icon-tag" :aria-label="t('bookmarks', 'Tags')" :title="t('bookmarks', 'Tags')" />
|
||||
<Multiselect
|
||||
class="tags"
|
||||
<TagIcon :aria-label="t('bookmarks', 'Tags')" :title="t('bookmarks', 'Tags')" />
|
||||
<NcMultiselect class="tags"
|
||||
:value="tags"
|
||||
:auto-limit="false"
|
||||
:limit="7"
|
||||
|
@ -76,12 +95,10 @@
|
|||
@tag="onAddTag" />
|
||||
</div>
|
||||
<div class="details__line">
|
||||
<span class="icon-edit"
|
||||
role="figure"
|
||||
<PencilBoxIcon role="figure"
|
||||
:aria-label="t('bookmarks', 'Notes')"
|
||||
:title="t('bookmarks', 'Notes')" />
|
||||
<RichContenteditable
|
||||
:value.sync="bookmark.description"
|
||||
<NcRichContenteditable :value.sync="bookmark.description"
|
||||
:contenteditable="isEditable"
|
||||
:auto-complete="() => {}"
|
||||
:placeholder="t('bookmarks', 'Notes for this bookmark …')"
|
||||
|
@ -95,40 +112,31 @@
|
|||
<a class="button" :href="archivedFileUrl" target="_blank"><FileDocumentIcon :size="18" :fill-color="colorMainText" /> {{ t('bookmarks', 'Open file') }}</a>
|
||||
<a class="button" :href="archivedFile" target="_blank"><span class="icon-files-dark" /> {{ t('bookmarks', 'Open file location') }}</a>
|
||||
</div>
|
||||
</AppSidebarTab>
|
||||
<AppSidebarTab v-if="!isPublic"
|
||||
id="bookmark-projects"
|
||||
:name="t('bookmarks', 'Projects')"
|
||||
icon="icon-projects"
|
||||
:order="1">
|
||||
<CollectionList v-if="bookmark"
|
||||
:id="''+bookmark.id"
|
||||
:name="bookmark.title"
|
||||
type="bookmarks" />
|
||||
</AppSidebarTab>
|
||||
</AppSidebar>
|
||||
</NcAppSidebarTab>
|
||||
</NcAppSidebar>
|
||||
</template>
|
||||
<script>
|
||||
import AppSidebar from '@nextcloud/vue/dist/Components/AppSidebar'
|
||||
import AppSidebarTab from '@nextcloud/vue/dist/Components/AppSidebarTab'
|
||||
import Multiselect from '@nextcloud/vue/dist/Components/Multiselect'
|
||||
import Actions from '@nextcloud/vue/dist/Components/Actions'
|
||||
import ActionButton from '@nextcloud/vue/dist/Components/ActionButton'
|
||||
import RichContenteditable from '@nextcloud/vue/dist/Components/RichContenteditable'
|
||||
import FileDocumentIcon from 'vue-material-design-icons/FileDocument'
|
||||
import FolderIcon from 'vue-material-design-icons/Folder'
|
||||
import { CollectionList } from 'nextcloud-vue-collections'
|
||||
import { NcAppSidebar, NcRichContenteditable, NcActionButton, NcActions, NcMultiselect, NcAppSidebarTab } from '@nextcloud/vue'
|
||||
import FileDocumentIcon from 'vue-material-design-icons/FileDocument.vue'
|
||||
import FolderIcon from 'vue-material-design-icons/Folder.vue'
|
||||
import InformationVariantIcon from 'vue-material-design-icons/InformationVariant.vue'
|
||||
import PencilIcon from 'vue-material-design-icons/Pencil.vue'
|
||||
import ArrowRightIcon from 'vue-material-design-icons/ArrowRight.vue'
|
||||
import TagIcon from 'vue-material-design-icons/Tag.vue'
|
||||
import OpenInNewIcon from 'vue-material-design-icons/OpenInNew.vue'
|
||||
import CloseIcon from 'vue-material-design-icons/Close.vue'
|
||||
import PencilBoxIcon from 'vue-material-design-icons/PencilBox.vue'
|
||||
|
||||
import { getCurrentUser } from '@nextcloud/auth'
|
||||
import { generateRemoteUrl, generateUrl } from '@nextcloud/router'
|
||||
import humanizeDuration from 'humanize-duration'
|
||||
import { actions, mutations } from '../store/'
|
||||
import { actions, mutations } from '../store/index.js'
|
||||
|
||||
const MAX_RELATIVE_DATE = 1000 * 60 * 60 * 24 * 7 // one week
|
||||
|
||||
export default {
|
||||
name: 'SidebarBookmark',
|
||||
components: { AppSidebar, AppSidebarTab, Multiselect, Actions, ActionButton, RichContenteditable, FileDocumentIcon, FolderIcon, CollectionList },
|
||||
components: { NcAppSidebar, NcAppSidebarTab, NcMultiselect, NcActions, NcActionButton, NcRichContenteditable, FileDocumentIcon, FolderIcon, InformationVariantIcon, PencilIcon, ArrowRightIcon, TagIcon, OpenInNewIcon, CloseIcon, PencilBoxIcon },
|
||||
data() {
|
||||
return {
|
||||
title: '',
|
||||
|
|
|
@ -5,29 +5,29 @@
|
|||
-->
|
||||
|
||||
<template>
|
||||
<AppSidebar
|
||||
<NcAppSidebar
|
||||
v-if="isActive"
|
||||
class="sidebar"
|
||||
:title="folder.title"
|
||||
:active.sync="activeTab"
|
||||
@close="onClose">
|
||||
<AppSidebarTab id="folder-details"
|
||||
<NcAppSidebarTab id="folder-details"
|
||||
:name="t('bookmarks', 'Details')"
|
||||
icon="icon-info"
|
||||
:order="0">
|
||||
<h3>{{ t('bookmarks', 'Owner') }}</h3>
|
||||
<UserBubble :user="folder.userId" :display-name="folder.userId" />
|
||||
<NcUserBubble :user="folder.userId" :display-name="folder.userId" />
|
||||
<h3>{{ t('bookmarks', 'Bookmarks') }}</h3>
|
||||
{{ bookmarkCount }}
|
||||
</AppSidebarTab>
|
||||
<AppSidebarTab v-if="isSharable"
|
||||
</NcAppSidebarTab>
|
||||
<NcAppSidebarTab v-if="isSharable"
|
||||
id="folder-sharing"
|
||||
:name="t('bookmarks', 'Sharing')"
|
||||
icon="icon-shared"
|
||||
:order="1">
|
||||
<div class="participant-select">
|
||||
<figure :class="{'icon-user': true, 'share__avatar': true }" />
|
||||
<Multiselect v-model="participant"
|
||||
<NcMultiselect v-model="participant"
|
||||
label="displayName"
|
||||
track-by="user"
|
||||
class="participant-select__selection"
|
||||
|
@ -52,27 +52,27 @@
|
|||
:fill-color="colorMainText" />
|
||||
</div>
|
||||
</div>
|
||||
<Actions class="share__actions">
|
||||
<NcActions class="share__actions">
|
||||
<template v-if="publicLink">
|
||||
<ActionButton icon="icon-clippy" @click="onCopyPublicLink">
|
||||
<NcActionButton icon="icon-clippy" @click="onCopyPublicLink">
|
||||
{{ t('bookmarks', 'Copy link') }}
|
||||
</ActionButton>
|
||||
<ActionButton icon="icon-clippy" @click="onCopyRssLink">
|
||||
</NcActionButton>
|
||||
<NcActionButton icon="icon-clippy" @click="onCopyRssLink">
|
||||
{{ t('bookmarks', 'Copy RSS feed') }}
|
||||
</ActionButton>
|
||||
<ActionSeparator />
|
||||
<ActionButton icon="icon-delete" @click="onDeletePublicLink">
|
||||
</NcActionButton>
|
||||
<NcActionSeparator />
|
||||
<NcActionButton icon="icon-delete" @click="onDeletePublicLink">
|
||||
{{ t('bookmarks', 'Delete link') }}
|
||||
</ActionButton>
|
||||
</NcActionButton>
|
||||
</template>
|
||||
<ActionButton v-else icon="icon-add" @click="onAddPublicLink">
|
||||
<NcActionButton v-else icon="icon-add" @click="onAddPublicLink">
|
||||
{{ t('bookmarks', 'Create public link') }}
|
||||
</ActionButton>
|
||||
</Actions>
|
||||
</NcActionButton>
|
||||
</NcActions>
|
||||
</div>
|
||||
<div v-for="share of shares" :key="share.id">
|
||||
<div class="share">
|
||||
<Avatar :user="share.participant" class="share__avatar" :size="44" />
|
||||
<NcAvatar :user="share.participant" class="share__avatar" :size="44" />
|
||||
<h3 class="share__title">
|
||||
{{ share.participant }}
|
||||
</h3>
|
||||
|
@ -98,21 +98,21 @@
|
|||
:fill-color="colorMainText" />
|
||||
</div>
|
||||
</div>
|
||||
<Actions class="share__actions">
|
||||
<ActionCheckbox :checked="share.canWrite" @update:checked="onEditShare(share.id, {canWrite: $event, canShare: share.canShare})">
|
||||
<NcActions class="share__actions">
|
||||
<NcActionCheckbox :checked="share.canWrite" @update:checked="onEditShare(share.id, {canWrite: $event, canShare: share.canShare})">
|
||||
{{ t('bookmarks', 'Allow editing') }}
|
||||
</ActionCheckbox>
|
||||
<ActionCheckbox :checked="share.canShare" @update:checked="onEditShare(share.id, {canWrite: share.canWrite, canShare: $event})">
|
||||
</NcActionCheckbox>
|
||||
<NcActionCheckbox :checked="share.canShare" @update:checked="onEditShare(share.id, {canWrite: share.canWrite, canShare: $event})">
|
||||
{{ t('bookmarks', 'Allow resharing') }}
|
||||
</ActionCheckbox>
|
||||
<ActionButton icon="icon-delete" @click="onDeleteShare(share.id)">
|
||||
</NcActionCheckbox>
|
||||
<NcActionButton icon="icon-delete" @click="onDeleteShare(share.id)">
|
||||
{{ t('bookmarks', 'Remove share') }}
|
||||
</ActionButton>
|
||||
</Actions>
|
||||
</NcActionButton>
|
||||
</NcActions>
|
||||
</div>
|
||||
</div>
|
||||
</AppSidebarTab>
|
||||
<AppSidebarTab v-if="!isPublic"
|
||||
</NcAppSidebarTab>
|
||||
<NcAppSidebarTab v-if="!isPublic"
|
||||
id="bookmark-projects"
|
||||
:name="t('bookmarks', 'Projects')"
|
||||
icon="icon-projects"
|
||||
|
@ -121,19 +121,11 @@
|
|||
:id="''+folder.id"
|
||||
:name="folder.title"
|
||||
type="bookmarks-folder" />
|
||||
</AppSidebarTab>
|
||||
</AppSidebar>
|
||||
</NcAppSidebarTab>
|
||||
</NcAppSidebar>
|
||||
</template>
|
||||
<script>
|
||||
import AppSidebar from '@nextcloud/vue/dist/Components/AppSidebar'
|
||||
import AppSidebarTab from '@nextcloud/vue/dist/Components/AppSidebarTab'
|
||||
import Avatar from '@nextcloud/vue/dist/Components/Avatar'
|
||||
import Multiselect from '@nextcloud/vue/dist/Components/Multiselect'
|
||||
import Actions from '@nextcloud/vue/dist/Components/Actions'
|
||||
import ActionButton from '@nextcloud/vue/dist/Components/ActionButton'
|
||||
import ActionCheckbox from '@nextcloud/vue/dist/Components/ActionCheckbox'
|
||||
import ActionSeparator from '@nextcloud/vue/dist/Components/ActionSeparator'
|
||||
import UserBubble from '@nextcloud/vue/dist/Components/UserBubble'
|
||||
import { NcAppSidebar, NcUserBubble, NcActionSeparator, NcActionCheckbox, NcActionButton, NcActions, NcMultiselect, NcAvatar, NcAppSidebarTab } from '@nextcloud/vue'
|
||||
import { getCurrentUser } from '@nextcloud/auth'
|
||||
import { generateUrl, generateOcsUrl } from '@nextcloud/router'
|
||||
import axios from '@nextcloud/axios'
|
||||
|
@ -146,7 +138,7 @@ import { CollectionList } from 'nextcloud-vue-collections'
|
|||
|
||||
export default {
|
||||
name: 'SidebarFolder',
|
||||
components: { AppSidebar, AppSidebarTab, Avatar, Multiselect, ActionButton, ActionCheckbox, Actions, UserBubble, ActionSeparator, EyeIcon, PencilIcon, ShareAllIcon, CollectionList },
|
||||
components: { NcAppSidebar, NcAppSidebarTab, NcAvatar, NcMultiselect, NcActionButton, NcActionCheckbox, NcActions, NcUserBubble, NcActionSeparator, EyeIcon, PencilIcon, ShareAllIcon, CollectionList },
|
||||
data() {
|
||||
return {
|
||||
participantSearchResults: [],
|
||||
|
|
|
@ -8,14 +8,12 @@
|
|||
<div id="bookmarks">
|
||||
<figure v-if="loading" class="icon-loading loading" />
|
||||
<figure v-if="!loading && success" class="icon-checkmark success" />
|
||||
<SettingsSection
|
||||
:title="t('bookmarks', 'Privacy')"
|
||||
<NcSettingsSection :title="t('bookmarks', 'Privacy')"
|
||||
:description="t('bookmarks',
|
||||
'Bookmarks will try to access web pages that you add to automatically add information about them.'
|
||||
)">
|
||||
<p>
|
||||
<input
|
||||
id="enableScraping"
|
||||
<input id="enableScraping"
|
||||
v-model="settings['privacy.enableScraping']"
|
||||
type="checkbox"
|
||||
class="checkbox"
|
||||
|
@ -26,9 +24,8 @@
|
|||
)
|
||||
}}</label>
|
||||
</p>
|
||||
</SettingsSection>
|
||||
<SettingsSection
|
||||
:title="t('bookmarks', 'Performance') "
|
||||
</NcSettingsSection>
|
||||
<NcSettingsSection :title="t('bookmarks', 'Performance') "
|
||||
:description="t('bookmarks',
|
||||
'In an installation with a lot of users it may be useful to restrict the number of bookmarks per account.'
|
||||
)">
|
||||
|
@ -46,9 +43,8 @@
|
|||
step="1"
|
||||
@input="onChange"></label>
|
||||
</p>
|
||||
</SettingsSection>
|
||||
<SettingsSection
|
||||
:title="t('bookmarks', 'Previews')"
|
||||
</NcSettingsSection>
|
||||
<NcSettingsSection :title="t('bookmarks', 'Previews')"
|
||||
:description="t('bookmarks',
|
||||
'In order to display real screenshots of your bookmarked websites, Bookmarks can use third-party services to generate previews.'
|
||||
)">
|
||||
|
@ -62,32 +58,28 @@
|
|||
</p>
|
||||
<p>
|
||||
<label>{{ t('bookmarks', 'Screeenly API URL') }}
|
||||
<input
|
||||
v-model="settings['previews.screenly.url']"
|
||||
<input v-model="settings['previews.screenly.url']"
|
||||
type="text"
|
||||
placeholder="https://screeenly.example.com/api/v1/fullsize"
|
||||
@input="onChange"></label>
|
||||
</p>
|
||||
<p>
|
||||
<label>{{ t('bookmarks', 'Screeenly API key') }}
|
||||
<input
|
||||
v-model="settings['previews.screenly.token']"
|
||||
<input v-model="settings['previews.screenly.token']"
|
||||
type="text"
|
||||
@input="onChange"></label>
|
||||
</p>
|
||||
<h3>{{ t('bookmarks', 'Webshot') }}</h3>
|
||||
<p>
|
||||
<label>{{ t('bookmarks', 'Webshot API URL') }}
|
||||
<input
|
||||
v-model="settings['previews.webshot.url']"
|
||||
<input v-model="settings['previews.webshot.url']"
|
||||
type="text"
|
||||
@input="onChange"></label>
|
||||
</p>
|
||||
<h3>{{ t('bookmarks', 'ScreenshotMachine') }}</h3>
|
||||
<p>
|
||||
<label>{{ t('bookmarks', 'ScreenshotMachine API key') }}
|
||||
<input
|
||||
v-model="settings['previews.screenshotmachine.key']"
|
||||
<input v-model="settings['previews.screenshotmachine.key']"
|
||||
type="text"
|
||||
@input="onChange"></label>
|
||||
</p>
|
||||
|
@ -99,18 +91,17 @@
|
|||
</p>
|
||||
<p>
|
||||
<label>{{ t('bookmarks', 'Pageres ENV variables') }}
|
||||
<input
|
||||
v-model="settings['previews.pageres.env']"
|
||||
<input v-model="settings['previews.pageres.env']"
|
||||
placeholder="CHROMIUM_PATH=/usr/bin/chromium-browser PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=false"
|
||||
type="text"
|
||||
@input="onChange"></label>
|
||||
</p>
|
||||
</SettingsSection>
|
||||
</NcSettingsSection>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import SettingsSection from '@nextcloud/vue/dist/Components/SettingsSection'
|
||||
import { NcSettingsSection } from '@nextcloud/vue'
|
||||
import { loadState } from '@nextcloud/initial-state'
|
||||
|
||||
const SETTINGS = [
|
||||
|
@ -125,7 +116,7 @@ const SETTINGS = [
|
|||
|
||||
export default {
|
||||
name: 'ViewAdmin',
|
||||
components: { SettingsSection },
|
||||
components: { NcSettingsSection },
|
||||
data() {
|
||||
const settings = loadState('bookmarks', 'adminSettings')
|
||||
for (const setting of SETTINGS) {
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
-->
|
||||
|
||||
<template>
|
||||
<Content app-name="bookmarks">
|
||||
<NcContent app-name="bookmarks">
|
||||
<div class="bookmarklet">
|
||||
<h2><figure :class="loading? 'icon-loading-small' : 'icon-link'" /> {{ t('bookmarks', 'Add a bookmark') }}</h2>
|
||||
<div v-if="exists" class="bookmarklet__exists">
|
||||
|
@ -18,8 +18,7 @@
|
|||
<input v-model="bookmark.url" type="text" :placeholder="t('bookmarks', 'Enter bookmark URL')">
|
||||
</label>
|
||||
<label><figure class="icon-tag" /> {{ t('bookmarks', 'Tags') }}
|
||||
<Multiselect
|
||||
class="sidebar__tags"
|
||||
<NcMultiselect class="sidebar__tags"
|
||||
:value="bookmark.tags"
|
||||
:auto-limit="false"
|
||||
:limit="7"
|
||||
|
@ -38,8 +37,7 @@
|
|||
<FolderPickerDialog v-model="folder" :show="showPicker" @close="showPicker = false" />
|
||||
</label>
|
||||
<label>{{ t('bookmarks', 'Notes') }}</label>
|
||||
<div
|
||||
class="bookmarklet__notes"
|
||||
<div class="bookmarklet__notes"
|
||||
contenteditable
|
||||
@input="onNotesChange">
|
||||
{{ description }}
|
||||
|
@ -48,21 +46,20 @@
|
|||
<span class="icon-confirm-white" />{{ t('bookmarks', 'Save') }}
|
||||
</button>
|
||||
</div>
|
||||
</Content>
|
||||
</NcContent>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import Content from '@nextcloud/vue/dist/Components/Content'
|
||||
import Multiselect from '@nextcloud/vue/dist/Components/Multiselect'
|
||||
import { actions } from '../store/'
|
||||
import FolderPickerDialog from './FolderPickerDialog'
|
||||
import { NcContent, NcMultiselect } from '@nextcloud/vue'
|
||||
import { actions } from '../store/index.js'
|
||||
import FolderPickerDialog from './FolderPickerDialog.vue'
|
||||
|
||||
export default {
|
||||
name: 'ViewBookmarklet',
|
||||
components: {
|
||||
FolderPickerDialog,
|
||||
Content,
|
||||
Multiselect,
|
||||
NcContent,
|
||||
NcMultiselect,
|
||||
},
|
||||
props: {
|
||||
title: {
|
||||
|
|
|
@ -5,39 +5,38 @@
|
|||
-->
|
||||
|
||||
<template>
|
||||
<Content app-name="bookmarks">
|
||||
<NcContent app-name="bookmarks">
|
||||
<Navigation />
|
||||
<AppContent :show-details.sync="showDetails">
|
||||
<NcAppContent :show-details.sync="showDetails">
|
||||
<template v-if="isFolderView && !smallScreen && folders.length" #list>
|
||||
<FolderOverview :show-details.sync="showDetails" />
|
||||
</template>
|
||||
<Controls />
|
||||
<BookmarksList />
|
||||
</AppContent>
|
||||
</NcAppContent>
|
||||
<SidebarBookmark />
|
||||
<SidebarFolder />
|
||||
<MoveDialog />
|
||||
<CopyDialog />
|
||||
<LoadingModal />
|
||||
<BookmarkContent />
|
||||
</Content>
|
||||
</NcContent>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import Content from '@nextcloud/vue/dist/Components/Content'
|
||||
import AppContent from '@nextcloud/vue/dist/Components/AppContent'
|
||||
import Navigation from './Navigation'
|
||||
import FolderOverview from './FolderOverview'
|
||||
import BookmarksList from './BookmarksList'
|
||||
import Controls from './Controls'
|
||||
import SidebarBookmark from './SidebarBookmark'
|
||||
import SidebarFolder from './SidebarFolder'
|
||||
import MoveDialog from './MoveDialog'
|
||||
import CopyDialog from './CopyDialog'
|
||||
import { privateRoutes } from '../router'
|
||||
import { actions, mutations } from '../store/'
|
||||
import LoadingModal from './LoadingModal'
|
||||
import BookmarkContent from './BookmarkContent'
|
||||
import { NcContent, NcAppContent } from '@nextcloud/vue'
|
||||
import Navigation from './Navigation.vue'
|
||||
import FolderOverview from './FolderOverview.vue'
|
||||
import BookmarksList from './BookmarksList.vue'
|
||||
import Controls from './Controls.vue'
|
||||
import SidebarBookmark from './SidebarBookmark.vue'
|
||||
import SidebarFolder from './SidebarFolder.vue'
|
||||
import MoveDialog from './MoveDialog.vue'
|
||||
import CopyDialog from './CopyDialog.vue'
|
||||
import { privateRoutes } from '../router.js'
|
||||
import { actions, mutations } from '../store/index.js'
|
||||
import LoadingModal from './LoadingModal.vue'
|
||||
import BookmarkContent from './BookmarkContent.vue'
|
||||
import { getCurrentUser } from '@nextcloud/auth'
|
||||
|
||||
export default {
|
||||
|
@ -46,8 +45,8 @@ export default {
|
|||
BookmarkContent,
|
||||
LoadingModal,
|
||||
Navigation,
|
||||
Content,
|
||||
AppContent,
|
||||
NcContent,
|
||||
NcAppContent,
|
||||
FolderOverview,
|
||||
Controls,
|
||||
BookmarksList,
|
||||
|
@ -210,14 +209,7 @@ export default {
|
|||
}
|
||||
</script>
|
||||
<style>
|
||||
#app-content {
|
||||
max-width: calc(100vw - 300px);
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 720px) {
|
||||
#app-content {
|
||||
max-width: 100%;
|
||||
}
|
||||
.app-content {
|
||||
position: relative !important;
|
||||
}
|
||||
</style>
|
||||
|
|
|
@ -5,29 +5,28 @@
|
|||
-->
|
||||
|
||||
<template>
|
||||
<Content app-name="bookmarks">
|
||||
<AppContent>
|
||||
<NcContent app-name="bookmarks">
|
||||
<NcAppContent>
|
||||
<Controls />
|
||||
<BookmarksList :loading="!!loading.bookmarks" :bookmarks="bookmarks" />
|
||||
</AppContent>
|
||||
</NcAppContent>
|
||||
<BookmarkContent />
|
||||
</Content>
|
||||
</NcContent>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import Content from '@nextcloud/vue/dist/Components/Content'
|
||||
import AppContent from '@nextcloud/vue/dist/Components/AppContent'
|
||||
import BookmarksList from './BookmarksList'
|
||||
import Controls from './Controls'
|
||||
import { actions, mutations } from '../store/'
|
||||
import BookmarkContent from './BookmarkContent'
|
||||
import { NcContent, NcAppContent } from '@nextcloud/vue'
|
||||
import BookmarksList from './BookmarksList.vue'
|
||||
import Controls from './Controls.vue'
|
||||
import { actions, mutations } from '../store/index.js'
|
||||
import BookmarkContent from './BookmarkContent.vue'
|
||||
|
||||
export default {
|
||||
name: 'ViewPublic',
|
||||
components: {
|
||||
BookmarkContent,
|
||||
Content,
|
||||
AppContent,
|
||||
NcContent,
|
||||
NcAppContent,
|
||||
Controls,
|
||||
BookmarksList,
|
||||
},
|
||||
|
|
|
@ -6,8 +6,9 @@
|
|||
|
||||
'use strict'
|
||||
|
||||
import { version } from '../package.json'
|
||||
import PackageJson from '../package.json'
|
||||
|
||||
const { version } = PackageJson
|
||||
const rev = '#1'
|
||||
|
||||
const DYNAMIC_CACHE = `dynamic-cache-${version}` + rev
|
||||
|
|
Loading…
Reference in New Issue