From 8bb1437e240ce47e04f7bcb7dc3a56ef6b5d892b Mon Sep 17 00:00:00 2001
From: Vincent Petry <pvince81@owncloud.com>
Date: Wed, 3 Feb 2016 13:00:55 +0100
Subject: [PATCH] Add file row indicator for unread comments

---
 apps/comments/css/comments.css            |   4 +
 apps/comments/js/filesplugin.js           | Bin 706 -> 3471 bytes
 apps/comments/tests/js/filespluginSpec.js | 102 ++++++++++++++++++++++
 core/img/actions/comment.png              | Bin 0 -> 169 bytes
 core/img/actions/comment.svg              |   4 +
 tests/karma.config.js                     |   2 +-
 6 files changed, 111 insertions(+), 1 deletion(-)
 create mode 100644 apps/comments/tests/js/filespluginSpec.js
 create mode 100644 core/img/actions/comment.png
 create mode 100644 core/img/actions/comment.svg

diff --git a/apps/comments/css/comments.css b/apps/comments/css/comments.css
index c1624dcc57b..5e247aaeb71 100644
--- a/apps/comments/css/comments.css
+++ b/apps/comments/css/comments.css
@@ -49,3 +49,7 @@
 	position: absolute;
 	right: 0;
 }
+
+.app-files .action-comment>img {
+	margin-right: 5px;
+}
diff --git a/apps/comments/js/filesplugin.js b/apps/comments/js/filesplugin.js
index c8d91e0ede33e2338ae15f40fac868b673f47907..bf6bb05146bf4d12023f5e392af4b61311bcfd74 100644
GIT binary patch
literal 3471
zcmai0ZExC05dLg_#gvO`lTtgqlTIhDi7q0fhm;UhXirsDp$%SOb!KhtE=i-v|NUn6
z#lbYq@d2=R=h>NOW}eyXxC6&9EUO14)*A!KvIoDOy!#zK3%TUdz?2*H0Pm|idj8|x
zU*)}A7UeEam*w^hZOMGT5gJya;DEn{Ks(KI*vXtLFdGi%s})xzeBhERR={+3i<{ue
zZG=0nv?wL~Mo^`Kf*Gz-4?W}DLJV)FU&fOUZ$FOCFRn-SFux`1bh2Yu7v(KN|IK7x
z@LQ%d9OFW=+R3Fs@T3Qio#>7!n2)ZfSLgH5Vt8|XJ(|pCi%$~*h0{(H#qSv`3#RpH
zmsvY-KW{PEEwNE?wPh0jb-@Tz@YC+&<FedIbIrA8YhKq~*eJd_?f%j|i{XvM6x($`
z)pzSIXtg9eu`J~$RiH^0wtBF-4yGA9i~sCIo#<wGo(`Q88ct!6^6!SrJbA49u)o&B
z-C_mFtJX^jKFW@d@f$h*OR_E36<c!qoZ<KWZiIiV5vJ~RoXvp=G21doFERCcTI|+B
zk}=}3qA2fqekHWg1Ne$>qL>Oq$9?yo-IYohe8$IbeLN{ztV-n8_#lTw>HwPjS(0rM
zBNv~+noAcxFZz>IoaJ-At*CnZzUZYr=;%|iP%&5NUh=c*AX+121iutFJ0-Cwe|~;K
z6hx8rc>wmuhV9<?QW=0r;^2SWhu9TTjeSG0pqVW>WDMMjN2+@c%a_jp)1Qhh*4~tv
z4IwH{Xs&Q|=3(NV4Zy}xTfUhwY`NK^nDRpj^XyTxXkM(4D2mk*K$T?!-_LI<u+hKY
ztdanbio6H!;UuKNG3FU0H=2!#ukk>x=Ir*f;P;8-_pNGfN<M682=g!E9!5lv<n3g(
zxEZ3m@y3{HkY$Zjm1><yjg1s`mPP)7n}7Ii&hDnF#I81iQ(rZnE!ID-+X!CVK?p6y
z@t#$92EjjnZpx~vc(BCwfvNS5q(-}vi>zr{?KI~05oN(g`3B-TRLEObF|oJs1!@f)
z=`QfbbNZu)g}_r%mgkrFIF_q&imJ)glVmE?h!T}Nq>(7jnPC`*)rW)F!uFI7o*8Do
zo_w?a9l6#Mo2KBl>sdszo__tm=)O4wD{hNaV9V!xB_z+2Hee54ziyhxpYiGxt0E48
zL=*+Jyyf}H4T^s(%>iB?-ko@6ZT|-WAP`5dFTsZ2BVG`%LmDJWykR<w5A9P#Okybv
zvCj?vSl(0F_~t`N3vVs>Gw*44C^A~UKu1DognVQaZrR6wvA~GX0CPY}K#dSGMZHi-
zOi?%Cgu?4v_sNe#0GG2CZ;0h+b5)sT5L5uVJ||s2b^%8MuCiQ6oS;5mEde3N&+Vkv
zX@GIhUV~}W4ImymV>f-GTxgsV4->m~pu%CNSJ|zw_NaH>mTmw-(}e{G8%pnV^znK;
zn~iTK3%W))Z8i@To=QXY5*^g`JGeRjG94|(ldJJ$<Tfju<6P|tv6Jpu#g~1&P+jm9
z+ZCpd1W1EZze$SCH4%W>_G{@8Jv-8EuQ_G#F_8k<4Jl>uY50UR`YN~cwQbm(X+e*i
zgI7ZSONa?giS(KAog9D!d>n%|66bA-O`In&ODR=ncrB6mrr_=j>=-Iuy6Nnl+5mZ}
z+gtLnyNU~~8q*yLKREd4$3eU4zt1}zOEvK$)z3McI+)N5=%^{n!iWl6UgSKeafAhq
z14e?zmv}J+yd#BD#`$V%*Lu~kLT=C;PW7g|zu<<6Lfh&1<lm2D&<99Jwbvs&7*z<U
zZ^iA-;61v8E-yH#-n_iTQ@XU>i_vI*0n^%e(Xz0|JikOXL6%SfL&*?48PJ5mEhtN^
zlU|f2vJG4{GEM6GV*Qe!wXK3L_ToW~9LN;<)i&5;Gt^Ls!7kDDm~Mmk+o^jA5l&KI
ZZ@^DNl*DZXprqo}Z2zvke|095{{Z&nK4<^{

delta 36
scmeB|KEyiVD6d9ZX<l+kW`3TArb6}PWsFZI|6*2{tj98KvL$aA00YnsrT_o{

diff --git a/apps/comments/tests/js/filespluginSpec.js b/apps/comments/tests/js/filespluginSpec.js
new file mode 100644
index 00000000000..78becc5af09
--- /dev/null
+++ b/apps/comments/tests/js/filespluginSpec.js
@@ -0,0 +1,102 @@
+/*
+ * Copyright (c) 2016 Vincent Petry <pvince81@owncloud.com>
+ *
+ * This file is licensed under the Affero General Public License version 3
+ * or later.
+ *
+ * See the COPYING-README file.
+ *
+ */
+
+describe('OCA.Comments.FilesPlugin tests', function() {
+	var fileList;
+	var testFiles;
+
+	beforeEach(function() {
+		var $content = $('<div id="content"></div>');
+		$('#testArea').append($content);
+		// dummy file list
+		var $div = $(
+			'<div>' +
+			'<table id="filestable">' +
+			'<thead></thead>' +
+			'<tbody id="fileList"></tbody>' +
+			'</table>' +
+			'</div>');
+		$('#content').append($div);
+
+		fileList = new OCA.Files.FileList($div);
+		OCA.Comments.FilesPlugin.attach(fileList);
+
+		testFiles = [{
+			id: 1,
+			type: 'file',
+			name: 'One.txt',
+			path: '/subdir',
+			mimetype: 'text/plain',
+			size: 12,
+			permissions: OC.PERMISSION_ALL,
+			etag: 'abc',
+			shareOwner: 'User One',
+			isShareMountPoint: false,
+			commentsUnread: 3
+		}];
+	});
+	afterEach(function() {
+		fileList.destroy();
+		fileList = null;
+	});
+
+	describe('Comment icon', function() {
+		it('does not render icon when no unread comments available', function() {
+			testFiles[0].commentsUnread = 0;
+			fileList.setFiles(testFiles);
+			var $tr = fileList.findFileEl('One.txt');
+			expect($tr.find('.action-comment').length).toEqual(0);
+		});
+		it('renders comment icon and extra data', function() {
+			var $action, $tr;
+			fileList.setFiles(testFiles);
+			$tr = fileList.findFileEl('One.txt');
+			$action = $tr.find('.action-comment');
+			expect($action.length).toEqual(1);
+			expect($action.hasClass('permanent')).toEqual(true);
+
+			expect($tr.attr('data-comments-unread')).toEqual('3');
+		});
+		it('clicking icon opens sidebar', function() {
+			var sidebarStub = sinon.stub(fileList, 'showDetailsView');
+			var $action, $tr;
+			fileList.setFiles(testFiles);
+			$tr = fileList.findFileEl('One.txt');
+			$action = $tr.find('.action-comment');
+			$action.click();
+
+			expect(sidebarStub.calledOnce).toEqual(true);
+			expect(sidebarStub.lastCall.args[0]).toEqual('One.txt');
+			expect(sidebarStub.lastCall.args[1]).toEqual('commentsTabView');
+		});
+	});
+	describe('elementToFile', function() {
+		it('returns comment count', function() {
+			fileList.setFiles(testFiles);
+			var $tr = fileList.findFileEl('One.txt');
+			var data = fileList.elementToFile($tr);
+			expect(data.commentsUnread).toEqual(3);
+		});
+		it('does not set comment count when not set', function() {
+			delete testFiles[0].commentsUnread;
+			fileList.setFiles(testFiles);
+			var $tr = fileList.findFileEl('One.txt');
+			var data = fileList.elementToFile($tr);
+			expect(data.commentsUnread).not.toBeDefined();
+		});
+		it('does not set comment count when zero', function() {
+			testFiles[0].commentsUnread = 0;
+			fileList.setFiles(testFiles);
+			var $tr = fileList.findFileEl('One.txt');
+			var data = fileList.elementToFile($tr);
+			expect(data.commentsUnread).not.toBeDefined();
+		});
+	});
+});
diff --git a/core/img/actions/comment.png b/core/img/actions/comment.png
new file mode 100644
index 0000000000000000000000000000000000000000..7ca20eba363b77d280b976c690ce778e9c4d2fbe
GIT binary patch
literal 169
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa4)6(a1=6^{l)y&{Ksk<*AirP+
zBTJ_@A3lFkE!?yhC}!&E;uyjaot)6n+|$>`=PtnPQNBg1K|&#hNAzVzyP=grkc<FZ
n42vh%D$&^@vpiUC7_}%f{Nqts_A$bDJIF#$S3j3^P6<r_-)Sf^

literal 0
HcmV?d00001

diff --git a/core/img/actions/comment.svg b/core/img/actions/comment.svg
new file mode 100644
index 00000000000..a8ab95e615b
--- /dev/null
+++ b/core/img/actions/comment.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.0" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <path style="color:#000000;block-progression:tb;text-transform:none;text-indent:0" d="m2.3496 1.002c-0.1975 0.0382-0.3531 0.2333-0.3496 0.4375v13.122c0 0.23 0.2061 0.438 0.4316 0.438h11.138c0.226 0 0.432-0.208 0.432-0.438v-10.142c-0.004-0.0669-0.023-0.133-0.055-0.1915l-3.312-3.1992c-0.043-0.0164-0.089-0.0255-0.135-0.0273h-8.0684c-0.0268-0.00265-0.0552-0.00265-0.082 0zm1.6504 1.998h6v1h-6v-1zm0 3h5v1h-5v-1zm0 3h8v1h-8v-1zm0 3h4v1h-4v-1z"/>
+</svg>
diff --git a/tests/karma.config.js b/tests/karma.config.js
index 4a7a9ad236e..fddcfb319eb 100644
--- a/tests/karma.config.js
+++ b/tests/karma.config.js
@@ -90,7 +90,7 @@ module.exports = function(config) {
 					'apps/comments/js/commentmodel.js',
 					'apps/comments/js/commentcollection.js',
 					'apps/comments/js/commentstabview.js',
-					'apps/comments/js/filesplugin'
+					'apps/comments/js/filesplugin.js'
 				],
 				testFiles: ['apps/comments/tests/js/**/*.js']
 			},
-- 
GitLab