diff --git a/apps/files_sharing/css/sharetabview.scss b/apps/files_sharing/css/sharetabview.scss index 61a310447d..14be956222 100644 --- a/apps/files_sharing/css/sharetabview.scss +++ b/apps/files_sharing/css/sharetabview.scss @@ -180,8 +180,8 @@ display: block; .icon-more { padding: 14px; - height: 16px; - width: 16px; + height: 44px; + width: 44px; opacity: .5; display: block; cursor: pointer; diff --git a/core/js/sharedialoglinkshareview.js b/core/js/sharedialoglinkshareview.js index 0b2fec5588..736404e268 100644 --- a/core/js/sharedialoglinkshareview.js +++ b/core/js/sharedialoglinkshareview.js @@ -30,9 +30,13 @@ ' ' + ' ' + ' ' + - ' {{#if isLinkShare}}' + + ' {{#if showMenu}}' + '
' + - ' {{{popoverMenu}}}' + + ' {{#if showPending}}' + + ' {{{pendingPopoverMenu}}}' + + ' {{else}}' + + ' {{{popoverMenu}}}' + + ' {{/if}}' + '
' + ' {{/if}}' + ' ' + @@ -83,7 +87,8 @@ '{{/if}}' + '{{#if showPasswordCheckBox}}' + '
  • ' + - ' ' + + ' ' + ' ' + '
  • ' + '
  • ' + @@ -92,16 +97,17 @@ '
  • ' + '{{/if}}' + '
  • ' + - '' + - '' + - '' + + ' ' + + ' ' + + ' ' + + ' ' + '
  • ' + '
  • ' + - '' + - ' ' + - ' ' + - '' + - '' + + ' ' + + ' ' + + ' ' + + ' ' + '
  • ' + '
  • ' + '' + @@ -128,6 +134,23 @@ '' + ''; + // popovermenu waiting for password or expiration date before saving the share + var TEMPLATE_POPOVER_MENU_PENDING = + ''; + /** * @class OCA.Share.ShareDialogLinkShareView * @member {OC.Share.ShareItemModel} model @@ -151,22 +174,36 @@ /** @type {Function} **/ _popoverMenuTemplate: undefined, + /** @type {Function} **/ + _pendingPopoverMenuTemplate: undefined, + /** @type {boolean} **/ showLink: true, + /** @type {boolean} **/ + showPending: false, + events: { + // enable/disable + 'change .linkCheckbox': 'onLinkCheckBoxChange', + // open menu + 'click .share-menu .icon-more': 'onToggleMenu', + // password 'focusout input.linkPassText': 'onPasswordEntered', 'keyup input.linkPassText': 'onPasswordKeyUp', - 'click .linkCheckbox': 'onLinkCheckBoxChange', - 'click .linkText': 'onLinkTextClick', + 'change .showPasswordCheckbox': 'onShowPasswordClick', 'change .publicEditingCheckbox': 'onAllowPublicEditingChange', - 'click .showPasswordCheckbox': 'onShowPasswordClick', - 'click .share-menu .icon-more': 'onToggleMenu', + // copy link url + 'click .linkText': 'onLinkTextClick', + // social 'click .pop-up': 'onPopUpClick', + // permission change 'change .publicUploadRadio': 'onPublicUploadChange', + // expire date 'click .expireDate' : 'onExpireDateChange', 'change .datepicker': 'onChangeExpirationDate', 'click .datepicker' : 'showDatePicker', + // note 'click .share-add': 'showNoteForm', 'click .share-note-delete': 'deleteNote', 'click .share-note-submit': 'updateNote' @@ -253,20 +290,26 @@ } if($checkBox.is(':checked')) { - if(this.configModel.get('enforcePasswordForPublicLink') === false && this.configModel.get('enableLinkPasswordByDefault') === false) { + if(this.configModel.get('enforcePasswordForPublicLink') === false) { $loading.removeClass('hidden'); // this will create it this.model.saveLinkShare(); + $('.share-menu .icon-more').click(); + $('.share-menu .icon-more + .popovermenu .clipboardButton').click(); } else { - this.$el.find('.linkPass').slideToggle(OC.menuSpeed); - this.$el.find('.linkPassText').focus(); + // force the rendering of the menu + this.showPending = true; + this.render() + $('.share-menu .icon-more').click(); + $('.share-menu .icon-more + .popovermenu input:eq(1)').focus() } } else { if (this.model.get('linkShare').isLinkShare) { $loading.removeClass('hidden'); this.model.removeLinkShare(); } else { - this.$el.find('.linkPass').slideToggle(OC.menuSpeed); + this.showPending = false; + this.render() } } }, @@ -388,8 +431,7 @@ var shareId = $li.data('share-id'); var $menu = $element.closest('li'); var $form = $menu.next('li.share-note-form'); - - console.log($form.find('.share-note')); + $form.find('.share-note').val(''); $form.addClass('hidden'); @@ -492,6 +534,8 @@ var isLinkShare = this.model.get('linkShare').isLinkShare; var isPasswordSet = !!this.model.get('linkShare').password; + var isPasswordEnforced = this.configModel.get('enforcePasswordForPublicLink') + var isPasswordEnabledByDefault = this.configModel.get('enableLinkPasswordByDefault') === true var showPasswordCheckBox = isLinkShare && ( !this.configModel.get('enforcePasswordForPublicLink') || !this.model.get('linkShare').password); @@ -565,7 +609,7 @@ passwordLabel: t('core', 'Password'), passwordPlaceholder: isPasswordSet ? PASSWORD_PLACEHOLDER : PASSWORD_PLACEHOLDER_MESSAGE, passwordPlaceholderInitial: passwordPlaceholderInitial, - isPasswordSet: isPasswordSet, + isPasswordSet: isPasswordSet || isPasswordEnabledByDefault || isPasswordEnforced, showPasswordCheckBox: showPasswordCheckBox, publicUpload: publicUpload && isLinkShare, publicEditing: publicEditable, @@ -587,12 +631,23 @@ expirationDatePlaceholder: t('core', 'Expiration date'), hasExpireDate: hasExpireDate, isExpirationEnforced: isExpirationEnforced, + isPasswordEnforced: isPasswordEnforced, expireDate: expireDate, defaultExpireDate: moment().add(1, 'day').format('DD-MM-YYYY'), // Can't expire today shareNote: this.model.get('linkShare').note, addNoteLabel: t('core', 'Note to recipient'), }); + var pendingPopover = this.pendingPopoverMenuTemplate({ + cid: this.model.get('linkShare').id, + enablePasswordLabel: t('core', 'Password protect'), + passwordLabel: t('core', 'Password'), + passwordPlaceholder: isPasswordSet ? PASSWORD_PLACEHOLDER : PASSWORD_PLACEHOLDER_MESSAGE, + passwordPlaceholderInitial: passwordPlaceholderInitial, + showPasswordCheckBox: showPasswordCheckBox, + isPasswordEnforced: isPasswordEnforced, + }); + this.$el.html(linkShareTemplate({ cid: this.model.get('linkShare').id, shareAllowed: true, @@ -600,6 +655,9 @@ linkShareLabel: t('core', 'Share link'), linkShareEnableLabel: t('core', 'Enable'), popoverMenu: popover, + pendingPopoverMenu: pendingPopover, + showMenu: isLinkShare || this.showPending, + showPending: this.showPending && !isLinkShare })); this.delegateEvents(); @@ -645,6 +703,19 @@ return this._popoverMenuTemplate(data); }, + /** + * renders the pending popover template and returns the resulting HTML + * + * @param {Object} data + * @returns {string} + */ + pendingPopoverMenuTemplate: function(data) { + if(!this._pendingPopoverMenuTemplate) { + this._pendingPopoverMenuTemplate = Handlebars.compile(TEMPLATE_POPOVER_MENU_PENDING); + } + return this._pendingPopoverMenuTemplate(data); + }, + onPopUpClick: function(event) { event.preventDefault(); event.stopPropagation(); @@ -701,7 +772,6 @@ self.setExpirationDate(expireDate); } }); - console.log(event, $(expirationDatePicker)); $(expirationDatePicker).datepicker('show'); $(expirationDatePicker).focus();