From 73ae6ea6f33329a145a2dbddd0b6c6376a37535c Mon Sep 17 00:00:00 2001 From: Ben Gotow Date: Fri, 31 Jul 2015 12:34:24 -0700 Subject: [PATCH] fix(T2387): Use better file icons from SDW Summary: fix misc spec failure by making event store fetch immediately on setup add specs for displayExtension, displayName Test Plan: Run new tests Reviewers: evan Maniphest Tasks: T2387 Differential Revision: https://phab.nylas.com/D1821 --- .../attachments/lib/attachment-component.cjsx | 4 +- .../composer/lib/file-upload.cjsx | 3 +- spec-nylas/models/file-spec.coffee | 37 ++++++++++++++++++ spec-nylas/stores/event-store-spec.coffee | 2 +- src/flux/models/file.coffee | 10 +++++ static/images/attachments/file-doc@2x.png | Bin 1675 -> 16357 bytes static/images/attachments/file-docx@2x.png | Bin 1675 -> 16357 bytes .../images/attachments/file-fallback@2x.png | Bin 643 -> 15318 bytes static/images/attachments/file-ics@2x.png | Bin 0 -> 16079 bytes static/images/attachments/file-pdf@2x.png | Bin 1563 -> 16432 bytes static/images/attachments/file-ppt@2x.png | Bin 0 -> 16495 bytes static/images/attachments/file-pptx@2x.png | Bin 0 -> 16495 bytes static/images/attachments/file-xls@2x.png | Bin 0 -> 16569 bytes static/images/attachments/file-xlsx@2x.png | Bin 0 -> 16569 bytes static/images/attachments/file-zip@2x.png | Bin 1222 -> 16016 bytes 15 files changed, 51 insertions(+), 5 deletions(-) create mode 100644 static/images/attachments/file-ics@2x.png create mode 100644 static/images/attachments/file-ppt@2x.png create mode 100644 static/images/attachments/file-pptx@2x.png create mode 100644 static/images/attachments/file-xls@2x.png create mode 100644 static/images/attachments/file-xlsx@2x.png diff --git a/internal_packages/attachments/lib/attachment-component.cjsx b/internal_packages/attachments/lib/attachment-component.cjsx index 716991a39..5fa8ad35c 100644 --- a/internal_packages/attachments/lib/attachment-component.cjsx +++ b/internal_packages/attachments/lib/attachment-component.cjsx @@ -28,7 +28,7 @@ class AttachmentComponent extends React.Component + name="file-#{@props.file.displayExtension()}.png"/> {@props.file.displayName()} {@_renderFileActions()} @@ -89,7 +89,5 @@ class AttachmentComponent extends React.Component Actions.abortFetchFile(@props.file) event.stopPropagation() # Prevent 'onClickView' - _extension: -> @props.file.filename.split('.').pop() - module.exports = AttachmentComponent diff --git a/internal_packages/composer/lib/file-upload.cjsx b/internal_packages/composer/lib/file-upload.cjsx index 5f572f527..7e1589056 100644 --- a/internal_packages/composer/lib/file-upload.cjsx +++ b/internal_packages/composer/lib/file-upload.cjsx @@ -43,6 +43,7 @@ class FileUpload extends React.Component _basename: => path.basename(@props.uploadData.filePath) - _extension: -> path.extname(@_basename()).split('.').pop() + _extension: => + path.extname(@_basename())[1..-1] module.exports = FileUpload diff --git a/spec-nylas/models/file-spec.coffee b/spec-nylas/models/file-spec.coffee index b32f2bcf9..1cd98f445 100644 --- a/spec-nylas/models/file-spec.coffee +++ b/spec-nylas/models/file-spec.coffee @@ -1,6 +1,43 @@ +File = require '../../src/flux/models/file' test_file_path = "/path/to/file.jpg" describe "File", -> it "attempts to generate a new file upload task on creation", -> # File.create(test_file_path) + + describe "displayName", -> + it "should return the filename if populated", -> + f = new File(filename: 'Hello world.jpg', contentType: 'image/jpg') + expect(f.displayName()).toBe('Hello world.jpg') + f = new File(filename: 'a', contentType: 'image/jpg') + expect(f.displayName()).toBe('a') + + it "should return a good default name if a content type is populated", -> + f = new File(filename: '', contentType: 'image/jpg') + expect(f.displayName()).toBe('Unnamed Image.jpg') + f = new File(filename: null, contentType: 'image/jpg') + expect(f.displayName()).toBe('Unnamed Image.jpg') + f = new File(filename: null, contentType: 'text/calendar') + expect(f.displayName()).toBe('Event.ics') + + it "should return Unnamed Attachment otherwise", -> + f = new File(filename: '', contentType: null) + expect(f.displayName()).toBe('Unnamed Attachment') + f = new File(filename: null, contentType: '') + expect(f.displayName()).toBe('Unnamed Attachment') + f = new File(filename: null, contentType: null) + expect(f.displayName()).toBe('Unnamed Attachment') + + describe "displayExtension", -> + it "should return an extension based on the filename when populated", -> + f = new File(filename: 'Hello world.jpg', contentType: 'image/jpg') + expect(f.displayExtension()).toBe('jpg') + f = new File(filename: 'a', contentType: 'image/jpg') + expect(f.displayExtension()).toBe('') + + it "should return an extension based on the default filename otherwise", -> + f = new File(filename: '', contentType: 'image/jpg') + expect(f.displayExtension()).toBe('jpg') + f = new File(filename: null, contentType: 'text/calendar') + expect(f.displayExtension()).toBe('ics') diff --git a/spec-nylas/stores/event-store-spec.coffee b/spec-nylas/stores/event-store-spec.coffee index b2f5a47cb..56662d81b 100644 --- a/spec-nylas/stores/event-store-spec.coffee +++ b/spec-nylas/stores/event-store-spec.coffee @@ -62,4 +62,4 @@ describe "EventStore", -> third = EventStore.getEvent(3) expect(third.title).toBe 'Test3' fourth = EventStore.getEvent(4) - expect(fourth.title).toBe 'Test4' \ No newline at end of file + expect(fourth.title).toBe 'Test4' diff --git a/src/flux/models/file.coffee b/src/flux/models/file.coffee index c645a7e69..8da80ab0a 100644 --- a/src/flux/models/file.coffee +++ b/src/flux/models/file.coffee @@ -1,3 +1,4 @@ +path = require 'path' Model = require './model' Actions = require '../actions' Attributes = require '../attributes' @@ -66,4 +67,13 @@ class File extends Model else return "Unnamed Attachment" + # Public: Returns the file extension that should be used for this file. + # Note that asking for the displayExtension is more accurate than trying to read + # the extension directly off the filename, and may be based on contentType. + # + # Returns the extension without the leading '.' (ex: 'png', 'pdf') + # + displayExtension: -> + path.extname(@displayName())[1..-1] + module.exports = File diff --git a/static/images/attachments/file-doc@2x.png b/static/images/attachments/file-doc@2x.png index 245ba46bda296ac9339d027df871460f02ab18a9..9bed6d792dc96436fc653fabeb11213b11cf183d 100644 GIT binary patch literal 16357 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 diff --git a/static/images/attachments/file-docx@2x.png b/static/images/attachments/file-docx@2x.png index 245ba46bda296ac9339d027df871460f02ab18a9..9bed6d792dc96436fc653fabeb11213b11cf183d 100644 GIT binary patch literal 16357 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 diff --git a/static/images/attachments/file-fallback@2x.png b/static/images/attachments/file-fallback@2x.png index 7014a9905322021a61f9fd0abbff159190017096..f05ba9631cee8ceabb1f51c8ba0f5dbeaef31a5b 100644 GIT binary patch literal 15318 zcmeI3Yitx%6vqcq14SAhA_Nm%hWJ8eXZGD4x67m3(h6IewuGV}%+B2H4&9wucBb8J zB>{OD3?v23W*3IBA`4HG4MgWv(M@6_NECKzuZlB zXU_fKbI#1~o^yA;%m;O~vqqLoETJfBWKDIT9v-d6ci7YLcYe?79(WiYuU?>0)QGXh zcL>$lHG!hMcjd+=y(u_{7uA?mkkk;crebk8o1%QvQgK0S0lFmwnq{S&zIEUm+9FHk z^n6#43&txzM6T{gfQF9RMzNzs^h)$Je~B-}!vHa$3zk$Ys%U(woKDB(;khx)(w6iT zy``L6L8|K^AFIPpz>% z4%m92sjUeSRJOrenOyAdbvayEoIa5ZWx#6(DR}@lL&>bvcBVii&hqSzZkaqO2HPU-Pl3Q(?sm@jyV(fge_+i{U(s-QEZ*l5_Czob$lC zGzH1bL}CP0Ne;Ici{a#*ZgULNOf&}UAW6`LK}9joHN}xcKCC8Ug6@}NLNj3FO0$nG z44P)<>x!>XqiOa|450yUdFA?XFzM_U}fY@fXFzPKH$_q&o<1RsF^anKSd7jE;=9rssR? z9Q?30<2UPSmQmLQcvrKGx)wa=DYEXjXR{&0CNJZEG_%Dwz(+pdce`8;mybn8ScfJv8OoQSszp=>bPJaN0X3s%q*4Z;Vj*SnNj%Y2cJ6G{9|Xo2F>qekMpE( zM~^cq5{o23fZ$Dn3(p5p2`&T(-Xys2d=Qo3LV(~+f(y?FQ3);t2;L;P@O%)J;6i}l zO@a&02T=(w1PInR~DM$MMtYRZP|9P78hg>p!>1o%8A5kJpUZ zSnAI2^ms#yvur3AITOM5r`$=SmvFLzxSy1jmRSn;fjG=ITZhqf^9FRGmqD!sU{ z;o*_Jr^ei#_uU_>R-CxHE3#2Lb8gwiXRW=Z+om7?ZN=I%r|#bvw|K^~nd=)4KODQz zwY&brwJR-u-S~Xj&-?G)VOo}d|Lf+r&vxIuK7j_Z7F7;D*`fH)m$LhMdQ121jJ&aM z$8q&1X~*$-SEh`6>b(CSX87pf%d;1CufJ11J0TqmA3C>t>#i@CF5i1;(wb!0T6*l{ zuu03OGN-Q{T=B&1(1sp%_zR*hb*p>GQR%&HC9Bs>p^`_ok6<6XvU2ju&(^J37@xSc qaq*VtE>kZybRU&>PMg&AG*z|sz@#m`iys(o-quvs26oR}vg%(ODa@?^ literal 643 zcmeAS@N?(olHy`uVBq!ia0vp^YCvqr!3-oD4Yc45bDP46hOx7_4S6Fo+k-*%fF5lvott6XFV_v4SgCuKfM` z7b5lN&mXL6Fa^JW!Mu6%K7aoF@#9BK1^7k&|NsB*-#?(eKpTJm{{8D0$o&Z$xV{4^ z{gNQRUrT@ye)nA#?;9tAdthx!O?_EP(e|N zCpP5vd7xItByV>Yh7ML)4_1`6DX^CT`}oRPT9F9pST$|h%>RV9kY$^IM67t z@A%s1od-9(Nwg4p-A=p~y_&l7lpf^xWqy`)T6AfZ zQSDVft=<1my;lkCyeKAm@X^ZBtnjAxOIe%Oz1^65H!f%E^x0v;HhtFwY_{gT-EH`K z-m|=fS+m_f=<6;uk#1HCiT}OUTzZw-qUrBzuN}YSw&hviwy1nN*_>;ubskAY$Q`*^ zw!M7AZMjDZ=?WhsT3(g>d-bFyD6!Bbv(Dj+{vCapAAcq#{|@$ACMe9_F>B`bI)>Lh Wx@u;8eWJiHV(@hJb6Mw<&;$T0b=Y_S diff --git a/static/images/attachments/file-ics@2x.png b/static/images/attachments/file-ics@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..865b20509ed08d4504451823c63f404a3ba0e826 GIT binary patch literal 16079 zcmeI3dsGv57RN{H7Nx$bBI;@h@d+lGB#?x}NvymCGy*X^tc!IrnZRgXPzk7d~e`Zz8oSB0>$9O^zG$=A6R6%}o?C<_>lAj4BQ$^(00As{FGX%Xg-2UzZ zL#<+YQLnP+#1OkzW&tmYoyg-=CgLwgLo>&qXDB*G$ z9WSQLll+C4)EbE*G`u4nX-SzW7K>2=!|Cbiob&*W!ITX1#9}eb<->eFo1DQmFVS02 z8(VK4?+nrzClohhCc}V_4@)C2WqeOpZy_{YoAXK}yVC30aU0Q#n_Y3bIZDB~ zLkM}Tk`NP)S_~$o!Jw5nt1PAyAtNNjQB{m7aug%YPvp~*OG)F&fw*Pz=>S4Bxe3|fPUToWz}K;WK+-Mk!CCW+LWEvO#DBSU56 z0EZyd5)>DqJONk3R*7*QJ5a+%*+Ie}9y#N_n5w6qe|G5iYWsIeu`ea-!gF7p@bKvzh&bghhwpM4m zc5g+*{?8;K+n6jV)X_dX1nxH0mDxEz(cX?)t7E>1&m~_l&;Hrr>Mnz>^Qc|jWzev@EBYg&06LX6LX6LX6LX6LX2eG^(%SPQ|jW!R!ncKBo+x~mWAm#BWh!&#PQFU#jb3~E%>*uxk{3h zBoUZD9Vhi#ov|}u(v4*mwFNit2uyw>^1n*G0+(bDEwr-E3|{qd-O;w0M?Sdu#*oVi zrN5kge*eYUjBM7is?%%OUVrNE`*mYYW_x`W+Qz(7i9`}M>w_2XfApkz$R+EFBYS;Y z70gehFI#fr^wTP@_3u-+Ajxn0v6oMqM?dD>iH^!FxK)zWdi6n*$F|&BzvUm@Xg_ef zIe*Iu?Tc}be=T{DFur6^CL}&w(Wh_V({pXfpA>!flP#zD!|YF&KO0^>W9hnl|Mb<( z@%w`p4xQk85Iq_H_LyU%%KQg-l^(q?Vnp?G&fv+1JXfuJK={jM?3xsZJiYTlR@LJE z_fE4CBi=@Yb;Fa}r@lPQI#^WX@l`@X0+P`(^XJ3W9;r=A|ML2JJhObQa&=*0VMJS5J)XOHb8^ ztTleqcUF`*0Ezt^>KDR~ixAI6gsHw0@3*zxJ^PMepr5$3!s=61eyUZqH1Af%t?JT^ zd~}^hA0M2*;e^8T;t@?&d+UGjwo38+{q-v=H}&%or)4X*PE5@n+8FJ1z)U=lc&>UcKX~f|+Y#mHCK>+O-W@qe{Sd$SsMNHy^Ho(< z%kv}7EZBWbtIC`7g)XO|WSL)~G0FQ<^C4Y+YinyFwtmt({WgpX95d)bJ-=MFVbdnB zjf$Xk!?T|tLzV^?yvy0Vb3xHu|4m$Z&g@BLm6Zc>@mSVKkK59j()9E3r%T1_LiSzV zk;qcrNV73_@811`NjxVy`Y>zF&Yk0-ynjwwS9j+m=UL{5Cs(h3@vlRR*JsMs>ux}a zxnTt{Us{tkDhlEj6_3f!&sQJ4_ISd*`%Sm278OImmv3q2#qYWI=n<#hG`b=c`bKl~ z;lqammD5TpDkkXjG<#B%7wb(0)k)Qb@%v&qn`5I6A3rW?`o64r(YMvZu4zX?)mEQ} zMOPPXjGDMnq1+dDzg6;u?&$I36?gCYenu#YsT4gzsZwa z2f4CB#kpo=@ZiCRSX2LAz9(Ya#UJ{8UsF>NDF6JbfAM?lmdxrmKMr12SBFIvDiU)p z{pfLBz3p(=m8}DOFPFyeyZvMI_HggFcrl|dH3!%H;*)MRm$kN9x7v@&(TqTxjEl& tQ;Q&c?01co9+G?p< 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 literal 1563 zcmbtTiBpqD6yFaLgmB3bjv5eJ3;7ZV6oX*6G2s$0K&V)cg0>=}VpY`9HliYOE6gBO zkxLN;is3Bclt#*7AcO!ym{gF%A_fTI3J4Lp)>i+3zS-S({r0`x_jZ$*f!><9&u{<$ zO039q z07$|Cp#2Ph;qjdMAZGxSPBQ&j35L4;u`hI&w#q#p<+xhu|3m0k_433M-2k`WZ7ZCGNg+{18a)!zOrCK`u zKk*ZX7#L*u$&;MO$lU}21CRf342e(}Y-HrAuYa3Dan{wf)7DNQk)X>Qhci`Ei!nEc zCx^pLPjBWQN=r+V$z;>h)1N~BKdH{kYi(_9RiWV9*gU4w-@!Z2&2{N@0J%A<&%?>Jw2U7;#zWYgRk#|P$)prF$QBHF0K~<{j0{t@wT?5*;&{`saQNE63vc| zDppn&XJ+J6Qwx)m3lkH|a{0>2%3NLD42Lt%<;uId7I?g=^z;cfdom&6twbU#E?ycL zk!EL4=jAPm#js$o16AqyZy@{bRB&JjK(HznmMFDdUs=hLh?2R%sEWuR)BKhn!QwRa5~%be9OFmDmr~=KbnZ6_D$Au~xq}U>s||x{ zdX@nKCbrdyIjqlO(qhH)#@3r7J91sl_wnUpx3(I474At5(-+)vxbU=*k&_lHoe_d2hi>A6mOht8NEh0{1M7-&%nfvwVO9c6|c&fUl z>J0bbNO^Bj^ywV~RcAJ0CT~i{U#0e@xo4HW7FZ8xD;H79kEQnin1;-=s*MwaA3SRG z&+$~w#G9Id>v&UV4CZQ;7Qs>Jp0;TR4d^+YQVkuh7;R0z95)$LWle zn$Q?hEHGX7jcUkQrA;arORey8V|+CKbYf$VyEkY~Cu}{Tb-Q=S7D4&6^9rJ?gQtG3 z%UKELnGFW7G!Sc`4@;D52@*0rfAYkc??S?;PeymXMtFO;je|Yvd9;`vdrhu;#%>Jw z)@?1$onXd&*|~GGj|s~hdo_MJ;fnVV7>>v&2zu(5PYQIRS!~)uaYe|9*HSc-lKO67 zML&q2Ci(Kda&$ityq{C6TPAk{U!S==!MysS>ZXGb?YfUg$#G6L!4p5d4N E2IDK3K>z>% diff --git a/static/images/attachments/file-ppt@2x.png b/static/images/attachments/file-ppt@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..1a5070280840f02f8194601e250ebd61c1384072 GIT binary patch literal 16495 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 I6@fed2XBTtFaQ7m literal 0 HcmV?d00001 diff --git a/static/images/attachments/file-pptx@2x.png b/static/images/attachments/file-pptx@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..1a5070280840f02f8194601e250ebd61c1384072 GIT binary patch literal 16495 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 I6@fed2XBTtFaQ7m literal 0 HcmV?d00001 diff --git a/static/images/attachments/file-xls@2x.png b/static/images/attachments/file-xls@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..013a63066cae99a8c79102e9d77f1ba0ac1fcb44 GIT binary patch literal 16569 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