Skip to content

Commit f0ffecb

Browse files
author
EliasPereirah
committed
Option to name the prompt
1 parent 836f7f3 commit f0ffecb

File tree

3 files changed

+146
-8
lines changed

3 files changed

+146
-8
lines changed

css/chat.css

+18
Original file line numberDiff line numberDiff line change
@@ -398,6 +398,7 @@ th {
398398
margin: 16px 0;
399399
}
400400

401+
401402
.dialog button {
402403
background-color: #7578e1;
403404
color: #fff;
@@ -837,7 +838,24 @@ textarea.system_prompt {
837838
font-weight: 600;
838839

839840
}
841+
#delete_prompt{
842+
background-color: #ff0c40;
843+
display: none;
844+
}
845+
#prompt_name{
846+
display: none;
847+
margin-bottom: 0;
848+
width: 87%;
849+
font-weight: 600;
850+
}
851+
#prompt_name::placeholder{
852+
color: #7578e1;
853+
font-weight: 600;
854+
}
840855

856+
option.by_user{
857+
font-weight: 600;
858+
}
841859
.popup {
842860
padding: 8px;
843861
text-align: center;

index.html

+3-2
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@
1111
</script>
1212
<link rel="icon" href="favicon.png">
1313
<link rel="stylesheet" href="css/highlight_js/themes/github-dark-dimmed.css?v=1.0.3">
14-
<link rel="stylesheet" href="css/chat.css?v=2.1.9">
14+
<link rel="stylesheet" href="css/chat.css?v=2.2.4">
1515
<link rel="manifest" href="manifest.json">
16+
1617
<meta property="og:type" content="article">
1718
<meta property="og:title" content="Orion">
1819
<meta property="og:description" content="Orion: Open source, unified AI chat interface.">
@@ -72,7 +73,7 @@
7273
<script src="js/4devs.js?v=1.0.0"></script>
7374
<script src="js/prompts.js?v=1.0.3"></script>
7475
<script src="js/tools_list.js?v=1.1.1"></script>
75-
<script src="js/script.js?v=2.6.8"></script>
76+
<script src="js/script.js?v=2.7.7"></script>
7677
<script src="js/voice_rec.js?v=1.0.6"></script>
7778
<div class="recording-animation">
7879
<div class="recording-indicator"></div>

js/script.js

+125-6
Original file line numberDiff line numberDiff line change
@@ -1227,11 +1227,17 @@ function setOptions() {
12271227
}
12281228
let prompts_options = '';
12291229
let prompt_id = 0;
1230+
let by_user = '';
12301231
if (typeof (all_prompts) !== "undefined") {
12311232
prompts_options += '<select name="prompt"><option selected="selected" disabled="disabled">Awesome Prompts</option>';
12321233
all_prompts.forEach(the_prompt => {
1234+
if(the_prompt.by_user){
1235+
by_user = `class="by_user" data-created_time="${the_prompt.created_time}"`;
1236+
}else {
1237+
by_user = '';
1238+
}
12331239
let prompt_text = the_prompt.prompt.replace(/"/g, '&quot;');
1234-
prompts_options += `<option id="prompt_id${prompt_id}" value="${prompt_text}">${the_prompt.act}</option>`;
1240+
prompts_options += `<option ${by_user} id="prompt_id${prompt_id}" value="${prompt_text}">${the_prompt.act}</option>`;
12351241
prompt_id++;
12361242
});
12371243
prompts_options += '</select>';
@@ -1270,8 +1276,9 @@ function setOptions() {
12701276
<button onclick="saveModel()" class="save_model">Save Model</button></div><hr>
12711277
<div><strong>System Prompt</strong>
12721278
${prompts_options}
1279+
<input id="prompt_name" type="text" name="prompt_name" placeholder="Name your prompt">
12731280
<textarea class="system_prompt" placeholder="(Optional) How the AI should respond?">${system_prompt}</textarea>
1274-
<button onclick="savePrompt()" class="save_prompt">Save Prompt</button><br>
1281+
<button onclick="savePrompt()" class="save_prompt">Save Prompt</button> <button id="delete_prompt">Delete Prompt</button><br>
12751282
${platform_info}
12761283
<span>${add_new_models}</span>
12771284
<span>${plugin_option}</span>
@@ -1283,6 +1290,28 @@ function setOptions() {
12831290

12841291
setTimeout(() => {
12851292

1293+
let sys_prompt = document.querySelector("textarea.system_prompt");
1294+
let last_prompt = sys_prompt.value.trim();
1295+
let prompt_name = document.querySelector("#prompt_name");
1296+
if (sys_prompt) {
1297+
sys_prompt.onkeyup = () => {
1298+
let current_prompt = sys_prompt.value.trim();
1299+
if(current_prompt !== last_prompt){
1300+
prompt_name.style.display = 'inline-block';
1301+
prompt_name.setAttribute("required", "true");
1302+
let del_prompt = document.querySelector("#delete_prompt");
1303+
if(del_prompt){
1304+
del_prompt.style.display = 'none';
1305+
}
1306+
}else{
1307+
prompt_name.style.display = 'none';
1308+
prompt_name.value = '';
1309+
prompt_name.setAttribute("required", "false");
1310+
1311+
}
1312+
}
1313+
}
1314+
12861315
let sl_platform = document.querySelector("select[name=platform]");
12871316
if (sl_platform) {
12881317
sl_platform.onchange = () => {
@@ -1296,14 +1325,31 @@ function setOptions() {
12961325
let sl_prompt = document.querySelector("select[name=prompt]");
12971326
if (sl_prompt) {
12981327
sl_prompt.onchange = (item => {
1328+
let selectedOption = sl_prompt.options[sl_prompt.selectedIndex];
1329+
let delete_prompt_bnt = document.querySelector("#delete_prompt");
1330+
if(selectedOption.getAttribute('data-created_time')){
1331+
if(delete_prompt_bnt){
1332+
delete_prompt_bnt.style.display = 'inline-block';
1333+
delete_prompt_bnt.onclick = ()=>{
1334+
deletePrompt();
1335+
}
1336+
}
1337+
}else {
1338+
delete_prompt_bnt.style.display = 'none';
1339+
}
1340+
prompt_name.style.display = 'none';
1341+
prompt_name.value = '';
1342+
prompt_name.setAttribute("required", "false");
12991343
let btn_sp = document.querySelector('.save_prompt');
13001344
if (btn_sp) {
13011345
btn_sp.classList.add('animate');
13021346
}
13031347
let txt_area = document.querySelector("textarea.system_prompt");
13041348
if (txt_area) {
13051349
txt_area.value = item.target.value;
1350+
last_prompt = item.target.value;
13061351
}
1352+
13071353
})
13081354
}
13091355
}, 500)
@@ -1583,19 +1629,37 @@ function orderTopics() {
15831629

15841630
}
15851631

1586-
function savePrompt() {
1632+
function savePrompt(close_dialog = true) {
15871633
let btn_sp = document.querySelector('.save_prompt');
15881634
if (btn_sp) {
15891635
btn_sp.classList.remove('animate');
15901636
}
15911637
let sys_prompt = document.querySelector("textarea.system_prompt").value.trim();
15921638
if (sys_prompt.length) {
1639+
let prompt_name = document.querySelector("#prompt_name");
1640+
if (prompt_name && prompt_name.value.trim().length > 0) {
1641+
// new prompt add by the user
1642+
let user_prompts = localStorage.getItem('user_new_prompts');
1643+
if(user_prompts){
1644+
user_prompts = JSON.parse(user_prompts);
1645+
}else {
1646+
user_prompts = [];
1647+
}
1648+
let current_time = Date.now();
1649+
let u_new_prompt = {act: prompt_name.value, prompt: sys_prompt, by_user: true, created_time: current_time};
1650+
user_prompts.unshift(u_new_prompt);
1651+
all_prompts.unshift(u_new_prompt);
1652+
localStorage.setItem('user_new_prompts', JSON.stringify(user_prompts));
1653+
}
15931654
localStorage.setItem('system_prompt', sys_prompt);
15941655
} else {
15951656
localStorage.removeItem('system_prompt')
15961657
}
1658+
15971659
saveModel();
1598-
closeDialogs();
1660+
if(close_dialog){
1661+
closeDialogs();
1662+
}
15991663
}
16001664

16011665
function saveModel() {
@@ -2941,15 +3005,15 @@ function unlockScroll() {
29413005
}
29423006
if (event.key === "ArrowDown") {
29433007
if (chat_msg.scrollTop <= last_position) {
2944-
chat_msg.scrollTop += 35;
3008+
chat_msg.scrollTop += 30;
29453009
//console.log('forcing scroll down')
29463010
} else {
29473011
// console.log('all fine: down')
29483012
}
29493013
last_position = chat_msg.scrollTop;
29503014
} else if (event.key === "ArrowUp") {
29513015
if (chat_msg.scrollTop >= last_position) {
2952-
chat_msg.scrollTop -= 35;
3016+
chat_msg.scrollTop -= 30;
29533017
//console.log('forcing scroll up')
29543018
} else {
29553019
//console.log('all fine: up')
@@ -3069,6 +3133,61 @@ document.addEventListener('keydown', function (e) {
30693133

30703134
});
30713135

3136+
function loadUserAddedPrompts(){
3137+
let u_prompt = localStorage.getItem('user_new_prompts');
3138+
if(u_prompt){
3139+
try {
3140+
u_prompt = JSON.parse(u_prompt);
3141+
u_prompt.forEach(new_prompt => {
3142+
all_prompts.unshift(new_prompt)
3143+
3144+
})
3145+
}catch (e) {
3146+
console.error(e)
3147+
}
3148+
}
3149+
}
3150+
loadUserAddedPrompts()
3151+
3152+
3153+
function deletePrompt(){
3154+
let sl_prompt = document.querySelector("select[name=prompt]");
3155+
let selectedOption = sl_prompt.options[sl_prompt.selectedIndex];
3156+
if(selectedOption){
3157+
let created_time = selectedOption.getAttribute('data-created_time');
3158+
if(created_time){
3159+
created_time = parseInt(created_time);
3160+
let all_user_prompt = localStorage.getItem('user_new_prompts');
3161+
if(all_user_prompt){
3162+
all_user_prompt = JSON.parse(all_user_prompt);
3163+
for (let i = 0; i < all_user_prompt.length; i++) {
3164+
if (all_user_prompt[i].created_time === created_time) {
3165+
all_user_prompt.splice(i, 1);
3166+
break;
3167+
}
3168+
}
3169+
localStorage.setItem('user_new_prompts', JSON.stringify(all_user_prompt));
3170+
3171+
// update all_prompts removing the prompt deleted
3172+
for (let i = 0; i < all_prompts.length; i++) {
3173+
if (all_prompts[i].created_time === created_time) {
3174+
all_prompts.splice(i, 1);
3175+
break;
3176+
}
3177+
}
3178+
3179+
3180+
3181+
selectedOption.remove();
3182+
console.log(selectedOption)
3183+
document.querySelector("textarea.system_prompt").value = '';
3184+
savePrompt();
3185+
}
3186+
3187+
}
3188+
}
3189+
3190+
}
30723191

30733192
let new_url = document.URL;
30743193
new_url = new_url.split('?')[0];

0 commit comments

Comments
 (0)