summaryrefslogtreecommitdiff
path: root/irclog/view/view8.js
diff options
context:
space:
mode:
authorMistivia <i@mistivia.com>2025-11-17 01:26:24 +0800
committerMistivia <i@mistivia.com>2025-11-17 01:26:24 +0800
commit0a012e1f97cc66e7b9d76a8eb3febad1d37312d8 (patch)
tree043f9ba2a199be74528c205d4a928e8d8b38eac3 /irclog/view/view8.js
parent07f98d9aecb6998cdc1dd649c12d6e49bed67f67 (diff)
Diffstat (limited to 'irclog/view/view8.js')
-rw-r--r--irclog/view/view8.js223
1 files changed, 0 insertions, 223 deletions
diff --git a/irclog/view/view8.js b/irclog/view/view8.js
deleted file mode 100644
index c8cdad0..0000000
--- a/irclog/view/view8.js
+++ /dev/null
@@ -1,223 +0,0 @@
-const logContainer = document.getElementById('log-container');
-const dateInput = document.getElementById('log-date');
-
-const queryString = window.location.search;
-const urlParams = new URLSearchParams(queryString);
-let chan = urlParams.get('chan');
-let year = urlParams.get('y');
-let month = urlParams.get('m');
-let day = urlParams.get('d');
-let hashtag = window.location.hash.substring(1);
-
-if (chan === 'main') {
- document.getElementById('searchlink').style.visibility = 'visible';
-}
-
-function getDate(year, month, day) {
- try {
- year = parseInt(year, 10);
- month = parseInt(month, 10);
- day = parseInt(day, 10);
- if (isNaN(year) || isNaN(month) || isNaN(day)) {
- throw new Error("date is NaN");
- }
- return new Date(year, month - 1, day);
- } catch (e) {
- console.log(e);
- const now = new Date();
- const y = now.toLocaleString('en-US', { timeZone: 'Asia/Shanghai', year: 'numeric' });
- const m = now.toLocaleString('en-US', { timeZone: 'Asia/Shanghai', month: 'numeric' });
- const d = now.toLocaleString('en-US', { timeZone: 'Asia/Shanghai', day: 'numeric' });
- return getDate(y, m, d);
- }
-}
-
-function formatDate(date) {
- const year = date.getFullYear();
- const month = String(date.getMonth() + 1).padStart(2, '0');
- const day = String(date.getDate()).padStart(2, '0');
- return `${year}-${month}-${day}`;
-}
-
-function setDateState(date) {
- year = date.getFullYear();
- month = String(date.getMonth() + 1).padStart(2, '0');
- day = String(date.getDate()).padStart(2, '0');
- dateInput.value = formatDate(getDate(year, month, day));
- let newurl = window.location.origin + window.location.pathname +
- '?chan=' + chan +
- '&y=' + year +
- '&m=' + month +
- '&d=' + day;
- if (hashtag !== '') {
- newurl = newurl + '#' + hashtag;
- }
- window.history.replaceState(null, '', newurl);
-}
-
-setDateState(getDate(year, month, day));
-
-logContainer.innerHTML = '';
-
-function escapeHtml(unsafe) {
- if (!unsafe) return '';
- return unsafe
- .replace(/&/g, "&amp;")
- .replace(/</g, "&lt;")
- .replace(/>/g, "&gt;")
- .replace(/"/g, "&quot;")
- .replace(/'/g, "&#039;");
-}
-
-function ircAction(text) {
- const regex =
- /^(\[[^\]]+\])(\s*<)([^>]+)(>:\s*)(\u0001ACTION\s+)([^\u0001]+)(\u0001)(.*)$/gm;
- const replacement = '$1 * $3 $6$8';
- return text.replace(regex, replacement);
-}
-
-function isPic(url) {
- const pics = [
- '.png',
- '.webp',
- '.bmp',
- '.jpg',
- '.jpeg',
- '.gif'
- ];
- for (let s of pics) {
- if (url.endsWith(s)) {
- return true;
- }
- }
- return false;
-}
-
-function isVideo(url) {
- const vids = [
- '.webm',
- '.ogv',
- 'mp4'
- ];
- for (let s of vids) {
- if (url.endsWith(s)) {
- return true;
- }
- }
- return false;
-}
-
-function linkify(text) {
- const urlRegex = /(\b(https?):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
- return text.replace(urlRegex, function(url) {
- if (isPic(url)) {
- return `<a href="${url}" target="_blank"><img style="vertical-align:top;display:inline-block;max-width:300px;max-height:300px" src="${url}"></a>`;
- }
- if (isVideo(url)) {
- return `<video style="vertical-align:top;display:inline-block;max-width:300px;max-height:300px" src="${url}" controls></video>`
- }
- return `<a href="${url}" target="_blank">${url}</a>`;
- });
-}
-
-function sethash(time) {
- let newurl = window.location.pathname + window.location.search + '#' + time;
- window.history.replaceState(null, '', newurl);
-}
-
-function insertTag(text) {
- let res = '';
- let lines = text.split('\n');
- let scrollToInserted = false;
- for (let line of lines) {
- let time = line.substring(1, 9);
- if (time == hashtag && time !== '') {
- if (!scrollToInserted) {
- res += '<span id="scrollTo"></span>';
- scrollToInserted = true;
- }
- res += '<a class="logline" href="#' + time + '" style="color:red;">' + line + '</span>\n';
- } else {
- res += '<a class="logline" href="#' + time + '">' + line + '</a>\n';
- }
- }
- hashtag = '';
- return res;
-}
-
-function logProcess(text) {
- text = ircAction(text);
- text = escapeHtml(text);
- text = linkify(text);
- text = insertTag(text);
- return text;
-}
-
-function loadLog() {
- let targetUrl = 'https://raye.mistivia.com/irclog/%23' + chan + '/' + year + '/' + month + '-' + day + '.txt';
- fetch(targetUrl)
- .then(response => {
- if (!response.ok) {
- throw new Error(`HTTP Error: ${response.status} ${response.statusText} for hash: ${urlHash}`);
- }
- return response.text();
- })
- .then(text => {
- logContainer.innerHTML = `<pre>${logProcess(text)}</pre>`;
- let scrollTo = document.getElementById('scrollTo');
- if (scrollTo) {
- scrollTo.scrollIntoView({behavior: 'smooth', block: 'center'});
- }
- })
- .catch(error => {
- console.error('Fetch error:', error);
- logContainer.innerHTML = '';
- });
-}
-
-loadLog();
-
-function onDateChange() {
- var dateInput = this;
- var dateValue = dateInput.value;
-
- if (dateValue && chan) {
- var dateParts = dateValue.split('-');
- var year = dateParts[0];
- var month = dateParts[1];
- var day = dateParts[2];
- let date = getDate(year, month, day);
- setDateState(date);
- loadLog();
- }
-}
-
-document.getElementById("log-date").addEventListener('change', onDateChange, false);
-
-function changeDate(days) {
- let currentDate = getDate(year, month, day);
- const currentDay = currentDate.getDate();
- currentDate.setDate(currentDay + days);
- setDateState(currentDate);
- dateInput.dispatchEvent(new Event('change'));
-}
-
-function setPreviousDay() {
- changeDate(-1);
- window.scrollTo(0, 0);
-}
-
-function setNextDay() {
- changeDate(1);
- window.scrollTo(0, 0);
-}
-
-function setToday() {
- let date = getDate('', '', '');
- setDateState(date);
- dateInput.dispatchEvent(new Event('change'));
-}
-
-function gotosearch() {
- window.open('../search/', '_blank');
-} \ No newline at end of file