mirror of
https://github.com/netzbegruenung/groupfolders.git
synced 2024-05-04 10:23:41 +02:00
Add vue app for ACL management in files sidebar
Signed-off-by: Julius Härtl <jus@bitgrid.net>
This commit is contained in:
parent
09c8c01774
commit
093dbb6e87
|
@ -9,10 +9,11 @@ $eventDispatcher = \OC::$server->getEventDispatcher();
|
|||
$eventDispatcher->addListener(
|
||||
'OCA\Files::loadAdditionalScripts',
|
||||
function () {
|
||||
\OCP\Util::addScript('groupfolders', 'files');
|
||||
\OCP\Util::addScript('groupfolders', '../build/files');
|
||||
}
|
||||
);
|
||||
|
||||
$eventDispatcher->addListener('OCA\Files_Sharing::loadAdditionalScripts', function () {
|
||||
\OCP\Util::addScript('groupfolders', 'files');
|
||||
|
||||
});
|
||||
|
|
70
img/deny.svg
Normal file
70
img/deny.svg
Normal file
|
@ -0,0 +1,70 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
viewbox="0 0 16 16"
|
||||
width="16"
|
||||
height="16"
|
||||
id="svg3791"
|
||||
sodipodi:docname="deny.svg"
|
||||
inkscape:version="0.92.4 5da689c313, 2019-01-14">
|
||||
<metadata
|
||||
id="metadata3797">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs3795" />
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1017"
|
||||
id="namedview3793"
|
||||
showgrid="false"
|
||||
inkscape:zoom="18.296388"
|
||||
inkscape:cx="-13.154265"
|
||||
inkscape:cy="1.9505725"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="26"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="g3789" />
|
||||
<g
|
||||
stroke-width="2"
|
||||
stroke="#000"
|
||||
stroke-linecap="round"
|
||||
fill="none"
|
||||
id="g3789">
|
||||
<path
|
||||
d="M 11.678082,4.5280679 4.5924509,11.613699"
|
||||
id="path3787"
|
||||
inkscape:connector-curvature="0"
|
||||
style="stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<ellipse
|
||||
id="path3993"
|
||||
cx="7.9999995"
|
||||
cy="8"
|
||||
rx="5.9096346"
|
||||
ry="5.9096351"
|
||||
style="stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.9 KiB |
171
js/files.js
171
js/files.js
|
@ -1,171 +0,0 @@
|
|||
(function(OC, OCA) {
|
||||
|
||||
if (OCA.Theming) {
|
||||
// https://localcloud.icewind.me/apps/theming/img/groupfolders/folder-group.svg?v=34
|
||||
OC.MimeType._mimeTypeIcons['dir-group'] = OC.generateUrl('/apps/theming/img/groupfolders/folder-group.svg?v=' + OCA.Theming.cacheBuster);
|
||||
} else {
|
||||
OC.MimeType._mimeTypeIcons['dir-group'] = OC.imagePath('groupfolders', 'folder-group');
|
||||
}
|
||||
|
||||
var ACL_PROPERTIES = {
|
||||
PROPERTY_ACL_LIST: '{' + OC.Files.Client.NS_NEXTCLOUD + '}acl-list',
|
||||
PROPERTY_ACL_ENTRY: '{' + OC.Files.Client.NS_NEXTCLOUD + '}acl',
|
||||
PROPERTY_ACL_MAPPING_TYPE: '{' + OC.Files.Client.NS_NEXTCLOUD + '}acl-mapping-type',
|
||||
PROPERTY_ACL_MAPPING_ID: '{' + OC.Files.Client.NS_NEXTCLOUD + '}acl-mapping-id',
|
||||
PROPERTY_ACL_MASK: '{' + OC.Files.Client.NS_NEXTCLOUD + '}acl-mask',
|
||||
PROPERTY_ACL_PERMISSIONS: '{' + OC.Files.Client.NS_NEXTCLOUD + '}acl-permissions',
|
||||
};
|
||||
_.extend(OC.Files.Client, ACL_PROPERTIES);
|
||||
|
||||
// Allow nested properties in PROPPATCH
|
||||
// WIP branch at https://github.com/juliushaertl/davclient.js/tree/enhancement/nested-proppatch
|
||||
var patchClientForNestedPropPatch = function (client) {
|
||||
client._client.getPropertyBody = function(key, propValue) {
|
||||
var property = this.parseClarkNotation(key);
|
||||
var propName;
|
||||
|
||||
if (this.xmlNamespaces[property.namespace]) {
|
||||
propName = this.xmlNamespaces[property.namespace] + ':' + property.name;
|
||||
} else {
|
||||
propName = 'x:' + property.name + ' xmlns:x="' + property.namespace + '"';
|
||||
}
|
||||
|
||||
if (Array.isArray(propValue)) {
|
||||
var body = '';
|
||||
for(var ii in propValue) {
|
||||
if ( propValue[ii].hasOwnProperty('type') && propValue[ii].hasOwnProperty('data') ) {
|
||||
body += this.getPropertyBody(propValue[ii].type, propValue[ii].data);
|
||||
} else {
|
||||
body += this.getPropertyBody(ii, propValue[ii]);
|
||||
}
|
||||
}
|
||||
return ' <' + propName + '>' + body + '</' + propName + '>';
|
||||
} else if (typeof propValue === 'object') {
|
||||
var body = '';
|
||||
if ( propValue.hasOwnProperty('type') && propValue.hasOwnProperty('data') ) {
|
||||
return this.getPropertyBody(propValue.type, propValue.data)
|
||||
}
|
||||
for(var ii in propValue) {
|
||||
body += this.getPropertyBody(ii, propValue[ii]);
|
||||
}
|
||||
return ' <' + propName + '>' + body + '</' + propName + '>';
|
||||
} else {
|
||||
// FIXME: hard-coded for now until we allow properties to
|
||||
// specify whether to be escaped or not
|
||||
if (propName !== 'd:resourcetype') {
|
||||
propValue = dav._escapeXml('' + propValue);
|
||||
}
|
||||
|
||||
return ' <' + propName + '>' + propValue + '</' + propName + '>';
|
||||
}
|
||||
}
|
||||
client._client._renderPropSet = function(properties) {
|
||||
var body = ' <d:set>\n' +
|
||||
' <d:prop>\n';
|
||||
|
||||
for(var ii in properties) {
|
||||
if (!properties.hasOwnProperty(ii)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
body += this.getPropertyBody(ii, properties[ii])
|
||||
}
|
||||
body +=' </d:prop>\n';
|
||||
body +=' </d:set>\n';
|
||||
return body;
|
||||
}
|
||||
};
|
||||
|
||||
// dummy acl data for testing
|
||||
var getDummyAcl = function() {
|
||||
var acl2 = {};
|
||||
acl2[ACL_PROPERTIES.PROPERTY_ACL_MAPPING_TYPE] = 'group';
|
||||
acl2[ACL_PROPERTIES.PROPERTY_ACL_MAPPING_ID] = 'admin';
|
||||
acl2[ACL_PROPERTIES.PROPERTY_ACL_MASK] = 31;
|
||||
acl2[ACL_PROPERTIES.PROPERTY_ACL_PERMISSIONS] = 0;
|
||||
var acl1 = {};
|
||||
acl1[ACL_PROPERTIES.PROPERTY_ACL_MAPPING_TYPE] = 'user';
|
||||
acl1[ACL_PROPERTIES.PROPERTY_ACL_MAPPING_ID] = 'admin';
|
||||
acl1[ACL_PROPERTIES.PROPERTY_ACL_MASK] = 31;
|
||||
acl1[ACL_PROPERTIES.PROPERTY_ACL_PERMISSIONS] = 1;
|
||||
|
||||
var acls = [{type: ACL_PROPERTIES.PROPERTY_ACL_ENTRY, data: acl1}, {type: ACL_PROPERTIES.PROPERTY_ACL_ENTRY, data: acl2}];
|
||||
var props = {};
|
||||
props[OC.Files.Client.PROPERTY_ACL_LIST] = acls;
|
||||
return props;
|
||||
}
|
||||
|
||||
OCA.Groupfolders = {};
|
||||
OCA.Groupfolders.ShareTabPlugin = {
|
||||
attach: function (shareTabView) {
|
||||
shareTabView.on('rendered', function() {
|
||||
if (this.model && this.model.get('mountType') === 'group') {
|
||||
shareTabView.$el.find('.dialogContainer').append(
|
||||
$('<div id="groupfolder-sharing">' +
|
||||
'<div class="avatar icon-group-white" style="display: inline-block;background-color: var(--color-primary);padding: 16px;"></div>' +
|
||||
'Group folders</div>'
|
||||
)
|
||||
);
|
||||
// TODO: bind js app here
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
OCA.Groupfolders.FileListPlugin = {
|
||||
attach: function (fileList) {
|
||||
fileList.filesClient.addFileInfoParser(function(response) {
|
||||
var data = {};
|
||||
var props = response.propStat[0].properties;
|
||||
var acls = props[ACL_PROPERTIES.PROPERTY_ACL_LIST];
|
||||
if (!_.isUndefined(acls)) {
|
||||
data.acl = [];
|
||||
for (var i = 0; i < acls.length; i++) {
|
||||
var acl = {};
|
||||
for (var ii in acls[i].children) {
|
||||
var prop = acls[i].children[ii];
|
||||
if (!prop.nodeName) {
|
||||
continue;
|
||||
}
|
||||
|
||||
var propertyName = prop.nodeName.split(':')[1] || '';
|
||||
switch (propertyName) {
|
||||
case 'acl-mapping-id':
|
||||
acl.mappingId = prop.textContent || prop.text;
|
||||
break;
|
||||
case 'acl-mapping-type':
|
||||
acl.mappingType = prop.textContent || prop.text;
|
||||
break;
|
||||
case 'acl-mask':
|
||||
acl.mask = parseInt(prop.textContent || prop.text, 10);
|
||||
break;
|
||||
case 'acl-permissions':
|
||||
acl.permissions = parseInt(prop.textContent || prop.text, 10);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
data.acl.push(acl);
|
||||
}
|
||||
}
|
||||
return data;
|
||||
});
|
||||
|
||||
// PROPPATCH/PROPGET testing
|
||||
var client = fileList.filesClient;
|
||||
patchClientForNestedPropPatch(client);
|
||||
// example prop patch
|
||||
//client._client.propPatch(client._client.baseUrl + '/Test', getDummyAcl()).then((response) => console.log(response))
|
||||
// example fetching acl
|
||||
//client.getFileInfo('/Test', {
|
||||
// properties: [OC.Files.Client.PROPERTY_ACL_LIST]
|
||||
//} ).then((status, fileInfo) => { console.log(fileInfo); });
|
||||
|
||||
|
||||
}
|
||||
};
|
||||
OC.Plugins.register('OCA.Files.FileList', OCA.Groupfolders.FileListPlugin);
|
||||
// Requires https://github.com/nextcloud/server/compare/enhancement/noid/sharing-tab-plugins?expand=1
|
||||
OC.Plugins.register('OCA.Sharing.ShareTabView', OCA.Groupfolders.ShareTabPlugin);
|
||||
|
||||
})(OC, OCA);
|
369
package-lock.json
generated
369
package-lock.json
generated
|
@ -322,6 +322,109 @@
|
|||
"integrity": "sha512-rzi6fw7hhxPcCoNVsgysHFlKnhYYvVj7AJwdAO0HQNP5vg9sY0DoRRC1pfuCQm94cOa1sab82HGUtdFlWHIhBg==",
|
||||
"dev": true
|
||||
},
|
||||
"@vue/component-compiler-utils": {
|
||||
"version": "2.5.2",
|
||||
"resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-2.5.2.tgz",
|
||||
"integrity": "sha512-3exq9O89GXo9E+CGKzgURCbasG15FtFMs8QRrCUVWGaKue4Egpw41MHb3Avtikv1VykKfBq3FvAnf9Nx3sdVJg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"consolidate": "^0.15.1",
|
||||
"hash-sum": "^1.0.2",
|
||||
"lru-cache": "^4.1.2",
|
||||
"merge-source-map": "^1.1.0",
|
||||
"postcss": "^7.0.14",
|
||||
"postcss-selector-parser": "^5.0.0",
|
||||
"prettier": "1.16.3",
|
||||
"source-map": "~0.6.1",
|
||||
"vue-template-es2015-compiler": "^1.8.2"
|
||||
},
|
||||
"dependencies": {
|
||||
"ansi-styles": {
|
||||
"version": "3.2.1",
|
||||
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
|
||||
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"color-convert": "^1.9.0"
|
||||
}
|
||||
},
|
||||
"chalk": {
|
||||
"version": "2.4.2",
|
||||
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
|
||||
"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ansi-styles": "^3.2.1",
|
||||
"escape-string-regexp": "^1.0.5",
|
||||
"supports-color": "^5.3.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"supports-color": {
|
||||
"version": "5.5.0",
|
||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
|
||||
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"has-flag": "^3.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"cssesc": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz",
|
||||
"integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==",
|
||||
"dev": true
|
||||
},
|
||||
"lru-cache": {
|
||||
"version": "4.1.5",
|
||||
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
|
||||
"integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"pseudomap": "^1.0.2",
|
||||
"yallist": "^2.1.2"
|
||||
}
|
||||
},
|
||||
"postcss": {
|
||||
"version": "7.0.14",
|
||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz",
|
||||
"integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"chalk": "^2.4.2",
|
||||
"source-map": "^0.6.1",
|
||||
"supports-color": "^6.1.0"
|
||||
}
|
||||
},
|
||||
"postcss-selector-parser": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz",
|
||||
"integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"cssesc": "^2.0.0",
|
||||
"indexes-of": "^1.0.1",
|
||||
"uniq": "^1.0.1"
|
||||
}
|
||||
},
|
||||
"supports-color": {
|
||||
"version": "6.1.0",
|
||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
|
||||
"integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"has-flag": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"yallist": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
|
||||
"integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"@webassemblyjs/ast": {
|
||||
"version": "1.8.3",
|
||||
"resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.3.tgz",
|
||||
|
@ -702,7 +805,7 @@
|
|||
},
|
||||
"util": {
|
||||
"version": "0.10.3",
|
||||
"resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
|
||||
"resolved": "http://registry.npmjs.org/util/-/util-0.10.3.tgz",
|
||||
"integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
|
@ -982,6 +1085,15 @@
|
|||
"integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==",
|
||||
"optional": true
|
||||
},
|
||||
"axios": {
|
||||
"version": "0.18.0",
|
||||
"resolved": "https://registry.npmjs.org/axios/-/axios-0.18.0.tgz",
|
||||
"integrity": "sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI=",
|
||||
"requires": {
|
||||
"follow-redirects": "^1.3.0",
|
||||
"is-buffer": "^1.1.5"
|
||||
}
|
||||
},
|
||||
"babel-code-frame": {
|
||||
"version": "6.26.0",
|
||||
"resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
|
||||
|
@ -2472,7 +2584,7 @@
|
|||
},
|
||||
"browserify-aes": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
|
||||
"resolved": "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
|
||||
"integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
|
@ -2509,7 +2621,7 @@
|
|||
},
|
||||
"browserify-rsa": {
|
||||
"version": "4.0.1",
|
||||
"resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
|
||||
"resolved": "http://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
|
||||
"integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
|
@ -2553,7 +2665,7 @@
|
|||
},
|
||||
"buffer": {
|
||||
"version": "4.9.1",
|
||||
"resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
|
||||
"resolved": "http://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
|
||||
"integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
|
@ -2682,6 +2794,11 @@
|
|||
"supports-color": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"charenc": {
|
||||
"version": "0.0.2",
|
||||
"resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
|
||||
"integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc="
|
||||
},
|
||||
"chokidar": {
|
||||
"version": "2.0.4",
|
||||
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz",
|
||||
|
@ -2955,6 +3072,15 @@
|
|||
"date-now": "^0.1.4"
|
||||
}
|
||||
},
|
||||
"consolidate": {
|
||||
"version": "0.15.1",
|
||||
"resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz",
|
||||
"integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"bluebird": "^3.1.1"
|
||||
}
|
||||
},
|
||||
"constants-browserify": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
|
||||
|
@ -3040,7 +3166,7 @@
|
|||
},
|
||||
"create-hash": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
|
||||
"resolved": "http://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
|
||||
"integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
|
@ -3053,7 +3179,7 @@
|
|||
},
|
||||
"create-hmac": {
|
||||
"version": "1.1.7",
|
||||
"resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
|
||||
"resolved": "http://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
|
||||
"integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
|
@ -3078,6 +3204,11 @@
|
|||
"which": "^1.2.9"
|
||||
}
|
||||
},
|
||||
"crypt": {
|
||||
"version": "0.0.2",
|
||||
"resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz",
|
||||
"integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs="
|
||||
},
|
||||
"crypto-browserify": {
|
||||
"version": "3.12.0",
|
||||
"resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
|
||||
|
@ -3274,6 +3405,12 @@
|
|||
"integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=",
|
||||
"dev": true
|
||||
},
|
||||
"de-indent": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz",
|
||||
"integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=",
|
||||
"dev": true
|
||||
},
|
||||
"debug": {
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
|
||||
|
@ -3461,7 +3598,7 @@
|
|||
},
|
||||
"diffie-hellman": {
|
||||
"version": "5.0.3",
|
||||
"resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
|
||||
"resolved": "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
|
||||
"integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
|
@ -3998,6 +4135,11 @@
|
|||
"websocket-driver": ">=0.5.1"
|
||||
}
|
||||
},
|
||||
"fecha": {
|
||||
"version": "2.3.3",
|
||||
"resolved": "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz",
|
||||
"integrity": "sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg=="
|
||||
},
|
||||
"figgy-pudding": {
|
||||
"version": "3.5.1",
|
||||
"resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz",
|
||||
|
@ -4113,28 +4255,25 @@
|
|||
}
|
||||
},
|
||||
"follow-redirects": {
|
||||
"version": "1.7.0",
|
||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.7.0.tgz",
|
||||
"integrity": "sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ==",
|
||||
"dev": true,
|
||||
"version": "1.6.1",
|
||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.6.1.tgz",
|
||||
"integrity": "sha512-t2JCjbzxQpWvbhts3l6SH1DKzSrx8a+SsaVf4h6bG4kOXUuPYS/kg2Lr4gQSb7eemaHqJkOThF1BGyjlUkO1GQ==",
|
||||
"requires": {
|
||||
"debug": "^3.2.6"
|
||||
"debug": "=3.1.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"debug": {
|
||||
"version": "3.2.6",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
|
||||
"integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
|
||||
"dev": true,
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
|
||||
"integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
|
||||
"requires": {
|
||||
"ms": "^2.1.1"
|
||||
"ms": "2.0.0"
|
||||
}
|
||||
},
|
||||
"ms": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
|
||||
"integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
|
||||
"dev": true
|
||||
"integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -4987,6 +5126,12 @@
|
|||
"safe-buffer": "^5.0.1"
|
||||
}
|
||||
},
|
||||
"hash-sum": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz",
|
||||
"integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=",
|
||||
"dev": true
|
||||
},
|
||||
"hash.js": {
|
||||
"version": "1.1.7",
|
||||
"resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
|
||||
|
@ -4997,6 +5142,12 @@
|
|||
"minimalistic-assert": "^1.0.1"
|
||||
}
|
||||
},
|
||||
"he": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
|
||||
"integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
|
||||
"dev": true
|
||||
},
|
||||
"hmac-drbg": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
|
||||
|
@ -5416,8 +5567,7 @@
|
|||
"is-buffer": {
|
||||
"version": "1.1.6",
|
||||
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
|
||||
"integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
|
||||
"dev": true
|
||||
"integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
|
||||
},
|
||||
"is-callable": {
|
||||
"version": "1.1.4",
|
||||
|
@ -5829,8 +5979,7 @@
|
|||
"lodash.merge": {
|
||||
"version": "4.6.1",
|
||||
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.1.tgz",
|
||||
"integrity": "sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ==",
|
||||
"dev": true
|
||||
"integrity": "sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ=="
|
||||
},
|
||||
"lodash.template": {
|
||||
"version": "4.4.0",
|
||||
|
@ -5925,6 +6074,16 @@
|
|||
"integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw=",
|
||||
"dev": true
|
||||
},
|
||||
"md5": {
|
||||
"version": "2.2.1",
|
||||
"resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz",
|
||||
"integrity": "sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=",
|
||||
"requires": {
|
||||
"charenc": "~0.0.1",
|
||||
"crypt": "~0.0.1",
|
||||
"is-buffer": "~1.1.1"
|
||||
}
|
||||
},
|
||||
"md5.js": {
|
||||
"version": "1.3.5",
|
||||
"resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
|
||||
|
@ -5969,6 +6128,15 @@
|
|||
"integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=",
|
||||
"dev": true
|
||||
},
|
||||
"merge-source-map": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz",
|
||||
"integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"source-map": "^0.6.1"
|
||||
}
|
||||
},
|
||||
"methods": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
|
||||
|
@ -6198,6 +6366,43 @@
|
|||
"integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==",
|
||||
"dev": true
|
||||
},
|
||||
"nextcloud-axios": {
|
||||
"version": "0.1.3",
|
||||
"resolved": "https://registry.npmjs.org/nextcloud-axios/-/nextcloud-axios-0.1.3.tgz",
|
||||
"integrity": "sha512-M2eLX0qrP8xy1VEGDhPXGwvV4W4gMnU1ysjnURVen8ehR1qRLdb/JfhJHab6XRsme7vWWMgSTEj+o3ibQ94N6g==",
|
||||
"requires": {
|
||||
"axios": "^0.18.0"
|
||||
}
|
||||
},
|
||||
"nextcloud-server": {
|
||||
"version": "0.15.9",
|
||||
"resolved": "https://registry.npmjs.org/nextcloud-server/-/nextcloud-server-0.15.9.tgz",
|
||||
"integrity": "sha512-QFgVMMNdUrGtVyRyDb7d6qM9zk7OdwzllBWPdNmwnp9xc9rhZbdXSeP+K0g6vsfT43HBCW1rmSOrDeU39LKOlQ==",
|
||||
"requires": {
|
||||
"@types/jquery": "^2.0.50"
|
||||
},
|
||||
"dependencies": {
|
||||
"@types/jquery": {
|
||||
"version": "2.0.53",
|
||||
"resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-2.0.53.tgz",
|
||||
"integrity": "sha512-MZKPWUhp5TKkoJ/58NSq6io+CSUCOHm2b3Z6U4+r9v70kktB0JM+eRjdp6YmDHtw0kK2XB7L2K7/FMIoziHjUA=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"nextcloud-vue": {
|
||||
"version": "0.6.2",
|
||||
"resolved": "https://registry.npmjs.org/nextcloud-vue/-/nextcloud-vue-0.6.2.tgz",
|
||||
"integrity": "sha512-2RudZGzgoGoDp+ZIVPEBBONJOCeV+SvvyNmfxYMqBHHtFnQIeXJ2o3Bp6Ou45zo0Jt07Q9HzJkxc9fEnbweG3Q==",
|
||||
"requires": {
|
||||
"md5": "^2.2.1",
|
||||
"nextcloud-axios": "^0.1.2",
|
||||
"v-tooltip": "^2.0.0-rc.33",
|
||||
"vue": "^2.5.20",
|
||||
"vue-click-outside": "^1.0.7",
|
||||
"vue-multiselect": "^2.1.0",
|
||||
"vue2-datepicker": "^2.6.1"
|
||||
}
|
||||
},
|
||||
"nice-try": {
|
||||
"version": "1.0.5",
|
||||
"resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
|
||||
|
@ -6570,7 +6775,7 @@
|
|||
},
|
||||
"path-browserify": {
|
||||
"version": "0.0.0",
|
||||
"resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz",
|
||||
"resolved": "http://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz",
|
||||
"integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=",
|
||||
"dev": true
|
||||
},
|
||||
|
@ -6686,10 +6891,9 @@
|
|||
}
|
||||
},
|
||||
"popper.js": {
|
||||
"version": "1.14.7",
|
||||
"resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.14.7.tgz",
|
||||
"integrity": "sha512-4q1hNvoUre/8srWsH7hnoSJ5xVmIL4qgz+s4qf2TnJIMyZFUFMGH+9vE7mXynAlHSZ/NdTmmow86muD0myUkVQ==",
|
||||
"dev": true
|
||||
"version": "1.14.6",
|
||||
"resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.14.6.tgz",
|
||||
"integrity": "sha512-AGwHGQBKumlk/MDfrSOf0JHhJCImdDMcGNoqKmKkU+68GFazv3CQ6q9r7Ja1sKDZmYWTckY/uLyEznheTDycnA=="
|
||||
},
|
||||
"portfinder": {
|
||||
"version": "1.0.20",
|
||||
|
@ -7621,6 +7825,12 @@
|
|||
"uniq": "^1.0.1"
|
||||
}
|
||||
},
|
||||
"prettier": {
|
||||
"version": "1.16.3",
|
||||
"resolved": "https://registry.npmjs.org/prettier/-/prettier-1.16.3.tgz",
|
||||
"integrity": "sha512-kn/GU6SMRYPxUakNXhpP0EedT/KmaPzr0H5lIsDogrykbaxOpOfAFfk5XA7DZrJyMAv1wlMV3CPcZruGXVVUZw==",
|
||||
"dev": true
|
||||
},
|
||||
"private": {
|
||||
"version": "0.1.8",
|
||||
"resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
|
||||
|
@ -7679,6 +7889,12 @@
|
|||
"resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz",
|
||||
"integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo="
|
||||
},
|
||||
"pseudomap": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
|
||||
"integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
|
||||
"dev": true
|
||||
},
|
||||
"psl": {
|
||||
"version": "1.1.29",
|
||||
"resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz",
|
||||
|
@ -7946,7 +8162,7 @@
|
|||
},
|
||||
"regexpu-core": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz",
|
||||
"resolved": "http://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz",
|
||||
"integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
|
@ -7957,13 +8173,13 @@
|
|||
},
|
||||
"regjsgen": {
|
||||
"version": "0.2.0",
|
||||
"resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz",
|
||||
"resolved": "http://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz",
|
||||
"integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=",
|
||||
"dev": true
|
||||
},
|
||||
"regjsparser": {
|
||||
"version": "0.1.5",
|
||||
"resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz",
|
||||
"resolved": "http://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz",
|
||||
"integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
|
@ -7972,7 +8188,7 @@
|
|||
"dependencies": {
|
||||
"jsesc": {
|
||||
"version": "0.5.0",
|
||||
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
|
||||
"resolved": "http://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
|
||||
"integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
|
||||
"dev": true
|
||||
}
|
||||
|
@ -8354,7 +8570,7 @@
|
|||
},
|
||||
"sha.js": {
|
||||
"version": "2.4.11",
|
||||
"resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
|
||||
"resolved": "http://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
|
||||
"integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
|
@ -9029,7 +9245,7 @@
|
|||
},
|
||||
"tty-browserify": {
|
||||
"version": "0.0.0",
|
||||
"resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
|
||||
"resolved": "http://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
|
||||
"integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=",
|
||||
"dev": true
|
||||
},
|
||||
|
@ -9293,6 +9509,16 @@
|
|||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
|
||||
"integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA=="
|
||||
},
|
||||
"v-tooltip": {
|
||||
"version": "2.0.0-rc.33",
|
||||
"resolved": "https://registry.npmjs.org/v-tooltip/-/v-tooltip-2.0.0-rc.33.tgz",
|
||||
"integrity": "sha1-ePfY6cNCZWIr5lup3HjGfx3AK3M=",
|
||||
"requires": {
|
||||
"lodash.merge": "^4.6.0",
|
||||
"popper.js": "^1.12.9",
|
||||
"vue-resize": "^0.4.3"
|
||||
}
|
||||
},
|
||||
"v8-compile-cache": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.2.tgz",
|
||||
|
@ -9324,13 +9550,86 @@
|
|||
},
|
||||
"vm-browserify": {
|
||||
"version": "0.0.4",
|
||||
"resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz",
|
||||
"resolved": "http://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz",
|
||||
"integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"indexof": "0.0.1"
|
||||
}
|
||||
},
|
||||
"vue": {
|
||||
"version": "2.6.6",
|
||||
"resolved": "https://registry.npmjs.org/vue/-/vue-2.6.6.tgz",
|
||||
"integrity": "sha512-Y2DdOZD8sxApS+iUlwv1v8U1qN41kq6Kw45lM6nVZKhygeWA49q7VCCXkjXqeDBXgurrKWkYQ9cJeEJwAq0b9Q=="
|
||||
},
|
||||
"vue-click-outside": {
|
||||
"version": "1.0.7",
|
||||
"resolved": "https://registry.npmjs.org/vue-click-outside/-/vue-click-outside-1.0.7.tgz",
|
||||
"integrity": "sha1-zdKxYF48SUR4TheU6uShKg9wC9Y="
|
||||
},
|
||||
"vue-hot-reload-api": {
|
||||
"version": "2.3.2",
|
||||
"resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.2.tgz",
|
||||
"integrity": "sha512-NpznMQoe/DzMG7nJjPkJKT7FdEn9xXfnntG7POfTmqnSaza97ylaBf1luZDh4IgV+vgUoR//id5pf8Ru+Ym+0g==",
|
||||
"dev": true
|
||||
},
|
||||
"vue-loader": {
|
||||
"version": "15.6.2",
|
||||
"resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.6.2.tgz",
|
||||
"integrity": "sha512-T6fONodj861M3PqZ1jlbUFjeezbUnPRY2bd+3eZuDvYADgkN3VFU2H5feqySNg9XBt8rcbyBGmFWTZtrOX+v5w==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@vue/component-compiler-utils": "^2.5.1",
|
||||
"hash-sum": "^1.0.2",
|
||||
"loader-utils": "^1.1.0",
|
||||
"vue-hot-reload-api": "^2.3.0",
|
||||
"vue-style-loader": "^4.1.0"
|
||||
}
|
||||
},
|
||||
"vue-multiselect": {
|
||||
"version": "2.1.3",
|
||||
"resolved": "https://registry.npmjs.org/vue-multiselect/-/vue-multiselect-2.1.3.tgz",
|
||||
"integrity": "sha512-ANLvoLEZv5uzissmh2WSHTn8DGhqsKi6zVtctpf1wnGK6vmZBktQZzeuHGxH7KpIb+4A6BlXmq0RR08jtQ67tg=="
|
||||
},
|
||||
"vue-resize": {
|
||||
"version": "0.4.5",
|
||||
"resolved": "https://registry.npmjs.org/vue-resize/-/vue-resize-0.4.5.tgz",
|
||||
"integrity": "sha512-bhP7MlgJQ8TIkZJXAfDf78uJO+mEI3CaLABLjv0WNzr4CcGRGPIAItyWYnP6LsPA4Oq0WE+suidNs6dgpO4RHg=="
|
||||
},
|
||||
"vue-style-loader": {
|
||||
"version": "4.1.2",
|
||||
"resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.2.tgz",
|
||||
"integrity": "sha512-0ip8ge6Gzz/Bk0iHovU9XAUQaFt/G2B61bnWa2tCcqqdgfHs1lF9xXorFbE55Gmy92okFT+8bfmySuUOu13vxQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"hash-sum": "^1.0.2",
|
||||
"loader-utils": "^1.0.2"
|
||||
}
|
||||
},
|
||||
"vue-template-compiler": {
|
||||
"version": "2.6.6",
|
||||
"resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.6.tgz",
|
||||
"integrity": "sha512-OakxDGyrmMQViCjkakQFbDZlG0NibiOzpLauOfyCUVRQc9yPmTqpiz9nF0VeA+dFkXegetw0E5x65BFhhLXO0A==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"de-indent": "^1.0.2",
|
||||
"he": "^1.1.0"
|
||||
}
|
||||
},
|
||||
"vue-template-es2015-compiler": {
|
||||
"version": "1.8.2",
|
||||
"resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.8.2.tgz",
|
||||
"integrity": "sha512-cliV19VHLJqFUYbz/XeWXe5CO6guzwd0yrrqqp0bmjlMP3ZZULY7fu8RTC4+3lmHwo6ESVDHFDsvjB15hcR5IA==",
|
||||
"dev": true
|
||||
},
|
||||
"vue2-datepicker": {
|
||||
"version": "2.10.0",
|
||||
"resolved": "https://registry.npmjs.org/vue2-datepicker/-/vue2-datepicker-2.10.0.tgz",
|
||||
"integrity": "sha512-WGL7ou0TdBiJQuHVp29BtBw3rSkLrIYwXWU/ELmaLdnAerI0EdGVAu7DvZV2iIxY4lsHyjqocApxdvXTmwLrAw==",
|
||||
"requires": {
|
||||
"fecha": "^2.3.3"
|
||||
}
|
||||
},
|
||||
"watchpack": {
|
||||
"version": "1.6.0",
|
||||
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz",
|
||||
|
|
11
package.json
11
package.json
|
@ -1,4 +1,8 @@
|
|||
{
|
||||
"scripts": {
|
||||
"dev": "webpack --colors --display-error-details --config webpack.dev.config.js --watch",
|
||||
"build": "webpack --colors --display-error-details --config webpack.prod.config.js"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.3.4",
|
||||
"@types/bootstrap": "^4.2.2",
|
||||
|
@ -30,15 +34,20 @@
|
|||
"url-loader": "^1.1.2",
|
||||
"webpack": "^4.29.5",
|
||||
"webpack-cli": "^3.2.3",
|
||||
"webpack-dev-server": "^3.2.1"
|
||||
"webpack-dev-server": "^3.2.1",
|
||||
"vue-loader": "^15.6.2",
|
||||
"vue-template-compiler": "^2.6.6"
|
||||
},
|
||||
"dependencies": {
|
||||
"less": "^3.9.0",
|
||||
"less-loader": "^4.1.0",
|
||||
"nextcloud-server": "^0.15.9",
|
||||
"nextcloud-vue": "^0.6.2",
|
||||
"oc-react-components": "^0.2.0",
|
||||
"react": "^16.8.3",
|
||||
"react-dom": "^16.8.3",
|
||||
"react-flip-move": "^3.0.3",
|
||||
"vue": "^2.6.6",
|
||||
"whatwg-fetch": "^3.0.0"
|
||||
}
|
||||
}
|
||||
|
|
16
src/SharingSidebarApp.js
Normal file
16
src/SharingSidebarApp.js
Normal file
|
@ -0,0 +1,16 @@
|
|||
import Vue from 'vue';
|
||||
import SharingSidebarView from './components/SharingSidebarView.vue';
|
||||
import VTooltip from 'v-tooltip';
|
||||
import ClickOutside from 'vue-click-outside';
|
||||
|
||||
Vue.prototype.t = t
|
||||
Vue.prototype.n = n
|
||||
Vue.prototype.OC = OC
|
||||
Vue.prototype.OCA = OCA
|
||||
|
||||
Vue.use(VTooltip);
|
||||
Vue.directive('ClickOutside', ClickOutside)
|
||||
|
||||
const View = Vue.extend(SharingSidebarView);
|
||||
|
||||
export default View;
|
89
src/components/AclStateButton.vue
Normal file
89
src/components/AclStateButton.vue
Normal file
|
@ -0,0 +1,89 @@
|
|||
<template>
|
||||
<div style="position: relative;" v-click-outside="popoverClose">
|
||||
<button @click="open = true" v-if="state === STATES.INHERIT_DENY" class="icon-deny inherited" v-tooltip="t('groupfolders', 'Denied (Inherited permission)')"></button>
|
||||
<button @click="open = true" v-else-if="state === STATES.INHERIT_ALLOW" class="icon-checkmark inherited" v-tooltip="t('groupfolders', 'Allowed (Inherited permission)')"></button>
|
||||
<button @click="open = true" v-else-if="state === STATES.SELF_DENY" class="icon-deny" v-tooltip="t('groupfolders', 'Denied')"></button>
|
||||
<button @click="open = true" v-else-if="state === STATES.SELF_ALLOW" class="icon-checkmark" v-tooltip="t('groupfolders', 'Allowed')"></button>
|
||||
<div class="popovermenu" :class="{open: open}"><PopoverMenu :menu="menu"></PopoverMenu></div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { PopoverMenu } from 'nextcloud-vue'
|
||||
|
||||
const STATES = {
|
||||
INHERIT_DENY: 0,
|
||||
INHERIT_ALLOW: 1,
|
||||
SELF_DENY: 2,
|
||||
SELF_ALLOW: 3
|
||||
}
|
||||
|
||||
export default {
|
||||
name: 'AclStateButton',
|
||||
components: {PopoverMenu},
|
||||
props: {
|
||||
state: {
|
||||
type: Number,
|
||||
default: STATES.INHERIT_DENY
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
popoverClose() {
|
||||
this.open = false
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
STATES: STATES,
|
||||
open: false,
|
||||
menu: [
|
||||
{
|
||||
icon: 'icon-history',
|
||||
text: 'Inherit permission',
|
||||
active: this.state === STATES.INHERIT_ALLOW || this.state === STATES.INHERIT_DENY,
|
||||
action: () => {
|
||||
this.popoverClose()
|
||||
}
|
||||
},
|
||||
{
|
||||
icon: 'icon-close',
|
||||
text: 'Deny',
|
||||
active: this.state === STATES.SELF_DENY,
|
||||
action: () => {
|
||||
this.popoverClose()
|
||||
}
|
||||
},
|
||||
{
|
||||
icon: 'icon-history',
|
||||
text: 'Allow',
|
||||
active: this.state === STATES.SELF_ALLOW,
|
||||
action: () => {
|
||||
this.popoverClose()
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.popovermenu {
|
||||
top: 38px;
|
||||
right: -5px;
|
||||
}
|
||||
button {
|
||||
height: 24px;
|
||||
border-color: transparent;
|
||||
}
|
||||
button:hover {
|
||||
height: 24px;
|
||||
border-color: var(--color-primary, #0082c9);
|
||||
}
|
||||
.icon-deny {
|
||||
background-image: url('../../img/deny.svg');
|
||||
}
|
||||
.inherited {
|
||||
opacity: 0.5;
|
||||
}
|
||||
</style>
|
136
src/components/SharingSidebarView.vue
Normal file
136
src/components/SharingSidebarView.vue
Normal file
|
@ -0,0 +1,136 @@
|
|||
<template>
|
||||
<div>
|
||||
<div class="groupfolder-entry">
|
||||
<div class="avatar icon-group-white"></div>
|
||||
<span class="username">{{ t('groupfolders', 'Groupfolder') }}</span>
|
||||
</div>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th></th>
|
||||
<th>{{ t('groupfolders', 'Read') }}</th>
|
||||
<th>{{ t('groupfolders', 'Write') }}</th>
|
||||
<th>{{ t('groupfolders', 'Share') }}</th>
|
||||
<th>{{ t('groupfolders', 'Delete') }}</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><avatar user="admin" :size="24"></avatar></td>
|
||||
<td class="username">Username</td>
|
||||
<td><AclStateButton :state="0" /></td>
|
||||
<td><AclStateButton :state="1" /></td>
|
||||
<td><AclStateButton :state="2" /></td>
|
||||
<td><AclStateButton :state="3" /></td>
|
||||
<td><a class="icon-close" v-tooltip="t('groupfolders', 'Remove access rule')"></a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><avatar user="group" :isNoUser="true" :size="24"></avatar></td>
|
||||
<td>Group</td>
|
||||
<td><AclStateButton :state="0" /></td>
|
||||
<td><AclStateButton :state="1" /></td>
|
||||
<td><AclStateButton :state="2" /></td>
|
||||
<td><AclStateButton :state="3" /></td>
|
||||
<td><a class="icon-close" v-tooltip="t('groupfolders', 'Remove access rule')"></a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<button v-if="!showAclCreate" @click="toggleAclCreate"><span class="icon-add"></span> {{ t('groupfolders', 'Add advanced permission rule') }}</button>
|
||||
<multiselect v-if="showAclCreate" ref="multiselect" v-model="value" :options="options"></multiselect>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { Avatar, Multiselect } from 'nextcloud-vue';
|
||||
import AclStateButton from './AclStateButton'
|
||||
export default {
|
||||
name: 'SharingSidebarView',
|
||||
props: ['fileModel'],
|
||||
components: {
|
||||
Avatar, Multiselect, AclStateButton
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
showAclCreate: false,
|
||||
options: ['list', 'of', 'options'],
|
||||
value: null
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
canShare() {
|
||||
return OC.PERMISSION_SHARE & this.fileModel.permissions !== 0
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
toggleAclCreate() {
|
||||
this.showAclCreate = !this.showAclCreate;
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.groupfolder-entry {
|
||||
height: 44px;
|
||||
white-space: normal;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
position: relative;
|
||||
}
|
||||
.avatar.icon-group-white {
|
||||
display: inline-block;
|
||||
background-color: var(--color-primary, #0082c9);
|
||||
padding: 16px;
|
||||
}
|
||||
.groupfolder-entry .username {
|
||||
padding: 0 8px;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
table {
|
||||
width: 100%;
|
||||
margin-top: -44px;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
thead th {
|
||||
text-align: center;
|
||||
height: 44px;
|
||||
}
|
||||
tbody tr td:first-child {
|
||||
width: 24px;
|
||||
padding: 0;
|
||||
padding-left: 4px;
|
||||
}
|
||||
table .avatardiv {
|
||||
margin-top: 6px;
|
||||
}
|
||||
table .username {
|
||||
width: 50%;
|
||||
}
|
||||
table button {
|
||||
height: 26px;
|
||||
width: 24px !important;
|
||||
display: block;
|
||||
border-radius: 50%;
|
||||
margin: auto;
|
||||
}
|
||||
a.icon-close {
|
||||
display: inline-block;
|
||||
height: 24px;
|
||||
vertical-align: middle;
|
||||
background-size: 12px;
|
||||
opacity: .7;
|
||||
float: right;
|
||||
}
|
||||
a.icon-close:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.multiselect {
|
||||
margin-left: 44px;
|
||||
width: calc(100% - 44px);
|
||||
}
|
||||
</style>
|
34
src/files.js
Normal file
34
src/files.js
Normal file
|
@ -0,0 +1,34 @@
|
|||
(function(OC, OCA) {
|
||||
|
||||
if (OCA.Theming) {
|
||||
OC.MimeType._mimeTypeIcons['dir-group'] = OC.generateUrl('/apps/theming/img/groupfolders/folder-group.svg?v=' + OCA.Theming.cacheBuster);
|
||||
} else {
|
||||
OC.MimeType._mimeTypeIcons['dir-group'] = OC.imagePath('groupfolders', 'folder-group');
|
||||
}
|
||||
|
||||
__webpack_nonce__ = btoa(OC.requestToken)
|
||||
__webpack_public_path__ = OC.linkTo('groupfolders', 'build/')
|
||||
|
||||
var ShareTabPlugin = {
|
||||
attach: function (shareTabView) {
|
||||
shareTabView.on('rendered', function() {
|
||||
if (this.model && this.model.get('mountType') === 'group') {
|
||||
|
||||
const el = document.createElement('div');
|
||||
const container = shareTabView.$el.find('.dialogContainer')[0];
|
||||
container.parentNode.insertBefore(el, container.nextSibling);
|
||||
el.id = 'groupfolder-sharing';
|
||||
import(/* webpackChunkName: "sharing" */'./SharingSidebarApp').then((Module) => {
|
||||
const View = Module.default;
|
||||
const vm = new View({
|
||||
propsData: {
|
||||
fileModel: this.model
|
||||
}
|
||||
}).$mount(el);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
OC.Plugins.register('OCA.Sharing.ShareTabView', ShareTabPlugin);
|
||||
})(OC, OCA);
|
10
src/model/Properties.js
Normal file
10
src/model/Properties.js
Normal file
|
@ -0,0 +1,10 @@
|
|||
const ACL_PROPERTIES = {
|
||||
PROPERTY_ACL_LIST: '{' + OC.Files.Client.NS_NEXTCLOUD + '}acl-list',
|
||||
PROPERTY_ACL_ENTRY: '{' + OC.Files.Client.NS_NEXTCLOUD + '}acl',
|
||||
PROPERTY_ACL_MAPPING_TYPE: '{' + OC.Files.Client.NS_NEXTCLOUD + '}acl-mapping-type',
|
||||
PROPERTY_ACL_MAPPING_ID: '{' + OC.Files.Client.NS_NEXTCLOUD + '}acl-mapping-id',
|
||||
PROPERTY_ACL_MASK: '{' + OC.Files.Client.NS_NEXTCLOUD + '}acl-mask',
|
||||
PROPERTY_ACL_PERMISSIONS: '{' + OC.Files.Client.NS_NEXTCLOUD + '}acl-permissions',
|
||||
};
|
||||
|
||||
export default ACL_PROPERTIES;
|
14
src/model/Rule.js
Normal file
14
src/model/Rule.js
Normal file
|
@ -0,0 +1,14 @@
|
|||
|
||||
import PROPERTIES from 'Properties'
|
||||
|
||||
export default class Rule {
|
||||
|
||||
constructor (props) {
|
||||
this.mappingType = props[PROPERTIES.PROPERTY_ACL_MAPPING_TYPE];
|
||||
this.mappingType = props[PROPERTIES.PROPERTY_ACL_MAPPING_ID];
|
||||
this.mask = props[PROPERTIES.PROPERTY_ACL_MASK];
|
||||
this.permissions = props[PROPERTIES.PROPERTY_ACL_PERMISSIONS];
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
<?php script($_['appId'], ['../build/bundle']); ?>
|
||||
<?php style($_['appId'], ['../build/bundle']); ?>
|
||||
<?php script($_['appId'], ['../build/app']); ?>
|
||||
<?php style($_['appId'], ['../build/app']); ?>
|
||||
<div id="searchresults" style="display: none"></div>
|
||||
<div id="groupfolders-root"/>
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
'use strict';
|
||||
|
||||
const path = require("path");
|
||||
const VueLoaderPlugin = require('vue-loader/lib/plugin');
|
||||
|
||||
module.exports = {
|
||||
devtool: 'source-map',
|
||||
|
@ -9,16 +10,20 @@ module.exports = {
|
|||
app: [
|
||||
'webpack/hot/only-dev-server',
|
||||
'./js/index.tsx'
|
||||
],
|
||||
files: [
|
||||
'./src/files.js'
|
||||
]
|
||||
},
|
||||
output: {
|
||||
path: path.join(__dirname, "build"),
|
||||
filename: "bundle.js",
|
||||
filename: "[name].js",
|
||||
publicPath: '/'
|
||||
},
|
||||
resolve: {
|
||||
extensions: ['.js', '.jsx', '.ts', '.tsx'],
|
||||
extensions: ['.js', '.jsx', '.ts', '.tsx', '.vue'],
|
||||
},
|
||||
plugins: [new VueLoaderPlugin()],
|
||||
module: {
|
||||
rules: [
|
||||
{
|
||||
|
@ -34,6 +39,10 @@ module.exports = {
|
|||
'ts-loader'
|
||||
]
|
||||
},
|
||||
{
|
||||
test: /\.vue$/,
|
||||
loader: 'vue-loader'
|
||||
},
|
||||
{
|
||||
test: /.*\.(gif|png|jpe?g|svg|webp)(\?.+)?$/i,
|
||||
use: [
|
||||
|
@ -42,7 +51,7 @@ module.exports = {
|
|||
},
|
||||
{
|
||||
test: /\.css$/,
|
||||
use: ['style-loader', 'css-loader', 'postcss-loader']
|
||||
use: ['vue-style-loader', 'style-loader', 'css-loader', 'postcss-loader']
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
const path = require("path");
|
||||
const CleanPlugin = require('clean-webpack-plugin');
|
||||
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
|
||||
const VueLoaderPlugin = require('vue-loader/lib/plugin');
|
||||
|
||||
module.exports = {
|
||||
devtool: 'source-map',
|
||||
|
@ -12,22 +13,26 @@ module.exports = {
|
|||
`whatwg-fetch`,
|
||||
'./js/index.tsx'
|
||||
],
|
||||
files: [
|
||||
'./src/files.js'
|
||||
]
|
||||
},
|
||||
output: {
|
||||
path: path.join(__dirname, "build"),
|
||||
filename: "bundle.js",
|
||||
filename: "[name].js",
|
||||
libraryTarget: 'umd',
|
||||
publicPath: '/'
|
||||
},
|
||||
resolve: {
|
||||
extensions: ['.js', '.jsx', '.ts', '.tsx'],
|
||||
extensions: ['.js', '.jsx', '.ts', '.tsx', '.vue'],
|
||||
},
|
||||
plugins: [
|
||||
new CleanPlugin(['build']),
|
||||
new MiniCssExtractPlugin({
|
||||
filename: 'bundle.css',
|
||||
allChunks: true
|
||||
})
|
||||
filename: '[name].css',
|
||||
chunks: ['app']
|
||||
}),
|
||||
new VueLoaderPlugin()
|
||||
],
|
||||
module: {
|
||||
rules: [
|
||||
|
@ -44,6 +49,10 @@ module.exports = {
|
|||
'ts-loader'
|
||||
]
|
||||
},
|
||||
{
|
||||
test: /\.vue$/,
|
||||
loader: 'vue-loader'
|
||||
},
|
||||
{
|
||||
test: /.*\.(gif|png|jpe?g|svg|webp)(\?.+)?$/i,
|
||||
use: [
|
||||
|
@ -53,7 +62,7 @@ module.exports = {
|
|||
{
|
||||
test: /\.css$/,
|
||||
use: [
|
||||
MiniCssExtractPlugin.loader,
|
||||
'vue-style-loader',
|
||||
'css-loader',
|
||||
'postcss-loader'
|
||||
]
|
||||
|
|
Loading…
Reference in a new issue