Skip to content
jysperm edited this page Jul 15, 2015 · 3 revisions

这个页面描述的是正在开发中的 v0.9 版本实现的特征。

插件用于向 RootPanel 拓展功能,插件系统是 RootPanel 的重要功能之一。

/plugin 下的每一个目录即为一个插件,插件需要在 config.coffee 中被开启才会被加载:

plugin:
  available_plugins: ['linux', 'bitcoin', 'shadowsocks']

目录结构

  • index.coffee: 入口点文件,会在 RootPanel 启动时被加载

  • locale: 本地化翻译数据

    其中每个文件表示一种语言支持,需以 zh_CN.json 的形式命名。

  • static: 静态资源

    该目录会被挂载到 /plugin/<name>/.

  • test: 单元测试

    直接位于该目录下的 .test.coffee 文件会参与单元测试。

  • view: 页面模板

    该目录下的 .jade 文件可以直接被 plugin.render 调用。

  • template: 文件模板

    该目录下的文件可以直接被 plugin.renderTemplate 调用。

入口点文件

插件的入口点文件 index.coffee 必须拓展 Plugin 并导出下列格式的插件信息:

linuxPlugin = module.exports = new Plugin
  name: 'ssh'
  dependencies: []

  register_hooks:
    'account.username_filter':
      filter: linux.isUsernameAvailable

  initialize: ->
  • name

    插件的唯一标识。

  • dependencies

    该插件依赖的其他插件,如果依赖条件不满足,会在启动时产生一个错误。

  • register_hooks

    描述要注册的钩子。

  • initialize

    初始化函数,会在启动时被执行。

  • started

    类似于 initialize, 但在完成所有启动步骤后执行。

Plugin

在运行时,每个插件都表现为 Plugin 的一个实例,Plugin 提供的功能:

  • config

    配置文件中 plugins.<plugin_name> 的部分。

  • registerHook(name, payload)

    注册钩子,等价于在 register_hooks 中定义钩子。

  • registerComponent(info)

    注册 元件

  • getTranslator(languages)

    获得翻译器,此翻译器可以直接使用 locale 文件夹下的数据,自动添加 plugins.<plugin_name> 前缀。

  • render(name, req, view_data, callback(html))

    渲染 view 目录下的 Jade 模板。

  • renderTemplate(name, view_data, callback(body))

    渲染 template 目录下的模板。

  • triggerUsages(account, trigger_name, volume, callback)

    记录用量计费信息。

钩子

插件通过注册钩子的方式拓展 RootPanel, 钩子的列表位于 /core/pluggable.coffee, 详细的说明见 钩子

事件

钩子用于插件与 RootPanel 交互,事件则用于 RootPanel 单向地通知插件某一事件的发生。

可以通过这样的方式监听事件:

app.on 'app.started', ->
  monitor.run()

目前支持的事件:

  • app.started

    在 RootPanel 完成所有启动步骤后发生。

Clone this wiki locally