From 5b55ca77ecd995b5ecc67d468c406abd7d505f39 Mon Sep 17 00:00:00 2001 From: MoonLeeeaf <150461955+MoonLeeeaf@users.noreply.github.com> Date: Sat, 25 May 2024 16:34:17 +0800 Subject: [PATCH] rebase --- .gitignore | 3 +- babel_lib/.gitignore | 1 - babel_lib/readme.md | 3 - build_cache/chat-message.css | 85 -- build_cache/index.css | 54 -- build_cache/index.html | 339 -------- build_cache/index.js | 1272 ------------------------------ build_cache/mdui-prettier.css | 53 -- build_cache/res/config.json | 4 - build_cache/res/default_head.png | Bin 7722 -> 0 bytes build_cache/res/icon.ico | Bin 29488 -> 0 bytes build_cache/res/license.txt | 13 - client_src.zip | Bin 53355 -> 0 bytes package-lock.json | 242 ++---- package.json | 4 +- run_build.sh | 11 - server_src/api-msgs.js | 2 +- server_src/hashlib.js | 6 +- webpack_lib/.gitignore | 1 - webpack_lib/readme.md | 3 - webpack_lib/webpack_config.js | 20 - 21 files changed, 91 insertions(+), 2025 deletions(-) delete mode 100644 babel_lib/.gitignore delete mode 100644 babel_lib/readme.md delete mode 100644 build_cache/chat-message.css delete mode 100644 build_cache/index.css delete mode 100644 build_cache/index.html delete mode 100644 build_cache/index.js delete mode 100644 build_cache/mdui-prettier.css delete mode 100644 build_cache/res/config.json delete mode 100644 build_cache/res/default_head.png delete mode 100644 build_cache/res/icon.ico delete mode 100644 build_cache/res/license.txt delete mode 100644 client_src.zip delete mode 100644 run_build.sh delete mode 100644 webpack_lib/.gitignore delete mode 100644 webpack_lib/readme.md delete mode 100644 webpack_lib/webpack_config.js diff --git a/.gitignore b/.gitignore index 089da2d..3fdc3ca 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ node_modules/ ling_chair_data/ ling_chair_config/ -ling_chair_http/ \ No newline at end of file +ling_chair_http/ +build_cache/ diff --git a/babel_lib/.gitignore b/babel_lib/.gitignore deleted file mode 100644 index c2658d7..0000000 --- a/babel_lib/.gitignore +++ /dev/null @@ -1 +0,0 @@ -node_modules/ diff --git a/babel_lib/readme.md b/babel_lib/readme.md deleted file mode 100644 index 29a3d98..0000000 --- a/babel_lib/readme.md +++ /dev/null @@ -1,3 +0,0 @@ -## Babel - -请从本仓库根目录的 .github 文件夹内找到对应的zip文件,并把 node_modules 解压在此,方可使用 diff --git a/build_cache/chat-message.css b/build_cache/chat-message.css deleted file mode 100644 index 46e0dcf..0000000 --- a/build_cache/chat-message.css +++ /dev/null @@ -1,85 +0,0 @@ -/* - * 铃之椅 - 把选择权还给用户, 让聊天权掌握在用户手中 - * Copyright 2024 满月叶 - * GitHub: https://github.com/MoonLeeeaf/LingChair-Web-Client - * 本项目使用 Apache 2.0 协议开源 - * - * Copyright 2024 MoonLeeeaf - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -.chat-message-right { - display: flex; - justify-content: flex-end; - align-items: flex-start; - margin: 13px; -} - -.chat-message-left { - display: flex; - justify-content: flex-start; - align-items: flex-start; - margin: 13px; -} - -.message-content { - margin-top: 13px; - margin-bottom: 7px; - margin-left: 5px; - margin-right: 5px; - max-width: 100%; - white-space: normal; - word-break: break-all; - font-size: medium; - /* 使用了 CardView 就不需要边框了 */ - /* border: 1.3px solid; */ - padding: 15px; - border-radius: 15px; - /* 添加圆角样式 */ - /* 设置外边距为 7px */ -} - -.message-content-with-nickname-right { - display: flex; - align-items: center; - margin: 7px; - flex-direction: column; - /* 垂直排列元素 */ - align-items: flex-end; - /* 左对齐元素 */ -} - -.message-content-with-nickname-left { - display: flex; - align-items: center; - margin: 7px; - flex-direction: column; - /* 垂直排列元素 */ - align-items: flex-start; - /* 左对齐元素 */ -} - -.chat-message-left .message-content-with-nickname-left .nickname, -.chat-message-right .message-content-with-nickname-right .nickname { - margin-right: 5px; - font-size: medium; - margin-top: 3px; -} - -.chat-message-left > .avatar, -.chat-message-right > .avatar { - width: 45px; - height: 45px; - border-radius: 50%; -} \ No newline at end of file diff --git a/build_cache/index.css b/build_cache/index.css deleted file mode 100644 index debc8f2..0000000 --- a/build_cache/index.css +++ /dev/null @@ -1,54 +0,0 @@ -/* - * 铃之椅 - 把选择权还给用户, 让聊天权掌握在用户手中 - * Copyright 2024 满月叶 - * GitHub: https://github.com/MoonLeeeaf/LingChair-Web-Client - * 本项目使用 Apache 2.0 协议开源 - * - * Copyright 2024 MoonLeeeaf - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - html, body { - max-height: 100%; - margin: 0; - padding: 0; - /* overflow: hidden; */ - /*font: initial;*/ -} -body { - margin: 0; - padding: 0; -} -.container { - display: flex; - flex-direction: column; - overflow: auto; -} -.content { - flex: 1; -} - -.menu-on-message { - margin-top: 60px; - z-index: 100; -} - -[n-id=pageChatSeesion]::after { - content: ""; - position: sticky; - bottom: 0; - display: block; - height: var(--pseudo-height); /* 设置伪元素的高度 */ - z-index: -1; /* 防止遮挡实际内容 */ - } diff --git a/build_cache/index.html b/build_cache/index.html deleted file mode 100644 index 8682440..0000000 --- a/build_cache/index.html +++ /dev/null @@ -1,339 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - 铃之椅 - - - - - - -
- -
- - - -
- - -
- - -
- - -
- - -
- -
- -
- -
-
-
- - - -
- - -
-
- 登录到 铃之椅 -
-
-
- cloud_circle - - -
-
- account_circle - - -
-
- lock - - -
- 注:使用非已知的服务提供商提供的服务器时, 请注意个人信息保护哦 o(。・ω・。)o -
-
- - -
-
-
- - -
-
-
- -
-
-
-
-
- -
-
- - - - -
-
- 修改昵称 -
-
-
- - -
-
-
- - -
-
- - -
-
- 新的好友请求 -
-
-
- - -
-
-
- -
-
- - -
-
- 添加好友/群 -
-
-
- - -
- -
-
- - -
-
- - -
-
- 设置 -
-
- -
-
- -
-
- -
- -
- - - - - - - - - - - - - \ No newline at end of file diff --git a/build_cache/index.js b/build_cache/index.js deleted file mode 100644 index 8c77924..0000000 --- a/build_cache/index.js +++ /dev/null @@ -1,1272 +0,0 @@ -"use strict"; - -function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } -function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, "catch": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; } -function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } -function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } -function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } } -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } -function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } -function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } -function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } -function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } -function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } -/* - * 铃之椅 - 把选择权还给用户, 让聊天权掌握在用户手中 - * Copyright 2024 满月叶 - * GitHub: https://github.com/MoonLeeeaf/LingChair-Web-Client - * 本项目使用 Apache 2.0 协议开源 - * - * Copyright 2024 MoonLeeeaf - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -var UrlArgs = new URL(location.href).searchParams; - -// https://www.ruanyifeng.com/blog/2021/09/detecting-mobile-browser.html -function isMobile() { - return 'ontouchstart' in document.documentElement; -} -function setOnRightClick(e, cb) { - if (!(e instanceof jQuery)) e = $(e); - var longPressTimer; - if (!cb) throw new Error("定义回调!!!!"); - e.on('contextmenu', function (e) { - e.preventDefault(); // 阻止默认右键菜单 - cb(); - }); - e.on('mousedown', function () { - longPressTimer = setTimeout(function () { - cb(); - }, 1000); - }); - e.on('mouseup', function () { - clearTimeout(longPressTimer); - }); -} -if (UrlArgs.get("debug")) { - var script = document.createElement('script'); - script.src = "//cdn.jsdelivr.net/npm/eruda"; - document.body.appendChild(script); - script.onload = function () { - return eruda.init(); - }; -} - -// 经常会因为这个指定ID为位置导致一些莫名BUG -if (location.href.includes("#")) location.replace(location.href.substring(0, location.href.indexOf("#"))); -var mdui_snackbar = mdui.snackbar; -mdui.snackbar = function (m) { - var t = m; - if (m instanceof Object) t = JSON.stringify(m); - mdui_snackbar(t); -}; -var checkEmpty = function checkEmpty(i) { - if (i instanceof Array) { - var _iterator = _createForOfIteratorHelper(i), - _step; - try { - for (_iterator.s(); !(_step = _iterator.n()).done;) { - var k = _step.value; - if (checkEmpty(k)) return true; - } - } catch (err) { - _iterator.e(err); - } finally { - _iterator.f(); - } - } - return i == null || "" === i || 0 === i; -}; -function escapeHTML(str) { - return str.replace(/[<>&"']/g, function (match) { - switch (match) { - case '<': - return '<'; - case '>': - return '>'; - case '&': - return '&'; - case '"': - return '"'; - case "'": - return '''; - default: - return match; - } - }); -} -var NData = /*#__PURE__*/function () { - function NData() { - _classCallCheck(this, NData); - } - return _createClass(NData, null, [{ - key: "mount", - value: function mount(node) { - // 便捷获得指定组件 - var es = node.querySelectorAll("[n-id]"); - var ls = {}; - es.forEach(function (i) { - return ls[$(i).attr("n-id")] = $(i); - }); - - // input 组件与 localStorage 绑定 - es = node.querySelectorAll("[n-input-ls]"); - es.forEach(function (e) { - var j = $(e); - j.val(localStorage.getItem(j.attr("n-input-ls"))); - j.blur(function () { - return localStorage.setItem(j.attr("n-input-ls"), j.val()); - }); - }); - return ls; - } - }]); -}(); // 快捷获取指定视图 -var viewBinding = NData.mount($("#app").get(0)); -$.ajax({ - url: "res/config.json", - dataType: "json", - success: function success(c) { - viewBinding.appTitle.text(c.appTitle); - if (!c.canChangeServer) { - viewBinding.dialogSignInServerLabel.hide(); - viewBinding.drawerChangeServer.hide(); - } - } -}); - -/* // Toolbar 快捷按钮绑定 -viewBinding.contactsRefresh.hide() -viewBinding.contactsAdd.hide() -viewBinding.tabChatList.on("show.mdui.tab", () => { - viewBinding.contactsRefresh.hide() - viewBinding.contactsAdd.hide() -}) -viewBinding.tabContacts.on("show.mdui.tab", () => { - viewBinding.contactsRefresh.show() - viewBinding.contactsAdd.show() -}) -viewBinding.tabChatSeesion.on("show.mdui.tab", () => { - viewBinding.contactsRefresh.hide() - viewBinding.contactsAdd.hide() -}) */ - -/* viewBinding.tabChatSeesion.hide() */ - -// 关于页面 -viewBinding.menuAbout.click(function () { - return mdui.alert('这是一个开源项目
作者: MoonLeeeaf
欢迎访问我们的项目主页', '关于 铃之椅', function () {}, { - confirmText: "关闭" - }); -}); -viewBinding.drawerChangeServer.click(function () { - mdui.prompt('输入服务器地址...(为空则使用当前页面地址)', function (value) { - localStorage.server = value; - mdui.snackbar("更新成功, 刷新页面生效"); - }, function () {}, { - confirmText: "确定", - cancelText: "取消" - }); -}); -viewBinding.drawerSignOut.click(function () { - mdui.confirm('确定要登出账号吗', function () { - User.signOutAndReload(); - }, function () {}, { - confirmText: "确定", - cancelText: "取消" - }); -}); -viewBinding.sendMsg.click(function (a) { - var text = viewBinding.inputMsg.val(); - if (text.trim() !== "") ChatMsgAdapter.send(text); -}); -viewBinding.inputMsg.keydown(function (e) { - if (e.ctrlKey && e.keyCode === 13) viewBinding.sendMsg.click(); -}); -viewBinding.dialogSignInPasswd.keydown(function (e) { - if (e.keyCode === 13) viewBinding.dialogSignInEnter.click(); -}); -viewBinding.switchNotifications.click(function (a) { - if ((localStorage.useNotifications == "true" || localStorage.useNotifications != null) && localStorage.useNotifications != "false") { - localStorage.useNotifications = "false"; - viewBinding.switchNotificationsIcon.text("notifications_off"); - } else { - localStorage.useNotifications = "true"; - viewBinding.switchNotificationsIcon.text("notifications"); - } -}); -if (localStorage.useNotifications == "true") viewBinding.switchNotificationsIcon.text("notifications"); - -// https://www.runoob.com/w3cnote/javascript-copy-clipboard.html -function copyText(t) { - var btn = viewBinding.textCopierBtn; - btn.attr("data-clipboard-text", t); - new ClipboardJS(btn.get(0)).on('success', function (e) { - e.clearSelection(); - }); - btn.click(); -} - -// https://zhuanlan.zhihu.com/p/162910462 -Date.prototype.format = function (tms, format) { - var tmd = new Date(tms); - /* - * 例子: format="YYYY-MM-dd hh:mm:ss"; - */ - var o = { - "M+": tmd.getMonth() + 1, - // month - "d+": tmd.getDate(), - // day - "h+": tmd.getHours(), - // hour - "m+": tmd.getMinutes(), - // minute - "s+": tmd.getSeconds(), - // second - "q+": Math.floor((tmd.getMonth() + 3) / 3), - // quarter - "S": tmd.getMilliseconds() - // millisecond - }; - if (/(y+)/.test(format)) { - format = format.replace(RegExp.$1, (tmd.getFullYear() + "").substr(4 - RegExp.$1.length)); - } - for (var k in o) { - if (new RegExp("(" + k + ")").test(format)) { - format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length)); - } - } - return format; -}; - -// new mdui.Drawer('#main-drawer').close() -var NickCache = /*#__PURE__*/function () { - function NickCache() { - _classCallCheck(this, NickCache); - } - return _createClass(NickCache, null, [{ - key: "getNick", - value: function () { - var _getNick = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(name) { - var _this = this; - return _regeneratorRuntime().wrap(function _callee$(_context) { - while (1) switch (_context.prev = _context.next) { - case 0: - _context.next = 2; - return new Promise(function (res, rej) { - // 这个this别摆着不放啊 不然两下就会去世 - var nick = _this.data[name]; - if (nick == null) client.emit("user.getNick", { - name: localStorage.userName - }, function (re) { - var nk = re.data != null ? re.data.nick : name; - if (nk == null) nk = name; - _this.data[name] = nk; - res(nk); - });else res(nick); - }); - case 2: - return _context.abrupt("return", _context.sent); - case 3: - case "end": - return _context.stop(); - } - }, _callee); - })); - function getNick(_x) { - return _getNick.apply(this, arguments); - } - return getNick; - }() - }]); -}(); // 既然已经有 Notification 了, 那用回中文也不过分吧 :) -_defineProperty(NickCache, "data", {}); -var 通知 = /*#__PURE__*/function () { - function 通知() { - _classCallCheck(this, 通知); - this.args = {}; - this.title = ""; - } - return _createClass(通知, [{ - key: "setId", - value: function setId(id) { - this.args.tag = id; - return this; - } - }, { - key: "setTitle", - value: function setTitle(t) { - this.title = t; - return this; - } - }, { - key: "setMessage", - value: function setMessage(m) { - this.args.body = m; - return this; - } - }, { - key: "setIcon", - value: function setIcon(i) { - this.args.icon = i; - return this; - } - }, { - key: "setImage", - value: function setImage(i) { - this.args.image = i; - return this; - } - }, { - key: "setData", - value: function setData(data) { - this.args.data = data; - } - }, { - key: "show", - value: function show(onclick /*, onclose*/) { - if (!通知.checkAvailable()) return; - if (localStorage.useNotifications !== "true") return; - var n = new Notification(this.title, this.args); - n.onclick = onclick == null ? function () { - return n.close(); - } : function (n) { - return onclick(n); - }; - // n.onclose = onclose - // n.close() - return n; - } - }], [{ - key: "checkAvailable", - value: function checkAvailable() { - return "Notification" in window; - } - }, { - key: "request", - value: function () { - var _request = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() { - return _regeneratorRuntime().wrap(function _callee2$(_context2) { - while (1) switch (_context2.prev = _context2.next) { - case 0: - if (this.checkAvailable()) { - _context2.next = 2; - break; - } - return _context2.abrupt("return", false); - case 2: - _context2.next = 4; - return Notification.requestPermission(); - case 4: - return _context2.abrupt("return", _context2.sent); - case 5: - case "end": - return _context2.stop(); - } - }, _callee2, this); - })); - function request() { - return _request.apply(this, arguments); - } - return request; - }() - }]); -}(); -var ContactsList = /*#__PURE__*/function () { - function ContactsList() { - _classCallCheck(this, ContactsList); - } - return _createClass(ContactsList, null, [{ - key: "reloadList", - value: function () { - var _reloadList = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4() { - return _regeneratorRuntime().wrap(function _callee4$(_context5) { - while (1) switch (_context5.prev = _context5.next) { - case 0: - _context5.t0 = client; - _context5.t1 = localStorage.userName; - _context5.next = 4; - return User.getAccessToken(); - case 4: - _context5.t2 = _context5.sent; - _context5.t3 = { - name: _context5.t1, - accessToken: _context5.t2 - }; - _context5.t4 = /*#__PURE__*/function () { - var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(re) { - var ls, _loop, index; - return _regeneratorRuntime().wrap(function _callee3$(_context4) { - while (1) switch (_context4.prev = _context4.next) { - case 0: - if (!(re.code !== 0)) { - _context4.next = 2; - break; - } - return _context4.abrupt("return", mdui.snackbar(re.msg)); - case 2: - viewBinding.contactsList.empty(); - ls = re.data.friends; - _loop = /*#__PURE__*/_regeneratorRuntime().mark(function _loop() { - var name, dick; - return _regeneratorRuntime().wrap(function _loop$(_context3) { - while (1) switch (_context3.prev = _context3.next) { - case 0: - name = ls[index]; - _context3.next = 3; - return NickCache.getNick(name); - case 3: - dick = _context3.sent; - /*client.emit("user.getNick", { name: localStorage.userName }, (re) => { - let nick = re.data == null ? re.data.nick : null - let name = ls[index]*/ - $($.parseHTML("
  • " + dick + "
  • ")).appendTo(viewBinding.contactsList).click(function () { - ChatMsgAdapter.switchTo(name, "single"); - }); - //}) - case 5: - case "end": - return _context3.stop(); - } - }, _loop); - }); - _context4.t0 = _regeneratorRuntime().keys(ls); - case 6: - if ((_context4.t1 = _context4.t0()).done) { - _context4.next = 11; - break; - } - index = _context4.t1.value; - return _context4.delegateYield(_loop(), "t2", 9); - case 9: - _context4.next = 6; - break; - case 11: - case "end": - return _context4.stop(); - } - }, _callee3); - })); - return function (_x2) { - return _ref.apply(this, arguments); - }; - }(); - _context5.t0.emit.call(_context5.t0, "user.getFriends", _context5.t3, _context5.t4); - case 8: - case "end": - return _context5.stop(); - } - }, _callee4); - })); - function reloadList() { - return _reloadList.apply(this, arguments); - } - return reloadList; - }() // 添加联系人,好友或者群聊 - }, { - key: "add", - value: function add(name, type) { - if (type == "single") {} - } - }, { - key: "openAddDialog", - value: function openAddDialog() { - new mdui.Dialog(viewBinding.dialogNewContact.get(0)).open(); - } - }]); -}(); // 第一次写前端的消息加载, 代码很乱, 还请原谅~ -// v0.7.0 大改UI 畏惧了 太庞大了 -var ChatPage = /*#__PURE__*/function () { - function ChatPage(name, type) { - _classCallCheck(this, ChatPage); - } - return _createClass(ChatPage, null, [{ - key: "switchTo", - value: function switchTo(name, type) { - if (!this.cached[name]) this.cached[name] = new ChatPage(name, type); - } - }]); -}(); -_defineProperty(ChatPage, "cached", {}); -var ChatMsgAdapter = /*#__PURE__*/function () { - function ChatMsgAdapter() { - _classCallCheck(this, ChatMsgAdapter); - } - return _createClass(ChatMsgAdapter, null, [{ - key: "switchTo", - value: // 切换聊天对象 - function () { - var _switchTo = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5(name, type) { - return _regeneratorRuntime().wrap(function _callee5$(_context6) { - while (1) switch (_context6.prev = _context6.next) { - case 0: - viewBinding.tabChatSeesion.show(); - _context6.t0 = viewBinding.tabChatSeesion; - _context6.next = 4; - return NickCache.getNick(name); - case 4: - _context6.t1 = _context6.sent; - _context6.t0.text.call(_context6.t0, _context6.t1); - viewBinding.tabChatSeesion.get(0).click(); - this.type = type; - this.target = name; - // this.msgList = [] - this.minMsgId = null; - viewBinding.pageChatSeesion.empty(); - _context6.next = 13; - return this.loadMore(); - case 13: - this.scrollToBottom(); - case 14: - case "end": - return _context6.stop(); - } - }, _callee5, this); - })); - function switchTo(_x3, _x4) { - return _switchTo.apply(this, arguments); - } - return switchTo; - }() // 发送消息 - }, { - key: "send", - value: function () { - var _send = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee7(msg) { - return _regeneratorRuntime().wrap(function _callee7$(_context8) { - while (1) switch (_context8.prev = _context8.next) { - case 0: - _context8.t0 = client; - _context8.t1 = localStorage.userName; - _context8.t2 = this.target; - _context8.t3 = msg; - _context8.next = 6; - return User.getAccessToken(); - case 6: - _context8.t4 = _context8.sent; - _context8.t5 = { - name: _context8.t1, - target: _context8.t2, - msg: _context8.t3, - accessToken: _context8.t4 - }; - _context8.t6 = /*#__PURE__*/function () { - var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee6(re) { - var i; - return _regeneratorRuntime().wrap(function _callee6$(_context7) { - while (1) switch (_context7.prev = _context7.next) { - case 0: - if (!(re.code !== 0)) { - _context7.next = 2; - break; - } - return _context7.abrupt("return", mdui.snackbar(re.msg)); - case 2: - viewBinding.inputMsg.val(""); - - // 微机课闲的没事干玩玩 发现私聊会多发一个(一个是本地的, 另一个是发送成功的) 选择一个关掉就好了 - // 这里我选择服务端不发送回调, 不然多设备同步会吵死 - // 错了 应该是客户端少发条才对 不然不能多设备同步 - if (!(ChatMsgAdapter.target !== localStorage.userName && ChatMsgAdapter.type === "single")) { - _context7.next = 8; - break; - } - i = ChatMsgAdapter.isAtBottom(); - _context7.next = 7; - return ChatMsgAdapter.addMsg(localStorage.userName, msg, re.data.time, re.data.msgid); - case 7: - if (i) ChatMsgAdapter.scrollToBottom(); - case 8: - case "end": - return _context7.stop(); - } - }, _callee6); - })); - return function (_x6) { - return _ref2.apply(this, arguments); - }; - }(); - _context8.t0.emit.call(_context8.t0, "user.sendSingleMsg", _context8.t5, _context8.t6); - case 10: - case "end": - return _context8.stop(); - } - }, _callee7, this); - })); - function send(_x5) { - return _send.apply(this, arguments); - } - return send; - }() - }, { - key: "getHistroy", - value: function () { - var _getHistroy = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee9(start, limit) { - var _this2 = this; - return _regeneratorRuntime().wrap(function _callee9$(_context10) { - while (1) switch (_context10.prev = _context10.next) { - case 0: - return _context10.abrupt("return", new Promise( /*#__PURE__*/function () { - var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee8(res, rej) { - return _regeneratorRuntime().wrap(function _callee8$(_context9) { - while (1) switch (_context9.prev = _context9.next) { - case 0: - _context9.t0 = client; - _context9.t1 = localStorage.userName; - _context9.t2 = _this2.target; - _context9.t3 = limit; - _context9.next = 6; - return User.getAccessToken(); - case 6: - _context9.t4 = _context9.sent; - _context9.t5 = start; - _context9.t6 = { - name: _context9.t1, - target: _context9.t2, - limit: _context9.t3, - accessToken: _context9.t4, - startId: _context9.t5 - }; - _context9.t7 = function (re) { - if (re.code !== 0) return mdui.snackbar(re.msg); - res(re.data.histroy); - }; - _context9.t0.emit.call(_context9.t0, "user.getSingleChatHistroy", _context9.t6, _context9.t7); - case 11: - case "end": - return _context9.stop(); - } - }, _callee8); - })); - return function (_x9, _x10) { - return _ref3.apply(this, arguments); - }; - }())); - case 1: - case "end": - return _context10.stop(); - } - }, _callee9); - })); - function getHistroy(_x7, _x8) { - return _getHistroy.apply(this, arguments); - } - return getHistroy; - }() - }, { - key: "loadMore", - value: function () { - var _loadMore = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee10(limit) { - var histroy, re, sc, index, i, e; - return _regeneratorRuntime().wrap(function _callee10$(_context11) { - while (1) switch (_context11.prev = _context11.next) { - case 0: - _context11.next = 2; - return this.getHistroy(this.minMsgId, limit == null ? 13 : limit); - case 2: - histroy = _context11.sent; - if (!(histroy.length == 0)) { - _context11.next = 5; - break; - } - return _context11.abrupt("return", mdui.snackbar("已经加载完了~")); - case 5: - re = this.minMsgId != null; - this.minMsgId = histroy[0].msgid - 1; - sc = 0; - if (re) histroy = histroy.reverse(); - _context11.t0 = _regeneratorRuntime().keys(histroy); - case 10: - if ((_context11.t1 = _context11.t0()).done) { - _context11.next = 19; - break; - } - index = _context11.t1.value; - i = histroy[index]; - _context11.next = 15; - return this.addMsg(i.name, i.msg, i.time, re, i.msgid); - case 15: - e = _context11.sent; - // 因为某些因素直接DEBUG到吐血 断点继续都不报错 原因不明 - sc = sc + (e == null ? 25 : e.get(0).offsetTop); - _context11.next = 10; - break; - case 19: - window.scrollBy({ - top: sc, - behavior: 'smooth' - }); - case 20: - case "end": - return _context11.stop(); - } - }, _callee10, this); - })); - function loadMore(_x11) { - return _loadMore.apply(this, arguments); - } - return loadMore; - }() - }, { - key: "addSystemMsg", - value: function addSystemMsg(m, re) { - var e; - if (re) - // 加到头部 - e = $($.parseHTML(m)).prependTo(viewBinding.pageChatSeesion);else - // 加到尾部 - e = $($.parseHTML(m)).appendTo(viewBinding.pageChatSeesion); - return e; - } - }, { - key: "isAtBottom", - value: function isAtBottom() { - var elementRect = viewBinding.pageChatSeesion.get(0).getBoundingClientRect(); - return elementRect.bottom <= window.innerHeight; - } - // 添加消息 返回消息的JQ对象 - // name: 用户id m: 消息 t: 时间戳 re: 默认加到尾部 msgid: 消息id - }, { - key: "addMsg", - value: function () { - var _addMsg = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee11(name, m, t, re, msgid) { - var nick, msg, temp, bn, e; - return _regeneratorRuntime().wrap(function _callee11$(_context12) { - while (1) switch (_context12.prev = _context12.next) { - case 0: - _context12.next = 2; - return NickCache.getNick(name); - case 2: - nick = _context12.sent; - // re.data == null ? name : re.data.nick - msg = escapeHTML(m); - if (name === localStorage.userName) temp = "
    \n
    \n " + nick + "\n
    \n " + msg + "\n
    \n
    \n \n
    ";else temp = "
    \n \n
    \n " + nick + "\n
    \n " + msg + "\n
    \n
    \n
    "; - bn = new Date(t).getMinutes(); - if (re) { - this.addSystemMsg(temp, re); - if (this.bbn != bn) { - e = this.addSystemMsg("
    " + new Date().format(t == null ? Date.parse("1000-1-1 00:00:00") : t, "yyyy年MM月dd日 hh:mm:ss") + "
    ", re); - this.time = bn; - } - } else { - if (this.bbn != bn) { - e = this.addSystemMsg("
    " + new Date().format(t == null ? Date.parse("1000-1-1 00:00:00") : t, "yyyy年MM月dd日 hh:mm:ss") + "
    ", re); - this.time = bn; - } - this.addSystemMsg(temp, re); - } - this.bbn = new Date(t).getMinutes(); - return _context12.abrupt("return", e); - case 9: - case "end": - return _context12.stop(); - } - }, _callee11, this); - })); - function addMsg(_x12, _x13, _x14, _x15, _x16) { - return _addMsg.apply(this, arguments); - } - return addMsg; - }() // 添加消息记录 作用在 UI 和 msgList - /* static async addMsgLocal(name, m, t, msgid) { - this.msgList.push({ - name: name, - msg: m, - msgid: msgid, - }) - this.addMsg(name, m, t) - } */ - // 从服务器加载一些聊天记录, limit默认=13 - }, { - key: "loadMsgs", - value: function () { - var _loadMsgs = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee12(limit) { - var histroy; - return _regeneratorRuntime().wrap(function _callee12$(_context13) { - while (1) switch (_context13.prev = _context13.next) { - case 0: - _context13.next = 2; - return this.getHistroy(this.msgList[0] == null ? null : this.msgList[0].msgid - 1, limit == null ? 13 : limit); - case 2: - histroy = _context13.sent; - this.msgList = histroy; - case 4: - case "end": - return _context13.stop(); - } - }, _callee12, this); - })); - function loadMsgs(_x17) { - return _loadMsgs.apply(this, arguments); - } - return loadMsgs; - }() - /* static async loadMsgsFromList(lst) { - for (let index in lst) { - let i = lst[index] - await this.addMsg(i.name, i.msg, i.time) - } - } */ - }, { - key: "scrollToBottom", - value: function scrollToBottom() { - // 吐了啊 原来这样就行了 我何必在子element去整啊 - viewBinding.chatPager.get(0).scrollBy({ - top: 1145141919810, - behavior: 'smooth' - }); - } - // 从本地加载 - /*static loadMsgsFromLocal(target) { - let data = localStorage["chat_msg_" + target] - if (data == null || data === "[]") - return [] - return JSON.parse(data) - } - // 把当前聊天记录储存到本地 - static saveToLocal() { - localStorage["chat_msg_" + this.target] = JSON.stringify(this.msgList) - }*/ - // 自动调整使输入框置底 CSS真tm靠不住啊 - }, { - key: "initInputResizer", - value: function initInputResizer() { - var _this3 = this; - // 实验表面移动端切出输入法时会触发1-2次resize事件 - // 可以利用这个特性来实现自动滚动文本 - var resize = function resize() { - viewBinding.pageChatSeesion.height(window.innerHeight - viewBinding.inputToolbar.height() - $("header.mdui-appbar").height() - viewBinding.chatTab.height() - 50); - var ledi = _this3.resizeDick - window.innerHeight; - if (isMobile()) viewBinding.chatPager.get(0).scrollBy({ - // 5.19晚10:56分调配出来的秘方 - // < 0 为窗口变大 - // cnm的,调试十万次就你tm检测不到底是吧,就你语法天天错误是吧 - // 欺负我现在用不了电脑 - top: -ledi * (ledi < 0 && _this3.isAtBottom() ? 6 : -1), - // (ledi < 0 ? 6 : 6), - behavior: 'smooth' - }); - _this3.resizeDick = window.innerHeight; - }; - window.addEventListener("resize", resize); - resize(); - } - // 为消息设置长按/右键事件 - }, { - key: "initMsgElementEvents", - value: function initMsgElementEvents() { - var listeners = {}; - var menu; - var callback = function callback(e) { - if (menu) menu.close(); - // 从 span 切到 div - if (e.get(0).tagName.toLowerCase() != "div") e = $(e.get(0).parentNode); - // 从 消息框 切到 更上层 - e = $(e.get(0).parentNode); - var menuHtml = $.parseHTML(""); - var $menu = $(menuHtml); - e.before($menu); - menu = new mdui.Menu(e.get(0), menuHtml, { - position: "bottom", - align: "right" - // covered: true, - }); - $menu.on('closed.mdui.menu', function () { - $(menuHtml).remove(); - }); - menu.open(); - }; - viewBinding.pageChatSeesion.on('contextmenu mousedown mouseup', '.message-content', function (e) { - var eventType = e.type; - var self = $(e.target); - - // 根据事件类型执行不同操作 - switch (eventType) { - case 'contextmenu': - e.preventDefault(); // 阻止默认行为 - callback(self); - break; - case 'mousedown': - listeners[self + ""] = setTimeout(function () { - callback(self); - }, 300); // 300颗够吗 应该够吧 - break; - case 'mouseup': - clearTimeout(listeners[self + ""]); - listeners[self + ""] = null; - break; - } - }); - } - }]); -}(); -_defineProperty(ChatMsgAdapter, "type", void 0); -_defineProperty(ChatMsgAdapter, "target", void 0); -// static msgList -_defineProperty(ChatMsgAdapter, "minMsgId", void 0); -_defineProperty(ChatMsgAdapter, "time", void 0); -_defineProperty(ChatMsgAdapter, "bbn", void 0); -_defineProperty(ChatMsgAdapter, "resizeDick", void 0); -var Hash = /*#__PURE__*/function () { - function Hash() { - _classCallCheck(this, Hash); - } - return _createClass(Hash, null, [{ - key: "md5", - value: function md5(data) { - return CryptoJS.MD5(data).toString(CryptoJS.enc.Base64); - } - }, { - key: "sha256", - value: function sha256(data) { - return CryptoJS.SHA256(data).toString(CryptoJS.enc.Base64); - } - }]); -}(); -var User = /*#__PURE__*/function () { - function User() { - _classCallCheck(this, User); - } - return _createClass(User, null, [{ - key: "signIn", - value: - // 登录账号 通过回调函数返回刷新令牌 - function signIn(name, passwd, cb) { - client.emit("user.signIn", { - name: name, - passwd: Hash.sha256(passwd) + Hash.md5(passwd) - }, function (re) { - if (re.code !== 0) return mdui.snackbar(re.msg); - cb(re); - }); - } - }, { - key: "signUp", - value: function signUp(name, passwd, cb) { - client.emit("user.signUp", { - name: name, - passwd: Hash.sha256(passwd) + Hash.md5(passwd) - }, function (re) { - if (re.code !== 0) return mdui.snackbar(re.msg); - cb(re); - }); - } - // 为登录对话框编写的 - }, { - key: "signInWithDialog", - value: function signInWithDialog(name, passwd) { - this.signIn(name, passwd, function (re) { - localStorage.refreshToken = re.data.refreshToken; - localStorage.isSignIn = true; - location.reload(); - }); - } - }, { - key: "setNick", - value: function () { - var _setNick = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee13(nick, cb) { - return _regeneratorRuntime().wrap(function _callee13$(_context14) { - while (1) switch (_context14.prev = _context14.next) { - case 0: - _context14.t0 = client; - _context14.t1 = localStorage.userName; - _context14.next = 4; - return this.getAccessToken(); - case 4: - _context14.t2 = _context14.sent; - _context14.t3 = nick; - _context14.t4 = { - name: _context14.t1, - accessToken: _context14.t2, - nick: _context14.t3 - }; - _context14.t5 = function (re) { - if (re.code !== 0) return mdui.snackbar(re.msg); - if (cb) cb(); - }; - _context14.t0.emit.call(_context14.t0, "user.setNick", _context14.t4, _context14.t5); - case 9: - case "end": - return _context14.stop(); - } - }, _callee13, this); - })); - function setNick(_x18, _x19) { - return _setNick.apply(this, arguments); - } - return setNick; - }() // 获取头像链接 - }, { - key: "getUserHeadUrl", - value: function getUserHeadUrl(name) { - return client.io.uri + "/users_head/" + name + ".png"; - } - }, { - key: "getAccessToken", - value: function () { - var _getAccessToken = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee14(er) { - return _regeneratorRuntime().wrap(function _callee14$(_context15) { - while (1) switch (_context15.prev = _context15.next) { - case 0: - if (!(this.myAccessToken == null)) { - _context15.next = 4; - break; - } - _context15.next = 3; - return new Promise(function (res) { - client.emit("user.getAccessToken", { - name: localStorage.userName, - refreshToken: localStorage.refreshToken - }, function (r) { - if (r.data != null) res(r.data.accessToken); - if (er != null) er(r.msg); - }); - }); - case 3: - this.myAccessToken = _context15.sent; - case 4: - return _context15.abrupt("return", this.myAccessToken); - case 5: - case "end": - return _context15.stop(); - } - }, _callee14, this); - })); - function getAccessToken(_x20) { - return _getAccessToken.apply(this, arguments); - } - return getAccessToken; - }() - }, { - key: "uploadHeadImage", - value: function uploadHeadImage() { - viewBinding.uploadHeadImage.click(); - } - }, { - key: "uploadHeadImageCallback", - value: function () { - var _uploadHeadImageCallback = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee15(self) { - var img; - return _regeneratorRuntime().wrap(function _callee15$(_context16) { - while (1) switch (_context16.prev = _context16.next) { - case 0: - img = self.files[0]; - _context16.t0 = client; - _context16.t1 = localStorage.userName; - _context16.next = 5; - return User.getAccessToken(); - case 5: - _context16.t2 = _context16.sent; - _context16.t3 = img; - _context16.t4 = { - name: _context16.t1, - accessToken: _context16.t2, - headImage: _context16.t3 - }; - _context16.t5 = function (re) { - return mdui.snackbar(re.msg); - }; - _context16.t0.emit.call(_context16.t0, "user.setHeadImage", _context16.t4, _context16.t5); - case 10: - case "end": - return _context16.stop(); - } - }, _callee15); - })); - function uploadHeadImageCallback(_x21) { - return _uploadHeadImageCallback.apply(this, arguments); - } - return uploadHeadImageCallback; - }() - }, { - key: "auth", - value: function auth() { - client.emit("user.auth", { - name: localStorage.userName, - refreshToken: localStorage.refreshToken - }, function (re) { - if (re.code !== 0) { - console.error(re); - if (!re.invalid) return mdui.snackbar("验证用户失败!"); - mdui.alert("账号刷新令牌已过期, 请重新登录哦", "提示", function () { - return User.signOutAndReload(); - }, { - confirmText: "确定", - closeOnConfirm: false, - closeOnEsc: false, - modal: true - }); - } - }); - } - }, { - key: "signOutAndReload", - value: function signOutAndReload() { - localStorage.refreshToken = ""; - localStorage.isSignIn = false; - setTimeout(function () { - return location.reload(); - }, 300); - } - }, { - key: "registerCallback", - value: function registerCallback() { - client.on("msg.receive", /*#__PURE__*/function () { - var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee17(a) { - var i, n; - return _regeneratorRuntime().wrap(function _callee17$(_context18) { - while (1) switch (_context18.prev = _context18.next) { - case 0: - if (!checkEmpty([a.target, a.msg, a.type])) { - _context18.next = 2; - break; - } - return _context18.abrupt("return"); - case 2: - if (!(ChatMsgAdapter.target === a.target && ChatMsgAdapter.type === a.type)) { - _context18.next = 7; - break; - } - i = ChatMsgAdapter.isAtBottom(); - _context18.next = 6; - return ChatMsgAdapter.addMsg(a.target, a.msg.msg, a.msg.time); - case 6: - if (i) ChatMsgAdapter.scrollToBottom(); - case 7: - _context18.t0 = new 通知(); - _context18.next = 10; - return NickCache.getNick(a.target); - case 10: - _context18.t1 = _context18.sent; - _context18.t2 = "新消息 - " + _context18.t1; - n = _context18.t0.setTitle.call(_context18.t0, _context18.t2).setMessage(a.msg.msg).setIcon(User.getUserHeadUrl(a.target)).show( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee16() { - return _regeneratorRuntime().wrap(function _callee16$(_context17) { - while (1) switch (_context17.prev = _context17.next) { - case 0: - _context17.next = 2; - return ChatMsgAdapter.switchTo(a.target, a.type); - case 2: - location.replace("#msgid_" + a.msg.msgid); - n.close(); - case 4: - case "end": - return _context17.stop(); - } - }, _callee16); - }))); - case 13: - case "end": - return _context18.stop(); - } - }, _callee17); - })); - return function (_x22) { - return _ref4.apply(this, arguments); - }; - }()); - } - }, { - key: "openProfileDialog", - value: function () { - var _openProfileDialog = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee18(name) { - return _regeneratorRuntime().wrap(function _callee18$(_context19) { - while (1) switch (_context19.prev = _context19.next) { - case 0: - viewBinding.dialogProfileHead.attr("src", User.getUserHeadUrl(name)); - _context19.t0 = viewBinding.dialogProfileNick; - _context19.next = 4; - return NickCache.getNick(name); - case 4: - _context19.t1 = _context19.sent; - _context19.t0.text.call(_context19.t0, _context19.t1); - new mdui.Dialog(viewBinding.dialogProfile).open(); - case 7: - case "end": - return _context19.stop(); - } - }, _callee18); - })); - function openProfileDialog(_x23) { - return _openProfileDialog.apply(this, arguments); - } - return openProfileDialog; - }() - }]); -}(); // 没有刷新令牌需要重新登录 或者初始化 -_defineProperty(User, "myAccessToken", void 0); -if (!localStorage.refreshToken || localStorage.refreshToken === "") localStorage.isSignIn = false; -var client; -function setUpClient(server) { - if (server && server !== "") client = new io(server, { - auth: { - name: localStorage.isSignIn === "false" ? null : localStorage.userName - } - });else client = new io({ - auth: { - name: localStorage.isSignIn === "false" ? null : localStorage.userName - } - }); - client.on("connect", function () { - User.auth(); - }); -} -if (!localStorage.server || localStorage.server === "") setUpClient();else setUpClient(localStorage.server); - -// 登录到账号 -var dialogSignIn; -// 谨防 localStorage 字符串数据大坑 -if (localStorage.isSignIn == "false") dialogSignIn = new mdui.Dialog(viewBinding.dialogSignIn.get(0), { - modal: true, - closeOnEsc: false, - history: false -}).open();else { - _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee19() { - return _regeneratorRuntime().wrap(function _callee19$(_context20) { - while (1) switch (_context20.prev = _context20.next) { - case 0: - _context20.t0 = viewBinding.userNick; - _context20.next = 3; - return NickCache.getNick(localStorage.userName); - case 3: - _context20.t1 = _context20.sent; - return _context20.abrupt("return", _context20.t0.text.call(_context20.t0, _context20.t1)); - case 5: - case "end": - return _context20.stop(); - } - }, _callee19); - }))(); - var hello; - var nowHour = new Date().getHours(); - if (nowHour >= 6 && nowHour <= 11) hello = "早安";else if (nowHour == 12) hello = "中午好";else if (nowHour >= 13 && nowHour <= 18) hello = "下午好";else if (nowHour >= 19 && nowHour < 22) hello = "晚上好";else hello = "晚安"; - viewBinding.helloText.text(hello); - viewBinding.userHead.attr("src", User.getUserHeadUrl(localStorage.userName)); - ContactsList.reloadList(); - User.registerCallback(); -} - -// 感谢AI的力量 -Stickyfill.add($("*").filter(function (a, b) { - return $(b).css('position') === 'sticky'; -})); -ChatMsgAdapter.initMsgElementEvents(); -ChatMsgAdapter.initInputResizer(); -function refreshAll() { - ContactsList.reloadList(); - delete NickCache.data; - NickCache.data = {}; -} \ No newline at end of file diff --git a/build_cache/mdui-prettier.css b/build_cache/mdui-prettier.css deleted file mode 100644 index 4b86b3b..0000000 --- a/build_cache/mdui-prettier.css +++ /dev/null @@ -1,53 +0,0 @@ -/* - * ©2024 满月叶 - * GitHub: MoonLeeeaf - * 是 UI 美化,好耶! - */ - -/* 美化UI */ - -body { - font-family: -apple-system, system-ui, -webkit-system-font; -} -.mdui-dialog { - border-radius: 23px; -} -.mdui-menu { - border-radius: 10px; -} -.mdui-menu-item > a { - padding-right: 3px; -} -.mdui-btn:not(.mdui-btn-icon, .mdui-dialog-actions button, .mdui-dialog-actions a) { - padding-left: 20px; - padding-right: 20px; - height: 40px; - border-radius: 10px; -} -.mdui-dialog-actions a, -.mdui-dialog-actions button { - padding-left: 20px; - padding-right: 20px; - height: 40px; - border-radius: 40px; -} -.mdui-select-open { - border-radius: 10px; -} -@media not screen and (min-width: 768px) { - .mdui-snackbar { - border-radius: 10px; - } -} - -/* 配色方案 */ - -.mdui-theme-color-auto { - background-color: #fff; -} - -@media (prefers-color-scheme: dark) { - .mdui-theme-color-auto { - background-color: #303030; - } -} diff --git a/build_cache/res/config.json b/build_cache/res/config.json deleted file mode 100644 index d8ada1e..0000000 --- a/build_cache/res/config.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "appTitle": "", - "canChangeServer": true -} \ No newline at end of file diff --git a/build_cache/res/default_head.png b/build_cache/res/default_head.png deleted file mode 100644 index 4f6f226fef17df30635ce72b79b0fd7c6bda4cfa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7722 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

    x>t0*LRBWY;mk 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 vq1gU+p{xAP=x;yWi;#aCLH= 0.8" } }, "node_modules/call-bind": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -119,8 +116,7 @@ }, "node_modules/content-disposition": { "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" }, @@ -130,14 +126,13 @@ }, "node_modules/content-type": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/cookie": { - "version": "0.4.2", + "version": "0.6.0", "license": "MIT", "engines": { "node": ">= 0.6" @@ -145,8 +140,7 @@ }, "node_modules/cookie-signature": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + "license": "MIT" }, "node_modules/cors": { "version": "2.8.5", @@ -176,8 +170,7 @@ }, "node_modules/define-data-property": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -192,16 +185,14 @@ }, "node_modules/depd": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/destroy": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", "engines": { "node": ">= 0.8", "npm": "1.2.8000 || >= 1.4.16" @@ -209,13 +200,11 @@ }, "node_modules/ee-first": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + "license": "MIT" }, "node_modules/encodeurl": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -246,10 +235,16 @@ "node": ">=10.0.0" } }, + "node_modules/engine.io/node_modules/cookie": { + "version": "0.4.2", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/es-define-property": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.4" }, @@ -259,21 +254,18 @@ }, "node_modules/es-errors": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/escape-html": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + "license": "MIT" }, "node_modules/etag": { "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -319,31 +311,20 @@ "node": ">= 0.10.0" } }, - "node_modules/express/node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/express/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/express/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "license": "MIT" }, "node_modules/finalhandler": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "license": "MIT", "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", @@ -359,45 +340,39 @@ }, "node_modules/finalhandler/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "license": "MIT" }, "node_modules/forwarded": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/fresh": { "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/function-bind": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/get-intrinsic": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", @@ -414,8 +389,7 @@ }, "node_modules/gopd": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "license": "MIT", "dependencies": { "get-intrinsic": "^1.1.3" }, @@ -425,8 +399,7 @@ }, "node_modules/has-property-descriptors": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" }, @@ -436,8 +409,7 @@ }, "node_modules/has-proto": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -447,8 +419,7 @@ }, "node_modules/has-symbols": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -458,8 +429,7 @@ }, "node_modules/hasown": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -469,8 +439,7 @@ }, "node_modules/http-errors": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", @@ -484,8 +453,7 @@ }, "node_modules/iconv-lite": { "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -495,50 +463,41 @@ }, "node_modules/inherits": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "license": "ISC" }, "node_modules/ipaddr.js": { "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", "engines": { "node": ">= 0.10" } }, "node_modules/media-typer": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/merge-descriptors": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + "license": "MIT" }, "node_modules/methods": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/mime": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-4.0.1.tgz", - "integrity": "sha512-5lZ5tyrIfliMXzFtkYyekWbtRXObT9OWa8IwQ5uxTBDHucNNwniRqo0yInflj+iYi5CBa6qxadGzGarDfuEOxA==", - "funding": [ - "https://github.com/sponsors/broofa" - ], + "version": "1.6.0", + "license": "MIT", "bin": { - "mime": "bin/cli.js" + "mime": "cli.js" }, "engines": { - "node": ">=16" + "node": ">=4" } }, "node_modules/mime-db": { @@ -578,16 +537,14 @@ }, "node_modules/object-inspect": { "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/on-finished": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", "dependencies": { "ee-first": "1.1.1" }, @@ -597,21 +554,18 @@ }, "node_modules/parseurl": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/path-to-regexp": { "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + "license": "MIT" }, "node_modules/proxy-addr": { "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" @@ -622,8 +576,7 @@ }, "node_modules/qs": { "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.4" }, @@ -636,16 +589,14 @@ }, "node_modules/range-parser": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/raw-body": { "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "license": "MIT", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -658,8 +609,6 @@ }, "node_modules/safe-buffer": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "funding": [ { "type": "github", @@ -673,17 +622,16 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/safer-buffer": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "license": "MIT" }, "node_modules/send": { "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "license": "MIT", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", @@ -705,37 +653,22 @@ }, "node_modules/send/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/send/node_modules/debug/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/send/node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } + "license": "MIT" }, "node_modules/send/node_modules/ms": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "license": "MIT" }, "node_modules/serve-static": { "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "license": "MIT", "dependencies": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", @@ -748,8 +681,7 @@ }, "node_modules/set-function-length": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -764,13 +696,11 @@ }, "node_modules/setprototypeof": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + "license": "ISC" }, "node_modules/side-channel": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -786,7 +716,8 @@ }, "node_modules/socket.io": { "version": "4.7.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.5.tgz", + "integrity": "sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA==", "dependencies": { "accepts": "~1.3.4", "base64id": "~2.0.0", @@ -821,24 +752,21 @@ }, "node_modules/statuses": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/toidentifier": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", "engines": { "node": ">=0.6" } }, "node_modules/type-is": { "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" @@ -853,16 +781,14 @@ }, "node_modules/unpipe": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/utils-merge": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", "engines": { "node": ">= 0.4.0" } diff --git a/package.json b/package.json index be99eaa..2785593 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "lingchair", "description": "A simple, lightweight and powerful Instant Messaging application.", - "version": "0.6.1", + "version": "0.7.0", "license": "Apache License 2.0", "author": { "name": "MoonLeeeaf", @@ -11,7 +11,7 @@ "start": "node ./server_src/main.js" }, "dependencies": { - "mime": "^4.0.1", + "express": "^4.19.2", "socket.io": "^4.7.5" }, "type": "commonjs" diff --git a/run_build.sh b/run_build.sh deleted file mode 100644 index 578e89a..0000000 --- a/run_build.sh +++ /dev/null @@ -1,11 +0,0 @@ -# 复制资源文件,这些文件不需要编译 -mkdir -p ling_chair_http -cp -r client_src/* build_cache/ - -# 向前兼容脚本 -cd babel_lib -node node_modules/@babel/cli/bin/babel ../client_src --out-dir ../build_cache --presets=@babel/env - -# 打包以减小负载 -cd ../webpack_lib -node node_modules/webpack-cli/bin/cli.js --config webpack_config.js diff --git a/server_src/api-msgs.js b/server_src/api-msgs.js index b196304..27ecf81 100644 --- a/server_src/api-msgs.js +++ b/server_src/api-msgs.js @@ -12,7 +12,7 @@ const users = require("./api-users") let getSameHashedValue = (a, b) => { let _a = [hash.md5(a) + hash.sha256(a), hash.md5(b) + hash.sha256(b)].sort() let [_1, _2] = _a - return hash.sha256hex(hash.sha256hex(_1) + hash.sha256hex(_2)) + return hash.sha256(hash.sha256(_1) + hash.sha256(_2)) } let getSingleChatDir = (a, b) => { diff --git a/server_src/hashlib.js b/server_src/hashlib.js index 83a6350..daffdbc 100644 --- a/server_src/hashlib.js +++ b/server_src/hashlib.js @@ -7,10 +7,8 @@ const crypto = require("crypto") let apis = { - sha256: (data) => crypto.createHash("sha256").update(data).digest("base64"), - md5: (data) => crypto.createHash("md5").update(data).digest("base64"), - sha256hex: (data) => crypto.createHash("sha256").update(data).digest("hex"), - md5hex: (data) => crypto.createHash("md5").update(data).digest("hex"), + sha256: (data) => crypto.createHash("sha256").update(data).digest("hex"), + md5: (data) => crypto.createHash("md5").update(data).digest("hex"), } module.exports = apis diff --git a/webpack_lib/.gitignore b/webpack_lib/.gitignore deleted file mode 100644 index c2658d7..0000000 --- a/webpack_lib/.gitignore +++ /dev/null @@ -1 +0,0 @@ -node_modules/ diff --git a/webpack_lib/readme.md b/webpack_lib/readme.md deleted file mode 100644 index f355d2b..0000000 --- a/webpack_lib/readme.md +++ /dev/null @@ -1,3 +0,0 @@ -## Webpack - -请从本仓库根目录的 .github 文件夹内找到对应的zip文件,并把 node_modules 解压在此,方可使用 diff --git a/webpack_lib/webpack_config.js b/webpack_lib/webpack_config.js deleted file mode 100644 index 30b20f9..0000000 --- a/webpack_lib/webpack_config.js +++ /dev/null @@ -1,20 +0,0 @@ -const path = require('path') -const { BannerPlugin } = require('webpack') -const HtmlWebpackPlugin = require('html-webpack-plugin') -const MiniCssExtractPlugin = require('mini-css-extract-plugin') - -module.exports = { - entry: '../build_cache/index.js', - output: { - filename: 'index.js', - path: path.resolve(__dirname, '../ling_chair_http'), - }, - module: { - rules: [ - { - test: /\.css$/i, - use: ['style-loader', 'css-loader'], - }, - ], - }, -}