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:
commit
daaa14e921
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -132,7 +132,7 @@ __webpack_require__.r(__webpack_exports__);
|
||||||
|
|
||||||
"use strict";
|
"use strict";
|
||||||
__webpack_require__.r(__webpack_exports__);
|
__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: {
|
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
|
@ -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>
|
* @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/>.
|
* 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
|
//# sourceMappingURL=files_sharing.4.js.map
|
File diff suppressed because one or more lines are too long
|
@ -21,15 +21,16 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
|
import Vuex from 'vuex';
|
||||||
import { PopoverMenu } from 'nextcloud-vue';
|
import { PopoverMenu } from 'nextcloud-vue';
|
||||||
import ClickOutside from 'vue-click-outside';
|
import ClickOutside from 'vue-click-outside';
|
||||||
import { VTooltip } from 'v-tooltip';
|
import { VTooltip } from 'v-tooltip';
|
||||||
|
|
||||||
Vue.prototype.t = t;
|
Vue.prototype.t = t;
|
||||||
|
|
||||||
Vue.component('PopoverMenu', PopoverMenu);
|
Vue.component('PopoverMenu', PopoverMenu);
|
||||||
Vue.directive('ClickOutside', ClickOutside);
|
Vue.directive('ClickOutside', ClickOutside);
|
||||||
Vue.directive('Tooltip', VTooltip);
|
Vue.directive('Tooltip', VTooltip);
|
||||||
|
Vue.use(Vuex);
|
||||||
|
|
||||||
import View from './views/CollaborationView';
|
import View from './views/CollaborationView';
|
||||||
|
|
||||||
|
|
|
@ -25,26 +25,26 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { CollectionList } from 'nextcloud-vue-collections'
|
import { CollectionList } from 'nextcloud-vue-collections'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'CollaborationView',
|
name: 'CollaborationView',
|
||||||
computed: {
|
computed: {
|
||||||
fileId() {
|
fileId() {
|
||||||
if (this.$root.model && this.$root.model.id) {
|
if (this.$root.model && this.$root.model.id) {
|
||||||
return '' + 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 '';
|
|
||||||
}
|
}
|
||||||
|
return null;
|
||||||
},
|
},
|
||||||
components: {
|
filename() {
|
||||||
CollectionList
|
if (this.$root.model && this.$root.model.name) {
|
||||||
|
return '' + this.$root.model.name;
|
||||||
|
}
|
||||||
|
return '';
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
components: {
|
||||||
|
CollectionList
|
||||||
}
|
}
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -31,28 +31,12 @@ module.exports = {
|
||||||
{
|
{
|
||||||
test: /\.js$/,
|
test: /\.js$/,
|
||||||
loader: 'babel-loader',
|
loader: 'babel-loader',
|
||||||
exclude: /node_modules/,
|
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]'
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
plugins: [new VueLoaderPlugin()],
|
plugins: [new VueLoaderPlugin()],
|
||||||
resolve: {
|
resolve: {
|
||||||
alias: {
|
extensions: ['*', '.js', '.vue', '.json']
|
||||||
vue$: 'vue/dist/vue.runtime.esm.js',
|
|
||||||
},
|
|
||||||
extensions: ['*', '.js', '.vue', '.json'],
|
|
||||||
modules: [
|
|
||||||
path.join(__dirname, '../../node_modules')
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -4842,9 +4842,9 @@
|
||||||
"integrity": "sha512-ZqnNDFNR0rCpifb29uoqyqd9IyVwNZrDePzmP6DbGiNStFrvnlOG8OTdIMSdC82bKzKAqzXU5L73kSQncG8oXA=="
|
"integrity": "sha512-ZqnNDFNR0rCpifb29uoqyqd9IyVwNZrDePzmP6DbGiNStFrvnlOG8OTdIMSdC82bKzKAqzXU5L73kSQncG8oXA=="
|
||||||
},
|
},
|
||||||
"nextcloud-vue": {
|
"nextcloud-vue": {
|
||||||
"version": "0.8.0",
|
"version": "0.11.3",
|
||||||
"resolved": "https://registry.npmjs.org/nextcloud-vue/-/nextcloud-vue-0.8.0.tgz",
|
"resolved": "https://registry.npmjs.org/nextcloud-vue/-/nextcloud-vue-0.11.3.tgz",
|
||||||
"integrity": "sha512-6qXcWTgtrbM4W1AjyHSWn0cHOFm/Q39A//OibrY7M332orQnDvCrDoGloUUOW6+vbXJarI+L7t7scL6mkRw4Qg==",
|
"integrity": "sha512-lVih3gUuRZf5B82+XjLuiw3qp2tvAITF512mTyhHLtAzBWEiBfWsidMP10Nntql4zAEoLTZvLaQ1izFglMUDmw==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"hammerjs": "^2.0.8",
|
"hammerjs": "^2.0.8",
|
||||||
"md5": "^2.2.1",
|
"md5": "^2.2.1",
|
||||||
|
@ -4853,37 +4853,31 @@
|
||||||
"vue": "^2.6.7",
|
"vue": "^2.6.7",
|
||||||
"vue-click-outside": "^1.0.7",
|
"vue-click-outside": "^1.0.7",
|
||||||
"vue-multiselect": "^2.1.3",
|
"vue-multiselect": "^2.1.3",
|
||||||
|
"vue-visible": "^1.0.2",
|
||||||
"vue2-datepicker": "^2.10.0"
|
"vue2-datepicker": "^2.10.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nextcloud-vue-collections": {
|
"nextcloud-vue-collections": {
|
||||||
"version": "0.4.0",
|
"version": "0.5.2",
|
||||||
"resolved": "https://registry.npmjs.org/nextcloud-vue-collections/-/nextcloud-vue-collections-0.4.0.tgz",
|
"resolved": "https://registry.npmjs.org/nextcloud-vue-collections/-/nextcloud-vue-collections-0.5.2.tgz",
|
||||||
"integrity": "sha512-UxgormIFW4CD9dUsobRzIuQt1PQXkT+EI2KCp1CoAiJiurzf5yO9BmmS3gN9lWZa1+EZvLqljapvAlyntWwX6Q==",
|
"integrity": "sha512-trqoV2cPhjwelzqE5bhxm6jBDdE9IxrPo1EXjebEBNB3GXT76cL0BpxVf/lZQYXQ6ylKxbLL4tPwEFUT0scyxw==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"lodash": "^4.17.11",
|
"lodash": "^4.17.11",
|
||||||
"nextcloud-axios": "^0.1.2",
|
"nextcloud-axios": "^0.1.2",
|
||||||
"nextcloud-vue": "^0.9.0",
|
"nextcloud-vue": "^0.11.1",
|
||||||
"v-tooltip": "^2.0.0-rc.33",
|
"v-tooltip": "^3.0.0-alpha.7",
|
||||||
"vue": "^2.6.6",
|
"vue": "^2.6.6",
|
||||||
"vue-click-outside": "^1.0.7",
|
"vue-click-outside": "^1.0.7",
|
||||||
"vuex": "^3.1.0"
|
"vuex": "^3.1.0"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"nextcloud-vue": {
|
"v-tooltip": {
|
||||||
"version": "0.9.7",
|
"version": "3.0.0-alpha.7",
|
||||||
"resolved": "https://registry.npmjs.org/nextcloud-vue/-/nextcloud-vue-0.9.7.tgz",
|
"resolved": "https://registry.npmjs.org/v-tooltip/-/v-tooltip-3.0.0-alpha.7.tgz",
|
||||||
"integrity": "sha512-47mr8kBQfJW1oNTgKjFdktgX6+Z0c6jryd1xq+515jLef3o1DWdMmRLF5Yab3TTUdha/aG3dL0lpVQ6Z3jf9Aw==",
|
"integrity": "sha512-BJM1tYm/Idsa4xjY8nsZ/o329qEhnpAnKTI5fG2r5/aEFtmno9HJKT8+lmbHGpZhOnV8NCCg/9PuiCFPOT7/Lw==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"hammerjs": "^2.0.8",
|
"popper.js": "^1.15.0",
|
||||||
"md5": "^2.2.1",
|
"vue-resize": "^0.4.5"
|
||||||
"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"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7255,9 +7249,9 @@
|
||||||
"integrity": "sha512-yaX2its9XAJKGuQqf7LsiZHHSkxsIK8rmCOQOvEGEoF41blKRK8qr9my4qYoD6ikdLss4n8tKqYBecmaY0+WJg=="
|
"integrity": "sha512-yaX2its9XAJKGuQqf7LsiZHHSkxsIK8rmCOQOvEGEoF41blKRK8qr9my4qYoD6ikdLss4n8tKqYBecmaY0+WJg=="
|
||||||
},
|
},
|
||||||
"vue2-datepicker": {
|
"vue2-datepicker": {
|
||||||
"version": "2.10.0",
|
"version": "2.11.2",
|
||||||
"resolved": "https://registry.npmjs.org/vue2-datepicker/-/vue2-datepicker-2.10.0.tgz",
|
"resolved": "https://registry.npmjs.org/vue2-datepicker/-/vue2-datepicker-2.11.2.tgz",
|
||||||
"integrity": "sha512-WGL7ou0TdBiJQuHVp29BtBw3rSkLrIYwXWU/ELmaLdnAerI0EdGVAu7DvZV2iIxY4lsHyjqocApxdvXTmwLrAw==",
|
"integrity": "sha512-xGyIN5pMMdaKMnndSrzqW6LDST/e7PHcFt2uIp73OOMZMDAlhEmzroNtoYBwJEEzKnCNMo+ktcykgYljrE8y8Q==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"fecha": "^2.3.3"
|
"fecha": "^2.3.3"
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,8 +43,8 @@
|
||||||
"moment": "^2.24.0",
|
"moment": "^2.24.0",
|
||||||
"nextcloud-axios": "^0.1.3",
|
"nextcloud-axios": "^0.1.3",
|
||||||
"nextcloud-password-confirmation": "^0.4.1",
|
"nextcloud-password-confirmation": "^0.4.1",
|
||||||
"nextcloud-vue": "^0.8.0",
|
"nextcloud-vue": "^0.11.3",
|
||||||
"nextcloud-vue-collections": "^0.4.0",
|
"nextcloud-vue-collections": "^0.5.2",
|
||||||
"snap.js": "^2.0.9",
|
"snap.js": "^2.0.9",
|
||||||
"strengthify": "git+https://github.com/MorrisJobke/strengthify.git#0.5.8",
|
"strengthify": "git+https://github.com/MorrisJobke/strengthify.git#0.5.8",
|
||||||
"underscore": "^1.9.1",
|
"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
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
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
|
@ -21,7 +21,7 @@
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<tr :data-id="token.id"
|
<tr :data-id="token.id"
|
||||||
:class="{wiping}">
|
:class="wiping">
|
||||||
<td class="client">
|
<td class="client">
|
||||||
<div :class="iconName.icon"></div>
|
<div :class="iconName.icon"></div>
|
||||||
</td>
|
</td>
|
||||||
|
@ -41,214 +41,216 @@
|
||||||
<span class="last-activity" v-tooltip="lastActivity">{{lastActivityRelative}}</span>
|
<span class="last-activity" v-tooltip="lastActivity">{{lastActivityRelative}}</span>
|
||||||
</td>
|
</td>
|
||||||
<td class="more">
|
<td class="more">
|
||||||
<Action v-if="!token.current"
|
<Actions v-if="!token.current"
|
||||||
:actions="actions"
|
:actions="actions"
|
||||||
v-bind:open.sync="actionOpen"
|
:open.sync="actionOpen"
|
||||||
v-tooltip="{content: t('settings', 'Device settings'), container: 'body'}"
|
v-tooltip.auto="{
|
||||||
tabindex="0"/>
|
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>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import {Action} from 'nextcloud-vue';
|
import {
|
||||||
|
Actions,
|
||||||
|
ActionButton,
|
||||||
|
ActionCheckbox
|
||||||
|
} from 'nextcloud-vue';
|
||||||
|
|
||||||
const userAgentMap = {
|
const userAgentMap = {
|
||||||
ie: /(?:MSIE|Trident|Trident\/7.0; rv)[ :](\d+)/,
|
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
|
// 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.]+$/,
|
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 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)?$/,
|
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 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.]+$/,
|
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 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]+$/,
|
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
|
// Android Chrome user agent: https://developers.google.com/chrome/mobile/docs/user-agent
|
||||||
androidChrome: /Android.*(?:; (.*) Build\/).*Chrome\/(\d+)[0-9.]+/,
|
androidChrome: /Android.*(?:; (.*) Build\/).*Chrome\/(\d+)[0-9.]+/,
|
||||||
iphone: / *CPU +iPhone +OS +([0-9]+)_(?:[0-9_])+ +like +Mac +OS +X */,
|
iphone: / *CPU +iPhone +OS +([0-9]+)_(?:[0-9_])+ +like +Mac +OS +X */,
|
||||||
ipad: /\(iPad\; *CPU +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.*$/,
|
iosClient: /^Mozilla\/5\.0 \(iOS\) (ownCloud|Nextcloud)\-iOS.*$/,
|
||||||
androidClient: /^Mozilla\/5\.0 \(Android\) ownCloud\-android.*$/,
|
androidClient: /^Mozilla\/5\.0 \(Android\) ownCloud\-android.*$/,
|
||||||
iosTalkClient: /^Mozilla\/5\.0 \(iOS\) Nextcloud\-Talk.*$/,
|
iosTalkClient: /^Mozilla\/5\.0 \(iOS\) Nextcloud\-Talk.*$/,
|
||||||
androidTalkClient: /^Mozilla\/5\.0 \(Android\) Nextcloud\-Talk.*$/,
|
androidTalkClient: /^Mozilla\/5\.0 \(Android\) Nextcloud\-Talk.*$/,
|
||||||
// DAVdroid/1.2 (2016/07/03; dav4android; okhttp3) Android/6.0.1
|
// DAVdroid/1.2 (2016/07/03; dav4android; okhttp3) Android/6.0.1
|
||||||
davDroid: /DAV(droid|x5)\/([0-9.]+)/,
|
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)
|
// 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+)/,
|
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
|
// 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+)/
|
sailfishBrowser: /(Sailfish).*SailfishBrowser\/(\d+)/
|
||||||
};
|
};
|
||||||
const nameMap = {
|
const nameMap = {
|
||||||
ie: t('setting', 'Internet Explorer'),
|
ie: t('setting', 'Internet Explorer'),
|
||||||
edge: t('setting', 'Edge'),
|
edge: t('setting', 'Edge'),
|
||||||
firefox: t('setting', 'Firefox'),
|
firefox: t('setting', 'Firefox'),
|
||||||
chrome: t('setting', 'Google Chrome'),
|
chrome: t('setting', 'Google Chrome'),
|
||||||
safari: t('setting', 'Safari'),
|
safari: t('setting', 'Safari'),
|
||||||
androidChrome: t('setting', 'Google Chrome for Android'),
|
androidChrome: t('setting', 'Google Chrome for Android'),
|
||||||
iphone: t('setting', 'iPhone'),
|
iphone: t('setting', 'iPhone'),
|
||||||
ipad: t('setting', 'iPad'),
|
ipad: t('setting', 'iPad'),
|
||||||
iosClient: t('setting', 'Nextcloud iOS app'),
|
iosClient: t('setting', 'Nextcloud iOS app'),
|
||||||
androidClient: t('setting', 'Nextcloud Android app'),
|
androidClient: t('setting', 'Nextcloud Android app'),
|
||||||
iosTalkClient: t('setting', 'Nextcloud Talk for iOS'),
|
iosTalkClient: t('setting', 'Nextcloud Talk for iOS'),
|
||||||
androidTalkClient: t('setting', 'Nextcloud Talk for Android'),
|
androidTalkClient: t('setting', 'Nextcloud Talk for Android'),
|
||||||
davDroid: 'DAVdroid',
|
davDroid: 'DAVdroid',
|
||||||
webPirate: 'WebPirate',
|
webPirate: 'WebPirate',
|
||||||
sailfishBrowser: 'SailfishBrowser'
|
sailfishBrowser: 'SailfishBrowser'
|
||||||
};
|
};
|
||||||
const iconMap = {
|
const iconMap = {
|
||||||
ie: 'icon-desktop',
|
ie: 'icon-desktop',
|
||||||
edge: 'icon-desktop',
|
edge: 'icon-desktop',
|
||||||
firefox: 'icon-desktop',
|
firefox: 'icon-desktop',
|
||||||
chrome: 'icon-desktop',
|
chrome: 'icon-desktop',
|
||||||
safari: 'icon-desktop',
|
safari: 'icon-desktop',
|
||||||
androidChrome: 'icon-phone',
|
androidChrome: 'icon-phone',
|
||||||
iphone: 'icon-phone',
|
iphone: 'icon-phone',
|
||||||
ipad: 'icon-tablet',
|
ipad: 'icon-tablet',
|
||||||
iosClient: 'icon-phone',
|
iosClient: 'icon-phone',
|
||||||
androidClient: 'icon-phone',
|
androidClient: 'icon-phone',
|
||||||
iosTalkClient: 'icon-phone',
|
iosTalkClient: 'icon-phone',
|
||||||
androidTalkClient: 'icon-phone',
|
androidTalkClient: 'icon-phone',
|
||||||
davDroid: 'icon-phone',
|
davDroid: 'icon-phone',
|
||||||
webPirate: 'icon-link',
|
webPirate: 'icon-link',
|
||||||
sailfishBrowser: 'icon-link'
|
sailfishBrowser: 'icon-link'
|
||||||
};
|
};
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "AuthToken",
|
name: "AuthToken",
|
||||||
components: {
|
components: {
|
||||||
Action,
|
Actions,
|
||||||
|
ActionButton,
|
||||||
|
ActionCheckbox
|
||||||
|
},
|
||||||
|
props: {
|
||||||
|
token: {
|
||||||
|
type: Object,
|
||||||
|
required: true,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
lastActivityRelative () {
|
||||||
|
return OC.Util.relativeModifiedDate(this.token.lastActivity * 1000);
|
||||||
},
|
},
|
||||||
props: {
|
lastActivity () {
|
||||||
token: {
|
return OC.Util.formatDate(this.token.lastActivity * 1000, 'LLL');
|
||||||
type: Object,
|
},
|
||||||
required: true,
|
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) {
|
// preserve title for cases where we format it further
|
||||||
// TODO: add text/longtext with some description
|
const title = this.token.name;
|
||||||
actions.push({
|
let name = this.token.name;
|
||||||
input: 'checkbox',
|
for (let client in userAgentMap) {
|
||||||
action: () => this.$emit('toggleScope', this.token, 'filesystem', !this.token.scope.filesystem),
|
if (matches = title.match(userAgentMap[client])) {
|
||||||
model: this.token.scope.filesystem,
|
if (matches[2] && matches[1]) { // version number and os
|
||||||
text: t('settings', 'Allow filesystem access'),
|
name = nameMap[client] + ' ' + matches[2] + ' - ' + matches[1];
|
||||||
});
|
} else if (matches[1]) { // only version number
|
||||||
}
|
name = nameMap[client] + ' ' + matches[1];
|
||||||
if (this.token.canRename) {
|
} else {
|
||||||
// TODO: add text/longtext with some description
|
name = nameMap[client];
|
||||||
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];
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if (this.token.current) {
|
|
||||||
name = t('settings', 'This session');
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
icon = iconMap[client];
|
||||||
icon,
|
}
|
||||||
name,
|
|
||||||
};
|
|
||||||
},
|
|
||||||
wiping() {
|
|
||||||
return this.token.type === 2;
|
|
||||||
}
|
}
|
||||||
},
|
if (this.token.current) {
|
||||||
data () {
|
name = t('settings', 'This session');
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
showMore: this.token.canScope || this.token.canDelete,
|
icon,
|
||||||
renaming: false,
|
name,
|
||||||
newName: '',
|
|
||||||
actionOpen: false,
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
methods: {
|
wiping() {
|
||||||
startRename () {
|
return this.token.type === 2;
|
||||||
// Close action (popover menu)
|
}
|
||||||
this.actionOpen = false;
|
},
|
||||||
|
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.newName = this.token.name;
|
||||||
this.renaming = true;
|
this.renaming = true;
|
||||||
this.$nextTick(() => {
|
this.$nextTick(() => {
|
||||||
this.$refs.input.select();
|
this.$refs.input.select();
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
cancelRename () {
|
cancelRename() {
|
||||||
this.renaming = false;
|
this.renaming = false;
|
||||||
},
|
},
|
||||||
rename () {
|
revoke() {
|
||||||
this.renaming = false;
|
this.actionOpen = false;
|
||||||
this.$emit('rename', this.token, this.newName);
|
this.$emit('delete', this.token)
|
||||||
},
|
},
|
||||||
wipe () {
|
rename() {
|
||||||
this.actionOpen = false;
|
this.renaming = false;
|
||||||
|
this.$emit('rename', this.token, this.newName);
|
||||||
this.$emit('wipe', this.token);
|
},
|
||||||
}
|
wipe() {
|
||||||
|
this.actionOpen = false;
|
||||||
|
this.$emit('wipe', this.token);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
@ -266,7 +268,8 @@
|
||||||
&%icon {
|
&%icon {
|
||||||
overflow: visible;
|
overflow: visible;
|
||||||
position: relative;
|
position: relative;
|
||||||
width: 16px;
|
width: 44px;
|
||||||
|
height: 44px;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.token-name {
|
&.token-name {
|
||||||
|
@ -287,6 +290,7 @@
|
||||||
|
|
||||||
&.more {
|
&.more {
|
||||||
@extend %icon;
|
@extend %icon;
|
||||||
|
padding: 0 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.client {
|
&.client {
|
||||||
|
|
|
@ -21,25 +21,31 @@
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<template>
|
<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 }">
|
:content-class="{ 'icon-loading': loadingList }" :navigation-class="{ 'icon-loading': loading }">
|
||||||
<template #navigation>
|
<AppNavigation>
|
||||||
<ul id="appscategories">
|
<ul id="appscategories">
|
||||||
<AppNavigationItem v-for="item in menu" :key="item.key" :item="item" />
|
<AppNavigationItem v-for="item in menu" :key="item.key" :item="item" />
|
||||||
</ul>
|
</ul>
|
||||||
</template>
|
</AppNavigation>
|
||||||
<template #content class="app-settings-content" :class="{ 'icon-loading': loadingList }">
|
<AppContent class="app-settings-content" :class="{ 'icon-loading': loadingList }">
|
||||||
<app-list :category="category" :app="currentApp" :search="searchQuery"></app-list>
|
<AppList :category="category" :app="currentApp" :search="searchQuery" />
|
||||||
</template>
|
</AppContent>
|
||||||
<template #sidebar v-if="id && currentApp" >
|
<AppSidebar v-if="id && currentApp" >
|
||||||
<app-details :category="category" :app="currentApp"></app-details>
|
<AppDetails :category="category" :app="currentApp" />
|
||||||
</template>
|
</AppSidebar>
|
||||||
</AppContent>
|
</Content>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { AppContent, AppNavigationItem } from 'nextcloud-vue';
|
import {
|
||||||
import appList from '../components/appList';
|
AppContent,
|
||||||
|
AppNavigation,
|
||||||
|
AppNavigationItem,
|
||||||
|
AppSidebar,
|
||||||
|
Content
|
||||||
|
} from 'nextcloud-vue';
|
||||||
|
import AppList from '../components/appList';
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import VueLocalStorage from 'vue-localstorage'
|
import VueLocalStorage from 'vue-localstorage'
|
||||||
import AppDetails from '../components/appDetails';
|
import AppDetails from '../components/appDetails';
|
||||||
|
@ -60,9 +66,12 @@ export default {
|
||||||
},
|
},
|
||||||
components: {
|
components: {
|
||||||
AppContent,
|
AppContent,
|
||||||
AppDetails,
|
AppNavigation,
|
||||||
appList,
|
|
||||||
AppNavigationItem,
|
AppNavigationItem,
|
||||||
|
AppSidebar,
|
||||||
|
Content,
|
||||||
|
AppDetails,
|
||||||
|
AppList
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
setSearch(query) {
|
setSearch(query) {
|
||||||
|
|
|
@ -21,8 +21,8 @@
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<AppContent app-name="settings" :navigation-class="{ 'icon-loading': loadingAddGroup }">
|
<Content app-name="settings" :navigation-class="{ 'icon-loading': loadingAddGroup }">
|
||||||
<template #navigation>
|
<AppNavigation>
|
||||||
<AppNavigationNew button-id="new-user-button" :text="t('settings','New user')" button-class="icon-add" @click="toggleNewUserMenu" />
|
<AppNavigationNew button-id="new-user-button" :text="t('settings','New user')" button-class="icon-add" @click="toggleNewUserMenu" />
|
||||||
<ul id="usergrouplist">
|
<ul id="usergrouplist">
|
||||||
<AppNavigationItem v-for="item in menu" :key="item.key" :item="item" />
|
<AppNavigationItem v-for="item in menu" :key="item.key" :item="item" />
|
||||||
|
@ -30,12 +30,12 @@
|
||||||
<AppNavigationSettings>
|
<AppNavigationSettings>
|
||||||
<div>
|
<div>
|
||||||
<p>{{t('settings', 'Default quota:')}}</p>
|
<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')"
|
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"
|
:allowEmpty="false" :taggable="true"
|
||||||
@tag="validateQuota" @input="setDefaultQuota">
|
@tag="validateQuota" @input="setDefaultQuota">
|
||||||
</multiselect>
|
</Multiselect>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
|
@ -55,22 +55,27 @@
|
||||||
<label for="showStoragePath">{{t('settings', 'Show storage path')}}</label>
|
<label for="showStoragePath">{{t('settings', 'Show storage path')}}</label>
|
||||||
</div>
|
</div>
|
||||||
</AppNavigationSettings>
|
</AppNavigationSettings>
|
||||||
</template>
|
</AppNavigation>
|
||||||
<user-list #content :users="users" :showConfig="showConfig" :selectedGroup="selectedGroup" :externalActions="externalActions" />
|
<AppContent>
|
||||||
</AppContent>
|
<UserList #content :users="users" :showConfig="showConfig" :selectedGroup="selectedGroup" :externalActions="externalActions" />
|
||||||
|
</AppContent>
|
||||||
|
</Content>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
import Vue from 'vue';
|
||||||
|
import VueLocalStorage from 'vue-localstorage'
|
||||||
import {
|
import {
|
||||||
AppContent,
|
AppContent,
|
||||||
|
AppNavigation,
|
||||||
AppNavigationItem,
|
AppNavigationItem,
|
||||||
AppNavigationNew,
|
AppNavigationNew,
|
||||||
AppNavigationSettings,
|
AppNavigationSettings,
|
||||||
|
AppSidebar,
|
||||||
|
Content,
|
||||||
|
Multiselect
|
||||||
} from 'nextcloud-vue';
|
} from 'nextcloud-vue';
|
||||||
import userList from '../components/userList';
|
import UserList from '../components/userList';
|
||||||
import Vue from 'vue';
|
|
||||||
import VueLocalStorage from 'vue-localstorage'
|
|
||||||
import Multiselect from 'vue-multiselect';
|
|
||||||
import api from '../store/api';
|
import api from '../store/api';
|
||||||
|
|
||||||
Vue.use(VueLocalStorage)
|
Vue.use(VueLocalStorage)
|
||||||
|
@ -80,10 +85,13 @@ export default {
|
||||||
props: ['selectedGroup'],
|
props: ['selectedGroup'],
|
||||||
components: {
|
components: {
|
||||||
AppContent,
|
AppContent,
|
||||||
|
AppNavigation,
|
||||||
AppNavigationItem,
|
AppNavigationItem,
|
||||||
AppNavigationNew,
|
AppNavigationNew,
|
||||||
AppNavigationSettings,
|
AppNavigationSettings,
|
||||||
userList,
|
AppSidebar,
|
||||||
|
Content,
|
||||||
|
UserList,
|
||||||
Multiselect,
|
Multiselect,
|
||||||
},
|
},
|
||||||
beforeMount() {
|
beforeMount() {
|
||||||
|
|
Loading…
Reference in New Issue