From b4a1d09e3d38cdef591c795699b35c965007cdfa Mon Sep 17 00:00:00 2001 From: mbruzon Date: Mon, 8 Jun 2026 14:47:31 +0200 Subject: [PATCH] wip: Fix AI Interpreter. Doing Cookies and Sessions Manager. --- .gitignore | 3 +- Public/ecma/Application/AnP.ecma.js | 3 + .../ecma/Components/AIChatComponent.ecma.js | 10 +- Public/ecma/Managers/CookiesManager.ecma.js | 107 ++ Public/index.html | 6 +- Public/scss/AnP.common.scss | 19 - Public/scss/AnP.css | 1198 ++++++++++------- Public/scss/AnP.css.map | 8 +- Public/scss/AnP.icons.scss | 23 - Public/scss/AnP.scss | 7 +- Public/scss/{AnP.aichat.scss => _aichat.scss} | 7 +- Public/scss/{AnP.base.scss => _base.scss} | 4 + Public/scss/_common.scss | 20 + Public/scss/{AnP.fonts.scss => _fonts.scss} | 92 ++ Public/scss/_icons.scss | 40 + .../{AnP.settings.scss => _settings.scss} | 19 +- Python/Controllers/AIController.py | 8 +- .../Managers/SessionsManagerInterface.py | 10 +- Python/Managers/SessionsManager.py | 34 +- Python/Models/RequestModel.py | 8 +- Python/Models/SessionModel.py | 13 +- Python/Utils/Common.py | 4 + Tools/sass.win.bat | 3 + 23 files changed, 1080 insertions(+), 566 deletions(-) create mode 100644 Public/ecma/Managers/CookiesManager.ecma.js delete mode 100644 Public/scss/AnP.common.scss delete mode 100644 Public/scss/AnP.icons.scss rename Public/scss/{AnP.aichat.scss => _aichat.scss} (95%) rename Public/scss/{AnP.base.scss => _base.scss} (98%) create mode 100644 Public/scss/_common.scss rename Public/scss/{AnP.fonts.scss => _fonts.scss} (91%) create mode 100644 Public/scss/_icons.scss rename Public/scss/{AnP.settings.scss => _settings.scss} (61%) create mode 100644 Tools/sass.win.bat diff --git a/.gitignore b/.gitignore index 66ad78a..be66ca6 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,5 @@ *.deleted.* /Python/websockets __pycache__ -.sass-cache \ No newline at end of file +.sass-cache +/Public/fonts/FontAwesome-6.7.2 \ No newline at end of file diff --git a/Public/ecma/Application/AnP.ecma.js b/Public/ecma/Application/AnP.ecma.js index 2b615ee..92a531b 100644 --- a/Public/ecma/Application/AnP.ecma.js +++ b/Public/ecma/Application/AnP.ecma.js @@ -6,6 +6,7 @@ import {SettingsManager} from "../Managers/SettingsManager.ecma.js"; import {I18NManager} from "../Managers/I18NManager.ecma.js"; import {ThreadsManager} from "../Managers/ThreadsManager.ecma.js"; import {UniqueKeysManager} from "../Managers/UniqueKeysManager.ecma.js"; +import {CookiesManager} from "../Managers/CookiesManager.ecma.js"; import {SessionsManager} from "../Managers/SessionsManager.ecma.js"; import {ModelsManager} from "../Managers/ModelsManager.ecma.js"; import {ControllersManager} from "../Managers/ControllersManager.ecma.js"; @@ -65,6 +66,8 @@ export const AnP = (function(){ this.threads = new ThreadsManager(self); /** @type {UniqueKeysManager} */ this.unique_keys = new UniqueKeysManager(self); + /** @type {CookiesManager} */ + this.cookies = new CookiesManager(self); /** @type {SessionsManager} */ this.sessions = new SessionsManager(self); /** @type {ModelsManager} */ diff --git a/Public/ecma/Components/AIChatComponent.ecma.js b/Public/ecma/Components/AIChatComponent.ecma.js index f2c2029..c23a06b 100644 --- a/Public/ecma/Components/AIChatComponent.ecma.js +++ b/Public/ecma/Components/AIChatComponent.ecma.js @@ -65,7 +65,7 @@ export const AIChatComponent = (function(){ data_name : name, data_i18n : value, data_i18n_without : true, - title : anp.components.i18n(value) + title : anp.i18n.get(value) }, [ anp.components.icon(value), anp.components.i18n(value) @@ -75,7 +75,7 @@ export const AIChatComponent = (function(){ data_name : name, data_i18n : name, data_i18n_without : true, - title : anp.components.i18n(name) + title : anp.i18n.get(name) }, [ anp.components.icon(name), anp.components.i18n(name), @@ -174,6 +174,7 @@ export const AIChatComponent = (function(){ }; this.write_response = (id, fragment, ok, done) => { + console.log([id, fragment]); const box = document.querySelector(".aichat .messages>[data-type=bot][data-id='" + id + "']"), status = ( @@ -185,17 +186,20 @@ export const AIChatComponent = (function(){ status_i18n_box = status_box.querySelector("[data-i18n]"), date = Date.now(), tokens_box = box.querySelector("[data-name=response_tokens] .value"), - [html, raw_html, md] = format(box.querySelector(".md-content").innerText += fragment); + [html, raw_html, md] = format(box.querySelector(".md-content").textContent += fragment); box.querySelector(".html-content").innerHTML = html; box.querySelector(".raw-html-content").innerHTML = raw_html; + box.querySelector("[data-name=length] .value").innerText = md.length; + box.setAttribute("data-ok", ok); box.setAttribute("data-done", done); box.setAttribute("data-status", status); status_box.setAttribute("data-i18n", status); status_box.setAttribute("title", status_text); + status_box.querySelector("[data-icon]").setAttribute("data-icon", status); status_i18n_box.setAttribute("data-i18n", status_text); status_i18n_box.innerHTML = status_text; diff --git a/Public/ecma/Managers/CookiesManager.ecma.js b/Public/ecma/Managers/CookiesManager.ecma.js new file mode 100644 index 0000000..2dbf306 --- /dev/null +++ b/Public/ecma/Managers/CookiesManager.ecma.js @@ -0,0 +1,107 @@ +"use strict"; + +import {Check} from "../Utils/Check.ecma.js"; +import {Common} from "../Utils/Common.ecma.js"; + +/** + * @typedef {import("../Application/AnP.ecma.js").AnP} AnP + */ + +/** + * @class CookiesManager + * @constructor + * @param {!AnP} anp + * @return {void} + * @access public + * @static + */ +export const CookiesManager = (function(){ + + /** + * @constructs CookiesManager + * @param {!AnP} anp + * @return {void} + * @access private + * @static + */ + const CookiesManager = function(anp){ + + /** @type {CookiesManager} */ + const self = this; + + /** + * @returns {void} + * @access private + */ + const constructor = () => {}; + + /** + * @returns {Object.} + * @access public + */ + this.to_dictionary = () => document.cookie.split(";").map(cookie => cookie.trim().split("=")).reduce((dictionary, [key, value]) => { + + dictionary[key] = value; + + return dictionary; + }, {}); + + /** + * + * @param {!string} name + * @param {any|null} value + * @param {!(boolean|Object.|Array.)} options + * @returns + */ + this.set = (name, value, options = {}) => { + if(Common.get_value("overwrite", ( + Check.is_boolean ? {overwrite : options} : + options), false) || !self.has(name)){ + document.cookie = ( + `${name}=${value}` + + (Common.get_value("expires", options) ? `; expires=${options.expires.toUTCString()}` : "") + + (Common.get_value("path", options) ? `; path=${options.path}` : "") + + (Common.get_value("domain", options) ? `; domain=${options.domain}` : "") + + (Common.get_value("secure", options) ? `; secure` : "") + ); + return true; + }; + return false; + }; + + /** + * @param {!string} name + * @returns {boolean} + * @access public + */ + this.has = name => name in self.to_dictionary(); + + /** + * @param {!string} name + * @returns {string|null} + * @access public + */ + this.get = name => self.to_dictionary()[name] || null; + + /** + * @param {!string} name + * @param {!(boolean|Object.|Array.)} options + * @returns {boolean} + * @access public + */ + this.delete = (name, options = {}) => { + if(self.has(name)){ + self.set(name, "", { + expires : new Date(0), + ...Common.get_dictionary(options) + }); + return true; + }; + return false; + }; + + constructor(); + }; + + return CookiesManager; +})(); \ No newline at end of file diff --git a/Public/index.html b/Public/index.html index 2922316..756a3a4 100644 --- a/Public/index.html +++ b/Public/index.html @@ -18,9 +18,7 @@ - + +