5
5
*/
6
6
'use strict' ;
7
7
8
+
8
9
// Board view. Inserts button next to assignee/due date.
9
- togglbutton . render ( '.BaseCard . BoardCardLayout:not(.toggl)' , { observe : true } ,
10
+ togglbutton . render ( '.BoardCardLayout:not(.toggl)' , { observe : true } ,
10
11
boadCardElem => {
11
12
if ( boadCardElem . querySelector ( '.toggl-button' ) ) {
12
13
// Due to the way this UI is rendered, we must check for existence of old buttons manually.
@@ -15,19 +16,11 @@ togglbutton.render('.BaseCard .BoardCardLayout:not(.toggl)', { observe: true },
15
16
16
17
const descriptionSelector = ( ) => boadCardElem . querySelector ( '.BoardCard-taskName' ) . textContent . trim ( ) ;
17
18
18
- const projectSelector = ( ) => {
19
- const projectElement = document . querySelector ( '.TopbarPageHeaderStructure-titleRow > h1' ) ;
20
- if ( ! projectElement ) return '' ;
21
-
22
- return projectElement . textContent . trim ( ) ;
23
- } ;
24
-
25
19
const link = togglbutton . createTimerLink ( {
26
20
className : 'asana-board-view' ,
27
21
description : descriptionSelector ,
28
- projectName : projectSelector ,
29
- buttonType : 'minimal'
30
- // N.B. tags cannot be supported on board view as the information is not available.
22
+ buttonType : 'minimal' ,
23
+ // N.B. Tags and ProjectName cannot be supported on board view as the information is not available.
31
24
} ) ;
32
25
33
26
const injectContainer = boadCardElem . querySelector ( '.BoardCardLayout-actionButtons' ) ;
@@ -134,39 +127,39 @@ togglbutton.render('.MyTasksTaskRow:not(.toggl)', { observe: true },
134
127
) ;
135
128
136
129
// Task detail. My Tasks, Spreadsheet, Board, ...
137
- togglbutton . render (
138
- '.SingleTaskPaneSpreadsheet:not(.toggl)' ,
139
- { observe : true } ,
140
- function ( elem ) {
141
- if ( $ ( '.toggl-button' , elem ) ) {
130
+ togglbutton . render ( '.TaskPane:not(.toggl)' , { observe : true } ,
131
+ taskPaneEl => {
132
+ if ( taskPaneEl . querySelector ( '.toggl-button' ) ) {
133
+ // Due to the way this UI is rendered, we must check for existence of old buttons manually.
142
134
return ;
143
135
}
144
136
145
- const descriptionSelector = ( ) => {
146
- return $ ( '.SingleTaskPaneSpreadsheet-titleRow textarea' , elem ) . textContent . trim ( ) ;
147
- } ;
137
+ const descriptionSelector = ( ) => taskPaneEl . querySelector ( '[aria-label="Task Name"]' ) . textContent . trim ( ) ;
148
138
149
139
const projectSelector = ( ) => {
150
- const projectEl = elem . querySelectorAll ( '.TaskProjectToken-potTokenizerPill' ) ;
151
- return [ ...projectEl ] . map ( el => el . textContent . trim ( ) ) ;
140
+ const projectElement = taskPaneEl . querySelector ( '.TokenizerPillBase-name' ) ;
141
+ if ( ! projectElement ) return '' ;
142
+
143
+ return projectElement . textContent . trim ( ) ;
152
144
} ;
153
145
154
146
const tagsSelector = ( ) => {
155
- const tags = elem . querySelectorAll ( '.TaskTagTokenPills .Pill ' ) ;
147
+ const tags = taskPaneEl . querySelectorAll ( '.TokenizerPillBase-name ' ) ;
156
148
return [ ...tags ] . map ( tag => tag . textContent . trim ( ) ) ;
157
- } ;
149
+ }
158
150
159
151
const link = togglbutton . createTimerLink ( {
160
- className : 'asana-board ' ,
152
+ className : 'TaskPaneToolbar-button ' ,
161
153
description : descriptionSelector ,
162
154
projectName : projectSelector ,
163
- tags : tagsSelector ,
164
- buttonType : 'minimal'
155
+ buttonType : 'minimal' ,
156
+ tags : tagsSelector
165
157
} ) ;
166
158
167
- link . style . margin = '0 5px' ;
159
+ const injectContainer = taskPaneEl . querySelector ( '.TaskPaneExtraActionsButton' ) ;
168
160
169
- const firstButton = elem . querySelector ( '.SingleTaskPaneToolbar-button' ) ;
170
- firstButton . parentNode . insertBefore ( link , firstButton ) ;
161
+ if ( injectContainer ) {
162
+ injectContainer . parentNode . insertBefore ( link , injectContainer . nextSibling ) ;
163
+ }
171
164
}
172
165
) ;
0 commit comments