summaryrefslogtreecommitdiffstats
path: root/core/js/sharedialogmailview.js
diff options
context:
space:
mode:
Diffstat (limited to 'core/js/sharedialogmailview.js')
-rw-r--r--core/js/sharedialogmailview.js176
1 files changed, 176 insertions, 0 deletions
diff --git a/core/js/sharedialogmailview.js b/core/js/sharedialogmailview.js
new file mode 100644
index 00000000000..84e3f3242ad
--- /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}}' +
+ '<form id="emailPrivateLink" class="emailPrivateLinkForm">' +
+ ' <input id="email" class="emailField" value="{{email}}" placeholder="{{mailPrivatePlaceholder}}" type="text" />' +
+ ' <input id="emailButton" class="emailButton" type="submit" value="{{mailButtonText}}" />' +
+ '</form>' +
+ ' {{/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 $('<li>')
+ .append('<a>' + escapeHTML(item.displayname) + "<br>" + escapeHTML(item.email) + '</a>' )
+ .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