Recently Analyzed Sites
HypeStat’s "Recently Analyzed" page is a dynamic resource that keeps users informed about the latest analyzed websites and changes to website statistics. Whether you’re a webmaster, digital marketer, or just a curious web user, this feature is invaluable for tracking the latest movements in web traffic and site rankings.
- Deepak Singh Rawat
deepaksinghrawat.com
Software Developer - 1 day ago
- Deelightful Desserts | Home
deelightfuldesserts.com - 1 day ago
-
Nextcloud
deanoc.com - 1 day ago
- Dean Biskup
deanbiskup.com - 1 day ago
- BrainSTEM
ddnetbio.com - shinycell2.ddnetbio.com - 1 day ago
- ([^ log.error('Failed to download chat:', err)
})
}
]
)
// Prefix icon to title
const modalTitle = shareChatModal.querySelector('h2'), titleIcon = icons.create({ key: 'speechBalloons' })
titleIcon.style.cssText = 'height: 28px ; width: 28px ; position: relative ; top: 7px ; right: 8px ;'
+ `fill: ${ env.ui.app.scheme == 'dark' ? 'white' : 'black' }`
modalTitle.prepend(titleIcon)
// Hide Dismiss button, localize other labels
const modalBtns = shareChatModal.querySelectorAll('button')
modalBtns[0].style.display = 'none' // hide Dismiss button
if (!env.browser.language.startsWith('en')) // localize button labels
modalBtns.forEach(btn => {
if (/copy/i.test(btn.textContent)) btn.textContent = `${app.msgs.tooltip_copy} URL`
else if (/visit/i.test(btn.textContent)) btn.textContent = app.msgs.btnLabel_visitPage
else if (/download/i.test(btn.textContent))
btn.textContent = `${app.msgs.btnLabel_download} ${log.toTitleCase(app.msgs.btnLabel_convo)}`
})
// Style elements
shareChatModal.style.wordBreak = 'break-all' // since URL really long
modalTitle.style.justifySelf = 'center'
shareChatModal.querySelector('p').style.cssText = 'text-align: center ; margin: -10px 0'
shareChatModal.querySelector('.modal-buttons').style.cssText = 'justify-content: center'
return shareChatModal
},
stylize() {
if (!this.styles) do***ent.head.append(this.styles = dom.create.elem('style'))
this.styles.textContent = (
// Vars
`:root {
--modal-btn-***m: scale(1.055) ; --modal-btn-transition: transform 0.15s ease ;
--settings-li-transition: transform 0.1s ease ; /* for Settings entry hover-***m */
--fg-transition: opacity 0.65s cubic-bezier(0.165,0.84,0.44,1), /* fade-in */
transform 0.55s cubic-bezier(0.165,0.84,0.44,1) !important ; /* move-in */
--bg-transition: background-color 0.25s ease !important } /* dim */`
// Main modal styles
+ '@keyframes modal-***m-fade-out {'
+ '0% { opacity: 1 } 50% { opacity: 0.25 ; transform: scale(1.05) }'
+ '100% { opacity: 0 ; transform: scale(1.35) }}'
+ '.chatgpt-modal > div {'
+ 'padding: 20px 25px 24px 31px !important ;' // increase alert padding
+ 'background-color: white !important ; color: black }'
+ '.chatgpt-modal p { margin: -8px 0 -14px 4px ; font-size: 1.55rem }' // pos/size modal msg
+ `.chatgpt-modal a { color: #${ env.ui.app.scheme == 'dark' ? '00cfff' : '1e9ebb' } !important }`
+ '.modal-buttons {'
+ `margin: 24px -5px -3px ${ env.browser.isMobile ? -5 : -15 }px !important ; width: 100% }`
+ '.chatgpt-modal button {' // this.alert() buttons
+ `min-width: 121px ; padding: ${ env.browser.isMobile ? '7px' : '4px 15px' } !important ;`
+ 'cursor: pointer ; border-radius: 0 !important ; height: 39px ;'
+ 'border: 1px solid ' + ( env.ui.app.scheme == 'dark' ? 'white' : 'black' ) + '!important ;'
+ `${ env.ui.app.scheme == 'dark' ? 'background: none ; color: white' : '' }}`
+ '.primary-modal-btn { background: black !important ; color: white !important }'
+ '.chatgpt-modal button:hover { background-color: #9cdaff !important ; color: black !important }'
+ ( env.ui.app.scheme == 'dark' ? // darkmode chatgpt.alert() styles
( '.chatgpt-modal > div, .chatgpt-modal button:not(.primary-modal-btn) {'
+ 'color: white !important }'
+ '.primary-modal-btn { background: hsl(186 100% 69%) !important ; color: black !important }'
+ '.chatgpt-modal a { color: #00cfff !important }'
+ '.chatgpt-modal button:hover {'
+ 'background-color: #00cfff !important ; color: black !important }' ) : '' )
+ `.${modals.class} { display: grid ; place-items: center }` // for centered icon/logo
+ '[class*=modal-close-btn] {'
+ 'position: absolute !important ; float: right ; top: 14px !important ; right: 16px !important ;'
+ 'cursor: pointer ; width: 33px ; height: 33px ; border-radius: 20px }'
+ `[class*=modal-close-btn] path {${ env.ui.app.scheme == 'dark' ? 'stroke: white ; fill: white'
: 'stroke: #9f9f9f ; fill: #9f9f9f' }}`
+ ( env.ui.app.scheme == 'dark' ? // invert dark mode hover paths
'[class*=modal-close-btn]:hover path { stroke: black ; fill: black }' : '' )
+ '[class*=modal-close-btn]:hover { background-color: #f2f2f2 }' // hover underlay
+ '[class*=modal-close-btn] svg { margin: 11.5px }' // center SVG for hover underlay
+ '[class*=-modal] h2 {'
+ 'font-weight: bold ; line-height: 32px ; padding: 0 ; margin: 9px 0 14px !important ;'
+ `${ env.browser.isMobile ? 'text-align: center' // center on mobile
: 'justify-self: start' }}` // left-align on desktop
+ '[class*=-modal] p { justify-self: start ; font-size: 20px }'
+ '[class*=-modal] button { font-size: 13px !important ; background: none }'
+ '[class*=-modal-bg] {'
+ 'pointer-events: auto ;' // override any disabling from site modals
+ 'position: fixed ; top: 0 ; left: 0 ; width: 100% ; height: 100% ;' // expand to full view-port
+ 'display: flex ; justify-content: center ; align-items: center ; z-index: 9999 ;' // align
+ `transition: var(--bg-transition) ; /* dim */
-webkit-transition: var(--bg-transition) ; -moz-transition: var(--bg-transition) ;
-o-transition: var(--bg-transition) ; -ms-transition: var(--bg-transition) }`
+ '[class*=-modal-bg].animated > div {'
+ 'z-index: 13456 ; opacity: 0.98 ; transform: trans***(0) translateY(0) }'
+ '[class$=-modal] {' // native modals + chatgpt.alert()s
+ 'position: absolute ;' // to be click-draggable
+ 'opacity: 0 ;' // to fade-in
+ `background-image: linear-gradient(180deg, ${
env.ui.app.scheme == 'dark' ? '#99a8a6 -200px, black 200px' : '#b6ebff -296px, white 171px' }) ;`
+ `border: 1px solid ${ env.ui.app.scheme == 'dark' ? 'white' : '#b5b5b5' } !important ;`
+ `color: ${ env.ui.app.scheme == 'dark' ? 'white' : 'black' };`
+ 'transform: trans***(-3px) translateY(7px) ;' // offset to move-in from
+ `transition: var(--fg-transition) ; /* fade-in + move-in */
-webkit-transition: var(--fg-transition) ; -moz-transition: var(--fg-transition) ;
-o-transition: var(--fg-transition) ; -ms-transition: var(--fg-transition) }
${ env.browser.isMobile ? '' : `[class$=-modal] button:hover { transform: var(--modal-btn-***m) }`}
${ config.fgAnimationsDisabled ? '' : `[class$=-modal] button {
${ env.browser.isMobile ? '' : 'will-change: transform ;' }
transition: var(--modal-btn-transition) ;
-webkit-transition: var(--modal-btn-transition) ;
-moz-transition: var(--modal-btn-transition) ;
-o-transition: var(--modal-btn-transition) ;
-ms-transition: var(--modal-btn-transition) }`}`
// Settings modal
+ `#${app.slug}-settings {
min-width: ${ env.browser.isPortrait ? 288 : 698 }px ; max-width: 75vw ;
word-wrap: break-word ; border-radius: 15px ;
${ env.ui.app.scheme == 'dark' ? 'stroke: white ; fill: white' : 'stroke: black ; fill: black' };
--shadow: 0 30px 60px rgba(0,0,0,0.12) ;
box-shadow: var(--shadow) ; -webkit-box-shadow: var(--shadow) ; -moz-box-shadow: var(--shadow) }`
+ `#${app.slug}-settings-title {`
+ 'font-weight: bold ; line-height: 19px ; text-align: center ; margin: 0 3px -3px 0 }'
+ `#${app.slug}-settings-title h4 {`
+ `font-size: ${ env.browser.isPortrait ? 26 : 31 }px ; font-weight: bold ; margin-top: -39px }`
+ `#${app.slug}-settings ul {`
+ 'list-style: none ; padding: 0 ; margin-bottom: 2px ;' // hide bullets, close bottom gap
+ `width: ${ env.browser.isPortrait ? 100 : 50 }% }` // set width based on column cnt
+ ( env.browser.isPhone ? '' : ( `#${app.slug}-settings ul:first-of-type {` // color desktop middle separator
+ `border-right: 1px dotted ${ env.ui.app.scheme == 'dark' ? 'white' : 'black' }}` ))
+ `#${app.slug}-settings li {`
+ `color: ${ env.ui.app.scheme == 'dark' ? 'rgb(255,255,255,0.65)' : 'rgba(0,0,0,0.45)' };` // for text
+ `fill: ${ env.ui.app.scheme == 'dark' ? 'rgb(255,255,255,0.65)' : 'rgba(0,0,0,0.45)' };` // for icons
+ `stroke: ${ env.ui.app.scheme == 'dark' ? 'rgb(255,255,255,0.65)' : 'rgba(0,0,0,0.45)' };` // for icons
+ 'height: 25px ; padding: 4px 10px ; font-size: 14.5px ;'
+ `border-bottom: 1px dotted ${ env.ui.app.scheme == 'dark' ? 'white' : 'black' };` // add separator
+ 'border-radius: 3px ;' // slightly round highlight strip
+ `${ config.fgAnimationsDisabled || env.browser.isMobile ? '' :
`transition: var(--settings-li-transition) ;
-webkit-transition: var(--settings-li-transition) ;
-moz-transition: var(--settings-li-transition) ;
-o-transition: var(--settings-li-transition) ;
-ms-transition: var(--settings-li-transition)` }}`
+ `#${app.slug}-settings li.active {`
+ `color: ${ env.ui.app.scheme == 'dark' ? 'rgb(255,255,255)' : 'rgba(0,0,0)' };` // for text
+ `fill: ${ env.ui.app.scheme == 'dark' ? 'rgb(255,255,255)' : 'rgba(0,0,0)' };` // for icons
+ `stroke: ${ env.ui.app.scheme == 'dark' ? 'rgb(255,255,255)' : 'rgba(0,0,0)' }}` // for icons
+ `#${app.slug}-settings li label { padding-right: 20px }` // right-pad labels so toggles don't hug
+ `#${app.slug}-settings li:last-of-type { border-bottom: none }` // remove last bottom-border
+ `#${app.slug}-settings li, #${app.slug}-settings li label { cursor: pointer }` // add finger on hover
+ `#${app.slug}-settings li:hover {`
+ 'background: rgba(100,149,237,0.88) ; color: white ; fill: white ; stroke: white ;'
+ `${ env.browser.isMobile ? '' : 'transform: scale(1.15)' }}`
+ `#${app.slug}-settings li > input { float: right } /* pos toggles */
#${app.slug}-settings li > .track {
position: relative ; left: -1px ; bottom: -5.5px ; float: right ;
background-color: #ccc ; width: 26px ; height: 13px ; border-radius: 28px ;
${ config.fgAnimationsDisabled ? '' :
`transition: 0.4s ; -webkit-transition: 0.4s ; -moz-transition: 0.4s ;
-o-transition: 0.4s ; -ms-transition: 0.4s` }}
#${app.slug}-settings li .*** {
position: absolute ; left: 1px ; bottom: 1px ; content: "" ;
background-color: white ; width: 11px ; height: 11px ; border-radius: 28px ;
${ config.fgAnimationsDisabled ? '' :
`transition: 0.2s ; -webkit-transition: 0.2s ; -moz-transition: 0.2s ;
-o-transition: 0.2s ; -ms-transition: 0.2s` }}`
+ '#scheme-settings-entry > span { margin: 3px -2px 0 }' // align Scheme status
+ '#scheme-settings-entry > span > svg {' // v-align/left-pad Scheme status icon
+ 'position: relative ; top: 2px ; margin-left: 4px }'
+ ( config.fgAnimationsDisabled ? '' // spin cycle arrows icon when scheme is Auto
: ( '#scheme-settings-entry svg[class*=arrowsCyclic],'
+ '.chatgpt-notif svg[class*=arrowsCyclic] { animation: rotate 5s linear infinite }' ))
+ `#about-settings-entry span { color: ${ env.ui.app.scheme == 'dark' ? '#28ee28' : 'green' }}`
+ '#about-settings-entry > span {' // outer About status span
+ `width: ${ env.browser.isPortrait ? '15vw' : '95px' }; height: 20px ; overflow: hidden ;`
+ `${ config.fgAnimationsDisabled ? '' : ( // fade edges
'mask-image: linear-gradient('
+ 'to right, transparent, black 20%, black 89%, transparent) ;'
+ '-webkit-mask-image: linear-gradient('
+ 'to right, transparent, black 20%, black 89%, transparent)' )}}`
+ '#about-settings-entry > span > div {'
+ `text-wrap: nowrap ; ${
config.fgAnimationsDisabled ? '' : 'animation: ticker linear 75s infinite' }}`
+ '@keyframes ticker { 0% { transform: trans***(100%) } 100% { transform: trans***(-2000%) }}'
+ `.about-em { color: ${ env.ui.app.scheme == 'dark' ? 'white' : 'green' } !important }`
)
},
update: {
width: 409,
available() {
// Show modal
const updateAvailModal = modals.alert(`ð ${app.msgs.alert_updateAvail}!`, // title
`${app.msgs.alert_newerVer} ${app.name} ` // msg
+ `(v${app.latestVer}) ${app.msgs.alert_isAvail}! `
+ '${app.msgs.link_viewChanges}`,
function update() { // button
modals.safeWinOpen(`${app.urls.update.gm}?t=${Date.now()}`)
}, '', modals.update.width
)
// Localize button labels if needed
if (!env.browser.language.startsWith('en')) {
const updateBtns = updateAvailModal.querySelectorAll('button')
updateBtns[1].textContent = app.msgs.btnLabel_update
updateBtns[0].textContent = app.msgs.btnLabel_dismiss
}
return updateAvailModal
},
unavailable() {
return modals.alert(`${app.msgs.alert_upToDate}!`, // title
`${app.name} (v${app.version}) ${app.msgs.alert_isUpToDate}!`, // msg
'', '', modals.update.width
)
}
}
}
// Run MAIN routine
menus.toolbar.register()
// Init UI props
env.ui = {
app: { scheme: config.scheme || ui.getScheme() },
site: { isCentered: !!do***ent.do***entElement.className.includes('center'), scheme: ui.getScheme() }
}
// Create/ID/classify/listenerize/stylize APP container
app.div = dom.create.elem('div', { id: app.slug, class: 'fade-in' })
themes.apply(config.theme) ; ui.addListeners.appDiv()
;['anc***d', 'expanded', 'sticky', 'wider'].forEach(mode =>
(config[mode] || config[`${mode}Sidebar`]) && app.div.classList.add(mode))
update.appStyle()
;['rpg', 'rpw'].forEach(cssType => // rising particles
do***ent.head.append(dom.create.style(GM_getResourceText(`${cssType}CSS`))))
// Hide GF alert on GitHub if found
if (location.host == 'github.com') {
const gfAlert = [...do***ent.querySelectorAll('.markdown-alert')]
.find(alert => alert.textContent.includes('Greasy Fork'))
return !gfAlert ? undefined : gfAlert.style.display = 'none'
}
// Create/classify/fill feedback FOOTER
app.footer = dom.create.elem('footer', { class: 'fade-in anc***d-hidden' })
app.footerContent = dom.create.anchor('#', app.msgs.link_shareFeedback, { target: '_self' })
app.footerContent.onclick = () => modals.open('feedback')
app.footer.append(app.footerContent)
// Check for active TEXT CAMPAIGNS to replace footer CTA
update.footerContent()
// APPEND DDGPT + footer to DDG
app.elems = [app.div, app.footer]
app.divParent = {
selector: env.browser.isMobile || env.ui.site.isCentered ? '[data-area*=mainline]' : '[class*=sidebar]' }
app.divParent.div = await new Promise(resolve => {
const appDivParent = do***ent.querySelector(app.divParent.selector)
if (appDivParent) resolve(appDivParent)
else new MutationObserver((_, obs) => {
const appDivParent = do***ent.querySelector(app.divParent.selector)
if (appDivParent) { obs.disconnect() ; resolve(appDivParent) }
}).observe(do***ent.body, { childList: true, subtree: true })
})
app.divParent.div.prepend(...app.elems)
app.elems.forEach((elem, idx) => // fade in staggered
setTimeout(() => elem.classList.add('active'), idx * 550 - 200))
// REPLACE appDivParent max-width w/ min-width for better UI
if (!env.browser.isMobile) Object.assign(app.divParent.div.style, { maxWidth: '', minWidth: '448px' })
// REFERRALIZE links to support author
setTimeout(() => do***ent.querySelectorAll('a[href^="https://www.amazon."]').forEach(anchor => {
const url = new URL(anchor.href) ; url.searchParams.set('tag', 'kudo-ai-20')
anchor.href = url.toString()
}), 1500)
// AUTO-GEN reply or show STANDBY mode
app.msgChain = [] ; const searchQuery = new URL(location.href).searchParams.get('q')
if (config.autoGet || config.autoSummarize // Auto-Gen on
|| (config.prefixEnabled || config.suffixEnabled) // or Manual-Gen on
&& [config.prefixEnabled && location.href.includes('q=%2F'), // prefix required/present
config.suffixEnabled // suffix required/present
&& /q=.*?(?:%3F|ï¼|%EF%BC%9F)(?:&|$)/.test(location.href)
].filter(Boolean).length == (config.prefixEnabled + config.suffixEnabled) // validate both Manual-Gen modes
) { // auto-gen reply
app.msgChain.push({
time: Date.now(), role: 'user',
content: config.autoSummarize ? prompts.create('summarizeResults') : searchQuery
})
get.reply({ msgs: app.msgChain, src: 'query' })
} else { // show Standby mode
show.reply({ standby: true })
if (!config.rqDisabled)
get.related(searchQuery)
.then(queries => show.related(queries))
.catch(err => { log.error(err.message) ; api.tryNew(get.related) })
}
// Monitor SCHEME PREF changes to update app scheme if auto-scheme mode
new MutationObserver(handleSchemePrefChange).observe( // for site scheme pref changes
do***ent.do***entElement, { attributes: true, attributeFilter: ['class'] })
window.matchMedia('(prefers-color-scheme: dark)').addEventListener( // for browser/system scheme pref changes
'change', () => requestAnimationFrame(handleSchemePrefChange))
function handleSchemePrefChange() {
if (config.scheme) return // since light/dark hard-set
const displayedScheme = ui.getScheme()
if (env.ui.app.scheme != displayedScheme) update.scheme(displayedScheme)
}
// Observe sidebar for need to RAISE DDGPT as other extensions inject into it
const sidebarObserver = new MutationObserver(() => {
if (app.divParent.div.firstChild != app.div) {
app.divParent.div.prepend(...app.elems) ; sidebarObserver.disconnect() }
})
sidebarObserver.observe(app.divParent.div, { subtree: true, childList: true })
setTimeout(() => sidebarObserver.disconnect(), 5000) // don't observe forever
})()
ddgpt.com - gm.ddgpt.com - 1 day ago
- Daniel Colmán
dcolman.com
china travel photography. portfolio of travel pictures of china taken on my travels around the country. - 1 day ago
- ([^ log.error('Failed to download chat:', err)
})
}
]
)
// Prefix icon to title
const modalTitle = shareChatModal.querySelector('h2'), titleIcon = icons.create({ key: 'speechBalloons' })
titleIcon.style.cssText = 'height: 28px ; width: 28px ; position: relative ; top: 7px ; right: 8px ;'
+ `fill: ${ env.ui.app.scheme == 'dark' ? 'white' : 'black' }`
modalTitle.prepend(titleIcon)
// Hide Dismiss button, localize other labels
const modalBtns = shareChatModal.querySelectorAll('button')
modalBtns[0].style.display = 'none' // hide Dismiss button
if (!env.browser.language.startsWith('en')) // localize button labels
modalBtns.forEach(btn => {
if (/copy/i.test(btn.textContent)) btn.textContent = `${app.msgs.tooltip_copy} URL`
else if (/visit/i.test(btn.textContent)) btn.textContent = app.msgs.btnLabel_visitPage
else if (/download/i.test(btn.textContent))
btn.textContent = `${app.msgs.btnLabel_download} ${log.toTitleCase(app.msgs.btnLabel_convo)}`
})
// Style elements
shareChatModal.style.wordBreak = 'break-all' // since URL really long
modalTitle.style.justifySelf = 'center'
shareChatModal.querySelector('p').style.cssText = 'text-align: center ; margin: -10px 0'
shareChatModal.querySelector('.modal-buttons').style.cssText = 'justify-content: center'
return shareChatModal
},
stylize() {
if (!this.styles) do***ent.head.append(this.styles = dom.create.elem('style'))
this.styles.textContent = (
// Vars
`:root {
--modal-btn-***m: scale(1.055) ; --modal-btn-transition: transform 0.15s ease ;
--settings-li-transition: transform 0.1s ease ; /* for Settings entry hover-***m */
--fg-transition: opacity 0.65s cubic-bezier(0.165,0.84,0.44,1), /* fade-in */
transform 0.55s cubic-bezier(0.165,0.84,0.44,1) !important ; /* move-in */
--bg-transition: background-color 0.25s ease !important } /* dim */`
// Main modal styles
+ '@keyframes modal-***m-fade-out {'
+ '0% { opacity: 1 } 50% { opacity: 0.25 ; transform: scale(1.05) }'
+ '100% { opacity: 0 ; transform: scale(1.35) }}'
+ '.chatgpt-modal > div {'
+ 'padding: 20px 25px 24px 31px !important ;' // increase alert padding
+ 'background-color: white !important ; color: black }'
+ '.chatgpt-modal p { margin: -8px 0 -14px 4px ; font-size: 1.55rem }' // pos/size modal msg
+ `.chatgpt-modal a { color: #${ env.ui.app.scheme == 'dark' ? '00cfff' : '1e9ebb' } !important }`
+ '.modal-buttons {'
+ `margin: 24px -5px -3px ${ env.browser.isMobile ? -5 : -15 }px !important ; width: 100% }`
+ '.chatgpt-modal button {' // this.alert() buttons
+ `min-width: 121px ; padding: ${ env.browser.isMobile ? '7px' : '4px 15px' } !important ;`
+ 'cursor: pointer ; border-radius: 0 !important ; height: 39px ;'
+ 'border: 1px solid ' + ( env.ui.app.scheme == 'dark' ? 'white' : 'black' ) + '!important ;'
+ `${ env.ui.app.scheme == 'dark' ? 'background: none ; color: white' : '' }}`
+ '.primary-modal-btn { background: black !important ; color: white !important }'
+ '.chatgpt-modal button:hover { background-color: #9cdaff !important ; color: black !important }'
+ ( env.ui.app.scheme == 'dark' ? // darkmode chatgpt.alert() styles
( '.chatgpt-modal > div, .chatgpt-modal button:not(.primary-modal-btn) {'
+ 'color: white !important }'
+ '.primary-modal-btn { background: hsl(186 100% 69%) !important ; color: black !important }'
+ '.chatgpt-modal a { color: #00cfff !important }'
+ '.chatgpt-modal button:hover {'
+ 'background-color: #00cfff !important ; color: black !important }' ) : '' )
+ `.${modals.class} { display: grid ; place-items: center }` // for centered icon/logo
+ '[class*=modal-close-btn] {'
+ 'position: absolute !important ; float: right ; top: 14px !important ; right: 16px !important ;'
+ 'cursor: pointer ; width: 33px ; height: 33px ; border-radius: 20px }'
+ `[class*=modal-close-btn] path {${ env.ui.app.scheme == 'dark' ? 'stroke: white ; fill: white'
: 'stroke: #9f9f9f ; fill: #9f9f9f' }}`
+ ( env.ui.app.scheme == 'dark' ? // invert dark mode hover paths
'[class*=modal-close-btn]:hover path { stroke: black ; fill: black }' : '' )
+ '[class*=modal-close-btn]:hover { background-color: #f2f2f2 }' // hover underlay
+ '[class*=modal-close-btn] svg { margin: 11.5px }' // center SVG for hover underlay
+ '[class*=-modal] h2 {'
+ 'font-weight: bold ; line-height: 32px ; padding: 0 ; margin: 9px 0 14px !important ;'
+ `${ env.browser.isMobile ? 'text-align: center' // center on mobile
: 'justify-self: start' }}` // left-align on desktop
+ '[class*=-modal] p { justify-self: start ; font-size: 20px }'
+ '[class*=-modal] button { font-size: 13px !important ; background: none }'
+ '[class*=-modal-bg] {'
+ 'pointer-events: auto ;' // override any disabling from site modals
+ 'position: fixed ; top: 0 ; left: 0 ; width: 100% ; height: 100% ;' // expand to full view-port
+ 'display: flex ; justify-content: center ; align-items: center ; z-index: 9999 ;' // align
+ `transition: var(--bg-transition) ; /* dim */
-webkit-transition: var(--bg-transition) ; -moz-transition: var(--bg-transition) ;
-o-transition: var(--bg-transition) ; -ms-transition: var(--bg-transition) }`
+ '[class*=-modal-bg].animated > div {'
+ 'z-index: 13456 ; opacity: 0.98 ; transform: trans***(0) translateY(0) }'
+ '[class$=-modal] {' // native modals + chatgpt.alert()s
+ 'position: absolute ;' // to be click-draggable
+ 'opacity: 0 ;' // to fade-in
+ `background-image: linear-gradient(180deg, ${
env.ui.app.scheme == 'dark' ? '#99a8a6 -200px, black 200px' : '#b6ebff -296px, white 171px' }) ;`
+ `border: 1px solid ${ env.ui.app.scheme == 'dark' ? 'white' : '#b5b5b5' } !important ;`
+ `color: ${ env.ui.app.scheme == 'dark' ? 'white' : 'black' };`
+ 'transform: trans***(-3px) translateY(7px) ;' // offset to move-in from
+ `transition: var(--fg-transition) ; /* fade-in + move-in */
-webkit-transition: var(--fg-transition) ; -moz-transition: var(--fg-transition) ;
-o-transition: var(--fg-transition) ; -ms-transition: var(--fg-transition) }
${ env.browser.isMobile ? '' : `[class$=-modal] button:hover { transform: var(--modal-btn-***m) }`}
${ config.fgAnimationsDisabled ? '' : `[class$=-modal] button {
${ env.browser.isMobile ? '' : 'will-change: transform ;' }
transition: var(--modal-btn-transition) ;
-webkit-transition: var(--modal-btn-transition) ;
-moz-transition: var(--modal-btn-transition) ;
-o-transition: var(--modal-btn-transition) ;
-ms-transition: var(--modal-btn-transition) }`}`
// Settings modal
+ `#${app.slug}-settings {
min-width: ${ env.browser.isPortrait ? 288 : 698 }px ; max-width: 75vw ;
word-wrap: break-word ; border-radius: 15px ;
${ env.ui.app.scheme == 'dark' ? 'stroke: white ; fill: white' : 'stroke: black ; fill: black' };
--shadow: 0 30px 60px rgba(0,0,0,0.12) ;
box-shadow: var(--shadow) ; -webkit-box-shadow: var(--shadow) ; -moz-box-shadow: var(--shadow) }`
+ `#${app.slug}-settings-title {`
+ 'font-weight: bold ; line-height: 19px ; text-align: center ; margin: 0 3px -3px 0 }'
+ `#${app.slug}-settings-title h4 {`
+ `font-size: ${ env.browser.isPortrait ? 26 : 31 }px ; font-weight: bold ; margin-top: -39px }`
+ `#${app.slug}-settings ul {`
+ 'list-style: none ; padding: 0 ; margin-bottom: 2px ;' // hide bullets, close bottom gap
+ `width: ${ env.browser.isPortrait ? 100 : 50 }% }` // set width based on column cnt
+ ( env.browser.isPhone ? '' : ( `#${app.slug}-settings ul:first-of-type {` // color desktop middle separator
+ `border-right: 1px dotted ${ env.ui.app.scheme == 'dark' ? 'white' : 'black' }}` ))
+ `#${app.slug}-settings li {`
+ `color: ${ env.ui.app.scheme == 'dark' ? 'rgb(255,255,255,0.65)' : 'rgba(0,0,0,0.45)' };` // for text
+ `fill: ${ env.ui.app.scheme == 'dark' ? 'rgb(255,255,255,0.65)' : 'rgba(0,0,0,0.45)' };` // for icons
+ `stroke: ${ env.ui.app.scheme == 'dark' ? 'rgb(255,255,255,0.65)' : 'rgba(0,0,0,0.45)' };` // for icons
+ 'height: 25px ; padding: 4px 10px ; font-size: 14.5px ;'
+ `border-bottom: 1px dotted ${ env.ui.app.scheme == 'dark' ? 'white' : 'black' };` // add separator
+ 'border-radius: 3px ;' // slightly round highlight strip
+ `${ config.fgAnimationsDisabled || env.browser.isMobile ? '' :
`transition: var(--settings-li-transition) ;
-webkit-transition: var(--settings-li-transition) ;
-moz-transition: var(--settings-li-transition) ;
-o-transition: var(--settings-li-transition) ;
-ms-transition: var(--settings-li-transition)` }}`
+ `#${app.slug}-settings li.active {`
+ `color: ${ env.ui.app.scheme == 'dark' ? 'rgb(255,255,255)' : 'rgba(0,0,0)' };` // for text
+ `fill: ${ env.ui.app.scheme == 'dark' ? 'rgb(255,255,255)' : 'rgba(0,0,0)' };` // for icons
+ `stroke: ${ env.ui.app.scheme == 'dark' ? 'rgb(255,255,255)' : 'rgba(0,0,0)' }}` // for icons
+ `#${app.slug}-settings li label { padding-right: 20px }` // right-pad labels so toggles don't hug
+ `#${app.slug}-settings li:last-of-type { border-bottom: none }` // remove last bottom-border
+ `#${app.slug}-settings li, #${app.slug}-settings li label { cursor: pointer }` // add finger on hover
+ `#${app.slug}-settings li:hover {`
+ 'background: rgba(100,149,237,0.88) ; color: white ; fill: white ; stroke: white ;'
+ `${ env.browser.isMobile ? '' : 'transform: scale(1.15)' }}`
+ `#${app.slug}-settings li > input { float: right } /* pos toggles */
#${app.slug}-settings li > .track {
position: relative ; left: -1px ; bottom: -5.5px ; float: right ;
background-color: #ccc ; width: 26px ; height: 13px ; border-radius: 28px ;
${ config.fgAnimationsDisabled ? '' :
`transition: 0.4s ; -webkit-transition: 0.4s ; -moz-transition: 0.4s ;
-o-transition: 0.4s ; -ms-transition: 0.4s` }}
#${app.slug}-settings li .*** {
position: absolute ; left: 1px ; bottom: 1px ; content: "" ;
background-color: white ; width: 11px ; height: 11px ; border-radius: 28px ;
${ config.fgAnimationsDisabled ? '' :
`transition: 0.2s ; -webkit-transition: 0.2s ; -moz-transition: 0.2s ;
-o-transition: 0.2s ; -ms-transition: 0.2s` }}`
+ '#scheme-settings-entry > span { margin: 3px -2px 0 }' // align Scheme status
+ '#scheme-settings-entry > span > svg {' // v-align/left-pad Scheme status icon
+ 'position: relative ; top: 2px ; margin-left: 4px }'
+ ( config.fgAnimationsDisabled ? '' // spin cycle arrows icon when scheme is Auto
: ( '#scheme-settings-entry svg[class*=arrowsCyclic],'
+ '.chatgpt-notif svg[class*=arrowsCyclic] { animation: rotate 5s linear infinite }' ))
+ `#about-settings-entry span { color: ${ env.ui.app.scheme == 'dark' ? '#28ee28' : 'green' }}`
+ '#about-settings-entry > span {' // outer About status span
+ `width: ${ env.browser.isPortrait ? '15vw' : '95px' }; height: 20px ; overflow: hidden ;`
+ `${ config.fgAnimationsDisabled ? '' : ( // fade edges
'mask-image: linear-gradient('
+ 'to right, transparent, black 20%, black 89%, transparent) ;'
+ '-webkit-mask-image: linear-gradient('
+ 'to right, transparent, black 20%, black 89%, transparent)' )}}`
+ '#about-settings-entry > span > div {'
+ `text-wrap: nowrap ; ${
config.fgAnimationsDisabled ? '' : 'animation: ticker linear 75s infinite' }}`
+ '@keyframes ticker { 0% { transform: trans***(100%) } 100% { transform: trans***(-2000%) }}'
+ `.about-em { color: ${ env.ui.app.scheme == 'dark' ? 'white' : 'green' } !important }`
)
},
update: {
width: 409,
available() {
// Show modal
const updateAvailModal = modals.alert(`ð ${app.msgs.alert_updateAvail}!`, // title
`${app.msgs.alert_newerVer} ${app.name} ` // msg
+ `(v${app.latestVer}) ${app.msgs.alert_isAvail}! `
+ '${app.msgs.link_viewChanges}`,
function update() { // button
modals.safeWinOpen(`${app.urls.update.gm}?t=${Date.now()}`)
}, '', modals.update.width
)
// Localize button labels if needed
if (!env.browser.language.startsWith('en')) {
const updateBtns = updateAvailModal.querySelectorAll('button')
updateBtns[1].textContent = app.msgs.btnLabel_update
updateBtns[0].textContent = app.msgs.btnLabel_dismiss
}
return updateAvailModal
},
unavailable() {
return modals.alert(`${app.msgs.alert_upToDate}!`, // title
`${app.name} (v${app.version}) ${app.msgs.alert_isUpToDate}!`, // msg
'', '', modals.update.width
)
}
}
}
// Run MAIN routine
menus.toolbar.register()
// Init UI props
env.ui = {
app: { scheme: config.scheme || ui.getScheme() },
site: { isCentered: !!do***ent.do***entElement.className.includes('center'), scheme: ui.getScheme() }
}
// Create/ID/classify/listenerize/stylize APP container
app.div = dom.create.elem('div', { id: app.slug, class: 'fade-in' })
themes.apply(config.theme) ; ui.addListeners.appDiv()
;['anc***d', 'expanded', 'sticky', 'wider'].forEach(mode =>
(config[mode] || config[`${mode}Sidebar`]) && app.div.classList.add(mode))
update.appStyle()
;['rpg', 'rpw'].forEach(cssType => // rising particles
do***ent.head.append(dom.create.style(GM_getResourceText(`${cssType}CSS`))))
// Hide GF alert on GitHub if found
if (location.host == 'github.com') {
const gfAlert = [...do***ent.querySelectorAll('.markdown-alert')]
.find(alert => alert.textContent.includes('Greasy Fork'))
return !gfAlert ? undefined : gfAlert.style.display = 'none'
}
// Create/classify/fill feedback FOOTER
app.footer = dom.create.elem('footer', { class: 'fade-in anc***d-hidden' })
app.footerContent = dom.create.anchor('#', app.msgs.link_shareFeedback, { target: '_self' })
app.footerContent.onclick = () => modals.open('feedback')
app.footer.append(app.footerContent)
// Check for active TEXT CAMPAIGNS to replace footer CTA
update.footerContent()
// APPEND DDGPT + footer to DDG
app.elems = [app.div, app.footer]
app.divParent = {
selector: env.browser.isMobile || env.ui.site.isCentered ? '[data-area*=mainline]' : '[class*=sidebar]' }
app.divParent.div = await new Promise(resolve => {
const appDivParent = do***ent.querySelector(app.divParent.selector)
if (appDivParent) resolve(appDivParent)
else new MutationObserver((_, obs) => {
const appDivParent = do***ent.querySelector(app.divParent.selector)
if (appDivParent) { obs.disconnect() ; resolve(appDivParent) }
}).observe(do***ent.body, { childList: true, subtree: true })
})
app.divParent.div.prepend(...app.elems)
app.elems.forEach((elem, idx) => // fade in staggered
setTimeout(() => elem.classList.add('active'), idx * 550 - 200))
// REPLACE appDivParent max-width w/ min-width for better UI
if (!env.browser.isMobile) Object.assign(app.divParent.div.style, { maxWidth: '', minWidth: '448px' })
// REFERRALIZE links to support author
setTimeout(() => do***ent.querySelectorAll('a[href^="https://www.amazon."]').forEach(anchor => {
const url = new URL(anchor.href) ; url.searchParams.set('tag', 'kudo-ai-20')
anchor.href = url.toString()
}), 1500)
// AUTO-GEN reply or show STANDBY mode
app.msgChain = [] ; const searchQuery = new URL(location.href).searchParams.get('q')
if (config.autoGet || config.autoSummarize // Auto-Gen on
|| (config.prefixEnabled || config.suffixEnabled) // or Manual-Gen on
&& [config.prefixEnabled && location.href.includes('q=%2F'), // prefix required/present
config.suffixEnabled // suffix required/present
&& /q=.*?(?:%3F|ï¼|%EF%BC%9F)(?:&|$)/.test(location.href)
].filter(Boolean).length == (config.prefixEnabled + config.suffixEnabled) // validate both Manual-Gen modes
) { // auto-gen reply
app.msgChain.push({
time: Date.now(), role: 'user',
content: config.autoSummarize ? prompts.create('summarizeResults') : searchQuery
})
get.reply({ msgs: app.msgChain, src: 'query' })
} else { // show Standby mode
show.reply({ standby: true })
if (!config.rqDisabled)
get.related(searchQuery)
.then(queries => show.related(queries))
.catch(err => { log.error(err.message) ; api.tryNew(get.related) })
}
// Monitor SCHEME PREF changes to update app scheme if auto-scheme mode
new MutationObserver(handleSchemePrefChange).observe( // for site scheme pref changes
do***ent.do***entElement, { attributes: true, attributeFilter: ['class'] })
window.matchMedia('(prefers-color-scheme: dark)').addEventListener( // for browser/system scheme pref changes
'change', () => requestAnimationFrame(handleSchemePrefChange))
function handleSchemePrefChange() {
if (config.scheme) return // since light/dark hard-set
const displayedScheme = ui.getScheme()
if (env.ui.app.scheme != displayedScheme) update.scheme(displayedScheme)
}
// Observe sidebar for need to RAISE DDGPT as other extensions inject into it
const sidebarObserver = new MutationObserver(() => {
if (app.divParent.div.firstChild != app.div) {
app.divParent.div.prepend(...app.elems) ; sidebarObserver.disconnect() }
})
sidebarObserver.observe(app.divParent.div, { subtree: true, childList: true })
setTimeout(() => sidebarObserver.disconnect(), 5000) // don't observe forever
})()
ddgpt.com - gf.ddgpt.com - 1 day ago
-
dc602.com - 1 day ago
- Dcentrica | Decentralised thinking for a centralised world | Decentralised thinking for a centralised world
dcentrica.com
Decentralised thinking for a centralised world - 1 day ago
- Diego de la Cova | Marketing real, estrategias que funcionan
diegodelacova.com
Conoce a Diego de la Cova: Estrategias digitales personalizadas, automatización y resultados reales para hacer crecer tu negocio. - 1 day ago
- Deon Botha
dbotha.com
Hello, I'm Deon Botha. This is my blog. I build things. I'm a computer scientist & software engineer. Currently co-founder & CTO at Kite. Sometimes I create games for fun. Proud owner of a cat called Pixel. - 1 day ago
- Devereaux Visual Arts
devereauxvisualart.com
From vibrant floral close-ups to evocative storefronts adorned for the holidays, Sharon Devereaux captures the fleeting beauty of life’s quiet moments. - 1 day ago
- ┢玩━乐━园┧ | dawxy
dawxy.com
中间件,数据库相关学习,dawxy个人博客,servicemesh - 1 day ago
- Rádio Diplomata FM 105,3 - Brusque, Santa Catarina | A grande audiência.
diplomatafm.com.br - 1 day ago
- davidmalia.com
- 1 day ago
- david-adam-coffey.com
- 1 day ago
- Compound Interest Calculator
davidtimovski.com - compoundinterest.davidtimovski.com
A calculator for compound interest - 1 day ago
- Media Bisnis, Entrepreneurship, Peluang Bisnis - INFO OPPORTUNITY
franchiseglobal.com
FranchiseGlobal.com adalah portal media yang mengulas tentang Waralaba Indonesia, bisnis waralaba, franchise indonesia, bisnis franchise - 1 day ago
- Vale SC – Notícias do Vale de Itajaí
valesc.com.br
Notícias do Vale de Itajaí - 1 day ago
- DavidJVitale.com
davidjvitale.com - 1 day ago
- David Lakata
davidlakata.com
David Lakata's personal site - 1 day ago
- davidgouch.com
davidgouch.com - 1 day ago
- David Brito Website
davidbrito.com
Desarrollador Front-End | HTML5/CSS3, Javascript, Bootstrap, Node.js, Angular.js. - 1 day ago
- davidemolin.com - books.davidemolin.com
- 1 day ago
- Cybersecurity & Cloud Optimization Services | Trusted by SMBs
inventivehq.com
Your partner for 24/7 Managed Detection and Response for SMBs, and Cloud optimization. Secure your business Today! - 1 day ago
- David Belicza
davidbel.com
David Belicza, Adobe Commerce, Magento, PHP, Go, backend software developer and software architect - 1 day ago
- David Avs
davidavs.com
David Avsajanishvili: Web Developer, Startup Entrepreneur, EMBA - 1 day ago
- DaveJudd.com | Portfolio, Projects, and Blog | DaveJudd.com
davejudd.com
On my personal website you can find my web development and design projects, my photography favorites, as well as other web projects that I enjoy working on. - 1 day ago
- dave-mccall.com
dave-mccall.com - 1 day ago
- Ariquemes AGORA - A notícia no seu tempo
ariquemesagora.com.br
A notícia no seu tempo - 1 day ago
- cl***.daveeargle.com
daveeargle.com - cl***.daveeargle.com - 1 day ago
- Mavidian - Data Conveyer
dataconveyer.com
Mavidian Technologies offers information technology products and services focusing on organizations in the healthcare payer industry. - 1 day ago
- Chris Daugaard's Profile
daugaard47.com
This is the personal website of Chris Daugaard. - 1 day ago
- BLOG DO CICERO FERRAZ
ciceroferraz.com
NOVA OLINDA DO MARANHÃO - 1 day ago
- Home - Data Pipes
datopian.com - datapipes.datopian.com
Data Pipes - Streaming Online Data Processing and Transformations - 1 day ago
- daryledesilva (Daryle Dale De Silva) · GitHub
daryledesilva.com
Created: chiaforkscalculator.com | dcacryptocalculator.com | mountains.com.ph | tg-games.online - daryledesilva - 1 day ago
- Front Page | Web Release
web-release.com
Everyone is looking to lose weight these days, but most people miss the one key to just how easy it really is: eating more fiber! While you need protein, healthy fats, and many vitamins and minerals for overall health, the one food that can help you stay fuller longer and keep your weight down is fiber-rich foods. - 1 day ago
- Notion
notion.site - determined-tabletop-ee3.notion.site
A tool that connects everyday work into one space. It gives you and your teams AI tools—search, writing, note-taking—inside an all-in-one, flexible workspace. - 1 day ago
- Daruma
darumapagos.com
Procesador de pagos con inversión automática - 1 day ago
- Holocron
darthstrom.com
A software development blog by Jason Duffy - 1 day ago
- Home | Darsh's Portfolio & Blog
darshkpatel.com
Hey, I am Darsh - An engineer who loves turning complex problems into tangible creations while having fun along the way, just like playing with LEGO! - 1 day ago
- Just a moment...
pajak.com
Informasi Perpajakan, Ekonomi, Keuangan yang Aktual dan Eksklusif - 1 day ago
- Darkernel · GitHub
darkernel.com
Where Design Meets Engineering, Seamlessly. GitHub is where Darkernel builds software. - 1 day ago
- Attention Required! | Cloudflare
mlsbd.shop
One place you will ever need for your favorite movies and series. Download any movies or series for free and enjoy your time! Make regular visits to stay up to date with the latest and trending movies and series. Happy Watching :) - 1 day ago
- Laravel
darrylfernandez.com - laravel-starter-kit.darrylfernandez.com - 1 day ago
- Блог, который построил Def
darkdef.com
Блог, который построил Def - 1 day ago
- Danny Palmer | Senior Creative + Art Director
dannyprose.com
Danny Palmer is a senior creative and art director in Portland, Oregon. - 1 day ago
- Dan Woods
danveloper.com - 1 day ago
- VALDEMIR OLIVEIRA
blogspot.com - valdemiroliveira8.blogspot.com
BLOG VALDEMIR OLIVEIRA, BACABAL, MARANHÃO, BRASIL, MUNDO,INFORMAÇÕES, DENUNCIAS, OPINIÕES, FACEBOOK. - 1 day ago