From 639a634cfdd2613ef0045a61a4382fd1bd517803 Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Tue, 3 Feb 2015 17:22:24 +0100 Subject: [PATCH 1/6] Display user avatar in share dialog --- core/css/share.css | 6 ++++++ core/js/share.js | 18 ++++++++++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/core/css/share.css b/core/css/share.css index 3ebf3a4b22..72a8832886 100644 --- a/core/css/share.css +++ b/core/css/share.css @@ -68,6 +68,12 @@ overflow: hidden; vertical-align: middle; } +#shareWithList .avatar { + margin-right: 2px; + display: inline-block; + overflow: hidden; + vertical-align: middle; +} #shareWithList li label{ margin-right: 8px; } diff --git a/core/js/share.js b/core/js/share.js index b3533af482..1e86cddb89 100644 --- a/core/js/share.js +++ b/core/js/share.js @@ -358,9 +358,9 @@ OC.Share={ var html = ''; dropDownEl = $(html); dropDownEl = dropDownEl.appendTo(appendTo); + + //Get owner avatars + if (data !== false && data.reshare !== false && data.reshare.uid_owner !== undefined) { + $('#avatar-share-owner').avatar(data.reshare.uid_owner, 32); + } + // Reset item shares OC.Share.itemShares = []; OC.Share.currentShares = {}; @@ -650,6 +656,11 @@ OC.Share={ var html = '
  • '; var showCrudsButton; html += ''+t('core', 'Unshare')+''; + if (shareType == OC.Share.SHARE_TYPE_USER) { + html += '
    '; + } else { + html += '
    '; + } html += '' + escapeHTML(shareWithDisplayName) + ''; var mailNotificationEnabled = $('input:hidden[name=mailNotificationEnabled]').val(); if (mailNotificationEnabled === 'yes' && shareType !== OC.Share.SHARE_TYPE_REMOTE) { @@ -681,6 +692,9 @@ OC.Share={ html += ''; html += '
  • '; html = $(html).appendTo('#shareWithList'); + if (shareType == OC.Share.SHARE_TYPE_USER) { + $('#avatar-' + escapeHTML(shareWith)).avatar(escapeHTML(shareWith), 32); + } // insert cruds button into last label element var lastLabel = html.find('>label:last'); if (lastLabel.exists()){ From 47b96c9fa1449509c11a5a22589d67a6b1138d20 Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Wed, 11 Feb 2015 19:43:54 +0100 Subject: [PATCH 2/6] Added dependancy for the JS unit tests Still not correct but it is a small step --- core/js/core.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/js/core.json b/core/js/core.json index 2fb7842624..7f3b313e89 100644 --- a/core/js/core.json +++ b/core/js/core.json @@ -9,7 +9,8 @@ ], "libraries": [ "jquery-showpassword.js", - "jquery-tipsy.js" + "jquery-tipsy.js", + "jquery.avatar.js" ], "modules": [ "compatibility.js", From e952687dcdd5d5da7f081a7b1fea38fb9937d259 Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Thu, 12 Feb 2015 16:49:31 +0100 Subject: [PATCH 3/6] Added unit test --- core/js/share.js | 4 ++-- core/js/tests/specs/shareSpec.js | 35 ++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/core/js/share.js b/core/js/share.js index 1e86cddb89..e708ed587c 100644 --- a/core/js/share.js +++ b/core/js/share.js @@ -656,7 +656,7 @@ OC.Share={ var html = '
  • '; var showCrudsButton; html += ''+t('core', 'Unshare')+''; - if (shareType == OC.Share.SHARE_TYPE_USER) { + if (shareType === OC.Share.SHARE_TYPE_USER) { html += '
    '; } else { html += '
    '; @@ -692,7 +692,7 @@ OC.Share={ html += ''; html += '
  • '; html = $(html).appendTo('#shareWithList'); - if (shareType == OC.Share.SHARE_TYPE_USER) { + if (shareType === OC.Share.SHARE_TYPE_USER) { $('#avatar-' + escapeHTML(shareWith)).avatar(escapeHTML(shareWith), 32); } // insert cruds button into last label element diff --git a/core/js/tests/specs/shareSpec.js b/core/js/tests/specs/shareSpec.js index 7eb22261e1..21d93d4a4b 100644 --- a/core/js/tests/specs/shareSpec.js +++ b/core/js/tests/specs/shareSpec.js @@ -26,6 +26,7 @@ describe('OC.Share tests', function() { var oldAppConfig; var loadItemStub; var autocompleteStub; + var avatarStub; beforeEach(function() { $('#testArea').append($('
    ')); @@ -54,6 +55,8 @@ describe('OC.Share tests', function() { var $el = $('
    ').data('ui-autocomplete', {}); return $el; }); + + avatarStub = sinon.stub($.fn, 'avatar'); }); afterEach(function() { /* jshint camelcase:false */ @@ -61,6 +64,7 @@ describe('OC.Share tests', function() { loadItemStub.restore(); autocompleteStub.restore(); + avatarStub.restore(); $('#dropdown').remove(); }); it('calls loadItem with the correct arguments', function() { @@ -405,6 +409,37 @@ describe('OC.Share tests', function() { }); }); }); + describe('check for avatar', function() { + beforeEach(function() { + loadItemStub.returns({ + reshare: [], + shares: [{ + id: 100, + item_source: 123, + permissions: 31, + share_type: OC.Share.SHARE_TYPE_USER, + share_with: 'user1', + share_with_displayname: 'User One' + }] + }); + OC.Share.showDropDown( + 'file', + 123, + $container, + true, + 31, + 'shared_file_name.txt' + ); + }); + it('test correct function call', function() { + expect(avatarStub.calledOnce).toEqual(true); + var args = avatarStub.getCall(0).args; + + expect($('#avatar-user1')[0]).toEqual(jasmine.anything()); + expect(args.length).toEqual(2); + expect(args[0]).toEqual('user1'); + }); + }); describe('"sharesChanged" event', function() { var autocompleteOptions; var handler; From ecb7d4477525942d6104168f9361337247af9c48 Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Thu, 12 Feb 2015 17:05:59 +0100 Subject: [PATCH 4/6] Small unit test rewrite --- core/js/tests/specs/shareSpec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/js/tests/specs/shareSpec.js b/core/js/tests/specs/shareSpec.js index 21d93d4a4b..189c77b5ba 100644 --- a/core/js/tests/specs/shareSpec.js +++ b/core/js/tests/specs/shareSpec.js @@ -435,7 +435,7 @@ describe('OC.Share tests', function() { expect(avatarStub.calledOnce).toEqual(true); var args = avatarStub.getCall(0).args; - expect($('#avatar-user1')[0]).toEqual(jasmine.anything()); + expect($('#avatar-user1').length).toEqual(1); expect(args.length).toEqual(2); expect(args[0]).toEqual('user1'); }); From 90218dcd4c7e0720348d72784b624469811e62e9 Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Fri, 13 Feb 2015 12:08:14 +0100 Subject: [PATCH 5/6] Added config check --- core/js/config.php | 1 + core/js/share.js | 26 ++++++++++++++++++-------- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/core/js/config.php b/core/js/config.php index 52405725f2..b722425346 100644 --- a/core/js/config.php +++ b/core/js/config.php @@ -74,6 +74,7 @@ $array = array( 'session_keepalive' => \OCP\Config::getSystemValue('session_keepalive', true), 'version' => implode('.', OC_Util::getVersion()), 'versionstring' => OC_Util::getVersionString(), + 'enable_avatars' => \OC::$server->getConfig()->getSystemValue('enable_avatars', true), ) ), "oc_appconfig" => json_encode( diff --git a/core/js/share.js b/core/js/share.js index e708ed587c..692ce0b0ba 100644 --- a/core/js/share.js +++ b/core/js/share.js @@ -358,9 +358,17 @@ OC.Share={ var html = ''; html += ''; html = $(html).appendTo('#shareWithList'); - if (shareType === OC.Share.SHARE_TYPE_USER) { + if (oc_config.enable_avatars === true && shareType === OC.Share.SHARE_TYPE_USER) { $('#avatar-' + escapeHTML(shareWith)).avatar(escapeHTML(shareWith), 32); } // insert cruds button into last label element From 9a6da8e6e2739c42c0f2e458ab8738e8b018187f Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Fri, 13 Feb 2015 12:57:24 +0100 Subject: [PATCH 6/6] Extended avatar unit tests --- core/js/tests/specs/shareSpec.js | 75 ++++++++++++++++++++++++++------ 1 file changed, 61 insertions(+), 14 deletions(-) diff --git a/core/js/tests/specs/shareSpec.js b/core/js/tests/specs/shareSpec.js index 189c77b5ba..1856fc27bc 100644 --- a/core/js/tests/specs/shareSpec.js +++ b/core/js/tests/specs/shareSpec.js @@ -26,6 +26,7 @@ describe('OC.Share tests', function() { var oldAppConfig; var loadItemStub; var autocompleteStub; + var oldEnableAvatars; var avatarStub; beforeEach(function() { @@ -56,6 +57,8 @@ describe('OC.Share tests', function() { return $el; }); + oldEnableAvatars = oc_config.enable_avatars; + oc_config.enable_avatars = false; avatarStub = sinon.stub($.fn, 'avatar'); }); afterEach(function() { @@ -65,6 +68,7 @@ describe('OC.Share tests', function() { autocompleteStub.restore(); avatarStub.restore(); + oc_config.enable_avatars = oldEnableAvatars; $('#dropdown').remove(); }); it('calls loadItem with the correct arguments', function() { @@ -420,24 +424,67 @@ describe('OC.Share tests', function() { share_type: OC.Share.SHARE_TYPE_USER, share_with: 'user1', share_with_displayname: 'User One' + },{ + id: 101, + item_source: 123, + permissions: 31, + share_type: OC.Share.SHARE_TYPE_GROUP, + share_with: 'group', + share_with_displayname: 'group' }] }); - OC.Share.showDropDown( - 'file', - 123, - $container, - true, - 31, - 'shared_file_name.txt' - ); }); - it('test correct function call', function() { - expect(avatarStub.calledOnce).toEqual(true); - var args = avatarStub.getCall(0).args; - expect($('#avatar-user1').length).toEqual(1); - expect(args.length).toEqual(2); - expect(args[0]).toEqual('user1'); + describe('avatars enabled', function() { + beforeEach(function() { + oc_config.enable_avatars = true; + OC.Share.showDropDown( + 'file', + 123, + $container, + true, + 31, + 'shared_file_name.txt' + ); + }); + + afterEach(function() { + oc_config.enable_avatars = false; + }); + + it('test correct function call', function() { + expect(avatarStub.calledOnce).toEqual(true); + var args = avatarStub.getCall(0).args; + + + expect($('#shareWithList').children().length).toEqual(2); + + expect($('#avatar-user1').length).toEqual(1); + expect(args.length).toEqual(2); + expect(args[0]).toEqual('user1'); + }); + + it('test no avatar for groups', function() { + expect($('#shareWithList').children().length).toEqual(2); + expect($('#shareWithList li:nth-child(2) .avatar').attr('id')).not.toBeDefined(); + }); + }); + + describe('avatars disabled', function() { + beforeEach(function() { + OC.Share.showDropDown( + 'file', + 123, + $container, + true, + 31, + 'shared_file_name.txt' + ); + }); + + it('no avatar classes', function() { + expect($('.avatar').length).toEqual(0); + }); }); }); describe('"sharesChanged" event', function() {