diff --git a/core/js/core.json b/core/js/core.json index 555c683f6f..03c72e9b3f 100644 --- a/core/js/core.json +++ b/core/js/core.json @@ -32,6 +32,7 @@ "sharedialogview.js", "sharedialogexpirationview.js", "sharedialoglinkshareview.js", + "sharedialogmailview.js", "sharedialogresharerinfoview.js", "sharedialogshareelistview.js", "octemplate.js", diff --git a/core/js/sharedialoglinkshareview.js b/core/js/sharedialoglinkshareview.js index 1d158ccec1..2fc6f657b0 100644 --- a/core/js/sharedialoglinkshareview.js +++ b/core/js/sharedialoglinkshareview.js @@ -40,12 +40,6 @@ '' + '' + ' {{/if}}' + - ' {{#if mailPublicNotificationEnabled}}' + - '' + - ' {{/if}}' + '{{else}}' + // FIXME: this doesn't belong in this view '{{#if noSharingPlaceholder}}{{/if}}' + @@ -76,7 +70,6 @@ showLink: true, events: { - 'submit .emailPrivateLinkForm': '_onEmailPrivateLink', 'focusout input.linkPassText': 'onPasswordEntered', 'keyup input.linkPassText': 'onPasswordKeyUp', 'click .linkCheckbox': 'onLinkCheckBoxChange', @@ -112,7 +105,6 @@ _.bindAll( this, - '_onEmailPrivateLink', 'onLinkCheckBoxChange', 'onPasswordEntered', 'onPasswordKeyUp', @@ -218,34 +210,6 @@ }); }, - _onEmailPrivateLink: function(event) { - event.preventDefault(); - - var $emailField = this.$el.find('.emailField'); - var $emailButton = this.$el.find('.emailButton'); - var email = $emailField.val(); - if (email !== '') { - $emailField.prop('disabled', true); - $emailButton.prop('disabled', true); - $emailField.val(t('core', 'Sending ...')); - this.model.sendEmailPrivateLink(email).done(function() { - $emailField.css('font-weight', 'bold').val(t('core','Email sent')); - setTimeout(function() { - $emailField.val(''); - $emailField.css('font-weight', 'normal'); - $emailField.prop('disabled', false); - $emailButton.prop('disabled', false); - }, 2000); - }).fail(function() { - $emailField.val(email); - $emailField.css('font-weight', 'normal'); - $emailField.prop('disabled', false); - $emailButton.prop('disabled', false); - }); - } - return false; - }, - render: function() { var linkShareTemplate = this.template(); var resharingAllowed = this.model.sharePermissionPossible(); @@ -299,39 +263,6 @@ mailButtonText: t('core', 'Send') })); - var $emailField = this.$el.find('.emailField'); - if (isLinkShare && $emailField.length !== 0) { - $emailField.autocomplete({ - minLength: 1, - source: function (search, response) { - $.get( - OC.generateUrl('core/ajax/share.php'), { - fetch: 'getShareWithEmail', - search: search.term - }, function(result) { - if (result.status == 'success' && result.data.length > 0) { - response(result.data); - } - }); - }, - select: function( event, item ) { - $emailField.val(item.item.email); - return false; - } - }) - .data("ui-autocomplete")._renderItem = function( ul, item ) { - return $('
  • ') - .append('' + escapeHTML(item.displayname) + "
    " + escapeHTML(item.email) + '
    ' ) - .appendTo( ul ); - }; - } - - // TODO drop with IE8 drop - if($('html').hasClass('ie8')) { - this.$el.find('#linkPassText').removeAttr('placeholder'); - this.$el.find('#linkPassText').val(''); - } - this.delegateEvents(); return this; diff --git a/core/js/sharedialogmailview.js b/core/js/sharedialogmailview.js new file mode 100644 index 0000000000..84e3f3242a --- /dev/null +++ b/core/js/sharedialogmailview.js @@ -0,0 +1,176 @@ +/* + * Copyright (c) 2016 + * + * This file is licensed under the Affero General Public License version 3 + * or later. + * + * See the COPYING-README file. + * + */ + +(function() { + if (!OC.Share) { + OC.Share = {}; + } + + var TEMPLATE = + '{{#if shareAllowed}}' + + ' {{#if mailPublicNotificationEnabled}}' + + '' + + ' {{/if}}' + + '{{/if}}' + ; + + /** + * @class OCA.Share.ShareDialogMailView + * @member {OC.Share.ShareItemModel} model + * @member {jQuery} $el + * @memberof OCA.Sharing + * @classdesc + * + * Represents the GUI of the share dialogue + * + */ + var ShareDialogMailView = OC.Backbone.View.extend({ + /** @type {string} **/ + id: 'shareDialogMailView', + + /** @type {OC.Share.ShareConfigModel} **/ + configModel: undefined, + + /** @type {Function} **/ + _template: undefined, + + /** @type {boolean} **/ + showLink: true, + + events: { + 'submit .emailPrivateLinkForm': '_onEmailPrivateLink' + }, + + initialize: function(options) { + var view = this; + + this.model.on('change:linkShare', function() { + view.render(); + }); + + if(!_.isUndefined(options.configModel)) { + this.configModel = options.configModel; + } else { + throw 'missing OC.Share.ShareConfigModel'; + } + + _.bindAll( + this, + '_onEmailPrivateLink' + ); + }, + + _onEmailPrivateLink: function(event) { + event.preventDefault(); + + var $emailField = this.$el.find('.emailField'); + var $emailButton = this.$el.find('.emailButton'); + var email = $emailField.val(); + if (email !== '') { + $emailField.prop('disabled', true); + $emailButton.prop('disabled', true); + $emailField.val(t('core', 'Sending ...')); + this.model.sendEmailPrivateLink(email).done(function() { + $emailField.css('font-weight', 'bold').val(t('core','Email sent')); + setTimeout(function() { + $emailField.val(''); + $emailField.css('font-weight', 'normal'); + $emailField.prop('disabled', false); + $emailButton.prop('disabled', false); + }, 2000); + }).fail(function() { + $emailField.val(email); + $emailField.css('font-weight', 'normal'); + $emailField.prop('disabled', false); + $emailButton.prop('disabled', false); + }); + } + return false; + }, + + render: function() { + var linkShareTemplate = this.template(); + var resharingAllowed = this.model.sharePermissionPossible(); + var email = this.$el.find('.emailField').val(); + + if(!resharingAllowed + || !this.showLink + || !this.configModel.isShareWithLinkAllowed()) + { + var templateData = {shareAllowed: false}; + if (!resharingAllowed) { + // add message + templateData.noSharingPlaceholder = t('core', 'Resharing is not allowed'); + } + this.$el.html(linkShareTemplate(templateData)); + return this; + } + + var isLinkShare = this.model.get('linkShare').isLinkShare; + + this.$el.html(linkShareTemplate({ + cid: this.cid, + shareAllowed: true, + mailPublicNotificationEnabled: isLinkShare && this.configModel.isMailPublicNotificationEnabled(), + mailPrivatePlaceholder: t('core', 'Email link to person'), + mailButtonText: t('core', 'Send link via email'), + email: email + })); + + var $emailField = this.$el.find('.emailField'); + if (isLinkShare && $emailField.length !== 0) { + $emailField.autocomplete({ + minLength: 1, + source: function (search, response) { + $.get( + OC.generateUrl('core/ajax/share.php'), { + fetch: 'getShareWithEmail', + search: search.term + }, function(result) { + if (result.status == 'success' && result.data.length > 0) { + response(result.data); + } + }); + }, + select: function( event, item ) { + $emailField.val(item.item.email); + return false; + } + }) + .data("ui-autocomplete")._renderItem = function( ul, item ) { + return $('
  • ') + .append('' + escapeHTML(item.displayname) + "
    " + escapeHTML(item.email) + '
    ' ) + .appendTo( ul ); + }; + } + this.delegateEvents(); + + return this; + }, + + /** + * @returns {Function} from Handlebars + * @private + */ + template: function () { + if (!this._template) { + this._template = Handlebars.compile(TEMPLATE); + } + return this._template; + } + + }); + + OC.Share.ShareDialogMailView = ShareDialogMailView; + +})(); \ No newline at end of file diff --git a/core/js/sharedialogview.js b/core/js/sharedialogview.js index 56f53cadda..a4bfde1777 100644 --- a/core/js/sharedialogview.js +++ b/core/js/sharedialogview.js @@ -26,6 +26,7 @@ '
    ' + '
    ' + '
    ' + + '
    ' + ''; var TEMPLATE_REMOTE_SHARE_INFO = @@ -67,6 +68,9 @@ /** @type {object} **/ shareeListView: undefined, + /** @type {object} **/ + mailView: undefined, + events: { 'input .shareWithField': 'onShareWithFieldChanged' }, @@ -103,7 +107,8 @@ resharerInfoView: 'ShareDialogResharerInfoView', linkShareView: 'ShareDialogLinkShareView', expirationView: 'ShareDialogExpirationView', - shareeListView: 'ShareDialogShareeListView' + shareeListView: 'ShareDialogShareeListView', + mailView: 'ShareDialogMailView' }; for(var name in subViews) { @@ -360,6 +365,9 @@ this.shareeListView.$el = this.$el.find('.shareeListView'); this.shareeListView.render(); + this.mailView.$el = this.$el.find('.mailView'); + this.mailView.render(); + this.$el.find('.hasTooltip').tooltip(); return this; diff --git a/lib/private/share/share.php b/lib/private/share/share.php index 2125767cab..5b61f418a4 100644 --- a/lib/private/share/share.php +++ b/lib/private/share/share.php @@ -90,6 +90,7 @@ class Share extends Constants { \OC_Util::addScript('core', 'shareitemmodel'); \OC_Util::addScript('core', 'sharedialogresharerinfoview'); \OC_Util::addScript('core', 'sharedialoglinkshareview'); + \OC_Util::addScript('core', 'sharedialogmailview'); \OC_Util::addScript('core', 'sharedialogexpirationview'); \OC_Util::addScript('core', 'sharedialogshareelistview'); \OC_Util::addScript('core', 'sharedialogview');