Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/core/js
diff options
context:
space:
mode:
authorJohn Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>2018-07-14 12:45:04 +0300
committerJohn Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>2018-07-21 16:02:20 +0300
commit4e08d8342e8582e8001df31ff6e56f40d20ccc40 (patch)
tree09d4e98bbb21c5a80effe2906ddd4c5f70f8e75c /core/js
parent72d24555773aeffd2481b59e54e866632a1c763c (diff)
UI set share note!
Signed-off-by: John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
Diffstat (limited to 'core/js')
-rw-r--r--core/js/core.json1
-rw-r--r--core/js/merged-share-backend.json1
-rw-r--r--core/js/sharedialognoteview.js149
-rw-r--r--core/js/sharedialogshareelistview.js21
-rw-r--r--core/js/sharedialogview.js9
5 files changed, 181 insertions, 0 deletions
diff --git a/core/js/core.json b/core/js/core.json
index 502e3a57976..6a6249c294b 100644
--- a/core/js/core.json
+++ b/core/js/core.json
@@ -38,6 +38,7 @@
"shareitemmodel.js",
"sharedialogview.js",
"sharedialogexpirationview.js",
+ "sharedialognoteview.js",
"sharedialoglinkshareview.js",
"sharedialogresharerinfoview.js",
"sharedialogshareelistview.js",
diff --git a/core/js/merged-share-backend.json b/core/js/merged-share-backend.json
index d39945b8f79..48ad5d5340c 100644
--- a/core/js/merged-share-backend.json
+++ b/core/js/merged-share-backend.json
@@ -5,6 +5,7 @@
"sharedialogresharerinfoview.js",
"sharedialoglinkshareview.js",
"sharedialogexpirationview.js",
+ "sharedialognoteview.js",
"sharedialogshareelistview.js",
"sharedialogview.js",
"share.js"
diff --git a/core/js/sharedialognoteview.js b/core/js/sharedialognoteview.js
new file mode 100644
index 00000000000..429d9cd942b
--- /dev/null
+++ b/core/js/sharedialognoteview.js
@@ -0,0 +1,149 @@
+/*
+ * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>
+ *
+ * @author John Molakvoæ <skjnldsv@protonmail.com>
+ *
+ * @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/>.
+ *
+ */
+
+/* global moment, Handlebars */
+
+(function() {
+ if (!OC.Share) {
+ OC.Share = {};
+ }
+
+ var TEMPLATE =
+ ' <form id="newNoteForm" data-shareId="{{shareId}}">' +
+ ' <textarea class="message" placeholder="{{placeholder}}">{{note}}</textarea>' +
+ ' <input class="submit icon-confirm has-tooltip" type="submit" value="" title="{{submitText}}"/>' +
+ ' </form>' +
+ ' <div class="error hidden">{{error}}</div>'
+ ;
+
+ /**
+ * @class OCA.Share.ShareDialogNoteView
+ * @member {OC.Share.ShareItemModel} model
+ * @member {jQuery} $el
+ * @memberof OCA.Sharing
+ * @classdesc
+ *
+ * Represents the expiration part in the GUI of the share dialogue
+ *
+ */
+ var ShareDialogNoteView = OC.Backbone.View.extend({
+
+ id: 'shareNote',
+
+ className: 'hidden',
+
+ shareId: undefined,
+
+ events: {
+ 'submit #newNoteForm': '_onSubmitComment'
+ },
+
+ _onSubmitComment: function(e) {
+ var self = this;
+ var $form = $(e.target);
+ var $submit = $form.find('.submit');
+ var $commentField = $form.find('.message');
+ var $error = $form.siblings('.error');
+ var message = $commentField.val().trim();
+ e.preventDefault();
+
+ if (message.length < 1) {
+ return;
+ }
+
+ $submit.prop('disabled', true);
+ $form.addClass('icon-loading').prop('disabled', true);
+
+ // send data
+ $.ajax({
+ method: 'PUT',
+ url: OC.generateUrl('/ocs/v2.php/apps/files_sharing/api/v1/shares/' + self.shareId),
+ data: { note: message },
+ complete : function() {
+ $submit.prop('disabled', false);
+ $form.removeClass('icon-loading').prop('disabled', false);
+ },
+ error: function() {
+ $error.show();
+ setTimeout(function() {
+ $error.hide();
+ }, 3000);
+ }
+ });
+
+ // update local js object
+ var shares = this.model.get('shares');
+ var share = shares.filter(function (share) {
+ return share.id === self.shareId;
+ });
+ share[0].note = message;
+
+ return message;
+ },
+
+ render: function(shareId) {
+ this.shareId = shareId;
+ var shares = this.model.get('shares');
+ if (!shares) {
+ return;
+ }
+ var share = shares.filter(function (share) {
+ return share.id === shareId;
+ });
+ if (share.length !== 1) {
+ // should not happend
+ return;
+ }
+ this.$el.show();
+ this.$el.html(this.template({
+ note: share[0].note,
+ submitText: t('core', 'Submit the note'),
+ placeholder: t('core', 'Add a note…'),
+ error: t('core', 'An error has occured. Unable to save the note.'),
+ shareId: shareId
+ }));
+
+ this.delegateEvents();
+
+ return this;
+ },
+
+ hide() {
+ this.$el.hide();
+ },
+
+ /**
+ * @returns {Function} from Handlebars
+ * @private
+ */
+ template: function (data) {
+ if (!this._template) {
+ this._template = Handlebars.compile(TEMPLATE);
+ }
+ return this._template(data);
+ }
+
+ });
+
+ OC.Share.ShareDialogNoteView = ShareDialogNoteView;
+
+})();
diff --git a/core/js/sharedialogshareelistview.js b/core/js/sharedialogshareelistview.js
index 53a65fcdf7a..af4abce17b6 100644
--- a/core/js/sharedialogshareelistview.js
+++ b/core/js/sharedialogshareelistview.js
@@ -121,6 +121,9 @@
'</span>' +
'</li>' +
'<li>' +
+ '<a href="#" class="addnote"><span class="icon-loading-small hidden"></span><span class="icon icon-edit"></span><span>{{addNoteLabel}}</span></a>' +
+ '</li>' +
+ '<li>' +
'<a href="#" class="unshare"><span class="icon-loading-small hidden"></span><span class="icon icon-delete"></span><span>{{unshareLabel}}</span></a>' +
'</li>' +
'</ul>' +
@@ -154,8 +157,11 @@
/** @type {boolean|number} **/
_renderPermissionChange: false,
+ _noteView: undefined,
+
events: {
'click .unshare': 'onUnshare',
+ 'click .addnote': 'showNoteForm',
'click .icon-more': 'onToggleMenu',
'click .permissions': 'onPermissionChange',
'click .expireDate' : 'onExpireDateChange',
@@ -178,6 +184,8 @@
this.model.on('change:shares', function() {
view.render();
});
+
+ this._noteView = options.parent.noteView;
},
/**
@@ -269,6 +277,7 @@
getShareProperties: function() {
return {
unshareLabel: t('core', 'Unshare'),
+ addNoteLabel: t('core', 'Set share note'),
canShareLabel: t('core', 'Can reshare'),
canEditLabel: t('core', 'Can edit'),
createPermissionLabel: t('core', 'Can create'),
@@ -470,6 +479,16 @@
return this._popoverMenuTemplate(data);
},
+ showNoteForm(event) {
+ event.preventDefault();
+ event.stopPropagation();
+ var self = this;
+ var $element = $(event.target);
+ var $li = $element.closest('li[data-share-id]');
+ var shareId = $li.data('share-id');
+ this._noteView.render(shareId);
+ },
+
onUnshare: function(event) {
event.preventDefault();
event.stopPropagation();
@@ -493,6 +512,8 @@
self.model.removeShare(shareId)
.done(function() {
$li.remove();
+ // remove note field on sucess
+ self._noteView.hide();
})
.fail(function() {
$loading.addClass('hidden');
diff --git a/core/js/sharedialogview.js b/core/js/sharedialogview.js
index d886e45856f..4b5dc80e945 100644
--- a/core/js/sharedialogview.js
+++ b/core/js/sharedialogview.js
@@ -28,6 +28,7 @@
'<div class="shareeListView subView"></div>' +
'<div class="linkShareView subView"></div>' +
'<div class="expirationView subView"></div>' +
+ '<div class="noteView subView"></div>' +
'<div class="loading hidden" style="height: 50px"></div>';
/**
@@ -63,6 +64,9 @@
expirationView: undefined,
/** @type {object} **/
+ noteView: undefined,
+
+ /** @type {object} **/
shareeListView: undefined,
/** @type {object} **/
@@ -105,6 +109,7 @@
var subViewOptions = {
model: this.model,
+ parent: this,
configModel: this.configModel
};
@@ -112,6 +117,7 @@
resharerInfoView: 'ShareDialogResharerInfoView',
linkShareView: 'ShareDialogLinkShareView',
expirationView: 'ShareDialogExpirationView',
+ noteView: 'ShareDialogNoteView',
shareeListView: 'ShareDialogShareeListView'
};
@@ -674,6 +680,9 @@
this.expirationView.$el = this.$el.find('.expirationView');
this.expirationView.render();
+ this.noteView.$el = this.$el.find('.noteView');
+ this.noteView.render();
+
this.shareeListView.$el = this.$el.find('.shareeListView');
this.shareeListView.render();