From 07f1b263c99b67730fb054482eb241bfad280d57 Mon Sep 17 00:00:00 2001 From: Vincent Petry Date: Wed, 4 Jun 2014 10:37:04 +0200 Subject: Use recipient display names when updating shares in the UI Since OC.Share didn't have any array containing the list of shares for the current file, OC.Share.currentShares has been introduced to contain the full share item structure instead of the reduced one OC.Share.itemShares. The event "sharesChanged" is now passing OC.Share.currentShares, which itself includes the display name to be displayed for the recipients in the action icon. --- core/js/share.js | 39 +++++++++++++++++++++++++++++++++++---- core/js/tests/specs/shareSpec.js | 40 +++++++++++++++++----------------------- 2 files changed, 52 insertions(+), 27 deletions(-) (limited to 'core/js') diff --git a/core/js/share.js b/core/js/share.js index a46a17102fd..a478b08cd6b 100644 --- a/core/js/share.js +++ b/core/js/share.js @@ -3,8 +3,25 @@ OC.Share={ SHARE_TYPE_GROUP:1, SHARE_TYPE_LINK:3, SHARE_TYPE_EMAIL:4, + /** + * @deprecated use OC.Share.currentShares instead + */ itemShares:[], + /** + * Full list of all share statuses + */ statuses:{}, + /** + * Shares for the currently selected file. + * (for which the dropdown is open) + * + * Key is item type and value is an array or + * shares of the given item type. + */ + currentShares: {}, + /** + * Whether the share dropdown is opened. + */ droppedDown:false, /** * Loads ALL share statuses from server, stores them in OC.Share.statuses then @@ -345,6 +362,7 @@ OC.Share={ dropDownEl = dropDownEl.appendTo(appendTo); // Reset item shares OC.Share.itemShares = []; + OC.Share.currentShares = {}; if (data.shares) { $.each(data.shares, function(index, share) { if (share.share_type == OC.Share.SHARE_TYPE_LINK) { @@ -418,7 +436,7 @@ OC.Share={ OC.Share.share(itemType, itemSource, shareType, shareWith, permissions, itemSourceName, expirationDate, function() { OC.Share.addShareWith(shareType, shareWith, selected.item.label, permissions, possiblePermissions); $('#shareWith').val(''); - $('#dropdown').trigger(new $.Event('sharesChanged', {itemShares: OC.Share.itemShares})); + $('#dropdown').trigger(new $.Event('sharesChanged', {shares: OC.Share.currentShares})); OC.Share.updateIcon(itemType, itemSource); }); return false; @@ -475,6 +493,7 @@ OC.Share={ $('#shareWith').focus(); }, hideDropDown:function(callback) { + OC.Share.currentShares = null; $('#dropdown').hide('blind', function() { OC.Share.droppedDown = false; $('#dropdown').remove(); @@ -487,6 +506,12 @@ OC.Share={ }); }, addShareWith:function(shareType, shareWith, shareWithDisplayName, permissions, possiblePermissions, mailSend, collection) { + var shareItem = { + share_type: shareType, + share_with: shareWith, + share_with_displayname: shareWithDisplayName, + permissions: permissions + }; if (shareType === 1) { shareWithDisplayName = shareWithDisplayName + " (" + t('core', 'group') + ')'; } @@ -565,6 +590,10 @@ OC.Share={ html.find('.cruds').before(showCrudsButton); } $('#expiration').show(); + if (!OC.Share.currentShares[shareType]) { + OC.Share.currentShares[shareType] = []; + } + OC.Share.currentShares[shareType].push(shareItem); } }, showLink:function(token, password, itemSource) { @@ -700,7 +729,9 @@ $(document).ready(function() { $li.remove(); var index = OC.Share.itemShares[shareType].indexOf(shareWith); OC.Share.itemShares[shareType].splice(index, 1); - $('#dropdown').trigger(new $.Event('sharesChanged', {itemShares: OC.Share.itemShares})); + // updated list of shares + OC.Share.currentShares[shareType].splice(index, 1); + $('#dropdown').trigger(new $.Event('sharesChanged', {shares: OC.Share.currentShares})); OC.Share.updateIcon(itemType, itemSource); if (typeof OC.Share.statuses[itemSource] === 'undefined') { $('#expiration').hide('blind'); @@ -759,7 +790,7 @@ $(document).ready(function() { if (oc_appconfig.core.enforcePasswordForPublicLink === false) { OC.Share.share(itemType, itemSource, OC.Share.SHARE_TYPE_LINK, '', OC.PERMISSION_READ, itemSourceName, expirationDate, function(data) { OC.Share.showLink(data.token, null, itemSource); - $('#dropdown').trigger(new $.Event('sharesChanged', {itemShares: OC.Share.itemShares})); + $('#dropdown').trigger(new $.Event('sharesChanged', {shares: OC.Share.currentShares})); OC.Share.updateIcon(itemType, itemSource); }); } else { @@ -772,7 +803,7 @@ $(document).ready(function() { if ($('#linkText').val() !== '') { OC.Share.unshare(itemType, itemSource, OC.Share.SHARE_TYPE_LINK, '', function() { OC.Share.itemShares[OC.Share.SHARE_TYPE_LINK] = false; - $('#dropdown').trigger(new $.Event('sharesChanged', {itemShares: OC.Share.itemShares})); + $('#dropdown').trigger(new $.Event('sharesChanged', {shares: OC.Share.currentShares})); OC.Share.updateIcon(itemType, itemSource); if (typeof OC.Share.statuses[itemSource] === 'undefined') { $('#expiration').hide('blind'); diff --git a/core/js/tests/specs/shareSpec.js b/core/js/tests/specs/shareSpec.js index a8d9225649c..458bc41b6a1 100644 --- a/core/js/tests/specs/shareSpec.js +++ b/core/js/tests/specs/shareSpec.js @@ -170,11 +170,11 @@ describe('OC.Share tests', function() { JSON.stringify({status: 'success'}) ); expect(handler.calledOnce).toEqual(true); - var itemShares = handler.getCall(0).args[0].itemShares; - expect(itemShares).toBeDefined(); - expect(itemShares[OC.Share.SHARE_TYPE_USER]).toEqual(['user1', 'user2']); - expect(itemShares[OC.Share.SHARE_TYPE_GROUP]).not.toBeDefined(); - expect(itemShares[OC.Share.SHARE_TYPE_LINK]).not.toBeDefined(); + var shares = handler.getCall(0).args[0].shares; + expect(shares).toBeDefined(); + expect(shares[OC.Share.SHARE_TYPE_USER][0].share_with_displayname).toEqual('User One'); + expect(shares[OC.Share.SHARE_TYPE_USER][1].share_with_displayname).toEqual('User Two'); + expect(shares[OC.Share.SHARE_TYPE_GROUP]).not.toBeDefined(); }); it('triggers "sharesChanged" event when deleting shares', function() { $('#dropdown .unshare:eq(0)').click(); @@ -184,11 +184,10 @@ describe('OC.Share tests', function() { JSON.stringify({status: 'success'}) ); expect(handler.calledOnce).toEqual(true); - var itemShares = handler.getCall(0).args[0].itemShares; - expect(itemShares).toBeDefined(); - expect(itemShares[OC.Share.SHARE_TYPE_USER]).toEqual([]); - expect(itemShares[OC.Share.SHARE_TYPE_GROUP]).not.toBeDefined(); - expect(itemShares[OC.Share.SHARE_TYPE_LINK]).not.toBeDefined(); + var shares = handler.getCall(0).args[0].shares; + expect(shares).toBeDefined(); + expect(shares[OC.Share.SHARE_TYPE_USER]).toEqual([]); + expect(shares[OC.Share.SHARE_TYPE_GROUP]).not.toBeDefined(); }); it('triggers "sharesChanged" event when toggling link share', function() { // simulate autocomplete selection @@ -199,11 +198,10 @@ describe('OC.Share tests', function() { JSON.stringify({status: 'success', data: { token: 'abc' }}) ); expect(handler.calledOnce).toEqual(true); - var itemShares = handler.getCall(0).args[0].itemShares; - expect(itemShares).toBeDefined(); - expect(itemShares[OC.Share.SHARE_TYPE_USER]).toEqual(['user1']); - expect(itemShares[OC.Share.SHARE_TYPE_GROUP]).not.toBeDefined(); - expect(itemShares[OC.Share.SHARE_TYPE_LINK]).toEqual(true); + var shares = handler.getCall(0).args[0].shares; + expect(shares).toBeDefined(); + expect(shares[OC.Share.SHARE_TYPE_USER][0].share_with_displayname).toEqual('User One'); + expect(shares[OC.Share.SHARE_TYPE_GROUP]).not.toBeDefined(); handler.reset(); @@ -216,14 +214,10 @@ describe('OC.Share tests', function() { ); expect(handler.calledOnce).toEqual(true); - itemShares = handler.getCall(0).args[0].itemShares; - expect(itemShares).toBeDefined(); - expect(itemShares[OC.Share.SHARE_TYPE_USER]).toEqual(['user1']); - expect(itemShares[OC.Share.SHARE_TYPE_GROUP]).not.toBeDefined(); - // currently inconsistent, removing share with link sets it to false - // instead of delete - expect(itemShares[OC.Share.SHARE_TYPE_LINK]).toBeFalsy(); - //expect(itemShares[OC.Share.SHARE_TYPE_LINK]).not.toBeDefined(); + shares = handler.getCall(0).args[0].shares; + expect(shares).toBeDefined(); + expect(shares[OC.Share.SHARE_TYPE_USER][0].share_with_displayname).toEqual('User One'); + expect(shares[OC.Share.SHARE_TYPE_GROUP]).not.toBeDefined(); }); }); }); -- cgit v1.2.3