├── .gitattributes ├── .github ├── FUNDING.yml ├── dependabot.yml └── workflows │ ├── lint-on-push-pr.yml │ ├── publish-to-amo-on-ff-bump.yml │ ├── publish-to-cws-ews-on-chromium-bump.yml │ ├── sync-changes-to-repos.yml │ └── update-usercount-shields-weekly.yml ├── .gitignore ├── .husky └── pre-commit ├── LICENSE.md ├── assets ├── data │ ├── app.json │ └── sites.json5 └── images │ ├── badges │ ├── chrome-web-store │ │ ├── available-in-the-chrome-web-store-green-square-border-light-498x152.png │ │ ├── available-in-the-chrome-web-store-green-square-border-light.psd │ │ ├── available-in-the-chrome-web-store-square-light.png │ │ └── featured-by-google │ │ │ ├── badge110x20.png │ │ │ ├── badge500x91.png │ │ │ └── src.psd │ ├── firefox │ │ └── available-for-firefox │ │ │ ├── raspberry-border-334x128.png │ │ │ └── src.psd │ ├── greasemonkey │ │ └── install-userscript │ │ │ ├── en │ │ │ ├── badge860x262.png │ │ │ └── src.psd │ │ │ └── zh-cn │ │ │ ├── badge729x262.png │ │ │ └── src.psd │ ├── microsoft-store │ │ ├── get-it-from-microsoft-blue-square-border-light-457x157.png │ │ ├── get-it-from-microsoft-blue-square-border-light.psd │ │ └── get-it-from-microsoft-square-black.png │ └── product-hunt │ │ ├── product-of-the-week-2-larger-centered-rounded-light.svg │ │ ├── product-of-the-week-2-larger-centered-square-light.svg │ │ ├── product-of-the-week-2-rounded-light.svg │ │ └── product-of-the-week-2-square-light.svg │ ├── buttons │ ├── add-to-chrome-button.png │ ├── add-to-chrome-button.psd │ ├── add-to-edge-button.png │ ├── add-to-edge-button.psd │ ├── add-to-firefox-button.png │ ├── add-to-firefox-button.psd │ ├── add-to-opera-button.png │ ├── add-to-opera-button.psd │ ├── add-userscript-button.png │ ├── add-userscript-button.psd │ └── greasy-fork │ │ ├── help-button.svg │ │ ├── install-button.svg │ │ └── zh-cn │ │ └── install-button.svg │ ├── chatgpt.js-notice.jpg │ ├── icons │ ├── chatgpt │ │ ├── black-on-white │ │ │ ├── icon189.png │ │ │ └── icon50.png │ │ ├── white-on-black │ │ │ ├── icon189.png │ │ │ └── icon50.png │ │ ├── white-on-blue-green │ │ │ ├── icon189.png │ │ │ └── icon50.png │ │ └── white-on-gray │ │ │ ├── icon189.png │ │ │ └── icon50.png │ ├── earth │ │ ├── black │ │ │ └── icon32.svg │ │ └── white │ │ │ └── icon32.svg │ ├── toolbar │ │ ├── chrome-puzzle-piece │ │ │ └── gray.png │ │ └── push-pin │ │ │ └── blue.png │ ├── userscript-managers │ │ ├── orangemonkey │ │ │ ├── icon112.png │ │ │ ├── icon16.png │ │ │ ├── icon32.png │ │ │ └── icon64.png │ │ ├── tampermonkey │ │ │ └── icon28.png │ │ └── violentmonkey │ │ │ ├── icon100.png │ │ │ └── icon25.png │ ├── web-stores │ │ ├── chrome-web-store │ │ │ ├── icon16.png │ │ │ └── icon48.png │ │ └── greasy-fork │ │ │ ├── black │ │ │ ├── icon25.png │ │ │ ├── icon50.png │ │ │ └── icon512.png │ │ │ └── white │ │ │ ├── icon25.png │ │ │ ├── icon50.png │ │ │ └── icon512.png │ ├── widescreen-emoji │ │ ├── widescreen-emoji-padded-306.png │ │ ├── widescreen-emoji-unpadded-128.png │ │ ├── widescreen-emoji-unpadded-16.png │ │ ├── widescreen-emoji-unpadded-223.png │ │ └── widescreen-emoji-unpadded-48.png │ └── widescreen-robot-emoji │ │ ├── faded │ │ ├── icon128.png │ │ ├── icon16.png │ │ ├── icon223.png │ │ ├── icon32.png │ │ ├── icon48.png │ │ └── icon64.png │ │ ├── icon128.png │ │ ├── icon16.png │ │ ├── icon223.png │ │ ├── icon32.png │ │ ├── icon48.png │ │ └── icon64.png │ ├── logos │ ├── chatgpt-widescreen-logo-1184x275.psd │ ├── chatgpt-widescreen-logo-dark-mode-1184x275.png │ ├── chatgpt-widescreen-logo-light-mode-1184x275.png │ └── platforms │ │ ├── android │ │ └── head-plus-word │ │ │ ├── green-head-black-word │ │ │ ├── logo150x24.png │ │ │ └── logo3169x517.png │ │ │ └── white │ │ │ ├── logo150x24.png │ │ │ └── logo3169x517.png │ │ └── ios │ │ └── apple-plus-word │ │ ├── black │ │ ├── logo1500x708.png │ │ └── logo150x71.png │ │ └── white │ │ ├── logo1500x708.png │ │ └── logo150x71.png │ ├── reviews │ ├── chrome-web-store.png │ └── greasy-fork.png │ ├── screenshots │ ├── chatgptwidescreen.com.png │ ├── chrome │ │ ├── dev-mode-toggle │ │ │ ├── en.png │ │ │ ├── src.psd │ │ │ ├── zh-cn.png │ │ │ └── zh-hk.png │ │ ├── pin-instructions │ │ │ ├── en.png │ │ │ ├── large │ │ │ │ ├── step-1-2.png │ │ │ │ ├── step-1-2.psd │ │ │ │ ├── step-3.png │ │ │ │ └── step-3.psd │ │ │ ├── pin-instructions+toolbar-menu.png │ │ │ ├── zh-cn.png │ │ │ └── zh-hk.png │ │ └── toolbar-menu │ │ │ ├── en-640x400.png │ │ │ ├── en.png │ │ │ ├── zh-cn-640x400.png │ │ │ ├── zh-cn.png │ │ │ ├── zh-hk-640x400.png │ │ │ └── zh-hk.png │ ├── demo-vid │ │ ├── thumbnail.png │ │ └── thumbnail.psd │ ├── firefox │ │ └── toolbar-menu.png │ ├── toasts │ │ └── widescreen-on-off.png │ ├── widescreen-button │ │ ├── en │ │ │ ├── darkmode.png │ │ │ ├── lightmode-640x400.png │ │ │ └── lightmode.png │ │ ├── src.psd │ │ ├── zh-cn │ │ │ ├── darkmode.png │ │ │ ├── lightmode-640x400.png │ │ │ └── lightmode.png │ │ └── zh-hk │ │ │ ├── darkmode.png │ │ │ ├── lightmode-640x400.png │ │ │ └── lightmode.png │ └── widescreen-mode │ │ ├── en │ │ ├── dark-classic.png │ │ ├── dark.png │ │ └── light.png │ │ ├── zh-cn │ │ ├── dark.png │ │ └── light.png │ │ └── zh-hk │ │ ├── dark.png │ │ └── light.png │ ├── separators │ └── aqua.png │ └── tiles │ ├── marquee │ ├── src.psd │ ├── tile-1280x800.png │ ├── tile-1400x560.png │ └── tile-625x250.png │ └── small │ ├── alpha │ ├── src.psd │ └── tile-alpha-440x280.png │ ├── src.psd │ └── tile-440x280.png ├── chromium ├── LICENSE.md ├── docs │ ├── PRIVACY.md │ ├── README.md │ ├── SECURITY.md │ ├── hi │ │ ├── LICENSE.md │ │ ├── PRIVACY.md │ │ └── SECURITY.md │ └── zh-cn │ │ ├── LICENSE.md │ │ ├── PRIVACY.md │ │ └── SECURITY.md ├── extension │ ├── _locales │ │ ├── af │ │ │ └── messages.json │ │ ├── am │ │ │ └── messages.json │ │ ├── ar │ │ │ └── messages.json │ │ ├── az │ │ │ └── messages.json │ │ ├── be │ │ │ └── messages.json │ │ ├── bem │ │ │ └── messages.json │ │ ├── bg │ │ │ └── messages.json │ │ ├── bn │ │ │ └── messages.json │ │ ├── bo │ │ │ └── messages.json │ │ ├── bs │ │ │ └── messages.json │ │ ├── ca │ │ │ └── messages.json │ │ ├── ceb │ │ │ └── messages.json │ │ ├── cs │ │ │ └── messages.json │ │ ├── cy │ │ │ └── messages.json │ │ ├── da │ │ │ └── messages.json │ │ ├── de │ │ │ └── messages.json │ │ ├── dv │ │ │ └── messages.json │ │ ├── dz │ │ │ └── messages.json │ │ ├── el │ │ │ └── messages.json │ │ ├── en │ │ │ └── messages.json │ │ ├── eo │ │ │ └── messages.json │ │ ├── es │ │ │ └── messages.json │ │ ├── et │ │ │ └── messages.json │ │ ├── eu │ │ │ └── messages.json │ │ ├── fa │ │ │ └── messages.json │ │ ├── fi │ │ │ └── messages.json │ │ ├── fo │ │ │ └── messages.json │ │ ├── fr │ │ │ └── messages.json │ │ ├── gd │ │ │ └── messages.json │ │ ├── gl │ │ │ └── messages.json │ │ ├── gu │ │ │ └── messages.json │ │ ├── haw │ │ │ └── messages.json │ │ ├── he │ │ │ └── messages.json │ │ ├── hi │ │ │ └── messages.json │ │ ├── hr │ │ │ └── messages.json │ │ ├── ht │ │ │ └── messages.json │ │ ├── hu │ │ │ └── messages.json │ │ ├── hy │ │ │ └── messages.json │ │ ├── id │ │ │ └── messages.json │ │ ├── is │ │ │ └── messages.json │ │ ├── it │ │ │ └── messages.json │ │ ├── ja │ │ │ └── messages.json │ │ ├── ka │ │ │ └── messages.json │ │ ├── kab │ │ │ └── messages.json │ │ ├── kk │ │ │ └── messages.json │ │ ├── km │ │ │ └── messages.json │ │ ├── kn │ │ │ └── messages.json │ │ ├── ko │ │ │ └── messages.json │ │ ├── ku │ │ │ └── messages.json │ │ ├── ky │ │ │ └── messages.json │ │ ├── la │ │ │ └── messages.json │ │ ├── lb │ │ │ └── messages.json │ │ ├── lo │ │ │ └── messages.json │ │ ├── lt │ │ │ └── messages.json │ │ ├── lv │ │ │ └── messages.json │ │ ├── mg │ │ │ └── messages.json │ │ ├── mi │ │ │ └── messages.json │ │ ├── mk │ │ │ └── messages.json │ │ ├── ml │ │ │ └── messages.json │ │ ├── mn │ │ │ └── messages.json │ │ ├── ms │ │ │ └── messages.json │ │ ├── mt │ │ │ └── messages.json │ │ ├── my │ │ │ └── messages.json │ │ ├── ne │ │ │ └── messages.json │ │ ├── nl │ │ │ └── messages.json │ │ ├── no │ │ │ └── messages.json │ │ ├── ny │ │ │ └── messages.json │ │ ├── pa │ │ │ └── messages.json │ │ ├── pap │ │ │ └── messages.json │ │ ├── pl │ │ │ └── messages.json │ │ ├── ps │ │ │ └── messages.json │ │ ├── pt │ │ │ └── messages.json │ │ ├── ro │ │ │ └── messages.json │ │ ├── ru │ │ │ └── messages.json │ │ ├── rw │ │ │ └── messages.json │ │ ├── sg │ │ │ └── messages.json │ │ ├── si │ │ │ └── messages.json │ │ ├── sk │ │ │ └── messages.json │ │ ├── sl │ │ │ └── messages.json │ │ ├── sm │ │ │ └── messages.json │ │ ├── sn │ │ │ └── messages.json │ │ ├── so │ │ │ └── messages.json │ │ ├── sr │ │ │ └── messages.json │ │ ├── sv │ │ │ └── messages.json │ │ ├── sw │ │ │ └── messages.json │ │ ├── ta │ │ │ └── messages.json │ │ ├── te │ │ │ └── messages.json │ │ ├── tg │ │ │ └── messages.json │ │ ├── th │ │ │ └── messages.json │ │ ├── ti │ │ │ └── messages.json │ │ ├── tk │ │ │ └── messages.json │ │ ├── tn │ │ │ └── messages.json │ │ ├── to │ │ │ └── messages.json │ │ ├── tpi │ │ │ └── messages.json │ │ ├── tr │ │ │ └── messages.json │ │ ├── uk │ │ │ └── messages.json │ │ ├── ur │ │ │ └── messages.json │ │ ├── uz │ │ │ └── messages.json │ │ ├── vi │ │ │ └── messages.json │ │ ├── xh │ │ │ └── messages.json │ │ ├── yi │ │ │ └── messages.json │ │ ├── zh │ │ │ └── messages.json │ │ ├── zh_CN │ │ │ └── messages.json │ │ ├── zh_HK │ │ │ └── messages.json │ │ ├── zh_SG │ │ │ └── messages.json │ │ ├── zh_TW │ │ │ └── messages.json │ │ └── zu │ │ │ └── messages.json │ ├── components │ │ ├── buttons.js │ │ ├── icons.js │ │ ├── modals.js │ │ └── tooltip.js │ ├── content.js │ ├── icons │ │ ├── faded │ │ │ ├── icon128.png │ │ │ ├── icon16.png │ │ │ ├── icon32.png │ │ │ ├── icon48.png │ │ │ └── icon64.png │ │ ├── icon128.png │ │ ├── icon16.png │ │ ├── icon32.png │ │ ├── icon48.png │ │ └── icon64.png │ ├── lib │ │ ├── browser.js │ │ ├── chatbar.js │ │ ├── chatgpt.min.js │ │ ├── dom.min.js │ │ ├── json5.min.js │ │ ├── settings.js │ │ ├── styles.js │ │ ├── sync.js │ │ └── ui.js │ ├── manifest.json │ ├── popup │ │ ├── controller.js │ │ ├── index.html │ │ └── style.css │ └── service-worker.js └── utils │ └── translate-en-messages.py ├── docs ├── PRIVACY.md ├── README.md ├── SECURITY.md ├── hi │ ├── LICENSE.md │ ├── PRIVACY.md │ └── SECURITY.md └── zh-cn │ ├── LICENSE.md │ ├── PRIVACY.md │ ├── README.md │ └── SECURITY.md ├── eslint.config.mjs ├── firefox ├── LICENSE.md ├── docs │ ├── PRIVACY.md │ ├── README.md │ ├── SECURITY.md │ ├── hi │ │ ├── LICENSE.md │ │ ├── PRIVACY.md │ │ └── SECURITY.md │ └── zh-cn │ │ ├── LICENSE.md │ │ ├── PRIVACY.md │ │ └── SECURITY.md ├── extension │ ├── _locales │ │ ├── af │ │ │ └── messages.json │ │ ├── am │ │ │ └── messages.json │ │ ├── ar │ │ │ └── messages.json │ │ ├── az │ │ │ └── messages.json │ │ ├── be │ │ │ └── messages.json │ │ ├── bem │ │ │ └── messages.json │ │ ├── bg │ │ │ └── messages.json │ │ ├── bn │ │ │ └── messages.json │ │ ├── bo │ │ │ └── messages.json │ │ ├── bs │ │ │ └── messages.json │ │ ├── ca │ │ │ └── messages.json │ │ ├── ceb │ │ │ └── messages.json │ │ ├── cs │ │ │ └── messages.json │ │ ├── cy │ │ │ └── messages.json │ │ ├── da │ │ │ └── messages.json │ │ ├── de │ │ │ └── messages.json │ │ ├── dv │ │ │ └── messages.json │ │ ├── dz │ │ │ └── messages.json │ │ ├── el │ │ │ └── messages.json │ │ ├── en │ │ │ └── messages.json │ │ ├── eo │ │ │ └── messages.json │ │ ├── es │ │ │ └── messages.json │ │ ├── et │ │ │ └── messages.json │ │ ├── eu │ │ │ └── messages.json │ │ ├── fa │ │ │ └── messages.json │ │ ├── fi │ │ │ └── messages.json │ │ ├── fo │ │ │ └── messages.json │ │ ├── fr │ │ │ └── messages.json │ │ ├── gd │ │ │ └── messages.json │ │ ├── gl │ │ │ └── messages.json │ │ ├── gu │ │ │ └── messages.json │ │ ├── haw │ │ │ └── messages.json │ │ ├── he │ │ │ └── messages.json │ │ ├── hi │ │ │ └── messages.json │ │ ├── hr │ │ │ └── messages.json │ │ ├── ht │ │ │ └── messages.json │ │ ├── hu │ │ │ └── messages.json │ │ ├── hy │ │ │ └── messages.json │ │ ├── id │ │ │ └── messages.json │ │ ├── is │ │ │ └── messages.json │ │ ├── it │ │ │ └── messages.json │ │ ├── ja │ │ │ └── messages.json │ │ ├── ka │ │ │ └── messages.json │ │ ├── kab │ │ │ └── messages.json │ │ ├── kk │ │ │ └── messages.json │ │ ├── km │ │ │ └── messages.json │ │ ├── kn │ │ │ └── messages.json │ │ ├── ko │ │ │ └── messages.json │ │ ├── ku │ │ │ └── messages.json │ │ ├── ky │ │ │ └── messages.json │ │ ├── la │ │ │ └── messages.json │ │ ├── lb │ │ │ └── messages.json │ │ ├── lo │ │ │ └── messages.json │ │ ├── lt │ │ │ └── messages.json │ │ ├── lv │ │ │ └── messages.json │ │ ├── mg │ │ │ └── messages.json │ │ ├── mi │ │ │ └── messages.json │ │ ├── mk │ │ │ └── messages.json │ │ ├── ml │ │ │ └── messages.json │ │ ├── mn │ │ │ └── messages.json │ │ ├── ms │ │ │ └── messages.json │ │ ├── mt │ │ │ └── messages.json │ │ ├── my │ │ │ └── messages.json │ │ ├── ne │ │ │ └── messages.json │ │ ├── nl │ │ │ └── messages.json │ │ ├── no │ │ │ └── messages.json │ │ ├── ny │ │ │ └── messages.json │ │ ├── pa │ │ │ └── messages.json │ │ ├── pap │ │ │ └── messages.json │ │ ├── pl │ │ │ └── messages.json │ │ ├── ps │ │ │ └── messages.json │ │ ├── pt │ │ │ └── messages.json │ │ ├── ro │ │ │ └── messages.json │ │ ├── ru │ │ │ └── messages.json │ │ ├── rw │ │ │ └── messages.json │ │ ├── sg │ │ │ └── messages.json │ │ ├── si │ │ │ └── messages.json │ │ ├── sk │ │ │ └── messages.json │ │ ├── sl │ │ │ └── messages.json │ │ ├── sm │ │ │ └── messages.json │ │ ├── sn │ │ │ └── messages.json │ │ ├── so │ │ │ └── messages.json │ │ ├── sr │ │ │ └── messages.json │ │ ├── sv │ │ │ └── messages.json │ │ ├── sw │ │ │ └── messages.json │ │ ├── ta │ │ │ └── messages.json │ │ ├── te │ │ │ └── messages.json │ │ ├── tg │ │ │ └── messages.json │ │ ├── th │ │ │ └── messages.json │ │ ├── ti │ │ │ └── messages.json │ │ ├── tk │ │ │ └── messages.json │ │ ├── tn │ │ │ └── messages.json │ │ ├── to │ │ │ └── messages.json │ │ ├── tpi │ │ │ └── messages.json │ │ ├── tr │ │ │ └── messages.json │ │ ├── uk │ │ │ └── messages.json │ │ ├── ur │ │ │ └── messages.json │ │ ├── uz │ │ │ └── messages.json │ │ ├── vi │ │ │ └── messages.json │ │ ├── xh │ │ │ └── messages.json │ │ ├── yi │ │ │ └── messages.json │ │ ├── zh │ │ │ └── messages.json │ │ ├── zh_CN │ │ │ └── messages.json │ │ ├── zh_HK │ │ │ └── messages.json │ │ ├── zh_SG │ │ │ └── messages.json │ │ ├── zh_TW │ │ │ └── messages.json │ │ └── zu │ │ │ └── messages.json │ ├── background.js │ ├── components │ │ ├── buttons.js │ │ ├── icons.js │ │ ├── modals.js │ │ └── tooltip.js │ ├── content.js │ ├── icons │ │ ├── faded │ │ │ ├── icon128.png │ │ │ ├── icon16.png │ │ │ ├── icon32.png │ │ │ ├── icon48.png │ │ │ └── icon64.png │ │ ├── icon128.png │ │ ├── icon16.png │ │ ├── icon32.png │ │ ├── icon48.png │ │ └── icon64.png │ ├── lib │ │ ├── browser.js │ │ ├── chatbar.js │ │ ├── chatgpt.min.js │ │ ├── dom.min.js │ │ ├── json5.min.js │ │ ├── settings.js │ │ ├── styles.js │ │ ├── sync.js │ │ └── ui.js │ ├── manifest.json │ └── popup │ │ ├── controller.js │ │ ├── index.html │ │ └── style.css └── utils │ └── translate-en-messages.py ├── greasemonkey ├── LICENSE.md ├── chatgpt-widescreen-mode.user.js └── docs │ ├── PRIVACY.md │ ├── README.md │ ├── SECURITY.md │ ├── hi │ ├── LICENSE.md │ ├── PRIVACY.md │ └── SECURITY.md │ └── zh-cn │ ├── LICENSE.md │ ├── PRIVACY.md │ └── SECURITY.md ├── package-lock.json ├── package.json ├── pages └── welcome │ ├── assets │ ├── css │ │ └── styles.css │ └── js │ │ ├── min │ │ ├── fade-elems.min.js │ │ └── update-footer-urls.min.js │ │ └── src │ │ ├── fade-elems.js │ │ └── update-footer-urls.js │ └── chromium │ └── index.html └── utils └── bump ├── extension-manifests.sh └── resources.js /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto eol=lf 2 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: adamlui 2 | ko_fi: adamlui 3 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | 4 | - package-ecosystem: 'github-actions' 5 | directory: / 6 | schedule: 7 | interval: daily 8 | 9 | - package-ecosystem: npm 10 | directory: / 11 | schedule: 12 | interval: daily 13 | groups: 14 | dev-dependencies: 15 | dependency-type: development 16 | -------------------------------------------------------------------------------- /.github/workflows/lint-on-push-pr.yml: -------------------------------------------------------------------------------- 1 | name: Lint pushes/PRs 2 | on: [push, pull_request] 3 | 4 | permissions: 5 | contents: read 6 | 7 | jobs: 8 | 9 | eslint: 10 | name: ESLint 11 | runs-on: ubuntu-latest 12 | steps: 13 | 14 | - name: Checkout repository code 15 | uses: actions/checkout@v4 16 | 17 | - name: Set up Node.js 18 | uses: actions/setup-node@v4 19 | with: 20 | node-version: 'lts/*' 21 | 22 | - name: Install dependencies 23 | run: npm ci 24 | 25 | - name: Run ESLint 26 | run: npm run lint 27 | -------------------------------------------------------------------------------- /.github/workflows/publish-to-amo-on-ff-bump.yml: -------------------------------------------------------------------------------- 1 | name: Publish to AMO on FF version bump 2 | 3 | on: 4 | push: 5 | branches: [main] 6 | paths: [firefox/extension/manifest.json] 7 | 8 | permissions: 9 | contents: read 10 | 11 | jobs: 12 | check-version-to-publish: 13 | runs-on: ubuntu-latest 14 | steps: 15 | 16 | - name: Checkout adamlui/chatgpt-widescreen 17 | uses: actions/checkout@v4 18 | with: 19 | sparse-checkout: firefox 20 | fetch-depth: 2 21 | 22 | - name: Check FF manifest for version bump 23 | run: | 24 | current_ver=$(cat firefox/extension/manifest.json | grep '"version"' | sed -E 's/.*"version": "(.*)".*/\1/') 25 | prev_ver=$(git show HEAD^:firefox/extension/manifest.json | grep '"version"' | sed -E 's/.*"version": "(.*)".*/\1/') 26 | if [ "$current_ver" != "$prev_ver" ] ; then 27 | echo "Extension updated from $prev_ver to $current_ver" 28 | echo "VERSION_CHANGED=true" >> $GITHUB_ENV 29 | else echo "VERSION_CHANGED=false" >> $GITHUB_ENV ; fi 30 | 31 | - name: Create zipball 32 | if: env.VERSION_CHANGED == 'true' 33 | run: | 34 | cd firefox/extension 35 | zip -r ../../extension.zip . 36 | 37 | - name: Publish to AMO 38 | if: env.VERSION_CHANGED == 'true' 39 | uses: cardinalby/webext-buildtools-firefox-addons-action@987e338100095280ec8daf942e5640aeb55d3647 # v1.0.10 40 | with: 41 | extensionId: 'chatgpt.widescreen@chatgptevo.com' 42 | jwtIssuer: ${{ secrets.AMO_ISSUER }} 43 | jwtSecret: ${{ secrets.AMO_SECRET }} 44 | zipFilePath: extension.zip 45 | -------------------------------------------------------------------------------- /.github/workflows/publish-to-cws-ews-on-chromium-bump.yml: -------------------------------------------------------------------------------- 1 | name: Publish to CWS + EWS on Chromium version bump 2 | 3 | on: 4 | push: 5 | branches: [main] 6 | paths: [chromium/extension/manifest.json] 7 | 8 | permissions: 9 | contents: read 10 | 11 | jobs: 12 | check-version-to-publish: 13 | runs-on: ubuntu-latest 14 | steps: 15 | 16 | - name: Checkout adamlui/chatgpt-widescreen 17 | uses: actions/checkout@v4 18 | with: 19 | sparse-checkout: chromium 20 | fetch-depth: 2 21 | 22 | - name: Check Chromium manifest for version bump 23 | run: | 24 | current_ver=$(cat chromium/extension/manifest.json | grep '"version"' | sed -E 's/.*"version": "(.*)".*/\1/') 25 | prev_ver=$(git show HEAD^:chromium/extension/manifest.json | grep '"version"' | sed -E 's/.*"version": "(.*)".*/\1/') 26 | if [ "$current_ver" != "$prev_ver" ] ; then 27 | echo "Extension updated from $prev_ver to $current_ver" 28 | echo "VERSION_CHANGED=true" >> $GITHUB_ENV 29 | else echo "VERSION_CHANGED=false" >> $GITHUB_ENV ; fi 30 | 31 | - name: Create zipball 32 | if: env.VERSION_CHANGED == 'true' 33 | run: | 34 | cd chromium/extension 35 | zip -r ../../extension.zip . 36 | 37 | - name: Publish to CWS 38 | if: env.VERSION_CHANGED == 'true' 39 | uses: mobilefirstllc/cws-publish@5e3b5249835f1fac9f7e8c9982fec7a80e1b82a8 40 | with: 41 | action: publish 42 | extension_id: jgnjpnmofkalfliddjelaciggjgnphgm 43 | client_id: ${{ secrets.CWS_CLIENT_ID }} 44 | client_secret: ${{ secrets.CWS_CLIENT_SECRET }} 45 | refresh_token: ${{ secrets.CWS_REFRESH_TOKEN }} 46 | zip_file: extension.zip 47 | continue-on-error: true 48 | 49 | - name: Publish to EWS 50 | if: env.VERSION_CHANGED == 'true' 51 | uses: wdzeng/edge-addon@d4db1eea77297a24d799394dec87e8912e0902f9 # v2.1.0 52 | with: 53 | product-id: ${{ secrets.EWS_PRODUCT_ID }} 54 | client-id: ${{ secrets.EWS_CLIENT_ID }} 55 | api-key: ${{ secrets.EWS_CLIENT_SECRET }} 56 | zip-path: extension.zip 57 | continue-on-error: true 58 | -------------------------------------------------------------------------------- /.github/workflows/sync-changes-to-repos.yml: -------------------------------------------------------------------------------- 1 | name: Sync _locales/ between /extension/, then ** to adamlui/ai-web-extensions/chatgpt-widescreen/, then greasemonkey/ to adamlui/userscripts/chatgpt/chatgpt-widescreen/ 2 | 3 | on: 4 | push: 5 | branches: [main] 6 | paths: ["**", "!.*"] 7 | 8 | permissions: 9 | contents: read 10 | 11 | jobs: 12 | build: 13 | if: (github.repository == 'adamlui/chatgpt-widescreen') && (github.event.commits[0].committer.username != 'kudo-sync-bot') 14 | runs-on: ubuntu-latest 15 | env: 16 | TZ: PST8PDT 17 | 18 | steps: 19 | 20 | - name: Checkout adamlui/chatgpt-widescreen 21 | uses: actions/checkout@v4 22 | with: 23 | token: ${{ secrets.REPO_SYNC_PAT }} 24 | repository: adamlui/chatgpt-widescreen 25 | path: adamlui/chatgpt-widescreen 26 | fetch-depth: 2 27 | 28 | - name: Checkout adamlui/ai-web-extensions 29 | uses: actions/checkout@v4 30 | with: 31 | token: ${{ secrets.REPO_SYNC_PAT }} 32 | repository: adamlui/ai-web-extensions 33 | path: adamlui/ai-web-extensions 34 | 35 | - name: Checkout adamlui/userscripts 36 | uses: actions/checkout@v4 37 | with: 38 | token: ${{ secrets.REPO_SYNC_PAT }} 39 | repository: adamlui/userscripts 40 | path: adamlui/userscripts 41 | 42 | - name: Sync _locales/ between /extension/ 43 | run: | 44 | cd ${{ github.workspace }}/adamlui/chatgpt-widescreen 45 | ff_dir="firefox/extension/_locales" 46 | chromium_dir="chromium/extension/_locales" 47 | 48 | # Loop thru all lang dirs in firefox 49 | for locale in $(find "$ff_dir" -mindepth 1 -maxdepth 1 -type d -exec basename {} \;) ; do 50 | ff_file="$ff_dir/$locale/messages.json" 51 | chromium_file="$chromium_dir/$locale/messages.json" 52 | if [[ -f "$ff_file" && -f "$chromium_file" ]] ; then 53 | 54 | # Get the latest commit timestamps for both files 55 | ff_timestamp=$(git log -1 --format="%ct" -- "$ff_file" 2>/dev/null || echo 0) 56 | chromium_timestamp=$(git log -1 --format="%ct" -- "$chromium_file" 2>/dev/null || echo 0) 57 | 58 | # Sync the most recently updated messages.json to the other dir 59 | if [[ $ff_timestamp -ne $chromium_timestamp ]] ; then 60 | if (( $ff_timestamp > $chromium_timestamp )) ; then 61 | cp -f "$ff_file" "$chromium_file" ; sync_src="${ff_dir%%/*}" 62 | else cp -f "$chromium_file" "$ff_file" ; sync_src="${chromium_dir%%/*}" ; fi 63 | fi 64 | 65 | fi 66 | done 67 | 68 | # Expose sync src for commit msg in self-push step 69 | echo "SYNC_SRC=$sync_src" >> $GITHUB_ENV 70 | 71 | - name: Sync ** to adamlui/ai-web-extensions/chatgpt-widescreen/ 72 | run: | 73 | rsync -avhr --delete --exclude '.*' \ 74 | ${{ github.workspace }}/adamlui/chatgpt-widescreen/ \ 75 | ${{ github.workspace }}/adamlui/ai-web-extensions/chatgpt-widescreen/ 76 | 77 | - name: Sync greasemonkey/ to adamlui/userscripts/chatgpt/chatgpt-widescreen/ 78 | run: | 79 | rsync -avhr --delete \ 80 | ${{ github.workspace }}/adamlui/chatgpt-widescreen/greasemonkey/ \ 81 | ${{ github.workspace }}/adamlui/userscripts/chatgpt/chatgpt-widescreen/ 82 | 83 | - name: Escape backticks in commit msg 84 | env: 85 | COMMIT_MSG: ${{ github.event.head_commit.message }} 86 | run: | 87 | echo "ESCAPED_MSG<> $GITHUB_ENV 88 | echo "$COMMIT_MSG" | sed 's/`/\`/g' >> $GITHUB_ENV 89 | echo "EOF" >> $GITHUB_ENV 90 | 91 | - name: Config committer 92 | run: | 93 | gpg --batch --import <(echo "${{ secrets.GPG_PRIVATE_KEY }}") 94 | git config --global commit.gpgsign true 95 | git config --global user.name "kudo-sync-bot" 96 | git config --global user.email "auto-sync@kudoai.com" 97 | git config --global user.signingkey "${{ secrets.GPG_PRIVATE_ID }}" 98 | 99 | - name: Push changes to adamlui/chatgpt-widescreen 100 | if: env.SYNC_SRC 101 | run: | 102 | cd ${{ github.workspace }}/adamlui/chatgpt-widescreen 103 | git add . && git commit -n -m "$ESCAPED_MSG ↞ [auto-sync from ${{ env.SYNC_SRC }}/]" || true 104 | git push 105 | 106 | - name: Push changes to adamlui/ai-web-extensions 107 | run: | 108 | cd ${{ github.workspace }}/adamlui/ai-web-extensions 109 | git add . 110 | git commit -n -m "$ESCAPED_MSG ↞ [auto-sync from https://github.com/adamlui/chatgpt-widescreen]" || true 111 | git push 112 | 113 | - name: Push changes to adamlui/userscripts 114 | run: | 115 | cd ${{ github.workspace }}/adamlui/userscripts 116 | git add . 117 | git commit -n -m "$ESCAPED_MSG ↞ [auto-sync from https://github.com/adamlui/chatgpt-widescreen]" || true 118 | git push 119 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *cache 2 | node_modules/ 3 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Init UI colors 4 | NC="\033[0m" # no color 5 | BR="\033[1;91m" # bright red 6 | BY="\033[1;33m" # bright yellow 7 | 8 | # Run ESLint 9 | echo -e "\n${BY}Running ESLint...${NC}" 10 | if npm ls -g eslint &> /dev/null || npm ls eslint &> /dev/null ; then 11 | npm run lint 12 | else 13 | PROJECT_ROOT=$( 14 | cd "$(dirname "$0")/.." && # nav to root 15 | [ "$OSTYPE" == "msys" ] && pwd -W || pwd # get absolute path 16 | ) 17 | echo -e "\n${BR}Warning: ESLint not installed${NC}" 18 | echo -e " To add missing dependencies, run 'npm install' from" 19 | echo -e " $PROJECT_ROOT\n" 20 | fi 21 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | 5 | 6 | 7 |  English | 8 | 简体中文 | 9 | हिंदी 10 |
11 |
12 | 13 | # 🏛️ MIT License 14 | 15 | **Copyright © 2023–2025 [Adam Lui](https://github.com/adamlui) & [contributors](https://docs.chatgptwidescreen.com/#-contributors).** 16 | 17 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 18 | 19 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 20 | 21 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /assets/data/app.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ChatGPT Widescreen", "symbol": "🖥️", "slug": "chatgpt-widescreen", 3 | "author": { "name": "Adam Lui", "url": "https://github.com/adamlui" }, 4 | "urls": { 5 | "assets": "https://cdn.jsdelivr.net/gh/adamlui/chatgpt-widescreen@latest/assets", 6 | "aiwebAssets": "https://cdn.jsdelivr.net/gh/adamlui/ai-web-extensions@latest/assets", 7 | "chatgptjs": "https://chatgpt.js.org", 8 | "contributors": "https://docs.chatgptwidescreen.com/#-contributors", 9 | "discuss": "https://github.com/adamlui/chatgpt-widescreen/discussions", 10 | "donate": { 11 | "cashapp": "https://cash.app/$adamlui", 12 | "github": "https://github.com/sponsors/adamlui", 13 | "ko-fi": "https://ko-fi.com/adamlui", 14 | "paypal": "https://paypal.me/adamlui" 15 | }, 16 | "github": "https://github.com/adamlui/chatgpt-widescreen", 17 | "relatedExtensions": "https://aiwebextensions.com", 18 | "review": { 19 | "chrome": "https://chrome.chatgptwidescreen.com/reviews", 20 | "edge": "https://edge.chatgptwidescreen.com", 21 | "firefox": "https://ff.chatgptwidescreen.com", 22 | "productHunt": "https://www.producthunt.com/products/chatgpt-widescreen-mode/reviews/new" 23 | }, 24 | "support": "https://support.chatgptwidescreen.com", 25 | "uninstall": "https://forms.gle/F2n55B38LYP9uxXM8", 26 | "update": { "gm": "https://gm.chatgptwidescreen.com" }, 27 | "welcome": "https://chatgptwidescreen.com/welcome" 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /assets/data/sites.json5: -------------------------------------------------------------------------------- 1 | { 2 | "chatgpt": { 3 | "availFeatures": [ 4 | "blockSpamDisabled", "btnAnimationsDisabled", "btnsVisible", "fullerWindows", "fullWindow", "hiddenFooter", 5 | "hiddenHeader", "ncbDisabled", "notifBottom", "notifDisabled", "tallerChatboxHeight", "tcbDisabled", "toastMode", 6 | "widerChatbox", "widerChatboxWidth", "widescreen", "widescreenWidth" 7 | ], 8 | "selectors": { 9 | "btns": { 10 | "dictate": "button:has(path[d*=\"M18.9953\"], path[d*=\"M11.165\"])", "help": "div.lg\\:bottom-3 > button", 11 | "login": "button[data-testid*=login]", 12 | "newChat": // Pencil button (when logged in), Cycle Arrows button (in temp chat logged out) 13 | "a[href=\"/\"]:has(svg), button:has([d^=\"M3.06957\"])", 14 | "send": "button[data-testid=send-button]", "sidebar": "button[data-testid*=sidebar-button]", 15 | "stop": "button[data-testid=stop-button]", "voice": "button[data-testid*=composer-speech-button]" 16 | }, 17 | "footer": "div#thread-bottom-container > div:last-of-type > div, span.text-sm.leading-none", 18 | "header": "div#page-header, main div.sticky:first-of-type", "input": "div#prompt-textarea", 19 | "rightbar": "div[class*=sidebar]:has(div[data-testid=screen-threadFlyOut])", 20 | "sidebar": "div.bg-token-sidebar-surface-primary", 21 | "spam": { 22 | "banners": { 23 | "tos": "div.bottom-full:has(a[href=\"https://openai.com/terms\"])", // https://i.imgur.com/8BUOhn1.png 24 | "withButton": "div.bottom-full:has(button[data-testid=close-button])" // https://i.imgur.com/5dGYD42.png 25 | }, 26 | "modals": { 27 | "deepResearch": "div[data-testid=modal-deep-research-mini-nux]", // https://i.imgur.com/3GLab1m.png 28 | "guest": "div[data-testid^=modal-no-auth]" // https://i.imgur.com/ItLsJLT.png 29 | }, 30 | "popups": { 31 | "announcement": // https://imgur.com/a/TIKFbeA 32 | "div[data-radix-popper-content-wrapper]:has(button[data-testid=announcement-tooltip-close-btn])" 33 | } 34 | } 35 | }, 36 | "urls": { "homepage": "https://chatgpt.com" } 37 | }, 38 | "perplexity": { 39 | "availFeatures": [ 40 | "blockSpamDisabled", "btnAnimationsDisabled", "btnsVisible", "fullerWindows", "fullWindow", "hiddenFooter", 41 | "hiddenHeader", "ncbDisabled", "notifBottom", "notifDisabled", "tallerChatboxHeight", "tcbDisabled", "toastMode", 42 | "widescreen", "widescreenWidth" 43 | ], 44 | "hasSidebar": true, 45 | "selectors": { 46 | "btns": { 47 | "attachFile": "button:has(svg[class*=icon-paperclip])", "dictation": "button:has(svg[class*=icon-microphone])", 48 | "help": "button:has(svg[data-icon=question])", "input": "textarea[placeholder]", 49 | "newChat": "div:has(> span > a[href=\"/\"] svg) + div", 50 | "send": "button:has(svg[class*=icon-arrow-], svg[class*=icon-git-fork])", // Send w/ ↑/→ or New Thread 51 | "settings": "button:has(svg[data-icon=user])", "sidebar": "button[data-testid=sidebar-pin-sidebar]" 52 | }, 53 | "footer": "div:has(> a[href=\"https://www.perplexity.ai/hub/careers\"])", 54 | "header": "div[class*=header].sticky:nth-of-type(2), div.h-headerHeight", "input": "textarea[placeholder]", 55 | "spam": { 56 | "banners": { 57 | "apps": "div.col-span-6:has(a[href*=\"perplexity.ai\"])", // http://i.imgur.com/ewit7S6.png 58 | "homepage": "div.absolute.w-full:has(svg[data-icon=xmark])" 59 | }, 60 | "modals": { 61 | "privateThread": "div[data-type=portal]:has(svg[data-icon=google])" }, // https://i.imgur.com/n3BPf56.png 62 | "popups": { 63 | "googleLogin": "div#credential_picker_container", // upper-right login popup 64 | "perplexityLogin": "div[class*=bottom]:has(div[data-testid*=login-modal])" // lower-right login/signup popup 65 | }, 66 | "sideBlocks": { 67 | // "You are missing out: Upgrade to Pro for more detailed answers powered by the top AI models" 68 | "upgradeToPro": "div[class*=\"\:block\"]:has(button):has(svg[data-icon*=arrow-up-right])" }, 69 | "slideUpCards": { 70 | "getAndroidApp": "div[data-type=portal]:has(svg[data-icon=android])" } // https://i.imgur.com/FZdDg6d.png 71 | }, 72 | "tooltip": "div[data-radix-popper-content-wrapper]:has(> div[class*=tooltip])" 73 | }, 74 | "urls": { "homepage": "https://www.perplexity.ai" } 75 | }, 76 | "poe": { 77 | "availFeatures": [ 78 | "blockSpamDisabled", "btnAnimationsDisabled", "btnsVisible", "fullerWindows", "fullWindow", "hiddenHeader", 79 | "ncbDisabled", "notifBottom", "notifDisabled", "tallerChatboxHeight", "tcbDisabled", "toastMode", "widerChatbox", 80 | "widerChatboxWidth", "widescreen", "widescreenWidth" 81 | ], 82 | "hasSidebar": true, 83 | "selectors": { 84 | "btns": { 85 | "attachFile": "button[data-button-file-input]", "mic": "button[data-button-voice-input=true]", 86 | "newChat": "header a[class*=button]", "send": "button[data-button-send]" 87 | }, 88 | "header": "header, div[class*=CanvasHeader_header]", 89 | "input": "div[class*=InputContainer_textArea] > textarea, div[class*=InputContainer_textArea]::after", 90 | "sidebar": "menu[class*=sidebar], aside[class*=sidebar]", 91 | "spam": { "cards": { "newFeature": "div[class*=NewFeatureCard]" }} 92 | }, 93 | "urls": { "homepage": "https://poe.com" } 94 | } 95 | } 96 | -------------------------------------------------------------------------------- /assets/images/badges/chrome-web-store/available-in-the-chrome-web-store-green-square-border-light-498x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/badges/chrome-web-store/available-in-the-chrome-web-store-green-square-border-light-498x152.png -------------------------------------------------------------------------------- /assets/images/badges/chrome-web-store/available-in-the-chrome-web-store-green-square-border-light.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/badges/chrome-web-store/available-in-the-chrome-web-store-green-square-border-light.psd -------------------------------------------------------------------------------- /assets/images/badges/chrome-web-store/available-in-the-chrome-web-store-square-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/badges/chrome-web-store/available-in-the-chrome-web-store-square-light.png -------------------------------------------------------------------------------- /assets/images/badges/chrome-web-store/featured-by-google/badge110x20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/badges/chrome-web-store/featured-by-google/badge110x20.png -------------------------------------------------------------------------------- /assets/images/badges/chrome-web-store/featured-by-google/badge500x91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/badges/chrome-web-store/featured-by-google/badge500x91.png -------------------------------------------------------------------------------- /assets/images/badges/chrome-web-store/featured-by-google/src.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/badges/chrome-web-store/featured-by-google/src.psd -------------------------------------------------------------------------------- /assets/images/badges/firefox/available-for-firefox/raspberry-border-334x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/badges/firefox/available-for-firefox/raspberry-border-334x128.png -------------------------------------------------------------------------------- /assets/images/badges/firefox/available-for-firefox/src.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/badges/firefox/available-for-firefox/src.psd -------------------------------------------------------------------------------- /assets/images/badges/greasemonkey/install-userscript/en/badge860x262.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/badges/greasemonkey/install-userscript/en/badge860x262.png -------------------------------------------------------------------------------- /assets/images/badges/greasemonkey/install-userscript/en/src.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/badges/greasemonkey/install-userscript/en/src.psd -------------------------------------------------------------------------------- /assets/images/badges/greasemonkey/install-userscript/zh-cn/badge729x262.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/badges/greasemonkey/install-userscript/zh-cn/badge729x262.png -------------------------------------------------------------------------------- /assets/images/badges/greasemonkey/install-userscript/zh-cn/src.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/badges/greasemonkey/install-userscript/zh-cn/src.psd -------------------------------------------------------------------------------- /assets/images/badges/microsoft-store/get-it-from-microsoft-blue-square-border-light-457x157.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/badges/microsoft-store/get-it-from-microsoft-blue-square-border-light-457x157.png -------------------------------------------------------------------------------- /assets/images/badges/microsoft-store/get-it-from-microsoft-blue-square-border-light.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/badges/microsoft-store/get-it-from-microsoft-blue-square-border-light.psd -------------------------------------------------------------------------------- /assets/images/badges/microsoft-store/get-it-from-microsoft-square-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/badges/microsoft-store/get-it-from-microsoft-square-black.png -------------------------------------------------------------------------------- /assets/images/badges/product-hunt/product-of-the-week-2-larger-centered-rounded-light.svg: -------------------------------------------------------------------------------- 1 | #2 PRODUCT OF THE WEEKUser Experiencefalse -------------------------------------------------------------------------------- /assets/images/badges/product-hunt/product-of-the-week-2-larger-centered-square-light.svg: -------------------------------------------------------------------------------- 1 | #2 PRODUCT OF THE WEEKUser Experiencefalse -------------------------------------------------------------------------------- /assets/images/badges/product-hunt/product-of-the-week-2-rounded-light.svg: -------------------------------------------------------------------------------- 1 | #2 PRODUCT OF THE WEEKUser Experiencefalse -------------------------------------------------------------------------------- /assets/images/badges/product-hunt/product-of-the-week-2-square-light.svg: -------------------------------------------------------------------------------- 1 | #2 PRODUCT OF THE WEEKUser Experiencefalse -------------------------------------------------------------------------------- /assets/images/buttons/add-to-chrome-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/buttons/add-to-chrome-button.png -------------------------------------------------------------------------------- /assets/images/buttons/add-to-chrome-button.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/buttons/add-to-chrome-button.psd -------------------------------------------------------------------------------- /assets/images/buttons/add-to-edge-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/buttons/add-to-edge-button.png -------------------------------------------------------------------------------- /assets/images/buttons/add-to-edge-button.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/buttons/add-to-edge-button.psd -------------------------------------------------------------------------------- /assets/images/buttons/add-to-firefox-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/buttons/add-to-firefox-button.png -------------------------------------------------------------------------------- /assets/images/buttons/add-to-firefox-button.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/buttons/add-to-firefox-button.psd -------------------------------------------------------------------------------- /assets/images/buttons/add-to-opera-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/buttons/add-to-opera-button.png -------------------------------------------------------------------------------- /assets/images/buttons/add-to-opera-button.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/buttons/add-to-opera-button.psd -------------------------------------------------------------------------------- /assets/images/buttons/add-userscript-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/buttons/add-userscript-button.png -------------------------------------------------------------------------------- /assets/images/buttons/add-userscript-button.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/buttons/add-userscript-button.psd -------------------------------------------------------------------------------- /assets/images/buttons/greasy-fork/help-button.svg: -------------------------------------------------------------------------------- 1 |
?
-------------------------------------------------------------------------------- /assets/images/buttons/greasy-fork/install-button.svg: -------------------------------------------------------------------------------- 1 |
Install this script
-------------------------------------------------------------------------------- /assets/images/buttons/greasy-fork/zh-cn/install-button.svg: -------------------------------------------------------------------------------- 1 |
安装此脚本
-------------------------------------------------------------------------------- /assets/images/chatgpt.js-notice.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/chatgpt.js-notice.jpg -------------------------------------------------------------------------------- /assets/images/icons/chatgpt/black-on-white/icon189.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/icons/chatgpt/black-on-white/icon189.png -------------------------------------------------------------------------------- /assets/images/icons/chatgpt/black-on-white/icon50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/icons/chatgpt/black-on-white/icon50.png -------------------------------------------------------------------------------- /assets/images/icons/chatgpt/white-on-black/icon189.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/icons/chatgpt/white-on-black/icon189.png -------------------------------------------------------------------------------- /assets/images/icons/chatgpt/white-on-black/icon50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/icons/chatgpt/white-on-black/icon50.png -------------------------------------------------------------------------------- /assets/images/icons/chatgpt/white-on-blue-green/icon189.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/icons/chatgpt/white-on-blue-green/icon189.png -------------------------------------------------------------------------------- /assets/images/icons/chatgpt/white-on-blue-green/icon50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/icons/chatgpt/white-on-blue-green/icon50.png -------------------------------------------------------------------------------- /assets/images/icons/chatgpt/white-on-gray/icon189.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/icons/chatgpt/white-on-gray/icon189.png -------------------------------------------------------------------------------- /assets/images/icons/chatgpt/white-on-gray/icon50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/icons/chatgpt/white-on-gray/icon50.png -------------------------------------------------------------------------------- /assets/images/icons/earth/black/icon32.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/icons/earth/white/icon32.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/icons/toolbar/chrome-puzzle-piece/gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/icons/toolbar/chrome-puzzle-piece/gray.png -------------------------------------------------------------------------------- /assets/images/icons/toolbar/push-pin/blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/icons/toolbar/push-pin/blue.png -------------------------------------------------------------------------------- /assets/images/icons/userscript-managers/orangemonkey/icon112.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/icons/userscript-managers/orangemonkey/icon112.png -------------------------------------------------------------------------------- /assets/images/icons/userscript-managers/orangemonkey/icon16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/icons/userscript-managers/orangemonkey/icon16.png -------------------------------------------------------------------------------- /assets/images/icons/userscript-managers/orangemonkey/icon32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/icons/userscript-managers/orangemonkey/icon32.png -------------------------------------------------------------------------------- /assets/images/icons/userscript-managers/orangemonkey/icon64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/icons/userscript-managers/orangemonkey/icon64.png -------------------------------------------------------------------------------- /assets/images/icons/userscript-managers/tampermonkey/icon28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/icons/userscript-managers/tampermonkey/icon28.png -------------------------------------------------------------------------------- /assets/images/icons/userscript-managers/violentmonkey/icon100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/icons/userscript-managers/violentmonkey/icon100.png -------------------------------------------------------------------------------- /assets/images/icons/userscript-managers/violentmonkey/icon25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/icons/userscript-managers/violentmonkey/icon25.png -------------------------------------------------------------------------------- /assets/images/icons/web-stores/chrome-web-store/icon16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/icons/web-stores/chrome-web-store/icon16.png -------------------------------------------------------------------------------- /assets/images/icons/web-stores/chrome-web-store/icon48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/icons/web-stores/chrome-web-store/icon48.png -------------------------------------------------------------------------------- /assets/images/icons/web-stores/greasy-fork/black/icon25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/icons/web-stores/greasy-fork/black/icon25.png -------------------------------------------------------------------------------- /assets/images/icons/web-stores/greasy-fork/black/icon50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/icons/web-stores/greasy-fork/black/icon50.png -------------------------------------------------------------------------------- /assets/images/icons/web-stores/greasy-fork/black/icon512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/icons/web-stores/greasy-fork/black/icon512.png -------------------------------------------------------------------------------- /assets/images/icons/web-stores/greasy-fork/white/icon25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/icons/web-stores/greasy-fork/white/icon25.png -------------------------------------------------------------------------------- /assets/images/icons/web-stores/greasy-fork/white/icon50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/icons/web-stores/greasy-fork/white/icon50.png -------------------------------------------------------------------------------- /assets/images/icons/web-stores/greasy-fork/white/icon512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/icons/web-stores/greasy-fork/white/icon512.png -------------------------------------------------------------------------------- /assets/images/icons/widescreen-emoji/widescreen-emoji-padded-306.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/icons/widescreen-emoji/widescreen-emoji-padded-306.png -------------------------------------------------------------------------------- /assets/images/icons/widescreen-emoji/widescreen-emoji-unpadded-128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/icons/widescreen-emoji/widescreen-emoji-unpadded-128.png -------------------------------------------------------------------------------- /assets/images/icons/widescreen-emoji/widescreen-emoji-unpadded-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/icons/widescreen-emoji/widescreen-emoji-unpadded-16.png -------------------------------------------------------------------------------- /assets/images/icons/widescreen-emoji/widescreen-emoji-unpadded-223.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/icons/widescreen-emoji/widescreen-emoji-unpadded-223.png -------------------------------------------------------------------------------- /assets/images/icons/widescreen-emoji/widescreen-emoji-unpadded-48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/icons/widescreen-emoji/widescreen-emoji-unpadded-48.png -------------------------------------------------------------------------------- /assets/images/icons/widescreen-robot-emoji/faded/icon128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/icons/widescreen-robot-emoji/faded/icon128.png -------------------------------------------------------------------------------- /assets/images/icons/widescreen-robot-emoji/faded/icon16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/icons/widescreen-robot-emoji/faded/icon16.png -------------------------------------------------------------------------------- /assets/images/icons/widescreen-robot-emoji/faded/icon223.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/icons/widescreen-robot-emoji/faded/icon223.png -------------------------------------------------------------------------------- /assets/images/icons/widescreen-robot-emoji/faded/icon32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/icons/widescreen-robot-emoji/faded/icon32.png -------------------------------------------------------------------------------- /assets/images/icons/widescreen-robot-emoji/faded/icon48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/icons/widescreen-robot-emoji/faded/icon48.png -------------------------------------------------------------------------------- /assets/images/icons/widescreen-robot-emoji/faded/icon64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/icons/widescreen-robot-emoji/faded/icon64.png -------------------------------------------------------------------------------- /assets/images/icons/widescreen-robot-emoji/icon128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/icons/widescreen-robot-emoji/icon128.png -------------------------------------------------------------------------------- /assets/images/icons/widescreen-robot-emoji/icon16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/icons/widescreen-robot-emoji/icon16.png -------------------------------------------------------------------------------- /assets/images/icons/widescreen-robot-emoji/icon223.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/icons/widescreen-robot-emoji/icon223.png -------------------------------------------------------------------------------- /assets/images/icons/widescreen-robot-emoji/icon32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/icons/widescreen-robot-emoji/icon32.png -------------------------------------------------------------------------------- /assets/images/icons/widescreen-robot-emoji/icon48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/icons/widescreen-robot-emoji/icon48.png -------------------------------------------------------------------------------- /assets/images/icons/widescreen-robot-emoji/icon64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/icons/widescreen-robot-emoji/icon64.png -------------------------------------------------------------------------------- /assets/images/logos/chatgpt-widescreen-logo-1184x275.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/logos/chatgpt-widescreen-logo-1184x275.psd -------------------------------------------------------------------------------- /assets/images/logos/chatgpt-widescreen-logo-dark-mode-1184x275.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/logos/chatgpt-widescreen-logo-dark-mode-1184x275.png -------------------------------------------------------------------------------- /assets/images/logos/chatgpt-widescreen-logo-light-mode-1184x275.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/logos/chatgpt-widescreen-logo-light-mode-1184x275.png -------------------------------------------------------------------------------- /assets/images/logos/platforms/android/head-plus-word/green-head-black-word/logo150x24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/logos/platforms/android/head-plus-word/green-head-black-word/logo150x24.png -------------------------------------------------------------------------------- /assets/images/logos/platforms/android/head-plus-word/green-head-black-word/logo3169x517.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/logos/platforms/android/head-plus-word/green-head-black-word/logo3169x517.png -------------------------------------------------------------------------------- /assets/images/logos/platforms/android/head-plus-word/white/logo150x24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/logos/platforms/android/head-plus-word/white/logo150x24.png -------------------------------------------------------------------------------- /assets/images/logos/platforms/android/head-plus-word/white/logo3169x517.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/logos/platforms/android/head-plus-word/white/logo3169x517.png -------------------------------------------------------------------------------- /assets/images/logos/platforms/ios/apple-plus-word/black/logo1500x708.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/logos/platforms/ios/apple-plus-word/black/logo1500x708.png -------------------------------------------------------------------------------- /assets/images/logos/platforms/ios/apple-plus-word/black/logo150x71.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/logos/platforms/ios/apple-plus-word/black/logo150x71.png -------------------------------------------------------------------------------- /assets/images/logos/platforms/ios/apple-plus-word/white/logo1500x708.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/logos/platforms/ios/apple-plus-word/white/logo1500x708.png -------------------------------------------------------------------------------- /assets/images/logos/platforms/ios/apple-plus-word/white/logo150x71.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/logos/platforms/ios/apple-plus-word/white/logo150x71.png -------------------------------------------------------------------------------- /assets/images/reviews/chrome-web-store.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/reviews/chrome-web-store.png -------------------------------------------------------------------------------- /assets/images/reviews/greasy-fork.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/reviews/greasy-fork.png -------------------------------------------------------------------------------- /assets/images/screenshots/chatgptwidescreen.com.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/screenshots/chatgptwidescreen.com.png -------------------------------------------------------------------------------- /assets/images/screenshots/chrome/dev-mode-toggle/en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/screenshots/chrome/dev-mode-toggle/en.png -------------------------------------------------------------------------------- /assets/images/screenshots/chrome/dev-mode-toggle/src.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/screenshots/chrome/dev-mode-toggle/src.psd -------------------------------------------------------------------------------- /assets/images/screenshots/chrome/dev-mode-toggle/zh-cn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/screenshots/chrome/dev-mode-toggle/zh-cn.png -------------------------------------------------------------------------------- /assets/images/screenshots/chrome/dev-mode-toggle/zh-hk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/screenshots/chrome/dev-mode-toggle/zh-hk.png -------------------------------------------------------------------------------- /assets/images/screenshots/chrome/pin-instructions/en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/screenshots/chrome/pin-instructions/en.png -------------------------------------------------------------------------------- /assets/images/screenshots/chrome/pin-instructions/large/step-1-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/screenshots/chrome/pin-instructions/large/step-1-2.png -------------------------------------------------------------------------------- /assets/images/screenshots/chrome/pin-instructions/large/step-1-2.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/screenshots/chrome/pin-instructions/large/step-1-2.psd -------------------------------------------------------------------------------- /assets/images/screenshots/chrome/pin-instructions/large/step-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/screenshots/chrome/pin-instructions/large/step-3.png -------------------------------------------------------------------------------- /assets/images/screenshots/chrome/pin-instructions/large/step-3.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/screenshots/chrome/pin-instructions/large/step-3.psd -------------------------------------------------------------------------------- /assets/images/screenshots/chrome/pin-instructions/pin-instructions+toolbar-menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/screenshots/chrome/pin-instructions/pin-instructions+toolbar-menu.png -------------------------------------------------------------------------------- /assets/images/screenshots/chrome/pin-instructions/zh-cn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/screenshots/chrome/pin-instructions/zh-cn.png -------------------------------------------------------------------------------- /assets/images/screenshots/chrome/pin-instructions/zh-hk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/screenshots/chrome/pin-instructions/zh-hk.png -------------------------------------------------------------------------------- /assets/images/screenshots/chrome/toolbar-menu/en-640x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/screenshots/chrome/toolbar-menu/en-640x400.png -------------------------------------------------------------------------------- /assets/images/screenshots/chrome/toolbar-menu/en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/screenshots/chrome/toolbar-menu/en.png -------------------------------------------------------------------------------- /assets/images/screenshots/chrome/toolbar-menu/zh-cn-640x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/screenshots/chrome/toolbar-menu/zh-cn-640x400.png -------------------------------------------------------------------------------- /assets/images/screenshots/chrome/toolbar-menu/zh-cn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/screenshots/chrome/toolbar-menu/zh-cn.png -------------------------------------------------------------------------------- /assets/images/screenshots/chrome/toolbar-menu/zh-hk-640x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/screenshots/chrome/toolbar-menu/zh-hk-640x400.png -------------------------------------------------------------------------------- /assets/images/screenshots/chrome/toolbar-menu/zh-hk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/screenshots/chrome/toolbar-menu/zh-hk.png -------------------------------------------------------------------------------- /assets/images/screenshots/demo-vid/thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/screenshots/demo-vid/thumbnail.png -------------------------------------------------------------------------------- /assets/images/screenshots/demo-vid/thumbnail.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/screenshots/demo-vid/thumbnail.psd -------------------------------------------------------------------------------- /assets/images/screenshots/firefox/toolbar-menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/screenshots/firefox/toolbar-menu.png -------------------------------------------------------------------------------- /assets/images/screenshots/toasts/widescreen-on-off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/screenshots/toasts/widescreen-on-off.png -------------------------------------------------------------------------------- /assets/images/screenshots/widescreen-button/en/darkmode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/screenshots/widescreen-button/en/darkmode.png -------------------------------------------------------------------------------- /assets/images/screenshots/widescreen-button/en/lightmode-640x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/screenshots/widescreen-button/en/lightmode-640x400.png -------------------------------------------------------------------------------- /assets/images/screenshots/widescreen-button/en/lightmode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/screenshots/widescreen-button/en/lightmode.png -------------------------------------------------------------------------------- /assets/images/screenshots/widescreen-button/src.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/screenshots/widescreen-button/src.psd -------------------------------------------------------------------------------- /assets/images/screenshots/widescreen-button/zh-cn/darkmode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/screenshots/widescreen-button/zh-cn/darkmode.png -------------------------------------------------------------------------------- /assets/images/screenshots/widescreen-button/zh-cn/lightmode-640x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/screenshots/widescreen-button/zh-cn/lightmode-640x400.png -------------------------------------------------------------------------------- /assets/images/screenshots/widescreen-button/zh-cn/lightmode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/screenshots/widescreen-button/zh-cn/lightmode.png -------------------------------------------------------------------------------- /assets/images/screenshots/widescreen-button/zh-hk/darkmode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/screenshots/widescreen-button/zh-hk/darkmode.png -------------------------------------------------------------------------------- /assets/images/screenshots/widescreen-button/zh-hk/lightmode-640x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/screenshots/widescreen-button/zh-hk/lightmode-640x400.png -------------------------------------------------------------------------------- /assets/images/screenshots/widescreen-button/zh-hk/lightmode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/screenshots/widescreen-button/zh-hk/lightmode.png -------------------------------------------------------------------------------- /assets/images/screenshots/widescreen-mode/en/dark-classic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/screenshots/widescreen-mode/en/dark-classic.png -------------------------------------------------------------------------------- /assets/images/screenshots/widescreen-mode/en/dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/screenshots/widescreen-mode/en/dark.png -------------------------------------------------------------------------------- /assets/images/screenshots/widescreen-mode/en/light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/screenshots/widescreen-mode/en/light.png -------------------------------------------------------------------------------- /assets/images/screenshots/widescreen-mode/zh-cn/dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/screenshots/widescreen-mode/zh-cn/dark.png -------------------------------------------------------------------------------- /assets/images/screenshots/widescreen-mode/zh-cn/light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/screenshots/widescreen-mode/zh-cn/light.png -------------------------------------------------------------------------------- /assets/images/screenshots/widescreen-mode/zh-hk/dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/screenshots/widescreen-mode/zh-hk/dark.png -------------------------------------------------------------------------------- /assets/images/screenshots/widescreen-mode/zh-hk/light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/screenshots/widescreen-mode/zh-hk/light.png -------------------------------------------------------------------------------- /assets/images/separators/aqua.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/separators/aqua.png -------------------------------------------------------------------------------- /assets/images/tiles/marquee/src.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/tiles/marquee/src.psd -------------------------------------------------------------------------------- /assets/images/tiles/marquee/tile-1280x800.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/tiles/marquee/tile-1280x800.png -------------------------------------------------------------------------------- /assets/images/tiles/marquee/tile-1400x560.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/tiles/marquee/tile-1400x560.png -------------------------------------------------------------------------------- /assets/images/tiles/marquee/tile-625x250.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/tiles/marquee/tile-625x250.png -------------------------------------------------------------------------------- /assets/images/tiles/small/alpha/src.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/tiles/small/alpha/src.psd -------------------------------------------------------------------------------- /assets/images/tiles/small/alpha/tile-alpha-440x280.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/tiles/small/alpha/tile-alpha-440x280.png -------------------------------------------------------------------------------- /assets/images/tiles/small/src.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/tiles/small/src.psd -------------------------------------------------------------------------------- /assets/images/tiles/small/tile-440x280.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/assets/images/tiles/small/tile-440x280.png -------------------------------------------------------------------------------- /chromium/LICENSE.md: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | 5 | 6 | 7 |  English | 8 | 简体中文 | 9 | हिंदी 10 |
11 |
12 | 13 | # 🏛️ MIT License 14 | 15 | **Copyright © 2023–2025 [Adam Lui](https://github.com/adamlui) & [contributors](https://docs.chatgptwidescreen.com/#-contributors)** 16 | 17 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 18 | 19 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 20 | 21 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /chromium/docs/PRIVACY.md: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | 5 | 6 | 7 |  English | 8 | 简体中文 | 9 | हिंदी 10 |
11 |
12 | 13 | # Privacy Policy 14 | 15 | ChatGPT Widescreen Mode does not collect nor store any user data. No information is shared with third-parties for personally-targeted, behavioral marketing or any other purpose. No information is collected from any third-parties. 16 | 17 | ## Updates 18 | 19 | To view revisions to this policy, visit https://github.com/adamlui/chatgpt-widescreen/commits/main/chromium/docs/PRIVACY.md 20 | -------------------------------------------------------------------------------- /chromium/docs/SECURITY.md: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | 5 | 6 | 7 |  English | 8 | 简体中文 | 9 | हिंदी 10 |
11 |
12 | 13 | # 🛡️ Security Policy 14 | 15 | If you find a vulnerability, please open a [draft security advisory](https://github.com/adamlui/chatgpt-widescreen/security/advisories/new). 16 | 17 | Pull requests are also welcome, but for safety reasons, send an email to and wait for a response before making it public. 18 | -------------------------------------------------------------------------------- /chromium/docs/hi/LICENSE.md: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | 5 | 6 | 7 |  हिंदी | 8 | English | 9 | 简体中文 10 |
11 |
12 | 13 | # 🏛️ MIT लाइसेंस 14 | 15 | **कॉपीराइट © 2023–2025 [एडम लुई (Adam Lui)](https://github.com/adamlui) और [योगदानकर्ता](https://docs.chatgptwidescreen.com/#-contributors).** 16 | 17 | इसके द्वारा प्रति प्राप्त करने वाले किसी भी व्यक्ति को अनुमति निःशुल्क प्रदान की जाती है इस सॉफ़्टवेयर और संबंधित दस्तावेज़ फ़ाइलों ("सॉफ़्टवेयर") से निपटने के लिए सॉफ़्टवेयर में बिना किसी प्रतिबंध के, जिसमें बिना किसी सीमा के अधिकार शामिल हैं उपयोग करना, प्रतिलिपि बनाना, संशोधित करना, विलय करना, प्रकाशित करना, वितरित करना, उपलाइसेंस देना और/या बेचना सॉफ़्टवेयर की प्रतियां, और उन व्यक्तियों को अनुमति देना जिनके पास सॉफ़्टवेयर है निम्नलिखित शर्तों के अधीन, ऐसा करने के लिए सुसज्जित: 18 | 19 | उपरोक्त कॉपीराइट नोटिस और यह अनुमति नोटिस सभी में शामिल होंगे सॉफ़्टवेयर की प्रतियां या पर्याप्त भाग। 20 | 21 | सॉफ़्टवेयर "जैसा है" प्रदान किया जाता है, बिना किसी प्रकार की, स्पष्ट या वारंटी के। निहित, व्यापारिकता की वारंटी सहित, लेकिन इन्हीं तक सीमित नहीं, किसी विशेष उद्देश्य के लिए उपयुक्तता और उल्लंघन न होना। किसी भी स्थिति में ऐसा नहीं होगा लेखक या कॉपीराइट धारक किसी भी दावे, क्षति या अन्य के लिए उत्तरदायी होंगे दायित्व, चाहे किसी अनुबंध, अपकृत्य या किसी अन्य प्रकार से उत्पन्न हो, सॉफ़्टवेयर से बाहर या उसके संबंध में या उपयोग या अन्य लेनदेन में सॉफ़्टवेयर। 22 | -------------------------------------------------------------------------------- /chromium/docs/hi/PRIVACY.md: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | 5 | 6 | 7 |  हिंदी | 8 | English | 9 | 简体中文 10 |
11 |
12 | 13 | # गोपनीयता नीति 14 | 15 | चैटजीपीटी वाइडस्क्रीन मोड किसी उपयोगकर्ता डेटा को एकत्र या संग्रहीत नहीं करता है। व्यक्तिगत रूप से लक्षित, व्यवहारिक विपणन या किसी अन्य उद्देश्य के लिए तीसरे पक्ष के साथ कोई जानकारी साझा नहीं की जाती है। किसी तीसरे पक्ष से कोई जानकारी एकत्र नहीं की जाती है। 16 | 17 | ## अपडेट 18 | 19 | इस नीति में संशोधन देखने के लिए, https://github.com/adamlui/chatgpt-widescreen/commits/main/chromium/docs/hi/PRIVACY.md पर जाएं 20 | -------------------------------------------------------------------------------- /chromium/docs/hi/SECURITY.md: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | 5 | 6 | 7 |  हिंदी | 8 | English | 9 | 简体中文 10 |
11 |
12 | 13 | # 🛡️ सुरक्षा नीति 14 | 15 | यदि आपको कोई भेद्यता मिलती है, तो कृपया एक [मसौदा सुरक्षा सलाहकार](https://github.com/adamlui/chatgpt-widescreen/security/advisories/new) खोलें। 16 | 17 | पुल अनुरोधों का भी स्वागत है, लेकिन सुरक्षा कारणों से, पर एक ईमेल भेजें और इसे सार्वजनिक करने से पहले प्रतिक्रिया की प्रतीक्षा करें। 18 | -------------------------------------------------------------------------------- /chromium/docs/zh-cn/LICENSE.md: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | 5 | 6 | 7 |  简体中文 | 8 | English | 9 | हिंदी 10 |
11 |
12 | 13 | # 🏛️ MIT 许可证 14 | 15 | **版权所有 © 2023–2025 [刘展鹏 (Adam Lui)](https://github.com/adamlui) & [贡献者](https://docs.chatgptwidescreen.com/zh-cn/#-贡献者)** 16 | 17 | 特此免费向任何获得副本的人授予许可本软件和相关文档文件(『软件』),处理在软件中不受限制,包括但不限于权利使用、复制、修改、合并、发布、分发、再许可和/或出售该软件的副本,并允许该软件是提供这样做,但须满足以下条件: 18 | 19 | 上述版权声明和本许可声明应包含在所有软件的副本或重要部分。 20 | 21 | 本软件『按原样』提供,不提供任何形式的明示或保证暗示的,包括但不限于适销性保证,适用于特定目的和非侵权。 在任何情况下都不得作者或版权持有人对任何索赔、损害或其他责任,无论是在合同、侵权或其他方面的行为中,由以下原因引起,出于或与软件或使用或其他交易有关软件。 22 | -------------------------------------------------------------------------------- /chromium/docs/zh-cn/PRIVACY.md: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | 5 | 6 | 7 |  简体中文 | 8 | English | 9 | हिंदी 10 |
11 |
12 | 13 | # 隐私政策 14 | 15 | ChatGPT 宽屏模式不会收集或存储任何用户数据。 不会出于个人目标、行为营销或任何其他目的与第三方共享任何信息。 不会从任何第三方收集任何信息。 16 | 17 | ## 更新 18 | 19 | 要查看此政策的修订,请访问 https://github.com/adamlui/chatgpt-widescreen/commits/main/chromium/docs/zh-cn/PRIVACY.md 20 | -------------------------------------------------------------------------------- /chromium/docs/zh-cn/SECURITY.md: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | 5 | 6 | 7 |  简体中文 | 8 | English | 9 | हिंदी 10 |
11 |
12 | 13 | # 🛡️ 安全政策 14 | 15 | 如果您发现漏洞,请打开一个[安全建议草案](https://github.com/adamlui/chatgpt-widescreen/security/advisories/new)。 16 | 17 | 也欢迎拉取请求,但出于安全原因,请发送电子邮件至 并在公开之前等待回复。 18 | -------------------------------------------------------------------------------- /chromium/extension/_locales/zh/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "appName": { "message": "ChatGPT 宽屏模式" }, 3 | "appAuthor": { "message": "刘展鹏 (Adam Lui)" }, 4 | "appDesc": { "message": "通过宽屏/全屏/高屏+垃圾邮件块模式增强 ChatGPT。也可以在 perplexity.ai + poe.com 上使用!" }, 5 | "menuLabel_settings": { "message": "设置" }, 6 | "menuLabel_notif": { "message": "通知" }, 7 | "menuLabel_notifs": { "message": "消息" }, 8 | "menuLabel_btn": { "message": "按钮" }, 9 | "menuLabel_chatbox": { "message": "聊天室" }, 10 | "menuLabel_display": { "message": "展示" }, 11 | "menuLabel_width": { "message": "宽度" }, 12 | "menuLabel_height": { "message": "高度" }, 13 | "menuLabel_taller": { "message": "更高" }, 14 | "menuLabel_wider": { "message": "宽松" }, 15 | "menuLabel_newChatBtn": { "message": "在供应商页面上显示聊天按钮" }, 16 | "menuLabel_hiddenHeader": { "message": "隐藏页眉" }, 17 | "menuLabel_hiddenFooter": { "message": "隐藏页脚" }, 18 | "menuLabel_btnAnimations": { "message": "按钮动画" }, 19 | "menuLabel_btnVisibility": { "message": "按钮可见性" }, 20 | "menuLabel_show": { "message": "顯示" }, 21 | "menuLabel_anchor": { "message": "锚" }, 22 | "menuLabel_modeNotifs": { "message": "运行提示" }, 23 | "menuLabel_blockSpam": { "message": "垃圾邮件黑名单" }, 24 | "menuLabel_siteSettings": { "message": "站点设置" }, 25 | "menuLabel_about": { "message": "关于" }, 26 | "menuLabel_buyMeAcoffee": { "message": "赠我杯咖啡" }, 27 | "menuLabel_donate": { "message": "请捐款" }, 28 | "menuLabel_extensionActive": { "message": "扩展活动" }, 29 | "about_author": { "message": "作者" }, 30 | "about_and": { "message": "和" }, 31 | "about_contributors": { "message": "贡献者" }, 32 | "about_version": { "message": "版本" }, 33 | "about_poweredBy": { "message": "技术支持方" }, 34 | "about_openSourceCode": { "message": "开源代码" }, 35 | "about_latestChanges": { "message": "新版变化" }, 36 | "mode_widescreen": { "message": "宽屏" }, 37 | "mode_fullWindow": { "message": "全窗口模式" }, 38 | "mode_fullscreen": { "message": "全屏" }, 39 | "mode_toast": { "message": "Toast 模式" }, 40 | "tooltip_widescreenON": { "message": "宽屏模式" }, 41 | "tooltip_widescreenOFF": { "message": "退出宽屏模式" }, 42 | "tooltip_fullWindowON": { "message": "全窗口模式" }, 43 | "tooltip_fullWindowOFF": { "message": "退出全窗口模式" }, 44 | "tooltip_fullscreenON": { "message": "全屏模式" }, 45 | "tooltip_fullscreenOFF": { "message": "退出全屏模式" }, 46 | "tooltip_newChat": { "message": "新对话" }, 47 | "tooltip_goto": { "message": "转到" }, 48 | "helptip_adjustSettingsRelatedTo": { "message": "调整与以下内容相关的设置" }, 49 | "helptip_the": { "message": "在2025年2月1日之前已启运的货物," }, 50 | "helptip_btns": { "message": "纽扣" }, 51 | "helptip_widescreenWidth": { "message": "调整要应用的宽屏数量" }, 52 | "helptip_tallerChatboxHeight": { "message": "调整要应用的更高聊天框的数量" }, 53 | "helptip_tallerChatbox": { "message": "垂直展开聊天框" }, 54 | "helptip_widerChatboxWidth": { "message": "调整要应用的更宽聊天框的数量" }, 55 | "helptip_widerChatbox": { "message": "在宽屏模式下水平展开聊天框" }, 56 | "helptip_newChatBtn": { "message": "在聊天框中显示“新建聊天”按钮" }, 57 | "helptip_hiddenFooter": { "message": "网站页脚" }, 58 | "helptip_hiddenHeader": { "message": "网站页眉" }, 59 | "helptip_btnAnimations": { "message": "悬停时动画聊天栏按钮" }, 60 | "helptip_btnVisibility": { "message": "在聊天栏中显示自定义按钮" }, 61 | "helptip_modeNotifs": { "message": "切换模式/设置时显示通知" }, 62 | "helptip_notifBottom": { "message": "将通知定位到屏幕底部" }, 63 | "helptip_toastMode": { "message": "将通知缩小/居中为吐司气泡" }, 64 | "helptip_blockSpam": { "message": "隐藏垃圾邮件横幅,防止页面混乱" }, 65 | "helptip_pageSettings": { "message": "控制页面的外观" }, 66 | "helptip_chatbarSettings": { "message": "控制聊天栏的外观" }, 67 | "helptip_buttonSettings": { "message": "调整与按钮相关的设置" }, 68 | "helptip_enableDisable": { "message": "启用/禁用" }, 69 | "helptip_perSite": { "message": "每研究中心" }, 70 | "helptip_run": { "message": "潛襲" }, 71 | "alert_choosePlatform": { "message": "选择平台" }, 72 | "alert_updateAvail": { "message": "有可用更新" }, 73 | "alert_newerVer": { "message": "有更新版本" }, 74 | "alert_isAvail": { "message": "可用" }, 75 | "alert_upToDate": { "message": "已更新" }, 76 | "alert_isUpToDate": { "message": "已更新" }, 77 | "alert_showYourSupport": { "message": "力求展现你的支持" }, 78 | "alert_isOSS": { "message": "是通过 100% 的志愿者努力免费构建和维护的开源软件" }, 79 | "alert_despiteAffliction": { "message": "尽管受到严重影响" }, 80 | "alert_longCOVID": { "message": "长期新冠肺炎疫情" }, 81 | "alert_since2020": { "message": "自 2020 年起" }, 82 | "alert_byDonatingResults": { "message": "通过捐赠,您帮助我继续改进,修复错误,添加新功能,并使软件变得更好" }, 83 | "alert_yourContrib": { "message": "您的贡献值" }, 84 | "alert_noMatterSize": { "message": "无论大小" }, 85 | "alert_directlySupports": { "message": "直接支持我的无偿努力,以确保该项目免费开放,供所有人使用" }, 86 | "alert_growTogether": { "message": "携起手来,我们可以让这个强大的软件" }, 87 | "alert_tyForSupport": { "message": "感谢您的支持" }, 88 | "alert_pressF11": { "message": "按下 F11 键退出全屏模式" }, 89 | "alert_f11reason": { "message": "使用 F11 键进入全屏模式,由于浏览器安全原因,必须使用同样的按键退出全屏模式" }, 90 | "notif_chatStopped": { "message": "聊天已停止" }, 91 | "btnLabel_moreAIextensions": { "message": "更多 AI 扩展" }, 92 | "btnLabel_leaveReview": { "message": "离开评论" }, 93 | "btnLabel_rateUs": { "message": "给我们评价" }, 94 | "btnLabel_discuss": { "message": "讨论" }, 95 | "btnLabel_getSupport": { "message": "获取帮助" }, 96 | "btnLabel_checkForUpdates": { "message": "检查更新" }, 97 | "btnLabel_update": { "message": "更新" }, 98 | "btnLabel_dismiss": { "message": "关闭" }, 99 | "link_viewChanges": { "message": "查看更改" }, 100 | "state_disabled": { "message": "禁用" }, 101 | "state_on": { "message": "开启" }, 102 | "state_off": { "message": "关闭" } 103 | } 104 | -------------------------------------------------------------------------------- /chromium/extension/_locales/zh_HK/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "appName": { "message": "ChatGPT 寬螢幕模式" }, 3 | "appAuthor": { "message": "劉展鵬 (Adam Lui)" }, 4 | "appDesc": { "message": "使用寬/全/高螢幕+垃圾郵件區塊模式增強 ChatGPT。也可以在 perplexity.ai + poe.com 上使用!" }, 5 | "menuLabel_settings": { "message": "設定" }, 6 | "menuLabel_notif": { "message": "通知" }, 7 | "menuLabel_notifs": { "message": "推送通知" }, 8 | "menuLabel_btn": { "message": "按鈕" }, 9 | "menuLabel_chatbox": { "message": "聊天室" }, 10 | "menuLabel_display": { "message": "顯示器" }, 11 | "menuLabel_width": { "message": "寬" }, 12 | "menuLabel_height": { "message": "高" }, 13 | "menuLabel_taller": { "message": "更高" }, 14 | "menuLabel_wider": { "message": "更寬" }, 15 | "menuLabel_newChatBtn": { "message": "新聊天按鈕" }, 16 | "menuLabel_hiddenHeader": { "message": "隱藏標題" }, 17 | "menuLabel_hiddenFooter": { "message": "隱藏頁尾" }, 18 | "menuLabel_btnAnimations": { "message": "按鈕動畫" }, 19 | "menuLabel_btnVisibility": { "message": "按鈕可見度" }, 20 | "menuLabel_show": { "message": "顯示" }, 21 | "menuLabel_anchor": { "message": "錨" }, 22 | "menuLabel_modeNotifs": { "message": "模式通知" }, 23 | "menuLabel_blockSpam": { "message": "垃圾郵件封鎖" }, 24 | "menuLabel_siteSettings": { "message": "站點設置" }, 25 | "menuLabel_about": { "message": "關於我們" }, 26 | "menuLabel_buyMeAcoffee": { "message": "給我買一杯咖啡" }, 27 | "menuLabel_donate": { "message": "請發送捐款" }, 28 | "menuLabel_extensionActive": { "message": "擴充功能已啟用" }, 29 | "about_author": { "message": "作者" }, 30 | "about_and": { "message": "及" }, 31 | "about_contributors": { "message": "貢獻者" }, 32 | "about_version": { "message": "版本" }, 33 | "about_poweredBy": { "message": "技術支持" }, 34 | "about_openSourceCode": { "message": "開放原始碼" }, 35 | "about_latestChanges": { "message": "最新變更" }, 36 | "mode_widescreen": { "message": "寬螢幕" }, 37 | "mode_fullWindow": { "message": "全視窗" }, 38 | "mode_fullscreen": { "message": "全螢幕" }, 39 | "mode_toast": { "message": "Toast 模式" }, 40 | "tooltip_widescreenON": { "message": "寬螢幕" }, 41 | "tooltip_widescreenOFF": { "message": "退出寬螢幕" }, 42 | "tooltip_fullWindowON": { "message": "全視窗模式" }, 43 | "tooltip_fullWindowOFF": { "message": "退出全視窗" }, 44 | "tooltip_fullscreenON": { "message": "全螢幕" }, 45 | "tooltip_fullscreenOFF": { "message": "退出全螢幕" }, 46 | "tooltip_newChat": { "message": "新對話" }, 47 | "tooltip_goto": { "message": "前往" }, 48 | "helptip_adjustSettingsRelatedTo": { "message": "調整相關設定" }, 49 | "helptip_the": { "message": "下圖" }, 50 | "helptip_btns": { "message": "按鈕" }, 51 | "helptip_widescreenWidth": { "message": "調整要套用的寬螢幕數量" }, 52 | "helptip_tallerChatboxHeight": { "message": "調整要套用的更高聊天框的數量" }, 53 | "helptip_tallerChatbox": { "message": "垂直展開聊天框" }, 54 | "helptip_widerChatboxWidth": { "message": "調整要套用的更寬聊天框的數量" }, 55 | "helptip_widerChatbox": { "message": "在寬螢幕模式下水平展開聊天框" }, 56 | "helptip_newChatBtn": { "message": "在聊天室中顯示「新增聊天」按鈕" }, 57 | "helptip_hiddenFooter": { "message": "隱藏網站頁尾" }, 58 | "helptip_hiddenHeader": { "message": "隱藏網站標題" }, 59 | "helptip_btnAnimations": { "message": "懸停時動畫聊天欄按鈕" }, 60 | "helptip_btnVisibility": { "message": "在聊天欄中顯示自訂按鈕" }, 61 | "helptip_modeNotifs": { "message": "切換模式/設定時顯示通知" }, 62 | "helptip_notifBottom": { "message": "將通知錨定在畫面底部" }, 63 | "helptip_toastMode": { "message": "將通知縮小/置中為吐司氣泡" }, 64 | "helptip_blockSpam": { "message": "隱藏垃圾橫幅,避免頁面雜亂無章" }, 65 | "helptip_pageSettings": { "message": "控制頁面的外觀" }, 66 | "helptip_chatbarSettings": { "message": "控制聊天欄的外觀" }, 67 | "helptip_buttonSettings": { "message": "調整與按鈕相關的設定" }, 68 | "helptip_enableDisable": { "message": "啟用/禁用" }, 69 | "helptip_perSite": { "message": "每個網站" }, 70 | "helptip_run": { "message": "執行" }, 71 | "alert_choosePlatform": { "message": "選擇平臺" }, 72 | "alert_updateAvail": { "message": "有可用更新" }, 73 | "alert_newerVer": { "message": "有更新版本" }, 74 | "alert_isAvail": { "message": "可用" }, 75 | "alert_upToDate": { "message": "已更新" }, 76 | "alert_isUpToDate": { "message": "已更新" }, 77 | "alert_showYourSupport": { "message": "展現你的支持" }, 78 | "alert_isOSS": { "message": "是透過 100% 志願者努力免費開發和維護的開放原始碼軟體" }, 79 | "alert_despiteAffliction": { "message": "儘管受到了嚴重的折磨" }, 80 | "alert_longCOVID": { "message": "長期新冠肺炎" }, 81 | "alert_since2020": { "message": "2020 年以來" }, 82 | "alert_byDonatingResults": { "message": "通過捐贈,您幫助我繼續改進,修復錯誤,添加新功能,並使軟件更好" }, 83 | "alert_yourContrib": { "message": "你的貢獻" }, 84 | "alert_noMatterSize": { "message": "無論大小" }, 85 | "alert_directlySupports": { "message": "直接支持我為確保此專案免費開放給所有人使用而付出的無償努力" }, 86 | "alert_growTogether": { "message": "同心協力,我們可以讓這個強大的軟體" }, 87 | "alert_tyForSupport": { "message": "感謝您的支持" }, 88 | "alert_pressF11": { "message": "按下 F11 退出全螢幕" }, 89 | "alert_f11reason": { "message": "使用 F11 進入全螢幕,由於瀏覽器安全原因,必須使用同樣的按鍵退出全螢幕" }, 90 | "notif_chatStopped": { "message": "對話已停止" }, 91 | "btnLabel_moreAIextensions": { "message": "更多人工智慧擴充功能" }, 92 | "btnLabel_leaveReview": { "message": "留下評語" }, 93 | "btnLabel_rateUs": { "message": "評價我們" }, 94 | "btnLabel_discuss": { "message": "討論" }, 95 | "btnLabel_getSupport": { "message": "取得支援" }, 96 | "btnLabel_checkForUpdates": { "message": "檢查更新" }, 97 | "btnLabel_update": { "message": "更新" }, 98 | "btnLabel_dismiss": { "message": "關閉" }, 99 | "link_viewChanges": { "message": "查看更改" }, 100 | "state_disabled": { "message": "禁用" }, 101 | "state_on": { "message": "在" }, 102 | "state_off": { "message": "關" } 103 | } 104 | -------------------------------------------------------------------------------- /chromium/extension/_locales/zh_SG/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "appName": { "message": "ChatGPT 宽屏模式" }, 3 | "appAuthor": { "message": "刘展鹏 (Adam Lui)" }, 4 | "appDesc": { "message": "通过宽屏/全屏/高屏+垃圾邮件块模式增强 ChatGPT。也可以在 perplexity.ai + poe.com 上使用!" }, 5 | "menuLabel_settings": { "message": "设置" }, 6 | "menuLabel_notif": { "message": "通知" }, 7 | "menuLabel_notifs": { "message": "通知" }, 8 | "menuLabel_btn": { "message": "按钮" }, 9 | "menuLabel_chatbox": { "message": "聊天室" }, 10 | "menuLabel_display": { "message": "显示" }, 11 | "menuLabel_width": { "message": "宽度" }, 12 | "menuLabel_height": { "message": "高度" }, 13 | "menuLabel_taller": { "message": "更高" }, 14 | "menuLabel_wider": { "message": "宽松" }, 15 | "menuLabel_newChatBtn": { "message": "在供应商页面上显示聊天按钮" }, 16 | "menuLabel_hiddenHeader": { "message": "隐藏页眉" }, 17 | "menuLabel_hiddenFooter": { "message": "隐藏页脚" }, 18 | "menuLabel_btnAnimations": { "message": "按钮动画" }, 19 | "menuLabel_btnVisibility": { "message": "按钮可见性" }, 20 | "menuLabel_show": { "message": "显示" }, 21 | "menuLabel_anchor": { "message": "锚" }, 22 | "menuLabel_modeNotifs": { "message": "运行提示" }, 23 | "menuLabel_blockSpam": { "message": "垃圾邮件黑名单" }, 24 | "menuLabel_siteSettings": { "message": "站点设置" }, 25 | "menuLabel_about": { "message": "关于" }, 26 | "menuLabel_buyMeAcoffee": { "message": "赠我杯咖啡" }, 27 | "menuLabel_donate": { "message": "请捐款" }, 28 | "menuLabel_extensionActive": { "message": "扩展活动" }, 29 | "about_author": { "message": "作者" }, 30 | "about_and": { "message": "和" }, 31 | "about_contributors": { "message": "贡献者" }, 32 | "about_version": { "message": "版本" }, 33 | "about_poweredBy": { "message": "技术支持方" }, 34 | "about_openSourceCode": { "message": "开源代码" }, 35 | "about_latestChanges": { "message": "新版变化" }, 36 | "mode_widescreen": { "message": "宽屏" }, 37 | "mode_fullWindow": { "message": "全窗口模式" }, 38 | "mode_fullscreen": { "message": "全屏" }, 39 | "mode_toast": { "message": "Toast 模式" }, 40 | "tooltip_widescreenON": { "message": "宽屏模式" }, 41 | "tooltip_widescreenOFF": { "message": "退出宽屏模式" }, 42 | "tooltip_fullWindowON": { "message": "全窗口模式" }, 43 | "tooltip_fullWindowOFF": { "message": "退出全窗口模式" }, 44 | "tooltip_fullscreenON": { "message": "全屏模式" }, 45 | "tooltip_fullscreenOFF": { "message": "退出全屏模式" }, 46 | "tooltip_newChat": { "message": "新对话" }, 47 | "tooltip_goto": { "message": "转到" }, 48 | "helptip_adjustSettingsRelatedTo": { "message": "调整与以下内容相关的设置" }, 49 | "helptip_the": { "message": "而" }, 50 | "helptip_btns": { "message": "按钮" }, 51 | "helptip_widescreenWidth": { "message": "调整要应用的宽屏数量" }, 52 | "helptip_tallerChatboxHeight": { "message": "调整要应用的更高聊天框的数量" }, 53 | "helptip_tallerChatbox": { "message": "垂直展开聊天框" }, 54 | "helptip_widerChatboxWidth": { "message": "调整要应用的更宽聊天框的数量" }, 55 | "helptip_widerChatbox": { "message": "在宽屏模式下水平展开聊天框" }, 56 | "helptip_newChatBtn": { "message": "在聊天框中显示“新建聊天”按钮" }, 57 | "helptip_hiddenFooter": { "message": "网站页脚" }, 58 | "helptip_hiddenHeader": { "message": "网站页眉" }, 59 | "helptip_btnAnimations": { "message": "悬停时动画聊天栏按钮" }, 60 | "helptip_btnVisibility": { "message": "在聊天栏中显示自定义按钮" }, 61 | "helptip_modeNotifs": { "message": "切换模式/设置时显示通知" }, 62 | "helptip_notifBottom": { "message": "将通知定位到屏幕底部" }, 63 | "helptip_toastMode": { "message": "将通知缩小/居中为吐司气泡" }, 64 | "helptip_blockSpam": { "message": "隐藏垃圾邮件横幅,防止页面混乱" }, 65 | "helptip_pageSettings": { "message": "控制页面的外观" }, 66 | "helptip_chatbarSettings": { "message": "控制聊天栏的外观" }, 67 | "helptip_buttonSettings": { "message": "调整与按钮相关的设置" }, 68 | "helptip_enableDisable": { "message": "启用/禁用" }, 69 | "helptip_perSite": { "message": "每研究中心" }, 70 | "helptip_run": { "message": "潛襲" }, 71 | "alert_choosePlatform": { "message": "选择平台" }, 72 | "alert_updateAvail": { "message": "有可用更新" }, 73 | "alert_newerVer": { "message": "有更新版本" }, 74 | "alert_isAvail": { "message": "可用" }, 75 | "alert_upToDate": { "message": "已更新" }, 76 | "alert_isUpToDate": { "message": "已更新" }, 77 | "alert_showYourSupport": { "message": "力求展现你的支持" }, 78 | "alert_isOSS": { "message": "是通过 100% 的志愿者努力免费构建和维护的开源软件" }, 79 | "alert_despiteAffliction": { "message": "尽管受到严重影响" }, 80 | "alert_longCOVID": { "message": "长期新冠肺炎疫情" }, 81 | "alert_since2020": { "message": "自 2020 年起" }, 82 | "alert_byDonatingResults": { "message": "通过捐赠,您帮助我继续改进,修复错误,添加新功能,并使软件变得更好" }, 83 | "alert_yourContrib": { "message": "您的贡献值" }, 84 | "alert_noMatterSize": { "message": "无论大小" }, 85 | "alert_directlySupports": { "message": "直接支持我的无偿努力,以确保该项目免费开放,供所有人使用" }, 86 | "alert_growTogether": { "message": "携起手来,我们可以让这个强大的软件" }, 87 | "alert_tyForSupport": { "message": "感谢您的支持" }, 88 | "alert_pressF11": { "message": "按下 F11 键退出全屏模式" }, 89 | "alert_f11reason": { "message": "使用 F11 键进入全屏模式,由于浏览器安全原因,必须使用同样的按键退出全屏模式" }, 90 | "notif_chatStopped": { "message": "聊天已停止" }, 91 | "btnLabel_moreAIextensions": { "message": "更多 AI 扩展" }, 92 | "btnLabel_leaveReview": { "message": "离开评论" }, 93 | "btnLabel_rateUs": { "message": "给我们评价" }, 94 | "btnLabel_discuss": { "message": "讨论" }, 95 | "btnLabel_getSupport": { "message": "获取帮助" }, 96 | "btnLabel_checkForUpdates": { "message": "检查更新" }, 97 | "btnLabel_update": { "message": "更新" }, 98 | "btnLabel_dismiss": { "message": "关闭" }, 99 | "link_viewChanges": { "message": "查看更改" }, 100 | "state_disabled": { "message": "禁用" }, 101 | "state_on": { "message": "开启" }, 102 | "state_off": { "message": "关闭" } 103 | } 104 | -------------------------------------------------------------------------------- /chromium/extension/_locales/zh_TW/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "appName": { "message": "ChatGPT 寬螢幕模式" }, 3 | "appAuthor": { "message": "劉展鵬 (Adam Lui)" }, 4 | "appDesc": { "message": "使用寬/全/高螢幕+垃圾郵件區塊模式增強 ChatGPT。也可以在 perplexity.ai + poe.com 上使用!" }, 5 | "menuLabel_settings": { "message": "設定" }, 6 | "menuLabel_notif": { "message": "通知" }, 7 | "menuLabel_notifs": { "message": "通知" }, 8 | "menuLabel_btn": { "message": "按鈕" }, 9 | "menuLabel_chatbox": { "message": "對話框" }, 10 | "menuLabel_display": { "message": "顯示為" }, 11 | "menuLabel_width": { "message": "寬度" }, 12 | "menuLabel_height": { "message": "高度" }, 13 | "menuLabel_taller": { "message": "更高" }, 14 | "menuLabel_wider": { "message": "更寬" }, 15 | "menuLabel_newChatBtn": { "message": "新聊天按鈕" }, 16 | "menuLabel_hiddenHeader": { "message": "隱藏標題" }, 17 | "menuLabel_hiddenFooter": { "message": "隱藏頁尾" }, 18 | "menuLabel_btnAnimations": { "message": "按鈕動畫" }, 19 | "menuLabel_btnVisibility": { "message": "按鈕可見性" }, 20 | "menuLabel_show": { "message": "顯示 " }, 21 | "menuLabel_anchor": { "message": "錨" }, 22 | "menuLabel_modeNotifs": { "message": "模式通知" }, 23 | "menuLabel_blockSpam": { "message": "垃圾郵件封鎖" }, 24 | "menuLabel_siteSettings": { "message": "網站設置" }, 25 | "menuLabel_about": { "message": "關於" }, 26 | "menuLabel_buyMeAcoffee": { "message": "給我買杯咖啡" }, 27 | "menuLabel_donate": { "message": "請發送捐款" }, 28 | "menuLabel_extensionActive": { "message": "擴展活動" }, 29 | "about_author": { "message": "作者" }, 30 | "about_and": { "message": "以及" }, 31 | "about_contributors": { "message": "貢獻者" }, 32 | "about_version": { "message": "版本" }, 33 | "about_poweredBy": { "message": "技術提供" }, 34 | "about_openSourceCode": { "message": "開放源代碼" }, 35 | "about_latestChanges": { "message": "最新變更" }, 36 | "mode_widescreen": { "message": "寬屏" }, 37 | "mode_fullWindow": { "message": "全視窗" }, 38 | "mode_fullscreen": { "message": "全螢幕" }, 39 | "mode_toast": { "message": "Toast 模式" }, 40 | "tooltip_widescreenON": { "message": "寬螢幕" }, 41 | "tooltip_widescreenOFF": { "message": "退出寬螢幕" }, 42 | "tooltip_fullWindowON": { "message": "全視窗模式" }, 43 | "tooltip_fullWindowOFF": { "message": "退出全視窗" }, 44 | "tooltip_fullscreenON": { "message": "全螢幕" }, 45 | "tooltip_fullscreenOFF": { "message": "退出全螢幕" }, 46 | "tooltip_newChat": { "message": "新對話" }, 47 | "tooltip_goto": { "message": "轉到" }, 48 | "helptip_adjustSettingsRelatedTo": { "message": "調整相關設定" }, 49 | "helptip_the": { "message": "本作" }, 50 | "helptip_btns": { "message": "按鈕" }, 51 | "helptip_widescreenWidth": { "message": "調整要套用的寬螢幕數量" }, 52 | "helptip_tallerChatboxHeight": { "message": "調整要套用的更高聊天框的數量" }, 53 | "helptip_tallerChatbox": { "message": "垂直展開聊天框" }, 54 | "helptip_widerChatboxWidth": { "message": "調整要套用的更寬聊天框的數量" }, 55 | "helptip_widerChatbox": { "message": "在寬螢幕模式下水平展開聊天框" }, 56 | "helptip_newChatBtn": { "message": "在聊天室中顯示「新增聊天」按鈕" }, 57 | "helptip_hiddenFooter": { "message": "網站頁腳" }, 58 | "helptip_hiddenHeader": { "message": "網站頁首" }, 59 | "helptip_btnAnimations": { "message": "懸停時動畫聊天欄按鈕" }, 60 | "helptip_btnVisibility": { "message": "在聊天欄中顯示自訂按鈕" }, 61 | "helptip_modeNotifs": { "message": "切換模式/設定時顯示通知" }, 62 | "helptip_notifBottom": { "message": "將通知錨定在畫面底部" }, 63 | "helptip_toastMode": { "message": "將通知縮小/置中為吐司氣泡" }, 64 | "helptip_blockSpam": { "message": "隱藏垃圾橫幅,避免頁面雜亂無章" }, 65 | "helptip_pageSettings": { "message": "控制頁面的外觀" }, 66 | "helptip_chatbarSettings": { "message": "控制聊天欄的外觀" }, 67 | "helptip_buttonSettings": { "message": "調整與按鈕相關的設定" }, 68 | "helptip_enableDisable": { "message": "啟用/停用" }, 69 | "helptip_perSite": { "message": "個別網站" }, 70 | "helptip_run": { "message": "運作" }, 71 | "alert_choosePlatform": { "message": "選擇平臺" }, 72 | "alert_updateAvail": { "message": "有可用更新" }, 73 | "alert_newerVer": { "message": "有更新版本" }, 74 | "alert_isAvail": { "message": "可用" }, 75 | "alert_upToDate": { "message": "已更新" }, 76 | "alert_isUpToDate": { "message": "已更新" }, 77 | "alert_showYourSupport": { "message": "展現您的支持" }, 78 | "alert_isOSS": { "message": "是透過 100% 志願者努力免費開發和維護的開放原始碼軟體" }, 79 | "alert_despiteAffliction": { "message": "儘管受到了嚴重的折磨" }, 80 | "alert_longCOVID": { "message": "長期新冠肺炎" }, 81 | "alert_since2020": { "message": "2020 年以來" }, 82 | "alert_byDonatingResults": { "message": "通過捐贈,您幫助我繼續改進,修復錯誤,添加新功能,並使軟件更好" }, 83 | "alert_yourContrib": { "message": "你的貢獻" }, 84 | "alert_noMatterSize": { "message": "無論大小" }, 85 | "alert_directlySupports": { "message": "直接支持我為確保此專案免費開放給所有人使用而付出的無償努力" }, 86 | "alert_growTogether": { "message": "同心協力,我們可以讓這個強大的軟體" }, 87 | "alert_tyForSupport": { "message": "感謝你的支持" }, 88 | "alert_pressF11": { "message": "按下 F11 退出全螢幕" }, 89 | "alert_f11reason": { "message": "使用 F11 進入全螢幕,由於瀏覽器安全原因,必須使用同樣的按鍵退出全螢幕" }, 90 | "notif_chatStopped": { "message": "對話已停止" }, 91 | "btnLabel_moreAIextensions": { "message": "更多人工智慧擴充功能" }, 92 | "btnLabel_leaveReview": { "message": "離開評論" }, 93 | "btnLabel_rateUs": { "message": "為我們評分" }, 94 | "btnLabel_discuss": { "message": "討論" }, 95 | "btnLabel_getSupport": { "message": "獲得支援" }, 96 | "btnLabel_checkForUpdates": { "message": "檢查更新" }, 97 | "btnLabel_update": { "message": "更新" }, 98 | "btnLabel_dismiss": { "message": "關閉" }, 99 | "link_viewChanges": { "message": "查看更改" }, 100 | "state_disabled": { "message": "禁用" }, 101 | "state_on": { "message": "在" }, 102 | "state_off": { "message": "閂" } 103 | } 104 | -------------------------------------------------------------------------------- /chromium/extension/components/tooltip.js: -------------------------------------------------------------------------------- 1 | // Requires components/buttons.js + lib/.js + 2 | 3 | window.tooltip = { 4 | 5 | stylize() { // requires lib/dom.js + app.slug 6 | document.head.append(this.styles = dom.create.style(`.${app.slug}-tooltip { 7 | background-color: /* bubble style */ 8 | rgba(0,0,0,0.71) ; padding: 5px 6px ; border-radius: 6px ; border: 1px solid #d9d9e3 ; 9 | font-size: 0.85rem ; color: white ; white-space: nowrap ; /* text style */ 10 | --shadow: 4px 6px 16px 0 rgb(0 0 0 / 38%) ; 11 | box-shadow: var(--shadow) ; -webkit-box-shadow: var(--shadow) ; -moz-box-shadow: var(--shadow) ; 12 | position: fixed ; opacity: 0 ; z-index: 99999 ; /* visibility */ 13 | transition: opacity 0.15s ; -webkit-transition: opacity 0.15s ; -moz-transition: opacity 0.15s ; 14 | -ms-transition: opacity 0.15s ; -o-transition: opacity 0.15s ; 15 | user-select: none ; webkit-user-select: none ; -moz-user-select: none ; -ms-user-select: none }` 16 | )) 17 | }, 18 | 19 | toggle(event) { // requires lib/dom.js + 20 | if (env.browser.isMobile) return 21 | tooltip.div ||= dom.create.elem('div', { class: `${app.slug}-tooltip` }) 22 | if (!tooltip.div.isConnected) event.currentTarget?.after(tooltip.div) 23 | if (!tooltip.styles) tooltip.stylize() 24 | tooltip.update(event.currentTarget) 25 | tooltip.div.style.opacity = +(event.type == 'mouseenter') 26 | }, 27 | 28 | update(btn) { // requires lib/browser.js + 29 | if (!this.div) return 30 | const { site } = env 31 | const btnType = btn.id.replace(/-btn$/, '') 32 | const btnRect = btn.getBoundingClientRect() 33 | const btnTransform = getComputedStyle(btn).transform 34 | const btnScale = btnTransform == 'none' ? 1 35 | : parseFloat(/matrix\(([^)]+)\)/.exec(btnTransform)[1].split(',')[0]) 36 | const unscaledTop = btnRect.top +( btnRect.height - btnRect.height / btnScale )/2 37 | this.div.textContent = browserAPI.getMsg(`tooltip_${btnType}${ 38 | !/full|wide/i.test(btnType) ? '' : (config[btnType] ? 'OFF' : 'ON')}`) 39 | this.div.style.left = `${ btnRect.left +( btnRect.width /2 ) -( this.div.offsetWidth /2 )}px` 40 | this.div.style.top = `${ unscaledTop - this.div.offsetHeight -( 41 | site == 'chatgpt' ? -75 : site == 'perplexity' ? 11 : /* poe */ 19 )}px` 42 | } 43 | }; 44 | -------------------------------------------------------------------------------- /chromium/extension/icons/faded/icon128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/chromium/extension/icons/faded/icon128.png -------------------------------------------------------------------------------- /chromium/extension/icons/faded/icon16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/chromium/extension/icons/faded/icon16.png -------------------------------------------------------------------------------- /chromium/extension/icons/faded/icon32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/chromium/extension/icons/faded/icon32.png -------------------------------------------------------------------------------- /chromium/extension/icons/faded/icon48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/chromium/extension/icons/faded/icon48.png -------------------------------------------------------------------------------- /chromium/extension/icons/faded/icon64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/chromium/extension/icons/faded/icon64.png -------------------------------------------------------------------------------- /chromium/extension/icons/icon128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/chromium/extension/icons/icon128.png -------------------------------------------------------------------------------- /chromium/extension/icons/icon16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/chromium/extension/icons/icon16.png -------------------------------------------------------------------------------- /chromium/extension/icons/icon32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/chromium/extension/icons/icon32.png -------------------------------------------------------------------------------- /chromium/extension/icons/icon48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/chromium/extension/icons/icon48.png -------------------------------------------------------------------------------- /chromium/extension/icons/icon64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/chromium/extension/icons/icon64.png -------------------------------------------------------------------------------- /chromium/extension/lib/browser.js: -------------------------------------------------------------------------------- 1 | 2 | window.browserAPI = { 3 | getMsg(key) { 4 | return /Chromium|Firefox/.test(this.runtime) ? 5 | chrome.i18n.getMessage(key) // from ./_locales/*/messages.json 6 | : app.msgs[key] // from userscript 7 | }, 8 | 9 | get runtime() { 10 | return typeof GM_info != 'undefined' ? 'Greasemonkey userscript' 11 | : typeof chrome != 'undefined' && chrome.runtime ? ( 12 | typeof browser != 'undefined' ? 'Firefox add-on' 13 | : `Chromium ${ navigator.userAgent.includes('Edg') ? 'Edge add-on' : 'extension' }` 14 | ) : 'unknown' 15 | } 16 | }; 17 | -------------------------------------------------------------------------------- /chromium/extension/lib/chatbar.js: -------------------------------------------------------------------------------- 1 | // Requires components/.js + lib/.js + 2 | 3 | window.chatbar = { 4 | 5 | async get() { // requires lib/dom.js + 6 | const { site } = env, { [site]: { selectors }} = sites 7 | return site == 'chatgpt' ? document.querySelector('form[data-type=unified-composer] > div') 8 | : (await dom.get.loadedElem(selectors.input)).parentNode.parentNode 9 | }, 10 | 11 | is: { 12 | async dark() { // requires lib/chatbar.js + env 13 | return env.site != 'chatgpt' ? undefined 14 | : getComputedStyle(await chatbar.get() || document.documentElement) 15 | .backgroundColor == 'rgb(48, 48, 48)' 16 | }, 17 | 18 | async tall() { return (await chatbar.get())?.getBoundingClientRect().height > 60 } // requires lib/chatbar.js 19 | }, 20 | 21 | async reset() { // requires 22 | const chatbarDiv = await this.get() ; if (!chatbarDiv) return 23 | const { site } = env, { [site]: { selectors }} = sites 24 | if (site == 'chatgpt') { // restore chatbar inner width 25 | const inputArea = chatbarDiv.querySelector(selectors.input) 26 | if (inputArea) inputArea.style.width = inputArea.parentNode.style.width = 'initial' 27 | } else if (site == 'poe') // restore Attach File button icon + Poe Mic button position 28 | ['attachFile', 'mic'].forEach(btnType => { 29 | const btn = chatbarDiv.querySelector(selectors.btns[btnType]) ; if (!btn) return 30 | if (btnType == 'attachFile' && buttons.poe.attachFile.plusIcon) 31 | btn.querySelector('svg').replaceWith(buttons.poe.attachFile.plusIcon.cloneNode(true)) 32 | else /* Mic */ btn.style.marginRight = '' 33 | }) 34 | }, 35 | 36 | async tweak() { // requires components/.js + lib/dom.js + 37 | const chatbarDiv = await this.get() ; if (!chatbarDiv) return 38 | const { site } = env, { [site]: { selectors }} = sites 39 | if (site == 'chatgpt') { // update chatbar inner width 40 | const inputArea = chatbarDiv.querySelector(selectors.input) ; if (!inputArea) return 41 | if (chatgpt.canvasIsOpen()) inputArea.parentNode.style.width = '100%' 42 | else if (!await this.is.tall()) { // narrow it to not clash w/ buttons 43 | const widths = { chatbar: dom.get.computedWidth(chatbarDiv) }, 44 | visibleBtnTypes = [...buttons.get.types.visible(), 'end'] 45 | visibleBtnTypes.forEach(type => widths[type] = ( 46 | dom.get.computedWidth(buttons[type] || chatbarDiv.querySelector( 47 | `${selectors.btns.send}, ${selectors.btns.stop}, ${selectors.btns.voice}`)) 48 | )) 49 | const totalBtnWidths = visibleBtnTypes.reduce((sum, btnType) => sum + widths[btnType], 0) 50 | inputArea.parentNode.style.width = `${ // expand to close gap w/ buttons 51 | widths.chatbar - totalBtnWidths -40 }px` 52 | inputArea.style.width = '100%' // rid h-scrollbar 53 | } 54 | } else if (site == 'poe') { // replace Attach File btn icon + move Mic btn closer to Send 55 | const btnLoadTimeout = 5000 // ms 56 | dom.get.loadedElem(selectors.btns.attachFile, { timeout: btnLoadTimeout }).then(btn => { 57 | if (!btn) return 58 | const plusIcon = btn.querySelector('svg:has(> path[d^="M13 4.5a1"])') 59 | buttons.poe ||= { attachFile: { plusIcon }} // cache for this.reset() 60 | plusIcon?.replaceWith(icons.create({ 61 | key: 'paperclip', style: 'height: 15px !important ; width: 15px !important' })) 62 | }) 63 | dom.get.loadedElem(selectors.btns.mic, { timeout: btnLoadTimeout }) 64 | .then(btn => { if (btn) btn.style.marginRight = '-7.5px' }) 65 | } 66 | } 67 | }; 68 | -------------------------------------------------------------------------------- /chromium/extension/lib/dom.min.js: -------------------------------------------------------------------------------- 1 | window.dom={addRisingParticles(targetNode,{lightScheme="gray",darkScheme="white"}={}){if(!targetNode.querySelector("[id*=particles]")){let particlesDivsWrapper=document.createElement("div");particlesDivsWrapper.style.cssText="position: absolute ; top: 0 ; left: 0 ;height: 100% ; width: 100% ; border-radius: 15px ; overflow: clip ;z-index: -1",["sm","med","lg"].forEach(particleSize=>{var particlesDiv=document.createElement("div");particlesDiv.id=config?.bgAnimationsDisabled?`particles-${particleSize}-off`:`${"dark"==(env?.ui?.scheme||env?.ui?.app?.scheme)?darkScheme:lightScheme}-particles-`+particleSize,particlesDivsWrapper.append(particlesDiv)}),targetNode.prepend(particlesDivsWrapper)}},create:{anchor(linkHref,displayContent,attrs={}){let anchor=document.createElement("a"),defaultAttrs={href:linkHref,target:"_blank",rel:"noopener"},finalAttrs={...defaultAttrs,...attrs};return Object.entries(finalAttrs).forEach(([attr,value])=>anchor.setAttribute(attr,value)),displayContent&&anchor.append(displayContent),anchor},elem(elemType,attrs={}){var attr,elem=document.createElement(elemType);for(attr in attrs)elem.setAttribute(attr,attrs[attr]);return elem},style(content,attrs={}){var attr,style=document.createElement("style");for(attr in style.setAttribute("type","text/css"),attrs)style.setAttribute(attr,attrs[attr]);return content&&(style.textContent=content),style},svgElem(type,attrs={}){var attr,elem=document.createElementNS("http://www.w3.org/2000/svg",type);for(attr in attrs)elem.setAttributeNS(null,attr,attrs[attr]);return elem}},cssSelectorize(classList){return classList.toString().replace(/([:[\]\\])/g,"\\$1").replace(/^| /g,".")},get:{computedSize(elems,{dimension}={}){(elems=elems instanceof NodeList?[...elems]:[].concat(elems)).forEach(elem=>{if(!(elem instanceof Node))throw new Error(`Invalid elem: Element "${JSON.stringify(elem)}" is not a valid DOM node`)});let validDimensions=["width","height"],dimensionsToCompute=[].concat(dimension||validDimensions),computedDimensions=(dimensionsToCompute.forEach(dimension=>{if(!validDimensions.includes(dimension))throw new Error("Invalid dimension: Use 'width' or 'height'")}),{width:0,height:0});return elems.forEach(elem=>{let elemStyle=getComputedStyle(elem);"none"!=elemStyle.display&&Object.keys(computedDimensions).forEach(dimension=>{dimensionsToCompute.includes(dimension)&&(computedDimensions[dimension]+=elem.getBoundingClientRect()[dimension]+parseFloat(elemStyle["margin"+("width"==dimension?"Left":"Top")])+parseFloat(elemStyle["margin"+("width"==dimension?"Right":"Bottom")]))})}),1{var elem=document.querySelector(selector);elem?resolve(elem):new MutationObserver((_,obs)=>{var elem=document.querySelector(selector);elem&&(obs.disconnect(),resolve(elem))}).observe(document.documentElement,{childList:!0,subtree:!0})})];return timeout&&raceEntries.push(new Promise(resolve=>setTimeout(()=>resolve(null),timeout))),Promise.race(raceEntries)}}}; -------------------------------------------------------------------------------- /chromium/extension/lib/sync.js: -------------------------------------------------------------------------------- 1 | // Requires components/buttons.js + lib/.js + + notify() 2 | 3 | window.sync = { 4 | 5 | async configToUI(options) { // on toolbar popup toggles + AI tab activations 6 | // ... requires components/buttons.js + lib/.js + 7 | 8 | const { site } = env, extensionWasDisabled = config.extensionDisabled || config[`${site}Disabled`] 9 | await settings.load('extensionDisabled', settings.siteDisabledKeys, sites[site].availFeatures) 10 | if (!extensionWasDisabled && ( config.extensionDisabled || config[`${site}Disabled`] )) { // reset UI 11 | [styles.chatbar.node, styles.tweaks.node, styles.widescreen.node, styles.fullWin.node, buttons] 12 | .forEach(target => target?.remove()) 13 | chatbar.reset() 14 | if (site != 'poe') document.body.removeEventListener('wheel', window.enableWheelScroll) 15 | } else if (!config.extensionDisabled && !config[`${site}Disabled`]) { // sync modes/tweaks/btns 16 | if (config.widescreen ^ styles.widescreen.node?.isConnected) { // sync Widescreen 17 | suppressNotifs() ; toggleMode('widescreen') } 18 | if (sites[site].hasSidebar && ( config.fullWindow ^ await ui.isFullWin() )) { // sync Full-Window 19 | suppressNotifs() ; toggleMode('fullWindow') } 20 | styles.update({ key: 'widescreen' }) // sync WW 21 | styles.update({ key: 'tweaks' }) // sync HH/HF/TCB/NCB/BA 22 | styles.update({ key: 'chatbar' }) // sync TCB/WCB 23 | if (site != 'perplexity') chatbar.tweak() // update ChatGPT chatbar inner width or hack Poe btn pos 24 | buttons[config.btnsVisible ? 'insert' : 'remove']() // update button visibility 25 | if (options?.updatedKey == 'btnAnimationsDisabled' && !config.btnAnimationsDisabled) 26 | buttons.animate() // to visually signal location + preview fx applied by Button Animations toggle-on 27 | else if (/notifBottom|toastMode/.test(options?.updatedKey)) styles.update({ key: 'toast' }) 28 | if (site != 'poe') // toggle free wheel locked in some Spam blocks 29 | document.body[`${ config.blockSpamDisabled ? 'remove' : 'add' }EventListener`]( 30 | 'wheel', window.enableWheelScroll) 31 | } 32 | 33 | function suppressNotifs() { 34 | if (config.notifDisabled) return 35 | settings.save('notifDisabled', true) // suppress notifs for cleaner UI 36 | setTimeout( // ...temporarily 37 | () => settings.save('notifDisabled', false), options?.updatedKey == 'widescreen' ? 1 : 15) 38 | } 39 | }, 40 | 41 | async mode(mode) { // setting + icon + chatbar 42 | const state = ( mode == 'widescreen' ? styles.widescreen.node?.isConnected 43 | : mode == 'fullWindow' ? await ui.isFullWin() 44 | : chatgpt.isFullScreen() ) 45 | settings.save(mode, state) ; buttons.update.svg(mode) 46 | if (!config.extensionDisabled && !config[`${env.site}Disabled`]) { // tweak UI 47 | if (env.site == 'chatgpt') setTimeout(() => chatbar.tweak(), // update inner width 48 | mode == 'fullWindow' && config.widescreen && config.widerChatbox ? 49 | 111 : 0) // delay if toggled to/from active WCB to avoid wrong width 50 | else if (env.site == 'perplexity' || env.site == 'poe' && config.widerChatbox) 51 | styles.update({ key: 'chatbar' }) // toggle full-width Perplexity chatbar or sync Poe WCB 52 | notify(`${browserAPI.getMsg('mode_' + mode)} ${ 53 | browserAPI.getMsg(`state_${ state ? 'on' : 'off' }`).toUpperCase()}`) 54 | } 55 | config.modeSynced = true ; setTimeout(() => config.modeSynced = false, 100) // prevent repetition 56 | } 57 | }; 58 | -------------------------------------------------------------------------------- /chromium/extension/lib/ui.js: -------------------------------------------------------------------------------- 1 | // Requires lib/dom.js + env.site + sites 2 | 3 | window.ui = { 4 | async getScheme() { 5 | const { site } = env, 6 | rootElem = await dom.get.loadedElem(`html${ site == 'perplexity' ? '[data-color-scheme]' : '' }`) 7 | return site == 'perplexity' ? rootElem.dataset.colorScheme 8 | : /\b(light|dark)\b/.exec(document.documentElement.className)?.[1] 9 | || (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') 10 | }, 11 | 12 | async isFullWin() { 13 | const { site } = env 14 | if (site == 'poe') return styles.fullWin.node.isConnected 15 | else if (site == 'perplexity') { 16 | await new Promise(requestAnimationFrame) 17 | return !document.querySelector('svg.tabler-icon-pinned-filled') 18 | } else if (!sites[site].hasSidebar) return true 19 | else { // calc widths to determine on sites w/ native toggle 20 | const barWidths = {} ; ['left', 'right'].forEach(side => { 21 | const barSelector = sites[site].selectors[`${ side == 'left' ? 'side' : 'right' }bar`], 22 | barElem = document.querySelector(barSelector) 23 | barWidths[side] = barElem ? dom.get.computedWidth(barElem) : 0 24 | }) 25 | return barWidths.left < 100 && barWidths.right < 100 // true if both bars skinny/hidden 26 | } 27 | } 28 | }; 29 | -------------------------------------------------------------------------------- /chromium/extension/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "manifest_version": 3, 3 | "name": "__MSG_appName__", 4 | "short_name": "ChatGPT 🖥️", 5 | "description": "__MSG_appDesc__", 6 | "version": "2025.6.9", 7 | "author": "Adam Lui", 8 | "homepage_url": "https://www.chatgptwidescreen.com", 9 | "default_locale": "en", 10 | "icons": { 11 | "16": "icons/icon16.png", 12 | "32": "icons/icon32.png", 13 | "48": "icons/icon48.png", 14 | "64": "icons/icon64.png", 15 | "128": "icons/icon128.png" 16 | }, 17 | "permissions": ["activeTab", "storage"], 18 | "action": { "default_popup": "popup/index.html" }, 19 | "web_accessible_resources": [{ "matches": [""], "resources": ["components/*", "lib/*"] }], 20 | "content_scripts": [{ 21 | "matches": ["https://chatgpt.com/*", "https://www.perplexity.ai/*", "https://poe.com/*"], 22 | "run_at": "document_end", "js": ["content.js"] 23 | }], 24 | "background": { "service_worker": "service-worker.js" }, 25 | "minimum_chrome_version": "88" 26 | } 27 | -------------------------------------------------------------------------------- /chromium/extension/popup/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 |
11 |
12 | 16 | 17 |
18 |
19 |
20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /chromium/extension/service-worker.js: -------------------------------------------------------------------------------- 1 | importScripts('lib/json5.min.js') 2 | 3 | // Init DATA 4 | const appReady = (async () => { 5 | 6 | // Init APP data 7 | const app = { 8 | version: chrome.runtime.getManifest().version, 9 | commitHashes: { app: '89e1e1a' }, // for cached app.json + sites.json5 10 | runtime: (() => { 11 | return typeof chrome != 'undefined' && chrome.runtime ? ( 12 | typeof browser != 'undefined' ? 'Firefox add-on' 13 | : `Chromium ${ navigator.userAgent.includes('Edg') ? 'Edge add-on' : 'extension' }` 14 | ) : 'unknown' 15 | })() 16 | } 17 | app.urls = { resourceHost: `https://cdn.jsdelivr.net/gh/adamlui/chatgpt-widescreen@${app.commitHashes.app}` } 18 | const remoteAppData = await (await fetch(`${app.urls.resourceHost}/assets/data/app.json`)).json() 19 | Object.assign(app, { ...remoteAppData, urls: { ...app.urls, ...remoteAppData.urls }}) 20 | chrome.storage.local.set({ app }) // save to browser storage 21 | chrome.runtime.setUninstallURL(app.urls.uninstall) 22 | 23 | // Init SITES data 24 | const sites = Object.assign(Object.create(null), 25 | JSON5.parse(await (await fetch(`${app.urls.resourceHost}/assets/data/sites.json5`)).text())) 26 | Object.keys(sites).forEach(site => { // strip protocol from homepage URL + add favicon URL for popup menu 27 | sites[site].urls.homepage = sites[site].urls.homepage.replace(/^https?:\/\//, '') // for cleaner tooltips/labels 28 | sites[site].urls.favicon = `https://www.google.com/s2/favicons?domain=${sites[site].urls.homepage}` 29 | }) 30 | chrome.storage.local.set({ sites }) 31 | 32 | return { app, sites } // to install listener 33 | })() 34 | 35 | // Launch WELCOME PAGE on install 36 | chrome.runtime.onInstalled.addListener(details => { 37 | if (details.reason == 'install') // to exclude updates 38 | appReady.then(({ app }) => chrome.tabs.create({ url: app.urls.welcome + '/chromium' })) 39 | }) 40 | 41 | // Sync SETTINGS/MODES to activated tabs 42 | chrome.tabs.onActivated.addListener(activeInfo => 43 | chrome.tabs.sendMessage(activeInfo.tabId, { action: 'syncConfigToUI' })) 44 | 45 | // Show ABOUT modal on AI site when toolbar button clicked 46 | const aiHomeURLs = chrome.runtime.getManifest().content_scripts[0].matches.map(url => url.replace(/\*$/, '')) 47 | chrome.runtime.onMessage.addListener(async req => { 48 | if (req.action == 'showAbout') { 49 | const [activeTab] = await chrome.tabs.query({ active: true, currentWindow: true }) 50 | const aiTab = aiHomeURLs.some(aiURL => 51 | new URL(activeTab.url).hostname == new URL(aiURL).hostname) ? activeTab // active tab is AI site, use it 52 | : // else use random enabled site or ChatGPT 53 | await chrome.storage.local.get(['chatgptDisabled', 'perplexityDisabled', 'poeDisabled']) 54 | .then(({ chatgptDisabled, perplexityDisabled, poeDisabled }) => { 55 | const sitesEnabled = [ 56 | !chatgptDisabled && aiHomeURLs[0], 57 | !perplexityDisabled && aiHomeURLs[1], 58 | !poeDisabled && aiHomeURLs[2] 59 | ].filter(Boolean) 60 | return chrome.tabs.create({ 61 | url: sitesEnabled[Math.floor(Math.random() * sitesEnabled.length)] || aiHomeURLs[0] }) 62 | }) 63 | if (activeTab != aiTab) await new Promise(resolve => // after new tab loads 64 | chrome.tabs.onUpdated.addListener(function loadedListener(tabId, info) { 65 | if (tabId == aiTab.id && info.status == 'complete') { 66 | chrome.tabs.onUpdated.removeListener(loadedListener) ; setTimeout(resolve, 500) 67 | }})) 68 | chrome.tabs.sendMessage(aiTab.id, { action: 'showAbout' }) 69 | } 70 | }) 71 | -------------------------------------------------------------------------------- /docs/PRIVACY.md: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | 5 | 6 | 7 |  English | 8 | 简体中文 | 9 | हिंदी 10 |
11 |
12 | 13 | # Privacy Policy 14 | 15 | ChatGPT Widescreen Mode does not collect nor store any user data. No information is shared with third-parties for personally-targeted, behavioral marketing or any other purpose. No information is collected from any third-parties. 16 | 17 | ## Updates 18 | 19 | To view revisions to this policy, visit https://github.com/adamlui/chatgpt-widescreen/commits/main/docs/PRIVACY.md 20 | -------------------------------------------------------------------------------- /docs/SECURITY.md: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | 5 | 6 | 7 |  English | 8 | 简体中文 | 9 | हिंदी 10 |
11 |
12 | 13 | # 🛡️ Security Policy 14 | 15 | If you find a vulnerability, please open a [draft security advisory](https://github.com/adamlui/chatgpt-widescreen/security/advisories/new). 16 | 17 | Pull requests are also welcome, but for safety reasons, send an email to and wait for a response before making it public. 18 | -------------------------------------------------------------------------------- /docs/hi/LICENSE.md: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | 5 | 6 | 7 |  हिंदी | 8 | English | 9 | 简体中文 10 |
11 |
12 | 13 | # 🏛️ MIT लाइसेंस 14 | 15 | **कॉपीराइट © 2023–2025 [एडम लुई (Adam Lui)](https://github.com/adamlui) और [योगदानकर्ता](https://docs.chatgptwidescreen.com/#-contributors).** 16 | 17 | इसके द्वारा प्रति प्राप्त करने वाले किसी भी व्यक्ति को अनुमति निःशुल्क प्रदान की जाती है इस सॉफ़्टवेयर और संबंधित दस्तावेज़ फ़ाइलों ("सॉफ़्टवेयर") से निपटने के लिए सॉफ़्टवेयर में बिना किसी प्रतिबंध के, जिसमें बिना किसी सीमा के अधिकार शामिल हैं उपयोग करना, प्रतिलिपि बनाना, संशोधित करना, विलय करना, प्रकाशित करना, वितरित करना, उपलाइसेंस देना और/या बेचना सॉफ़्टवेयर की प्रतियां, और उन व्यक्तियों को अनुमति देना जिनके पास सॉफ़्टवेयर है निम्नलिखित शर्तों के अधीन, ऐसा करने के लिए सुसज्जित: 18 | 19 | उपरोक्त कॉपीराइट नोटिस और यह अनुमति नोटिस सभी में शामिल होंगे सॉफ़्टवेयर की प्रतियां या पर्याप्त भाग। 20 | 21 | सॉफ़्टवेयर "जैसा है" प्रदान किया जाता है, बिना किसी प्रकार की, स्पष्ट या वारंटी के। निहित, व्यापारिकता की वारंटी सहित, लेकिन इन्हीं तक सीमित नहीं, किसी विशेष उद्देश्य के लिए उपयुक्तता और उल्लंघन न होना। किसी भी स्थिति में ऐसा नहीं होगा लेखक या कॉपीराइट धारक किसी भी दावे, क्षति या अन्य के लिए उत्तरदायी होंगे दायित्व, चाहे किसी अनुबंध, अपकृत्य या किसी अन्य प्रकार से उत्पन्न हो, सॉफ़्टवेयर से बाहर या उसके संबंध में या उपयोग या अन्य लेनदेन में सॉफ़्टवेयर। 22 | -------------------------------------------------------------------------------- /docs/hi/PRIVACY.md: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | 5 | 6 | 7 |  हिंदी | 8 | English | 9 | 简体中文 10 |
11 |
12 | 13 | # गोपनीयता नीति 14 | 15 | चैटजीपीटी वाइडस्क्रीन मोड किसी उपयोगकर्ता डेटा को एकत्र या संग्रहीत नहीं करता है। व्यक्तिगत रूप से लक्षित, व्यवहारिक विपणन या किसी अन्य उद्देश्य के लिए तीसरे पक्ष के साथ कोई जानकारी साझा नहीं की जाती है। किसी तीसरे पक्ष से कोई जानकारी एकत्र नहीं की जाती है। 16 | 17 | ## अपडेट 18 | 19 | इस नीति में संशोधन देखने के लिए, https://github.com/adamlui/chatgpt-widescreen/commits/main/docs/hi/PRIVACY.md पर जाएं 20 | -------------------------------------------------------------------------------- /docs/hi/SECURITY.md: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | 5 | 6 | 7 |  हिंदी | 8 | English | 9 | 简体中文 10 |
11 |
12 | 13 | # 🛡️ सुरक्षा नीति 14 | 15 | यदि आपको कोई भेद्यता मिलती है, तो कृपया एक [मसौदा सुरक्षा सलाहकार](https://github.com/adamlui/chatgpt-widescreen/security/advisories/new) खोलें। 16 | 17 | पुल अनुरोधों का भी स्वागत है, लेकिन सुरक्षा कारणों से, पर एक ईमेल भेजें और इसे सार्वजनिक करने से पहले प्रतिक्रिया की प्रतीक्षा करें। 18 | -------------------------------------------------------------------------------- /docs/zh-cn/LICENSE.md: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | 5 | 6 | 7 |  简体中文 | 8 | English | 9 | हिंदी 10 |
11 |
12 | 13 | # 🏛️ MIT 许可证 14 | 15 | **版权所有 © 2023–2025 [刘展鹏 (Adam Lui)](https://github.com/adamlui) & [贡献者](https://docs.chatgptwidescreen.com/zh-cn/#-贡献者)** 16 | 17 | 特此免费向任何获得副本的人授予许可本软件和相关文档文件(『软件』),处理在软件中不受限制,包括但不限于权利使用、复制、修改、合并、发布、分发、再许可和/或出售该软件的副本,并允许该软件是提供这样做,但须满足以下条件: 18 | 19 | 上述版权声明和本许可声明应包含在所有软件的副本或重要部分。 20 | 21 | 本软件『按原样』提供,不提供任何形式的明示或保证暗示的,包括但不限于适销性保证,适用于特定目的和非侵权。 在任何情况下都不得作者或版权持有人对任何索赔、损害或其他责任,无论是在合同、侵权或其他方面的行为中,由以下原因引起,出于或与软件或使用或其他交易有关软件。 22 | -------------------------------------------------------------------------------- /docs/zh-cn/PRIVACY.md: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | 5 | 6 | 7 |  简体中文 | 8 | English | 9 | हिंदी 10 |
11 |
12 | 13 | # 隐私政策 14 | 15 | ChatGPT 宽屏模式不会收集或存储任何用户数据。 不会出于个人目标、行为营销或任何其他目的与第三方共享任何信息。 不会从任何第三方收集任何信息。 16 | 17 | ## 更新 18 | 19 | 要查看此政策的修订,请访问 https://github.com/adamlui/chatgpt-widescreen/commits/main/docs/zh-cn/PRIVACY.md 20 | -------------------------------------------------------------------------------- /docs/zh-cn/SECURITY.md: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | 5 | 6 | 7 |  简体中文 | 8 | English | 9 | हिंदी 10 |
11 |
12 | 13 | # 🛡️ 安全政策 14 | 15 | 如果您发现漏洞,请打开一个[安全建议草案](https://github.com/adamlui/chatgpt-widescreen/security/advisories/new)。 16 | 17 | 也欢迎拉取请求,但出于安全原因,请发送电子邮件至 并在公开之前等待回复。 18 | -------------------------------------------------------------------------------- /eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import js from '@eslint/js' 2 | import css from '@eslint/css' 3 | import html from '@html-eslint/eslint-plugin' 4 | import htmlParser from '@html-eslint/parser' 5 | import globals from 'globals' 6 | import importPlugin from 'eslint-plugin-import' 7 | import json from '@eslint/json' 8 | import markdown from '@eslint/markdown' 9 | import regexp from 'eslint-plugin-regexp' 10 | import stylisticJS from '@stylistic/eslint-plugin' 11 | import yml from 'eslint-plugin-yml' 12 | 13 | export default [ 14 | { ignores: ['**/*.min.js', '**/package-lock.json'] }, 15 | { 16 | files: ['**/*.{js,mjs}'], 17 | languageOptions: { 18 | ecmaVersion: 'latest', sourceType: 'script', 19 | globals: { 20 | ...globals.browser, ...globals.greasemonkey, ...globals.node, app: 'writable', browserAPI: 'readonly', 21 | buttons: 'writable', chatbar: 'writable', chatgpt: 'readonly', chrome: 'readonly', config: 'writable', 22 | dom: 'readonly', env: 'writable', icons: 'writable', importScripts: 'readonly', JSON5: 'readonly', 23 | modals: 'readonly', notify: 'readonly', settings: 'writable', sites: 'writable', styles: 'readonly', 24 | sync: 'readonly', toggleMode: 'readonly', tooltip: 'writable', ui: 'readonly', updateCheck: 'readonly' 25 | } 26 | }, 27 | plugins: { 'import': importPlugin, 'js-styles': stylisticJS, regexp }, 28 | rules: { 29 | ...js.configs.recommended.rules, 30 | ...importPlugin.flatConfigs.recommended.rules, 31 | ...regexp.configs['flat/recommended'].rules, 32 | 'indent': 'off', 'no-unexpected-multiline': 'off', 'key-spacing': 'off', // allow whitespace anywhere 33 | 'js-styles/no-trailing-spaces': 'error', // ...except at ends of lines 34 | 'js-styles/max-len': ['error', { 'code': 120, // limit lines to 120 chars except if containing... 35 | 'ignoreComments': true, 'ignoreStrings': true, // ...trailing/own-line comments, quoted strings... 36 | 'ignoreTemplateLiterals': true, 'ignoreRegExpLiterals': true }], // ...or template/regex literals 37 | 'js-styles/no-extra-semi': 'error', // disallow unnecessary semicolons 38 | 'quotes': ['error', 'single', // enforce single quotes... 39 | { 'allowTemplateLiterals': true }], // ...except backticks to avoid escaping quotes 40 | 'comma-dangle': ['error', 'never'], // enforce no trailing commas in arrays or objects 41 | 'no-constant-condition': 'off', // allow constant conditions 42 | 'no-empty': 'off', // allow empty blocks 43 | 'no-inner-declarations': 'off', // allow function declarations anywhere 44 | 'no-useless-escape': 'off', // allow all escape chars cause ESLint sucks at detecting truly useless ones 45 | 'no-unused-vars': ['error', { 'caughtErrors': 'none' }] // allow unused named args in catch blocks 46 | } 47 | }, 48 | { files: ['**/chatgpt.js'], languageOptions: { globals: { chatgpt: 'off' }}}, 49 | { 50 | files: ['**/*.css'], language: 'css/css', plugins: { css }, 51 | rules: { ...css.configs.recommended.rules, 'css/no-important': 'off' } 52 | }, 53 | { 54 | files: ['**/*.html'], languageOptions: { parser: htmlParser }, plugins: { '@html-eslint': html }, 55 | rules: { 56 | ...html.configs['flat/recommended'].rules, 57 | '@html-eslint/require-title': 'off', // allow missing title tags 58 | '@html-eslint/quotes': 'off', // allow unquoted attrs for compactness 59 | '@html-eslint/attrs-newline': 'off', // allow multi-attrs in single line 60 | '@html-eslint/require-img-alt': 'off', // allow img tags w/o alt attributes 61 | '@html-eslint/indent': 'off', '@html-eslint/element-newline': 'off' // allow whitespace anywhere 62 | } 63 | }, 64 | { files: ['**/*.json'], language: 'json/json', ...json.configs.recommended }, 65 | { files: ['**/*.json5'], language: 'json/json5', ...json.configs.recommended }, 66 | { 67 | files: ['**/*.md'], language: 'markdown/commonmark', plugins: { markdown }, 68 | rules: { 69 | ...markdown.configs.recommended[0].rules, 70 | 'markdown/heading-increment': 'off', // allow headings to skip levels 71 | 'markdown/fenced-code-language': 'off', // allow code blocks w/ no language specified 72 | 'markdown/no-missing-label-refs': 'off', // allow missing label references 73 | 'markdown/no-multiple-h1': 'off', // allow multi H1s 74 | 'markdown/require-alt-text': 'off' // allow missing img alts 75 | } 76 | }, 77 | { files: ['**/*.mjs'], languageOptions: { sourceType: 'module' }}, 78 | { files: ['**/*.{yaml,yml}'], ...yml.configs['flat/standard'][1] } 79 | ] 80 | -------------------------------------------------------------------------------- /firefox/LICENSE.md: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | 5 | 6 | 7 |  English | 8 | 简体中文 | 9 | हिंदी 10 |
11 |
12 | 13 | # 🏛️ MIT License 14 | 15 | **Copyright © 2023–2025 [Adam Lui](https://github.com/adamlui) & [contributors](https://docs.chatgptwidescreen.com/#-contributors)** 16 | 17 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 18 | 19 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 20 | 21 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /firefox/docs/PRIVACY.md: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | 5 | 6 | 7 |  English | 8 | 简体中文 | 9 | हिंदी 10 |
11 |
12 | 13 | # Privacy Policy 14 | 15 | ChatGPT Widescreen Mode does not collect nor store any user data. No information is shared with third-parties for personally-targeted, behavioral marketing or any other purpose. No information is collected from any third-parties. 16 | 17 | ## Updates 18 | 19 | To view revisions to this policy, visit https://github.com/adamlui/chatgpt-widescreen/commits/main/firefox/docs/PRIVACY.md 20 | -------------------------------------------------------------------------------- /firefox/docs/SECURITY.md: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | 5 | 6 | 7 |  English | 8 | 简体中文 | 9 | हिंदी 10 |
11 |
12 | 13 | # 🛡️ Security Policy 14 | 15 | If you find a vulnerability, please open a [draft security advisory](https://github.com/adamlui/chatgpt-widescreen/security/advisories/new). 16 | 17 | Pull requests are also welcome, but for safety reasons, send an email to and wait for a response before making it public. 18 | -------------------------------------------------------------------------------- /firefox/docs/hi/LICENSE.md: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | 5 | 6 | 7 |  हिंदी | 8 | English | 9 | 简体中文 10 |
11 |
12 | 13 | # 🏛️ MIT लाइसेंस 14 | 15 | **कॉपीराइट © 2023–2025 [एडम लुई (Adam Lui)](https://github.com/adamlui) और [योगदानकर्ता](../../#-contributors).** 16 | 17 | इसके द्वारा प्रति प्राप्त करने वाले किसी भी व्यक्ति को अनुमति निःशुल्क प्रदान की जाती है इस सॉफ़्टवेयर और संबंधित दस्तावेज़ फ़ाइलों ("सॉफ़्टवेयर") से निपटने के लिए सॉफ़्टवेयर में बिना किसी प्रतिबंध के, जिसमें बिना किसी सीमा के अधिकार शामिल हैं उपयोग करना, प्रतिलिपि बनाना, संशोधित करना, विलय करना, प्रकाशित करना, वितरित करना, उपलाइसेंस देना और/या बेचना सॉफ़्टवेयर की प्रतियां, और उन व्यक्तियों को अनुमति देना जिनके पास सॉफ़्टवेयर है निम्नलिखित शर्तों के अधीन, ऐसा करने के लिए सुसज्जित: 18 | 19 | उपरोक्त कॉपीराइट नोटिस और यह अनुमति नोटिस सभी में शामिल होंगे सॉफ़्टवेयर की प्रतियां या पर्याप्त भाग। 20 | 21 | सॉफ़्टवेयर "जैसा है" प्रदान किया जाता है, बिना किसी प्रकार की, स्पष्ट या वारंटी के। निहित, व्यापारिकता की वारंटी सहित, लेकिन इन्हीं तक सीमित नहीं, किसी विशेष उद्देश्य के लिए उपयुक्तता और उल्लंघन न होना। किसी भी स्थिति में ऐसा नहीं होगा लेखक या कॉपीराइट धारक किसी भी दावे, क्षति या अन्य के लिए उत्तरदायी होंगे दायित्व, चाहे किसी अनुबंध, अपकृत्य या किसी अन्य प्रकार से उत्पन्न हो, सॉफ़्टवेयर से बाहर या उसके संबंध में या उपयोग या अन्य लेनदेन में सॉफ़्टवेयर। 22 | -------------------------------------------------------------------------------- /firefox/docs/hi/PRIVACY.md: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | 5 | 6 | 7 |  हिंदी | 8 | English | 9 | 简体中文 10 |
11 |
12 | 13 | # गोपनीयता नीति 14 | 15 | चैटजीपीटी वाइडस्क्रीन मोड किसी उपयोगकर्ता डेटा को एकत्र या संग्रहीत नहीं करता है। व्यक्तिगत रूप से लक्षित, व्यवहारिक विपणन या किसी अन्य उद्देश्य के लिए तीसरे पक्ष के साथ कोई जानकारी साझा नहीं की जाती है। किसी तीसरे पक्ष से कोई जानकारी एकत्र नहीं की जाती है। 16 | 17 | ## अपडेट 18 | 19 | इस नीति में संशोधन देखने के लिए, https://github.com/adamlui/chatgpt-widescreen/commits/main/firefox/docs/hi/PRIVACY.md पर जाएं 20 | -------------------------------------------------------------------------------- /firefox/docs/hi/SECURITY.md: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | 5 | 6 | 7 |  हिंदी | 8 | English | 9 | 简体中文 10 |
11 |
12 | 13 | # 🛡️ सुरक्षा नीति 14 | 15 | यदि आपको कोई भेद्यता मिलती है, तो कृपया एक [मसौदा सुरक्षा सलाहकार](https://github.com/adamlui/chatgpt-widescreen/security/advisories/new) खोलें। 16 | 17 | पुल अनुरोधों का भी स्वागत है, लेकिन सुरक्षा कारणों से, पर एक ईमेल भेजें और इसे सार्वजनिक करने से पहले प्रतिक्रिया की प्रतीक्षा करें। 18 | -------------------------------------------------------------------------------- /firefox/docs/zh-cn/LICENSE.md: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | 5 | 6 | 7 |  简体中文 | 8 | English | 9 | हिंदी 10 |
11 |
12 | 13 | # 🏛️ MIT 许可证 14 | 15 | **版权所有 © 2023–2025 [刘展鹏 (Adam Lui)](https://github.com/adamlui) & [贡献者](https://docs.chatgptwidescreen.com/zh-cn/#-贡献者)** 16 | 17 | 特此免费向任何获得副本的人授予许可本软件和相关文档文件(『软件』),处理在软件中不受限制,包括但不限于权利使用、复制、修改、合并、发布、分发、再许可和/或出售该软件的副本,并允许该软件是提供这样做,但须满足以下条件: 18 | 19 | 上述版权声明和本许可声明应包含在所有软件的副本或重要部分。 20 | 21 | 本软件『按原样』提供,不提供任何形式的明示或保证暗示的,包括但不限于适销性保证,适用于特定目的和非侵权。 在任何情况下都不得作者或版权持有人对任何索赔、损害或其他责任,无论是在合同、侵权或其他方面的行为中,由以下原因引起,出于或与软件或使用或其他交易有关软件。 22 | -------------------------------------------------------------------------------- /firefox/docs/zh-cn/PRIVACY.md: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | 5 | 6 | 7 |  简体中文 | 8 | English | 9 | हिंदी 10 |
11 |
12 | 13 | # 隐私政策 14 | 15 | ChatGPT 宽屏模式不会收集或存储任何用户数据。 不会出于个人目标、行为营销或任何其他目的与第三方共享任何信息。 不会从任何第三方收集任何信息。 16 | 17 | ## 更新 18 | 19 | 要查看此政策的修订,请访问 https://github.com/adamlui/chatgpt-widescreen/commits/main/firefox/docs/zh-cn/PRIVACY.md 20 | -------------------------------------------------------------------------------- /firefox/docs/zh-cn/SECURITY.md: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | 5 | 6 | 7 |  简体中文 | 8 | English | 9 | हिंदी 10 |
11 |
12 | 13 | # 🛡️ 安全政策 14 | 15 | 如果您发现漏洞,请打开一个[安全建议草案](https://github.com/adamlui/chatgpt-widescreen/security/advisories/new)。 16 | 17 | 也欢迎拉取请求,但出于安全原因,请发送电子邮件至 并在公开之前等待回复。 18 | -------------------------------------------------------------------------------- /firefox/extension/_locales/zh_HK/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "appName": { "message": "ChatGPT 寬螢幕模式" }, 3 | "appAuthor": { "message": "劉展鵬 (Adam Lui)" }, 4 | "appDesc": { "message": "使用寬/全/高螢幕+垃圾郵件區塊模式增強 ChatGPT。也可以在 perplexity.ai + poe.com 上使用!" }, 5 | "menuLabel_settings": { "message": "設定" }, 6 | "menuLabel_notif": { "message": "通知" }, 7 | "menuLabel_notifs": { "message": "推送通知" }, 8 | "menuLabel_btn": { "message": "按鈕" }, 9 | "menuLabel_chatbox": { "message": "聊天室" }, 10 | "menuLabel_display": { "message": "顯示器" }, 11 | "menuLabel_width": { "message": "寬" }, 12 | "menuLabel_height": { "message": "高" }, 13 | "menuLabel_taller": { "message": "更高" }, 14 | "menuLabel_wider": { "message": "更寬" }, 15 | "menuLabel_newChatBtn": { "message": "新聊天按鈕" }, 16 | "menuLabel_hiddenHeader": { "message": "隱藏標題" }, 17 | "menuLabel_hiddenFooter": { "message": "隱藏頁尾" }, 18 | "menuLabel_btnAnimations": { "message": "按鈕動畫" }, 19 | "menuLabel_btnVisibility": { "message": "按鈕可見度" }, 20 | "menuLabel_show": { "message": "顯示" }, 21 | "menuLabel_anchor": { "message": "錨" }, 22 | "menuLabel_modeNotifs": { "message": "模式通知" }, 23 | "menuLabel_blockSpam": { "message": "垃圾郵件封鎖" }, 24 | "menuLabel_siteSettings": { "message": "站點設置" }, 25 | "menuLabel_about": { "message": "關於我們" }, 26 | "menuLabel_buyMeAcoffee": { "message": "給我買一杯咖啡" }, 27 | "menuLabel_donate": { "message": "請發送捐款" }, 28 | "menuLabel_extensionActive": { "message": "擴充功能已啟用" }, 29 | "about_author": { "message": "作者" }, 30 | "about_and": { "message": "及" }, 31 | "about_contributors": { "message": "貢獻者" }, 32 | "about_version": { "message": "版本" }, 33 | "about_poweredBy": { "message": "技術支持" }, 34 | "about_openSourceCode": { "message": "開放原始碼" }, 35 | "about_latestChanges": { "message": "最新變更" }, 36 | "mode_widescreen": { "message": "寬螢幕" }, 37 | "mode_fullWindow": { "message": "全視窗" }, 38 | "mode_fullscreen": { "message": "全螢幕" }, 39 | "mode_toast": { "message": "Toast 模式" }, 40 | "tooltip_widescreenON": { "message": "寬螢幕" }, 41 | "tooltip_widescreenOFF": { "message": "退出寬螢幕" }, 42 | "tooltip_fullWindowON": { "message": "全視窗模式" }, 43 | "tooltip_fullWindowOFF": { "message": "退出全視窗" }, 44 | "tooltip_fullscreenON": { "message": "全螢幕" }, 45 | "tooltip_fullscreenOFF": { "message": "退出全螢幕" }, 46 | "tooltip_newChat": { "message": "新對話" }, 47 | "tooltip_goto": { "message": "前往" }, 48 | "helptip_adjustSettingsRelatedTo": { "message": "調整相關設定" }, 49 | "helptip_the": { "message": "下圖" }, 50 | "helptip_btns": { "message": "按鈕" }, 51 | "helptip_widescreenWidth": { "message": "調整要套用的寬螢幕數量" }, 52 | "helptip_tallerChatboxHeight": { "message": "調整要套用的更高聊天框的數量" }, 53 | "helptip_tallerChatbox": { "message": "垂直展開聊天框" }, 54 | "helptip_widerChatboxWidth": { "message": "調整要套用的更寬聊天框的數量" }, 55 | "helptip_widerChatbox": { "message": "在寬螢幕模式下水平展開聊天框" }, 56 | "helptip_newChatBtn": { "message": "在聊天室中顯示「新增聊天」按鈕" }, 57 | "helptip_hiddenFooter": { "message": "隱藏網站頁尾" }, 58 | "helptip_hiddenHeader": { "message": "隱藏網站標題" }, 59 | "helptip_btnAnimations": { "message": "懸停時動畫聊天欄按鈕" }, 60 | "helptip_btnVisibility": { "message": "在聊天欄中顯示自訂按鈕" }, 61 | "helptip_modeNotifs": { "message": "切換模式/設定時顯示通知" }, 62 | "helptip_notifBottom": { "message": "將通知錨定在畫面底部" }, 63 | "helptip_toastMode": { "message": "將通知縮小/置中為吐司氣泡" }, 64 | "helptip_blockSpam": { "message": "隱藏垃圾橫幅,避免頁面雜亂無章" }, 65 | "helptip_pageSettings": { "message": "控制頁面的外觀" }, 66 | "helptip_chatbarSettings": { "message": "控制聊天欄的外觀" }, 67 | "helptip_buttonSettings": { "message": "調整與按鈕相關的設定" }, 68 | "helptip_enableDisable": { "message": "啟用/禁用" }, 69 | "helptip_perSite": { "message": "每個網站" }, 70 | "helptip_run": { "message": "執行" }, 71 | "alert_choosePlatform": { "message": "選擇平臺" }, 72 | "alert_updateAvail": { "message": "有可用更新" }, 73 | "alert_newerVer": { "message": "有更新版本" }, 74 | "alert_isAvail": { "message": "可用" }, 75 | "alert_upToDate": { "message": "已更新" }, 76 | "alert_isUpToDate": { "message": "已更新" }, 77 | "alert_showYourSupport": { "message": "展現你的支持" }, 78 | "alert_isOSS": { "message": "是透過 100% 志願者努力免費開發和維護的開放原始碼軟體" }, 79 | "alert_despiteAffliction": { "message": "儘管受到了嚴重的折磨" }, 80 | "alert_longCOVID": { "message": "長期新冠肺炎" }, 81 | "alert_since2020": { "message": "2020 年以來" }, 82 | "alert_byDonatingResults": { "message": "通過捐贈,您幫助我繼續改進,修復錯誤,添加新功能,並使軟件更好" }, 83 | "alert_yourContrib": { "message": "你的貢獻" }, 84 | "alert_noMatterSize": { "message": "無論大小" }, 85 | "alert_directlySupports": { "message": "直接支持我為確保此專案免費開放給所有人使用而付出的無償努力" }, 86 | "alert_growTogether": { "message": "同心協力,我們可以讓這個強大的軟體" }, 87 | "alert_tyForSupport": { "message": "感謝您的支持" }, 88 | "alert_pressF11": { "message": "按下 F11 退出全螢幕" }, 89 | "alert_f11reason": { "message": "使用 F11 進入全螢幕,由於瀏覽器安全原因,必須使用同樣的按鍵退出全螢幕" }, 90 | "notif_chatStopped": { "message": "對話已停止" }, 91 | "btnLabel_moreAIextensions": { "message": "更多人工智慧擴充功能" }, 92 | "btnLabel_leaveReview": { "message": "留下評語" }, 93 | "btnLabel_rateUs": { "message": "評價我們" }, 94 | "btnLabel_discuss": { "message": "討論" }, 95 | "btnLabel_getSupport": { "message": "取得支援" }, 96 | "btnLabel_checkForUpdates": { "message": "檢查更新" }, 97 | "btnLabel_update": { "message": "更新" }, 98 | "btnLabel_dismiss": { "message": "關閉" }, 99 | "link_viewChanges": { "message": "查看更改" }, 100 | "state_disabled": { "message": "禁用" }, 101 | "state_on": { "message": "在" }, 102 | "state_off": { "message": "關" } 103 | } 104 | -------------------------------------------------------------------------------- /firefox/extension/_locales/zh_SG/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "appName": { "message": "ChatGPT 宽屏模式" }, 3 | "appAuthor": { "message": "刘展鹏 (Adam Lui)" }, 4 | "appDesc": { "message": "通过宽屏/全屏/高屏+垃圾邮件块模式增强 ChatGPT。也可以在 perplexity.ai + poe.com 上使用!" }, 5 | "menuLabel_settings": { "message": "设置" }, 6 | "menuLabel_notif": { "message": "通知" }, 7 | "menuLabel_notifs": { "message": "通知" }, 8 | "menuLabel_btn": { "message": "按钮" }, 9 | "menuLabel_chatbox": { "message": "聊天室" }, 10 | "menuLabel_display": { "message": "显示" }, 11 | "menuLabel_width": { "message": "宽度" }, 12 | "menuLabel_height": { "message": "高度" }, 13 | "menuLabel_taller": { "message": "更高" }, 14 | "menuLabel_wider": { "message": "宽松" }, 15 | "menuLabel_newChatBtn": { "message": "在供应商页面上显示聊天按钮" }, 16 | "menuLabel_hiddenHeader": { "message": "隐藏页眉" }, 17 | "menuLabel_hiddenFooter": { "message": "隐藏页脚" }, 18 | "menuLabel_btnAnimations": { "message": "按钮动画" }, 19 | "menuLabel_btnVisibility": { "message": "按钮可见性" }, 20 | "menuLabel_show": { "message": "显示" }, 21 | "menuLabel_anchor": { "message": "锚" }, 22 | "menuLabel_modeNotifs": { "message": "运行提示" }, 23 | "menuLabel_blockSpam": { "message": "垃圾邮件黑名单" }, 24 | "menuLabel_siteSettings": { "message": "站点设置" }, 25 | "menuLabel_about": { "message": "关于" }, 26 | "menuLabel_buyMeAcoffee": { "message": "赠我杯咖啡" }, 27 | "menuLabel_donate": { "message": "请捐款" }, 28 | "menuLabel_extensionActive": { "message": "扩展活动" }, 29 | "about_author": { "message": "作者" }, 30 | "about_and": { "message": "和" }, 31 | "about_contributors": { "message": "贡献者" }, 32 | "about_version": { "message": "版本" }, 33 | "about_poweredBy": { "message": "技术支持方" }, 34 | "about_openSourceCode": { "message": "开源代码" }, 35 | "about_latestChanges": { "message": "新版变化" }, 36 | "mode_widescreen": { "message": "宽屏" }, 37 | "mode_fullWindow": { "message": "全窗口模式" }, 38 | "mode_fullscreen": { "message": "全屏" }, 39 | "mode_toast": { "message": "Toast 模式" }, 40 | "tooltip_widescreenON": { "message": "宽屏模式" }, 41 | "tooltip_widescreenOFF": { "message": "退出宽屏模式" }, 42 | "tooltip_fullWindowON": { "message": "全窗口模式" }, 43 | "tooltip_fullWindowOFF": { "message": "退出全窗口模式" }, 44 | "tooltip_fullscreenON": { "message": "全屏模式" }, 45 | "tooltip_fullscreenOFF": { "message": "退出全屏模式" }, 46 | "tooltip_newChat": { "message": "新对话" }, 47 | "tooltip_goto": { "message": "转到" }, 48 | "helptip_adjustSettingsRelatedTo": { "message": "调整与以下内容相关的设置" }, 49 | "helptip_the": { "message": "而" }, 50 | "helptip_btns": { "message": "按钮" }, 51 | "helptip_widescreenWidth": { "message": "调整要应用的宽屏数量" }, 52 | "helptip_tallerChatboxHeight": { "message": "调整要应用的更高聊天框的数量" }, 53 | "helptip_tallerChatbox": { "message": "垂直展开聊天框" }, 54 | "helptip_widerChatboxWidth": { "message": "调整要应用的更宽聊天框的数量" }, 55 | "helptip_widerChatbox": { "message": "在宽屏模式下水平展开聊天框" }, 56 | "helptip_newChatBtn": { "message": "在聊天框中显示“新建聊天”按钮" }, 57 | "helptip_hiddenFooter": { "message": "网站页脚" }, 58 | "helptip_hiddenHeader": { "message": "网站页眉" }, 59 | "helptip_btnAnimations": { "message": "悬停时动画聊天栏按钮" }, 60 | "helptip_btnVisibility": { "message": "在聊天栏中显示自定义按钮" }, 61 | "helptip_modeNotifs": { "message": "切换模式/设置时显示通知" }, 62 | "helptip_notifBottom": { "message": "将通知定位到屏幕底部" }, 63 | "helptip_toastMode": { "message": "将通知缩小/居中为吐司气泡" }, 64 | "helptip_blockSpam": { "message": "隐藏垃圾邮件横幅,防止页面混乱" }, 65 | "helptip_pageSettings": { "message": "控制页面的外观" }, 66 | "helptip_chatbarSettings": { "message": "控制聊天栏的外观" }, 67 | "helptip_buttonSettings": { "message": "调整与按钮相关的设置" }, 68 | "helptip_enableDisable": { "message": "启用/禁用" }, 69 | "helptip_perSite": { "message": "每研究中心" }, 70 | "helptip_run": { "message": "潛襲" }, 71 | "alert_choosePlatform": { "message": "选择平台" }, 72 | "alert_updateAvail": { "message": "有可用更新" }, 73 | "alert_newerVer": { "message": "有更新版本" }, 74 | "alert_isAvail": { "message": "可用" }, 75 | "alert_upToDate": { "message": "已更新" }, 76 | "alert_isUpToDate": { "message": "已更新" }, 77 | "alert_showYourSupport": { "message": "力求展现你的支持" }, 78 | "alert_isOSS": { "message": "是通过 100% 的志愿者努力免费构建和维护的开源软件" }, 79 | "alert_despiteAffliction": { "message": "尽管受到严重影响" }, 80 | "alert_longCOVID": { "message": "长期新冠肺炎疫情" }, 81 | "alert_since2020": { "message": "自 2020 年起" }, 82 | "alert_byDonatingResults": { "message": "通过捐赠,您帮助我继续改进,修复错误,添加新功能,并使软件变得更好" }, 83 | "alert_yourContrib": { "message": "您的贡献值" }, 84 | "alert_noMatterSize": { "message": "无论大小" }, 85 | "alert_directlySupports": { "message": "直接支持我的无偿努力,以确保该项目免费开放,供所有人使用" }, 86 | "alert_growTogether": { "message": "携起手来,我们可以让这个强大的软件" }, 87 | "alert_tyForSupport": { "message": "感谢您的支持" }, 88 | "alert_pressF11": { "message": "按下 F11 键退出全屏模式" }, 89 | "alert_f11reason": { "message": "使用 F11 键进入全屏模式,由于浏览器安全原因,必须使用同样的按键退出全屏模式" }, 90 | "notif_chatStopped": { "message": "聊天已停止" }, 91 | "btnLabel_moreAIextensions": { "message": "更多 AI 扩展" }, 92 | "btnLabel_leaveReview": { "message": "离开评论" }, 93 | "btnLabel_rateUs": { "message": "给我们评价" }, 94 | "btnLabel_discuss": { "message": "讨论" }, 95 | "btnLabel_getSupport": { "message": "获取帮助" }, 96 | "btnLabel_checkForUpdates": { "message": "检查更新" }, 97 | "btnLabel_update": { "message": "更新" }, 98 | "btnLabel_dismiss": { "message": "关闭" }, 99 | "link_viewChanges": { "message": "查看更改" }, 100 | "state_disabled": { "message": "禁用" }, 101 | "state_on": { "message": "开启" }, 102 | "state_off": { "message": "关闭" } 103 | } 104 | -------------------------------------------------------------------------------- /firefox/extension/_locales/zh_TW/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "appName": { "message": "ChatGPT 寬螢幕模式" }, 3 | "appAuthor": { "message": "劉展鵬 (Adam Lui)" }, 4 | "appDesc": { "message": "使用寬/全/高螢幕+垃圾郵件區塊模式增強 ChatGPT。也可以在 perplexity.ai + poe.com 上使用!" }, 5 | "menuLabel_settings": { "message": "設定" }, 6 | "menuLabel_notif": { "message": "通知" }, 7 | "menuLabel_notifs": { "message": "通知" }, 8 | "menuLabel_btn": { "message": "按鈕" }, 9 | "menuLabel_chatbox": { "message": "對話框" }, 10 | "menuLabel_display": { "message": "顯示為" }, 11 | "menuLabel_width": { "message": "寬度" }, 12 | "menuLabel_height": { "message": "高度" }, 13 | "menuLabel_taller": { "message": "更高" }, 14 | "menuLabel_wider": { "message": "更寬" }, 15 | "menuLabel_newChatBtn": { "message": "新聊天按鈕" }, 16 | "menuLabel_hiddenHeader": { "message": "隱藏標題" }, 17 | "menuLabel_hiddenFooter": { "message": "隱藏頁尾" }, 18 | "menuLabel_btnAnimations": { "message": "按鈕動畫" }, 19 | "menuLabel_btnVisibility": { "message": "按鈕可見性" }, 20 | "menuLabel_show": { "message": "顯示 " }, 21 | "menuLabel_anchor": { "message": "錨" }, 22 | "menuLabel_modeNotifs": { "message": "模式通知" }, 23 | "menuLabel_blockSpam": { "message": "垃圾郵件封鎖" }, 24 | "menuLabel_siteSettings": { "message": "網站設置" }, 25 | "menuLabel_about": { "message": "關於" }, 26 | "menuLabel_buyMeAcoffee": { "message": "給我買杯咖啡" }, 27 | "menuLabel_donate": { "message": "請發送捐款" }, 28 | "menuLabel_extensionActive": { "message": "擴展活動" }, 29 | "about_author": { "message": "作者" }, 30 | "about_and": { "message": "以及" }, 31 | "about_contributors": { "message": "貢獻者" }, 32 | "about_version": { "message": "版本" }, 33 | "about_poweredBy": { "message": "技術提供" }, 34 | "about_openSourceCode": { "message": "開放源代碼" }, 35 | "about_latestChanges": { "message": "最新變更" }, 36 | "mode_widescreen": { "message": "寬屏" }, 37 | "mode_fullWindow": { "message": "全視窗" }, 38 | "mode_fullscreen": { "message": "全螢幕" }, 39 | "mode_toast": { "message": "Toast 模式" }, 40 | "tooltip_widescreenON": { "message": "寬螢幕" }, 41 | "tooltip_widescreenOFF": { "message": "退出寬螢幕" }, 42 | "tooltip_fullWindowON": { "message": "全視窗模式" }, 43 | "tooltip_fullWindowOFF": { "message": "退出全視窗" }, 44 | "tooltip_fullscreenON": { "message": "全螢幕" }, 45 | "tooltip_fullscreenOFF": { "message": "退出全螢幕" }, 46 | "tooltip_newChat": { "message": "新對話" }, 47 | "tooltip_goto": { "message": "轉到" }, 48 | "helptip_adjustSettingsRelatedTo": { "message": "調整相關設定" }, 49 | "helptip_the": { "message": "本作" }, 50 | "helptip_btns": { "message": "按鈕" }, 51 | "helptip_widescreenWidth": { "message": "調整要套用的寬螢幕數量" }, 52 | "helptip_tallerChatboxHeight": { "message": "調整要套用的更高聊天框的數量" }, 53 | "helptip_tallerChatbox": { "message": "垂直展開聊天框" }, 54 | "helptip_widerChatboxWidth": { "message": "調整要套用的更寬聊天框的數量" }, 55 | "helptip_widerChatbox": { "message": "在寬螢幕模式下水平展開聊天框" }, 56 | "helptip_newChatBtn": { "message": "在聊天室中顯示「新增聊天」按鈕" }, 57 | "helptip_hiddenFooter": { "message": "網站頁腳" }, 58 | "helptip_hiddenHeader": { "message": "網站頁首" }, 59 | "helptip_btnAnimations": { "message": "懸停時動畫聊天欄按鈕" }, 60 | "helptip_btnVisibility": { "message": "在聊天欄中顯示自訂按鈕" }, 61 | "helptip_modeNotifs": { "message": "切換模式/設定時顯示通知" }, 62 | "helptip_notifBottom": { "message": "將通知錨定在畫面底部" }, 63 | "helptip_toastMode": { "message": "將通知縮小/置中為吐司氣泡" }, 64 | "helptip_blockSpam": { "message": "隱藏垃圾橫幅,避免頁面雜亂無章" }, 65 | "helptip_pageSettings": { "message": "控制頁面的外觀" }, 66 | "helptip_chatbarSettings": { "message": "控制聊天欄的外觀" }, 67 | "helptip_buttonSettings": { "message": "調整與按鈕相關的設定" }, 68 | "helptip_enableDisable": { "message": "啟用/停用" }, 69 | "helptip_perSite": { "message": "個別網站" }, 70 | "helptip_run": { "message": "運作" }, 71 | "alert_choosePlatform": { "message": "選擇平臺" }, 72 | "alert_updateAvail": { "message": "有可用更新" }, 73 | "alert_newerVer": { "message": "有更新版本" }, 74 | "alert_isAvail": { "message": "可用" }, 75 | "alert_upToDate": { "message": "已更新" }, 76 | "alert_isUpToDate": { "message": "已更新" }, 77 | "alert_showYourSupport": { "message": "展現您的支持" }, 78 | "alert_isOSS": { "message": "是透過 100% 志願者努力免費開發和維護的開放原始碼軟體" }, 79 | "alert_despiteAffliction": { "message": "儘管受到了嚴重的折磨" }, 80 | "alert_longCOVID": { "message": "長期新冠肺炎" }, 81 | "alert_since2020": { "message": "2020 年以來" }, 82 | "alert_byDonatingResults": { "message": "通過捐贈,您幫助我繼續改進,修復錯誤,添加新功能,並使軟件更好" }, 83 | "alert_yourContrib": { "message": "你的貢獻" }, 84 | "alert_noMatterSize": { "message": "無論大小" }, 85 | "alert_directlySupports": { "message": "直接支持我為確保此專案免費開放給所有人使用而付出的無償努力" }, 86 | "alert_growTogether": { "message": "同心協力,我們可以讓這個強大的軟體" }, 87 | "alert_tyForSupport": { "message": "感謝你的支持" }, 88 | "alert_pressF11": { "message": "按下 F11 退出全螢幕" }, 89 | "alert_f11reason": { "message": "使用 F11 進入全螢幕,由於瀏覽器安全原因,必須使用同樣的按鍵退出全螢幕" }, 90 | "notif_chatStopped": { "message": "對話已停止" }, 91 | "btnLabel_moreAIextensions": { "message": "更多人工智慧擴充功能" }, 92 | "btnLabel_leaveReview": { "message": "離開評論" }, 93 | "btnLabel_rateUs": { "message": "為我們評分" }, 94 | "btnLabel_discuss": { "message": "討論" }, 95 | "btnLabel_getSupport": { "message": "獲得支援" }, 96 | "btnLabel_checkForUpdates": { "message": "檢查更新" }, 97 | "btnLabel_update": { "message": "更新" }, 98 | "btnLabel_dismiss": { "message": "關閉" }, 99 | "link_viewChanges": { "message": "查看更改" }, 100 | "state_disabled": { "message": "禁用" }, 101 | "state_on": { "message": "在" }, 102 | "state_off": { "message": "閂" } 103 | } 104 | -------------------------------------------------------------------------------- /firefox/extension/background.js: -------------------------------------------------------------------------------- 1 | // Init DATA 2 | (async () => { 3 | 4 | // Init APP data 5 | const app = { 6 | version: chrome.runtime.getManifest().version, 7 | commitHashes: { app: '89e1e1a' }, // for cached app.json + sites.json5 8 | runtime: (() => { 9 | return typeof chrome != 'undefined' && chrome.runtime ? ( 10 | typeof browser != 'undefined' ? 'Firefox add-on' 11 | : `Chromium ${ navigator.userAgent.includes('Edg') ? 'Edge add-on' : 'extension' }` 12 | ) : 'unknown' 13 | })() 14 | } 15 | app.urls = { resourceHost: `https://cdn.jsdelivr.net/gh/adamlui/chatgpt-widescreen@${app.commitHashes.app}` } 16 | const remoteAppData = await (await fetch(`${app.urls.resourceHost}/assets/data/app.json`)).json() 17 | Object.assign(app, { ...remoteAppData, urls: { ...app.urls, ...remoteAppData.urls }}) 18 | chrome.storage.local.set({ app }) // save to browser storage 19 | chrome.runtime.setUninstallURL(app.urls.uninstall) 20 | 21 | // Init SITES data 22 | const sites = Object.assign(Object.create(null), 23 | JSON5.parse(await (await fetch(`${app.urls.resourceHost}/assets/data/sites.json5`)).text())) 24 | Object.keys(sites).forEach(site => { // strip protocol from homepage URL + add favicon URL for popup menu 25 | sites[site].urls.homepage = sites[site].urls.homepage.replace(/^https?:\/\//, '') // for cleaner tooltips/labels 26 | sites[site].urls.favicon = `https://www.google.com/s2/favicons?domain=${sites[site].urls.homepage}` 27 | }) 28 | chrome.storage.local.set({ sites }) 29 | 30 | })() 31 | 32 | // Launch CHATGPT on install 33 | chrome.runtime.onInstalled.addListener(details => { 34 | if (details.reason == 'install') // to exclude updates 35 | chrome.tabs.create({ url: 'https://chatgpt.com/' }) 36 | }) 37 | 38 | // Sync SETTINGS/MODES to activated tabs 39 | chrome.tabs.onActivated.addListener(activeInfo => 40 | chrome.tabs.sendMessage(activeInfo.tabId, { action: 'syncConfigToUI' })) 41 | 42 | // Show ABOUT modal on AI site when toolbar button clicked 43 | const aiHomeURLs = chrome.runtime.getManifest().content_scripts[0].matches.map(url => url.replace(/\*$/, '')) 44 | chrome.runtime.onMessage.addListener(async req => { 45 | if (req.action == 'showAbout') { 46 | const [activeTab] = await chrome.tabs.query({ active: true, currentWindow: true }) 47 | const aiTab = aiHomeURLs.some(aiURL => 48 | new URL(activeTab.url).hostname == new URL(aiURL).hostname) ? activeTab // active tab is AI site, use it 49 | : // else use random enabled site or ChatGPT 50 | await chrome.storage.local.get(['chatgptDisabled', 'perplexityDisabled', 'poeDisabled']) 51 | .then(({ chatgptDisabled, perplexityDisabled, poeDisabled }) => { 52 | const sitesEnabled = [ 53 | !chatgptDisabled && aiHomeURLs[0], 54 | !perplexityDisabled && aiHomeURLs[1], 55 | !poeDisabled && aiHomeURLs[2] 56 | ].filter(Boolean) 57 | return chrome.tabs.create({ 58 | url: sitesEnabled[Math.floor(Math.random() * sitesEnabled.length)] || aiHomeURLs[0] }) 59 | }) 60 | if (activeTab != aiTab) await new Promise(resolve => // after new tab loads 61 | chrome.tabs.onUpdated.addListener(function loadedListener(tabId, info) { 62 | if (tabId == aiTab.id && info.status == 'complete') { 63 | chrome.tabs.onUpdated.removeListener(loadedListener) ; setTimeout(resolve, 500) 64 | }})) 65 | chrome.tabs.sendMessage(aiTab.id, { action: 'showAbout' }) 66 | } 67 | }) 68 | -------------------------------------------------------------------------------- /firefox/extension/components/tooltip.js: -------------------------------------------------------------------------------- 1 | // Requires components/buttons.js + lib/.js + 2 | 3 | window.tooltip = { 4 | 5 | stylize() { // requires lib/dom.js + app.slug 6 | document.head.append(this.styles = dom.create.style(`.${app.slug}-tooltip { 7 | background-color: /* bubble style */ 8 | rgba(0,0,0,0.71) ; padding: 5px 6px ; border-radius: 6px ; border: 1px solid #d9d9e3 ; 9 | font-size: 0.85rem ; color: white ; white-space: nowrap ; /* text style */ 10 | --shadow: 4px 6px 16px 0 rgb(0 0 0 / 38%) ; 11 | box-shadow: var(--shadow) ; -webkit-box-shadow: var(--shadow) ; -moz-box-shadow: var(--shadow) ; 12 | position: fixed ; opacity: 0 ; z-index: 99999 ; /* visibility */ 13 | transition: opacity 0.15s ; -webkit-transition: opacity 0.15s ; -moz-transition: opacity 0.15s ; 14 | -ms-transition: opacity 0.15s ; -o-transition: opacity 0.15s ; 15 | user-select: none ; webkit-user-select: none ; -moz-user-select: none ; -ms-user-select: none }` 16 | )) 17 | }, 18 | 19 | toggle(event) { // requires lib/dom.js + 20 | if (env.browser.isMobile) return 21 | tooltip.div ||= dom.create.elem('div', { class: `${app.slug}-tooltip` }) 22 | if (!tooltip.div.isConnected) event.currentTarget?.after(tooltip.div) 23 | if (!tooltip.styles) tooltip.stylize() 24 | tooltip.update(event.currentTarget) 25 | tooltip.div.style.opacity = +(event.type == 'mouseenter') 26 | }, 27 | 28 | update(btn) { // requires lib/browser.js + 29 | if (!this.div) return 30 | const { site } = env 31 | const btnType = btn.id.replace(/-btn$/, '') 32 | const btnRect = btn.getBoundingClientRect() 33 | const btnTransform = getComputedStyle(btn).transform 34 | const btnScale = btnTransform == 'none' ? 1 35 | : parseFloat(/matrix\(([^)]+)\)/.exec(btnTransform)[1].split(',')[0]) 36 | const unscaledTop = btnRect.top +( btnRect.height - btnRect.height / btnScale )/2 37 | this.div.textContent = browserAPI.getMsg(`tooltip_${btnType}${ 38 | !/full|wide/i.test(btnType) ? '' : (config[btnType] ? 'OFF' : 'ON')}`) 39 | this.div.style.left = `${ btnRect.left +( btnRect.width /2 ) -( this.div.offsetWidth /2 )}px` 40 | this.div.style.top = `${ unscaledTop - this.div.offsetHeight -( 41 | site == 'chatgpt' ? -75 : site == 'perplexity' ? 11 : /* poe */ 19 )}px` 42 | } 43 | }; 44 | -------------------------------------------------------------------------------- /firefox/extension/icons/faded/icon128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/firefox/extension/icons/faded/icon128.png -------------------------------------------------------------------------------- /firefox/extension/icons/faded/icon16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/firefox/extension/icons/faded/icon16.png -------------------------------------------------------------------------------- /firefox/extension/icons/faded/icon32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/firefox/extension/icons/faded/icon32.png -------------------------------------------------------------------------------- /firefox/extension/icons/faded/icon48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/firefox/extension/icons/faded/icon48.png -------------------------------------------------------------------------------- /firefox/extension/icons/faded/icon64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/firefox/extension/icons/faded/icon64.png -------------------------------------------------------------------------------- /firefox/extension/icons/icon128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/firefox/extension/icons/icon128.png -------------------------------------------------------------------------------- /firefox/extension/icons/icon16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/firefox/extension/icons/icon16.png -------------------------------------------------------------------------------- /firefox/extension/icons/icon32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/firefox/extension/icons/icon32.png -------------------------------------------------------------------------------- /firefox/extension/icons/icon48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/firefox/extension/icons/icon48.png -------------------------------------------------------------------------------- /firefox/extension/icons/icon64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamlui/chatgpt-widescreen/c849fcd154866d51eec5d0e5f437ae3541e2992e/firefox/extension/icons/icon64.png -------------------------------------------------------------------------------- /firefox/extension/lib/browser.js: -------------------------------------------------------------------------------- 1 | 2 | window.browserAPI = { 3 | getMsg(key) { 4 | return /Chromium|Firefox/.test(this.runtime) ? 5 | chrome.i18n.getMessage(key) // from ./_locales/*/messages.json 6 | : app.msgs[key] // from userscript 7 | }, 8 | 9 | get runtime() { 10 | return typeof GM_info != 'undefined' ? 'Greasemonkey userscript' 11 | : typeof chrome != 'undefined' && chrome.runtime ? ( 12 | typeof browser != 'undefined' ? 'Firefox add-on' 13 | : `Chromium ${ navigator.userAgent.includes('Edg') ? 'Edge add-on' : 'extension' }` 14 | ) : 'unknown' 15 | } 16 | }; 17 | -------------------------------------------------------------------------------- /firefox/extension/lib/chatbar.js: -------------------------------------------------------------------------------- 1 | // Requires components/.js + lib/.js + 2 | 3 | window.chatbar = { 4 | 5 | async get() { // requires lib/dom.js + 6 | const { site } = env, { [site]: { selectors }} = sites 7 | return site == 'chatgpt' ? document.querySelector('form[data-type=unified-composer] > div') 8 | : (await dom.get.loadedElem(selectors.input)).parentNode.parentNode 9 | }, 10 | 11 | is: { 12 | async dark() { // requires lib/chatbar.js + env 13 | return env.site != 'chatgpt' ? undefined 14 | : getComputedStyle(await chatbar.get() || document.documentElement) 15 | .backgroundColor == 'rgb(48, 48, 48)' 16 | }, 17 | 18 | async tall() { return (await chatbar.get())?.getBoundingClientRect().height > 60 } // requires lib/chatbar.js 19 | }, 20 | 21 | async reset() { // requires 22 | const chatbarDiv = await this.get() ; if (!chatbarDiv) return 23 | const { site } = env, { [site]: { selectors }} = sites 24 | if (site == 'chatgpt') { // restore chatbar inner width 25 | const inputArea = chatbarDiv.querySelector(selectors.input) 26 | if (inputArea) inputArea.style.width = inputArea.parentNode.style.width = 'initial' 27 | } else if (site == 'poe') // restore Attach File button icon + Poe Mic button position 28 | ['attachFile', 'mic'].forEach(btnType => { 29 | const btn = chatbarDiv.querySelector(selectors.btns[btnType]) ; if (!btn) return 30 | if (btnType == 'attachFile' && buttons.poe.attachFile.plusIcon) 31 | btn.querySelector('svg').replaceWith(buttons.poe.attachFile.plusIcon.cloneNode(true)) 32 | else /* Mic */ btn.style.marginRight = '' 33 | }) 34 | }, 35 | 36 | async tweak() { // requires components/.js + lib/dom.js + 37 | const chatbarDiv = await this.get() ; if (!chatbarDiv) return 38 | const { site } = env, { [site]: { selectors }} = sites 39 | if (site == 'chatgpt') { // update chatbar inner width 40 | const inputArea = chatbarDiv.querySelector(selectors.input) ; if (!inputArea) return 41 | if (chatgpt.canvasIsOpen()) inputArea.parentNode.style.width = '100%' 42 | else if (!await this.is.tall()) { // narrow it to not clash w/ buttons 43 | const widths = { chatbar: dom.get.computedWidth(chatbarDiv) }, 44 | visibleBtnTypes = [...buttons.get.types.visible(), 'end'] 45 | visibleBtnTypes.forEach(type => widths[type] = ( 46 | dom.get.computedWidth(buttons[type] || chatbarDiv.querySelector( 47 | `${selectors.btns.send}, ${selectors.btns.stop}, ${selectors.btns.voice}`)) 48 | )) 49 | const totalBtnWidths = visibleBtnTypes.reduce((sum, btnType) => sum + widths[btnType], 0) 50 | inputArea.parentNode.style.width = `${ // expand to close gap w/ buttons 51 | widths.chatbar - totalBtnWidths -40 }px` 52 | inputArea.style.width = '100%' // rid h-scrollbar 53 | } 54 | } else if (site == 'poe') { // replace Attach File btn icon + move Mic btn closer to Send 55 | const btnLoadTimeout = 5000 // ms 56 | dom.get.loadedElem(selectors.btns.attachFile, { timeout: btnLoadTimeout }).then(btn => { 57 | if (!btn) return 58 | const plusIcon = btn.querySelector('svg:has(> path[d^="M13 4.5a1"])') 59 | buttons.poe ||= { attachFile: { plusIcon }} // cache for this.reset() 60 | plusIcon?.replaceWith(icons.create({ 61 | key: 'paperclip', style: 'height: 15px !important ; width: 15px !important' })) 62 | }) 63 | dom.get.loadedElem(selectors.btns.mic, { timeout: btnLoadTimeout }) 64 | .then(btn => { if (btn) btn.style.marginRight = '-7.5px' }) 65 | } 66 | } 67 | }; 68 | -------------------------------------------------------------------------------- /firefox/extension/lib/dom.min.js: -------------------------------------------------------------------------------- 1 | window.dom={addRisingParticles(targetNode,{lightScheme="gray",darkScheme="white"}={}){if(!targetNode.querySelector("[id*=particles]")){let particlesDivsWrapper=document.createElement("div");particlesDivsWrapper.style.cssText="position: absolute ; top: 0 ; left: 0 ;height: 100% ; width: 100% ; border-radius: 15px ; overflow: clip ;z-index: -1",["sm","med","lg"].forEach(particleSize=>{var particlesDiv=document.createElement("div");particlesDiv.id=config?.bgAnimationsDisabled?`particles-${particleSize}-off`:`${"dark"==(env?.ui?.scheme||env?.ui?.app?.scheme)?darkScheme:lightScheme}-particles-`+particleSize,particlesDivsWrapper.append(particlesDiv)}),targetNode.prepend(particlesDivsWrapper)}},create:{anchor(linkHref,displayContent,attrs={}){let anchor=document.createElement("a"),defaultAttrs={href:linkHref,target:"_blank",rel:"noopener"},finalAttrs={...defaultAttrs,...attrs};return Object.entries(finalAttrs).forEach(([attr,value])=>anchor.setAttribute(attr,value)),displayContent&&anchor.append(displayContent),anchor},elem(elemType,attrs={}){var attr,elem=document.createElement(elemType);for(attr in attrs)elem.setAttribute(attr,attrs[attr]);return elem},style(content,attrs={}){var attr,style=document.createElement("style");for(attr in style.setAttribute("type","text/css"),attrs)style.setAttribute(attr,attrs[attr]);return content&&(style.textContent=content),style},svgElem(type,attrs={}){var attr,elem=document.createElementNS("http://www.w3.org/2000/svg",type);for(attr in attrs)elem.setAttributeNS(null,attr,attrs[attr]);return elem}},cssSelectorize(classList){return classList.toString().replace(/([:[\]\\])/g,"\\$1").replace(/^| /g,".")},get:{computedSize(elems,{dimension}={}){(elems=elems instanceof NodeList?[...elems]:[].concat(elems)).forEach(elem=>{if(!(elem instanceof Node))throw new Error(`Invalid elem: Element "${JSON.stringify(elem)}" is not a valid DOM node`)});let validDimensions=["width","height"],dimensionsToCompute=[].concat(dimension||validDimensions),computedDimensions=(dimensionsToCompute.forEach(dimension=>{if(!validDimensions.includes(dimension))throw new Error("Invalid dimension: Use 'width' or 'height'")}),{width:0,height:0});return elems.forEach(elem=>{let elemStyle=getComputedStyle(elem);"none"!=elemStyle.display&&Object.keys(computedDimensions).forEach(dimension=>{dimensionsToCompute.includes(dimension)&&(computedDimensions[dimension]+=elem.getBoundingClientRect()[dimension]+parseFloat(elemStyle["margin"+("width"==dimension?"Left":"Top")])+parseFloat(elemStyle["margin"+("width"==dimension?"Right":"Bottom")]))})}),1{var elem=document.querySelector(selector);elem?resolve(elem):new MutationObserver((_,obs)=>{var elem=document.querySelector(selector);elem&&(obs.disconnect(),resolve(elem))}).observe(document.documentElement,{childList:!0,subtree:!0})})];return timeout&&raceEntries.push(new Promise(resolve=>setTimeout(()=>resolve(null),timeout))),Promise.race(raceEntries)}}}; -------------------------------------------------------------------------------- /firefox/extension/lib/sync.js: -------------------------------------------------------------------------------- 1 | // Requires components/buttons.js + lib/.js + + notify() 2 | 3 | window.sync = { 4 | 5 | async configToUI(options) { // on toolbar popup toggles + AI tab activations 6 | // ... requires components/buttons.js + lib/.js + 7 | 8 | const { site } = env, extensionWasDisabled = config.extensionDisabled || config[`${site}Disabled`] 9 | await settings.load('extensionDisabled', settings.siteDisabledKeys, sites[site].availFeatures) 10 | if (!extensionWasDisabled && ( config.extensionDisabled || config[`${site}Disabled`] )) { // reset UI 11 | [styles.chatbar.node, styles.tweaks.node, styles.widescreen.node, styles.fullWin.node, buttons] 12 | .forEach(target => target?.remove()) 13 | chatbar.reset() 14 | if (site != 'poe') document.body.removeEventListener('wheel', window.enableWheelScroll) 15 | } else if (!config.extensionDisabled && !config[`${site}Disabled`]) { // sync modes/tweaks/btns 16 | if (config.widescreen ^ styles.widescreen.node?.isConnected) { // sync Widescreen 17 | suppressNotifs() ; toggleMode('widescreen') } 18 | if (sites[site].hasSidebar && ( config.fullWindow ^ await ui.isFullWin() )) { // sync Full-Window 19 | suppressNotifs() ; toggleMode('fullWindow') } 20 | styles.update({ key: 'widescreen' }) // sync WW 21 | styles.update({ key: 'tweaks' }) // sync HH/HF/TCB/NCB/BA 22 | styles.update({ key: 'chatbar' }) // sync TCB/WCB 23 | if (site != 'perplexity') chatbar.tweak() // update ChatGPT chatbar inner width or hack Poe btn pos 24 | buttons[config.btnsVisible ? 'insert' : 'remove']() // update button visibility 25 | if (options?.updatedKey == 'btnAnimationsDisabled' && !config.btnAnimationsDisabled) 26 | buttons.animate() // to visually signal location + preview fx applied by Button Animations toggle-on 27 | else if (/notifBottom|toastMode/.test(options?.updatedKey)) styles.update({ key: 'toast' }) 28 | if (site != 'poe') // toggle free wheel locked in some Spam blocks 29 | document.body[`${ config.blockSpamDisabled ? 'remove' : 'add' }EventListener`]( 30 | 'wheel', window.enableWheelScroll) 31 | } 32 | 33 | function suppressNotifs() { 34 | if (config.notifDisabled) return 35 | settings.save('notifDisabled', true) // suppress notifs for cleaner UI 36 | setTimeout( // ...temporarily 37 | () => settings.save('notifDisabled', false), options?.updatedKey == 'widescreen' ? 1 : 15) 38 | } 39 | }, 40 | 41 | async mode(mode) { // setting + icon + chatbar 42 | const state = ( mode == 'widescreen' ? styles.widescreen.node?.isConnected 43 | : mode == 'fullWindow' ? await ui.isFullWin() 44 | : chatgpt.isFullScreen() ) 45 | settings.save(mode, state) ; buttons.update.svg(mode) 46 | if (!config.extensionDisabled && !config[`${env.site}Disabled`]) { // tweak UI 47 | if (env.site == 'chatgpt') setTimeout(() => chatbar.tweak(), // update inner width 48 | mode == 'fullWindow' && config.widescreen && config.widerChatbox ? 49 | 111 : 0) // delay if toggled to/from active WCB to avoid wrong width 50 | else if (env.site == 'perplexity' || env.site == 'poe' && config.widerChatbox) 51 | styles.update({ key: 'chatbar' }) // toggle full-width Perplexity chatbar or sync Poe WCB 52 | notify(`${browserAPI.getMsg('mode_' + mode)} ${ 53 | browserAPI.getMsg(`state_${ state ? 'on' : 'off' }`).toUpperCase()}`) 54 | } 55 | config.modeSynced = true ; setTimeout(() => config.modeSynced = false, 100) // prevent repetition 56 | } 57 | }; 58 | -------------------------------------------------------------------------------- /firefox/extension/lib/ui.js: -------------------------------------------------------------------------------- 1 | // Requires lib/dom.js + env.site + sites 2 | 3 | window.ui = { 4 | async getScheme() { 5 | const { site } = env, 6 | rootElem = await dom.get.loadedElem(`html${ site == 'perplexity' ? '[data-color-scheme]' : '' }`) 7 | return site == 'perplexity' ? rootElem.dataset.colorScheme 8 | : /\b(light|dark)\b/.exec(document.documentElement.className)?.[1] 9 | || (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') 10 | }, 11 | 12 | async isFullWin() { 13 | const { site } = env 14 | if (site == 'poe') return styles.fullWin.node.isConnected 15 | else if (site == 'perplexity') { 16 | await new Promise(requestAnimationFrame) 17 | return !document.querySelector('svg.tabler-icon-pinned-filled') 18 | } else if (!sites[site].hasSidebar) return true 19 | else { // calc widths to determine on sites w/ native toggle 20 | const barWidths = {} ; ['left', 'right'].forEach(side => { 21 | const barSelector = sites[site].selectors[`${ side == 'left' ? 'side' : 'right' }bar`], 22 | barElem = document.querySelector(barSelector) 23 | barWidths[side] = barElem ? dom.get.computedWidth(barElem) : 0 24 | }) 25 | return barWidths.left < 100 && barWidths.right < 100 // true if both bars skinny/hidden 26 | } 27 | } 28 | }; 29 | -------------------------------------------------------------------------------- /firefox/extension/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "manifest_version": 3, 3 | "name": "__MSG_appName__", 4 | "short_name": "ChatGPT 🖥️", 5 | "description": "__MSG_appDesc__", 6 | "version": "2025.6.10", 7 | "author": "Adam Lui", 8 | "homepage_url": "https://www.chatgptwidescreen.com", 9 | "default_locale": "en", 10 | "icons": { 11 | "16": "icons/icon16.png", 12 | "32": "icons/icon32.png", 13 | "48": "icons/icon48.png", 14 | "64": "icons/icon64.png", 15 | "128": "icons/icon128.png" 16 | }, 17 | "permissions": ["activeTab", "storage"], 18 | "action": { "default_popup": "popup/index.html" }, 19 | "web_accessible_resources": [{ "matches": [""], "resources": ["components/*", "lib/*"] }], 20 | "content_scripts": [{ 21 | "matches": ["https://chatgpt.com/*", "https://www.perplexity.ai/*", "https://poe.com/*"], 22 | "run_at": "document_end", "js": ["content.js"] 23 | }], 24 | "background": { "scripts": ["background.js", "lib/json5.min.js"] }, 25 | "browser_specific_settings": { 26 | "gecko": { "id": "chatgpt.widescreen@chatgptevo.com", "strict_min_version": "109.0" }, 27 | "gecko_android": { "strict_min_version": "120.0" } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /firefox/extension/popup/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 |
11 |
12 | 16 | 17 |
18 |
19 |
20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /greasemonkey/LICENSE.md: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | 5 | 6 | 7 |  English | 8 | 简体中文 | 9 | हिंदी 10 |
11 |
12 | 13 | # 🏛️ MIT License 14 | 15 | **Copyright © 2023–2025 [Adam Lui](https://github.com/adamlui) & [contributors](https://docs.chatgptwidescreen.com/#-contributors).** 16 | 17 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 18 | 19 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 20 | 21 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /greasemonkey/docs/PRIVACY.md: -------------------------------------------------------------------------------- 1 |
2 |
English | 简体中文 | हिंदी
3 |
4 | 5 | # Privacy Policy 6 | 7 | ChatGPT Widescreen Mode does not collect nor store any user data. No information is shared with third-parties for personally-targeted, behavioral marketing or any other purpose. No information is collected from any third-parties. 8 | 9 | ## Updates 10 | 11 | To view revisions to this policy, visit https://github.com/adamlui/chatgpt-widescreen/commits/main/greasemonkey/docs/PRIVACY.md 12 | -------------------------------------------------------------------------------- /greasemonkey/docs/SECURITY.md: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | 5 | 6 | 7 |  English | 8 | 简体中文 | 9 | हिंदी 10 |
11 |
12 | 13 | # 🛡️ Security Policy 14 | 15 | If you find a vulnerability, please open a [draft security advisory](https://github.com/adamlui/chatgpt-widescreen/security/advisories/new). 16 | 17 | Pull requests are also welcome, but for safety reasons, send an email to and wait for a response before making it public. 18 | -------------------------------------------------------------------------------- /greasemonkey/docs/hi/LICENSE.md: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | 5 | 6 | 7 |  हिंदी | 8 | English | 9 | 简体中文 10 |
11 |
12 | 13 | # 🏛️ MIT लाइसेंस 14 | 15 | **कॉपीराइट © 2023–2025 [एडम लुई (Adam Lui)](https://github.com/adamlui) और [योगदानकर्ता](https://docs.chatgptwidescreen.com/#-contributors).** 16 | 17 | इसके द्वारा प्रति प्राप्त करने वाले किसी भी व्यक्ति को अनुमति निःशुल्क प्रदान की जाती है इस सॉफ़्टवेयर और संबंधित दस्तावेज़ फ़ाइलों ("सॉफ़्टवेयर") से निपटने के लिए सॉफ़्टवेयर में बिना किसी प्रतिबंध के, जिसमें बिना किसी सीमा के अधिकार शामिल हैं उपयोग करना, प्रतिलिपि बनाना, संशोधित करना, विलय करना, प्रकाशित करना, वितरित करना, उपलाइसेंस देना और/या बेचना सॉफ़्टवेयर की प्रतियां, और उन व्यक्तियों को अनुमति देना जिनके पास सॉफ़्टवेयर है निम्नलिखित शर्तों के अधीन, ऐसा करने के लिए सुसज्जित: 18 | 19 | उपरोक्त कॉपीराइट नोटिस और यह अनुमति नोटिस सभी में शामिल होंगे सॉफ़्टवेयर की प्रतियां या पर्याप्त भाग। 20 | 21 | सॉफ़्टवेयर "जैसा है" प्रदान किया जाता है, बिना किसी प्रकार की, स्पष्ट या वारंटी के। निहित, व्यापारिकता की वारंटी सहित, लेकिन इन्हीं तक सीमित नहीं, किसी विशेष उद्देश्य के लिए उपयुक्तता और उल्लंघन न होना। किसी भी स्थिति में ऐसा नहीं होगा लेखक या कॉपीराइट धारक किसी भी दावे, क्षति या अन्य के लिए उत्तरदायी होंगे दायित्व, चाहे किसी अनुबंध, अपकृत्य या किसी अन्य प्रकार से उत्पन्न हो, सॉफ़्टवेयर से बाहर या उसके संबंध में या उपयोग या अन्य लेनदेन में सॉफ़्टवेयर। 22 | -------------------------------------------------------------------------------- /greasemonkey/docs/hi/PRIVACY.md: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | 5 | 6 | 7 |  हिंदी | 8 | English | 9 | 简体中文 10 |
11 |
12 | 13 | # गोपनीयता नीति 14 | 15 | चैटजीपीटी वाइडस्क्रीन मोड किसी उपयोगकर्ता डेटा को एकत्र या संग्रहीत नहीं करता है। व्यक्तिगत रूप से लक्षित, व्यवहारिक विपणन या किसी अन्य उद्देश्य के लिए तीसरे पक्ष के साथ कोई जानकारी साझा नहीं की जाती है। किसी तीसरे पक्ष से कोई जानकारी एकत्र नहीं की जाती है। 16 | 17 | ## अपडेट 18 | 19 | इस नीति में संशोधन देखने के लिए, https://github.com/adamlui/chatgpt-widescreen/commits/main/greasemonkey/docs/hi/PRIVACY.md पर जाएं 20 | -------------------------------------------------------------------------------- /greasemonkey/docs/hi/SECURITY.md: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | 5 | 6 | 7 |  हिंदी | 8 | English | 9 | 简体中文 10 |
11 |
12 | 13 | # 🛡️ सुरक्षा नीति 14 | 15 | यदि आपको कोई भेद्यता मिलती है, तो कृपया एक [मसौदा सुरक्षा सलाहकार](https://github.com/adamlui/chatgpt-widescreen/security/advisories/new) खोलें। 16 | 17 | पुल अनुरोधों का भी स्वागत है, लेकिन सुरक्षा कारणों से, पर एक ईमेल भेजें और इसे सार्वजनिक करने से पहले प्रतिक्रिया की प्रतीक्षा करें। 18 | -------------------------------------------------------------------------------- /greasemonkey/docs/zh-cn/LICENSE.md: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | 5 | 6 | 7 |  简体中文 | 8 | English | 9 | हिंदी 10 |
11 |
12 | 13 | # 🏛️ MIT 许可证 14 | 15 | **版权所有 © 2023–2025 [刘展鹏 (Adam Lui)](https://github.com/adamlui) & [贡献者](https://docs.chatgptwidescreen.com/zh-cn/#-贡献者)** 16 | 17 | 特此免费向任何获得副本的人授予许可本软件和相关文档文件(『软件』),处理在软件中不受限制,包括但不限于权利使用、复制、修改、合并、发布、分发、再许可和/或出售该软件的副本,并允许该软件是提供这样做,但须满足以下条件: 18 | 19 | 上述版权声明和本许可声明应包含在所有软件的副本或重要部分。 20 | 21 | 本软件『按原样』提供,不提供任何形式的明示或保证暗示的,包括但不限于适销性保证,适用于特定目的和非侵权。 在任何情况下都不得作者或版权持有人对任何索赔、损害或其他责任,无论是在合同、侵权或其他方面的行为中,由以下原因引起,出于或与软件或使用或其他交易有关软件。 22 | -------------------------------------------------------------------------------- /greasemonkey/docs/zh-cn/PRIVACY.md: -------------------------------------------------------------------------------- 1 |
2 |
简体中文 | English | हिंदी
3 |
4 | 5 | # 隐私政策 6 | 7 | ChatGPT 宽屏模式不会收集或存储任何用户数据。 不会出于个人目标、行为营销或任何其他目的与第三方共享任何信息。 不会从任何第三方收集任何信息。 8 | 9 | ## 更新 10 | 11 | 要查看此政策的修订,请访问 https://github.com/adamlui/chatgpt-widescreen/commits/main/greasemonkey/docs/zh-cn/PRIVACY.md 12 | -------------------------------------------------------------------------------- /greasemonkey/docs/zh-cn/SECURITY.md: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | 5 | 6 | 7 |  简体中文 | 8 | English | 9 | हिंदी 10 |
11 |
12 | 13 | # 🛡️ 安全政策 14 | 15 | 如果您发现漏洞,请打开一个[安全建议草案](https://github.com/adamlui/chatgpt-widescreen/security/advisories/new)。 16 | 17 | 也欢迎拉取请求,但出于安全原因,请发送电子邮件至 并在公开之前等待回复。 18 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "author": { 3 | "name": "Adam Lui", 4 | "email": "adam@kudoai.com", 5 | "url": "https://github.com/adamlui" 6 | }, 7 | "homepage": "https://www.chatgptwidescreen.com", 8 | "license": "MIT", 9 | "funding": [ 10 | { "type": "cashapp", "url": "https://cash.app/$AdamLui" }, 11 | { "type": "github", "url": "http://github.com/sponsors/adamlui" }, 12 | { "type": "ko-fi", "url": "https://ko-fi.com/adamlui" }, 13 | { "type": "paypal", "url": "https://paypal.me/adamlui" } 14 | ], 15 | "scripts": { 16 | "prepare": "husky", 17 | "dev:pages": "http-server pages", 18 | "lint": "eslint . --cache", 19 | "lint:all": "eslint .", 20 | "lint:fix": "eslint . --fix --cache", 21 | "lint:fix-all": "eslint . --fix", 22 | "translate:chrome": "py chromium/utils/translate-en-messages.py", 23 | "translate:chromium": "py chromium/utils/translate-en-messages.py", 24 | "translate:ff": "py firefox/utils/translate-en-messages.py", 25 | "translate:firefox": "py firefox/utils/translate-en-messages.py", 26 | "build:js-pages": "minify-js pages --no-mangle", 27 | "build:pages-js": "minify-js pages --no-mangle", 28 | "preview:pages": "http-server pages", 29 | "bump": "bash utils/bump/extension-manifests.sh", 30 | "bump:res": "node utils/bump/resources", 31 | "bump:resources": "node utils/bump/resources", 32 | "bump:ext": "bash utils/bump/extension-manifests.sh", 33 | "bump:ext-nc": "bash utils/bump/extension-manifests.sh --no-commit", 34 | "bump:ext-np": "bash utils/bump/extension-manifests.sh --no-push", 35 | "bump:extensions": "bash utils/bump/extension-manifests.sh", 36 | "bump:manifests": "bash utils/bump/extension-manifests.sh", 37 | "bump:chrome": "bash utils/bump/extension-manifests.sh --chrome", 38 | "bump:chromium": "bash utils/bump/extension-manifests.sh --chrome", 39 | "bump:ff": "bash utils/bump/extension-manifests.sh --ff", 40 | "bump:firefox": "bash utils/bump/extension-manifests.sh --ff" 41 | }, 42 | "devDependencies": { 43 | "@adamlui/minify.js": "^1.8.6", 44 | "@eslint/json": "^0.12.0", 45 | "@eslint/markdown": "^6.5.0", 46 | "@html-eslint/eslint-plugin": "^0.41.0", 47 | "@html-eslint/parser": "^0.41.0", 48 | "@stylistic/eslint-plugin": "^4.4.1", 49 | "eslint": "^9.28.0", 50 | "eslint-plugin-import": "^2.31.0", 51 | "eslint-plugin-regexp": "^2.9.0", 52 | "eslint-plugin-yml": "^1.18.0", 53 | "http-server": "^14.1.1", 54 | "husky": "^9.1.7", 55 | "ssri": "^12.0.0" 56 | }, 57 | "dependencies": { 58 | "@eslint/css": "^0.8.1" 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /pages/welcome/assets/css/styles.css: -------------------------------------------------------------------------------- 1 | h1, p, img, .footer-links, .hidden { opacity: 0 } 2 | .visible { animation: fade-slide-up 0.6s cubic-bezier(.165,.84,.44,1) forwards } 3 | @keyframes fade-slide-up { 4 | from { transform: translateY(20px) ; opacity: 0 } 5 | to { transform: translateY(0) ; opacity: 1 } 6 | } 7 | 8 | body { 9 | font-family: Arial,sans-serif ; text-align: center ; 10 | margin: 0 ; background-color: #f9f9f9 } 11 | .main { max-width: 812px ; margin: 0 auto ; padding: 56px 16.5vw 131px } 12 | .title-icon { width: 67px ; height: 67px ; position: relative ; top: 22px ; margin-right: 21px } 13 | h1 { font-size: 68px ; margin-bottom: 48px } 14 | p { font-size: 24px ; margin-bottom: 8px } 15 | img { max-width: 100% ; height: auto ; margin-bottom: 15px } 16 | footer { height: 75px ; font-weight: bold ; font-size: 22px } 17 | footer span:not(:last-child)::after { /* insert separators */ 18 | content: '' ; display: inline-block ; border-right: 0.15em solid black ; transform: rotate(22deg) ; 19 | width: 0.15em ; height: 1.5em ; margin: 0 0.95em 0 1.1em ; position: relative ; top: 0.45em 20 | } 21 | 22 | @media (max-width: 768px) { 23 | .title-icon { width: 42px ; height: 42px ; top: 22px ; margin-right: 11px } 24 | h1 { font-size: 32px ; margin-bottom: 20px } 25 | p { font-size: 18px ; margin-bottom: 15px } 26 | .main { padding: 16px 10vw 60px } 27 | } 28 | -------------------------------------------------------------------------------- /pages/welcome/assets/js/min/fade-elems.min.js: -------------------------------------------------------------------------------- 1 | document.addEventListener("DOMContentLoaded",()=>{let iObserver=new IntersectionObserver(entries=>{entries.forEach(({target,isIntersecting})=>{target.classList[isIntersecting?"add":"remove"]("visible"),target.classList[isIntersecting?"remove":"add"]("hidden")})},{threshold:.5});document.querySelectorAll("h1, p, img, .footer-links").forEach((fadableElem,idx)=>setTimeout(()=>iObserver.observe(fadableElem),55*(idx+1)))}); -------------------------------------------------------------------------------- /pages/welcome/assets/js/min/update-footer-urls.min.js: -------------------------------------------------------------------------------- 1 | (()=>{let app={urls:{appData:"https://cdn.jsdelivr.net/gh/adamlui/chatgpt-widescreen/assets/data/app.json"}};fetch(app.urls.appData).then(resp=>resp.ok?resp.json():Promise.reject("HTTP error! status: "+resp.status)).then(data=>{Object.assign(app.urls,data.urls||{}),app.urls.support&&app.urls.review&&document.querySelectorAll(".footer-links a").forEach(link=>link.href=link.id.includes("support")?app.urls.support:link.id.includes("review")?app.urls.review[navigator.userAgent.includes("Edg")?"edgeAddons":"chrome"]:link.href)}).catch(console.error)})(); -------------------------------------------------------------------------------- /pages/welcome/assets/js/src/fade-elems.js: -------------------------------------------------------------------------------- 1 | document.addEventListener('DOMContentLoaded', () => { 2 | const iObserver = new IntersectionObserver(entries => { 3 | entries.forEach(({ target, isIntersecting }) => { 4 | target.classList[isIntersecting ? 'add' : 'remove']('visible') 5 | target.classList[isIntersecting ? 'remove' : 'add']('hidden') 6 | }) 7 | }, { threshold: 0.5 }) 8 | document.querySelectorAll('h1, p, img, .footer-links').forEach((fadableElem, idx) => 9 | setTimeout(() => iObserver.observe(fadableElem), (idx+1) *55)) 10 | }) 11 | -------------------------------------------------------------------------------- /pages/welcome/assets/js/src/update-footer-urls.js: -------------------------------------------------------------------------------- 1 | (() => { 2 | const app = { urls: { appData: 'https://cdn.jsdelivr.net/gh/adamlui/chatgpt-widescreen/assets/data/app.json' }} 3 | fetch(app.urls.appData) 4 | .then(resp => resp.ok ? resp.json() : Promise.reject(`HTTP error! status: ${resp.status}`)) 5 | .then(data => { Object.assign(app.urls, data.urls || {}) ; updateFooterLinks() }) 6 | .catch(console.error) 7 | 8 | function updateFooterLinks() { 9 | if (!app.urls.support || !app.urls.review) return 10 | document.querySelectorAll('.footer-links a').forEach(link => 11 | link.href = link.id.includes('support') ? app.urls.support 12 | : link.id.includes('review') ? app.urls.review[ 13 | navigator.userAgent.includes('Edg') ? 'edge' : 'chrome'] 14 | : link.href // don't update other links 15 | ) 16 | } 17 | })(); 18 | -------------------------------------------------------------------------------- /pages/welcome/chromium/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Welcome to ChatGPT Widescreen 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 |

16 | ChatGPT Widescreen Installed! 17 |

18 |

For easier access to settings, click the puzzle piece (1) in the top right of your browser. Then, click the little pin (2) next to the extension:

19 | Pin the extension 20 |

Click the extension icon (3) to access settings (more appear if on AI site):

21 | Click extension icon 22 |
23 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /utils/bump/extension-manifests.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Bumps extension manifests if changes detected + git commit/push 4 | # NOTE: Pass --chrom to forcibly bump Chromium manifest only 5 | # NOTE: Pass -- to forcibly bump Firefox manifest only 6 | # NOTE: Pass --no- to skip git commit/push 7 | 8 | shopt -s nocasematch # enable case-insensitive matching (to flexibly check commit msg for bumps) 9 | 10 | # Init UI COLORS 11 | NC="\033[0m" # no color 12 | DG="\033[38;5;243m" # dim gray 13 | BR="\033[1;91m" # bright red 14 | BY="\033[1;33m" # bright yellow 15 | BG="\033[1;92m" # bright green 16 | BW="\033[1;97m" # bright white 17 | 18 | # Parse ARGS 19 | for arg in "$@" ; do case "$arg" in 20 | *chrom*) chromium_only=true ;; 21 | *f*f*) ff_only=true ;; 22 | --no-commit) no_commit=true ;; 23 | --no-push) no_push=true ;; 24 | *) echo -e "${BR}Invalid argument: $arg.${NC}" && exit 1 ;; 25 | esac ; done 26 | 27 | # Init manifest PATHS 28 | chromium_manifest_path="chromium/extension/manifest.json" 29 | ff_manifest_path="firefox/extension/manifest.json" 30 | if [ "$chromium_only" = true ] ; then MANIFEST_PATHS=$(echo "$chromium_manifest_path" | grep -i 'chrom') 31 | elif [ "$ff_only" = true ] ; then MANIFEST_PATHS=$(echo "$ff_manifest_path" | grep -i 'firefox') 32 | else MANIFEST_PATHS=("$chromium_manifest_path" "$ff_manifest_path") ; fi 33 | 34 | # BUMP versions 35 | if (( ${#MANIFEST_PATHS[@]} > 1 )) ; then manifest_label="manifests" 36 | else manifest_label="${MANIFEST_PATHS[0]}" ; fi 37 | echo -e "${BY}\nBumping version in ${manifest_label}...${NC}\n" 38 | declare -A bumped_manifests=() 39 | TODAY=$(date +'%Y.%-m.%-d') # YYYY.M.D format 40 | for manifest_path in "${MANIFEST_PATHS[@]}" ; do 41 | 42 | # Check latest commit for extension changes if forcible platform flag not set 43 | platform_manifest_path=$(dirname "$manifest_path" | sed 's|^\./||') 44 | if [[ ! "$chromium_only $ff_only" =~ true ]] ; then 45 | echo "Checking last commit details for $platform_manifest_path..." 46 | latest_platform_commit_msg=$(git log -1 --format=%s -- "$platform_manifest_path") 47 | echo -e "${DG}${latest_platform_commit_msg}${NC}\n" 48 | if [[ $latest_platform_commit_msg =~ bump.*(ersion|manifest) ]] ; then 49 | echo -e "No changes found. Skipping...\n" ; continue ; fi 50 | fi 51 | 52 | # Echo begin bump 53 | if [ "$chromium_only" = true ] ; then manifest_prefix="Chromium" 54 | elif [ "$ff_only" = true ] ; then manifest_prefix="Firefox" ; fi 55 | echo "Bumping version in ${manifest_prefix} manifest..." 56 | 57 | # Determine old/new versions 58 | old_ver=$(sed -n 's/.*"version": *"\([0-9.]*\)".*/\1/p' "$manifest_path") 59 | if [[ $old_ver == "$TODAY" ]] ; then 60 | new_ver="$TODAY.1" 61 | elif [[ $old_ver == "$TODAY."* ]] ; then 62 | LAST_NUMBER=$(echo "$old_ver" | awk -F '.' '{print $NF}') 63 | new_ver="$TODAY.$((LAST_NUMBER + 1))" 64 | else new_ver="$TODAY" ; fi 65 | 66 | # Bump old version 67 | sed -i "s/\"$old_ver\"/\"$new_ver\"/" "$manifest_path" 68 | echo -e "Updated: ${BW}v${old_ver}${NC} → ${BG}v${new_ver}${NC}\n" 69 | bumped_manifests["$platform_manifest_path/manifest.json"]="$old_ver;$new_ver" 70 | 71 | done 72 | 73 | # LOG manifests bumped 74 | plural_suffix=$((( ${#bumped_manifests[@]} > 1 )) && echo "s") 75 | if (( ${#bumped_manifests[@]} == 0 )) ; then echo -e "${BW}Completed. No manifests bumped.${NC}" ; exit 0 76 | else echo -e "${BG}${#bumped_manifests[@]} manifest${plural_suffix} bumped!${NC}" ; fi 77 | 78 | # ADD/COMMIT/PUSH bump(s) 79 | if [[ "$no_commit" != true ]] ; then 80 | echo -e "\n${BY}Committing bump${plural_suffix} to Git...\n${NC}" 81 | 82 | # Init commit msg 83 | COMMIT_MSG="Bumped \`version\`" 84 | declare -A unique_versions 85 | for manifest in "${!bumped_manifests[@]}" ; do 86 | IFS=";" read -r old_ver new_ver <<< "${bumped_manifests[$manifest]}" ; unique_versions["$new_ver"]=1 ; done 87 | if (( ${#unique_versions[@]} == 1 )) ; then COMMIT_MSG+=" to \`${!unique_versions[@]}\`" ; fi 88 | 89 | # git add/commit/push 90 | git add ./**/manifest.json && git commit -n -m "$COMMIT_MSG" 91 | if [[ "$no_push" != true ]] ; then 92 | echo -e "\n${BY}Pulling latest changes from remote to sync local repository...${NC}\n" 93 | git pull || (echo -e "${BR}Merge failed, please resolve conflicts!${NC}" && exit 1) 94 | echo -e "\n${BY}Pushing bump${plural_suffix} to Git...\n${NC}" 95 | git push 96 | fi 97 | 98 | git_action="updated"$( [[ "$no_commit" != true ]] && echo -n "/committed" )$( 99 | [[ "$no_push" != true ]] && echo -n "/pushed" ) 100 | echo -e "\n${BG}Success! ${#bumped_manifests[@]} manifest${plural_suffix} ${git_action} to GitHub${NC}" 101 | fi 102 | 103 | # Final SUMMARY log 104 | echo # line break 105 | for manifest in "${!bumped_manifests[@]}" ; do 106 | IFS=";" read -r old_ver new_ver <<< "${bumped_manifests[$manifest]}" 107 | echo -e " ± $manifest ${BW}v${old_ver}${NC} → ${BG}v${new_ver}${NC}" 108 | done 109 | --------------------------------------------------------------------------------