译自MediaWiki的官网,URL: http://www.mediawiki.org/wiki/Extension:Gadgets
Gadget简介:
MediaWiki,为用户提供了一种方法,使用户方便使用其它用户基于Javascript或者CSS创建的小部件Gadget.
Gadget是由Javascript或者CSS代码片断组成的,被放置在MediaWiki名字空间里(对于MediaWiki的名字空间的概念请参看其它文章)。每一个Gadget都在MediaWiki:Gadgets-definition中占用一行,用来定义这个gadget。定义包括这个Gadget的名字,和描述以及组成这个Gadget的Javascript和CSS代码。
因为Gadget被放置在MediaWiki名字空间里,只有系统管理员可以编辑Gadget。这很容易理解:只有充分被信任的用户才可以编辑被其它更多用户使用的Javascript代码。Javascript代码是把双刃剑,如果被用来做坏事,会很容易被用来实现劫持账号或者监视用户的功能。
下载Gadget:
从https://gerrit.wikimedia.org/r/gitweb?p=mediawiki/extensions/Gadgets.git;a=tree 可以下载到Gadget,或者也可以用git工具clone一份gadget,如下:
git clone https://gerrit.wikimedia.org/r/p/mediawiki/extensions/Gadgets.git
如何安装:
把Gadget目录复制到你安装MediaWiki的扩展目录(Extensions Folder)。然后在localSetting.php文件中,接近文件末尾的地方加上一行:
require_once( "$IP/extensions/Gadgets/Gadgets.php" );
使用Gadget:
可以使用的Gadget定义在MediaWiki:Gadgets-definion。只要有一个有效的Gadget在MediaWiki:Gadgets-define被定义,就能在每个用户的Special:Preference的Gadgets节选择是否启用这个Gadget(小部件)。在Special:Gadgets也能浏览Gadgets的列表,并有链接指向各自的系统消息(System Message),以方便编辑。
定义Gadget的格式:
在MediaWiki:Gadgets-definition中的每个Gadget的定义都以一个或者多个"*"开始,必须符合下面的格式定义。
* Gadget的名字 [ 选项(可以忽略) ] | 页名字
(* gadget_name [options (can be omitted)] | page names)
第一个域,Gadget的名字指的是gadget的内部名字。这隐含了一个系统消息的引用(System Message)。此例中,如果你定义了内部名为 my_gadget_name 这样一个gadget,则在MediaWiki:Gadget-my_gadget_name有一个使用wiki语法的关于这个gadget的简短描述。
注意,gadget的内部命令规则:必须以字母起头,后面可以接26个字母的大小写或者数字,以及连字符“-”,下划线“_”,冒号“:”,点号“.”。
选项的格式:
[option1 | option2 | … optionN]
空格将被忽略。每一个选项可以包括一个选项名,或者选项名还能被赋值,这些值以逗号隔开。如: option = value1, value2, value3
举一些Gadget定义的例子:
* mygadget|mygadget.js|mygadget.css
or
* mygadget[ResourceLoader]|mygadget.js|mygadget.css
or
* mygadget[rights=foo,bar]|mygadget.js|mygadget.css
or
* mygadget[ ResourceLoader | rights=foo, bar ] | mygadget.js | mygadget.css
选项的说明:
选项名 |
参数 |
描述 |
ResourceLoader |
None |
注明Gadget与ResourceLoader兼容。 |
dependencies |
用逗号分隔开的ResourceLoader模块名 |
这里有默认依赖的模块列表.如果当前的gadget没有与ResourceLoader兼容的资源,这个选项将失效。 |
rights |
用逗号分隔开的权限名 |
权限名列表在这里 privileges. |
skins |
用逗号分隔开的皮肤名 |
皮肤名列表在这里 skins. |
default |
无 |
注明对每个用户,包括匿名用名默认启用的gadget。不过注册用户仍然可以在它们的使用偏好设定中禁用gadget. |
你可以为你的gadget指定额外的依赖,如:
* mygadget[ResourceLoader|dependencies=jquery.ui, jquery.effects.clip]|mygadget.js|mygadget.css
此例中,我们请求RescourceLoader与mygadget一起加载jquery.ui和jquery.effects.clip模块。注意只有在ResourceLoader中注册中的模块可以被设置成依赖项。
下面是设定gadget只对有某些权限的用户生效:
* ImprovedDeletion [rights=delete] | ImprovedDeletion.js
此例中,我们设定gadget只有对有权限删除页面的用户有效。注意权限指点是这里的 permissions, 而不是像 administrators 一样的用户组。下面再给出一些例子:
* modrollback[ResourceLoader|rights=rollback]|modrollback.js
* UTCLiveClock[ResourceLoader|rights=purge]|UTCLiveClock.js
* Ajax_sysop[ResourceLoader|rights=patrol,rollback,markbotedits,delete]|Ajax_sysop.js
ResourceLoader:
所有的gadget的css总是通过ResourceLoader被加载的。但是,一些老旧的javascript写法经常与ResourceLoader不兼容,所以每一个gadget必须被显式地注明兼容性才能被ResourceLoader加载。
否则,会使用旧式的写法 <script src="/w/index.php?title=MediaWiki:Gadget-gadget_name.js&action=raw"> 。
页面:
Gadget的定义行后面部分提定了组成gadget的Javascript或者css代码的文件,这些代码文件被放置在系统消息中(System Message)。所以的文件都必须以.js或者.css为扩展名。每个gadget都可以使用任意多个系统消息。一些共用的功能可以被多个Gadget使用。如下:
* frobinator|commonStuff.js|frob.js|frob.css|pretty.css
* l33t|commonStuff.js|tools.js|l33t.js
节(Sections):
定义在MediaWiki:Gadgets-definition中的gadget列表可以被分成多个节。每个节用两个或者多个"="号起头和结尾,“=”中间指定节的名字。如:
== interface-gadgets ==
这样就定义了一个节(Section),标题在 MediaWiki:Gadget-section-interface-gadgets 页面中定义。
copyright ykyi.net