Skip to content

Commit 37760bd

Browse files
committed
Centralized tooltip create/append/stylize to tooltip
1 parent b414205 commit 37760bd

File tree

10 files changed

+92
-105
lines changed

10 files changed

+92
-105
lines changed

amazongpt/greasemonkey/amazongpt.user.js

Lines changed: 25 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
// @description Adds the magic of AI to Amazon shopping
44
// @author KudoAI
55
// @namespace https://kudoai.com
6-
// @version 2025.3.31.3
6+
// @version 2025.3.31.4
77
// @license MIT
88
// @icon https://cdn.jsdelivr.net/gh/KudoAI/amazongpt@0fddfc7/assets/images/icons/amazongpt/black-gold-teal/icon48.png
99
// @icon64 https://cdn.jsdelivr.net/gh/KudoAI/amazongpt@0fddfc7/assets/images/icons/amazongpt/black-gold-teal/icon64.png
@@ -2321,8 +2321,12 @@
23212321
// * stateOrEvent: 'on'|'off' or button `event`
23222322

23232323
if (env.browser.isMobile) return
2324+
if (!tooltip.div) tooltip.div = dom.create.elem('div', { class: `${app.slug}-tooltip no-user-select` })
2325+
if (!tooltip.div.isConnected) appDiv.append(tooltip.div)
2326+
if (!tooltip.styles) tooltip.stylize()
2327+
23242328
if (stateOrEvent?.type == 'mouseleave' || stateOrEvent == 'off')
2325-
return tooltipDiv.style.opacity = 0
2329+
return tooltip.div.style.opacity = 0
23262330

23272331
const btn = stateOrEvent.currentTarget, btnType = /[^-]+-([\w-]+)-btn/.exec(btn.id)[1]
23282332
const baseText = (
@@ -2354,31 +2358,31 @@
23542358
: btnType == 'send' ? app.msgs.tooltip_sendReply
23552359
: btnType == 'shuffle' ? app.msgs.tooltip_askRandQuestion : '' )
23562360

2357-
// Update text
2358-
tooltipDiv.innerText = baseText
2359-
tooltip.nativeRpadding = tooltip.nativeRpadding
2360-
|| parseFloat(window.getComputedStyle(tooltipDiv).paddingRight)
2361-
clearInterval(tooltip.dotCycler)
2362-
if (baseText.endsWith('...')) { // animate the dots
2363-
const noDotText = baseText.slice(0, -3), dotWidth = 2.75 ; let dotCnt = 3
2364-
tooltip.dotCycler = setInterval(() => {
2365-
dotCnt = (dotCnt % 3) + 1 // cycle thru 1 → 2 → 3
2366-
tooltipDiv.innerText = noDotText + '.'.repeat(dotCnt)
2367-
tooltipDiv.style.paddingRight = `${ // adjust based on dotCnt
2368-
tooltip.nativeRpadding + (3 - dotCnt) * dotWidth }px`
2369-
}, 350)
2370-
} else // restore native right-padding
2371-
tooltipDiv.style.paddingRight = tooltip.nativeRpadding
2361+
// Update text
2362+
tooltip.div.innerText = baseText
2363+
tooltip.nativeRpadding = tooltip.nativeRpadding
2364+
|| parseFloat(window.getComputedStyle(tooltip.div).paddingRight)
2365+
clearInterval(tooltip.dotCycler)
2366+
if (baseText.endsWith('...')) { // animate the dots
2367+
const noDotText = baseText.slice(0, -3), dotWidth = 2.75 ; let dotCnt = 3
2368+
tooltip.dotCycler = setInterval(() => {
2369+
dotCnt = (dotCnt % 3) + 1 // cycle thru 1 → 2 → 3
2370+
tooltip.div.innerText = noDotText + '.'.repeat(dotCnt)
2371+
tooltip.div.style.paddingRight = `${ // adjust based on dotCnt
2372+
tooltip.nativeRpadding + (3 - dotCnt) * dotWidth }px`
2373+
}, 350)
2374+
} else // restore native right-padding
2375+
tooltip.div.style.paddingRight = tooltip.nativeRpadding
23722376

23732377
// Update position
2374-
const elems = { appDiv, btn, btnsDiv: btn.closest('[id*=btns], [class*=btns]'), tooltipDiv }
2378+
const elems = { appDiv, btn, btnsDiv: btn.closest('[id*=btns], [class*=btns]'), tooltipDiv: tooltip.div }
23752379
const rects = {} ; Object.keys(elems).forEach(key => rects[key] = elems[key]?.getBoundingClientRect())
2376-
tooltipDiv.style.top = `${ rects[rects.btnsDiv ? 'btnsDiv' : 'btn'].top - rects.appDiv.top -37 }px`
2377-
tooltipDiv.style.right = `${
2380+
tooltip.div.style.top = `${ rects[rects.btnsDiv ? 'btnsDiv' : 'btn'].top - rects.appDiv.top -37 }px`
2381+
tooltip.div.style.right = `${
23782382
rects.appDiv.right -( rects.btn.left + rects.btn.right )/2 - rects.tooltipDiv.width/2 }px`
23792383

23802384
// Show tooltip
2381-
tooltipDiv.style.opacity = 1
2385+
tooltip.div.style.opacity = 1
23822386
}
23832387
}
23842388

@@ -3060,9 +3064,6 @@
30603064
id: `${app.slug}-arrows-btn`, class: `${app.slug}-header-btn app-hover-only anchored-only`,
30613065
style: 'margin: 2.5px 13.5px 0 0' })
30623066
arrowsBtn.append(icons.arrowsDiagonal.create()) ; headerBtnsDiv.append(arrowsBtn)
3063-
3064-
// Add tooltips
3065-
appDiv.append(tooltipDiv)
30663067
}
30673068

30683069
// Add app header button listeners
@@ -3428,9 +3429,6 @@
34283429
['rpg', 'rpw'].forEach(cssType => // rising particles
34293430
document.head.append(dom.create.style(GM_getResourceText(`${cssType}CSS`))))
34303431

3431-
// Create/stylize TOOLTIPs
3432-
const tooltipDiv = dom.create.elem('div', { class: `${app.slug}-tooltip no-user-select` }) ; tooltip.stylize()
3433-
34343432
// APPEND AMAZONGPT to Amazon
34353433
document.body.append(appDiv)
34363434
setTimeout(() => appDiv.classList.add('active'), 350) // fade in

bravegpt/greasemonkey/bravegpt.user.js

Lines changed: 25 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@
148148
// @description:zu Yengeza izimpendulo ze-AI ku-Brave Search (inikwa amandla yi-GPT-4o!)
149149
// @author KudoAI
150150
// @namespace https://kudoai.com
151-
// @version 2025.3.31.6
151+
// @version 2025.3.31.7
152152
// @license MIT
153153
// @icon https://cdn.jsdelivr.net/gh/KudoAI/bravegpt@df624b0/assets/images/icons/bravegpt/icon48.png
154154
// @icon64 https://cdn.jsdelivr.net/gh/KudoAI/bravegpt@df624b0/assets/images/icons/bravegpt/icon64.png
@@ -2957,8 +2957,12 @@
29572957
// * stateOrEvent: 'on'|'off' or button `event`
29582958

29592959
if (env.browser.isMobile) return
2960+
if (!tooltip.div) tooltip.div = dom.create.elem('div', { class: `${app.slug}-tooltip no-user-select` })
2961+
if (!tooltip.div.isConnected) appDiv.append(tooltip.div)
2962+
if (!tooltip.styles) tooltip.stylize()
2963+
29602964
if (stateOrEvent?.type == 'mouseleave' || stateOrEvent == 'off')
2961-
return tooltipDiv.style.opacity = 0
2965+
return tooltip.div.style.opacity = 0
29622966

29632967
const btn = stateOrEvent.currentTarget, btnType = /[^-]+-([\w-]+)-btn/.exec(btn.id)[1]
29642968
const baseText = (
@@ -2993,31 +2997,31 @@
29932997
: btnType == 'shuffle' ? app.msgs.tooltip_askRandQuestion
29942998
: btnType == 'summarize' ? app.msgs.tooltip_summarizeResults : '' )
29952999

2996-
// Update text
2997-
tooltipDiv.innerText = baseText
2998-
tooltip.nativeRpadding = tooltip.nativeRpadding
2999-
|| parseFloat(window.getComputedStyle(tooltipDiv).paddingRight)
3000-
clearInterval(tooltip.dotCycler)
3001-
if (baseText.endsWith('...')) { // animate the dots
3002-
const noDotText = baseText.slice(0, -3), dotWidth = 2.75 ; let dotCnt = 3
3003-
tooltip.dotCycler = setInterval(() => {
3004-
dotCnt = (dotCnt % 3) + 1 // cycle thru 1 → 2 → 3
3005-
tooltipDiv.innerText = noDotText + '.'.repeat(dotCnt)
3006-
tooltipDiv.style.paddingRight = `${ // adjust based on dotCnt
3007-
tooltip.nativeRpadding + (3 - dotCnt) * dotWidth }px`
3008-
}, 350)
3009-
} else // restore native right-padding
3010-
tooltipDiv.style.paddingRight = tooltip.nativeRpadding
3000+
// Update text
3001+
tooltip.div.innerText = baseText
3002+
tooltip.nativeRpadding = tooltip.nativeRpadding
3003+
|| parseFloat(window.getComputedStyle(tooltip.div).paddingRight)
3004+
clearInterval(tooltip.dotCycler)
3005+
if (baseText.endsWith('...')) { // animate the dots
3006+
const noDotText = baseText.slice(0, -3), dotWidth = 2.75 ; let dotCnt = 3
3007+
tooltip.dotCycler = setInterval(() => {
3008+
dotCnt = (dotCnt % 3) + 1 // cycle thru 1 → 2 → 3
3009+
tooltip.div.innerText = noDotText + '.'.repeat(dotCnt)
3010+
tooltip.div.style.paddingRight = `${ // adjust based on dotCnt
3011+
tooltip.nativeRpadding + (3 - dotCnt) * dotWidth }px`
3012+
}, 350)
3013+
} else // restore native right-padding
3014+
tooltip.div.style.paddingRight = tooltip.nativeRpadding
30113015

30123016
// Update position
3013-
const elems = { appDiv, btn, btnsDiv: btn.closest('[id*=btns], [class*=btns]'), tooltipDiv }
3017+
const elems = { appDiv, btn, btnsDiv: btn.closest('[id*=btns], [class*=btns]'), tooltipDiv: tooltip.div }
30143018
const rects = {} ; Object.keys(elems).forEach(key => rects[key] = elems[key]?.getBoundingClientRect())
3015-
tooltipDiv.style.top = `${ rects[rects.btnsDiv ? 'btnsDiv' : 'btn'].top - rects.appDiv.top -37 }px`
3016-
tooltipDiv.style.right = `${
3019+
tooltip.div.style.top = `${ rects[rects.btnsDiv ? 'btnsDiv' : 'btn'].top - rects.appDiv.top -37 }px`
3020+
tooltip.div.style.right = `${
30173021
rects.appDiv.right -( rects.btn.left + rects.btn.right )/2 - rects.tooltipDiv.width/2 }px`
30183022

30193023
// Show tooltip
3020-
tooltipDiv.style.opacity = 1
3024+
tooltip.div.style.opacity = 1
30213025
}
30223026
}
30233027

@@ -3984,9 +3988,6 @@
39843988
arrowsBtn.append(icons.arrowsDiagonal.create()) ; headerBtnsDiv.append(arrowsBtn)
39853989
}
39863990

3987-
// Add tooltips
3988-
if (!env.browser.isMobile) appDiv.append(tooltipDiv)
3989-
39903991
// Add app header button listeners
39913992
addListeners.appHeaderBtns()
39923993

@@ -4081,7 +4082,6 @@
40814082
show.reply.updatedAPIinHeader = true
40824083
const preHeaderLabel = appDiv.querySelector('.reply-header-text')
40834084
preHeaderLabel.replaceChildren(`⦿ API ${app.msgs.componentLabel_used}: `, dom.create.elem('b'))
4084-
console.log(apiUsed)
40854085
setTimeout(() => type(apiUsed, preHeaderLabel.lastChild, { speed: 1.5 }), 150)
40864086
function type(text, targetElem, { speed = 1 } = {}) {
40874087
targetElem.textContent = '' ; let i = 0;
@@ -4393,9 +4393,6 @@
43934393
['rpg', 'rpw'].forEach(cssType => // rising particles
43944394
document.head.append(dom.create.style(GM_getResourceText(`${cssType}CSS`))))
43954395

4396-
// Create/stylize TOOLTIPs
4397-
const tooltipDiv = dom.create.elem('div', { class: `${app.slug}-tooltip no-user-select` }) ; tooltip.stylize()
4398-
43994396
// APPEND to Brave
44004397
const appDivParentSelector = env.browser.isMobile ? '#results' : '.sidebar'
44014398
const appDivParent = await new Promise(resolve => {
@@ -4464,7 +4461,6 @@
44644461
['anchored', 'expanded', 'sticky', 'wider'].forEach(mode =>
44654462
(config[mode] || config[`${mode}Sidebar`]) && appDiv.classList.add(mode))
44664463
appDiv.innerHTML = saveAppDiv.html
4467-
if (!env.browser.isMobile) { tooltipDiv.style.opacity = 0 ; appDiv.append(tooltipDiv) }
44684464
if (appDiv.querySelector(`.${app.slug}-header-btn`)) addListeners.appHeaderBtns()
44694465
appDiv.querySelectorAll(`.${app.slug}-standby-btn`).forEach((btn, idx) =>
44704466
btn.onclick = show.reply[`${['query', 'summarize'][idx]}BtnClickHandler`])

chatgpt-widescreen/chromium/extension/components/buttons.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,6 @@ window.buttons = {
150150
this.state.hasFadedIn = true // ...so disable fade-in on subsequent .insert()s till .remove()
151151
}
152152
})
153-
elemToInsertBefore.before(tooltip.div) // add tooltips
154153
setTimeout(() => chatbar.tweak(), 1) ; this.update.color()
155154
this.state.status = 'inserted'
156155
},

chatgpt-widescreen/chromium/extension/components/tooltip.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@
33
window.tooltip = {
44
import(deps) { Object.assign(this.imports = this.imports || {}, deps) },
55

6-
createDiv() { this.div = dom.create.elem('div', { class: 'cwm-tooltip' }) },
7-
86
getMsg(key) {
97
return typeof GM_info != 'undefined' ?
108
this.imports.msgs[key] // from tooltip.import({ msgs: app.msgs }) in userscript
@@ -14,7 +12,8 @@ window.tooltip = {
1412
stylize() {
1513
if (this.styles) return
1614
this.styles = dom.create.style(`.cwm-tooltip {
17-
background-color: rgba(0,0,0,0.71) ; padding: 5px 6px ; border-radius: 6px ; border: 1px solid #d9d9e3 ;
15+
background-color: /* bubble style */
16+
rgba(0,0,0,0.71) ; padding: 5px 6px ; border-radius: 6px ; border: 1px solid #d9d9e3 ;
1817
font-size: 0.85rem ; color: white ; white-space: nowrap ; /* text style */
1918
--shadow: 4px 6px 16px 0 rgb(0 0 0 / 38%) ;
2019
box-shadow: var(--shadow) ; -webkit-box-shadow: var(--shadow) ; -moz-box-shadow: var(--shadow) ;
@@ -32,6 +31,9 @@ window.tooltip = {
3231
},
3332

3433
async update(btnType) { // text & position
34+
if (!tooltip.div) tooltip.div = dom.create.elem('div', { class: 'cwm-tooltip' })
35+
if (!tooltip.div.isConnected) buttons[btnType]?.before(tooltip.div)
36+
if (!tooltip.styles) tooltip.stylize()
3537
const site = this.imports.env.site
3638
const rects = {
3739
btn: buttons[btnType]?.getBoundingClientRect(), chatbar: (await chatbar.get())?.getBoundingClientRect() }

chatgpt-widescreen/chromium/extension/content.js

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -303,10 +303,7 @@
303303
const chatbarStyle = dom.create.style()
304304
update.style.chatbar() ; document.head.append(chatbarStyle)
305305

306-
console.log(config)
307-
308-
// Insert BUTTONS/TOOLTIPS
309-
tooltip.createDiv() ; tooltip.stylize()
306+
// Insert BUTTONS
310307
if (!config.extensionDisabled && !config[`${env.site}Disabled`]) {
311308
buttons.insert()
312309

chatgpt-widescreen/firefox/extension/components/buttons.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,6 @@ window.buttons = {
150150
this.state.hasFadedIn = true // ...so disable fade-in on subsequent .insert()s till .remove()
151151
}
152152
})
153-
elemToInsertBefore.before(tooltip.div) // add tooltips
154153
setTimeout(() => chatbar.tweak(), 1) ; this.update.color()
155154
this.state.status = 'inserted'
156155
},

chatgpt-widescreen/firefox/extension/components/tooltip.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@
33
window.tooltip = {
44
import(deps) { Object.assign(this.imports = this.imports || {}, deps) },
55

6-
createDiv() { this.div = dom.create.elem('div', { class: 'cwm-tooltip' }) },
7-
86
getMsg(key) {
97
return typeof GM_info != 'undefined' ?
108
this.imports.msgs[key] // from tooltip.import({ msgs: app.msgs }) in userscript
@@ -14,7 +12,8 @@ window.tooltip = {
1412
stylize() {
1513
if (this.styles) return
1614
this.styles = dom.create.style(`.cwm-tooltip {
17-
background-color: rgba(0,0,0,0.71) ; padding: 5px 6px ; border-radius: 6px ; border: 1px solid #d9d9e3 ;
15+
background-color: /* bubble style */
16+
rgba(0,0,0,0.71) ; padding: 5px 6px ; border-radius: 6px ; border: 1px solid #d9d9e3 ;
1817
font-size: 0.85rem ; color: white ; white-space: nowrap ; /* text style */
1918
--shadow: 4px 6px 16px 0 rgb(0 0 0 / 38%) ;
2019
box-shadow: var(--shadow) ; -webkit-box-shadow: var(--shadow) ; -moz-box-shadow: var(--shadow) ;
@@ -32,6 +31,9 @@ window.tooltip = {
3231
},
3332

3433
async update(btnType) { // text & position
34+
if (!tooltip.div) tooltip.div = dom.create.elem('div', { class: 'cwm-tooltip' })
35+
if (!tooltip.div.isConnected) buttons[btnType]?.before(tooltip.div)
36+
if (!tooltip.styles) tooltip.stylize()
3537
const site = this.imports.env.site
3638
const rects = {
3739
btn: buttons[btnType]?.getBoundingClientRect(), chatbar: (await chatbar.get())?.getBoundingClientRect() }

chatgpt-widescreen/firefox/extension/content.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -303,8 +303,7 @@
303303
const chatbarStyle = dom.create.style()
304304
update.style.chatbar() ; document.head.append(chatbarStyle)
305305

306-
// Insert BUTTONS/TOOLTIPS
307-
tooltip.createDiv() ; tooltip.stylize()
306+
// Insert BUTTONS
308307
if (!config.extensionDisabled && !config[`${env.site}Disabled`]) {
309308
buttons.insert()
310309

duckduckgpt/greasemonkey/duckduckgpt.user.js

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@
148148
// @description:zu Yengeza izimpendulo ze-AI ku-DuckDuckGo (inikwa amandla yi-GPT-4o!)
149149
// @author KudoAI
150150
// @namespace https://kudoai.com
151-
// @version 2025.3.31.5
151+
// @version 2025.3.31.6
152152
// @license MIT
153153
// @icon https://cdn.jsdelivr.net/gh/KudoAI/duckduckgpt@06af076/assets/images/icons/duckduckgpt/icon48.png
154154
// @icon64 https://cdn.jsdelivr.net/gh/KudoAI/duckduckgpt@06af076/assets/images/icons/duckduckgpt/icon64.png
@@ -2966,8 +2966,12 @@
29662966
// * stateOrEvent: 'on'|'off' or button `event`
29672967

29682968
if (env.browser.isMobile) return
2969+
if (!tooltip.div) tooltip.div = dom.create.elem('div', { class: `${app.slug}-tooltip no-user-select` })
2970+
if (!tooltip.div.isConnected) appDiv.append(tooltip.div)
2971+
if (!tooltip.styles) tooltip.stylize()
2972+
29692973
if (stateOrEvent?.type == 'mouseleave' || stateOrEvent == 'off')
2970-
return tooltipDiv.style.opacity = 0
2974+
return tooltip.div.style.opacity = 0
29712975

29722976
const btn = stateOrEvent.currentTarget, btnType = /[^-]+-([\w-]+)-btn/.exec(btn.id)[1]
29732977
const baseText = (
@@ -3003,30 +3007,30 @@
30033007
: btnType == 'summarize' ? app.msgs.tooltip_summarizeResults : '' )
30043008

30053009
// Update text
3006-
tooltipDiv.innerText = baseText
3010+
tooltip.div.innerText = baseText
30073011
tooltip.nativeRpadding = tooltip.nativeRpadding
3008-
|| parseFloat(window.getComputedStyle(tooltipDiv).paddingRight)
3012+
|| parseFloat(window.getComputedStyle(tooltip.div).paddingRight)
30093013
clearInterval(tooltip.dotCycler)
30103014
if (baseText.endsWith('...')) { // animate the dots
30113015
const noDotText = baseText.slice(0, -3), dotWidth = 2.75 ; let dotCnt = 3
30123016
tooltip.dotCycler = setInterval(() => {
30133017
dotCnt = (dotCnt % 3) + 1 // cycle thru 1 → 2 → 3
3014-
tooltipDiv.innerText = noDotText + '.'.repeat(dotCnt)
3015-
tooltipDiv.style.paddingRight = `${ // adjust based on dotCnt
3018+
tooltip.div.innerText = noDotText + '.'.repeat(dotCnt)
3019+
tooltip.div.style.paddingRight = `${ // adjust based on dotCnt
30163020
tooltip.nativeRpadding + (3 - dotCnt) * dotWidth }px`
30173021
}, 350)
30183022
} else // restore native right-padding
3019-
tooltipDiv.style.paddingRight = tooltip.nativeRpadding
3023+
tooltip.div.style.paddingRight = tooltip.nativeRpadding
30203024

30213025
// Update position
3022-
const elems = { appDiv, btn, btnsDiv: btn.closest('[id*=btns], [class*=btns]'), tooltipDiv }
3026+
const elems = { appDiv, btn, btnsDiv: btn.closest('[id*=btns], [class*=btns]'), tooltipDiv: tooltip.div }
30233027
const rects = {} ; Object.keys(elems).forEach(key => rects[key] = elems[key]?.getBoundingClientRect())
3024-
tooltipDiv.style.top = `${ rects[rects.btnsDiv ? 'btnsDiv' : 'btn'].top - rects.appDiv.top -37 }px`
3025-
tooltipDiv.style.right = `${
3028+
tooltip.div.style.top = `${ rects[rects.btnsDiv ? 'btnsDiv' : 'btn'].top - rects.appDiv.top -37 }px`
3029+
tooltip.div.style.right = `${
30263030
rects.appDiv.right -( rects.btn.left + rects.btn.right )/2 - rects.tooltipDiv.width/2 }px`
30273031

30283032
// Show tooltip
3029-
tooltipDiv.style.opacity = 1
3033+
tooltip.div.style.opacity = 1
30303034
}
30313035
}
30323036

@@ -3982,9 +3986,6 @@
39823986
arrowsBtn.append(icons.arrowsDiagonal.create()) ; headerBtnsDiv.append(arrowsBtn)
39833987
}
39843988

3985-
// Add tooltips
3986-
if (!env.browser.isMobile) appDiv.append(tooltipDiv)
3987-
39883989
// Add app header button listeners
39893990
addListeners.appHeaderBtns()
39903991

@@ -4379,9 +4380,6 @@
43794380
['rpg', 'rpw'].forEach(cssType => // rising particles
43804381
document.head.append(dom.create.style(GM_getResourceText(`${cssType}CSS`))))
43814382

4382-
// Create/stylize TOOLTIPs
4383-
const tooltipDiv = dom.create.elem('div', { class: `${app.slug}-tooltip no-user-select` }) ; tooltip.stylize()
4384-
43854383
// Create/classify/fill feedback FOOTER
43864384
const appFooter = dom.create.elem('footer', { class: 'fade-in anchored-hidden' })
43874385
let footerContent = dom.create.anchor('#', app.msgs.link_shareFeedback, { target: '_self' })

0 commit comments

Comments
 (0)