什么是MediaWiki的Gadget(小部件)

 

译自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 blog.ykyi.net

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.