assets/themes/j1/adapter/js/gemini.js in j1-template-2024.2.0 vs assets/themes/j1/adapter/js/gemini.js in j1-template-2024.2.1
- old
+ new
@@ -111,13 +111,11 @@
var url;
var baseUrl;
var cookie_names;
var cookie_written;
var hostname;
- var auto_domain;
- var check_cookie_option_domain;
- var cookie_domain;
+ var domain;
var secure;
var gemini_model;
var apiKey;
var validApiKey;
@@ -226,11 +224,16 @@
delete slimData[foundItem];
// create new reindexed data object
newData = Object.values(slimData);
// update the select
- $slimSelect.setData(newData);
+ // failsafe
+ if ($slimSelect !== undefined || $slimSelect !== null) {
+ $slimSelect.setData(newData);
+ } else {
+ logger.error('\n' + 'FATAL: slimSelect NOT available');
+ } // END create|set slimSelect data elements
}
// update prompt history data
foundItem = -1;
// convert chat prompt object to array
@@ -256,38 +259,42 @@
} // END if allowHistoryDupicates
// update the prompt history
if (promptHistoryFromCookie) {
logger.debug('\n' + 'save prompt history to cookie');
- j1.removeCookie({
- name: cookie_names.chat_prompt,
- domain: auto_domain,
- secure: secure
- });
if (newHistory.length > 0) {
+
+ // remove BEFORE write
+ j1.removeCookie({ name: cookie_names.chat_prompt });
cookie_written = j1.writeCookie({
- name: cookie_names.chat_prompt,
- data: newHistory,
- secure: secure
+ name: cookie_names.chat_prompt,
+ data: newHistory,
+ secure: secure
});
+
+ $("#clear").show()
} else {
- cookie_written = j1.writeCookie({
- name: cookie_names.chat_prompt,
- data: {},
- secure: secure
- });
+ j1.removeCookie({ name: cookie_names.chat_prompt });
+
logger.info('\n' + 'spanElementEventListener, hide prompt history on last element');
$("#prompt_history_container").hide();
+ $("#clear").hide()
} // END if length
} // END if promptHistoryFromCookie
}
logger.info('\n' + 'spanElementEventListener, option deleted:\n' + optionText);
- // close currently required to re-add history prompt events on next beforeOpen
- $slimSelect.close();
+ // failsafe
+ if ($slimSelect === undefined || $slimSelect === null) {
+ logger.error('\n' + 'FATAL: slimSelect NOT available');
+ } else {
+ // close currently required to re-add history prompt events on next beforeOpen
+ $slimSelect.close();
+ }
+
} // END spanElementEventListener
// Log the geolocation position
function showPosition(position) {
latitude = position.coords.latitude;
@@ -532,11 +539,10 @@
// -------------------------------------------------------------------------
// module initializer
// -------------------------------------------------------------------------
init: (options) => {
-
// -----------------------------------------------------------------------
// default module settings
// -----------------------------------------------------------------------
var settings = $.extend({
module_name: 'j1.adapter.gemini',
@@ -550,11 +556,11 @@
logger = log4javascript.getLogger('j1.adapter.gemini');
cookie_names = j1.getCookieNames();
url = new liteURL(window.location.href);
baseUrl = url.origin;
hostname = url.hostname;
- auto_domain = hostname.substring(hostname.lastIndexOf('.', hostname.lastIndexOf('.') - 1) + 1);
+ domain = hostname.substring(hostname.lastIndexOf('.', hostname.lastIndexOf('.') - 1) + 1);
secure = (url.protocol.includes('https')) ? true : false;
promptHistoryEnabled = geminiOptions.prompt_history_enabled;
promptHistoryFromCookie = geminiOptions.prompt_history_from_cookie;
var data;
@@ -568,19 +574,17 @@
// -----------------------------------------------------------------------
// module initializer
// -----------------------------------------------------------------------
var dependencies_met_page_ready = setInterval (() => {
- var pageState = $('#content').css("display");
- var pageVisible = (pageState === 'block') ? true : false;
- var j1CoreFinished = (j1.getState() === 'finished') ? true : false;
-// var slimSelectFinished = (j1.adapter.slimSelect.getState() === 'finished') ? true : false;
- var slimSelectFinished = (Object.keys(j1.adapter.slimSelect.select).length) ? true : false;
- var uiLoaded = (j1.xhrDOMState['#gemini_ui'] === 'success') ? true : false;
+ var flickerState = $('#no_flicker').css("display");
+ var pageState = $('#content').css("display");
+ var pageVisible = (flickerState === 'block' && pageState === 'block') ? true : false;
+ var selectReady = (document.getElementById(geminiOptions.prompt_history_id)) ? true : false;
+ var uiLoaded = (j1.xhrDOMState['#gemini_ui'] === 'success') ? true : false;
- // check page ready state
- if (j1CoreFinished && pageVisible && slimSelectFinished && uiLoaded && modulesLoaded) {
+ if (pageVisible && selectReady && uiLoaded && modulesLoaded) {
startTimeModule = Date.now();
_this.setState('started');
logger.debug('\n' + 'set module state to: ' + _this.getState());
logger.info('\n' + 'initializing module: started');
@@ -599,91 +603,96 @@
$("#spinner").hide();
$("#response").hide();
// get|clear textarea element (prompt)
textarea = document.getElementById(geminiOptions.prompt_id);
- textarea.value = '';
+ textarea.value = '';
- var dependencies_met_select_ready = setInterval(() => {
- var selectState = $('#container_prompt_history_select_wrapper').length;
- var selectReady = (selectState > 0) ? true : false;
+ logger.debug('\n' + 'initializing select data');
- if (selectReady) {
- logger.debug('\n' + 'initializing select data');
+ // initialize history array from cookie
+ if (promptHistoryEnabled && promptHistoryFromCookie) {
- // initialize history array from cookie
- if (promptHistoryEnabled && promptHistoryFromCookie) {
- // get slimSelect object for the history (placed by slimSelect adapter)
- // selectList = document.getElementById('prompt_history');
- $slimSelect = j1.adapter.slimSelect.select[geminiOptions.prompt_history_id];
+ // get slimSelect object
+ selectList = document.getElementById(geminiOptions.prompt_history_id);
+ $slimSelect = selectList.slim;
- // limit the prompt history
- promptHistoryMax = geminiOptions.prompt_history_max;
+ // failsafe
+ if ($slimSelect === undefined || $slimSelect === null) {
+ logger.error('\n' + 'FATAL: slimSelect NOT available');
+ }
+ // END get slimSelect object
- // allow|reject history updates if promptHistoryMax reached
- allowPromptHistoryUpdatesOnMax = geminiOptions.allow_prompt_history_updates_on_max;
+ // limit the prompt history
+ promptHistoryMax = geminiOptions.prompt_history_max;
- logger.debug('\n' + 'read prompt history from cookie');
- var data = [];
- var option = {};
- chat_prompt = j1.existsCookie(cookie_names.chat_prompt)
- ? j1.readCookie(cookie_names.chat_prompt)
- : {};
+ // allow|reject history updates if promptHistoryMax reached
+ allowPromptHistoryUpdatesOnMax = geminiOptions.allow_prompt_history_updates_on_max;
- // convert chat prompt object to array
- textHistory = Object.values(chat_prompt);
+ logger.debug('\n' + 'read prompt history from cookie');
+ var data = [];
+ var option = {};
+ chat_prompt = j1.existsCookie(cookie_names.chat_prompt)
+ ? j1.readCookie(cookie_names.chat_prompt)
+ : {};
- // remove duplicates from history
- if (textHistory.length > 1) {
- var textHistoryLenght = textHistory.length;
- var uniqueArray = [...new Set(textHistory)]; // create a 'Set' from the history array to automatically remove duplicates
+ // convert chat prompt object to array
+ textHistory = Object.values(chat_prompt);
- textHistory = uniqueArray;
- if (textHistoryLenght > textHistory.length) {
- logger.debug('\n' + 'removed duplicates from history array: ' + (textHistoryLenght - textHistory.length) + ' element|s');
- }
- } // END if !allowHistoryDupicates
+ // remove duplicates from history
+ if (textHistory.length > 1) {
+ var textHistoryLenght = textHistory.length;
+ var uniqueArray = [...new Set(textHistory)]; // create a 'Set' from the history array to automatically remove duplicates
- // update|set slimSelect data elements
- var index = 1;
- var data = [];
- var option = {};
- var html;
- textHistory.forEach((historyText) => {
- html = '<span id="opt_' + geminiOptions.prompt_history_id + '_' + index + '" class="ss-option-delete">' + '<i class="mdib mdib-close mdib-16px ml-1 mr-2"></i></span>' + historyText;
- option = {
- text: historyText,
- html: html,
- display: true,
- selected: false,
- disabled: false
- }
- data.push(option);
- index++
- }); // END forEach
- $slimSelect.setData(data);
+ textHistory = uniqueArray;
+ if (textHistoryLenght > textHistory.length) {
+ logger.debug('\n' + 'removed duplicates from history array: ' + (textHistoryLenght - textHistory.length) + ' element|s');
+ }
+ } // END if !allowHistoryDupicates
- // display history container
- if (textHistory.length > 0) {
- $("#prompt_history_container").show();
- }
+ // update|set slimSelect data elements
+ var index = 1;
+ var data = [];
+ var option = {};
+ var html;
+ textHistory.forEach((historyText) => {
+ html = '<span id="opt_' + geminiOptions.prompt_history_id + '_' + index + '" class="ss-option-delete">' + '<i class="mdib mdib-close mdib-16px ml-1 mr-2"></i></span>' + historyText;
+ option = {
+ text: historyText,
+ html: html,
+ display: true,
+ selected: false,
+ disabled: false
+ }
+ data.push(option);
+ index++
+ }); // END forEach
- // -------------------------------------------------------------
- // setup Slim select eventHandlers
- // -------------------------------------------------------------
- //
- _this.setupSlimSelectEventHandlers();
+ // failsafe
+ if ($slimSelect !== undefined || $slimSelect !== null) {
+ $slimSelect.setData(data);
+ } else {
+ logger.error('\n' + 'FATAL: slimSelect NOT available');
+ } // END create|set slimSelect data elements
- } else {
- // disable|hide clear history button
- $("#clear").hide();
- } // if promptHistoryEnabled
+ // display history container
+ if (textHistory.length > 0) {
+ $("#prompt_history_container").show();
+ $("#clear").show();
+ }
- clearInterval(dependencies_met_select_ready);
- } // END if modules loaded
- }, 10); // END dependencies_met_select_ready
+ // -------------------------------------------------------------
+ // setup Slim select eventHandlers
+ // -------------------------------------------------------------
+ //
+ _this.setupSlimSelectEventHandlers();
+ } else {
+ // disable|hide clear history button
+ $("#clear").hide();
+ } // if promptHistoryEnabled
+
// -------------------------------------------------------------------
// setup UI button eventHandlers
// -------------------------------------------------------------------
//
_this.setupUIButtonEventHandlers()
@@ -782,15 +791,17 @@
'j1.adapter.gemini',
'null'
);
var dependencies_met_data_loaded = setInterval(() => {
- if (j1.xhrDOMState['#gemini_ui'] === 'success') {
+ var uiLoaded = (j1.xhrDOMState['#gemini_ui'] === 'success') ? true : false;
+
+ if (uiLoaded) {
logger.debug('\n' + 'Loading UI: successful');
clearInterval(dependencies_met_data_loaded);
- } // END if xhrDOMState
+ } // END if uiLoaded
}, 10);
}, // END loadUI
// -------------------------------------------------------------------------
@@ -836,12 +847,18 @@
disabled: false
}
data.push(option);
index++;
}); // END forEach
- $slimSelect.setData(data);
+ // failsafe
+ if ($slimSelect !== undefined || $slimSelect !== null) {
+ $slimSelect.setData(data);
+ } else {
+ logger.error('\n' + 'FATAL: slimSelect NOT available');
+ } // END create|set slimSelect data elements
+
} // END re-read current history from cookie
// set prompt history EventListeners (for option deletion)
if (slimValues.length) {
logger.debug('\n' + 'slimSelect.beforeOpen, number of eventListeners to process: #' + slimValues.length);
@@ -849,14 +866,16 @@
}
// wait until prompt history eventListener|s is|are placed
var listenerIndex = 1;
slimValues.forEach( () => {
- var span = 'opt_prompt_history_' + listenerIndex;
- var spanElement = document.getElementById(span);
+ var span = 'opt_prompt_history_' + listenerIndex;
+ var spanElement = document.getElementById(span);
+
var dependencies_met_listeners_ready = setInterval (() => {
- var spanElementReady = (($(spanElement).length) !== 0) ? true : false;
+ var spanElementReady = ($(spanElement).length) ? true : false;
+
if (spanElementReady) {
if (listenerIndex === slimValues.length) {
eventListenersReady = true;
logger.debug('\n' + 'slimSelect.beforeOpen, all eventListeners ready');
} // END if listenerIndex
@@ -890,12 +909,23 @@
} else {
logger.debug('\n' + 'slimSelect.afterClose, selection from history: empty');
document.getElementById('prompt').value = '';
}
- // remove selection from select
- $slimSelect.setSelected('', false);
+ // failsafe
+ if ($slimSelect === undefined || $slimSelect === null) {
+ logger.error('\n' + 'FATAL: slimSelect NOT available');
+ } else {
+ // failsafe
+ if ($slimSelect === undefined || $slimSelect === null) {
+ logger.error('\n' + 'FATAL: slimSelect NOT available');
+ } else {
+ // remove selection from select
+ $slimSelect.setSelected('', false);
+ }
+ }
+
} // END event afterClose
}, // END setupSlimSelectEventHandlers()
// -------------------------------------------------------------------------
@@ -1016,30 +1046,35 @@
disabled: false
}
data.push(option);
index++;
}); // END forEach
- $slimSelect.setData(data);
// END create|set slimSelect data elements
+ // failsafe
+ if ($slimSelect !== undefined || $slimSelect !== null) {
+ $slimSelect.setData(data);
+ } else {
+ logger.error('\n' + 'FATAL: slimSelect NOT available');
+ } // END create|set slimSelect data elements
+
// display history container
if (textHistory.length > 0) {
$("#prompt_history_container").show();
+ $("#clear").show();
}
// write current history to cookie
if (promptHistoryFromCookie) {
logger.debug('\n' + 'sendButton, save prompt history to cookie');
- j1.removeCookie({
- name: cookie_names.chat_prompt,
- domain: auto_domain,
- secure: secure
- });
+
+ // remove BEFORE write
+ j1.removeCookie({ name: cookie_names.chat_prompt });
cookie_written = j1.writeCookie({
- name: cookie_names.chat_prompt,
- data: textHistory,
- secure: secure
+ name: cookie_names.chat_prompt,
+ data: textHistory,
+ secure: secure
});
} // END write current history to cookie
} // END if promptHistoryEnabled
// clear results
@@ -1090,24 +1125,15 @@
if (!logStartOnce) {
logger.warn('\n' + 'resetButton, perform clearHistory');
logStartOnce = true;
}
- // write empty history to cookie
+ // clear history
textHistory = [];
- if (promptHistoryFromCookie) {
- j1.removeCookie({
- name: cookie_names.chat_prompt,
- domain: auto_domain,
- secure: secure
- });
- cookie_written = j1.writeCookie({
- name: cookie_names.chat_prompt,
- data: {},
- secure: secure
- });
- }
+ j1.removeCookie({ name: cookie_names.chat_prompt });
+
$("#prompt_history_container").hide();
+ $("#clear").hide();
}); // END click accecptClearHistory
// skip clear history
dismissClearHistory.addEventListener('click', (event) => {
// suppress default actions|bubble up