<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://learn.devc.dev/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Maintenance+script</id>
	<title>陋室 - 用户贡献 [zh]</title>
	<link rel="self" type="application/atom+xml" href="https://learn.devc.dev/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Maintenance+script"/>
	<link rel="alternate" type="text/html" href="https://learn.devc.dev/wiki/%E7%89%B9%E6%AE%8A:%E7%94%A8%E6%88%B7%E8%B4%A1%E7%8C%AE/Maintenance_script"/>
	<updated>2026-04-08T19:45:18Z</updated>
	<subtitle>用户贡献</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://learn.devc.dev/index.php?title=%E9%A6%96%E9%A1%B5/style.css&amp;diff=1683</id>
		<title>首页/style.css</title>
		<link rel="alternate" type="text/html" href="https://learn.devc.dev/index.php?title=%E9%A6%96%E9%A1%B5/style.css&amp;diff=1683"/>
		<updated>2026-01-12T15:58:17Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script：​首页/style.css 清空并提示已迁移&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* 首页样式已迁移至 MediaWiki:Common.css */&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://learn.devc.dev/index.php?title=MediaWiki:Common.css&amp;diff=1682</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://learn.devc.dev/index.php?title=MediaWiki:Common.css&amp;diff=1682"/>
		<updated>2026-01-12T15:57:14Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script：​首页样式小幅优化（选择器收敛与中间断点）&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* 全局字体设置，覆盖东亚语言 */&lt;br /&gt;
body {&lt;br /&gt;
  font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Arial,&lt;br /&gt;
  &amp;quot;Noto Sans&amp;quot;, &amp;quot;Noto Sans CJK SC&amp;quot;, &amp;quot;Noto Sans CJK TC&amp;quot;, &amp;quot;Noto Sans JP&amp;quot;,&lt;br /&gt;
  &amp;quot;Noto Sans KR&amp;quot;, sans-serif, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;,&lt;br /&gt;
  &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, &amp;quot;SimSun&amp;quot;, &amp;quot;SimHei&amp;quot;,&lt;br /&gt;
  &amp;quot;Songti SC&amp;quot;, &amp;quot;KaiTi&amp;quot;, &amp;quot;MingLiU&amp;quot;, &amp;quot;PMingLiU&amp;quot;, &amp;quot;Microsoft JhengHei&amp;quot;, &amp;quot;Malgun Gothic&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 2026-01-11: load Mainpage-specific styles from dedicated page */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 全站重定向链接样式 */&lt;br /&gt;
.mw-redirect {&lt;br /&gt;
  color: #008000 !important; /* 使用 hex 颜色值，提高优先级 */&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 重定向链接悬停效果 */&lt;br /&gt;
.mw-redirect:hover {&lt;br /&gt;
  color: #006400 !important;&lt;br /&gt;
  text-decoration: underline;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 导航框样式迁移至 Template:Navbox/styles.css */&lt;br /&gt;
&lt;br /&gt;
/* 语言链接样式 */&lt;br /&gt;
#p-lang ul {&lt;br /&gt;
  list-style: none;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  margin: 10px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-lang li {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  margin-right: 10px;&lt;br /&gt;
}&lt;br /&gt;
/* 2026-01-12: 首页样式从 LocalSettings.php 迁移到此处（仅首页生效） */&lt;br /&gt;
body.page-Main_Page .banner {&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  flex-direction: column !important;&lt;br /&gt;
  justify-content: center !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  background: linear-gradient(135deg, #8B0000, #B22222) !important; /* 改进对比度 */&lt;br /&gt;
  color: white !important;&lt;br /&gt;
  font-weight: bold !important;&lt;br /&gt;
  border-radius: 12px !important;&lt;br /&gt;
  padding: 12px 24px !important;&lt;br /&gt;
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15) !important;&lt;br /&gt;
  text-align: center !important;&lt;br /&gt;
  margin: 20px 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
body.page-Main_Page .banner-text {&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  line-height: 1.4 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
body.page-Main_Page .banner .chinese-text {&lt;br /&gt;
  font-size: 24px !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
body.page-Main_Page .banner .english-text {&lt;br /&gt;
  font-size: 16px !important;&lt;br /&gt;
  font-weight: 500 !important;&lt;br /&gt;
  opacity: 0.9 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 当屏幕宽度大于 768px（如平板和大屏幕设备） */&lt;br /&gt;
@media screen and (min-width: 768px) {&lt;br /&gt;
  body.page-Main_Page .banner .chinese-text {&lt;br /&gt;
    font-size: 28px !important;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  body.page-Main_Page .banner .english-text {&lt;br /&gt;
    font-size: 18px !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 当屏幕宽度小于 480px（如手机设备） */&lt;br /&gt;
@media screen and (max-width: 480px) {&lt;br /&gt;
  body.page-Main_Page .banner .chinese-text {&lt;br /&gt;
    font-size: 20px !important;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  body.page-Main_Page .banner .english-text {&lt;br /&gt;
    font-size: 14px !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 内容块样式 */&lt;br /&gt;
body.page-Main_Page .content-box {&lt;br /&gt;
  margin: 10px !important;&lt;br /&gt;
  padding: 20px !important;&lt;br /&gt;
  border-radius: 10px !important;&lt;br /&gt;
  border: 1px solid #e0e0e0 !important;&lt;br /&gt;
  -webkit-transition: -webkit-transform 0.3s ease, box-shadow 0.3s ease !important;&lt;br /&gt;
  transition: transform 0.3s ease, box-shadow 0.3s ease !important;&lt;br /&gt;
  will-change: transform !important; /* 性能优化 */&lt;br /&gt;
  backface-visibility: hidden !important; /* 性能优化 */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
body.page-Main_Page .content-box:hover {&lt;br /&gt;
  -webkit-transform: translateY(-5px) !important;&lt;br /&gt;
  -moz-transform: translateY(-5px) !important;&lt;br /&gt;
  transform: translateY(-5px) !important;&lt;br /&gt;
  box-shadow: 0 8px 16px rgba(0, 0, 0, 0.18) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
body.page-Main_Page .content-box:focus {&lt;br /&gt;
  outline: 2px solid #0066cc !important; /* 可访问性改进 */&lt;br /&gt;
  outline-offset: 2px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
body.page-Main_Page .content-box h2 {&lt;br /&gt;
  position: relative !important;&lt;br /&gt;
  padding-bottom: 10px !important;&lt;br /&gt;
  margin-bottom: 10px !important;&lt;br /&gt;
  border-bottom: 2px solid red !important;&lt;br /&gt;
  color: #333333 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
body.page-Main_Page .content-box p {&lt;br /&gt;
  line-height: 1.6 !important;&lt;br /&gt;
  color: #666666 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Flex 容器 */&lt;br /&gt;
body.page-Main_Page .flex-container {&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  justify-content: space-between !important;&lt;br /&gt;
  gap: 20px !important;&lt;br /&gt;
  flex-wrap: wrap !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
body.page-Main_Page .flex-container .content-box {&lt;br /&gt;
  flex: 1 !important;&lt;br /&gt;
  min-width: 300px !important;&lt;br /&gt;
  max-width: 33.33% !important;&lt;br /&gt;
  box-sizing: border-box !important;&lt;br /&gt;
}&lt;br /&gt;
/* 中等屏幕优化 */&lt;br /&gt;
@media (max-width: 900px) {&lt;br /&gt;
  body.page-Main_Page .flex-container .content-box {&lt;br /&gt;
    max-width: 50% !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 移动端优化 */&lt;br /&gt;
@media (max-width: 768px) {&lt;br /&gt;
  body.page-Main_Page .flex-container {&lt;br /&gt;
    flex-direction: column !important;&lt;br /&gt;
    gap: 15px !important; /* 统一间距 */&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  body.page-Main_Page .flex-container .content-box {&lt;br /&gt;
    max-width: 100% !important; /* 移除限制 */&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    margin-bottom: 0 !important; /* 统一使用 gap */&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  body.page-Main_Page .banner .chinese-text,&lt;br /&gt;
  body.page-Main_Page .banner .english-text {&lt;br /&gt;
    text-align: center !important;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  body.page-Main_Page .banner .chinese-text {&lt;br /&gt;
    font-size: 20px !important;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  body.page-Main_Page .banner .english-text {&lt;br /&gt;
    font-size: 14px !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 为减少动画的用户提供支持 */&lt;br /&gt;
@media (prefers-reduced-motion: reduce) {&lt;br /&gt;
  body.page-Main_Page .content-box {&lt;br /&gt;
    -webkit-transition: none !important;&lt;br /&gt;
    transition: none !important;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  body.page-Main_Page .content-box:hover {&lt;br /&gt;
    -webkit-transform: none !important;&lt;br /&gt;
    -moz-transform: none !important;&lt;br /&gt;
    transform: none !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 暗色模式覆盖（Citizen: night） */&lt;br /&gt;
.skin-theme-clientpref-night body.page-Main_Page .banner {&lt;br /&gt;
  background: linear-gradient(135deg, #3a0c0c, #5a1a1a) !important;&lt;br /&gt;
  box-shadow: 0 6px 16px rgba(0, 0, 0, 0.45) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.skin-theme-clientpref-night body.page-Main_Page .content-box {&lt;br /&gt;
  border-color: #2f2f2f !important;&lt;br /&gt;
  background-color: #1c1c1c !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.skin-theme-clientpref-night body.page-Main_Page .content-box:hover {&lt;br /&gt;
  box-shadow: 0 10px 22px rgba(0, 0, 0, 0.5) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.skin-theme-clientpref-night body.page-Main_Page .content-box:focus {&lt;br /&gt;
  outline-color: #5ea0ff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.skin-theme-clientpref-night body.page-Main_Page .content-box h2 {&lt;br /&gt;
  border-bottom-color: #b94a4a !important;&lt;br /&gt;
  color: #ffffff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.skin-theme-clientpref-night body.page-Main_Page .content-box p {&lt;br /&gt;
  color: #cccccc !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://learn.devc.dev/index.php?title=MediaWiki:Mainpage.css&amp;diff=1681</id>
		<title>MediaWiki:Mainpage.css</title>
		<link rel="alternate" type="text/html" href="https://learn.devc.dev/index.php?title=MediaWiki:Mainpage.css&amp;diff=1681"/>
		<updated>2026-01-12T15:44:34Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script：​Mainpage.css 清空并提示已迁移&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* 首页样式已迁移至 MediaWiki:Common.css */&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://learn.devc.dev/index.php?title=MediaWiki:Common.css&amp;diff=1680</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://learn.devc.dev/index.php?title=MediaWiki:Common.css&amp;diff=1680"/>
		<updated>2026-01-12T15:44:24Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script：​首页样式改为仅在 Common.css 管理&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* 全局字体设置，覆盖东亚语言 */&lt;br /&gt;
body {&lt;br /&gt;
  font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Arial,&lt;br /&gt;
  &amp;quot;Noto Sans&amp;quot;, &amp;quot;Noto Sans CJK SC&amp;quot;, &amp;quot;Noto Sans CJK TC&amp;quot;, &amp;quot;Noto Sans JP&amp;quot;,&lt;br /&gt;
  &amp;quot;Noto Sans KR&amp;quot;, sans-serif, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;,&lt;br /&gt;
  &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, &amp;quot;SimSun&amp;quot;, &amp;quot;SimHei&amp;quot;,&lt;br /&gt;
  &amp;quot;Songti SC&amp;quot;, &amp;quot;KaiTi&amp;quot;, &amp;quot;MingLiU&amp;quot;, &amp;quot;PMingLiU&amp;quot;, &amp;quot;Microsoft JhengHei&amp;quot;, &amp;quot;Malgun Gothic&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 2026-01-11: load Mainpage-specific styles from dedicated page */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 全站重定向链接样式 */&lt;br /&gt;
.mw-redirect {&lt;br /&gt;
  color: #008000 !important; /* 使用 hex 颜色值，提高优先级 */&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 重定向链接悬停效果 */&lt;br /&gt;
.mw-redirect:hover {&lt;br /&gt;
  color: #006400 !important;&lt;br /&gt;
  text-decoration: underline;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 导航框样式迁移至 Template:Navbox/styles.css */&lt;br /&gt;
&lt;br /&gt;
/* 语言链接样式 */&lt;br /&gt;
#p-lang ul {&lt;br /&gt;
  list-style: none;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  margin: 10px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-lang li {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  margin-right: 10px;&lt;br /&gt;
}&lt;br /&gt;
/* 2026-01-12: 首页样式从 LocalSettings.php 迁移到此处（仅首页生效） */&lt;br /&gt;
.page-Main_Page .banner {&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  flex-direction: column !important;&lt;br /&gt;
  justify-content: center !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  background: linear-gradient(135deg, #8B0000, #B22222) !important; /* 改进对比度 */&lt;br /&gt;
  color: white !important;&lt;br /&gt;
  font-weight: bold !important;&lt;br /&gt;
  border-radius: 12px !important;&lt;br /&gt;
  padding: 12px 24px !important;&lt;br /&gt;
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15) !important;&lt;br /&gt;
  text-align: center !important;&lt;br /&gt;
  margin: 20px 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.page-Main_Page .banner-text {&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  line-height: 1.4 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.page-Main_Page .banner .chinese-text {&lt;br /&gt;
  font-size: 24px !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.page-Main_Page .banner .english-text {&lt;br /&gt;
  font-size: 16px !important;&lt;br /&gt;
  font-weight: 500 !important;&lt;br /&gt;
  opacity: 0.9 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 当屏幕宽度大于 768px（如平板和大屏幕设备） */&lt;br /&gt;
@media screen and (min-width: 768px) {&lt;br /&gt;
  .page-Main_Page .banner .chinese-text {&lt;br /&gt;
    font-size: 28px !important;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .page-Main_Page .banner .english-text {&lt;br /&gt;
    font-size: 18px !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 当屏幕宽度小于 480px（如手机设备） */&lt;br /&gt;
@media screen and (max-width: 480px) {&lt;br /&gt;
  .page-Main_Page .banner .chinese-text {&lt;br /&gt;
    font-size: 20px !important;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .page-Main_Page .banner .english-text {&lt;br /&gt;
    font-size: 14px !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 内容块样式 */&lt;br /&gt;
.page-Main_Page .content-box {&lt;br /&gt;
  margin: 10px !important;&lt;br /&gt;
  padding: 20px !important;&lt;br /&gt;
  border-radius: 10px !important;&lt;br /&gt;
  border: 1px solid #e0e0e0 !important;&lt;br /&gt;
  -webkit-transition: -webkit-transform 0.3s ease, box-shadow 0.3s ease !important;&lt;br /&gt;
  transition: transform 0.3s ease, box-shadow 0.3s ease !important;&lt;br /&gt;
  will-change: transform !important; /* 性能优化 */&lt;br /&gt;
  backface-visibility: hidden !important; /* 性能优化 */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.page-Main_Page .content-box:hover {&lt;br /&gt;
  -webkit-transform: translateY(-5px) !important;&lt;br /&gt;
  -moz-transform: translateY(-5px) !important;&lt;br /&gt;
  transform: translateY(-5px) !important;&lt;br /&gt;
  box-shadow: 0 8px 16px rgba(0, 0, 0, 0.2) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.page-Main_Page .content-box:focus {&lt;br /&gt;
  outline: 2px solid #0066cc !important; /* 可访问性改进 */&lt;br /&gt;
  outline-offset: 2px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.page-Main_Page .content-box h2 {&lt;br /&gt;
  position: relative !important;&lt;br /&gt;
  padding-bottom: 10px !important;&lt;br /&gt;
  margin-bottom: 10px !important;&lt;br /&gt;
  border-bottom: 2px solid red !important;&lt;br /&gt;
  color: #333333 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.page-Main_Page .content-box p {&lt;br /&gt;
  line-height: 1.6 !important;&lt;br /&gt;
  color: #666666 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Flex 容器 */&lt;br /&gt;
.page-Main_Page .flex-container {&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  justify-content: space-between !important;&lt;br /&gt;
  gap: 20px !important;&lt;br /&gt;
  flex-wrap: wrap !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.page-Main_Page .flex-container .content-box {&lt;br /&gt;
  flex: 1 !important;&lt;br /&gt;
  min-width: 300px !important;&lt;br /&gt;
  max-width: 33.33% !important;&lt;br /&gt;
  box-sizing: border-box !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 移动端优化 */&lt;br /&gt;
@media (max-width: 768px) {&lt;br /&gt;
  .page-Main_Page .flex-container {&lt;br /&gt;
    flex-direction: column !important;&lt;br /&gt;
    gap: 15px !important; /* 统一间距 */&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .page-Main_Page .flex-container .content-box {&lt;br /&gt;
    max-width: 100% !important; /* 移除限制 */&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    margin-bottom: 0 !important; /* 统一使用 gap */&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .page-Main_Page .banner .chinese-text,&lt;br /&gt;
  .page-Main_Page .banner .english-text {&lt;br /&gt;
    text-align: center !important;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .page-Main_Page .banner .chinese-text {&lt;br /&gt;
    font-size: 20px !important;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .page-Main_Page .banner .english-text {&lt;br /&gt;
    font-size: 14px !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 为减少动画的用户提供支持 */&lt;br /&gt;
@media (prefers-reduced-motion: reduce) {&lt;br /&gt;
  .page-Main_Page .content-box {&lt;br /&gt;
    -webkit-transition: none !important;&lt;br /&gt;
    transition: none !important;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .page-Main_Page .content-box:hover {&lt;br /&gt;
    -webkit-transform: none !important;&lt;br /&gt;
    -moz-transform: none !important;&lt;br /&gt;
    transform: none !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 暗色模式覆盖（Citizen: night） */&lt;br /&gt;
.skin-theme-clientpref-night .page-Main_Page .banner {&lt;br /&gt;
  background: linear-gradient(135deg, #3a0c0c, #5a1a1a) !important;&lt;br /&gt;
  box-shadow: 0 6px 16px rgba(0, 0, 0, 0.45) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.skin-theme-clientpref-night .page-Main_Page .content-box {&lt;br /&gt;
  border-color: #2f2f2f !important;&lt;br /&gt;
  background-color: #1c1c1c !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.skin-theme-clientpref-night .page-Main_Page .content-box:hover {&lt;br /&gt;
  box-shadow: 0 10px 22px rgba(0, 0, 0, 0.55) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.skin-theme-clientpref-night .page-Main_Page .content-box:focus {&lt;br /&gt;
  outline-color: #5ea0ff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.skin-theme-clientpref-night .page-Main_Page .content-box h2 {&lt;br /&gt;
  border-bottom-color: #b94a4a !important;&lt;br /&gt;
  color: #ffffff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.skin-theme-clientpref-night .page-Main_Page .content-box p {&lt;br /&gt;
  color: #cccccc !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://learn.devc.dev/index.php?title=MediaWiki:Mainpage.css&amp;diff=1679</id>
		<title>MediaWiki:Mainpage.css</title>
		<link rel="alternate" type="text/html" href="https://learn.devc.dev/index.php?title=MediaWiki:Mainpage.css&amp;diff=1679"/>
		<updated>2026-01-12T15:39:49Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script：​首页样式使用 ASCII 页类名&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* 首页样式：仅在首页生效 */&lt;br /&gt;
body.page-Main_Page .banner {&lt;br /&gt;
  height: auto;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  background: linear-gradient(135deg, #8B0000, #B22222); /* 改进对比度 */&lt;br /&gt;
  color: white;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  border-radius: 12px;&lt;br /&gt;
  padding: 12px 24px;&lt;br /&gt;
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);&lt;br /&gt;
  text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
body.page-Main_Page .banner-text {&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  line-height: 1.4;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
body.page-Main_Page .banner .chinese-text {&lt;br /&gt;
  font-size: 24px;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
body.page-Main_Page .banner .english-text {&lt;br /&gt;
  font-size: 16px;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  opacity: 0.9;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 当屏幕宽度大于 768px（如平板和大屏幕设备） */&lt;br /&gt;
@media screen and (min-width: 768px) {&lt;br /&gt;
  body.page-Main_Page .banner .chinese-text {&lt;br /&gt;
    font-size: 28px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  body.page-Main_Page .banner .english-text {&lt;br /&gt;
    font-size: 18px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 当屏幕宽度小于 480px（如手机设备） */&lt;br /&gt;
@media screen and (max-width: 480px) {&lt;br /&gt;
  body.page-Main_Page .banner .chinese-text {&lt;br /&gt;
    font-size: 20px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  body.page-Main_Page .banner .english-text {&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 内容块样式 */&lt;br /&gt;
body.page-Main_Page .content-box {&lt;br /&gt;
  margin: 10px;&lt;br /&gt;
  padding: 20px;&lt;br /&gt;
  border-radius: 10px;&lt;br /&gt;
  border: 1px solid #e0e0e0;&lt;br /&gt;
  -webkit-transition: -webkit-transform 0.3s ease, box-shadow 0.3s ease;&lt;br /&gt;
  transition: transform 0.3s ease, box-shadow 0.3s ease;&lt;br /&gt;
  will-change: transform; /* 性能优化 */&lt;br /&gt;
  backface-visibility: hidden; /* 性能优化 */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
body.page-Main_Page .content-box:hover {&lt;br /&gt;
  -webkit-transform: translateY(-5px);&lt;br /&gt;
  -moz-transform: translateY(-5px);&lt;br /&gt;
  transform: translateY(-5px);&lt;br /&gt;
  box-shadow: 0 8px 16px rgba(0, 0, 0, 0.2);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
body.page-Main_Page .content-box:focus {&lt;br /&gt;
  outline: 2px solid #0066cc; /* 可访问性改进 */&lt;br /&gt;
  outline-offset: 2px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
body.page-Main_Page .content-box h2 {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  padding-bottom: 10px;&lt;br /&gt;
  margin-bottom: 10px;&lt;br /&gt;
  border-bottom: 2px solid red;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
body.page-Main_Page .content-box p {&lt;br /&gt;
  line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Flex 容器 */&lt;br /&gt;
body.page-Main_Page .flex-container {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  justify-content: space-between;&lt;br /&gt;
  gap: 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
body.page-Main_Page .flex-container .content-box {&lt;br /&gt;
  flex: 1;&lt;br /&gt;
  max-width: 33.33%;&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 移动端优化 */&lt;br /&gt;
@media (max-width: 768px) {&lt;br /&gt;
  body.page-Main_Page .flex-container {&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    gap: 15px; /* 统一间距 */&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  body.page-Main_Page .flex-container .content-box {&lt;br /&gt;
    max-width: none; /* 移除限制 */&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    margin-bottom: 0; /* 统一使用 gap */&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  body.page-Main_Page .banner .chinese-text,&lt;br /&gt;
  body.page-Main_Page .banner .english-text {&lt;br /&gt;
    text-align: center;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  body.page-Main_Page .banner .chinese-text {&lt;br /&gt;
    font-size: 20px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  body.page-Main_Page .banner .english-text {&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 为减少动画的用户提供支持 */&lt;br /&gt;
@media (prefers-reduced-motion: reduce) {&lt;br /&gt;
  body.page-Main_Page .content-box {&lt;br /&gt;
    -webkit-transition: none;&lt;br /&gt;
    transition: none;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  body.page-Main_Page .content-box:hover {&lt;br /&gt;
    -webkit-transform: none;&lt;br /&gt;
    -moz-transform: none;&lt;br /&gt;
    transform: none;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 暗色模式覆盖（Citizen: night） */&lt;br /&gt;
.skin-theme-clientpref-night body.page-Main_Page .banner {&lt;br /&gt;
  background: linear-gradient(135deg, #3a0c0c, #5a1a1a);&lt;br /&gt;
  box-shadow: 0 6px 16px rgba(0, 0, 0, 0.45);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.skin-theme-clientpref-night body.page-Main_Page .content-box {&lt;br /&gt;
  border-color: #2f2f2f;&lt;br /&gt;
  background-color: #1c1c1c;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.skin-theme-clientpref-night body.page-Main_Page .content-box:hover {&lt;br /&gt;
  box-shadow: 0 10px 22px rgba(0, 0, 0, 0.55);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.skin-theme-clientpref-night body.page-Main_Page .content-box:focus {&lt;br /&gt;
  outline-color: #5ea0ff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.skin-theme-clientpref-night body.page-Main_Page .content-box h2 {&lt;br /&gt;
  border-bottom-color: #b94a4a;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://learn.devc.dev/index.php?title=MediaWiki:Common.css&amp;diff=1678</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://learn.devc.dev/index.php?title=MediaWiki:Common.css&amp;diff=1678"/>
		<updated>2026-01-12T15:39:40Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script：​首页样式使用 ASCII 页类名以避免 CSS 被过滤&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* 全局字体设置，覆盖东亚语言 */&lt;br /&gt;
body {&lt;br /&gt;
  font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Arial,&lt;br /&gt;
  &amp;quot;Noto Sans&amp;quot;, &amp;quot;Noto Sans CJK SC&amp;quot;, &amp;quot;Noto Sans CJK TC&amp;quot;, &amp;quot;Noto Sans JP&amp;quot;,&lt;br /&gt;
  &amp;quot;Noto Sans KR&amp;quot;, sans-serif, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;,&lt;br /&gt;
  &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, &amp;quot;SimSun&amp;quot;, &amp;quot;SimHei&amp;quot;,&lt;br /&gt;
  &amp;quot;Songti SC&amp;quot;, &amp;quot;KaiTi&amp;quot;, &amp;quot;MingLiU&amp;quot;, &amp;quot;PMingLiU&amp;quot;, &amp;quot;Microsoft JhengHei&amp;quot;, &amp;quot;Malgun Gothic&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 2026-01-11: load Mainpage-specific styles from dedicated page */&lt;br /&gt;
@import url(&amp;quot;/index.php?title=MediaWiki:Mainpage.css&amp;amp;action=raw&amp;amp;ctype=text/css&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
/* 全站重定向链接样式 */&lt;br /&gt;
.mw-redirect {&lt;br /&gt;
  color: #008000 !important; /* 使用 hex 颜色值，提高优先级 */&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 重定向链接悬停效果 */&lt;br /&gt;
.mw-redirect:hover {&lt;br /&gt;
  color: #006400 !important;&lt;br /&gt;
  text-decoration: underline;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 导航框样式迁移至 Template:Navbox/styles.css */&lt;br /&gt;
&lt;br /&gt;
/* 语言链接样式 */&lt;br /&gt;
#p-lang ul {&lt;br /&gt;
  list-style: none;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  margin: 10px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-lang li {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  margin-right: 10px;&lt;br /&gt;
}&lt;br /&gt;
/* 2026-01-12: 首页样式从 LocalSettings.php 迁移到此处（仅首页生效） */&lt;br /&gt;
.page-Main_Page .banner {&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  flex-direction: column !important;&lt;br /&gt;
  justify-content: center !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  background: linear-gradient(135deg, #8B0000, #B22222) !important; /* 改进对比度 */&lt;br /&gt;
  color: white !important;&lt;br /&gt;
  font-weight: bold !important;&lt;br /&gt;
  border-radius: 12px !important;&lt;br /&gt;
  padding: 12px 24px !important;&lt;br /&gt;
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15) !important;&lt;br /&gt;
  text-align: center !important;&lt;br /&gt;
  margin: 20px 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.page-Main_Page .banner-text {&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  line-height: 1.4 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.page-Main_Page .banner .chinese-text {&lt;br /&gt;
  font-size: 24px !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.page-Main_Page .banner .english-text {&lt;br /&gt;
  font-size: 16px !important;&lt;br /&gt;
  font-weight: 500 !important;&lt;br /&gt;
  opacity: 0.9 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 当屏幕宽度大于 768px（如平板和大屏幕设备） */&lt;br /&gt;
@media screen and (min-width: 768px) {&lt;br /&gt;
  .page-Main_Page .banner .chinese-text {&lt;br /&gt;
    font-size: 28px !important;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .page-Main_Page .banner .english-text {&lt;br /&gt;
    font-size: 18px !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 当屏幕宽度小于 480px（如手机设备） */&lt;br /&gt;
@media screen and (max-width: 480px) {&lt;br /&gt;
  .page-Main_Page .banner .chinese-text {&lt;br /&gt;
    font-size: 20px !important;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .page-Main_Page .banner .english-text {&lt;br /&gt;
    font-size: 14px !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 内容块样式 */&lt;br /&gt;
.page-Main_Page .content-box {&lt;br /&gt;
  margin: 10px !important;&lt;br /&gt;
  padding: 20px !important;&lt;br /&gt;
  border-radius: 10px !important;&lt;br /&gt;
  border: 1px solid #e0e0e0 !important;&lt;br /&gt;
  -webkit-transition: -webkit-transform 0.3s ease, box-shadow 0.3s ease !important;&lt;br /&gt;
  transition: transform 0.3s ease, box-shadow 0.3s ease !important;&lt;br /&gt;
  will-change: transform !important; /* 性能优化 */&lt;br /&gt;
  backface-visibility: hidden !important; /* 性能优化 */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.page-Main_Page .content-box:hover {&lt;br /&gt;
  -webkit-transform: translateY(-5px) !important;&lt;br /&gt;
  -moz-transform: translateY(-5px) !important;&lt;br /&gt;
  transform: translateY(-5px) !important;&lt;br /&gt;
  box-shadow: 0 8px 16px rgba(0, 0, 0, 0.2) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.page-Main_Page .content-box:focus {&lt;br /&gt;
  outline: 2px solid #0066cc !important; /* 可访问性改进 */&lt;br /&gt;
  outline-offset: 2px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.page-Main_Page .content-box h2 {&lt;br /&gt;
  position: relative !important;&lt;br /&gt;
  padding-bottom: 10px !important;&lt;br /&gt;
  margin-bottom: 10px !important;&lt;br /&gt;
  border-bottom: 2px solid red !important;&lt;br /&gt;
  color: #333333 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.page-Main_Page .content-box p {&lt;br /&gt;
  line-height: 1.6 !important;&lt;br /&gt;
  color: #666666 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Flex 容器 */&lt;br /&gt;
.page-Main_Page .flex-container {&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  justify-content: space-between !important;&lt;br /&gt;
  gap: 20px !important;&lt;br /&gt;
  flex-wrap: wrap !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.page-Main_Page .flex-container .content-box {&lt;br /&gt;
  flex: 1 !important;&lt;br /&gt;
  min-width: 300px !important;&lt;br /&gt;
  max-width: 33.33% !important;&lt;br /&gt;
  box-sizing: border-box !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 移动端优化 */&lt;br /&gt;
@media (max-width: 768px) {&lt;br /&gt;
  .page-Main_Page .flex-container {&lt;br /&gt;
    flex-direction: column !important;&lt;br /&gt;
    gap: 15px !important; /* 统一间距 */&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .page-Main_Page .flex-container .content-box {&lt;br /&gt;
    max-width: 100% !important; /* 移除限制 */&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    margin-bottom: 0 !important; /* 统一使用 gap */&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .page-Main_Page .banner .chinese-text,&lt;br /&gt;
  .page-Main_Page .banner .english-text {&lt;br /&gt;
    text-align: center !important;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .page-Main_Page .banner .chinese-text {&lt;br /&gt;
    font-size: 20px !important;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .page-Main_Page .banner .english-text {&lt;br /&gt;
    font-size: 14px !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 为减少动画的用户提供支持 */&lt;br /&gt;
@media (prefers-reduced-motion: reduce) {&lt;br /&gt;
  .page-Main_Page .content-box {&lt;br /&gt;
    -webkit-transition: none !important;&lt;br /&gt;
    transition: none !important;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .page-Main_Page .content-box:hover {&lt;br /&gt;
    -webkit-transform: none !important;&lt;br /&gt;
    -moz-transform: none !important;&lt;br /&gt;
    transform: none !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 暗色模式覆盖（Citizen: night） */&lt;br /&gt;
.skin-theme-clientpref-night .page-Main_Page .banner {&lt;br /&gt;
  background: linear-gradient(135deg, #3a0c0c, #5a1a1a) !important;&lt;br /&gt;
  box-shadow: 0 6px 16px rgba(0, 0, 0, 0.45) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.skin-theme-clientpref-night .page-Main_Page .content-box {&lt;br /&gt;
  border-color: #2f2f2f !important;&lt;br /&gt;
  background-color: #1c1c1c !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.skin-theme-clientpref-night .page-Main_Page .content-box:hover {&lt;br /&gt;
  box-shadow: 0 10px 22px rgba(0, 0, 0, 0.55) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.skin-theme-clientpref-night .page-Main_Page .content-box:focus {&lt;br /&gt;
  outline-color: #5ea0ff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.skin-theme-clientpref-night .page-Main_Page .content-box h2 {&lt;br /&gt;
  border-bottom-color: #b94a4a !important;&lt;br /&gt;
  color: #ffffff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.skin-theme-clientpref-night .page-Main_Page .content-box p {&lt;br /&gt;
  color: #cccccc !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://learn.devc.dev/index.php?title=MediaWiki:Common.css&amp;diff=1677</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://learn.devc.dev/index.php?title=MediaWiki:Common.css&amp;diff=1677"/>
		<updated>2026-01-12T15:31:18Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script：​迁移首页样式到 Common.css&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* 全局字体设置，覆盖东亚语言 */&lt;br /&gt;
body {&lt;br /&gt;
  font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Arial,&lt;br /&gt;
  &amp;quot;Noto Sans&amp;quot;, &amp;quot;Noto Sans CJK SC&amp;quot;, &amp;quot;Noto Sans CJK TC&amp;quot;, &amp;quot;Noto Sans JP&amp;quot;,&lt;br /&gt;
  &amp;quot;Noto Sans KR&amp;quot;, sans-serif, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;,&lt;br /&gt;
  &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, &amp;quot;SimSun&amp;quot;, &amp;quot;SimHei&amp;quot;,&lt;br /&gt;
  &amp;quot;Songti SC&amp;quot;, &amp;quot;KaiTi&amp;quot;, &amp;quot;MingLiU&amp;quot;, &amp;quot;PMingLiU&amp;quot;, &amp;quot;Microsoft JhengHei&amp;quot;, &amp;quot;Malgun Gothic&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 2026-01-11: load Mainpage-specific styles from dedicated page */&lt;br /&gt;
@import url(&amp;quot;/index.php?title=MediaWiki:Mainpage.css&amp;amp;action=raw&amp;amp;ctype=text/css&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
/* 全站重定向链接样式 */&lt;br /&gt;
.mw-redirect {&lt;br /&gt;
  color: #008000 !important; /* 使用 hex 颜色值，提高优先级 */&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 重定向链接悬停效果 */&lt;br /&gt;
.mw-redirect:hover {&lt;br /&gt;
  color: #006400 !important;&lt;br /&gt;
  text-decoration: underline;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 导航框样式迁移至 Template:Navbox/styles.css */&lt;br /&gt;
&lt;br /&gt;
/* 语言链接样式 */&lt;br /&gt;
#p-lang ul {&lt;br /&gt;
  list-style: none;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  margin: 10px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-lang li {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  margin-right: 10px;&lt;br /&gt;
}&lt;br /&gt;
/* 2026-01-12: 首页样式从 LocalSettings.php 迁移到此处（仅首页生效） */&lt;br /&gt;
.page-首页 .banner {&lt;br /&gt;
  height: auto !important;&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  flex-direction: column !important;&lt;br /&gt;
  justify-content: center !important;&lt;br /&gt;
  align-items: center !important;&lt;br /&gt;
  background: linear-gradient(135deg, #8B0000, #B22222) !important; /* 改进对比度 */&lt;br /&gt;
  color: white !important;&lt;br /&gt;
  font-weight: bold !important;&lt;br /&gt;
  border-radius: 12px !important;&lt;br /&gt;
  padding: 12px 24px !important;&lt;br /&gt;
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15) !important;&lt;br /&gt;
  text-align: center !important;&lt;br /&gt;
  margin: 20px 0 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.page-首页 .banner-text {&lt;br /&gt;
  margin: 0 !important;&lt;br /&gt;
  line-height: 1.4 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.page-首页 .banner .chinese-text {&lt;br /&gt;
  font-size: 24px !important;&lt;br /&gt;
  font-weight: 700 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.page-首页 .banner .english-text {&lt;br /&gt;
  font-size: 16px !important;&lt;br /&gt;
  font-weight: 500 !important;&lt;br /&gt;
  opacity: 0.9 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 当屏幕宽度大于 768px（如平板和大屏幕设备） */&lt;br /&gt;
@media screen and (min-width: 768px) {&lt;br /&gt;
  .page-首页 .banner .chinese-text {&lt;br /&gt;
    font-size: 28px !important;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .page-首页 .banner .english-text {&lt;br /&gt;
    font-size: 18px !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 当屏幕宽度小于 480px（如手机设备） */&lt;br /&gt;
@media screen and (max-width: 480px) {&lt;br /&gt;
  .page-首页 .banner .chinese-text {&lt;br /&gt;
    font-size: 20px !important;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .page-首页 .banner .english-text {&lt;br /&gt;
    font-size: 14px !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 内容块样式 */&lt;br /&gt;
.page-首页 .content-box {&lt;br /&gt;
  margin: 10px !important;&lt;br /&gt;
  padding: 20px !important;&lt;br /&gt;
  border-radius: 10px !important;&lt;br /&gt;
  border: 1px solid #e0e0e0 !important;&lt;br /&gt;
  -webkit-transition: -webkit-transform 0.3s ease, box-shadow 0.3s ease !important;&lt;br /&gt;
  transition: transform 0.3s ease, box-shadow 0.3s ease !important;&lt;br /&gt;
  will-change: transform !important; /* 性能优化 */&lt;br /&gt;
  backface-visibility: hidden !important; /* 性能优化 */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.page-首页 .content-box:hover {&lt;br /&gt;
  -webkit-transform: translateY(-5px) !important;&lt;br /&gt;
  -moz-transform: translateY(-5px) !important;&lt;br /&gt;
  transform: translateY(-5px) !important;&lt;br /&gt;
  box-shadow: 0 8px 16px rgba(0, 0, 0, 0.2) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.page-首页 .content-box:focus {&lt;br /&gt;
  outline: 2px solid #0066cc !important; /* 可访问性改进 */&lt;br /&gt;
  outline-offset: 2px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.page-首页 .content-box h2 {&lt;br /&gt;
  position: relative !important;&lt;br /&gt;
  padding-bottom: 10px !important;&lt;br /&gt;
  margin-bottom: 10px !important;&lt;br /&gt;
  border-bottom: 2px solid red !important;&lt;br /&gt;
  color: #333333 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.page-首页 .content-box p {&lt;br /&gt;
  line-height: 1.6 !important;&lt;br /&gt;
  color: #666666 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Flex 容器 */&lt;br /&gt;
.page-首页 .flex-container {&lt;br /&gt;
  display: flex !important;&lt;br /&gt;
  justify-content: space-between !important;&lt;br /&gt;
  gap: 20px !important;&lt;br /&gt;
  flex-wrap: wrap !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.page-首页 .flex-container .content-box {&lt;br /&gt;
  flex: 1 !important;&lt;br /&gt;
  min-width: 300px !important;&lt;br /&gt;
  max-width: 33.33% !important;&lt;br /&gt;
  box-sizing: border-box !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 移动端优化 */&lt;br /&gt;
@media (max-width: 768px) {&lt;br /&gt;
  .page-首页 .flex-container {&lt;br /&gt;
    flex-direction: column !important;&lt;br /&gt;
    gap: 15px !important; /* 统一间距 */&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .page-首页 .flex-container .content-box {&lt;br /&gt;
    max-width: 100% !important; /* 移除限制 */&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    margin-bottom: 0 !important; /* 统一使用 gap */&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .page-首页 .banner .chinese-text,&lt;br /&gt;
  .page-首页 .banner .english-text {&lt;br /&gt;
    text-align: center !important;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .page-首页 .banner .chinese-text {&lt;br /&gt;
    font-size: 20px !important;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .page-首页 .banner .english-text {&lt;br /&gt;
    font-size: 14px !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 为减少动画的用户提供支持 */&lt;br /&gt;
@media (prefers-reduced-motion: reduce) {&lt;br /&gt;
  .page-首页 .content-box {&lt;br /&gt;
    -webkit-transition: none !important;&lt;br /&gt;
    transition: none !important;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  .page-首页 .content-box:hover {&lt;br /&gt;
    -webkit-transform: none !important;&lt;br /&gt;
    -moz-transform: none !important;&lt;br /&gt;
    transform: none !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 暗色模式覆盖（Citizen: night） */&lt;br /&gt;
.skin-theme-clientpref-night .page-首页 .banner {&lt;br /&gt;
  background: linear-gradient(135deg, #3a0c0c, #5a1a1a) !important;&lt;br /&gt;
  box-shadow: 0 6px 16px rgba(0, 0, 0, 0.45) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.skin-theme-clientpref-night .page-首页 .content-box {&lt;br /&gt;
  border-color: #2f2f2f !important;&lt;br /&gt;
  background-color: #1c1c1c !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.skin-theme-clientpref-night .page-首页 .content-box:hover {&lt;br /&gt;
  box-shadow: 0 10px 22px rgba(0, 0, 0, 0.55) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.skin-theme-clientpref-night .page-首页 .content-box:focus {&lt;br /&gt;
  outline-color: #5ea0ff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.skin-theme-clientpref-night .page-首页 .content-box h2 {&lt;br /&gt;
  border-bottom-color: #b94a4a !important;&lt;br /&gt;
  color: #ffffff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.skin-theme-clientpref-night .page-首页 .content-box p {&lt;br /&gt;
  color: #cccccc !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://learn.devc.dev/index.php?title=%E5%B8%AE%E5%8A%A9:%E9%9C%80%E8%A6%81%E9%85%8D%E7%BD%AE%E7%9A%84%E6%A0%BC%E5%BC%8F&amp;diff=1676</id>
		<title>帮助:需要配置的格式</title>
		<link rel="alternate" type="text/html" href="https://learn.devc.dev/index.php?title=%E5%B8%AE%E5%8A%A9:%E9%9C%80%E8%A6%81%E9%85%8D%E7%BD%AE%E7%9A%84%E6%A0%BC%E5%BC%8F&amp;diff=1676"/>
		<updated>2026-01-12T15:22:40Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script：​TimedMediaHandler 示例改为 Commons 公用音视频文件&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 重定向 (Redirect) ==&lt;br /&gt;
用于将页面指向其它页面。&lt;br /&gt;
&lt;br /&gt;
示例语法：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot;&amp;gt;&lt;br /&gt;
#REDIRECT [[目标页面]]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
效果说明：保存后访问该页会自动跳转到目标页面。&lt;br /&gt;
== timeline ==&lt;br /&gt;
使用 EasyTimeline 或 &amp;lt;nowiki&amp;gt;&amp;lt;timeline&amp;gt;&amp;lt;/nowiki&amp;gt; 语法展示事件。&lt;br /&gt;
&lt;br /&gt;
=== 示例（可视化时间线） ===&lt;br /&gt;
&amp;lt;timeline&amp;gt;&lt;br /&gt;
# All measures are in pixels&lt;br /&gt;
&lt;br /&gt;
ImageSize  = width:160 height:550&lt;br /&gt;
PlotArea   = left:50 right:0 bottom:10 top:10&lt;br /&gt;
AlignBars  = justify&lt;br /&gt;
&lt;br /&gt;
DateFormat = yyyy&lt;br /&gt;
Period     = from:1917 till:1991&lt;br /&gt;
TimeAxis   = orientation:vertical&lt;br /&gt;
ScaleMajor = unit:year increment:5 start:1920&lt;br /&gt;
&lt;br /&gt;
# there is no automatic collision detection,&lt;br /&gt;
# so shift texts up or down manually to avoid overlap&lt;br /&gt;
&lt;br /&gt;
Define $dx = 25 # shift text to right side of bar&lt;br /&gt;
&lt;br /&gt;
PlotData=&lt;br /&gt;
  bar:Leaders color:red width:25 mark:(line,white) align:left fontsize:S&lt;br /&gt;
&lt;br /&gt;
  from:start till:1924 shift:($dx,15)   text:Vladimir~Ilyich~[[Special:MyLanguage/Lenin|Lenin]]&lt;br /&gt;
  from:1924  till:1953 shift:($dx,5)    text:[[Special:MyLanguage/Stalin|Josef~Stalin]]&lt;br /&gt;
  from:1953  till:1964 shift:($dx,5)    text:Nikita~[[Special:MyLanguage/Khrushchev|Khrushchev]]&lt;br /&gt;
  from:1964  till:1982 shift:($dx,5)    text:Leonid~[[Special:MyLanguage/Brezhnev|Brezhnev]]&lt;br /&gt;
  from:1982  till:1984 shift:($dx,-12)  text:Yuri~[[Special:MyLanguage/Andropov|Andropov]]&lt;br /&gt;
  from:1984  till:1985 shift:($dx,4)    text:Konstantin~[[Special:MyLanguage/Chernenko|Chernenko]] fontsize:XS&lt;br /&gt;
  from:1985  till:end  shift:($dx,10)   text:Mikhail~[[Special:MyLanguage/Gorbachev|Gorbachev]]&lt;br /&gt;
&amp;lt;/timeline&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 参见 ===&lt;br /&gt;
* https://www.mediawiki.org/wiki/Extension:EasyTimeline&lt;br /&gt;
== ImageMap ==&lt;br /&gt;
ImageMap 扩展允许在图片中定义可点区域，适合交互式说明。&lt;br /&gt;
&lt;br /&gt;
=== 示例 ===&lt;br /&gt;
&amp;lt;imagemap&amp;gt;&lt;br /&gt;
File:The Last Supper - Leonardo Da Vinci - High Resolution 32x16.jpg|thumb|center|500px|alt=&#039;&#039;The Last Supper&#039;&#039; by Leonardo da Vinci - Clickable Image|Image map example. Clicking on a person in the picture causes the browser to load the appropriate article.&lt;br /&gt;
&lt;br /&gt;
poly 550 2550 750 2400 1150 2300 1150 2150 1200 2075 1500 2125 1525 2300 1350 2800 1450 3000 1700 3300 1300 3475 650 3500 550 3300 450 3000 [[w:Bartholomew the Apostle|Bartholomew]] &lt;br /&gt;
poly 1575 2300 1625 2150 1900 2150 1925 2500 1875 2600 1800 2750 1600 3250 1425 3100 1400 2800 1375 2600 [[w:James, son of Alphaeus|James Minor]]&lt;br /&gt;
poly 1960 2150 2200 2150 2350 2500 2450 2575 2375 2725 2375 2900 2225 3100 2225 3225 1600 3225 1825 2700 1975 2450 1925 2300 [[w:Saint Andrew|Andrew]]&lt;br /&gt;
poly 2450 2575 2775 2500 2700 2650 2800 2700 2600 3000 2600 3250 2300 3250 2200 3200 2300 3000 [[w:Saint Peter|Peter]]&lt;br /&gt;
poly 2750 2500 2950 2400 3125 2600 3175 2700 3300 2850 3700 3200 3750 3200 3650 3350 3400 3200 3000 3350 2600 3325 2750 2800 2900 2700 2700 2650 [[w:Judas Iscariot|Judas]]&lt;br /&gt;
poly 3000 2350 3300 2350 3350 2660 3560 2600 3565 2690 3250 2800 3125 2575 [[w:Saint Peter|Peter]]&lt;br /&gt;
poly 3332 2338 3528 2240 4284 3024 4074 3332 3864 3290 3780 3150 3668 3192 3598 3024 3374 2870 3388 2772 3542 2800 3668 2702 3542 2590 3430 2604 3350 2600 3300 2500[[w:John the Apostle|John]]&lt;br /&gt;
poly 4775 2184 4915 2128 5055 2212 5083 2352 5111 2464 5181 2604 5307 2744 5573 3052 5615 3192 5657 3290 5573 3402 5461 3332 5335 3248 4495 3248 4439 3388 4243 3388 4075 3360 4173 3136 4327 3010 4509 2730 4663 2520 4733 2394 [[w:Jesus]]&lt;br /&gt;
poly 5900 2100 5900 2150 5800 2400 5800 2500 5675 2589 5480 2671 5438 2507 5425 2301 5589 2452 5630 2301 5650 2100 [[w:Thomas the Apostle|Thomas]]&lt;br /&gt;
poly 5918 2150 6041 2109 6137 2246 6192 2411 6110 2589 6110 2726 6192 2822 6302 2740 6589 3109 5658 3178 5575 2918 5300 2698 5233 2589 5274 2438 5370 2507 5521 2685 5617 2671 5712 2575 5822 2507 5808 2287 5822 2175 [[w:James, son of Zebedee|James Greater]]&lt;br /&gt;
poly 6137 2013 6439 2013 6863 2260 7110 2515 6726 2675 6507 2548 6425 2630 6356 2753 6548 2849 6699 2781 7082 2794 7178 3109 6699 3178 6548 2986 6397 2835 6165 2775 6110 2589 6233 2438 6302 2383 6151 2287 6096 2164 [[w:Philip the Apostle|Philip]]&lt;br /&gt;
poly 7635 2123 7800 2013 8000 2055 8025 2287 7950 2438 8000 2698 8055 2918 7959 3164 7233 3164 7124 2972 7124 2794 6548 2794 6384 2781 6384 2671 6493 2575 6750 2650 7075 2550 7219 2400 7625 2300 [[w:Matthew the Apostle|Matthew]]&lt;br /&gt;
poly 8325 2096 8600 2109 8635 2493 8615 2726 8439 2781 8274 2740 8125 2835 8151 2931 8400 2975 8411 3068 8589 3041 8617 3205 7987 3260 8124 3027 7987 2644 7904 2493 7959 2425 8096 2356 [[w:Judas Thaddaeus|Jude]]&lt;br /&gt;
poly 8800 2150 8900 2125 9055 2150 9125 2397 9400 2475 9550 2931 9625 3301 9151 3397 8535 3219 8726 3014 8466 3068 8411 2918 8178 2931 8124 2835 8329 2753 8535 2794 8726 2603 8725 2342 [[w:Simon the Zealot|Simon]]&lt;br /&gt;
&amp;lt;/imagemap&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 参见 ===&lt;br /&gt;
* https://www.mediawiki.org/wiki/Extension:ImageMap&lt;br /&gt;
* https://meta.wikimedia.org/wiki/ImageMapEdit_Howto&lt;br /&gt;
* https://www.familysearch.org/en/wiki/Help:Image_maps&lt;br /&gt;
* https://commons.wikimedia.org/wiki/Commons:Image_map_resources/zh&lt;br /&gt;
* https://en.wikipedia.org/wiki/Category:Wikipedia_image_maps&lt;br /&gt;
* https://meta.wikimedia.org/wiki/User:Dapete/ImageMapEdit#English&lt;br /&gt;
* https://www.maschek.hu/imagemap/&lt;br /&gt;
* https://www.image-maps.com/&lt;br /&gt;
* https://summerstyle.github.io/summer/&lt;br /&gt;
== inputbox ==&lt;br /&gt;
InputBox 扩展可以生成搜索或创建界面，便于用户快速跳转。&lt;br /&gt;
&lt;br /&gt;
示例语法：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;inputbox&amp;gt;&lt;br /&gt;
type=search&lt;br /&gt;
arialabel=Search the Wiki&lt;br /&gt;
&amp;lt;/inputbox&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
示例效果：&lt;br /&gt;
&amp;lt;inputbox&amp;gt;&lt;br /&gt;
type=search&lt;br /&gt;
arialabel=Search the Wiki&lt;br /&gt;
&amp;lt;/inputbox&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 参见 ===&lt;br /&gt;
* https://www.mediawiki.org/wiki/Extension:InputBox&lt;br /&gt;
== syntaxhighlight ==&lt;br /&gt;
用于高亮展示代码。&lt;br /&gt;
&lt;br /&gt;
示例语法：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
php -v&lt;br /&gt;
mysql --version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
示例效果：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
php -v&lt;br /&gt;
mysql --version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== mapframe ==&lt;br /&gt;
Kartographer 扩展提供交互地图。当前站点未接入 Kartotherian 兼容地图服务时，地图可能无法显示或仅显示占位。&lt;br /&gt;
&lt;br /&gt;
示例语法：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;mapframe latitude=&amp;quot;39.9042&amp;quot; longitude=&amp;quot;116.4074&amp;quot; zoom=&amp;quot;12&amp;quot; width=&amp;quot;600&amp;quot; height=&amp;quot;400&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/mapframe&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
示例效果（若地图未显示，请检查 Kartographer 地图服务配置）：&lt;br /&gt;
&amp;lt;mapframe latitude=&amp;quot;39.9042&amp;quot; longitude=&amp;quot;116.4074&amp;quot; zoom=&amp;quot;12&amp;quot; width=&amp;quot;600&amp;quot; height=&amp;quot;400&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/mapframe&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 参见 ===&lt;br /&gt;
* https://www.mediawiki.org/wiki/Extension:Kartographer&lt;br /&gt;
* https://www.openstreetmap.org/&lt;br /&gt;
== math ==&lt;br /&gt;
Math 扩展支持 LaTeX 与化学符号，适合数学与科学内容展示。&lt;br /&gt;
&lt;br /&gt;
=== 示例（公式） ===&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 示例（化学式） ===&lt;br /&gt;
&amp;lt;chem&amp;gt;Hg^2+ -&amp;gt;[I-] HgI2 -&amp;gt;[I-] {[Hg^{II}I4]^2-}&amp;lt;/chem&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 参见 ===&lt;br /&gt;
* https://www.mediawiki.org/wiki/Extension:Math&lt;br /&gt;
== score ==&lt;br /&gt;
Score 扩展渲染乐谱，需配套 LilyPond 与 ffmpeg。&lt;br /&gt;
&lt;br /&gt;
=== 示例 ===&lt;br /&gt;
&amp;lt;score vorbis=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  \relative g&#039; {&lt;br /&gt;
&lt;br /&gt;
    \key g \major \time 2/4&lt;br /&gt;
&lt;br /&gt;
    g8. b16 d8 d8 \bar &amp;quot;|&amp;quot; e4 d4 \bar &amp;quot;|&amp;quot; b8. g16 \times 2/3 {d&#039;8 d d} \bar &amp;quot;|&amp;quot; b4 g4 \bar &amp;quot;|&amp;quot; \times 2/3 {d8 d d} \times 2/3 {d8 d d} \bar &amp;quot;|&amp;quot; g4 r8 d8 \bar &amp;quot;|&amp;quot; \break&lt;br /&gt;
&lt;br /&gt;
    g4. g8 \bar &amp;quot;|&amp;quot; g8. g16 d8 e16 fis16 \bar &amp;quot;|&amp;quot; g4 g4 \bar &amp;quot;|&amp;quot; r8 b8 g8 a16 b16 \bar &amp;quot;|&amp;quot; d4 d4 \bar &amp;quot;|&amp;quot; \break&lt;br /&gt;
&lt;br /&gt;
    b8. b16 g8. b16 \bar &amp;quot;|&amp;quot; d8. b16 a4 \bar &amp;quot;|&amp;quot; a2 \bar &amp;quot;|&amp;quot; e&#039;4^&amp;gt; d4^&amp;gt; \bar &amp;quot;|&amp;quot; a4^&amp;gt; b4^&amp;gt; \bar &amp;quot;|&amp;quot; \break&lt;br /&gt;
&lt;br /&gt;
    d8^&amp;gt; b8^&amp;gt; r8 d8 \bar &amp;quot;|&amp;quot; b8 a16 b16 g4 \bar &amp;quot;|&amp;quot; b4 r4 \bar &amp;quot;|&amp;quot; d,8. e16 g8 g8 \bar &amp;quot;|&amp;quot; b8. b16 d8 d8 \bar &amp;quot;|&amp;quot; \break&lt;br /&gt;
&lt;br /&gt;
    a8 a16 a16 e4 \bar &amp;quot;|&amp;quot; a4. d,8 \bar &amp;quot;|&amp;quot; ^\&amp;lt; g4. g8 \bar &amp;quot;|&amp;quot; b4. b8 \! \bar &amp;quot;|&amp;quot; d2 \bar &amp;quot;|&amp;quot; \break&lt;br /&gt;
&lt;br /&gt;
    g,8. b16 d8 d8 \bar &amp;quot;|&amp;quot; e4 d4 \bar &amp;quot;|&amp;quot; b8. g16 \times 2/3 {d&#039;8 d d} \bar &amp;quot;|&amp;quot; b8 r8 g8 r8 \bar &amp;quot;|&amp;quot; d4^&amp;gt; g4^&amp;gt; \bar &amp;quot;|&amp;quot; \break&lt;br /&gt;
&lt;br /&gt;
    b8. g16 \times 2/3 {d&#039;8 d d} \bar &amp;quot;|&amp;quot; b8 r8 g8 r8 \bar &amp;quot;|&amp;quot; d4^&amp;gt; g4^&amp;gt; \bar &amp;quot;|&amp;quot; d4^&amp;gt; g4^&amp;gt; \bar &amp;quot;|&amp;quot; d4^&amp;gt; g4^&amp;gt; \bar &amp;quot;|&amp;quot; g4^&amp;gt; r4 \bar &amp;quot;|.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
    \addlyrics {&lt;br /&gt;
&lt;br /&gt;
        　 　 　 　 　 　 　 　 　 　 　 　 　 　 　 　 　 　 　 　 起&lt;br /&gt;
&lt;br /&gt;
        来！ 不 愿 做 奴 隶 的 人 们！ 把 我 们 的 血 肉，&lt;br /&gt;
&lt;br /&gt;
        筑 成 我 们 新 的 长 城！ 中 华 民 族&lt;br /&gt;
&lt;br /&gt;
        到 了 最 危 险 的 时 候， 每 个 人 被 迫 着 发 出&lt;br /&gt;
&lt;br /&gt;
        最 后 的 吼 声。 起 来！ 起 来！ 起 来！&lt;br /&gt;
&lt;br /&gt;
        我 们 万 众 一 心， 冒 着 敌 人 的 炮 火 前 进！&lt;br /&gt;
&lt;br /&gt;
        冒 着 敌 人 的 炮 火 前 进！ 前 进！ 前 进！ 进！&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/score&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 参见 ===&lt;br /&gt;
* https://www.mediawiki.org/wiki/Extension:Score&lt;br /&gt;
* https://lilypond.org/doc/v2.24/Documentation/web/manuals&lt;br /&gt;
== hiero ==&lt;br /&gt;
WikiHiero 支持古埃及象形文字排版。&lt;br /&gt;
&lt;br /&gt;
示例语法：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;hiero&amp;gt;A1&amp;lt;/hiero&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
示例效果：&lt;br /&gt;
&amp;lt;hiero&amp;gt;A1&amp;lt;/hiero&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 参见 ===&lt;br /&gt;
* https://www.mediawiki.org/wiki/Extension:WikiHiero&lt;br /&gt;
== PdfHandler ==&lt;br /&gt;
PdfHandler 扩展提供 PDF 预览与嵌入，适合文档展示。&lt;br /&gt;
&lt;br /&gt;
示例语法：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot;&amp;gt;&lt;br /&gt;
[[File:EXCEL 2016 QUICK START GUIDE.PDF|thumb|500px|EXCEL 2016 QUICK START GUIDE.PDF]]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
示例效果：&lt;br /&gt;
[[File:EXCEL 2016 QUICK START GUIDE.PDF|thumb|500px|EXCEL 2016 QUICK START GUIDE.PDF]]&lt;br /&gt;
&lt;br /&gt;
=== 参见 ===&lt;br /&gt;
* https://www.mediawiki.org/wiki/Extension:PdfHandler&lt;br /&gt;
== TimedMediaHandler ==&lt;br /&gt;
TimedMediaHandler 和相关工具链支持音视频上传与预览。&lt;br /&gt;
&lt;br /&gt;
以下示例使用维基共享资源（Commons）中的公共文件，理论上可直接显示：&lt;br /&gt;
&lt;br /&gt;
示例语法：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Example.ogg|thumb|音频示例（Commons）]]&lt;br /&gt;
[[File:Example.ogg|30px]]&lt;br /&gt;
[[File:Big Buck Bunny - closing credits.webm|300px|thumb|视频示例（Commons）]]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
示例效果：&lt;br /&gt;
[[File:Example.ogg|thumb|音频示例（Commons）]]&lt;br /&gt;
&lt;br /&gt;
[[File:Big Buck Bunny - closing credits.webm|300px|thumb|视频示例（Commons）]]&lt;br /&gt;
&lt;br /&gt;
=== 参见 ===&lt;br /&gt;
* https://www.mediawiki.org/wiki/Extension:TimedMediaHandler&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://learn.devc.dev/index.php?title=%E5%B8%AE%E5%8A%A9:%E9%9C%80%E8%A6%81%E9%85%8D%E7%BD%AE%E7%9A%84%E6%A0%BC%E5%BC%8F&amp;diff=1675</id>
		<title>帮助:需要配置的格式</title>
		<link rel="alternate" type="text/html" href="https://learn.devc.dev/index.php?title=%E5%B8%AE%E5%8A%A9:%E9%9C%80%E8%A6%81%E9%85%8D%E7%BD%AE%E7%9A%84%E6%A0%BC%E5%BC%8F&amp;diff=1675"/>
		<updated>2026-01-12T15:21:15Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script：​TimedMediaHandler 示例改为 Commons 公用文件&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 重定向 (Redirect) ==&lt;br /&gt;
用于将页面指向其它页面。&lt;br /&gt;
&lt;br /&gt;
示例语法：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot;&amp;gt;&lt;br /&gt;
#REDIRECT [[目标页面]]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
效果说明：保存后访问该页会自动跳转到目标页面。&lt;br /&gt;
== timeline ==&lt;br /&gt;
使用 EasyTimeline 或 &amp;lt;nowiki&amp;gt;&amp;lt;timeline&amp;gt;&amp;lt;/nowiki&amp;gt; 语法展示事件。&lt;br /&gt;
&lt;br /&gt;
=== 示例（可视化时间线） ===&lt;br /&gt;
&amp;lt;timeline&amp;gt;&lt;br /&gt;
# All measures are in pixels&lt;br /&gt;
&lt;br /&gt;
ImageSize  = width:160 height:550&lt;br /&gt;
PlotArea   = left:50 right:0 bottom:10 top:10&lt;br /&gt;
AlignBars  = justify&lt;br /&gt;
&lt;br /&gt;
DateFormat = yyyy&lt;br /&gt;
Period     = from:1917 till:1991&lt;br /&gt;
TimeAxis   = orientation:vertical&lt;br /&gt;
ScaleMajor = unit:year increment:5 start:1920&lt;br /&gt;
&lt;br /&gt;
# there is no automatic collision detection,&lt;br /&gt;
# so shift texts up or down manually to avoid overlap&lt;br /&gt;
&lt;br /&gt;
Define $dx = 25 # shift text to right side of bar&lt;br /&gt;
&lt;br /&gt;
PlotData=&lt;br /&gt;
  bar:Leaders color:red width:25 mark:(line,white) align:left fontsize:S&lt;br /&gt;
&lt;br /&gt;
  from:start till:1924 shift:($dx,15)   text:Vladimir~Ilyich~[[Special:MyLanguage/Lenin|Lenin]]&lt;br /&gt;
  from:1924  till:1953 shift:($dx,5)    text:[[Special:MyLanguage/Stalin|Josef~Stalin]]&lt;br /&gt;
  from:1953  till:1964 shift:($dx,5)    text:Nikita~[[Special:MyLanguage/Khrushchev|Khrushchev]]&lt;br /&gt;
  from:1964  till:1982 shift:($dx,5)    text:Leonid~[[Special:MyLanguage/Brezhnev|Brezhnev]]&lt;br /&gt;
  from:1982  till:1984 shift:($dx,-12)  text:Yuri~[[Special:MyLanguage/Andropov|Andropov]]&lt;br /&gt;
  from:1984  till:1985 shift:($dx,4)    text:Konstantin~[[Special:MyLanguage/Chernenko|Chernenko]] fontsize:XS&lt;br /&gt;
  from:1985  till:end  shift:($dx,10)   text:Mikhail~[[Special:MyLanguage/Gorbachev|Gorbachev]]&lt;br /&gt;
&amp;lt;/timeline&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 参见 ===&lt;br /&gt;
* https://www.mediawiki.org/wiki/Extension:EasyTimeline&lt;br /&gt;
== ImageMap ==&lt;br /&gt;
ImageMap 扩展允许在图片中定义可点区域，适合交互式说明。&lt;br /&gt;
&lt;br /&gt;
=== 示例 ===&lt;br /&gt;
&amp;lt;imagemap&amp;gt;&lt;br /&gt;
File:The Last Supper - Leonardo Da Vinci - High Resolution 32x16.jpg|thumb|center|500px|alt=&#039;&#039;The Last Supper&#039;&#039; by Leonardo da Vinci - Clickable Image|Image map example. Clicking on a person in the picture causes the browser to load the appropriate article.&lt;br /&gt;
&lt;br /&gt;
poly 550 2550 750 2400 1150 2300 1150 2150 1200 2075 1500 2125 1525 2300 1350 2800 1450 3000 1700 3300 1300 3475 650 3500 550 3300 450 3000 [[w:Bartholomew the Apostle|Bartholomew]] &lt;br /&gt;
poly 1575 2300 1625 2150 1900 2150 1925 2500 1875 2600 1800 2750 1600 3250 1425 3100 1400 2800 1375 2600 [[w:James, son of Alphaeus|James Minor]]&lt;br /&gt;
poly 1960 2150 2200 2150 2350 2500 2450 2575 2375 2725 2375 2900 2225 3100 2225 3225 1600 3225 1825 2700 1975 2450 1925 2300 [[w:Saint Andrew|Andrew]]&lt;br /&gt;
poly 2450 2575 2775 2500 2700 2650 2800 2700 2600 3000 2600 3250 2300 3250 2200 3200 2300 3000 [[w:Saint Peter|Peter]]&lt;br /&gt;
poly 2750 2500 2950 2400 3125 2600 3175 2700 3300 2850 3700 3200 3750 3200 3650 3350 3400 3200 3000 3350 2600 3325 2750 2800 2900 2700 2700 2650 [[w:Judas Iscariot|Judas]]&lt;br /&gt;
poly 3000 2350 3300 2350 3350 2660 3560 2600 3565 2690 3250 2800 3125 2575 [[w:Saint Peter|Peter]]&lt;br /&gt;
poly 3332 2338 3528 2240 4284 3024 4074 3332 3864 3290 3780 3150 3668 3192 3598 3024 3374 2870 3388 2772 3542 2800 3668 2702 3542 2590 3430 2604 3350 2600 3300 2500[[w:John the Apostle|John]]&lt;br /&gt;
poly 4775 2184 4915 2128 5055 2212 5083 2352 5111 2464 5181 2604 5307 2744 5573 3052 5615 3192 5657 3290 5573 3402 5461 3332 5335 3248 4495 3248 4439 3388 4243 3388 4075 3360 4173 3136 4327 3010 4509 2730 4663 2520 4733 2394 [[w:Jesus]]&lt;br /&gt;
poly 5900 2100 5900 2150 5800 2400 5800 2500 5675 2589 5480 2671 5438 2507 5425 2301 5589 2452 5630 2301 5650 2100 [[w:Thomas the Apostle|Thomas]]&lt;br /&gt;
poly 5918 2150 6041 2109 6137 2246 6192 2411 6110 2589 6110 2726 6192 2822 6302 2740 6589 3109 5658 3178 5575 2918 5300 2698 5233 2589 5274 2438 5370 2507 5521 2685 5617 2671 5712 2575 5822 2507 5808 2287 5822 2175 [[w:James, son of Zebedee|James Greater]]&lt;br /&gt;
poly 6137 2013 6439 2013 6863 2260 7110 2515 6726 2675 6507 2548 6425 2630 6356 2753 6548 2849 6699 2781 7082 2794 7178 3109 6699 3178 6548 2986 6397 2835 6165 2775 6110 2589 6233 2438 6302 2383 6151 2287 6096 2164 [[w:Philip the Apostle|Philip]]&lt;br /&gt;
poly 7635 2123 7800 2013 8000 2055 8025 2287 7950 2438 8000 2698 8055 2918 7959 3164 7233 3164 7124 2972 7124 2794 6548 2794 6384 2781 6384 2671 6493 2575 6750 2650 7075 2550 7219 2400 7625 2300 [[w:Matthew the Apostle|Matthew]]&lt;br /&gt;
poly 8325 2096 8600 2109 8635 2493 8615 2726 8439 2781 8274 2740 8125 2835 8151 2931 8400 2975 8411 3068 8589 3041 8617 3205 7987 3260 8124 3027 7987 2644 7904 2493 7959 2425 8096 2356 [[w:Judas Thaddaeus|Jude]]&lt;br /&gt;
poly 8800 2150 8900 2125 9055 2150 9125 2397 9400 2475 9550 2931 9625 3301 9151 3397 8535 3219 8726 3014 8466 3068 8411 2918 8178 2931 8124 2835 8329 2753 8535 2794 8726 2603 8725 2342 [[w:Simon the Zealot|Simon]]&lt;br /&gt;
&amp;lt;/imagemap&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 参见 ===&lt;br /&gt;
* https://www.mediawiki.org/wiki/Extension:ImageMap&lt;br /&gt;
* https://meta.wikimedia.org/wiki/ImageMapEdit_Howto&lt;br /&gt;
* https://www.familysearch.org/en/wiki/Help:Image_maps&lt;br /&gt;
* https://commons.wikimedia.org/wiki/Commons:Image_map_resources/zh&lt;br /&gt;
* https://en.wikipedia.org/wiki/Category:Wikipedia_image_maps&lt;br /&gt;
* https://meta.wikimedia.org/wiki/User:Dapete/ImageMapEdit#English&lt;br /&gt;
* https://www.maschek.hu/imagemap/&lt;br /&gt;
* https://www.image-maps.com/&lt;br /&gt;
* https://summerstyle.github.io/summer/&lt;br /&gt;
== inputbox ==&lt;br /&gt;
InputBox 扩展可以生成搜索或创建界面，便于用户快速跳转。&lt;br /&gt;
&lt;br /&gt;
示例语法：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;inputbox&amp;gt;&lt;br /&gt;
type=search&lt;br /&gt;
arialabel=Search the Wiki&lt;br /&gt;
&amp;lt;/inputbox&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
示例效果：&lt;br /&gt;
&amp;lt;inputbox&amp;gt;&lt;br /&gt;
type=search&lt;br /&gt;
arialabel=Search the Wiki&lt;br /&gt;
&amp;lt;/inputbox&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 参见 ===&lt;br /&gt;
* https://www.mediawiki.org/wiki/Extension:InputBox&lt;br /&gt;
== syntaxhighlight ==&lt;br /&gt;
用于高亮展示代码。&lt;br /&gt;
&lt;br /&gt;
示例语法：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
php -v&lt;br /&gt;
mysql --version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
示例效果：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
php -v&lt;br /&gt;
mysql --version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== mapframe ==&lt;br /&gt;
Kartographer 扩展提供交互地图。当前站点未接入 Kartotherian 兼容地图服务时，地图可能无法显示或仅显示占位。&lt;br /&gt;
&lt;br /&gt;
示例语法：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;mapframe latitude=&amp;quot;39.9042&amp;quot; longitude=&amp;quot;116.4074&amp;quot; zoom=&amp;quot;12&amp;quot; width=&amp;quot;600&amp;quot; height=&amp;quot;400&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/mapframe&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
示例效果（若地图未显示，请检查 Kartographer 地图服务配置）：&lt;br /&gt;
&amp;lt;mapframe latitude=&amp;quot;39.9042&amp;quot; longitude=&amp;quot;116.4074&amp;quot; zoom=&amp;quot;12&amp;quot; width=&amp;quot;600&amp;quot; height=&amp;quot;400&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/mapframe&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 参见 ===&lt;br /&gt;
* https://www.mediawiki.org/wiki/Extension:Kartographer&lt;br /&gt;
* https://www.openstreetmap.org/&lt;br /&gt;
== math ==&lt;br /&gt;
Math 扩展支持 LaTeX 与化学符号，适合数学与科学内容展示。&lt;br /&gt;
&lt;br /&gt;
=== 示例（公式） ===&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 示例（化学式） ===&lt;br /&gt;
&amp;lt;chem&amp;gt;Hg^2+ -&amp;gt;[I-] HgI2 -&amp;gt;[I-] {[Hg^{II}I4]^2-}&amp;lt;/chem&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 参见 ===&lt;br /&gt;
* https://www.mediawiki.org/wiki/Extension:Math&lt;br /&gt;
== score ==&lt;br /&gt;
Score 扩展渲染乐谱，需配套 LilyPond 与 ffmpeg。&lt;br /&gt;
&lt;br /&gt;
=== 示例 ===&lt;br /&gt;
&amp;lt;score vorbis=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  \relative g&#039; {&lt;br /&gt;
&lt;br /&gt;
    \key g \major \time 2/4&lt;br /&gt;
&lt;br /&gt;
    g8. b16 d8 d8 \bar &amp;quot;|&amp;quot; e4 d4 \bar &amp;quot;|&amp;quot; b8. g16 \times 2/3 {d&#039;8 d d} \bar &amp;quot;|&amp;quot; b4 g4 \bar &amp;quot;|&amp;quot; \times 2/3 {d8 d d} \times 2/3 {d8 d d} \bar &amp;quot;|&amp;quot; g4 r8 d8 \bar &amp;quot;|&amp;quot; \break&lt;br /&gt;
&lt;br /&gt;
    g4. g8 \bar &amp;quot;|&amp;quot; g8. g16 d8 e16 fis16 \bar &amp;quot;|&amp;quot; g4 g4 \bar &amp;quot;|&amp;quot; r8 b8 g8 a16 b16 \bar &amp;quot;|&amp;quot; d4 d4 \bar &amp;quot;|&amp;quot; \break&lt;br /&gt;
&lt;br /&gt;
    b8. b16 g8. b16 \bar &amp;quot;|&amp;quot; d8. b16 a4 \bar &amp;quot;|&amp;quot; a2 \bar &amp;quot;|&amp;quot; e&#039;4^&amp;gt; d4^&amp;gt; \bar &amp;quot;|&amp;quot; a4^&amp;gt; b4^&amp;gt; \bar &amp;quot;|&amp;quot; \break&lt;br /&gt;
&lt;br /&gt;
    d8^&amp;gt; b8^&amp;gt; r8 d8 \bar &amp;quot;|&amp;quot; b8 a16 b16 g4 \bar &amp;quot;|&amp;quot; b4 r4 \bar &amp;quot;|&amp;quot; d,8. e16 g8 g8 \bar &amp;quot;|&amp;quot; b8. b16 d8 d8 \bar &amp;quot;|&amp;quot; \break&lt;br /&gt;
&lt;br /&gt;
    a8 a16 a16 e4 \bar &amp;quot;|&amp;quot; a4. d,8 \bar &amp;quot;|&amp;quot; ^\&amp;lt; g4. g8 \bar &amp;quot;|&amp;quot; b4. b8 \! \bar &amp;quot;|&amp;quot; d2 \bar &amp;quot;|&amp;quot; \break&lt;br /&gt;
&lt;br /&gt;
    g,8. b16 d8 d8 \bar &amp;quot;|&amp;quot; e4 d4 \bar &amp;quot;|&amp;quot; b8. g16 \times 2/3 {d&#039;8 d d} \bar &amp;quot;|&amp;quot; b8 r8 g8 r8 \bar &amp;quot;|&amp;quot; d4^&amp;gt; g4^&amp;gt; \bar &amp;quot;|&amp;quot; \break&lt;br /&gt;
&lt;br /&gt;
    b8. g16 \times 2/3 {d&#039;8 d d} \bar &amp;quot;|&amp;quot; b8 r8 g8 r8 \bar &amp;quot;|&amp;quot; d4^&amp;gt; g4^&amp;gt; \bar &amp;quot;|&amp;quot; d4^&amp;gt; g4^&amp;gt; \bar &amp;quot;|&amp;quot; d4^&amp;gt; g4^&amp;gt; \bar &amp;quot;|&amp;quot; g4^&amp;gt; r4 \bar &amp;quot;|.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
    \addlyrics {&lt;br /&gt;
&lt;br /&gt;
        　 　 　 　 　 　 　 　 　 　 　 　 　 　 　 　 　 　 　 　 起&lt;br /&gt;
&lt;br /&gt;
        来！ 不 愿 做 奴 隶 的 人 们！ 把 我 们 的 血 肉，&lt;br /&gt;
&lt;br /&gt;
        筑 成 我 们 新 的 长 城！ 中 华 民 族&lt;br /&gt;
&lt;br /&gt;
        到 了 最 危 险 的 时 候， 每 个 人 被 迫 着 发 出&lt;br /&gt;
&lt;br /&gt;
        最 后 的 吼 声。 起 来！ 起 来！ 起 来！&lt;br /&gt;
&lt;br /&gt;
        我 们 万 众 一 心， 冒 着 敌 人 的 炮 火 前 进！&lt;br /&gt;
&lt;br /&gt;
        冒 着 敌 人 的 炮 火 前 进！ 前 进！ 前 进！ 进！&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/score&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 参见 ===&lt;br /&gt;
* https://www.mediawiki.org/wiki/Extension:Score&lt;br /&gt;
* https://lilypond.org/doc/v2.24/Documentation/web/manuals&lt;br /&gt;
== hiero ==&lt;br /&gt;
WikiHiero 支持古埃及象形文字排版。&lt;br /&gt;
&lt;br /&gt;
示例语法：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;hiero&amp;gt;A1&amp;lt;/hiero&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
示例效果：&lt;br /&gt;
&amp;lt;hiero&amp;gt;A1&amp;lt;/hiero&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 参见 ===&lt;br /&gt;
* https://www.mediawiki.org/wiki/Extension:WikiHiero&lt;br /&gt;
== PdfHandler ==&lt;br /&gt;
PdfHandler 扩展提供 PDF 预览与嵌入，适合文档展示。&lt;br /&gt;
&lt;br /&gt;
示例语法：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot;&amp;gt;&lt;br /&gt;
[[File:EXCEL 2016 QUICK START GUIDE.PDF|thumb|500px|EXCEL 2016 QUICK START GUIDE.PDF]]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
示例效果：&lt;br /&gt;
[[File:EXCEL 2016 QUICK START GUIDE.PDF|thumb|500px|EXCEL 2016 QUICK START GUIDE.PDF]]&lt;br /&gt;
&lt;br /&gt;
=== 参见 ===&lt;br /&gt;
* https://www.mediawiki.org/wiki/Extension:PdfHandler&lt;br /&gt;
== TimedMediaHandler ==&lt;br /&gt;
TimedMediaHandler 和相关工具链支持音视频上传与预览。&lt;br /&gt;
&lt;br /&gt;
以下示例使用维基共享资源（Commons）中的公共文件，理论上可直接显示：&lt;br /&gt;
&lt;br /&gt;
示例语法：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Example.ogg|thumb|音频示例（Commons）]]&lt;br /&gt;
[[File:Example.ogg|30px]]&lt;br /&gt;
[[File:Big Buck Bunny 4K.webm|300px|thumb|视频示例（Commons）]]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
示例效果：&lt;br /&gt;
[[File:Example.ogg|thumb|音频示例（Commons）]]&lt;br /&gt;
&lt;br /&gt;
[[File:Big Buck Bunny 4K.webm|300px|thumb|视频示例（Commons）]]&lt;br /&gt;
&lt;br /&gt;
=== 参见 ===&lt;br /&gt;
* https://www.mediawiki.org/wiki/Extension:TimedMediaHandler&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://learn.devc.dev/index.php?title=%E5%B8%AE%E5%8A%A9:%E9%9C%80%E8%A6%81%E9%85%8D%E7%BD%AE%E7%9A%84%E6%A0%BC%E5%BC%8F&amp;diff=1674</id>
		<title>帮助:需要配置的格式</title>
		<link rel="alternate" type="text/html" href="https://learn.devc.dev/index.php?title=%E5%B8%AE%E5%8A%A9:%E9%9C%80%E8%A6%81%E9%85%8D%E7%BD%AE%E7%9A%84%E6%A0%BC%E5%BC%8F&amp;diff=1674"/>
		<updated>2026-01-12T15:17:24Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script：​补充特殊格式示例并校对现有内容&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 重定向 (Redirect) ==&lt;br /&gt;
用于将页面指向其它页面。&lt;br /&gt;
&lt;br /&gt;
示例语法：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot;&amp;gt;&lt;br /&gt;
#REDIRECT [[目标页面]]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
效果说明：保存后访问该页会自动跳转到目标页面。&lt;br /&gt;
== timeline ==&lt;br /&gt;
使用 EasyTimeline 或 &amp;lt;nowiki&amp;gt;&amp;lt;timeline&amp;gt;&amp;lt;/nowiki&amp;gt; 语法展示事件。&lt;br /&gt;
&lt;br /&gt;
=== 示例（可视化时间线） ===&lt;br /&gt;
&amp;lt;timeline&amp;gt;&lt;br /&gt;
# All measures are in pixels&lt;br /&gt;
&lt;br /&gt;
ImageSize  = width:160 height:550&lt;br /&gt;
PlotArea   = left:50 right:0 bottom:10 top:10&lt;br /&gt;
AlignBars  = justify&lt;br /&gt;
&lt;br /&gt;
DateFormat = yyyy&lt;br /&gt;
Period     = from:1917 till:1991&lt;br /&gt;
TimeAxis   = orientation:vertical&lt;br /&gt;
ScaleMajor = unit:year increment:5 start:1920&lt;br /&gt;
&lt;br /&gt;
# there is no automatic collision detection,&lt;br /&gt;
# so shift texts up or down manually to avoid overlap&lt;br /&gt;
&lt;br /&gt;
Define $dx = 25 # shift text to right side of bar&lt;br /&gt;
&lt;br /&gt;
PlotData=&lt;br /&gt;
  bar:Leaders color:red width:25 mark:(line,white) align:left fontsize:S&lt;br /&gt;
&lt;br /&gt;
  from:start till:1924 shift:($dx,15)   text:Vladimir~Ilyich~[[Special:MyLanguage/Lenin|Lenin]]&lt;br /&gt;
  from:1924  till:1953 shift:($dx,5)    text:[[Special:MyLanguage/Stalin|Josef~Stalin]]&lt;br /&gt;
  from:1953  till:1964 shift:($dx,5)    text:Nikita~[[Special:MyLanguage/Khrushchev|Khrushchev]]&lt;br /&gt;
  from:1964  till:1982 shift:($dx,5)    text:Leonid~[[Special:MyLanguage/Brezhnev|Brezhnev]]&lt;br /&gt;
  from:1982  till:1984 shift:($dx,-12)  text:Yuri~[[Special:MyLanguage/Andropov|Andropov]]&lt;br /&gt;
  from:1984  till:1985 shift:($dx,4)    text:Konstantin~[[Special:MyLanguage/Chernenko|Chernenko]] fontsize:XS&lt;br /&gt;
  from:1985  till:end  shift:($dx,10)   text:Mikhail~[[Special:MyLanguage/Gorbachev|Gorbachev]]&lt;br /&gt;
&amp;lt;/timeline&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 参见 ===&lt;br /&gt;
* https://www.mediawiki.org/wiki/Extension:EasyTimeline&lt;br /&gt;
== ImageMap ==&lt;br /&gt;
ImageMap 扩展允许在图片中定义可点区域，适合交互式说明。&lt;br /&gt;
&lt;br /&gt;
=== 示例 ===&lt;br /&gt;
&amp;lt;imagemap&amp;gt;&lt;br /&gt;
File:The Last Supper - Leonardo Da Vinci - High Resolution 32x16.jpg|thumb|center|500px|alt=&#039;&#039;The Last Supper&#039;&#039; by Leonardo da Vinci - Clickable Image|Image map example. Clicking on a person in the picture causes the browser to load the appropriate article.&lt;br /&gt;
&lt;br /&gt;
poly 550 2550 750 2400 1150 2300 1150 2150 1200 2075 1500 2125 1525 2300 1350 2800 1450 3000 1700 3300 1300 3475 650 3500 550 3300 450 3000 [[w:Bartholomew the Apostle|Bartholomew]] &lt;br /&gt;
poly 1575 2300 1625 2150 1900 2150 1925 2500 1875 2600 1800 2750 1600 3250 1425 3100 1400 2800 1375 2600 [[w:James, son of Alphaeus|James Minor]]&lt;br /&gt;
poly 1960 2150 2200 2150 2350 2500 2450 2575 2375 2725 2375 2900 2225 3100 2225 3225 1600 3225 1825 2700 1975 2450 1925 2300 [[w:Saint Andrew|Andrew]]&lt;br /&gt;
poly 2450 2575 2775 2500 2700 2650 2800 2700 2600 3000 2600 3250 2300 3250 2200 3200 2300 3000 [[w:Saint Peter|Peter]]&lt;br /&gt;
poly 2750 2500 2950 2400 3125 2600 3175 2700 3300 2850 3700 3200 3750 3200 3650 3350 3400 3200 3000 3350 2600 3325 2750 2800 2900 2700 2700 2650 [[w:Judas Iscariot|Judas]]&lt;br /&gt;
poly 3000 2350 3300 2350 3350 2660 3560 2600 3565 2690 3250 2800 3125 2575 [[w:Saint Peter|Peter]]&lt;br /&gt;
poly 3332 2338 3528 2240 4284 3024 4074 3332 3864 3290 3780 3150 3668 3192 3598 3024 3374 2870 3388 2772 3542 2800 3668 2702 3542 2590 3430 2604 3350 2600 3300 2500[[w:John the Apostle|John]]&lt;br /&gt;
poly 4775 2184 4915 2128 5055 2212 5083 2352 5111 2464 5181 2604 5307 2744 5573 3052 5615 3192 5657 3290 5573 3402 5461 3332 5335 3248 4495 3248 4439 3388 4243 3388 4075 3360 4173 3136 4327 3010 4509 2730 4663 2520 4733 2394 [[w:Jesus]]&lt;br /&gt;
poly 5900 2100 5900 2150 5800 2400 5800 2500 5675 2589 5480 2671 5438 2507 5425 2301 5589 2452 5630 2301 5650 2100 [[w:Thomas the Apostle|Thomas]]&lt;br /&gt;
poly 5918 2150 6041 2109 6137 2246 6192 2411 6110 2589 6110 2726 6192 2822 6302 2740 6589 3109 5658 3178 5575 2918 5300 2698 5233 2589 5274 2438 5370 2507 5521 2685 5617 2671 5712 2575 5822 2507 5808 2287 5822 2175 [[w:James, son of Zebedee|James Greater]]&lt;br /&gt;
poly 6137 2013 6439 2013 6863 2260 7110 2515 6726 2675 6507 2548 6425 2630 6356 2753 6548 2849 6699 2781 7082 2794 7178 3109 6699 3178 6548 2986 6397 2835 6165 2775 6110 2589 6233 2438 6302 2383 6151 2287 6096 2164 [[w:Philip the Apostle|Philip]]&lt;br /&gt;
poly 7635 2123 7800 2013 8000 2055 8025 2287 7950 2438 8000 2698 8055 2918 7959 3164 7233 3164 7124 2972 7124 2794 6548 2794 6384 2781 6384 2671 6493 2575 6750 2650 7075 2550 7219 2400 7625 2300 [[w:Matthew the Apostle|Matthew]]&lt;br /&gt;
poly 8325 2096 8600 2109 8635 2493 8615 2726 8439 2781 8274 2740 8125 2835 8151 2931 8400 2975 8411 3068 8589 3041 8617 3205 7987 3260 8124 3027 7987 2644 7904 2493 7959 2425 8096 2356 [[w:Judas Thaddaeus|Jude]]&lt;br /&gt;
poly 8800 2150 8900 2125 9055 2150 9125 2397 9400 2475 9550 2931 9625 3301 9151 3397 8535 3219 8726 3014 8466 3068 8411 2918 8178 2931 8124 2835 8329 2753 8535 2794 8726 2603 8725 2342 [[w:Simon the Zealot|Simon]]&lt;br /&gt;
&amp;lt;/imagemap&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 参见 ===&lt;br /&gt;
* https://www.mediawiki.org/wiki/Extension:ImageMap&lt;br /&gt;
* https://meta.wikimedia.org/wiki/ImageMapEdit_Howto&lt;br /&gt;
* https://www.familysearch.org/en/wiki/Help:Image_maps&lt;br /&gt;
* https://commons.wikimedia.org/wiki/Commons:Image_map_resources/zh&lt;br /&gt;
* https://en.wikipedia.org/wiki/Category:Wikipedia_image_maps&lt;br /&gt;
* https://meta.wikimedia.org/wiki/User:Dapete/ImageMapEdit#English&lt;br /&gt;
* https://www.maschek.hu/imagemap/&lt;br /&gt;
* https://www.image-maps.com/&lt;br /&gt;
* https://summerstyle.github.io/summer/&lt;br /&gt;
== inputbox ==&lt;br /&gt;
InputBox 扩展可以生成搜索或创建界面，便于用户快速跳转。&lt;br /&gt;
&lt;br /&gt;
示例语法：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;inputbox&amp;gt;&lt;br /&gt;
type=search&lt;br /&gt;
arialabel=Search the Wiki&lt;br /&gt;
&amp;lt;/inputbox&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
示例效果：&lt;br /&gt;
&amp;lt;inputbox&amp;gt;&lt;br /&gt;
type=search&lt;br /&gt;
arialabel=Search the Wiki&lt;br /&gt;
&amp;lt;/inputbox&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 参见 ===&lt;br /&gt;
* https://www.mediawiki.org/wiki/Extension:InputBox&lt;br /&gt;
== syntaxhighlight ==&lt;br /&gt;
用于高亮展示代码。&lt;br /&gt;
&lt;br /&gt;
示例语法：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
php -v&lt;br /&gt;
mysql --version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
示例效果：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
php -v&lt;br /&gt;
mysql --version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== mapframe ==&lt;br /&gt;
Kartographer 扩展提供交互地图。当前站点未接入 Kartotherian 兼容地图服务时，地图可能无法显示或仅显示占位。&lt;br /&gt;
&lt;br /&gt;
示例语法：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;mapframe latitude=&amp;quot;39.9042&amp;quot; longitude=&amp;quot;116.4074&amp;quot; zoom=&amp;quot;12&amp;quot; width=&amp;quot;600&amp;quot; height=&amp;quot;400&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/mapframe&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
示例效果（若地图未显示，请检查 Kartographer 地图服务配置）：&lt;br /&gt;
&amp;lt;mapframe latitude=&amp;quot;39.9042&amp;quot; longitude=&amp;quot;116.4074&amp;quot; zoom=&amp;quot;12&amp;quot; width=&amp;quot;600&amp;quot; height=&amp;quot;400&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/mapframe&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 参见 ===&lt;br /&gt;
* https://www.mediawiki.org/wiki/Extension:Kartographer&lt;br /&gt;
* https://www.openstreetmap.org/&lt;br /&gt;
== math ==&lt;br /&gt;
Math 扩展支持 LaTeX 与化学符号，适合数学与科学内容展示。&lt;br /&gt;
&lt;br /&gt;
=== 示例（公式） ===&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 示例（化学式） ===&lt;br /&gt;
&amp;lt;chem&amp;gt;Hg^2+ -&amp;gt;[I-] HgI2 -&amp;gt;[I-] {[Hg^{II}I4]^2-}&amp;lt;/chem&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 参见 ===&lt;br /&gt;
* https://www.mediawiki.org/wiki/Extension:Math&lt;br /&gt;
== score ==&lt;br /&gt;
Score 扩展渲染乐谱，需配套 LilyPond 与 ffmpeg。&lt;br /&gt;
&lt;br /&gt;
=== 示例 ===&lt;br /&gt;
&amp;lt;score vorbis=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  \relative g&#039; {&lt;br /&gt;
&lt;br /&gt;
    \key g \major \time 2/4&lt;br /&gt;
&lt;br /&gt;
    g8. b16 d8 d8 \bar &amp;quot;|&amp;quot; e4 d4 \bar &amp;quot;|&amp;quot; b8. g16 \times 2/3 {d&#039;8 d d} \bar &amp;quot;|&amp;quot; b4 g4 \bar &amp;quot;|&amp;quot; \times 2/3 {d8 d d} \times 2/3 {d8 d d} \bar &amp;quot;|&amp;quot; g4 r8 d8 \bar &amp;quot;|&amp;quot; \break&lt;br /&gt;
&lt;br /&gt;
    g4. g8 \bar &amp;quot;|&amp;quot; g8. g16 d8 e16 fis16 \bar &amp;quot;|&amp;quot; g4 g4 \bar &amp;quot;|&amp;quot; r8 b8 g8 a16 b16 \bar &amp;quot;|&amp;quot; d4 d4 \bar &amp;quot;|&amp;quot; \break&lt;br /&gt;
&lt;br /&gt;
    b8. b16 g8. b16 \bar &amp;quot;|&amp;quot; d8. b16 a4 \bar &amp;quot;|&amp;quot; a2 \bar &amp;quot;|&amp;quot; e&#039;4^&amp;gt; d4^&amp;gt; \bar &amp;quot;|&amp;quot; a4^&amp;gt; b4^&amp;gt; \bar &amp;quot;|&amp;quot; \break&lt;br /&gt;
&lt;br /&gt;
    d8^&amp;gt; b8^&amp;gt; r8 d8 \bar &amp;quot;|&amp;quot; b8 a16 b16 g4 \bar &amp;quot;|&amp;quot; b4 r4 \bar &amp;quot;|&amp;quot; d,8. e16 g8 g8 \bar &amp;quot;|&amp;quot; b8. b16 d8 d8 \bar &amp;quot;|&amp;quot; \break&lt;br /&gt;
&lt;br /&gt;
    a8 a16 a16 e4 \bar &amp;quot;|&amp;quot; a4. d,8 \bar &amp;quot;|&amp;quot; ^\&amp;lt; g4. g8 \bar &amp;quot;|&amp;quot; b4. b8 \! \bar &amp;quot;|&amp;quot; d2 \bar &amp;quot;|&amp;quot; \break&lt;br /&gt;
&lt;br /&gt;
    g,8. b16 d8 d8 \bar &amp;quot;|&amp;quot; e4 d4 \bar &amp;quot;|&amp;quot; b8. g16 \times 2/3 {d&#039;8 d d} \bar &amp;quot;|&amp;quot; b8 r8 g8 r8 \bar &amp;quot;|&amp;quot; d4^&amp;gt; g4^&amp;gt; \bar &amp;quot;|&amp;quot; \break&lt;br /&gt;
&lt;br /&gt;
    b8. g16 \times 2/3 {d&#039;8 d d} \bar &amp;quot;|&amp;quot; b8 r8 g8 r8 \bar &amp;quot;|&amp;quot; d4^&amp;gt; g4^&amp;gt; \bar &amp;quot;|&amp;quot; d4^&amp;gt; g4^&amp;gt; \bar &amp;quot;|&amp;quot; d4^&amp;gt; g4^&amp;gt; \bar &amp;quot;|&amp;quot; g4^&amp;gt; r4 \bar &amp;quot;|.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
    \addlyrics {&lt;br /&gt;
&lt;br /&gt;
        　 　 　 　 　 　 　 　 　 　 　 　 　 　 　 　 　 　 　 　 起&lt;br /&gt;
&lt;br /&gt;
        来！ 不 愿 做 奴 隶 的 人 们！ 把 我 们 的 血 肉，&lt;br /&gt;
&lt;br /&gt;
        筑 成 我 们 新 的 长 城！ 中 华 民 族&lt;br /&gt;
&lt;br /&gt;
        到 了 最 危 险 的 时 候， 每 个 人 被 迫 着 发 出&lt;br /&gt;
&lt;br /&gt;
        最 后 的 吼 声。 起 来！ 起 来！ 起 来！&lt;br /&gt;
&lt;br /&gt;
        我 们 万 众 一 心， 冒 着 敌 人 的 炮 火 前 进！&lt;br /&gt;
&lt;br /&gt;
        冒 着 敌 人 的 炮 火 前 进！ 前 进！ 前 进！ 进！&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/score&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 参见 ===&lt;br /&gt;
* https://www.mediawiki.org/wiki/Extension:Score&lt;br /&gt;
* https://lilypond.org/doc/v2.24/Documentation/web/manuals&lt;br /&gt;
== hiero ==&lt;br /&gt;
WikiHiero 支持古埃及象形文字排版。&lt;br /&gt;
&lt;br /&gt;
示例语法：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;hiero&amp;gt;A1&amp;lt;/hiero&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
示例效果：&lt;br /&gt;
&amp;lt;hiero&amp;gt;A1&amp;lt;/hiero&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 参见 ===&lt;br /&gt;
* https://www.mediawiki.org/wiki/Extension:WikiHiero&lt;br /&gt;
== PdfHandler ==&lt;br /&gt;
PdfHandler 扩展提供 PDF 预览与嵌入，适合文档展示。&lt;br /&gt;
&lt;br /&gt;
示例语法：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot;&amp;gt;&lt;br /&gt;
[[File:EXCEL 2016 QUICK START GUIDE.PDF|thumb|500px|EXCEL 2016 QUICK START GUIDE.PDF]]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
示例效果：&lt;br /&gt;
[[File:EXCEL 2016 QUICK START GUIDE.PDF|thumb|500px|EXCEL 2016 QUICK START GUIDE.PDF]]&lt;br /&gt;
&lt;br /&gt;
=== 参见 ===&lt;br /&gt;
* https://www.mediawiki.org/wiki/Extension:PdfHandler&lt;br /&gt;
== TimedMediaHandler ==&lt;br /&gt;
TimedMediaHandler 和相关工具链支持音视频上传与预览。&lt;br /&gt;
&lt;br /&gt;
注意：以下示例需要本地上传同名文件才能展示效果。若仅引用维基共享资源（Commons），需要 InstantCommons 正常可用且外部访问稳定，否则会显示红链。&lt;br /&gt;
&lt;br /&gt;
示例语法：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Example.ogg|thumb|音频示例]]&lt;br /&gt;
[[File:Example.ogg|30px]]&lt;br /&gt;
[[File:Big Buck Bunny 4K.webm|300px|thumb|视频示例]]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
示例效果（需本地文件）：&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[File:Example.ogg|thumb|音频示例]]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[File:Big Buck Bunny 4K.webm|300px|thumb|视频示例]]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 参见 ===&lt;br /&gt;
* https://www.mediawiki.org/wiki/Extension:TimedMediaHandler&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://learn.devc.dev/index.php?title=%E5%B8%AE%E5%8A%A9:%E9%9C%80%E8%A6%81%E9%85%8D%E7%BD%AE%E7%9A%84%E6%A0%BC%E5%BC%8F&amp;diff=1673</id>
		<title>帮助:需要配置的格式</title>
		<link rel="alternate" type="text/html" href="https://learn.devc.dev/index.php?title=%E5%B8%AE%E5%8A%A9:%E9%9C%80%E8%A6%81%E9%85%8D%E7%BD%AE%E7%9A%84%E6%A0%BC%E5%BC%8F&amp;diff=1673"/>
		<updated>2026-01-12T15:09:05Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script：​补充本站已安装扩展与解析器标签&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 重定向 (Redirect) ==&lt;br /&gt;
&lt;br /&gt;
* [[Redirect Test]]&lt;br /&gt;
&lt;br /&gt;
== timeline ==&lt;br /&gt;
&lt;br /&gt;
使用 EasyTimeline 或 &amp;lt;nowiki&amp;gt;&amp;lt;timeline&amp;gt;&amp;lt;/nowiki&amp;gt; 语法展示事件。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 苏联领导人 ===&lt;br /&gt;
&amp;lt;timeline&amp;gt;&lt;br /&gt;
# All measures are in pixels&lt;br /&gt;
&lt;br /&gt;
ImageSize  = width:160 height:550&lt;br /&gt;
PlotArea   = left:50 right:0 bottom:10 top:10&lt;br /&gt;
AlignBars  = justify&lt;br /&gt;
&lt;br /&gt;
DateFormat = yyyy&lt;br /&gt;
Period     = from:1917 till:1991&lt;br /&gt;
TimeAxis   = orientation:vertical&lt;br /&gt;
ScaleMajor = unit:year increment:5 start:1920&lt;br /&gt;
&lt;br /&gt;
# there is no automatic collision detection,&lt;br /&gt;
# so shift texts up or down manually to avoid overlap&lt;br /&gt;
&lt;br /&gt;
Define $dx = 25 # shift text to right side of bar&lt;br /&gt;
&lt;br /&gt;
PlotData=&lt;br /&gt;
  bar:Leaders color:red width:25 mark:(line,white) align:left fontsize:S&lt;br /&gt;
&lt;br /&gt;
  from:start till:1924 shift:($dx,15)   text:Vladimir~Ilyich~[[Special:MyLanguage/Lenin|Lenin]]&lt;br /&gt;
  from:1924  till:1953 shift:($dx,5)    text:[[Special:MyLanguage/Stalin|Josef~Stalin]]&lt;br /&gt;
  from:1953  till:1964 shift:($dx,5)    text:Nikita~[[Special:MyLanguage/Khrushchev|Khrushchev]]&lt;br /&gt;
  from:1964  till:1982 shift:($dx,5)    text:Leonid~[[Special:MyLanguage/Brezhnev|Brezhnev]]&lt;br /&gt;
  from:1982  till:1984 shift:($dx,-12)  text:Yuri~[[Special:MyLanguage/Andropov|Andropov]]&lt;br /&gt;
  from:1984  till:1985 shift:($dx,4)    text:Konstantin~[[Special:MyLanguage/Chernenko|Chernenko]] fontsize:XS&lt;br /&gt;
  from:1985  till:end  shift:($dx,10)   text:Mikhail~[[Special:MyLanguage/Gorbachev|Gorbachev]]&lt;br /&gt;
&amp;lt;/timeline&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* https://www.mediawiki.org/wiki/Extension:EasyTimeline&lt;br /&gt;
&lt;br /&gt;
== ImageMap ==&lt;br /&gt;
&lt;br /&gt;
ImageMap 扩展允许在图片中定义可点区域，适合交互式说明。&lt;br /&gt;
&lt;br /&gt;
=== 最后的晚餐 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;imagemap&amp;gt;&lt;br /&gt;
File:The Last Supper - Leonardo Da Vinci - High Resolution 32x16.jpg|thumb|center|500px|alt=&#039;&#039;The Last Supper&#039;&#039; by Leonardo da Vinci - Clickable Image|Image map example. Clicking on a person in the picture causes the browser to load the appropriate article.&lt;br /&gt;
&lt;br /&gt;
poly 550 2550 750 2400 1150 2300 1150 2150 1200 2075 1500 2125 1525 2300 1350 2800 1450 3000 1700 3300 1300 3475 650 3500 550 3300 450 3000 [[w:Bartholomew the Apostle|Bartholomew]] &lt;br /&gt;
poly 1575 2300 1625 2150 1900 2150 1925 2500 1875 2600 1800 2750 1600 3250 1425 3100 1400 2800 1375 2600 [[w:James, son of Alphaeus|James Minor]]&lt;br /&gt;
poly 1960 2150 2200 2150 2350 2500 2450 2575 2375 2725 2375 2900 2225 3100 2225 3225 1600 3225 1825 2700 1975 2450 1925 2300 [[w:Saint Andrew|Andrew]]&lt;br /&gt;
poly 2450 2575 2775 2500 2700 2650 2800 2700 2600 3000 2600 3250 2300 3250 2200 3200 2300 3000 [[w:Saint Peter|Peter]]&lt;br /&gt;
poly 2750 2500 2950 2400 3125 2600 3175 2700 3300 2850 3700 3200 3750 3200 3650 3350 3400 3200 3000 3350 2600 3325 2750 2800 2900 2700 2700 2650 [[w:Judas Iscariot|Judas]]&lt;br /&gt;
poly 3000 2350 3300 2350 3350 2660 3560 2600 3565 2690 3250 2800 3125 2575 [[w:Saint Peter|Peter]]                                      &lt;br /&gt;
poly 3332 2338 3528 2240 4284 3024 4074 3332 3864 3290 3780 3150 3668 3192 3598 3024 3374 2870 3388 2772 3542 2800 3668 2702 3542 2590 3430 2604 3350 2600 3300 2500[[w:John the Apostle|John]]&lt;br /&gt;
poly 4775 2184 4915 2128 5055 2212 5083 2352 5111 2464 5181 2604 5307 2744 5573 3052 5615 3192 5657 3290 5573 3402 5461 3332 5335 3248 4495 3248 4439 3388 4243 3388 4075 3360 4173 3136 4327 3010 4509 2730 4663 2520 4733 2394 [[w:Jesus]]&lt;br /&gt;
poly 5900 2100 5900 2150 5800 2400 5800 2500 5675 2589 5480 2671 5438 2507 5425 2301 5589 2452 5630 2301 5650 2100 [[w:Thomas the Apostle|Thomas]]&lt;br /&gt;
poly 5918 2150 6041 2109 6137 2246 6192 2411 6110 2589 6110 2726 6192 2822 6302 2740 6589 3109 5658 3178 5575 2918 5300 2698 5233 2589 5274 2438 5370 2507 5521 2685 5617 2671 5712 2575 5822 2507 5808 2287 5822 2175 [[w:James, son of Zebedee|James Greater]]&lt;br /&gt;
poly 6137 2013 6439 2013 6863 2260 7110 2515 6726 2675 6507 2548 6425 2630 6356 2753 6548 2849 6699 2781 7082 2794 7178 3109 6699 3178 6548 2986 6397 2835 6165 2775 6110 2589 6233 2438 6302 2383 6151 2287 6096 2164 [[w:Philip the Apostle|Philip]]&lt;br /&gt;
poly 7635 2123 7800 2013 8000 2055 8025 2287 7950 2438 8000 2698 8055 2918 7959 3164 7233 3164 7124 2972 7124 2794 6548 2794 6384 2781 6384 2671 6493 2575 6750 2650 7075 2550 7219 2400 7625 2300 [[w:Matthew the Apostle|Matthew]]&lt;br /&gt;
poly 8325 2096 8600 2109 8635 2493 8615 2726 8439 2781 8274 2740 8125 2835 8151 2931 8400 2975 8411 3068 8589 3041 8617 3205 7987 3260 8124 3027 7987 2644 7904 2493 7959 2425 8096 2356 [[w:Judas Thaddaeus|Jude]]&lt;br /&gt;
poly 8800 2150 8900 2125 9055 2150 9125 2397 9400 2475 9550 2931 9625 3301 9151 3397 8535 3219 8726 3014 8466 3068 8411 2918 8178 2931 8124 2835 8329 2753 8535 2794 8726 2603 8725 2342 [[w:Simon the Zealot|Simon]]&lt;br /&gt;
&amp;lt;/imagemap&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 参见 ===&lt;br /&gt;
* https://www.mediawiki.org/wiki/Extension:ImageMap&lt;br /&gt;
* https://meta.wikimedia.org/wiki/ImageMapEdit_Howto&lt;br /&gt;
* https://www.familysearch.org/en/wiki/Help:Image_maps&lt;br /&gt;
* https://commons.wikimedia.org/wiki/Commons:Image_map_resources/zh&lt;br /&gt;
* https://en.wikipedia.org/wiki/Category:Wikipedia_image_maps&lt;br /&gt;
* https://meta.wikimedia.org/wiki/User:Dapete/ImageMapEdit#English&lt;br /&gt;
* https://www.maschek.hu/imagemap/&lt;br /&gt;
* https://www.image-maps.com/&lt;br /&gt;
* https://summerstyle.github.io/summer/&lt;br /&gt;
&lt;br /&gt;
== inputbox ==&lt;br /&gt;
&lt;br /&gt;
InputBox 扩展可以生成搜索或创建界面，便于用户快速跳转。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;inputbox&amp;gt;&lt;br /&gt;
type=search&lt;br /&gt;
arialabel=Search the Wiki&lt;br /&gt;
&amp;lt;/inputbox&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* https://www.mediawiki.org/wiki/Extension:InputBox&lt;br /&gt;
&lt;br /&gt;
== syntaxhighlight ==&lt;br /&gt;
&lt;br /&gt;
高亮示例（bash）：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
php -v&lt;br /&gt;
mysql --version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== mapframe ==&lt;br /&gt;
&lt;br /&gt;
Kartographer 扩展根据 OpenStreetMap 提供交互地图，适合展示地理位置。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 北京市地图 ===&lt;br /&gt;
&amp;lt;mapframe latitude=&amp;quot;39.9042&amp;quot; longitude=&amp;quot;116.4074&amp;quot; zoom=&amp;quot;12&amp;quot; width=&amp;quot;600&amp;quot; height=&amp;quot;400&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/mapframe&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 参见 ===&lt;br /&gt;
* https://www.mediawiki.org/wiki/Extension:Kartographer&lt;br /&gt;
* https://www.openstreetmap.org/&lt;br /&gt;
&lt;br /&gt;
== math ==&lt;br /&gt;
&lt;br /&gt;
Math 扩展支持 LaTeX 与化学符号，适合数学与科学内容展示。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 根的判别式(math) ===&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 化学式(chem) ===&lt;br /&gt;
&amp;lt;chem&amp;gt;Hg^2+ -&amp;gt;[I-] HgI2 -&amp;gt;[I-] {[Hg^{II}I4]^2-}&amp;lt;/chem&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 参见 ===&lt;br /&gt;
* https://www.mediawiki.org/wiki/Extension:Math&lt;br /&gt;
&lt;br /&gt;
== score ==&lt;br /&gt;
&lt;br /&gt;
Score 扩展渲染乐谱，需配套 LilyPond 和 ffmpeg。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 义勇军进行曲 ===&lt;br /&gt;
&amp;lt;score vorbis=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  \relative g&#039; {&lt;br /&gt;
&lt;br /&gt;
    \key g \major \time 2/4&lt;br /&gt;
&lt;br /&gt;
    g8. b16 d8 d8 \bar &amp;quot;|&amp;quot; e4 d4 \bar &amp;quot;|&amp;quot; b8. g16 \times 2/3 {d&#039;8 d d} \bar &amp;quot;|&amp;quot; b4 g4 \bar &amp;quot;|&amp;quot; \times 2/3 {d8 d d} \times 2/3 {d8 d d} \bar &amp;quot;|&amp;quot; g4 r8 d8 \bar &amp;quot;|&amp;quot; \break&lt;br /&gt;
&lt;br /&gt;
    g4. g8 \bar &amp;quot;|&amp;quot; g8. g16 d8 e16 fis16 \bar &amp;quot;|&amp;quot; g4 g4 \bar &amp;quot;|&amp;quot; r8 b8 g8 a16 b16 \bar &amp;quot;|&amp;quot; d4 d4 \bar &amp;quot;|&amp;quot; \break&lt;br /&gt;
&lt;br /&gt;
    b8. b16 g8. b16 \bar &amp;quot;|&amp;quot; d8. b16 a4 \bar &amp;quot;|&amp;quot; a2 \bar &amp;quot;|&amp;quot; e&#039;4^&amp;gt; d4^&amp;gt; \bar &amp;quot;|&amp;quot; a4^&amp;gt; b4^&amp;gt; \bar &amp;quot;|&amp;quot; \break&lt;br /&gt;
&lt;br /&gt;
    d8^&amp;gt; b8^&amp;gt; r8 d8 \bar &amp;quot;|&amp;quot; b8 a16 b16 g4 \bar &amp;quot;|&amp;quot; b4 r4 \bar &amp;quot;|&amp;quot; d,8. e16 g8 g8 \bar &amp;quot;|&amp;quot; b8. b16 d8 d8 \bar &amp;quot;|&amp;quot; \break&lt;br /&gt;
&lt;br /&gt;
    a8 a16 a16 e4 \bar &amp;quot;|&amp;quot; a4. d,8 \bar &amp;quot;|&amp;quot; ^\&amp;lt; g4. g8 \bar &amp;quot;|&amp;quot; b4. b8 \! \bar &amp;quot;|&amp;quot; d2 \bar &amp;quot;|&amp;quot; \break&lt;br /&gt;
&lt;br /&gt;
    g,8. b16 d8 d8 \bar &amp;quot;|&amp;quot; e4 d4 \bar &amp;quot;|&amp;quot; b8. g16 \times 2/3 {d&#039;8 d d} \bar &amp;quot;|&amp;quot; b8 r8 g8 r8 \bar &amp;quot;|&amp;quot; d4^&amp;gt; g4^&amp;gt; \bar &amp;quot;|&amp;quot; \break&lt;br /&gt;
&lt;br /&gt;
    b8. g16 \times 2/3 {d&#039;8 d d} \bar &amp;quot;|&amp;quot; b8 r8 g8 r8 \bar &amp;quot;|&amp;quot; d4^&amp;gt; g4^&amp;gt; \bar &amp;quot;|&amp;quot; d4^&amp;gt; g4^&amp;gt; \bar &amp;quot;|&amp;quot; d4^&amp;gt; g4^&amp;gt; \bar &amp;quot;|&amp;quot; g4^&amp;gt; r4 \bar &amp;quot;|.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
    \addlyrics {&lt;br /&gt;
&lt;br /&gt;
        　 　 　 　 　 　 　 　 　 　 　 　 　 　 　 　 　 　 　 　 起&lt;br /&gt;
&lt;br /&gt;
        来！ 不 愿 做 奴 隶 的 人 们！ 把 我 们 的 血 肉，&lt;br /&gt;
&lt;br /&gt;
        筑 成 我 们 新 的 长 城！ 中 华 民 族&lt;br /&gt;
&lt;br /&gt;
        到 了 最 危 险 的 时 候， 每 个 人 被 迫 着 发 出&lt;br /&gt;
&lt;br /&gt;
        最 后 的 吼 声。 起 来！ 起 来！ 起 来！&lt;br /&gt;
&lt;br /&gt;
        我 们 万 众 一 心， 冒 着 敌 人 的 炮 火 前 进！&lt;br /&gt;
&lt;br /&gt;
        冒 着 敌 人 的 炮 火 前 进！ 前 进！ 前 进！ 进！&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/score&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 参见 ===&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Extension:Score Extension:Score]&lt;br /&gt;
* [https://lilypond.org/doc/v2.24/Documentation/web/manuals LilyPond 2.24.4 手册]&lt;br /&gt;
* [https://zh.wikipedia.org/wiki/义勇军进行曲 义勇军进行曲 - 维基百科，自由的百科全书]&lt;br /&gt;
&lt;br /&gt;
== hiero ==&lt;br /&gt;
&lt;br /&gt;
WikiHiero 支持古埃及象形文字排版。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hiero&amp;gt;A1&amp;lt;/hiero&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* https://www.mediawiki.org/wiki/Extension:WikiHiero&lt;br /&gt;
&lt;br /&gt;
== PdfHandler ==&lt;br /&gt;
&lt;br /&gt;
PdfHandler 扩展提供 PDF 预览与嵌入，适合文档展示。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:EXCEL 2016 QUICK START GUIDE.PDF|thumb|500px|EXCEL 2016 QUICK START GUIDE.PDF]]&lt;br /&gt;
&lt;br /&gt;
* https://www.mediawiki.org/wiki/Extension:PdfHandler&lt;br /&gt;
&lt;br /&gt;
== TimedMediaHandler ==&lt;br /&gt;
&lt;br /&gt;
TimedMediaHandler 和相关工具链支持音视频上传与预览。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Big Buck Bunny 4K.webm|300px|thumb|...]]&lt;br /&gt;
[[File:example.ogg|thumb|...]]&lt;br /&gt;
[[File:example.ogg|30px]]&lt;br /&gt;
[[File:example.ogg]]&lt;br /&gt;
&lt;br /&gt;
* https://www.mediawiki.org/wiki/Extension:TimedMediaHandler&lt;br /&gt;
&lt;br /&gt;
== 本站已安装扩展与解析器标签 ==&lt;br /&gt;
以下内容来自 Special:版本，用于校对本站已启用扩展与解析器能力。&lt;br /&gt;
&lt;br /&gt;
=== 已安装扩展（126）===&lt;br /&gt;
* 3D&lt;br /&gt;
* Abuse Filter&lt;br /&gt;
* AdvancedSearch&lt;br /&gt;
* AntiSpoof&lt;br /&gt;
* ApiFeatureUsage&lt;br /&gt;
* Babel&lt;br /&gt;
* BetaFeatures&lt;br /&gt;
* BounceHandler&lt;br /&gt;
* CampaignEvents&lt;br /&gt;
* Campaigns&lt;br /&gt;
* Cargo&lt;br /&gt;
* CategoryTree&lt;br /&gt;
* CentralNotice&lt;br /&gt;
* CharInsert&lt;br /&gt;
* Chart&lt;br /&gt;
* CheckUser&lt;br /&gt;
* CirrusSearch&lt;br /&gt;
* Cite&lt;br /&gt;
* CiteThisPage&lt;br /&gt;
* Citizen&lt;br /&gt;
* Citoid&lt;br /&gt;
* Clean Changes&lt;br /&gt;
* CodeEditor&lt;br /&gt;
* CodeMirror&lt;br /&gt;
* Collection&lt;br /&gt;
* CommonsMetadata&lt;br /&gt;
* CommunityConfiguration&lt;br /&gt;
* ConfirmEdit&lt;br /&gt;
* Disambiguator&lt;br /&gt;
* DiscussionTools&lt;br /&gt;
* DismissableSiteNotice&lt;br /&gt;
* DynamicPageList3&lt;br /&gt;
* EasyTimeline&lt;br /&gt;
* Echo&lt;br /&gt;
* Elastica&lt;br /&gt;
* ElectronPdfService&lt;br /&gt;
* EmailAuth&lt;br /&gt;
* EventBus&lt;br /&gt;
* EventLogging&lt;br /&gt;
* EventStreamConfig&lt;br /&gt;
* ExtensionDistributor&lt;br /&gt;
* FeaturedFeeds&lt;br /&gt;
* FileExporter&lt;br /&gt;
* Flow&lt;br /&gt;
* Gadgets&lt;br /&gt;
* Global Usage&lt;br /&gt;
* GlobalBlocking&lt;br /&gt;
* GlobalCssJs&lt;br /&gt;
* GlobalPreferences&lt;br /&gt;
* GlobalUserPage&lt;br /&gt;
* GuidedTour&lt;br /&gt;
* IPInfo&lt;br /&gt;
* IPReputation&lt;br /&gt;
* ImageMap&lt;br /&gt;
* InputBox&lt;br /&gt;
* JsonConfig&lt;br /&gt;
* Kartographer&lt;br /&gt;
* LabeledSectionTransclusion&lt;br /&gt;
* Linter&lt;br /&gt;
* Liquid Threads&lt;br /&gt;
* LoginNotify&lt;br /&gt;
* MassMessage&lt;br /&gt;
* Math&lt;br /&gt;
* MediaModeration&lt;br /&gt;
* MetricsPlatform&lt;br /&gt;
* MinervaNeue&lt;br /&gt;
* MobileApp&lt;br /&gt;
* MobileFrontend&lt;br /&gt;
* MultimediaViewer&lt;br /&gt;
* NavigationTiming&lt;br /&gt;
* NearbyPages&lt;br /&gt;
* Newsletter&lt;br /&gt;
* Nuke&lt;br /&gt;
* OATHAuth&lt;br /&gt;
* OAuth&lt;br /&gt;
* PDF Handler&lt;br /&gt;
* PWA&lt;br /&gt;
* PageImages&lt;br /&gt;
* PageViewInfo&lt;br /&gt;
* PagedTiffHandler&lt;br /&gt;
* ParserFunctions&lt;br /&gt;
* ParserMigration&lt;br /&gt;
* Phonos&lt;br /&gt;
* Poem&lt;br /&gt;
* Popups&lt;br /&gt;
* QuickSurveys&lt;br /&gt;
* Quiz&lt;br /&gt;
* RSS feed&lt;br /&gt;
* ReadingLists&lt;br /&gt;
* RealMe&lt;br /&gt;
* RelatedArticles&lt;br /&gt;
* Replace Text&lt;br /&gt;
* RevisionSlider&lt;br /&gt;
* SandboxLink&lt;br /&gt;
* Score&lt;br /&gt;
* Scribunto&lt;br /&gt;
* SecureLinkFixer&lt;br /&gt;
* SecurePoll&lt;br /&gt;
* ShortDescription&lt;br /&gt;
* SiteMatrix&lt;br /&gt;
* SpamBlacklist&lt;br /&gt;
* SyntaxHighlight&lt;br /&gt;
* TemplateData&lt;br /&gt;
* TemplateSandbox&lt;br /&gt;
* TemplateStyles&lt;br /&gt;
* TemplateWizard&lt;br /&gt;
* TextExtracts&lt;br /&gt;
* Thanks&lt;br /&gt;
* TimedMediaHandler&lt;br /&gt;
* TitleBlacklist&lt;br /&gt;
* TorBlock&lt;br /&gt;
* Translate&lt;br /&gt;
* TranslationNotifications&lt;br /&gt;
* TrustedXFF&lt;br /&gt;
* TwoColConflict&lt;br /&gt;
* UniversalLanguageSelector&lt;br /&gt;
* UrlShortener&lt;br /&gt;
* Vector&lt;br /&gt;
* VipsScaler&lt;br /&gt;
* VisualEditor&lt;br /&gt;
* WebAuthn&lt;br /&gt;
* WikiEditor&lt;br /&gt;
* WikiHiero&lt;br /&gt;
* WikiLove&lt;br /&gt;
* XAnalytics&lt;br /&gt;
* cldr&lt;br /&gt;
&lt;br /&gt;
=== 解析器扩展标签（33）===&lt;br /&gt;
以下为已注册的解析器扩展标签（可直接在页面内使用）：&lt;br /&gt;
* &amp;lt;&amp;lt;categorytree&amp;gt;&amp;gt;&lt;br /&gt;
* &amp;lt;&amp;lt;ce&amp;gt;&amp;gt;&lt;br /&gt;
* &amp;lt;&amp;lt;charinsert&amp;gt;&amp;gt;&lt;br /&gt;
* &amp;lt;&amp;lt;chem&amp;gt;&amp;gt;&lt;br /&gt;
* &amp;lt;&amp;lt;dpl&amp;gt;&amp;gt;&lt;br /&gt;
* &amp;lt;&amp;lt;dynamicpagelist&amp;gt;&amp;gt;&lt;br /&gt;
* &amp;lt;&amp;lt;gallery&amp;gt;&amp;gt;&lt;br /&gt;
* &amp;lt;&amp;lt;hiero&amp;gt;&amp;gt;&lt;br /&gt;
* &amp;lt;&amp;lt;imagemap&amp;gt;&amp;gt;&lt;br /&gt;
* &amp;lt;&amp;lt;indicator&amp;gt;&amp;gt;&lt;br /&gt;
* &amp;lt;&amp;lt;inputbox&amp;gt;&amp;gt;&lt;br /&gt;
* &amp;lt;&amp;lt;langconvert&amp;gt;&amp;gt;&lt;br /&gt;
* &amp;lt;&amp;lt;languages&amp;gt;&amp;gt;&lt;br /&gt;
* &amp;lt;&amp;lt;mapframe&amp;gt;&amp;gt;&lt;br /&gt;
* &amp;lt;&amp;lt;maplink&amp;gt;&amp;gt;&lt;br /&gt;
* &amp;lt;&amp;lt;math&amp;gt;&amp;gt;&lt;br /&gt;
* &amp;lt;&amp;lt;nowiki&amp;gt;&amp;gt;&lt;br /&gt;
* &amp;lt;&amp;lt;phonos&amp;gt;&amp;gt;&lt;br /&gt;
* &amp;lt;&amp;lt;poem&amp;gt;&amp;gt;&lt;br /&gt;
* &amp;lt;&amp;lt;pre&amp;gt;&amp;gt;&lt;br /&gt;
* &amp;lt;&amp;lt;quiz&amp;gt;&amp;gt;&lt;br /&gt;
* &amp;lt;&amp;lt;ref&amp;gt;&amp;gt;&lt;br /&gt;
* &amp;lt;&amp;lt;references&amp;gt;&amp;gt;&lt;br /&gt;
* &amp;lt;&amp;lt;rss&amp;gt;&amp;gt;&lt;br /&gt;
* &amp;lt;&amp;lt;score&amp;gt;&amp;gt;&lt;br /&gt;
* &amp;lt;&amp;lt;section&amp;gt;&amp;gt;&lt;br /&gt;
* &amp;lt;&amp;lt;source&amp;gt;&amp;gt;&lt;br /&gt;
* &amp;lt;&amp;lt;syntaxhighlight&amp;gt;&amp;gt;&lt;br /&gt;
* &amp;lt;&amp;lt;talkpage&amp;gt;&amp;gt;&lt;br /&gt;
* &amp;lt;&amp;lt;templatedata&amp;gt;&amp;gt;&lt;br /&gt;
* &amp;lt;&amp;lt;templatestyles&amp;gt;&amp;gt;&lt;br /&gt;
* &amp;lt;&amp;lt;thread&amp;gt;&amp;gt;&lt;br /&gt;
* &amp;lt;&amp;lt;timeline&amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 解析器扩展钩子说明 ===&lt;br /&gt;
解析器扩展钩子通常以标签形式对外提供功能，上述标签即为本站可用的主要解析器入口。若某扩展提供 ParserFunctions/语义模块等额外解析器特性，请以该扩展文档为准。&lt;br /&gt;
{{Template:站点帮助文档}}&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://learn.devc.dev/index.php?title=%E5%B8%AE%E5%8A%A9:MediaWiki_%E5%AE%89%E8%A3%85&amp;diff=1672</id>
		<title>帮助:MediaWiki 安装</title>
		<link rel="alternate" type="text/html" href="https://learn.devc.dev/index.php?title=%E5%B8%AE%E5%8A%A9:MediaWiki_%E5%AE%89%E8%A3%85&amp;diff=1672"/>
		<updated>2026-01-12T15:04:48Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script：​基于本站实际配置统一校对安装说明&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;说明&#039;&#039;&#039; 本指南结合 MediaWiki 官方文档与实际部署经验，概述通用安装流程，并结合本站（learn.houjue.digital）当前环境给出可直接复用的参数与命令。请始终以 [https://www.mediawiki.org/wiki/Manual:Installing_MediaWiki 官方安装指南] 为权威来源，并根据自己的环境调整命令与路径。&lt;br /&gt;
&lt;br /&gt;
== 环境准备 ==&lt;br /&gt;
=== 系统与组件 ===&lt;br /&gt;
本站当前运行环境如下（可按需替换为你的实际版本）：&lt;br /&gt;
* 操作系统：Debian 12 (bookworm)&lt;br /&gt;
* Web 服务器：Nginx 1.22.x&lt;br /&gt;
* PHP：8.2.x（PHP-FPM）&lt;br /&gt;
* 数据库：MariaDB 10.11.x&lt;br /&gt;
&lt;br /&gt;
常用版本检查命令：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /etc/os-release&lt;br /&gt;
nginx -v&lt;br /&gt;
php -v&lt;br /&gt;
mysql --version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 更新与依赖 ===&lt;br /&gt;
根据本站当前部署（Debian 12 + Nginx + PHP 8.2 FPM + MariaDB），建议按以下方式更新与安装依赖：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt upgrade -y&lt;br /&gt;
sudo apt install nginx mariadb-server php8.2-fpm php8.2-cli php8.2-mysql php8.2-gd php8.2-mbstring php8.2-xml php8.2-curl php8.2-zip php8.2-intl php8.2-apcu unzip git -y&lt;br /&gt;
# 多媒体与差异对比工具&lt;br /&gt;
sudo apt install ffmpeg poppler-utils imagemagick php-wikidiff2 -y&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
如需启用 Lua/时间线/乐谱等扩展，可按需补充：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Scribunto&lt;br /&gt;
sudo apt install php-luasandbox -y&lt;br /&gt;
# EasyTimeline/Score 等&lt;br /&gt;
sudo apt install perl ploticus lilypond ghostscript -y&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
说明：本站使用 Nginx + PHP-FPM，如需 Apache 请改用对应包与配置；PHP-FPM 请确保与 Nginx 配置匹配。&lt;br /&gt;
&lt;br /&gt;
== 安装步骤 ==&lt;br /&gt;
=== 1. 下载 MediaWiki（通用流程） ===&lt;br /&gt;
从官方 https://releases.wikimedia.org 下载当前稳定版本。示例命令：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /var/www&lt;br /&gt;
wget https://releases.wikimedia.org/mediawiki/1.45/mediawiki-1.45.0.tar.gz&lt;br /&gt;
tar -xzvf mediawiki-1.45.0.tar.gz&lt;br /&gt;
mv mediawiki-1.45.0 mediawiki&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
本站实际路径：&amp;lt;code&amp;gt;/var/www/mediawiki&amp;lt;/code&amp;gt;，Web 用户为 &amp;lt;code&amp;gt;www-data&amp;lt;/code&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
=== 2. 创建数据库与用户（通用流程） ===&lt;br /&gt;
登录数据库创建专用数据库与账号：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
CREATE DATABASE my_wiki CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;&lt;br /&gt;
CREATE USER &#039;wikiuser&#039;@&#039;localhost&#039; IDENTIFIED BY &#039;强密码&#039;;&lt;br /&gt;
GRANT ALL PRIVILEGES ON my_wiki.* TO &#039;wikiuser&#039;@&#039;localhost&#039;;&lt;br /&gt;
FLUSH PRIVILEGES;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
本站实际数据库配置（见 &amp;lt;code&amp;gt;/var/www/learn.php&amp;lt;/code&amp;gt;）：&lt;br /&gt;
* 数据库：&amp;lt;code&amp;gt;learn&amp;lt;/code&amp;gt;&lt;br /&gt;
* 用户：&amp;lt;code&amp;gt;learn&amp;lt;/code&amp;gt;&lt;br /&gt;
* 主机：&amp;lt;code&amp;gt;localhost&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 3. 运行安装向导（通用流程） ===&lt;br /&gt;
在浏览器打开 &amp;lt;code&amp;gt;https://&amp;lt;你的域名或IP&amp;gt;/mw-config/&amp;lt;/code&amp;gt;，安装向导会依次要求填写环境检测、数据库信息、站点名称、管理员账号、上传目录等。&lt;br /&gt;
完成后会生成 &amp;lt;code&amp;gt;LocalSettings.php&amp;lt;/code&amp;gt;，请放到 MediaWiki 根目录。&lt;br /&gt;
&lt;br /&gt;
本站实际配置：&lt;br /&gt;
* &amp;lt;code&amp;gt;$wgServer = &amp;quot;https://learn.houjue.digital&amp;quot;;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;$wgScriptPath = &amp;quot;&amp;quot;;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;$wgArticlePath = &amp;quot;/wiki/$1&amp;quot;;&amp;lt;/code&amp;gt;&lt;br /&gt;
* 上传目录：&amp;lt;code&amp;gt;/sgcos/images&amp;lt;/code&amp;gt;（映射为 &amp;lt;code&amp;gt;/images&amp;lt;/code&amp;gt;）&lt;br /&gt;
&lt;br /&gt;
=== 4. 完成安装与安全加固（通用流程） ===&lt;br /&gt;
上传 LocalSettings 后即可通过站点访问。&lt;br /&gt;
* 锁定安装目录：&amp;lt;code&amp;gt;chmod -R 700 /var/www/mediawiki/mw-config&amp;lt;/code&amp;gt;&lt;br /&gt;
* 确保 &amp;lt;code&amp;gt;LocalSettings.php&amp;lt;/code&amp;gt; 权限为 600，Web 服务器可读。&lt;br /&gt;
* 关闭 config 目录写权限：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod a-w /var/www/mediawiki/config&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 后续依赖与扩展 ==&lt;br /&gt;
=== php-wikidiff2 ===&lt;br /&gt;
改善差异显示，安装命令：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install php-wikidiff2 -y&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
配置：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$wgDiffEngine = &#039;wikidiff2&#039;;&lt;br /&gt;
$wgDiff3 = &#039;/usr/bin/diff3&#039;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== php-luasandbox 与 Scribunto ===&lt;br /&gt;
安装 Lua 沙箱：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install php-luasandbox -y&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
启用扩展：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
wfLoadExtension(&#039;Scribunto&#039;);&lt;br /&gt;
$wgScribuntoEngineConf[&#039;luasandbox&#039;][&#039;memoryLimit&#039;] = 50 * 1024 * 1024;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 多媒体工具 ===&lt;br /&gt;
* ffmpeg：&amp;lt;code&amp;gt;sudo apt install ffmpeg -y&amp;lt;/code&amp;gt;&lt;br /&gt;
* poppler-utils（PDF 处理）：&amp;lt;code&amp;gt;sudo apt install poppler-utils -y&amp;lt;/code&amp;gt;&lt;br /&gt;
* Composer（依赖管理）：&amp;lt;code&amp;gt;curl -sS https://getcomposer.org/installer | php &amp;amp;&amp;amp; mv composer.phar /usr/local/bin/composer&amp;lt;/code&amp;gt;&lt;br /&gt;
* EasyTimeline/Score/PdfHandler 等扩展可根据需要分别安装 ploticus、perl、lilypond、ghostscript、imagemagick 等依赖。&lt;br /&gt;
&lt;br /&gt;
== HTTPS 与短链接 ==&lt;br /&gt;
本站使用 Nginx，短链接与 HTTPS 参考：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nginx&amp;quot;&amp;gt;&lt;br /&gt;
# 强制 HTTPS&lt;br /&gt;
return 301 https://$host$request_uri;&lt;br /&gt;
&lt;br /&gt;
# MediaWiki 路由（示例，需结合你的站点结构）&lt;br /&gt;
location /wiki/ {&lt;br /&gt;
    try_files $uri $uri/ /index.php?$args;&lt;br /&gt;
}&lt;br /&gt;
location ~ \.php$ {&lt;br /&gt;
    include snippets/fastcgi-php.conf;&lt;br /&gt;
    fastcgi_pass unix:/run/php/php8.2-fpm.sock;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
配合以下 LocalSettings：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$wgScriptPath = &#039;&#039;;&lt;br /&gt;
$wgArticlePath = &#039;/wiki/$1&#039;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 性能与维护 ==&lt;br /&gt;
* 使用缓存（APCu/Redis）加速页面与消息&lt;br /&gt;
* 启用 &amp;lt;code&amp;gt;$wgMainCacheType&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;$wgParserCacheType&amp;lt;/code&amp;gt; 等缓存参数&lt;br /&gt;
* 定期运行维护脚本：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
php /var/www/mediawiki/maintenance/run.php update.php&lt;br /&gt;
php /var/www/mediawiki/maintenance/run.php rebuildrecentchanges.php&lt;br /&gt;
php /var/www/mediawiki/maintenance/run.php refreshLinks.php&lt;br /&gt;
php /var/www/mediawiki/maintenance/run.php rebuildtextindex.php&lt;br /&gt;
php /var/www/mediawiki/maintenance/run.php runJobs.php&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 故障排查 ==&lt;br /&gt;
* 页面渲染成 WikiText：检查 PHP-FPM/Nginx 是否正常、LocalSettings 是否可读&lt;br /&gt;
* 安装向导无法完成：检查文件夹权限，确保 &amp;lt;code&amp;gt;mw-config&amp;lt;/code&amp;gt; 可写且临时可执行&lt;br /&gt;
* 文件上传失败：核实上传目录与权限（本站为 &amp;lt;code&amp;gt;/sgcos/images&amp;lt;/code&amp;gt;）以及 PHP 限制与 &amp;lt;code&amp;gt;$wgFileExtensions&amp;lt;/code&amp;gt; 设置&lt;br /&gt;
* 数据库连接出错：确认凭据、字符集（utf8mb4）及正确的数据库主机&lt;br /&gt;
&lt;br /&gt;
{{Template:站点帮助文档}}&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://learn.devc.dev/index.php?title=%E5%B8%AE%E5%8A%A9:MediaWiki_%E5%AE%89%E8%A3%85&amp;diff=1671</id>
		<title>帮助:MediaWiki 安装</title>
		<link rel="alternate" type="text/html" href="https://learn.devc.dev/index.php?title=%E5%B8%AE%E5%8A%A9:MediaWiki_%E5%AE%89%E8%A3%85&amp;diff=1671"/>
		<updated>2026-01-12T15:00:26Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script：​按当前站点实际配置更新更新与依赖&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;说明&#039;&#039;&#039; 本指南结合 MediaWiki 官方文档与实际部署经验，概述典型的安装流程。请始终以 [https://www.mediawiki.org/wiki/Manual:Installing_MediaWiki 官方安装指南] 为权威来源，并根据自己的环境调整命令与路径。&lt;br /&gt;
&lt;br /&gt;
== 环境准备 ==&lt;br /&gt;
=== 系统与组件 ===&lt;br /&gt;
确保服务器运行受支持的 Linux 发行版，例如 Debian 11/12、Ubuntu 22.04 及以上版本，或其他受 MediaWiki 官方支持的发行版。&lt;br /&gt;
* 查看系统版本：&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /etc/os-release&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* 检查 PHP、MySQL 与 HTTP 服务器版本：&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
php -v&lt;br /&gt;
mysql --version&lt;br /&gt;
apachectl -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
建议使用 PHP 8.1/8.2、MySQL 8.0 或 MariaDB 10.6+，并将 Web 服务器的用户（如 www-data、apache）纳入后续目录权限管理。&lt;br /&gt;
&lt;br /&gt;
=== 更新与依赖 ===&lt;br /&gt;
根据本站当前部署（Debian 12 + Nginx + PHP 8.2 FPM + MySQL），建议按以下方式更新与安装依赖：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt upgrade -y&lt;br /&gt;
sudo apt install nginx mysql-server php8.2-fpm php8.2-cli php8.2-mysql php8.2-gd php8.2-mbstring php8.2-xml php8.2-curl php8.2-zip php8.2-intl php8.2-apcu unzip git -y&lt;br /&gt;
# 多媒体与差异对比工具&lt;br /&gt;
sudo apt install ffmpeg poppler-utils imagemagick php-wikidiff2 -y&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
如需启用 Lua/时间线/乐谱等扩展，可按需补充：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Scribunto&lt;br /&gt;
sudo apt install php-luasandbox -y&lt;br /&gt;
# EasyTimeline/Score 等&lt;br /&gt;
sudo apt install perl ploticus lilypond ghostscript -y&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
说明：本站使用 Nginx，如需 Apache 请改用对应包与配置；PHP-FPM 请确保与 Nginx 配置匹配。&lt;br /&gt;
== 安装步骤 ==&lt;br /&gt;
=== 1. 下载 MediaWiki ===&lt;br /&gt;
从官方 https://releases.wikimedia.org 下载当前稳定版本。示例命令：&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /var/www&lt;br /&gt;
wget https://releases.wikimedia.org/mediawiki/1.44/mediawiki-1.44.0.tar.gz&lt;br /&gt;
tar -xzvf mediawiki-1.44.0.tar.gz&lt;br /&gt;
mv mediawiki-1.44.0 mediawiki&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
部署后可将目录权限授予 Web 用户，例如：&amp;lt;code&amp;gt;chown -R www-data:www-data /var/www/mediawiki&amp;lt;/code&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
=== 2. 创建数据库与用户 ===&lt;br /&gt;
登录 MySQL 创建专用数据库与账号：&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
CREATE DATABASE my_wiki CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;&lt;br /&gt;
CREATE USER &#039;wikiuser&#039;@&#039;localhost&#039; IDENTIFIED BY &#039;强密码&#039;;&lt;br /&gt;
GRANT ALL PRIVILEGES ON my_wiki.* TO &#039;wikiuser&#039;@&#039;localhost&#039;;&lt;br /&gt;
FLUSH PRIVILEGES;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
建议使用长密码、避免写入命令历史（可在 &amp;lt;code&amp;gt;.mysql_history&amp;lt;/code&amp;gt; 中禁用）并定期更换凭据。&lt;br /&gt;
&lt;br /&gt;
=== 3. 运行安装向导 ===&lt;br /&gt;
在浏览器打开 &amp;lt;code&amp;gt;http://&amp;lt;你的域名或IP&amp;gt;/mediawiki/mw-config/&amp;lt;/code&amp;gt;，安装向导会依次要求填写环境检测、数据库信息、站点名称、管理员账号、上传目录等。&lt;br /&gt;
在“数据库”步骤中填写上一步创建的数据库信息。按照提示完成后会生成 &amp;lt;code&amp;gt;LocalSettings.php&amp;lt;/code&amp;gt;，请下载到本地后上传到 MediaWiki 根目录。&lt;br /&gt;
&lt;br /&gt;
=== 4. 完成安装与安全加固 ===&lt;br /&gt;
上传 LocalSettings 后即可通过 &amp;lt;code&amp;gt;http://&amp;lt;域名&amp;gt;/mediawiki&amp;lt;/code&amp;gt; 访问。&lt;br /&gt;
* 删除或锁定安装目录：&amp;lt;code&amp;gt;chmod -R 700 /var/www/mediawiki/mw-config&amp;lt;/code&amp;gt;&lt;br /&gt;
* 确保 &amp;lt;code&amp;gt;LocalSettings.php&amp;lt;/code&amp;gt; 权限为 600，Web 服务器可读。&lt;br /&gt;
* 关闭 config 目录的写权限：&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod a-w /var/www/mediawiki/config&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 后续依赖与扩展 ==&lt;br /&gt;
=== php-wikidiff2 ===&lt;br /&gt;
改善差异显示，安装命令：&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install php-wikidiff2 -y&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
配置：&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$wgDiffEngine = &#039;wikidiff2&#039;;&lt;br /&gt;
$wgDiff3 = &#039;/usr/bin/diff3&#039;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== php-luasandbox 与 Scribunto ===&lt;br /&gt;
安装 Lua 沙箱：&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install php-luasandbox -y&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
启用扩展：&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
wfLoadExtension(&#039;Scribunto&#039;);&lt;br /&gt;
$wgScribuntoEngineConf[&#039;luasandbox&#039;][&#039;memoryLimit&#039;] = 50 * 1024 * 1024;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 多媒体工具 ===&lt;br /&gt;
* ffmpeg：&amp;lt;code&amp;gt;sudo apt install ffmpeg -y&amp;lt;/code&amp;gt;&lt;br /&gt;
* poppler-utils（PDF 处理）：&amp;lt;code&amp;gt;sudo apt install poppler-utils -y&amp;lt;/code&amp;gt;&lt;br /&gt;
* Composer（依赖管理）：&amp;lt;code&amp;gt;curl -sS https://getcomposer.org/installer | php &amp;amp;&amp;amp; mv composer.phar /usr/local/bin/composer&amp;lt;/code&amp;gt;&lt;br /&gt;
* EasyTimeline/Score/PdfHandler 等扩展可根据需要分别安装 ploticus、perl、lilypond、ghostscript、imagemagick 等依赖。&lt;br /&gt;
&lt;br /&gt;
== HTTPS 与短链接 ==&lt;br /&gt;
配置 Apache 使其同时支持短链接与 https，可在虚拟主机中加入：&amp;lt;syntaxhighlight lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
RewriteEngine On&lt;br /&gt;
RewriteCond %{HTTPS} off&lt;br /&gt;
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]&lt;br /&gt;
RewriteCond %{REQUEST_URI} !\.(css|js|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot|less)$ [NC]&lt;br /&gt;
RewriteCond %{REQUEST_URI} !^/load.php [NC]&lt;br /&gt;
RewriteCond %{REQUEST_URI} !^/api.php [NC]&lt;br /&gt;
RewriteCond %{REQUEST_URI} !^/images/ [NC]&lt;br /&gt;
RewriteRule ^w/(.*)$ /mediawiki/index.php?title=$1 [L,QSA]&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} !-d&lt;br /&gt;
RewriteRule ^(.*)$ /mediawiki/index.php [L,QSA]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
配合以下 LocalSettings：&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$wgScriptPath = &#039;/mediawiki&#039;;&lt;br /&gt;
$wgArticlePath = &#039;/w/$1&#039;;&lt;br /&gt;
$actions = [ &#039;view&#039;,&#039;edit&#039;,&#039;history&#039;,&#039;delete&#039;,&#039;purge&#039;,&#039;info&#039;,&#039;watch&#039;,&#039;unwatch&#039;,&#039;protect&#039;,&#039;rollback&#039;];&lt;br /&gt;
foreach ($actions as $action) {&lt;br /&gt;
    $wgActionPaths[$action] = &#039;/w/&#039; . $action . &#039;/$1&#039;;&lt;br /&gt;
}&lt;br /&gt;
$wgActionPaths[&#039;view&#039;] = $wgArticlePath;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 性能与维护 ==&lt;br /&gt;
* 使用缓存（APCu/Redis）加速页面与消息&lt;br /&gt;
* 启用 &amp;lt;code&amp;gt;wgMainCacheType&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;wgParserCacheType&amp;lt;/code&amp;gt; 等缓存参数&lt;br /&gt;
* 定期运行维护脚本：&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
php maintenance/run.php update.php&lt;br /&gt;
php maintenance/run.php rebuildrecentchanges.php&lt;br /&gt;
php maintenance/run.php refreshLinks.php&lt;br /&gt;
php maintenance/run.php rebuildtextindex.php&lt;br /&gt;
php maintenance/run.php runJobs.php&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
建议将常用脚本加入 cron，如每日凌晨自动执行，以减轻手动干预。&lt;br /&gt;
&lt;br /&gt;
== 故障排查 ==&lt;br /&gt;
* 页面渲染成 WikiText：检查 PHP-FPM/Apache 是否正常、LocalSettings 是否可读&lt;br /&gt;
* 安装向导无法完成：检查文件夹权限，确保 &amp;lt;code&amp;gt;mw-config&amp;lt;/code&amp;gt; 可写且临时可执行&lt;br /&gt;
* 文件上传失败：核实 &amp;lt;code&amp;gt;images/&amp;lt;/code&amp;gt; 权限、PHP 限制与 &amp;lt;code&amp;gt;$wgFileExtensions&amp;lt;/code&amp;gt; 设置&lt;br /&gt;
* 数据库连接出错：确认凭据、字符集（utf8mb4）及正确的数据库主机&lt;br /&gt;
&lt;br /&gt;
{{Template:站点帮助文档}}&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://learn.devc.dev/index.php?title=MediaWiki:Gadget-RightToolbar.js&amp;diff=1664</id>
		<title>MediaWiki:Gadget-RightToolbar.js</title>
		<link rel="alternate" type="text/html" href="https://learn.devc.dev/index.php?title=MediaWiki:Gadget-RightToolbar.js&amp;diff=1664"/>
		<updated>2026-01-11T04:10:19Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script：​添加JavaScript代码&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
/* ================================================================&lt;br /&gt;
   MediaWiki Gadget: Localized Clock Bar&lt;br /&gt;
   功能：&lt;br /&gt;
   - 显示浏览器本地时间和 UTC 时间&lt;br /&gt;
   - 使用 MediaWiki 用户语言格式&lt;br /&gt;
   - 深色模式适配 + 滑入动画&lt;br /&gt;
   ================================================================= */&lt;br /&gt;
&lt;br /&gt;
mw.loader.using( [ &#039;mediawiki.util&#039; ] ).then( function () {&lt;br /&gt;
    var STYLE_ID = &#039;mw-right-toolbar-style&#039;;&lt;br /&gt;
&lt;br /&gt;
    function ensureToolbarStyles() {&lt;br /&gt;
        if ( document.getElementById( STYLE_ID ) ) {&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var css = [&lt;br /&gt;
            &#039;#mw-right-toolbar, .mw-right-toolbar {&#039;,&lt;br /&gt;
            &#039;  position: fixed;&#039;,&lt;br /&gt;
            &#039;  bottom: 96px;&#039;,&lt;br /&gt;
            &#039;  right: 24px;&#039;,&lt;br /&gt;
            &#039;  display: flex;&#039;,&lt;br /&gt;
            &#039;  flex-direction: column;&#039;,&lt;br /&gt;
            &#039;  align-items: flex-end;&#039;,&lt;br /&gt;
            &#039;  gap: 6px;&#039;,&lt;br /&gt;
            &#039;  z-index: 2147483647;&#039;,&lt;br /&gt;
            &#039;  opacity: 0;&#039;,&lt;br /&gt;
            &#039;  transform: translateY(12px);&#039;,&lt;br /&gt;
            &#039;  transition: opacity 0.4s ease, transform 0.4s ease;&#039;,&lt;br /&gt;
            &#039;}&#039;,&lt;br /&gt;
            &#039;&#039;,&lt;br /&gt;
            &#039;.mw-right-toolbar.is-visible {&#039;,&lt;br /&gt;
            &#039;  opacity: 1;&#039;,&lt;br /&gt;
            &#039;  transform: translateY(0);&#039;,&lt;br /&gt;
            &#039;}&#039;,&lt;br /&gt;
            &#039;&#039;,&lt;br /&gt;
            &#039;.mw-right-toolbar .mw-rt-button,&#039;,&lt;br /&gt;
            &#039;.mw-right-toolbar .mw-rt-clock {&#039;,&lt;br /&gt;
            &#039;  background: var(--color-surface-0, rgba(255, 255, 255, 0.85));&#039;,&lt;br /&gt;
            &#039;  border: 1px solid var(--border-color-base, #aaa);&#039;,&lt;br /&gt;
            &#039;  color: var(--color-base, #333);&#039;,&lt;br /&gt;
            &#039;  border-radius: 4px;&#039;,&lt;br /&gt;
            &#039;  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);&#039;,&lt;br /&gt;
            &#039;  font-size: 12px;&#039;,&lt;br /&gt;
            &#039;  line-height: 1.4;&#039;,&lt;br /&gt;
            &#039;  padding: 6px 12px;&#039;,&lt;br /&gt;
            &#039;  backdrop-filter: blur(4px);&#039;,&lt;br /&gt;
            &#039;}&#039;,&lt;br /&gt;
            &#039;&#039;,&lt;br /&gt;
            &#039;.mw-right-toolbar .mw-rt-button {&#039;,&lt;br /&gt;
            &#039;  cursor: pointer;&#039;,&lt;br /&gt;
            &#039;  opacity: 0.8;&#039;,&lt;br /&gt;
            &#039;  transition: background 0.2s ease, opacity 0.2s ease, transform 0.2s ease;&#039;,&lt;br /&gt;
            &#039;}&#039;,&lt;br /&gt;
            &#039;&#039;,&lt;br /&gt;
            &#039;.mw-right-toolbar .mw-rt-button:hover {&#039;,&lt;br /&gt;
            &#039;  opacity: 1;&#039;,&lt;br /&gt;
            &#039;  background: var(--background-color-progressive-subtle, #ddd);&#039;,&lt;br /&gt;
            &#039;}&#039;,&lt;br /&gt;
            &#039;&#039;,&lt;br /&gt;
            &#039;.mw-right-toolbar .mw-rt-button:active {&#039;,&lt;br /&gt;
            &#039;  transform: translateY(1px);&#039;,&lt;br /&gt;
            &#039;}&#039;,&lt;br /&gt;
            &#039;&#039;,&lt;br /&gt;
            &#039;.skin-theme-clientpref-night .mw-right-toolbar .mw-rt-button,&#039;,&lt;br /&gt;
            &#039;.skin-theme-clientpref-night .mw-right-toolbar .mw-rt-clock {&#039;,&lt;br /&gt;
            &#039;  background: rgba(30, 30, 30, 0.85);&#039;,&lt;br /&gt;
            &#039;  border-color: #555;&#039;,&lt;br /&gt;
            &#039;  color: #eee;&#039;,&lt;br /&gt;
            &#039;}&#039;,&lt;br /&gt;
            &#039;&#039;,&lt;br /&gt;
            &#039;@media (max-width: 768px) {&#039;,&lt;br /&gt;
            &#039;  #mw-right-toolbar, .mw-right-toolbar {&#039;,&lt;br /&gt;
            &#039;    bottom: 72px;&#039;,&lt;br /&gt;
            &#039;    right: 16px;&#039;,&lt;br /&gt;
            &#039;  }&#039;,&lt;br /&gt;
            &#039;}&#039;&lt;br /&gt;
        ].join( &#039;\n&#039; );&lt;br /&gt;
&lt;br /&gt;
        var styleNode = mw.loader.addStyleTag( css );&lt;br /&gt;
        styleNode.id = STYLE_ID;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function initClockBar() {&lt;br /&gt;
        ensureToolbarStyles();&lt;br /&gt;
&lt;br /&gt;
        var isMobile = window.innerWidth &amp;lt;= 768;&lt;br /&gt;
        var container = document.getElementById( &#039;mw-right-toolbar&#039; );&lt;br /&gt;
&lt;br /&gt;
        if ( !container ) {&lt;br /&gt;
            container = document.createElement( &#039;div&#039; );&lt;br /&gt;
            container.id = &#039;mw-right-toolbar&#039;;&lt;br /&gt;
            container.className = &#039;mw-right-toolbar&#039;;&lt;br /&gt;
            document.body.appendChild( container );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function createButton( id, text, tooltip, clickHandler ) {&lt;br /&gt;
            var button = document.createElement( &#039;button&#039; );&lt;br /&gt;
            button.id = id;&lt;br /&gt;
            button.className = &#039;mw-rt-button&#039;;&lt;br /&gt;
            button.title = tooltip;&lt;br /&gt;
            button.textContent = text;&lt;br /&gt;
            button.type = &#039;button&#039;;&lt;br /&gt;
            button.addEventListener( &#039;click&#039;, clickHandler );&lt;br /&gt;
            return button;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var topButton = document.getElementById( &#039;mw-scroll-top&#039; );&lt;br /&gt;
        if ( !topButton ) {&lt;br /&gt;
            topButton = createButton( &#039;mw-scroll-top&#039;, &#039;▲&#039;, &#039;回到顶部&#039;, function () {&lt;br /&gt;
                window.scrollTo( {&lt;br /&gt;
                    top: 0,&lt;br /&gt;
                    behavior: &#039;smooth&#039;&lt;br /&gt;
                } );&lt;br /&gt;
            } );&lt;br /&gt;
            container.appendChild( topButton );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var bottomButton = document.getElementById( &#039;mw-scroll-bottom&#039; );&lt;br /&gt;
        if ( !bottomButton ) {&lt;br /&gt;
            bottomButton = createButton( &#039;mw-scroll-bottom&#039;, &#039;▼&#039;, &#039;回到底部&#039;, function () {&lt;br /&gt;
                window.scrollTo( {&lt;br /&gt;
                    top: document.body.scrollHeight,&lt;br /&gt;
                    behavior: &#039;smooth&#039;&lt;br /&gt;
                } );&lt;br /&gt;
            } );&lt;br /&gt;
            container.appendChild( bottomButton );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var clockDiv = document.getElementById( &#039;mw-right-toolbar-clock&#039; );&lt;br /&gt;
        if ( !isMobile &amp;amp;&amp;amp; !clockDiv ) {&lt;br /&gt;
            clockDiv = document.createElement( &#039;div&#039; );&lt;br /&gt;
            clockDiv.id = &#039;mw-right-toolbar-clock&#039;;&lt;br /&gt;
            clockDiv.className = &#039;mw-rt-clock&#039;;&lt;br /&gt;
            &lt;br /&gt;
            var localDateDiv = document.createElement( &#039;div&#039; );&lt;br /&gt;
            localDateDiv.id = &#039;mw-local-date&#039;;&lt;br /&gt;
            localDateDiv.textContent = &#039;加载中...&#039;;&lt;br /&gt;
            &lt;br /&gt;
            var localTimeDiv = document.createElement( &#039;div&#039; );&lt;br /&gt;
            localTimeDiv.id = &#039;mw-local-time&#039;;&lt;br /&gt;
            &lt;br /&gt;
            var utcTimeDiv = document.createElement( &#039;div&#039; );&lt;br /&gt;
            utcTimeDiv.id = &#039;mw-utc-time&#039;;&lt;br /&gt;
            &lt;br /&gt;
            clockDiv.appendChild( localDateDiv );&lt;br /&gt;
            clockDiv.appendChild( localTimeDiv );&lt;br /&gt;
            clockDiv.appendChild( utcTimeDiv );&lt;br /&gt;
            &lt;br /&gt;
            container.appendChild( clockDiv );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        topButton.style.display = &#039;none&#039;;&lt;br /&gt;
        var ticking = false;&lt;br /&gt;
        window.addEventListener( &#039;scroll&#039;, function () {&lt;br /&gt;
            if ( ticking ) {&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            ticking = true;&lt;br /&gt;
            window.requestAnimationFrame( function () {&lt;br /&gt;
                var scrollTop = window.pageYOffset || document.documentElement.scrollTop;&lt;br /&gt;
                if ( scrollTop &amp;gt; 200 ) {&lt;br /&gt;
                    topButton.style.display = &#039;block&#039;;&lt;br /&gt;
                } else {&lt;br /&gt;
                    topButton.style.display = &#039;none&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                ticking = false;&lt;br /&gt;
            } );&lt;br /&gt;
        } );&lt;br /&gt;
&lt;br /&gt;
        window.requestAnimationFrame( function () {&lt;br /&gt;
            container.classList.add( &#039;is-visible&#039; );&lt;br /&gt;
        } );&lt;br /&gt;
&lt;br /&gt;
        function renderClock() {&lt;br /&gt;
            var now = new Date();&lt;br /&gt;
            var userLang = mw.config.get( &#039;wgUserLanguage&#039; ) || &#039;en&#039;;&lt;br /&gt;
&lt;br /&gt;
            var localFormatter = new Intl.DateTimeFormat( userLang, {&lt;br /&gt;
                year: &#039;numeric&#039;,&lt;br /&gt;
                month: &#039;long&#039;,&lt;br /&gt;
                day: &#039;numeric&#039;,&lt;br /&gt;
                hour: &#039;2-digit&#039;,&lt;br /&gt;
                minute: &#039;2-digit&#039;,&lt;br /&gt;
                second: &#039;2-digit&#039;,&lt;br /&gt;
                hour12: false,&lt;br /&gt;
                timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone&lt;br /&gt;
            } );&lt;br /&gt;
&lt;br /&gt;
            var localParts = localFormatter.formatToParts( now );&lt;br /&gt;
            var localDateStr = localParts.filter( function ( p ) {&lt;br /&gt;
                return p.type === &#039;year&#039; || p.type === &#039;month&#039; || p.type === &#039;day&#039;;&lt;br /&gt;
            } ).map( function ( p ) {&lt;br /&gt;
                return p.value;&lt;br /&gt;
            } ).join( &#039; &#039; );&lt;br /&gt;
&lt;br /&gt;
            var localTimeStr = localParts.filter( function ( p ) {&lt;br /&gt;
                return p.type === &#039;hour&#039; || p.type === &#039;minute&#039; || p.type === &#039;second&#039;;&lt;br /&gt;
            } ).map( function ( p ) {&lt;br /&gt;
                return p.value;&lt;br /&gt;
            } ).join( &#039;:&#039; );&lt;br /&gt;
&lt;br /&gt;
            var localDateEl = document.getElementById( &#039;mw-local-date&#039; );&lt;br /&gt;
            var localTimeEl = document.getElementById( &#039;mw-local-time&#039; );&lt;br /&gt;
            if ( localDateEl ) localDateEl.textContent = localDateStr;&lt;br /&gt;
            if ( localTimeEl ) localTimeEl.textContent = localTimeStr;&lt;br /&gt;
&lt;br /&gt;
            var utcFormatter = new Intl.DateTimeFormat( userLang, {&lt;br /&gt;
                year: &#039;numeric&#039;,&lt;br /&gt;
                month: &#039;long&#039;,&lt;br /&gt;
                day: &#039;numeric&#039;,&lt;br /&gt;
                hour: &#039;2-digit&#039;,&lt;br /&gt;
                minute: &#039;2-digit&#039;,&lt;br /&gt;
                second: &#039;2-digit&#039;,&lt;br /&gt;
                hour12: false,&lt;br /&gt;
                timeZone: &#039;UTC&#039;&lt;br /&gt;
            } );&lt;br /&gt;
&lt;br /&gt;
            var utcParts = utcFormatter.formatToParts( now );&lt;br /&gt;
            var utcDateStr = utcParts.filter( function ( p ) {&lt;br /&gt;
                return p.type === &#039;year&#039; || p.type === &#039;month&#039; || p.type === &#039;day&#039;;&lt;br /&gt;
            } ).map( function ( p ) {&lt;br /&gt;
                return p.value;&lt;br /&gt;
            } ).join( &#039; &#039; );&lt;br /&gt;
&lt;br /&gt;
            var utcTimeStr = utcParts.filter( function ( p ) {&lt;br /&gt;
                return p.type === &#039;hour&#039; || p.type === &#039;minute&#039; || p.type === &#039;second&#039;;&lt;br /&gt;
            } ).map( function ( p ) {&lt;br /&gt;
                return p.value;&lt;br /&gt;
            } ).join( &#039;:&#039; );&lt;br /&gt;
&lt;br /&gt;
            var utcTimeEl = document.getElementById( &#039;mw-utc-time&#039; );&lt;br /&gt;
            if ( utcTimeEl ) utcTimeEl.textContent = &#039;UTC: &#039; + utcDateStr + &#039; &#039; + utcTimeStr;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var clockTimer = window.setInterval( renderClock, 1000 );&lt;br /&gt;
        renderClock();&lt;br /&gt;
&lt;br /&gt;
        mw.hook( &#039;user.languageChange&#039; ).add( renderClock );&lt;br /&gt;
&lt;br /&gt;
        document.addEventListener( &#039;visibilitychange&#039;, function () {&lt;br /&gt;
            if ( document.hidden ) {&lt;br /&gt;
                window.clearInterval( clockTimer );&lt;br /&gt;
                clockTimer = null;&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            if ( !clockTimer ) {&lt;br /&gt;
                clockTimer = window.setInterval( renderClock, 1000 );&lt;br /&gt;
                renderClock();&lt;br /&gt;
            }&lt;br /&gt;
        } );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // 页面加载完成后初始化&lt;br /&gt;
    if ( document.readyState === &#039;loading&#039; ) {&lt;br /&gt;
        document.addEventListener( &#039;DOMContentLoaded&#039;, initClockBar );&lt;br /&gt;
    } else {&lt;br /&gt;
        initClockBar();&lt;br /&gt;
    }&lt;br /&gt;
} );&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://learn.devc.dev/index.php?title=MediaWiki:Gadget-RightToolbar&amp;diff=1663</id>
		<title>MediaWiki:Gadget-RightToolbar</title>
		<link rel="alternate" type="text/html" href="https://learn.devc.dev/index.php?title=MediaWiki:Gadget-RightToolbar&amp;diff=1663"/>
		<updated>2026-01-11T04:04:36Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script：​Imported from text file&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
/* ================================================================&lt;br /&gt;
   MediaWiki Gadget: Localized Clock Bar&lt;br /&gt;
   功能：&lt;br /&gt;
   - 显示浏览器本地时间和 UTC 时间&lt;br /&gt;
   - 使用 MediaWiki 用户语言格式&lt;br /&gt;
   - 深色模式适配 + 滑入动画&lt;br /&gt;
   ================================================================= */&lt;br /&gt;
&lt;br /&gt;
mw.loader.using( [ &#039;mediawiki.util&#039; ] ).then( function () {&lt;br /&gt;
    var STYLE_ID = &#039;mw-right-toolbar-style&#039;;&lt;br /&gt;
&lt;br /&gt;
    function ensureToolbarStyles() {&lt;br /&gt;
        if ( document.getElementById( STYLE_ID ) ) {&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var css = [&lt;br /&gt;
            &#039;#mw-right-toolbar, .mw-right-toolbar {&#039;,&lt;br /&gt;
            &#039;  position: fixed;&#039;,&lt;br /&gt;
            &#039;  bottom: 96px;&#039;,&lt;br /&gt;
            &#039;  right: 24px;&#039;,&lt;br /&gt;
            &#039;  display: flex;&#039;,&lt;br /&gt;
            &#039;  flex-direction: column;&#039;,&lt;br /&gt;
            &#039;  align-items: flex-end;&#039;,&lt;br /&gt;
            &#039;  gap: 6px;&#039;,&lt;br /&gt;
            &#039;  z-index: 2147483647;&#039;,&lt;br /&gt;
            &#039;  opacity: 0;&#039;,&lt;br /&gt;
            &#039;  transform: translateY(12px);&#039;,&lt;br /&gt;
            &#039;  transition: opacity 0.4s ease, transform 0.4s ease;&#039;,&lt;br /&gt;
            &#039;}&#039;,&lt;br /&gt;
            &#039;&#039;,&lt;br /&gt;
            &#039;.mw-right-toolbar.is-visible {&#039;,&lt;br /&gt;
            &#039;  opacity: 1;&#039;,&lt;br /&gt;
            &#039;  transform: translateY(0);&#039;,&lt;br /&gt;
            &#039;}&#039;,&lt;br /&gt;
            &#039;&#039;,&lt;br /&gt;
            &#039;.mw-right-toolbar .mw-rt-button,&#039;,&lt;br /&gt;
            &#039;.mw-right-toolbar .mw-rt-clock {&#039;,&lt;br /&gt;
            &#039;  background: var(--color-surface-0, rgba(255, 255, 255, 0.85));&#039;,&lt;br /&gt;
            &#039;  border: 1px solid var(--border-color-base, #aaa);&#039;,&lt;br /&gt;
            &#039;  color: var(--color-base, #333);&#039;,&lt;br /&gt;
            &#039;  border-radius: 4px;&#039;,&lt;br /&gt;
            &#039;  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);&#039;,&lt;br /&gt;
            &#039;  font-size: 12px;&#039;,&lt;br /&gt;
            &#039;  line-height: 1.4;&#039;,&lt;br /&gt;
            &#039;  padding: 6px 12px;&#039;,&lt;br /&gt;
            &#039;  backdrop-filter: blur(4px);&#039;,&lt;br /&gt;
            &#039;}&#039;,&lt;br /&gt;
            &#039;&#039;,&lt;br /&gt;
            &#039;.mw-right-toolbar .mw-rt-button {&#039;,&lt;br /&gt;
            &#039;  cursor: pointer;&#039;,&lt;br /&gt;
            &#039;  opacity: 0.8;&#039;,&lt;br /&gt;
            &#039;  transition: background 0.2s ease, opacity 0.2s ease, transform 0.2s ease;&#039;,&lt;br /&gt;
            &#039;}&#039;,&lt;br /&gt;
            &#039;&#039;,&lt;br /&gt;
            &#039;.mw-right-toolbar .mw-rt-button:hover {&#039;,&lt;br /&gt;
            &#039;  opacity: 1;&#039;,&lt;br /&gt;
            &#039;  background: var(--background-color-progressive-subtle, #ddd);&#039;,&lt;br /&gt;
            &#039;}&#039;,&lt;br /&gt;
            &#039;&#039;,&lt;br /&gt;
            &#039;.mw-right-toolbar .mw-rt-button:active {&#039;,&lt;br /&gt;
            &#039;  transform: translateY(1px);&#039;,&lt;br /&gt;
            &#039;}&#039;,&lt;br /&gt;
            &#039;&#039;,&lt;br /&gt;
            &#039;.skin-theme-clientpref-night .mw-right-toolbar .mw-rt-button,&#039;,&lt;br /&gt;
            &#039;.skin-theme-clientpref-night .mw-right-toolbar .mw-rt-clock {&#039;,&lt;br /&gt;
            &#039;  background: rgba(30, 30, 30, 0.85);&#039;,&lt;br /&gt;
            &#039;  border-color: #555;&#039;,&lt;br /&gt;
            &#039;  color: #eee;&#039;,&lt;br /&gt;
            &#039;}&#039;,&lt;br /&gt;
            &#039;&#039;,&lt;br /&gt;
            &#039;@media (max-width: 768px) {&#039;,&lt;br /&gt;
            &#039;  #mw-right-toolbar, .mw-right-toolbar {&#039;,&lt;br /&gt;
            &#039;    bottom: 72px;&#039;,&lt;br /&gt;
            &#039;    right: 16px;&#039;,&lt;br /&gt;
            &#039;  }&#039;,&lt;br /&gt;
            &#039;}&#039;&lt;br /&gt;
        ].join( &#039;\n&#039; );&lt;br /&gt;
&lt;br /&gt;
        var styleNode = mw.loader.addStyleTag( css );&lt;br /&gt;
        styleNode.id = STYLE_ID;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function initClockBar() {&lt;br /&gt;
        ensureToolbarStyles();&lt;br /&gt;
&lt;br /&gt;
        var isMobile = window.innerWidth &amp;lt;= 768;&lt;br /&gt;
        var container = document.getElementById( &#039;mw-right-toolbar&#039; );&lt;br /&gt;
&lt;br /&gt;
        if ( !container ) {&lt;br /&gt;
            container = document.createElement( &#039;div&#039; );&lt;br /&gt;
            container.id = &#039;mw-right-toolbar&#039;;&lt;br /&gt;
            container.className = &#039;mw-right-toolbar&#039;;&lt;br /&gt;
            document.body.appendChild( container );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function createButton( id, text, tooltip, clickHandler ) {&lt;br /&gt;
            var button = document.createElement( &#039;button&#039; );&lt;br /&gt;
            button.id = id;&lt;br /&gt;
            button.className = &#039;mw-rt-button&#039;;&lt;br /&gt;
            button.title = tooltip;&lt;br /&gt;
            button.textContent = text;&lt;br /&gt;
            button.type = &#039;button&#039;;&lt;br /&gt;
            button.addEventListener( &#039;click&#039;, clickHandler );&lt;br /&gt;
            return button;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var topButton = document.getElementById( &#039;mw-scroll-top&#039; );&lt;br /&gt;
        if ( !topButton ) {&lt;br /&gt;
            topButton = createButton( &#039;mw-scroll-top&#039;, &#039;▲&#039;, &#039;回到顶部&#039;, function () {&lt;br /&gt;
                window.scrollTo( {&lt;br /&gt;
                    top: 0,&lt;br /&gt;
                    behavior: &#039;smooth&#039;&lt;br /&gt;
                } );&lt;br /&gt;
            } );&lt;br /&gt;
            container.appendChild( topButton );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var bottomButton = document.getElementById( &#039;mw-scroll-bottom&#039; );&lt;br /&gt;
        if ( !bottomButton ) {&lt;br /&gt;
            bottomButton = createButton( &#039;mw-scroll-bottom&#039;, &#039;▼&#039;, &#039;回到底部&#039;, function () {&lt;br /&gt;
                window.scrollTo( {&lt;br /&gt;
                    top: document.body.scrollHeight,&lt;br /&gt;
                    behavior: &#039;smooth&#039;&lt;br /&gt;
                } );&lt;br /&gt;
            } );&lt;br /&gt;
            container.appendChild( bottomButton );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var clockDiv = document.getElementById( &#039;mw-right-toolbar-clock&#039; );&lt;br /&gt;
        if ( !isMobile &amp;amp;&amp;amp; !clockDiv ) {&lt;br /&gt;
            clockDiv = document.createElement( &#039;div&#039; );&lt;br /&gt;
            clockDiv.id = &#039;mw-right-toolbar-clock&#039;;&lt;br /&gt;
            clockDiv.className = &#039;mw-rt-clock&#039;;&lt;br /&gt;
            &lt;br /&gt;
            var localDateDiv = document.createElement( &#039;div&#039; );&lt;br /&gt;
            localDateDiv.id = &#039;mw-local-date&#039;;&lt;br /&gt;
            localDateDiv.textContent = &#039;加载中...&#039;;&lt;br /&gt;
            &lt;br /&gt;
            var localTimeDiv = document.createElement( &#039;div&#039; );&lt;br /&gt;
            localTimeDiv.id = &#039;mw-local-time&#039;;&lt;br /&gt;
            &lt;br /&gt;
            var utcTimeDiv = document.createElement( &#039;div&#039; );&lt;br /&gt;
            utcTimeDiv.id = &#039;mw-utc-time&#039;;&lt;br /&gt;
            &lt;br /&gt;
            clockDiv.appendChild( localDateDiv );&lt;br /&gt;
            clockDiv.appendChild( localTimeDiv );&lt;br /&gt;
            clockDiv.appendChild( utcTimeDiv );&lt;br /&gt;
            &lt;br /&gt;
            container.appendChild( clockDiv );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        topButton.style.display = &#039;none&#039;;&lt;br /&gt;
        var ticking = false;&lt;br /&gt;
        window.addEventListener( &#039;scroll&#039;, function () {&lt;br /&gt;
            if ( ticking ) {&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            ticking = true;&lt;br /&gt;
            window.requestAnimationFrame( function () {&lt;br /&gt;
                var scrollTop = window.pageYOffset || document.documentElement.scrollTop;&lt;br /&gt;
                if ( scrollTop &amp;gt; 200 ) {&lt;br /&gt;
                    topButton.style.display = &#039;block&#039;;&lt;br /&gt;
                } else {&lt;br /&gt;
                    topButton.style.display = &#039;none&#039;;&lt;br /&gt;
                }&lt;br /&gt;
                ticking = false;&lt;br /&gt;
            } );&lt;br /&gt;
        } );&lt;br /&gt;
&lt;br /&gt;
        window.requestAnimationFrame( function () {&lt;br /&gt;
            container.classList.add( &#039;is-visible&#039; );&lt;br /&gt;
        } );&lt;br /&gt;
&lt;br /&gt;
        function renderClock() {&lt;br /&gt;
            var now = new Date();&lt;br /&gt;
            var userLang = mw.config.get( &#039;wgUserLanguage&#039; ) || &#039;en&#039;;&lt;br /&gt;
&lt;br /&gt;
            var localFormatter = new Intl.DateTimeFormat( userLang, {&lt;br /&gt;
                year: &#039;numeric&#039;,&lt;br /&gt;
                month: &#039;long&#039;,&lt;br /&gt;
                day: &#039;numeric&#039;,&lt;br /&gt;
                hour: &#039;2-digit&#039;,&lt;br /&gt;
                minute: &#039;2-digit&#039;,&lt;br /&gt;
                second: &#039;2-digit&#039;,&lt;br /&gt;
                hour12: false,&lt;br /&gt;
                timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone&lt;br /&gt;
            } );&lt;br /&gt;
&lt;br /&gt;
            var localParts = localFormatter.formatToParts( now );&lt;br /&gt;
            var localDateStr = localParts.filter( function ( p ) {&lt;br /&gt;
                return p.type === &#039;year&#039; || p.type === &#039;month&#039; || p.type === &#039;day&#039;;&lt;br /&gt;
            } ).map( function ( p ) {&lt;br /&gt;
                return p.value;&lt;br /&gt;
            } ).join( &#039; &#039; );&lt;br /&gt;
&lt;br /&gt;
            var localTimeStr = localParts.filter( function ( p ) {&lt;br /&gt;
                return p.type === &#039;hour&#039; || p.type === &#039;minute&#039; || p.type === &#039;second&#039;;&lt;br /&gt;
            } ).map( function ( p ) {&lt;br /&gt;
                return p.value;&lt;br /&gt;
            } ).join( &#039;:&#039; );&lt;br /&gt;
&lt;br /&gt;
            var localDateEl = document.getElementById( &#039;mw-local-date&#039; );&lt;br /&gt;
            var localTimeEl = document.getElementById( &#039;mw-local-time&#039; );&lt;br /&gt;
            if ( localDateEl ) localDateEl.textContent = localDateStr;&lt;br /&gt;
            if ( localTimeEl ) localTimeEl.textContent = localTimeStr;&lt;br /&gt;
&lt;br /&gt;
            var utcFormatter = new Intl.DateTimeFormat( userLang, {&lt;br /&gt;
                year: &#039;numeric&#039;,&lt;br /&gt;
                month: &#039;long&#039;,&lt;br /&gt;
                day: &#039;numeric&#039;,&lt;br /&gt;
                hour: &#039;2-digit&#039;,&lt;br /&gt;
                minute: &#039;2-digit&#039;,&lt;br /&gt;
                second: &#039;2-digit&#039;,&lt;br /&gt;
                hour12: false,&lt;br /&gt;
                timeZone: &#039;UTC&#039;&lt;br /&gt;
            } );&lt;br /&gt;
&lt;br /&gt;
            var utcParts = utcFormatter.formatToParts( now );&lt;br /&gt;
            var utcDateStr = utcParts.filter( function ( p ) {&lt;br /&gt;
                return p.type === &#039;year&#039; || p.type === &#039;month&#039; || p.type === &#039;day&#039;;&lt;br /&gt;
            } ).map( function ( p ) {&lt;br /&gt;
                return p.value;&lt;br /&gt;
            } ).join( &#039; &#039; );&lt;br /&gt;
&lt;br /&gt;
            var utcTimeStr = utcParts.filter( function ( p ) {&lt;br /&gt;
                return p.type === &#039;hour&#039; || p.type === &#039;minute&#039; || p.type === &#039;second&#039;;&lt;br /&gt;
            } ).map( function ( p ) {&lt;br /&gt;
                return p.value;&lt;br /&gt;
            } ).join( &#039;:&#039; );&lt;br /&gt;
&lt;br /&gt;
            var utcTimeEl = document.getElementById( &#039;mw-utc-time&#039; );&lt;br /&gt;
            if ( utcTimeEl ) utcTimeEl.textContent = &#039;UTC: &#039; + utcDateStr + &#039; &#039; + utcTimeStr;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var clockTimer = window.setInterval( renderClock, 1000 );&lt;br /&gt;
        renderClock();&lt;br /&gt;
&lt;br /&gt;
        mw.hook( &#039;user.languageChange&#039; ).add( renderClock );&lt;br /&gt;
&lt;br /&gt;
        document.addEventListener( &#039;visibilitychange&#039;, function () {&lt;br /&gt;
            if ( document.hidden ) {&lt;br /&gt;
                window.clearInterval( clockTimer );&lt;br /&gt;
                clockTimer = null;&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            if ( !clockTimer ) {&lt;br /&gt;
                clockTimer = window.setInterval( renderClock, 1000 );&lt;br /&gt;
                renderClock();&lt;br /&gt;
            }&lt;br /&gt;
        } );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // 页面加载完成后初始化&lt;br /&gt;
    if ( document.readyState === &#039;loading&#039; ) {&lt;br /&gt;
        document.addEventListener( &#039;DOMContentLoaded&#039;, initClockBar );&lt;br /&gt;
    } else {&lt;br /&gt;
        initClockBar();&lt;br /&gt;
    }&lt;br /&gt;
} );&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://learn.devc.dev/index.php?title=MediaWiki:Temp_gadgets&amp;diff=1662</id>
		<title>MediaWiki:Temp gadgets</title>
		<link rel="alternate" type="text/html" href="https://learn.devc.dev/index.php?title=MediaWiki:Temp_gadgets&amp;diff=1662"/>
		<updated>2026-01-11T04:01:42Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script：​Imported from text file&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* HotCat[ResourceLoader|default|dependencies=mediawiki.util,mediawiki.api]|HotCat.js&lt;br /&gt;
* RightToolbar[ResourceLoader|default|dependencies=mediawiki.util,jquery|styles=RightToolbar.css]|RightToolbar.js&lt;br /&gt;
* SelectionCounter[ResourceLoader|default|dependencies=mediawiki.util|styles=SelectionCounter.css]|SelectionCounter.js&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://learn.devc.dev/index.php?title=MediaWiki:Gadget-RightToolbar.js&amp;diff=1661</id>
		<title>MediaWiki:Gadget-RightToolbar.js</title>
		<link rel="alternate" type="text/html" href="https://learn.devc.dev/index.php?title=MediaWiki:Gadget-RightToolbar.js&amp;diff=1661"/>
		<updated>2026-01-11T03:05:38Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script：​Inline fallback styles for RightToolbar&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ================================================================&lt;br /&gt;
   MediaWiki Gadget: Localized Clock Bar&lt;br /&gt;
   功能：&lt;br /&gt;
   - 显示浏览器本地时间和 UTC 时间&lt;br /&gt;
   - 使用 MediaWiki 用户语言格式&lt;br /&gt;
   - 深色模式适配 + 滑入动画&lt;br /&gt;
   ================================================================= */&lt;br /&gt;
&lt;br /&gt;
mw.loader.using( [ &#039;mediawiki.util&#039; ] ).then( function () {&lt;br /&gt;
    var STYLE_ID = &#039;mw-right-toolbar-style&#039;;&lt;br /&gt;
&lt;br /&gt;
    function ensureToolbarStyles() {&lt;br /&gt;
        if ( document.getElementById( STYLE_ID ) ) {&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var css = [&lt;br /&gt;
            &#039;#mw-right-toolbar, .mw-right-toolbar {&#039;,&lt;br /&gt;
            &#039;  position: fixed;&#039;,&lt;br /&gt;
            &#039;  bottom: 96px;&#039;,&lt;br /&gt;
            &#039;  right: 24px;&#039;,&lt;br /&gt;
            &#039;  display: flex;&#039;,&lt;br /&gt;
            &#039;  flex-direction: column;&#039;,&lt;br /&gt;
            &#039;  align-items: flex-end;&#039;,&lt;br /&gt;
            &#039;  gap: 6px;&#039;,&lt;br /&gt;
            &#039;  z-index: 2147483647;&#039;,&lt;br /&gt;
            &#039;  opacity: 0;&#039;,&lt;br /&gt;
            &#039;  transform: translateY(12px);&#039;,&lt;br /&gt;
            &#039;  transition: opacity 0.4s ease, transform 0.4s ease;&#039;,&lt;br /&gt;
            &#039;}&#039;,&lt;br /&gt;
            &#039;&#039;,&lt;br /&gt;
            &#039;.mw-right-toolbar.is-visible {&#039;,&lt;br /&gt;
            &#039;  opacity: 1;&#039;,&lt;br /&gt;
            &#039;  transform: translateY(0);&#039;,&lt;br /&gt;
            &#039;}&#039;,&lt;br /&gt;
            &#039;&#039;,&lt;br /&gt;
            &#039;.mw-right-toolbar .mw-rt-button,&#039;,&lt;br /&gt;
            &#039;.mw-right-toolbar .mw-rt-clock {&#039;,&lt;br /&gt;
            &#039;  background: var(--color-surface-0, rgba(255, 255, 255, 0.85));&#039;,&lt;br /&gt;
            &#039;  border: 1px solid var(--border-color-base, #aaa);&#039;,&lt;br /&gt;
            &#039;  color: var(--color-base, #333);&#039;,&lt;br /&gt;
            &#039;  border-radius: 4px;&#039;,&lt;br /&gt;
            &#039;  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);&#039;,&lt;br /&gt;
            &#039;  font-size: 12px;&#039;,&lt;br /&gt;
            &#039;  line-height: 1.4;&#039;,&lt;br /&gt;
            &#039;  padding: 6px 12px;&#039;,&lt;br /&gt;
            &#039;  backdrop-filter: blur(4px);&#039;,&lt;br /&gt;
            &#039;}&#039;,&lt;br /&gt;
            &#039;&#039;,&lt;br /&gt;
            &#039;.mw-right-toolbar .mw-rt-button {&#039;,&lt;br /&gt;
            &#039;  cursor: pointer;&#039;,&lt;br /&gt;
            &#039;  opacity: 0.8;&#039;,&lt;br /&gt;
            &#039;  transition: background 0.2s ease, opacity 0.2s ease, transform 0.2s ease;&#039;,&lt;br /&gt;
            &#039;}&#039;,&lt;br /&gt;
            &#039;&#039;,&lt;br /&gt;
            &#039;.mw-right-toolbar .mw-rt-button:hover {&#039;,&lt;br /&gt;
            &#039;  opacity: 1;&#039;,&lt;br /&gt;
            &#039;  background: var(--background-color-progressive-subtle, #ddd);&#039;,&lt;br /&gt;
            &#039;}&#039;,&lt;br /&gt;
            &#039;&#039;,&lt;br /&gt;
            &#039;.mw-right-toolbar .mw-rt-button:active {&#039;,&lt;br /&gt;
            &#039;  transform: translateY(1px);&#039;,&lt;br /&gt;
            &#039;}&#039;,&lt;br /&gt;
            &#039;&#039;,&lt;br /&gt;
            &#039;.skin-theme-clientpref-night .mw-right-toolbar .mw-rt-button,&#039;,&lt;br /&gt;
            &#039;.skin-theme-clientpref-night .mw-right-toolbar .mw-rt-clock {&#039;,&lt;br /&gt;
            &#039;  background: rgba(30, 30, 30, 0.85);&#039;,&lt;br /&gt;
            &#039;  border-color: #555;&#039;,&lt;br /&gt;
            &#039;  color: #eee;&#039;,&lt;br /&gt;
            &#039;}&#039;,&lt;br /&gt;
            &#039;&#039;,&lt;br /&gt;
            &#039;@media (max-width: 768px) {&#039;,&lt;br /&gt;
            &#039;  #mw-right-toolbar, .mw-right-toolbar {&#039;,&lt;br /&gt;
            &#039;    bottom: 72px;&#039;,&lt;br /&gt;
            &#039;    right: 16px;&#039;,&lt;br /&gt;
            &#039;  }&#039;,&lt;br /&gt;
            &#039;}&#039;&lt;br /&gt;
        ].join( &#039;\n&#039; );&lt;br /&gt;
&lt;br /&gt;
        var styleNode = mw.loader.addStyleTag( css );&lt;br /&gt;
        styleNode.id = STYLE_ID;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function initClockBar() {&lt;br /&gt;
        ensureToolbarStyles();&lt;br /&gt;
&lt;br /&gt;
        var isMobile = window.innerWidth &amp;lt;= 768;&lt;br /&gt;
        var $container = $( &#039;#mw-right-toolbar&#039; );&lt;br /&gt;
&lt;br /&gt;
        if ( !$container.length ) {&lt;br /&gt;
            $container = $( &#039;&amp;lt;div id=&amp;quot;mw-right-toolbar&amp;quot; class=&amp;quot;mw-right-toolbar&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; ).appendTo( &#039;body&#039; );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function createButton( id, text, tooltip, clickHandler ) {&lt;br /&gt;
            return $( &#039;&amp;lt;button&amp;gt;&amp;lt;/button&amp;gt;&#039;, {&lt;br /&gt;
                id: id,&lt;br /&gt;
                class: &#039;mw-rt-button&#039;,&lt;br /&gt;
                title: tooltip,&lt;br /&gt;
                text: text,&lt;br /&gt;
                type: &#039;button&#039;&lt;br /&gt;
            } ).on( &#039;click&#039;, clickHandler );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var $topButton = $( &#039;#mw-scroll-top&#039; );&lt;br /&gt;
        if ( !$topButton.length ) {&lt;br /&gt;
            $topButton = createButton( &#039;mw-scroll-top&#039;, &#039;▲&#039;, &#039;回到顶部&#039;, function () {&lt;br /&gt;
                $( &#039;html, body&#039; ).animate( { scrollTop: 0 }, { duration: 500, easing: &#039;swing&#039; } );&lt;br /&gt;
            } );&lt;br /&gt;
            $container.append( $topButton );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var $bottomButton = $( &#039;#mw-scroll-bottom&#039; );&lt;br /&gt;
        if ( !$bottomButton.length ) {&lt;br /&gt;
            $bottomButton = createButton( &#039;mw-scroll-bottom&#039;, &#039;▼&#039;, &#039;回到底部&#039;, function () {&lt;br /&gt;
                $( &#039;html, body&#039; ).animate( { scrollTop: $( document ).height() }, { duration: 500, easing: &#039;swing&#039; } );&lt;br /&gt;
            } );&lt;br /&gt;
            $container.append( $bottomButton );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var $clockDiv = $( &#039;#mw-right-toolbar-clock&#039; );&lt;br /&gt;
        if ( !isMobile &amp;amp;&amp;amp; !$clockDiv.length ) {&lt;br /&gt;
            $clockDiv = $( &#039;&amp;lt;div id=&amp;quot;mw-right-toolbar-clock&amp;quot; class=&amp;quot;mw-rt-clock&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; ).append(&lt;br /&gt;
                $( &#039;&amp;lt;div id=&amp;quot;mw-local-date&amp;quot;&amp;gt;加载中...&amp;lt;/div&amp;gt;&#039; ),&lt;br /&gt;
                $( &#039;&amp;lt;div id=&amp;quot;mw-local-time&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; ),&lt;br /&gt;
                $( &#039;&amp;lt;div id=&amp;quot;mw-utc-time&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039; )&lt;br /&gt;
            );&lt;br /&gt;
            $container.append( $clockDiv );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        $topButton.hide();&lt;br /&gt;
        var ticking = false;&lt;br /&gt;
        $( window ).on( &#039;scroll&#039;, function () {&lt;br /&gt;
            if ( ticking ) {&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            ticking = true;&lt;br /&gt;
            window.requestAnimationFrame( function () {&lt;br /&gt;
                var scrollTop = $( window ).scrollTop();&lt;br /&gt;
                if ( scrollTop &amp;gt; 200 ) {&lt;br /&gt;
                    $topButton.fadeIn();&lt;br /&gt;
                } else {&lt;br /&gt;
                    $topButton.fadeOut();&lt;br /&gt;
                }&lt;br /&gt;
                ticking = false;&lt;br /&gt;
            } );&lt;br /&gt;
        } );&lt;br /&gt;
&lt;br /&gt;
        window.requestAnimationFrame( function () {&lt;br /&gt;
            $container.addClass( &#039;is-visible&#039; );&lt;br /&gt;
        } );&lt;br /&gt;
&lt;br /&gt;
        function renderClock() {&lt;br /&gt;
            var now = new Date();&lt;br /&gt;
            var userLang = mw.config.get( &#039;wgUserLanguage&#039; ) || &#039;en&#039;;&lt;br /&gt;
&lt;br /&gt;
            var localFormatter = new Intl.DateTimeFormat( userLang, {&lt;br /&gt;
                year: &#039;numeric&#039;,&lt;br /&gt;
                month: &#039;long&#039;,&lt;br /&gt;
                day: &#039;numeric&#039;,&lt;br /&gt;
                hour: &#039;2-digit&#039;,&lt;br /&gt;
                minute: &#039;2-digit&#039;,&lt;br /&gt;
                second: &#039;2-digit&#039;,&lt;br /&gt;
                hour12: false,&lt;br /&gt;
                timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone&lt;br /&gt;
            } );&lt;br /&gt;
&lt;br /&gt;
            var localParts = localFormatter.formatToParts( now );&lt;br /&gt;
            var localDateStr = localParts.filter( function ( p ) {&lt;br /&gt;
                return p.type === &#039;year&#039; || p.type === &#039;month&#039; || p.type === &#039;day&#039;;&lt;br /&gt;
            } ).map( function ( p ) {&lt;br /&gt;
                return p.value;&lt;br /&gt;
            } ).join( &#039; &#039; );&lt;br /&gt;
&lt;br /&gt;
            var localTimeStr = localParts.filter( function ( p ) {&lt;br /&gt;
                return p.type === &#039;hour&#039; || p.type === &#039;minute&#039; || p.type === &#039;second&#039;;&lt;br /&gt;
            } ).map( function ( p ) {&lt;br /&gt;
                return p.value;&lt;br /&gt;
            } ).join( &#039;:&#039; );&lt;br /&gt;
&lt;br /&gt;
            $( &#039;#mw-local-date&#039; ).text( localDateStr );&lt;br /&gt;
            $( &#039;#mw-local-time&#039; ).text( localTimeStr );&lt;br /&gt;
&lt;br /&gt;
            var utcFormatter = new Intl.DateTimeFormat( userLang, {&lt;br /&gt;
                year: &#039;numeric&#039;,&lt;br /&gt;
                month: &#039;long&#039;,&lt;br /&gt;
                day: &#039;numeric&#039;,&lt;br /&gt;
                hour: &#039;2-digit&#039;,&lt;br /&gt;
                minute: &#039;2-digit&#039;,&lt;br /&gt;
                second: &#039;2-digit&#039;,&lt;br /&gt;
                hour12: false,&lt;br /&gt;
                timeZone: &#039;UTC&#039;&lt;br /&gt;
            } );&lt;br /&gt;
&lt;br /&gt;
            var utcParts = utcFormatter.formatToParts( now );&lt;br /&gt;
            var utcDateStr = utcParts.filter( function ( p ) {&lt;br /&gt;
                return p.type === &#039;year&#039; || p.type === &#039;month&#039; || p.type === &#039;day&#039;;&lt;br /&gt;
            } ).map( function ( p ) {&lt;br /&gt;
                return p.value;&lt;br /&gt;
            } ).join( &#039; &#039; );&lt;br /&gt;
&lt;br /&gt;
            var utcTimeStr = utcParts.filter( function ( p ) {&lt;br /&gt;
                return p.type === &#039;hour&#039; || p.type === &#039;minute&#039; || p.type === &#039;second&#039;;&lt;br /&gt;
            } ).map( function ( p ) {&lt;br /&gt;
                return p.value;&lt;br /&gt;
            } ).join( &#039;:&#039; );&lt;br /&gt;
&lt;br /&gt;
            $( &#039;#mw-utc-time&#039; ).text( &#039;UTC: &#039; + utcDateStr + &#039; &#039; + utcTimeStr );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var clockTimer = window.setInterval( renderClock, 1000 );&lt;br /&gt;
        renderClock();&lt;br /&gt;
&lt;br /&gt;
        mw.hook( &#039;user.languageChange&#039; ).add( renderClock );&lt;br /&gt;
&lt;br /&gt;
        document.addEventListener( &#039;visibilitychange&#039;, function () {&lt;br /&gt;
            if ( document.hidden ) {&lt;br /&gt;
                window.clearInterval( clockTimer );&lt;br /&gt;
                clockTimer = null;&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            if ( !clockTimer ) {&lt;br /&gt;
                clockTimer = window.setInterval( renderClock, 1000 );&lt;br /&gt;
                renderClock();&lt;br /&gt;
            }&lt;br /&gt;
        } );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    $( function () {&lt;br /&gt;
        ensureToolbarStyles();&lt;br /&gt;
        initClockBar();&lt;br /&gt;
    } );&lt;br /&gt;
} );&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://learn.devc.dev/index.php?title=%E9%A6%96%E9%A1%B5/style.css&amp;diff=1660</id>
		<title>首页/style.css</title>
		<link rel="alternate" type="text/html" href="https://learn.devc.dev/index.php?title=%E9%A6%96%E9%A1%B5/style.css&amp;diff=1660"/>
		<updated>2026-01-11T02:35:19Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script：​Point 首页/style.css to MediaWiki:Mainpage.css&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Proxy: reuse MediaWiki:Mainpage.css so Common.css legacy import keeps working */&lt;br /&gt;
@import url(&amp;quot;/index.php?title=MediaWiki:Mainpage.css&amp;amp;action=raw&amp;amp;ctype=text/css&amp;quot;);&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://learn.devc.dev/index.php?title=%E9%A6%96%E9%A1%B5/style.css&amp;diff=1659</id>
		<title>首页/style.css</title>
		<link rel="alternate" type="text/html" href="https://learn.devc.dev/index.php?title=%E9%A6%96%E9%A1%B5/style.css&amp;diff=1659"/>
		<updated>2026-01-11T02:34:16Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script：​Create homepage style subpage to match Common.css import&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* 首页样式：仅在首页生效 */&lt;br /&gt;
body.page-首页 .banner {&lt;br /&gt;
  height: auto;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  background: linear-gradient(135deg, #8B0000, #B22222);&lt;br /&gt;
  color: white;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  border-radius: 12px;&lt;br /&gt;
  padding: 12px 24px;&lt;br /&gt;
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);&lt;br /&gt;
  text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
body.page-首页 .banner-text {&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  line-height: 1.4;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
body.page-首页 .banner .chinese-text {&lt;br /&gt;
  font-size: 24px;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
body.page-首页 .banner .english-text {&lt;br /&gt;
  font-size: 16px;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  opacity: 0.9;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (min-width: 768px) {&lt;br /&gt;
  body.page-首页 .banner .chinese-text {&lt;br /&gt;
    font-size: 28px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  body.page-首页 .banner .english-text {&lt;br /&gt;
    font-size: 18px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 480px) {&lt;br /&gt;
  body.page-首页 .banner .chinese-text {&lt;br /&gt;
    font-size: 20px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  body.page-首页 .banner .english-text {&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
body.page-首页 .content-box {&lt;br /&gt;
  margin: 10px;&lt;br /&gt;
  padding: 20px;&lt;br /&gt;
  border-radius: 10px;&lt;br /&gt;
  border: 1px solid #e0e0e0;&lt;br /&gt;
  transition: transform 0.3s ease, box-shadow 0.3s ease;&lt;br /&gt;
  will-change: transform;&lt;br /&gt;
  backface-visibility: hidden;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
body.page-首页 .content-box:hover {&lt;br /&gt;
  transform: translateY(-5px);&lt;br /&gt;
  box-shadow: 0 8px 16px rgba(0, 0, 0, 0.2);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
body.page-首页 .content-box:focus {&lt;br /&gt;
  outline: 2px solid #0066cc;&lt;br /&gt;
  outline-offset: 2px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
body.page-首页 .content-box h2 {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  padding-bottom: 10px;&lt;br /&gt;
  margin-bottom: 10px;&lt;br /&gt;
  border-bottom: 2px solid red;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
body.page-首页 .content-box p {&lt;br /&gt;
  line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
body.page-首页 .flex-container {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  justify-content: space-between;&lt;br /&gt;
  gap: 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
body.page-首页 .flex-container .content-box {&lt;br /&gt;
  flex: 1;&lt;br /&gt;
  max-width: 33.33%;&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (max-width: 768px) {&lt;br /&gt;
  body.page-首页 .flex-container {&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    gap: 15px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  body.page-首页 .flex-container .content-box {&lt;br /&gt;
    max-width: none;&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    margin-bottom: 0;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  body.page-首页 .banner .chinese-text,&lt;br /&gt;
  body.page-首页 .banner .english-text {&lt;br /&gt;
    text-align: center;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  body.page-首页 .banner .chinese-text {&lt;br /&gt;
    font-size: 20px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  body.page-首页 .banner .english-text {&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (prefers-reduced-motion: reduce) {&lt;br /&gt;
  body.page-首页 .content-box {&lt;br /&gt;
    transition: none;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  body.page-首页 .content-box:hover {&lt;br /&gt;
    transform: none;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.skin-theme-clientpref-night body.page-首页 .banner {&lt;br /&gt;
  background: linear-gradient(135deg, #3a0c0c, #5a1a1a);&lt;br /&gt;
  box-shadow: 0 6px 16px rgba(0, 0, 0, 0.45);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.skin-theme-clientpref-night body.page-首页 .content-box {&lt;br /&gt;
  border-color: #2f2f2f;&lt;br /&gt;
  background-color: #1c1c1c;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.skin-theme-clientpref-night body.page-首页 .content-box:hover {&lt;br /&gt;
  box-shadow: 0 10px 22px rgba(0, 0, 0, 0.55);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.skin-theme-clientpref-night body.page-首页 .content-box:focus {&lt;br /&gt;
  outline-color: #5ea0ff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.skin-theme-clientpref-night body.page-首页 .content-box h2 {&lt;br /&gt;
  border-bottom-color: #b94a4a;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://learn.devc.dev/index.php?title=MediaWiki:Common.css&amp;diff=1658</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://learn.devc.dev/index.php?title=MediaWiki:Common.css&amp;diff=1658"/>
		<updated>2026-01-11T02:18:44Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script：​Document Mainpage.css import&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* 全局字体设置，覆盖东亚语言 */&lt;br /&gt;
body {&lt;br /&gt;
  font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Arial,&lt;br /&gt;
  &amp;quot;Noto Sans&amp;quot;, &amp;quot;Noto Sans CJK SC&amp;quot;, &amp;quot;Noto Sans CJK TC&amp;quot;, &amp;quot;Noto Sans JP&amp;quot;,&lt;br /&gt;
  &amp;quot;Noto Sans KR&amp;quot;, sans-serif, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;,&lt;br /&gt;
  &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, &amp;quot;SimSun&amp;quot;, &amp;quot;SimHei&amp;quot;,&lt;br /&gt;
  &amp;quot;Songti SC&amp;quot;, &amp;quot;KaiTi&amp;quot;, &amp;quot;MingLiU&amp;quot;, &amp;quot;PMingLiU&amp;quot;, &amp;quot;Microsoft JhengHei&amp;quot;, &amp;quot;Malgun Gothic&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 2026-01-11: load Mainpage-specific styles from dedicated page */&lt;br /&gt;
@import url(&amp;quot;/index.php?title=MediaWiki:Mainpage.css&amp;amp;action=raw&amp;amp;ctype=text/css&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
/* 全站重定向链接样式 */&lt;br /&gt;
.mw-redirect {&lt;br /&gt;
  color: #008000 !important; /* 使用 hex 颜色值，提高优先级 */&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 重定向链接悬停效果 */&lt;br /&gt;
.mw-redirect:hover {&lt;br /&gt;
  color: #006400 !important;&lt;br /&gt;
  text-decoration: underline;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 导航框样式迁移至 Template:Navbox/styles.css */&lt;br /&gt;
&lt;br /&gt;
/* 语言链接样式 */&lt;br /&gt;
#p-lang ul {&lt;br /&gt;
  list-style: none;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  margin: 10px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-lang li {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  margin-right: 10px;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://learn.devc.dev/index.php?title=MediaWiki:Common.css&amp;diff=1657</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://learn.devc.dev/index.php?title=MediaWiki:Common.css&amp;diff=1657"/>
		<updated>2026-01-11T02:03:42Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script：​Load homepage CSS from MediaWiki:Mainpage.css&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* 全局字体设置，覆盖东亚语言 */&lt;br /&gt;
body {&lt;br /&gt;
  font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Arial,&lt;br /&gt;
  &amp;quot;Noto Sans&amp;quot;, &amp;quot;Noto Sans CJK SC&amp;quot;, &amp;quot;Noto Sans CJK TC&amp;quot;, &amp;quot;Noto Sans JP&amp;quot;,&lt;br /&gt;
  &amp;quot;Noto Sans KR&amp;quot;, sans-serif, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;,&lt;br /&gt;
  &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, &amp;quot;SimSun&amp;quot;, &amp;quot;SimHei&amp;quot;,&lt;br /&gt;
  &amp;quot;Songti SC&amp;quot;, &amp;quot;KaiTi&amp;quot;, &amp;quot;MingLiU&amp;quot;, &amp;quot;PMingLiU&amp;quot;, &amp;quot;Microsoft JhengHei&amp;quot;, &amp;quot;Malgun Gothic&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 首页样式拆分到子页面，避免污染全站 */&lt;br /&gt;
@import url(&amp;quot;/index.php?title=MediaWiki:Mainpage.css&amp;amp;action=raw&amp;amp;ctype=text/css&amp;quot;);&lt;br /&gt;
/* 全站重定向链接样式 */&lt;br /&gt;
.mw-redirect {&lt;br /&gt;
  color: #008000 !important; /* 使用 hex 颜色值，提高优先级 */&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 重定向链接悬停效果 */&lt;br /&gt;
.mw-redirect:hover {&lt;br /&gt;
  color: #006400 !important;&lt;br /&gt;
  text-decoration: underline;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 导航框样式迁移至 Template:Navbox/styles.css */&lt;br /&gt;
&lt;br /&gt;
/* 语言链接样式 */&lt;br /&gt;
#p-lang ul {&lt;br /&gt;
  list-style: none;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  margin: 10px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#p-lang li {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  margin-right: 10px;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://learn.devc.dev/index.php?title=MediaWiki:Mainpage.css&amp;diff=1654</id>
		<title>MediaWiki:Mainpage.css</title>
		<link rel="alternate" type="text/html" href="https://learn.devc.dev/index.php?title=MediaWiki:Mainpage.css&amp;diff=1654"/>
		<updated>2026-01-10T16:49:43Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* 首页样式：仅在首页生效 */&lt;br /&gt;
body.page-首页 .banner {&lt;br /&gt;
  height: auto;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
  background: linear-gradient(135deg, #8B0000, #B22222); /* 改进对比度 */&lt;br /&gt;
  color: white;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  border-radius: 12px;&lt;br /&gt;
  padding: 12px 24px;&lt;br /&gt;
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);&lt;br /&gt;
  text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
body.page-首页 .banner-text {&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  line-height: 1.4;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
body.page-首页 .banner .chinese-text {&lt;br /&gt;
  font-size: 24px;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
body.page-首页 .banner .english-text {&lt;br /&gt;
  font-size: 16px;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  opacity: 0.9;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 当屏幕宽度大于 768px（如平板和大屏幕设备） */&lt;br /&gt;
@media screen and (min-width: 768px) {&lt;br /&gt;
  body.page-首页 .banner .chinese-text {&lt;br /&gt;
    font-size: 28px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  body.page-首页 .banner .english-text {&lt;br /&gt;
    font-size: 18px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 当屏幕宽度小于 480px（如手机设备） */&lt;br /&gt;
@media screen and (max-width: 480px) {&lt;br /&gt;
  body.page-首页 .banner .chinese-text {&lt;br /&gt;
    font-size: 20px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  body.page-首页 .banner .english-text {&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 内容块样式 */&lt;br /&gt;
body.page-首页 .content-box {&lt;br /&gt;
  margin: 10px;&lt;br /&gt;
  padding: 20px;&lt;br /&gt;
  border-radius: 10px;&lt;br /&gt;
  border: 1px solid #e0e0e0;&lt;br /&gt;
  -webkit-transition: -webkit-transform 0.3s ease, box-shadow 0.3s ease;&lt;br /&gt;
  transition: transform 0.3s ease, box-shadow 0.3s ease;&lt;br /&gt;
  will-change: transform; /* 性能优化 */&lt;br /&gt;
  backface-visibility: hidden; /* 性能优化 */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
body.page-首页 .content-box:hover {&lt;br /&gt;
  -webkit-transform: translateY(-5px);&lt;br /&gt;
  -moz-transform: translateY(-5px);&lt;br /&gt;
  transform: translateY(-5px);&lt;br /&gt;
  box-shadow: 0 8px 16px rgba(0, 0, 0, 0.2);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
body.page-首页 .content-box:focus {&lt;br /&gt;
  outline: 2px solid #0066cc; /* 可访问性改进 */&lt;br /&gt;
  outline-offset: 2px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
body.page-首页 .content-box h2 {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  padding-bottom: 10px;&lt;br /&gt;
  margin-bottom: 10px;&lt;br /&gt;
  border-bottom: 2px solid red;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
body.page-首页 .content-box p {&lt;br /&gt;
  line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Flex 容器 */&lt;br /&gt;
body.page-首页 .flex-container {&lt;br /&gt;
  display: flex;&lt;br /&gt;
  justify-content: space-between;&lt;br /&gt;
  gap: 20px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
body.page-首页 .flex-container .content-box {&lt;br /&gt;
  flex: 1;&lt;br /&gt;
  max-width: 33.33%;&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 移动端优化 */&lt;br /&gt;
@media (max-width: 768px) {&lt;br /&gt;
  body.page-首页 .flex-container {&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    gap: 15px; /* 统一间距 */&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  body.page-首页 .flex-container .content-box {&lt;br /&gt;
    max-width: none; /* 移除限制 */&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    margin-bottom: 0; /* 统一使用 gap */&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  body.page-首页 .banner .chinese-text,&lt;br /&gt;
  body.page-首页 .banner .english-text {&lt;br /&gt;
    text-align: center;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  body.page-首页 .banner .chinese-text {&lt;br /&gt;
    font-size: 20px;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  body.page-首页 .banner .english-text {&lt;br /&gt;
    font-size: 14px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 为减少动画的用户提供支持 */&lt;br /&gt;
@media (prefers-reduced-motion: reduce) {&lt;br /&gt;
  body.page-首页 .content-box {&lt;br /&gt;
    -webkit-transition: none;&lt;br /&gt;
    transition: none;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  body.page-首页 .content-box:hover {&lt;br /&gt;
    -webkit-transform: none;&lt;br /&gt;
    -moz-transform: none;&lt;br /&gt;
    transform: none;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 暗色模式覆盖（Citizen: night） */&lt;br /&gt;
.skin-theme-clientpref-night body.page-首页 .banner {&lt;br /&gt;
  background: linear-gradient(135deg, #3a0c0c, #5a1a1a);&lt;br /&gt;
  box-shadow: 0 6px 16px rgba(0, 0, 0, 0.45);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.skin-theme-clientpref-night body.page-首页 .content-box {&lt;br /&gt;
  border-color: #2f2f2f;&lt;br /&gt;
  background-color: #1c1c1c;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.skin-theme-clientpref-night body.page-首页 .content-box:hover {&lt;br /&gt;
  box-shadow: 0 10px 22px rgba(0, 0, 0, 0.55);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.skin-theme-clientpref-night body.page-首页 .content-box:focus {&lt;br /&gt;
  outline-color: #5ea0ff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.skin-theme-clientpref-night body.page-首页 .content-box h2 {&lt;br /&gt;
  border-bottom-color: #b94a4a;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://learn.devc.dev/index.php?title=Linux_%E5%B8%AE%E5%8A%A9%E5%91%BD%E4%BB%A4&amp;diff=1650</id>
		<title>Linux 帮助命令</title>
		<link rel="alternate" type="text/html" href="https://learn.devc.dev/index.php?title=Linux_%E5%B8%AE%E5%8A%A9%E5%91%BD%E4%BB%A4&amp;diff=1650"/>
		<updated>2025-12-27T05:05:25Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script：​补充常见帮助方式&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;在 Linux 环境中，如果你遇到困难，可以使用以下方式查看帮助。&lt;br /&gt;
&lt;br /&gt;
== man ==&lt;br /&gt;
&amp;lt;code&amp;gt;man&amp;lt;/code&amp;gt; 是 Manual pages 的缩写，例如：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
man cat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
在 man 页面中按 &amp;lt;code&amp;gt;q&amp;lt;/code&amp;gt; 退出。&lt;br /&gt;
&lt;br /&gt;
== --help ==&lt;br /&gt;
许多命令支持 &amp;lt;code&amp;gt;--help&amp;lt;/code&amp;gt; 参数：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
ls --help&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== help ==&lt;br /&gt;
部分内建命令可用 &amp;lt;code&amp;gt;help&amp;lt;/code&amp;gt; 查看说明：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
help cd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
对于初学者而言，帮助文档未必一眼看懂，建议结合搜索引擎与实践操作进行理解。&lt;br /&gt;
&lt;br /&gt;
{{认识_Linux}}&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://learn.devc.dev/index.php?title=Linux_%E6%96%87%E4%BB%B6%E8%B7%AF%E5%BE%84&amp;diff=1649</id>
		<title>Linux 文件路径</title>
		<link rel="alternate" type="text/html" href="https://learn.devc.dev/index.php?title=Linux_%E6%96%87%E4%BB%B6%E8%B7%AF%E5%BE%84&amp;diff=1649"/>
		<updated>2025-12-27T05:05:21Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script：​校对与补充说明&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Linux 进入目录有“绝对路径”和“相对路径”两种。&lt;br /&gt;
&lt;br /&gt;
== 绝对路径 ==&lt;br /&gt;
以根目录 &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; 为起点的完整路径，如 &amp;lt;code&amp;gt;/home/user/Code&amp;lt;/code&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
== 相对路径 ==&lt;br /&gt;
相对于当前目录的路径，如 &amp;lt;code&amp;gt;./Code&amp;lt;/code&amp;gt; 或 &amp;lt;code&amp;gt;../Code&amp;lt;/code&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
== 查看当前路径 ==&lt;br /&gt;
使用 &amp;lt;code&amp;gt;pwd&amp;lt;/code&amp;gt; 获取当前目录的绝对路径：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
pwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
提示：忘记目录名或命令时，可用 Tab 自动补全，连续按两次 Tab 可以查看候选。&lt;br /&gt;
&lt;br /&gt;
{{认识_Linux}}&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://learn.devc.dev/index.php?title=Linux_%E6%96%87%E4%BB%B6%E6%93%8D%E4%BD%9C&amp;diff=1648</id>
		<title>Linux 文件操作</title>
		<link rel="alternate" type="text/html" href="https://learn.devc.dev/index.php?title=Linux_%E6%96%87%E4%BB%B6%E6%93%8D%E4%BD%9C&amp;diff=1648"/>
		<updated>2025-12-27T05:05:12Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script：​校对示例并修复格式&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;下面是 Linux 中对文件的常用操作，包含新建、复制、删除、移动与查看。&lt;br /&gt;
&lt;br /&gt;
== 新建空白文件 ==&lt;br /&gt;
使用 &amp;lt;code&amp;gt;touch&amp;lt;/code&amp;gt; 新建文件：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
touch hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
可用 &amp;lt;code&amp;gt;ls&amp;lt;/code&amp;gt; 查看创建结果。该命令不会覆盖已有同名文件。&lt;br /&gt;
&lt;br /&gt;
== 复制 ==&lt;br /&gt;
复制文件到指定目录：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cp hello one/two/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
复制目录需要 &amp;lt;code&amp;gt;-r&amp;lt;/code&amp;gt;：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
mkdir test&lt;br /&gt;
cp -r test one/two&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 删除 ==&lt;br /&gt;
删除文件：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
rm hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
删除目录需要 &amp;lt;code&amp;gt;-r&amp;lt;/code&amp;gt;：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
rm -r test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 移动与重命名 ==&lt;br /&gt;
移动文件或目录：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
mv test1 dir1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
重命名：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
mv test1 test2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 查看文件内容 ==&lt;br /&gt;
使用 &amp;lt;code&amp;gt;cat&amp;lt;/code&amp;gt; 查看内容：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cat passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
显示行号：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cat -n passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{认识_Linux}}&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://learn.devc.dev/index.php?title=Linux_%E7%9B%AE%E5%BD%95%E6%93%8D%E4%BD%9C&amp;diff=1647</id>
		<title>Linux 目录操作</title>
		<link rel="alternate" type="text/html" href="https://learn.devc.dev/index.php?title=Linux_%E7%9B%AE%E5%BD%95%E6%93%8D%E4%BD%9C&amp;diff=1647"/>
		<updated>2025-12-27T05:05:03Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script：​校对与优化排版&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Linux 的基本操作主要分为“目录操作”和“文件操作”两部分。&lt;br /&gt;
&lt;br /&gt;
打开终端后，默认处在当前用户目录，例如：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
用户名:~/ $&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
其中 &amp;lt;code&amp;gt;用户名&amp;lt;/code&amp;gt; 是当前用户名，&amp;lt;code&amp;gt;$&amp;lt;/code&amp;gt; 是命令提示符。&lt;br /&gt;
&lt;br /&gt;
== 查看目录中的内容 ==&lt;br /&gt;
输入 &amp;lt;code&amp;gt;ls&amp;lt;/code&amp;gt; 可以查看当前目录下的文件和目录。&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
部分系统中，蓝色代表目录，白色代表文件。&lt;br /&gt;
&lt;br /&gt;
== 进入目录 ==&lt;br /&gt;
使用 &amp;lt;code&amp;gt;cd&amp;lt;/code&amp;gt; 进入目录：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd 文件夹或路径&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 查看目录结构 ==&lt;br /&gt;
使用 &amp;lt;code&amp;gt;tree&amp;lt;/code&amp;gt; 列出目录树：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
tree&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
下图为 Linux 目录结构示意：&lt;br /&gt;
[[File:Linux 操作系统目录结构的简介.png|alt=Linux 操作系统目录结构的简介|thumb|Linux 操作系统目录结构的简介]]&lt;br /&gt;
&lt;br /&gt;
想查看根目录结构，先进入根目录：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd /&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
然后执行：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
tree&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
终端会遍历所有目录与文件，按 &amp;lt;code&amp;gt;Ctrl + C&amp;lt;/code&amp;gt; 可中止。&lt;br /&gt;
&lt;br /&gt;
== 新建目录 ==&lt;br /&gt;
使用 &amp;lt;code&amp;gt;mkdir&amp;lt;/code&amp;gt; 创建目录：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
mkdir 文件夹&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
使用 &amp;lt;code&amp;gt;-p&amp;lt;/code&amp;gt; 可一次性创建多级目录：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p 文件夹/子文件夹&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{认识_Linux}}&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://learn.devc.dev/index.php?title=Linux_%E7%BB%88%E7%AB%AF%E6%93%8D%E4%BD%9C&amp;diff=1646</id>
		<title>Linux 终端操作</title>
		<link rel="alternate" type="text/html" href="https://learn.devc.dev/index.php?title=Linux_%E7%BB%88%E7%AB%AF%E6%93%8D%E4%BD%9C&amp;diff=1646"/>
		<updated>2025-12-27T05:04:57Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script：​校对与整理操作说明&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 常用快捷键 ==&lt;br /&gt;
按键盘的 &amp;lt;code&amp;gt;上下键&amp;lt;/code&amp;gt; 可以快速选择之前输入过的命令。&lt;br /&gt;
&lt;br /&gt;
输入 &amp;lt;code&amp;gt;cd ..&amp;lt;/code&amp;gt; 可以回到上一级目录，类似 Windows 的“向上”。&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd ..&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd -&amp;lt;/code&amp;gt; 表示回到上一次所在的目录，类似 Windows 的“后退”。&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd -&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd ~&amp;lt;/code&amp;gt; 表示回到当前用户的主目录，类似 Windows 的“回到桌面”。&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd ~&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd /&amp;lt;/code&amp;gt; 表示进入根目录，它是一切目录的父目录。&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot;&amp;gt;&lt;br /&gt;
cd /&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
全试过一遍后，输入 &amp;lt;code&amp;gt;cd ~&amp;lt;/code&amp;gt; 返回用户主目录，继续后面的学习。&lt;br /&gt;
&lt;br /&gt;
提示：上述符号必须使用英文输入法，否则会报错。&lt;br /&gt;
&lt;br /&gt;
{{认识_Linux}}&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://learn.devc.dev/index.php?title=Linux_%E7%AE%80%E4%BB%8B&amp;diff=1645</id>
		<title>Linux 简介</title>
		<link rel="alternate" type="text/html" href="https://learn.devc.dev/index.php?title=Linux_%E7%AE%80%E4%BB%8B&amp;diff=1645"/>
		<updated>2025-12-27T05:04:52Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script：​校对并补充结构化内容&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 为什么学习 Linux ==&lt;br /&gt;
Windows 可能是你进入计算机世界的启蒙者，但在整个计算机生态中，Linux 的地位远比 Windows 更加重要。没有 Linux，就没有今天繁荣的互联网。&lt;br /&gt;
&lt;br /&gt;
如今，全球超过 80% 的智能手机都运行基于 Linux 内核的 Android 系统；全球排名前 500 的超级计算机中，绝大多数采用 Linux；你日常使用的互联网服务也多由 Linux 服务器稳定支撑。&lt;br /&gt;
&lt;br /&gt;
与 Windows 相比，Linux 没那么直观易用，但它是学习计算机技术最理想的工具。进程与线程如何运作？文件系统如何管理？网络如何互联？这些概念在 Linux 中更容易通过实践理解。&lt;br /&gt;
&lt;br /&gt;
[[File:Linux 常用操作脑图.png|alt=Linux 常用操作脑图|thumb|Linux 常用操作脑图]]&lt;br /&gt;
&lt;br /&gt;
== Linux 的常见应用场景 ==&lt;br /&gt;
* Web 服务器、数据库服务器&lt;br /&gt;
* 云计算与容器平台&lt;br /&gt;
* 软件开发与自动化部署&lt;br /&gt;
* 嵌入式与移动设备&lt;br /&gt;
&lt;br /&gt;
== 学习建议 ==&lt;br /&gt;
* 多动手：把常用命令写一遍、用一遍&lt;br /&gt;
* 先掌握路径、目录、文件这三类核心操作&lt;br /&gt;
* 用“为什么这样做”来理解命令，而不是死记&lt;br /&gt;
&lt;br /&gt;
{{认识_Linux}}&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://learn.devc.dev/index.php?title=MediaWiki:Gadget-RightToolbar.css&amp;diff=1644</id>
		<title>MediaWiki:Gadget-RightToolbar.css</title>
		<link rel="alternate" type="text/html" href="https://learn.devc.dev/index.php?title=MediaWiki:Gadget-RightToolbar.css&amp;diff=1644"/>
		<updated>2025-12-27T05:01:57Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script：​统一样式层级与 SelectionCounter&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.mw-right-toolbar {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  bottom: 96px;&lt;br /&gt;
  right: 24px;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  align-items: flex-end;&lt;br /&gt;
  gap: 6px;&lt;br /&gt;
  z-index: 2147483647;&lt;br /&gt;
  opacity: 0;&lt;br /&gt;
  transform: translateY(12px);&lt;br /&gt;
  transition: opacity 0.4s ease, transform 0.4s ease;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-right-toolbar.is-visible {&lt;br /&gt;
  opacity: 1;&lt;br /&gt;
  transform: translateY(0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-right-toolbar .mw-rt-button,&lt;br /&gt;
.mw-right-toolbar .mw-rt-clock {&lt;br /&gt;
  background: var(--color-surface-0, rgba(255, 255, 255, 0.85));&lt;br /&gt;
  border: 1px solid var(--border-color-base, #aaa);&lt;br /&gt;
  color: var(--color-base, #333);&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  line-height: 1.4;&lt;br /&gt;
  padding: 6px 12px;&lt;br /&gt;
  backdrop-filter: blur(4px);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-right-toolbar .mw-rt-button {&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  opacity: 0.8;&lt;br /&gt;
  transition: background 0.2s ease, opacity 0.2s ease, transform 0.2s ease;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-right-toolbar .mw-rt-button:hover {&lt;br /&gt;
  opacity: 1;&lt;br /&gt;
  background: var(--background-color-progressive-subtle, #ddd);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-right-toolbar .mw-rt-button:active {&lt;br /&gt;
  transform: translateY(1px);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.skin-theme-clientpref-night .mw-right-toolbar .mw-rt-button,&lt;br /&gt;
.skin-theme-clientpref-night .mw-right-toolbar .mw-rt-clock {&lt;br /&gt;
  background: rgba(30, 30, 30, 0.85);&lt;br /&gt;
  border-color: #555;&lt;br /&gt;
  color: #eee;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (max-width: 768px) {&lt;br /&gt;
  .mw-right-toolbar {&lt;br /&gt;
    bottom: 72px;&lt;br /&gt;
    right: 16px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://learn.devc.dev/index.php?title=MediaWiki:Gadget-SelectionCounter.css&amp;diff=1643</id>
		<title>MediaWiki:Gadget-SelectionCounter.css</title>
		<link rel="alternate" type="text/html" href="https://learn.devc.dev/index.php?title=MediaWiki:Gadget-SelectionCounter.css&amp;diff=1643"/>
		<updated>2025-12-27T04:58:56Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script：​提升层级避免被布局覆盖&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.mw-selection-counter {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  bottom: 24px;&lt;br /&gt;
  right: 24px;&lt;br /&gt;
  padding: 6px 10px;&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  background: var(--color-surface-0, rgba(255, 255, 255, 0.85));&lt;br /&gt;
  border: 1px solid var(--border-color-base, #aaa);&lt;br /&gt;
  color: var(--color-base, #333);&lt;br /&gt;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);&lt;br /&gt;
  backdrop-filter: blur(4px);&lt;br /&gt;
  z-index: 2147483647;&lt;br /&gt;
  pointer-events: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.skin-theme-clientpref-night .mw-selection-counter {&lt;br /&gt;
  background: rgba(30, 30, 30, 0.85);&lt;br /&gt;
  border-color: #555;&lt;br /&gt;
  color: #eee;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (max-width: 768px) {&lt;br /&gt;
  .mw-selection-counter {&lt;br /&gt;
    right: 16px;&lt;br /&gt;
    bottom: 16px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://learn.devc.dev/index.php?title=MediaWiki:Gadget-SelectionCounter.js&amp;diff=1642</id>
		<title>MediaWiki:Gadget-SelectionCounter.js</title>
		<link rel="alternate" type="text/html" href="https://learn.devc.dev/index.php?title=MediaWiki:Gadget-SelectionCounter.js&amp;diff=1642"/>
		<updated>2025-12-27T04:54:24Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script：​为未加载 CSS 提供可见性兜底&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ================================================================&lt;br /&gt;
   MediaWiki Gadget: SelectionCounter&lt;br /&gt;
   功能：&lt;br /&gt;
   - 选中文本时显示字数统计&lt;br /&gt;
   - 与 RightToolbar 风格一致&lt;br /&gt;
   ================================================================= */&lt;br /&gt;
&lt;br /&gt;
mw.loader.using([&#039;mediawiki.util&#039;]).then(function () {&lt;br /&gt;
    if (window.SelectionCounterLoaded) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    window.SelectionCounterLoaded = true;&lt;br /&gt;
&lt;br /&gt;
    $(function () {&lt;br /&gt;
        var $counter = $(&#039;#mw-selection-counter&#039;);&lt;br /&gt;
&lt;br /&gt;
        if (!$counter.length) {&lt;br /&gt;
            $counter = $(&#039;&amp;lt;div id=&amp;quot;mw-selection-counter&amp;quot; class=&amp;quot;mw-selection-counter&amp;quot; role=&amp;quot;status&amp;quot; aria-live=&amp;quot;polite&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;)&lt;br /&gt;
                .hide()&lt;br /&gt;
                .appendTo(&#039;body&#039;);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function ensureVisibleStyles() {&lt;br /&gt;
            var el = $counter[0];&lt;br /&gt;
            if (!el) {&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            var computed = window.getComputedStyle(el);&lt;br /&gt;
            if (computed.position !== &#039;static&#039;) {&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            $counter.css({&lt;br /&gt;
                position: &#039;fixed&#039;,&lt;br /&gt;
                bottom: &#039;24px&#039;,&lt;br /&gt;
                right: &#039;24px&#039;,&lt;br /&gt;
                padding: &#039;6px 10px&#039;,&lt;br /&gt;
                fontSize: &#039;12px&#039;,&lt;br /&gt;
                borderRadius: &#039;4px&#039;,&lt;br /&gt;
                background: &#039;var(--color-surface-0, rgba(255, 255, 255, 0.85))&#039;,&lt;br /&gt;
                border: &#039;1px solid var(--border-color-base, #aaa)&#039;,&lt;br /&gt;
                color: &#039;var(--color-base, #333)&#039;,&lt;br /&gt;
                boxShadow: &#039;0 1px 3px rgba(0, 0, 0, 0.2)&#039;,&lt;br /&gt;
                backdropFilter: &#039;blur(4px)&#039;,&lt;br /&gt;
                zIndex: 2147483647,&lt;br /&gt;
                pointerEvents: &#039;none&#039;&lt;br /&gt;
            });&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        ensureVisibleStyles();&lt;br /&gt;
&lt;br /&gt;
        var rafId = null;&lt;br /&gt;
        var pollTimer = null;&lt;br /&gt;
        var lastText = &#039;&#039;;&lt;br /&gt;
        var lastTime = 0;&lt;br /&gt;
        var isSelecting = false;&lt;br /&gt;
&lt;br /&gt;
        function getSelectionText() {&lt;br /&gt;
            var selection = window.getSelection();&lt;br /&gt;
            if (!selection || selection.rangeCount === 0 || selection.isCollapsed) {&lt;br /&gt;
                return &#039;&#039;;&lt;br /&gt;
            }&lt;br /&gt;
            return selection.toString();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function compactText(text) {&lt;br /&gt;
            return text.replace(/\s+/g, &#039;&#039;);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function showCount(text) {&lt;br /&gt;
            var compact = compactText(text);&lt;br /&gt;
            if (!compact) {&lt;br /&gt;
                return false;&lt;br /&gt;
            }&lt;br /&gt;
            var count = Array.from(compact).length;&lt;br /&gt;
            $counter.text(&#039;已选 &#039; + count + &#039; 字&#039;).show();&lt;br /&gt;
            return true;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function updateCounter() {&lt;br /&gt;
            rafId = null;&lt;br /&gt;
            var text = getSelectionText();&lt;br /&gt;
            if (text) {&lt;br /&gt;
                lastText = text;&lt;br /&gt;
                lastTime = Date.now();&lt;br /&gt;
                showCount(text);&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            if (lastText &amp;amp;&amp;amp; Date.now() - lastTime &amp;lt; 1200) {&lt;br /&gt;
                showCount(lastText);&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            $counter.hide();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function scheduleUpdate() {&lt;br /&gt;
            if (rafId) {&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            rafId = window.requestAnimationFrame(updateCounter);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function scheduleUpdateDelayed() {&lt;br /&gt;
            window.setTimeout(scheduleUpdate, 0);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function startPolling() {&lt;br /&gt;
            if (pollTimer) {&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            pollTimer = window.setInterval(updateCounter, 500);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function stopPolling() {&lt;br /&gt;
            if (!pollTimer) {&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            window.clearInterval(pollTimer);&lt;br /&gt;
            pollTimer = null;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function onSelectMove() {&lt;br /&gt;
            if (!isSelecting) {&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            scheduleUpdate();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        document.addEventListener(&#039;selectionchange&#039;, function () {&lt;br /&gt;
            var text = getSelectionText();&lt;br /&gt;
            if (text) {&lt;br /&gt;
                lastText = text;&lt;br /&gt;
                lastTime = Date.now();&lt;br /&gt;
            }&lt;br /&gt;
            scheduleUpdate();&lt;br /&gt;
        });&lt;br /&gt;
        document.addEventListener(&#039;mousedown&#039;, function () {&lt;br /&gt;
            isSelecting = true;&lt;br /&gt;
        }, true);&lt;br /&gt;
        document.addEventListener(&#039;mouseup&#039;, function () {&lt;br /&gt;
            isSelecting = false;&lt;br /&gt;
            scheduleUpdateDelayed();&lt;br /&gt;
        }, true);&lt;br /&gt;
        document.addEventListener(&#039;mousemove&#039;, onSelectMove, true);&lt;br /&gt;
        document.addEventListener(&#039;touchstart&#039;, function () {&lt;br /&gt;
            isSelecting = true;&lt;br /&gt;
        }, { passive: true, capture: true });&lt;br /&gt;
        document.addEventListener(&#039;touchmove&#039;, onSelectMove, { passive: true, capture: true });&lt;br /&gt;
        document.addEventListener(&#039;touchend&#039;, function () {&lt;br /&gt;
            isSelecting = false;&lt;br /&gt;
            scheduleUpdateDelayed();&lt;br /&gt;
        }, { passive: true, capture: true });&lt;br /&gt;
        document.addEventListener(&#039;keyup&#039;, scheduleUpdate);&lt;br /&gt;
        window.addEventListener(&#039;focus&#039;, startPolling);&lt;br /&gt;
        window.addEventListener(&#039;blur&#039;, stopPolling);&lt;br /&gt;
        document.addEventListener(&#039;visibilitychange&#039;, function () {&lt;br /&gt;
            if (document.hidden) {&lt;br /&gt;
                stopPolling();&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            startPolling();&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        startPolling();&lt;br /&gt;
    });&lt;br /&gt;
});&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://learn.devc.dev/index.php?title=MediaWiki:Gadget-SelectionCounter.css&amp;diff=1641</id>
		<title>MediaWiki:Gadget-SelectionCounter.css</title>
		<link rel="alternate" type="text/html" href="https://learn.devc.dev/index.php?title=MediaWiki:Gadget-SelectionCounter.css&amp;diff=1641"/>
		<updated>2025-12-27T04:51:27Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script：​避免遮挡并禁用指针事件&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.mw-selection-counter {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  bottom: 24px;&lt;br /&gt;
  right: 24px;&lt;br /&gt;
  padding: 6px 10px;&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  background: var(--color-surface-0, rgba(255, 255, 255, 0.85));&lt;br /&gt;
  border: 1px solid var(--border-color-base, #aaa);&lt;br /&gt;
  color: var(--color-base, #333);&lt;br /&gt;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);&lt;br /&gt;
  backdrop-filter: blur(4px);&lt;br /&gt;
  z-index: 9999;&lt;br /&gt;
  pointer-events: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.skin-theme-clientpref-night .mw-selection-counter {&lt;br /&gt;
  background: rgba(30, 30, 30, 0.85);&lt;br /&gt;
  border-color: #555;&lt;br /&gt;
  color: #eee;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (max-width: 768px) {&lt;br /&gt;
  .mw-selection-counter {&lt;br /&gt;
    right: 16px;&lt;br /&gt;
    bottom: 16px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://learn.devc.dev/index.php?title=MediaWiki:Gadget-SelectionCounter.js&amp;diff=1640</id>
		<title>MediaWiki:Gadget-SelectionCounter.js</title>
		<link rel="alternate" type="text/html" href="https://learn.devc.dev/index.php?title=MediaWiki:Gadget-SelectionCounter.js&amp;diff=1640"/>
		<updated>2025-12-27T04:51:23Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script：​拖选时实时更新并增强触发&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ================================================================&lt;br /&gt;
   MediaWiki Gadget: SelectionCounter&lt;br /&gt;
   功能：&lt;br /&gt;
   - 选中文本时显示字数统计&lt;br /&gt;
   - 与 RightToolbar 风格一致&lt;br /&gt;
   ================================================================= */&lt;br /&gt;
&lt;br /&gt;
mw.loader.using([&#039;mediawiki.util&#039;]).then(function () {&lt;br /&gt;
    if (window.SelectionCounterLoaded) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    window.SelectionCounterLoaded = true;&lt;br /&gt;
&lt;br /&gt;
    $(function () {&lt;br /&gt;
        var $counter = $(&#039;#mw-selection-counter&#039;);&lt;br /&gt;
&lt;br /&gt;
        if (!$counter.length) {&lt;br /&gt;
            $counter = $(&#039;&amp;lt;div id=&amp;quot;mw-selection-counter&amp;quot; class=&amp;quot;mw-selection-counter&amp;quot; role=&amp;quot;status&amp;quot; aria-live=&amp;quot;polite&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;)&lt;br /&gt;
                .hide()&lt;br /&gt;
                .appendTo(&#039;body&#039;);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var rafId = null;&lt;br /&gt;
        var pollTimer = null;&lt;br /&gt;
        var lastText = &#039;&#039;;&lt;br /&gt;
        var lastTime = 0;&lt;br /&gt;
        var isSelecting = false;&lt;br /&gt;
&lt;br /&gt;
        function getSelectionText() {&lt;br /&gt;
            var selection = window.getSelection();&lt;br /&gt;
            if (!selection || selection.rangeCount === 0 || selection.isCollapsed) {&lt;br /&gt;
                return &#039;&#039;;&lt;br /&gt;
            }&lt;br /&gt;
            return selection.toString();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function compactText(text) {&lt;br /&gt;
            return text.replace(/\s+/g, &#039;&#039;);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function showCount(text) {&lt;br /&gt;
            var compact = compactText(text);&lt;br /&gt;
            if (!compact) {&lt;br /&gt;
                return false;&lt;br /&gt;
            }&lt;br /&gt;
            var count = Array.from(compact).length;&lt;br /&gt;
            $counter.text(&#039;已选 &#039; + count + &#039; 字&#039;).show();&lt;br /&gt;
            return true;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function updateCounter() {&lt;br /&gt;
            rafId = null;&lt;br /&gt;
            var text = getSelectionText();&lt;br /&gt;
            if (text) {&lt;br /&gt;
                lastText = text;&lt;br /&gt;
                lastTime = Date.now();&lt;br /&gt;
                showCount(text);&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            if (lastText &amp;amp;&amp;amp; Date.now() - lastTime &amp;lt; 1200) {&lt;br /&gt;
                showCount(lastText);&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            $counter.hide();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function scheduleUpdate() {&lt;br /&gt;
            if (rafId) {&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            rafId = window.requestAnimationFrame(updateCounter);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function scheduleUpdateDelayed() {&lt;br /&gt;
            window.setTimeout(scheduleUpdate, 0);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function startPolling() {&lt;br /&gt;
            if (pollTimer) {&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            pollTimer = window.setInterval(updateCounter, 500);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function stopPolling() {&lt;br /&gt;
            if (!pollTimer) {&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            window.clearInterval(pollTimer);&lt;br /&gt;
            pollTimer = null;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function onSelectMove() {&lt;br /&gt;
            if (!isSelecting) {&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            scheduleUpdate();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        document.addEventListener(&#039;selectionchange&#039;, function () {&lt;br /&gt;
            var text = getSelectionText();&lt;br /&gt;
            if (text) {&lt;br /&gt;
                lastText = text;&lt;br /&gt;
                lastTime = Date.now();&lt;br /&gt;
            }&lt;br /&gt;
            scheduleUpdate();&lt;br /&gt;
        });&lt;br /&gt;
        document.addEventListener(&#039;mousedown&#039;, function () {&lt;br /&gt;
            isSelecting = true;&lt;br /&gt;
        }, true);&lt;br /&gt;
        document.addEventListener(&#039;mouseup&#039;, function () {&lt;br /&gt;
            isSelecting = false;&lt;br /&gt;
            scheduleUpdateDelayed();&lt;br /&gt;
        }, true);&lt;br /&gt;
        document.addEventListener(&#039;mousemove&#039;, onSelectMove, true);&lt;br /&gt;
        document.addEventListener(&#039;touchstart&#039;, function () {&lt;br /&gt;
            isSelecting = true;&lt;br /&gt;
        }, { passive: true, capture: true });&lt;br /&gt;
        document.addEventListener(&#039;touchmove&#039;, onSelectMove, { passive: true, capture: true });&lt;br /&gt;
        document.addEventListener(&#039;touchend&#039;, function () {&lt;br /&gt;
            isSelecting = false;&lt;br /&gt;
            scheduleUpdateDelayed();&lt;br /&gt;
        }, { passive: true, capture: true });&lt;br /&gt;
        document.addEventListener(&#039;keyup&#039;, scheduleUpdate);&lt;br /&gt;
        window.addEventListener(&#039;focus&#039;, startPolling);&lt;br /&gt;
        window.addEventListener(&#039;blur&#039;, stopPolling);&lt;br /&gt;
        document.addEventListener(&#039;visibilitychange&#039;, function () {&lt;br /&gt;
            if (document.hidden) {&lt;br /&gt;
                stopPolling();&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            startPolling();&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        startPolling();&lt;br /&gt;
    });&lt;br /&gt;
});&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://learn.devc.dev/index.php?title=MediaWiki:Gadget-SelectionCounter.js&amp;diff=1639</id>
		<title>MediaWiki:Gadget-SelectionCounter.js</title>
		<link rel="alternate" type="text/html" href="https://learn.devc.dev/index.php?title=MediaWiki:Gadget-SelectionCounter.js&amp;diff=1639"/>
		<updated>2025-12-27T04:48:52Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script：​记录最近选区并延迟显示&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ================================================================&lt;br /&gt;
   MediaWiki Gadget: SelectionCounter&lt;br /&gt;
   功能：&lt;br /&gt;
   - 选中文本时显示字数统计&lt;br /&gt;
   - 与 RightToolbar 风格一致&lt;br /&gt;
   ================================================================= */&lt;br /&gt;
&lt;br /&gt;
mw.loader.using([&#039;mediawiki.util&#039;]).then(function () {&lt;br /&gt;
    if (window.SelectionCounterLoaded) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    window.SelectionCounterLoaded = true;&lt;br /&gt;
&lt;br /&gt;
    $(function () {&lt;br /&gt;
        var $counter = $(&#039;#mw-selection-counter&#039;);&lt;br /&gt;
&lt;br /&gt;
        if (!$counter.length) {&lt;br /&gt;
            $counter = $(&#039;&amp;lt;div id=&amp;quot;mw-selection-counter&amp;quot; class=&amp;quot;mw-selection-counter&amp;quot; role=&amp;quot;status&amp;quot; aria-live=&amp;quot;polite&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;)&lt;br /&gt;
                .hide()&lt;br /&gt;
                .appendTo(&#039;body&#039;);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var rafId = null;&lt;br /&gt;
        var pollTimer = null;&lt;br /&gt;
        var lastText = &#039;&#039;;&lt;br /&gt;
        var lastTime = 0;&lt;br /&gt;
&lt;br /&gt;
        function getSelectionText() {&lt;br /&gt;
            var selection = window.getSelection();&lt;br /&gt;
            if (!selection || selection.rangeCount === 0 || selection.isCollapsed) {&lt;br /&gt;
                return &#039;&#039;;&lt;br /&gt;
            }&lt;br /&gt;
            return selection.toString();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function compactText(text) {&lt;br /&gt;
            return text.replace(/\s+/g, &#039;&#039;);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function showCount(text) {&lt;br /&gt;
            var compact = compactText(text);&lt;br /&gt;
            if (!compact) {&lt;br /&gt;
                return false;&lt;br /&gt;
            }&lt;br /&gt;
            var count = Array.from(compact).length;&lt;br /&gt;
            $counter.text(&#039;已选 &#039; + count + &#039; 字&#039;).show();&lt;br /&gt;
            return true;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function updateCounter() {&lt;br /&gt;
            rafId = null;&lt;br /&gt;
            var text = getSelectionText();&lt;br /&gt;
            if (text) {&lt;br /&gt;
                lastText = text;&lt;br /&gt;
                lastTime = Date.now();&lt;br /&gt;
                showCount(text);&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            if (lastText &amp;amp;&amp;amp; Date.now() - lastTime &amp;lt; 1200) {&lt;br /&gt;
                showCount(lastText);&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            $counter.hide();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function scheduleUpdate() {&lt;br /&gt;
            if (rafId) {&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            rafId = window.requestAnimationFrame(updateCounter);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function scheduleUpdateDelayed() {&lt;br /&gt;
            window.setTimeout(scheduleUpdate, 0);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function startPolling() {&lt;br /&gt;
            if (pollTimer) {&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            pollTimer = window.setInterval(updateCounter, 500);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function stopPolling() {&lt;br /&gt;
            if (!pollTimer) {&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            window.clearInterval(pollTimer);&lt;br /&gt;
            pollTimer = null;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        document.addEventListener(&#039;selectionchange&#039;, function () {&lt;br /&gt;
            var text = getSelectionText();&lt;br /&gt;
            if (text) {&lt;br /&gt;
                lastText = text;&lt;br /&gt;
                lastTime = Date.now();&lt;br /&gt;
            }&lt;br /&gt;
            scheduleUpdate();&lt;br /&gt;
        });&lt;br /&gt;
        document.addEventListener(&#039;mousedown&#039;, function () {&lt;br /&gt;
            $counter.hide();&lt;br /&gt;
        }, true);&lt;br /&gt;
        document.addEventListener(&#039;mouseup&#039;, scheduleUpdateDelayed, true);&lt;br /&gt;
        document.addEventListener(&#039;mouseup&#039;, scheduleUpdateDelayed);&lt;br /&gt;
        document.addEventListener(&#039;keyup&#039;, scheduleUpdate);&lt;br /&gt;
        document.addEventListener(&#039;touchend&#039;, scheduleUpdateDelayed, { passive: true, capture: true });&lt;br /&gt;
        document.addEventListener(&#039;pointerup&#039;, scheduleUpdateDelayed, true);&lt;br /&gt;
        window.addEventListener(&#039;focus&#039;, startPolling);&lt;br /&gt;
        window.addEventListener(&#039;blur&#039;, stopPolling);&lt;br /&gt;
        document.addEventListener(&#039;visibilitychange&#039;, function () {&lt;br /&gt;
            if (document.hidden) {&lt;br /&gt;
                stopPolling();&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            startPolling();&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        startPolling();&lt;br /&gt;
    });&lt;br /&gt;
});&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://learn.devc.dev/index.php?title=MediaWiki:Gadget-SelectionCounter.js&amp;diff=1638</id>
		<title>MediaWiki:Gadget-SelectionCounter.js</title>
		<link rel="alternate" type="text/html" href="https://learn.devc.dev/index.php?title=MediaWiki:Gadget-SelectionCounter.js&amp;diff=1638"/>
		<updated>2025-12-27T04:48:40Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script：​记录最近选区并延迟显示&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://learn.devc.dev/index.php?title=MediaWiki:Gadget-SelectionCounter.js&amp;diff=1637</id>
		<title>MediaWiki:Gadget-SelectionCounter.js</title>
		<link rel="alternate" type="text/html" href="https://learn.devc.dev/index.php?title=MediaWiki:Gadget-SelectionCounter.js&amp;diff=1637"/>
		<updated>2025-12-27T04:45:45Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script：​更健壮的选区获取与事件触发&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ================================================================&lt;br /&gt;
   MediaWiki Gadget: SelectionCounter&lt;br /&gt;
   功能：&lt;br /&gt;
   - 选中文本时显示字数统计&lt;br /&gt;
   - 与 RightToolbar 风格一致&lt;br /&gt;
   ================================================================= */&lt;br /&gt;
&lt;br /&gt;
mw.loader.using([&#039;mediawiki.util&#039;]).then(function () {&lt;br /&gt;
    if (window.SelectionCounterLoaded) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    window.SelectionCounterLoaded = true;&lt;br /&gt;
&lt;br /&gt;
    $(function () {&lt;br /&gt;
        var $counter = $(&#039;#mw-selection-counter&#039;);&lt;br /&gt;
&lt;br /&gt;
        if (!$counter.length) {&lt;br /&gt;
            $counter = $(&#039;&amp;lt;div id=&amp;quot;mw-selection-counter&amp;quot; class=&amp;quot;mw-selection-counter&amp;quot; role=&amp;quot;status&amp;quot; aria-live=&amp;quot;polite&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;)&lt;br /&gt;
                .hide()&lt;br /&gt;
                .appendTo(&#039;body&#039;);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var rafId = null;&lt;br /&gt;
        var pollTimer = null;&lt;br /&gt;
        var lastText = null;&lt;br /&gt;
&lt;br /&gt;
        function getSelectionText() {&lt;br /&gt;
            var selection = window.getSelection();&lt;br /&gt;
            if (!selection || selection.rangeCount === 0 || selection.isCollapsed) {&lt;br /&gt;
                return &#039;&#039;;&lt;br /&gt;
            }&lt;br /&gt;
            return selection.toString();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function updateCounter() {&lt;br /&gt;
            rafId = null;&lt;br /&gt;
&lt;br /&gt;
            var text = getSelectionText();&lt;br /&gt;
            if (!text) {&lt;br /&gt;
                if (lastText !== null) {&lt;br /&gt;
                    lastText = null;&lt;br /&gt;
                    $counter.hide();&lt;br /&gt;
                }&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            var compact = text.replace(/\s+/g, &#039;&#039;);&lt;br /&gt;
            if (!compact) {&lt;br /&gt;
                if (lastText !== null) {&lt;br /&gt;
                    lastText = null;&lt;br /&gt;
                    $counter.hide();&lt;br /&gt;
                }&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            if (text === lastText) {&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            lastText = text;&lt;br /&gt;
            var count = Array.from(compact).length;&lt;br /&gt;
            $counter.text(&#039;已选 &#039; + count + &#039; 字&#039;).show();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function scheduleUpdate() {&lt;br /&gt;
            if (rafId) {&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            rafId = window.requestAnimationFrame(updateCounter);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function scheduleUpdateDelayed() {&lt;br /&gt;
            window.setTimeout(scheduleUpdate, 0);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function startPolling() {&lt;br /&gt;
            if (pollTimer) {&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            pollTimer = window.setInterval(updateCounter, 500);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function stopPolling() {&lt;br /&gt;
            if (!pollTimer) {&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            window.clearInterval(pollTimer);&lt;br /&gt;
            pollTimer = null;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        document.addEventListener(&#039;selectionchange&#039;, scheduleUpdate);&lt;br /&gt;
        document.addEventListener(&#039;mouseup&#039;, scheduleUpdateDelayed, true);&lt;br /&gt;
        document.addEventListener(&#039;mouseup&#039;, scheduleUpdateDelayed);&lt;br /&gt;
        document.addEventListener(&#039;keyup&#039;, scheduleUpdate);&lt;br /&gt;
        document.addEventListener(&#039;touchend&#039;, scheduleUpdateDelayed, { passive: true, capture: true });&lt;br /&gt;
        document.addEventListener(&#039;pointerup&#039;, scheduleUpdateDelayed, true);&lt;br /&gt;
        window.addEventListener(&#039;focus&#039;, startPolling);&lt;br /&gt;
        window.addEventListener(&#039;blur&#039;, stopPolling);&lt;br /&gt;
        document.addEventListener(&#039;visibilitychange&#039;, function () {&lt;br /&gt;
            if (document.hidden) {&lt;br /&gt;
                stopPolling();&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            startPolling();&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        startPolling();&lt;br /&gt;
    });&lt;br /&gt;
});&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://learn.devc.dev/index.php?title=MediaWiki:Gadget-SelectionCounter.js&amp;diff=1636</id>
		<title>MediaWiki:Gadget-SelectionCounter.js</title>
		<link rel="alternate" type="text/html" href="https://learn.devc.dev/index.php?title=MediaWiki:Gadget-SelectionCounter.js&amp;diff=1636"/>
		<updated>2025-12-27T04:42:14Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script：​增加轮询兜底以兼容未触发 selectionchange 的情况&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ================================================================&lt;br /&gt;
   MediaWiki Gadget: SelectionCounter&lt;br /&gt;
   功能：&lt;br /&gt;
   - 选中文本时显示字数统计&lt;br /&gt;
   - 与 RightToolbar 风格一致&lt;br /&gt;
   ================================================================= */&lt;br /&gt;
&lt;br /&gt;
mw.loader.using([&#039;mediawiki.util&#039;]).then(function () {&lt;br /&gt;
    if (window.SelectionCounterLoaded) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    window.SelectionCounterLoaded = true;&lt;br /&gt;
&lt;br /&gt;
    $(function () {&lt;br /&gt;
        var $counter = $(&#039;#mw-selection-counter&#039;);&lt;br /&gt;
&lt;br /&gt;
        if (!$counter.length) {&lt;br /&gt;
            $counter = $(&#039;&amp;lt;div id=&amp;quot;mw-selection-counter&amp;quot; class=&amp;quot;mw-selection-counter&amp;quot; role=&amp;quot;status&amp;quot; aria-live=&amp;quot;polite&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;)&lt;br /&gt;
                .hide()&lt;br /&gt;
                .appendTo(&#039;body&#039;);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var rafId = null;&lt;br /&gt;
        var pollTimer = null;&lt;br /&gt;
        var lastText = null;&lt;br /&gt;
&lt;br /&gt;
        function getSelectionText() {&lt;br /&gt;
            var selection = window.getSelection();&lt;br /&gt;
            if (!selection || selection.isCollapsed) {&lt;br /&gt;
                return &#039;&#039;;&lt;br /&gt;
            }&lt;br /&gt;
            return String(selection).trim();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function updateCounter() {&lt;br /&gt;
            rafId = null;&lt;br /&gt;
            var active = document.activeElement;&lt;br /&gt;
            if (active &amp;amp;&amp;amp; (active.tagName === &#039;INPUT&#039; || active.tagName === &#039;TEXTAREA&#039; || active.isContentEditable)) {&lt;br /&gt;
                if (lastText !== null) {&lt;br /&gt;
                    lastText = null;&lt;br /&gt;
                    $counter.hide();&lt;br /&gt;
                }&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            var text = getSelectionText();&lt;br /&gt;
            if (!text) {&lt;br /&gt;
                if (lastText !== null) {&lt;br /&gt;
                    lastText = null;&lt;br /&gt;
                    $counter.hide();&lt;br /&gt;
                }&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            if (text === lastText) {&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            lastText = text;&lt;br /&gt;
            var count = Array.from(text).length;&lt;br /&gt;
            $counter.text(&#039;已选 &#039; + count + &#039; 字&#039;).show();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function scheduleUpdate() {&lt;br /&gt;
            if (rafId) {&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            rafId = window.requestAnimationFrame(updateCounter);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function startPolling() {&lt;br /&gt;
            if (pollTimer) {&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            pollTimer = window.setInterval(updateCounter, 500);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function stopPolling() {&lt;br /&gt;
            if (!pollTimer) {&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            window.clearInterval(pollTimer);&lt;br /&gt;
            pollTimer = null;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        document.addEventListener(&#039;selectionchange&#039;, scheduleUpdate);&lt;br /&gt;
        document.addEventListener(&#039;mouseup&#039;, scheduleUpdate);&lt;br /&gt;
        document.addEventListener(&#039;keyup&#039;, scheduleUpdate);&lt;br /&gt;
        document.addEventListener(&#039;touchend&#039;, scheduleUpdate, { passive: true });&lt;br /&gt;
        window.addEventListener(&#039;focus&#039;, startPolling);&lt;br /&gt;
        window.addEventListener(&#039;blur&#039;, stopPolling);&lt;br /&gt;
        document.addEventListener(&#039;visibilitychange&#039;, function () {&lt;br /&gt;
            if (document.hidden) {&lt;br /&gt;
                stopPolling();&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            startPolling();&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        startPolling();&lt;br /&gt;
    });&lt;br /&gt;
});&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://learn.devc.dev/index.php?title=MediaWiki:Gadget-SelectionCounter.js&amp;diff=1635</id>
		<title>MediaWiki:Gadget-SelectionCounter.js</title>
		<link rel="alternate" type="text/html" href="https://learn.devc.dev/index.php?title=MediaWiki:Gadget-SelectionCounter.js&amp;diff=1635"/>
		<updated>2025-12-27T04:37:12Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script：​确保 DOM 就绪后初始化&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ================================================================&lt;br /&gt;
   MediaWiki Gadget: SelectionCounter&lt;br /&gt;
   功能：&lt;br /&gt;
   - 选中文本时显示字数统计&lt;br /&gt;
   - 与 RightToolbar 风格一致&lt;br /&gt;
   ================================================================= */&lt;br /&gt;
&lt;br /&gt;
mw.loader.using([&#039;mediawiki.util&#039;]).then(function () {&lt;br /&gt;
    if (window.SelectionCounterLoaded) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    window.SelectionCounterLoaded = true;&lt;br /&gt;
&lt;br /&gt;
    $(function () {&lt;br /&gt;
        var $counter = $(&#039;#mw-selection-counter&#039;);&lt;br /&gt;
&lt;br /&gt;
        if (!$counter.length) {&lt;br /&gt;
            $counter = $(&#039;&amp;lt;div id=&amp;quot;mw-selection-counter&amp;quot; class=&amp;quot;mw-selection-counter&amp;quot; role=&amp;quot;status&amp;quot; aria-live=&amp;quot;polite&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;)&lt;br /&gt;
                .hide()&lt;br /&gt;
                .appendTo(&#039;body&#039;);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var rafId = null;&lt;br /&gt;
&lt;br /&gt;
        function getSelectionText() {&lt;br /&gt;
            var selection = window.getSelection();&lt;br /&gt;
            if (!selection || selection.isCollapsed) {&lt;br /&gt;
                return &#039;&#039;;&lt;br /&gt;
            }&lt;br /&gt;
            return String(selection).trim();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function updateCounter() {&lt;br /&gt;
            rafId = null;&lt;br /&gt;
            var active = document.activeElement;&lt;br /&gt;
            if (active &amp;amp;&amp;amp; (active.tagName === &#039;INPUT&#039; || active.tagName === &#039;TEXTAREA&#039; || active.isContentEditable)) {&lt;br /&gt;
                $counter.hide();&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            var text = getSelectionText();&lt;br /&gt;
            if (!text) {&lt;br /&gt;
                $counter.hide();&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            var count = Array.from(text).length;&lt;br /&gt;
            $counter.text(&#039;已选 &#039; + count + &#039; 字&#039;).show();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function scheduleUpdate() {&lt;br /&gt;
            if (rafId) {&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            rafId = window.requestAnimationFrame(updateCounter);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        document.addEventListener(&#039;selectionchange&#039;, scheduleUpdate);&lt;br /&gt;
        document.addEventListener(&#039;mouseup&#039;, scheduleUpdate);&lt;br /&gt;
        document.addEventListener(&#039;keyup&#039;, scheduleUpdate);&lt;br /&gt;
        document.addEventListener(&#039;touchend&#039;, scheduleUpdate, { passive: true });&lt;br /&gt;
    });&lt;br /&gt;
});&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://learn.devc.dev/index.php?title=MediaWiki:Gadget-SelectionCounter.js&amp;diff=1634</id>
		<title>MediaWiki:Gadget-SelectionCounter.js</title>
		<link rel="alternate" type="text/html" href="https://learn.devc.dev/index.php?title=MediaWiki:Gadget-SelectionCounter.js&amp;diff=1634"/>
		<updated>2025-12-27T04:35:08Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script：​增加触发事件并增强选区检测&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ================================================================&lt;br /&gt;
   MediaWiki Gadget: SelectionCounter&lt;br /&gt;
   功能：&lt;br /&gt;
   - 选中文本时显示字数统计&lt;br /&gt;
   - 与 RightToolbar 风格一致&lt;br /&gt;
   ================================================================= */&lt;br /&gt;
&lt;br /&gt;
mw.loader.using([&#039;mediawiki.util&#039;]).then(function () {&lt;br /&gt;
    var $counter = $(&#039;#mw-selection-counter&#039;);&lt;br /&gt;
&lt;br /&gt;
    if (!$counter.length) {&lt;br /&gt;
        $counter = $(&#039;&amp;lt;div id=&amp;quot;mw-selection-counter&amp;quot; class=&amp;quot;mw-selection-counter&amp;quot; role=&amp;quot;status&amp;quot; aria-live=&amp;quot;polite&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;)&lt;br /&gt;
            .hide()&lt;br /&gt;
            .appendTo(&#039;body&#039;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var rafId = null;&lt;br /&gt;
&lt;br /&gt;
    function getSelectionText() {&lt;br /&gt;
        var selection = window.getSelection();&lt;br /&gt;
        if (!selection || selection.isCollapsed) {&lt;br /&gt;
            return &#039;&#039;;&lt;br /&gt;
        }&lt;br /&gt;
        return String(selection).trim();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function updateCounter() {&lt;br /&gt;
        rafId = null;&lt;br /&gt;
        var active = document.activeElement;&lt;br /&gt;
        if (active &amp;amp;&amp;amp; (active.tagName === &#039;INPUT&#039; || active.tagName === &#039;TEXTAREA&#039; || active.isContentEditable)) {&lt;br /&gt;
            $counter.hide();&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var text = getSelectionText();&lt;br /&gt;
        if (!text) {&lt;br /&gt;
            $counter.hide();&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var count = Array.from(text).length;&lt;br /&gt;
        $counter.text(&#039;已选 &#039; + count + &#039; 字&#039;).show();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function scheduleUpdate() {&lt;br /&gt;
        if (rafId) {&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
        rafId = window.requestAnimationFrame(updateCounter);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    document.addEventListener(&#039;selectionchange&#039;, scheduleUpdate);&lt;br /&gt;
    document.addEventListener(&#039;mouseup&#039;, scheduleUpdate);&lt;br /&gt;
    document.addEventListener(&#039;keyup&#039;, scheduleUpdate);&lt;br /&gt;
    document.addEventListener(&#039;touchend&#039;, scheduleUpdate, { passive: true });&lt;br /&gt;
});&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://learn.devc.dev/index.php?title=MediaWiki:Gadget-SelectionCounter.css&amp;diff=1633</id>
		<title>MediaWiki:Gadget-SelectionCounter.css</title>
		<link rel="alternate" type="text/html" href="https://learn.devc.dev/index.php?title=MediaWiki:Gadget-SelectionCounter.css&amp;diff=1633"/>
		<updated>2025-12-27T04:30:59Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script：​新增样式&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.mw-selection-counter {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  bottom: 24px;&lt;br /&gt;
  right: 24px;&lt;br /&gt;
  padding: 6px 10px;&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  background: var(--color-surface-0, rgba(255, 255, 255, 0.85));&lt;br /&gt;
  border: 1px solid var(--border-color-base, #aaa);&lt;br /&gt;
  color: var(--color-base, #333);&lt;br /&gt;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);&lt;br /&gt;
  backdrop-filter: blur(4px);&lt;br /&gt;
  z-index: 9999;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.skin-theme-clientpref-night .mw-selection-counter {&lt;br /&gt;
  background: rgba(30, 30, 30, 0.85);&lt;br /&gt;
  border-color: #555;&lt;br /&gt;
  color: #eee;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (max-width: 768px) {&lt;br /&gt;
  .mw-selection-counter {&lt;br /&gt;
    right: 16px;&lt;br /&gt;
    bottom: 16px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://learn.devc.dev/index.php?title=MediaWiki:Gadget-SelectionCounter.js&amp;diff=1632</id>
		<title>MediaWiki:Gadget-SelectionCounter.js</title>
		<link rel="alternate" type="text/html" href="https://learn.devc.dev/index.php?title=MediaWiki:Gadget-SelectionCounter.js&amp;diff=1632"/>
		<updated>2025-12-27T04:30:56Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script：​补齐脚本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ================================================================&lt;br /&gt;
   MediaWiki Gadget: SelectionCounter&lt;br /&gt;
   功能：&lt;br /&gt;
   - 选中文本时显示字数统计&lt;br /&gt;
   - 与 RightToolbar 风格一致&lt;br /&gt;
   ================================================================= */&lt;br /&gt;
&lt;br /&gt;
mw.loader.using([&#039;mediawiki.util&#039;]).then(function () {&lt;br /&gt;
    var $counter = $(&#039;#mw-selection-counter&#039;);&lt;br /&gt;
&lt;br /&gt;
    if (!$counter.length) {&lt;br /&gt;
        $counter = $(&#039;&amp;lt;div id=&amp;quot;mw-selection-counter&amp;quot; class=&amp;quot;mw-selection-counter&amp;quot; role=&amp;quot;status&amp;quot; aria-live=&amp;quot;polite&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;)&lt;br /&gt;
            .hide()&lt;br /&gt;
            .appendTo(&#039;body&#039;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var rafId = null;&lt;br /&gt;
&lt;br /&gt;
    function updateCounter() {&lt;br /&gt;
        rafId = null;&lt;br /&gt;
        var active = document.activeElement;&lt;br /&gt;
        if (active &amp;amp;&amp;amp; (active.tagName === &#039;INPUT&#039; || active.tagName === &#039;TEXTAREA&#039; || active.isContentEditable)) {&lt;br /&gt;
            $counter.hide();&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var text = String(window.getSelection() || &#039;&#039;).trim();&lt;br /&gt;
        if (!text) {&lt;br /&gt;
            $counter.hide();&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var count = Array.from(text).length;&lt;br /&gt;
        $counter.text(&#039;已选 &#039; + count + &#039; 字&#039;).show();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    document.addEventListener(&#039;selectionchange&#039;, function () {&lt;br /&gt;
        if (rafId) {&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
        rafId = window.requestAnimationFrame(updateCounter);&lt;br /&gt;
    });&lt;br /&gt;
});&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://learn.devc.dev/index.php?title=MediaWiki:Gadget-RightToolbar.css&amp;diff=1631</id>
		<title>MediaWiki:Gadget-RightToolbar.css</title>
		<link rel="alternate" type="text/html" href="https://learn.devc.dev/index.php?title=MediaWiki:Gadget-RightToolbar.css&amp;diff=1631"/>
		<updated>2025-12-27T04:30:53Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script：​新增样式&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.mw-right-toolbar {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  bottom: 96px;&lt;br /&gt;
  right: 24px;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  align-items: flex-end;&lt;br /&gt;
  gap: 6px;&lt;br /&gt;
  z-index: 9999;&lt;br /&gt;
  opacity: 0;&lt;br /&gt;
  transform: translateY(12px);&lt;br /&gt;
  transition: opacity 0.4s ease, transform 0.4s ease;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-right-toolbar.is-visible {&lt;br /&gt;
  opacity: 1;&lt;br /&gt;
  transform: translateY(0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-right-toolbar .mw-rt-button,&lt;br /&gt;
.mw-right-toolbar .mw-rt-clock {&lt;br /&gt;
  background: var(--color-surface-0, rgba(255, 255, 255, 0.85));&lt;br /&gt;
  border: 1px solid var(--border-color-base, #aaa);&lt;br /&gt;
  color: var(--color-base, #333);&lt;br /&gt;
  border-radius: 4px;&lt;br /&gt;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  line-height: 1.4;&lt;br /&gt;
  padding: 6px 12px;&lt;br /&gt;
  backdrop-filter: blur(4px);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-right-toolbar .mw-rt-button {&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  opacity: 0.8;&lt;br /&gt;
  transition: background 0.2s ease, opacity 0.2s ease, transform 0.2s ease;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-right-toolbar .mw-rt-button:hover {&lt;br /&gt;
  opacity: 1;&lt;br /&gt;
  background: var(--background-color-progressive-subtle, #ddd);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.mw-right-toolbar .mw-rt-button:active {&lt;br /&gt;
  transform: translateY(1px);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.skin-theme-clientpref-night .mw-right-toolbar .mw-rt-button,&lt;br /&gt;
.skin-theme-clientpref-night .mw-right-toolbar .mw-rt-clock {&lt;br /&gt;
  background: rgba(30, 30, 30, 0.85);&lt;br /&gt;
  border-color: #555;&lt;br /&gt;
  color: #eee;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (max-width: 768px) {&lt;br /&gt;
  .mw-right-toolbar {&lt;br /&gt;
    bottom: 72px;&lt;br /&gt;
    right: 16px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://learn.devc.dev/index.php?title=MediaWiki:Gadget-RightToolbar.js&amp;diff=1630</id>
		<title>MediaWiki:Gadget-RightToolbar.js</title>
		<link rel="alternate" type="text/html" href="https://learn.devc.dev/index.php?title=MediaWiki:Gadget-RightToolbar.js&amp;diff=1630"/>
		<updated>2025-12-27T04:30:50Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script：​拆分样式并优化性能&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ================================================================&lt;br /&gt;
   MediaWiki Gadget: Localized Clock Bar&lt;br /&gt;
   功能：&lt;br /&gt;
   - 显示浏览器本地时间和 UTC 时间&lt;br /&gt;
   - 使用 MediaWiki 用户语言格式&lt;br /&gt;
   - 深色模式适配 + 滑入动画&lt;br /&gt;
   ================================================================= */&lt;br /&gt;
&lt;br /&gt;
mw.loader.using([&#039;mediawiki.util&#039;]).then(function () {&lt;br /&gt;
    function initClockBar() {&lt;br /&gt;
        var isMobile = window.innerWidth &amp;lt;= 768;&lt;br /&gt;
        var $container = $(&#039;#mw-right-toolbar&#039;);&lt;br /&gt;
&lt;br /&gt;
        if (!$container.length) {&lt;br /&gt;
            $container = $(&#039;&amp;lt;div id=&amp;quot;mw-right-toolbar&amp;quot; class=&amp;quot;mw-right-toolbar&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;).appendTo(&#039;body&#039;);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        function createButton(id, text, tooltip, clickHandler) {&lt;br /&gt;
            return $(&#039;&amp;lt;button&amp;gt;&amp;lt;/button&amp;gt;&#039;, {&lt;br /&gt;
                id: id,&lt;br /&gt;
                class: &#039;mw-rt-button&#039;,&lt;br /&gt;
                title: tooltip,&lt;br /&gt;
                text: text,&lt;br /&gt;
                type: &#039;button&#039;&lt;br /&gt;
            }).on(&#039;click&#039;, clickHandler);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var $topButton = $(&#039;#mw-scroll-top&#039;);&lt;br /&gt;
        if (!$topButton.length) {&lt;br /&gt;
            $topButton = createButton(&#039;mw-scroll-top&#039;, &#039;▲&#039;, &#039;回到顶部&#039;, function () {&lt;br /&gt;
                $(&#039;html, body&#039;).animate({ scrollTop: 0 }, { duration: 500, easing: &#039;swing&#039; });&lt;br /&gt;
            });&lt;br /&gt;
            $container.append($topButton);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var $bottomButton = $(&#039;#mw-scroll-bottom&#039;);&lt;br /&gt;
        if (!$bottomButton.length) {&lt;br /&gt;
            $bottomButton = createButton(&#039;mw-scroll-bottom&#039;, &#039;▼&#039;, &#039;回到底部&#039;, function () {&lt;br /&gt;
                $(&#039;html, body&#039;).animate({ scrollTop: $(document).height() }, { duration: 500, easing: &#039;swing&#039; });&lt;br /&gt;
            });&lt;br /&gt;
            $container.append($bottomButton);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var $clockDiv = $(&#039;#mw-right-toolbar-clock&#039;);&lt;br /&gt;
        if (!isMobile &amp;amp;&amp;amp; !$clockDiv.length) {&lt;br /&gt;
            $clockDiv = $(&#039;&amp;lt;div id=&amp;quot;mw-right-toolbar-clock&amp;quot; class=&amp;quot;mw-rt-clock&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;).append(&lt;br /&gt;
                $(&#039;&amp;lt;div id=&amp;quot;mw-local-date&amp;quot;&amp;gt;加载中...&amp;lt;/div&amp;gt;&#039;),&lt;br /&gt;
                $(&#039;&amp;lt;div id=&amp;quot;mw-local-time&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;),&lt;br /&gt;
                $(&#039;&amp;lt;div id=&amp;quot;mw-utc-time&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;)&lt;br /&gt;
            );&lt;br /&gt;
            $container.append($clockDiv);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        $topButton.hide();&lt;br /&gt;
        var ticking = false;&lt;br /&gt;
        $(window).on(&#039;scroll&#039;, function () {&lt;br /&gt;
            if (ticking) {&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            ticking = true;&lt;br /&gt;
            window.requestAnimationFrame(function () {&lt;br /&gt;
                var scrollTop = $(window).scrollTop();&lt;br /&gt;
                if (scrollTop &amp;gt; 200) {&lt;br /&gt;
                    $topButton.fadeIn();&lt;br /&gt;
                } else {&lt;br /&gt;
                    $topButton.fadeOut();&lt;br /&gt;
                }&lt;br /&gt;
                ticking = false;&lt;br /&gt;
            });&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        window.requestAnimationFrame(function () {&lt;br /&gt;
            $container.addClass(&#039;is-visible&#039;);&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        function renderClock() {&lt;br /&gt;
            var now = new Date();&lt;br /&gt;
            var userLang = mw.config.get(&#039;wgUserLanguage&#039;) || &#039;en&#039;;&lt;br /&gt;
&lt;br /&gt;
            var localFormatter = new Intl.DateTimeFormat(userLang, {&lt;br /&gt;
                year: &#039;numeric&#039;,&lt;br /&gt;
                month: &#039;long&#039;,&lt;br /&gt;
                day: &#039;numeric&#039;,&lt;br /&gt;
                hour: &#039;2-digit&#039;,&lt;br /&gt;
                minute: &#039;2-digit&#039;,&lt;br /&gt;
                second: &#039;2-digit&#039;,&lt;br /&gt;
                hour12: false,&lt;br /&gt;
                timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone&lt;br /&gt;
            });&lt;br /&gt;
&lt;br /&gt;
            var localParts = localFormatter.formatToParts(now);&lt;br /&gt;
            var localDateStr = localParts.filter(function (p) {&lt;br /&gt;
                return p.type === &#039;year&#039; || p.type === &#039;month&#039; || p.type === &#039;day&#039;;&lt;br /&gt;
            }).map(function (p) {&lt;br /&gt;
                return p.value;&lt;br /&gt;
            }).join(&#039; &#039;);&lt;br /&gt;
&lt;br /&gt;
            var localTimeStr = localParts.filter(function (p) {&lt;br /&gt;
                return p.type === &#039;hour&#039; || p.type === &#039;minute&#039; || p.type === &#039;second&#039;;&lt;br /&gt;
            }).map(function (p) {&lt;br /&gt;
                return p.value;&lt;br /&gt;
            }).join(&#039;:&#039;);&lt;br /&gt;
&lt;br /&gt;
            $(&#039;#mw-local-date&#039;).text(localDateStr);&lt;br /&gt;
            $(&#039;#mw-local-time&#039;).text(localTimeStr);&lt;br /&gt;
&lt;br /&gt;
            var utcFormatter = new Intl.DateTimeFormat(userLang, {&lt;br /&gt;
                year: &#039;numeric&#039;,&lt;br /&gt;
                month: &#039;long&#039;,&lt;br /&gt;
                day: &#039;numeric&#039;,&lt;br /&gt;
                hour: &#039;2-digit&#039;,&lt;br /&gt;
                minute: &#039;2-digit&#039;,&lt;br /&gt;
                second: &#039;2-digit&#039;,&lt;br /&gt;
                hour12: false,&lt;br /&gt;
                timeZone: &#039;UTC&#039;&lt;br /&gt;
            });&lt;br /&gt;
&lt;br /&gt;
            var utcParts = utcFormatter.formatToParts(now);&lt;br /&gt;
            var utcDateStr = utcParts.filter(function (p) {&lt;br /&gt;
                return p.type === &#039;year&#039; || p.type === &#039;month&#039; || p.type === &#039;day&#039;;&lt;br /&gt;
            }).map(function (p) {&lt;br /&gt;
                return p.value;&lt;br /&gt;
            }).join(&#039; &#039;);&lt;br /&gt;
&lt;br /&gt;
            var utcTimeStr = utcParts.filter(function (p) {&lt;br /&gt;
                return p.type === &#039;hour&#039; || p.type === &#039;minute&#039; || p.type === &#039;second&#039;;&lt;br /&gt;
            }).map(function (p) {&lt;br /&gt;
                return p.value;&lt;br /&gt;
            }).join(&#039;:&#039;);&lt;br /&gt;
&lt;br /&gt;
            $(&#039;#mw-utc-time&#039;).text(&#039;UTC: &#039; + utcDateStr + &#039; &#039; + utcTimeStr);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var clockTimer = window.setInterval(renderClock, 1000);&lt;br /&gt;
        renderClock();&lt;br /&gt;
&lt;br /&gt;
        mw.hook(&#039;user.languageChange&#039;).add(renderClock);&lt;br /&gt;
&lt;br /&gt;
        document.addEventListener(&#039;visibilitychange&#039;, function () {&lt;br /&gt;
            if (document.hidden) {&lt;br /&gt;
                window.clearInterval(clockTimer);&lt;br /&gt;
                clockTimer = null;&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            if (!clockTimer) {&lt;br /&gt;
                clockTimer = window.setInterval(renderClock, 1000);&lt;br /&gt;
                renderClock();&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    $(initClockBar);&lt;br /&gt;
});&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://learn.devc.dev/index.php?title=MediaWiki:Gadget-HotCat.js&amp;diff=1629</id>
		<title>MediaWiki:Gadget-HotCat.js</title>
		<link rel="alternate" type="text/html" href="https://learn.devc.dev/index.php?title=MediaWiki:Gadget-HotCat.js&amp;diff=1629"/>
		<updated>2025-12-27T04:30:47Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script：​固定上游版本并补全依赖&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/**&lt;br /&gt;
 * Gadget: HotCat（远程加载版）&lt;br /&gt;
 * 来源：Wikimedia Commons&lt;br /&gt;
 * 文档：https://commons.wikimedia.org/wiki/Help:Gadget-HotCat&lt;br /&gt;
 *&lt;br /&gt;
 * 功能：&lt;br /&gt;
 * - 在页面底部分类栏提供快速添加 / 删除 / 修改分类的按钮。&lt;br /&gt;
 * - 支持自动补全分类名称、快速保存、更改预览等功能。&lt;br /&gt;
 * - 自动根据语言加载本地化翻译。&lt;br /&gt;
 *&lt;br /&gt;
 * 注意：&lt;br /&gt;
 * - 依赖 MediaWiki API 权限（编辑页面）。&lt;br /&gt;
 * - 若本地无 HotCat 翻译，将自动从 Commons 读取。&lt;br /&gt;
 * - 若你想自定义翻译，请创建 MediaWiki:Gadget-HotCat-message-zh.json 等文件。&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
// 避免重复加载&lt;br /&gt;
if (!window.HotCatLoader) {&lt;br /&gt;
    window.HotCatLoader = true;&lt;br /&gt;
    window.hotcat_translations_from_commons = true; // 允许从 Commons 获取翻译&lt;br /&gt;
&lt;br /&gt;
    // 等待 MediaWiki 核心模块加载完成后再调用&lt;br /&gt;
    mw.loader.using([&#039;mediawiki.util&#039;, &#039;mediawiki.api&#039;]).then(function () {&lt;br /&gt;
        mw.loader.load(&#039;//commons.wikimedia.org/w/index.php?title=MediaWiki:Gadget-HotCat.js&amp;amp;oldid=1093305835&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039;);&lt;br /&gt;
    });&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://learn.devc.dev/index.php?title=MediaWiki:Gadgets-definition&amp;diff=1628</id>
		<title>MediaWiki:Gadgets-definition</title>
		<link rel="alternate" type="text/html" href="https://learn.devc.dev/index.php?title=MediaWiki:Gadgets-definition&amp;diff=1628"/>
		<updated>2025-12-27T04:30:44Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script：​完善依赖并拆分样式&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* HotCat[ResourceLoader|default|dependencies=mediawiki.util,mediawiki.api]|HotCat.js&lt;br /&gt;
* RightToolbar[ResourceLoader|default|dependencies=mediawiki.util|styles=RightToolbar.css]|RightToolbar.js&lt;br /&gt;
* SelectionCounter[ResourceLoader|default|dependencies=mediawiki.util|styles=SelectionCounter.css]|SelectionCounter.js&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://learn.devc.dev/index.php?title=%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%97%E6%B3%95%E7%9A%84%E5%85%B6%E5%AE%83%E5%86%85%E5%AE%B9&amp;diff=1627</id>
		<title>数据结构与算法的其它内容</title>
		<link rel="alternate" type="text/html" href="https://learn.devc.dev/index.php?title=%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%97%E6%B3%95%E7%9A%84%E5%85%B6%E5%AE%83%E5%86%85%E5%AE%B9&amp;diff=1627"/>
		<updated>2025-12-27T04:18:11Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script：​补充页面基础内容&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 概述 ==&lt;br /&gt;
本页用于补充数据结构与算法中的通用主题与进阶方法。&lt;br /&gt;
&lt;br /&gt;
== 常见主题 ==&lt;br /&gt;
* 复杂度分析：时间复杂度、空间复杂度、渐进符号。&lt;br /&gt;
* 递归与分治：问题拆分与合并的思想。&lt;br /&gt;
* 动态规划：重叠子问题与最优子结构。&lt;br /&gt;
* 贪心算法：局部最优策略。&lt;br /&gt;
* 回溯与搜索：状态空间遍历与剪枝。&lt;br /&gt;
&lt;br /&gt;
== 建议补充方向 ==&lt;br /&gt;
* 典型题型与练习链接。&lt;br /&gt;
* 不同算法范式的对比与适用场景。&lt;br /&gt;
* 与数据结构配合使用的实例。&lt;br /&gt;
&lt;br /&gt;
{{Template:数据结构与算法}}&lt;br /&gt;
[[Category:数据结构与算法]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://learn.devc.dev/index.php?title=%E6%9F%A5%E6%89%BE&amp;diff=1626</id>
		<title>查找</title>
		<link rel="alternate" type="text/html" href="https://learn.devc.dev/index.php?title=%E6%9F%A5%E6%89%BE&amp;diff=1626"/>
		<updated>2025-12-27T04:18:06Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script：​补充页面基础内容&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 概述 ==&lt;br /&gt;
查找是在数据集中寻找满足条件的元素，目标是降低比较次数和时间复杂度。&lt;br /&gt;
&lt;br /&gt;
== 常见查找方式 ==&lt;br /&gt;
* 顺序查找：适用于无序或规模较小的数据。&lt;br /&gt;
* 二分查找：要求数据有序，时间复杂度 &amp;lt;math&amp;gt;O(\log n)&amp;lt;/math&amp;gt;。&lt;br /&gt;
* 哈希查找：通过散列函数直接定位，平均时间复杂度接近 &amp;lt;math&amp;gt;O(1)&amp;lt;/math&amp;gt;。&lt;br /&gt;
* 树结构查找：如二叉搜索树、平衡树。&lt;br /&gt;
&lt;br /&gt;
== 评价指标 ==&lt;br /&gt;
* 平均查找长度（ASL）。&lt;br /&gt;
* 成功/失败查找的比较次数。&lt;br /&gt;
&lt;br /&gt;
== 相关概念 ==&lt;br /&gt;
* 关键字：用于比较的属性或字段。&lt;br /&gt;
* 装填因子：哈希表中元素数量与桶数量的比例。&lt;br /&gt;
&lt;br /&gt;
{{Template:数据结构与算法}}&lt;br /&gt;
[[Category:数据结构与算法]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://learn.devc.dev/index.php?title=%E6%8E%92%E5%BA%8F&amp;diff=1625</id>
		<title>排序</title>
		<link rel="alternate" type="text/html" href="https://learn.devc.dev/index.php?title=%E6%8E%92%E5%BA%8F&amp;diff=1625"/>
		<updated>2025-12-27T04:18:02Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script：​补充页面基础内容&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 概述 ==&lt;br /&gt;
排序是将一组数据按关键字升序或降序排列的过程，关注时间复杂度与稳定性。&lt;br /&gt;
&lt;br /&gt;
== 分类 ==&lt;br /&gt;
* 内部排序：数据能全部放入内存中处理。&lt;br /&gt;
* 外部排序：数据规模较大，需要借助外存。&lt;br /&gt;
* 比较类排序：通过关键字比较完成排序。&lt;br /&gt;
* 非比较类排序：利用数据特性完成排序（如计数、桶、基数）。&lt;br /&gt;
&lt;br /&gt;
== 常见排序算法 ==&lt;br /&gt;
* 插入排序、希尔排序。&lt;br /&gt;
* 选择排序、堆排序。&lt;br /&gt;
* 冒泡排序。&lt;br /&gt;
* 快速排序、归并排序。&lt;br /&gt;
* 计数排序、桶排序、基数排序。&lt;br /&gt;
&lt;br /&gt;
== 常见指标 ==&lt;br /&gt;
* 时间复杂度：最好、平均、最坏情况。&lt;br /&gt;
* 空间复杂度：是否需要额外空间。&lt;br /&gt;
* 稳定性：相同关键字的相对次序是否保持不变。&lt;br /&gt;
&lt;br /&gt;
{{Template:数据结构与算法}}&lt;br /&gt;
[[Category:数据结构与算法]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://learn.devc.dev/index.php?title=%E5%9B%BE&amp;diff=1624</id>
		<title>图</title>
		<link rel="alternate" type="text/html" href="https://learn.devc.dev/index.php?title=%E5%9B%BE&amp;diff=1624"/>
		<updated>2025-12-27T04:17:59Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script：​补充页面基础内容&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 概述 ==&lt;br /&gt;
图由顶点与边构成，用于描述多对多的关系。根据边的方向与权重可分为有向图/无向图、带权图/无权图。&lt;br /&gt;
&lt;br /&gt;
== 基本概念 ==&lt;br /&gt;
* 顶点（V）：图中的元素。&lt;br /&gt;
* 边（E）：顶点之间的连接关系。&lt;br /&gt;
* 度：与顶点相连的边的数量（有向图还区分入度/出度）。&lt;br /&gt;
* 路径：从一个顶点到另一个顶点的顶点序列。&lt;br /&gt;
&lt;br /&gt;
== 存储方式 ==&lt;br /&gt;
* 邻接矩阵：适合稠密图，查询边存在性快，空间占用高。&lt;br /&gt;
* 邻接表：适合稀疏图，空间占用低，遍历效率高。&lt;br /&gt;
&lt;br /&gt;
== 基本操作与遍历 ==&lt;br /&gt;
* 深度优先搜索（DFS）。&lt;br /&gt;
* 广度优先搜索（BFS）。&lt;br /&gt;
&lt;br /&gt;
== 常见问题 ==&lt;br /&gt;
* 最短路径（Dijkstra、Floyd）。&lt;br /&gt;
* 最小生成树（Prim、Kruskal）。&lt;br /&gt;
&lt;br /&gt;
{{Template:数据结构与算法}}&lt;br /&gt;
[[Category:数据结构与算法]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://learn.devc.dev/index.php?title=%E6%A0%91%E4%B8%8E%E4%BA%8C%E5%8F%89%E6%A0%91&amp;diff=1623</id>
		<title>树与二叉树</title>
		<link rel="alternate" type="text/html" href="https://learn.devc.dev/index.php?title=%E6%A0%91%E4%B8%8E%E4%BA%8C%E5%8F%89%E6%A0%91&amp;diff=1623"/>
		<updated>2025-12-27T04:17:53Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script：​补充页面基础内容&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 概述 ==&lt;br /&gt;
树是一种层次结构的数据模型，节点之间存在父子关系；二叉树是每个节点最多有两个子节点的树。&lt;br /&gt;
&lt;br /&gt;
== 基本术语 ==&lt;br /&gt;
* 结点：树中的基本元素。&lt;br /&gt;
* 度：结点拥有的子树数量。&lt;br /&gt;
* 叶子结点：度为 0 的结点。&lt;br /&gt;
* 深度/高度：从根到某结点的层数（或从结点到叶子的层数）。&lt;br /&gt;
&lt;br /&gt;
== 二叉树的性质 ==&lt;br /&gt;
* 第 &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; 层最多有 &amp;lt;math&amp;gt;2^{i-1}&amp;lt;/math&amp;gt; 个结点。&lt;br /&gt;
* 高度为 &amp;lt;math&amp;gt;h&amp;lt;/math&amp;gt; 的二叉树，结点总数最多为 &amp;lt;math&amp;gt;2^h-1&amp;lt;/math&amp;gt;。&lt;br /&gt;
* 对于完全二叉树，可用数组顺序存储并快速定位父子结点。&lt;br /&gt;
&lt;br /&gt;
== 遍历方式 ==&lt;br /&gt;
* 前序遍历：根 → 左 → 右。&lt;br /&gt;
* 中序遍历：左 → 根 → 右。&lt;br /&gt;
* 后序遍历：左 → 右 → 根。&lt;br /&gt;
* 层序遍历：按层从上到下，从左到右。&lt;br /&gt;
&lt;br /&gt;
== 典型应用 ==&lt;br /&gt;
* 表达式树与语法分析。&lt;br /&gt;
* 堆与优先队列。&lt;br /&gt;
* 二叉搜索树与平衡树。&lt;br /&gt;
&lt;br /&gt;
{{Template:数据结构与算法}}&lt;br /&gt;
[[Category:数据结构与算法]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
</feed>