Spaces:
Sleeping
Sleeping
Keldos
commited on
Commit
•
9fb61e6
1
Parent(s):
91464d9
feat: 更新信息窗口加入交互
Browse files- assets/custom.css +9 -2
- assets/custom.js +62 -7
- assets/html/update.html +10 -6
assets/custom.css
CHANGED
@@ -46,10 +46,11 @@ footer {
|
|
46 |
#toast-update {
|
47 |
position: absolute;
|
48 |
display: flex;
|
49 |
-
top: -
|
50 |
width: 100%;
|
51 |
justify-content: center;
|
52 |
z-index: var(--layer-top);
|
|
|
53 |
}
|
54 |
#check-chuanhu-update {
|
55 |
position: absolute;
|
@@ -68,7 +69,7 @@ footer {
|
|
68 |
overflow: hidden;
|
69 |
pointer-events: auto;
|
70 |
}
|
71 |
-
|
72 |
font-size: 1.2em;
|
73 |
font-weight: bold;
|
74 |
text-align: start;
|
@@ -82,6 +83,9 @@ footer {
|
|
82 |
overflow: auto;
|
83 |
padding: 0 8px;
|
84 |
}
|
|
|
|
|
|
|
85 |
.btn-update-group {
|
86 |
display: flex;
|
87 |
justify-content: space-between;
|
@@ -90,6 +94,9 @@ footer {
|
|
90 |
width: 100%;
|
91 |
padding-top: 10px;
|
92 |
}
|
|
|
|
|
|
|
93 |
/* user_info */
|
94 |
#user_info {
|
95 |
white-space: nowrap;
|
|
|
46 |
#toast-update {
|
47 |
position: absolute;
|
48 |
display: flex;
|
49 |
+
top: -500px;
|
50 |
width: 100%;
|
51 |
justify-content: center;
|
52 |
z-index: var(--layer-top);
|
53 |
+
transition: top 0.5s ease-in-out;
|
54 |
}
|
55 |
#check-chuanhu-update {
|
56 |
position: absolute;
|
|
|
69 |
overflow: hidden;
|
70 |
pointer-events: auto;
|
71 |
}
|
72 |
+
#version-info-title {
|
73 |
font-size: 1.2em;
|
74 |
font-weight: bold;
|
75 |
text-align: start;
|
|
|
83 |
overflow: auto;
|
84 |
padding: 0 8px;
|
85 |
}
|
86 |
+
#release-note-wrap.hideK {
|
87 |
+
display: none;
|
88 |
+
}
|
89 |
.btn-update-group {
|
90 |
display: flex;
|
91 |
justify-content: space-between;
|
|
|
94 |
width: 100%;
|
95 |
padding-top: 10px;
|
96 |
}
|
97 |
+
.btn-update-group.hideK {
|
98 |
+
display: none;
|
99 |
+
}
|
100 |
/* user_info */
|
101 |
#user_info {
|
102 |
white-space: nowrap;
|
assets/custom.js
CHANGED
@@ -18,10 +18,12 @@ var apSwitch = null;
|
|
18 |
var messageBotDivs = null;
|
19 |
var loginUserForm = null;
|
20 |
var logginUser = null;
|
|
|
21 |
|
22 |
var userLogged = false;
|
23 |
var usernameGotten = false;
|
24 |
var historyLoaded = false;
|
|
|
25 |
|
26 |
var ga = document.getElementsByTagName("gradio-app");
|
27 |
var targetNode = ga[0];
|
@@ -61,6 +63,7 @@ function gradioLoaded(mutations) {
|
|
61 |
chatbot = document.querySelector('#chuanhu_chatbot');
|
62 |
chatbotWrap = document.querySelector('#chuanhu_chatbot > .wrap');
|
63 |
apSwitch = document.querySelector('.apSwitch input[type="checkbox"]');
|
|
|
64 |
|
65 |
if (loginUserForm) {
|
66 |
localStorage.setItem("userLogged", true);
|
@@ -85,10 +88,14 @@ function gradioLoaded(mutations) {
|
|
85 |
if (chatbotWrap) {
|
86 |
if (!historyLoaded) {
|
87 |
loadHistoryHtml();
|
88 |
-
updateLatestVersion();
|
89 |
}
|
90 |
setChatbotScroll();
|
91 |
}
|
|
|
|
|
|
|
|
|
|
|
92 |
}
|
93 |
}
|
94 |
}
|
@@ -498,23 +505,71 @@ function clearHistoryHtml() {
|
|
498 |
}
|
499 |
|
500 |
async function getLatestRelease() {
|
501 |
-
|
502 |
-
|
503 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
504 |
}
|
505 |
async function updateLatestVersion() {
|
|
|
506 |
const latestVersionElement = document.getElementById('latest-version-title');
|
507 |
const releaseNoteElement = document.getElementById('release-note-content');
|
|
|
|
|
|
|
508 |
try {
|
509 |
const data = await getLatestRelease();
|
510 |
-
const latestVersion = data.tag_name;
|
511 |
-
latestVersionElement.textContent = latestVersion;
|
512 |
const releaseNote = data.body;
|
513 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
514 |
} catch (error) {
|
515 |
console.error(error);
|
516 |
}
|
517 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
518 |
|
519 |
// 监视页面内部 DOM 变动
|
520 |
var observer = new MutationObserver(function (mutations) {
|
|
|
18 |
var messageBotDivs = null;
|
19 |
var loginUserForm = null;
|
20 |
var logginUser = null;
|
21 |
+
var updateToast = null;
|
22 |
|
23 |
var userLogged = false;
|
24 |
var usernameGotten = false;
|
25 |
var historyLoaded = false;
|
26 |
+
var updateInfoGotten = false;
|
27 |
|
28 |
var ga = document.getElementsByTagName("gradio-app");
|
29 |
var targetNode = ga[0];
|
|
|
63 |
chatbot = document.querySelector('#chuanhu_chatbot');
|
64 |
chatbotWrap = document.querySelector('#chuanhu_chatbot > .wrap');
|
65 |
apSwitch = document.querySelector('.apSwitch input[type="checkbox"]');
|
66 |
+
updateToast = document.querySelector("#toast-update");
|
67 |
|
68 |
if (loginUserForm) {
|
69 |
localStorage.setItem("userLogged", true);
|
|
|
88 |
if (chatbotWrap) {
|
89 |
if (!historyLoaded) {
|
90 |
loadHistoryHtml();
|
|
|
91 |
}
|
92 |
setChatbotScroll();
|
93 |
}
|
94 |
+
if (updateToast) {
|
95 |
+
if (!updateInfoGotten) {
|
96 |
+
updateLatestVersion();
|
97 |
+
}
|
98 |
+
}
|
99 |
}
|
100 |
}
|
101 |
}
|
|
|
505 |
}
|
506 |
|
507 |
async function getLatestRelease() {
|
508 |
+
try {
|
509 |
+
const response = await fetch('https://api.github.com/repos/gaizhenbiao/chuanhuchatgpt/releases/latest');
|
510 |
+
if (!response.ok) {
|
511 |
+
console.log(`Error: ${response.status} - ${response.statusText}`);
|
512 |
+
updateInfoGotten = true;
|
513 |
+
return null;
|
514 |
+
}
|
515 |
+
const data = await response.json();
|
516 |
+
updateInfoGotten = true;
|
517 |
+
return data;
|
518 |
+
} catch (error) {
|
519 |
+
console.log(`Error: ${error}`);
|
520 |
+
updateInfoGotten = true;
|
521 |
+
return null;
|
522 |
+
}
|
523 |
}
|
524 |
async function updateLatestVersion() {
|
525 |
+
const currentVersionElement = document.getElementById('current-version');
|
526 |
const latestVersionElement = document.getElementById('latest-version-title');
|
527 |
const releaseNoteElement = document.getElementById('release-note-content');
|
528 |
+
const currentVersion = currentVersionElement.textContent;
|
529 |
+
// const currentVersion = '20230619'; // for debugging
|
530 |
+
updateInfoGotten = true; //无论成功与否都只执行一次,否则容易api超限...
|
531 |
try {
|
532 |
const data = await getLatestRelease();
|
|
|
|
|
533 |
const releaseNote = data.body;
|
534 |
+
if (releaseNote) {
|
535 |
+
releaseNoteElement.innerHTML = marked.parse(releaseNote);
|
536 |
+
}
|
537 |
+
const latestVersion = data.tag_name;
|
538 |
+
if (latestVersion) {
|
539 |
+
latestVersionElement.textContent = latestVersion;
|
540 |
+
if (currentVersion !== latestVersion) {
|
541 |
+
if (!isInIframe) {openUpdateToast();}
|
542 |
+
} else {
|
543 |
+
noUpdate();
|
544 |
+
}
|
545 |
+
}
|
546 |
} catch (error) {
|
547 |
console.error(error);
|
548 |
}
|
549 |
}
|
550 |
+
function getUpdate() {
|
551 |
+
window.open('https://github.com/gaizhenbiao/chuanhuchatgpt/releases/latest', '_blank');
|
552 |
+
closeUpdateToast();
|
553 |
+
}
|
554 |
+
function cancelUpdate() {
|
555 |
+
closeUpdateToast();
|
556 |
+
}
|
557 |
+
function openUpdateToast() {
|
558 |
+
updateToast.style.setProperty('top', '-20px');
|
559 |
+
}
|
560 |
+
function closeUpdateToast() {
|
561 |
+
updateToast.style.setProperty('top', '-500px');
|
562 |
+
}
|
563 |
+
function noUpdate() {
|
564 |
+
const versionInfoElement = document.getElementById('version-info-title');
|
565 |
+
const releaseNoteWrap = document.getElementById('release-note-wrap');
|
566 |
+
const gotoUpdateBtn = document.getElementById('goto-update-btn');
|
567 |
+
const closeUpdateBtn = document.getElementById('close-update-btn');
|
568 |
+
versionInfoElement.textContent = 'You are using the latest version!';
|
569 |
+
releaseNoteWrap.style.setProperty('display', 'none');
|
570 |
+
gotoUpdateBtn.classList.add('hideK');
|
571 |
+
closeUpdateBtn.classList.remove('hideK');
|
572 |
+
}
|
573 |
|
574 |
// 监视页面内部 DOM 变动
|
575 |
var observer = new MutationObserver(function (mutations) {
|
assets/html/update.html
CHANGED
@@ -1,20 +1,24 @@
|
|
1 |
<div id="toast-update">
|
2 |
<div id="check-chuanhu-update">
|
3 |
-
|
4 |
-
|
5 |
-
</p>
|
6 |
-
<p
|
7 |
Latest Version: <a href="https://github.com/gaizhenbiao/chuanhuchatgpt/releases/latest" target="_blank"
|
8 |
id="latest-version-title" style="text-decoration: none;">getting latest version...</a>
|
9 |
</p>
|
10 |
<div id="release-note-wrap">
|
11 |
<div class="release-note-content" id="release-note-content">
|
12 |
-
Release Note...
|
13 |
</div>
|
14 |
</div>
|
15 |
-
<div class="btn-update-group">
|
16 |
<button class="btn-update lg secondary svelte-1ipelgc" id="cancel-button" onclick="cancelUpdate()">Cancel</button>
|
17 |
<button class="btn-update lg primary svelte-1ipelgc" id="update-button" onclick="getUpdate()">Update</button>
|
18 |
</div>
|
|
|
|
|
|
|
|
|
19 |
</div>
|
20 |
</div>
|
|
|
1 |
<div id="toast-update">
|
2 |
<div id="check-chuanhu-update">
|
3 |
+
<p style="display:none">
|
4 |
+
<span id="current-version">{current_version}</span>
|
5 |
+
</p>
|
6 |
+
<p id="version-info-title">
|
7 |
Latest Version: <a href="https://github.com/gaizhenbiao/chuanhuchatgpt/releases/latest" target="_blank"
|
8 |
id="latest-version-title" style="text-decoration: none;">getting latest version...</a>
|
9 |
</p>
|
10 |
<div id="release-note-wrap">
|
11 |
<div class="release-note-content" id="release-note-content">
|
12 |
+
Getting Release Note...
|
13 |
</div>
|
14 |
</div>
|
15 |
+
<div id="goto-update-btn" class="btn-update-group">
|
16 |
<button class="btn-update lg secondary svelte-1ipelgc" id="cancel-button" onclick="cancelUpdate()">Cancel</button>
|
17 |
<button class="btn-update lg primary svelte-1ipelgc" id="update-button" onclick="getUpdate()">Update</button>
|
18 |
</div>
|
19 |
+
<div id="close-update-btn" class="btn-update-group hideK">
|
20 |
+
<button class="btn-update lg secondary svelte-1ipelgc" id="update-button" onclick="getUpdate()">What's new</button>
|
21 |
+
<button class="btn-update lg primary svelte-1ipelgc" id="cancel-button" onclick="cancelUpdate()">OK</button>
|
22 |
+
</div>
|
23 |
</div>
|
24 |
</div>
|