From 5cb1dc091c5dd717bed507f97f5a18a8c2d34be5 Mon Sep 17 00:00:00 2001 From: jysperm Date: Sat, 25 Oct 2014 08:14:15 +0800 Subject: [PATCH] move DOC to Wiki --- DOC/Coding-Style.md | 47 ------------- DOC/Plugins-Guide.md | 157 ------------------------------------------- DOC/READEME.md | 48 ------------- FAQ.md | 19 ------ README.md | 2 +- 5 files changed, 1 insertion(+), 272 deletions(-) delete mode 100644 DOC/Coding-Style.md delete mode 100644 DOC/Plugins-Guide.md delete mode 100644 DOC/READEME.md delete mode 100644 FAQ.md diff --git a/DOC/Coding-Style.md b/DOC/Coding-Style.md deleted file mode 100644 index 3103972..0000000 --- a/DOC/Coding-Style.md +++ /dev/null @@ -1,47 +0,0 @@ -## 文件 - -* .md 使用 4 空格缩进,文件名使用大驼峰用连字符分割 -* .coffee, *.js, *.json, *.html, *.less, *.jade 使用 2 空格缩进,文件名使用全小写用下划线分割 -* bin/*.coffee 文件名使用连字符分割;若 .coffee 的内容是一个类,则使用类名作为文件名 -* 总是在文件末尾添加换行符 - -## 依赖 - -* 加入依赖时注意检查必须允许发布闭源版本,即不能使用以 GPL 授权的依赖 - -## 命名 - -* 尽量不缩写术语 -* 总是使用 `callback` 命名回调函数 -* 总是用 `t_` 前缀表示这是一个待翻译的字符串 ID - -## 注释 - -* 复杂的函数前,以注释标出参数的结构,和回调函数的参数 -* 其他部分如非必须,不写注释,注释只使用英文 - -## JavaScript - -* 优先使用单引号,总是在行末添加分号 -* 总是使用 underscore 来进行类型判断 - -## Node.js - -* 只在初始化时使用 Sync 版本的 IO 函数 - -## Coffee Script - -* `,`, `:` 之前不加空格,之后总是添加空格;`->` 前后均加空格 -* 不可以出现空的参数列表 -* 不在行末添加分号,不在一行内使用分号分割两行代码 -* 类名使用大驼峰命名,如 `SampleClass` -* 优先使用单引号 -* 总是省略所有跨行的括号和花括号,尽可能省略掉函数调用的括号 -* 变量名使用全小写用下划线分割,函数名使用小驼峰 -* 若未处理回调函数的异常,添加 `console.error err if err` - -## HTML - -* CSS class 和 ID 命名使用全小写用连字符分割 -* 输入控件使用 `input-` 前缀,按钮和动作使用 `action-` 前缀 -* 尽量使用 class 而不是 ID diff --git a/DOC/Plugins-Guide.md b/DOC/Plugins-Guide.md deleted file mode 100644 index 6ef3de3..0000000 --- a/DOC/Plugins-Guide.md +++ /dev/null @@ -1,157 +0,0 @@ -## 插件编写指南 - -### 概览 -插件分为两种类型: - -* 服务 (service) - - 用于为 RootPanel 添加一项服务,服务往往需要开通才能使用,如一种新的数据库支持。 - -* 拓展 (extension) - - 用于提供功能性的扩展,拓展通常面向所有用户,如添加一种支付方式。 - -插件需要被安装到 RootPanel 下的 `plugin` 目录,每个目录即为一个插件。插件需要在 `config.coffee` 中被开启才会被加载: - - plugin: - available_extensions: ['rpvhost', 'bitcoin', 'wiki'] - available_services: ['ssh', 'linux'] - -### 插件结构 -插件的入口点是插件目录下的 `index.coffee`, 通常建议该文件用于注册 hook, 而将插件的逻辑置于单独的文件。 - -插件目录下有一些目录是具有特殊用途的: - -* locale: 本地化翻译数据 - - 其中每个文件表示一种语言支持,需以 `zh_CN.json` 的形式命名。 - -* static: 静态资源 - - 该目录会被挂载到 `/plugin//`. - -* test: 单元测试 - - 直接位于该目录下的 .coffee 文件会参与单元测试。 - -* view: 页面模板 - - 该目录下的 .jade 文件可以直接被 plugin.render 调用。 - -* template: 文件模板 - - 该目录下的文件可以直接被 plugin.renderFile 调用。 - -### 插件入口点 -插件的入口点文件 `index.coffee` 必须通过 `pluggable.createHelpers` 导出下列格式的插件信息: - - module.exports = pluggable.createHelpers exports = - name: 'ssh' - type: 'service' - dependencies: ['linux'] - -* name - - 插件的唯一标识。 - -* type - - `service` 或 `extension`. - -* dependencies - - 该插件依赖的其他插件,如果依赖条件不满足,会产生一个错误。 - -### 注册钩子 -插件通过 `pluggable.registerHook` 注册钩子,来与主程序交互。 - -所有钩子的列表可在 `/core/pluggable.coffee` 中找到,其中标注了每个钩子的选项和参数。 - -选项位于 hookHelper 后: - -* global_event - - 表示这个钩子会通知所有插件,即使这个用户未开通这个 service, 通常这类钩子与具体用户无关。 - -参数是注册钩子时需要提供的信息,以注释标注: - -* callback - - 在钩子执行结束后,插件需要调用 callback. - -* action - - 表示这个函数会被钩子异步触发执行。 - -* filter - - 表示这个函数会被钩子执行,其结果会影响后续流程,执行完成后需要调用回调函数。 - -* generator - - 表示这个函数用于生成一段 HTML. - -* path - - 表示这是一个会用于前端,表示路径的字符串。 - -除了与具体 Hook 相关的参数,还有一些适用于所有钩子的参数: - -* always_notice - - 作用同 global_event, 要求即使这个用户未开通这个 service 也被调用。 - -### 创建钩子 -插件也可以通过 `pluggable.createHookPoint` 来创建一个钩子的挂载点,来允许其他插件注册钩子。 - -在执行钩子时,可通过 `pluggable.selectHook` 来提取其他插件注册的钩子。 - -### Helpers -`pluggable.createHelpers` 在创建插件信息的时候会创建一些辅助函数: - -* registerHook - - `pluggable.registerHook` 的缩写形式。 - -* registerServiceHook - - 用 `pluggable.registerHook` 创建 service 类钩子的缩写形式。 - -* t - - 返回一个翻译器,用于从插件的 locale 目录提取翻译信息。 - -* render - - 渲染插件的 view 目录下的页面模板。 - -* renderFile - - 渲染插件的 template 目录下的模板。 - -### app -`app` 是一个全局变量,RootPanel 运行中的所有信息都挂载在这个全局变量上,插件可以从上面得到需要的资源: - -* libs - - 包括被引入的所有 Node Package. - -* logger - - 用于打印日志,代替 `console.log`. - -* config, package - - 配置文件和 `package.json` - -* express, redis, mailer, db - - `express`, `redis`, `nodemailer`, `mongoose` 的实例 - -* models, schemas - - Model 和 Schema, 注意在插件的入口点文件被载入时,Model 还没有被创建好,因此不要在入口点文件中直接读取 `models` 中的 Model. - -* templates, i18n, utils, cache, billing, pluggable, middleware, notification, authenticator - - RootPanel 的其他组成部分 diff --git a/DOC/READEME.md b/DOC/READEME.md deleted file mode 100644 index e9a6532..0000000 --- a/DOC/READEME.md +++ /dev/null @@ -1,48 +0,0 @@ -## JSON API 格式 - -请求和响应均为 `application/json` 格式,大部分 API 均为 POST 方式。 - -响应代码为 200 表示成功,400 表示失败。成功会返回特定的数据,失败的响应会包含错误代号: - - { - // 错误代号 - "error": "username_exist" - // 根据错误代号不同,可能还有更多字段 - } - -## 登录验证 - -登录验证可通过 Cookie 和 HTTP Header 两种方式验证,后者优先级更高。 -Cookie 字段名为 `token`, HTTP Header 名为 `X-TOKEN`. -验证失败时会发生 `auth_failed` 错误。 - -## 分页 -limit 和 skip 参数用于分页,limit 表示要返回的结果数量,skip 表示跳过前若干条结果,limit 默认为 30, skip 默认为 0. - -## 用户组 - -* root - 全站最高管理员 - -## 工单系统 - -### 工单的状态 - -* open - - 开放的。 - 管理员向用户创建工单后,或管理员回复工单后,默认是这个状态。 - -* pending - - 等待管理员回复。 - 用户回复工单后,变为这个状态。 - -* finish - - 被标记为完成的。 - 用户提出某项要求,管理员完成后,变为这个状态。 - -* closed - - 已关闭。 - 管理员或用户均可关闭一个工单。 diff --git a/FAQ.md b/FAQ.md deleted file mode 100644 index 96e7827..0000000 --- a/FAQ.md +++ /dev/null @@ -1,19 +0,0 @@ -## 定位 - -## 授权 - -* AGPL 和 GPL 有什么区别? - - AGPL 是 GPL 的衍生版,关键区别在于 AGPL 将 GPL 中「重新发布时开源」改为了「对外提供服务时开源」,这种定义更符合 RootPanel 作为一个虚拟主机面板的情况。 - -* AGPL 授予了用户哪些权利? - - AGPL 授予了用户出于任何目的运行、修改,分发软件自由。 - -* AGPL 对用户有哪些要求? - - AGPL 要求用户在修改源代码后,确保所有接触到由 RootPanel 提供的服务的人,都可以得到修改后的源代码。 - -* 如何定义「代码」? - - 代码是指代码库中除说明文件(`INSTALL.md`, `README.md` etc.), 配置文件(`.gitignore`, `package.json` etc.), 配置文件和示例(`sample/*.config.coffee` etc.), 文档(`DOC/*.md`, `WIKI/*.md` etc.) 之外的所有文件。 diff --git a/README.md b/README.md index 564cf36..37ada19 100644 --- a/README.md +++ b/README.md @@ -64,4 +64,4 @@ RootPanel 是一个高度插件化的,基于 Linux 的虚拟服务销售平台 * 开源授权:[AGPLv3](https://github.com/jysperm/RootPanel/blob/master/LICENSE) | [CC-SA](http://creativecommons.org/licenses/sa/1.0/) (文档) | Public Domain (配置文件和示例) * 商业授权(计划中) -* 有关授权的 [FAQ](https://github.com/jysperm/RootPanel/blob/develop/FAQ.md#%E6%8E%88%E6%9D%83) +* 有关授权的 [FAQ](https://github.com/jysperm/RootPanel/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98#%E6%8E%88%E6%9D%83)