diff options
author | Arthur Schiwon <blizzz@owncloud.com> | 2015-09-03 15:53:17 +0200 |
---|---|---|
committer | Vincent Petry <pvince81@owncloud.com> | 2015-09-16 07:23:27 +0200 |
commit | ce1b0c650e3a0e4cb701609ee08a13182909219a (patch) | |
tree | 917a0b27ab41898fbc37861909489824f49f3392 /core | |
parent | 5dc2c35ce5f3023ccea4cc599cf54d6b1c0e2c01 (diff) | |
download | nextcloud-server-ce1b0c650e3a0e4cb701609ee08a13182909219a.tar.gz nextcloud-server-ce1b0c650e3a0e4cb701609ee08a13182909219a.zip |
show link share
Diffstat (limited to 'core')
-rw-r--r-- | core/css/share.css | 4 | ||||
-rw-r--r-- | core/js/shareconfigmodel.js | 3 | ||||
-rw-r--r-- | core/js/sharedialogexpirationview.js | 10 | ||||
-rw-r--r-- | core/js/sharedialoglinkshareview.js | 32 | ||||
-rw-r--r-- | core/js/shareitemmodel.js | 57 |
5 files changed, 88 insertions, 18 deletions
diff --git a/core/css/share.css b/core/css/share.css index 0d687cb76da..bdf34e9a863 100644 --- a/core/css/share.css +++ b/core/css/share.css @@ -126,10 +126,6 @@ a.unshare { margin-right: 0; } -#linkText,#linkPass,#expiration { - display:none; -} - #link #showPassword img { padding-left:5px; width:12px; diff --git a/core/js/shareconfigmodel.js b/core/js/shareconfigmodel.js index e948c57cbac..846b2692ecb 100644 --- a/core/js/shareconfigmodel.js +++ b/core/js/shareconfigmodel.js @@ -16,7 +16,8 @@ var ShareConfigModel = OC.Backbone.Model.extend({ defaults: { - publicUploadEnabled: false + publicUploadEnabled: false, + enforcePasswordForPublicLink: oc_appconfig.core.enforcePasswordForPublicLink }, /** diff --git a/core/js/sharedialogexpirationview.js b/core/js/sharedialogexpirationview.js index 4c628f5498a..9fb404a090e 100644 --- a/core/js/sharedialogexpirationview.js +++ b/core/js/sharedialogexpirationview.js @@ -14,11 +14,14 @@ } var TEMPLATE = + // well that could go to linkShareView… + '{{#if isLinkShare}}' + '<input type="checkbox" name="expirationCheckbox" id="expirationCheckbox" value="1" />' + '<label for="expirationCheckbox">{{setExpirationLabel}}</label>' + '<label for="expirationDate" class="hidden-visually">{{expirationLabel}}</label>' + '<input id="expirationDate" type="text" placeholder="{{expirationDatePlaceholder}}" class="hidden" />' + - '<em id="defaultExpireMessage">{{defaultExpireMessage}}</em>' + '<em id="defaultExpireMessage">{{defaultExpireMessage}}</em>' + + '{{/if}}' ; /** @@ -44,6 +47,8 @@ /** @type {boolean} **/ showLink: true, + className: 'hidden', + initialize: function(options) { if(!_.isUndefined(options.configModel)) { this.configModel = options.configModel; @@ -68,7 +73,8 @@ setExpirationLabel: t('core', 'Set expiration date'), expirationLabel: t('core', 'Expiration'), expirationDatePlaceholder: t('core', 'Expiration date'), - defaultExpireMessage: defaultExpireMessage + defaultExpireMessage: defaultExpireMessage, + isLinkShare: this.model.get('linkShare').isLinkShare })); return this; diff --git a/core/js/sharedialoglinkshareview.js b/core/js/sharedialoglinkshareview.js index eebf8a34247..373d6d180bc 100644 --- a/core/js/sharedialoglinkshareview.js +++ b/core/js/sharedialoglinkshareview.js @@ -16,16 +16,20 @@ var TEMPLATE = '{{#if shareAllowed}}' + '<span class="icon-loading-small hidden"></span>' + - '<input type="checkbox" name="linkCheckbox" id="linkCheckbox" value="1" /><label for="linkCheckbox">{{linkShareLabel}}</label>' + + '<input type="checkbox" name="linkCheckbox" id="linkCheckbox" value="1" {{#if isLinkShare}}checked="checked"{{/if}} /><label for="linkCheckbox">{{linkShareLabel}}</label>' + '<br />' + '<label for="linkText" class="hidden-visually">{{urlLabel}}</label>' + - '<input id="linkText" type="text" readonly="readonly" />' + - '<input type="checkbox" name="showPassword" id="showPassword" value="1" class="hidden" /><label for="showPassword" class="hidden-visually">{{enablePasswordLabel}}</label>' + + '<input id="linkText" {{#unless isLinkShare}}class="hidden"{{/unless}} type="text" readonly="readonly" value="{{shareLinkURL}}" />' + + ' {{#if showPasswordCheckBox}}' + + '<input type="checkbox" name="showPassword" id="showPassword" {{#if isPasswordSet}}checked="checked"{{/if}} value="1" /><label for="showPassword">{{enablePasswordLabel}}</label>' + + ' {{/if}}' + + ' {{#if isPasswordSet}}' + '<div id="linkPass">' + ' <label for="linkPassText" class="hidden-visually">{{passwordLabel}}</label>' + - ' <input id="linkPassText" type="password" placeholder="passwordPlaceholder" />' + + ' <input id="linkPassText" type="password" placeholder="{{passwordPlaceholder}}" />' + ' <span class="icon-loading-small hidden"></span>' + '</div>' + + ' {{/if}}' + ' {{#if publicUpload}}' + '<div id="allowPublicUploadWrapper" class="hidden">' + ' <span class="icon-loading-small hidden"></span>' + @@ -35,8 +39,8 @@ ' {{/if}}' + ' {{#if mailPublicNotificationEnabled}}' + '<form id="emailPrivateLink">' + - ' <input id="email" class="hidden" value="" placeholder="{{mailPrivatePlaceholder}}" type="text" />' + - ' <input id="emailButton" class="hidden" type="submit" value="{{mailButtonText}}" />' + + ' <input id="email" value="" placeholder="{{mailPrivatePlaceholder}}" type="text" />' + + ' <input id="emailButton" type="submit" value="{{mailButtonText}}" />' + '</form>' + ' {{/if}}' + '{{else}}' + @@ -113,17 +117,27 @@ publicUploadChecked = 'checked="checked"'; } + var isLinkShare = this.model.get('linkShare').isLinkShare; + var isPasswordSet = !!this.model.get('linkShare').password; + var showPasswordCheckBox = isLinkShare + && ( !this.configModel.get('enforcePasswordForPublicLink') + || !this.model.get('linkShare').password); + this.$el.html(linkShareTemplate({ shareAllowed: true, + isLinkShare: isLinkShare, + shareLinkURL: this.model.get('linkShare').link, linkShareLabel: t('core', 'Share link'), urlLabel: t('core', 'Link'), enablePasswordLabel: t('core', 'Password protect'), passwordLabel: t('core', 'Password'), - passwordPlaceholder: t('core', 'Choose a password for the public link'), - publicUpload: publicUpload, + passwordPlaceholder: isPasswordSet ? '**********' : t('core', 'Choose a password for the public link'), + isPasswordSet: isPasswordSet, + showPasswordCheckBox: showPasswordCheckBox, + publicUpload: publicUpload && isLinkShare, publicUploadChecked: publicUploadChecked, publicUploadLabel: t('core', 'Allow editing'), - mailPublicNotificationEnabled: this.configModel.isMailPublicNotificationEnabled(), + mailPublicNotificationEnabled: isLinkShare && this.configModel.isMailPublicNotificationEnabled(), mailPrivatePlaceholder: t('core', 'Email link to person'), mailButtonText: t('core', 'Send') })); diff --git a/core/js/shareitemmodel.js b/core/js/shareitemmodel.js index acaa890be11..e8371e16e0a 100644 --- a/core/js/shareitemmodel.js +++ b/core/js/shareitemmodel.js @@ -15,6 +15,14 @@ } /** + * @typedef {object} OC.Share.Types.LinkShareInfo + * @property {bool} isLinkShare + * @property {string} token + * @property {string|null} password + * @property {string} link + */ + + /** * @typedef {object} OC.Share.Types.Collection * @property {string} item_type * @property {string} path @@ -49,6 +57,7 @@ * @typedef {object} OC.Share.Types.ShareItemInfo * @property {OC.Share.Types.Reshare} reshare * @property {OC.Share.Types.ShareInfo[]} shares + * @property {OC.Share.Types.LinkShareInfo|undefined} linkShare */ /** @@ -64,11 +73,16 @@ if(!_.isUndefined(options.configModel)) { this.configModel = options.configModel; } + if(!_.isUndefined(options.fileInfoModel)) { + /** @type {OC.Files.FileInfo} **/ + this.fileInfoModel = options.fileInfoModel; + } }, defaults: { allowPublicUploadStatus: false, - permissions: 0 + permissions: 0, + linkShare: {} }, /** @@ -186,7 +200,6 @@ * @returns {string} */ getReshareOwnerDisplayname: function() { - return 'foo'; return this.get('reshare').displayname_owner; }, @@ -399,12 +412,52 @@ }); } + /** @type {OC.Share.Types.ShareInfo[]} **/ var shares = _.toArray(data.shares); this.legacyFillCurrentShares(shares); + var linkShare = { isLinkShare: false }; + // filter out the share by link + shares = _.reject(shares, + /** + * @param {OC.Share.Types.ShareInfo} share + */ + function(share) { + var isShareLink = + share.share_type === OC.Share.SHARE_TYPE_LINK + && ( share.file_source === this.get('itemSource') + || share.item_source === this.get('itemSource')); + + if (isShareLink) { + var link = window.location.protocol + '//' + window.location.host; + if (!share.token) { + // pre-token link + var fullPath = this.fileInfoModel.get('path') + '/' + + this.fileInfoModel.get('name'); + var location = '/' + OC.currentUser + '/files' + fullPath; + var type = this.fileInfoModel.isDirectory() ? 'folder' : 'file'; + link += OC.linkTo('', 'public.php') + '?service=files&' + + type + '=' + encodeURIComponent(location); + } else { + link += OC.generateUrl('/s/') + share.token; + } + linkShare = { + isLinkShare: true, + token: share.token, + password: share.share_with, + link: link + }; + + return share; + } + }, + this + ); + return { reshare: data.reshare, shares: shares, + linkShare: linkShare, permissions: permissions, allowPublicUploadStatus: allowPublicUploadStatus }; |