diff options
-rw-r--r-- | package-lock.json | 43 | ||||
-rw-r--r-- | package.json | 1 | ||||
-rw-r--r-- | src/components/Settings/SettingsAddressbook.vue | 58 | ||||
-rw-r--r-- | src/components/core/popoverMenu/popoverItem.vue | 7 |
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"> |