PageSourceSearch

https://disue.com/links

html disue.com collected 2026-10-06 13:14:44 UTC 67,832 bytes, 1,763 lines download raw bytes

1<!doctype html>
2<html
3  lang="en"
4>
5  <head>
6    <title>友链-Disue · 迪素</title>
7
8    <meta charset="utf-8" />
9    <meta name="renderer" content="webkit" />
10    
11    <meta name="format-detection" content="telephone=no" />
12    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
13    <meta http-equiv="Cache-Control" content="no-siteapp" />
14    <meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1" />
15    <meta
16      name="viewport"
17      content="width=device-width, user-scalable=no, initial-scale=1.0, shrink-to-fit=no, viewport-fit=cover"
18    />
19    
20    <meta http-equiv="x-dns-prefetch-control" content="on" />
21    <meta name="site" content="https://disue.com" />
22    <!-- OG -->
23    <meta property="og:image" content="/upload/favicon.png" />
24    <meta property="og:description" content="site.seo.description" />
25    <meta property="og:type" content="website" />
26    <meta property="og:locale" content="zh_CN" />
27    <meta property="og:site_name" content="Disue · 迪素-Dynamic Internet Security Utility Engine" />
28    <meta property="og:url" content="https://disue.com" />
29    <meta property="og:title" content="友链-Disue · 迪素" />
30    <meta property="twitter:partner" content="ogwp" />
31    <!-- /OG -->
32
33    
34    
35    
35<script id="theme-config-getter">
36      const ThemeConfig = {
37        theme_mode: "user",
38        enable_loading_bar: true,
39        enable_footer: true,
40        footer_position: "none",
41        check_baidu_collect: false,
42        baidu_token: "",
43        enable_back2top: true,
44        enable_back2top_smooth: true,
45        enable_weather: false,
46        weather_key: "",
47        link_behavior: "current",
48        enable_tag_cloud: true,
49        tag_cloud_type: document.getElementById('tags-3d') ? '3d' : 'list',
50        enable_fixed_header: true,
51        enable_clean_mode: false,
52        cursor_effect: "off",
53        enable_offscreen_tip: false,
54        enable_birthday: false,
55        birthday: "2021\/11\/11 06:30",
56        light_time_scope: "5:00~19:00",
57        enable_console_theme: false,
58        version: "1.4.0",
59
60        enable_big_banner: false,
61        enable_banner: false,
62        banner_direction: "horizontal",
63        enable_banner_loop: true,
64        banner_effect: "slide",
65        banner_speed: 500,
66        enable_banner_handle: true,
67        enable_banner_autoplay: true,
68        banner_delay: "3500",
69        enable_banner_switch_button: true,
70        enable_banner_pagination: true,
71        enable_index_list_ajax: false,
72        post_index_page_size: false,
73        backdrop: "off",
74        favicon: "\/upload\/favicon.png",
75        enable_index_list_effect: true,
76        index_list_effect_class: "fadeInUp",
77        show_loaded_time: false,
78        enable_debug: false,
79        access_key: false,
80        enable_copy: true,
81        enable_share: true,
82        enable_share_link: true,
83        enable_share_weixin: true,
84        enable_like: true,
85        enable_toc: true,
86        enable_progress_bar: true,
87        enable_code_expander: false,
88        enable_fold_long_code: false,
89        enable_comment: true,
90        toc_depth: "0",
91        enable_code_title: true,
92        enable_code_hr: true,
93        enable_code_macdot: true,
94        enable_code_line_number: false,
95        enable_code_newline: false,
96        show_tools_when_hover: true,
97        enable_code_copy: true,
98        enable_copy_right_text: false,
99        copy_right_text: "",
100        offscreen_title_leave: "\u6B6A\uFF0C\u4F60\u53BB\u54EA\u91CC\u4E86\uFF1F",
101        offscreen_title_back: "(\u3064\u30A7\u2282)\u54A6\uFF0C\u53C8\u56DE\u6765\u4E86!",
102        enable_journal_effect: true,
103        enable_friend_effect: true,
104        // prettier-ignore
105        journal_list_effect_class: "fadeInUp",
106        friend_list_effect_class: "fadeInUp",
107        enable_like_journal: true,
108        enable_comment_journal: true,
109        journal_block_height: "300",
110        long_code_height: "800",
111        lazyload_avatar: "\/upload\/photo_2025-09-26_13-23-33.jpg",
112        photos_layout: 'waterfall',
113        // prettier-ignore
114        blog_url: "https:\/\/disue.com",
115        blog_title: "Disue \u00B7 \u8FEA\u7D20",
116        // prettier-ignore
117        BASE_RES_URL: "\/themes\/theme-Joe3",
118        BASE_URL: 'https://bbchin.com',
119      };
120      //转数字
121      ThemeConfig.banner_speed = parseInt(ThemeConfig.banner_speed);
122      ThemeConfig.banner_delay = parseInt(ThemeConfig.banner_delay);
123      ThemeConfig.toc_depth = parseInt(ThemeConfig.toc_depth);
124      ThemeConfig.journal_block_height = parseInt(ThemeConfig.journal_block_height);
125      ThemeConfig.long_code_height = parseInt(ThemeConfig.long_code_height);
126      ThemeConfig.photos_gap = 10;
127      ThemeConfig.enable_photos_effect = true;
128    </script>
128
129  
130    
131    
132    
132<script id="compatiable-checker">
133      // 兼容性检查
134      function detectIE() {
135        var n = window.navigator.userAgent,
136          e = n.indexOf('MSIE ');
137        if (e > 0) {
138          return parseInt(n.substring(e + 5, n.indexOf('.', e)), 10);
139        }
140        if (n.indexOf('Trident/') > 0) {
141          var r = n.indexOf('rv:');
142          return parseInt(n.substring(r + 3, n.indexOf('.', r)), 10);
143        }
144        var i = n.indexOf('Edge/');
145        return i > 0 && parseInt(n.substring(i + 5, n.indexOf('.', i)), 10);
146      }
147      detectIE() &&
148        (alert('当前站点不支持IE浏览器或您开启了兼容模式,请使用其他浏览器访问或关闭兼容模式。'),
149        (location.href = 'https://www.baidu.com'));
150    </script>
150
151
152    
152<script id="theme-config-getter" type="text/javascript">
153      if (window.location.hostname === 'localhost' || window.location.hostname === '127.0.0.1') {
154        ThemeConfig['mode'] = 'development';
155        console.log(ThemeConfig.mode);
156      }
157
158      if (ThemeConfig.mode === 'development') {
159        console.log('Joe3主题配置:', ThemeConfig);
160        console.log('资源根路径:', ThemeConfig.BASE_RES_URL);
161      }
162      // 读取主题模式
163      var initThemeMode = function () {
164        try {
165          var curMode = '';
166          if (ThemeConfig.theme_mode === 'auto') {
167            var light_scope = ThemeConfig.light_time_scope.split('~');
168            var now = new Date();
169            var today = now.toLocaleString().split(' ')[0];
170            var curMode =
171              now >= new Date(today + ' ' + light_scope[0]) &&
172              now <= new Date(today + ' ' + light_scope[1])
173                ? 'light'
174                : 'dark';
175            localStorage.removeItem('data-mode');
176          } else if (ThemeConfig.theme_mode === 'user') {
177            // 用户模式下优先从本地取主题模式,默认为浅色
178            curMode = localStorage.getItem('data-mode') || 'light';
179            localStorage.setItem('data-mode', curMode);
180          } else {
181            // 非用户模式下直接取后台配置的模式
182            curMode = ThemeConfig.theme_mode;
183            localStorage.removeItem('data-mode');
184          }
185          document.querySelector('html').setAttribute('data-mode', curMode);
186        } catch (e) {
187          console.log(e);
188        }
189      };
190      initThemeMode();
191      window.Joe = {
192        BASE_API: '',
193        isMobile: /windows phone|iphone|android/gi.test(window.navigator.userAgent),
194        bloggerGenerateAvatarOpts: (function () {
195          let generateAvatarOpts = {};
196          let generate_avatar_opts_str = '{bgColor:&#39;&#39;,textColor:&#39;&#39;,useTextGradient:false}';
197          if (generate_avatar_opts_str) {
198            // generate_avatar_opts_str 示例:{bgColor:'',textColor:'',useTextGradient:false}, 解析 generate_avatar_opts 配置
199            try {
200              // 防止 &#39; 等特殊字符导致 JSON 解析失败
201              const eleTmp = document.createElement('div');
202              eleTmp.innerHTML = generate_avatar_opts_str;
203              // key 自动加上 "" 防止报错,’ 自动转成 “
204              generate_avatar_opts_str = eleTmp.innerHTML
205                .replace(/'/g, '"')
206                .replace(/([\w]+):/g, '"$1":');
207              generateAvatarOpts = JSON.parse(generate_avatar_opts_str);
208            } catch (e) {
209              console.error(
210                'Joe3主题配置:生成文字性头像的配置解析失败,使用默认配置。generate_avatar_opts_str:',
211                generate_avatar_opts_str,
212                ' ,error:',
213                e
214              );
215            }
216          }
217          return generateAvatarOpts;
218        })(),
219        errorImg: function (target, src) {
220          const targetSrc = target.getAttribute('src');
221          console.log(
222            '加载图片失败',
223            ' ,srcArg:',
224            src,
225            ' .target.src:',
226            targetSrc,
227            ' ,target.alt:',
228            target.getAttribute('alt'),
229            ' ,target.dataset.errSrc:',
230            target.dataset.errSrc,
231            ' ,target.dataset.textAvatar:',
232            target.dataset.textAvatar
233          );
234
235          let generatedTextAvatar;
236          let generatedTextAvatarBase64;
237
238          switch (src) {
239            case 'HomeErrImg': {
240              // 如果 src 是 HomeErrImg 则使用首页配置里配置的文章错误缺省图
241              src = '/themes/theme-Joe3/assets/img/default_thumbnail.png';
242              break;
243            }
244            case 'LinksErrImg': {
245              // 如果 src 是 LinksErrImg 则使用友链配置里配置的友链默认 logo
246              src = target.dataset.errSrc || '/themes/theme-Joe3/assets/img/default_links_logo.png';
247              if (
248                !src ||
249                src === targetSrc ||
250                (targetSrc && targetSrc.indexOf('/assets/img/transparent-placeholder.png') !== -1)
251              ) {
252                if (target.dataset.textAvatar || target.getAttribute('alt')) {
253                  generatedTextAvatar = target.dataset.textAvatar || target.getAttribute('alt');
254                  generatedTextAvatarBase64 = Joe.generateTextAvatarImage(generatedTextAvatar);
255                  src = generatedTextAvatarBase64;
256                } else {
257                  src = '/themes/theme-Joe3/assets/img/default_links_logo.png';
258                }
259              }
260              break;
261            }
262            case 'ErrAvatarImg': {
263              // 如果 src 是 ErrAvatarImg 则使用博主配置里配置的默认头像
264              src = target.dataset.errSrc || '/upload/photo_2025-09-26_13-23-33.jpg';
265              if (
266                !src ||
267                src === targetSrc ||
268                (targetSrc && targetSrc.indexOf('/assets/img/transparent-placeholder.png') !== -1)
269              ) {
270                if (target.dataset.textAvatar || target.getAttribute('alt')) {
271                  generatedTextAvatar = target.dataset.textAvatar || target.getAttribute('alt');
272                  generatedTextAvatarBase64 = Joe.generateTextAvatarImage(generatedTextAvatar);
273                  src = generatedTextAvatarBase64;
274                } else {
275                  src = '/themes/theme-Joe3/assets/img/peeps-avatar.png';
276                }
277              }
278              break;
279            }
280            case 'LoadFailedImg': {
281              // 如果 src 是 LoadFailedImg 则使用加载失败的图片
282              src = target.dataset.errSrc || '/themes/theme-Joe3/assets/img/img_load_failed.jpg';
283              break;
284            }
285          }
286
287          const nowSrc = src || target.dataset.errSrc || '/themes/theme-Joe3/assets/img/Joe3.png';
288          if (targetSrc === nowSrc) return;
289
290          if (
291            generatedTextAvatarBase64 &&
292            generatedTextAvatar &&
293            nowSrc === generatedTextAvatarBase64
294          ) {
295            target.setAttribute('data-generated-text-avatar', generatedTextAvatar);
296          } else if (target.getAttribute('data-generated-text-avatar')) {
297            target.removeAttribute('data-generated-text-avatar');
298          }
299
300          console.log(
301            '加载图片失败,使用默认图片:',
302            nowSrc,
303            ' ,oldSrc:',
304            targetSrc,
305            ' ,target.alt:',
306            target.getAttribute('alt')
307          );
308          target.setAttribute('onerror', null);
309          target.setAttribute('src', nowSrc);
310        },
311        // 已经加载 transparent-placeholder.png 后替换图片
312        loadedPlaceholderReplaceImg: function (target, src) {
313          const targetSrc = target.getAttribute('src');
314          if (
315            !targetSrc ||
316            src === targetSrc ||
317            targetSrc.indexOf('/assets/img/transparent-placeholder.png') === -1
318          ) {
319            return;
320          }
321
322          console.log(
323            '加载图片 transparent-placeholder.png 后替换图片',
324            ' ,srcArg:',
325            src,
326            ' ,target.alt:',
327            target.getAttribute('alt'),
328            ' ,target.dataset.replaceSrc:',
329            target.dataset.replaceSrc,
330            ' ,target.dataset.textAvatar:',
331            target.dataset.textAvatar
332          );
333
334          let generatedTextAvatar;
335          let generatedTextAvatarBase64;
336
337          switch (src) {
338            case 'LinksImg': {
339              // 如果 src 是 LinksImg 则使用友链配置里配置的友链默认 logo
340              src = target.dataset.replaceSrc || '/themes/theme-Joe3/assets/img/default_links_logo.png';
341              if (!src || src === targetSrc) {
342                if (target.dataset.textAvatar || target.getAttribute('alt')) {
343                  generatedTextAvatar = target.dataset.textAvatar || target.getAttribute('alt');
344                  generatedTextAvatarBase64 = Joe.generateTextAvatarImage(generatedTextAvatar);
345                  src = generatedTextAvatarBase64;
346                } else {
347                  src = '/themes/theme-Joe3/assets/img/default_links_logo.png';
348                }
349              }
350              break;
351            }
352            case 'AvatarImg': {
353              // 如果 src 是 AvatarImg 则使用博主配置里配置的默认头像
354              src = target.dataset.replaceSrc || '/upload/photo_2025-09-26_13-23-33.jpg';
355              if (!src || src === targetSrc) {
356                if (target.dataset.textAvatar || target.getAttribute('alt')) {
357                  generatedTextAvatar = target.dataset.textAvatar || target.getAttribute('alt');
358                  target.setAttribute('data-generated-text-avatar', generatedTextAvatar);
359                  generatedTextAvatarBase64 = Joe.generateTextAvatarImage(generatedTextAvatar);
360                  src = generatedTextAvatarBase64;
361                } else {
362                  src = '/themes/theme-Joe3/assets/img/peeps-avatar.png';
363                }
364              }
365              break;
366            }
367          }
368
369          const nowSrc =
370            src || target.dataset.replaceSrc || '/themes/theme-Joe3/assets/img/Joe3.png';
371          if (targetSrc === nowSrc) return;
372
373          if (
374            generatedTextAvatarBase64 &&
375            generatedTextAvatar &&
376            nowSrc === generatedTextAvatarBase64
377          ) {
378            target.setAttribute('data-generated-text-avatar', generatedTextAvatar);
379          } else if (target.getAttribute('data-generated-text-avatar')) {
380            target.removeAttribute('data-generated-text-avatar');
381          }
382
383          console.log('加载替换后的图片:', nowSrc, ' ,target.alt:', target.getAttribute('alt'));
384          target.setAttribute('onload', null);
385          target.setAttribute('src', nowSrc);
386        },
387        replaceAllTextAvatarImage: function () {
388          console.log('call replaceAllTextAvatarImage');
389          const generatedEles = document.querySelectorAll('img[data-generated-text-avatar]');
390          generatedEles.forEach(function (ele) {
391            const generatedTextAvatar = ele.getAttribute('data-generated-text-avatar');
392            const generatedTextAvatarBase64 = Joe.generateTextAvatarImage(generatedTextAvatar);
393            ele.setAttribute('src', generatedTextAvatarBase64);
394          });
395        },
396        // 生成随机颜色函数
397        getRandomColor: function (alpha) {
398          const letters = '0123456789ABCDEF';
399          let color = '#';
400          for (let i = 0; i < 6; i++) {
401            color += letters[Math.floor(Math.random() * 16)];
402          }
403          if (alpha !== undefined) {
404            return color + (alpha >= 0 && alpha <= 1 ? Math.round(alpha * 255).toString(16) : 'FF');
405          }
406          return color;
407        },
408        // 生成随机颜色的文字性头像
409        generateTextAvatarImage: function (text, opts) {
410          opts = Object.assign({}, Joe.bloggerGenerateAvatarOpts, opts || {});
411          opts.fontSize = opts.fontSize || 50;
412          opts.font = opts.font || 'Great Vibes';
413          opts.canvasRadius = opts.canvasWidth || 1.5 * opts.fontSize;
414
415          // 如果是 var(--xxxx),则说明是 css 配置的变量,需要从html样式中解析成具体值
416          if (opts.textColor && /var\(--([\w-]+)\)/.test(opts.textColor)) {
417            const match = opts.textColor.match(/var\(--([\w-]+)\)/);
418            if (match) {
419              let cssVar =
420                getComputedStyle(document.documentElement)
421                  .getPropertyValue('--' + match[1])
422                  .trim() ||
423                getComputedStyle(document.body)
424                  .getPropertyValue('--' + match[1])
425                  .trim();
426              if (cssVar) {
427                opts.textColor = cssVar;
428              }
429            }
430          }
431
432          // 如果是 var(--xxxx),则说明是 css 配置的变量,需要从html样式中解析成具体值
433          if (opts.bgColor && /var\(--([\w-]+)\)/.test(opts.bgColor)) {
434            const match = opts.bgColor.match(/var\(--([\w-]+)\)/);
435            if (match) {
436              let cssVar =
437                getComputedStyle(document.documentElement)
438                  .getPropertyValue('--' + match[1])
439                  .trim() ||
440                getComputedStyle(document.body)
441                  .getPropertyValue('--' + match[1])
442                  .trim();
443              if (cssVar) {
444                opts.bgColor = cssVar;
445              }
446            }
447          }
448
449          // 创建一个新的 Canvas 元素
450          const canvas = document.createElement('canvas');
451          const ctx = canvas.getContext('2d');
452
453          // 设置 Canvas 的尺寸
454          canvas.width = opts.canvasRadius;
455          canvas.height = opts.canvasRadius;
456
457          if (opts.bgColor) {
458            ctx.fillStyle = opts.bgColor;
459          } else {
460            // 生成随机颜色的渐变背景
461            const gradient = ctx.createRadialGradient(
462              canvas.width / 2,
463              canvas.height / 2,
464              0,
465              canvas.width / 2,
466              canvas.height / 2,
467              canvas.width / 2
468            );
469            gradient.addColorStop(0, Joe.getRandomColor(0.7));
470            gradient.addColorStop(1, Joe.getRandomColor(0.7));
471
472            // 绘制渐变背景
473            ctx.fillStyle = gradient;
474          }
475
476          ctx.beginPath();
477          ctx.arc(canvas.width / 2, canvas.height / 2, canvas.width / 2, 0, Math.PI * 2);
478          ctx.fill();
479
480          // 设置文本样式
481          ctx.font = `${opts.fontSize}px ${opts.font}`;
482
483          if (opts.textColor) {
484            ctx.fillStyle = opts.textColor;
485          } else if (opts.useTextGradient) {
486            // 生成文字的线性渐变
487            const textGradient = ctx.createLinearGradient(0, 0, canvas.width, canvas.height);
488            textGradient.addColorStop(0, Joe.getRandomColor(0.9)); // 文字的渐变色
489            textGradient.addColorStop(1, Joe.getRandomColor(0.9)); // 文字的渐变色
490            ctx.fillStyle = textGradient;
491          } else if (opts.bgColor) {
492            // 设置了背景色,但是没有设置文字颜色,则需要设置默认文字颜色为黑色,防止文字颜色和背景色一致【注;背景色为渐变色,文字能显示出来,因此不需要设置文字颜色】
493            // 如果 bgColor 为黑色,则文字颜色设置为白色,否则设置为黑色
494            ctx.fillStyle = /(#000000|#000|black)/.test(opts.bgColor) ? '#fff' : '#000';
495          }
496
497          ctx.textAlign = 'center';
498          ctx.textBaseline = 'middle';
499
500          // 在 Canvas 上绘制文本
501          ctx.fillText(text.charAt(0), canvas.width / 2, canvas.height / 2);
502
503          // 返回生成的图片对象 base64 编码
504          return canvas.toDataURL();
505        },
506      };
507      ThemeConfig.enable_console_theme &&
508        console.log(
509          '%cTheme By  Jiewen' + ' | 版本 V' + ThemeConfig.version,
510          'padding: 8px 15px;color:#fff;background: linear-gradient(270deg, #986fee, #8695e6, #68b7dd, #18d7d3);border-radius: 0 15px 0 15px;'
511        );
512    </script>
512
513  
514    
515    <!--    <th:block th:replace="~{modules/themeSettingVariable :: themeSetting}" />-->
516    <!--    <th:block th:if="${htmlType == 'post'}">-->
517    <!--    <th:block th:replace="~{modules/postMetaVariable :: postSetting}" />-->
518    <!--    </th:block>-->
519    <link rel="shortcut icon" size="32x32" href="/upload/favicon.png" />
520    <link rel="canonical" href="https://disue.com" />
521    <link rel="apple-touch-icon" sizes="180x180" href="/upload/favicon.png" />
522    
523    <style>
524      
525      @font-face {
526          font-family: "Joe Font";
527          font-weight: 400;
528          font-style: normal;
529          font-display: swap;
530          
531          
532
533      }
534      html body {
535          --waline-avatar-size: 2.25rem;
536          --waline-m-avatar-size: calc(var(--waline-avatar-size) * 9 / 13);
537          --waline-theme-color:#1A73E8;
538          --waline-active-color: #1A73E8;
539
540          --theme: #1A73E8;
541          --wave-color: #fff;
542          --scroll-bar: #c0c4cc;
543          --loading-bar:  var(--theme);
544          --img-max-width: 100%;
545          font-family: "Joe Font", "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "微软雅黑", Arial, "sans-serif";
546          --halo-comment-widget-base-font-family: "Joe Font", "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "微软雅黑", Arial, "sans-serif";
547          --halo-search-widget-base-font-family: "Joe Font", "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "微软雅黑", Arial, "sans-serif";
548          --halo-comment-widget-base-color: var(--main);
549          --halo-comment-widget-base-info-color:var(--routine);
550
551
552
553      }
554      html[data-mode='dark'] body {
555
556          --waline-theme-color:#9999ff;
557          --waline-active-color: #9999ff;
558          --theme: #9999ff;
559          --wave-color: #fff;
560          --scroll-bar: #c0c4cc;
561          --loading-bar: var(--theme);
562          --halo-search-widget-color-modal-layer: rgba(10, 11, 12, 0.8);
563          --halo-search-widget-color-modal-content-bg: rgb(27, 27, 30);
564          --halo-search-widget-color-form-input: rgb(255, 255, 255);
565          --halo-search-widget-color-form-input-placeholder: #868686;
566          --halo-search-widget-color-form-input-bg: rgb(27, 27, 30);
567          --halo-search-widget-color-form-divider: #292929;
568          --halo-search-widget-color-result-item-bg: #232323;
569          --halo-search-widget-color-result-item-hover-bg: #2b3033;
570          --halo-search-widget-color-result-item-title: rgb(255 255 255);
571          --halo-search-widget-color-result-item-content: #868686;
572          --halo-search-widget-color-command-kbd-item: #868686;
573          --halo-search-widget-color-command-kbd-border: #868686;
574          --halo-search-widget-color-result-empty: #868686;
575          --halo-comment-widget-component-form-input-bg-color: #475569;
576          --halo-comment-widget-component-form-input-color: #ffffff;
577          --halo-comment-widget-component-form-input-border-color: #495056;
578          --halo-comment-widget-component-form-input-border-color-focus: #65a3ff;
579          --halo-comment-widget-component-form-input-box-shadow-focus: 0 0 0 0.15em #1c3966;
580          --halo-comment-widget-component-form-button-login-bg-color: #334155;
581          --halo-comment-widget-component-form-button-login-bg-color-hover: #475569;
582          --halo-comment-widget-component-form-button-login-border-color: #475569;
583          --halo-comment-widget-component-form-button-submit-border-color: #475569;
584          --halo-comment-widget-component-form-button-submit-border-color-hover: #64748b;
585          --halo-comment-widget-component-form-button-emoji-color: #cbd5e1;
586
587          --halo-comment-widget-component-comment-item-action-bg-color-hover: #475569;
588          --halo-comment-widget-component-comment-item-action-color: #64748b;
589          --halo-comment-widget-component-comment-item-action-color-hover: #94a3b8;
590
591          --halo-comment-widget-component-pagination-button-bg-color-hover: #475569;
592          --halo-comment-widget-component-pagination-button-bg-color-active: #475569;
593          --halo-comment-widget-component-pagination-button-border-color-active: #475569;
594
595          --halo-comment-widget-component-emoji-picker-rgb-color: 222, 222, 221;
596          --halo-comment-widget-component-emoji-picker-rgb-accent: 58, 130, 247;
597          --halo-comment-widget-component-emoji-picker-rgb-background: 21, 22, 23;
598          --halo-comment-widget-component-emoji-picker-rgb-input: 0, 0, 0;
599          --halo-comment-widget-component-emoji-picker-color-border: rgba(255, 255, 255, 0.1);
600          --halo-comment-widget-component-emoji-picker-color-border-over: rgba(255, 255, 255, 0.2);
601
602
603      }
604      ::-webkit-scrollbar {
605          width: 8px;
606      }
607      ::-webkit-scrollbar-thumb {
608          background: var(--scroll-bar);
609      }
610      
611      
612      html[data-mode="dark"] body {
613        background-repeat: no-repeat;
614        background-size: cover;
615        position: relative;
616      }
617
618      html[data-mode="dark"] body::before {
619        content: "";
620        position: fixed;
621        top: 0;
622        left: 0;
623        width: 100%;
624        height: 100%;
625        background-image: url("");
626        background-position: top center;
627        background-size: cover;
628        background-repeat: no-repeat;
629        z-index: -1; /* 保证内容层在背景之上 */
630      }
631
632      
633      
634      html[data-mode="dark"] body {
635          background-image: none;
636      }
637      
638    </style>
639  
640    
641      <!-- 加载条 -->
642      <link rel="stylesheet" href="/themes/theme-Joe3/assets/lib/nprogress/nprogress.min.css" />
643      <style>
644        #nprogress .bar {
645          height: 3px;
646          background: var(--loading-bar);
647        }
648        #nprogress .peg {
649          display: none;
650        }
651      </style>
652      
652<script src="/themes/theme-Joe3/assets/lib/nprogress/nprogress.min.js"></script>
652
653    
654    <link
655      rel="preload stylesheet"
656      as="style"
657      href="/themes/theme-Joe3/assets/css/min/normalize.min.css?v=1.4.0"
658    />
659    <link
660      rel="preload stylesheet"
661      as="style"
662      href="/themes/theme-Joe3/assets/lib/font-awesome/css/font-awesome.min.css"
663    />
664    <link
665      rel="preload stylesheet"
666      as="style"
667      href="//at.alicdn.com/t/font_2788564_crkap1ed9j5.css"
668    />
669    <link
670      rel="preload stylesheet"
671      as="style"
672      href="//at.alicdn.com/t/c/font_4198339_jcoci5bgy7.css"
673    />
674    
675    <link
676      rel="preload stylesheet"
677      as="style"
678      href="/themes/theme-Joe3/assets/css/min/theme.min.css?v=1.4.0"
679    />
680    <style>
681      #Joe .joe_container {
682        max-width: 1320px !important;
683      }
684
685      @media (max-width: 1360px) {
686        #Joe .joe_container {
687          max-width: initial !important;
688        }
689      }
690      @media (max-width: 768px) {
691        #Joe .joe_container {
692          max-width: initial !important;
693        }
694      }
695    </style>
696    <link rel="stylesheet" href="/themes/theme-Joe3/assets/lib/qmsg/qmsg.css" />
697    <link
698      rel="preload stylesheet"
699      as="style"
700      href="/themes/theme-Joe3/assets/lib/animate/animate.min.css"
701    />
702    
703    
704    <link
705      rel="preload stylesheet"
706      as="style"
707      href="/themes/theme-Joe3/assets/css/min/global.min.css?v=1.4.0"
708    />
709    
710    
711    
712    
713    
714    
715    <link
716      rel="preload stylesheet"
717      as="style"
718      href="/themes/theme-Joe3/assets/css/min/responsive.min.css?v=1.4.0"
719    />
720    <link
721      rel="stylesheet"
722      href="/themes/theme-Joe3/assets/lib/fancybox/jquery.fancybox.min.css"
723    />
724    
725    
726    <link
727      rel="preload stylesheet"
728      as="style"
729      href="/themes/theme-Joe3/assets/css/min/beauty.min.css?v=1.4.0"
730    />
731    
732  
733    
733<script src="/themes/theme-Joe3/assets/lib/[email protected]/jquery.min.js?v=1.4.0"></script>
733
734    
735  <meta name="generator" content="Halo 2.26.1"/><!-- plugin-comment-widget start -->
736<link rel="modulepreload" href="/plugins/PluginCommentWidget/assets/static/comment-widget.js?version=3.0.0">
737<link rel="stylesheet" href="/plugins/PluginCommentWidget/assets/static/index.css?version=3.0.0" />
738<!-- plugin-comment-widget end -->
739<!-- PluginSearchWidget start -->
740<script src="/plugins/PluginSearchWidget/assets/static/search-widget.iife.js?version=1.7.1" defer></script>
740
741<link rel="stylesheet" href="/plugins/PluginSearchWidget/assets/static/style.css?version=1.7.1" />
742<!-- PluginSearchWidget end -->
743<link rel="icon" href="/upload/favicon.png" />
744</head>
745  <!-- /OG -->
746  
747    <body>
748      <div id="Joe">
749        
750    <header class="joe_header">
751      <div
752        class="joe_header__above topInDown fixed "
753      >
754        <div
755          class="joe_container joe_header_container"
756        >
757          <i class="joe-font joe-icon-caidan joe_header__above-slideicon"></i>
758          
759            <a
760              title="Disue · 迪素"
761              class="joe_header__above-logo"
762              href="https://disue.com"
763            >
764              <img
765                style="border-radius:4px"
766                src="/upload/favicon.png"
767                alt="Disue · 迪素"
768                onerror="Joe.errorImg(this, 'ErrAvatarImg')" sizes="(max-width: 640px) 94vw, (max-width: 768px) 92vw, (max-width: 1024px) 88vw, min(800px, 85vw)" srcset="/upload/favicon.png?width=1600 1600w, /upload/favicon.png?width=400 400w, /upload/favicon.png?width=800 800w, /upload/favicon.png?width=1200 1200w"
769              />
770            </a>
771          
772          <nav
773            class="joe_header__above-nav  "
774          >
775            
776            <!--        自选导航-->
777            
778              
779                
780                  
781                    
782                      
783    <a
784      class="item"
785      href="/"
786      title="首页"
787    >
788      
789      首页
790    </a>
791  
792                    
793                    
794                  
795                    
796                      
797    <a
798      class="item"
799      href="//img.disue.com"
800      target="_blank"
801      title="图床"
802    >
803      
804      图床
805    </a>
806  
807                    
808                    
809                  
810                    
811                      
812    <a
813      class="item"
814      href="/about"
815      target="_self"
816      title="关于"
817    >
818      
819      关于
820    </a>
821  
822                    
823                    
824                  
825                    
826                      
827    <a
828      class="item"
829      href="/links"
830      target="_self"
831      title="友链"
832    >
833      
834      友链
835    </a>
836  
837                    
838                    
839                  
840                
841              
842            
843          </nav>
844
845          <div class="joe_header__above-search">
846            <!--        <div class="nav_login">-->
847            <!--          <th:block th:if="${#authentication.name == 'anonymousUser'}">-->
848            <!--          <a href="/console" title="搜索"><i class="jiewen joe-icon-zhanghao"></i></a>-->
849            <!--          </th:block>-->
850            <!--          <th:block th:if="${#authentication.name != 'anonymousUser'}">-->
851            <!--            <th:block th:with="contributor = ${contributorFinder.getContributor(#authentication.name)}">-->
852            <!--            <img th:src="${contributor.avatar}" th:title="${contributor.displayName}" th:alt="${contributor.displayName}" onerror="Joe.errorImg(this, 'ErrAvatarImg')" >-->
853            <!--            </th:block>-->
854            <!--          </th:block>-->
855            <!--        </div>-->
856            <!--        <input maxlength="16" autocomplete="off" placeholder="请输入关键字..." name="keyword" value="" class="input" type="text">-->
857            <button
858              type="submit"
859              id="halo-search"
860              class="submit"
861              style="border-radius: 17px 17px 17px 17px"
862              aria-label="搜索按钮"
863            >
864              <i class="joe-font joe-icon-search"></i>
865            </button>
866            <!--        <span class="icon"></span>-->
867            
868            <!--        <nav class="result">-->
869            <!--          <a href="archives/ce-shi-wen-zhang.html" title="测试文章" class="item">-->
870            <!--            <span class="sort">1</span>-->
871            <!--            <span class="text">测试文章</span>-->
872            <!--          </a>-->
873            <!--          <a href="archives/hello-halo.html" title="Hello Halo" class="item">-->
874            <!--            <span class="sort">2</span>-->
875            <!--            <span class="text">Hello Halo</span>-->
876            <!--          </a>-->
877            <!--        </nav>-->
878          </div>
879
880          <a href="javascript:SearchWidget.open()" title="搜索"
881            ><i class="joe-font joe-icon-search joe_header__above-searchicon"></i
882          ></a>
883        </div>
884      </div>
885
886      <div class="joe_header__slideout">
887        <div class="joe_header__slideout-wrap">
888          <img
889            width="100%"
890            height="150"
891            class="joe_header__slideout-image"
892            src="/themes/theme-Joe3/assets/img/author_bg.jpg?v=1.4.0"
893            alt="侧边栏壁纸"
894            onerror="Joe.errorImg(this)" sizes="(max-width: 640px) 94vw, (max-width: 768px) 92vw, (max-width: 1024px) 88vw, min(800px, 85vw)" srcset="/themes/theme-Joe3/assets/img/author_bg.jpg?v=1.4.0&width=1600 1600w, /themes/theme-Joe3/assets/img/author_bg.jpg?v=1.4.0&width=400 400w, /themes/theme-Joe3/assets/img/author_bg.jpg?v=1.4.0&width=800 800w, /themes/theme-Joe3/assets/img/author_bg.jpg?v=1.4.0&width=1200 1200w"
895          />
896          <div class="joe_header__slideout-author">
897            <img
898              width="50"
899              height="50"
900              class="avatar ls-is-cached lazyloaded"
901              data-src="/upload/photo_2025-09-26_13-23-33.jpg"
902              src="/upload/photo_2025-09-26_13-23-33.jpg"
903              alt="博主头像"
904              data-text-avatar="Disue · 迪素"
905              onload="Joe.loadedPlaceholderReplaceImg(this, 'AvatarImg')"
906              onerror="Joe.errorImg(this, 'ErrAvatarImg')" sizes="(max-width: 640px) 94vw, (max-width: 768px) 92vw, (max-width: 1024px) 88vw, min(800px, 85vw)" srcset="/upload/photo_2025-09-26_13-23-33.jpg?width=1600 1600w, /upload/photo_2025-09-26_13-23-33.jpg?width=400 400w, /upload/photo_2025-09-26_13-23-33.jpg?width=800 800w, /upload/photo_2025-09-26_13-23-33.jpg?width=1200 1200w"
907            />
908            <div class="info">
909              <a
910                class="link"
911                href="https://disue.com"
912                target="_blank"
913                rel="noopener noreferrer nofollow"
914                >Disue · 迪素
915                
916              </a>
917              <p class="motto joe_motto">Carpe diem</p>
918            </div>
919          </div>
920          
921          <ul class="joe_header__slideout-count">
922            <li class="item">
923              <i class="joe-font joe-icon-danganguanli"></i>
924              <span>累计撰写 <strong>16</strong> 篇文章</span>
925            </li>
926            
927              <li class="item">
928                <i class="joe-font joe-icon-remen"></i>
929                <span>累计创建 <strong>16</strong> 个标签</span>
930              </li>
931            
932            
933              <li class="item">
934                <i class="joe-font joe-icon-message"></i>
935                <span>累计收到 <strong>2</strong> 条评论</span>
936              </li>
937            
938            
939          </ul>
940          <ul class="joe_header__slideout-menu panel-box">
941            <li>
942              <a class="link panel in" href="#" rel="nofollow">
943                <span>栏目</span>
944                <i class="joe-font joe-icon-arrow-right"></i>
945              </a>
946              <ul class="slides panel-body panel-box panel-side-menu" style="display: block">
947                
948                
949                  
950                    
951                      
952                        
953                          <li>
954                            <a
955                              class="link"
956                              href="/"
957                              title="首页"
958                              >首页</a
959                            >
960                          </li>
961                        
962                        
963                      
964                        
965                          <li>
966                            <a
967                              class="link"
968                              href="//img.disue.com"
969                              target="_blank"
970                              title="图床"
971                              >图床</a
972                            >
973                          </li>
974                        
975                        
976                      
977                        
978                          <li>
979                            <a
980                              class="link"
981                              href="/about"
982                              target="_self"
983                              title="关于"
984                              >关于</a
985                            >
986                          </li>
987                        
988                        
989                      
990                        
991                          <li>
992                            <a
993                              class="link"
994                              href="/links"
995                              target="_self"
996                              title="友链"
997                              >友链</a
998                            >
999                          </li>
1000                        
1001                        
1002                      
1003                    
1004                  
1005                
1006              </ul>
1007            </li>
1008          </ul>
1009        </div>
1010      </div>
1011
1012      <div class="joe_header__searchout">
1013        <a href="javascript:SearchWidget.open()" title="搜索"></a>
1014        <!--    <div class="joe_container">-->
1015
1016        <!--      <div class="joe_header__searchout-inner">-->
1017        <!--        <form class="joe_header__above-search-mobile" method="get" action="http://localhost:8093/search">-->
1018        <!--          <input maxlength="16" autocomplete="off" placeholder="请输入关键字..." name="keyword" value="" class="input" type="text">-->
1019        <!--          <button type="submit" class="submit">搜索</button>-->
1020        <!--        </form>-->
1021        <!--      </div>-->
1022        <!--    </div>-->
1023      </div>
1024
1025      <div class="joe_header__toc">
1026        <div class="joe_header__toc-wrap">
1027          <div class="toc_top">
1028            <h3>目 录<span>CONTENT</span></h3>
1029            <img
1030              width="100%"
1031              height="150"
1032              src="/themes/theme-Joe3/assets/img/context_bg.png"
1033              alt="文章目录"
1034              onerror="Joe.errorImg(this)" sizes="(max-width: 640px) 94vw, (max-width: 768px) 92vw, (max-width: 1024px) 88vw, min(800px, 85vw)" srcset="/themes/theme-Joe3/assets/img/context_bg.png?width=1600 1600w, /themes/theme-Joe3/assets/img/context_bg.png?width=400 400w, /themes/theme-Joe3/assets/img/context_bg.png?width=800 800w, /themes/theme-Joe3/assets/img/context_bg.png?width=1200 1200w"
1035            />
1036          </div>
1037          <div id="js-toc-mobile" class="toc"></div>
1038        </div>
1039      </div>
1040
1041      <div class="joe_header__mask"></div>
1042    </header>
1043  
1044        <!--          首页大图-->
1045        
1046        <div
1047          class="joe_container joe_main_container page-journals animated showInUp "
1048        >
1049          <div class="joe_main">
1050            <div
1051              class="joe_detail"
1052            >
1053              <h1 class="joe_detail__title txt-shadow">友情链接</h1>
1054              <article
1055                class="joe_detail__article animated fadeIn"
1056              >
1057                <h3>友链列表<span class="totals"> </span></h3>
1058                
1059                  <div
1060                    class="links-group"
1061                    data-link-group-sort-seq="0"
1062                    data-link-group-create-time="2025-12-16T09:42:51.512166262Z"
1063                  >
1064                    <h5>常规</h5>
1065                    <ul class="joe_detail__friends evan-friends">
1066                      
1067                        <li
1068                          class="joe_detail__friends-item"
1069                          data-link-sort-seq="0"
1070                          data-link-create-time="2025-12-16T09:42:23.498657108Z"
1071                        >
1072                          
1073                            <a
1074                              class="contain"
1075                              href="https://weiruan.org"
1076                              :key="i"
1077                              target="_blank"
1078                              style="--fcolor:#7367F0 ;"
1079                              rel="noopener noreferrer"
1080                            >
1081                              <div class="evan-f-left">
1082                                <div class="f-avatar">
1083                                  <img
1084                                    width="40"
1085                                    height="40"
1086                                    class="avatar lazyload"
1087                                    src="/upload/photo_2025-09-26_13-23-33.jpg"
1088                                    data-src="/themes/theme-Joe3/assets/img/default_links_logo.png"
1089                                    alt="威软科技"
1090                                    onload="Joe.loadedPlaceholderReplaceImg(this, 'LinksImg')"
1091                                    onerror="Joe.errorImg(this, 'LinksErrImg')" sizes="(max-width: 640px) 94vw, (max-width: 768px) 92vw, (max-width: 1024px) 88vw, min(800px, 85vw)" srcset="/upload/photo_2025-09-26_13-23-33.jpg?width=1600 1600w, /upload/photo_2025-09-26_13-23-33.jpg?width=400 400w, /upload/photo_2025-09-26_13-23-33.jpg?width=800 800w, /upload/photo_2025-09-26_13-23-33.jpg?width=1200 1200w"
1092                                  />
1093                                </div>
1094                              </div>
1095                              <div class="evan-f-right">
1096                                <span class="title" style="--fcolor:#7367F0 ">
1097                                  <span
1098                                    class="sub-text"
1099                                    title="威软科技"
1100                                  >威软科技</span>
1101                                  <svg
1102                                    t="1658027717181"
1103                                    class="icon"
1104                                    viewBox="0 0 1024 1024"
1105                                    version="1.1"
1106                                    xmlns="http://www.w3.org/2000/svg"
1107                                    p-id="25920"
1108                                    width="200"
1109                                    height="200"
1110                                  >
1111                                    <path
1112                                      d="M0 0h1024v1024H0V0z"
1113                                      fill="#202425"
1114                                      opacity=".01"
1115                                      p-id="25921"
1116                                    ></path>
1117                                    <path
1118                                      d="M989.866667 512c0 263.918933-213.947733 477.866667-477.866667 477.866667S34.133333 775.918933 34.133333 512 248.081067 34.133333 512 34.133333s477.866667 213.947733 477.866667 477.866667z"
1119                                      fill="#FF7744"
1120                                      p-id="25922"
1121                                    ></path>
1122                                    <path
1123                                      d="M787.114667 339.285333a51.2 51.2 0 0 1 0 72.362667l-307.2 307.2a51.2 51.2 0 0 1-72.362667 0l-170.666667-170.666667a51.2 51.2 0 0 1 72.362667-72.362666L443.733333 610.235733l271.018667-271.018666a51.2 51.2 0 0 1 72.362667 0z"
1124                                      fill="#FFFFFF"
1125                                      p-id="25923"
1126                                    ></path>
1127                                  </svg>
1128                                </span>
1129                                <div class="content">
1130                                  <div class="desc">
1131                                    
1132                                  </div>
1133                                </div>
1134                              </div>
1135                            </a>
1136                          
1137                        </li>
1138                      
1139                    </ul>
1140                  </div>
1141                
1142
1143                
1143<script>
1144                  // TODO qiushaocloud 最好的办法就是在上面直接排序,我对 thymeleaf 语法不熟悉,尝试使用了 #lists.sort,但一直报错,因此改成了 js 排序,希望有能力的大佬帮忙优化一下
1145                  (() => {
1146                    // links-group 排序, link-group-sort-seq 数字越大越靠前
1147                    const linksGroupDefaultSort =
1148                      'link_group_create_time_asc';
1149                    const linksDefaultSort = 'link_create_time_asc';
1150                    const joeDetailArticle = $('#Joe .page-journals .joe_detail__article');
1151                    const linksGroupEles = joeDetailArticle.find('.links-group');
1152                    linksGroupEles.sort((a, b) => {
1153                      const aSortSeq = parseInt($(a).data('link-group-sort-seq') || 0);
1154                      const bSortSeq = parseInt($(b).data('link-group-sort-seq') || 0);
1155
1156                      if (!isNaN(bSortSeq) && !isNaN(aSortSeq)) {
1157                        if (bSortSeq > 0 && aSortSeq > 0) return bSortSeq > aSortSeq ? 1 : -1; // link-group-sort-seq 数字越大越靠前
1158
1159                        if (bSortSeq > 0) return 1; // b.link-group-sort-seq 需要排在前面
1160
1161                        if (aSortSeq > 0) return -1; // a.link-group-sort-seq 需要排在前面
1162                      }
1163
1164                      // 若 link-group-sort-seq <= 0, 则按默认排序方式进行排序
1165                      if (
1166                        linksGroupDefaultSort === 'links_group_create_time_asc' ||
1167                        linksGroupDefaultSort === 'links_group_create_time_desc'
1168                      ) {
1169                        // 按照创建时间升序/降序排序
1170                        const aCreateTime = parseInt(
1171                          new Date($(a).data('link-group-create-time')).getTime() || 0
1172                        );
1173                        const bCreateTime = parseInt(
1174                          new Date($(b).data('link-group-create-time')).getTime() || 0
1175                        );
1176                        return linksGroupDefaultSort === 'links_group_create_time_asc'
1177                          ? aCreateTime > bCreateTime
1178                            ? 1
1179                            : -1
1180                          : aCreateTime < bCreateTime
1181                            ? 1
1182                            : -1;
1183                      }
1184
1185                      return 0; // 不进行排序,保持原有顺序【即:友链组件原本的排序方式】
1186                    });
1187                    // linksGroupEles.remove();
1188                    joeDetailArticle.append(linksGroupEles);
1189
1190                    linksGroupEles.each((_, linkGroupEle) => {
1191                      // links-group 内的 links 排序, link-sort-seq 数字越大越靠前
1192                      const linksUlEle = $(linkGroupEle).find('.joe_detail__friends');
1193                      const linksLiEles = linksUlEle.find('.joe_detail__friends-item');
1194                      linksLiEles.sort((a, b) => {
1195                        const aSortSeq = parseInt($(a).data('link-sort-seq') || 0);
1196                        const bSortSeq = parseInt($(b).data('link-sort-seq') || 0);
1197
1198                        if (!isNaN(bSortSeq) && !isNaN(aSortSeq)) {
1199                          if (bSortSeq > 0 && aSortSeq > 0) return bSortSeq > aSortSeq ? 1 : -1; // link-sort-seq 数字越大越靠前
1200
1201                          if (bSortSeq > 0) return 1; // b.link-sort-seq 需要排在前面
1202
1203                          if (aSortSeq > 0) return -1; // a.link-sort-seq 需要排在前面
1204                        }
1205
1206                        // 若 link-sort-seq <= 0, 则按默认排序方式进行排序
1207                        if (
1208                          linksDefaultSort === 'links_create_time_asc' ||
1209                          linksDefaultSort === 'links_create_time_desc'
1210                        ) {
1211                          // 按照创建时间升序/降序排序
1212                          const aCreateTime = parseInt(
1213                            new Date($(a).data('link-create-time')).getTime() || 0
1214                          );
1215                          const bCreateTime = parseInt(
1216                            new Date($(b).data('link-create-time')).getTime() || 0
1217                          );
1218                          return linksDefaultSort === 'links_create_time_asc'
1219                            ? aCreateTime > bCreateTime
1220                              ? 1
1221                              : -1
1222                            : aCreateTime < bCreateTime
1223                              ? 1
1224                              : -1;
1225                        }
1226
1227                        return 0; // 不进行排序,保持原有顺序【即:友链组件原本的排序方式】
1228                      });
1229                      // linksLiEles.remove();
1230                      linksUlEle.append(linksLiEles);
1231                    });
1232                  })();
1233                </script>
1233
1234              </article>
1235              <article class="joe_detail__article animated fadeIn">
1236                <h3>申请格式</h3>
1237                <div class="link-requirement">
1238                  
1239                  
1240                    <p>
1241                      <joe-message
1242                        type="info"
1243                        content='<em style="font-style:normal;font-weight:bold;">< 博客名称 + 博客地址 + 博客Logo + 博客简介 ></em><br>博客名称:<br>博客地址:<a href=""></a><br>博客Logo:<a href=""></a><br>博客简介:<br>(大家在评论中留言即可)'
1244                      >
1245                      </joe-message>
1246                    </p>
1247                  
1248                </div>
1249              </article>
1250            </div>
1251
1252            
1253              <div class="joe_comment">
1254                <div class="joe_comment_box">
1255                  <div class="box_title">
1256                    <h2>评论区</h2>
1257                  </div>
1258                  
1259                    <div id="comment-plugin-halo-run-Plugin-PluginLinks"></div>
1260<script type="module" data-pjax>
1261  import { init } from "/plugins/PluginCommentWidget/assets/static/comment-widget.js?version=3.0.0";
1262  init(
1263    "#comment-plugin-halo-run-Plugin-PluginLinks",
1264    {
1265      group: "plugin.halo.run",
1266      kind: "Plugin",
1267      name: "PluginLinks",
1268    }
1269  );
1270</script>
1270
1271
1272                  
1273                  
1274                </div>
1275              </div>
1276            
1277          </div>
1278          
1279            
1280    <aside
1281      class="joe_aside"
1282    >
1283      
1284        
1285          
1286          
1287          
1288          
1289          
1290          
1291          
1292            <!--        热门文章-->
1293            
1294    
1295    <section class="joe_aside__item newest">
1296      <div class="joe_aside__item-title">
1297        <i class="joe-font joe-icon-huo"></i>
1298        <span class="text">热门文章</span>
1299      </div>
1300      <div class="joe_aside__item-contain">
1301        <ul class="list">
1302          
1303            <li class="item">
1304              <a class="link" href="/archives/esim-global"
1305                >全球 eSIM 选购与长效保号全攻略</a
1306              >
1307              <i class="joe-font joe-icon-link"></i>
1308            </li>
1309            <li class="item">
1310              <a class="link" href="/archives/cf-api-ns"
1311                >Cloudflare API 修改域名 NS 服务器指南</a
1312              >
1313              <i class="joe-font joe-icon-link"></i>
1314            </li>
1315            <li class="item">
1316              <a class="link" href="/archives/esimgg"
1317                >告别漫游烦恼,拥抱自由连接:eSIM.gg</a
1318              >
1319              <i class="joe-font joe-icon-link"></i>
1320            </li>
1321            <li class="item">
1322              <a class="link" href="/archives/free-domain"
1323                >免费域名/低价域名汇总</a
1324              >
1325              <i class="joe-font joe-icon-link"></i>
1326            </li>
1327            <li class="item">
1328              <a class="link" href="/archives/vpscommand"
1329                >VPS/Linux 服务器常用脚本和命令</a
1330              >
1331              <i class="joe-font joe-icon-link"></i>
1332            </li>
1333          
1334        </ul>
1335      </div>
1336    </section>
1337  
1338  
1339          
1340          
1341          
1342          
1343          
1344          
1345          
1346        
1347      
1348        
1349          
1350          
1351          
1352          
1353          
1354          
1355          
1356          
1357          
1358          
1359            <!--        标签云-->
1360            
1361    <section class="joe_aside__item tags-cloud" id="tags-cloud">
1362      <div class="joe_aside__item-title">
1363        <i class="joe-font joe-icon-tag"></i>
1364        <span class="text">标签云</span>
1365        <a class="tags_more" href="/tags">更多<i class="joe-font joe-icon-more-right"></i></a>
1366      </div>
1367      <div class="joe_aside__item-contain">
1368        <div
1369          class="tags-cloud-list static"
1370          style="display:none"
1371        >
1372          
1373            
1374              <a
1375                data-label="短网址"
1376                data-url="/tags/duan-wang-zhi"
1377                href="/tags/duan-wang-zhi"
1378                title="短网址"
1379                >短网址</a
1380              ><a
1381                data-label="Fail2Ban"
1382                data-url="/tags/fail2ban"
1383                href="/tags/fail2ban"
1384                title="Fail2Ban"
1385                >Fail2Ban</a
1386              ><a
1387                data-label="国际互联"
1388                data-url="/tags/guo-ji-hu-lian"
1389                href="/tags/guo-ji-hu-lian"
1390                title="国际互联"
1391                >国际互联</a
1392              ><a
1393                data-label="跨境网络优化"
1394                data-url="/tags/kua-jing-wang-luo-you-hua"
1395                href="/tags/kua-jing-wang-luo-you-hua"
1396                title="跨境网络优化"
1397                >跨境网络优化</a
1398              ><a
1399                data-label="Hermes"
1400                data-url="/tags/hermes"
1401                href="/tags/hermes"
1402                title="Hermes"
1403                >Hermes</a
1404              ><a
1405                data-label="域名"
1406                data-url="/tags/yu-ming"
1407                href="/tags/yu-ming"
1408                title="域名"
1409                >域名</a
1410              ><a
1411                data-label="香港"
1412                data-url="/tags/xiang-gang"
1413                href="/tags/xiang-gang"
1414                title="香港"
1415                >香港</a
1416              ><a
1417                data-label="Docker"
1418                data-url="/tags/docker"
1419                href="/tags/docker"
1420                title="Docker"
1421                >Docker</a
1422              ><a
1423                data-label="CN2 GIA"
1424                data-url="/tags/cn2-gia"
1425                href="/tags/cn2-gia"
1426                title="CN2 GIA"
1427                >CN2 GIA</a
1428              ><a
1429                data-label="VPS"
1430                data-url="/tags/vps"
1431                href="/tags/vps"
1432                title="VPS"
1433                >VPS</a
1434              ><a
1435                data-label="eSIM"
1436                data-url="/tags/esim"
1437                href="/tags/esim"
1438                title="eSIM"
1439                >eSIM</a
1440              ><a
1441                data-label="AI"
1442                data-url="/tags/ai"
1443                href="/tags/ai"
1444                title="AI"
1445                >AI</a
1446              ><a
1447                data-label="Nginx"
1448                data-url="/tags/nginx"
1449                href="/tags/nginx"
1450                title="Nginx"
1451                >Nginx</a
1452              ><a
1453                data-label="Cloudflare"
1454                data-url="/tags/cloudflare"
1455                href="/tags/cloudflare"
1456                title="Cloudflare"
1457                >Cloudflare</a
1458              ><a
1459                data-label="Halo博客"
1460                data-url="/tags/halobo-ke"
1461                href="/tags/halobo-ke"
1462                title="Halo博客"
1463                >Halo博客</a
1464              >
1465            
1466          
1467          
1468        </div>
1469        
1470          <div id="tags-3d">
1471            <div class="empty">加载中…</div>
1472          </div>
1473        
1474      </div>
1475    </section>
1476  
1477          
1478          
1479          
1480          
1481        
1482      
1483        
1484          
1485          
1486          
1487          
1488          
1489          
1490          
1491          
1492          
1493          
1494          
1495          
1496          
1497        
1498      
1499        
1500          
1501          
1502          
1503          
1504          
1505          
1506          
1507          
1508          
1509          
1510          
1511            <!--        分类云-->
1512            
1513    <section class="joe_aside__item tags-cloud" id="categories-cloud">
1514      <div class="joe_aside__item-title">
1515        <i class="joe-font joe-icon-tag"></i>
1516        <span class="text">分类云</span>
1517        <a class="tags_more" href="/categories"
1518          >更多<i class="joe-font joe-icon-more-right"></i
1519        ></a>
1520      </div>
1521      <div class="joe_aside__item-contain">
1522        <div
1523          class="categories-cloud-list static"
1524        >
1525          
1526          
1527            
1528              <a
1529                data-label="岁月拾遗"
1530                data-url="/categories/life"
1531                href="/categories/life"
1532                title="岁月拾遗"
1533                >岁月拾遗</a
1534              ><a
1535                data-label="数字生活"
1536                data-url="/categories/digitalnomad"
1537                href="/categories/digitalnomad"
1538                title="数字生活"
1539                >数字生活</a
1540              ><a
1541                data-label="云端折腾"
1542                data-url="/categories/cloudtech"
1543                href="/categories/cloudtech"
1544                title="云端折腾"
1545                >云端折腾</a
1546              >
1547            
1548          
1549        </div>
1550        
1551      </div>
1552    </section>
1553  
1554          
1555          
1556          
1557        
1558      
1559    </aside>
1560  
1561          
1562        </div>
1563        
1564    <div class="joe_action">
1565      
1566      
1567      
1568        <div class="joe_action_item random">
1569          <svg
1570            t="1726158438632"
1571            class="icon"
1572            viewBox="0 0 1024 1024"
1573            version="1.1"
1574            xmlns="http://www.w3.org/2000/svg"
1575            p-id="6113"
1576            width="200"
1577            height="200"
1578          >
1579            <path
1580              d="M241.92 733.12c-6.08 0-11.84-1.6-17.28-5.12-100.8-64.64-163.2-178.88-163.2-297.92C61.44 231.04 217.28 75.2 416 75.2c119.04 0 233.28 62.4 297.92 163.2 9.6 14.72 5.12 34.56-9.6 44.16-14.72 9.6-34.56 5.12-44.16-9.6-52.8-82.56-146.56-133.76-244.16-133.76-163.2 0-290.88 127.68-290.88 290.88 0 97.6 51.2 191.04 133.76 244.16 14.72 9.6 19.2 29.44 9.6 44.16-5.76 9.6-16 14.72-26.56 14.72z"
1581              p-id="6114"
1582            ></path>
1583            <path
1584              d="M580.8 948.8c-9.6 0-19.2-1.6-29.12-4.48-25.28-8-43.2-25.28-51.84-49.92L302.08 428.48c-8-19.2-7.68-40.32 0.64-60.16 9.28-21.44 26.88-38.4 48.64-46.72 16.32-8 41.28-8 60.48 0.32l495.68 188.8c21.76 8.32 39.36 25.28 48.64 46.72 8.64 19.84 8.64 41.28 0.64 60.16-8 22.72-25.92 40-51.2 48l-183.68 59.84-62.72 169.6c-14.08 34.24-44.16 53.76-78.4 53.76z m-199.68-569.28c-1.92 0-3.52 0.32-4.48 0.64-8 3.2-12.8 7.68-15.04 13.12-1.28 2.56-2.24 6.4-0.64 10.24l198.72 467.84c2.24 6.72 4.8 9.6 11.52 11.84 19.2 6.08 26.56-6.08 28.8-11.84l67.52-182.72c3.52-9.28 10.88-16.32 20.16-19.2l198.72-64.64c7.04-2.24 9.28-5.44 11.2-9.92 2.24-5.44 1.28-9.28 0-12.16a23.2 23.2 0 0 0-12.48-12.16l-496.64-189.12c-0.64-0.32-1.6-0.64-2.24-0.96a14.496 14.496 0 0 0-5.12-0.96z"
1585              p-id="6115"
1586            ></path>
1587          </svg>
1588        </div>
1589      
1590      
1591        <div class="joe_action_item mode">
1592          <svg
1593            class="mode-light"
1594            height="25"
1595            viewBox="0 0 1024 1024"
1596            width="25"
1597            xmlns="http://www.w3.org/2000/svg"
1598          >
1599            <path
1600              d="M234.24 512a277.76 277.76 0 1 0 555.52 0 277.76 277.76 0 1 0-555.52 0zM512 187.733a42.667 42.667 0 0 1-42.667-42.666v-102.4a42.667 42.667 0 0 1 85.334 0v102.826A42.667 42.667 0 0 1 512 187.733zm-258.987 107.52a42.667 42.667 0 0 1-29.866-12.373l-72.96-73.387a42.667 42.667 0 0 1 59.306-59.306l73.387 72.96a42.667 42.667 0 0 1 0 59.733 42.667 42.667 0 0 1-29.867 12.373zm-107.52 259.414H42.667a42.667 42.667 0 0 1 0-85.334h102.826a42.667 42.667 0 0 1 0 85.334zm34.134 331.946a42.667 42.667 0 0 1-29.44-72.106l72.96-73.387a42.667 42.667 0 0 1 59.733 59.733l-73.387 73.387a42.667 42.667 0 0 1-29.866 12.373zM512 1024a42.667 42.667 0 0 1-42.667-42.667V878.507a42.667 42.667 0 0 1 85.334 0v102.826A42.667 42.667 0 0 1 512 1024zm332.373-137.387a42.667 42.667 0 0 1-29.866-12.373l-73.387-73.387a42.667 42.667 0 0 1 0-59.733 42.667 42.667 0 0 1 59.733 0l72.96 73.387a42.667 42.667 0 0 1-29.44 72.106zm136.96-331.946H878.507a42.667 42.667 0 1 1 0-85.334h102.826a42.667 42.667 0 0 1 0 85.334zM770.987 295.253a42.667 42.667 0 0 1-29.867-12.373 42.667 42.667 0 0 1 0-59.733l73.387-72.96a42.667 42.667 0 1 1 59.306 59.306l-72.96 73.387a42.667 42.667 0 0 1-29.866 12.373z"
1601            />
1602          </svg>
1603          <svg
1604            class="mode-dark"
1605            height="25"
1606            viewBox="0 0 1024 1024"
1607            width="25"
1608            xmlns="http://www.w3.org/2000/svg"
1609          >
1610            <path
1611              d="M587.264 104.96c33.28 57.856 52.224 124.928 52.224 196.608 0 218.112-176.128 394.752-393.728 394.752-29.696 0-58.368-3.584-86.528-9.728C223.744 832.512 369.152 934.4 538.624 934.4c229.376 0 414.72-186.368 414.72-416.256 1.024-212.992-159.744-389.12-366.08-413.184z"
1612            />
1613            <path
1614              d="M340.48 567.808l-23.552-70.144-70.144-23.552 70.144-23.552 23.552-70.144 23.552 70.144 70.144 23.552-70.144 23.552-23.552 70.144zM168.96 361.472l-30.208-91.136-91.648-30.208 91.136-30.208 30.72-91.648 30.208 91.136 91.136 30.208-91.136 30.208-30.208 91.648z"
1615            />
1616          </svg>
1617        </div>
1618      
1619      
1620        <div class="joe_action_item back2top">
1621          <svg height="25" viewBox="0 0 1024 1024" width="25" xmlns="http://www.w3.org/2000/svg">
1622            <path
1623              d="M725.902 498.916c18.205-251.45-93.298-410.738-205.369-475.592l-6.257-3.982-6.258 3.414c-111.502 64.853-224.711 224.142-204.8 475.59-55.751 53.476-80.214 116.623-80.214 204.8v15.36l179.2-35.27c11.378 40.39 58.596 69.973 113.21 69.973 54.613 0 101.262-29.582 112.64-68.836l180.337 36.41v-15.36c-.569-89.885-25.031-153.6-82.489-206.507zM571.733 392.533c-33.564 31.29-87.04 28.445-118.329-5.12s-28.444-87.04 5.12-117.76c33.565-31.289 87.04-28.444 118.33 5.12s28.444 86.471-5.12 117.76zm-56.32 368.64c-35.84 0-64.284 29.014-64.284 64.285 0 35.84 54.044 182.613 64.284 182.613s64.285-146.773 64.285-182.613c0-35.271-29.014-64.285-64.285-64.285z"
1624            />
1625          </svg>
1626        </div>
1627      
1628    </div>
1629  
1630        
1631    <footer
1632      class="joe_footer   "
1633    >
1634      <div
1635        class="joe_container"
1636      >
1637        <div class="item">
1638          <p>
1639            © 2021 - 2026<a
1640              href="https://disue.com"
1641              target="_blank"
1642              rel="noopener noreferrer"
1643            >
1644              Disue · 迪素
1645            </a>
1646            
1647          </p>
1648          
1649
1650          
1651            
1652            
1653            
1654            
1655            
1656            
1657            
1658
1659            
1660              <p class="site_driven">
1661                本站点由
1662                <a
1663                  href="https://go.ms.ci/bwh"
1664                  target="_blank"
1665                  rel="noopener noreferrer nofollow"
1666                >
1667                  <img
1668                    class="custom"
1669                    src="/upload/logo1.png"
1670                    alt="云服务商"
1671                    onerror="Joe.errorImg(this, 'LoadFailedImg')" sizes="(max-width: 640px) 94vw, (max-width: 768px) 92vw, (max-width: 1024px) 88vw, min(800px, 85vw)" srcset="/upload/logo1.png?width=1600 1600w, /upload/logo1.png?width=400 400w, /upload/logo1.png?width=800 800w, /upload/logo1.png?width=1200 1200w"
1672                  /> </a
1673                >提供云服务
1674              </p>
1675            
1676          
1677          
1678          
1679        </div>
1680        <div class="side-col">
1681          
1682            <div class="item">
1683              
1684                <a class="rss" href="/rss.xml" target="_blank" rel="noopener noreferrer"
1685                  ><i class="joe-font joe-icon-rss-fill"></i>&nbsp;RSS</a
1686                >
1687              
1688              
1689                <a href="/sitemap.xml" target="_blank" rel="noopener noreferrer">
1690                  站点地图
1691                </a>
1692              
1693            </div>
1694          
1695          
1696        </div>
1697      </div>
1698    </footer>
1699  
1700      </div>
1701      
1702    <!--    ===== 引入脚本 start ===== -->
1703    <!--    <th:block th:if="${htmlType == 'index' && theme.config.home.enable_index_list_effect == true} or ${htmlType == 'journals' && theme.config.journals.enable_journal_effect == true} or ${htmlType == 'photos' && theme.config.photos.enable_photos_effect == true}">-->
1704    
1704<script src="/themes/theme-Joe3/assets/lib/wowjs/wow.min.js"></script>
1704
1705    <!--    </th:block>-->
1706    
1706<script src="/themes/theme-Joe3/assets/lib/lazysizes/lazysizes.min.js"></script>
1706
1707    
1707<script src="/themes/theme-Joe3/assets/lib/qmsg/qmsg.js"></script>
1707
1708    
1709    
1709<script src="/themes/theme-Joe3/assets/js/min/utils.min.js"></script>
1709
1710
1711    
1712    
1713    
1714    
1714<script src="/themes/theme-Joe3/assets/lib/fancybox/jquery.fancybox.min.js"></script>
1714
1715    
1716    
1716<script src="/themes/theme-Joe3/assets/js/min/custom.min.js?v=1.4.0"></script>
1716
1717    
1718    
1719      
1719<script src="/themes/theme-Joe3/assets/lib/favico/favico.min.js"></script>
1719
1720    
1721    
1722    <!--相册-->
1723    
1724
1725    <!--===== 引入页面级js start =====-->
1726    
1726<script src="/themes/theme-Joe3/assets/js/min/common.min.js?v=1.4.0"></script>
1726
1727    
1728    
1729    
1730    
1731        
1732    
1733    
1734    
1735    
1736
1737    <!-- ===== 引入页面级js end ===== -->
1738
1739    <!-- ===== 引入脚本 start ===== -->
1740
1741    
1742
1743    <!-- ===== 引入脚本 end =====-->
1744
1745    
1746    
1747    
1748
1749    <!--搜索点击-->
1750    
1750<script>
1751      const searchButton = document.getElementById('halo-search');
1752      searchButton.addEventListener('click', function () {
1753        SearchWidget.open();
1754      });
1755    </script>
1755
1756    <!--    大图配置-->
1757    
1758    
1759    
1760  
1761    </body>
1762  
1763</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.