Last active 1697449172

https://relay.hashi.icu

index.html Raw
1<!DOCTYPE html>
2<html>
3<head>
4 <meta charset="UTF-8">
5 <title>橋中继 / Hashi Relay</title>
6 <link rel="icon" type="image/png" href="https://img.yateam.cc/img/2023/10/11/hashid59ff7816f045287ad29011a2a630e77.png">
7 <script src="https://unpkg.com/mdui@1.0.2/dist/js/mdui.min.js"></script>
8 <link rel="stylesheet" href="https://unpkg.com/mdui@1.0.2/dist/css/mdui.min.css" />
9 <style>
10 html, body {
11 height: 100%;
12 margin: 0;
13 padding: 0;
14 }
15 .global {
16 height: 100%;
17 width: 100%;
18 background-image: url("https://www.loliapi.com/acg/");
19 background-repeat: no-repeat;
20 background-position: center;
21 background-size: cover;
22 }
23 .overlay {
24 position: absolute;
25 top: 0;
26 left: 0;
27 width: 100%;
28 height: 100%;
29 transition: background-color 0.5s ease;
30 }
31
32 .overlay.light-mode {
33 background-color: rgba(255, 255, 255, 0.6);
34 color: black;
35 }
36
37 .overlay.dark-mode {
38 background-color: rgba(0, 0, 0, 0.6);
39 color: white;
40 }
41 </style>
42 <script>
43 window.addEventListener('load', function() {
44 var spinner = document.querySelector('.mdui-spinner');
45 spinner.style.display = 'none';
46 });
47 function setThemeMode() {
48 var overlay = document.querySelector('.overlay');
49 var currentMode = overlay.classList.contains('light-mode') ? 'light' : 'dark';
50
51 var date = new Date();
52 var hours = date.getHours();
53
54 if ((hours >= 18 || hours < 6) && currentMode !== 'dark') {
55 overlay.classList.remove('light-mode');
56 overlay.classList.add('dark-mode');
57 } else if ((hours >= 6 && hours < 18) && currentMode !== 'light') {
58 overlay.classList.remove('dark-mode');
59 overlay.classList.add('light-mode');
60 }
61 }
62 </script>
63</head>
64<body>
65 <div class="global">
66 <div id="ol-change" class="overlay light-mode mdui-theme-layout-auto">
67 <div class="mdui-appbar mdui-shadow-10 mdui-hoverable mdui-ripple">
68 <div class="mdui-toolbar mdui-theme-layout-auto">
69 <a href="#" class="mdui-typo-title mdui-center">Hashi Relay</a>
70 </div>
71 </div>
72 <div class="mdui-spinner mdui-spinner-colorful"></div>
73 <div class="container p-toolbar mdui-container">
74 <center><h1 class="title mdui-text-color-theme">橋中继 / Hashi Relay</h1></center>
75 <h2 class="title mdui-text-color-theme">关于 / About</h2>
76 <div class="intro mdui-typo">
77 <p>欢迎来自Fediverse的好朋友们!愿我们能借由Fediverse实现真正的世界范围内的友好交流!</p>
78 <p>Welcome good friends from Fediverse! May we use the Fediverse to realize a truly world-wide friendly exchange!</p>
79 <br />
80 <ul>
81 <li>
82 <p>对于使用Mastodon,Misskey等兼容中继协议的平台的朋友们,您可以使用这个链接:<span class="sel" title="点击复制">https://relay.hashi.icu/inbox</span></p>
83 <p>For those of you using Mastodon, Misskey, and other platforms that are compatible with the relay protocol, you can use this link:<span class="sel" title="Copy">https://relay.hashi.icu/inbox</span></p>
84 </li>
85 <br />
86 <li>
87 <p>对于暂时没有支持中继协议的朋友们,您可以关注这位用户:<span class="sel" title="点击复制">https://relay.hashi.icu/actor</span></p>
88 <p>For those of you who don't have support for the relay protocol at the moment, you can follow this user:<span class="sel" title="Copy">https://relay.hashi.icu/actor</span></p>
89 </li>
90 </ul>
91 <br />
92 <p>如果有什么问题,欢迎联系<a href="https://hi.hashi.icu/@MomentQYC" target="_blank">@MomentQYC</a>。</p>
93 <p>If you have any questions, feel free to contact <a href="https://hi.hashi.icu/@MomentQYC" target="_blank">@MomentQYC</a>.</p>
94 <br />
95 <p>目前橋中继采用自动通过申请的策略,一般情况下不会含有任何限制,所以如果您由于一些奇怪的原因未成功加入时,可以试试退出再加入。让我们一同连接来自世界各地的朋友们!</p>
96 <p>Currently Hashi Relay uses an automatic pass-through policy and generally does not contain any restrictions, so if for some strange reason you don't succeed in joining, try exiting and joining again. Let's connect with friends from all over the world!</p>
97 <h2 class="title mdui-text-color-theme">总计 / Total <span id="stats-server-count">...</span></h2>
98 <button class="mdui-btn mdui-ripple mdui-color-theme-accent mdui-center" mdui-dialog="{target: '#showInst'}">显示 / Show</button>
99 <br />
100 <div class="mdui-dialog" id="showInst">
101 <div class="mdui-dialog-title">列表(每5分钟刷新一次) / List (refreshed every 5 minutes)</div>
102 <div class="mdui-dialog-content"><ul id="stats-server-list"></ul></div>
103 <div class="mdui-dialog-actions">
104 <button class="mdui-btn mdui-ripple" mdui-dialog-confirm>关闭 / Close</button>
105 </div>
106 </div>
107 <small></small>
108 </div>
109 </div>
110 <div class="mdui-bottom-nav mdui-color-theme mdui-shadow-10 mdui-hoverable">
111 <a href="https://github.com/yukimochi/Activity-Relay" class="mdui-ripple">Relay Github</a>
112 <a href="https://nya.codes/nyaone/relay" class="mdui-ripple">Inspiration</a>
113 <a href="https://codeproxy.net/MomentQYC/3261073c99e24d808bd161f618e693b6" class="mdui-ripple">Source Code</a>
114 <a href="#" class="mdui-ripple">non-SLA</a>
115 </div>
116 </div>
117 </div>
118 <script>
119 const loadStats = () => {
120 fetch('./domains.txt')
121 .then((res) => {
122 return res.text();
123 })
124 .then((data) => {
125 // Collect data
126 const instances = data.split('\n').filter(line => line.startsWith("[*]")).map(line => line.replace("[*] ", ""));
127
128 // Update DOM
129 const dataCount = document.getElementById('stats-server-count');
130 dataCount.innerText = instances.length;
131 const dataList = document.getElementById('stats-server-list');
132 let inH = '';
133 instances.forEach((domain) => {
134 inH += `<li><a target="_blank" href="https://${domain}">${domain}</a></li>`;
135 });
136 dataList.innerHTML = inH;
137 });
138 };
139
140 const initSel = () => {
141 document.querySelectorAll(".sel").forEach(el => {
142 el.addEventListener('click', () => {
143 navigator.clipboard.writeText(el.innerText);
144 alert('Copied~');
145 });
146 });
147 }
148
149 window.onload = () => {
150 loadStats();
151 initSel();
152 };
153 setInterval(setThemeMode, 5000);
154 </script>
155</body>
156</html>