Skip to content

Commit b96ba7c

Browse files
authored
Add display mode option (#747)
1 parent 80adc3b commit b96ba7c

File tree

3 files changed

+49
-1
lines changed

3 files changed

+49
-1
lines changed

src/config/index.mjs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,11 @@ export const TriggerMode = {
88
manually: 'Manually',
99
}
1010

11+
export const DisplayMode = {
12+
sidebar: 'Display in sidebar',
13+
floatingToolbar: 'Display in floating toolbar',
14+
}
15+
1116
export const ThemeMode = {
1217
light: 'Light',
1318
dark: 'Dark',
@@ -202,6 +207,8 @@ export const defaultConfig = {
202207

203208
/** @type {keyof TriggerMode}*/
204209
triggerMode: 'manually',
210+
/** @type {keyof DisplayMode}*/
211+
displayMode: 'sidebar',
205212
/** @type {keyof ThemeMode}*/
206213
themeMode: 'auto',
207214
/** @type {keyof Models}*/

src/content-script/index.jsx

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,11 +70,33 @@ async function mountComponent(siteConfig, userConfig) {
7070
unmountComponentAtNode(e)
7171
e.remove()
7272
})
73+
74+
const position = {
75+
x: window.innerWidth - 300 - (Math.floor((20 / 100) * window.innerWidth)),
76+
y: window.innerHeight / 2 - 200,
77+
}
78+
const toolbarContainer = createElementAtPosition(position.x, position.y)
79+
toolbarContainer.className = 'chatgptbox-toolbar-container-not-queryable'
80+
if (userConfig.displayMode === 'floatingToolbar') {
81+
render(
82+
<FloatingToolbar
83+
session={initSession({ modelName: userConfig.modelName })}
84+
selection={question}
85+
container={toolbarContainer}
86+
dockable={true}
87+
triggered={true}
88+
closeable={true}
89+
prompt={question}
90+
/>,
91+
toolbarContainer,
92+
)
93+
return
94+
}
7395
const container = document.createElement('div')
7496
container.id = 'chatgptbox-container'
7597
render(
7698
<DecisionCard
77-
session={initSession({ modelName: (await getUserConfig()).modelName })}
99+
session={initSession({ modelName: userConfig.modelName })}
78100
question={question}
79101
siteConfig={siteConfig}
80102
container={container}

src/popup/sections/GeneralPart.jsx

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import {
1414
Models,
1515
ThemeMode,
1616
TriggerMode,
17+
DisplayMode,
1718
isUsingMoonshotApi,
1819
} from '../../config/index.mjs'
1920
import Browser from 'webextension-polyfill'
@@ -118,6 +119,24 @@ export function GeneralPart({ config, updateConfig }) {
118119
})}
119120
</select>
120121
</label>
122+
<label>
123+
<legend>{t('DisplayMode')}</legend>
124+
<select
125+
required
126+
onChange={(e) => {
127+
const mode = e.target.value
128+
updateConfig({ displayMode: mode })
129+
}}
130+
>
131+
{Object.entries(DisplayMode).map(([key, desc]) => {
132+
return (
133+
<option value={key} key={key} selected={key === config.displayMode}>
134+
{t(desc)}
135+
</option>
136+
)
137+
})}
138+
</select>
139+
</label>
121140
<label>
122141
<legend>{t('Theme')}</legend>
123142
<select

0 commit comments

Comments
 (0)