summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--package-lock.json43
-rw-r--r--package.json1
-rw-r--r--src/components/Settings/SettingsAddressbook.vue58
-rw-r--r--src/components/core/popoverMenu/popoverItem.vue7
4 files changed, 83 insertions, 26 deletions
diff --git a/package-lock.json b/package-lock.json
index aa98d5d2..938b3181 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1213,7 +1213,7 @@
},
"babel-plugin-syntax-object-rest-spread": {
"version": "6.13.0",
- "resolved": "http://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz",
"integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=",
"dev": true
},
@@ -2299,6 +2299,16 @@
"integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
"dev": true
},
+ "clipboard": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.1.tgz",
+ "integrity": "sha512-7yhQBmtN+uYZmfRjjVjKa0dZdWuabzpSKGtyQZN+9C8xlC788SSJjOHWh7tzurfwTqTD5UDYAhIv5fRJg3sHjQ==",
+ "requires": {
+ "good-listener": "^1.2.2",
+ "select": "^1.1.2",
+ "tiny-emitter": "^2.0.0"
+ }
+ },
"cliui": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
@@ -3107,6 +3117,11 @@
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
"dev": true
},
+ "delegate": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz",
+ "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw=="
+ },
"delegates": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
@@ -5130,6 +5145,14 @@
}
}
},
+ "good-listener": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz",
+ "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=",
+ "requires": {
+ "delegate": "^3.1.2"
+ }
+ },
"graceful-fs": {
"version": "4.1.11",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
@@ -11214,6 +11237,11 @@
}
}
},
+ "select": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz",
+ "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0="
+ },
"semver": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
@@ -12431,6 +12459,11 @@
"setimmediate": "^1.0.4"
}
},
+ "tiny-emitter": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.0.2.tgz",
+ "integrity": "sha512-2NM0auVBGft5tee/OxP4PI3d8WItkDM+fPnaRAVo6xTDI2knbz9eC5ArWGqtGlYqiH3RU5yMpdyTTO7MguC4ow=="
+ },
"tmp": {
"version": "0.0.33",
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
@@ -13069,6 +13102,14 @@
"resolved": "https://registry.npmjs.org/vue-click-outside/-/vue-click-outside-1.0.7.tgz",
"integrity": "sha1-zdKxYF48SUR4TheU6uShKg9wC9Y="
},
+ "vue-clipboard2": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/vue-clipboard2/-/vue-clipboard2-0.2.1.tgz",
+ "integrity": "sha512-n6ie/0g0bKohmLlC/5ja1esq2Q0jQ5hWmhNSZcvCsWfDeDnVARjl6cBB9p72XV1nlVfuqsZcfV8HTjjZAIlLBA==",
+ "requires": {
+ "clipboard": "^2.0.0"
+ }
+ },
"vue-eslint-parser": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-2.0.3.tgz",
diff --git a/package.json b/package.json
index afc3c63c..8fdb50b7 100644
--- a/package.json
+++ b/package.json
@@ -24,6 +24,7 @@
"v-tooltip": "^2.0.0-rc.33",
"vue": "^2.5.17",
"vue-click-outside": "^1.0.7",
+ "vue-clipboard2": "^0.2.1",
"vue-multiselect": "^2.1.0",
"vue-router": "^3.0.1",
"vuex": "^3.0.1",
diff --git a/src/components/Settings/SettingsAddressbook.vue b/src/components/Settings/SettingsAddressbook.vue
index 61947319..ae76403c 100644
--- a/src/components/Settings/SettingsAddressbook.vue
+++ b/src/components/Settings/SettingsAddressbook.vue
@@ -56,6 +56,7 @@ import popoverMenu from '../core/popoverMenu'
import shareAddressBook from './SettingsAddressbookShare'
import renameAddressBookField from './SettingsRenameAddressbookField'
+import VueClipboard from 'vue-clipboard2'
import clickOutside from 'vue-click-outside'
export default {
@@ -66,7 +67,8 @@ export default {
renameAddressBookField
},
directives: {
- clickOutside
+ clickOutside,
+ VueClipboard
},
props: {
addressbook: {
@@ -81,6 +83,8 @@ export default {
menuOpen: false,
shareOpen: false,
editingName: false,
+ copied: false,
+ copySuccess: true,
newName: this.addressbook.displayName // new name for addressbook
}
},
@@ -91,33 +95,28 @@ export default {
// building the popover menu
menu() {
return [{
- href: '/remote.php/dav/addressbooks/users/admin/Contacts/',
+ href: '#',
icon: 'icon-public',
- text: t('settings', 'Copy link'),
- action: ''
+ text: !this.copied ? t('contacts', 'Copy link') : this.copySuccess ? t('contacts', 'Copied') : t('contacts', 'Can not copy'),
+ action: this.copyLink
},
{
- href: '/remote.php/dav/addressbooks/users/admin/Contacts/?export',
+ href: this.addressbook.url + '?export',
icon: 'icon-download',
- text: t('settings', 'Download'),
+ text: t('contacts', 'Download'),
action: ''
},
{
icon: 'icon-rename',
- text: t('settings', 'Rename'),
+ text: t('contacts', 'Rename'),
action: this.renameAddressbook
},
{
icon: 'checkbox',
- text: this.enabled ? t('settings', 'Enabled') : t('settings', 'Disabled'),
+ text: this.enabled ? t('contacts', 'Enabled') : t('contacts', 'Disabled'),
input: 'checkbox',
model: this.enabled,
action: this.toggleAddressbookEnabled
- },
- {
- icon: 'icon-delete',
- text: t('settings', 'Delete'),
- action: this.deleteAddressbook
}]
}
},
@@ -126,20 +125,20 @@ export default {
this.popupItem = this.$el
},
methods: {
- toggleAddressbookEnabled() {
- this.$store.dispatch('toggleAddressbookEnabled', this.addressbook)
+ closeMenu() {
+ this.menuOpen = false
},
- deleteAddressbook() {
- this.$store.dispatch('deleteAddressbook', this.addressbook)
+ toggleMenu() {
+ this.menuOpen = !this.menuOpen
},
toggleShare() {
this.shareOpen = !this.shareOpen
},
- closeMenu() {
- this.menuOpen = false
+ toggleAddressbookEnabled() {
+ this.$store.dispatch('toggleAddressbookEnabled', this.addressbook)
},
- toggleMenu() {
- this.menuOpen = !this.menuOpen
+ deleteAddressbook() {
+ this.$store.dispatch('deleteAddressbook', this.addressbook)
},
renameAddressbook() {
this.editingName = true
@@ -148,6 +147,23 @@ export default {
let addressbook = this.addressbook
let newName = this.newName
this.$store.dispatch('renameAddressbook', { addressbook, newName }).then(this.editingName = false)
+ },
+ copyLink() {
+ // copy link for addressbook to clipboard
+ this.copySuccess = true
+ this.copied = true
+ this.$copyText(this.addressbook.url).then(e => {
+ this.copySuccess = true
+ this.copied = true
+ }, e => {
+ this.copySuccess = false
+ this.copied = true
+
+ })
+ setTimeout(function() {
+ console.log('copied')
+ this.copied = false
+ }, 500)
}
}
}
diff --git a/src/components/core/popoverMenu/popoverItem.vue b/src/components/core/popoverMenu/popoverItem.vue
index b53e374a..6d11f3be 100644
--- a/src/components/core/popoverMenu/popoverItem.vue
+++ b/src/components/core/popoverMenu/popoverItem.vue
@@ -31,10 +31,9 @@
</a>
<!-- If item.input is set instead, an put will be used -->
<span v-else-if="item.input" class="menuitem">
- <span v-if="item.input === 'text'" :class="item.icon" />
- <input :id="key" :type="item.input" :class="item.input"
- v-model="item.model" :placeholder="item.text" @change="item.action">
- <label v-if="item.input !== 'text'" :for="key">{{ item.text }}</label>
+ <input :id="item.key" :type="item.input" :class="item.input"
+ v-model="item.model" @change="item.action">
+ <label :for="item.key" @click="item.action">{{ item.text }}</label>
</span>
<!-- If item.action is set instead, a button will be used -->
<button v-else-if="item.action" @click="item.action">