From dca2048bab2883ae7076549d44c64fcea10144f1 Mon Sep 17 00:00:00 2001 From: Chad Little Date: Sat, 26 Jan 2013 17:04:18 -0800 Subject: [PATCH] Notifcation icons for Conpherence Summary: Adds notification icons for Conpherence and re-writes the CSS a bit for the new icons and states. I removed the background bubble here and went straight CSS. I also seem to have a JS error and the notification menu doesn't display, but I'm tired and wanted to look at this in Differential. Will update after JS fix. Test Plan: Turned on notification numbers and conpherence numbers, turned them off. Made them big. Checked FF and IE. Reviewers: epriestley, btrahan Reviewed By: btrahan CC: aran, Korvin Maniphest Tasks: T2415 Differential Revision: https://secure.phabricator.com/D4666 --- resources/sprite/manifest/menu.json | 23 +++-- resources/sprite/menu_1x/conf-hover.png | Bin 0 -> 1066 bytes resources/sprite/menu_1x/conf-off.png | Bin 0 -> 1066 bytes resources/sprite/menu_1x/conf-unseen.png | Bin 0 -> 1118 bytes resources/sprite/menu_2x/conf-hover.png | Bin 0 -> 1080 bytes resources/sprite/menu_2x/conf-off.png | Bin 0 -> 1082 bytes resources/sprite/menu_2x/conf-unseen.png | Bin 0 -> 1142 bytes src/__celerity_resource_map__.php | 92 +++++++++--------- .../celerity/CeleritySpriteGenerator.php | 29 ++++-- .../page/menu/PhabricatorMainMenuView.php | 61 ++++++++++-- .../css/application/base/main-menu-view.css | 62 +++++------- webroot/rsrc/css/sprite-menu.css | 30 +++--- webroot/rsrc/image/sprite-menu-X2.png | Bin 7385 -> 5819 bytes webroot/rsrc/image/sprite-menu.png | Bin 3334 -> 2473 bytes 14 files changed, 174 insertions(+), 123 deletions(-) create mode 100644 resources/sprite/menu_1x/conf-hover.png create mode 100644 resources/sprite/menu_1x/conf-off.png create mode 100644 resources/sprite/menu_1x/conf-unseen.png create mode 100644 resources/sprite/menu_2x/conf-hover.png create mode 100644 resources/sprite/menu_2x/conf-off.png create mode 100644 resources/sprite/menu_2x/conf-unseen.png diff --git a/resources/sprite/manifest/menu.json b/resources/sprite/manifest/menu.json index ffe5d117f2..d4a6bbbe40 100644 --- a/resources/sprite/manifest/menu.json +++ b/resources/sprite/manifest/menu.json @@ -11,10 +11,20 @@ "rule" : ".phabricator-crumb-divider", "hash" : "50180da0aed206c9db2bc1547c1a158c" }, - "bubble" : { - "name" : "bubble", - "rule" : ".phabricator-main-menu-alert-bubble.alert-unread", - "hash" : "42f6a2337a584ce99c964021ff3450ca" + "conf-hover" : { + "name" : "conf-hover", + "rule" : ".alert-notifications:hover .phabricator-main-menu-message-icon", + "hash" : "febc4135b2821ae2d3f0b06aa295ca0d" + }, + "conf-off" : { + "name" : "conf-off", + "rule" : ".alert-notifications .phabricator-main-menu-message-icon", + "hash" : "dc1b05cb611eaef76a09e8cff698c99d" + }, + "conf-unseen" : { + "name" : "conf-unseen", + "rule" : ".alert-notifications.message-unread .phabricator-main-menu-message-icon", + "hash" : "1f7d54b2b9781099f867b100ebdd6c6a" }, "eye" : { "name" : "eye", @@ -26,11 +36,6 @@ "rule" : ".phabricator-main-menu-logo-image", "hash" : "6eadea2c3dd2ada989eba22b6769b3eb" }, - "round_bubble" : { - "name" : "round_bubble", - "rule" : ".phabricator-main-menu-alert-bubble", - "hash" : "9710a3fa4a5fbfde3d81ad66863cdde0" - }, "seen_have_unread" : { "name" : "seen_have_unread", "rule" : ".alert-notifications:hover .phabricator-main-menu-alert-icon", diff --git a/resources/sprite/menu_1x/conf-hover.png b/resources/sprite/menu_1x/conf-hover.png new file mode 100644 index 0000000000000000000000000000000000000000..a023af58c93ae3df649ad859e27f248c709427c0 GIT binary patch literal 1066 zcmbVLO=#0l9M2r68%$&aKZb0N>@sD|SDQ2qt0PTX8(iw>3KkSxn!L4POJ0_|*=%^| zyzTD6qX$98z=H=b9u&POco7jqym{~_g5HGr(yr6PR4^oY@BQEZ_xpcuFH|m#437^} z6g6U$^(t9UB;WC)*l;-Bag8X9VYeyf~Kh1xj3-w6^KCtHeEkYe|hqh2CkE*uZkvT1{!R+<;@T-ZdPjc z=8Bzj=(&qvHdY9M2eAcWZ`F^KI8S$Z6|zsnEDgFUcqLEwoT{4(Ktmw}B9l(p9M1zu zV)%?GN&E~DI9^~m@=7T_qll6sWWoMJ6KkQftW@>VzAbXf(=Chxg=O3AHq%ZsC~UHP zE|*I<1R+Hd0RA zppOkbPm>$QaUF#dWRk^fhRX_^B=fw?$?1Zu7Iaz4X>vN#=Qs>2>$0dyqAZqVjpvJk ztm_4}#A#Vg5({FX*vA@vge~8OeY-BPTjFJvFNj5gRsV=pv=CYtg*Aj$`yH^*LKsCY z6aZ~e0@J2tyM7`#pA@JUuMR`^CUi<6@<2DkihGC$T;^Yq_pr|YWQ`@xut|IT)-HV! z>A_@s(EQ|ZFh0;HGZQAmap$8>2CHu9YAycI__4P)H<;^eZ_PhDLZ3=q`#w<~I=S;% zyI#8sUY7<&XU6Wm+?g^y9UJ}Dc_+{h&Mn<~E}!naA2@Sk(pbBon$zQ3kH3!X4!zj9 bPj#q4>hkV{(0ueZOs3Z;R`iF3rQ1INcCbmx literal 0 HcmV?d00001 diff --git a/resources/sprite/menu_1x/conf-off.png b/resources/sprite/menu_1x/conf-off.png new file mode 100644 index 0000000000000000000000000000000000000000..34674f597c3dbed491b2c68c833719b749dc1fee GIT binary patch literal 1066 zcmbVL&ui0A9M7yj=3pMSgF3`LvdboGezi%{usZUib%AA$u3&F2P2SqDB`-_fY&Ul3 zyzS~iJbDmh3SI;cdQkK-#fyR<9z^gD5JAC%FkiZMdKfzxlDzl6@B8_De{avvT^Sr0 z8K5X?(3~;KWIdC7{U^zPbSC|dEa!2tiWkrlZrTx~R2S7CFnzlY%g}b$S6{;^ib^%S zN)=bFS;avq3tX~3~I3M1qJ%sv*$GM+yZ?~v^Xo&VZ)o*h~UD; zT*cW~cJeMgeHl!(6hh!bY=f4+62wZYKzDc*vQNY;4LT}#xj^qbRkh}Ujv@#|CX;qJ zo(Gb|@L5rk_(>peyufngmC}4x5hX>)f$l>SYmvL8l#No?7C9B@2F9Vnvdw0bX=WG{ z)mc8D&nFy$kR}@Gcs;;&D;>mRJq82DPUMByLjgz_?HXFc1)6xeAA%oR)&X%4cN0ZY z#fwa6j$SQ_hrN$!p|lqeE!l&g_Piej%A z$XWAYfK8)7lN-kMT!j;4lEqw>%L$w$^SsQ-8BJC-LzeQooXPe$4#UcZEUJ>IizQj- z`Jx~jhNhM{J*P{eCThhV)(m272M+An^@!arRyz`_=n=FriYf@L^g3X^fiQ|2CYo~{?gCWU#@BjY4-~an!SLfk| z`d#$|K{RCBl^kBT2H)mQ_`kb7JcXB?DBXj)oqkl(JV?lf(+5G;(h4vKHDlz=bJ#)< zp`w}ZK|N}Rq&rqb3v?o7%f)DdXlX0Enmzy#=z|5*PLN+8J|Tf=B*+t-N~>-P7R~li z4|b1s=JnA5T{OtHR?t$GFo6Y;2Fli;?MvkZS>cuNJ`htRsHmWU1i9i=kJ<%Njt2o3 ziH3EWVF1rZm>9?N%t64?3`^1Y<-<%&;&_RTgX%+KYo5_B<&;d-7Ct4&B0{c2QKeET zQi?_#uRt-PCXrru>An{GaFb#=j1)RlrjE=K3FEETi3(=$?Cl!GgQ$jRW<5&wTC;}(* zJk4c<6vL!hK~a)&hEBy(JeTB>=^8d``$)5OShH(lyDL~Ovo2Ojc~C=+mv@}OS_gC$ z9pv~$#|5cw9_&>$-LwP2zMw!W@hZ?WhoO=291B!3ESYO~K(lf@%87DRs74-D7@3cy z<7|xQGklV)VvYaF8ik#qg7)~QU1}oSgTZ#S`SD?Oe4veI#>2yLd(WHec(5*I6**si z*SD~|+!hiiu8@-tj_&vndb?5i@|zaV%a`k(&MnT|B(_}L@ak@Kf?JyVKB-(ta!U)} zt|^n}woQJ_zJ5kb{rWtAcs4dR|Knmu88_-+NYV9 zFI_dhefwDR{^$GB_hv)4LO}g_JU@QptCJC)s=M53P`F APXGV_ literal 0 HcmV?d00001 diff --git a/resources/sprite/menu_2x/conf-hover.png b/resources/sprite/menu_2x/conf-hover.png new file mode 100644 index 0000000000000000000000000000000000000000..58a986cf822130aa844e783d5c7cffd0a0c585c3 GIT binary patch literal 1080 zcmaJ=T}u>E7#>^uK+}-GOu`OhMuEGtGwzJ;;3n$qwi}JuxYbewjx$Gh(3vyN9Nk@^ z&~Ey`$cyqK2!y1IYPIMqTZqZJ3#J&dc*W@8`ME*>SS0 zq`HKnsIo*{QpkG9`}XW2f2Zv89kLw6(G>1Ny*Q&fkZRRY4+IHQ?Sl$b_1xehY^EsR z5hIzxDfzUhAv2(Qm_XLF37evtTe7yQ^+ODLV4q<{=~zm`o-U z$TS3y)5oykaM;t}I6p!7-JFHhtlx5L^9mAlHOH{Afh^!Dsy%23M`#l1Mhd3AC2P5x zWg-P*vZ~FnfuNUC9w^KIhnnUV+Qkaoj`yF!ZZc;>Mu9FGax~Jo-dfL%RI21kXR%btkUB%tm)eT3Mb)hvc&Ca}aC!G&xp6)0S zVG1e<5gw9+x+)P`K}1kt5p@WHI@O^dh@eA31swu=v%1=$ZJ3$&-k;y^_y2rz$-eH| z>ciC-hSer|_!L@?IN!c1^fznYFQTOZ#xk&9&%uId0<25cvj9)1;t)syQJxrm0YVs7 zc~nVfU`FWWBwZy%2SeJbf!G)p>a-0}8U_&0f+0l<6JH-ZB5*|x6Q@{#7K|v!D?O7Y z=%4IMOOwM=P$oJ%@Q}?R0Tn-tEkipjhVbt|tMc(mV#w+N!7XpW(^$PffBp;=JWB#_|41kxZCMds*O7ZZs4c{U!1 zF-*)G2>RONG|w{rHgCimVM|$%N*|+3pN3I_!)-(9pb_Xs|cV%~qgGaWlbprR}%b z-j6dpC;BR(^W9^z*<|F>>X`45&%A`5y;*^L2MCj5`BH z%QyGy55jak&Ae(@yZj|}cJOm|(|7+uRqIOE$=grj7Z+ET&dYmR51wWt#|`Y-jH~_j z5A4mz2HUZgde(d&%Pcjg+&y!y`hocBO#NVdekQ$sDYJhi*Kp`UT`jqMb(w3t9tzsO c{L`+A8q9CbKb*Rk8+UGVBG$*>ikzAH16t=<&j0`b literal 0 HcmV?d00001 diff --git a/resources/sprite/menu_2x/conf-unseen.png b/resources/sprite/menu_2x/conf-unseen.png new file mode 100644 index 0000000000000000000000000000000000000000..f35ae10129b01a70b009058cca2298104fb23819 GIT binary patch literal 1142 zcmeAS@N?(olHy`uVBq!ia0vp^G9b*s1|*Ak?@s|zk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+m{l@EB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`f(~1RD^r68eAMwS&*t9 zlvO-#2=9ZF3nBND}m`vLFl!_sTY(OatnYqyQCInmZhe+73JqDfIV%MiN!4ju8xKl zZsu;LZWgZC-2%~@g2gQmy%q*I_38s1qYsK&q^O1o0n-nN2~W5{4m|0n<^j`t5ins( zE|FLZ%oHy?T^vIyZYBNs|KFb3mQk2_F5_L@lt#l%Vul}>SMoZ%aY(i1V<KgX>F z!e@hD-nZYsLU0L7v&2K^5bn(R{Qv*_^t`X&y7@x?rx4Erhwhi~U%GGqLS{*QeZVX) z^NA8m>|e?*+5cjm7ypG7+ZsXxCB)b+Y_dBNcB!W2YNQ84baOhRfchftxVe*^vL*;k z<=+_P7WdG1N7bSmMkd_#7w;Ht>G|LOY}&%@nHhPK90q*9r array( - 'hash' => '11017d94e949aa169361b966716e8729', - 'uri' => '/res/11017d94/rsrc/image/sprite-menu-X2.png', + 'hash' => 'ad544a9287ca73b9e0d3f549834701ee', + 'uri' => '/res/ad544a92/rsrc/image/sprite-menu-X2.png', 'disk' => '/rsrc/image/sprite-menu-X2.png', 'type' => 'png', ), '/rsrc/image/sprite-menu.png' => array( - 'hash' => 'ba0f7d61f49ea50e9c3ff93b160e14c5', - 'uri' => '/res/ba0f7d61/rsrc/image/sprite-menu.png', + 'hash' => '8a6822c29bfa6f33db1c1b8b02b5c6d3', + 'uri' => '/res/8a6822c2/rsrc/image/sprite-menu.png', 'disk' => '/rsrc/image/sprite-menu.png', 'type' => 'png', ), @@ -2712,7 +2712,7 @@ celerity_register_resource_map(array( ), 'phabricator-main-menu-view' => array( - 'uri' => '/res/a38edb46/rsrc/css/application/base/main-menu-view.css', + 'uri' => '/res/38ec42d4/rsrc/css/application/base/main-menu-view.css', 'type' => 'css', 'requires' => array( @@ -3308,7 +3308,7 @@ celerity_register_resource_map(array( ), 'sprite-menu-css' => array( - 'uri' => '/res/3d9f75af/rsrc/css/sprite-menu.css', + 'uri' => '/res/8e6624b0/rsrc/css/sprite-menu.css', 'type' => 'css', 'requires' => array( @@ -3345,7 +3345,7 @@ celerity_register_resource_map(array( ), array( 'packages' => array( - 'd935fc46' => + '6031cfb4' => array( 'name' => 'core.pkg.css', 'symbols' => @@ -3389,7 +3389,7 @@ celerity_register_resource_map(array( 36 => 'phabricator-object-item-list-view-css', 37 => 'global-drag-and-drop-css', ), - 'uri' => '/res/pkg/d935fc46/core.pkg.css', + 'uri' => '/res/pkg/6031cfb4/core.pkg.css', 'type' => 'css', ), '66dca903' => @@ -3579,19 +3579,19 @@ celerity_register_resource_map(array( 'reverse' => array( 'aphront-attached-file-view-css' => 'e30a3fa8', - 'aphront-crumbs-view-css' => 'd935fc46', - 'aphront-dialog-view-css' => 'd935fc46', - 'aphront-error-view-css' => 'd935fc46', - 'aphront-form-view-css' => 'd935fc46', + 'aphront-crumbs-view-css' => '6031cfb4', + 'aphront-dialog-view-css' => '6031cfb4', + 'aphront-error-view-css' => '6031cfb4', + 'aphront-form-view-css' => '6031cfb4', 'aphront-headsup-action-list-view-css' => 'ec01d039', - 'aphront-headsup-view-css' => 'd935fc46', - 'aphront-list-filter-view-css' => 'd935fc46', - 'aphront-pager-view-css' => 'd935fc46', - 'aphront-panel-view-css' => 'd935fc46', - 'aphront-table-view-css' => 'd935fc46', - 'aphront-tokenizer-control-css' => 'd935fc46', - 'aphront-tooltip-css' => 'd935fc46', - 'aphront-typeahead-control-css' => 'd935fc46', + 'aphront-headsup-view-css' => '6031cfb4', + 'aphront-list-filter-view-css' => '6031cfb4', + 'aphront-pager-view-css' => '6031cfb4', + 'aphront-panel-view-css' => '6031cfb4', + 'aphront-table-view-css' => '6031cfb4', + 'aphront-tokenizer-control-css' => '6031cfb4', + 'aphront-tooltip-css' => '6031cfb4', + 'aphront-typeahead-control-css' => '6031cfb4', 'differential-changeset-view-css' => 'ec01d039', 'differential-core-view-css' => 'ec01d039', 'differential-inline-comment-editor' => 'ac53d36a', @@ -3605,7 +3605,7 @@ celerity_register_resource_map(array( 'differential-table-of-contents-css' => 'ec01d039', 'diffusion-commit-view-css' => 'c8ce2d88', 'diffusion-icons-css' => 'c8ce2d88', - 'global-drag-and-drop-css' => 'd935fc46', + 'global-drag-and-drop-css' => '6031cfb4', 'inline-comment-summary-css' => 'ec01d039', 'javelin-aphlict' => '66dca903', 'javelin-behavior' => 'fbeded59', @@ -3675,48 +3675,48 @@ celerity_register_resource_map(array( 'javelin-util' => 'fbeded59', 'javelin-vector' => 'fbeded59', 'javelin-workflow' => 'fbeded59', - 'lightbox-attachment-css' => 'd935fc46', + 'lightbox-attachment-css' => '6031cfb4', 'maniphest-task-summary-css' => 'e30a3fa8', 'maniphest-transaction-detail-css' => 'e30a3fa8', 'phabricator-busy' => '66dca903', 'phabricator-content-source-view-css' => 'ec01d039', - 'phabricator-core-buttons-css' => 'd935fc46', - 'phabricator-core-css' => 'd935fc46', - 'phabricator-crumbs-view-css' => 'd935fc46', - 'phabricator-directory-css' => 'd935fc46', + 'phabricator-core-buttons-css' => '6031cfb4', + 'phabricator-core-css' => '6031cfb4', + 'phabricator-crumbs-view-css' => '6031cfb4', + 'phabricator-directory-css' => '6031cfb4', 'phabricator-drag-and-drop-file-upload' => 'ac53d36a', 'phabricator-dropdown-menu' => '66dca903', 'phabricator-file-upload' => '66dca903', - 'phabricator-filetree-view-css' => 'd935fc46', - 'phabricator-flag-css' => 'd935fc46', - 'phabricator-form-view-css' => 'd935fc46', - 'phabricator-header-view-css' => 'd935fc46', - 'phabricator-jump-nav' => 'd935fc46', + 'phabricator-filetree-view-css' => '6031cfb4', + 'phabricator-flag-css' => '6031cfb4', + 'phabricator-form-view-css' => '6031cfb4', + 'phabricator-header-view-css' => '6031cfb4', + 'phabricator-jump-nav' => '6031cfb4', 'phabricator-keyboard-shortcut' => '66dca903', 'phabricator-keyboard-shortcut-manager' => '66dca903', - 'phabricator-main-menu-view' => 'd935fc46', + 'phabricator-main-menu-view' => '6031cfb4', 'phabricator-menu-item' => '66dca903', - 'phabricator-nav-view-css' => 'd935fc46', + 'phabricator-nav-view-css' => '6031cfb4', 'phabricator-notification' => '66dca903', - 'phabricator-notification-css' => 'd935fc46', - 'phabricator-notification-menu-css' => 'd935fc46', - 'phabricator-object-item-list-view-css' => 'd935fc46', + 'phabricator-notification-css' => '6031cfb4', + 'phabricator-notification-menu-css' => '6031cfb4', + 'phabricator-object-item-list-view-css' => '6031cfb4', 'phabricator-object-selector-css' => 'ec01d039', 'phabricator-paste-file-upload' => '66dca903', 'phabricator-prefab' => '66dca903', 'phabricator-project-tag-css' => 'e30a3fa8', - 'phabricator-remarkup-css' => 'd935fc46', + 'phabricator-remarkup-css' => '6031cfb4', 'phabricator-shaped-request' => 'ac53d36a', - 'phabricator-side-menu-view-css' => 'd935fc46', - 'phabricator-standard-page-view' => 'd935fc46', + 'phabricator-side-menu-view-css' => '6031cfb4', + 'phabricator-standard-page-view' => '6031cfb4', 'phabricator-textareautils' => '66dca903', 'phabricator-tooltip' => '66dca903', - 'phabricator-transaction-view-css' => 'd935fc46', - 'phabricator-zindex-css' => 'd935fc46', - 'sprite-apps-large-css' => 'd935fc46', - 'sprite-gradient-css' => 'd935fc46', - 'sprite-icon-css' => 'd935fc46', - 'sprite-menu-css' => 'd935fc46', - 'syntax-highlighting-css' => 'd935fc46', + 'phabricator-transaction-view-css' => '6031cfb4', + 'phabricator-zindex-css' => '6031cfb4', + 'sprite-apps-large-css' => '6031cfb4', + 'sprite-gradient-css' => '6031cfb4', + 'sprite-icon-css' => '6031cfb4', + 'sprite-menu-css' => '6031cfb4', + 'syntax-highlighting-css' => '6031cfb4', ), )); diff --git a/src/infrastructure/celerity/CeleritySpriteGenerator.php b/src/infrastructure/celerity/CeleritySpriteGenerator.php index be81839173..c6b2ac23d0 100644 --- a/src/infrastructure/celerity/CeleritySpriteGenerator.php +++ b/src/infrastructure/celerity/CeleritySpriteGenerator.php @@ -87,16 +87,6 @@ final class CeleritySpriteGenerator { $sprites = array(); $sources = array( - 'round_bubble' => array( - 'x' => 26, - 'y' => 26, - 'css' => '.phabricator-main-menu-alert-bubble' - ), - 'bubble' => array( - 'x' => 46, - 'y' => 26, - 'css' => '.phabricator-main-menu-alert-bubble.alert-unread' - ), 'seen_read_all' => array( 'x' => 14, 'y' => 14, @@ -135,6 +125,25 @@ final class CeleritySpriteGenerator { 'y' => 25, 'css' => '.phabricator-main-menu-logo-image', ), + 'conf-off' => array( + 'x' => 14, + 'y' => 14, + 'css' => + '.alert-notifications .phabricator-main-menu-message-icon', + ), + 'conf-hover' => array( + 'x' => 14, + 'y' => 14, + 'css' => + '.alert-notifications:hover .phabricator-main-menu-message-icon', + ), + 'conf-unseen' => array( + 'x' => 14, + 'y' => 14, + 'css' => + '.alert-notifications.message-unread '. + '.phabricator-main-menu-message-icon', + ), ); $scales = array( diff --git a/src/view/page/menu/PhabricatorMainMenuView.php b/src/view/page/menu/PhabricatorMainMenuView.php index f3c3596719..1283e7d897 100644 --- a/src/view/page/menu/PhabricatorMainMenuView.php +++ b/src/view/page/menu/PhabricatorMainMenuView.php @@ -292,6 +292,59 @@ final class PhabricatorMainMenuView extends AphrontView { require_celerity_resource('phabricator-notification-menu-css'); require_celerity_resource('sprite-menu-css'); + $container_classes = array( + 'sprite-menu', + 'alert-notifications', + ); + + $conpherence = id(new PhabricatorApplicationConpherence())->isBeta(); + $allow_beta = + PhabricatorEnv::getEnvConfig('phabricator.show-beta-applications'); + $message_tag = ''; + + if (!$conpherence || $allow_beta) { + $message_id = celerity_generate_unique_node_id(); + $message_count_id = celerity_generate_unique_node_id(); + + $unread_status = ConpherenceParticipationStatus::BEHIND; + $unread = id(new ConpherenceParticipantQuery()) + ->withParticipantPHIDs(array($user->getPHID())) + ->withParticipationStatus($unread_status) + ->execute(); + $message_count_number = count($unread); + if ($message_count_number > 999) { + $message_count_number = "\xE2\x88\x9E"; + } + + $message_count_tag = phutil_render_tag( + 'span', + array( + 'id' => $message_count_id, + 'class' => 'phabricator-main-menu-message-count' + ), + phutil_escape_html($message_count_number)); + + $message_icon_tag = phutil_render_tag( + 'span', + array( + 'class' => 'sprite-menu phabricator-main-menu-message-icon', + ), + ''); + + if ($message_count_number) { + $container_classes[] = 'message-unread'; + } + + $message_tag = phutil_render_tag( + 'a', + array( + 'href' => '/conpherence/', + 'class' => implode(' ', $container_classes), + 'id' => $message_id, + ), + $message_icon_tag.$message_count_tag); + } + $count_id = celerity_generate_unique_node_id(); $dropdown_id = celerity_generate_unique_node_id(); $bubble_id = celerity_generate_unique_node_id(); @@ -318,11 +371,6 @@ final class PhabricatorMainMenuView extends AphrontView { ), ''); - $container_classes = array( - 'phabricator-main-menu-alert-bubble', - 'sprite-menu', - 'alert-notifications', - ); if ($count_number) { $container_classes[] = 'alert-unread'; } @@ -354,7 +402,8 @@ final class PhabricatorMainMenuView extends AphrontView { ), ''); - return array($bubble_tag, $notification_dropdown); + return array( + $bubble_tag.$message_tag, $notification_dropdown); } private function renderMenuIcon($name) { diff --git a/webroot/rsrc/css/application/base/main-menu-view.css b/webroot/rsrc/css/application/base/main-menu-view.css index cea71e0170..6ce50a0004 100644 --- a/webroot/rsrc/css/application/base/main-menu-view.css +++ b/webroot/rsrc/css/application/base/main-menu-view.css @@ -41,8 +41,6 @@ .phabricator-main-menu-logo { display: inline-block; - position: relative; - height: 44px; width: 139px; margin-right: 6px; padding-right: 6px; @@ -248,59 +246,45 @@ a:hover .phabricator-main-search-typeahead-result .result-type { */ -.device-desktop .phabricator-main-menu-alerts { - display: inline-block; -} - .device .phabricator-main-menu-alerts { - position: absolute; - left: 60px; - right: 60px; - top: 10px; - height: 34px; - text-align: center; + margin-left: 60px; } -.phabricator-main-menu-alert-bubble { +.phabricator-main-menu-alerts { display: inline-block; - position: relative; - width: 26px; - height: 26px; - margin-bottom: 9px; + border-radius: 15px; + background: rgba(0,0,0,.2); + height: 20px; + padding: 3px 10px; + margin-top: 9px; } -.phabricator-main-menu-alert-bubble.alert-unread { - width: 46px; -} - -.phabricator-main-menu-alert-icon { - position: absolute; +.phabricator-main-menu-alert-icon, +.phabricator-main-menu-message-icon { width: 14px; height: 14px; - top: 5px; - left: 6px; + display: block; + float: left; + margin: 2px 0 0 0; } -.phabricator-main-menu-alert-count { - position: absolute; +.alert-notifications .phabricator-main-menu-message-icon { + margin: 3px 0 0 8px; +} + +.phabricator-main-menu-alert-count, +.phabricator-main-menu-message-count { font-weight: bold; - line-height: 22px; - top: 1px; - right: 8px; - left: 20px; + line-height: 20px; color: #ffffff; text-align: center; display: none; + float: left; + margin-left: 3px; } -.phabricator-main-menu-alert-item { - width: 26px; - height: 26px; - margin: 9px; - display: block; -} - -.alert-unread .phabricator-main-menu-alert-count { +.alert-unread .phabricator-main-menu-alert-count, +.message-unread .phabricator-main-menu-message-count { display: block; } diff --git a/webroot/rsrc/css/sprite-menu.css b/webroot/rsrc/css/sprite-menu.css index dfa3a84e16..367081901b 100644 --- a/webroot/rsrc/css/sprite-menu.css +++ b/webroot/rsrc/css/sprite-menu.css @@ -13,19 +13,11 @@ only screen and (min-device-pixel-ratio: 1.5), only screen and (-webkit-min-device-pixel-ratio: 1.5) { .sprite-menu { background-image: url(/rsrc/image/sprite-menu-X2.png); - background-size: 140px 127px; + background-size: 140px 88px; } } -.phabricator-main-menu-alert-bubble { - background-position: 0px -68px; -} - -.phabricator-main-menu-alert-bubble.alert-unread { - background-position: 0px -41px; -} - .alert-notifications .phabricator-main-menu-alert-icon { background-position: 0px 0px; } @@ -35,21 +27,33 @@ only screen and (-webkit-min-device-pixel-ratio: 1.5) { } .alert-notifications.alert-unread .phabricator-main-menu-alert-icon { - background-position: -27px -68px; + background-position: -30px 0px; } .phabricator-crumb-divider { - background-position: 0px -95px; + background-position: 0px -56px; } .menu-icon-eye { - background-position: -47px -41px; + background-position: -10px -56px; } .menu-icon-app { - background-position: -42px -68px; + background-position: -35px -56px; } .phabricator-main-menu-logo-image { + background-position: 0px -30px; +} + +.alert-notifications .phabricator-main-menu-message-icon { background-position: 0px -15px; } + +.alert-notifications:hover .phabricator-main-menu-message-icon { + background-position: -15px -15px; +} + +.alert-notifications.message-unread .phabricator-main-menu-message-icon { + background-position: -30px -15px; +} diff --git a/webroot/rsrc/image/sprite-menu-X2.png b/webroot/rsrc/image/sprite-menu-X2.png index dde32caa00478f521166ae36ed8b0f319d70261d..715246694753d97aba14bfb11b601e62f1ae3a40 100644 GIT binary patch literal 5819 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 diff --git a/webroot/rsrc/image/sprite-menu.png b/webroot/rsrc/image/sprite-menu.png index dc89ff9ecffcc44f0f757fd12d9d23e30637783c..4eb96afad64c2df99539d2eb01bbab33476ef1c9 100644 GIT binary patch literal 2473 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