一种对mediawiki中模板系统的改造方案(二)
前面主要谈到了对模板系统和解析器函数的改造。事实上在 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 次后,页面将强制中止循环并报错。
模板的权限共分这几方面:
- 编辑,包括允许哪些用户组对模板进行创建、编辑与删除;
- 敏感操作,包括模板中的循环、高开销的系统变量和方法、操作DOM和BOM的方法等;
- 引用,包括允许哪些用户组对模板进行引用,是否将引用该模板定义为敏感操作。
模板的权限共分三级:
- 普通,所有用户均可创建,受到较严格的限制,比如:
- 模板中的循环在页面中的循环次数有限;
- 禁止修改页面主体部分外的 DOM 结构;
- 禁止引入外源脚本和文件;
- ……
- 支柱,仅管理员或其他特定用户组成员可以创建与修改,受到必要的限制,比如:
- 禁止修改页面<head>标签中的内容
- 禁止引入外源脚本和文件;
- ……
- 核心,仅限行政员可以创建与修改,核心模板没有限制。
机器人用户
在经过行政员审查通过后,管理员或其他特定用户组成员可以创建一个作为机器人的子用户。
机器人的用户页将作为一个特殊的模板,可以调用系统中的一些特殊的方法(比如,编辑页面、封禁用户等),并在启动后在站点服务器中持续运行,以便于自动化编辑页面。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 之于言者!