@@ -26,20 +26,23 @@ window.chatbar = {
26
26
if ( site == 'chatgpt' ) { // restore chatbar inner width
27
27
const inputArea = chatbarDiv . querySelector ( selectors . input )
28
28
if ( inputArea ) inputArea . style . width = inputArea . parentNode . style . width = 'initial'
29
- } else if ( site == 'perplexity' ) { // remove left-align Attach File button
30
- const attachFileBtn = chatbarDiv . querySelector ( selectors . btns . attachFile )
31
- if ( attachFileBtn ?. getAttribute ( 'left-aligned' ) ) {
29
+ } else if ( site == 'perplexity' ) { // remove left-align Attach File + Search buttons
30
+ const leftAlignedBtns = chatbarDiv . querySelectorAll ( '[left-aligned]' )
31
+ if ( leftAlignedBtns . length ) {
32
32
const sendBtn = chatbarDiv . querySelector ( selectors . btns . send ) ; if ( ! sendBtn ) return
33
- sendBtn . before ( attachFileBtn . parentNode ) ; attachFileBtn . removeAttribute ( 'left-aligned' )
34
- if ( await this . is . tall ( ) ) attachFileBtn . style . marginRight = ''
33
+ leftAlignedBtns . forEach ( btn => {
34
+ sendBtn . parentNode . before ( btn . parentNode ) // restore to left of Send
35
+ btn . style . margin = '' ; btn . removeAttribute ( 'left-aligned' ) // reset margins/attr
36
+ } )
37
+ chatbarDiv . querySelector ( 'button' ) . closest ( 'div' ) . style . marginRight = '' // reset gap
35
38
}
36
39
} else if ( site == 'poe' ) { // restore Poe Mic button position
37
40
const micBtn = chatbarDiv . querySelector ( selectors . btns . mic ) ; if ( ! micBtn ) return
38
41
micBtn . style . marginRight = ''
39
42
}
40
43
} ,
41
44
42
- async tweak ( ) { // update ChatGPT chatbar inner width or left-align Perplexity Attach File btn or move Poe Mic btn right
45
+ async tweak ( ) { // update ChatGPT chatbar inner width or left-align Perplexity btns or move Poe Mic btn right
43
46
const site = this . imports . site
44
47
const chatbarDiv = await this . get ( ) ; if ( ! chatbarDiv ) return
45
48
const selectors = this . imports . sites [ site ] . selectors
@@ -57,15 +60,18 @@ window.chatbar = {
57
60
widths . chatbar - totalBtnWidths - 43 } px`
58
61
inputArea . style . width = '100%' // rid h-scrollbar
59
62
}
60
- } else if ( site == 'perplexity' ) { // left-align Attach File button
61
- const attachFileBtn = chatbarDiv . querySelector ( selectors . btns . attachFile ) ; if ( ! attachFileBtn ) return
62
- let newParent = chatbarDiv
63
- if ( await this . is . tall ( ) ) { // select new newParent
64
- newParent = chatbarDiv . querySelector ( 'div:has(> span > button)' ) // left button cluster
65
- attachFileBtn . style . marginRight = '-10px' // bring Search button closer
66
- }
67
- newParent ?. children [ 1 ] ?. before ( attachFileBtn . parentNode )
68
- attachFileBtn . setAttribute ( 'left-aligned' , true )
63
+ } else if ( site == 'perplexity' ) { // left-align Attach File + Search buttons
64
+ const rightBtns = { } ; [ 'attachFile' , 'search' ] . forEach ( btnType =>
65
+ rightBtns [ btnType ] = chatbarDiv . querySelector ( selectors . btns [ btnType ] ) )
66
+ const modelSelectorDiv = chatbarDiv . querySelector ( 'button' ) . closest ( 'div' )
67
+ if ( ! modelSelectorDiv ) return // in case of breaking DOM update
68
+ Object . values ( rightBtns ) . forEach ( btn => {
69
+ if ( ! btn ) return
70
+ modelSelectorDiv . after ( btn . parentNode ) // move to right of selector
71
+ btn . style . margin = '0 -5px' // close x-gap
72
+ btn . setAttribute ( 'left-aligned' , true ) // for this.reset()
73
+ } )
74
+ if ( chatbarDiv . querySelector ( '[left-aligned]' ) ) modelSelectorDiv . style . marginRight = '3px' // close gap
69
75
} else if ( site == 'poe' ) // move Mic btn closer to Send
70
76
dom . get . loadedElem ( selectors . btns . mic , { timeout : 5000 } )
71
77
. then ( btn => { if ( btn ) btn . style . marginRight = '-7px' } )
0 commit comments