aboutsummaryrefslogtreecommitdiffstats
path: root/apps/files_sharing/js
diff options
context:
space:
mode:
Diffstat (limited to 'apps/files_sharing/js')
-rw-r--r--apps/files_sharing/js/share.js38
-rw-r--r--apps/files_sharing/js/sharebreadcrumbview.js103
-rw-r--r--apps/files_sharing/js/sharetabview.js4
3 files changed, 132 insertions, 13 deletions
diff --git a/apps/files_sharing/js/share.js b/apps/files_sharing/js/share.js
index 64fc7ef7296..073cc77e5aa 100644
--- a/apps/files_sharing/js/share.js
+++ b/apps/files_sharing/js/share.js
@@ -36,19 +36,7 @@
var oldCreateRow = fileList._createRow;
fileList._createRow = function(fileData) {
var tr = oldCreateRow.apply(this, arguments);
- var sharePermissions = fileData.permissions;
- if (fileData.mountType && fileData.mountType === "external-root"){
- // for external storages we can't use the permissions of the mountpoint
- // instead we show all permissions and only use the share permissions from the mountpoint to handle resharing
- sharePermissions = sharePermissions | (OC.PERMISSION_ALL & ~OC.PERMISSION_SHARE);
- }
- if (fileData.type === 'file') {
- // files can't be shared with delete permissions
- sharePermissions = sharePermissions & ~OC.PERMISSION_DELETE;
-
- // create permissions don't mean anything for files
- sharePermissions = sharePermissions & ~OC.PERMISSION_CREATE;
- }
+ var sharePermissions = OCA.Sharing.Util.getSharePermissions(fileData);
tr.attr('data-share-permissions', sharePermissions);
if (fileData.shareOwner) {
tr.attr('data-share-owner', fileData.shareOwner);
@@ -185,6 +173,9 @@
}
});
fileList.registerTabView(shareTab);
+
+ var breadCrumbSharingDetailView = new OCA.Sharing.ShareBreadCrumbView({shareTab: shareTab});
+ fileList.registerBreadCrumbDetailView(breadCrumbSharingDetailView);
},
/**
@@ -248,6 +239,27 @@
text += ', +' + (count - maxRecipients);
}
return text;
+ },
+
+ /**
+ * @param {Array} fileData
+ * @returns {String}
+ */
+ getSharePermissions: function(fileData) {
+ var sharePermissions = fileData.permissions;
+ if (fileData.mountType && fileData.mountType === "external-root"){
+ // for external storages we can't use the permissions of the mountpoint
+ // instead we show all permissions and only use the share permissions from the mountpoint to handle resharing
+ sharePermissions = sharePermissions | (OC.PERMISSION_ALL & ~OC.PERMISSION_SHARE);
+ }
+ if (fileData.type === 'file') {
+ // files can't be shared with delete permissions
+ sharePermissions = sharePermissions & ~OC.PERMISSION_DELETE;
+
+ // create permissions don't mean anything for files
+ sharePermissions = sharePermissions & ~OC.PERMISSION_CREATE;
+ }
+ return sharePermissions;
}
};
})();
diff --git a/apps/files_sharing/js/sharebreadcrumbview.js b/apps/files_sharing/js/sharebreadcrumbview.js
new file mode 100644
index 00000000000..36bbddfaec4
--- /dev/null
+++ b/apps/files_sharing/js/sharebreadcrumbview.js
@@ -0,0 +1,103 @@
+/* global Handlebars, OC */
+
+/**
+ * @copyright 2016 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @author 2016 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+(function() {
+ 'use strict';
+
+ var BreadCrumbView = OC.Backbone.View.extend({
+ tagName: 'span',
+ events: {
+ click: '_onClick'
+ },
+ _dirInfo: undefined,
+
+ /** @type OCA.Sharing.ShareTabView */
+ _shareTab: undefined,
+
+ initialize: function(options) {
+ this._shareTab = options.shareTab;
+ },
+
+ render: function(data) {
+ this._dirInfo = data.dirInfo || null;
+
+ if (this._dirInfo !== null && (this._dirInfo.path !== '/' || this._dirInfo.name !== '')) {
+ var isShared = data.dirInfo && data.dirInfo.shareTypes && data.dirInfo.shareTypes.length > 0;
+ this.$el.removeClass('shared icon-public icon-share');
+ if (isShared) {
+ this.$el.addClass('shared');
+ if (data.dirInfo.shareTypes.indexOf(OC.Share.SHARE_TYPE_LINK) !== -1) {
+ this.$el.addClass('icon-public');
+ } else {
+ this.$el.addClass('icon-share');
+ }
+ } else {
+ this.$el.addClass('icon-share');
+ }
+ this.$el.show();
+ this.delegateEvents();
+ } else {
+ this.$el.removeClass('shared icon-public icon-share');
+ this.$el.hide();
+ }
+
+ return this;
+ },
+ _onClick: function(e) {
+ e.preventDefault();
+
+ var fileInfoModel = new OCA.Files.FileInfoModel(this._dirInfo);
+ var self = this;
+ fileInfoModel.on('change', function() {
+ self.render({
+ dirInfo: self._dirInfo
+ });
+ });
+ this._shareTab.on('sharesChanged', function(shareModel) {
+ var shareTypes = [];
+ var shares = shareModel.getSharesWithCurrentItem();
+
+ for(var i = 0; i < shares.length; i++) {
+ if (shareTypes.indexOf(shares[i].share_type) === -1) {
+ shareTypes.push(shares[i].share_type);
+ }
+ }
+
+ if (shareModel.hasLinkShare()) {
+ shareTypes.push(OC.Share.SHARE_TYPE_LINK);
+ }
+
+ // Since the dirInfo isn't updated we need to do this dark hackery
+ self._dirInfo.shareTypes = shareTypes;
+
+ self.render({
+ dirInfo: self._dirInfo
+ });
+ });
+ OCA.Files.App.fileList.showDetailsView(fileInfoModel, 'shareTabView');
+ }
+ });
+
+ OCA.Sharing.ShareBreadCrumbView = BreadCrumbView;
+})();
diff --git a/apps/files_sharing/js/sharetabview.js b/apps/files_sharing/js/sharetabview.js
index 2c7070aa3d5..7bb1f1229d0 100644
--- a/apps/files_sharing/js/sharetabview.js
+++ b/apps/files_sharing/js/sharetabview.js
@@ -50,6 +50,10 @@
if (this.model) {
this.$el.html(this.template());
+ if (_.isUndefined(this.model.get('sharePermissions'))) {
+ this.model.set('sharePermissions', OCA.Sharing.Util.getSharePermissions(this.model.attributes));
+ }
+
// TODO: the model should read these directly off the passed fileInfoModel
var attributes = {
itemType: this.model.isDirectory() ? 'folder' : 'file',