38 |
71 |
72 |
73 |
76 |
77 |
78 |
91 |
92 |
93 |
109 |
110 |
111 |
112 | {{_('Web Access')}}
113 |
114 |
115 |
116 |
117 |
118 |
121 |
122 |
123 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
--------------------------------------------------------------------------------
/client/img/android-chrome-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ramon-victor/freegpt-webui/098db3dfeb41555c2ca9269df0f13e10ec1c35dc/client/img/android-chrome-192x192.png
--------------------------------------------------------------------------------
/client/img/android-chrome-512x512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ramon-victor/freegpt-webui/098db3dfeb41555c2ca9269df0f13e10ec1c35dc/client/img/android-chrome-512x512.png
--------------------------------------------------------------------------------
/client/img/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ramon-victor/freegpt-webui/098db3dfeb41555c2ca9269df0f13e10ec1c35dc/client/img/apple-touch-icon.png
--------------------------------------------------------------------------------
/client/img/favicon-16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ramon-victor/freegpt-webui/098db3dfeb41555c2ca9269df0f13e10ec1c35dc/client/img/favicon-16x16.png
--------------------------------------------------------------------------------
/client/img/favicon-32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ramon-victor/freegpt-webui/098db3dfeb41555c2ca9269df0f13e10ec1c35dc/client/img/favicon-32x32.png
--------------------------------------------------------------------------------
/client/img/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ramon-victor/freegpt-webui/098db3dfeb41555c2ca9269df0f13e10ec1c35dc/client/img/favicon.ico
--------------------------------------------------------------------------------
/client/img/gpt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ramon-victor/freegpt-webui/098db3dfeb41555c2ca9269df0f13e10ec1c35dc/client/img/gpt.png
--------------------------------------------------------------------------------
/client/img/site.webmanifest:
--------------------------------------------------------------------------------
1 | {
2 | "name": "",
3 | "short_name": "",
4 | "icons": [
5 | {
6 | "src": "/assets/img/android-chrome-192x192.png",
7 | "sizes": "192x192",
8 | "type": "image/png"
9 | },
10 | {
11 | "src": "/assets/img/android-chrome-512x512.png",
12 | "sizes": "512x512",
13 | "type": "image/png"
14 | }
15 | ],
16 | "theme_color": "#ffffff",
17 | "background_color": "#ffffff",
18 | "display": "standalone"
19 | }
--------------------------------------------------------------------------------
/client/img/user.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ramon-victor/freegpt-webui/098db3dfeb41555c2ca9269df0f13e10ec1c35dc/client/img/user.png
--------------------------------------------------------------------------------
/client/js/change-language.js:
--------------------------------------------------------------------------------
1 | document.addEventListener('DOMContentLoaded', fetchLanguages);
2 |
3 | async function fetchLanguages() {
4 | try {
5 | const [languagesResponse, currentLanguageResponse] = await Promise.all([
6 | fetch(`${url_prefix}/get-languages`),
7 | fetch(`${url_prefix}/get-locale`)
8 | ]);
9 |
10 | const languages = await languagesResponse.json();
11 | const currentLanguage = await currentLanguageResponse.text();
12 |
13 | const languageSelect = document.getElementById('language');
14 | languages.forEach(lang => {
15 | const option = document.createElement('option');
16 | option.value = lang;
17 | option.textContent = lang;
18 | languageSelect.appendChild(option);
19 | });
20 |
21 | const savedLanguage = localStorage.getItem("language") || currentLanguage;
22 | setLanguageOnPageLoad(savedLanguage);
23 | } catch (error) {
24 | console.error("Failed to fetch languages or current language");
25 | }
26 | }
27 |
28 | function setLanguageOnPageLoad(language) {
29 | document.getElementById("language").value = language;
30 | }
31 |
32 | function changeLanguage(lang) {
33 | fetch(`${url_prefix}/change-language`, {
34 | method: "POST",
35 | headers: {
36 | "Content-Type": "application/json",
37 | },
38 | body: JSON.stringify({ language: lang }),
39 | }).then((response) => {
40 | if (response.ok) {
41 | localStorage.setItem("language", lang);
42 | location.reload();
43 | } else {
44 | console.error("Failed to change language");
45 | }
46 | });
47 | }
48 |
--------------------------------------------------------------------------------
/client/js/highlightjs-copy.min.js:
--------------------------------------------------------------------------------
1 | class CopyButtonPlugin{constructor(options={}){self.hook=options.hook;self.callback=options.callback}"after:highlightElement"({el,text}){let button=Object.assign(document.createElement("button"),{innerHTML:"Copy",className:"hljs-copy-button"});button.dataset.copied=false;el.parentElement.classList.add("hljs-copy-wrapper");el.parentElement.appendChild(button);el.parentElement.style.setProperty("--hljs-theme-background",window.getComputedStyle(el).backgroundColor);button.onclick=function(){if(!navigator.clipboard)return;let newText=text;if(hook&&typeof hook==="function"){newText=hook(text,el)||text}navigator.clipboard.writeText(newText).then(function(){button.innerHTML="Copied!";button.dataset.copied=true;let alert=Object.assign(document.createElement("div"),{role:"status",className:"hljs-copy-alert",innerHTML:"Copied to clipboard"});el.parentElement.appendChild(alert);setTimeout(()=>{button.innerHTML="Copy";button.dataset.copied=false;el.parentElement.removeChild(alert);alert=null},2e3)}).then(function(){if(typeof callback==="function")return callback(newText,el)})}}}
--------------------------------------------------------------------------------
/client/js/icons.js:
--------------------------------------------------------------------------------
1 | window.FontAwesomeKitConfig={asyncLoading:{enabled:!1},autoA11y:{enabled:!0},baseUrl:"https://ka-f.fontawesome.com",baseUrlKit:"https://kit-pro.fontawesome.com",detectConflictsUntil:null,iconUploads:{},id:96462084,license:"pro",method:"css",minify:{enabled:!0},token:"d0514f1901",v4FontFaceShim:{enabled:!0},v4shim:{enabled:!0},v5FontFaceShim:{enabled:!0},version:"6.1.1"},function(t){"function"==typeof define&&define.amd?define("kit-loader",t):t()}(function(){"use strict";function t(e){return(t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(e)}function e(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function n(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,o)}return n}function o(t){for(var o=1;o