Merge pull request #15506 from nextcloud/dependabot/npm_and_yarn/nextcloud-vue-0.11.1

Bump nextcloud-vue from 0.8.0 to 0.11.1
This commit is contained in:
Morris Jobke 2019-05-22 22:00:40 +02:00 committed by GitHub
commit daaa14e921
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
37 changed files with 13291 additions and 4552 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -132,7 +132,7 @@ __webpack_require__.r(__webpack_exports__);
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var nextcloud_vue_collections__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! nextcloud-vue-collections */ "./node_modules/nextcloud-vue-collections/dist/nextcloud-vue-collections.js");
!(function webpackMissingModule() { var e = new Error("Cannot find module 'nextcloud-vue-collections'"); e.code = 'MODULE_NOT_FOUND'; throw e; }());
//
//
//
@ -179,7 +179,7 @@ __webpack_require__.r(__webpack_exports__);
}
},
components: {
CollectionList: nextcloud_vue_collections__WEBPACK_IMPORTED_MODULE_0__["CollectionList"]
CollectionList: !(function webpackMissingModule() { var e = new Error("Cannot find module 'nextcloud-vue-collections'"); e.code = 'MODULE_NOT_FOUND'; throw e; }())
}
});

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,4 @@
(window.webpackJsonp=window.webpackJsonp||[]).push([[4],{14:function(e,o,i){"use strict";i.r(o);var n=i(17),l=i(25),r=i(26),s=i.n(r),a=i(27),u={name:"CollaborationView",computed:{fileId:function(){return this.$root.model&&this.$root.model.id?""+this.$root.model.id:null},filename:function(){return this.$root.model&&this.$root.model.name?""+this.$root.model.name:""}},components:{CollectionList:i(32).a}},c=i(58),d=Object(c.a)(u,function(){var t=this.$createElement,e=this._self._c||t;return this.fileId?e("collection-list",{attrs:{type:"file",id:this.fileId,name:this.filename}}):this._e()},[],!1,null,null,null).exports;i.d(o,"Vue",function(){return n.a}),i.d(o,"View",function(){return d}),
(window.webpackJsonp=window.webpackJsonp||[]).push([[4],{14:function(e,o,i){"use strict";i.r(o);var n=i(17),l=i(19),r=i(26),u=i(29),d=i.n(u),a=i(30),s={name:"CollaborationView",computed:{fileId:function(){return this.$root.model&&this.$root.model.id?""+this.$root.model.id:null},filename:function(){return this.$root.model&&this.$root.model.name?""+this.$root.model.name:""}},components:{CollectionList:i(33).a}},c=i(59),f=Object(c.a)(s,function(){var e=this.$createElement,t=this._self._c||e;return this.fileId?t("collection-list",{attrs:{type:"file",id:this.fileId,name:this.filename}}):this._e()},[],!1,null,null,null).exports;i.d(o,"Vue",function(){return n.default}),i.d(o,"View",function(){return f}),
/*
* @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>
*
@ -20,5 +20,5 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
n.a.prototype.t=t,n.a.component("PopoverMenu",l.PopoverMenu),n.a.directive("ClickOutside",s.a),n.a.directive("Tooltip",a.a)}}]);
n.default.prototype.t=t,n.default.component("PopoverMenu",r.PopoverMenu),n.default.directive("ClickOutside",d.a),n.default.directive("Tooltip",a.a),n.default.use(l.a)}}]);
//# sourceMappingURL=files_sharing.4.js.map

File diff suppressed because one or more lines are too long

View File

@ -21,15 +21,16 @@
*/
import Vue from 'vue';
import Vuex from 'vuex';
import { PopoverMenu } from 'nextcloud-vue';
import ClickOutside from 'vue-click-outside';
import { VTooltip } from 'v-tooltip';
Vue.prototype.t = t;
Vue.component('PopoverMenu', PopoverMenu);
Vue.directive('ClickOutside', ClickOutside);
Vue.directive('Tooltip', VTooltip);
Vue.use(Vuex);
import View from './views/CollaborationView';

View File

@ -25,26 +25,26 @@
</template>
<script>
import { CollectionList } from 'nextcloud-vue-collections'
import { CollectionList } from 'nextcloud-vue-collections'
export default {
name: 'CollaborationView',
computed: {
fileId() {
if (this.$root.model && this.$root.model.id) {
return '' + this.$root.model.id;
}
return null;
},
filename() {
if (this.$root.model && this.$root.model.name) {
return '' + this.$root.model.name;
}
return '';
export default {
name: 'CollaborationView',
computed: {
fileId() {
if (this.$root.model && this.$root.model.id) {
return '' + this.$root.model.id;
}
return null;
},
components: {
CollectionList
filename() {
if (this.$root.model && this.$root.model.name) {
return '' + this.$root.model.name;
}
return '';
}
},
components: {
CollectionList
}
}
</script>

View File

@ -31,28 +31,12 @@ module.exports = {
{
test: /\.js$/,
loader: 'babel-loader',
exclude: /node_modules/,
options: {
plugins: ['@babel/plugin-syntax-dynamic-import', 'transform-es2015-arrow-functions']
}
},
{
test: /\.(png|jpg|gif|svg)$/,
loader: 'file-loader',
options: {
name: '[name].[ext]?[hash]'
}
exclude: /node_modules/
}
]
},
plugins: [new VueLoaderPlugin()],
resolve: {
alias: {
vue$: 'vue/dist/vue.runtime.esm.js',
},
extensions: ['*', '.js', '.vue', '.json'],
modules: [
path.join(__dirname, '../../node_modules')
]
extensions: ['*', '.js', '.vue', '.json']
},
};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

42
package-lock.json generated
View File

@ -4842,9 +4842,9 @@
"integrity": "sha512-ZqnNDFNR0rCpifb29uoqyqd9IyVwNZrDePzmP6DbGiNStFrvnlOG8OTdIMSdC82bKzKAqzXU5L73kSQncG8oXA=="
},
"nextcloud-vue": {
"version": "0.8.0",
"resolved": "https://registry.npmjs.org/nextcloud-vue/-/nextcloud-vue-0.8.0.tgz",
"integrity": "sha512-6qXcWTgtrbM4W1AjyHSWn0cHOFm/Q39A//OibrY7M332orQnDvCrDoGloUUOW6+vbXJarI+L7t7scL6mkRw4Qg==",
"version": "0.11.3",
"resolved": "https://registry.npmjs.org/nextcloud-vue/-/nextcloud-vue-0.11.3.tgz",
"integrity": "sha512-lVih3gUuRZf5B82+XjLuiw3qp2tvAITF512mTyhHLtAzBWEiBfWsidMP10Nntql4zAEoLTZvLaQ1izFglMUDmw==",
"requires": {
"hammerjs": "^2.0.8",
"md5": "^2.2.1",
@ -4853,37 +4853,31 @@
"vue": "^2.6.7",
"vue-click-outside": "^1.0.7",
"vue-multiselect": "^2.1.3",
"vue-visible": "^1.0.2",
"vue2-datepicker": "^2.10.0"
}
},
"nextcloud-vue-collections": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/nextcloud-vue-collections/-/nextcloud-vue-collections-0.4.0.tgz",
"integrity": "sha512-UxgormIFW4CD9dUsobRzIuQt1PQXkT+EI2KCp1CoAiJiurzf5yO9BmmS3gN9lWZa1+EZvLqljapvAlyntWwX6Q==",
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/nextcloud-vue-collections/-/nextcloud-vue-collections-0.5.2.tgz",
"integrity": "sha512-trqoV2cPhjwelzqE5bhxm6jBDdE9IxrPo1EXjebEBNB3GXT76cL0BpxVf/lZQYXQ6ylKxbLL4tPwEFUT0scyxw==",
"requires": {
"lodash": "^4.17.11",
"nextcloud-axios": "^0.1.2",
"nextcloud-vue": "^0.9.0",
"v-tooltip": "^2.0.0-rc.33",
"nextcloud-vue": "^0.11.1",
"v-tooltip": "^3.0.0-alpha.7",
"vue": "^2.6.6",
"vue-click-outside": "^1.0.7",
"vuex": "^3.1.0"
},
"dependencies": {
"nextcloud-vue": {
"version": "0.9.7",
"resolved": "https://registry.npmjs.org/nextcloud-vue/-/nextcloud-vue-0.9.7.tgz",
"integrity": "sha512-47mr8kBQfJW1oNTgKjFdktgX6+Z0c6jryd1xq+515jLef3o1DWdMmRLF5Yab3TTUdha/aG3dL0lpVQ6Z3jf9Aw==",
"v-tooltip": {
"version": "3.0.0-alpha.7",
"resolved": "https://registry.npmjs.org/v-tooltip/-/v-tooltip-3.0.0-alpha.7.tgz",
"integrity": "sha512-BJM1tYm/Idsa4xjY8nsZ/o329qEhnpAnKTI5fG2r5/aEFtmno9HJKT8+lmbHGpZhOnV8NCCg/9PuiCFPOT7/Lw==",
"requires": {
"hammerjs": "^2.0.8",
"md5": "^2.2.1",
"nextcloud-axios": "^0.1.3",
"v-tooltip": "^2.0.0-rc.33",
"vue": "^2.6.7",
"vue-click-outside": "^1.0.7",
"vue-multiselect": "^2.1.3",
"vue-visible": "^1.0.2",
"vue2-datepicker": "^2.10.0"
"popper.js": "^1.15.0",
"vue-resize": "^0.4.5"
}
}
}
@ -7255,9 +7249,9 @@
"integrity": "sha512-yaX2its9XAJKGuQqf7LsiZHHSkxsIK8rmCOQOvEGEoF41blKRK8qr9my4qYoD6ikdLss4n8tKqYBecmaY0+WJg=="
},
"vue2-datepicker": {
"version": "2.10.0",
"resolved": "https://registry.npmjs.org/vue2-datepicker/-/vue2-datepicker-2.10.0.tgz",
"integrity": "sha512-WGL7ou0TdBiJQuHVp29BtBw3rSkLrIYwXWU/ELmaLdnAerI0EdGVAu7DvZV2iIxY4lsHyjqocApxdvXTmwLrAw==",
"version": "2.11.2",
"resolved": "https://registry.npmjs.org/vue2-datepicker/-/vue2-datepicker-2.11.2.tgz",
"integrity": "sha512-xGyIN5pMMdaKMnndSrzqW6LDST/e7PHcFt2uIp73OOMZMDAlhEmzroNtoYBwJEEzKnCNMo+ktcykgYljrE8y8Q==",
"requires": {
"fecha": "^2.3.3"
}

View File

@ -43,8 +43,8 @@
"moment": "^2.24.0",
"nextcloud-axios": "^0.1.3",
"nextcloud-password-confirmation": "^0.4.1",
"nextcloud-vue": "^0.8.0",
"nextcloud-vue-collections": "^0.4.0",
"nextcloud-vue": "^0.11.3",
"nextcloud-vue-collections": "^0.5.2",
"snap.js": "^2.0.9",
"strengthify": "git+https://github.com/MorrisJobke/strengthify.git#0.5.8",
"underscore": "^1.9.1",

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

2948
settings/js/vue-1.js Normal file

File diff suppressed because it is too large Load Diff

1
settings/js/vue-1.js.map Normal file

File diff suppressed because one or more lines are too long

3126
settings/js/vue-2.js Normal file

File diff suppressed because it is too large Load Diff

1
settings/js/vue-2.js.map Normal file

File diff suppressed because one or more lines are too long

3266
settings/js/vue-3.js Normal file

File diff suppressed because it is too large Load Diff

1
settings/js/vue-3.js.map Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -21,7 +21,7 @@
<template>
<tr :data-id="token.id"
:class="{wiping}">
:class="wiping">
<td class="client">
<div :class="iconName.icon"></div>
</td>
@ -41,214 +41,216 @@
<span class="last-activity" v-tooltip="lastActivity">{{lastActivityRelative}}</span>
</td>
<td class="more">
<Action v-if="!token.current"
:actions="actions"
v-bind:open.sync="actionOpen"
v-tooltip="{content: t('settings', 'Device settings'), container: 'body'}"
tabindex="0"/>
<Actions v-if="!token.current"
:actions="actions"
:open.sync="actionOpen"
v-tooltip.auto="{
content: t('settings', 'Device settings'),
container: 'body'
}">
<ActionCheckbox v-if="token.type === 1"
:checked="token.scope.filesystem"
@change.stop.prevent="$emit('toggleScope', token, 'filesystem', !token.scope.filesystem)">
<!-- TODO: add text/longtext with some description -->
{{ t('settings', 'Allow filesystem access') }}
</ActionCheckbox>
<ActionButton v-if="token.canRename"
icon="icon-rename"
@click.stop.prevent="startRename">
<!-- TODO: add text/longtext with some description -->
{{ t('settings', 'Rename') }}
</ActionButton>
<!-- revoke & wipe -->
<template v-if="token.canDelete">
<template v-if="token.type !== 2">
<ActionButton icon="icon-delete"
@click.stop.prevent="revoke">
<!-- TODO: add text/longtext with some description -->
{{ t('settings', 'Revoke') }}
</ActionButton>
<ActionButton icon="icon-delete"
@click.stop.prevent="wipe">
{{ t('settings', 'Wipe device') }}
</ActionButton>
</template>
<ActionButton v-else-if="token.type === 2"
icon="icon-delete"
:title="t('settings', 'Revoke')"
@click.stop.prevent="revoke">
{{ t('settings', 'Revoking this token might prevent the wiping of your device if it hasn\'t started the wipe yet.') }}
</ActionButton>
</template>
</Actions>
</td>
</tr>
</template>
<script>
import {Action} from 'nextcloud-vue';
import {
Actions,
ActionButton,
ActionCheckbox
} from 'nextcloud-vue';
const userAgentMap = {
ie: /(?:MSIE|Trident|Trident\/7.0; rv)[ :](\d+)/,
// Microsoft Edge User Agent from https://msdn.microsoft.com/en-us/library/hh869301(v=vs.85).aspx
edge: /^Mozilla\/5\.0 \([^)]+\) AppleWebKit\/[0-9.]+ \(KHTML, like Gecko\) Chrome\/[0-9.]+ (?:Mobile Safari|Safari)\/[0-9.]+ Edge\/[0-9.]+$/,
// Firefox User Agent from https://developer.mozilla.org/en-US/docs/Web/HTTP/Gecko_user_agent_string_reference
firefox: /^Mozilla\/5\.0 \([^)]*(Windows|OS X|Linux)[^)]+\) Gecko\/[0-9.]+ Firefox\/(\d+)(?:\.\d)?$/,
// Chrome User Agent from https://developer.chrome.com/multidevice/user-agent
chrome: /^Mozilla\/5\.0 \([^)]*(Windows|OS X|Linux)[^)]+\) AppleWebKit\/[0-9.]+ \(KHTML, like Gecko\) Chrome\/(\d+)[0-9.]+ (?:Mobile Safari|Safari)\/[0-9.]+$/,
// Safari User Agent from http://www.useragentstring.com/pages/Safari/
safari: /^Mozilla\/5\.0 \([^)]*(Windows|OS X)[^)]+\) AppleWebKit\/[0-9.]+ \(KHTML, like Gecko\)(?: Version\/([0-9]+)[0-9.]+)? Safari\/[0-9.A-Z]+$/,
// Android Chrome user agent: https://developers.google.com/chrome/mobile/docs/user-agent
androidChrome: /Android.*(?:; (.*) Build\/).*Chrome\/(\d+)[0-9.]+/,
iphone: / *CPU +iPhone +OS +([0-9]+)_(?:[0-9_])+ +like +Mac +OS +X */,
ipad: /\(iPad\; *CPU +OS +([0-9]+)_(?:[0-9_])+ +like +Mac +OS +X */,
iosClient: /^Mozilla\/5\.0 \(iOS\) (ownCloud|Nextcloud)\-iOS.*$/,
androidClient: /^Mozilla\/5\.0 \(Android\) ownCloud\-android.*$/,
iosTalkClient: /^Mozilla\/5\.0 \(iOS\) Nextcloud\-Talk.*$/,
androidTalkClient: /^Mozilla\/5\.0 \(Android\) Nextcloud\-Talk.*$/,
// DAVdroid/1.2 (2016/07/03; dav4android; okhttp3) Android/6.0.1
davDroid: /DAV(droid|x5)\/([0-9.]+)/,
// Mozilla/5.0 (U; Linux; Maemo; Jolla; Sailfish; like Android 4.3) AppleWebKit/538.1 (KHTML, like Gecko) WebPirate/2.0 like Mobile Safari/538.1 (compatible)
webPirate: /(Sailfish).*WebPirate\/(\d+)/,
// Mozilla/5.0 (Maemo; Linux; U; Jolla; Sailfish; Mobile; rv:31.0) Gecko/31.0 Firefox/31.0 SailfishBrowser/1.0
sailfishBrowser: /(Sailfish).*SailfishBrowser\/(\d+)/
};
const nameMap = {
ie: t('setting', 'Internet Explorer'),
edge: t('setting', 'Edge'),
firefox: t('setting', 'Firefox'),
chrome: t('setting', 'Google Chrome'),
safari: t('setting', 'Safari'),
androidChrome: t('setting', 'Google Chrome for Android'),
iphone: t('setting', 'iPhone'),
ipad: t('setting', 'iPad'),
iosClient: t('setting', 'Nextcloud iOS app'),
androidClient: t('setting', 'Nextcloud Android app'),
iosTalkClient: t('setting', 'Nextcloud Talk for iOS'),
androidTalkClient: t('setting', 'Nextcloud Talk for Android'),
davDroid: 'DAVdroid',
webPirate: 'WebPirate',
sailfishBrowser: 'SailfishBrowser'
};
const iconMap = {
ie: 'icon-desktop',
edge: 'icon-desktop',
firefox: 'icon-desktop',
chrome: 'icon-desktop',
safari: 'icon-desktop',
androidChrome: 'icon-phone',
iphone: 'icon-phone',
ipad: 'icon-tablet',
iosClient: 'icon-phone',
androidClient: 'icon-phone',
iosTalkClient: 'icon-phone',
androidTalkClient: 'icon-phone',
davDroid: 'icon-phone',
webPirate: 'icon-link',
sailfishBrowser: 'icon-link'
};
const userAgentMap = {
ie: /(?:MSIE|Trident|Trident\/7.0; rv)[ :](\d+)/,
// Microsoft Edge User Agent from https://msdn.microsoft.com/en-us/library/hh869301(v=vs.85).aspx
edge: /^Mozilla\/5\.0 \([^)]+\) AppleWebKit\/[0-9.]+ \(KHTML, like Gecko\) Chrome\/[0-9.]+ (?:Mobile Safari|Safari)\/[0-9.]+ Edge\/[0-9.]+$/,
// Firefox User Agent from https://developer.mozilla.org/en-US/docs/Web/HTTP/Gecko_user_agent_string_reference
firefox: /^Mozilla\/5\.0 \([^)]*(Windows|OS X|Linux)[^)]+\) Gecko\/[0-9.]+ Firefox\/(\d+)(?:\.\d)?$/,
// Chrome User Agent from https://developer.chrome.com/multidevice/user-agent
chrome: /^Mozilla\/5\.0 \([^)]*(Windows|OS X|Linux)[^)]+\) AppleWebKit\/[0-9.]+ \(KHTML, like Gecko\) Chrome\/(\d+)[0-9.]+ (?:Mobile Safari|Safari)\/[0-9.]+$/,
// Safari User Agent from http://www.useragentstring.com/pages/Safari/
safari: /^Mozilla\/5\.0 \([^)]*(Windows|OS X)[^)]+\) AppleWebKit\/[0-9.]+ \(KHTML, like Gecko\)(?: Version\/([0-9]+)[0-9.]+)? Safari\/[0-9.A-Z]+$/,
// Android Chrome user agent: https://developers.google.com/chrome/mobile/docs/user-agent
androidChrome: /Android.*(?:; (.*) Build\/).*Chrome\/(\d+)[0-9.]+/,
iphone: / *CPU +iPhone +OS +([0-9]+)_(?:[0-9_])+ +like +Mac +OS +X */,
ipad: /\(iPad\; *CPU +OS +([0-9]+)_(?:[0-9_])+ +like +Mac +OS +X */,
iosClient: /^Mozilla\/5\.0 \(iOS\) (ownCloud|Nextcloud)\-iOS.*$/,
androidClient: /^Mozilla\/5\.0 \(Android\) ownCloud\-android.*$/,
iosTalkClient: /^Mozilla\/5\.0 \(iOS\) Nextcloud\-Talk.*$/,
androidTalkClient: /^Mozilla\/5\.0 \(Android\) Nextcloud\-Talk.*$/,
// DAVdroid/1.2 (2016/07/03; dav4android; okhttp3) Android/6.0.1
davDroid: /DAV(droid|x5)\/([0-9.]+)/,
// Mozilla/5.0 (U; Linux; Maemo; Jolla; Sailfish; like Android 4.3) AppleWebKit/538.1 (KHTML, like Gecko) WebPirate/2.0 like Mobile Safari/538.1 (compatible)
webPirate: /(Sailfish).*WebPirate\/(\d+)/,
// Mozilla/5.0 (Maemo; Linux; U; Jolla; Sailfish; Mobile; rv:31.0) Gecko/31.0 Firefox/31.0 SailfishBrowser/1.0
sailfishBrowser: /(Sailfish).*SailfishBrowser\/(\d+)/
};
const nameMap = {
ie: t('setting', 'Internet Explorer'),
edge: t('setting', 'Edge'),
firefox: t('setting', 'Firefox'),
chrome: t('setting', 'Google Chrome'),
safari: t('setting', 'Safari'),
androidChrome: t('setting', 'Google Chrome for Android'),
iphone: t('setting', 'iPhone'),
ipad: t('setting', 'iPad'),
iosClient: t('setting', 'Nextcloud iOS app'),
androidClient: t('setting', 'Nextcloud Android app'),
iosTalkClient: t('setting', 'Nextcloud Talk for iOS'),
androidTalkClient: t('setting', 'Nextcloud Talk for Android'),
davDroid: 'DAVdroid',
webPirate: 'WebPirate',
sailfishBrowser: 'SailfishBrowser'
};
const iconMap = {
ie: 'icon-desktop',
edge: 'icon-desktop',
firefox: 'icon-desktop',
chrome: 'icon-desktop',
safari: 'icon-desktop',
androidChrome: 'icon-phone',
iphone: 'icon-phone',
ipad: 'icon-tablet',
iosClient: 'icon-phone',
androidClient: 'icon-phone',
iosTalkClient: 'icon-phone',
androidTalkClient: 'icon-phone',
davDroid: 'icon-phone',
webPirate: 'icon-link',
sailfishBrowser: 'icon-link'
};
export default {
name: "AuthToken",
components: {
Action,
export default {
name: "AuthToken",
components: {
Actions,
ActionButton,
ActionCheckbox
},
props: {
token: {
type: Object,
required: true,
}
},
computed: {
lastActivityRelative () {
return OC.Util.relativeModifiedDate(this.token.lastActivity * 1000);
},
props: {
token: {
type: Object,
required: true,
lastActivity () {
return OC.Util.formatDate(this.token.lastActivity * 1000, 'LLL');
},
iconName () {
// pretty format sync client user agent
let matches = this.token.name.match(/Mozilla\/5\.0 \((\w+)\) (?:mirall|csyncoC)\/(\d+\.\d+\.\d+)/);
let icon = '';
if (matches) {
this.token.name = t('settings', 'Sync client - {os}', {
os: matches[1],
version: matches[2]
});
icon = 'icon-desktop';
}
},
computed: {
actions () {
const actions = [];
if (this.token.type === 1) {
// TODO: add text/longtext with some description
actions.push({
input: 'checkbox',
action: () => this.$emit('toggleScope', this.token, 'filesystem', !this.token.scope.filesystem),
model: this.token.scope.filesystem,
text: t('settings', 'Allow filesystem access'),
});
}
if (this.token.canRename) {
// TODO: add text/longtext with some description
actions.push({
icon: 'icon-rename',
action: () => this.startRename(),
text: t('settings', 'Rename'),
});
}
if (this.token.canDelete && this.token.type !== 2) {
// TODO: add text/longtext with some description
actions.push({
icon: 'icon-delete',
action: () => this.$emit('delete', this.token),
text: t('settings', 'Revoke'),
});
actions.push({
icon: 'icon-delete',
action: this.wipe,
text: t('settings', 'Wipe device'),
});
} else if (this.token.canDelete && this.token.type === 2) {
actions.push({
icon: 'icon-delete',
action: () => this.$emit('delete', this.token),
text: t('settings', 'Revoke'),
longtext: t('settings', 'Revoking this token might prevent the wiping of your device if it hasn\'t started the wipe yet.'),
});
}
return actions;
},
lastActivityRelative () {
return OC.Util.relativeModifiedDate(this.token.lastActivity * 1000);
},
lastActivity () {
return OC.Util.formatDate(this.token.lastActivity * 1000, 'LLL');
},
iconName () {
// pretty format sync client user agent
let matches = this.token.name.match(/Mozilla\/5\.0 \((\w+)\) (?:mirall|csyncoC)\/(\d+\.\d+\.\d+)/);
let icon = '';
if (matches) {
this.token.name = t('settings', 'Sync client - {os}', {
os: matches[1],
version: matches[2]
});
icon = 'icon-desktop';
}
// preserve title for cases where we format it further
const title = this.token.name;
let name = this.token.name;
for (let client in userAgentMap) {
if (matches = title.match(userAgentMap[client])) {
if (matches[2] && matches[1]) { // version number and os
name = nameMap[client] + ' ' + matches[2] + ' - ' + matches[1];
} else if (matches[1]) { // only version number
name = nameMap[client] + ' ' + matches[1];
} else {
name = nameMap[client];
}
icon = iconMap[client];
// preserve title for cases where we format it further
const title = this.token.name;
let name = this.token.name;
for (let client in userAgentMap) {
if (matches = title.match(userAgentMap[client])) {
if (matches[2] && matches[1]) { // version number and os
name = nameMap[client] + ' ' + matches[2] + ' - ' + matches[1];
} else if (matches[1]) { // only version number
name = nameMap[client] + ' ' + matches[1];
} else {
name = nameMap[client];
}
}
if (this.token.current) {
name = t('settings', 'This session');
}
return {
icon,
name,
};
},
wiping() {
return this.token.type === 2;
icon = iconMap[client];
}
}
},
data () {
if (this.token.current) {
name = t('settings', 'This session');
}
return {
showMore: this.token.canScope || this.token.canDelete,
renaming: false,
newName: '',
actionOpen: false,
icon,
name,
};
},
methods: {
startRename () {
// Close action (popover menu)
this.actionOpen = false;
wiping() {
return this.token.type === 2;
}
},
data () {
return {
showMore: this.token.canScope || this.token.canDelete,
renaming: false,
newName: '',
actionOpen: false,
};
},
methods: {
startRename() {
// Close action (popover menu)
this.actionOpen = false;
this.newName = this.token.name;
this.renaming = true;
this.$nextTick(() => {
this.$refs.input.select();
});
},
cancelRename () {
this.renaming = false;
},
rename () {
this.renaming = false;
this.$emit('rename', this.token, this.newName);
},
wipe () {
this.actionOpen = false;
this.$emit('wipe', this.token);
}
this.newName = this.token.name;
this.renaming = true;
this.$nextTick(() => {
this.$refs.input.select();
});
},
cancelRename() {
this.renaming = false;
},
revoke() {
this.actionOpen = false;
this.$emit('delete', this.token)
},
rename() {
this.renaming = false;
this.$emit('rename', this.token, this.newName);
},
wipe() {
this.actionOpen = false;
this.$emit('wipe', this.token);
}
}
}
</script>
<style lang="scss" scoped>
@ -266,7 +268,8 @@
&%icon {
overflow: visible;
position: relative;
width: 16px;
width: 44px;
height: 44px;
}
&.token-name {
@ -287,6 +290,7 @@
&.more {
@extend %icon;
padding: 0 10px;
}
&.client {

View File

@ -21,25 +21,31 @@
-->
<template>
<AppContent app-name="settings" :class="{ 'with-app-sidebar': currentApp}"
<Content app-name="settings" :class="{ 'with-app-sidebar': currentApp}"
:content-class="{ 'icon-loading': loadingList }" :navigation-class="{ 'icon-loading': loading }">
<template #navigation>
<AppNavigation>
<ul id="appscategories">
<AppNavigationItem v-for="item in menu" :key="item.key" :item="item" />
</ul>
</template>
<template #content class="app-settings-content" :class="{ 'icon-loading': loadingList }">
<app-list :category="category" :app="currentApp" :search="searchQuery"></app-list>
</template>
<template #sidebar v-if="id && currentApp" >
<app-details :category="category" :app="currentApp"></app-details>
</template>
</AppContent>
</AppNavigation>
<AppContent class="app-settings-content" :class="{ 'icon-loading': loadingList }">
<AppList :category="category" :app="currentApp" :search="searchQuery" />
</AppContent>
<AppSidebar v-if="id && currentApp" >
<AppDetails :category="category" :app="currentApp" />
</AppSidebar>
</Content>
</template>
<script>
import { AppContent, AppNavigationItem } from 'nextcloud-vue';
import appList from '../components/appList';
import {
AppContent,
AppNavigation,
AppNavigationItem,
AppSidebar,
Content
} from 'nextcloud-vue';
import AppList from '../components/appList';
import Vue from 'vue';
import VueLocalStorage from 'vue-localstorage'
import AppDetails from '../components/appDetails';
@ -60,9 +66,12 @@ export default {
},
components: {
AppContent,
AppDetails,
appList,
AppNavigation,
AppNavigationItem,
AppSidebar,
Content,
AppDetails,
AppList
},
methods: {
setSearch(query) {

View File

@ -21,8 +21,8 @@
-->
<template>
<AppContent app-name="settings" :navigation-class="{ 'icon-loading': loadingAddGroup }">
<template #navigation>
<Content app-name="settings" :navigation-class="{ 'icon-loading': loadingAddGroup }">
<AppNavigation>
<AppNavigationNew button-id="new-user-button" :text="t('settings','New user')" button-class="icon-add" @click="toggleNewUserMenu" />
<ul id="usergrouplist">
<AppNavigationItem v-for="item in menu" :key="item.key" :item="item" />
@ -30,12 +30,12 @@
<AppNavigationSettings>
<div>
<p>{{t('settings', 'Default quota:')}}</p>
<multiselect :value="defaultQuota" :options="quotaOptions"
<Multiselect :value="defaultQuota" :options="quotaOptions"
tag-placeholder="create" :placeholder="t('settings', 'Select default quota')"
label="label" track-by="id" class="multiselect-vue"
label="label" track-by="id"
:allowEmpty="false" :taggable="true"
@tag="validateQuota" @input="setDefaultQuota">
</multiselect>
</Multiselect>
</div>
<div>
@ -55,22 +55,27 @@
<label for="showStoragePath">{{t('settings', 'Show storage path')}}</label>
</div>
</AppNavigationSettings>
</template>
<user-list #content :users="users" :showConfig="showConfig" :selectedGroup="selectedGroup" :externalActions="externalActions" />
</AppContent>
</AppNavigation>
<AppContent>
<UserList #content :users="users" :showConfig="showConfig" :selectedGroup="selectedGroup" :externalActions="externalActions" />
</AppContent>
</Content>
</template>
<script>
import Vue from 'vue';
import VueLocalStorage from 'vue-localstorage'
import {
AppContent,
AppNavigation,
AppNavigationItem,
AppNavigationNew,
AppNavigationSettings,
AppSidebar,
Content,
Multiselect
} from 'nextcloud-vue';
import userList from '../components/userList';
import Vue from 'vue';
import VueLocalStorage from 'vue-localstorage'
import Multiselect from 'vue-multiselect';
import UserList from '../components/userList';
import api from '../store/api';
Vue.use(VueLocalStorage)
@ -80,10 +85,13 @@ export default {
props: ['selectedGroup'],
components: {
AppContent,
AppNavigation,
AppNavigationItem,
AppNavigationNew,
AppNavigationSettings,
userList,
AppSidebar,
Content,
UserList,
Multiselect,
},
beforeMount() {