前面主要谈到了对模板系统和解析器函数的改造。事实上在 MediaWiki 中,解析器函数是所谓“魔术字”的一部分。JavaScript 是种功能强大的编程语言,以下我们将会把魔术字的另两个功能“状态开关”和“系统变量”也都包装成 JS 的方法。

系统变量

部分系统变量在同一页面上的可使用次数是有限的,这类系统变量会被标记为【高开销】。

下表中PAGE和USER系列的方法中可以接受一个参数,用以指定某个特定页面或用户,而非当前页面或用户。

SITE 描述 PAGE 描述 USER 描述
SITE.name() 站点的名字 PAGE.name() 当前页面的标题 USER.name() 当前用户名
SITE.lang() 站点默认界面语言 PAGE.lang() 当前页面选择的语言 USER.lang() 当前用户选择的语言
SITE.url() 站点的域名 PAGE.url() 当前页面的网址 USER.url() 当前用户的用户页网址
SITE.edits() 站点编辑次数 PAGE.edits() 当前页面的编辑次数 USER.edits() 当前用户的编辑次数
SITE.files() 已上传的文件个数 PAGE.files() 当前页面引用的文件个数 USER.files() 当前用户上传的文件数量
SITE.users() 站点用户数量 PAGE.users() 参与编辑当前页面的用户数量 GROUP.users() 特定用户组中的用户数量
SITE.pages() 站点页面个数 CATEGORY.pages() 指定分类下的页面数量 USER.pages 当前用户编辑过的页面数量
SITE.articles 站点文章篇数 CATEGORY.articles() 指定分类下的文章篇数 USER.articles 当前用户编辑过的文章篇数
SITE.revisionTime() 站点最近更改的时间 PAGE.revisionTime() 页面最新版本的修订时间 USER.revisionTime() 当前用户最近编辑的时间
SITE.revisionUSER() 最近更改站点的编辑者 PAGE.revisionUSER() 页面最新版本的修订者

以下是一些不便分类的系统变量:

系统变量 描述
SITE.admins() 站点的管理员数量
SITE.activeUsers() 活跃用户的数量
USER.sex() 当前用户的性别

方法

方法 描述
PAGE.find() 判断指定页面是否存在,并返回布尔值
USER.find() 判断指定用户是否存在,并返回布尔值
FILE.find() 判断指定文件是否存在,并返回布尔值
PAGE.search() 通过关键词搜索页面,并以数组的形式返回结果
USER.search() 通过关键词搜索用户,并以数组的形式返回结果
FILE.search() 通过关键词搜索文件,并以数组的形式返回结果

模板权限控制

对于普通权限的模板,除了【高开销】的系统变量和方法外,模板中的所有循环都将被计数。当一个模板在一个页面中的循环总次数超过 255 次后,页面将强制中止循环并报错。

模板的权限共分这几方面:

  1. 编辑,包括允许哪些用户组对模板进行创建、编辑与删除;
  2. 敏感操作,包括模板中的循环、高开销的系统变量和方法、操作DOM和BOM的方法等;
  3. 引用,包括允许哪些用户组对模板进行引用,是否将引用该模板定义为敏感操作。

模板的权限共分三级:

  • 普通,所有用户均可创建,受到较严格的限制,比如:
    • 模板中的循环在页面中的循环次数有限;
    • 禁止修改页面主体部分外的 DOM 结构;
    • 禁止引入外源脚本和文件;
    • ……
  • 支柱,仅管理员或其他特定用户组成员可以创建与修改,受到必要的限制,比如:
    • 禁止修改页面<head>标签中的内容
    • 禁止引入外源脚本和文件;
    • ……
  • 核心,仅限行政员可以创建与修改,核心模板没有限制。

机器人用户

在经过行政员审查通过后,管理员或其他特定用户组成员可以创建一个作为机器人的子用户。

机器人的用户页将作为一个特殊的模板,可以调用系统中的一些特殊的方法(比如,编辑页面、封禁用户等),并在启动后在站点服务器中持续运行,以便于自动化编辑页面。