From 971167cad3d9e6cf4a762b22a5f17c306437f985 Mon Sep 17 00:00:00 2001 From: Pang Date: Sat, 16 Dec 2023 23:39:03 +0800 Subject: [PATCH] =?UTF-8?q?doc:=20=E6=9B=B4=E6=96=B0=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/Api/ApproveController.php | 17 +- app/Http/Controllers/Api/DialogController.php | 50 +- .../Controllers/Api/ProjectController.php | 12 +- public/docs/api_data.js | 10888 ++++++++++++++++ public/docs/api_data.json | 10888 ++++++++++++++++ public/docs/api_project.js | 19 + public/docs/api_project.json | 19 + public/docs/assets/main.bundle.js | 96 +- public/docs/assets/main.css | 1 + public/docs/css/style.css | 529 + .../fonts/glyphicons-halflings-regular.eot | Bin 0 -> 20127 bytes .../fonts/glyphicons-halflings-regular.svg | 288 + .../fonts/glyphicons-halflings-regular.ttf | Bin 0 -> 45404 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 0 -> 23424 bytes .../fonts/glyphicons-halflings-regular.woff2 | Bin 0 -> 18028 bytes public/docs/img/favicon.ico | Bin 0 -> 894 bytes public/docs/index.html | 383 +- public/docs/locales/ca.js | 25 + public/docs/locales/cs.js | 25 + public/docs/locales/de.js | 25 + public/docs/locales/es.js | 25 + public/docs/locales/fr.js | 25 + public/docs/locales/it.js | 25 + public/docs/locales/locale.js | 51 + public/docs/locales/nl.js | 25 + public/docs/locales/pl.js | 25 + public/docs/locales/pt_br.js | 25 + public/docs/locales/ro.js | 25 + public/docs/locales/ru.js | 25 + public/docs/locales/tr.js | 25 + public/docs/locales/vi.js | 25 + public/docs/locales/zh.js | 25 + public/docs/locales/zh_cn.js | 27 + public/docs/main.js | 910 ++ public/docs/utils/handlebars_helper.js | 376 + public/docs/utils/send_sample_request.js | 272 + .../docs/utils/send_sample_request_utils.js | 97 + public/docs/vendor/bootstrap.min.css | 6 + public/docs/vendor/bootstrap.min.js | 6 + public/docs/vendor/diff_match_patch.min.js | 49 + public/docs/vendor/handlebars.min.js | 29 + public/docs/vendor/jquery.min.js | 2 + public/docs/vendor/list.min.js | 2 + public/docs/vendor/lodash.custom.min.js | 41 + public/docs/vendor/path-to-regexp/LICENSE | 21 + public/docs/vendor/path-to-regexp/index.js | 204 + public/docs/vendor/polyfill.js | 96 + public/docs/vendor/prism.css | 125 + public/docs/vendor/prism.js | 21 + public/docs/vendor/require.min.js | 37 + public/docs/vendor/semver.min.js | 1 + public/docs/vendor/webfontloader.js | 17 + 52 files changed, 25529 insertions(+), 401 deletions(-) create mode 100644 public/docs/api_data.js create mode 100644 public/docs/api_data.json create mode 100644 public/docs/api_project.js create mode 100644 public/docs/api_project.json create mode 100644 public/docs/css/style.css create mode 100644 public/docs/fonts/glyphicons-halflings-regular.eot create mode 100644 public/docs/fonts/glyphicons-halflings-regular.svg create mode 100644 public/docs/fonts/glyphicons-halflings-regular.ttf create mode 100644 public/docs/fonts/glyphicons-halflings-regular.woff create mode 100644 public/docs/fonts/glyphicons-halflings-regular.woff2 create mode 100644 public/docs/img/favicon.ico create mode 100644 public/docs/locales/ca.js create mode 100644 public/docs/locales/cs.js create mode 100644 public/docs/locales/de.js create mode 100644 public/docs/locales/es.js create mode 100644 public/docs/locales/fr.js create mode 100644 public/docs/locales/it.js create mode 100644 public/docs/locales/locale.js create mode 100644 public/docs/locales/nl.js create mode 100644 public/docs/locales/pl.js create mode 100644 public/docs/locales/pt_br.js create mode 100644 public/docs/locales/ro.js create mode 100644 public/docs/locales/ru.js create mode 100644 public/docs/locales/tr.js create mode 100644 public/docs/locales/vi.js create mode 100644 public/docs/locales/zh.js create mode 100644 public/docs/locales/zh_cn.js create mode 100644 public/docs/main.js create mode 100644 public/docs/utils/handlebars_helper.js create mode 100755 public/docs/utils/send_sample_request.js create mode 100755 public/docs/utils/send_sample_request_utils.js create mode 100644 public/docs/vendor/bootstrap.min.css create mode 100644 public/docs/vendor/bootstrap.min.js create mode 100644 public/docs/vendor/diff_match_patch.min.js create mode 100644 public/docs/vendor/handlebars.min.js create mode 100644 public/docs/vendor/jquery.min.js create mode 100644 public/docs/vendor/list.min.js create mode 100644 public/docs/vendor/lodash.custom.min.js create mode 100644 public/docs/vendor/path-to-regexp/LICENSE create mode 100644 public/docs/vendor/path-to-regexp/index.js create mode 100644 public/docs/vendor/polyfill.js create mode 100644 public/docs/vendor/prism.css create mode 100644 public/docs/vendor/prism.js create mode 100644 public/docs/vendor/require.min.js create mode 100644 public/docs/vendor/semver.min.js create mode 100644 public/docs/vendor/webfontloader.js diff --git a/app/Http/Controllers/Api/ApproveController.php b/app/Http/Controllers/Api/ApproveController.php index e58e76109..7ee46a915 100755 --- a/app/Http/Controllers/Api/ApproveController.php +++ b/app/Http/Controllers/Api/ApproveController.php @@ -19,6 +19,7 @@ use App\Models\UserDepartment; use App\Models\WebSocketDialogMsg; use App\Module\BillMultipleExport; use Hhxsv5\LaravelS\Swoole\Task\Task; + /** * @apiDefine approve * @@ -403,7 +404,7 @@ class ApproveController extends AbstractController { $user = User::auth(); $data['userid'] = (string)$user->userid; - $data['username'] = Request::input('username'); + $data['username'] = Request::input('username'); $data['procName'] = Request::input('proc_def_name'); //分类 $data['state'] = intval(Request::input('state')); //状态 $data['pageIndex'] = intval(Request::input('page')); @@ -1110,20 +1111,22 @@ class ApproveController extends AbstractController * @apiGroup system * @apiName user__status * - * @apiParam {String} userid + * @apiParam {String} userid * - * @apiSuccess {String} + * @apiSuccess {Number} ret 返回状态码(1正确、0错误) + * @apiSuccess {String} msg 返回信息(错误描述) + * @apiSuccess {Object} data 返回数据 */ public function user__status() { $data['userid'] = intval(Request::input('userid')); - $ret = Ihttp::ihttp_get($this->flow_url.'/api/v1/workflow/process/getUserApprovalStatus?'.http_build_query($data)); - $procdef = json_decode($ret['ret'] == 1 ? $ret['data'] : '{}', true); + $ret = Ihttp::ihttp_get($this->flow_url.'/api/v1/workflow/process/getUserApprovalStatus?'.http_build_query($data)); + $procdef = json_decode($ret['ret'] == 1 ? $ret['data'] : '{}', true); if (isset($procdef['status']) && $procdef['status'] == 200) { return Base::retSuccess('success', isset($procdef['data']["proc_def_name"]) ? $procdef['data']["proc_def_name"] : ''); - } + } return Base::retSuccess('success', ''); } - + } diff --git a/app/Http/Controllers/Api/DialogController.php b/app/Http/Controllers/Api/DialogController.php index ab51c0ffc..a6ba85451 100755 --- a/app/Http/Controllers/Api/DialogController.php +++ b/app/Http/Controllers/Api/DialogController.php @@ -868,7 +868,7 @@ class DialogController extends AbstractController } /** - * @api {post} api/dialog/msg/sendfiles 19. 群发文件上传 + * @api {post} api/dialog/msg/sendfiles 18. 群发文件上传 * * @apiDescription 需要token身份 * @apiVersion 1.0.0 @@ -923,7 +923,7 @@ class DialogController extends AbstractController } /** - * @api {get} api/dialog/msg/sendfileid 20. 通过文件ID发送文件 + * @api {get} api/dialog/msg/sendfileid 19. 通过文件ID发送文件 * * @apiDescription 需要token身份 * @apiVersion 1.0.0 @@ -993,7 +993,7 @@ class DialogController extends AbstractController } /** - * @api {post} api/dialog/msg/sendanon 21. 发送匿名消息 + * @api {post} api/dialog/msg/sendanon 20. 发送匿名消息 * * @apiDescription 需要token身份 * @apiVersion 1.0.0 @@ -1046,7 +1046,7 @@ class DialogController extends AbstractController } /** - * @api {get} api/dialog/msg/readlist 22. 获取消息阅读情况 + * @api {get} api/dialog/msg/readlist 21. 获取消息阅读情况 * * @apiDescription 需要token身份 * @apiVersion 1.0.0 @@ -1075,7 +1075,7 @@ class DialogController extends AbstractController } /** - * @api {get} api/dialog/msg/detail 23. 消息详情 + * @api {get} api/dialog/msg/detail 22. 消息详情 * * @apiDescription 需要token身份 * @apiVersion 1.0.0 @@ -1123,7 +1123,7 @@ class DialogController extends AbstractController } /** - * @api {get} api/dialog/msg/download 24. 文件下载 + * @api {get} api/dialog/msg/download 23. 文件下载 * * @apiDescription 需要token身份 * @apiVersion 1.0.0 @@ -1164,7 +1164,7 @@ class DialogController extends AbstractController } /** - * @api {get} api/dialog/msg/withdraw 25. 聊天消息撤回 + * @api {get} api/dialog/msg/withdraw 24. 聊天消息撤回 * * @apiDescription 消息撤回限制24小时内,需要token身份 * @apiVersion 1.0.0 @@ -1190,7 +1190,7 @@ class DialogController extends AbstractController } /** - * @api {get} api/dialog/msg/mark 26. 消息标记操作 + * @api {get} api/dialog/msg/mark 25. 消息标记操作 * * @apiDescription 需要token身份 * @apiVersion 1.0.0 @@ -1257,7 +1257,7 @@ class DialogController extends AbstractController } /** - * @api {get} api/dialog/msg/silence 27. 消息免打扰 + * @api {get} api/dialog/msg/silence 26. 消息免打扰 * * @apiDescription 需要token身份 * @apiVersion 1.0.0 @@ -1320,7 +1320,7 @@ class DialogController extends AbstractController } /** - * @api {get} api/dialog/msg/forward 28. 转发消息给 + * @api {get} api/dialog/msg/forward 27. 转发消息给 * * @apiDescription 需要token身份 * @apiVersion 1.0.0 @@ -1357,7 +1357,7 @@ class DialogController extends AbstractController } /** - * @api {get} api/dialog/msg/emoji 29. emoji回复 + * @api {get} api/dialog/msg/emoji 28. emoji回复 * * @apiDescription 需要token身份 * @apiVersion 1.0.0 @@ -1392,7 +1392,7 @@ class DialogController extends AbstractController } /** - * @api {get} api/dialog/msg/tag 30. 标注/取消标注 + * @api {get} api/dialog/msg/tag 29. 标注/取消标注 * * @apiDescription 需要token身份 * @apiVersion 1.0.0 @@ -1421,7 +1421,7 @@ class DialogController extends AbstractController } /** - * @api {get} api/dialog/msg/todo 31. 设待办/取消待办 + * @api {get} api/dialog/msg/todo 30. 设待办/取消待办 * * @apiDescription 需要token身份 * @apiVersion 1.0.0 @@ -1464,7 +1464,7 @@ class DialogController extends AbstractController } /** - * @api {get} api/dialog/msg/todolist 32. 获取消息待办情况 + * @api {get} api/dialog/msg/todolist 31. 获取消息待办情况 * * @apiDescription 需要token身份 * @apiVersion 1.0.0 @@ -1494,7 +1494,7 @@ class DialogController extends AbstractController } /** - * @api {get} api/dialog/msg/done 33. 完成待办 + * @api {get} api/dialog/msg/done 32. 完成待办 * * @apiDescription 需要token身份 * @apiVersion 1.0.0 @@ -1541,7 +1541,7 @@ class DialogController extends AbstractController } /** - * @api {get} api/dialog/msg/color 34. 设置颜色 + * @api {get} api/dialog/msg/color 33. 设置颜色 * * @apiDescription 需要token身份 * @apiVersion 1.0.0 @@ -1582,7 +1582,7 @@ class DialogController extends AbstractController } /** - * @api {get} api/dialog/group/add 35. 新增群组 + * @api {get} api/dialog/group/add 34. 新增群组 * * @apiDescription 需要token身份 * @apiVersion 1.0.0 @@ -1644,7 +1644,7 @@ class DialogController extends AbstractController } /** - * @api {get} api/dialog/group/edit 36. 修改群组 + * @api {get} api/dialog/group/edit 35. 修改群组 * * @apiDescription 需要token身份 * @apiVersion 1.0.0 @@ -1705,7 +1705,7 @@ class DialogController extends AbstractController } /** - * @api {get} api/dialog/group/adduser 37. 添加群成员 + * @api {get} api/dialog/group/adduser 36. 添加群成员 * * @apiDescription 需要token身份 * - 有群主时:只有群主可以邀请 @@ -1741,7 +1741,7 @@ class DialogController extends AbstractController } /** - * @api {get} api/dialog/group/deluser 38. 移出(退出)群成员 + * @api {get} api/dialog/group/deluser 37. 移出(退出)群成员 * * @apiDescription 需要token身份 * - 只有群主、邀请人可以踢人 @@ -1785,7 +1785,7 @@ class DialogController extends AbstractController } /** - * @api {get} api/dialog/group/transfer 39. 转让群组 + * @api {get} api/dialog/group/transfer 38. 转让群组 * * @apiDescription 需要token身份 * - 只有群主且是个人类型群可以解散 @@ -1829,7 +1829,7 @@ class DialogController extends AbstractController } /** - * @api {get} api/dialog/group/disband 40. 解散群组 + * @api {get} api/dialog/group/disband 39. 解散群组 * * @apiDescription 需要token身份 * - 只有群主且是个人类型群可以解散 @@ -1857,7 +1857,7 @@ class DialogController extends AbstractController } /** - * @api {get} api/dialog/group/searchuser 41. 搜索个人群(仅限管理员) + * @api {get} api/dialog/group/searchuser 40. 搜索个人群(仅限管理员) * * @apiDescription 需要token身份,用于创建部门搜索个人群组 * @apiVersion 1.0.0 @@ -1886,7 +1886,7 @@ class DialogController extends AbstractController } /** - * @api {post} api/dialog/okr/add 42. 创建OKR评论会话 + * @api {post} api/dialog/okr/add 41. 创建OKR评论会话 * * @apiDescription 需要token身份 * @apiVersion 1.0.0 @@ -1925,7 +1925,7 @@ class DialogController extends AbstractController } /** - * @api {post} api/dialog/okr/push 43. 推送OKR相关信息 + * @api {post} api/dialog/okr/push 42. 推送OKR相关信息 * * @apiDescription 需要token身份 * @apiVersion 1.0.0 diff --git a/app/Http/Controllers/Api/ProjectController.php b/app/Http/Controllers/Api/ProjectController.php index 56d039f2f..2b5271fbb 100755 --- a/app/Http/Controllers/Api/ProjectController.php +++ b/app/Http/Controllers/Api/ProjectController.php @@ -2197,7 +2197,7 @@ class ProjectController extends AbstractController } /** - * @api {get} api/project/task/move 35. 任务移动 + * @api {get} api/project/task/move 38. 任务移动 * * @apiDescription 需要token身份(限:项目、任务负责人) * @apiVersion 1.0.0 @@ -2238,7 +2238,7 @@ class ProjectController extends AbstractController } /** - * @api {get} api/project/flow/list 38. 工作流列表 + * @api {get} api/project/flow/list 39. 工作流列表 * * @apiDescription 需要token身份 * @apiVersion 1.0.0 @@ -2264,7 +2264,7 @@ class ProjectController extends AbstractController } /** - * @api {post} api/project/flow/save 39. 保存工作流 + * @api {post} api/project/flow/save 40. 保存工作流 * * @apiDescription 需要token身份(限:项目负责人) * @apiVersion 1.0.0 @@ -2298,7 +2298,7 @@ class ProjectController extends AbstractController } /** - * @api {get} api/project/flow/delete 40. 删除工作流 + * @api {get} api/project/flow/delete 41. 删除工作流 * * @apiDescription 需要token身份(限:项目负责人) * @apiVersion 1.0.0 @@ -2330,7 +2330,7 @@ class ProjectController extends AbstractController } /** - * @api {get} api/project/log/lists 41. 获取项目、任务日志 + * @api {get} api/project/log/lists 42. 获取项目、任务日志 * * @apiDescription 需要token身份 * @apiVersion 1.0.0 @@ -2383,7 +2383,7 @@ class ProjectController extends AbstractController } /** - * @api {get} api/project/top 42. 项目置顶 + * @api {get} api/project/top 43. 项目置顶 * * @apiDescription 需要token身份 * @apiVersion 1.0.0 diff --git a/public/docs/api_data.js b/public/docs/api_data.js new file mode 100644 index 000000000..a3c4aafec --- /dev/null +++ b/public/docs/api_data.js @@ -0,0 +1,10888 @@ +define({ "api": [ + { + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "key", + "description": "" + } + ] + } + }, + "type": "", + "url": "", + "version": "0.0.0", + "filename": "app/Http/Controllers/Api/PublicController.php", + "group": "/Users/GAOYI/wwwroot/dootask/app/Http/Controllers/Api/PublicController.php", + "groupTitle": "/Users/GAOYI/wwwroot/dootask/app/Http/Controllers/Api/PublicController.php", + "name": "" + }, + { + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "key", + "description": "" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "mac", + "description": "

使用逗号分割多个

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "time", + "description": "" + } + ] + } + }, + "type": "", + "url": "", + "version": "0.0.0", + "filename": "app/Http/Controllers/Api/PublicController.php", + "group": "/Users/GAOYI/wwwroot/dootask/app/Http/Controllers/Api/PublicController.php", + "groupTitle": "/Users/GAOYI/wwwroot/dootask/app/Http/Controllers/Api/PublicController.php", + "name": "" + }, + { + "type": "post", + "url": "api/approve/export", + "title": "18. 导出数据", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "approve", + "name": "export", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ApproveController.php", + "groupTitle": "工作流" + }, + { + "type": "get", + "url": "api/approve/identitylinkHistory/findParticipant", + "title": "16. 查询流程实例的参与者(已结束)", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "approve", + "name": "identitylinkHistory__findParticipant", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ApproveController.php", + "groupTitle": "工作流" + }, + { + "type": "get", + "url": "api/approve/identitylink/findParticipant", + "title": "12. 查询流程实例的参与者(审批中)", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "approve", + "name": "identitylink__findParticipant", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ApproveController.php", + "groupTitle": "工作流" + }, + { + "type": "post", + "url": "api/approve/procHistory/findProcNotify", + "title": "15. 查询抄送我的流程(已结束)", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "approve", + "name": "procHistory__findProcNotify", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ApproveController.php", + "groupTitle": "工作流" + }, + { + "type": "post", + "url": "api/approve/procHistory/findTask", + "title": "13. 查询需要我审批的流程(已结束)", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "approve", + "name": "procHistory__findTask", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ApproveController.php", + "groupTitle": "工作流" + }, + { + "type": "post", + "url": "api/approve/procHistory/startByMyself", + "title": "14. 查询我启动的流程(已结束)", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "approve", + "name": "procHistory__startByMyself", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ApproveController.php", + "groupTitle": "工作流" + }, + { + "type": "post", + "url": "api/approve/procdef/all", + "title": "02. 查询流程定义", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "approve", + "name": "procdef__all", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ApproveController.php", + "groupTitle": "工作流" + }, + { + "type": "get", + "url": "api/approve/procdef/del", + "title": "03. 删除流程定义", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "approve", + "name": "procdef__del", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ApproveController.php", + "groupTitle": "工作流" + }, + { + "type": "post", + "url": "api/approve/process/addGlobalComment", + "title": "05. 添加全局评论", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "approve", + "name": "process__addGlobalComment", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ApproveController.php", + "groupTitle": "工作流" + }, + { + "type": "get", + "url": "api/approve/process/detail", + "title": "17. 根据流程ID查询流程详情", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "approve", + "name": "process__detail", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ApproveController.php", + "groupTitle": "工作流" + }, + { + "type": "post", + "url": "api/approve/process/findProcNotify", + "title": "11. 查询抄送我的流程(审批中)", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "approve", + "name": "process__findProcNotify", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ApproveController.php", + "groupTitle": "工作流" + }, + { + "type": "post", + "url": "api/approve/process/findTask", + "title": "08. 查询需要我审批的流程(审批中)", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "approve", + "name": "process__findTask", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ApproveController.php", + "groupTitle": "工作流" + }, + { + "type": "post", + "url": "api/approve/process/start", + "title": "04. 启动流程(审批中)", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "approve", + "name": "process__start", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ApproveController.php", + "groupTitle": "工作流" + }, + { + "type": "post", + "url": "api/approve/process/startByMyself", + "title": "10. 查询我启动的流程(审批中)", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "approve", + "name": "process__startByMyself", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ApproveController.php", + "groupTitle": "工作流" + }, + { + "type": "post", + "url": "api/approve/process/startByMyselfAll", + "title": "09. 查询我启动的流程(全部)", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "approve", + "name": "process__startByMyselfAll", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ApproveController.php", + "groupTitle": "工作流" + }, + { + "type": "post", + "url": "api/approve/task/complete", + "title": "06. 审批", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "approve", + "name": "task__complete", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ApproveController.php", + "groupTitle": "工作流" + }, + { + "type": "post", + "url": "api/approve/task/withdraw", + "title": "07. 撤回", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "approve", + "name": "task__withdraw", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ApproveController.php", + "groupTitle": "工作流" + }, + { + "type": "get", + "url": "api/dialog/group/add", + "title": "34. 新增群组", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "group__add", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "avatar", + "description": "

群头像

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "chat_name", + "description": "

群名称

" + }, + { + "group": "Parameter", + "type": "Array", + "optional": false, + "field": "userids", + "description": "

群成员,格式: [userid1, userid2, userid3]

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/group/adduser", + "title": "36. 添加群成员", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "group__adduser", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "dialog_id", + "description": "

会话ID

" + }, + { + "group": "Parameter", + "type": "Array", + "optional": false, + "field": "userids", + "description": "

新增的群成员,格式: [userid1, userid2, userid3]

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/group/deluser", + "title": "37. 移出(退出)群成员", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "group__adduser", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "dialog_id", + "description": "

会话ID

" + }, + { + "group": "Parameter", + "type": "Array", + "optional": true, + "field": "userids", + "description": "

移出的群成员,格式: [userid1, userid2, userid3]

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/group/disband", + "title": "39. 解散群组", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "group__disband", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "dialog_id", + "description": "

会话ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/group/edit", + "title": "35. 修改群组", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "group__edit", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "dialog_id", + "description": "

会话ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "avatar", + "description": "

群头像

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "chat_name", + "description": "

群名称

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "admin", + "description": "

系统管理员操作(1:只判断是不是系统管理员,否则判断是否群管理员)

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/group/searchuser", + "title": "40. 搜索个人群(仅限管理员)", + "description": "

需要token身份,用于创建部门搜索个人群组

", + "version": "1.0.0", + "group": "dialog", + "name": "group__searchuser", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "key", + "description": "

关键词

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/group/transfer", + "title": "38. 转让群组", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "group__transfer", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "dialog_id", + "description": "

会话ID

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "userid", + "description": "

新的群主

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/lists", + "title": "01. 对话列表", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "lists", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "timerange", + "description": "

时间范围(如:1678248944,1678248944)

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "page", + "description": "

当前页,默认:1

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "pagesize", + "description": "

每页显示数量,默认:50,最大:100

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/msg/color", + "title": "33. 设置颜色", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "msg__color", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "dialog_id", + "description": "

会话ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "color", + "description": "

颜色

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/msg/detail", + "title": "22. 消息详情", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "msg__detail", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "msg_id", + "description": "

消息ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "only_update_at", + "description": "

仅获取update_at字段

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/msg/done", + "title": "32. 完成待办", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "msg__done", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "id", + "description": "

待办数据ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/msg/download", + "title": "23. 文件下载", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "msg__download", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "msg_id", + "description": "

消息ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "down", + "description": "

直接下载

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/msg/emoji", + "title": "28. emoji回复", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "msg__emoji", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "msg_id", + "description": "

消息ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "symbol", + "description": "

回复或取消的emoji表情

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/msg/forward", + "title": "27. 转发消息给", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "msg__forward", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "msg_id", + "description": "

消息ID

" + }, + { + "group": "Parameter", + "type": "Array", + "optional": false, + "field": "dialogids", + "description": "

转发给的对话ID

" + }, + { + "group": "Parameter", + "type": "Array", + "optional": false, + "field": "userids", + "description": "

转发给的成员ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/msg/list", + "title": "09. 获取消息列表", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "msg__list", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "dialog_id", + "description": "

对话ID

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "msg_id", + "description": "

消息ID

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "position_id", + "description": "

此消息ID前后的数据

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "prev_id", + "description": "

此消息ID之前的数据

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "next_id", + "description": "

此消息ID之后的数据

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "msg_type", + "description": "

消息类型

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "take", + "description": "

获取条数,默认:50,最大:100

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/msg/mark", + "title": "25. 消息标记操作", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "msg__mark", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "dialog_id", + "description": "

会话ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "type", + "description": "

类型

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "after_msg_id", + "description": "

仅标记已读指定之后(含)的消息

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/msg/one", + "title": "11. 获取单条消息", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "msg__one", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "msg_id", + "description": "

消息ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/msg/read", + "title": "12. 已读聊天消息", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "msg__read", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "id", + "description": "

消息ID(组)

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/msg/readlist", + "title": "21. 获取消息阅读情况", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "msg__readlist", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "msg_id", + "description": "

消息ID(需要是消息的发送人)

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/msg/search", + "title": "10. 搜索消息位置", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "msg__search", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "dialog_id", + "description": "

对话ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "key", + "description": "

搜索关键词

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "post", + "url": "api/dialog/msg/sendanon", + "title": "20. 发送匿名消息", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "msg__sendanon", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "userid", + "description": "

对方会员ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "text", + "description": "

消息内容

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "post", + "url": "api/dialog/msg/sendfile", + "title": "17. 文件上传", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "msg__sendfile", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "dialog_id", + "description": "

对话ID

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "reply_id", + "description": "

回复ID

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "image_attachment", + "description": "

图片是否也存到附件

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "filename", + "description": "

post-文件名称

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "image64", + "description": "

post-base64图片(二选一)

" + }, + { + "group": "Parameter", + "type": "File", + "optional": true, + "field": "files", + "description": "

post-文件对象(二选一)

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "post", + "url": "api/dialog/msg/sendfiles", + "title": "18. 群发文件上传", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "msg__sendfile", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "user_ids", + "description": "

用户ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "dialog_ids", + "description": "

对话ID(user_ids 二选一)

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "reply_id", + "description": "

回复ID

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "image_attachment", + "description": "

图片是否也存到附件

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "filename", + "description": "

post-文件名称

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "image64", + "description": "

post-base64图片(二选一)

" + }, + { + "group": "Parameter", + "type": "File", + "optional": true, + "field": "files", + "description": "

post-文件对象(二选一)

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/msg/sendfileid", + "title": "19. 通过文件ID发送文件", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "msg__sendfileid", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "file_id", + "description": "

消息ID

" + }, + { + "group": "Parameter", + "type": "Array", + "optional": false, + "field": "dialogids", + "description": "

转发给的对话ID

" + }, + { + "group": "Parameter", + "type": "Array", + "optional": false, + "field": "userids", + "description": "

转发给的成员ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "post", + "url": "api/dialog/msg/sendrecord", + "title": "16. 发送语音", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "msg__sendrecord", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "dialog_id", + "description": "

对话ID

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "reply_id", + "description": "

回复ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "base64", + "description": "

语音base64

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "duration", + "description": "

语音时长(毫秒)

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "post", + "url": "api/dialog/msg/sendtext", + "title": "15. 发送消息", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "msg__sendtext", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "dialog_id", + "description": "

对话ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "text", + "description": "

消息内容

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "text_type", + "description": "

消息类型

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "update_id", + "description": "

更新消息ID(优先大于 reply_id)

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "update_mark", + "description": "

是否更新标记

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "reply_id", + "description": "

回复ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "silence", + "description": "

是否静默发送

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/msg/silence", + "title": "26. 消息免打扰", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "msg__silence", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "dialog_id", + "description": "

会话ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "type", + "description": "

类型

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "post", + "url": "api/dialog/msg/stream", + "title": "14. 通知成员监听消息", + "description": "

通知指定会员EventSource监听流动消息

", + "version": "1.0.0", + "group": "dialog", + "name": "msg__stream", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "dialog_id", + "description": "

对话ID

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "userid", + "description": "

通知会员ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "stream_url", + "description": "

流动消息地址

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/msg/tag", + "title": "29. 标注/取消标注", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "msg__tag", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "msg_id", + "description": "

消息ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/msg/todo", + "title": "30. 设待办/取消待办", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "msg__todo", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "msg_id", + "description": "

消息ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "type", + "description": "

设待办对象

" + }, + { + "group": "Parameter", + "type": "Array", + "optional": false, + "field": "userids", + "description": "

会员ID组(type=user有效,格式: [userid1, userid2, userid3])

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/msg/todolist", + "title": "31. 获取消息待办情况", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "msg__todolist", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "msg_id", + "description": "

消息ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/msg/unread", + "title": "13. 获取未读消息数据", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "msg__unread", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "dialog_id", + "description": "

对话ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + }, + "examples": [ + { + "title": "data:", + "content": "{\n \"id\": 43,\n \"unread\": 308,\n \"mention\": 11,\n \"user_at\": \"2020-12-12 00:00:00.000\",\n \"user_ms\": 1677558147167,\n}", + "type": "json" + } + ] + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/msg/withdraw", + "title": "24. 聊天消息撤回", + "description": "

消息撤回限制24小时内,需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "msg__withdraw", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "msg_id", + "description": "

消息ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "post", + "url": "api/dialog/okr/add", + "title": "41. 创建OKR评论会话", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "okr__add", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "name", + "description": "

标题

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "link_id", + "description": "

关联id

" + }, + { + "group": "Parameter", + "type": "Array", + "optional": false, + "field": "userids", + "description": "

群成员,格式: [userid1, userid2, userid3]

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "post", + "url": "api/dialog/okr/push", + "title": "42. 推送OKR相关信息", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "okr__push", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "text", + "description": "

发送内容

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "userid", + "description": "

成员ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/one", + "title": "03. 获取单个会话信息", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "one", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "dialog_id", + "description": "

对话ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/open/user", + "title": "08. 打开会话", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "open__user", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "userid", + "description": "

对话会员ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/search", + "title": "02. 搜索会话", + "description": "

根据消息关键词搜索相关会话,需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "search", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "key", + "description": "

消息关键词

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/tel", + "title": "07. 获取对方联系电话", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "tel", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "dialog_id", + "description": "

会话ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/todo", + "title": "05. 获取会话待办", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "todo", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "dialog_id", + "description": "

会话ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/top", + "title": "06. 会话置顶", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "top", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "dialog_id", + "description": "

会话ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/user", + "title": "04. 获取会话成员", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "user", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "dialog_id", + "description": "

会话ID

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "getuser", + "description": "

获取会员详情(1: 返回会员昵称、邮箱等基本信息,0: 默认不返回)

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/file/add", + "title": "04. 添加、修改文件(夹)", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "file", + "name": "add", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "name", + "description": "

项目名称

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "type", + "description": "

文件类型

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "id", + "description": "

文件ID(赋值修改文件名称)

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "pid", + "description": "

父级ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/FileController.php", + "groupTitle": "文件" + }, + { + "type": "get", + "url": "api/file/content", + "title": "08. 获取文件内容", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "file", + "name": "content", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number|String", + "optional": false, + "field": "id", + "description": "" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "only_update_at", + "description": "

仅获取update_at字段

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "down", + "description": "

直接下载

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "history_id", + "description": "

读取历史记录ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/FileController.php", + "groupTitle": "文件" + }, + { + "type": "get", + "url": "api/file/content/history", + "title": "13. 获取内容历史", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "file", + "name": "content__history", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "id", + "description": "

文件ID

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "page", + "description": "

当前页,默认:1

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "pagesize", + "description": "

每页显示数量,默认:20,最大:100

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/FileController.php", + "groupTitle": "文件" + }, + { + "type": "get", + "url": "api/file/content/office", + "title": "11. 保存文件内容(office)", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "file", + "name": "content__office", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "id", + "description": "

文件ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/FileController.php", + "groupTitle": "文件" + }, + { + "type": "get", + "url": "api/file/content/restore", + "title": "14. 恢复文件历史", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "file", + "name": "content__restore", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "id", + "description": "

文件ID

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "history_id", + "description": "

历史数据ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/FileController.php", + "groupTitle": "文件" + }, + { + "type": "get", + "url": "api/file/content/save", + "title": "09. 保存文件内容", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "file", + "name": "content__save", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "id", + "description": "

文件ID

" + }, + { + "group": "Parameter", + "type": "Object", + "optional": true, + "field": "D", + "description": "

Request Payload 提交

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/FileController.php", + "groupTitle": "文件" + }, + { + "type": "get", + "url": "api/file/content/upload", + "title": "12. 保存文件内容(上传文件)", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "file", + "name": "content__upload", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "pid", + "description": "

父级ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "files", + "description": "

文件名

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/FileController.php", + "groupTitle": "文件" + }, + { + "type": "get", + "url": "api/file/copy", + "title": "05. 复制文件(夹)", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "file", + "name": "copy", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "id", + "description": "

文件ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/FileController.php", + "groupTitle": "文件" + }, + { + "type": "get", + "url": "api/file/download/confirm", + "title": "20. 确认下载", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "file", + "name": "download__confirm", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "name", + "description": "

下载文件名

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/FileController.php", + "groupTitle": "文件" + }, + { + "type": "get", + "url": "api/file/download/pack", + "title": "19. 打包文件", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "file", + "name": "download__pack", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Array", + "optional": true, + "field": "ids", + "description": "

文件ID,格式: [id, id2, id3]

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "name", + "description": "

下载文件名

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/FileController.php", + "groupTitle": "文件" + }, + { + "type": "get", + "url": "api/file/link", + "title": "18. 获取链接", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "file", + "name": "link", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "id", + "description": "

文件ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "refresh", + "description": "

刷新链接

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/FileController.php", + "groupTitle": "文件" + }, + { + "type": "get", + "url": "api/file/lists", + "title": "01. 获取文件列表", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "file", + "name": "lists", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "pid", + "description": "

父级ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/FileController.php", + "groupTitle": "文件" + }, + { + "type": "get", + "url": "api/file/move", + "title": "06. 移动文件(夹)", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "file", + "name": "move", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Numbers", + "optional": false, + "field": "ids", + "description": "

文件ID(格式:[id1, id2])

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "pid", + "description": "

移动到的文件夹ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/FileController.php", + "groupTitle": "文件" + }, + { + "type": "get", + "url": "api/file/office/token", + "title": "10. 获取token", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "file", + "name": "office__token", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "array", + "optional": false, + "field": "config", + "description": "" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/FileController.php", + "groupTitle": "文件" + }, + { + "type": "get", + "url": "api/file/one", + "title": "02. 获取单条数据", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "file", + "name": "one", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number|String", + "optional": false, + "field": "id", + "description": "" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/FileController.php", + "groupTitle": "文件" + }, + { + "type": "get", + "url": "api/file/remove", + "title": "07. 删除文件(夹)", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "file", + "name": "remove", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Numbers", + "optional": false, + "field": "ids", + "description": "

文件ID(格式:[id1, id2])

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/FileController.php", + "groupTitle": "文件" + }, + { + "type": "get", + "url": "api/file/search", + "title": "03. 搜索文件列表", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "file", + "name": "search", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "link", + "description": "

通过分享地址搜索(如:https://t.hitosea.com/single/file/ODcwOCwzOSxpa0JBS2lmVQ==)

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "key", + "description": "

关键词

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/FileController.php", + "groupTitle": "文件" + }, + { + "type": "get", + "url": "api/file/share", + "title": "15. 获取共享信息", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "file", + "name": "share", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "id", + "description": "

文件ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/FileController.php", + "groupTitle": "文件" + }, + { + "type": "get", + "url": "api/file/share/out", + "title": "17. 退出共享", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "file", + "name": "share__out", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "id", + "description": "

文件ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/FileController.php", + "groupTitle": "文件" + }, + { + "type": "get", + "url": "api/file/share/update", + "title": "16. 设置共享", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "file", + "name": "share__update", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "id", + "description": "

文件ID

" + }, + { + "group": "Parameter", + "type": "Array", + "optional": true, + "field": "userids", + "description": "

共享成员,格式: [userid1, userid2, userid3]

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "permission", + "description": "

共享方式

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "force", + "description": "

设置共享时是否忽略提醒

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/FileController.php", + "groupTitle": "文件" + }, + { + "type": "get", + "url": "api/project/add", + "title": "03. 添加项目", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "project", + "name": "add", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "name", + "description": "

项目名称

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "desc", + "description": "

项目介绍

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "columns", + "description": "

列表,格式:列表名称1,列表名称2

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "flow", + "description": "

开启流程

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "personal", + "description": "

个人项目,注册成功时创建(仅支持创建一个个人项目)

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/archived", + "title": "12. 归档项目", + "description": "

需要token身份(限:项目负责人)

", + "version": "1.0.0", + "group": "project", + "name": "archived", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "project_id", + "description": "

项目ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "type", + "description": "

类型

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/column/add", + "title": "15. 添加任务列表", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "project", + "name": "column__add", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "project_id", + "description": "

项目ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "name", + "description": "

列表名称

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/column/lists", + "title": "14. 获取任务列表", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "project", + "name": "column__lists", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "project_id", + "description": "

项目ID

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "page", + "description": "

当前页,默认:1

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "pagesize", + "description": "

每页显示数量,默认:100,最大:200

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/column/one", + "title": "18. 获取任务列详细", + "description": "

需要token身份(限:项目负责人)

", + "version": "1.0.0", + "group": "project", + "name": "column__one", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "column_id", + "description": "

列表ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "deleted", + "description": "

是否读取已删除

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/column/remove", + "title": "17. 删除任务列表", + "description": "

需要token身份(限:项目负责人)

", + "version": "1.0.0", + "group": "project", + "name": "column__remove", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "column_id", + "description": "

列表ID(留空为添加列表)

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/column/update", + "title": "16. 修改任务列表", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "project", + "name": "column__update", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "column_id", + "description": "

列表ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "name", + "description": "

列表名称

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "color", + "description": "

颜色

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/exit", + "title": "11. 退出项目", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "project", + "name": "exit", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "project_id", + "description": "

项目ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/flow/delete", + "title": "41. 删除工作流", + "description": "

需要token身份(限:项目负责人)

", + "version": "1.0.0", + "group": "project", + "name": "flow__delete", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "project_id", + "description": "

项目ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/flow/list", + "title": "39. 工作流列表", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "project", + "name": "flow__list", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "project_id", + "description": "

项目ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "post", + "url": "api/project/flow/save", + "title": "40. 保存工作流", + "description": "

需要token身份(限:项目负责人)

", + "version": "1.0.0", + "group": "project", + "name": "flow__save", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "project_id", + "description": "

项目ID

" + }, + { + "group": "Parameter", + "type": "Array", + "optional": false, + "field": "flows", + "description": "

工作流数据

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/invite", + "title": "06. 获取邀请链接", + "description": "

需要token身份(限:项目负责人)

", + "version": "1.0.0", + "group": "project", + "name": "invite", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "project_id", + "description": "

项目ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "refresh", + "description": "

刷新链接

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/invite/info", + "title": "07. 通过邀请链接code获取项目信息", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "project", + "name": "invite__info", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "code", + "description": "" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/invite/join", + "title": "08. 通过邀请链接code加入项目", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "project", + "name": "invite__join", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "code", + "description": "" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/lists", + "title": "01. 获取项目列表", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "project", + "name": "lists", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "all", + "description": "

是否查看所有项目(限制管理员)

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "type", + "description": "

项目类型

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "archived", + "description": "

归档状态

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "getcolumn", + "description": "

同时取列表

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "getuserid", + "description": "

同时取成员ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "getstatistics", + "description": "

同时取任务统计

" + }, + { + "group": "Parameter", + "type": "Object", + "optional": true, + "field": "keys", + "description": "

搜索条件

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "timerange", + "description": "

时间范围(如:1678248944,1678248944)

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "page", + "description": "

当前页,默认:1

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "pagesize", + "description": "

每页显示数量,默认:50,最大:100

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + }, + "examples": [ + { + "title": "sampleData:", + "content": "{\n \"data\": [\n {\n \"id\": 7,\n \"name\": \"🏢 产品官网项目\",\n \"desc\": \"设置各小组成员的工作列表,各自领取或领导分配任务,将做好的任务分期归档,方便复盘!\",\n \"userid\": 1,\n \"dialog_id\": 15,\n \"archived_at\": null,\n \"archived_userid\": 0,\n \"created_at\": \"2022-01-02 06:23:15\",\n \"updated_at\": \"2022-01-02 07:12:33\",\n\n \"owner\": 1, // 是否项目负责人\n \"owner_userid\": 1, // 项目负责人ID\n\n \"task_num\": 9,\n \"task_complete\": 0,\n \"task_percent\": 0,\n \"task_my_num\": 8,\n \"task_my_complete\": 0,\n \"task_my_percent\": 0,\n },\n ],\n \"current_page\": 1, // 当前页数\n \"last_page\": 1, // 下一页数\n \"total\": 6, // 总计数(当前查询条件)\n \"total_all\": 6 // 总计数(全部)\n}", + "type": "json" + } + ] + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/log/lists", + "title": "42. 获取项目、任务日志", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "project", + "name": "log__lists", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "project_id", + "description": "

项目ID

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "task_id", + "description": "

任务ID(与 项目ID 二选一,任务ID优先)

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "page", + "description": "

当前页,默认:1

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "pagesize", + "description": "

每页显示数量,默认:20,最大:100

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/one", + "title": "02. 获取一个项目信息", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "project", + "name": "one", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "project_id", + "description": "

项目ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + }, + "examples": [ + { + "title": "sampleData:", + "content": "{\n \"id\": 7,\n \"name\": \"🏢 产品官网项目\",\n \"desc\": \"设置各小组成员的工作列表,各自领取或领导分配任务,将做好的任务分期归档,方便复盘!\",\n \"userid\": 1,\n \"dialog_id\": 15,\n \"archived_at\": null,\n \"archived_userid\": 0,\n \"created_at\": \"2022-01-02 06:23:15\",\n \"updated_at\": \"2022-01-02 07:12:33\",\n\n \"owner\": 1, // 是否项目负责人\n \"owner_userid\": 1, // 项目负责人ID\n\n \"project_user\": [ // 项目成员\n {\n \"id\": 2,\n \"project_id\": 2,\n \"userid\": 1,\n \"owner\": 1,\n \"created_at\": \"2022-01-02 00:55:32\",\n \"updated_at\": \"2022-01-02 00:55:32\"\n }\n ],\n\n \"task_num\": 9,\n \"task_complete\": 0,\n \"task_percent\": 0,\n \"task_my_num\": 8,\n \"task_my_complete\": 0,\n \"task_my_percent\": 0,\n}", + "type": "json" + } + ] + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/remove", + "title": "13. 删除项目", + "description": "

需要token身份(限:项目负责人)

", + "version": "1.0.0", + "group": "project", + "name": "remove", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "project_id", + "description": "

项目ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "post", + "url": "api/project/sort", + "title": "10. 排序任务", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "project", + "name": "sort", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "project_id", + "description": "

项目ID

" + }, + { + "group": "Parameter", + "type": "Object", + "optional": false, + "field": "sort", + "description": "

排序数据

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "only_column", + "description": "

仅更新列表

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "post", + "url": "api/project/task/add", + "title": "30. 添加任务", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "project", + "name": "task__add", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "project_id", + "description": "

项目ID

" + }, + { + "group": "Parameter", + "type": "mixed", + "optional": true, + "field": "column_id", + "description": "

列表ID,任意值自动创建,留空取第一个

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "name", + "description": "

任务描述

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "content", + "description": "

任务详情

" + }, + { + "group": "Parameter", + "type": "Array", + "optional": true, + "field": "times", + "description": "

计划时间(格式:开始时间,结束时间;如:2020-01-01 00:00,2020-01-01 23:59)

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "owner", + "description": "

负责人

" + }, + { + "group": "Parameter", + "type": "Array", + "optional": true, + "field": "subtasks", + "description": "

子任务(格式:[{name,owner,times}])

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "top", + "description": "

添加的任务排到列表最前面

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/task/addsub", + "title": "31. 添加子任务", + "description": "

需要token身份(限:项目、任务负责人)

", + "version": "1.0.0", + "group": "project", + "name": "task__addsub", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "task_id", + "description": "

任务ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "name", + "description": "

任务描述

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/task/archived", + "title": "34. 归档任务", + "description": "

需要token身份(限:项目、任务负责人)

", + "version": "1.0.0", + "group": "project", + "name": "task__archived", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "task_id", + "description": "

任务ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "type", + "description": "

类型

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/task/content", + "title": "25. 获取任务详细描述", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "project", + "name": "task__content", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "task_id", + "description": "

任务ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/task/dialog", + "title": "33. 创建/获取聊天室", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "project", + "name": "task__dialog", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "task_id", + "description": "

任务ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/task/down", + "title": "23. 下载导出的任务", + "version": "1.0.0", + "group": "project", + "name": "task__down", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "key", + "description": "

通过export接口得到的下载钥匙

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "File", + "optional": false, + "field": "data", + "description": "

返回数据(直接下载文件)

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/task/easylists", + "title": "20. 任务列表-简单的", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "project", + "name": "task__easylists", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "taskid", + "description": "

排除的任务ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "userid", + "description": "

用户ID(如:1,2)

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "timerange", + "description": "

时间范围(如:2022-03-01 12:12:12,2022-05-01 12:12:12)

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/task/export", + "title": "21. 导出任务(限管理员)", + "description": "

导出指定范围任务(已完成、未完成、已归档),返回下载地址,需要token身份

", + "version": "1.0.0", + "group": "project", + "name": "task__export", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Array", + "optional": true, + "field": "userid", + "description": "

指定会员,如:[1, 2]

" + }, + { + "group": "Parameter", + "type": "Array", + "optional": true, + "field": "time", + "description": "

指定时间范围,如:['2020-12-12', '2020-12-30']

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "type", + "description": "" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/task/exportoverdue", + "title": "22. 导出超期任务(限管理员)", + "description": "

导出指定范围任务(已完成、未完成、已归档),返回下载地址,需要token身份

", + "version": "1.0.0", + "group": "project", + "name": "task__exportoverdue", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/task/filedelete", + "title": "27. 删除任务文件", + "description": "

需要token身份(限:项目、任务负责人)

", + "version": "1.0.0", + "group": "project", + "name": "task__filedelete", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "file_id", + "description": "

文件ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/task/filedetail", + "title": "28. 获取任务文件详情", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "project", + "name": "task__filedetail", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "file_id", + "description": "

文件ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "only_update_at", + "description": "

仅获取update_at字段

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/task/filedown", + "title": "29. 下载任务文件", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "project", + "name": "task__filedown", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "file_id", + "description": "

文件ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "down", + "description": "

直接下载

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/task/files", + "title": "26. 获取任务文件列表", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "project", + "name": "task__files", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "task_id", + "description": "

任务ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/task/flow", + "title": "37. 任务工作流信息", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "project", + "name": "task__flow", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "task_id", + "description": "

任务ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/task/lists", + "title": "19. 任务列表", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "project", + "name": "task__lists", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Object", + "optional": true, + "field": "keys", + "description": "

搜索条件

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "project_id", + "description": "

项目ID

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "parent_id", + "description": "

主任务ID(project_id && parent_id ≤ 0 时 仅查询自己参与的任务)

" + }, + { + "group": "Parameter", + "type": "Array", + "optional": true, + "field": "time", + "description": "

指定时间范围,如:['2020-12-12', '2020-12-30']

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "timerange", + "description": "

时间范围(如:1678248944,1678248944)

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "archived", + "description": "

归档状态

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "deleted", + "description": "

是否读取已删除

" + }, + { + "group": "Parameter", + "type": "Object", + "optional": true, + "field": "sorts", + "description": "

排序方式

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/task/move", + "title": "38. 任务移动", + "description": "

需要token身份(限:项目、任务负责人)

", + "version": "1.0.0", + "group": "project", + "name": "task__move", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "task_id", + "description": "

任务ID

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "project_id", + "description": "

项目ID

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "column_id", + "description": "

列ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/task/one", + "title": "24. 获取单个任务信息", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "project", + "name": "task__one", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "task_id", + "description": "

任务ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "archived", + "description": "

归档状态

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/task/remove", + "title": "35. 删除任务", + "description": "

需要token身份(限:项目、任务负责人)

", + "version": "1.0.0", + "group": "project", + "name": "task__remove", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "task_id", + "description": "

任务ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "type", + "description": "" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/task/resetfromlog", + "title": "36. 根据日志重置任务", + "description": "

需要token身份(限:项目、任务负责人)

", + "version": "1.0.0", + "group": "project", + "name": "task__resetfromlog", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "task_id", + "description": "

任务ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "post", + "url": "api/project/task/update", + "title": "32. 修改任务、子任务", + "description": "

需要token身份(限:项目、任务负责人)

", + "version": "1.0.0", + "group": "project", + "name": "task__update", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "task_id", + "description": "

任务ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "name", + "description": "

任务描述

" + }, + { + "group": "Parameter", + "type": "Array", + "optional": true, + "field": "times", + "description": "

计划时间(格式:开始时间,结束时间;如:2020-01-01 00:00,2020-01-01 23:59)

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "loop", + "description": "

重复周期,数字代表天数(子任务不支持)

" + }, + { + "group": "Parameter", + "type": "Array", + "optional": true, + "field": "owner", + "description": "

修改负责人

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "content", + "description": "

任务详情(子任务不支持)

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "color", + "description": "

背景色(子任务不支持)

" + }, + { + "group": "Parameter", + "type": "Array", + "optional": true, + "field": "assist", + "description": "

修改协助人员(子任务不支持)

" + }, + { + "group": "Parameter", + "type": "Array", + "optional": true, + "field": "visibility_appointor", + "description": "

修改可见性人员

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "p_level", + "description": "

优先级相关(子任务不支持)

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "p_name", + "description": "

优先级相关(子任务不支持)

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "p_color", + "description": "

优先级相关(子任务不支持)

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "flow_item_id", + "description": "

任务状态,工作流状态ID

" + }, + { + "group": "Parameter", + "type": "String|false", + "optional": true, + "field": "complete_at", + "description": "

完成时间(如:2020-01-01 00:00,false表示未完成)

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/top", + "title": "43. 项目置顶", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "project", + "name": "top", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "project_id", + "description": "

项目ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/transfer", + "title": "09. 移交项目", + "description": "

需要token身份(限:项目负责人)

", + "version": "1.0.0", + "group": "project", + "name": "transfer", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "project_id", + "description": "

项目ID

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "owner_userid", + "description": "

新的项目负责人ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/update", + "title": "04. 修改项目", + "description": "

需要token身份(限:项目负责人)

", + "version": "1.0.0", + "group": "project", + "name": "update", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "project_id", + "description": "

项目ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "name", + "description": "

项目名称

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "desc", + "description": "

项目介绍

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/user", + "title": "05. 修改项目成员", + "description": "

需要token身份(限:项目负责人)

", + "version": "1.0.0", + "group": "project", + "name": "user", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "project_id", + "description": "

项目ID

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "userid", + "description": "

成员ID 或 成员ID组

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/report/detail", + "title": "05. 报告详情", + "version": "1.0.0", + "group": "report", + "name": "detail", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "id", + "description": "

报告id

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ReportController.php", + "groupTitle": "汇报" + }, + { + "type": "get", + "url": "api/report/last_submitter", + "title": "07. 获取最后一次提交的接收人", + "version": "1.0.0", + "group": "report", + "name": "last_submitter", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ReportController.php", + "groupTitle": "汇报" + }, + { + "type": "get", + "url": "api/report/mark", + "title": "06. 标记已读/未读", + "version": "1.0.0", + "group": "report", + "name": "mark", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "id", + "description": "

报告id(组)

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "action", + "description": "

操作

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ReportController.php", + "groupTitle": "汇报" + }, + { + "type": "get", + "url": "api/report/my", + "title": "01. 我发送的汇报", + "version": "1.0.0", + "group": "report", + "name": "my", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Object", + "optional": true, + "field": "keys", + "description": "

搜索条件

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "page", + "description": "

当前页,默认:1

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "pagesize", + "description": "

每页显示数量,默认:20,最大:50

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ReportController.php", + "groupTitle": "汇报" + }, + { + "type": "get", + "url": "api/report/read", + "title": "09. 标记汇报已读,可批量", + "version": "1.0.0", + "group": "report", + "name": "read", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "ids", + "description": "

报告id

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ReportController.php", + "groupTitle": "汇报" + }, + { + "type": "get", + "url": "api/report/receive", + "title": "02. 我接收的汇报", + "version": "1.0.0", + "group": "report", + "name": "receive", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Object", + "optional": true, + "field": "keys", + "description": "

搜索条件

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "page", + "description": "

当前页,默认:1

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "pagesize", + "description": "

每页显示数量,默认:20,最大:50

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ReportController.php", + "groupTitle": "汇报" + }, + { + "type": "get", + "url": "api/report/store", + "title": "03. 保存并发送工作汇报", + "version": "1.0.0", + "group": "report", + "name": "store", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "id", + "description": "

汇报ID,0为新建

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "sign", + "description": "

唯一签名,通过[api/report/template]接口返回

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "title", + "description": "

汇报标题

" + }, + { + "group": "Parameter", + "type": "Array", + "optional": false, + "field": "type", + "description": "

汇报类型,weekly:周报,daily:日报

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "content", + "description": "

内容

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "receive", + "description": "

汇报对象

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "offset", + "description": "

时间偏移量

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ReportController.php", + "groupTitle": "汇报" + }, + { + "type": "get", + "url": "api/report/template", + "title": "04. 生成汇报模板", + "version": "1.0.0", + "group": "report", + "name": "template", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Array", + "optional": true, + "field": "type", + "description": "

汇报类型,weekly:周报,daily:日报

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "offset", + "description": "

偏移量

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "date", + "description": "

时间

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ReportController.php", + "groupTitle": "汇报" + }, + { + "type": "get", + "url": "api/report/unread", + "title": "08. 获取未读", + "version": "1.0.0", + "group": "report", + "name": "unread", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ReportController.php", + "groupTitle": "汇报" + }, + { + "type": "get", + "url": "api/system/checkin/down", + "title": "23. 下载导出的签到数据", + "version": "1.0.0", + "group": "system", + "name": "checkin__down", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "key", + "description": "

通过export接口得到的下载钥匙

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "File", + "optional": false, + "field": "data", + "description": "

返回数据(直接下载文件)

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/SystemController.php", + "groupTitle": "系统" + }, + { + "type": "get", + "url": "api/system/checkin/export", + "title": "22. 导出签到数据(限管理员)", + "version": "1.0.0", + "group": "system", + "name": "checkin__export", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Array", + "optional": true, + "field": "userid", + "description": "

指定会员,如:[1, 2]

" + }, + { + "group": "Parameter", + "type": "Array", + "optional": true, + "field": "date", + "description": "

指定日期范围,如:['2020-12-12', '2020-12-30']

" + }, + { + "group": "Parameter", + "type": "Array", + "optional": true, + "field": "time", + "description": "

指定时间范围,如:['09:00', '18:00']

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/SystemController.php", + "groupTitle": "系统" + }, + { + "type": "post", + "url": "api/system/column/template", + "title": "10. 创建项目模板", + "description": "

获取创建项目模板、保存创建项目模板

", + "version": "1.0.0", + "group": "system", + "name": "column__template", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "type", + "description": "" + }, + { + "group": "Parameter", + "type": "Array", + "optional": false, + "field": "list", + "description": "

优先级数据,格式:[{name,columns}]

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/SystemController.php", + "groupTitle": "系统" + }, + { + "type": "get", + "url": "api/system/demo", + "title": "08. 获取演示帐号", + "version": "1.0.0", + "group": "system", + "name": "demo", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/SystemController.php", + "groupTitle": "系统" + }, + { + "type": "get", + "url": "api/approve/down", + "title": "19. 下载导出的审批数据", + "version": "1.0.0", + "group": "system", + "name": "down", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "key", + "description": "

通过export接口得到的下载钥匙

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "File", + "optional": false, + "field": "data", + "description": "

返回数据(直接下载文件)

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ApproveController.php", + "groupTitle": "系统" + }, + { + "type": "get", + "url": "api/system/email/check", + "title": "21. 邮件发送测试(限管理员)", + "description": "

测试配置邮箱是否能发送邮件

", + "version": "1.0.0", + "group": "system", + "name": "email__check", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/SystemController.php", + "groupTitle": "系统" + }, + { + "type": "post", + "url": "api/system/fileupload", + "title": "19. 上传文件", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "system", + "name": "fileupload", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "image64", + "description": "

图片base64

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "filename", + "description": "

文件名

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "files", + "description": "

文件名

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/SystemController.php", + "groupTitle": "系统" + }, + { + "type": "get", + "url": "api/system/get/cnip", + "title": "14. 是否中国IP地址", + "version": "1.0.0", + "group": "system", + "name": "get__cnip", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "ip", + "description": "

IP值

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/SystemController.php", + "groupTitle": "系统" + }, + { + "type": "get", + "url": "api/system/get/info", + "title": "12. 获取终端详细信息", + "version": "1.0.0", + "group": "system", + "name": "get__info", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "key", + "description": "

key值

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/SystemController.php", + "groupTitle": "系统" + }, + { + "type": "get", + "url": "api/system/get/ip", + "title": "13. 获取IP地址", + "version": "1.0.0", + "group": "system", + "name": "get__ip", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/SystemController.php", + "groupTitle": "系统" + }, + { + "type": "get", + "url": "api/system/get/ipgcj02", + "title": "15. 获取IP地址经纬度", + "version": "1.0.0", + "group": "system", + "name": "get__ipgcj02", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "ip", + "description": "

IP值

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/SystemController.php", + "groupTitle": "系统" + }, + { + "type": "get", + "url": "api/system/get/ipinfo", + "title": "16. 获取IP地址详细信息", + "version": "1.0.0", + "group": "system", + "name": "get__ipinfo", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "ip", + "description": "

IP值

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/SystemController.php", + "groupTitle": "系统" + }, + { + "type": "get", + "url": "api/system/get/updatelog", + "title": "20. 获取更新日志", + "description": "

获取更新日志

", + "version": "1.0.0", + "group": "system", + "name": "get__updatelog", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/SystemController.php", + "groupTitle": "系统" + }, + { + "type": "post", + "url": "api/system/imgupload", + "title": "17. 上传图片", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "system", + "name": "imgupload", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "File", + "optional": false, + "field": "image", + "description": "

post-图片对象

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "image64", + "description": "

post-图片base64(与'image'二选一)

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "filename", + "description": "

post-文件名

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "width", + "description": "

压缩图片宽(默认0)

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "height", + "description": "

压缩图片高(默认0)

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "whcut", + "description": "

压缩方式

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/SystemController.php", + "groupTitle": "系统" + }, + { + "type": "get", + "url": "api/system/get/imgview", + "title": "18. 浏览图片空间", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "system", + "name": "imgview", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "path", + "description": "

路径

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/SystemController.php", + "groupTitle": "系统" + }, + { + "type": "post", + "url": "api/system/license", + "title": "11. License", + "description": "

获取License信息、保存License(限管理员)

", + "version": "1.0.0", + "group": "system", + "name": "license", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "type", + "description": "" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "license", + "description": "

License 原文

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/SystemController.php", + "groupTitle": "系统" + }, + { + "type": "post", + "url": "api/system/priority", + "title": "09. 任务优先级", + "description": "

获取任务优先级、保存任务优先级

", + "version": "1.0.0", + "group": "system", + "name": "priority", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "type", + "description": "" + }, + { + "group": "Parameter", + "type": "Array", + "optional": false, + "field": "list", + "description": "

优先级数据,格式:[{name,color,days,priority}]

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/SystemController.php", + "groupTitle": "系统" + }, + { + "type": "get", + "url": "api/system/setting", + "title": "01. 获取设置、保存设置", + "version": "1.0.0", + "group": "system", + "name": "setting", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "type", + "description": "" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/SystemController.php", + "groupTitle": "系统" + }, + { + "type": "get", + "url": "api/system/setting/aibot", + "title": "04. 获取会议设置、保存AI机器人设置(限管理员)", + "version": "1.0.0", + "group": "system", + "name": "setting__aibot", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "type", + "description": "" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/SystemController.php", + "groupTitle": "系统" + }, + { + "type": "get", + "url": "api/system/setting/apppush", + "title": "06. 获取APP推送设置、保存APP推送设置(限管理员)", + "version": "1.0.0", + "group": "system", + "name": "setting__apppush", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "type", + "description": "" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/SystemController.php", + "groupTitle": "系统" + }, + { + "type": "get", + "url": "api/system/setting/checkin", + "title": "05. 获取签到设置、保存签到设置(限管理员)", + "version": "1.0.0", + "group": "system", + "name": "setting__checkin", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "type", + "description": "" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/SystemController.php", + "groupTitle": "系统" + }, + { + "type": "get", + "url": "api/system/setting/email", + "title": "02. 获取邮箱设置、保存邮箱设置(限管理员)", + "version": "1.0.0", + "group": "system", + "name": "setting__email", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "type", + "description": "" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/SystemController.php", + "groupTitle": "系统" + }, + { + "type": "get", + "url": "api/system/setting/meeting", + "title": "03. 获取会议设置、保存会议设置(限管理员)", + "version": "1.0.0", + "group": "system", + "name": "setting__meeting", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "type", + "description": "" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/SystemController.php", + "groupTitle": "系统" + }, + { + "type": "get", + "url": "api/system/setting/thirdaccess", + "title": "07. 第三方帐号(限管理员)", + "version": "1.0.0", + "group": "system", + "name": "setting__thirdaccess", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "type", + "description": "" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/SystemController.php", + "groupTitle": "系统" + }, + { + "type": "get", + "url": "api/approve/user/status", + "title": "20. 获取用户审批状态", + "version": "1.0.0", + "group": "system", + "name": "user__status", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "userid", + "description": "" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ApproveController.php", + "groupTitle": "系统" + }, + { + "type": "get", + "url": "api/system/version", + "title": "24. 获取版本号", + "version": "1.0.0", + "group": "system", + "name": "version", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "version", + "description": "" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "publish", + "description": "" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/SystemController.php", + "groupTitle": "系统" + }, + { + "type": "get", + "url": "api/users/basic", + "title": "11. 获取指定会员基础信息", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "users", + "name": "basic", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "userid", + "description": "

会员ID(多个格式:jsonArray,一次最多50个)

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "post", + "url": "api/users/bot/edit", + "title": "32. 编辑机器人", + "description": "

需要token身份,编辑 我的机器人 或 管理员修改系统机器人 信息

", + "version": "1.0.0", + "group": "users", + "name": "bot__edit", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "id", + "description": "

机器人ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "name", + "description": "

机器人名称

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "avatar", + "description": "

机器人头像

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "clear_day", + "description": "

清理天数(仅 我的机器人)

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "webhook_url", + "description": "

Webhook地址(仅 我的机器人)

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/bot/info", + "title": "31. 机器人信息", + "description": "

需要token身份,获取我的机器人信息

", + "version": "1.0.0", + "group": "users", + "name": "bot__info", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "id", + "description": "

机器人ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/checkin/get", + "title": "26. 获取签到设置", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "users", + "name": "checkin__get", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/checkin/list", + "title": "28. 获取签到数据", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "users", + "name": "checkin__list", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "ym", + "description": "

年-月(如:2020-01)

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "before", + "description": "

取月份之前的数据(单位:月数,最大3)

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "post", + "url": "api/users/checkin/save", + "title": "27. 保存签到设置", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "users", + "name": "checkin__save", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Array", + "optional": false, + "field": "list", + "description": "

优先级数据,格式:[{mac,remark}]

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/delete/account", + "title": "22. 删除帐号", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "users", + "name": "delete__account", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "email", + "description": "

帐号邮箱

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "code", + "description": "

邮箱验证码

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "reason", + "description": "

注销理由

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "password", + "description": "

登录密码

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "type", + "description": "

类型

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/department/add", + "title": "24. 新建、修改部门(限管理员)", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "users", + "name": "department__add", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "id", + "description": "

部门id,留空为创建部门

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "name", + "description": "

部门名称

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "parent_id", + "description": "

上级部门ID

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "owner_userid", + "description": "

部门负责人ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "dialog_group", + "description": "

部门群(仅创建部门时有效)

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "dialog_useid", + "description": "

使用现有群ID(dialog_group=use时有效)

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/department/del", + "title": "25. 删除部门(限管理员)", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "users", + "name": "department__del", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "id", + "description": "

部门id

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/department/list", + "title": "23. 部门列表(限管理员)", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "users", + "name": "department__list", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/email/edit", + "title": "21. 修改邮箱", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "users", + "name": "edit__email", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "newEmail", + "description": "

新邮箱地址

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "code", + "description": "

邮箱验证码

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/editdata", + "title": "08. 修改自己的资料", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "users", + "name": "editdata", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Object", + "optional": true, + "field": "userimg", + "description": "

会员头像(地址)

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "tel", + "description": "

电话

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "nickname", + "description": "

昵称

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "profession", + "description": "

职位/职称

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据(同"获取我的信息"接口)

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/editpass", + "title": "09. 修改自己的密码", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "users", + "name": "editpass", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "oldpass", + "description": "

旧密码

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "newpass", + "description": "

新密码

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据(同"获取我的信息"接口)

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/email/send", + "title": "20. 发送邮箱验证码", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "users", + "name": "email__send", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "type", + "description": "

邮件类型

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "email", + "description": "

邮箱地址

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/email/verification", + "title": "14. 邮箱验证", + "description": "

不需要token身份

", + "version": "1.0.0", + "group": "users", + "name": "email__verification", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "code", + "description": "

验证参数

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/info", + "title": "07. 获取我的信息", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "users", + "name": "info", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + }, + "examples": [ + { + "title": "data:", + "content": "{\n \"userid\": 1,\n \"identity\": [ ],\n \"department\": [ ],\n \"az\": \"\",\n \"email\": \"admin@admin.com\",\n \"nickname\": \"admin\",\n \"userimg\": \"\",\n \"login_num\": 10,\n \"changepass\": 0,\n \"last_ip\": \"127.0.0.1\",\n \"last_at\": \"2021-06-01 12:00:00\",\n \"line_ip\": \"127.0.0.1\",\n \"line_at\": \"2021-06-01 12:00:00\",\n \"created_ip\": \"\",\n}", + "type": "json" + } + ] + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/key/client", + "title": "30. 客户端KEY", + "description": "

获取客户端KEY,用于加密数据发送给服务端

", + "version": "1.0.0", + "group": "users", + "name": "key__client", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "client_id", + "description": "

客户端ID(希望不变的,除非清除浏览器缓存或者卸载应用)

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/lists", + "title": "12. 会员列表(限管理员)", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "users", + "name": "lists", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Object", + "optional": true, + "field": "keys", + "description": "

搜索条件

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "get_checkin_mac", + "description": "

获取签到mac地址

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "page", + "description": "

当前页,默认:1

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "pagesize", + "description": "

每页显示数量,默认:20,最大:50

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/login", + "title": "01. 登录、注册", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "users", + "name": "login", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "type", + "description": "

类型

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "email", + "description": "

邮箱

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "password", + "description": "

密码

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "code", + "description": "

登录验证码

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "code_key", + "description": "

验证码通过key验证

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "invite", + "description": "

注册邀请码

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据(同"获取我的信息"接口)

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/login/codeimg", + "title": "04. 验证码图片", + "description": "

用于判断是否需要登录验证码

", + "version": "1.0.0", + "group": "users", + "name": "login__codeimg", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Image", + "optional": false, + "field": "data", + "description": "

返回数据(直接输出图片)

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/login/codejson", + "title": "05. 验证码json", + "description": "

用于判断是否需要登录验证码

", + "version": "1.0.0", + "group": "users", + "name": "login__codejson", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/login/needcode", + "title": "03. 是否需要验证码", + "description": "

用于判断是否需要登录验证码

", + "version": "1.0.0", + "group": "users", + "name": "login__needcode", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "email", + "description": "

用户名

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1需要、0不需要)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/login/qrcode", + "title": "02. 二维码登录", + "description": "

通过二维码code登录 (或:是否登录成功)

", + "version": "1.0.0", + "group": "users", + "name": "login__qrcode", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "type", + "description": "

类型

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "code", + "description": "

二维码 code

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1需要、0不需要)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/meeting/invitation", + "title": "19. 【会议】发送邀请", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "users", + "name": "meeting__invitation", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "meetingid", + "description": "

频道ID(不是数字)

" + }, + { + "group": "Parameter", + "type": "Array", + "optional": false, + "field": "userids", + "description": "

邀请成员

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/meeting/link", + "title": "17. 【会议】获取分享链接", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "users", + "name": "meeting__link", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "meetingid", + "description": "

频道ID(不是数字)

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "sharekey", + "description": "

分享的key

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/meeting/open", + "title": "16. 【会议】创建会议、加入会议", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "users", + "name": "meeting__open", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "type", + "description": "

类型

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "meetingid", + "description": "

频道ID(不是数字)

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "name", + "description": "

会话ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "sharekey", + "description": "

分享的key

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "username", + "description": "

用户名称

" + }, + { + "group": "Parameter", + "type": "Array", + "optional": true, + "field": "userids", + "description": "

邀请成员

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/meeting/tourist", + "title": "18. 【会议】游客信息", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "users", + "name": "meeting__tourist", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "tourist_id", + "description": "

游客ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/operation", + "title": "13. 操作会员(限管理员)", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "users", + "name": "operation", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "userid", + "description": "

会员ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "type", + "description": "

操作

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "email", + "description": "

邮箱地址

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "tel", + "description": "

联系电话

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "password", + "description": "

新的密码

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "nickname", + "description": "

昵称

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "profession", + "description": "

职位

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "checkin_macs", + "description": "

自动签到mac地址

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "department", + "description": "

部门

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "disable_time", + "description": "

离职时间

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "transfer_userid", + "description": "

离职交接人

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "delete_reason", + "description": "

删除原因

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/reg/needinvite", + "title": "06. 是否需要邀请码", + "description": "

用于判断注册是否需要邀请码

", + "version": "1.0.0", + "group": "users", + "name": "reg__needinvite", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/search", + "title": "10. 搜索会员列表", + "description": "

搜索会员列表

", + "version": "1.0.0", + "group": "users", + "name": "searchinfo", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Object", + "optional": false, + "field": "keys", + "description": "

搜索条件

" + }, + { + "group": "Parameter", + "type": "Object", + "optional": false, + "field": "sorts", + "description": "

排序方式

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "updated_time", + "description": "

在这个时间戳之后更新的

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "state", + "description": "

获取在线状态

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "take", + "description": "

获取数量,10-100

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "page", + "description": "

当前页,默认:1(赋值分页模式,take参数无效)

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "pagesize", + "description": "

每页显示数量,默认:10,最大:100

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/share/list", + "title": "33. 获取分享列表", + "version": "1.0.0", + "group": "users", + "name": "share__list", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "type", + "description": "

分享类型:file-文件,text-列表 默认file

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "pid", + "description": "

父级文件id,用于获取子目录和上传到指定目录的id

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "upload_file_id", + "description": "

上传文件id

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/socket/status", + "title": "29. 获取socket状态", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "users", + "name": "socket__status", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "fd", + "description": "" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/umeng/alias", + "title": "15. 设置友盟别名", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "users", + "name": "umeng__alias", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "alias", + "description": "

别名

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/approve/verifyToken", + "title": "01. 验证APi登录", + "version": "1.0.0", + "group": "users", + "name": "verifyToken", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "version", + "description": "" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "publish", + "description": "" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ApproveController.php", + "groupTitle": "会员" + } +] }); diff --git a/public/docs/api_data.json b/public/docs/api_data.json new file mode 100644 index 000000000..849ddb8f8 --- /dev/null +++ b/public/docs/api_data.json @@ -0,0 +1,10888 @@ +[ + { + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "key", + "description": "" + } + ] + } + }, + "type": "", + "url": "", + "version": "0.0.0", + "filename": "app/Http/Controllers/Api/PublicController.php", + "group": "/Users/GAOYI/wwwroot/dootask/app/Http/Controllers/Api/PublicController.php", + "groupTitle": "/Users/GAOYI/wwwroot/dootask/app/Http/Controllers/Api/PublicController.php", + "name": "" + }, + { + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "key", + "description": "" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "mac", + "description": "

使用逗号分割多个

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "time", + "description": "" + } + ] + } + }, + "type": "", + "url": "", + "version": "0.0.0", + "filename": "app/Http/Controllers/Api/PublicController.php", + "group": "/Users/GAOYI/wwwroot/dootask/app/Http/Controllers/Api/PublicController.php", + "groupTitle": "/Users/GAOYI/wwwroot/dootask/app/Http/Controllers/Api/PublicController.php", + "name": "" + }, + { + "type": "post", + "url": "api/approve/export", + "title": "18. 导出数据", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "approve", + "name": "export", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ApproveController.php", + "groupTitle": "工作流" + }, + { + "type": "get", + "url": "api/approve/identitylinkHistory/findParticipant", + "title": "16. 查询流程实例的参与者(已结束)", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "approve", + "name": "identitylinkHistory__findParticipant", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ApproveController.php", + "groupTitle": "工作流" + }, + { + "type": "get", + "url": "api/approve/identitylink/findParticipant", + "title": "12. 查询流程实例的参与者(审批中)", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "approve", + "name": "identitylink__findParticipant", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ApproveController.php", + "groupTitle": "工作流" + }, + { + "type": "post", + "url": "api/approve/procHistory/findProcNotify", + "title": "15. 查询抄送我的流程(已结束)", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "approve", + "name": "procHistory__findProcNotify", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ApproveController.php", + "groupTitle": "工作流" + }, + { + "type": "post", + "url": "api/approve/procHistory/findTask", + "title": "13. 查询需要我审批的流程(已结束)", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "approve", + "name": "procHistory__findTask", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ApproveController.php", + "groupTitle": "工作流" + }, + { + "type": "post", + "url": "api/approve/procHistory/startByMyself", + "title": "14. 查询我启动的流程(已结束)", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "approve", + "name": "procHistory__startByMyself", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ApproveController.php", + "groupTitle": "工作流" + }, + { + "type": "post", + "url": "api/approve/procdef/all", + "title": "02. 查询流程定义", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "approve", + "name": "procdef__all", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ApproveController.php", + "groupTitle": "工作流" + }, + { + "type": "get", + "url": "api/approve/procdef/del", + "title": "03. 删除流程定义", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "approve", + "name": "procdef__del", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ApproveController.php", + "groupTitle": "工作流" + }, + { + "type": "post", + "url": "api/approve/process/addGlobalComment", + "title": "05. 添加全局评论", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "approve", + "name": "process__addGlobalComment", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ApproveController.php", + "groupTitle": "工作流" + }, + { + "type": "get", + "url": "api/approve/process/detail", + "title": "17. 根据流程ID查询流程详情", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "approve", + "name": "process__detail", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ApproveController.php", + "groupTitle": "工作流" + }, + { + "type": "post", + "url": "api/approve/process/findProcNotify", + "title": "11. 查询抄送我的流程(审批中)", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "approve", + "name": "process__findProcNotify", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ApproveController.php", + "groupTitle": "工作流" + }, + { + "type": "post", + "url": "api/approve/process/findTask", + "title": "08. 查询需要我审批的流程(审批中)", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "approve", + "name": "process__findTask", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ApproveController.php", + "groupTitle": "工作流" + }, + { + "type": "post", + "url": "api/approve/process/start", + "title": "04. 启动流程(审批中)", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "approve", + "name": "process__start", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ApproveController.php", + "groupTitle": "工作流" + }, + { + "type": "post", + "url": "api/approve/process/startByMyself", + "title": "10. 查询我启动的流程(审批中)", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "approve", + "name": "process__startByMyself", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ApproveController.php", + "groupTitle": "工作流" + }, + { + "type": "post", + "url": "api/approve/process/startByMyselfAll", + "title": "09. 查询我启动的流程(全部)", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "approve", + "name": "process__startByMyselfAll", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ApproveController.php", + "groupTitle": "工作流" + }, + { + "type": "post", + "url": "api/approve/task/complete", + "title": "06. 审批", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "approve", + "name": "task__complete", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ApproveController.php", + "groupTitle": "工作流" + }, + { + "type": "post", + "url": "api/approve/task/withdraw", + "title": "07. 撤回", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "approve", + "name": "task__withdraw", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ApproveController.php", + "groupTitle": "工作流" + }, + { + "type": "get", + "url": "api/dialog/group/add", + "title": "34. 新增群组", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "group__add", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "avatar", + "description": "

群头像

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "chat_name", + "description": "

群名称

" + }, + { + "group": "Parameter", + "type": "Array", + "optional": false, + "field": "userids", + "description": "

群成员,格式: [userid1, userid2, userid3]

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/group/adduser", + "title": "36. 添加群成员", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "group__adduser", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "dialog_id", + "description": "

会话ID

" + }, + { + "group": "Parameter", + "type": "Array", + "optional": false, + "field": "userids", + "description": "

新增的群成员,格式: [userid1, userid2, userid3]

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/group/deluser", + "title": "37. 移出(退出)群成员", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "group__adduser", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "dialog_id", + "description": "

会话ID

" + }, + { + "group": "Parameter", + "type": "Array", + "optional": true, + "field": "userids", + "description": "

移出的群成员,格式: [userid1, userid2, userid3]

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/group/disband", + "title": "39. 解散群组", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "group__disband", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "dialog_id", + "description": "

会话ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/group/edit", + "title": "35. 修改群组", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "group__edit", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "dialog_id", + "description": "

会话ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "avatar", + "description": "

群头像

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "chat_name", + "description": "

群名称

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "admin", + "description": "

系统管理员操作(1:只判断是不是系统管理员,否则判断是否群管理员)

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/group/searchuser", + "title": "40. 搜索个人群(仅限管理员)", + "description": "

需要token身份,用于创建部门搜索个人群组

", + "version": "1.0.0", + "group": "dialog", + "name": "group__searchuser", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "key", + "description": "

关键词

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/group/transfer", + "title": "38. 转让群组", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "group__transfer", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "dialog_id", + "description": "

会话ID

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "userid", + "description": "

新的群主

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/lists", + "title": "01. 对话列表", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "lists", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "timerange", + "description": "

时间范围(如:1678248944,1678248944)

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "page", + "description": "

当前页,默认:1

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "pagesize", + "description": "

每页显示数量,默认:50,最大:100

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/msg/color", + "title": "33. 设置颜色", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "msg__color", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "dialog_id", + "description": "

会话ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "color", + "description": "

颜色

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/msg/detail", + "title": "22. 消息详情", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "msg__detail", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "msg_id", + "description": "

消息ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "only_update_at", + "description": "

仅获取update_at字段

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/msg/done", + "title": "32. 完成待办", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "msg__done", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "id", + "description": "

待办数据ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/msg/download", + "title": "23. 文件下载", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "msg__download", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "msg_id", + "description": "

消息ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "down", + "description": "

直接下载

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/msg/emoji", + "title": "28. emoji回复", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "msg__emoji", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "msg_id", + "description": "

消息ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "symbol", + "description": "

回复或取消的emoji表情

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/msg/forward", + "title": "27. 转发消息给", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "msg__forward", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "msg_id", + "description": "

消息ID

" + }, + { + "group": "Parameter", + "type": "Array", + "optional": false, + "field": "dialogids", + "description": "

转发给的对话ID

" + }, + { + "group": "Parameter", + "type": "Array", + "optional": false, + "field": "userids", + "description": "

转发给的成员ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/msg/list", + "title": "09. 获取消息列表", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "msg__list", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "dialog_id", + "description": "

对话ID

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "msg_id", + "description": "

消息ID

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "position_id", + "description": "

此消息ID前后的数据

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "prev_id", + "description": "

此消息ID之前的数据

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "next_id", + "description": "

此消息ID之后的数据

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "msg_type", + "description": "

消息类型

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "take", + "description": "

获取条数,默认:50,最大:100

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/msg/mark", + "title": "25. 消息标记操作", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "msg__mark", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "dialog_id", + "description": "

会话ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "type", + "description": "

类型

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "after_msg_id", + "description": "

仅标记已读指定之后(含)的消息

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/msg/one", + "title": "11. 获取单条消息", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "msg__one", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "msg_id", + "description": "

消息ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/msg/read", + "title": "12. 已读聊天消息", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "msg__read", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "id", + "description": "

消息ID(组)

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/msg/readlist", + "title": "21. 获取消息阅读情况", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "msg__readlist", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "msg_id", + "description": "

消息ID(需要是消息的发送人)

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/msg/search", + "title": "10. 搜索消息位置", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "msg__search", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "dialog_id", + "description": "

对话ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "key", + "description": "

搜索关键词

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "post", + "url": "api/dialog/msg/sendanon", + "title": "20. 发送匿名消息", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "msg__sendanon", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "userid", + "description": "

对方会员ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "text", + "description": "

消息内容

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "post", + "url": "api/dialog/msg/sendfile", + "title": "17. 文件上传", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "msg__sendfile", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "dialog_id", + "description": "

对话ID

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "reply_id", + "description": "

回复ID

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "image_attachment", + "description": "

图片是否也存到附件

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "filename", + "description": "

post-文件名称

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "image64", + "description": "

post-base64图片(二选一)

" + }, + { + "group": "Parameter", + "type": "File", + "optional": true, + "field": "files", + "description": "

post-文件对象(二选一)

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "post", + "url": "api/dialog/msg/sendfiles", + "title": "18. 群发文件上传", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "msg__sendfile", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "user_ids", + "description": "

用户ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "dialog_ids", + "description": "

对话ID(user_ids 二选一)

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "reply_id", + "description": "

回复ID

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "image_attachment", + "description": "

图片是否也存到附件

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "filename", + "description": "

post-文件名称

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "image64", + "description": "

post-base64图片(二选一)

" + }, + { + "group": "Parameter", + "type": "File", + "optional": true, + "field": "files", + "description": "

post-文件对象(二选一)

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/msg/sendfileid", + "title": "19. 通过文件ID发送文件", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "msg__sendfileid", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "file_id", + "description": "

消息ID

" + }, + { + "group": "Parameter", + "type": "Array", + "optional": false, + "field": "dialogids", + "description": "

转发给的对话ID

" + }, + { + "group": "Parameter", + "type": "Array", + "optional": false, + "field": "userids", + "description": "

转发给的成员ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "post", + "url": "api/dialog/msg/sendrecord", + "title": "16. 发送语音", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "msg__sendrecord", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "dialog_id", + "description": "

对话ID

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "reply_id", + "description": "

回复ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "base64", + "description": "

语音base64

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "duration", + "description": "

语音时长(毫秒)

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "post", + "url": "api/dialog/msg/sendtext", + "title": "15. 发送消息", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "msg__sendtext", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "dialog_id", + "description": "

对话ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "text", + "description": "

消息内容

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "text_type", + "description": "

消息类型

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "update_id", + "description": "

更新消息ID(优先大于 reply_id)

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "update_mark", + "description": "

是否更新标记

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "reply_id", + "description": "

回复ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "silence", + "description": "

是否静默发送

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/msg/silence", + "title": "26. 消息免打扰", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "msg__silence", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "dialog_id", + "description": "

会话ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "type", + "description": "

类型

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "post", + "url": "api/dialog/msg/stream", + "title": "14. 通知成员监听消息", + "description": "

通知指定会员EventSource监听流动消息

", + "version": "1.0.0", + "group": "dialog", + "name": "msg__stream", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "dialog_id", + "description": "

对话ID

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "userid", + "description": "

通知会员ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "stream_url", + "description": "

流动消息地址

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/msg/tag", + "title": "29. 标注/取消标注", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "msg__tag", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "msg_id", + "description": "

消息ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/msg/todo", + "title": "30. 设待办/取消待办", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "msg__todo", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "msg_id", + "description": "

消息ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "type", + "description": "

设待办对象

" + }, + { + "group": "Parameter", + "type": "Array", + "optional": false, + "field": "userids", + "description": "

会员ID组(type=user有效,格式: [userid1, userid2, userid3])

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/msg/todolist", + "title": "31. 获取消息待办情况", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "msg__todolist", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "msg_id", + "description": "

消息ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/msg/unread", + "title": "13. 获取未读消息数据", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "msg__unread", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "dialog_id", + "description": "

对话ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + }, + "examples": [ + { + "title": "data:", + "content": "{\n \"id\": 43,\n \"unread\": 308,\n \"mention\": 11,\n \"user_at\": \"2020-12-12 00:00:00.000\",\n \"user_ms\": 1677558147167,\n}", + "type": "json" + } + ] + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/msg/withdraw", + "title": "24. 聊天消息撤回", + "description": "

消息撤回限制24小时内,需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "msg__withdraw", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "msg_id", + "description": "

消息ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "post", + "url": "api/dialog/okr/add", + "title": "41. 创建OKR评论会话", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "okr__add", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "name", + "description": "

标题

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "link_id", + "description": "

关联id

" + }, + { + "group": "Parameter", + "type": "Array", + "optional": false, + "field": "userids", + "description": "

群成员,格式: [userid1, userid2, userid3]

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "post", + "url": "api/dialog/okr/push", + "title": "42. 推送OKR相关信息", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "okr__push", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "text", + "description": "

发送内容

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "userid", + "description": "

成员ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/one", + "title": "03. 获取单个会话信息", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "one", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "dialog_id", + "description": "

对话ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/open/user", + "title": "08. 打开会话", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "open__user", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "userid", + "description": "

对话会员ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/search", + "title": "02. 搜索会话", + "description": "

根据消息关键词搜索相关会话,需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "search", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "key", + "description": "

消息关键词

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/tel", + "title": "07. 获取对方联系电话", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "tel", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "dialog_id", + "description": "

会话ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/todo", + "title": "05. 获取会话待办", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "todo", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "dialog_id", + "description": "

会话ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/top", + "title": "06. 会话置顶", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "top", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "dialog_id", + "description": "

会话ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/dialog/user", + "title": "04. 获取会话成员", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "dialog", + "name": "user", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "dialog_id", + "description": "

会话ID

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "getuser", + "description": "

获取会员详情(1: 返回会员昵称、邮箱等基本信息,0: 默认不返回)

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/DialogController.php", + "groupTitle": "对话" + }, + { + "type": "get", + "url": "api/file/add", + "title": "04. 添加、修改文件(夹)", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "file", + "name": "add", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "name", + "description": "

项目名称

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "type", + "description": "

文件类型

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "id", + "description": "

文件ID(赋值修改文件名称)

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "pid", + "description": "

父级ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/FileController.php", + "groupTitle": "文件" + }, + { + "type": "get", + "url": "api/file/content", + "title": "08. 获取文件内容", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "file", + "name": "content", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number|String", + "optional": false, + "field": "id", + "description": "" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "only_update_at", + "description": "

仅获取update_at字段

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "down", + "description": "

直接下载

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "history_id", + "description": "

读取历史记录ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/FileController.php", + "groupTitle": "文件" + }, + { + "type": "get", + "url": "api/file/content/history", + "title": "13. 获取内容历史", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "file", + "name": "content__history", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "id", + "description": "

文件ID

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "page", + "description": "

当前页,默认:1

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "pagesize", + "description": "

每页显示数量,默认:20,最大:100

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/FileController.php", + "groupTitle": "文件" + }, + { + "type": "get", + "url": "api/file/content/office", + "title": "11. 保存文件内容(office)", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "file", + "name": "content__office", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "id", + "description": "

文件ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/FileController.php", + "groupTitle": "文件" + }, + { + "type": "get", + "url": "api/file/content/restore", + "title": "14. 恢复文件历史", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "file", + "name": "content__restore", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "id", + "description": "

文件ID

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "history_id", + "description": "

历史数据ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/FileController.php", + "groupTitle": "文件" + }, + { + "type": "get", + "url": "api/file/content/save", + "title": "09. 保存文件内容", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "file", + "name": "content__save", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "id", + "description": "

文件ID

" + }, + { + "group": "Parameter", + "type": "Object", + "optional": true, + "field": "D", + "description": "

Request Payload 提交

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/FileController.php", + "groupTitle": "文件" + }, + { + "type": "get", + "url": "api/file/content/upload", + "title": "12. 保存文件内容(上传文件)", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "file", + "name": "content__upload", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "pid", + "description": "

父级ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "files", + "description": "

文件名

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/FileController.php", + "groupTitle": "文件" + }, + { + "type": "get", + "url": "api/file/copy", + "title": "05. 复制文件(夹)", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "file", + "name": "copy", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "id", + "description": "

文件ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/FileController.php", + "groupTitle": "文件" + }, + { + "type": "get", + "url": "api/file/download/confirm", + "title": "20. 确认下载", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "file", + "name": "download__confirm", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "name", + "description": "

下载文件名

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/FileController.php", + "groupTitle": "文件" + }, + { + "type": "get", + "url": "api/file/download/pack", + "title": "19. 打包文件", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "file", + "name": "download__pack", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Array", + "optional": true, + "field": "ids", + "description": "

文件ID,格式: [id, id2, id3]

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "name", + "description": "

下载文件名

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/FileController.php", + "groupTitle": "文件" + }, + { + "type": "get", + "url": "api/file/link", + "title": "18. 获取链接", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "file", + "name": "link", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "id", + "description": "

文件ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "refresh", + "description": "

刷新链接

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/FileController.php", + "groupTitle": "文件" + }, + { + "type": "get", + "url": "api/file/lists", + "title": "01. 获取文件列表", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "file", + "name": "lists", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "pid", + "description": "

父级ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/FileController.php", + "groupTitle": "文件" + }, + { + "type": "get", + "url": "api/file/move", + "title": "06. 移动文件(夹)", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "file", + "name": "move", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Numbers", + "optional": false, + "field": "ids", + "description": "

文件ID(格式:[id1, id2])

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "pid", + "description": "

移动到的文件夹ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/FileController.php", + "groupTitle": "文件" + }, + { + "type": "get", + "url": "api/file/office/token", + "title": "10. 获取token", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "file", + "name": "office__token", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "array", + "optional": false, + "field": "config", + "description": "" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/FileController.php", + "groupTitle": "文件" + }, + { + "type": "get", + "url": "api/file/one", + "title": "02. 获取单条数据", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "file", + "name": "one", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number|String", + "optional": false, + "field": "id", + "description": "" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/FileController.php", + "groupTitle": "文件" + }, + { + "type": "get", + "url": "api/file/remove", + "title": "07. 删除文件(夹)", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "file", + "name": "remove", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Numbers", + "optional": false, + "field": "ids", + "description": "

文件ID(格式:[id1, id2])

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/FileController.php", + "groupTitle": "文件" + }, + { + "type": "get", + "url": "api/file/search", + "title": "03. 搜索文件列表", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "file", + "name": "search", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "link", + "description": "

通过分享地址搜索(如:https://t.hitosea.com/single/file/ODcwOCwzOSxpa0JBS2lmVQ==)

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "key", + "description": "

关键词

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/FileController.php", + "groupTitle": "文件" + }, + { + "type": "get", + "url": "api/file/share", + "title": "15. 获取共享信息", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "file", + "name": "share", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "id", + "description": "

文件ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/FileController.php", + "groupTitle": "文件" + }, + { + "type": "get", + "url": "api/file/share/out", + "title": "17. 退出共享", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "file", + "name": "share__out", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "id", + "description": "

文件ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/FileController.php", + "groupTitle": "文件" + }, + { + "type": "get", + "url": "api/file/share/update", + "title": "16. 设置共享", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "file", + "name": "share__update", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "id", + "description": "

文件ID

" + }, + { + "group": "Parameter", + "type": "Array", + "optional": true, + "field": "userids", + "description": "

共享成员,格式: [userid1, userid2, userid3]

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "permission", + "description": "

共享方式

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "force", + "description": "

设置共享时是否忽略提醒

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/FileController.php", + "groupTitle": "文件" + }, + { + "type": "get", + "url": "api/project/add", + "title": "03. 添加项目", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "project", + "name": "add", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "name", + "description": "

项目名称

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "desc", + "description": "

项目介绍

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "columns", + "description": "

列表,格式:列表名称1,列表名称2

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "flow", + "description": "

开启流程

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "personal", + "description": "

个人项目,注册成功时创建(仅支持创建一个个人项目)

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/archived", + "title": "12. 归档项目", + "description": "

需要token身份(限:项目负责人)

", + "version": "1.0.0", + "group": "project", + "name": "archived", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "project_id", + "description": "

项目ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "type", + "description": "

类型

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/column/add", + "title": "15. 添加任务列表", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "project", + "name": "column__add", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "project_id", + "description": "

项目ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "name", + "description": "

列表名称

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/column/lists", + "title": "14. 获取任务列表", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "project", + "name": "column__lists", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "project_id", + "description": "

项目ID

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "page", + "description": "

当前页,默认:1

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "pagesize", + "description": "

每页显示数量,默认:100,最大:200

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/column/one", + "title": "18. 获取任务列详细", + "description": "

需要token身份(限:项目负责人)

", + "version": "1.0.0", + "group": "project", + "name": "column__one", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "column_id", + "description": "

列表ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "deleted", + "description": "

是否读取已删除

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/column/remove", + "title": "17. 删除任务列表", + "description": "

需要token身份(限:项目负责人)

", + "version": "1.0.0", + "group": "project", + "name": "column__remove", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "column_id", + "description": "

列表ID(留空为添加列表)

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/column/update", + "title": "16. 修改任务列表", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "project", + "name": "column__update", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "column_id", + "description": "

列表ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "name", + "description": "

列表名称

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "color", + "description": "

颜色

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/exit", + "title": "11. 退出项目", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "project", + "name": "exit", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "project_id", + "description": "

项目ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/flow/delete", + "title": "41. 删除工作流", + "description": "

需要token身份(限:项目负责人)

", + "version": "1.0.0", + "group": "project", + "name": "flow__delete", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "project_id", + "description": "

项目ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/flow/list", + "title": "39. 工作流列表", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "project", + "name": "flow__list", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "project_id", + "description": "

项目ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "post", + "url": "api/project/flow/save", + "title": "40. 保存工作流", + "description": "

需要token身份(限:项目负责人)

", + "version": "1.0.0", + "group": "project", + "name": "flow__save", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "project_id", + "description": "

项目ID

" + }, + { + "group": "Parameter", + "type": "Array", + "optional": false, + "field": "flows", + "description": "

工作流数据

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/invite", + "title": "06. 获取邀请链接", + "description": "

需要token身份(限:项目负责人)

", + "version": "1.0.0", + "group": "project", + "name": "invite", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "project_id", + "description": "

项目ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "refresh", + "description": "

刷新链接

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/invite/info", + "title": "07. 通过邀请链接code获取项目信息", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "project", + "name": "invite__info", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "code", + "description": "" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/invite/join", + "title": "08. 通过邀请链接code加入项目", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "project", + "name": "invite__join", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "code", + "description": "" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/lists", + "title": "01. 获取项目列表", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "project", + "name": "lists", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "all", + "description": "

是否查看所有项目(限制管理员)

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "type", + "description": "

项目类型

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "archived", + "description": "

归档状态

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "getcolumn", + "description": "

同时取列表

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "getuserid", + "description": "

同时取成员ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "getstatistics", + "description": "

同时取任务统计

" + }, + { + "group": "Parameter", + "type": "Object", + "optional": true, + "field": "keys", + "description": "

搜索条件

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "timerange", + "description": "

时间范围(如:1678248944,1678248944)

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "page", + "description": "

当前页,默认:1

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "pagesize", + "description": "

每页显示数量,默认:50,最大:100

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + }, + "examples": [ + { + "title": "sampleData:", + "content": "{\n \"data\": [\n {\n \"id\": 7,\n \"name\": \"🏢 产品官网项目\",\n \"desc\": \"设置各小组成员的工作列表,各自领取或领导分配任务,将做好的任务分期归档,方便复盘!\",\n \"userid\": 1,\n \"dialog_id\": 15,\n \"archived_at\": null,\n \"archived_userid\": 0,\n \"created_at\": \"2022-01-02 06:23:15\",\n \"updated_at\": \"2022-01-02 07:12:33\",\n\n \"owner\": 1, // 是否项目负责人\n \"owner_userid\": 1, // 项目负责人ID\n\n \"task_num\": 9,\n \"task_complete\": 0,\n \"task_percent\": 0,\n \"task_my_num\": 8,\n \"task_my_complete\": 0,\n \"task_my_percent\": 0,\n },\n ],\n \"current_page\": 1, // 当前页数\n \"last_page\": 1, // 下一页数\n \"total\": 6, // 总计数(当前查询条件)\n \"total_all\": 6 // 总计数(全部)\n}", + "type": "json" + } + ] + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/log/lists", + "title": "42. 获取项目、任务日志", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "project", + "name": "log__lists", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "project_id", + "description": "

项目ID

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "task_id", + "description": "

任务ID(与 项目ID 二选一,任务ID优先)

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "page", + "description": "

当前页,默认:1

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "pagesize", + "description": "

每页显示数量,默认:20,最大:100

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/one", + "title": "02. 获取一个项目信息", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "project", + "name": "one", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "project_id", + "description": "

项目ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + }, + "examples": [ + { + "title": "sampleData:", + "content": "{\n \"id\": 7,\n \"name\": \"🏢 产品官网项目\",\n \"desc\": \"设置各小组成员的工作列表,各自领取或领导分配任务,将做好的任务分期归档,方便复盘!\",\n \"userid\": 1,\n \"dialog_id\": 15,\n \"archived_at\": null,\n \"archived_userid\": 0,\n \"created_at\": \"2022-01-02 06:23:15\",\n \"updated_at\": \"2022-01-02 07:12:33\",\n\n \"owner\": 1, // 是否项目负责人\n \"owner_userid\": 1, // 项目负责人ID\n\n \"project_user\": [ // 项目成员\n {\n \"id\": 2,\n \"project_id\": 2,\n \"userid\": 1,\n \"owner\": 1,\n \"created_at\": \"2022-01-02 00:55:32\",\n \"updated_at\": \"2022-01-02 00:55:32\"\n }\n ],\n\n \"task_num\": 9,\n \"task_complete\": 0,\n \"task_percent\": 0,\n \"task_my_num\": 8,\n \"task_my_complete\": 0,\n \"task_my_percent\": 0,\n}", + "type": "json" + } + ] + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/remove", + "title": "13. 删除项目", + "description": "

需要token身份(限:项目负责人)

", + "version": "1.0.0", + "group": "project", + "name": "remove", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "project_id", + "description": "

项目ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "post", + "url": "api/project/sort", + "title": "10. 排序任务", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "project", + "name": "sort", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "project_id", + "description": "

项目ID

" + }, + { + "group": "Parameter", + "type": "Object", + "optional": false, + "field": "sort", + "description": "

排序数据

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "only_column", + "description": "

仅更新列表

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "post", + "url": "api/project/task/add", + "title": "30. 添加任务", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "project", + "name": "task__add", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "project_id", + "description": "

项目ID

" + }, + { + "group": "Parameter", + "type": "mixed", + "optional": true, + "field": "column_id", + "description": "

列表ID,任意值自动创建,留空取第一个

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "name", + "description": "

任务描述

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "content", + "description": "

任务详情

" + }, + { + "group": "Parameter", + "type": "Array", + "optional": true, + "field": "times", + "description": "

计划时间(格式:开始时间,结束时间;如:2020-01-01 00:00,2020-01-01 23:59)

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "owner", + "description": "

负责人

" + }, + { + "group": "Parameter", + "type": "Array", + "optional": true, + "field": "subtasks", + "description": "

子任务(格式:[{name,owner,times}])

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "top", + "description": "

添加的任务排到列表最前面

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/task/addsub", + "title": "31. 添加子任务", + "description": "

需要token身份(限:项目、任务负责人)

", + "version": "1.0.0", + "group": "project", + "name": "task__addsub", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "task_id", + "description": "

任务ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "name", + "description": "

任务描述

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/task/archived", + "title": "34. 归档任务", + "description": "

需要token身份(限:项目、任务负责人)

", + "version": "1.0.0", + "group": "project", + "name": "task__archived", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "task_id", + "description": "

任务ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "type", + "description": "

类型

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/task/content", + "title": "25. 获取任务详细描述", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "project", + "name": "task__content", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "task_id", + "description": "

任务ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/task/dialog", + "title": "33. 创建/获取聊天室", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "project", + "name": "task__dialog", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "task_id", + "description": "

任务ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/task/down", + "title": "23. 下载导出的任务", + "version": "1.0.0", + "group": "project", + "name": "task__down", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "key", + "description": "

通过export接口得到的下载钥匙

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "File", + "optional": false, + "field": "data", + "description": "

返回数据(直接下载文件)

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/task/easylists", + "title": "20. 任务列表-简单的", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "project", + "name": "task__easylists", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "taskid", + "description": "

排除的任务ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "userid", + "description": "

用户ID(如:1,2)

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "timerange", + "description": "

时间范围(如:2022-03-01 12:12:12,2022-05-01 12:12:12)

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/task/export", + "title": "21. 导出任务(限管理员)", + "description": "

导出指定范围任务(已完成、未完成、已归档),返回下载地址,需要token身份

", + "version": "1.0.0", + "group": "project", + "name": "task__export", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Array", + "optional": true, + "field": "userid", + "description": "

指定会员,如:[1, 2]

" + }, + { + "group": "Parameter", + "type": "Array", + "optional": true, + "field": "time", + "description": "

指定时间范围,如:['2020-12-12', '2020-12-30']

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "type", + "description": "" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/task/exportoverdue", + "title": "22. 导出超期任务(限管理员)", + "description": "

导出指定范围任务(已完成、未完成、已归档),返回下载地址,需要token身份

", + "version": "1.0.0", + "group": "project", + "name": "task__exportoverdue", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/task/filedelete", + "title": "27. 删除任务文件", + "description": "

需要token身份(限:项目、任务负责人)

", + "version": "1.0.0", + "group": "project", + "name": "task__filedelete", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "file_id", + "description": "

文件ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/task/filedetail", + "title": "28. 获取任务文件详情", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "project", + "name": "task__filedetail", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "file_id", + "description": "

文件ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "only_update_at", + "description": "

仅获取update_at字段

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/task/filedown", + "title": "29. 下载任务文件", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "project", + "name": "task__filedown", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "file_id", + "description": "

文件ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "down", + "description": "

直接下载

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/task/files", + "title": "26. 获取任务文件列表", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "project", + "name": "task__files", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "task_id", + "description": "

任务ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/task/flow", + "title": "37. 任务工作流信息", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "project", + "name": "task__flow", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "task_id", + "description": "

任务ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/task/lists", + "title": "19. 任务列表", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "project", + "name": "task__lists", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Object", + "optional": true, + "field": "keys", + "description": "

搜索条件

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "project_id", + "description": "

项目ID

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "parent_id", + "description": "

主任务ID(project_id && parent_id ≤ 0 时 仅查询自己参与的任务)

" + }, + { + "group": "Parameter", + "type": "Array", + "optional": true, + "field": "time", + "description": "

指定时间范围,如:['2020-12-12', '2020-12-30']

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "timerange", + "description": "

时间范围(如:1678248944,1678248944)

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "archived", + "description": "

归档状态

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "deleted", + "description": "

是否读取已删除

" + }, + { + "group": "Parameter", + "type": "Object", + "optional": true, + "field": "sorts", + "description": "

排序方式

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/task/move", + "title": "38. 任务移动", + "description": "

需要token身份(限:项目、任务负责人)

", + "version": "1.0.0", + "group": "project", + "name": "task__move", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "task_id", + "description": "

任务ID

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "project_id", + "description": "

项目ID

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "column_id", + "description": "

列ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/task/one", + "title": "24. 获取单个任务信息", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "project", + "name": "task__one", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "task_id", + "description": "

任务ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "archived", + "description": "

归档状态

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/task/remove", + "title": "35. 删除任务", + "description": "

需要token身份(限:项目、任务负责人)

", + "version": "1.0.0", + "group": "project", + "name": "task__remove", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "task_id", + "description": "

任务ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "type", + "description": "" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/task/resetfromlog", + "title": "36. 根据日志重置任务", + "description": "

需要token身份(限:项目、任务负责人)

", + "version": "1.0.0", + "group": "project", + "name": "task__resetfromlog", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "task_id", + "description": "

任务ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "post", + "url": "api/project/task/update", + "title": "32. 修改任务、子任务", + "description": "

需要token身份(限:项目、任务负责人)

", + "version": "1.0.0", + "group": "project", + "name": "task__update", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "task_id", + "description": "

任务ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "name", + "description": "

任务描述

" + }, + { + "group": "Parameter", + "type": "Array", + "optional": true, + "field": "times", + "description": "

计划时间(格式:开始时间,结束时间;如:2020-01-01 00:00,2020-01-01 23:59)

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "loop", + "description": "

重复周期,数字代表天数(子任务不支持)

" + }, + { + "group": "Parameter", + "type": "Array", + "optional": true, + "field": "owner", + "description": "

修改负责人

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "content", + "description": "

任务详情(子任务不支持)

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "color", + "description": "

背景色(子任务不支持)

" + }, + { + "group": "Parameter", + "type": "Array", + "optional": true, + "field": "assist", + "description": "

修改协助人员(子任务不支持)

" + }, + { + "group": "Parameter", + "type": "Array", + "optional": true, + "field": "visibility_appointor", + "description": "

修改可见性人员

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "p_level", + "description": "

优先级相关(子任务不支持)

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "p_name", + "description": "

优先级相关(子任务不支持)

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "p_color", + "description": "

优先级相关(子任务不支持)

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "flow_item_id", + "description": "

任务状态,工作流状态ID

" + }, + { + "group": "Parameter", + "type": "String|false", + "optional": true, + "field": "complete_at", + "description": "

完成时间(如:2020-01-01 00:00,false表示未完成)

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/top", + "title": "43. 项目置顶", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "project", + "name": "top", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "project_id", + "description": "

项目ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/transfer", + "title": "09. 移交项目", + "description": "

需要token身份(限:项目负责人)

", + "version": "1.0.0", + "group": "project", + "name": "transfer", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "project_id", + "description": "

项目ID

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "owner_userid", + "description": "

新的项目负责人ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/update", + "title": "04. 修改项目", + "description": "

需要token身份(限:项目负责人)

", + "version": "1.0.0", + "group": "project", + "name": "update", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "project_id", + "description": "

项目ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "name", + "description": "

项目名称

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "desc", + "description": "

项目介绍

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/project/user", + "title": "05. 修改项目成员", + "description": "

需要token身份(限:项目负责人)

", + "version": "1.0.0", + "group": "project", + "name": "user", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "project_id", + "description": "

项目ID

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "userid", + "description": "

成员ID 或 成员ID组

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ProjectController.php", + "groupTitle": "项目" + }, + { + "type": "get", + "url": "api/report/detail", + "title": "05. 报告详情", + "version": "1.0.0", + "group": "report", + "name": "detail", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "id", + "description": "

报告id

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ReportController.php", + "groupTitle": "汇报" + }, + { + "type": "get", + "url": "api/report/last_submitter", + "title": "07. 获取最后一次提交的接收人", + "version": "1.0.0", + "group": "report", + "name": "last_submitter", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ReportController.php", + "groupTitle": "汇报" + }, + { + "type": "get", + "url": "api/report/mark", + "title": "06. 标记已读/未读", + "version": "1.0.0", + "group": "report", + "name": "mark", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "id", + "description": "

报告id(组)

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "action", + "description": "

操作

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ReportController.php", + "groupTitle": "汇报" + }, + { + "type": "get", + "url": "api/report/my", + "title": "01. 我发送的汇报", + "version": "1.0.0", + "group": "report", + "name": "my", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Object", + "optional": true, + "field": "keys", + "description": "

搜索条件

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "page", + "description": "

当前页,默认:1

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "pagesize", + "description": "

每页显示数量,默认:20,最大:50

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ReportController.php", + "groupTitle": "汇报" + }, + { + "type": "get", + "url": "api/report/read", + "title": "09. 标记汇报已读,可批量", + "version": "1.0.0", + "group": "report", + "name": "read", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "ids", + "description": "

报告id

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ReportController.php", + "groupTitle": "汇报" + }, + { + "type": "get", + "url": "api/report/receive", + "title": "02. 我接收的汇报", + "version": "1.0.0", + "group": "report", + "name": "receive", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Object", + "optional": true, + "field": "keys", + "description": "

搜索条件

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "page", + "description": "

当前页,默认:1

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "pagesize", + "description": "

每页显示数量,默认:20,最大:50

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ReportController.php", + "groupTitle": "汇报" + }, + { + "type": "get", + "url": "api/report/store", + "title": "03. 保存并发送工作汇报", + "version": "1.0.0", + "group": "report", + "name": "store", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "id", + "description": "

汇报ID,0为新建

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "sign", + "description": "

唯一签名,通过[api/report/template]接口返回

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "title", + "description": "

汇报标题

" + }, + { + "group": "Parameter", + "type": "Array", + "optional": false, + "field": "type", + "description": "

汇报类型,weekly:周报,daily:日报

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "content", + "description": "

内容

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "receive", + "description": "

汇报对象

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "offset", + "description": "

时间偏移量

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ReportController.php", + "groupTitle": "汇报" + }, + { + "type": "get", + "url": "api/report/template", + "title": "04. 生成汇报模板", + "version": "1.0.0", + "group": "report", + "name": "template", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Array", + "optional": true, + "field": "type", + "description": "

汇报类型,weekly:周报,daily:日报

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "offset", + "description": "

偏移量

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "date", + "description": "

时间

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ReportController.php", + "groupTitle": "汇报" + }, + { + "type": "get", + "url": "api/report/unread", + "title": "08. 获取未读", + "version": "1.0.0", + "group": "report", + "name": "unread", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ReportController.php", + "groupTitle": "汇报" + }, + { + "type": "get", + "url": "api/system/checkin/down", + "title": "23. 下载导出的签到数据", + "version": "1.0.0", + "group": "system", + "name": "checkin__down", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "key", + "description": "

通过export接口得到的下载钥匙

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "File", + "optional": false, + "field": "data", + "description": "

返回数据(直接下载文件)

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/SystemController.php", + "groupTitle": "系统" + }, + { + "type": "get", + "url": "api/system/checkin/export", + "title": "22. 导出签到数据(限管理员)", + "version": "1.0.0", + "group": "system", + "name": "checkin__export", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Array", + "optional": true, + "field": "userid", + "description": "

指定会员,如:[1, 2]

" + }, + { + "group": "Parameter", + "type": "Array", + "optional": true, + "field": "date", + "description": "

指定日期范围,如:['2020-12-12', '2020-12-30']

" + }, + { + "group": "Parameter", + "type": "Array", + "optional": true, + "field": "time", + "description": "

指定时间范围,如:['09:00', '18:00']

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/SystemController.php", + "groupTitle": "系统" + }, + { + "type": "post", + "url": "api/system/column/template", + "title": "10. 创建项目模板", + "description": "

获取创建项目模板、保存创建项目模板

", + "version": "1.0.0", + "group": "system", + "name": "column__template", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "type", + "description": "" + }, + { + "group": "Parameter", + "type": "Array", + "optional": false, + "field": "list", + "description": "

优先级数据,格式:[{name,columns}]

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/SystemController.php", + "groupTitle": "系统" + }, + { + "type": "get", + "url": "api/system/demo", + "title": "08. 获取演示帐号", + "version": "1.0.0", + "group": "system", + "name": "demo", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/SystemController.php", + "groupTitle": "系统" + }, + { + "type": "get", + "url": "api/approve/down", + "title": "19. 下载导出的审批数据", + "version": "1.0.0", + "group": "system", + "name": "down", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "key", + "description": "

通过export接口得到的下载钥匙

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "File", + "optional": false, + "field": "data", + "description": "

返回数据(直接下载文件)

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ApproveController.php", + "groupTitle": "系统" + }, + { + "type": "get", + "url": "api/system/email/check", + "title": "21. 邮件发送测试(限管理员)", + "description": "

测试配置邮箱是否能发送邮件

", + "version": "1.0.0", + "group": "system", + "name": "email__check", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/SystemController.php", + "groupTitle": "系统" + }, + { + "type": "post", + "url": "api/system/fileupload", + "title": "19. 上传文件", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "system", + "name": "fileupload", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "image64", + "description": "

图片base64

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "filename", + "description": "

文件名

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "files", + "description": "

文件名

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/SystemController.php", + "groupTitle": "系统" + }, + { + "type": "get", + "url": "api/system/get/cnip", + "title": "14. 是否中国IP地址", + "version": "1.0.0", + "group": "system", + "name": "get__cnip", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "ip", + "description": "

IP值

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/SystemController.php", + "groupTitle": "系统" + }, + { + "type": "get", + "url": "api/system/get/info", + "title": "12. 获取终端详细信息", + "version": "1.0.0", + "group": "system", + "name": "get__info", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "key", + "description": "

key值

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/SystemController.php", + "groupTitle": "系统" + }, + { + "type": "get", + "url": "api/system/get/ip", + "title": "13. 获取IP地址", + "version": "1.0.0", + "group": "system", + "name": "get__ip", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/SystemController.php", + "groupTitle": "系统" + }, + { + "type": "get", + "url": "api/system/get/ipgcj02", + "title": "15. 获取IP地址经纬度", + "version": "1.0.0", + "group": "system", + "name": "get__ipgcj02", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "ip", + "description": "

IP值

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/SystemController.php", + "groupTitle": "系统" + }, + { + "type": "get", + "url": "api/system/get/ipinfo", + "title": "16. 获取IP地址详细信息", + "version": "1.0.0", + "group": "system", + "name": "get__ipinfo", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "ip", + "description": "

IP值

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/SystemController.php", + "groupTitle": "系统" + }, + { + "type": "get", + "url": "api/system/get/updatelog", + "title": "20. 获取更新日志", + "description": "

获取更新日志

", + "version": "1.0.0", + "group": "system", + "name": "get__updatelog", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/SystemController.php", + "groupTitle": "系统" + }, + { + "type": "post", + "url": "api/system/imgupload", + "title": "17. 上传图片", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "system", + "name": "imgupload", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "File", + "optional": false, + "field": "image", + "description": "

post-图片对象

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "image64", + "description": "

post-图片base64(与'image'二选一)

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "filename", + "description": "

post-文件名

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "width", + "description": "

压缩图片宽(默认0)

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "height", + "description": "

压缩图片高(默认0)

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "whcut", + "description": "

压缩方式

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/SystemController.php", + "groupTitle": "系统" + }, + { + "type": "get", + "url": "api/system/get/imgview", + "title": "18. 浏览图片空间", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "system", + "name": "imgview", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "path", + "description": "

路径

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/SystemController.php", + "groupTitle": "系统" + }, + { + "type": "post", + "url": "api/system/license", + "title": "11. License", + "description": "

获取License信息、保存License(限管理员)

", + "version": "1.0.0", + "group": "system", + "name": "license", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "type", + "description": "" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "license", + "description": "

License 原文

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/SystemController.php", + "groupTitle": "系统" + }, + { + "type": "post", + "url": "api/system/priority", + "title": "09. 任务优先级", + "description": "

获取任务优先级、保存任务优先级

", + "version": "1.0.0", + "group": "system", + "name": "priority", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "type", + "description": "" + }, + { + "group": "Parameter", + "type": "Array", + "optional": false, + "field": "list", + "description": "

优先级数据,格式:[{name,color,days,priority}]

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/SystemController.php", + "groupTitle": "系统" + }, + { + "type": "get", + "url": "api/system/setting", + "title": "01. 获取设置、保存设置", + "version": "1.0.0", + "group": "system", + "name": "setting", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "type", + "description": "" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/SystemController.php", + "groupTitle": "系统" + }, + { + "type": "get", + "url": "api/system/setting/aibot", + "title": "04. 获取会议设置、保存AI机器人设置(限管理员)", + "version": "1.0.0", + "group": "system", + "name": "setting__aibot", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "type", + "description": "" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/SystemController.php", + "groupTitle": "系统" + }, + { + "type": "get", + "url": "api/system/setting/apppush", + "title": "06. 获取APP推送设置、保存APP推送设置(限管理员)", + "version": "1.0.0", + "group": "system", + "name": "setting__apppush", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "type", + "description": "" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/SystemController.php", + "groupTitle": "系统" + }, + { + "type": "get", + "url": "api/system/setting/checkin", + "title": "05. 获取签到设置、保存签到设置(限管理员)", + "version": "1.0.0", + "group": "system", + "name": "setting__checkin", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "type", + "description": "" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/SystemController.php", + "groupTitle": "系统" + }, + { + "type": "get", + "url": "api/system/setting/email", + "title": "02. 获取邮箱设置、保存邮箱设置(限管理员)", + "version": "1.0.0", + "group": "system", + "name": "setting__email", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "type", + "description": "" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/SystemController.php", + "groupTitle": "系统" + }, + { + "type": "get", + "url": "api/system/setting/meeting", + "title": "03. 获取会议设置、保存会议设置(限管理员)", + "version": "1.0.0", + "group": "system", + "name": "setting__meeting", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "type", + "description": "" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/SystemController.php", + "groupTitle": "系统" + }, + { + "type": "get", + "url": "api/system/setting/thirdaccess", + "title": "07. 第三方帐号(限管理员)", + "version": "1.0.0", + "group": "system", + "name": "setting__thirdaccess", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "type", + "description": "" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/SystemController.php", + "groupTitle": "系统" + }, + { + "type": "get", + "url": "api/approve/user/status", + "title": "20. 获取用户审批状态", + "version": "1.0.0", + "group": "system", + "name": "user__status", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "userid", + "description": "" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ApproveController.php", + "groupTitle": "系统" + }, + { + "type": "get", + "url": "api/system/version", + "title": "24. 获取版本号", + "version": "1.0.0", + "group": "system", + "name": "version", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "version", + "description": "" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "publish", + "description": "" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/SystemController.php", + "groupTitle": "系统" + }, + { + "type": "get", + "url": "api/users/basic", + "title": "11. 获取指定会员基础信息", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "users", + "name": "basic", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "userid", + "description": "

会员ID(多个格式:jsonArray,一次最多50个)

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "post", + "url": "api/users/bot/edit", + "title": "32. 编辑机器人", + "description": "

需要token身份,编辑 我的机器人 或 管理员修改系统机器人 信息

", + "version": "1.0.0", + "group": "users", + "name": "bot__edit", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "id", + "description": "

机器人ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "name", + "description": "

机器人名称

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "avatar", + "description": "

机器人头像

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "clear_day", + "description": "

清理天数(仅 我的机器人)

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "webhook_url", + "description": "

Webhook地址(仅 我的机器人)

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/bot/info", + "title": "31. 机器人信息", + "description": "

需要token身份,获取我的机器人信息

", + "version": "1.0.0", + "group": "users", + "name": "bot__info", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "id", + "description": "

机器人ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/checkin/get", + "title": "26. 获取签到设置", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "users", + "name": "checkin__get", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/checkin/list", + "title": "28. 获取签到数据", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "users", + "name": "checkin__list", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "ym", + "description": "

年-月(如:2020-01)

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "before", + "description": "

取月份之前的数据(单位:月数,最大3)

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "post", + "url": "api/users/checkin/save", + "title": "27. 保存签到设置", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "users", + "name": "checkin__save", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Array", + "optional": false, + "field": "list", + "description": "

优先级数据,格式:[{mac,remark}]

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/delete/account", + "title": "22. 删除帐号", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "users", + "name": "delete__account", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "email", + "description": "

帐号邮箱

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "code", + "description": "

邮箱验证码

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "reason", + "description": "

注销理由

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "password", + "description": "

登录密码

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "type", + "description": "

类型

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/department/add", + "title": "24. 新建、修改部门(限管理员)", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "users", + "name": "department__add", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "id", + "description": "

部门id,留空为创建部门

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "name", + "description": "

部门名称

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "parent_id", + "description": "

上级部门ID

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "owner_userid", + "description": "

部门负责人ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "dialog_group", + "description": "

部门群(仅创建部门时有效)

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "dialog_useid", + "description": "

使用现有群ID(dialog_group=use时有效)

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/department/del", + "title": "25. 删除部门(限管理员)", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "users", + "name": "department__del", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "id", + "description": "

部门id

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/department/list", + "title": "23. 部门列表(限管理员)", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "users", + "name": "department__list", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/email/edit", + "title": "21. 修改邮箱", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "users", + "name": "edit__email", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "newEmail", + "description": "

新邮箱地址

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "code", + "description": "

邮箱验证码

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/editdata", + "title": "08. 修改自己的资料", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "users", + "name": "editdata", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Object", + "optional": true, + "field": "userimg", + "description": "

会员头像(地址)

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "tel", + "description": "

电话

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "nickname", + "description": "

昵称

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "profession", + "description": "

职位/职称

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据(同"获取我的信息"接口)

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/editpass", + "title": "09. 修改自己的密码", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "users", + "name": "editpass", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "oldpass", + "description": "

旧密码

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "newpass", + "description": "

新密码

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据(同"获取我的信息"接口)

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/email/send", + "title": "20. 发送邮箱验证码", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "users", + "name": "email__send", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "type", + "description": "

邮件类型

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "email", + "description": "

邮箱地址

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/email/verification", + "title": "14. 邮箱验证", + "description": "

不需要token身份

", + "version": "1.0.0", + "group": "users", + "name": "email__verification", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "code", + "description": "

验证参数

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/info", + "title": "07. 获取我的信息", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "users", + "name": "info", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + }, + "examples": [ + { + "title": "data:", + "content": "{\n \"userid\": 1,\n \"identity\": [ ],\n \"department\": [ ],\n \"az\": \"\",\n \"email\": \"admin@admin.com\",\n \"nickname\": \"admin\",\n \"userimg\": \"\",\n \"login_num\": 10,\n \"changepass\": 0,\n \"last_ip\": \"127.0.0.1\",\n \"last_at\": \"2021-06-01 12:00:00\",\n \"line_ip\": \"127.0.0.1\",\n \"line_at\": \"2021-06-01 12:00:00\",\n \"created_ip\": \"\",\n}", + "type": "json" + } + ] + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/key/client", + "title": "30. 客户端KEY", + "description": "

获取客户端KEY,用于加密数据发送给服务端

", + "version": "1.0.0", + "group": "users", + "name": "key__client", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "client_id", + "description": "

客户端ID(希望不变的,除非清除浏览器缓存或者卸载应用)

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/lists", + "title": "12. 会员列表(限管理员)", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "users", + "name": "lists", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Object", + "optional": true, + "field": "keys", + "description": "

搜索条件

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "get_checkin_mac", + "description": "

获取签到mac地址

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "page", + "description": "

当前页,默认:1

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "pagesize", + "description": "

每页显示数量,默认:20,最大:50

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/login", + "title": "01. 登录、注册", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "users", + "name": "login", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "type", + "description": "

类型

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "email", + "description": "

邮箱

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "password", + "description": "

密码

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "code", + "description": "

登录验证码

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "code_key", + "description": "

验证码通过key验证

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "invite", + "description": "

注册邀请码

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据(同"获取我的信息"接口)

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/login/codeimg", + "title": "04. 验证码图片", + "description": "

用于判断是否需要登录验证码

", + "version": "1.0.0", + "group": "users", + "name": "login__codeimg", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Image", + "optional": false, + "field": "data", + "description": "

返回数据(直接输出图片)

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/login/codejson", + "title": "05. 验证码json", + "description": "

用于判断是否需要登录验证码

", + "version": "1.0.0", + "group": "users", + "name": "login__codejson", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/login/needcode", + "title": "03. 是否需要验证码", + "description": "

用于判断是否需要登录验证码

", + "version": "1.0.0", + "group": "users", + "name": "login__needcode", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "email", + "description": "

用户名

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1需要、0不需要)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/login/qrcode", + "title": "02. 二维码登录", + "description": "

通过二维码code登录 (或:是否登录成功)

", + "version": "1.0.0", + "group": "users", + "name": "login__qrcode", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "type", + "description": "

类型

" + }, + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "code", + "description": "

二维码 code

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1需要、0不需要)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/meeting/invitation", + "title": "19. 【会议】发送邀请", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "users", + "name": "meeting__invitation", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "meetingid", + "description": "

频道ID(不是数字)

" + }, + { + "group": "Parameter", + "type": "Array", + "optional": false, + "field": "userids", + "description": "

邀请成员

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/meeting/link", + "title": "17. 【会议】获取分享链接", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "users", + "name": "meeting__link", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "meetingid", + "description": "

频道ID(不是数字)

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "sharekey", + "description": "

分享的key

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/meeting/open", + "title": "16. 【会议】创建会议、加入会议", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "users", + "name": "meeting__open", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "type", + "description": "

类型

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "meetingid", + "description": "

频道ID(不是数字)

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "name", + "description": "

会话ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "sharekey", + "description": "

分享的key

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "username", + "description": "

用户名称

" + }, + { + "group": "Parameter", + "type": "Array", + "optional": true, + "field": "userids", + "description": "

邀请成员

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/meeting/tourist", + "title": "18. 【会议】游客信息", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "users", + "name": "meeting__tourist", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "tourist_id", + "description": "

游客ID

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/operation", + "title": "13. 操作会员(限管理员)", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "users", + "name": "operation", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "userid", + "description": "

会员ID

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "type", + "description": "

操作

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "email", + "description": "

邮箱地址

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "tel", + "description": "

联系电话

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "password", + "description": "

新的密码

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "nickname", + "description": "

昵称

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "profession", + "description": "

职位

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "checkin_macs", + "description": "

自动签到mac地址

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "department", + "description": "

部门

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "disable_time", + "description": "

离职时间

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "transfer_userid", + "description": "

离职交接人

" + }, + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "delete_reason", + "description": "

删除原因

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/reg/needinvite", + "title": "06. 是否需要邀请码", + "description": "

用于判断注册是否需要邀请码

", + "version": "1.0.0", + "group": "users", + "name": "reg__needinvite", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/search", + "title": "10. 搜索会员列表", + "description": "

搜索会员列表

", + "version": "1.0.0", + "group": "users", + "name": "searchinfo", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "Object", + "optional": false, + "field": "keys", + "description": "

搜索条件

" + }, + { + "group": "Parameter", + "type": "Object", + "optional": false, + "field": "sorts", + "description": "

排序方式

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "updated_time", + "description": "

在这个时间戳之后更新的

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": false, + "field": "state", + "description": "

获取在线状态

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "take", + "description": "

获取数量,10-100

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "page", + "description": "

当前页,默认:1(赋值分页模式,take参数无效)

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "pagesize", + "description": "

每页显示数量,默认:10,最大:100

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/share/list", + "title": "33. 获取分享列表", + "version": "1.0.0", + "group": "users", + "name": "share__list", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "type", + "description": "

分享类型:file-文件,text-列表 默认file

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "pid", + "description": "

父级文件id,用于获取子目录和上传到指定目录的id

" + }, + { + "group": "Parameter", + "type": "Number", + "optional": true, + "field": "upload_file_id", + "description": "

上传文件id

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/socket/status", + "title": "29. 获取socket状态", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "users", + "name": "socket__status", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": true, + "field": "fd", + "description": "" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/users/umeng/alias", + "title": "15. 设置友盟别名", + "description": "

需要token身份

", + "version": "1.0.0", + "group": "users", + "name": "umeng__alias", + "parameter": { + "fields": { + "Parameter": [ + { + "group": "Parameter", + "type": "String", + "optional": false, + "field": "alias", + "description": "

别名

" + } + ] + } + }, + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "Number", + "optional": false, + "field": "ret", + "description": "

返回状态码(1正确、0错误)

" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "msg", + "description": "

返回信息(错误描述)

" + }, + { + "group": "Success 200", + "type": "Object", + "optional": false, + "field": "data", + "description": "

返回数据

" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/UsersController.php", + "groupTitle": "会员" + }, + { + "type": "get", + "url": "api/approve/verifyToken", + "title": "01. 验证APi登录", + "version": "1.0.0", + "group": "users", + "name": "verifyToken", + "success": { + "fields": { + "Success 200": [ + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "version", + "description": "" + }, + { + "group": "Success 200", + "type": "String", + "optional": false, + "field": "publish", + "description": "" + } + ] + } + }, + "filename": "app/Http/Controllers/Api/ApproveController.php", + "groupTitle": "会员" + } +] diff --git a/public/docs/api_project.js b/public/docs/api_project.js new file mode 100644 index 000000000..9fc877f39 --- /dev/null +++ b/public/docs/api_project.js @@ -0,0 +1,19 @@ +define({ + "name": "API", + "version": "1.0.0", + "description": "APP接口文档", + "title": "APP接口", + "url": "https://你的域名/", + "template": { + "withGenerator": false + }, + "sampleUrl": false, + "defaultVersion": "0.0.0", + "apidoc": "0.3.0", + "generator": { + "name": "apidoc", + "time": "2023-12-16T15:38:24.621Z", + "url": "https://apidocjs.com", + "version": "0.25.0" + } +}); diff --git a/public/docs/api_project.json b/public/docs/api_project.json new file mode 100644 index 000000000..fb263e686 --- /dev/null +++ b/public/docs/api_project.json @@ -0,0 +1,19 @@ +{ + "name": "API", + "version": "1.0.0", + "description": "APP接口文档", + "title": "APP接口", + "url": "https://你的域名/", + "template": { + "withGenerator": false + }, + "sampleUrl": false, + "defaultVersion": "0.0.0", + "apidoc": "0.3.0", + "generator": { + "name": "apidoc", + "time": "2023-12-16T15:38:24.621Z", + "url": "https://apidocjs.com", + "version": "0.25.0" + } +} diff --git a/public/docs/assets/main.bundle.js b/public/docs/assets/main.bundle.js index 7b15aae4a..7c4673d33 100644 --- a/public/docs/assets/main.bundle.js +++ b/public/docs/assets/main.bundle.js @@ -1,8 +1,8 @@ -(()=>{var Za={2988:()=>{+function(P){"use strict";var y=".dropdown-backdrop",o='[data-toggle="dropdown"]',h=function(l){P(l).on("click.bs.dropdown",this.toggle)};h.VERSION="3.4.1";function i(l){var s=l.attr("data-target");s||(s=l.attr("href"),s=s&&/#[A-Za-z]/.test(s)&&s.replace(/.*(?=#[^\s]*$)/,""));var u=s!=="#"?P(document).find(s):null;return u&&u.length?u:l.parent()}function r(l){l&&l.which===3||(P(y).remove(),P(o).each(function(){var s=P(this),u=i(s),g={relatedTarget:this};!u.hasClass("open")||l&&l.type=="click"&&/input|textarea/i.test(l.target.tagName)&&P.contains(u[0],l.target)||(u.trigger(l=P.Event("hide.bs.dropdown",g)),!l.isDefaultPrevented()&&(s.attr("aria-expanded","false"),u.removeClass("open").trigger(P.Event("hidden.bs.dropdown",g))))}))}h.prototype.toggle=function(l){var s=P(this);if(!s.is(".disabled, :disabled")){var u=i(s),g=u.hasClass("open");if(r(),!g){"ontouchstart"in document.documentElement&&!u.closest(".navbar-nav").length&&P(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(P(this)).on("click",r);var n={relatedTarget:this};if(u.trigger(l=P.Event("show.bs.dropdown",n)),l.isDefaultPrevented())return;s.trigger("focus").attr("aria-expanded","true"),u.toggleClass("open").trigger(P.Event("shown.bs.dropdown",n))}return!1}},h.prototype.keydown=function(l){if(!(!/(38|40|27|32)/.test(l.which)||/input|textarea/i.test(l.target.tagName))){var s=P(this);if(l.preventDefault(),l.stopPropagation(),!s.is(".disabled, :disabled")){var u=i(s),g=u.hasClass("open");if(!g&&l.which!=27||g&&l.which==27)return l.which==27&&u.find(o).trigger("focus"),s.trigger("click");var n=" li:not(.disabled):visible a",m=u.find(".dropdown-menu"+n);if(!!m.length){var f=m.index(l.target);l.which==38&&f>0&&f--,l.which==40&&f{+function(P){"use strict";var y=function(i,r){this.init("popover",i,r)};if(!P.fn.tooltip)throw new Error("Popover requires tooltip.js");y.VERSION="3.4.1",y.DEFAULTS=P.extend({},P.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),y.prototype=P.extend({},P.fn.tooltip.Constructor.prototype),y.prototype.constructor=y,y.prototype.getDefaults=function(){return y.DEFAULTS},y.prototype.setContent=function(){var i=this.tip(),r=this.getTitle(),p=this.getContent();if(this.options.html){var c=typeof p;this.options.sanitize&&(r=this.sanitizeHtml(r),c==="string"&&(p=this.sanitizeHtml(p))),i.find(".popover-title").html(r),i.find(".popover-content").children().detach().end()[c==="string"?"html":"append"](p)}else i.find(".popover-title").text(r),i.find(".popover-content").children().detach().end().text(p);i.removeClass("fade top bottom left right in"),i.find(".popover-title").html()||i.find(".popover-title").hide()},y.prototype.hasContent=function(){return this.getTitle()||this.getContent()},y.prototype.getContent=function(){var i=this.$element,r=this.options;return i.attr("data-content")||(typeof r.content=="function"?r.content.call(i[0]):r.content)},y.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};function o(i){return this.each(function(){var r=P(this),p=r.data("bs.popover"),c=typeof i=="object"&&i;!p&&/destroy|hide/.test(i)||(p||r.data("bs.popover",p=new y(this,c)),typeof i=="string"&&p[i]())})}var h=P.fn.popover;P.fn.popover=o,P.fn.popover.Constructor=y,P.fn.popover.noConflict=function(){return P.fn.popover=h,this}}(jQuery)},954:()=>{+function(P){"use strict";function y(i,r){this.$body=P(document.body),this.$scrollElement=P(i).is(document.body)?P(window):P(i),this.options=P.extend({},y.DEFAULTS,r),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",P.proxy(this.process,this)),this.refresh(),this.process()}y.VERSION="3.4.1",y.DEFAULTS={offset:10},y.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},y.prototype.refresh=function(){var i=this,r="offset",p=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),P.isWindow(this.$scrollElement[0])||(r="position",p=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var c=P(this),l=c.data("target")||c.attr("href"),s=/^#./.test(l)&&P(l);return s&&s.length&&s.is(":visible")&&[[s[r]().top+p,l]]||null}).sort(function(c,l){return c[0]-l[0]}).each(function(){i.offsets.push(this[0]),i.targets.push(this[1])})},y.prototype.process=function(){var i=this.$scrollElement.scrollTop()+this.options.offset,r=this.getScrollHeight(),p=this.options.offset+r-this.$scrollElement.height(),c=this.offsets,l=this.targets,s=this.activeTarget,u;if(this.scrollHeight!=r&&this.refresh(),i>=p)return s!=(u=l[l.length-1])&&this.activate(u);if(s&&i=c[u]&&(c[u+1]===void 0||i{+function(P){"use strict";var y=function(r){this.element=P(r)};y.VERSION="3.4.1",y.TRANSITION_DURATION=150,y.prototype.show=function(){var r=this.element,p=r.closest("ul:not(.dropdown-menu)"),c=r.data("target");if(c||(c=r.attr("href"),c=c&&c.replace(/.*(?=#[^\s]*$)/,"")),!r.parent("li").hasClass("active")){var l=p.find(".active:last a"),s=P.Event("hide.bs.tab",{relatedTarget:r[0]}),u=P.Event("show.bs.tab",{relatedTarget:l[0]});if(l.trigger(s),r.trigger(u),!(u.isDefaultPrevented()||s.isDefaultPrevented())){var g=P(document).find(c);this.activate(r.closest("li"),p),this.activate(g,g.parent(),function(){l.trigger({type:"hidden.bs.tab",relatedTarget:r[0]}),r.trigger({type:"shown.bs.tab",relatedTarget:l[0]})})}}},y.prototype.activate=function(r,p,c){var l=p.find("> .active"),s=c&&P.support.transition&&(l.length&&l.hasClass("fade")||!!p.find("> .fade").length);function u(){l.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),r.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),s?(r[0].offsetWidth,r.addClass("in")):r.removeClass("fade"),r.parent(".dropdown-menu").length&&r.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),c&&c()}l.length&&s?l.one("bsTransitionEnd",u).emulateTransitionEnd(y.TRANSITION_DURATION):u(),l.removeClass("in")};function o(r){return this.each(function(){var p=P(this),c=p.data("bs.tab");c||p.data("bs.tab",c=new y(this)),typeof r=="string"&&c[r]()})}var h=P.fn.tab;P.fn.tab=o,P.fn.tab.Constructor=y,P.fn.tab.noConflict=function(){return P.fn.tab=h,this};var i=function(r){r.preventDefault(),o.call(P(this),"show")};P(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',i).on("click.bs.tab.data-api",'[data-toggle="pill"]',i)}(jQuery)},8480:()=>{+function(P){"use strict";var y=["sanitize","whiteList","sanitizeFn"],o=["background","cite","href","itemtype","longdesc","poster","src","xlink:href"],h=/^aria-[\w-]*$/i,i={"*":["class","dir","id","lang","role",h],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},r=/^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi,p=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;function c(n,m){var f=n.nodeName.toLowerCase();if(P.inArray(f,m)!==-1)return P.inArray(f,o)!==-1?Boolean(n.nodeValue.match(r)||n.nodeValue.match(p)):!0;for(var d=P(m).filter(function(E,N){return N instanceof RegExp}),S=0,v=d.length;S
',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0},sanitize:!0,sanitizeFn:null,whiteList:i},s.prototype.init=function(n,m,f){if(this.enabled=!0,this.type=n,this.$element=P(m),this.options=this.getOptions(f),this.$viewport=this.options.viewport&&P(document).find(P.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var d=this.options.trigger.split(" "),S=d.length;S--;){var v=d[S];if(v=="click")this.$element.on("click."+this.type,this.options.selector,P.proxy(this.toggle,this));else if(v!="manual"){var E=v=="hover"?"mouseenter":"focusin",N=v=="hover"?"mouseleave":"focusout";this.$element.on(E+"."+this.type,this.options.selector,P.proxy(this.enter,this)),this.$element.on(N+"."+this.type,this.options.selector,P.proxy(this.leave,this))}}this.options.selector?this._options=P.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},s.prototype.getDefaults=function(){return s.DEFAULTS},s.prototype.getOptions=function(n){var m=this.$element.data();for(var f in m)m.hasOwnProperty(f)&&P.inArray(f,y)!==-1&&delete m[f];return n=P.extend({},this.getDefaults(),m,n),n.delay&&typeof n.delay=="number"&&(n.delay={show:n.delay,hide:n.delay}),n.sanitize&&(n.template=l(n.template,n.whiteList,n.sanitizeFn)),n},s.prototype.getDelegateOptions=function(){var n={},m=this.getDefaults();return this._options&&P.each(this._options,function(f,d){m[f]!=d&&(n[f]=d)}),n},s.prototype.enter=function(n){var m=n instanceof this.constructor?n:P(n.currentTarget).data("bs."+this.type);if(m||(m=new this.constructor(n.currentTarget,this.getDelegateOptions()),P(n.currentTarget).data("bs."+this.type,m)),n instanceof P.Event&&(m.inState[n.type=="focusin"?"focus":"hover"]=!0),m.tip().hasClass("in")||m.hoverState=="in"){m.hoverState="in";return}if(clearTimeout(m.timeout),m.hoverState="in",!m.options.delay||!m.options.delay.show)return m.show();m.timeout=setTimeout(function(){m.hoverState=="in"&&m.show()},m.options.delay.show)},s.prototype.isInStateTrue=function(){for(var n in this.inState)if(this.inState[n])return!0;return!1},s.prototype.leave=function(n){var m=n instanceof this.constructor?n:P(n.currentTarget).data("bs."+this.type);if(m||(m=new this.constructor(n.currentTarget,this.getDelegateOptions()),P(n.currentTarget).data("bs."+this.type,m)),n instanceof P.Event&&(m.inState[n.type=="focusout"?"focus":"hover"]=!1),!m.isInStateTrue()){if(clearTimeout(m.timeout),m.hoverState="out",!m.options.delay||!m.options.delay.hide)return m.hide();m.timeout=setTimeout(function(){m.hoverState=="out"&&m.hide()},m.options.delay.hide)}},s.prototype.show=function(){var n=P.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(n);var m=P.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(n.isDefaultPrevented()||!m)return;var f=this,d=this.tip(),S=this.getUID(this.type);this.setContent(),d.attr("id",S),this.$element.attr("aria-describedby",S),this.options.animation&&d.addClass("fade");var v=typeof this.options.placement=="function"?this.options.placement.call(this,d[0],this.$element[0]):this.options.placement,E=/\s?auto?\s?/i,N=E.test(v);N&&(v=v.replace(E,"")||"top"),d.detach().css({top:0,left:0,display:"block"}).addClass(v).data("bs."+this.type,this),this.options.container?d.appendTo(P(document).find(this.options.container)):d.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var A=this.getPosition(),T=d[0].offsetWidth,b=d[0].offsetHeight;if(N){var D=v,C=this.getPosition(this.$viewport);v=v=="bottom"&&A.bottom+b>C.bottom?"top":v=="top"&&A.top-bC.width?"left":v=="left"&&A.left-TE.top+E.height&&(S.top=E.top+E.height-A)}else{var T=m.left-v,b=m.left+v+f;TE.right&&(S.left=E.left+E.width-b)}return S},s.prototype.getTitle=function(){var n,m=this.$element,f=this.options;return n=m.attr("data-original-title")||(typeof f.title=="function"?f.title.call(m[0]):f.title),n},s.prototype.getUID=function(n){do n+=~~(Math.random()*1e6);while(document.getElementById(n));return n},s.prototype.tip=function(){if(!this.$tip&&(this.$tip=P(this.options.template),this.$tip.length!=1))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},s.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},s.prototype.enable=function(){this.enabled=!0},s.prototype.disable=function(){this.enabled=!1},s.prototype.toggleEnabled=function(){this.enabled=!this.enabled},s.prototype.toggle=function(n){var m=this;n&&(m=P(n.currentTarget).data("bs."+this.type),m||(m=new this.constructor(n.currentTarget,this.getDelegateOptions()),P(n.currentTarget).data("bs."+this.type,m))),n?(m.inState.click=!m.inState.click,m.isInStateTrue()?m.enter(m):m.leave(m)):m.tip().hasClass("in")?m.leave(m):m.enter(m)},s.prototype.destroy=function(){var n=this;clearTimeout(this.timeout),this.hide(function(){n.$element.off("."+n.type).removeData("bs."+n.type),n.$tip&&n.$tip.detach(),n.$tip=null,n.$arrow=null,n.$viewport=null,n.$element=null})},s.prototype.sanitizeHtml=function(n){return l(n,this.options.whiteList,this.options.sanitizeFn)};function u(n){return this.each(function(){var m=P(this),f=m.data("bs.tooltip"),d=typeof n=="object"&&n;!f&&/destroy|hide/.test(n)||(f||m.data("bs.tooltip",f=new s(this,d)),typeof n=="string"&&f[n]())})}var g=P.fn.tooltip;P.fn.tooltip=u,P.fn.tooltip.Constructor=s,P.fn.tooltip.noConflict=function(){return P.fn.tooltip=g,this}}(jQuery)},7030:P=>{var y=function(){this.Diff_Timeout=1,this.Diff_EditCost=4,this.Match_Threshold=.5,this.Match_Distance=1e3,this.Patch_DeleteThreshold=.5,this.Patch_Margin=4,this.Match_MaxBits=32},o=-1,h=1,i=0;y.Diff=function(r,p){return[r,p]},y.prototype.diff_main=function(r,p,c,l){typeof l=="undefined"&&(this.Diff_Timeout<=0?l=Number.MAX_VALUE:l=new Date().getTime()+this.Diff_Timeout*1e3);var s=l;if(r==null||p==null)throw new Error("Null input. (diff_main)");if(r==p)return r?[new y.Diff(i,r)]:[];typeof c=="undefined"&&(c=!0);var u=c,g=this.diff_commonPrefix(r,p),n=r.substring(0,g);r=r.substring(g),p=p.substring(g),g=this.diff_commonSuffix(r,p);var m=r.substring(r.length-g);r=r.substring(0,r.length-g),p=p.substring(0,p.length-g);var f=this.diff_compute_(r,p,u,s);return n&&f.unshift(new y.Diff(i,n)),m&&f.push(new y.Diff(i,m)),this.diff_cleanupMerge(f),f},y.prototype.diff_compute_=function(r,p,c,l){var s;if(!r)return[new y.Diff(h,p)];if(!p)return[new y.Diff(o,r)];var u=r.length>p.length?r:p,g=r.length>p.length?p:r,n=u.indexOf(g);if(n!=-1)return s=[new y.Diff(h,u.substring(0,n)),new y.Diff(i,g),new y.Diff(h,u.substring(n+g.length))],r.length>p.length&&(s[0][0]=s[2][0]=o),s;if(g.length==1)return[new y.Diff(o,r),new y.Diff(h,p)];var m=this.diff_halfMatch_(r,p);if(m){var f=m[0],d=m[1],S=m[2],v=m[3],E=m[4],N=this.diff_main(f,S,c,l),A=this.diff_main(d,v,c,l);return N.concat([new y.Diff(i,E)],A)}return c&&r.length>100&&p.length>100?this.diff_lineMode_(r,p,l):this.diff_bisect_(r,p,l)},y.prototype.diff_lineMode_=function(r,p,c){var l=this.diff_linesToChars_(r,p);r=l.chars1,p=l.chars2;var s=l.lineArray,u=this.diff_main(r,p,!1,c);this.diff_charsToLines_(u,s),this.diff_cleanupSemantic(u),u.push(new y.Diff(i,""));for(var g=0,n=0,m=0,f="",d="";g=1&&m>=1){u.splice(g-n-m,n+m),g=g-n-m;for(var S=this.diff_main(f,d,!1,c),v=S.length-1;v>=0;v--)u.splice(g,0,S[v]);g=g+S.length}m=0,n=0,f="",d="";break}g++}return u.pop(),u},y.prototype.diff_bisect_=function(r,p,c){for(var l=r.length,s=p.length,u=Math.ceil((l+s)/2),g=u,n=2*u,m=new Array(n),f=new Array(n),d=0;dc);b++){for(var D=-b+E;D<=b-N;D+=2){var C=g+D,I;D==-b||D!=b&&m[C-1]l)N+=2;else if(R>s)E+=2;else if(v){var x=g+S-D;if(x>=0&&x=O)return this.diff_bisectSplit_(r,p,I,R,c)}}}for(var $=-b+A;$<=b-T;$+=2){var x=g+$,O;$==-b||$!=b&&f[x-1]l)T+=2;else if(F>s)A+=2;else if(!v){var C=g+S-$;if(C>=0&&C=O)return this.diff_bisectSplit_(r,p,I,R,c)}}}}return[new y.Diff(o,r),new y.Diff(h,p)]},y.prototype.diff_bisectSplit_=function(r,p,c,l,s){var u=r.substring(0,c),g=p.substring(0,l),n=r.substring(c),m=p.substring(l),f=this.diff_main(u,g,!1,s),d=this.diff_main(n,m,!1,s);return f.concat(d)},y.prototype.diff_linesToChars_=function(r,p){var c=[],l={};c[0]="";function s(m){for(var f="",d=0,S=-1,v=c.length;Sl?r=r.substring(c-l):cp.length?r:p,l=r.length>p.length?p:r;if(c.length<4||l.length*2=N.length?[I,R,x,O,C]:null}var g=u(c,l,Math.ceil(c.length/4)),n=u(c,l,Math.ceil(c.length/2)),m;if(!g&&!n)return null;n?g?m=g[4].length>n[4].length?g:n:m=n:m=g;var f,d,S,v;r.length>p.length?(f=m[0],d=m[1],S=m[2],v=m[3]):(S=m[0],v=m[1],f=m[2],d=m[3]);var E=m[4];return[f,d,S,v,E]},y.prototype.diff_cleanupSemantic=function(r){for(var p=!1,c=[],l=0,s=null,u=0,g=0,n=0,m=0,f=0;u0?c[l-1]:-1,g=0,n=0,m=0,f=0,s=null,p=!0)),u++;for(p&&this.diff_cleanupMerge(r),this.diff_cleanupSemanticLossless(r),u=1;u=E?(v>=d.length/2||v>=S.length/2)&&(r.splice(u,0,new y.Diff(i,S.substring(0,v))),r[u-1][1]=d.substring(0,d.length-v),r[u+1][1]=S.substring(v),u++):(E>=d.length/2||E>=S.length/2)&&(r.splice(u,0,new y.Diff(i,d.substring(0,E))),r[u-1][0]=h,r[u-1][1]=S.substring(0,S.length-E),r[u+1][0]=o,r[u+1][1]=d.substring(E),u++),u++}u++}},y.prototype.diff_cleanupSemanticLossless=function(r){function p(E,N){if(!E||!N)return 6;var A=E.charAt(E.length-1),T=N.charAt(0),b=A.match(y.nonAlphaNumericRegex_),D=T.match(y.nonAlphaNumericRegex_),C=b&&A.match(y.whitespaceRegex_),I=D&&T.match(y.whitespaceRegex_),R=C&&A.match(y.linebreakRegex_),x=I&&T.match(y.linebreakRegex_),O=R&&E.match(y.blanklineEndRegex_),$=x&&N.match(y.blanklineStartRegex_);return O||$?5:R||x?4:b&&!C&&I?3:C||I?2:b||D?1:0}for(var c=1;c=S&&(S=v,m=l,f=s,d=u)}r[c-1][1]!=m&&(m?r[c-1][1]=m:(r.splice(c-1,1),c--),r[c][1]=f,d?r[c+1][1]=d:(r.splice(c+1,1),c--))}c++}},y.nonAlphaNumericRegex_=/[^a-zA-Z0-9]/,y.whitespaceRegex_=/\s/,y.linebreakRegex_=/[\r\n]/,y.blanklineEndRegex_=/\n\r?\n$/,y.blanklineStartRegex_=/^\r?\n\r?\n/,y.prototype.diff_cleanupEfficiency=function(r){for(var p=!1,c=[],l=0,s=null,u=0,g=!1,n=!1,m=!1,f=!1;u0?c[l-1]:-1,m=f=!1),p=!0)),u++;p&&this.diff_cleanupMerge(r)},y.prototype.diff_cleanupMerge=function(r){r.push(new y.Diff(i,""));for(var p=0,c=0,l=0,s="",u="",g;p1?(c!==0&&l!==0&&(g=this.diff_commonPrefix(u,s),g!==0&&(p-c-l>0&&r[p-c-l-1][0]==i?r[p-c-l-1][1]+=u.substring(0,g):(r.splice(0,0,new y.Diff(i,u.substring(0,g))),p++),u=u.substring(g),s=s.substring(g)),g=this.diff_commonSuffix(u,s),g!==0&&(r[p][1]=u.substring(u.length-g)+r[p][1],u=u.substring(0,u.length-g),s=s.substring(0,s.length-g))),p-=c+l,r.splice(p,c+l),s.length&&(r.splice(p,0,new y.Diff(o,s)),p++),u.length&&(r.splice(p,0,new y.Diff(h,u)),p++),p++):p!==0&&r[p-1][0]==i?(r[p-1][1]+=r[p][1],r.splice(p,1)):p++,l=0,c=0,s="",u="";break}r[r.length-1][1]===""&&r.pop();var n=!1;for(p=1;pp));g++)s=c,u=l;return r.length!=g&&r[g][0]===o?u:u+(p-s)},y.prototype.diff_prettyHtml=function(r){for(var p=[],c=/&/g,l=//g,u=/\n/g,g=0;g");switch(n){case h:p[g]=''+f+"";break;case o:p[g]=''+f+"";break;case i:p[g]=""+f+"";break}}return p.join("")},y.prototype.diff_text1=function(r){for(var p=[],c=0;cthis.Match_MaxBits)throw new Error("Pattern too long for this browser.");var l=this.match_alphabet_(p),s=this;function u(I,R){var x=I/p.length,O=Math.abs(c-R);return s.Match_Distance?x+O/s.Match_Distance:O?1:x}var g=this.Match_Threshold,n=r.indexOf(p,c);n!=-1&&(g=Math.min(u(0,n),g),n=r.lastIndexOf(p,c+p.length),n!=-1&&(g=Math.min(u(0,n),g)));var m=1<=N;b--){var D=l[r.charAt(b-1)];if(E===0?T[b]=(T[b+1]<<1|1)&D:T[b]=(T[b+1]<<1|1)&D|((v[b+1]|v[b])<<1|1)|v[b+1],T[b]&m){var C=u(E,b-1);if(C<=g)if(g=C,n=b-1,n>c)N=Math.max(1,2*c-n);else break}}if(u(E+1,c)>g)break;v=T}return n},y.prototype.match_alphabet_=function(r){for(var p={},c=0;c2&&(this.diff_cleanupSemantic(s),this.diff_cleanupEfficiency(s));else if(r&&typeof r=="object"&&typeof p=="undefined"&&typeof c=="undefined")s=r,l=this.diff_text1(s);else if(typeof r=="string"&&p&&typeof p=="object"&&typeof c=="undefined")l=r,s=p;else if(typeof r=="string"&&typeof p=="string"&&c&&typeof c=="object")l=r,s=c;else throw new Error("Unknown call format to patch_make.");if(s.length===0)return[];for(var u=[],g=new y.patch_obj,n=0,m=0,f=0,d=l,S=l,v=0;v=2*this.Patch_Margin&&n&&(this.patch_addContext_(g,d),u.push(g),g=new y.patch_obj,n=0,d=S,m=f);break}E!==h&&(m+=N.length),E!==o&&(f+=N.length)}return n&&(this.patch_addContext_(g,d),u.push(g)),u},y.prototype.patch_deepCopy=function(r){for(var p=[],c=0;cthis.Match_MaxBits?(m=this.match_main(p,n.substring(0,this.Match_MaxBits),g),m!=-1&&(f=this.match_main(p,n.substring(n.length-this.Match_MaxBits),g+n.length-this.Match_MaxBits),(f==-1||m>=f)&&(m=-1))):m=this.match_main(p,n,g),m==-1)s[u]=!1,l-=r[u].length2-r[u].length1;else{s[u]=!0,l=m-g;var d;if(f==-1?d=p.substring(m,m+n.length):d=p.substring(m,f+this.Match_MaxBits),n==d)p=p.substring(0,m)+this.diff_text2(r[u].diffs)+p.substring(m+n.length);else{var S=this.diff_main(n,d,!1);if(n.length>this.Match_MaxBits&&this.diff_levenshtein(S)/n.length>this.Patch_DeleteThreshold)s[u]=!1;else{this.diff_cleanupSemanticLossless(S);for(var v=0,E,N=0;Nu[0][1].length){var g=p-u[0][1].length;u[0][1]=c.substring(u[0][1].length)+u[0][1],s.start1-=g,s.start2-=g,s.length1+=g,s.length2+=g}if(s=r[r.length-1],u=s.diffs,u.length==0||u[u.length-1][0]!=i)u.push(new y.Diff(i,c)),s.length1+=p,s.length2+=p;else if(p>u[u.length-1][1].length){var g=p-u[u.length-1][1].length;u[u.length-1][1]+=c.substring(0,g),s.length1+=g,s.length2+=g}return c},y.prototype.patch_splitMax=function(r){for(var p=this.Match_MaxBits,c=0;c2*p?(n.length1+=d.length,s+=d.length,m=!1,n.diffs.push(new y.Diff(f,d)),l.diffs.shift()):(d=d.substring(0,p-n.length1-this.Patch_Margin),n.length1+=d.length,s+=d.length,f===i?(n.length2+=d.length,u+=d.length):m=!1,n.diffs.push(new y.Diff(f,d)),d==l.diffs[0][1]?l.diffs.shift():l.diffs[0][1]=l.diffs[0][1].substring(d.length))}g=this.diff_text2(n.diffs),g=g.substring(g.length-this.Patch_Margin);var S=this.diff_text1(l.diffs).substring(0,this.Patch_Margin);S!==""&&(n.length1+=S.length,n.length2+=S.length,n.diffs.length!==0&&n.diffs[n.diffs.length-1][0]===i?n.diffs[n.diffs.length-1][1]+=S:n.diffs.push(new y.Diff(i,S))),m||r.splice(++c,0,n)}}},y.prototype.patch_toText=function(r){for(var p=[],c=0;c{var Jo={2988:()=>{+function(P){"use strict";var y=".dropdown-backdrop",a='[data-toggle="dropdown"]',d=function(o){P(o).on("click.bs.dropdown",this.toggle)};d.VERSION="3.4.1";function i(o){var n=o.attr("data-target");n||(n=o.attr("href"),n=n&&/#[A-Za-z]/.test(n)&&n.replace(/.*(?=#[^\s]*$)/,""));var p=n!=="#"?P(document).find(n):null;return p&&p.length?p:o.parent()}function r(o){o&&o.which===3||(P(y).remove(),P(a).each(function(){var n=P(this),p=i(n),g={relatedTarget:this};p.hasClass("open")&&(o&&o.type=="click"&&/input|textarea/i.test(o.target.tagName)&&P.contains(p[0],o.target)||(p.trigger(o=P.Event("hide.bs.dropdown",g)),!o.isDefaultPrevented()&&(n.attr("aria-expanded","false"),p.removeClass("open").trigger(P.Event("hidden.bs.dropdown",g)))))}))}d.prototype.toggle=function(o){var n=P(this);if(!n.is(".disabled, :disabled")){var p=i(n),g=p.hasClass("open");if(r(),!g){"ontouchstart"in document.documentElement&&!p.closest(".navbar-nav").length&&P(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(P(this)).on("click",r);var s={relatedTarget:this};if(p.trigger(o=P.Event("show.bs.dropdown",s)),o.isDefaultPrevented())return;n.trigger("focus").attr("aria-expanded","true"),p.toggleClass("open").trigger(P.Event("shown.bs.dropdown",s))}return!1}},d.prototype.keydown=function(o){if(!(!/(38|40|27|32)/.test(o.which)||/input|textarea/i.test(o.target.tagName))){var n=P(this);if(o.preventDefault(),o.stopPropagation(),!n.is(".disabled, :disabled")){var p=i(n),g=p.hasClass("open");if(!g&&o.which!=27||g&&o.which==27)return o.which==27&&p.find(a).trigger("focus"),n.trigger("click");var s=" li:not(.disabled):visible a",m=p.find(".dropdown-menu"+s);if(m.length){var c=m.index(o.target);o.which==38&&c>0&&c--,o.which==40&&c{+function(P){"use strict";var y=function(i,r){this.init("popover",i,r)};if(!P.fn.tooltip)throw new Error("Popover requires tooltip.js");y.VERSION="3.4.1",y.DEFAULTS=P.extend({},P.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),y.prototype=P.extend({},P.fn.tooltip.Constructor.prototype),y.prototype.constructor=y,y.prototype.getDefaults=function(){return y.DEFAULTS},y.prototype.setContent=function(){var i=this.tip(),r=this.getTitle(),u=this.getContent();if(this.options.html){var h=typeof u;this.options.sanitize&&(r=this.sanitizeHtml(r),h==="string"&&(u=this.sanitizeHtml(u))),i.find(".popover-title").html(r),i.find(".popover-content").children().detach().end()[h==="string"?"html":"append"](u)}else i.find(".popover-title").text(r),i.find(".popover-content").children().detach().end().text(u);i.removeClass("fade top bottom left right in"),i.find(".popover-title").html()||i.find(".popover-title").hide()},y.prototype.hasContent=function(){return this.getTitle()||this.getContent()},y.prototype.getContent=function(){var i=this.$element,r=this.options;return i.attr("data-content")||(typeof r.content=="function"?r.content.call(i[0]):r.content)},y.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};function a(i){return this.each(function(){var r=P(this),u=r.data("bs.popover"),h=typeof i=="object"&&i;!u&&/destroy|hide/.test(i)||(u||r.data("bs.popover",u=new y(this,h)),typeof i=="string"&&u[i]())})}var d=P.fn.popover;P.fn.popover=a,P.fn.popover.Constructor=y,P.fn.popover.noConflict=function(){return P.fn.popover=d,this}}(jQuery)},954:()=>{+function(P){"use strict";function y(i,r){this.$body=P(document.body),this.$scrollElement=P(i).is(document.body)?P(window):P(i),this.options=P.extend({},y.DEFAULTS,r),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",P.proxy(this.process,this)),this.refresh(),this.process()}y.VERSION="3.4.1",y.DEFAULTS={offset:10},y.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},y.prototype.refresh=function(){var i=this,r="offset",u=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),P.isWindow(this.$scrollElement[0])||(r="position",u=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var h=P(this),o=h.data("target")||h.attr("href"),n=/^#./.test(o)&&P(o);return n&&n.length&&n.is(":visible")&&[[n[r]().top+u,o]]||null}).sort(function(h,o){return h[0]-o[0]}).each(function(){i.offsets.push(this[0]),i.targets.push(this[1])})},y.prototype.process=function(){var i=this.$scrollElement.scrollTop()+this.options.offset,r=this.getScrollHeight(),u=this.options.offset+r-this.$scrollElement.height(),h=this.offsets,o=this.targets,n=this.activeTarget,p;if(this.scrollHeight!=r&&this.refresh(),i>=u)return n!=(p=o[o.length-1])&&this.activate(p);if(n&&i=h[p]&&(h[p+1]===void 0||i{+function(P){"use strict";var y=function(r){this.element=P(r)};y.VERSION="3.4.1",y.TRANSITION_DURATION=150,y.prototype.show=function(){var r=this.element,u=r.closest("ul:not(.dropdown-menu)"),h=r.data("target");if(h||(h=r.attr("href"),h=h&&h.replace(/.*(?=#[^\s]*$)/,"")),!r.parent("li").hasClass("active")){var o=u.find(".active:last a"),n=P.Event("hide.bs.tab",{relatedTarget:r[0]}),p=P.Event("show.bs.tab",{relatedTarget:o[0]});if(o.trigger(n),r.trigger(p),!(p.isDefaultPrevented()||n.isDefaultPrevented())){var g=P(document).find(h);this.activate(r.closest("li"),u),this.activate(g,g.parent(),function(){o.trigger({type:"hidden.bs.tab",relatedTarget:r[0]}),r.trigger({type:"shown.bs.tab",relatedTarget:o[0]})})}}},y.prototype.activate=function(r,u,h){var o=u.find("> .active"),n=h&&P.support.transition&&(o.length&&o.hasClass("fade")||!!u.find("> .fade").length);function p(){o.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),r.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),n?(r[0].offsetWidth,r.addClass("in")):r.removeClass("fade"),r.parent(".dropdown-menu").length&&r.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),h&&h()}o.length&&n?o.one("bsTransitionEnd",p).emulateTransitionEnd(y.TRANSITION_DURATION):p(),o.removeClass("in")};function a(r){return this.each(function(){var u=P(this),h=u.data("bs.tab");h||u.data("bs.tab",h=new y(this)),typeof r=="string"&&h[r]()})}var d=P.fn.tab;P.fn.tab=a,P.fn.tab.Constructor=y,P.fn.tab.noConflict=function(){return P.fn.tab=d,this};var i=function(r){r.preventDefault(),a.call(P(this),"show")};P(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',i).on("click.bs.tab.data-api",'[data-toggle="pill"]',i)}(jQuery)},8480:()=>{+function(P){"use strict";var y=["sanitize","whiteList","sanitizeFn"],a=["background","cite","href","itemtype","longdesc","poster","src","xlink:href"],d=/^aria-[\w-]*$/i,i={"*":["class","dir","id","lang","role",d],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},r=/^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi,u=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;function h(s,m){var c=s.nodeName.toLowerCase();if(P.inArray(c,m)!==-1)return P.inArray(c,a)!==-1?Boolean(s.nodeValue.match(r)||s.nodeValue.match(u)):!0;for(var f=P(m).filter(function(E,C){return C instanceof RegExp}),A=0,v=f.length;A
',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0},sanitize:!0,sanitizeFn:null,whiteList:i},n.prototype.init=function(s,m,c){if(this.enabled=!0,this.type=s,this.$element=P(m),this.options=this.getOptions(c),this.$viewport=this.options.viewport&&P(document).find(P.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var f=this.options.trigger.split(" "),A=f.length;A--;){var v=f[A];if(v=="click")this.$element.on("click."+this.type,this.options.selector,P.proxy(this.toggle,this));else if(v!="manual"){var E=v=="hover"?"mouseenter":"focusin",C=v=="hover"?"mouseleave":"focusout";this.$element.on(E+"."+this.type,this.options.selector,P.proxy(this.enter,this)),this.$element.on(C+"."+this.type,this.options.selector,P.proxy(this.leave,this))}}this.options.selector?this._options=P.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},n.prototype.getDefaults=function(){return n.DEFAULTS},n.prototype.getOptions=function(s){var m=this.$element.data();for(var c in m)m.hasOwnProperty(c)&&P.inArray(c,y)!==-1&&delete m[c];return s=P.extend({},this.getDefaults(),m,s),s.delay&&typeof s.delay=="number"&&(s.delay={show:s.delay,hide:s.delay}),s.sanitize&&(s.template=o(s.template,s.whiteList,s.sanitizeFn)),s},n.prototype.getDelegateOptions=function(){var s={},m=this.getDefaults();return this._options&&P.each(this._options,function(c,f){m[c]!=f&&(s[c]=f)}),s},n.prototype.enter=function(s){var m=s instanceof this.constructor?s:P(s.currentTarget).data("bs."+this.type);if(m||(m=new this.constructor(s.currentTarget,this.getDelegateOptions()),P(s.currentTarget).data("bs."+this.type,m)),s instanceof P.Event&&(m.inState[s.type=="focusin"?"focus":"hover"]=!0),m.tip().hasClass("in")||m.hoverState=="in"){m.hoverState="in";return}if(clearTimeout(m.timeout),m.hoverState="in",!m.options.delay||!m.options.delay.show)return m.show();m.timeout=setTimeout(function(){m.hoverState=="in"&&m.show()},m.options.delay.show)},n.prototype.isInStateTrue=function(){for(var s in this.inState)if(this.inState[s])return!0;return!1},n.prototype.leave=function(s){var m=s instanceof this.constructor?s:P(s.currentTarget).data("bs."+this.type);if(m||(m=new this.constructor(s.currentTarget,this.getDelegateOptions()),P(s.currentTarget).data("bs."+this.type,m)),s instanceof P.Event&&(m.inState[s.type=="focusout"?"focus":"hover"]=!1),!m.isInStateTrue()){if(clearTimeout(m.timeout),m.hoverState="out",!m.options.delay||!m.options.delay.hide)return m.hide();m.timeout=setTimeout(function(){m.hoverState=="out"&&m.hide()},m.options.delay.hide)}},n.prototype.show=function(){var s=P.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(s);var m=P.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(s.isDefaultPrevented()||!m)return;var c=this,f=this.tip(),A=this.getUID(this.type);this.setContent(),f.attr("id",A),this.$element.attr("aria-describedby",A),this.options.animation&&f.addClass("fade");var v=typeof this.options.placement=="function"?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,E=/\s?auto?\s?/i,C=E.test(v);C&&(v=v.replace(E,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(v).data("bs."+this.type,this),this.options.container?f.appendTo(P(document).find(this.options.container)):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var S=this.getPosition(),b=f[0].offsetWidth,N=f[0].offsetHeight;if(C){var D=v,L=this.getPosition(this.$viewport);v=v=="bottom"&&S.bottom+N>L.bottom?"top":v=="top"&&S.top-NL.width?"left":v=="left"&&S.left-bE.top+E.height&&(A.top=E.top+E.height-S)}else{var b=m.left-v,N=m.left+v+c;bE.right&&(A.left=E.left+E.width-N)}return A},n.prototype.getTitle=function(){var s,m=this.$element,c=this.options;return s=m.attr("data-original-title")||(typeof c.title=="function"?c.title.call(m[0]):c.title),s},n.prototype.getUID=function(s){do s+=~~(Math.random()*1e6);while(document.getElementById(s));return s},n.prototype.tip=function(){if(!this.$tip&&(this.$tip=P(this.options.template),this.$tip.length!=1))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},n.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},n.prototype.enable=function(){this.enabled=!0},n.prototype.disable=function(){this.enabled=!1},n.prototype.toggleEnabled=function(){this.enabled=!this.enabled},n.prototype.toggle=function(s){var m=this;s&&(m=P(s.currentTarget).data("bs."+this.type),m||(m=new this.constructor(s.currentTarget,this.getDelegateOptions()),P(s.currentTarget).data("bs."+this.type,m))),s?(m.inState.click=!m.inState.click,m.isInStateTrue()?m.enter(m):m.leave(m)):m.tip().hasClass("in")?m.leave(m):m.enter(m)},n.prototype.destroy=function(){var s=this;clearTimeout(this.timeout),this.hide(function(){s.$element.off("."+s.type).removeData("bs."+s.type),s.$tip&&s.$tip.detach(),s.$tip=null,s.$arrow=null,s.$viewport=null,s.$element=null})},n.prototype.sanitizeHtml=function(s){return o(s,this.options.whiteList,this.options.sanitizeFn)};function p(s){return this.each(function(){var m=P(this),c=m.data("bs.tooltip"),f=typeof s=="object"&&s;!c&&/destroy|hide/.test(s)||(c||m.data("bs.tooltip",c=new n(this,f)),typeof s=="string"&&c[s]())})}var g=P.fn.tooltip;P.fn.tooltip=p,P.fn.tooltip.Constructor=n,P.fn.tooltip.noConflict=function(){return P.fn.tooltip=g,this}}(jQuery)},7030:P=>{var y=function(){this.Diff_Timeout=1,this.Diff_EditCost=4,this.Match_Threshold=.5,this.Match_Distance=1e3,this.Patch_DeleteThreshold=.5,this.Patch_Margin=4,this.Match_MaxBits=32},a=-1,d=1,i=0;y.Diff=function(r,u){return[r,u]},y.prototype.diff_main=function(r,u,h,o){typeof o=="undefined"&&(this.Diff_Timeout<=0?o=Number.MAX_VALUE:o=new Date().getTime()+this.Diff_Timeout*1e3);var n=o;if(r==null||u==null)throw new Error("Null input. (diff_main)");if(r==u)return r?[new y.Diff(i,r)]:[];typeof h=="undefined"&&(h=!0);var p=h,g=this.diff_commonPrefix(r,u),s=r.substring(0,g);r=r.substring(g),u=u.substring(g),g=this.diff_commonSuffix(r,u);var m=r.substring(r.length-g);r=r.substring(0,r.length-g),u=u.substring(0,u.length-g);var c=this.diff_compute_(r,u,p,n);return s&&c.unshift(new y.Diff(i,s)),m&&c.push(new y.Diff(i,m)),this.diff_cleanupMerge(c),c},y.prototype.diff_compute_=function(r,u,h,o){var n;if(!r)return[new y.Diff(d,u)];if(!u)return[new y.Diff(a,r)];var p=r.length>u.length?r:u,g=r.length>u.length?u:r,s=p.indexOf(g);if(s!=-1)return n=[new y.Diff(d,p.substring(0,s)),new y.Diff(i,g),new y.Diff(d,p.substring(s+g.length))],r.length>u.length&&(n[0][0]=n[2][0]=a),n;if(g.length==1)return[new y.Diff(a,r),new y.Diff(d,u)];var m=this.diff_halfMatch_(r,u);if(m){var c=m[0],f=m[1],A=m[2],v=m[3],E=m[4],C=this.diff_main(c,A,h,o),S=this.diff_main(f,v,h,o);return C.concat([new y.Diff(i,E)],S)}return h&&r.length>100&&u.length>100?this.diff_lineMode_(r,u,o):this.diff_bisect_(r,u,o)},y.prototype.diff_lineMode_=function(r,u,h){var o=this.diff_linesToChars_(r,u);r=o.chars1,u=o.chars2;var n=o.lineArray,p=this.diff_main(r,u,!1,h);this.diff_charsToLines_(p,n),this.diff_cleanupSemantic(p),p.push(new y.Diff(i,""));for(var g=0,s=0,m=0,c="",f="";g=1&&m>=1){p.splice(g-s-m,s+m),g=g-s-m;for(var A=this.diff_main(c,f,!1,h),v=A.length-1;v>=0;v--)p.splice(g,0,A[v]);g=g+A.length}m=0,s=0,c="",f="";break}g++}return p.pop(),p},y.prototype.diff_bisect_=function(r,u,h){for(var o=r.length,n=u.length,p=Math.ceil((o+n)/2),g=p,s=2*p,m=new Array(s),c=new Array(s),f=0;fh);N++){for(var D=-N+E;D<=N-C;D+=2){var L=g+D,I;D==-N||D!=N&&m[L-1]o)C+=2;else if(w>n)E+=2;else if(v){var T=g+A-D;if(T>=0&&T=R)return this.diff_bisectSplit_(r,u,I,w,h)}}}for(var M=-N+S;M<=N-b;M+=2){var T=g+M,R;M==-N||M!=N&&c[T-1]o)b+=2;else if(U>n)S+=2;else if(!v){var L=g+A-M;if(L>=0&&L=R)return this.diff_bisectSplit_(r,u,I,w,h)}}}}return[new y.Diff(a,r),new y.Diff(d,u)]},y.prototype.diff_bisectSplit_=function(r,u,h,o,n){var p=r.substring(0,h),g=u.substring(0,o),s=r.substring(h),m=u.substring(o),c=this.diff_main(p,g,!1,n),f=this.diff_main(s,m,!1,n);return c.concat(f)},y.prototype.diff_linesToChars_=function(r,u){var h=[],o={};h[0]="";function n(m){for(var c="",f=0,A=-1,v=h.length;Ao?r=r.substring(h-o):hu.length?r:u,o=r.length>u.length?u:r;if(h.length<4||o.length*2=C.length?[I,w,T,R,L]:null}var g=p(h,o,Math.ceil(h.length/4)),s=p(h,o,Math.ceil(h.length/2)),m;if(!g&&!s)return null;s?g?m=g[4].length>s[4].length?g:s:m=s:m=g;var c,f,A,v;r.length>u.length?(c=m[0],f=m[1],A=m[2],v=m[3]):(A=m[0],v=m[1],c=m[2],f=m[3]);var E=m[4];return[c,f,A,v,E]},y.prototype.diff_cleanupSemantic=function(r){for(var u=!1,h=[],o=0,n=null,p=0,g=0,s=0,m=0,c=0;p0?h[o-1]:-1,g=0,s=0,m=0,c=0,n=null,u=!0)),p++;for(u&&this.diff_cleanupMerge(r),this.diff_cleanupSemanticLossless(r),p=1;p=E?(v>=f.length/2||v>=A.length/2)&&(r.splice(p,0,new y.Diff(i,A.substring(0,v))),r[p-1][1]=f.substring(0,f.length-v),r[p+1][1]=A.substring(v),p++):(E>=f.length/2||E>=A.length/2)&&(r.splice(p,0,new y.Diff(i,f.substring(0,E))),r[p-1][0]=d,r[p-1][1]=A.substring(0,A.length-E),r[p+1][0]=a,r[p+1][1]=f.substring(E),p++),p++}p++}},y.prototype.diff_cleanupSemanticLossless=function(r){function u(E,C){if(!E||!C)return 6;var S=E.charAt(E.length-1),b=C.charAt(0),N=S.match(y.nonAlphaNumericRegex_),D=b.match(y.nonAlphaNumericRegex_),L=N&&S.match(y.whitespaceRegex_),I=D&&b.match(y.whitespaceRegex_),w=L&&S.match(y.linebreakRegex_),T=I&&b.match(y.linebreakRegex_),R=w&&E.match(y.blanklineEndRegex_),M=T&&C.match(y.blanklineStartRegex_);return R||M?5:w||T?4:N&&!L&&I?3:L||I?2:N||D?1:0}for(var h=1;h=A&&(A=v,m=o,c=n,f=p)}r[h-1][1]!=m&&(m?r[h-1][1]=m:(r.splice(h-1,1),h--),r[h][1]=c,f?r[h+1][1]=f:(r.splice(h+1,1),h--))}h++}},y.nonAlphaNumericRegex_=/[^a-zA-Z0-9]/,y.whitespaceRegex_=/\s/,y.linebreakRegex_=/[\r\n]/,y.blanklineEndRegex_=/\n\r?\n$/,y.blanklineStartRegex_=/^\r?\n\r?\n/,y.prototype.diff_cleanupEfficiency=function(r){for(var u=!1,h=[],o=0,n=null,p=0,g=!1,s=!1,m=!1,c=!1;p0?h[o-1]:-1,m=c=!1),u=!0)),p++;u&&this.diff_cleanupMerge(r)},y.prototype.diff_cleanupMerge=function(r){r.push(new y.Diff(i,""));for(var u=0,h=0,o=0,n="",p="",g;u1?(h!==0&&o!==0&&(g=this.diff_commonPrefix(p,n),g!==0&&(u-h-o>0&&r[u-h-o-1][0]==i?r[u-h-o-1][1]+=p.substring(0,g):(r.splice(0,0,new y.Diff(i,p.substring(0,g))),u++),p=p.substring(g),n=n.substring(g)),g=this.diff_commonSuffix(p,n),g!==0&&(r[u][1]=p.substring(p.length-g)+r[u][1],p=p.substring(0,p.length-g),n=n.substring(0,n.length-g))),u-=h+o,r.splice(u,h+o),n.length&&(r.splice(u,0,new y.Diff(a,n)),u++),p.length&&(r.splice(u,0,new y.Diff(d,p)),u++),u++):u!==0&&r[u-1][0]==i?(r[u-1][1]+=r[u][1],r.splice(u,1)):u++,o=0,h=0,n="",p="";break}r[r.length-1][1]===""&&r.pop();var s=!1;for(u=1;uu));g++)n=h,p=o;return r.length!=g&&r[g][0]===a?p:p+(u-n)},y.prototype.diff_prettyHtml=function(r){for(var u=[],h=/&/g,o=//g,p=/\n/g,g=0;g");switch(s){case d:u[g]=''+c+"";break;case a:u[g]=''+c+"";break;case i:u[g]=""+c+"";break}}return u.join("")},y.prototype.diff_text1=function(r){for(var u=[],h=0;hthis.Match_MaxBits)throw new Error("Pattern too long for this browser.");var o=this.match_alphabet_(u),n=this;function p(I,w){var T=I/u.length,R=Math.abs(h-w);return n.Match_Distance?T+R/n.Match_Distance:R?1:T}var g=this.Match_Threshold,s=r.indexOf(u,h);s!=-1&&(g=Math.min(p(0,s),g),s=r.lastIndexOf(u,h+u.length),s!=-1&&(g=Math.min(p(0,s),g)));var m=1<=C;N--){var D=o[r.charAt(N-1)];if(E===0?b[N]=(b[N+1]<<1|1)&D:b[N]=(b[N+1]<<1|1)&D|((v[N+1]|v[N])<<1|1)|v[N+1],b[N]&m){var L=p(E,N-1);if(L<=g)if(g=L,s=N-1,s>h)C=Math.max(1,2*h-s);else break}}if(p(E+1,h)>g)break;v=b}return s},y.prototype.match_alphabet_=function(r){for(var u={},h=0;h2&&(this.diff_cleanupSemantic(n),this.diff_cleanupEfficiency(n));else if(r&&typeof r=="object"&&typeof u=="undefined"&&typeof h=="undefined")n=r,o=this.diff_text1(n);else if(typeof r=="string"&&u&&typeof u=="object"&&typeof h=="undefined")o=r,n=u;else if(typeof r=="string"&&typeof u=="string"&&h&&typeof h=="object")o=r,n=h;else throw new Error("Unknown call format to patch_make.");if(n.length===0)return[];for(var p=[],g=new y.patch_obj,s=0,m=0,c=0,f=o,A=o,v=0;v=2*this.Patch_Margin&&s&&(this.patch_addContext_(g,f),p.push(g),g=new y.patch_obj,s=0,f=A,m=c);break}E!==d&&(m+=C.length),E!==a&&(c+=C.length)}return s&&(this.patch_addContext_(g,f),p.push(g)),p},y.prototype.patch_deepCopy=function(r){for(var u=[],h=0;hthis.Match_MaxBits?(m=this.match_main(u,s.substring(0,this.Match_MaxBits),g),m!=-1&&(c=this.match_main(u,s.substring(s.length-this.Match_MaxBits),g+s.length-this.Match_MaxBits),(c==-1||m>=c)&&(m=-1))):m=this.match_main(u,s,g),m==-1)n[p]=!1,o-=r[p].length2-r[p].length1;else{n[p]=!0,o=m-g;var f;if(c==-1?f=u.substring(m,m+s.length):f=u.substring(m,c+this.Match_MaxBits),s==f)u=u.substring(0,m)+this.diff_text2(r[p].diffs)+u.substring(m+s.length);else{var A=this.diff_main(s,f,!1);if(s.length>this.Match_MaxBits&&this.diff_levenshtein(A)/s.length>this.Patch_DeleteThreshold)n[p]=!1;else{this.diff_cleanupSemanticLossless(A);for(var v=0,E,C=0;Cp[0][1].length){var g=u-p[0][1].length;p[0][1]=h.substring(p[0][1].length)+p[0][1],n.start1-=g,n.start2-=g,n.length1+=g,n.length2+=g}if(n=r[r.length-1],p=n.diffs,p.length==0||p[p.length-1][0]!=i)p.push(new y.Diff(i,h)),n.length1+=u,n.length2+=u;else if(u>p[p.length-1][1].length){var g=u-p[p.length-1][1].length;p[p.length-1][1]+=h.substring(0,g),n.length1+=g,n.length2+=g}return h},y.prototype.patch_splitMax=function(r){for(var u=this.Match_MaxBits,h=0;h2*u?(s.length1+=f.length,n+=f.length,m=!1,s.diffs.push(new y.Diff(c,f)),o.diffs.shift()):(f=f.substring(0,u-s.length1-this.Patch_Margin),s.length1+=f.length,n+=f.length,c===i?(s.length2+=f.length,p+=f.length):m=!1,s.diffs.push(new y.Diff(c,f)),f==o.diffs[0][1]?o.diffs.shift():o.diffs[0][1]=o.diffs[0][1].substring(f.length))}g=this.diff_text2(s.diffs),g=g.substring(g.length-this.Patch_Margin);var A=this.diff_text1(o.diffs).substring(0,this.Patch_Margin);A!==""&&(s.length1+=A.length,s.length2+=A.length,s.diffs.length!==0&&s.diffs[s.diffs.length-1][0]===i?s.diffs[s.diffs.length-1][1]+=A:s.diffs.push(new y.Diff(i,A))),m||r.splice(++h,0,s)}}},y.prototype.patch_toText=function(r){for(var u=[],h=0;h= 2.0.0-beta.1",7:">= 4.0.0 <4.3.0",8:">= 4.3.0"};o.REVISION_CHANGES=v;var E="[object Object]";i.prototype={constructor:i,logger:n.default,log:n.default.log,registerHelper:function(A,T){if(p.toString.call(A)===E){if(T)throw new l.default("Arg not supported with multiple helpers");p.extend(this.helpers,A)}else this.helpers[A]=T},unregisterHelper:function(A){delete this.helpers[A]},registerPartial:function(A,T){if(p.toString.call(A)===E)p.extend(this.partials,A);else{if(typeof T=="undefined")throw new l.default('Attempting to register a partial called "'+A+'" as undefined');this.partials[A]=T}},unregisterPartial:function(A){delete this.partials[A]},registerDecorator:function(A,T){if(p.toString.call(A)===E){if(T)throw new l.default("Arg not supported with multiple decorators");p.extend(this.decorators,A)}else this.decorators[A]=T},unregisterDecorator:function(A){delete this.decorators[A]},resetLoggedPropertyAccesses:function(){m.resetLoggedProperties()}};var N=n.default.log;o.log=N,o.createFrame=p.createFrame,o.logger=n.default},function(y,o){"use strict";function h(v){return g[v]}function i(v){for(var E=1;E":">",'"':""","'":"'","`":"`","=":"="},n=/[&<>"'`=]/g,m=/[&<>"'`=]/,f=Object.prototype.toString;o.toString=f;var d=function(v){return typeof v=="function"};d(/x/)&&(o.isFunction=d=function(v){return typeof v=="function"&&f.call(v)==="[object Function]"}),o.isFunction=d;var S=Array.isArray||function(v){return!(!v||typeof v!="object")&&f.call(v)==="[object Array]"};o.isArray=S},function(y,o,h){"use strict";function i(c,l){var s=l&&l.loc,u=void 0,g=void 0,n=void 0,m=void 0;s&&(u=s.start.line,g=s.end.line,n=s.start.column,m=s.end.column,c+=" - "+u+":"+n);for(var f=Error.prototype.constructor.call(this,c),d=0;d0?(c.ids&&(c.ids=[c.name]),r.helpers.each(p,c)):l(this);if(c.data&&c.ids){var u=i.createFrame(c.data);u.contextPath=i.appendContextPath(c.data.contextPath,c.name),c={data:u}}return s(p,c)})},y.exports=o.default},function(y,o,h){(function(i){"use strict";var r=h(13).default,p=h(1).default;o.__esModule=!0;var c=h(5),l=h(6),s=p(l);o.default=function(u){u.registerHelper("each",function(g,n){function m(C,I,R){E&&(E.key=C,E.index=I,E.first=I===0,E.last=!!R,N&&(E.contextPath=N+C)),v+=f(g[C],{data:E,blockParams:c.blockParams([g[C],C],[N+C,null])})}if(!n)throw new s.default("Must pass iterator to #each");var f=n.fn,d=n.inverse,S=0,v="",E=void 0,N=void 0;if(n.data&&n.ids&&(N=c.appendContextPath(n.data.contextPath,n.ids[0])+"."),c.isFunction(g)&&(g=g.call(this)),n.data&&(E=c.createFrame(n.data)),g&&typeof g=="object")if(c.isArray(g))for(var A=g.length;S=0?c:parseInt(p,10)}return p},log:function(p){if(p=r.lookupLevel(p),typeof console!="undefined"&&r.lookupLevel(r.level)<=p){var c=r.methodMap[p];console[c]||(c="log");for(var l=arguments.length,s=Array(l>1?l-1:0),u=1;u= 2.0.0-beta.1",7:">= 4.0.0 <4.3.0",8:">= 4.3.0"};a.REVISION_CHANGES=v;var E="[object Object]";i.prototype={constructor:i,logger:s.default,log:s.default.log,registerHelper:function(S,b){if(u.toString.call(S)===E){if(b)throw new o.default("Arg not supported with multiple helpers");u.extend(this.helpers,S)}else this.helpers[S]=b},unregisterHelper:function(S){delete this.helpers[S]},registerPartial:function(S,b){if(u.toString.call(S)===E)u.extend(this.partials,S);else{if(typeof b=="undefined")throw new o.default('Attempting to register a partial called "'+S+'" as undefined');this.partials[S]=b}},unregisterPartial:function(S){delete this.partials[S]},registerDecorator:function(S,b){if(u.toString.call(S)===E){if(b)throw new o.default("Arg not supported with multiple decorators");u.extend(this.decorators,S)}else this.decorators[S]=b},unregisterDecorator:function(S){delete this.decorators[S]},resetLoggedPropertyAccesses:function(){m.resetLoggedProperties()}};var C=s.default.log;a.log=C,a.createFrame=u.createFrame,a.logger=s.default},function(y,a){"use strict";function d(v){return g[v]}function i(v){for(var E=1;E":">",'"':""","'":"'","`":"`","=":"="},s=/[&<>"'`=]/g,m=/[&<>"'`=]/,c=Object.prototype.toString;a.toString=c;var f=function(v){return typeof v=="function"};f(/x/)&&(a.isFunction=f=function(v){return typeof v=="function"&&c.call(v)==="[object Function]"}),a.isFunction=f;var A=Array.isArray||function(v){return!(!v||typeof v!="object")&&c.call(v)==="[object Array]"};a.isArray=A},function(y,a,d){"use strict";function i(h,o){var n=o&&o.loc,p=void 0,g=void 0,s=void 0,m=void 0;n&&(p=n.start.line,g=n.end.line,s=n.start.column,m=n.end.column,h+=" - "+p+":"+s);for(var c=Error.prototype.constructor.call(this,h),f=0;f0?(h.ids&&(h.ids=[h.name]),r.helpers.each(u,h)):o(this);if(h.data&&h.ids){var p=i.createFrame(h.data);p.contextPath=i.appendContextPath(h.data.contextPath,h.name),h={data:p}}return n(u,h)})},y.exports=a.default},function(y,a,d){(function(i){"use strict";var r=d(13).default,u=d(1).default;a.__esModule=!0;var h=d(5),o=d(6),n=u(o);a.default=function(p){p.registerHelper("each",function(g,s){function m(L,I,w){E&&(E.key=L,E.index=I,E.first=I===0,E.last=!!w,C&&(E.contextPath=C+L)),v+=c(g[L],{data:E,blockParams:h.blockParams([g[L],L],[C+L,null])})}if(!s)throw new n.default("Must pass iterator to #each");var c=s.fn,f=s.inverse,A=0,v="",E=void 0,C=void 0;if(s.data&&s.ids&&(C=h.appendContextPath(s.data.contextPath,s.ids[0])+"."),h.isFunction(g)&&(g=g.call(this)),s.data&&(E=h.createFrame(s.data)),g&&typeof g=="object")if(h.isArray(g))for(var S=g.length;A=0?h:parseInt(u,10)}return u},log:function(u){if(u=r.lookupLevel(u),typeof console!="undefined"&&r.lookupLevel(r.level)<=u){var h=r.methodMap[u];console[h]||(h="log");for(var o=arguments.length,n=Array(o>1?o-1:0),p=1;p=b.LAST_COMPATIBLE_COMPILER_REVISION&&x<=b.COMPILER_REVISION)){if(x2&&O.push("'"+this.terminals_[I]+"'");F=this.lexer.showPosition?"Parse error on line "+(d+1)+`: +See https://handlebarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access for details`))}function o(){p(f).forEach(function(A){delete f[A]})}var n=d(34).default,p=d(13).default,g=d(3).default;a.__esModule=!0,a.createProtoAccessControl=i,a.resultIsAllowed=r,a.resetLoggedProperties=o;var s=d(36),m=d(32),c=g(m),f=n(null)},function(y,a,d){y.exports={default:d(35),__esModule:!0}},function(y,a,d){var i=d(9);y.exports=function(r,u){return i.create(r,u)}},function(y,a,d){"use strict";function i(){for(var h=arguments.length,o=Array(h),n=0;n=N.LAST_COMPATIBLE_COMPILER_REVISION&&T<=N.COMPILER_REVISION)){if(T2&&R.push("'"+this.terminals_[I]+"'");U=this.lexer.showPosition?"Parse error on line "+(f+1)+`: `+this.lexer.showPosition()+` -Expecting `+O.join(", ")+", got '"+(this.terminals_[A]||A)+"'":"Parse error on line "+(d+1)+": Unexpected "+(A==1?"end of input":"'"+(this.terminals_[A]||A)+"'"),this.parseError(F,{text:this.lexer.match,token:this.terminals_[A]||A,line:this.lexer.yylineno,loc:E,expected:O})}}if(D[0]instanceof Array&&D.length>1)throw new Error("Parse Error: multiple actions possible at state: "+b+", token: "+A);switch(D[0]){case 1:u.push(A),g.push(this.lexer.yytext),n.push(this.lexer.yylloc),u.push(D[1]),A=null,T?(A=T,T=null):(S=this.lexer.yyleng,f=this.lexer.yytext,d=this.lexer.yylineno,E=this.lexer.yylloc,v>0&&v--);break;case 2:if(R=this.productions_[D[1]][1],$.$=g[g.length-R],$._$={first_line:n[n.length-(R||1)].first_line,last_line:n[n.length-1].last_line,first_column:n[n.length-(R||1)].first_column,last_column:n[n.length-1].last_column},N&&($._$.range=[n[n.length-(R||1)].range[0],n[n.length-1].range[1]]),C=this.performAction.call($,f,S,d,this.yy,D[1],g,n),typeof C!="undefined")return C;R&&(u=u.slice(0,-1*R*2),g=g.slice(0,-1*R),n=n.slice(0,-1*R)),u.push(this.productions_[D[1]][0]),g.push($.$),n.push($._$),x=m[u[u.length-2]][u[u.length-1]],u.push(x);break;case 3:return!0}}return!0}},p=function(){var c={EOF:1,parseError:function(l,s){if(!this.yy.parser)throw new Error(l);this.yy.parser.parseError(l,s)},setInput:function(l){return this._input=l,this._more=this._less=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var l=this._input[0];this.yytext+=l,this.yyleng++,this.offset++,this.match+=l,this.matched+=l;var s=l.match(/(?:\r\n?|\n).*/g);return s?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),l},unput:function(l){var s=l.length,u=l.split(/(?:\r\n?|\n)/g);this._input=l+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-s-1),this.offset-=s;var g=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),u.length-1&&(this.yylineno-=u.length-1);var n=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:u?(u.length===g.length?this.yylloc.first_column:0)+g[g.length-u.length].length-u[0].length:this.yylloc.first_column-s},this.options.ranges&&(this.yylloc.range=[n[0],n[0]+this.yyleng-s]),this},more:function(){return this._more=!0,this},less:function(l){this.unput(this.match.slice(l))},pastInput:function(){var l=this.matched.substr(0,this.matched.length-this.match.length);return(l.length>20?"...":"")+l.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var l=this.match;return l.length<20&&(l+=this._input.substr(0,20-l.length)),(l.substr(0,20)+(l.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var l=this.pastInput(),s=new Array(l.length+1).join("-");return l+this.upcomingInput()+` -`+s+"^"},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var l,s,u,g,n;this._more||(this.yytext="",this.match="");for(var m=this._currentRules(),f=0;fs[0].length)||(s=u,g=f,this.options.flex));f++);return s?(n=s[0].match(/(?:\r\n?|\n).*/g),n&&(this.yylineno+=n.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:n?n[n.length-1].length-n[n.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+s[0].length},this.yytext+=s[0],this.match+=s[0],this.matches=s,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._input=this._input.slice(s[0].length),this.matched+=s[0],l=this.performAction.call(this,this.yy,this,m[g],this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),l||void 0):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var l=this.next();return typeof l!="undefined"?l:this.lex()},begin:function(l){this.conditionStack.push(l)},popState:function(){return this.conditionStack.pop()},_currentRules:function(){return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules},topState:function(){return this.conditionStack[this.conditionStack.length-2]},pushState:function(l){this.begin(l)}};return c.options={},c.performAction=function(l,s,u,g){function n(m,f){return s.yytext=s.yytext.substring(m,s.yyleng-f+m)}switch(u){case 0:if(s.yytext.slice(-2)==="\\\\"?(n(0,1),this.begin("mu")):s.yytext.slice(-1)==="\\"?(n(0,1),this.begin("emu")):this.begin("mu"),s.yytext)return 15;break;case 1:return 15;case 2:return this.popState(),15;case 3:return this.begin("raw"),15;case 4:return this.popState(),this.conditionStack[this.conditionStack.length-1]==="raw"?15:(n(5,9),"END_RAW_BLOCK");case 5:return 15;case 6:return this.popState(),14;case 7:return 65;case 8:return 68;case 9:return 19;case 10:return this.popState(),this.begin("raw"),23;case 11:return 55;case 12:return 60;case 13:return 29;case 14:return 47;case 15:return this.popState(),44;case 16:return this.popState(),44;case 17:return 34;case 18:return 39;case 19:return 51;case 20:return 48;case 21:this.unput(s.yytext),this.popState(),this.begin("com");break;case 22:return this.popState(),14;case 23:return 48;case 24:return 73;case 25:return 72;case 26:return 72;case 27:return 87;case 28:break;case 29:return this.popState(),54;case 30:return this.popState(),33;case 31:return s.yytext=n(1,2).replace(/\\"/g,'"'),80;case 32:return s.yytext=n(1,2).replace(/\\'/g,"'"),80;case 33:return 85;case 34:return 82;case 35:return 82;case 36:return 83;case 37:return 84;case 38:return 81;case 39:return 75;case 40:return 77;case 41:return 72;case 42:return s.yytext=s.yytext.replace(/\\([\\\]])/g,"$1"),72;case 43:return"INVALID";case 44:return 5}},c.rules=[/^(?:[^\x00]*?(?=(\{\{)))/,/^(?:[^\x00]+)/,/^(?:[^\x00]{2,}?(?=(\{\{|\\\{\{|\\\\\{\{|$)))/,/^(?:\{\{\{\{(?=[^\/]))/,/^(?:\{\{\{\{\/[^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=[=}\s\/.])\}\}\}\})/,/^(?:[^\x00]+?(?=(\{\{\{\{)))/,/^(?:[\s\S]*?--(~)?\}\})/,/^(?:\()/,/^(?:\))/,/^(?:\{\{\{\{)/,/^(?:\}\}\}\})/,/^(?:\{\{(~)?>)/,/^(?:\{\{(~)?#>)/,/^(?:\{\{(~)?#\*?)/,/^(?:\{\{(~)?\/)/,/^(?:\{\{(~)?\^\s*(~)?\}\})/,/^(?:\{\{(~)?\s*else\s*(~)?\}\})/,/^(?:\{\{(~)?\^)/,/^(?:\{\{(~)?\s*else\b)/,/^(?:\{\{(~)?\{)/,/^(?:\{\{(~)?&)/,/^(?:\{\{(~)?!--)/,/^(?:\{\{(~)?![\s\S]*?\}\})/,/^(?:\{\{(~)?\*?)/,/^(?:=)/,/^(?:\.\.)/,/^(?:\.(?=([=~}\s\/.)|])))/,/^(?:[\/.])/,/^(?:\s+)/,/^(?:\}(~)?\}\})/,/^(?:(~)?\}\})/,/^(?:"(\\["]|[^"])*")/,/^(?:'(\\[']|[^'])*')/,/^(?:@)/,/^(?:true(?=([~}\s)])))/,/^(?:false(?=([~}\s)])))/,/^(?:undefined(?=([~}\s)])))/,/^(?:null(?=([~}\s)])))/,/^(?:-?[0-9]+(?:\.[0-9]+)?(?=([~}\s)])))/,/^(?:as\s+\|)/,/^(?:\|)/,/^(?:([^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=([=~}\s\/.)|]))))/,/^(?:\[(\\\]|[^\]])*\])/,/^(?:.)/,/^(?:$)/],c.conditions={mu:{rules:[7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44],inclusive:!1},emu:{rules:[2],inclusive:!1},com:{rules:[6],inclusive:!1},raw:{rules:[3,4,5],inclusive:!1},INITIAL:{rules:[0,1,44],inclusive:!0}},c}();return r.lexer=p,i.prototype=r,r.Parser=i,new i}();o.default=h,y.exports=o.default},function(y,o,h){"use strict";function i(){var n=arguments.length<=0||arguments[0]===void 0?{}:arguments[0];this.options=n}function r(n,m,f){m===void 0&&(m=n.length);var d=n[m-1],S=n[m-2];return d?d.type==="ContentStatement"?(S||!f?/\r?\n\s*?$/:/(^|\r?\n)\s*?$/).test(d.original):void 0:f}function p(n,m,f){m===void 0&&(m=-1);var d=n[m+1],S=n[m+2];return d?d.type==="ContentStatement"?(S||!f?/^\s*?\r?\n/:/^\s*?(\r?\n|$)/).test(d.original):void 0:f}function c(n,m,f){var d=n[m==null?0:m+1];if(d&&d.type==="ContentStatement"&&(f||!d.rightStripped)){var S=d.value;d.value=d.value.replace(f?/^\s+/:/^[ \t]*\r?\n?/,""),d.rightStripped=d.value!==S}}function l(n,m,f){var d=n[m==null?n.length-1:m-1];if(d&&d.type==="ContentStatement"&&(f||!d.leftStripped)){var S=d.value;return d.value=d.value.replace(f?/\s+$/:/[ \t]+$/,""),d.leftStripped=d.value!==S,d.leftStripped}}var s=h(1).default;o.__esModule=!0;var u=h(49),g=s(u);i.prototype=new g.default,i.prototype.Program=function(n){var m=!this.options.ignoreStandalone,f=!this.isRootSeen;this.isRootSeen=!0;for(var d=n.body,S=0,v=d.length;S0)throw new v.default("Invalid path: "+T,{loc:A});R===".."&&D++}}return{type:"PathExpression",data:E,depth:D,parts:b,original:T,loc:A}}function u(E,N,A,T,b,D){var C=T.charAt(3)||T.charAt(2),I=C!=="{"&&C!=="&",R=/\*/.test(T);return{type:R?"Decorator":"MustacheStatement",path:E,params:N,hash:A,escaped:I,strip:b,loc:this.locInfo(D)}}function g(E,N,A,T){i(E,A),T=this.locInfo(T);var b={type:"Program",body:N,strip:{},loc:T};return{type:"BlockStatement",path:E.path,params:E.params,hash:E.hash,program:b,openStrip:{},inverseStrip:{},closeStrip:{},loc:T}}function n(E,N,A,T,b,D){T&&T.path&&i(E,T);var C=/\*/.test(E.open);N.blockParams=E.blockParams;var I=void 0,R=void 0;if(A){if(C)throw new v.default("Unexpected inverse block on decorator",A);A.chain&&(A.program.body[0].closeStrip=T.strip),R=A.strip,I=A.program}return b&&(b=I,I=N,N=b),{type:C?"DecoratorBlock":"BlockStatement",path:E.path,params:E.params,hash:E.hash,program:N,inverse:I,openStrip:E.strip,inverseStrip:R,closeStrip:T&&T.strip,loc:this.locInfo(D)}}function m(E,N){if(!N&&E.length){var A=E[0].loc,T=E[E.length-1].loc;A&&T&&(N={source:A.source,start:{line:A.start.line,column:A.start.column},end:{line:T.end.line,column:T.end.column}})}return{type:"Program",body:E,strip:{},loc:N}}function f(E,N,A,T){return i(E,A),{type:"PartialBlockStatement",name:E.path,params:E.params,hash:E.hash,program:N,openStrip:E.strip,closeStrip:A&&A.strip,loc:this.locInfo(T)}}var d=h(1).default;o.__esModule=!0,o.SourceLocation=r,o.id=p,o.stripFlags=c,o.stripComment=l,o.preparePath=s,o.prepareMustache=u,o.prepareRawBlock=g,o.prepareBlock=n,o.prepareProgram=m,o.preparePartialBlock=f;var S=h(6),v=d(S)},function(y,o,h){"use strict";function i(){}function r(v,E,N){if(v==null||typeof v!="string"&&v.type!=="Program")throw new n.default("You must pass a string or Handlebars AST to Handlebars.precompile. You passed "+v);E=E||{},"data"in E||(E.data=!0),E.compat&&(E.useDepths=!0);var A=N.parse(v,E),T=new N.Compiler().compile(A,E);return new N.JavaScriptCompiler().compile(T,E)}function p(v,E,N){function A(){var D=N.parse(v,E),C=new N.Compiler().compile(D,E),I=new N.JavaScriptCompiler().compile(C,E,void 0,!0);return N.template(I)}function T(D,C){return b||(b=A()),b.call(this,D,C)}if(E===void 0&&(E={}),v==null||typeof v!="string"&&v.type!=="Program")throw new n.default("You must pass a string or Handlebars AST to Handlebars.compile. You passed "+v);E=m.extend({},E),"data"in E||(E.data=!0),E.compat&&(E.useDepths=!0);var b=void 0;return T._setup=function(D){return b||(b=A()),b._setup(D)},T._child=function(D,C,I,R){return b||(b=A()),b._child(D,C,I,R)},T}function c(v,E){if(v===E)return!0;if(m.isArray(v)&&m.isArray(E)&&v.length===E.length){for(var N=0;N1)throw new n.default("Unsupported number of partial arguments: "+N.length,v);N.length||(this.options.explicitPartialContext?this.opcode("pushLiteral","undefined"):N.push({type:"PathExpression",parts:[],depth:0}));var A=v.name.original,T=v.name.type==="SubExpression";T&&this.accept(v.name),this.setupFullMustacheParams(v,E,void 0,!0);var b=v.indent||"";this.options.preventIndent&&b&&(this.opcode("appendContent",b),b=""),this.opcode("invokePartial",T,A,b),this.opcode("append")},PartialBlockStatement:function(v){this.PartialStatement(v)},MustacheStatement:function(v){this.SubExpression(v),v.escaped&&!this.options.noEscape?this.opcode("appendEscaped"):this.opcode("append")},Decorator:function(v){this.DecoratorBlock(v)},ContentStatement:function(v){v.value&&this.opcode("appendContent",v.value)},CommentStatement:function(){},SubExpression:function(v){l(v);var E=this.classifySexpr(v);E==="simple"?this.simpleSexpr(v):E==="helper"?this.helperSexpr(v):this.ambiguousSexpr(v)},ambiguousSexpr:function(v,E,N){var A=v.path,T=A.parts[0],b=E!=null||N!=null;this.opcode("getContext",A.depth),this.opcode("pushProgram",E),this.opcode("pushProgram",N),A.strict=!0,this.accept(A),this.opcode("invokeAmbiguous",T,b)},simpleSexpr:function(v){var E=v.path;E.strict=!0,this.accept(E),this.opcode("resolvePossibleLambda")},helperSexpr:function(v,E,N){var A=this.setupFullMustacheParams(v,E,N),T=v.path,b=T.parts[0];if(this.options.knownHelpers[b])this.opcode("invokeKnownHelper",A.length,b);else{if(this.options.knownHelpersOnly)throw new n.default("You specified knownHelpersOnly, but used the unknown helper "+b,v);T.strict=!0,T.falsy=!0,this.accept(T),this.opcode("invokeHelper",A.length,T.original,d.default.helpers.simpleId(T))}},PathExpression:function(v){this.addDepth(v.depth),this.opcode("getContext",v.depth);var E=v.parts[0],N=d.default.helpers.scopedId(v),A=!v.depth&&!N&&this.blockParamIndex(E);A?this.opcode("lookupBlockParam",A,v.parts):E?v.data?(this.options.data=!0,this.opcode("lookupData",v.depth,v.parts,v.strict)):this.opcode("lookupOnContext",v.parts,v.falsy,v.strict,N):this.opcode("pushContext")},StringLiteral:function(v){this.opcode("pushString",v.value)},NumberLiteral:function(v){this.opcode("pushLiteral",v.value)},BooleanLiteral:function(v){this.opcode("pushLiteral",v.value)},UndefinedLiteral:function(){this.opcode("pushLiteral","undefined")},NullLiteral:function(){this.opcode("pushLiteral","null")},Hash:function(v){var E=v.pairs,N=0,A=E.length;for(this.opcode("pushHash");N=0)return[E,T]}}}},function(y,o,h){"use strict";function i(d){this.value=d}function r(){}function p(d,S,v,E){var N=S.popStack(),A=0,T=v.length;for(d&&T--;A1)throw new Error("Parse Error: multiple actions possible at state: "+N+", token: "+S);switch(D[0]){case 1:p.push(S),g.push(this.lexer.yytext),s.push(this.lexer.yylloc),p.push(D[1]),S=null,b?(S=b,b=null):(A=this.lexer.yyleng,c=this.lexer.yytext,f=this.lexer.yylineno,E=this.lexer.yylloc,v>0&&v--);break;case 2:if(w=this.productions_[D[1]][1],M.$=g[g.length-w],M._$={first_line:s[s.length-(w||1)].first_line,last_line:s[s.length-1].last_line,first_column:s[s.length-(w||1)].first_column,last_column:s[s.length-1].last_column},C&&(M._$.range=[s[s.length-(w||1)].range[0],s[s.length-1].range[1]]),L=this.performAction.call(M,c,A,f,this.yy,D[1],g,s),typeof L!="undefined")return L;w&&(p=p.slice(0,-1*w*2),g=g.slice(0,-1*w),s=s.slice(0,-1*w)),p.push(this.productions_[D[1]][0]),g.push(M.$),s.push(M._$),T=m[p[p.length-2]][p[p.length-1]],p.push(T);break;case 3:return!0}}return!0}},u=function(){var h={EOF:1,parseError:function(o,n){if(!this.yy.parser)throw new Error(o);this.yy.parser.parseError(o,n)},setInput:function(o){return this._input=o,this._more=this._less=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var o=this._input[0];this.yytext+=o,this.yyleng++,this.offset++,this.match+=o,this.matched+=o;var n=o.match(/(?:\r\n?|\n).*/g);return n?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),o},unput:function(o){var n=o.length,p=o.split(/(?:\r\n?|\n)/g);this._input=o+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-n-1),this.offset-=n;var g=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),p.length-1&&(this.yylineno-=p.length-1);var s=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:p?(p.length===g.length?this.yylloc.first_column:0)+g[g.length-p.length].length-p[0].length:this.yylloc.first_column-n},this.options.ranges&&(this.yylloc.range=[s[0],s[0]+this.yyleng-n]),this},more:function(){return this._more=!0,this},less:function(o){this.unput(this.match.slice(o))},pastInput:function(){var o=this.matched.substr(0,this.matched.length-this.match.length);return(o.length>20?"...":"")+o.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var o=this.match;return o.length<20&&(o+=this._input.substr(0,20-o.length)),(o.substr(0,20)+(o.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var o=this.pastInput(),n=new Array(o.length+1).join("-");return o+this.upcomingInput()+` +`+n+"^"},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var o,n,p,g,s;this._more||(this.yytext="",this.match="");for(var m=this._currentRules(),c=0;cn[0].length)||(n=p,g=c,this.options.flex));c++);return n?(s=n[0].match(/(?:\r\n?|\n).*/g),s&&(this.yylineno+=s.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:s?s[s.length-1].length-s[s.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+n[0].length},this.yytext+=n[0],this.match+=n[0],this.matches=n,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._input=this._input.slice(n[0].length),this.matched+=n[0],o=this.performAction.call(this,this.yy,this,m[g],this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),o||void 0):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var o=this.next();return typeof o!="undefined"?o:this.lex()},begin:function(o){this.conditionStack.push(o)},popState:function(){return this.conditionStack.pop()},_currentRules:function(){return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules},topState:function(){return this.conditionStack[this.conditionStack.length-2]},pushState:function(o){this.begin(o)}};return h.options={},h.performAction=function(o,n,p,g){function s(m,c){return n.yytext=n.yytext.substring(m,n.yyleng-c+m)}switch(p){case 0:if(n.yytext.slice(-2)==="\\\\"?(s(0,1),this.begin("mu")):n.yytext.slice(-1)==="\\"?(s(0,1),this.begin("emu")):this.begin("mu"),n.yytext)return 15;break;case 1:return 15;case 2:return this.popState(),15;case 3:return this.begin("raw"),15;case 4:return this.popState(),this.conditionStack[this.conditionStack.length-1]==="raw"?15:(s(5,9),"END_RAW_BLOCK");case 5:return 15;case 6:return this.popState(),14;case 7:return 65;case 8:return 68;case 9:return 19;case 10:return this.popState(),this.begin("raw"),23;case 11:return 55;case 12:return 60;case 13:return 29;case 14:return 47;case 15:return this.popState(),44;case 16:return this.popState(),44;case 17:return 34;case 18:return 39;case 19:return 51;case 20:return 48;case 21:this.unput(n.yytext),this.popState(),this.begin("com");break;case 22:return this.popState(),14;case 23:return 48;case 24:return 73;case 25:return 72;case 26:return 72;case 27:return 87;case 28:break;case 29:return this.popState(),54;case 30:return this.popState(),33;case 31:return n.yytext=s(1,2).replace(/\\"/g,'"'),80;case 32:return n.yytext=s(1,2).replace(/\\'/g,"'"),80;case 33:return 85;case 34:return 82;case 35:return 82;case 36:return 83;case 37:return 84;case 38:return 81;case 39:return 75;case 40:return 77;case 41:return 72;case 42:return n.yytext=n.yytext.replace(/\\([\\\]])/g,"$1"),72;case 43:return"INVALID";case 44:return 5}},h.rules=[/^(?:[^\x00]*?(?=(\{\{)))/,/^(?:[^\x00]+)/,/^(?:[^\x00]{2,}?(?=(\{\{|\\\{\{|\\\\\{\{|$)))/,/^(?:\{\{\{\{(?=[^\/]))/,/^(?:\{\{\{\{\/[^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=[=}\s\/.])\}\}\}\})/,/^(?:[^\x00]+?(?=(\{\{\{\{)))/,/^(?:[\s\S]*?--(~)?\}\})/,/^(?:\()/,/^(?:\))/,/^(?:\{\{\{\{)/,/^(?:\}\}\}\})/,/^(?:\{\{(~)?>)/,/^(?:\{\{(~)?#>)/,/^(?:\{\{(~)?#\*?)/,/^(?:\{\{(~)?\/)/,/^(?:\{\{(~)?\^\s*(~)?\}\})/,/^(?:\{\{(~)?\s*else\s*(~)?\}\})/,/^(?:\{\{(~)?\^)/,/^(?:\{\{(~)?\s*else\b)/,/^(?:\{\{(~)?\{)/,/^(?:\{\{(~)?&)/,/^(?:\{\{(~)?!--)/,/^(?:\{\{(~)?![\s\S]*?\}\})/,/^(?:\{\{(~)?\*?)/,/^(?:=)/,/^(?:\.\.)/,/^(?:\.(?=([=~}\s\/.)|])))/,/^(?:[\/.])/,/^(?:\s+)/,/^(?:\}(~)?\}\})/,/^(?:(~)?\}\})/,/^(?:"(\\["]|[^"])*")/,/^(?:'(\\[']|[^'])*')/,/^(?:@)/,/^(?:true(?=([~}\s)])))/,/^(?:false(?=([~}\s)])))/,/^(?:undefined(?=([~}\s)])))/,/^(?:null(?=([~}\s)])))/,/^(?:-?[0-9]+(?:\.[0-9]+)?(?=([~}\s)])))/,/^(?:as\s+\|)/,/^(?:\|)/,/^(?:([^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=([=~}\s\/.)|]))))/,/^(?:\[(\\\]|[^\]])*\])/,/^(?:.)/,/^(?:$)/],h.conditions={mu:{rules:[7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44],inclusive:!1},emu:{rules:[2],inclusive:!1},com:{rules:[6],inclusive:!1},raw:{rules:[3,4,5],inclusive:!1},INITIAL:{rules:[0,1,44],inclusive:!0}},h}();return r.lexer=u,i.prototype=r,r.Parser=i,new i}();a.default=d,y.exports=a.default},function(y,a,d){"use strict";function i(){var s=arguments.length<=0||arguments[0]===void 0?{}:arguments[0];this.options=s}function r(s,m,c){m===void 0&&(m=s.length);var f=s[m-1],A=s[m-2];return f?f.type==="ContentStatement"?(A||!c?/\r?\n\s*?$/:/(^|\r?\n)\s*?$/).test(f.original):void 0:c}function u(s,m,c){m===void 0&&(m=-1);var f=s[m+1],A=s[m+2];return f?f.type==="ContentStatement"?(A||!c?/^\s*?\r?\n/:/^\s*?(\r?\n|$)/).test(f.original):void 0:c}function h(s,m,c){var f=s[m==null?0:m+1];if(f&&f.type==="ContentStatement"&&(c||!f.rightStripped)){var A=f.value;f.value=f.value.replace(c?/^\s+/:/^[ \t]*\r?\n?/,""),f.rightStripped=f.value!==A}}function o(s,m,c){var f=s[m==null?s.length-1:m-1];if(f&&f.type==="ContentStatement"&&(c||!f.leftStripped)){var A=f.value;return f.value=f.value.replace(c?/\s+$/:/[ \t]+$/,""),f.leftStripped=f.value!==A,f.leftStripped}}var n=d(1).default;a.__esModule=!0;var p=d(49),g=n(p);i.prototype=new g.default,i.prototype.Program=function(s){var m=!this.options.ignoreStandalone,c=!this.isRootSeen;this.isRootSeen=!0;for(var f=s.body,A=0,v=f.length;A0)throw new v.default("Invalid path: "+b,{loc:S});w===".."&&D++}}return{type:"PathExpression",data:E,depth:D,parts:N,original:b,loc:S}}function p(E,C,S,b,N,D){var L=b.charAt(3)||b.charAt(2),I=L!=="{"&&L!=="&",w=/\*/.test(b);return{type:w?"Decorator":"MustacheStatement",path:E,params:C,hash:S,escaped:I,strip:N,loc:this.locInfo(D)}}function g(E,C,S,b){i(E,S),b=this.locInfo(b);var N={type:"Program",body:C,strip:{},loc:b};return{type:"BlockStatement",path:E.path,params:E.params,hash:E.hash,program:N,openStrip:{},inverseStrip:{},closeStrip:{},loc:b}}function s(E,C,S,b,N,D){b&&b.path&&i(E,b);var L=/\*/.test(E.open);C.blockParams=E.blockParams;var I=void 0,w=void 0;if(S){if(L)throw new v.default("Unexpected inverse block on decorator",S);S.chain&&(S.program.body[0].closeStrip=b.strip),w=S.strip,I=S.program}return N&&(N=I,I=C,C=N),{type:L?"DecoratorBlock":"BlockStatement",path:E.path,params:E.params,hash:E.hash,program:C,inverse:I,openStrip:E.strip,inverseStrip:w,closeStrip:b&&b.strip,loc:this.locInfo(D)}}function m(E,C){if(!C&&E.length){var S=E[0].loc,b=E[E.length-1].loc;S&&b&&(C={source:S.source,start:{line:S.start.line,column:S.start.column},end:{line:b.end.line,column:b.end.column}})}return{type:"Program",body:E,strip:{},loc:C}}function c(E,C,S,b){return i(E,S),{type:"PartialBlockStatement",name:E.path,params:E.params,hash:E.hash,program:C,openStrip:E.strip,closeStrip:S&&S.strip,loc:this.locInfo(b)}}var f=d(1).default;a.__esModule=!0,a.SourceLocation=r,a.id=u,a.stripFlags=h,a.stripComment=o,a.preparePath=n,a.prepareMustache=p,a.prepareRawBlock=g,a.prepareBlock=s,a.prepareProgram=m,a.preparePartialBlock=c;var A=d(6),v=f(A)},function(y,a,d){"use strict";function i(){}function r(v,E,C){if(v==null||typeof v!="string"&&v.type!=="Program")throw new s.default("You must pass a string or Handlebars AST to Handlebars.precompile. You passed "+v);E=E||{},"data"in E||(E.data=!0),E.compat&&(E.useDepths=!0);var S=C.parse(v,E),b=new C.Compiler().compile(S,E);return new C.JavaScriptCompiler().compile(b,E)}function u(v,E,C){function S(){var D=C.parse(v,E),L=new C.Compiler().compile(D,E),I=new C.JavaScriptCompiler().compile(L,E,void 0,!0);return C.template(I)}function b(D,L){return N||(N=S()),N.call(this,D,L)}if(E===void 0&&(E={}),v==null||typeof v!="string"&&v.type!=="Program")throw new s.default("You must pass a string or Handlebars AST to Handlebars.compile. You passed "+v);E=m.extend({},E),"data"in E||(E.data=!0),E.compat&&(E.useDepths=!0);var N=void 0;return b._setup=function(D){return N||(N=S()),N._setup(D)},b._child=function(D,L,I,w){return N||(N=S()),N._child(D,L,I,w)},b}function h(v,E){if(v===E)return!0;if(m.isArray(v)&&m.isArray(E)&&v.length===E.length){for(var C=0;C1)throw new s.default("Unsupported number of partial arguments: "+C.length,v);C.length||(this.options.explicitPartialContext?this.opcode("pushLiteral","undefined"):C.push({type:"PathExpression",parts:[],depth:0}));var S=v.name.original,b=v.name.type==="SubExpression";b&&this.accept(v.name),this.setupFullMustacheParams(v,E,void 0,!0);var N=v.indent||"";this.options.preventIndent&&N&&(this.opcode("appendContent",N),N=""),this.opcode("invokePartial",b,S,N),this.opcode("append")},PartialBlockStatement:function(v){this.PartialStatement(v)},MustacheStatement:function(v){this.SubExpression(v),v.escaped&&!this.options.noEscape?this.opcode("appendEscaped"):this.opcode("append")},Decorator:function(v){this.DecoratorBlock(v)},ContentStatement:function(v){v.value&&this.opcode("appendContent",v.value)},CommentStatement:function(){},SubExpression:function(v){o(v);var E=this.classifySexpr(v);E==="simple"?this.simpleSexpr(v):E==="helper"?this.helperSexpr(v):this.ambiguousSexpr(v)},ambiguousSexpr:function(v,E,C){var S=v.path,b=S.parts[0],N=E!=null||C!=null;this.opcode("getContext",S.depth),this.opcode("pushProgram",E),this.opcode("pushProgram",C),S.strict=!0,this.accept(S),this.opcode("invokeAmbiguous",b,N)},simpleSexpr:function(v){var E=v.path;E.strict=!0,this.accept(E),this.opcode("resolvePossibleLambda")},helperSexpr:function(v,E,C){var S=this.setupFullMustacheParams(v,E,C),b=v.path,N=b.parts[0];if(this.options.knownHelpers[N])this.opcode("invokeKnownHelper",S.length,N);else{if(this.options.knownHelpersOnly)throw new s.default("You specified knownHelpersOnly, but used the unknown helper "+N,v);b.strict=!0,b.falsy=!0,this.accept(b),this.opcode("invokeHelper",S.length,b.original,f.default.helpers.simpleId(b))}},PathExpression:function(v){this.addDepth(v.depth),this.opcode("getContext",v.depth);var E=v.parts[0],C=f.default.helpers.scopedId(v),S=!v.depth&&!C&&this.blockParamIndex(E);S?this.opcode("lookupBlockParam",S,v.parts):E?v.data?(this.options.data=!0,this.opcode("lookupData",v.depth,v.parts,v.strict)):this.opcode("lookupOnContext",v.parts,v.falsy,v.strict,C):this.opcode("pushContext")},StringLiteral:function(v){this.opcode("pushString",v.value)},NumberLiteral:function(v){this.opcode("pushLiteral",v.value)},BooleanLiteral:function(v){this.opcode("pushLiteral",v.value)},UndefinedLiteral:function(){this.opcode("pushLiteral","undefined")},NullLiteral:function(){this.opcode("pushLiteral","null")},Hash:function(v){var E=v.pairs,C=0,S=E.length;for(this.opcode("pushHash");C=0)return[E,b]}}}},function(y,a,d){"use strict";function i(f){this.value=f}function r(){}function u(f,A,v,E){var C=A.popStack(),S=0,b=v.length;for(f&&b--;S0&&(v+=", "+E.join(", "));var N=0;c(this.aliases).forEach(function(b){var D=S.aliases[b];D.children&&D.referenceCount>1&&(v+=", alias"+ ++N+"="+b,D.children[0]="alias"+N)}),this.lookupPropertyFunctionIsUsed&&(v+=", "+this.lookupPropertyFunctionVarDeclaration());var A=["container","depth0","helpers","partials","data"];(this.useBlockParams||this.useDepths)&&A.push("blockParams"),this.useDepths&&A.push("depths");var T=this.mergeSource(v);return d?(A.push(T),Function.apply(this,A)):this.source.wrap(["function(",A.join(","),`) { - `,T,"}"])},mergeSource:function(d){var S=this.environment.isSimple,v=!this.forceBuffer,E=void 0,N=void 0,A=void 0,T=void 0;return this.source.each(function(b){b.appendToBuffer?(A?b.prepend(" + "):A=b,T=b):(A&&(N?A.prepend("buffer += "):E=!0,T.add(";"),A=T=void 0),N=!0,S||(v=!1))}),v?A?(A.prepend("return "),T.add(";")):N||this.source.push('return "";'):(d+=", buffer = "+(E?"":this.initializeBuffer()),A?(A.prepend("return buffer + "),T.add(";")):this.source.push("return buffer;")),d&&this.source.prepend("var "+d.substring(2)+(E?"":`; +`),this.decorators=this.decorators.merge()));var L=this.createFunctionContext(E);if(this.isChild)return L;var I={compiler:this.compilerInfo(),main:L};this.decorators&&(I.main_d=this.decorators,I.useDecorators=!0);var w=this.context,T=w.programs,R=w.decorators;for(N=0,D=T.length;N0&&(v+=", "+E.join(", "));var C=0;h(this.aliases).forEach(function(N){var D=A.aliases[N];D.children&&D.referenceCount>1&&(v+=", alias"+ ++C+"="+N,D.children[0]="alias"+C)}),this.lookupPropertyFunctionIsUsed&&(v+=", "+this.lookupPropertyFunctionVarDeclaration());var S=["container","depth0","helpers","partials","data"];(this.useBlockParams||this.useDepths)&&S.push("blockParams"),this.useDepths&&S.push("depths");var b=this.mergeSource(v);return f?(S.push(b),Function.apply(this,S)):this.source.wrap(["function(",S.join(","),`) { + `,b,"}"])},mergeSource:function(f){var A=this.environment.isSimple,v=!this.forceBuffer,E=void 0,C=void 0,S=void 0,b=void 0;return this.source.each(function(N){N.appendToBuffer?(S?N.prepend(" + "):S=N,b=N):(S&&(C?S.prepend("buffer += "):E=!0,b.add(";"),S=b=void 0),C=!0,A||(v=!1))}),v?S?(S.prepend("return "),b.add(";")):C||this.source.push('return "";'):(f+=", buffer = "+(E?"":this.initializeBuffer()),S?(S.prepend("return buffer + "),b.add(";")):this.source.push("return buffer;")),f&&this.source.prepend("var "+f.substring(2)+(E?"":`; `)),this.source.merge()},lookupPropertyFunctionVarDeclaration:function(){return` lookupProperty = container.lookupProperty || function(parent, propertyName) { if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { @@ -47,61 +47,55 @@ Expecting `+O.join(", ")+", got '"+(this.terminals_[A]||A)+"'":"Parse error on l } return undefined } - `.trim()},blockValue:function(d){var S=this.aliasable("container.hooks.blockHelperMissing"),v=[this.contextName(0)];this.setupHelperArgs(d,0,v);var E=this.popStack();v.splice(1,0,E),this.push(this.source.functionCall(S,"call",v))},ambiguousBlockValue:function(){var d=this.aliasable("container.hooks.blockHelperMissing"),S=[this.contextName(0)];this.setupHelperArgs("",0,S,!0),this.flushInline();var v=this.topStack();S.splice(1,0,v),this.pushSource(["if (!",this.lastHelper,") { ",v," = ",this.source.functionCall(d,"call",S),"}"])},appendContent:function(d){this.pendingContent?d=this.pendingContent+d:this.pendingLocation=this.source.currentLocation,this.pendingContent=d},append:function(){if(this.isInline())this.replaceStack(function(S){return[" != null ? ",S,' : ""']}),this.pushSource(this.appendToBuffer(this.popStack()));else{var d=this.popStack();this.pushSource(["if (",d," != null) { ",this.appendToBuffer(d,void 0,!0)," }"]),this.environment.isSimple&&this.pushSource(["else { ",this.appendToBuffer("''",void 0,!0)," }"])}},appendEscaped:function(){this.pushSource(this.appendToBuffer([this.aliasable("container.escapeExpression"),"(",this.popStack(),")"]))},getContext:function(d){this.lastContext=d},pushContext:function(){this.pushStackLiteral(this.contextName(this.lastContext))},lookupOnContext:function(d,S,v,E){var N=0;E||!this.options.compat||this.lastContext?this.pushContext():this.push(this.depthedLookup(d[N++])),this.resolvePath("context",d,N,S,v)},lookupBlockParam:function(d,S){this.useBlockParams=!0,this.push(["blockParams[",d[0],"][",d[1],"]"]),this.resolvePath("context",S,1)},lookupData:function(d,S,v){d?this.pushStackLiteral("container.data(data, "+d+")"):this.pushStackLiteral("data"),this.resolvePath("data",S,0,!0,v)},resolvePath:function(d,S,v,E,N){var A=this;if(this.options.strict||this.options.assumeObjects)return void this.push(p(this.options.strict&&N,this,S,d));for(var T=S.length;vthis.stackVars.length&&this.stackVars.push("stack"+this.stackSlot),this.topStackName()},topStackName:function(){return"stack"+this.stackSlot},flushInline:function(){var d=this.inlineStack;this.inlineStack=[];for(var S=0,v=d.length;S{var h;/*! -* Sizzle CSS Selector Engine v2.3.6 -* https://sizzlejs.com/ -* -* Copyright JS Foundation and other contributors -* Released under the MIT license -* https://js.foundation/ -* -* Date: 2021-02-16 -*/(function(i){var r,p,c,l,s,u,g,n,m,f,d,S,v,E,N,A,T,b,D,C="sizzle"+1*new Date,I=i.document,R=0,x=0,O=Ge(),$=Ge(),F=Ge(),U=Ge(),W=function(k,G){return k===G&&(d=!0),0},z={}.hasOwnProperty,B=[],V=B.pop,Y=B.push,re=B.push,ne=B.slice,pe=function(k,G){for(var Z=0,j=k.length;Z+~]|"+he+")"+he+"*"),we=new RegExp(he+"|>"),_t=new RegExp(nt),$e=new RegExp("^"+Ee+"$"),He={ID:new RegExp("^#("+Ee+")"),CLASS:new RegExp("^\\.("+Ee+")"),TAG:new RegExp("^("+Ee+"|[*])"),ATTR:new RegExp("^"+Le),PSEUDO:new RegExp("^"+nt),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+he+"*(even|odd|(([+-]|)(\\d*)n|)"+he+"*(?:([+-]|)"+he+"*(\\d+)|))"+he+"*\\)|)","i"),bool:new RegExp("^(?:"+te+")$","i"),needsContext:new RegExp("^"+he+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+he+"*((?:-\\d)?\\d*)"+he+"*\\)|)(?=[^-]|$)","i")},Wt=/HTML$/i,Fe=/^(?:input|select|textarea|button)$/i,le=/^h\d$/i,Te=/^[^{]+\{\s*\[native \w/,Ce=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,se=/[+~]/,ve=new RegExp("\\\\[\\da-fA-F]{1,6}"+he+"?|\\\\([^\\r\\n\\f])","g"),me=function(k,G){var Z="0x"+k.slice(1)-65536;return G||(Z<0?String.fromCharCode(Z+65536):String.fromCharCode(Z>>10|55296,Z&1023|56320))},_e=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,Ze=function(k,G){return G?k==="\0"?"\uFFFD":k.slice(0,-1)+"\\"+k.charCodeAt(k.length-1).toString(16)+" ":"\\"+k},Xe=function(){S()},qe=vt(function(k){return k.disabled===!0&&k.nodeName.toLowerCase()==="fieldset"},{dir:"parentNode",next:"legend"});try{re.apply(B=ne.call(I.childNodes),I.childNodes),B[I.childNodes.length].nodeType}catch(k){re={apply:B.length?function(G,Z){Y.apply(G,ne.call(Z))}:function(G,Z){for(var j=G.length,H=0;G[j++]=Z[H++];);G.length=j-1}}}function be(k,G,Z,j){var H,J,ee,ae,fe,ge,Ae,Ne=G&&G.ownerDocument,Oe=G?G.nodeType:9;if(Z=Z||[],typeof k!="string"||!k||Oe!==1&&Oe!==9&&Oe!==11)return Z;if(!j&&(S(G),G=G||v,N)){if(Oe!==11&&(fe=Ce.exec(k)))if(H=fe[1]){if(Oe===9)if(ee=G.getElementById(H)){if(ee.id===H)return Z.push(ee),Z}else return Z;else if(Ne&&(ee=Ne.getElementById(H))&&D(G,ee)&&ee.id===H)return Z.push(ee),Z}else{if(fe[2])return re.apply(Z,G.getElementsByTagName(k)),Z;if((H=fe[3])&&p.getElementsByClassName&&G.getElementsByClassName)return re.apply(Z,G.getElementsByClassName(H)),Z}if(p.qsa&&!U[k+" "]&&(!A||!A.test(k))&&(Oe!==1||G.nodeName.toLowerCase()!=="object")){if(Ae=k,Ne=G,Oe===1&&(we.test(k)||Dt.test(k))){for(Ne=se.test(k)&&dr(G.parentNode)||G,(Ne!==G||!p.scope)&&((ae=G.getAttribute("id"))?ae=ae.replace(_e,Ze):G.setAttribute("id",ae=C)),ge=u(k),J=ge.length;J--;)ge[J]=(ae?"#"+ae:":scope")+" "+hr(ge[J]);Ae=ge.join(",")}try{return re.apply(Z,Ne.querySelectorAll(Ae)),Z}catch(Ye){U(k,!0)}finally{ae===C&&G.removeAttribute("id")}}}return n(k.replace(ft,"$1"),G,Z,j)}function Ge(){var k=[];function G(Z,j){return k.push(Z+" ")>c.cacheLength&&delete G[k.shift()],G[Z+" "]=j}return G}function Qe(k){return k[C]=!0,k}function Je(k){var G=v.createElement("fieldset");try{return!!k(G)}catch(Z){return!1}finally{G.parentNode&&G.parentNode.removeChild(G),G=null}}function Ut(k,G){for(var Z=k.split("|"),j=Z.length;j--;)c.attrHandle[Z[j]]=G}function Lt(k,G){var Z=G&&k,j=Z&&k.nodeType===1&&G.nodeType===1&&k.sourceIndex-G.sourceIndex;if(j)return j;if(Z){for(;Z=Z.nextSibling;)if(Z===G)return-1}return k?1:-1}function Tt(k){return function(G){var Z=G.nodeName.toLowerCase();return Z==="input"&&G.type===k}}function br(k){return function(G){var Z=G.nodeName.toLowerCase();return(Z==="input"||Z==="button")&&G.type===k}}function nr(k){return function(G){return"form"in G?G.parentNode&&G.disabled===!1?"label"in G?"label"in G.parentNode?G.parentNode.disabled===k:G.disabled===k:G.isDisabled===k||G.isDisabled!==!k&&qe(G)===k:G.disabled===k:"label"in G?G.disabled===k:!1}}function Ht(k){return Qe(function(G){return G=+G,Qe(function(Z,j){for(var H,J=k([],Z.length,G),ee=J.length;ee--;)Z[H=J[ee]]&&(Z[H]=!(j[H]=Z[H]))})})}function dr(k){return k&&typeof k.getElementsByTagName!="undefined"&&k}p=be.support={},s=be.isXML=function(k){var G=k&&k.namespaceURI,Z=k&&(k.ownerDocument||k).documentElement;return!Wt.test(G||Z&&Z.nodeName||"HTML")},S=be.setDocument=function(k){var G,Z,j=k?k.ownerDocument||k:I;return j==v||j.nodeType!==9||!j.documentElement||(v=j,E=v.documentElement,N=!s(v),I!=v&&(Z=v.defaultView)&&Z.top!==Z&&(Z.addEventListener?Z.addEventListener("unload",Xe,!1):Z.attachEvent&&Z.attachEvent("onunload",Xe)),p.scope=Je(function(H){return E.appendChild(H).appendChild(v.createElement("div")),typeof H.querySelectorAll!="undefined"&&!H.querySelectorAll(":scope fieldset div").length}),p.attributes=Je(function(H){return H.className="i",!H.getAttribute("className")}),p.getElementsByTagName=Je(function(H){return H.appendChild(v.createComment("")),!H.getElementsByTagName("*").length}),p.getElementsByClassName=Te.test(v.getElementsByClassName),p.getById=Je(function(H){return E.appendChild(H).id=C,!v.getElementsByName||!v.getElementsByName(C).length}),p.getById?(c.filter.ID=function(H){var J=H.replace(ve,me);return function(ee){return ee.getAttribute("id")===J}},c.find.ID=function(H,J){if(typeof J.getElementById!="undefined"&&N){var ee=J.getElementById(H);return ee?[ee]:[]}}):(c.filter.ID=function(H){var J=H.replace(ve,me);return function(ee){var ae=typeof ee.getAttributeNode!="undefined"&&ee.getAttributeNode("id");return ae&&ae.value===J}},c.find.ID=function(H,J){if(typeof J.getElementById!="undefined"&&N){var ee,ae,fe,ge=J.getElementById(H);if(ge){if(ee=ge.getAttributeNode("id"),ee&&ee.value===H)return[ge];for(fe=J.getElementsByName(H),ae=0;ge=fe[ae++];)if(ee=ge.getAttributeNode("id"),ee&&ee.value===H)return[ge]}return[]}}),c.find.TAG=p.getElementsByTagName?function(H,J){if(typeof J.getElementsByTagName!="undefined")return J.getElementsByTagName(H);if(p.qsa)return J.querySelectorAll(H)}:function(H,J){var ee,ae=[],fe=0,ge=J.getElementsByTagName(H);if(H==="*"){for(;ee=ge[fe++];)ee.nodeType===1&&ae.push(ee);return ae}return ge},c.find.CLASS=p.getElementsByClassName&&function(H,J){if(typeof J.getElementsByClassName!="undefined"&&N)return J.getElementsByClassName(H)},T=[],A=[],(p.qsa=Te.test(v.querySelectorAll))&&(Je(function(H){var J;E.appendChild(H).innerHTML="",H.querySelectorAll("[msallowcapture^='']").length&&A.push("[*^$]="+he+`*(?:''|"")`),H.querySelectorAll("[selected]").length||A.push("\\["+he+"*(?:value|"+te+")"),H.querySelectorAll("[id~="+C+"-]").length||A.push("~="),J=v.createElement("input"),J.setAttribute("name",""),H.appendChild(J),H.querySelectorAll("[name='']").length||A.push("\\["+he+"*name"+he+"*="+he+`*(?:''|"")`),H.querySelectorAll(":checked").length||A.push(":checked"),H.querySelectorAll("a#"+C+"+*").length||A.push(".#.+[+~]"),H.querySelectorAll("\\\f"),A.push("[\\r\\n\\f]")}),Je(function(H){H.innerHTML="";var J=v.createElement("input");J.setAttribute("type","hidden"),H.appendChild(J).setAttribute("name","D"),H.querySelectorAll("[name=d]").length&&A.push("name"+he+"*[*^$|!~]?="),H.querySelectorAll(":enabled").length!==2&&A.push(":enabled",":disabled"),E.appendChild(H).disabled=!0,H.querySelectorAll(":disabled").length!==2&&A.push(":enabled",":disabled"),H.querySelectorAll("*,:x"),A.push(",.*:")})),(p.matchesSelector=Te.test(b=E.matches||E.webkitMatchesSelector||E.mozMatchesSelector||E.oMatchesSelector||E.msMatchesSelector))&&Je(function(H){p.disconnectedMatch=b.call(H,"*"),b.call(H,"[s!='']:x"),T.push("!=",nt)}),A=A.length&&new RegExp(A.join("|")),T=T.length&&new RegExp(T.join("|")),G=Te.test(E.compareDocumentPosition),D=G||Te.test(E.contains)?function(H,J){var ee=H.nodeType===9?H.documentElement:H,ae=J&&J.parentNode;return H===ae||!!(ae&&ae.nodeType===1&&(ee.contains?ee.contains(ae):H.compareDocumentPosition&&H.compareDocumentPosition(ae)&16))}:function(H,J){if(J){for(;J=J.parentNode;)if(J===H)return!0}return!1},W=G?function(H,J){if(H===J)return d=!0,0;var ee=!H.compareDocumentPosition-!J.compareDocumentPosition;return ee||(ee=(H.ownerDocument||H)==(J.ownerDocument||J)?H.compareDocumentPosition(J):1,ee&1||!p.sortDetached&&J.compareDocumentPosition(H)===ee?H==v||H.ownerDocument==I&&D(I,H)?-1:J==v||J.ownerDocument==I&&D(I,J)?1:f?pe(f,H)-pe(f,J):0:ee&4?-1:1)}:function(H,J){if(H===J)return d=!0,0;var ee,ae=0,fe=H.parentNode,ge=J.parentNode,Ae=[H],Ne=[J];if(!fe||!ge)return H==v?-1:J==v?1:fe?-1:ge?1:f?pe(f,H)-pe(f,J):0;if(fe===ge)return Lt(H,J);for(ee=H;ee=ee.parentNode;)Ae.unshift(ee);for(ee=J;ee=ee.parentNode;)Ne.unshift(ee);for(;Ae[ae]===Ne[ae];)ae++;return ae?Lt(Ae[ae],Ne[ae]):Ae[ae]==I?-1:Ne[ae]==I?1:0}),v},be.matches=function(k,G){return be(k,null,null,G)},be.matchesSelector=function(k,G){if(S(k),p.matchesSelector&&N&&!U[G+" "]&&(!T||!T.test(G))&&(!A||!A.test(G)))try{var Z=b.call(k,G);if(Z||p.disconnectedMatch||k.document&&k.document.nodeType!==11)return Z}catch(j){U(G,!0)}return be(G,v,null,[k]).length>0},be.contains=function(k,G){return(k.ownerDocument||k)!=v&&S(k),D(k,G)},be.attr=function(k,G){(k.ownerDocument||k)!=v&&S(k);var Z=c.attrHandle[G.toLowerCase()],j=Z&&z.call(c.attrHandle,G.toLowerCase())?Z(k,G,!N):void 0;return j!==void 0?j:p.attributes||!N?k.getAttribute(G):(j=k.getAttributeNode(G))&&j.specified?j.value:null},be.escape=function(k){return(k+"").replace(_e,Ze)},be.error=function(k){throw new Error("Syntax error, unrecognized expression: "+k)},be.uniqueSort=function(k){var G,Z=[],j=0,H=0;if(d=!p.detectDuplicates,f=!p.sortStable&&k.slice(0),k.sort(W),d){for(;G=k[H++];)G===k[H]&&(j=Z.push(H));for(;j--;)k.splice(Z[j],1)}return f=null,k},l=be.getText=function(k){var G,Z="",j=0,H=k.nodeType;if(H){if(H===1||H===9||H===11){if(typeof k.textContent=="string")return k.textContent;for(k=k.firstChild;k;k=k.nextSibling)Z+=l(k)}else if(H===3||H===4)return k.nodeValue}else for(;G=k[j++];)Z+=l(G);return Z},c=be.selectors={cacheLength:50,createPseudo:Qe,match:He,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(k){return k[1]=k[1].replace(ve,me),k[3]=(k[3]||k[4]||k[5]||"").replace(ve,me),k[2]==="~="&&(k[3]=" "+k[3]+" "),k.slice(0,4)},CHILD:function(k){return k[1]=k[1].toLowerCase(),k[1].slice(0,3)==="nth"?(k[3]||be.error(k[0]),k[4]=+(k[4]?k[5]+(k[6]||1):2*(k[3]==="even"||k[3]==="odd")),k[5]=+(k[7]+k[8]||k[3]==="odd")):k[3]&&be.error(k[0]),k},PSEUDO:function(k){var G,Z=!k[6]&&k[2];return He.CHILD.test(k[0])?null:(k[3]?k[2]=k[4]||k[5]||"":Z&&_t.test(Z)&&(G=u(Z,!0))&&(G=Z.indexOf(")",Z.length-G)-Z.length)&&(k[0]=k[0].slice(0,G),k[2]=Z.slice(0,G)),k.slice(0,3))}},filter:{TAG:function(k){var G=k.replace(ve,me).toLowerCase();return k==="*"?function(){return!0}:function(Z){return Z.nodeName&&Z.nodeName.toLowerCase()===G}},CLASS:function(k){var G=O[k+" "];return G||(G=new RegExp("(^|"+he+")"+k+"("+he+"|$)"))&&O(k,function(Z){return G.test(typeof Z.className=="string"&&Z.className||typeof Z.getAttribute!="undefined"&&Z.getAttribute("class")||"")})},ATTR:function(k,G,Z){return function(j){var H=be.attr(j,k);return H==null?G==="!=":G?(H+="",G==="="?H===Z:G==="!="?H!==Z:G==="^="?Z&&H.indexOf(Z)===0:G==="*="?Z&&H.indexOf(Z)>-1:G==="$="?Z&&H.slice(-Z.length)===Z:G==="~="?(" "+H.replace(gt," ")+" ").indexOf(Z)>-1:G==="|="?H===Z||H.slice(0,Z.length+1)===Z+"-":!1):!0}},CHILD:function(k,G,Z,j,H){var J=k.slice(0,3)!=="nth",ee=k.slice(-4)!=="last",ae=G==="of-type";return j===1&&H===0?function(fe){return!!fe.parentNode}:function(fe,ge,Ae){var Ne,Oe,Ye,ye,ke,yt,Ct=J!==ee?"nextSibling":"previousSibling",st=fe.parentNode,jt=ae&&fe.nodeName.toLowerCase(),Br=!Ae&&!ae,At=!1;if(st){if(J){for(;Ct;){for(ye=fe;ye=ye[Ct];)if(ae?ye.nodeName.toLowerCase()===jt:ye.nodeType===1)return!1;yt=Ct=k==="only"&&!yt&&"nextSibling"}return!0}if(yt=[ee?st.firstChild:st.lastChild],ee&&Br){for(ye=st,Ye=ye[C]||(ye[C]={}),Oe=Ye[ye.uniqueID]||(Ye[ye.uniqueID]={}),Ne=Oe[k]||[],ke=Ne[0]===R&&Ne[1],At=ke&&Ne[2],ye=ke&&st.childNodes[ke];ye=++ke&&ye&&ye[Ct]||(At=ke=0)||yt.pop();)if(ye.nodeType===1&&++At&&ye===fe){Oe[k]=[R,ke,At];break}}else if(Br&&(ye=fe,Ye=ye[C]||(ye[C]={}),Oe=Ye[ye.uniqueID]||(Ye[ye.uniqueID]={}),Ne=Oe[k]||[],ke=Ne[0]===R&&Ne[1],At=ke),At===!1)for(;(ye=++ke&&ye&&ye[Ct]||(At=ke=0)||yt.pop())&&!((ae?ye.nodeName.toLowerCase()===jt:ye.nodeType===1)&&++At&&(Br&&(Ye=ye[C]||(ye[C]={}),Oe=Ye[ye.uniqueID]||(Ye[ye.uniqueID]={}),Oe[k]=[R,At]),ye===fe)););return At-=H,At===j||At%j===0&&At/j>=0}}},PSEUDO:function(k,G){var Z,j=c.pseudos[k]||c.setFilters[k.toLowerCase()]||be.error("unsupported pseudo: "+k);return j[C]?j(G):j.length>1?(Z=[k,k,"",G],c.setFilters.hasOwnProperty(k.toLowerCase())?Qe(function(H,J){for(var ee,ae=j(H,G),fe=ae.length;fe--;)ee=pe(H,ae[fe]),H[ee]=!(J[ee]=ae[fe])}):function(H){return j(H,0,Z)}):j}},pseudos:{not:Qe(function(k){var G=[],Z=[],j=g(k.replace(ft,"$1"));return j[C]?Qe(function(H,J,ee,ae){for(var fe,ge=j(H,null,ae,[]),Ae=H.length;Ae--;)(fe=ge[Ae])&&(H[Ae]=!(J[Ae]=fe))}):function(H,J,ee){return G[0]=H,j(G,null,ee,Z),G[0]=null,!Z.pop()}}),has:Qe(function(k){return function(G){return be(k,G).length>0}}),contains:Qe(function(k){return k=k.replace(ve,me),function(G){return(G.textContent||l(G)).indexOf(k)>-1}}),lang:Qe(function(k){return $e.test(k||"")||be.error("unsupported lang: "+k),k=k.replace(ve,me).toLowerCase(),function(G){var Z;do if(Z=N?G.lang:G.getAttribute("xml:lang")||G.getAttribute("lang"))return Z=Z.toLowerCase(),Z===k||Z.indexOf(k+"-")===0;while((G=G.parentNode)&&G.nodeType===1);return!1}}),target:function(k){var G=i.location&&i.location.hash;return G&&G.slice(1)===k.id},root:function(k){return k===E},focus:function(k){return k===v.activeElement&&(!v.hasFocus||v.hasFocus())&&!!(k.type||k.href||~k.tabIndex)},enabled:nr(!1),disabled:nr(!0),checked:function(k){var G=k.nodeName.toLowerCase();return G==="input"&&!!k.checked||G==="option"&&!!k.selected},selected:function(k){return k.parentNode&&k.parentNode.selectedIndex,k.selected===!0},empty:function(k){for(k=k.firstChild;k;k=k.nextSibling)if(k.nodeType<6)return!1;return!0},parent:function(k){return!c.pseudos.empty(k)},header:function(k){return le.test(k.nodeName)},input:function(k){return Fe.test(k.nodeName)},button:function(k){var G=k.nodeName.toLowerCase();return G==="input"&&k.type==="button"||G==="button"},text:function(k){var G;return k.nodeName.toLowerCase()==="input"&&k.type==="text"&&((G=k.getAttribute("type"))==null||G.toLowerCase()==="text")},first:Ht(function(){return[0]}),last:Ht(function(k,G){return[G-1]}),eq:Ht(function(k,G,Z){return[Z<0?Z+G:Z]}),even:Ht(function(k,G){for(var Z=0;ZG?G:Z;--j>=0;)k.push(j);return k}),gt:Ht(function(k,G,Z){for(var j=Z<0?Z+G:Z;++j1?function(G,Z,j){for(var H=k.length;H--;)if(!k[H](G,Z,j))return!1;return!0}:k[0]}function Fr(k,G,Z){for(var j=0,H=G.length;j-1&&(ee[Ae]=!(ae[Ae]=Oe))}}else st=lr(st===ae?st.splice(ke,st.length):st),H?H(null,ae,st,ge):re.apply(ae,st)})}function Dr(k){for(var G,Z,j,H=k.length,J=c.relative[k[0].type],ee=J||c.relative[" "],ae=J?1:0,fe=vt(function(Ne){return Ne===G},ee,!0),ge=vt(function(Ne){return pe(G,Ne)>-1},ee,!0),Ae=[function(Ne,Oe,Ye){var ye=!J&&(Ye||Oe!==m)||((G=Oe).nodeType?fe(Ne,Oe,Ye):ge(Ne,Oe,Ye));return G=null,ye}];ae1&&Nr(Ae),ae>1&&hr(k.slice(0,ae-1).concat({value:k[ae-2].type===" "?"*":""})).replace(ft,"$1"),Z,ae0,j=k.length>0,H=function(J,ee,ae,fe,ge){var Ae,Ne,Oe,Ye=0,ye="0",ke=J&&[],yt=[],Ct=m,st=J||j&&c.find.TAG("*",ge),jt=R+=Ct==null?1:Math.random()||.1,Br=st.length;for(ge&&(m=ee==v||ee||ge);ye!==Br&&(Ae=st[ye])!=null;ye++){if(j&&Ae){for(Ne=0,!ee&&Ae.ownerDocument!=v&&(S(Ae),ae=!N);Oe=k[Ne++];)if(Oe(Ae,ee||v,ae)){fe.push(Ae);break}ge&&(R=jt)}Z&&((Ae=!Oe&&Ae)&&Ye--,J&&ke.push(Ae))}if(Ye+=ye,Z&&ye!==Ye){for(Ne=0;Oe=G[Ne++];)Oe(ke,yt,ee,ae);if(J){if(Ye>0)for(;ye--;)ke[ye]||yt[ye]||(yt[ye]=V.call(fe));yt=lr(yt)}re.apply(fe,yt),ge&&!J&&yt.length>0&&Ye+G.length>1&&be.uniqueSort(fe)}return ge&&(R=jt,m=Ct),ke};return Z?Qe(H):H}g=be.compile=function(k,G){var Z,j=[],H=[],J=F[k+" "];if(!J){for(G||(G=u(k)),Z=G.length;Z--;)J=Dr(G[Z]),J[C]?j.push(J):H.push(J);J=F(k,ai(H,j)),J.selector=k}return J},n=be.select=function(k,G,Z,j){var H,J,ee,ae,fe,ge=typeof k=="function"&&k,Ae=!j&&u(k=ge.selector||k);if(Z=Z||[],Ae.length===1){if(J=Ae[0]=Ae[0].slice(0),J.length>2&&(ee=J[0]).type==="ID"&&G.nodeType===9&&N&&c.relative[J[1].type]){if(G=(c.find.ID(ee.matches[0].replace(ve,me),G)||[])[0],G)ge&&(G=G.parentNode);else return Z;k=k.slice(J.shift().value.length)}for(H=He.needsContext.test(k)?0:J.length;H--&&(ee=J[H],!c.relative[ae=ee.type]);)if((fe=c.find[ae])&&(j=fe(ee.matches[0].replace(ve,me),se.test(J[0].type)&&dr(G.parentNode)||G))){if(J.splice(H,1),k=j.length&&hr(J),!k)return re.apply(Z,j),Z;break}}return(ge||g(k,Ae))(j,G,!N,Z,!G||se.test(k)&&dr(G.parentNode)||G),Z},p.sortStable=C.split("").sort(W).join("")===C,p.detectDuplicates=!!d,S(),p.sortDetached=Je(function(k){return k.compareDocumentPosition(v.createElement("fieldset"))&1}),Je(function(k){return k.innerHTML="",k.firstChild.getAttribute("href")==="#"})||Ut("type|href|height|width",function(k,G,Z){if(!Z)return k.getAttribute(G,G.toLowerCase()==="type"?1:2)}),(!p.attributes||!Je(function(k){return k.innerHTML="",k.firstChild.setAttribute("value",""),k.firstChild.getAttribute("value")===""}))&&Ut("value",function(k,G,Z){if(!Z&&k.nodeName.toLowerCase()==="input")return k.defaultValue}),Je(function(k){return k.getAttribute("disabled")==null})||Ut(te,function(k,G,Z){var j;if(!Z)return k[G]===!0?G.toLowerCase():(j=k.getAttributeNode(G))&&j.specified?j.value:null});var Vr=i.Sizzle;be.noConflict=function(){return i.Sizzle===be&&(i.Sizzle=Vr),be},h=function(){return be}.call(y,o,y,P),h!==void 0&&(P.exports=h)})(window)},5547:(P,y,o)=>{var h,i;h=[o(264),o(5422),o(4995),o(3153),o(2954),o(6880),o(4330),o(7116),o(5535),o(1188),o(1210),o(8433)],i=function(r,p,c,l,s,u,g){"use strict";var n=/%20/g,m=/#.*$/,f=/([?&])_=[^&]*/,d=/^(.*?):[ \t]*([^\r\n]*)$/mg,S=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,v=/^(?:GET|HEAD)$/,E=/^\/\//,N={},A={},T="*/".concat("*"),b=p.createElement("a");b.href=s.href;function D(O){return function($,F){typeof $!="string"&&(F=$,$="*");var U,W=0,z=$.toLowerCase().match(l)||[];if(c(F))for(;U=z[W++];)U[0]==="+"?(U=U.slice(1)||"*",(O[U]=O[U]||[]).unshift(F)):(O[U]=O[U]||[]).push(F)}}function C(O,$,F,U){var W={},z=O===A;function B(V){var Y;return W[V]=!0,r.each(O[V]||[],function(re,ne){var pe=ne($,F,U);if(typeof pe=="string"&&!z&&!W[pe])return $.dataTypes.unshift(pe),B(pe),!1;if(z)return!(Y=pe)}),Y}return B($.dataTypes[0])||!W["*"]&&B("*")}function I(O,$){var F,U,W=r.ajaxSettings.flatOptions||{};for(F in $)$[F]!==void 0&&((W[F]?O:U||(U={}))[F]=$[F]);return U&&r.extend(!0,O,U),O}function R(O,$,F){for(var U,W,z,B,V=O.contents,Y=O.dataTypes;Y[0]==="*";)Y.shift(),U===void 0&&(U=O.mimeType||$.getResponseHeader("Content-Type"));if(U){for(W in V)if(V[W]&&V[W].test(U)){Y.unshift(W);break}}if(Y[0]in F)z=Y[0];else{for(W in F){if(!Y[0]||O.converters[W+" "+Y[0]]){z=W;break}B||(B=W)}z=z||B}if(z)return z!==Y[0]&&Y.unshift(z),F[z]}function x(O,$,F,U){var W,z,B,V,Y,re={},ne=O.dataTypes.slice();if(ne[1])for(B in O.converters)re[B.toLowerCase()]=O.converters[B];for(z=ne.shift();z;)if(O.responseFields[z]&&(F[O.responseFields[z]]=$),!Y&&U&&O.dataFilter&&($=O.dataFilter($,O.dataType)),Y=z,z=ne.shift(),z){if(z==="*")z=Y;else if(Y!=="*"&&Y!==z){if(B=re[Y+" "+z]||re["* "+z],!B){for(W in re)if(V=W.split(" "),V[1]===z&&(B=re[Y+" "+V[0]]||re["* "+V[0]],B)){B===!0?B=re[W]:re[W]!==!0&&(z=V[0],ne.unshift(V[1]));break}}if(B!==!0)if(B&&O.throws)$=B($);else try{$=B($)}catch(pe){return{state:"parsererror",error:B?pe:"No conversion from "+Y+" to "+z}}}}return{state:"success",data:$}}return r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:s.href,type:"GET",isLocal:S.test(s.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":T,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(O,$){return $?I(I(O,r.ajaxSettings),$):I(r.ajaxSettings,O)},ajaxPrefilter:D(N),ajaxTransport:D(A),ajax:function(O,$){typeof O=="object"&&($=O,O=void 0),$=$||{};var F,U,W,z,B,V,Y,re,ne,pe,te=r.ajaxSetup({},$),he=te.context||te,Ee=te.context&&(he.nodeType||he.jquery)?r(he):r.event,Le=r.Deferred(),nt=r.Callbacks("once memory"),gt=te.statusCode||{},ft={},mt={},Dt="canceled",we={readyState:0,getResponseHeader:function($e){var He;if(Y){if(!z)for(z={};He=d.exec(W);)z[He[1].toLowerCase()+" "]=(z[He[1].toLowerCase()+" "]||[]).concat(He[2]);He=z[$e.toLowerCase()+" "]}return He==null?null:He.join(", ")},getAllResponseHeaders:function(){return Y?W:null},setRequestHeader:function($e,He){return Y==null&&($e=mt[$e.toLowerCase()]=mt[$e.toLowerCase()]||$e,ft[$e]=He),this},overrideMimeType:function($e){return Y==null&&(te.mimeType=$e),this},statusCode:function($e){var He;if($e)if(Y)we.always($e[we.status]);else for(He in $e)gt[He]=[gt[He],$e[He]];return this},abort:function($e){var He=$e||Dt;return F&&F.abort(He),_t(0,He),this}};if(Le.promise(we),te.url=((O||te.url||s.href)+"").replace(E,s.protocol+"//"),te.type=$.method||$.type||te.method||te.type,te.dataTypes=(te.dataType||"*").toLowerCase().match(l)||[""],te.crossDomain==null){V=p.createElement("a");try{V.href=te.url,V.href=V.href,te.crossDomain=b.protocol+"//"+b.host!=V.protocol+"//"+V.host}catch($e){te.crossDomain=!0}}if(te.data&&te.processData&&typeof te.data!="string"&&(te.data=r.param(te.data,te.traditional)),C(N,te,$,we),Y)return we;re=r.event&&te.global,re&&r.active++===0&&r.event.trigger("ajaxStart"),te.type=te.type.toUpperCase(),te.hasContent=!v.test(te.type),U=te.url.replace(m,""),te.hasContent?te.data&&te.processData&&(te.contentType||"").indexOf("application/x-www-form-urlencoded")===0&&(te.data=te.data.replace(n,"+")):(pe=te.url.slice(U.length),te.data&&(te.processData||typeof te.data=="string")&&(U+=(g.test(U)?"&":"?")+te.data,delete te.data),te.cache===!1&&(U=U.replace(f,"$1"),pe=(g.test(U)?"&":"?")+"_="+u.guid+++pe),te.url=U+pe),te.ifModified&&(r.lastModified[U]&&we.setRequestHeader("If-Modified-Since",r.lastModified[U]),r.etag[U]&&we.setRequestHeader("If-None-Match",r.etag[U])),(te.data&&te.hasContent&&te.contentType!==!1||$.contentType)&&we.setRequestHeader("Content-Type",te.contentType),we.setRequestHeader("Accept",te.dataTypes[0]&&te.accepts[te.dataTypes[0]]?te.accepts[te.dataTypes[0]]+(te.dataTypes[0]!=="*"?", "+T+"; q=0.01":""):te.accepts["*"]);for(ne in te.headers)we.setRequestHeader(ne,te.headers[ne]);if(te.beforeSend&&(te.beforeSend.call(he,we,te)===!1||Y))return we.abort();if(Dt="abort",nt.add(te.complete),we.done(te.success),we.fail(te.error),F=C(A,te,$,we),!F)_t(-1,"No Transport");else{if(we.readyState=1,re&&Ee.trigger("ajaxSend",[we,te]),Y)return we;te.async&&te.timeout>0&&(B=window.setTimeout(function(){we.abort("timeout")},te.timeout));try{Y=!1,F.send(ft,_t)}catch($e){if(Y)throw $e;_t(-1,$e)}}function _t($e,He,Wt,Fe){var le,Te,Ce,se,ve,me=He;Y||(Y=!0,B&&window.clearTimeout(B),F=void 0,W=Fe||"",we.readyState=$e>0?4:0,le=$e>=200&&$e<300||$e===304,Wt&&(se=R(te,we,Wt)),!le&&r.inArray("script",te.dataTypes)>-1&&r.inArray("json",te.dataTypes)<0&&(te.converters["text script"]=function(){}),se=x(te,se,we,le),le?(te.ifModified&&(ve=we.getResponseHeader("Last-Modified"),ve&&(r.lastModified[U]=ve),ve=we.getResponseHeader("etag"),ve&&(r.etag[U]=ve)),$e===204||te.type==="HEAD"?me="nocontent":$e===304?me="notmodified":(me=se.state,Te=se.data,Ce=se.error,le=!Ce)):(Ce=me,($e||!me)&&(me="error",$e<0&&($e=0))),we.status=$e,we.statusText=(He||me)+"",le?Le.resolveWith(he,[Te,me,we]):Le.rejectWith(he,[we,me,Ce]),we.statusCode(gt),gt=void 0,re&&Ee.trigger(le?"ajaxSuccess":"ajaxError",[we,te,le?Te:Ce]),nt.fireWith(he,[we,me]),re&&(Ee.trigger("ajaxComplete",[we,te]),--r.active||r.event.trigger("ajaxStop")))}return we},getJSON:function(O,$,F){return r.get(O,$,F,"json")},getScript:function(O,$){return r.get(O,void 0,$,"script")}}),r.each(["get","post"],function(O,$){r[$]=function(F,U,W,z){return c(U)&&(z=z||W,W=U,U=void 0),r.ajax(r.extend({url:F,type:$,dataType:z,data:U,success:W},r.isPlainObject(F)&&F))}}),r.ajaxPrefilter(function(O){var $;for($ in O.headers)$.toLowerCase()==="content-type"&&(O.contentType=O.headers[$]||"")}),r}.apply(y,h),i!==void 0&&(P.exports=i)},3004:(P,y,o)=>{var h,i;h=[o(264),o(4995),o(6880),o(4330),o(5547)],i=function(r,p,c,l){"use strict";var s=[],u=/(=)\?(?=&|$)|\?\?/;r.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var g=s.pop()||r.expando+"_"+c.guid++;return this[g]=!0,g}}),r.ajaxPrefilter("json jsonp",function(g,n,m){var f,d,S,v=g.jsonp!==!1&&(u.test(g.url)?"url":typeof g.data=="string"&&(g.contentType||"").indexOf("application/x-www-form-urlencoded")===0&&u.test(g.data)&&"data");if(v||g.dataTypes[0]==="jsonp")return f=g.jsonpCallback=p(g.jsonpCallback)?g.jsonpCallback():g.jsonpCallback,v?g[v]=g[v].replace(u,"$1"+f):g.jsonp!==!1&&(g.url+=(l.test(g.url)?"&":"?")+g.jsonp+"="+f),g.converters["script json"]=function(){return S||r.error(f+" was not called"),S[0]},g.dataTypes[0]="json",d=window[f],window[f]=function(){S=arguments},m.always(function(){d===void 0?r(window).removeProp(f):window[f]=d,g[f]&&(g.jsonpCallback=n.jsonpCallback,s.push(f)),S&&p(d)&&d(S[0]),S=d=void 0}),"script"})}.apply(y,h),i!==void 0&&(P.exports=i)},2926:(P,y,o)=>{var h,i;h=[o(264),o(5242),o(4995),o(2023),o(5547),o(3599),o(9921),o(5704)],i=function(r,p,c){"use strict";r.fn.load=function(l,s,u){var g,n,m,f=this,d=l.indexOf(" ");return d>-1&&(g=p(l.slice(d)),l=l.slice(0,d)),c(s)?(u=s,s=void 0):s&&typeof s=="object"&&(n="POST"),f.length>0&&r.ajax({url:l,type:n||"GET",dataType:"html",data:s}).done(function(S){m=arguments,f.html(g?r("
").append(r.parseHTML(S)).find(g):S)}).always(u&&function(S,v){f.each(function(){u.apply(this,m||[S.responseText,v,S])})}),this}}.apply(y,h),i!==void 0&&(P.exports=i)},2377:(P,y,o)=>{var h,i;h=[o(264),o(5422),o(5547)],i=function(r,p){"use strict";r.ajaxPrefilter(function(c){c.crossDomain&&(c.contents.script=!1)}),r.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(c){return r.globalEval(c),c}}}),r.ajaxPrefilter("script",function(c){c.cache===void 0&&(c.cache=!1),c.crossDomain&&(c.type="GET")}),r.ajaxTransport("script",function(c){if(c.crossDomain||c.scriptAttrs){var l,s;return{send:function(u,g){l=r(" - - - @@ -88,10 +83,8 @@ - - - - + diff --git a/public/docs/locales/ca.js b/public/docs/locales/ca.js new file mode 100644 index 000000000..65af5df2b --- /dev/null +++ b/public/docs/locales/ca.js @@ -0,0 +1,25 @@ +define({ + ca: { + 'Allowed values:' : 'Valors permesos:', + 'Compare all with predecessor': 'Comparar tot amb versió anterior', + 'compare changes to:' : 'comparar canvis amb:', + 'compared to' : 'comparat amb', + 'Default value:' : 'Valor per defecte:', + 'Description' : 'Descripció', + 'Field' : 'Camp', + 'General' : 'General', + 'Generated with' : 'Generat amb', + 'Name' : 'Nom', + 'No response values.' : 'Sense valors en la resposta.', + 'optional' : 'opcional', + 'Parameter' : 'Paràmetre', + 'Permission:' : 'Permisos:', + 'Response' : 'Resposta', + 'Send' : 'Enviar', + 'Send a Sample Request' : 'Enviar una petició d\'exemple', + 'show up to version:' : 'mostrar versió:', + 'Size range:' : 'Tamany de rang:', + 'Type' : 'Tipus', + 'url' : 'url' + } +}); diff --git a/public/docs/locales/cs.js b/public/docs/locales/cs.js new file mode 100644 index 000000000..b7796d8f8 --- /dev/null +++ b/public/docs/locales/cs.js @@ -0,0 +1,25 @@ +define({ + cs: { + 'Allowed values:' : 'Povolené hodnoty:', + 'Compare all with predecessor': 'Porovnat vše s předchozími verzemi', + 'compare changes to:' : 'porovnat změny s:', + 'compared to' : 'porovnat s', + 'Default value:' : 'Výchozí hodnota:', + 'Description' : 'Popis', + 'Field' : 'Pole', + 'General' : 'Obecné', + 'Generated with' : 'Vygenerováno pomocí', + 'Name' : 'Název', + 'No response values.' : 'Nebyly vráceny žádné hodnoty.', + 'optional' : 'volitelné', + 'Parameter' : 'Parametr', + 'Permission:' : 'Oprávnění:', + 'Response' : 'Odpověď', + 'Send' : 'Odeslat', + 'Send a Sample Request' : 'Odeslat ukázkový požadavek', + 'show up to version:' : 'zobrazit po verzi:', + 'Size range:' : 'Rozsah velikosti:', + 'Type' : 'Typ', + 'url' : 'url' + } +}); diff --git a/public/docs/locales/de.js b/public/docs/locales/de.js new file mode 100644 index 000000000..f66420d00 --- /dev/null +++ b/public/docs/locales/de.js @@ -0,0 +1,25 @@ +define({ + de: { + 'Allowed values:' : 'Erlaubte Werte:', + 'Compare all with predecessor': 'Vergleiche alle mit ihren Vorgängern', + 'compare changes to:' : 'vergleiche Änderungen mit:', + 'compared to' : 'verglichen mit', + 'Default value:' : 'Standardwert:', + 'Description' : 'Beschreibung', + 'Field' : 'Feld', + 'General' : 'Allgemein', + 'Generated with' : 'Erstellt mit', + 'Name' : 'Name', + 'No response values.' : 'Keine Rückgabewerte.', + 'optional' : 'optional', + 'Parameter' : 'Parameter', + 'Permission:' : 'Berechtigung:', + 'Response' : 'Antwort', + 'Send' : 'Senden', + 'Send a Sample Request' : 'Eine Beispielanfrage senden', + 'show up to version:' : 'zeige bis zur Version:', + 'Size range:' : 'Größenbereich:', + 'Type' : 'Typ', + 'url' : 'url' + } +}); diff --git a/public/docs/locales/es.js b/public/docs/locales/es.js new file mode 100644 index 000000000..3d47e800e --- /dev/null +++ b/public/docs/locales/es.js @@ -0,0 +1,25 @@ +define({ + es: { + 'Allowed values:' : 'Valores permitidos:', + 'Compare all with predecessor': 'Comparar todo con versión anterior', + 'compare changes to:' : 'comparar cambios con:', + 'compared to' : 'comparado con', + 'Default value:' : 'Valor por defecto:', + 'Description' : 'Descripción', + 'Field' : 'Campo', + 'General' : 'General', + 'Generated with' : 'Generado con', + 'Name' : 'Nombre', + 'No response values.' : 'Sin valores en la respuesta.', + 'optional' : 'opcional', + 'Parameter' : 'Parámetro', + 'Permission:' : 'Permisos:', + 'Response' : 'Respuesta', + 'Send' : 'Enviar', + 'Send a Sample Request' : 'Enviar una petición de ejemplo', + 'show up to version:' : 'mostrar a versión:', + 'Size range:' : 'Tamaño de rango:', + 'Type' : 'Tipo', + 'url' : 'url' + } +}); diff --git a/public/docs/locales/fr.js b/public/docs/locales/fr.js new file mode 100644 index 000000000..100a64291 --- /dev/null +++ b/public/docs/locales/fr.js @@ -0,0 +1,25 @@ +define({ + fr: { + 'Allowed values:' : 'Valeurs autorisées :', + 'Compare all with predecessor': 'Tout comparer avec ...', + 'compare changes to:' : 'comparer les changements à :', + 'compared to' : 'comparer à', + 'Default value:' : 'Valeur par défaut :', + 'Description' : 'Description', + 'Field' : 'Champ', + 'General' : 'Général', + 'Generated with' : 'Généré avec', + 'Name' : 'Nom', + 'No response values.' : 'Aucune valeur de réponse.', + 'optional' : 'optionnel', + 'Parameter' : 'Paramètre', + 'Permission:' : 'Permission :', + 'Response' : 'Réponse', + 'Send' : 'Envoyer', + 'Send a Sample Request' : 'Envoyer une requête représentative', + 'show up to version:' : 'Montrer à partir de la version :', + 'Size range:' : 'Ordre de grandeur :', + 'Type' : 'Type', + 'url' : 'url' + } +}); diff --git a/public/docs/locales/it.js b/public/docs/locales/it.js new file mode 100644 index 000000000..8117108cf --- /dev/null +++ b/public/docs/locales/it.js @@ -0,0 +1,25 @@ +define({ + it: { + 'Allowed values:' : 'Valori permessi:', + 'Compare all with predecessor': 'Confronta tutto con versioni precedenti', + 'compare changes to:' : 'confronta modifiche con:', + 'compared to' : 'confrontato con', + 'Default value:' : 'Valore predefinito:', + 'Description' : 'Descrizione', + 'Field' : 'Campo', + 'General' : 'Generale', + 'Generated with' : 'Creato con', + 'Name' : 'Nome', + 'No response values.' : 'Nessun valore di risposta.', + 'optional' : 'opzionale', + 'Parameter' : 'Parametro', + 'Permission:' : 'Permessi:', + 'Response' : 'Risposta', + 'Send' : 'Invia', + 'Send a Sample Request' : 'Invia una richiesta di esempio', + 'show up to version:' : 'mostra alla versione:', + 'Size range:' : 'Intervallo dimensione:', + 'Type' : 'Tipo', + 'url' : 'url' + } +}); diff --git a/public/docs/locales/locale.js b/public/docs/locales/locale.js new file mode 100644 index 000000000..3530705e3 --- /dev/null +++ b/public/docs/locales/locale.js @@ -0,0 +1,51 @@ +define([ + './locales/ca.js', + './locales/cs.js', + './locales/de.js', + './locales/es.js', + './locales/fr.js', + './locales/it.js', + './locales/nl.js', + './locales/pl.js', + './locales/pt_br.js', + './locales/ro.js', + './locales/ru.js', + './locales/tr.js', + './locales/vi.js', + './locales/zh.js', + './locales/zh_cn.js' +], function() { + var langId = (navigator.language || navigator.userLanguage).toLowerCase().replace('-', '_'); + var language = langId.substr(0, 2); + var locales = {}; + + for (index in arguments) { + for (property in arguments[index]) + locales[property] = arguments[index][property]; + } + if ( ! locales['en']) + locales['en'] = {}; + + if ( ! locales[langId] && ! locales[language]) + language = 'en'; + + var locale = (locales[langId] ? locales[langId] : locales[language]); + + function __(text) { + var index = locale[text]; + if (index === undefined) + return text; + return index; + }; + + function setLanguage(language) { + locale = locales[language]; + } + + return { + __ : __, + locales : locales, + locale : locale, + setLanguage: setLanguage + }; +}); diff --git a/public/docs/locales/nl.js b/public/docs/locales/nl.js new file mode 100644 index 000000000..bddfeeb18 --- /dev/null +++ b/public/docs/locales/nl.js @@ -0,0 +1,25 @@ +define({ + nl: { + 'Allowed values:' : 'Toegestane waarden:', + 'Compare all with predecessor': 'Vergelijk alle met voorgaande versie', + 'compare changes to:' : 'vergelijk veranderingen met:', + 'compared to' : 'vergelijk met', + 'Default value:' : 'Standaard waarde:', + 'Description' : 'Omschrijving', + 'Field' : 'Veld', + 'General' : 'Algemeen', + 'Generated with' : 'Gegenereerd met', + 'Name' : 'Naam', + 'No response values.' : 'Geen response waardes.', + 'optional' : 'optioneel', + 'Parameter' : 'Parameter', + 'Permission:' : 'Permissie:', + 'Response' : 'Antwoorden', + 'Send' : 'Sturen', + 'Send a Sample Request' : 'Stuur een sample aanvragen', + 'show up to version:' : 'toon tot en met versie:', + 'Size range:' : 'Maatbereik:', + 'Type' : 'Type', + 'url' : 'url' + } +}); diff --git a/public/docs/locales/pl.js b/public/docs/locales/pl.js new file mode 100644 index 000000000..db645ee16 --- /dev/null +++ b/public/docs/locales/pl.js @@ -0,0 +1,25 @@ +define({ + pl: { + 'Allowed values:' : 'Dozwolone wartości:', + 'Compare all with predecessor': 'Porównaj z poprzednimi wersjami', + 'compare changes to:' : 'porównaj zmiany do:', + 'compared to' : 'porównaj do:', + 'Default value:' : 'Wartość domyślna:', + 'Description' : 'Opis', + 'Field' : 'Pole', + 'General' : 'Generalnie', + 'Generated with' : 'Wygenerowano z', + 'Name' : 'Nazwa', + 'No response values.' : 'Brak odpowiedzi.', + 'optional' : 'opcjonalny', + 'Parameter' : 'Parametr', + 'Permission:' : 'Uprawnienia:', + 'Response' : 'Odpowiedź', + 'Send' : 'Wyślij', + 'Send a Sample Request' : 'Wyślij przykładowe żądanie', + 'show up to version:' : 'pokaż do wersji:', + 'Size range:' : 'Zakres rozmiaru:', + 'Type' : 'Typ', + 'url' : 'url' + } +}); diff --git a/public/docs/locales/pt_br.js b/public/docs/locales/pt_br.js new file mode 100644 index 000000000..2bd78b0d3 --- /dev/null +++ b/public/docs/locales/pt_br.js @@ -0,0 +1,25 @@ +define({ + 'pt_br': { + 'Allowed values:' : 'Valores permitidos:', + 'Compare all with predecessor': 'Compare todos com antecessores', + 'compare changes to:' : 'comparar alterações com:', + 'compared to' : 'comparado com', + 'Default value:' : 'Valor padrão:', + 'Description' : 'Descrição', + 'Field' : 'Campo', + 'General' : 'Geral', + 'Generated with' : 'Gerado com', + 'Name' : 'Nome', + 'No response values.' : 'Sem valores de resposta.', + 'optional' : 'opcional', + 'Parameter' : 'Parâmetro', + 'Permission:' : 'Permissão:', + 'Response' : 'Resposta', + 'Send' : 'Enviar', + 'Send a Sample Request' : 'Enviar um Exemplo de Pedido', + 'show up to version:' : 'aparecer para a versão:', + 'Size range:' : 'Faixa de tamanho:', + 'Type' : 'Tipo', + 'url' : 'url' + } +}); diff --git a/public/docs/locales/ro.js b/public/docs/locales/ro.js new file mode 100644 index 000000000..8d4e4ed87 --- /dev/null +++ b/public/docs/locales/ro.js @@ -0,0 +1,25 @@ +define({ + ro: { + 'Allowed values:' : 'Valori permise:', + 'Compare all with predecessor': 'Compară toate cu versiunea precedentă', + 'compare changes to:' : 'compară cu versiunea:', + 'compared to' : 'comparat cu', + 'Default value:' : 'Valoare implicită:', + 'Description' : 'Descriere', + 'Field' : 'Câmp', + 'General' : 'General', + 'Generated with' : 'Generat cu', + 'Name' : 'Nume', + 'No response values.' : 'Nici o valoare returnată.', + 'optional' : 'opțional', + 'Parameter' : 'Parametru', + 'Permission:' : 'Permisiune:', + 'Response' : 'Răspuns', + 'Send' : 'Trimite', + 'Send a Sample Request' : 'Trimite o cerere de probă', + 'show up to version:' : 'arată până la versiunea:', + 'Size range:' : 'Interval permis:', + 'Type' : 'Tip', + 'url' : 'url' + } +}); diff --git a/public/docs/locales/ru.js b/public/docs/locales/ru.js new file mode 100644 index 000000000..c5f338214 --- /dev/null +++ b/public/docs/locales/ru.js @@ -0,0 +1,25 @@ +define({ + ru: { + 'Allowed values:' : 'Допустимые значения:', + 'Compare all with predecessor': 'Сравнить с предыдущей версией', + 'compare changes to:' : 'сравнить с:', + 'compared to' : 'в сравнении с', + 'Default value:' : 'По умолчанию:', + 'Description' : 'Описание', + 'Field' : 'Название', + 'General' : 'Общая информация', + 'Generated with' : 'Сгенерировано с помощью', + 'Name' : 'Название', + 'No response values.' : 'Нет значений для ответа.', + 'optional' : 'необязательный', + 'Parameter' : 'Параметр', + 'Permission:' : 'Разрешено:', + 'Response' : 'Ответ', + 'Send' : 'Отправить', + 'Send a Sample Request' : 'Отправить тестовый запрос', + 'show up to version:' : 'показать версию:', + 'Size range:' : 'Ограничения:', + 'Type' : 'Тип', + 'url' : 'URL' + } +}); diff --git a/public/docs/locales/tr.js b/public/docs/locales/tr.js new file mode 100644 index 000000000..5c64e52da --- /dev/null +++ b/public/docs/locales/tr.js @@ -0,0 +1,25 @@ +define({ + tr: { + 'Allowed values:' : 'İzin verilen değerler:', + 'Compare all with predecessor': 'Tümünü öncekiler ile karşılaştır', + 'compare changes to:' : 'değişiklikleri karşılaştır:', + 'compared to' : 'karşılaştır', + 'Default value:' : 'Varsayılan değer:', + 'Description' : 'Açıklama', + 'Field' : 'Alan', + 'General' : 'Genel', + 'Generated with' : 'Oluşturan', + 'Name' : 'İsim', + 'No response values.' : 'Dönüş verisi yok.', + 'optional' : 'opsiyonel', + 'Parameter' : 'Parametre', + 'Permission:' : 'İzin:', + 'Response' : 'Dönüş', + 'Send' : 'Gönder', + 'Send a Sample Request' : 'Örnek istek gönder', + 'show up to version:' : 'bu versiyona kadar göster:', + 'Size range:' : 'Boyut aralığı:', + 'Type' : 'Tip', + 'url' : 'url' + } +}); diff --git a/public/docs/locales/vi.js b/public/docs/locales/vi.js new file mode 100644 index 000000000..7ce770507 --- /dev/null +++ b/public/docs/locales/vi.js @@ -0,0 +1,25 @@ +define({ + vi: { + 'Allowed values:' : 'Giá trị chấp nhận:', + 'Compare all with predecessor': 'So sánh với tất cả phiên bản trước', + 'compare changes to:' : 'so sánh sự thay đổi với:', + 'compared to' : 'so sánh với', + 'Default value:' : 'Giá trị mặc định:', + 'Description' : 'Chú thích', + 'Field' : 'Trường dữ liệu', + 'General' : 'Tổng quan', + 'Generated with' : 'Được tạo bởi', + 'Name' : 'Tên', + 'No response values.' : 'Không có kết quả trả về.', + 'optional' : 'Tùy chọn', + 'Parameter' : 'Tham số', + 'Permission:' : 'Quyền hạn:', + 'Response' : 'Kết quả', + 'Send' : 'Gửi', + 'Send a Sample Request' : 'Gửi một yêu cầu mẫu', + 'show up to version:' : 'hiển thị phiên bản:', + 'Size range:' : 'Kích cỡ:', + 'Type' : 'Kiểu', + 'url' : 'liên kết' + } +}); diff --git a/public/docs/locales/zh.js b/public/docs/locales/zh.js new file mode 100644 index 000000000..ca5042fe7 --- /dev/null +++ b/public/docs/locales/zh.js @@ -0,0 +1,25 @@ +define({ + zh: { + 'Allowed values​​:' : '允許值:', + 'Compare all with predecessor': '預先比較所有', + 'compare changes to:' : '比較變更:', + 'compared to' : '對比', + 'Default value:' : '預設值:', + 'Description' : '描述', + 'Field' : '欄位', + 'General' : '概括', + 'Generated with' : '生成工具', + 'Name' : '名稱', + 'No response values​​.' : '無對應資料.', + 'optional' : '選填', + 'Parameter' : '參數', + 'Permission:' : '權限:', + 'Response' : '回應', + 'Send' : '發送', + 'Send a Sample Request' : '發送試用需求', + 'show up to version:' : '顯示到版本:', + 'Size range:' : '區間:', + 'Type' : '類型', + 'url' : '網址' + } +}); diff --git a/public/docs/locales/zh_cn.js b/public/docs/locales/zh_cn.js new file mode 100644 index 000000000..50913e254 --- /dev/null +++ b/public/docs/locales/zh_cn.js @@ -0,0 +1,27 @@ +define({ + 'zh_cn': { + 'Allowed values:' : '允许值:', + 'Compare all with predecessor': '与所有较早的比较', + 'compare changes to:' : '将当前版本与指定版本比较:', + 'compared to' : '相比于', + 'Default value:' : '默认值:', + 'Description' : '描述', + 'Field' : '字段', + 'General' : '概要', + 'Generated with' : '基于', + 'Name' : '名称', + 'No response values.' : '无返回值.', + 'optional' : '可选', + 'Parameter' : '参数', + 'Parameters' : '参数', + 'Headers' : '头部参数', + 'Permission:' : '权限:', + 'Response' : '返回', + 'Send' : '发送', + 'Send a Sample Request' : '发送示例请求', + 'show up to version:' : '显示到指定版本:', + 'Size range:' : '取值范围:', + 'Type' : '类型', + 'url' : '网址' + } +}); diff --git a/public/docs/main.js b/public/docs/main.js new file mode 100644 index 000000000..51a856a0e --- /dev/null +++ b/public/docs/main.js @@ -0,0 +1,910 @@ +require.config({ + paths: { + bootstrap: './vendor/bootstrap.min', + diffMatchPatch: './vendor/diff_match_patch.min', + handlebars: './vendor/handlebars.min', + handlebarsExtended: './utils/handlebars_helper', + jquery: './vendor/jquery.min', + locales: './locales/locale', + lodash: './vendor/lodash.custom.min', + pathToRegexp: './vendor/path-to-regexp/index', + prismjs: './vendor/prism', + semver: './vendor/semver.min', + utilsSampleRequest: './utils/send_sample_request', + webfontloader: './vendor/webfontloader', + list: './vendor/list.min', + apiData: './api_data', + apiProject: './api_project', + }, + shim: { + bootstrap: { + deps: ['jquery'] + }, + diffMatchPatch: { + exports: 'diff_match_patch' + }, + handlebars: { + exports: 'Handlebars' + }, + handlebarsExtended: { + deps: ['jquery', 'handlebars'], + exports: 'Handlebars' + }, + prismjs: { + exports: 'Prism' + }, + }, + urlArgs: 'v=' + (new Date()).getTime(), + waitSeconds: 150 +}); + +require([ + 'jquery', + 'lodash', + 'locales', + 'handlebarsExtended', + 'apiProject', + 'apiData', + 'prismjs', + 'utilsSampleRequest', + 'semver', + 'webfontloader', + 'bootstrap', + 'pathToRegexp', + 'list' +], function($, _, locale, Handlebars, apiProject, apiData, Prism, sampleRequest, semver, WebFont) { + + // Load google web fonts. + WebFont.load({ + active: function() { + // Only init after fonts are loaded. + init($, _, locale, Handlebars, apiProject, apiData, Prism, sampleRequest, semver); + }, + inactive: function() { + // Run init, even if loading fonts fails + init($, _, locale, Handlebars, apiProject, apiData, Prism, sampleRequest, semver); + }, + google: { + families: ['Source Code Pro', 'Source Sans Pro:n4,n6,n7'] + } + }); +}); + +function init($, _, locale, Handlebars, apiProject, apiData, Prism, sampleRequest, semver) { + var api = apiData.api; + + // + // Templates + // + var templateHeader = Handlebars.compile( $('#template-header').html() ); + var templateFooter = Handlebars.compile( $('#template-footer').html() ); + var templateArticle = Handlebars.compile( $('#template-article').html() ); + var templateCompareArticle = Handlebars.compile( $('#template-compare-article').html() ); + var templateGenerator = Handlebars.compile( $('#template-generator').html() ); + var templateProject = Handlebars.compile( $('#template-project').html() ); + var templateSections = Handlebars.compile( $('#template-sections').html() ); + var templateSidenav = Handlebars.compile( $('#template-sidenav').html() ); + + // + // apiProject defaults + // + if ( ! apiProject.template) + apiProject.template = {}; + + if (apiProject.template.withCompare == null) + apiProject.template.withCompare = true; + + if (apiProject.template.withGenerator == null) + apiProject.template.withGenerator = true; + + if (apiProject.template.forceLanguage) + locale.setLanguage(apiProject.template.forceLanguage); + + if (apiProject.template.aloneDisplay == null) + apiProject.template.aloneDisplay = false; + + // Setup jQuery Ajax + $.ajaxSetup(apiProject.template.jQueryAjaxSetup); + + // + // Data transform + // + // grouped by group + var apiByGroup = _.groupBy(api, function(entry) { + return entry.group; + }); + + // grouped by group and name + var apiByGroupAndName = {}; + $.each(apiByGroup, function(index, entries) { + apiByGroupAndName[index] = _.groupBy(entries, function(entry) { + return entry.name; + }); + }); + + // + // sort api within a group by title ASC and custom order + // + var newList = []; + var umlauts = { 'ä': 'ae', 'ü': 'ue', 'ö': 'oe', 'ß': 'ss' }; // TODO: remove in version 1.0 + $.each (apiByGroupAndName, function(index, groupEntries) { + // get titles from the first entry of group[].name[] (name has versioning) + var titles = []; + $.each (groupEntries, function(titleName, entries) { + var title = entries[0].title; + if(title !== undefined) { + title.toLowerCase().replace(/[äöüß]/g, function($0) { return umlauts[$0]; }); + titles.push(title + '#~#' + titleName); // '#~#' keep reference to titleName after sorting + } + }); + // sort by name ASC + titles.sort(); + + // custom order + if (apiProject.order) + titles = sortByOrder(titles, apiProject.order, '#~#'); + + // add single elements to the new list + titles.forEach(function(name) { + var values = name.split('#~#'); + var key = values[1]; + groupEntries[key].forEach(function(entry) { + newList.push(entry); + }); + }); + }); + // api overwrite with ordered list + api = newList; + + // + // Group- and Versionlists + // + var apiGroups = {}; + var apiGroupTitles = {}; + var apiVersions = {}; + apiVersions[apiProject.version] = 1; + + $.each(api, function(index, entry) { + apiGroups[entry.group] = 1; + apiGroupTitles[entry.group] = entry.groupTitle || entry.group; + apiVersions[entry.version] = 1; + }); + + // sort groups + apiGroups = Object.keys(apiGroups); + apiGroups.sort(); + + // custom order + if (apiProject.order) + apiGroups = sortByOrder(apiGroups, apiProject.order); + + // sort versions DESC + apiVersions = Object.keys(apiVersions); + apiVersions.sort(semver.compare); + apiVersions.reverse(); + + // + // create Navigationlist + // + var nav = []; + apiGroups.forEach(function(group) { + // Mainmenu entry + nav.push({ + group: group, + isHeader: true, + title: apiGroupTitles[group] + }); + + // Submenu + var oldName = ''; + api.forEach(function(entry) { + if (entry.group === group) { + if (oldName !== entry.name) { + nav.push({ + title: entry.title, + group: group, + name: entry.name, + type: entry.type, + version: entry.version, + url: entry.url + }); + } else { + nav.push({ + title: entry.title, + group: group, + hidden: true, + name: entry.name, + type: entry.type, + version: entry.version, + url: entry.url + }); + } + oldName = entry.name; + } + }); + }); + + /** + * Add navigation items by analyzing the HTML content and searching for h1 and h2 tags + * @param nav Object the navigation array + * @param content string the compiled HTML content + * @param index where to insert items + * @return boolean true if any good-looking (i.e. with a group identifier)

tag was found + */ + function add_nav(nav, content, index) { + var found_level1 = false; + if ( ! content) { + return found_level1; + } + var topics = content.match(/(.+?)<\/h(1|2)>/gi); + if ( topics ) { + topics.forEach(function(entry) { + var level = entry.substring(2,3); + var title = entry.replace(/<.+?>/g, ''); // Remove all HTML tags for the title + var entry_tags = entry.match(/id="api-([^\-]+)(?:-(.+))?"/); // Find the group and name in the id property + var group = (entry_tags ? entry_tags[1] : null); + var name = (entry_tags ? entry_tags[2] : null); + if (level==1 && title && group) { + nav.splice(index, 0, { + group: group, + isHeader: true, + title: title, + isFixed: true + }); + index++; + found_level1 = true; + } + if (level==2 && title && group && name) { + nav.splice(index, 0, { + group: group, + name: name, + isHeader: false, + title: title, + isFixed: false, + version: '1.0' + }); + index++; + } + }); + } + return found_level1; + } + + // Mainmenu Header entry + if (apiProject.header) { + var found_level1 = add_nav(nav, apiProject.header.content, 0); // Add level 1 and 2 titles + if (!found_level1) { // If no Level 1 tags were found, make a title + nav.unshift({ + group: '_', + isHeader: true, + title: (apiProject.header.title == null) ? locale.__('General') : apiProject.header.title, + isFixed: true + }); + } + } + + // Mainmenu Footer entry + if (apiProject.footer) { + var last_nav_index = nav.length; + var found_level1 = add_nav(nav, apiProject.footer.content, nav.length); // Add level 1 and 2 titles + if (!found_level1 && apiProject.footer.title != null) { // If no Level 1 tags were found, make a title + nav.splice(last_nav_index, 0, { + group: '_footer', + isHeader: true, + title: apiProject.footer.title, + isFixed: true + }); + } + } + + // render pagetitle + var title = apiProject.title ? apiProject.title : 'apiDoc: ' + apiProject.name + ' - ' + apiProject.version; + $(document).attr('title', title); + + // remove loader + $('#loader').remove(); + + // render sidenav + var fields = { + nav: nav + }; + $('#sidenav').append( templateSidenav(fields) ); + + // render Generator + $('#generator').append( templateGenerator(apiProject) ); + + // render Project + _.extend(apiProject, { versions: apiVersions}); + $('#project').append( templateProject(apiProject) ); + + // render apiDoc, header/footer documentation + if (apiProject.header) + $('#header').append( templateHeader(apiProject.header) ); + + if (apiProject.footer) + $('#footer').append( templateFooter(apiProject.footer) ); + + // + // Render Sections and Articles + // + var articleVersions = {}; + var content = ''; + apiGroups.forEach(function(groupEntry) { + var articles = []; + var oldName = ''; + var fields = {}; + var title = groupEntry; + var description = ''; + articleVersions[groupEntry] = {}; + + // render all articles of a group + api.forEach(function(entry) { + if(groupEntry === entry.group) { + if (oldName !== entry.name) { + // determine versions + api.forEach(function(versionEntry) { + if (groupEntry === versionEntry.group && entry.name === versionEntry.name) { + if ( ! articleVersions[entry.group].hasOwnProperty(entry.name) ) { + articleVersions[entry.group][entry.name] = []; + } + articleVersions[entry.group][entry.name].push(versionEntry.version); + } + }); + fields = { + article: entry, + versions: articleVersions[entry.group][entry.name] + }; + } else { + fields = { + article: entry, + hidden: true, + versions: articleVersions[entry.group][entry.name] + }; + } + + // add prefix URL for endpoint unless it's already absolute + if (apiProject.url) { + if (fields.article.url.substr(0, 4).toLowerCase() !== 'http') { + fields.article.url = apiProject.url + fields.article.url; + } + } + + addArticleSettings(fields, entry); + + if (entry.groupTitle) + title = entry.groupTitle; + + // TODO: make groupDescription compareable with older versions (not important for the moment) + if (entry.groupDescription) + description = entry.groupDescription; + + articles.push({ + article: templateArticle(fields), + group: entry.group, + name: entry.name, + aloneDisplay: apiProject.template.aloneDisplay + }); + oldName = entry.name; + } + }); + + // render Section with Articles + var fields = { + group: groupEntry, + title: title, + description: description, + articles: articles, + aloneDisplay: apiProject.template.aloneDisplay + }; + content += templateSections(fields); + }); + $('#sections').append( content ); + + // Bootstrap Scrollspy + $(this).scrollspy({ target: '#scrollingNav' }); + + // Content-Scroll on Navigation click. + $('.sidenav').find('a').on('click', function(e) { + e.preventDefault(); + var id = $(this).attr('href'); + if ($(id).length > 0) + $('html,body').animate({ scrollTop: parseInt($(id).offset().top) }, 400); + window.location.hash = $(this).attr('href'); + }); + + /** + * Check if Parameter (sub) List has a type Field. + * Example: @apiSuccess varname1 No type. + * @apiSuccess {String} varname2 With type. + * + * @param {Object} fields + */ + function _hasTypeInFields(fields) { + var result = false; + $.each(fields, function(name) { + result = result || _.some(fields[name], function(item) { return item.type; }); + }); + return result; + } + + /** + * On Template changes, recall plugins. + */ + function initDynamic() { + // Bootstrap popover + $('button[data-toggle="popover"]').popover().click(function(e) { + e.preventDefault(); + }); + + var version = $('#version strong').html(); + $('#sidenav li').removeClass('is-new'); + if (apiProject.template.withCompare) { + $('#sidenav li[data-version=\'' + version + '\']').each(function(){ + var group = $(this).data('group'); + var name = $(this).data('name'); + var length = $('#sidenav li[data-group=\'' + group + '\'][data-name=\'' + name + '\']').length; + var index = $('#sidenav li[data-group=\'' + group + '\'][data-name=\'' + name + '\']').index($(this)); + if (length === 1 || index === (length - 1)) + $(this).addClass('is-new'); + }); + } + + // tabs + $('.nav-tabs-examples a').click(function (e) { + e.preventDefault(); + $(this).tab('show'); + }); + $('.nav-tabs-examples').find('a:first').tab('show'); + + // sample header-content-type switch + $('.sample-header-content-type-switch').change(function () { + var paramName = '.' + $(this).attr('name') + '-fields'; + var bodyName = '.' + $(this).attr('name') + '-body'; + var selectName = 'select[name=' + $(this).attr('name') + ']'; + if ($(this).val() == 'body-json') { + $(selectName).val('undefined'); + $(this).val('body-json'); + $(paramName).removeClass('hide'); + $(this).parent().nextAll(paramName).first().addClass('hide'); + $(bodyName).addClass('hide'); + $(this).parent().nextAll(bodyName).first().removeClass('hide'); + } else if ($(this).val() == "body-form-data") { + $(selectName).val('undefined'); + $(this).val('body-form-data'); + $(bodyName).addClass('hide'); + $(paramName).removeClass('hide'); + } else { + $(this).parent().nextAll(paramName).first().removeClass('hide') + $(this).parent().nextAll(bodyName).first().addClass('hide'); + } + $(this).prev('.sample-request-switch').prop('checked', true); + }); + + // sample request switch + $('.sample-request-switch').click(function (e) { + var paramName = '.' + $(this).attr('name') + '-fields'; + var bodyName = '.' + $(this).attr('name') + '-body'; + var select = $(this).next('.' + $(this).attr('name') + '-select').val(); + if($(this).prop("checked")){ + if (select == 'body-json'){ + $(this).parent().nextAll(bodyName).first().removeClass('hide'); + }else { + $(this).parent().nextAll(paramName).first().removeClass('hide'); + } + }else { + if (select == 'body-json'){ + $(this).parent().nextAll(bodyName).first().addClass('hide'); + }else { + $(this).parent().nextAll(paramName).first().addClass('hide'); + } + } + }); + + if (apiProject.template.aloneDisplay){ + //show group + $('.show-group').click(function () { + var apiGroup = '.' + $(this).attr('data-group') + '-group'; + var apiGroupArticle = '.' + $(this).attr('data-group') + '-article'; + $(".show-api-group").addClass('hide'); + $(apiGroup).removeClass('hide'); + $(".show-api-article").addClass('hide'); + $(apiGroupArticle).removeClass('hide'); + }); + + //show api + $('.show-api').click(function () { + var apiName = '.' + $(this).attr('data-name') + '-article'; + var apiGroup = '.' + $(this).attr('data-group') + '-group'; + $(".show-api-group").addClass('hide'); + $(apiGroup).removeClass('hide'); + $(".show-api-article").addClass('hide'); + $(apiName).removeClass('hide'); + }); + } + + // call scrollspy refresh method + $(window).scrollspy('refresh'); + + // init modules + sampleRequest.initDynamic(); + Prism.highlightAll() + } + initDynamic(); + + if (apiProject.template.aloneDisplay) { + var hashVal = window.location.hash; + if (hashVal != null && hashVal.length !== 0) { + $("." + hashVal.slice(1) + "-init").click(); + } + } + + // + // HTML-Template specific jQuery-Functions + // + // Change Main Version + function setMainVersion(selectedVersion) { + if (typeof(selectedVersion) === 'undefined') { + selectedVersion = $('#version strong').html(); + } + else { + $('#version strong').html(selectedVersion); + } + + // hide all + $('article').addClass('hide'); + $('#sidenav li:not(.nav-fixed)').addClass('hide'); + + // show 1st equal or lower Version of each entry + $('article[data-version]').each(function(index) { + var group = $(this).data('group'); + var name = $(this).data('name'); + var version = $(this).data('version'); + + if (semver.lte(version, selectedVersion)) { + if ($('article[data-group=\'' + group + '\'][data-name=\'' + name + '\']:visible').length === 0) { + // enable Article + $('article[data-group=\'' + group + '\'][data-name=\'' + name + '\'][data-version=\'' + version + '\']').removeClass('hide'); + // enable Navigation + $('#sidenav li[data-group=\'' + group + '\'][data-name=\'' + name + '\'][data-version=\'' + version + '\']').removeClass('hide'); + $('#sidenav li.nav-header[data-group=\'' + group + '\']').removeClass('hide'); + } + } + }); + + // show 1st equal or lower Version of each entry + $('article[data-version]').each(function(index) { + var group = $(this).data('group'); + $('section#api-' + group).removeClass('hide'); + if ($('section#api-' + group + ' article:visible').length === 0) { + $('section#api-' + group).addClass('hide'); + } else { + $('section#api-' + group).removeClass('hide'); + } + }); + + initDynamic(); + return; + } + setMainVersion(); + + $('#versions li.version a').on('click', function(e) { + e.preventDefault(); + + setMainVersion($(this).html()); + }); + + // compare all article with their predecessor + $('#compareAllWithPredecessor').on('click', changeAllVersionCompareTo); + + // change version of an article + $('article .versions li.version a').on('click', changeVersionCompareTo); + + // compare url-parameter + $.urlParam = function(name) { + var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(window.location.href); + return (results && results[1]) ? results[1] : null; + }; + + if ($.urlParam('compare')) { + // URL Paramter ?compare=1 is set + $('#compareAllWithPredecessor').trigger('click'); + } + + // Quick jump on page load to hash position. + // Should happen after setting the main version + // and after triggering the click on the compare button, + // as these actions modify the content + // and would make it jump to the wrong position or not jump at all. + if (window.location.hash) { + var id = decodeURI(window.location.hash); + if ($(id).length > 0) + $('html,body').animate({ scrollTop: parseInt($(id).offset().top) }, 0); + } + + /** + * Initialize search + */ + var options = { + valueNames: [ 'nav-list-item','nav-list-url-item'] + }; + var endpointsList = new List('scrollingNav', options); + + /** + * Set initial focus to search input + */ + $('#scrollingNav .sidenav-search input.search').focus(); + + /** + * Detect ESC key to reset search + */ + $(document).keyup(function(e) { + if (e.keyCode === 27) $('span.search-reset').click(); + }); + + /** + * Search reset + */ + $('span.search-reset').on('click', function() { + $('#scrollingNav .sidenav-search input.search') + .val("") + .focus() + ; + endpointsList.search(); + }); + + /** + * Change version of an article to compare it to an other version. + */ + function changeVersionCompareTo(e) { + e.preventDefault(); + + var $root = $(this).parents('article'); + var selectedVersion = $(this).html(); + var $button = $root.find('.version'); + var currentVersion = $button.find('strong').html(); + $button.find('strong').html(selectedVersion); + + var group = $root.data('group'); + var name = $root.data('name'); + var version = $root.data('version'); + + var compareVersion = $root.data('compare-version'); + + if (compareVersion === selectedVersion) + return; + + if ( ! compareVersion && version == selectedVersion) + return; + + if (compareVersion && articleVersions[group][name][0] === selectedVersion || version === selectedVersion) { + // the version of the entry is set to the highest version (reset) + resetArticle(group, name, version); + } else { + var $compareToArticle = $('article[data-group=\'' + group + '\'][data-name=\'' + name + '\'][data-version=\'' + selectedVersion + '\']'); + + var sourceEntry = {}; + var compareEntry = {}; + $.each(apiByGroupAndName[group][name], function(index, entry) { + if (entry.version === version) + sourceEntry = entry; + if (entry.version === selectedVersion) + compareEntry = entry; + }); + + var fields = { + article: sourceEntry, + compare: compareEntry, + versions: articleVersions[group][name] + }; + + // add unique id + // TODO: replace all group-name-version in template with id. + fields.article.id = fields.article.group + '-' + fields.article.name + '-' + fields.article.version; + fields.article.id = fields.article.id.replace(/\./g, '_'); + + fields.compare.id = fields.compare.group + '-' + fields.compare.name + '-' + fields.compare.version; + fields.compare.id = fields.compare.id.replace(/\./g, '_'); + + var entry = sourceEntry; + if (entry.parameter && entry.parameter.fields) + fields._hasTypeInParameterFields = _hasTypeInFields(entry.parameter.fields); + + if (entry.error && entry.error.fields) + fields._hasTypeInErrorFields = _hasTypeInFields(entry.error.fields); + + if (entry.success && entry.success.fields) + fields._hasTypeInSuccessFields = _hasTypeInFields(entry.success.fields); + + if (entry.info && entry.info.fields) + fields._hasTypeInInfoFields = _hasTypeInFields(entry.info.fields); + + var entry = compareEntry; + if (fields._hasTypeInParameterFields !== true && entry.parameter && entry.parameter.fields) + fields._hasTypeInParameterFields = _hasTypeInFields(entry.parameter.fields); + + if (fields._hasTypeInErrorFields !== true && entry.error && entry.error.fields) + fields._hasTypeInErrorFields = _hasTypeInFields(entry.error.fields); + + if (fields._hasTypeInSuccessFields !== true && entry.success && entry.success.fields) + fields._hasTypeInSuccessFields = _hasTypeInFields(entry.success.fields); + + if (fields._hasTypeInInfoFields !== true && entry.info && entry.info.fields) + fields._hasTypeInInfoFields = _hasTypeInFields(entry.info.fields); + + var content = templateCompareArticle(fields); + $root.after(content); + var $content = $root.next(); + + // Event on.click re-assign + $content.find('.versions li.version a').on('click', changeVersionCompareTo); + + // select navigation + $('#sidenav li[data-group=\'' + group + '\'][data-name=\'' + name + '\'][data-version=\'' + currentVersion + '\']').addClass('has-modifications'); + + $root.remove(); + // TODO: on change main version or select the highest version re-render + } + + initDynamic(); + } + + /** + * Compare all currently selected Versions with their predecessor. + */ + function changeAllVersionCompareTo(e) { + e.preventDefault(); + $('article:visible .versions').each(function(){ + var $root = $(this).parents('article'); + var currentVersion = $root.data('version'); + var $foundElement = null; + $(this).find('li.version a').each(function() { + var selectVersion = $(this).html(); + if (selectVersion < currentVersion && ! $foundElement) + $foundElement = $(this); + }); + + if($foundElement) + $foundElement.trigger('click'); + }); + initDynamic(); + } + + /** + * Sort the fields. + */ + function sortFields(fields_object) { + $.each(fields_object, function (key, fields) { + + var reversed = fields.slice().reverse() + + var max_dot_count = Math.max.apply(null, reversed.map(function (item) { + return item.field.split(".").length - 1; + })) + + for (var dot_count = 1; dot_count <= max_dot_count; dot_count++) { + reversed.forEach(function (item, index) { + var parts = item.field.split("."); + if (parts.length - 1 == dot_count) { + var fields_names = fields.map(function (item) { return item.field; }); + if (parts.slice(1).length >= 1) { + var prefix = parts.slice(0, parts.length - 1).join("."); + var prefix_index = fields_names.indexOf(prefix); + if (prefix_index > -1) { + fields.splice(fields_names.indexOf(item.field), 1); + fields.splice(prefix_index + 1, 0, item); + } + } + } + }); + } + }); + } + + /** + * Add article settings. + */ + function addArticleSettings(fields, entry) { + // add unique id + // TODO: replace all group-name-version in template with id. + fields.id = fields.article.group + '-' + fields.article.name + '-' + fields.article.version; + fields.id = fields.id.replace(/\./g, '_'); + + if (entry.header && entry.header.fields) { + sortFields(entry.header.fields); + fields._hasTypeInHeaderFields = _hasTypeInFields(entry.header.fields); + } + + if (entry.parameter && entry.parameter.fields) { + sortFields(entry.parameter.fields); + fields._hasTypeInParameterFields = _hasTypeInFields(entry.parameter.fields); + } + + if (entry.error && entry.error.fields) { + sortFields(entry.error.fields); + fields._hasTypeInErrorFields = _hasTypeInFields(entry.error.fields); + } + + if (entry.success && entry.success.fields) { + sortFields(entry.success.fields); + fields._hasTypeInSuccessFields = _hasTypeInFields(entry.success.fields); + } + + if (entry.info && entry.info.fields) { + sortFields(entry.info.fields); + fields._hasTypeInInfoFields = _hasTypeInFields(entry.info.fields); + } + + // add template settings + fields.template = apiProject.template; + } + + /** + * Render Article. + */ + function renderArticle(group, name, version) { + var entry = {}; + $.each(apiByGroupAndName[group][name], function(index, currentEntry) { + if (currentEntry.version === version) + entry = currentEntry; + }); + var fields = { + article: entry, + versions: articleVersions[group][name] + }; + + addArticleSettings(fields, entry); + + return templateArticle(fields); + } + + /** + * Render original Article and remove the current visible Article. + */ + function resetArticle(group, name, version) { + var $root = $('article[data-group=\'' + group + '\'][data-name=\'' + name + '\']:visible'); + var content = renderArticle(group, name, version); + + $root.after(content); + var $content = $root.next(); + + // Event on.click needs to be reassigned (should actually work with on ... automatically) + $content.find('.versions li.version a').on('click', changeVersionCompareTo); + + $('#sidenav li[data-group=\'' + group + '\'][data-name=\'' + name + '\'][data-version=\'' + version + '\']').removeClass('has-modifications'); + + $root.remove(); + return; + } + + /** + * Return ordered entries by custom order and append not defined entries to the end. + * @param {String[]} elements + * @param {String[]} order + * @param {String} splitBy + * @return {String[]} Custom ordered list. + */ + function sortByOrder(elements, order, splitBy) { + var results = []; + order.forEach (function(name) { + if (splitBy) + elements.forEach (function(element) { + var parts = element.split(splitBy); + var key = parts[0]; // reference keep for sorting + if (key == name || parts[1] == name) + results.push(element); + }); + else + elements.forEach (function(key) { + if (key == name) + results.push(name); + }); + }); + // Append all other entries that ar not defined in order + elements.forEach(function(element) { + if (results.indexOf(element) === -1) + results.push(element); + }); + return results; + } + Prism.highlightAll() +} diff --git a/public/docs/utils/handlebars_helper.js b/public/docs/utils/handlebars_helper.js new file mode 100644 index 000000000..14a57fc75 --- /dev/null +++ b/public/docs/utils/handlebars_helper.js @@ -0,0 +1,376 @@ +define([ + 'locales', + 'handlebars', + 'diffMatchPatch' +], function(locale, Handlebars, DiffMatchPatch) { + + /** + * Return a text as markdown. + * Currently only a little helper to replace apidoc-inline Links (#Group:Name). + * Should be replaced with a full markdown lib. + * @param string text + */ + Handlebars.registerHelper('markdown', function(text) { + if ( ! text ) { + return text; + } + text = text.replace(/((\[(.*?)\])?\(#)((.+?):(.+?))(\))/mg, function(match, p1, p2, p3, p4, p5, p6) { + var link = p3 || p5 + '/' + p6; + return '' + link + ''; + }); + return text; + }); + + /** + * set paramater type. + */ + Handlebars.registerHelper("setInputType", function(text) { + if (text === "File") { + return "file"; + } + return "text"; + }); + + /** + * start/stop timer for simple performance check. + */ + var timer; + Handlebars.registerHelper('startTimer', function(text) { + timer = new Date(); + return ''; + }); + + Handlebars.registerHelper('stopTimer', function(text) { + console.log(new Date() - timer); + return ''; + }); + + /** + * Return localized Text. + * @param string text + */ + Handlebars.registerHelper('__', function(text) { + return locale.__(text); + }); + + /** + * Console log. + * @param mixed obj + */ + Handlebars.registerHelper('cl', function(obj) { + console.log(obj); + return ''; + }); + + /** + * Replace underscore with space. + * @param string text + */ + Handlebars.registerHelper('underscoreToSpace', function(text) { + return text.replace(/(_+)/g, ' '); + }); + + /** + * + */ + Handlebars.registerHelper('assign', function(name) { + if(arguments.length > 0) { + var type = typeof(arguments[1]); + var arg = null; + if(type === 'string' || type === 'number' || type === 'boolean') arg = arguments[1]; + Handlebars.registerHelper(name, function() { return arg; }); + } + return ''; + }); + + /** + * + */ + Handlebars.registerHelper('nl2br', function(text) { + return _handlebarsNewlineToBreak(text); + }); + + /** + * + */ + Handlebars.registerHelper('if_eq', function(context, options) { + var compare = context; + // Get length if context is an object + if (context instanceof Object && ! (options.hash.compare instanceof Object)) + compare = Object.keys(context).length; + + if (compare === options.hash.compare) + return options.fn(this); + + return options.inverse(this); + }); + + /** + * + */ + Handlebars.registerHelper('if_gt', function(context, options) { + var compare = context; + // Get length if context is an object + if (context instanceof Object && ! (options.hash.compare instanceof Object)) + compare = Object.keys(context).length; + + if(compare > options.hash.compare) + return options.fn(this); + + return options.inverse(this); + }); + + /** + * + */ + var templateCache = {}; + Handlebars.registerHelper('subTemplate', function(name, sourceContext) { + if ( ! templateCache[name]) + templateCache[name] = Handlebars.compile($('#template-' + name).html()); + + var template = templateCache[name]; + var templateContext = $.extend({}, this, sourceContext.hash); + return new Handlebars.SafeString( template(templateContext) ); + }); + + /** + * + */ + Handlebars.registerHelper('toLowerCase', function(value) { + return (value && typeof value === 'string') ? value.toLowerCase() : ''; + }); + + /** + * + */ + Handlebars.registerHelper('splitFill', function(value, splitChar, fillChar) { + var splits = value.split(splitChar); + return new Array(splits.length).join(fillChar) + splits[splits.length - 1]; + }); + + /** + * Convert Newline to HTML-Break (nl2br). + * + * @param {String} text + * @returns {String} + */ + function _handlebarsNewlineToBreak(text) { + return ('' + text).replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1' + '
' + '$2'); + } + + /** + * + */ + Handlebars.registerHelper('each_compare_list_field', function(source, compare, options) { + var fieldName = options.hash.field; + var newSource = []; + if (source) { + source.forEach(function(entry) { + var values = entry; + values['key'] = entry[fieldName]; + newSource.push(values); + }); + } + + var newCompare = []; + if (compare) { + compare.forEach(function(entry) { + var values = entry; + values['key'] = entry[fieldName]; + newCompare.push(values); + }); + } + return _handlebarsEachCompared('key', newSource, newCompare, options); + }); + + /** + * + */ + Handlebars.registerHelper('each_compare_keys', function(source, compare, options) { + var newSource = []; + if (source) { + var sourceFields = Object.keys(source); + sourceFields.forEach(function(name) { + var values = {}; + values['value'] = source[name]; + values['key'] = name; + newSource.push(values); + }); + } + + var newCompare = []; + if (compare) { + var compareFields = Object.keys(compare); + compareFields.forEach(function(name) { + var values = {}; + values['value'] = compare[name]; + values['key'] = name; + newCompare.push(values); + }); + } + return _handlebarsEachCompared('key', newSource, newCompare, options); + }); + + /** + * + */ + Handlebars.registerHelper('each_compare_field', function(source, compare, options) { + return _handlebarsEachCompared('field', source, compare, options); + }); + + /** + * + */ + Handlebars.registerHelper('each_compare_title', function(source, compare, options) { + return _handlebarsEachCompared('title', source, compare, options); + }); + + /** + * + */ + Handlebars.registerHelper('reformat', function(source, type){ + if (type == 'json') + try { + return JSON.stringify(JSON.parse(source.trim()),null, " "); + } catch(e) { + + } + return source + }); + + /** + * + */ + Handlebars.registerHelper('showDiff', function(source, compare, options) { + var ds = ''; + if(source === compare) { + ds = source; + } else { + if( ! source) + return compare; + + if( ! compare) + return source; + + var d = diffMatchPatch.diff_main(stripHtml(compare), stripHtml(source)); + diffMatchPatch.diff_cleanupSemantic(d); + ds = diffMatchPatch.diff_prettyHtml(d); + ds = ds.replace(/¶/gm, ''); + } + if(options === 'nl2br') + ds = _handlebarsNewlineToBreak(ds); + + return ds; + }); + + /** + * + */ + function _handlebarsEachCompared(fieldname, source, compare, options) + { + var dataList = []; + var index = 0; + if(source) { + source.forEach(function(sourceEntry) { + var found = false; + if (compare) { + compare.forEach(function(compareEntry) { + if(sourceEntry[fieldname] === compareEntry[fieldname]) { + var data = { + typeSame: true, + source: sourceEntry, + compare: compareEntry, + index: index + }; + dataList.push(data); + found = true; + index++; + } + }); + } + if ( ! found) { + var data = { + typeIns: true, + source: sourceEntry, + index: index + }; + dataList.push(data); + index++; + } + }); + } + + if (compare) { + compare.forEach(function(compareEntry) { + var found = false; + if (source) { + source.forEach(function(sourceEntry) { + if(sourceEntry[fieldname] === compareEntry[fieldname]) + found = true; + }); + } + if ( ! found) { + var data = { + typeDel: true, + compare: compareEntry, + index: index + }; + dataList.push(data); + index++; + } + }); + } + + var ret = ''; + var length = dataList.length; + for (var index in dataList) { + if(index == (length - 1)) + dataList[index]['_last'] = true; + ret = ret + options.fn(dataList[index]); + } + return ret; + } + + var diffMatchPatch = new DiffMatchPatch(); + + /** + * Overwrite Colors + */ + DiffMatchPatch.prototype.diff_prettyHtml = function(diffs) { + var html = []; + var pattern_amp = /&/g; + var pattern_lt = //g; + var pattern_para = /\n/g; + for (var x = 0; x < diffs.length; x++) { + var op = diffs[x][0]; // Operation (insert, delete, equal) + var data = diffs[x][1]; // Text of change. + var text = data.replace(pattern_amp, '&').replace(pattern_lt, '<') + .replace(pattern_gt, '>').replace(pattern_para, '¶
'); + switch (op) { + case DIFF_INSERT: + html[x] = '' + text + ''; + break; + case DIFF_DELETE: + html[x] = '' + text + ''; + break; + case DIFF_EQUAL: + html[x] = '' + text + ''; + break; + } + } + return html.join(''); + }; + + /** + * Fixes html after comparison (#506, #538, #616, #825) + */ + function stripHtml(html){ + var div = document.createElement("div"); + div.innerHTML = html; + return div.textContent || div.innerText || ""; + } + + // Exports + return Handlebars; +}); diff --git a/public/docs/utils/send_sample_request.js b/public/docs/utils/send_sample_request.js new file mode 100755 index 000000000..4d695d143 --- /dev/null +++ b/public/docs/utils/send_sample_request.js @@ -0,0 +1,272 @@ +define([ + 'jquery', + 'lodash', + './utils/send_sample_request_utils' +], function($, _, utils) { + + var initDynamic = function() { + // Button send + $(".sample-request-send").off("click"); + $(".sample-request-send").on("click", function(e) { + e.preventDefault(); + var $root = $(this).parents("article"); + var group = $root.data("group"); + var name = $root.data("name"); + var version = $root.data("version"); + sendSampleRequest(group, name, version, $(this).data("sample-request-type")); + }); + + // Button clear + $(".sample-request-clear").off("click"); + $(".sample-request-clear").on("click", function(e) { + e.preventDefault(); + var $root = $(this).parents("article"); + var group = $root.data("group"); + var name = $root.data("name"); + var version = $root.data("version"); + clearSampleRequest(group, name, version); + }); + }; // initDynamic + + function sendSampleRequest(group, name, version, type) + { + var $root = $('article[data-group="' + group + '"][data-name="' + name + '"][data-version="' + version + '"]'); + + // Optional header + var header = {}; + $root.find(".sample-request-header:checked").each(function(i, element) { + var group = $(element).data("sample-request-header-group-id"); + $root.find("[data-sample-request-header-group=\"" + group + "\"]").each(function(i, element) { + var key = $(element).data("sample-request-header-name"); + var value = element.value; + if (typeof element.optional === 'undefined') { + element.optional = true; + } + if ( ! element.optional && element.defaultValue !== '') { + value = element.defaultValue; + } + header[key] = value; + }); + }); + + + // create JSON dictionary of parameters + var param = {}; + var paramType = {}; + var bodyFormData = new FormData(); + var bodyJson = ''; + $root.find(".sample-request-param:checked").each(function(i, element) { + var group = $(element).data("sample-request-param-group-id"); + var contentType = $(element).nextAll('.sample-header-content-type-switch').first().val(); + if (contentType == "body-json"){ + $root.find("[data-sample-request-body-group=\"" + group + "\"]").not(function(){ + return $(this).val() == "" && $(this).is("[data-sample-request-param-optional='true']"); + }).each(function(i, element) { + if (isJson(element.value)){ + header['Content-Type'] = 'application/json'; + bodyJson = element.value; + } + }); + }else { + $root.find("[data-sample-request-param-group=\"" + group + "\"]").not(function(){ + return $(this).val() == "" && $(this).is("[data-sample-request-param-optional='true']"); + }).each(function(i, element) { + var key = $(element).data("sample-request-param-name"); + var value = element.value; + if ( ! element.optional && element.defaultValue !== '') { + value = element.defaultValue; + } + if (contentType == "body-form-data"){ + header['Content-Type'] = 'multipart/form-data' + if (element.type == "file") { + value = element.files[0]; + } + bodyFormData.append(key,value); + }else { + param[key] = value; + paramType[key] = $(element).next().text(); + } + }); + } + }); + + // grab user-inputted URL + var url = $root.find(".sample-request-url").val(); + + //Convert {param} form to :param + url = utils.convertPathParams(url); + + // Insert url parameter + var pattern = pathToRegexp(url, null); + var matches = pattern.exec(url); + for (var i = 1; i < matches.length; i++) { + var key = matches[i].substr(1); + var optional = false + if (key[key.length - 1] === '?') { + optional = true; + key = key.substr(0, key.length - 1); + } + if (param[key] !== undefined) { + url = url.replace(matches[i], encodeURIComponent(param[key])); + + // remove URL parameters from list + delete param[key]; + } else if (optional) { + // if parameter is optional denoted by ending '?' in param (:param?) + // and no parameter is given, replace parameter with empty string instead + url = url.replace(matches[i], ''); + delete param[key]; + } + } // for + + //handle nested objects and parsing fields + param = utils.handleNestedAndParsingFields(param, paramType); + + //add url search parameter + if (header['Content-Type'] == 'application/json') { + if (bodyJson) { + // bodyJson is set to value if request body: 'body/json' was selected and manual json was input + // in this case, use the given bodyJson and add other params in query string + url = url + encodeSearchParams(param); + param = bodyJson; + } else { + // bodyJson not set, but Content-Type: application/json header was set. In this case, send parameters + // as JSON body. First, try parsing fields of object with given paramType definition so that the json + // is valid against the parameter spec (e.g. Boolean params are boolean instead of strings in final json) + param = utils.tryParsingWithTypes(param, paramType); + param = JSON.stringify(param); + } + }else if (header['Content-Type'] == 'multipart/form-data'){ + url = url + encodeSearchParams(param); + param = bodyFormData; + } + + $root.find(".sample-request-response").fadeTo(250, 1); + $root.find(".sample-request-response-json").html("Loading..."); + refreshScrollSpy(); + + // send AJAX request, catch success or error callback + var ajaxRequest = { + url : url, + headers : header, + data : param, + type : type.toUpperCase(), + success : displaySuccess, + error : displayError + }; + + if(header['Content-Type'] == 'multipart/form-data'){ + delete ajaxRequest.headers['Content-Type']; + ajaxRequest.contentType=false; + ajaxRequest.processData=false; + } + $.ajax(ajaxRequest); + + + function displaySuccess(data, status, jqXHR) { + var jsonResponse; + try { + jsonResponse = JSON.parse(jqXHR.responseText); + jsonResponse = JSON.stringify(jsonResponse, null, 4); + } catch (e) { + jsonResponse = jqXHR.responseText; + } + $root.find(".sample-request-response-json").text(jsonResponse); + refreshScrollSpy(); + }; + + function displayError(jqXHR, textStatus, error) { + var message = "Error " + jqXHR.status + ": " + error; + var jsonResponse; + try { + jsonResponse = JSON.parse(jqXHR.responseText); + jsonResponse = JSON.stringify(jsonResponse, null, 4); + } catch (e) { + jsonResponse = jqXHR.responseText; + } + + if (jsonResponse) + message += "\n" + jsonResponse; + + // flicker on previous error to make clear that there is a new response + if($root.find(".sample-request-response").is(":visible")) + $root.find(".sample-request-response").fadeTo(1, 0.1); + + $root.find(".sample-request-response").fadeTo(250, 1); + $root.find(".sample-request-response-json").text(message); + refreshScrollSpy(); + }; + } + + function clearSampleRequest(group, name, version) + { + var $root = $('article[data-group="' + group + '"][data-name="' + name + '"][data-version="' + version + '"]'); + + // hide sample response + $root.find(".sample-request-response-json").html(""); + $root.find(".sample-request-response").hide(); + + // reset value of parameters + $root.find(".sample-request-param").each(function(i, element) { + element.value = ""; + }); + + // restore default URL + var $urlElement = $root.find(".sample-request-url"); + $urlElement.val($urlElement.prop("defaultValue")); + + refreshScrollSpy(); + } + + function refreshScrollSpy() + { + $('[data-spy="scroll"]').each(function () { + $(this).scrollspy("refresh"); + }); + } + + function escapeHtml(str) { + var div = document.createElement("div"); + div.appendChild(document.createTextNode(str)); + return div.innerHTML; + } + + + /** + * is Json + */ + function isJson(str) { + if (typeof str == 'string') { + try { + var obj=JSON.parse(str); + if(typeof obj == 'object' && obj ){ + return true; + }else{ + return false; + } + } catch(e) { + return false; + } + } + } + + /** + * encode Search Params + */ + function encodeSearchParams(obj) { + const params = []; + Object.keys(obj).forEach((key) => { + let value = obj[key]; + params.push([key, encodeURIComponent(value)].join('=')); + }) + return params.length === 0 ? '' : '?' + params.join('&'); + } + + /** + * Exports. + */ + return { + initDynamic: initDynamic + }; + +}); diff --git a/public/docs/utils/send_sample_request_utils.js b/public/docs/utils/send_sample_request_utils.js new file mode 100755 index 000000000..fbda1ffd2 --- /dev/null +++ b/public/docs/utils/send_sample_request_utils.js @@ -0,0 +1,97 @@ +//this block is used to make this module works with Node (CommonJS module format) +if (typeof define !== 'function') { + var define = require('amdefine')(module) +} + +define(['lodash'], function (_) { + + var log = console; + + function handleNestedFields(object, key, params, paramType) { + var attributes = key.split('.'); + var field = attributes[0]; + params.push(field); + if (attributes.length > 1 && paramType[params.join('.')] == 'Object') { + var nestedField = attributes.slice(1).join('.'); + if (!object[field]) + object[field] = {}; + if (typeof object[field] == 'object') { + object[field][nestedField] = object[key]; + delete object[key]; + handleNestedFields(object[field], nestedField, params, paramType); + } + } + } + + function handleNestedFieldsForAllParams(param, paramType) { + var result = Object.assign({}, param); + Object.keys(result).forEach(function (key) { + handleNestedFields(result, key, [], paramType); + }); + return result + } + + function handleArraysAndObjectFields(param, paramType) { + var result = Object.assign({}, param); + Object.keys(paramType).forEach(function (key) { + if (result[key] && (paramType[key].endsWith('[]') || paramType[key] === 'Object')) { + try { + result[key] = JSON.parse(result[key]); + } catch (e) {;} + } + }); + return result + } + + function tryParsingAsType(object, path, type) { + var val = _.get(object, path); + if (val !== undefined) { + if (type === 'Boolean') { + if (val === 'true') { + _.set(object, path, true); + } else if (val === 'false') { + _.set(object, path, false); + } else { + log.warn('Failed to parse object value at path [' + path + ']. Value: (' + val + '). Type: (' + type + ')'); + } + } else if (type === 'Number') { + var parsedInt = parseInt(val, 10); + if (!_.isNaN(parsedInt)) { + _.set(object, path, parsedInt); + } else { + log.warn('Failed to parse object value at path [' + path + ']. Value: (' + val + '). Type: (' + type + ')'); + } + } + } + } + + function handleNestedAndParsingFields(param, paramType) { + var result = handleArraysAndObjectFields(param, paramType); + result = handleNestedFieldsForAllParams(result, paramType); + return result; + } + + function tryParsingWithTypes(param, paramType) { + var result = Object.assign({}, param); + Object.keys(paramType).forEach(function (key) { + tryParsingAsType(result, key, paramType[key]); + }); + return result; + } + + // Converts path params in the {param} format to the accepted :param format, used before inserting the URL params. + function convertPathParams(url) { + return url.replace(/{(.+?)}/g, ':$1'); + } + + function setLogger(logger) { + log = logger; + } + + return { + handleNestedAndParsingFields, + convertPathParams, + tryParsingWithTypes, + setLogger + }; +}); diff --git a/public/docs/vendor/bootstrap.min.css b/public/docs/vendor/bootstrap.min.css new file mode 100644 index 000000000..5b96335ff --- /dev/null +++ b/public/docs/vendor/bootstrap.min.css @@ -0,0 +1,6 @@ +/*! + * Bootstrap v3.4.1 (https://getbootstrap.com/) + * Copyright 2011-2019 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;-moz-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:"Glyphicons Halflings";src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format("embedded-opentype"),url(../fonts/glyphicons-halflings-regular.woff2) format("woff2"),url(../fonts/glyphicons-halflings-regular.woff) format("woff"),url(../fonts/glyphicons-halflings-regular.ttf) format("truetype"),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format("svg")}.glyphicon{position:relative;top:1px;display:inline-block;font-family:"Glyphicons Halflings";font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:"\2014 \00A0"}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:""}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:"\00A0 \2014"}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.row-no-gutters{margin-right:0;margin-left:0}.row-no-gutters [class*=col-]{padding-right:0;padding-left:0}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:none;-moz-appearance:none;appearance:none}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s,-webkit-box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=datetime-local].form-control,input[type=month].form-control,input[type=time].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],.input-group-sm input[type=time],input[type=date].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm,input[type=time].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],.input-group-lg input[type=time],input[type=date].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg,input[type=time].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;padding:6px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);opacity:.65;-webkit-box-shadow:none;box-shadow:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;background-image:none;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;background-image:none;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;background-image:none;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;background-image:none;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;background-image:none;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;background-image:none;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-right:15px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-right:-15px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);margin-top:8px;margin-bottom:8px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0%;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out,-o-transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5);outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;line-height:1.42857143;line-break:auto;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;font-size:12px;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;line-height:1.42857143;line-break:auto;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;font-size:14px;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover>.arrow{border-width:11px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out,-o-transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);left:0}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);left:0}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);left:0}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;outline:0;filter:alpha(opacity=90);opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:"\2039"}.carousel-control .icon-next:before{content:"\203a"}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}} +/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/public/docs/vendor/bootstrap.min.js b/public/docs/vendor/bootstrap.min.js new file mode 100644 index 000000000..eb0a8b410 --- /dev/null +++ b/public/docs/vendor/bootstrap.min.js @@ -0,0 +1,6 @@ +/*! + * Bootstrap v3.4.1 (https://getbootstrap.com/) + * Copyright 2011-2019 Twitter, Inc. + * Licensed under the MIT license + */ +if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");!function(t){"use strict";var e=jQuery.fn.jquery.split(" ")[0].split(".");if(e[0]<2&&e[1]<9||1==e[0]&&9==e[1]&&e[2]<1||3this.$items.length-1||t<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){e.to(t)}):i==t?this.pause().cycle():this.slide(idocument.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&t?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!t?this.scrollbarWidth:""})},s.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},s.prototype.checkScrollbar=function(){var t=window.innerWidth;if(!t){var e=document.documentElement.getBoundingClientRect();t=e.right-Math.abs(e.left)}this.bodyIsOverflowing=document.body.clientWidth

',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0},sanitize:!0,sanitizeFn:null,whiteList:t},m.prototype.init=function(t,e,i){if(this.enabled=!0,this.type=t,this.$element=g(e),this.options=this.getOptions(i),this.$viewport=this.options.viewport&&g(document).find(g.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var o=this.options.trigger.split(" "),n=o.length;n--;){var s=o[n];if("click"==s)this.$element.on("click."+this.type,this.options.selector,g.proxy(this.toggle,this));else if("manual"!=s){var a="hover"==s?"mouseenter":"focusin",r="hover"==s?"mouseleave":"focusout";this.$element.on(a+"."+this.type,this.options.selector,g.proxy(this.enter,this)),this.$element.on(r+"."+this.type,this.options.selector,g.proxy(this.leave,this))}}this.options.selector?this._options=g.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},m.prototype.getDefaults=function(){return m.DEFAULTS},m.prototype.getOptions=function(t){var e=this.$element.data();for(var i in e)e.hasOwnProperty(i)&&-1!==g.inArray(i,o)&&delete e[i];return(t=g.extend({},this.getDefaults(),e,t)).delay&&"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),t.sanitize&&(t.template=n(t.template,t.whiteList,t.sanitizeFn)),t},m.prototype.getDelegateOptions=function(){var i={},o=this.getDefaults();return this._options&&g.each(this._options,function(t,e){o[t]!=e&&(i[t]=e)}),i},m.prototype.enter=function(t){var e=t instanceof this.constructor?t:g(t.currentTarget).data("bs."+this.type);if(e||(e=new this.constructor(t.currentTarget,this.getDelegateOptions()),g(t.currentTarget).data("bs."+this.type,e)),t instanceof g.Event&&(e.inState["focusin"==t.type?"focus":"hover"]=!0),e.tip().hasClass("in")||"in"==e.hoverState)e.hoverState="in";else{if(clearTimeout(e.timeout),e.hoverState="in",!e.options.delay||!e.options.delay.show)return e.show();e.timeout=setTimeout(function(){"in"==e.hoverState&&e.show()},e.options.delay.show)}},m.prototype.isInStateTrue=function(){for(var t in this.inState)if(this.inState[t])return!0;return!1},m.prototype.leave=function(t){var e=t instanceof this.constructor?t:g(t.currentTarget).data("bs."+this.type);if(e||(e=new this.constructor(t.currentTarget,this.getDelegateOptions()),g(t.currentTarget).data("bs."+this.type,e)),t instanceof g.Event&&(e.inState["focusout"==t.type?"focus":"hover"]=!1),!e.isInStateTrue()){if(clearTimeout(e.timeout),e.hoverState="out",!e.options.delay||!e.options.delay.hide)return e.hide();e.timeout=setTimeout(function(){"out"==e.hoverState&&e.hide()},e.options.delay.hide)}},m.prototype.show=function(){var t=g.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(t);var e=g.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(t.isDefaultPrevented()||!e)return;var i=this,o=this.tip(),n=this.getUID(this.type);this.setContent(),o.attr("id",n),this.$element.attr("aria-describedby",n),this.options.animation&&o.addClass("fade");var s="function"==typeof this.options.placement?this.options.placement.call(this,o[0],this.$element[0]):this.options.placement,a=/\s?auto?\s?/i,r=a.test(s);r&&(s=s.replace(a,"")||"top"),o.detach().css({top:0,left:0,display:"block"}).addClass(s).data("bs."+this.type,this),this.options.container?o.appendTo(g(document).find(this.options.container)):o.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var l=this.getPosition(),h=o[0].offsetWidth,d=o[0].offsetHeight;if(r){var p=s,c=this.getPosition(this.$viewport);s="bottom"==s&&l.bottom+d>c.bottom?"top":"top"==s&&l.top-dc.width?"left":"left"==s&&l.left-ha.top+a.height&&(n.top=a.top+a.height-l)}else{var h=e.left-s,d=e.left+s+i;ha.right&&(n.left=a.left+a.width-d)}return n},m.prototype.getTitle=function(){var t=this.$element,e=this.options;return t.attr("data-original-title")||("function"==typeof e.title?e.title.call(t[0]):e.title)},m.prototype.getUID=function(t){for(;t+=~~(1e6*Math.random()),document.getElementById(t););return t},m.prototype.tip=function(){if(!this.$tip&&(this.$tip=g(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},m.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},m.prototype.enable=function(){this.enabled=!0},m.prototype.disable=function(){this.enabled=!1},m.prototype.toggleEnabled=function(){this.enabled=!this.enabled},m.prototype.toggle=function(t){var e=this;t&&((e=g(t.currentTarget).data("bs."+this.type))||(e=new this.constructor(t.currentTarget,this.getDelegateOptions()),g(t.currentTarget).data("bs."+this.type,e))),t?(e.inState.click=!e.inState.click,e.isInStateTrue()?e.enter(e):e.leave(e)):e.tip().hasClass("in")?e.leave(e):e.enter(e)},m.prototype.destroy=function(){var t=this;clearTimeout(this.timeout),this.hide(function(){t.$element.off("."+t.type).removeData("bs."+t.type),t.$tip&&t.$tip.detach(),t.$tip=null,t.$arrow=null,t.$viewport=null,t.$element=null})},m.prototype.sanitizeHtml=function(t){return n(t,this.options.whiteList,this.options.sanitizeFn)};var e=g.fn.tooltip;g.fn.tooltip=function i(o){return this.each(function(){var t=g(this),e=t.data("bs.tooltip"),i="object"==typeof o&&o;!e&&/destroy|hide/.test(o)||(e||t.data("bs.tooltip",e=new m(this,i)),"string"==typeof o&&e[o]())})},g.fn.tooltip.Constructor=m,g.fn.tooltip.noConflict=function(){return g.fn.tooltip=e,this}}(jQuery),function(n){"use strict";var s=function(t,e){this.init("popover",t,e)};if(!n.fn.tooltip)throw new Error("Popover requires tooltip.js");s.VERSION="3.4.1",s.DEFAULTS=n.extend({},n.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),((s.prototype=n.extend({},n.fn.tooltip.Constructor.prototype)).constructor=s).prototype.getDefaults=function(){return s.DEFAULTS},s.prototype.setContent=function(){var t=this.tip(),e=this.getTitle(),i=this.getContent();if(this.options.html){var o=typeof i;this.options.sanitize&&(e=this.sanitizeHtml(e),"string"===o&&(i=this.sanitizeHtml(i))),t.find(".popover-title").html(e),t.find(".popover-content").children().detach().end()["string"===o?"html":"append"](i)}else t.find(".popover-title").text(e),t.find(".popover-content").children().detach().end().text(i);t.removeClass("fade top bottom left right in"),t.find(".popover-title").html()||t.find(".popover-title").hide()},s.prototype.hasContent=function(){return this.getTitle()||this.getContent()},s.prototype.getContent=function(){var t=this.$element,e=this.options;return t.attr("data-content")||("function"==typeof e.content?e.content.call(t[0]):e.content)},s.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var t=n.fn.popover;n.fn.popover=function e(o){return this.each(function(){var t=n(this),e=t.data("bs.popover"),i="object"==typeof o&&o;!e&&/destroy|hide/.test(o)||(e||t.data("bs.popover",e=new s(this,i)),"string"==typeof o&&e[o]())})},n.fn.popover.Constructor=s,n.fn.popover.noConflict=function(){return n.fn.popover=t,this}}(jQuery),function(s){"use strict";function n(t,e){this.$body=s(document.body),this.$scrollElement=s(t).is(document.body)?s(window):s(t),this.options=s.extend({},n.DEFAULTS,e),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",s.proxy(this.process,this)),this.refresh(),this.process()}function e(o){return this.each(function(){var t=s(this),e=t.data("bs.scrollspy"),i="object"==typeof o&&o;e||t.data("bs.scrollspy",e=new n(this,i)),"string"==typeof o&&e[o]()})}n.VERSION="3.4.1",n.DEFAULTS={offset:10},n.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},n.prototype.refresh=function(){var t=this,o="offset",n=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),s.isWindow(this.$scrollElement[0])||(o="position",n=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var t=s(this),e=t.data("target")||t.attr("href"),i=/^#./.test(e)&&s(e);return i&&i.length&&i.is(":visible")&&[[i[o]().top+n,e]]||null}).sort(function(t,e){return t[0]-e[0]}).each(function(){t.offsets.push(this[0]),t.targets.push(this[1])})},n.prototype.process=function(){var t,e=this.$scrollElement.scrollTop()+this.options.offset,i=this.getScrollHeight(),o=this.options.offset+i-this.$scrollElement.height(),n=this.offsets,s=this.targets,a=this.activeTarget;if(this.scrollHeight!=i&&this.refresh(),o<=e)return a!=(t=s[s.length-1])&&this.activate(t);if(a&&e=n[t]&&(n[t+1]===undefined||e .active"),n=i&&r.support.transition&&(o.length&&o.hasClass("fade")||!!e.find("> .fade").length);function s(){o.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),t.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),n?(t[0].offsetWidth,t.addClass("in")):t.removeClass("fade"),t.parent(".dropdown-menu").length&&t.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),i&&i()}o.length&&n?o.one("bsTransitionEnd",s).emulateTransitionEnd(a.TRANSITION_DURATION):s(),o.removeClass("in")};var t=r.fn.tab;r.fn.tab=e,r.fn.tab.Constructor=a,r.fn.tab.noConflict=function(){return r.fn.tab=t,this};var i=function(t){t.preventDefault(),e.call(r(this),"show")};r(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',i).on("click.bs.tab.data-api",'[data-toggle="pill"]',i)}(jQuery),function(l){"use strict";var h=function(t,e){this.options=l.extend({},h.DEFAULTS,e);var i=this.options.target===h.DEFAULTS.target?l(this.options.target):l(document).find(this.options.target);this.$target=i.on("scroll.bs.affix.data-api",l.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",l.proxy(this.checkPositionWithEventLoop,this)),this.$element=l(t),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};function i(o){return this.each(function(){var t=l(this),e=t.data("bs.affix"),i="object"==typeof o&&o;e||t.data("bs.affix",e=new h(this,i)),"string"==typeof o&&e[o]()})}h.VERSION="3.4.1",h.RESET="affix affix-top affix-bottom",h.DEFAULTS={offset:0,target:window},h.prototype.getState=function(t,e,i,o){var n=this.$target.scrollTop(),s=this.$element.offset(),a=this.$target.height();if(null!=i&&"top"==this.affixed)return n=this.Diff_Timeout?Number.MAX_VALUE:(new Date).getTime()+1E3*this.Diff_Timeout);if(null==a||null==b)throw Error("Null input. (diff_main)");if(a==b)return a?[[0,a]]:[];"undefined"==typeof c&&(c=!0);var e=c,f=this.diff_commonPrefix(a,b);c=a.substring(0,f);a=a.substring(f);b=b.substring(f);var f=this.diff_commonSuffix(a,b),g=a.substring(a.length-f);a=a.substring(0,a.length-f);b=b.substring(0,b.length-f);a=this.diff_compute_(a, +b,e,d);c&&a.unshift([0,c]);g&&a.push([0,g]);this.diff_cleanupMerge(a);return a}; +diff_match_patch.prototype.diff_compute_=function(a,b,c,d){if(!a)return[[1,b]];if(!b)return[[-1,a]];var e=a.length>b.length?a:b,f=a.length>b.length?b:a,g=e.indexOf(f);return-1!=g?(c=[[1,e.substring(0,g)],[0,f],[1,e.substring(g+f.length)]],a.length>b.length&&(c[0][0]=c[2][0]=-1),c):1==f.length?[[-1,a],[1,b]]:(e=this.diff_halfMatch_(a,b))?(f=e[0],a=e[1],g=e[2],b=e[3],e=e[4],f=this.diff_main(f,g,c,d),c=this.diff_main(a,b,c,d),f.concat([[0,e]],c)):c&&100c);v++){for(var n=-v+r;n<=v-t;n+=2){var l=g+n,m;m=n==-v||n!=v&&j[l-1]d)t+=2;else if(s>e)r+=2;else if(q&&(l=g+k-n,0<=l&&l= +u)return this.diff_bisectSplit_(a,b,m,s,c)}}for(n=-v+p;n<=v-w;n+=2){l=g+n;u=n==-v||n!=v&&i[l-1]d)w+=2;else if(m>e)p+=2;else if(!q&&(l=g+k-n,0<=l&&(l=u)))return this.diff_bisectSplit_(a,b,m,s,c)}}return[[-1,a],[1,b]]}; +diff_match_patch.prototype.diff_bisectSplit_=function(a,b,c,d,e){var f=a.substring(0,c),g=b.substring(0,d);a=a.substring(c);b=b.substring(d);f=this.diff_main(f,g,!1,e);e=this.diff_main(a,b,!1,e);return f.concat(e)}; +diff_match_patch.prototype.diff_linesToChars_=function(a,b){function c(a){for(var b="",c=0,f=-1,g=d.length;fd?a=a.substring(c-d):c=a.length?[h,j,n,l,g]:null}if(0>=this.Diff_Timeout)return null; +var d=a.length>b.length?a:b,e=a.length>b.length?b:a;if(4>d.length||2*e.lengthd[4].length?g:d:d:g;var j;a.length>b.length?(g=h[0],d=h[1],e=h[2],j=h[3]):(e=h[0],j=h[1],g=h[2],d=h[3]);h=h[4];return[g,d,e,j,h]}; +diff_match_patch.prototype.diff_cleanupSemantic=function(a){for(var b=!1,c=[],d=0,e=null,f=0,g=0,h=0,j=0,i=0;f=e){if(d>=b.length/2||d>=c.length/2)a.splice(f,0,[0,c.substring(0,d)]),a[f-1][1]=b.substring(0,b.length-d),a[f+1][1]=c.substring(d),f++}else if(e>=b.length/2||e>=c.length/2)a.splice(f,0,[0,b.substring(0,e)]),a[f-1][0]=1,a[f-1][1]=c.substring(0,c.length-e),a[f+1][0]=-1,a[f+1][1]=b.substring(e),f++;f++}f++}}; +diff_match_patch.prototype.diff_cleanupSemanticLossless=function(a){function b(a,b){if(!a||!b)return 6;var c=a.charAt(a.length-1),d=b.charAt(0),e=c.match(diff_match_patch.nonAlphaNumericRegex_),f=d.match(diff_match_patch.nonAlphaNumericRegex_),g=e&&c.match(diff_match_patch.whitespaceRegex_),h=f&&d.match(diff_match_patch.whitespaceRegex_),c=g&&c.match(diff_match_patch.linebreakRegex_),d=h&&d.match(diff_match_patch.linebreakRegex_),i=c&&a.match(diff_match_patch.blanklineEndRegex_),j=d&&b.match(diff_match_patch.blanklineStartRegex_); +return i||j?5:c||d?4:e&&!g&&h?3:g||h?2:e||f?1:0}for(var c=1;c=i&&(i=k,g=d,h=e,j=f)}a[c-1][1]!=g&&(g?a[c-1][1]=g:(a.splice(c-1,1),c--),a[c][1]= +h,j?a[c+1][1]=j:(a.splice(c+1,1),c--))}c++}};diff_match_patch.nonAlphaNumericRegex_=/[^a-zA-Z0-9]/;diff_match_patch.whitespaceRegex_=/\s/;diff_match_patch.linebreakRegex_=/[\r\n]/;diff_match_patch.blanklineEndRegex_=/\n\r?\n$/;diff_match_patch.blanklineStartRegex_=/^\r?\n\r?\n/; +diff_match_patch.prototype.diff_cleanupEfficiency=function(a){for(var b=!1,c=[],d=0,e=null,f=0,g=!1,h=!1,j=!1,i=!1;fb)break;e=c;f=d}return a.length!=g&&-1===a[g][0]?f:f+(b-e)}; +diff_match_patch.prototype.diff_prettyHtml=function(a){for(var b=[],c=/&/g,d=//g,f=/\n/g,g=0;g");switch(h){case 1:b[g]=''+j+"";break;case -1:b[g]=''+j+"";break;case 0:b[g]=""+j+""}}return b.join("")}; +diff_match_patch.prototype.diff_text1=function(a){for(var b=[],c=0;cthis.Match_MaxBits)throw Error("Pattern too long for this browser.");var e=this.match_alphabet_(b),f=this,g=this.Match_Threshold,h=a.indexOf(b,c);-1!=h&&(g=Math.min(d(0,h),g),h=a.lastIndexOf(b,c+b.length),-1!=h&&(g=Math.min(d(0,h),g)));for(var j=1<=i;p--){var w=e[a.charAt(p-1)];k[p]=0===t?(k[p+1]<<1|1)&w:(k[p+1]<<1|1)&w|((r[p+1]|r[p])<<1|1)|r[p+1];if(k[p]&j&&(w=d(t,p-1),w<=g))if(g=w,h=p-1,h>c)i=Math.max(1,2*c-h);else break}if(d(t+1,c)>g)break;r=k}return h}; +diff_match_patch.prototype.match_alphabet_=function(a){for(var b={},c=0;c=2*this.Patch_Margin&& +e&&(this.patch_addContext_(a,h),c.push(a),a=new diff_match_patch.patch_obj,e=0,h=d,f=g)}1!==i&&(f+=k.length);-1!==i&&(g+=k.length)}e&&(this.patch_addContext_(a,h),c.push(a));return c};diff_match_patch.prototype.patch_deepCopy=function(a){for(var b=[],c=0;cthis.Match_MaxBits){if(j=this.match_main(b,h.substring(0,this.Match_MaxBits),g),-1!=j&&(i=this.match_main(b,h.substring(h.length-this.Match_MaxBits),g+h.length-this.Match_MaxBits),-1==i||j>=i))j=-1}else j=this.match_main(b,h,g); +if(-1==j)e[f]=!1,d-=a[f].length2-a[f].length1;else if(e[f]=!0,d=j-g,g=-1==i?b.substring(j,j+h.length):b.substring(j,i+this.Match_MaxBits),h==g)b=b.substring(0,j)+this.diff_text2(a[f].diffs)+b.substring(j+h.length);else if(g=this.diff_main(h,g,!1),h.length>this.Match_MaxBits&&this.diff_levenshtein(g)/h.length>this.Patch_DeleteThreshold)e[f]=!1;else{this.diff_cleanupSemanticLossless(g);for(var h=0,k,i=0;ie[0][1].length){var f=b-e[0][1].length;e[0][1]=c.substring(e[0][1].length)+e[0][1];d.start1-=f;d.start2-=f;d.length1+=f;d.length2+=f}d=a[a.length-1];e=d.diffs;0==e.length||0!=e[e.length-1][0]?(e.push([0, +c]),d.length1+=b,d.length2+=b):b>e[e.length-1][1].length&&(f=b-e[e.length-1][1].length,e[e.length-1][1]+=c.substring(0,f),d.length1+=f,d.length2+=f);return c}; +diff_match_patch.prototype.patch_splitMax=function(a){for(var b=this.Match_MaxBits,c=0;c2*b?(h.length1+=i.length,e+=i.length,j=!1,h.diffs.push([g,i]),d.diffs.shift()):(i=i.substring(0,b-h.length1-this.Patch_Margin),h.length1+=i.length,e+=i.length,0===g?(h.length2+=i.length,f+=i.length):j=!1,h.diffs.push([g,i]),i==d.diffs[0][1]?d.diffs.shift():d.diffs[0][1]=d.diffs[0][1].substring(i.length))}g=this.diff_text2(h.diffs);g=g.substring(g.length-this.Patch_Margin);i=this.diff_text1(d.diffs).substring(0,this.Patch_Margin);""!==i&& +(h.length1+=i.length,h.length2+=i.length,0!==h.diffs.length&&0===h.diffs[h.diffs.length-1][0]?h.diffs[h.diffs.length-1][1]+=i:h.diffs.push([0,i]));j||a.splice(++c,0,h)}}};diff_match_patch.prototype.patch_toText=function(a){for(var b=[],c=0;c= 2.0.0-beta.1",7:">= 4.0.0 <4.3.0",8:">= 4.3.0"};b.REVISION_CHANGES=q;var r="[object Object]";d.prototype={constructor:d,logger:l["default"],log:l["default"].log,registerHelper:function(a,b){if(f.toString.call(a)===r){if(b)throw new h["default"]("Arg not supported with multiple helpers");f.extend(this.helpers,a)}else this.helpers[a]=b},unregisterHelper:function(a){delete this.helpers[a]},registerPartial:function(a,b){if(f.toString.call(a)===r)f.extend(this.partials,a);else{if("undefined"==typeof b)throw new h["default"]('Attempting to register a partial called "'+a+'" as undefined');this.partials[a]=b}},unregisterPartial:function(a){delete this.partials[a]},registerDecorator:function(a,b){if(f.toString.call(a)===r){if(b)throw new h["default"]("Arg not supported with multiple decorators");f.extend(this.decorators,a)}else this.decorators[a]=b},unregisterDecorator:function(a){delete this.decorators[a]},resetLoggedPropertyAccesses:function(){m.resetLoggedProperties()}};var s=l["default"].log;b.log=s,b.createFrame=f.createFrame,b.logger=l["default"]},function(a,b){"use strict";function c(a){return k[a]}function d(a){for(var b=1;b":">",'"':""","'":"'","`":"`","=":"="},l=/[&<>"'`=]/g,m=/[&<>"'`=]/,n=Object.prototype.toString;b.toString=n;var o=function(a){return"function"==typeof a};o(/x/)&&(b.isFunction=o=function(a){return"function"==typeof a&&"[object Function]"===n.call(a)}),b.isFunction=o;var p=Array.isArray||function(a){return!(!a||"object"!=typeof a)&&"[object Array]"===n.call(a)};b.isArray=p},function(a,b,c){"use strict";function d(a,b){var c=b&&b.loc,g=void 0,h=void 0,i=void 0,j=void 0;c&&(g=c.start.line,h=c.end.line,i=c.start.column,j=c.end.column,a+=" - "+g+":"+i);for(var k=Error.prototype.constructor.call(this,a),l=0;l0?(c.ids&&(c.ids=[c.name]),a.helpers.each(b,c)):e(this);if(c.data&&c.ids){var g=d.createFrame(c.data);g.contextPath=d.appendContextPath(c.data.contextPath,c.name),c={data:g}}return f(b,c)})},a.exports=b["default"]},function(a,b,c){(function(d){"use strict";var e=c(13)["default"],f=c(1)["default"];b.__esModule=!0;var g=c(5),h=c(6),i=f(h);b["default"]=function(a){a.registerHelper("each",function(a,b){function c(b,c,d){l&&(l.key=b,l.index=c,l.first=0===c,l.last=!!d,m&&(l.contextPath=m+b)),k+=f(a[b],{data:l,blockParams:g.blockParams([a[b],b],[m+b,null])})}if(!b)throw new i["default"]("Must pass iterator to #each");var f=b.fn,h=b.inverse,j=0,k="",l=void 0,m=void 0;if(b.data&&b.ids&&(m=g.appendContextPath(b.data.contextPath,b.ids[0])+"."),g.isFunction(a)&&(a=a.call(this)),b.data&&(l=g.createFrame(b.data)),a&&"object"==typeof a)if(g.isArray(a))for(var n=a.length;j=0?b:parseInt(a,10)}return a},log:function(a){if(a=e.lookupLevel(a),"undefined"!=typeof console&&e.lookupLevel(e.level)<=a){var b=e.methodMap[a];console[b]||(b="log");for(var c=arguments.length,d=Array(c>1?c-1:0),f=1;f=v.LAST_COMPATIBLE_COMPILER_REVISION&&b<=v.COMPILER_REVISION)){if(b2&&v.push("'"+this.terminals_[s]+"'");x=this.lexer.showPosition?"Parse error on line "+(i+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+v.join(", ")+", got '"+(this.terminals_[n]||n)+"'":"Parse error on line "+(i+1)+": Unexpected "+(1==n?"end of input":"'"+(this.terminals_[n]||n)+"'"),this.parseError(x,{text:this.lexer.match,token:this.terminals_[n]||n,line:this.lexer.yylineno,loc:l,expected:v})}}if(q[0]instanceof Array&&q.length>1)throw new Error("Parse Error: multiple actions possible at state: "+p+", token: "+n);switch(q[0]){case 1:d.push(n),e.push(this.lexer.yytext),f.push(this.lexer.yylloc),d.push(q[1]),n=null,o?(n=o,o=null):(j=this.lexer.yyleng,h=this.lexer.yytext,i=this.lexer.yylineno,l=this.lexer.yylloc,k>0&&k--);break;case 2:if(t=this.productions_[q[1]][1],w.$=e[e.length-t],w._$={first_line:f[f.length-(t||1)].first_line,last_line:f[f.length-1].last_line,first_column:f[f.length-(t||1)].first_column,last_column:f[f.length-1].last_column},m&&(w._$.range=[f[f.length-(t||1)].range[0],f[f.length-1].range[1]]),r=this.performAction.call(w,h,j,i,this.yy,q[1],e,f),"undefined"!=typeof r)return r;t&&(d=d.slice(0,-1*t*2),e=e.slice(0,-1*t),f=f.slice(0,-1*t)),d.push(this.productions_[q[1]][0]),e.push(w.$),f.push(w._$),u=g[d[d.length-2]][d[d.length-1]],d.push(u);break;case 3:return!0}}return!0}},c=function(){var a={EOF:1,parseError:function(a,b){if(!this.yy.parser)throw new Error(a);this.yy.parser.parseError(a,b)},setInput:function(a){return this._input=a,this._more=this._less=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var a=this._input[0];this.yytext+=a,this.yyleng++,this.offset++,this.match+=a,this.matched+=a;var b=a.match(/(?:\r\n?|\n).*/g);return b?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),a},unput:function(a){var b=a.length,c=a.split(/(?:\r\n?|\n)/g);this._input=a+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-b-1),this.offset-=b;var d=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),c.length-1&&(this.yylineno-=c.length-1);var e=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:c?(c.length===d.length?this.yylloc.first_column:0)+d[d.length-c.length].length-c[0].length:this.yylloc.first_column-b},this.options.ranges&&(this.yylloc.range=[e[0],e[0]+this.yyleng-b]),this},more:function(){return this._more=!0,this},less:function(a){this.unput(this.match.slice(a))},pastInput:function(){var a=this.matched.substr(0,this.matched.length-this.match.length);return(a.length>20?"...":"")+a.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var a=this.match;return a.length<20&&(a+=this._input.substr(0,20-a.length)),(a.substr(0,20)+(a.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var a=this.pastInput(),b=new Array(a.length+1).join("-");return a+this.upcomingInput()+"\n"+b+"^"},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var a,b,c,d,e;this._more||(this.yytext="",this.match="");for(var f=this._currentRules(),g=0;gb[0].length)||(b=c,d=g,this.options.flex));g++);return b?(e=b[0].match(/(?:\r\n?|\n).*/g),e&&(this.yylineno+=e.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:e?e[e.length-1].length-e[e.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+b[0].length},this.yytext+=b[0],this.match+=b[0],this.matches=b,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._input=this._input.slice(b[0].length),this.matched+=b[0],a=this.performAction.call(this,this.yy,this,f[d],this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),a?a:void 0):""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var a=this.next();return"undefined"!=typeof a?a:this.lex()},begin:function(a){this.conditionStack.push(a)},popState:function(){return this.conditionStack.pop()},_currentRules:function(){return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules},topState:function(){return this.conditionStack[this.conditionStack.length-2]},pushState:function(a){this.begin(a)}};return a.options={},a.performAction=function(a,b,c,d){function e(a,c){return b.yytext=b.yytext.substring(a,b.yyleng-c+a)}switch(c){case 0:if("\\\\"===b.yytext.slice(-2)?(e(0,1),this.begin("mu")):"\\"===b.yytext.slice(-1)?(e(0,1),this.begin("emu")):this.begin("mu"),b.yytext)return 15;break;case 1:return 15;case 2:return this.popState(),15;case 3:return this.begin("raw"),15;case 4:return this.popState(),"raw"===this.conditionStack[this.conditionStack.length-1]?15:(e(5,9),"END_RAW_BLOCK");case 5:return 15;case 6:return this.popState(),14;case 7:return 65;case 8:return 68;case 9:return 19;case 10:return this.popState(),this.begin("raw"),23;case 11:return 55;case 12:return 60;case 13:return 29;case 14:return 47;case 15:return this.popState(),44;case 16:return this.popState(),44;case 17:return 34;case 18:return 39;case 19:return 51;case 20:return 48;case 21:this.unput(b.yytext),this.popState(),this.begin("com");break;case 22:return this.popState(),14;case 23:return 48;case 24:return 73;case 25:return 72;case 26:return 72;case 27:return 87;case 28:break;case 29:return this.popState(),54;case 30:return this.popState(),33;case 31:return b.yytext=e(1,2).replace(/\\"/g,'"'),80;case 32:return b.yytext=e(1,2).replace(/\\'/g,"'"),80;case 33:return 85;case 34:return 82;case 35:return 82;case 36:return 83;case 37:return 84;case 38:return 81;case 39:return 75;case 40:return 77;case 41:return 72;case 42:return b.yytext=b.yytext.replace(/\\([\\\]])/g,"$1"),72;case 43:return"INVALID";case 44:return 5}},a.rules=[/^(?:[^\x00]*?(?=(\{\{)))/,/^(?:[^\x00]+)/,/^(?:[^\x00]{2,}?(?=(\{\{|\\\{\{|\\\\\{\{|$)))/,/^(?:\{\{\{\{(?=[^\/]))/,/^(?:\{\{\{\{\/[^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=[=}\s\/.])\}\}\}\})/,/^(?:[^\x00]+?(?=(\{\{\{\{)))/,/^(?:[\s\S]*?--(~)?\}\})/,/^(?:\()/,/^(?:\))/,/^(?:\{\{\{\{)/,/^(?:\}\}\}\})/,/^(?:\{\{(~)?>)/,/^(?:\{\{(~)?#>)/,/^(?:\{\{(~)?#\*?)/,/^(?:\{\{(~)?\/)/,/^(?:\{\{(~)?\^\s*(~)?\}\})/,/^(?:\{\{(~)?\s*else\s*(~)?\}\})/,/^(?:\{\{(~)?\^)/,/^(?:\{\{(~)?\s*else\b)/,/^(?:\{\{(~)?\{)/,/^(?:\{\{(~)?&)/,/^(?:\{\{(~)?!--)/,/^(?:\{\{(~)?![\s\S]*?\}\})/,/^(?:\{\{(~)?\*?)/,/^(?:=)/,/^(?:\.\.)/,/^(?:\.(?=([=~}\s\/.)|])))/,/^(?:[\/.])/,/^(?:\s+)/,/^(?:\}(~)?\}\})/,/^(?:(~)?\}\})/,/^(?:"(\\["]|[^"])*")/,/^(?:'(\\[']|[^'])*')/,/^(?:@)/,/^(?:true(?=([~}\s)])))/,/^(?:false(?=([~}\s)])))/,/^(?:undefined(?=([~}\s)])))/,/^(?:null(?=([~}\s)])))/,/^(?:-?[0-9]+(?:\.[0-9]+)?(?=([~}\s)])))/,/^(?:as\s+\|)/,/^(?:\|)/,/^(?:([^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=([=~}\s\/.)|]))))/,/^(?:\[(\\\]|[^\]])*\])/,/^(?:.)/,/^(?:$)/],a.conditions={mu:{rules:[7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44],inclusive:!1},emu:{rules:[2],inclusive:!1},com:{rules:[6],inclusive:!1},raw:{rules:[3,4,5],inclusive:!1},INITIAL:{rules:[0,1,44],inclusive:!0}},a}();return b.lexer=c,a.prototype=b,b.Parser=a,new a}();b["default"]=c,a.exports=b["default"]},function(a,b,c){"use strict";function d(){var a=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];this.options=a}function e(a,b,c){void 0===b&&(b=a.length);var d=a[b-1],e=a[b-2];return d?"ContentStatement"===d.type?(e||!c?/\r?\n\s*?$/:/(^|\r?\n)\s*?$/).test(d.original):void 0:c}function f(a,b,c){void 0===b&&(b=-1);var d=a[b+1],e=a[b+2];return d?"ContentStatement"===d.type?(e||!c?/^\s*?\r?\n/:/^\s*?(\r?\n|$)/).test(d.original):void 0:c}function g(a,b,c){var d=a[null==b?0:b+1];if(d&&"ContentStatement"===d.type&&(c||!d.rightStripped)){var e=d.value;d.value=d.value.replace(c?/^\s+/:/^[ \t]*\r?\n?/,""),d.rightStripped=d.value!==e}}function h(a,b,c){var d=a[null==b?a.length-1:b-1];if(d&&"ContentStatement"===d.type&&(c||!d.leftStripped)){var e=d.value;return d.value=d.value.replace(c?/\s+$/:/[ \t]+$/,""),d.leftStripped=d.value!==e,d.leftStripped}}var i=c(1)["default"];b.__esModule=!0;var j=c(49),k=i(j);d.prototype=new k["default"],d.prototype.Program=function(a){var b=!this.options.ignoreStandalone,c=!this.isRootSeen;this.isRootSeen=!0;for(var d=a.body,i=0,j=d.length;i0)throw new q["default"]("Invalid path: "+d,{loc:c});".."===i&&f++}}return{type:"PathExpression",data:a,depth:f,parts:e,original:d,loc:c}}function j(a,b,c,d,e,f){var g=d.charAt(3)||d.charAt(2),h="{"!==g&&"&"!==g,i=/\*/.test(d);return{type:i?"Decorator":"MustacheStatement",path:a,params:b,hash:c,escaped:h,strip:e,loc:this.locInfo(f)}}function k(a,b,c,e){d(a,c),e=this.locInfo(e);var f={type:"Program",body:b,strip:{},loc:e};return{type:"BlockStatement",path:a.path,params:a.params,hash:a.hash,program:f,openStrip:{},inverseStrip:{},closeStrip:{},loc:e}}function l(a,b,c,e,f,g){e&&e.path&&d(a,e);var h=/\*/.test(a.open);b.blockParams=a.blockParams;var i=void 0,j=void 0;if(c){if(h)throw new q["default"]("Unexpected inverse block on decorator",c);c.chain&&(c.program.body[0].closeStrip=e.strip),j=c.strip,i=c.program}return f&&(f=i,i=b,b=f),{type:h?"DecoratorBlock":"BlockStatement",path:a.path,params:a.params,hash:a.hash,program:b,inverse:i,openStrip:a.strip,inverseStrip:j,closeStrip:e&&e.strip,loc:this.locInfo(g)}}function m(a,b){if(!b&&a.length){var c=a[0].loc,d=a[a.length-1].loc;c&&d&&(b={source:c.source,start:{line:c.start.line,column:c.start.column},end:{line:d.end.line,column:d.end.column}})}return{type:"Program",body:a,strip:{},loc:b}}function n(a,b,c,e){return d(a,c),{type:"PartialBlockStatement",name:a.path,params:a.params,hash:a.hash,program:b,openStrip:a.strip,closeStrip:c&&c.strip,loc:this.locInfo(e)}}var o=c(1)["default"];b.__esModule=!0,b.SourceLocation=e,b.id=f,b.stripFlags=g,b.stripComment=h,b.preparePath=i,b.prepareMustache=j,b.prepareRawBlock=k,b.prepareBlock=l,b.prepareProgram=m,b.preparePartialBlock=n;var p=c(6),q=o(p)},function(a,b,c){"use strict";function d(){}function e(a,b,c){if(null==a||"string"!=typeof a&&"Program"!==a.type)throw new l["default"]("You must pass a string or Handlebars AST to Handlebars.precompile. You passed "+a);b=b||{},"data"in b||(b.data=!0),b.compat&&(b.useDepths=!0);var d=c.parse(a,b),e=(new c.Compiler).compile(d,b);return(new c.JavaScriptCompiler).compile(e,b)}function f(a,b,c){function d(){var d=c.parse(a,b),e=(new c.Compiler).compile(d,b),f=(new c.JavaScriptCompiler).compile(e,b,void 0,!0);return c.template(f)}function e(a,b){return f||(f=d()),f.call(this,a,b)}if(void 0===b&&(b={}),null==a||"string"!=typeof a&&"Program"!==a.type)throw new l["default"]("You must pass a string or Handlebars AST to Handlebars.compile. You passed "+a);b=m.extend({},b),"data"in b||(b.data=!0),b.compat&&(b.useDepths=!0);var f=void 0;return e._setup=function(a){return f||(f=d()),f._setup(a)},e._child=function(a,b,c,e){return f||(f=d()),f._child(a,b,c,e)},e}function g(a,b){if(a===b)return!0;if(m.isArray(a)&&m.isArray(b)&&a.length===b.length){for(var c=0;c1)throw new l["default"]("Unsupported number of partial arguments: "+c.length,a);c.length||(this.options.explicitPartialContext?this.opcode("pushLiteral","undefined"):c.push({type:"PathExpression",parts:[],depth:0}));var d=a.name.original,e="SubExpression"===a.name.type;e&&this.accept(a.name),this.setupFullMustacheParams(a,b,void 0,!0);var f=a.indent||"";this.options.preventIndent&&f&&(this.opcode("appendContent",f),f=""),this.opcode("invokePartial",e,d,f),this.opcode("append")},PartialBlockStatement:function(a){this.PartialStatement(a)},MustacheStatement:function(a){this.SubExpression(a),a.escaped&&!this.options.noEscape?this.opcode("appendEscaped"):this.opcode("append")},Decorator:function(a){this.DecoratorBlock(a)},ContentStatement:function(a){a.value&&this.opcode("appendContent",a.value)},CommentStatement:function(){},SubExpression:function(a){h(a);var b=this.classifySexpr(a);"simple"===b?this.simpleSexpr(a):"helper"===b?this.helperSexpr(a):this.ambiguousSexpr(a)},ambiguousSexpr:function(a,b,c){var d=a.path,e=d.parts[0],f=null!=b||null!=c;this.opcode("getContext",d.depth),this.opcode("pushProgram",b),this.opcode("pushProgram",c),d.strict=!0,this.accept(d),this.opcode("invokeAmbiguous",e,f)},simpleSexpr:function(a){var b=a.path;b.strict=!0,this.accept(b),this.opcode("resolvePossibleLambda")},helperSexpr:function(a,b,c){var d=this.setupFullMustacheParams(a,b,c),e=a.path,f=e.parts[0];if(this.options.knownHelpers[f])this.opcode("invokeKnownHelper",d.length,f);else{if(this.options.knownHelpersOnly)throw new l["default"]("You specified knownHelpersOnly, but used the unknown helper "+f,a);e.strict=!0,e.falsy=!0,this.accept(e),this.opcode("invokeHelper",d.length,e.original,o["default"].helpers.simpleId(e))}},PathExpression:function(a){this.addDepth(a.depth),this.opcode("getContext",a.depth);var b=a.parts[0],c=o["default"].helpers.scopedId(a),d=!a.depth&&!c&&this.blockParamIndex(b);d?this.opcode("lookupBlockParam",d,a.parts):b?a.data?(this.options.data=!0,this.opcode("lookupData",a.depth,a.parts,a.strict)):this.opcode("lookupOnContext",a.parts,a.falsy,a.strict,c):this.opcode("pushContext")},StringLiteral:function(a){this.opcode("pushString",a.value)},NumberLiteral:function(a){this.opcode("pushLiteral",a.value)},BooleanLiteral:function(a){this.opcode("pushLiteral",a.value)},UndefinedLiteral:function(){this.opcode("pushLiteral","undefined")},NullLiteral:function(){this.opcode("pushLiteral","null")},Hash:function(a){var b=a.pairs,c=0,d=b.length;for(this.opcode("pushHash");c=0)return[b,e]}}}},function(a,b,c){"use strict";function d(a){this.value=a}function e(){}function f(a,b,c,d){var e=b.popStack(),f=0,g=c.length;for(a&&g--;f0&&(c+=", "+d.join(", "));var e=0;g(this.aliases).forEach(function(a){var d=b.aliases[a];d.children&&d.referenceCount>1&&(c+=", alias"+ ++e+"="+a,d.children[0]="alias"+e)}),this.lookupPropertyFunctionIsUsed&&(c+=", "+this.lookupPropertyFunctionVarDeclaration());var f=["container","depth0","helpers","partials","data"];(this.useBlockParams||this.useDepths)&&f.push("blockParams"),this.useDepths&&f.push("depths");var h=this.mergeSource(c);return a?(f.push(h),Function.apply(this,f)):this.source.wrap(["function(",f.join(","),") {\n ",h,"}"])},mergeSource:function(a){var b=this.environment.isSimple,c=!this.forceBuffer,d=void 0,e=void 0,f=void 0,g=void 0;return this.source.each(function(a){a.appendToBuffer?(f?a.prepend(" + "):f=a,g=a):(f&&(e?f.prepend("buffer += "):d=!0,g.add(";"),f=g=void 0),e=!0,b||(c=!1))}),c?f?(f.prepend("return "),g.add(";")):e||this.source.push('return "";'):(a+=", buffer = "+(d?"":this.initializeBuffer()),f?(f.prepend("return buffer + "),g.add(";")):this.source.push("return buffer;")),a&&this.source.prepend("var "+a.substring(2)+(d?"":";\n")),this.source.merge()},lookupPropertyFunctionVarDeclaration:function(){return"\n lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n }\n ".trim()},blockValue:function(a){var b=this.aliasable("container.hooks.blockHelperMissing"),c=[this.contextName(0)];this.setupHelperArgs(a,0,c);var d=this.popStack();c.splice(1,0,d),this.push(this.source.functionCall(b,"call",c))},ambiguousBlockValue:function(){var a=this.aliasable("container.hooks.blockHelperMissing"),b=[this.contextName(0)];this.setupHelperArgs("",0,b,!0),this.flushInline();var c=this.topStack();b.splice(1,0,c),this.pushSource(["if (!",this.lastHelper,") { ",c," = ",this.source.functionCall(a,"call",b),"}"])},appendContent:function(a){this.pendingContent?a=this.pendingContent+a:this.pendingLocation=this.source.currentLocation,this.pendingContent=a},append:function(){if(this.isInline())this.replaceStack(function(a){return[" != null ? ",a,' : ""']}),this.pushSource(this.appendToBuffer(this.popStack()));else{var a=this.popStack();this.pushSource(["if (",a," != null) { ",this.appendToBuffer(a,void 0,!0)," }"]),this.environment.isSimple&&this.pushSource(["else { ",this.appendToBuffer("''",void 0,!0)," }"])}},appendEscaped:function(){this.pushSource(this.appendToBuffer([this.aliasable("container.escapeExpression"),"(",this.popStack(),")"]))},getContext:function(a){this.lastContext=a},pushContext:function(){this.pushStackLiteral(this.contextName(this.lastContext))},lookupOnContext:function(a,b,c,d){var e=0;d||!this.options.compat||this.lastContext?this.pushContext():this.push(this.depthedLookup(a[e++])),this.resolvePath("context",a,e,b,c)},lookupBlockParam:function(a,b){this.useBlockParams=!0,this.push(["blockParams[",a[0],"][",a[1],"]"]),this.resolvePath("context",b,1)},lookupData:function(a,b,c){a?this.pushStackLiteral("container.data(data, "+a+")"):this.pushStackLiteral("data"),this.resolvePath("data",b,0,!0,c)},resolvePath:function(a,b,c,d,e){var g=this;if(this.options.strict||this.options.assumeObjects)return void this.push(f(this.options.strict&&e,this,b,a));for(var h=b.length;cthis.stackVars.length&&this.stackVars.push("stack"+this.stackSlot),this.topStackName()},topStackName:function(){return"stack"+this.stackSlot},flushInline:function(){var a=this.inlineStack;this.inlineStack=[];for(var b=0,c=a.length;b+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,j=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function qe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function Le(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):("number"==typeof f.top&&(f.top+="px"),"number"==typeof f.left&&(f.left+="px"),c.css(f))}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=$e(y.pixelPosition,function(e,t){if(t)return t=Be(e,n),Me.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0r.page,h=new s(a[f],d,e),r.items.push(h),c.push(h)}return r.update(),c}},this.show=function(a,b){return this.i=a,this.page=b,r.update(),r},this.remove=function(a,b,c){for(var d=0,e=0,f=r.items.length;e-1&&c.splice(d,1),r},this.trigger=function(a){for(var b=r.handlers[a].length;b--;)r.handlers[a][b](r);return r},this.reset={filter:function(){for(var a=r.items,b=a.length;b--;)a[b].filtered=!1;return r},search:function(){for(var a=r.items,b=a.length;b--;)a[b].found=!1;return r}},this.update=function(){var a=r.items,b=a.length;r.visibleItems=[],r.matchingItems=[],r.templater.clear();for(var c=0;c=r.i&&r.visibleItems.length0?setTimeout(function(){b(c,d,e)},1):(a.update(),d(e))};return b}},{}],3:[function(a,b,c){b.exports=function(a){return a.handlers.filterStart=a.handlers.filterStart||[],a.handlers.filterComplete=a.handlers.filterComplete||[],function(b){if(a.trigger("filterStart"),a.i=1,a.reset.filter(),void 0===b)a.filtered=!1;else{a.filtered=!0;for(var c=a.items,d=0,e=c.length;d0?setTimeout(function(){f(a,c)},1):(b.update(),b.trigger("parseComplete"))};return b.handlers.parseComplete=b.handlers.parseComplete||[],function(){var a=d(b.list),c=b.valueNames;b.indexAsync?f(a,c):e(a,c)}}},{"./item":4}],6:[function(a,b,c){b.exports=function(a){var b,c,d,e,f={resetList:function(){a.i=1,a.templater.clear(),e=void 0},setOptions:function(a){2==a.length&&a[1]instanceof Array?c=a[1]:2==a.length&&"function"==typeof a[1]?(c=void 0,e=a[1]):3==a.length?(c=a[1],e=a[2]):c=void 0},setColumns:function(){0!==a.items.length&&void 0===c&&(c=void 0===a.searchColumns?f.toArray(a.items[0].values()):a.searchColumns)},setSearchString:function(b){b=a.utils.toString(b).toLowerCase(),b=b.replace(/[-[\]{}()*+?.,\\^$|#]/g,"\\$&"),d=b},toArray:function(a){var b=[];for(var c in a)b.push(c);return b}},g={list:function(){for(var b=0,c=a.items.length;b-1))},reset:function(){a.reset.search(),a.searched=!1}},h=function(b){return a.trigger("searchStart"),f.resetList(),f.setSearchString(b),f.setOptions(arguments),f.setColumns(),""===d?g.reset():(a.searched=!0,e?e(d,c):g.list()),a.update(),a.trigger("searchComplete"),a.visibleItems};return a.handlers.searchStart=a.handlers.searchStart||[],a.handlers.searchComplete=a.handlers.searchComplete||[],a.utils.events.bind(a.utils.getByClass(a.listContainer,a.searchClass),"keyup",function(b){var c=b.target||b.srcElement,d=""===c.value&&!a.searched;d||h(c.value)}),a.utils.events.bind(a.utils.getByClass(a.listContainer,a.searchClass),"input",function(a){var b=a.target||a.srcElement;""===b.value&&h("")}),h}},{}],7:[function(a,b,c){b.exports=function(a){a.sortFunction=a.sortFunction||function(b,c,d){return d.desc="desc"==d.order,a.utils.naturalSort(b.values()[d.valueName],c.values()[d.valueName],d)};var b={els:void 0,clear:function(){for(var c=0,d=b.els.length;c]/g.exec(b)){var f=document.createElement("tbody");return f.innerHTML=b,f.firstChild}if(b.indexOf("<")!==-1){var g=document.createElement("div");return g.innerHTML=b,g.firstChild}var h=document.getElementById(a.item);if(h)return h}},this.get=function(b,d){c.create(b);for(var e={},f=0,g=d.length;f=1;)a.list.removeChild(a.list.firstChild)},d()};b.exports=function(a){return new d(a)}},{}],9:[function(a,b,c){function d(a){if(!a||!a.nodeType)throw new Error("A DOM element reference is required");this.el=a,this.list=a.classList}var e=a("./index-of"),f=/\s+/,g=Object.prototype.toString;b.exports=function(a){return new d(a)},d.prototype.add=function(a){if(this.list)return this.list.add(a),this;var b=this.array(),c=e(b,a);return~c||b.push(a),this.el.className=b.join(" "),this},d.prototype.remove=function(a){if("[object RegExp]"==g.call(a))return this.removeMatching(a);if(this.list)return this.list.remove(a),this;var b=this.array(),c=e(b,a);return~c&&b.splice(c,1),this.el.className=b.join(" "),this},d.prototype.removeMatching=function(a){for(var b=this.array(),c=0;cs)return 1}for(var u=0,v=p.length,w=q.length,x=Math.max(v,w);ue)return 1}return 0}},{}],16:[function(a,b,c){function d(a){return"[object Array]"===Object.prototype.toString.call(a)}b.exports=function(a){if("undefined"==typeof a)return[];if(null===a)return[null];if(a===window)return[window];if("string"==typeof a)return[a];if(d(a))return a;if("number"!=typeof a.length)return[a];if("function"==typeof a&&a instanceof Function)return[a];for(var b=[],c=0;ca))return false; +if((f=u.get(t))&&u.get(e))return f==e;var f=-1,s=true,l=2&r?new y:Ut;for(u.set(t,e),u.set(e,t);++f=t}function vt(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}function gt(t){return null!=t&&typeof t=="object"}function dt(t){return typeof t=="number"||gt(t)&&"[object Number]"==k(t)}function At(t){return typeof t=="symbol"||gt(t)&&"[object Symbol]"==k(t)}function wt(t){return null==t?"":V(t)}function mt(t,e,r){return t=null==t?Ut:S(t,e),t===Ut?r:t}function Ot(t,e){var r;if(r=null!=t){r=t;var n;n=C(e,r);for(var o=-1,c=n.length,u=false;++ot)&&(t==e.length-1?e.pop():je.call(e,t,1),--this.size,true)},h.prototype.get=function(t){var e=this.__data__;return t=g(e,t),0>t?Ut:e[t][1]},h.prototype.has=function(t){return-1n?(++this.size,r.push([t,e])):r[n][1]=e,this},p.prototype.clear=function(){this.size=0,this.__data__={hash:new b,map:new(Se||h),string:new b}},p.prototype.delete=function(t){ +return t=Z(this,t).delete(t),this.size-=t?1:0,t},p.prototype.get=function(t){return Z(this,t).get(t)},p.prototype.has=function(t){return Z(this,t).has(t)},p.prototype.set=function(t,e){var r=Z(this,t),n=r.size;return r.set(t,e),this.size+=r.size==n?0:1,this},y.prototype.add=y.prototype.push=function(t){return this.__data__.set(t,"__lodash_hash_undefined__"),this},y.prototype.has=function(t){return this.__data__.has(t)},j.prototype.clear=function(){this.__data__=new h,this.size=0},j.prototype.delete=function(t){ +var e=this.__data__;return t=e.delete(t),this.size=e.size,t},j.prototype.get=function(t){return this.__data__.get(t)},j.prototype.has=function(t){return this.__data__.has(t)},j.prototype.set=function(t,e){var r=this.__data__;if(r instanceof h){var n=r.__data__;if(!Se||199>n.length)return n.push([t,e]),this.size=++r.size,this;r=this.__data__=new p(n)}return r.set(t,e),this.size=r.size,this};var Pe=function(t,e){return function(r,n){if(null==r)return r;if(!yt(r))return t(r,n);for(var o=r.length,c=e?o:-1,u=Object(r);(e?c--:++co?Ut:c,o=1),e=Object(e);++n ["/", "test", "\d+", undefined, "?"] + // "/route(\\d+)" => [undefined, undefined, undefined, "\d+", undefined] + '([\\/.])?(?:\\:(\\w+)(?:\\(((?:\\\\.|[^)])*)\\))?|\\(((?:\\\\.|[^)])*)\\))([+*?])?', + // Match regexp special characters that are always escaped. + '([.+*?=^!:${}()[\\]|\\/])' +].join('|'), 'g'); + +/** + * Escape the capturing group by escaping special characters and meaning. + * + * @param {String} group + * @return {String} + */ +function escapeGroup (group) { + return group.replace(/([=!:$\/()])/g, '\\$1'); +} + +/** + * Attach the keys as a property of the regexp. + * + * @param {RegExp} re + * @param {Array} keys + * @return {RegExp} + */ +function attachKeys (re, keys) { + re.keys = keys; + return re; +} + +/** + * Get the flags for a regexp from the options. + * + * @param {Object} options + * @return {String} + */ +function flags (options) { + return options.sensitive ? '' : 'i'; +} + +/** + * Pull out keys from a regexp. + * + * @param {RegExp} path + * @param {Array} keys + * @return {RegExp} + */ +function regexpToRegexp (path, keys) { + // Use a negative lookahead to match only capturing groups. + var groups = path.source.match(/\((?!\?)/g); + + if (groups) { + for (var i = 0; i < groups.length; i++) { + keys.push({ + name: i, + delimiter: null, + optional: false, + repeat: false + }); + } + } + + return attachKeys(path, keys); +} + +/** + * Transform an array into a regexp. + * + * @param {Array} path + * @param {Array} keys + * @param {Object} options + * @return {RegExp} + */ +function arrayToRegexp (path, keys, options) { + var parts = []; + + for (var i = 0; i < path.length; i++) { + parts.push(pathToRegexp(path[i], keys, options).source); + } + + var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options)); + return attachKeys(regexp, keys); +} + +/** + * Replace the specific tags with regexp strings. + * + * @param {String} path + * @param {Array} keys + * @return {String} + */ +function replacePath (path, keys) { + var index = 0; + + function replace (_, escaped, prefix, key, capture, group, suffix, escape) { + if (escaped) { + return escaped; + } + + if (escape) { + return '\\' + escape; + } + + var repeat = suffix === '+' || suffix === '*'; + var optional = suffix === '?' || suffix === '*'; + + keys.push({ + name: key || index++, + delimiter: prefix || '/', + optional: optional, + repeat: repeat + }); + + prefix = prefix ? ('\\' + prefix) : ''; + capture = escapeGroup(capture || group || '[^' + (prefix || '\\/') + ']+?'); + + if (repeat) { + capture = capture + '(?:' + prefix + capture + ')*'; + } + + if (optional) { + return '(?:' + prefix + '(' + capture + '))?'; + } + + // Basic parameter support. + return prefix + '(' + capture + ')'; + } + + return path.replace(PATH_REGEXP, replace); +} + +/** + * Normalize the given path string, returning a regular expression. + * + * An empty array can be passed in for the keys, which will hold the + * placeholder key descriptions. For example, using `/user/:id`, `keys` will + * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`. + * + * @param {(String|RegExp|Array)} path + * @param {Array} [keys] + * @param {Object} [options] + * @return {RegExp} + */ +function pathToRegexp (path, keys, options) { + keys = keys || []; + + if (!isArray(keys)) { + options = keys; + keys = []; + } else if (!options) { + options = {}; + } + + if (path instanceof RegExp) { + return regexpToRegexp(path, keys, options); + } + + if (isArray(path)) { + return arrayToRegexp(path, keys, options); + } + + var strict = options.strict; + var end = options.end !== false; + var route = replacePath(path, keys); + var endsWithSlash = path.charAt(path.length - 1) === '/'; + + // In non-strict mode we allow a slash at the end of match. If the path to + // match already ends with a slash, we remove it for consistency. The slash + // is valid at the end of a path match, not in the middle. This is important + // in non-ending mode, where "/test/" shouldn't match "/test//route". + if (!strict) { + route = (endsWithSlash ? route.slice(0, -2) : route) + '(?:\\/(?=$))?'; + } + + if (end) { + route += '$'; + } else { + // In non-ending mode, we need the capturing groups to match as much as + // possible by using a positive lookahead to the end or next path segment. + route += strict && endsWithSlash ? '' : '(?=\\/|$)'; + } + + return attachKeys(new RegExp('^' + route, flags(options)), keys); +} diff --git a/public/docs/vendor/polyfill.js b/public/docs/vendor/polyfill.js new file mode 100644 index 000000000..1d8c61cda --- /dev/null +++ b/public/docs/vendor/polyfill.js @@ -0,0 +1,96 @@ +// From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys +if (!Object.keys) { + Object.keys = (function () { + 'use strict'; + var hasOwnProperty = Object.prototype.hasOwnProperty, + hasDontEnumBug = !({toString: null}).propertyIsEnumerable('toString'), + dontEnums = [ + 'toString', + 'toLocaleString', + 'valueOf', + 'hasOwnProperty', + 'isPrototypeOf', + 'propertyIsEnumerable', + 'constructor' + ], + dontEnumsLength = dontEnums.length; + + return function (obj) { + if (typeof obj !== 'object' && (typeof obj !== 'function' || obj === null)) { + throw new TypeError('Object.keys called on non-object'); + } + + var result = [], prop, i; + + for (prop in obj) { + if (hasOwnProperty.call(obj, prop)) { + result.push(prop); + } + } + + if (hasDontEnumBug) { + for (i = 0; i < dontEnumsLength; i++) { + if (hasOwnProperty.call(obj, dontEnums[i])) { + result.push(dontEnums[i]); + } + } + } + return result; + }; + }()); +} + +//Production steps of ECMA-262, Edition 5, 15.4.4.18 +//Reference: http://es5.github.com/#x15.4.4.18 +if (!Array.prototype.forEach) { + Array.prototype.forEach = function (callback, thisArg) { + var T, k; + + if (this == null) { + throw new TypeError(' this is null or not defined'); + } + + // 1. Let O be the result of calling ToObject passing the |this| value as the argument. + var O = Object(this); + + // 2. Let lenValue be the result of calling the Get internal method of O with the argument "length". + // 3. Let len be ToUint32(lenValue). + var len = O.length >>> 0; + + // 4. If IsCallable(callback) is false, throw a TypeError exception. + // See: http://es5.github.com/#x9.11 + if (typeof callback !== "function") { + throw new TypeError(callback + " is not a function"); + } + + // 5. If thisArg was supplied, let T be thisArg; else let T be undefined. + if (arguments.length > 1) { + T = thisArg; + } + + // 6. Let k be 0 + k = 0; + + // 7. Repeat, while k < len + while (k < len) { + var kValue; + + // a. Let Pk be ToString(k). + // This is implicit for LHS operands of the in operator + // b. Let kPresent be the result of calling the HasProperty internal method of O with argument Pk. + // This step can be combined with c + // c. If kPresent is true, then + if (k in O) { + // i. Let kValue be the result of calling the Get internal method of O with argument Pk. + kValue = O[k]; + + // ii. Call the Call internal method of callback with T as the this value and + // argument list containing kValue, k, and O. + callback.call(T, kValue, k, O); + } + // d. Increase k by 1. + k++; + } + // 8. return undefined + }; +} diff --git a/public/docs/vendor/prism.css b/public/docs/vendor/prism.css new file mode 100644 index 000000000..cfa6dff4b --- /dev/null +++ b/public/docs/vendor/prism.css @@ -0,0 +1,125 @@ +/* PrismJS 1.21.0 +https://prismjs.com/download.html#themes=prism-tomorrow&languages=clike+javascript+bash+c+csharp+cpp+clojure+elixir+erlang+go+http+json+json5+jsonp+lua+perl+python+rust */ +/** + * prism.js tomorrow night eighties for JavaScript, CoffeeScript, CSS and HTML + * Based on https://github.com/chriskempson/tomorrow-theme + * @author Rose Pritchard + */ + +code[class*="language-"], +pre[class*="language-"] { + color: #ccc; + background: none; + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + font-size: 12px; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; + +} + +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: .5em 0; + overflow: auto; +} + +:not(pre) > code[class*="language-"], +pre[class*="language-"] { + background: #2d2d2d; +} + +/* Inline code */ +:not(pre) > code[class*="language-"] { + padding: .1em; + border-radius: .3em; + white-space: normal; +} + +.token.comment, +.token.block-comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: #999; +} + +.token.punctuation { + color: #ccc; +} + +.token.tag, +.token.attr-name, +.token.namespace, +.token.deleted { + color: #e2777a; +} + +.token.function-name { + color: #6196cc; +} + +.token.boolean, +.token.number, +.token.function { + color: #f08d49; +} + +.token.property, +.token.class-name, +.token.constant, +.token.symbol { + color: #f8c555; +} + +.token.selector, +.token.important, +.token.atrule, +.token.keyword, +.token.builtin { + color: #cc99cd; +} + +.token.string, +.token.char, +.token.attr-value, +.token.regex, +.token.variable { + color: #7ec699; +} + +.token.operator, +.token.entity, +.token.url { + color: #67cdcc; +} + +.token.important, +.token.bold { + font-weight: bold; +} +.token.italic { + font-style: italic; +} + +.token.entity { + cursor: help; +} + +.token.inserted { + color: green; +} + diff --git a/public/docs/vendor/prism.js b/public/docs/vendor/prism.js new file mode 100644 index 000000000..7f211e59d --- /dev/null +++ b/public/docs/vendor/prism.js @@ -0,0 +1,21 @@ +/* PrismJS 1.21.0 +https://prismjs.com/download.html#themes=prism-tomorrow&languages=clike+javascript+bash+c+csharp+cpp+clojure+elixir+erlang+go+http+json+json5+jsonp+lua+perl+python+rust */ +var _self="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},Prism=function(u){var c=/\blang(?:uage)?-([\w-]+)\b/i,n=0,M={manual:u.Prism&&u.Prism.manual,disableWorkerMessageHandler:u.Prism&&u.Prism.disableWorkerMessageHandler,util:{encode:function e(n){return n instanceof W?new W(n.type,e(n.content),n.alias):Array.isArray(n)?n.map(e):n.replace(/&/g,"&").replace(/=l.reach);k+=y.value.length,y=y.next){var b=y.value;if(t.length>n.length)return;if(!(b instanceof W)){var x=1;if(h&&y!=t.tail.prev){m.lastIndex=k;var w=m.exec(n);if(!w)break;var A=w.index+(f&&w[1]?w[1].length:0),P=w.index+w[0].length,S=k;for(S+=y.value.length;S<=A;)y=y.next,S+=y.value.length;if(S-=y.value.length,k=S,y.value instanceof W)continue;for(var E=y;E!==t.tail&&(Sl.reach&&(l.reach=j);var C=y.prev;L&&(C=I(t,C,L),k+=L.length),z(t,C,x);var _=new W(o,g?M.tokenize(O,g):O,v,O);y=I(t,C,_),N&&I(t,y,N),1"+a.content+""},!u.document)return u.addEventListener&&(M.disableWorkerMessageHandler||u.addEventListener("message",function(e){var n=JSON.parse(e.data),t=n.language,r=n.code,a=n.immediateClose;u.postMessage(M.highlight(r,M.languages[t],t)),a&&u.close()},!1)),M;var e=M.util.currentScript();function t(){M.manual||M.highlightAll()}if(e&&(M.filename=e.src,e.hasAttribute("data-manual")&&(M.manual=!0)),!M.manual){var r=document.readyState;"loading"===r||"interactive"===r&&e&&e.defer?document.addEventListener("DOMContentLoaded",t):window.requestAnimationFrame?window.requestAnimationFrame(t):window.setTimeout(t,16)}return M}(_self);"undefined"!=typeof module&&module.exports&&(module.exports=Prism),"undefined"!=typeof global&&(global.Prism=Prism); +Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|interface|extends|implements|trait|instanceof|new)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,boolean:/\b(?:true|false)\b/,function:/\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/}; +Prism.languages.javascript=Prism.languages.extend("clike",{"class-name":[Prism.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])[_$A-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\.(?:prototype|constructor))/,lookbehind:!0}],keyword:[{pattern:/((?:^|})\s*)(?:catch|finally)\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|for|from|function|(?:get|set)(?=\s*[\[$\w\xA0-\uFFFF])|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],number:/\b(?:(?:0[xX](?:[\dA-Fa-f](?:_[\dA-Fa-f])?)+|0[bB](?:[01](?:_[01])?)+|0[oO](?:[0-7](?:_[0-7])?)+)n?|(?:\d(?:_\d)?)+n|NaN|Infinity)\b|(?:\b(?:\d(?:_\d)?)+\.?(?:\d(?:_\d)?)*|\B\.(?:\d(?:_\d)?)+)(?:[Ee][+-]?(?:\d(?:_\d)?)+)?/,function:/#?[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),Prism.languages.javascript["class-name"][0].pattern=/(\b(?:class|interface|extends|implements|instanceof|new)\s+)[\w.\\]+/,Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*]|\\.|[^/\\\[\r\n])+\/[gimyus]{0,6}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0},"function-variable":{pattern:/#?[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+[_$A-Za-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)?\s*\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\))/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*=>)/i,inside:Prism.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\)\s*=>)/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:[_$A-Za-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\)\s*\{)/,lookbehind:!0,inside:Prism.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),Prism.languages.insertBefore("javascript","string",{"template-string":{pattern:/`(?:\\[\s\S]|\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}|(?!\${)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\${|}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}}}),Prism.languages.markup&&Prism.languages.markup.tag.addInlined("script","javascript"),Prism.languages.js=Prism.languages.javascript; +!function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--?|-=|\+\+?|\+=|!=?|~|\*\*?|\*=|\/=?|%=?|<<=?|>>=?|<=?|>=?|==?|&&?|&=|\^=?|\|\|?|\|=|\?|:/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|x[0-9a-fA-F]{1,2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)\w+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b\w+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+?)\s*(?:\r?\n|\r)[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:n},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s*(?:\r?\n|\r)[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\](?:\\\\)*)(["'])(?:\\[\s\S]|\$\([^)]+\)|`[^`]+`|(?!\2)[^\\])*\2/,lookbehind:!0,greedy:!0,inside:n}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:n.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|aptitude|apt-cache|apt-get|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:if|then|else|elif|fi|for|while|in|case|esac|function|select|do|done|until)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|break|cd|continue|eval|exec|exit|export|getopts|hash|pwd|readonly|return|shift|test|times|trap|umask|unset|alias|bind|builtin|caller|command|declare|echo|enable|help|let|local|logout|mapfile|printf|read|readarray|source|type|typeset|ulimit|unalias|set|shopt)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:true|false)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|==?|!=?|=~|<<[<-]?|[&\d]?>>|\d?[<>]&?|&[>&]?|\|[&|]?|<=?|>=?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}};for(var a=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],r=n.variable[1].inside,s=0;s>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/,number:/(?:\b0x(?:[\da-f]+\.?[\da-f]*|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?)[ful]*/i}),Prism.languages.insertBefore("c","string",{macro:{pattern:/(^\s*)#\s*[a-z]+(?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},Prism.languages.c.string],comment:Prism.languages.c.comment,directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:Prism.languages.c}}},constant:/\b(?:__FILE__|__LINE__|__DATE__|__TIME__|__TIMESTAMP__|__func__|EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|stdin|stdout|stderr)\b/}),delete Prism.languages.c.boolean; +!function(s){function a(e,s){return e.replace(/<<(\d+)>>/g,function(e,n){return"(?:"+s[+n]+")"})}function t(e,n,s){return RegExp(a(e,n),s||"")}function e(e,n){for(var s=0;s>/g,function(){return"(?:"+e+")"});return e.replace(/<>/g,"[^\\s\\S]")}var n="bool byte char decimal double dynamic float int long object sbyte short string uint ulong ushort var void",r="class enum interface struct",i="add alias and ascending async await by descending from get global group into join let nameof not notnull on or orderby partial remove select set unmanaged value when where where",o="abstract as base break case catch checked const continue default delegate do else event explicit extern finally fixed for foreach goto if implicit in internal is lock namespace new null operator out override params private protected public readonly ref return sealed sizeof stackalloc static switch this throw try typeof unchecked unsafe using virtual volatile while yield";function l(e){return"\\b(?:"+e.trim().replace(/ /g,"|")+")\\b"}var d=l(r),p=RegExp(l(n+" "+r+" "+i+" "+o)),c=l(r+" "+i+" "+o),u=l(n+" "+r+" "+o),g=e("<(?:[^<>;=+\\-*/%&|^]|<>)*>",2),b=e("\\((?:[^()]|<>)*\\)",2),h="@?\\b[A-Za-z_]\\w*\\b",f=a("<<0>>(?:\\s*<<1>>)?",[h,g]),m=a("(?!<<0>>)<<1>>(?:\\s*\\.\\s*<<1>>)*",[c,f]),k="\\[\\s*(?:,\\s*)*\\]",y=a("<<0>>(?:\\s*(?:\\?\\s*)?<<1>>)*(?:\\s*\\?)?",[m,k]),w=a("(?:<<0>>|<<1>>)(?:\\s*(?:\\?\\s*)?<<2>>)*(?:\\s*\\?)?",[a("\\(<<0>>+(?:,<<0>>+)+\\)",[a("[^,()<>[\\];=+\\-*/%&|^]|<<0>>|<<1>>|<<2>>",[g,b,k])]),m,k]),v={keyword:p,punctuation:/[<>()?,.:[\]]/},x="'(?:[^\r\n'\\\\]|\\\\.|\\\\[Uux][\\da-fA-F]{1,8})'",$='"(?:\\\\.|[^\\\\"\r\n])*"';s.languages.csharp=s.languages.extend("clike",{string:[{pattern:t("(^|[^$\\\\])<<0>>",['@"(?:""|\\\\[^]|[^\\\\"])*"(?!")']),lookbehind:!0,greedy:!0},{pattern:t("(^|[^@$\\\\])<<0>>",[$]),lookbehind:!0,greedy:!0},{pattern:RegExp(x),greedy:!0,alias:"character"}],"class-name":[{pattern:t("(\\busing\\s+static\\s+)<<0>>(?=\\s*;)",[m]),lookbehind:!0,inside:v},{pattern:t("(\\busing\\s+<<0>>\\s*=\\s*)<<1>>(?=\\s*;)",[h,w]),lookbehind:!0,inside:v},{pattern:t("(\\busing\\s+)<<0>>(?=\\s*=)",[h]),lookbehind:!0},{pattern:t("(\\b<<0>>\\s+)<<1>>",[d,f]),lookbehind:!0,inside:v},{pattern:t("(\\bcatch\\s*\\(\\s*)<<0>>",[m]),lookbehind:!0,inside:v},{pattern:t("(\\bwhere\\s+)<<0>>",[h]),lookbehind:!0},{pattern:t("(\\b(?:is(?:\\s+not)?|as)\\s+)<<0>>",[y]),lookbehind:!0,inside:v},{pattern:t("\\b<<0>>(?=\\s+(?!<<1>>)<<2>>(?:\\s*[=,;:{)\\]]|\\s+(?:in|when)\\b))",[w,u,h]),inside:v}],keyword:p,number:/(?:\b0(?:x[\da-f_]*[\da-f]|b[01_]*[01])|(?:\B\.\d+(?:_+\d+)*|\b\d+(?:_+\d+)*(?:\.\d+(?:_+\d+)*)?)(?:e[-+]?\d+(?:_+\d+)*)?)(?:ul|lu|[dflmu])?\b/i,operator:/>>=?|<<=?|[-=]>|([-+&|])\1|~|\?\?=?|[-+*/%&|^!=<>]=?/,punctuation:/\?\.?|::|[{}[\];(),.:]/}),s.languages.insertBefore("csharp","number",{range:{pattern:/\.\./,alias:"operator"}}),s.languages.insertBefore("csharp","punctuation",{"named-parameter":{pattern:t("([(,]\\s*)<<0>>(?=\\s*:)",[h]),lookbehind:!0,alias:"punctuation"}}),s.languages.insertBefore("csharp","class-name",{namespace:{pattern:t("(\\b(?:namespace|using)\\s+)<<0>>(?:\\s*\\.\\s*<<0>>)*(?=\\s*[;{])",[h]),lookbehind:!0,inside:{punctuation:/\./}},"type-expression":{pattern:t("(\\b(?:default|typeof|sizeof)\\s*\\(\\s*)(?:[^()\\s]|\\s(?!\\s*\\))|<<0>>)*(?=\\s*\\))",[b]),lookbehind:!0,alias:"class-name",inside:v},"return-type":{pattern:t("<<0>>(?=\\s+(?:<<1>>\\s*(?:=>|[({]|\\.\\s*this\\s*\\[)|this\\s*\\[))",[w,m]),inside:v,alias:"class-name"},"constructor-invocation":{pattern:t("(\\bnew\\s+)<<0>>(?=\\s*[[({])",[w]),lookbehind:!0,inside:v,alias:"class-name"},"generic-method":{pattern:t("<<0>>\\s*<<1>>(?=\\s*\\()",[h,g]),inside:{function:t("^<<0>>",[h]),generic:{pattern:RegExp(g),alias:"class-name",inside:v}}},"type-list":{pattern:t("\\b((?:<<0>>\\s+<<1>>|where\\s+<<2>>)\\s*:\\s*)(?:<<3>>|<<4>>)(?:\\s*,\\s*(?:<<3>>|<<4>>))*(?=\\s*(?:where|[{;]|=>|$))",[d,f,h,w,p.source]),lookbehind:!0,inside:{keyword:p,"class-name":{pattern:RegExp(w),greedy:!0,inside:v},punctuation:/,/}},preprocessor:{pattern:/(^\s*)#.*/m,lookbehind:!0,alias:"property",inside:{directive:{pattern:/(\s*#)\b(?:define|elif|else|endif|endregion|error|if|line|pragma|region|undef|warning)\b/,lookbehind:!0,alias:"keyword"}}}});var _=$+"|"+x,B=a("/(?![*/])|//[^\r\n]*[\r\n]|/\\*(?:[^*]|\\*(?!/))*\\*/|<<0>>",[_]),E=e(a("[^\"'/()]|<<0>>|\\(<>*\\)",[B]),2),R="\\b(?:assembly|event|field|method|module|param|property|return|type)\\b",P=a("<<0>>(?:\\s*\\(<<1>>*\\))?",[m,E]);s.languages.insertBefore("csharp","class-name",{attribute:{pattern:t("((?:^|[^\\s\\w>)?])\\s*\\[\\s*)(?:<<0>>\\s*:\\s*)?<<1>>(?:\\s*,\\s*<<1>>)*(?=\\s*\\])",[R,P]),lookbehind:!0,greedy:!0,inside:{target:{pattern:t("^<<0>>(?=\\s*:)",[R]),alias:"keyword"},"attribute-arguments":{pattern:t("\\(<<0>>*\\)",[E]),inside:s.languages.csharp},"class-name":{pattern:RegExp(m),inside:{punctuation:/\./}},punctuation:/[:,]/}}});var z=":[^}\r\n]+",S=e(a("[^\"'/()]|<<0>>|\\(<>*\\)",[B]),2),j=a("\\{(?!\\{)(?:(?![}:])<<0>>)*<<1>>?\\}",[S,z]),A=e(a("[^\"'/()]|/(?!\\*)|/\\*(?:[^*]|\\*(?!/))*\\*/|<<0>>|\\(<>*\\)",[_]),2),F=a("\\{(?!\\{)(?:(?![}:])<<0>>)*<<1>>?\\}",[A,z]);function U(e,n){return{interpolation:{pattern:t("((?:^|[^{])(?:\\{\\{)*)<<0>>",[e]),lookbehind:!0,inside:{"format-string":{pattern:t("(^\\{(?:(?![}:])<<0>>)*)<<1>>(?=\\}$)",[n,z]),lookbehind:!0,inside:{punctuation:/^:/}},punctuation:/^\{|\}$/,expression:{pattern:/[\s\S]+/,alias:"language-csharp",inside:s.languages.csharp}}},string:/[\s\S]+/}}s.languages.insertBefore("csharp","string",{"interpolation-string":[{pattern:t('(^|[^\\\\])(?:\\$@|@\\$)"(?:""|\\\\[^]|\\{\\{|<<0>>|[^\\\\{"])*"',[j]),lookbehind:!0,greedy:!0,inside:U(j,S)},{pattern:t('(^|[^@\\\\])\\$"(?:\\\\.|\\{\\{|<<0>>|[^\\\\"{])*"',[F]),lookbehind:!0,greedy:!0,inside:U(F,A)}]})}(Prism),Prism.languages.dotnet=Prism.languages.cs=Prism.languages.csharp; +!function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char8_t|char16_t|char32_t|class|compl|concept|const|consteval|constexpr|constinit|const_cast|continue|co_await|co_return|co_yield|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|float|for|friend|goto|if|inline|int|int8_t|int16_t|int32_t|int64_t|uint8_t|uint16_t|uint32_t|uint64_t|long|mutable|namespace|new|noexcept|nullptr|operator|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/;e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp("(\\b(?:class|concept|enum|struct|typename)\\s+)(?!)\\w+".replace(//g,function(){return t.source})),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+\.?[\da-f']*|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+\.?[\d']*|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]*/i,greedy:!0},operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:true|false)\b/}),e.languages.insertBefore("cpp","string",{"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)(?:[^;{}"'])+?(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","operator",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(Prism); +Prism.languages.clojure={comment:/;.*/,string:{pattern:/"(?:[^"\\]|\\.)*"/,greedy:!0},operator:/(?:::|[:|'])\b[a-z][\w*+!?-]*\b/i,keyword:{pattern:/([^\w+*'?-])(?:def|if|do|let|\.\.|quote|var|->>|->|fn|loop|recur|throw|try|monitor-enter|\.|new|set!|def\-|defn|defn\-|defmacro|defmulti|defmethod|defstruct|defonce|declare|definline|definterface|defprotocol|==|defrecord|>=|deftype|<=|defproject|ns|\*|\+|\-|\/|<|=|>|accessor|agent|agent-errors|aget|alength|all-ns|alter|and|append-child|apply|array-map|aset|aset-boolean|aset-byte|aset-char|aset-double|aset-float|aset-int|aset-long|aset-short|assert|assoc|await|await-for|bean|binding|bit-and|bit-not|bit-or|bit-shift-left|bit-shift-right|bit-xor|boolean|branch\?|butlast|byte|cast|char|children|class|clear-agent-errors|comment|commute|comp|comparator|complement|concat|conj|cons|constantly|cond|if-not|construct-proxy|contains\?|count|create-ns|create-struct|cycle|dec|deref|difference|disj|dissoc|distinct|doall|doc|dorun|doseq|dosync|dotimes|doto|double|down|drop|drop-while|edit|end\?|ensure|eval|every\?|false\?|ffirst|file-seq|filter|find|find-doc|find-ns|find-var|first|float|flush|for|fnseq|frest|gensym|get-proxy-class|get|hash-map|hash-set|identical\?|identity|if-let|import|in-ns|inc|index|insert-child|insert-left|insert-right|inspect-table|inspect-tree|instance\?|int|interleave|intersection|into|into-array|iterate|join|key|keys|keyword|keyword\?|last|lazy-cat|lazy-cons|left|lefts|line-seq|list\*|list|load|load-file|locking|long|loop|macroexpand|macroexpand-1|make-array|make-node|map|map-invert|map\?|mapcat|max|max-key|memfn|merge|merge-with|meta|min|min-key|name|namespace|neg\?|new|newline|next|nil\?|node|not|not-any\?|not-every\?|not=|ns-imports|ns-interns|ns-map|ns-name|ns-publics|ns-refers|ns-resolve|ns-unmap|nth|nthrest|or|parse|partial|path|peek|pop|pos\?|pr|pr-str|print|print-str|println|println-str|prn|prn-str|project|proxy|proxy-mappings|quot|rand|rand-int|range|re-find|re-groups|re-matcher|re-matches|re-pattern|re-seq|read|read-line|reduce|ref|ref-set|refer|rem|remove|remove-method|remove-ns|rename|rename-keys|repeat|replace|replicate|resolve|rest|resultset-seq|reverse|rfirst|right|rights|root|rrest|rseq|second|select|select-keys|send|send-off|seq|seq-zip|seq\?|set|short|slurp|some|sort|sort-by|sorted-map|sorted-map-by|sorted-set|special-symbol\?|split-at|split-with|str|string\?|struct|struct-map|subs|subvec|symbol|symbol\?|sync|take|take-nth|take-while|test|time|to-array|to-array-2d|tree-seq|true\?|union|up|update-proxy|val|vals|var-get|var-set|var\?|vector|vector-zip|vector\?|when|when-first|when-let|when-not|with-local-vars|with-meta|with-open|with-out-str|xml-seq|xml-zip|zero\?|zipmap|zipper)(?=[^\w+*'?-])/,lookbehind:!0},boolean:/\b(?:true|false|nil)\b/,number:/\b[\da-f]+\b/i,punctuation:/[{}\[\](),]/}; +Prism.languages.elixir={comment:/#.*/m,regex:{pattern:/~[rR](?:("""|''')(?:\\[\s\S]|(?!\1)[^\\])+\1|([\/|"'])(?:\\.|(?!\2)[^\\\r\n])+\2|\((?:\\.|[^\\)\r\n])+\)|\[(?:\\.|[^\\\]\r\n])+\]|\{(?:\\.|[^\\}\r\n])+\}|<(?:\\.|[^\\>\r\n])+>)[uismxfr]*/,greedy:!0},string:[{pattern:/~[cCsSwW](?:("""|''')(?:\\[\s\S]|(?!\1)[^\\])+\1|([\/|"'])(?:\\.|(?!\2)[^\\\r\n])+\2|\((?:\\.|[^\\)\r\n])+\)|\[(?:\\.|[^\\\]\r\n])+\]|\{(?:\\.|#\{[^}]+\}|#(?!\{)|[^#\\}\r\n])+\}|<(?:\\.|[^\\>\r\n])+>)[csa]?/,greedy:!0,inside:{}},{pattern:/("""|''')[\s\S]*?\1/,greedy:!0,inside:{}},{pattern:/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0,inside:{}}],atom:{pattern:/(^|[^:]):\w+/,lookbehind:!0,alias:"symbol"},"attr-name":/\w+\??:(?!:)/,capture:{pattern:/(^|[^&])&(?:[^&\s\d()][^\s()]*|(?=\())/,lookbehind:!0,alias:"function"},argument:{pattern:/(^|[^&])&\d+/,lookbehind:!0,alias:"variable"},attribute:{pattern:/@\w+/,alias:"variable"},number:/\b(?:0[box][a-f\d_]+|\d[\d_]*)(?:\.[\d_]+)?(?:e[+-]?[\d_]+)?\b/i,keyword:/\b(?:after|alias|and|case|catch|cond|def(?:callback|exception|impl|module|p|protocol|struct)?|do|else|end|fn|for|if|import|not|or|require|rescue|try|unless|use|when)\b/,boolean:/\b(?:true|false|nil)\b/,operator:[/\bin\b|&&?|\|[|>]?|\\\\|::|\.\.\.?|\+\+?|-[->]?|<[-=>]|>=|!==?|\B!|=(?:==?|[>~])?|[*\/^]/,{pattern:/([^<])<(?!<)/,lookbehind:!0},{pattern:/([^>])>(?!>)/,lookbehind:!0}],punctuation:/<<|>>|[.,%\[\]{}()]/},Prism.languages.elixir.string.forEach(function(e){e.inside={interpolation:{pattern:/#\{[^}]+\}/,inside:{delimiter:{pattern:/^#\{|\}$/,alias:"punctuation"},rest:Prism.languages.elixir}}}}); +Prism.languages.erlang={comment:/%.+/,string:{pattern:/"(?:\\.|[^\\"\r\n])*"/,greedy:!0},"quoted-function":{pattern:/'(?:\\.|[^\\'\r\n])+'(?=\()/,alias:"function"},"quoted-atom":{pattern:/'(?:\\.|[^\\'\r\n])+'/,alias:"atom"},boolean:/\b(?:true|false)\b/,keyword:/\b(?:fun|when|case|of|end|if|receive|after|try|catch)\b/,number:[/\$\\?./,/\d+#[a-z0-9]+/i,/(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?/i],function:/\b[a-z][\w@]*(?=\()/,variable:{pattern:/(^|[^@])(?:\b|\?)[A-Z_][\w@]*/,lookbehind:!0},operator:[/[=\/<>:]=|=[:\/]=|\+\+?|--?|[=*\/!]|\b(?:bnot|div|rem|band|bor|bxor|bsl|bsr|not|and|or|xor|orelse|andalso)\b/,{pattern:/(^|[^<])<(?!<)/,lookbehind:!0},{pattern:/(^|[^>])>(?!>)/,lookbehind:!0}],atom:/\b[a-z][\w@]*/,punctuation:/[()[\]{}:;,.#|]|<<|>>/}; +Prism.languages.go=Prism.languages.extend("clike",{keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,builtin:/\b(?:bool|byte|complex(?:64|128)|error|float(?:32|64)|rune|string|u?int(?:8|16|32|64)?|uintptr|append|cap|close|complex|copy|delete|imag|len|make|new|panic|print(?:ln)?|real|recover)\b/,boolean:/\b(?:_|iota|nil|true|false)\b/,operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,number:/(?:\b0x[a-f\d]+|(?:\b\d+\.?\d*|\B\.\d+)(?:e[-+]?\d+)?)i?/i,string:{pattern:/(["'`])(?:\\[\s\S]|(?!\1)[^\\])*\1/,greedy:!0}}),delete Prism.languages.go["class-name"]; +!function(t){t.languages.http={"request-line":{pattern:/^(?:POST|GET|PUT|DELETE|OPTIONS|PATCH|TRACE|CONNECT)\s(?:https?:\/\/|\/)\S+\sHTTP\/[0-9.]+/m,inside:{property:/^(?:POST|GET|PUT|DELETE|OPTIONS|PATCH|TRACE|CONNECT)\b/,"attr-name":/:\w+/}},"response-status":{pattern:/^HTTP\/1.[01] \d+.*/m,inside:{property:{pattern:/(^HTTP\/1.[01] )\d+.*/i,lookbehind:!0}}},"header-name":{pattern:/^[\w-]+:(?=.)/m,alias:"keyword"}};var a,e,n,i=t.languages,p={"application/javascript":i.javascript,"application/json":i.json||i.javascript,"application/xml":i.xml,"text/xml":i.xml,"text/html":i.html,"text/css":i.css},s={"application/json":!0,"application/xml":!0};for(var r in p)if(p[r]){a=a||{};var T=s[r]?(void 0,n=(e=r).replace(/^[a-z]+\//,""),"(?:"+e+"|\\w+/(?:[\\w.-]+\\+)+"+n+"(?![+\\w.-]))"):r;a[r.replace(/\//g,"-")]={pattern:RegExp("(content-type:\\s*"+T+"[\\s\\S]*?)(?:\\r?\\n|\\r){2}[\\s\\S]*","i"),lookbehind:!0,inside:p[r]}}a&&t.languages.insertBefore("http","header-name",a)}(Prism); +Prism.languages.json={property:{pattern:/"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,greedy:!0},string:{pattern:/"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:true|false)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},Prism.languages.webmanifest=Prism.languages.json; +!function(n){var e=/("|')(?:\\(?:\r\n?|\n|.)|(?!\1)[^\\\r\n])*\1/;n.languages.json5=n.languages.extend("json",{property:[{pattern:RegExp(e.source+"(?=\\s*:)"),greedy:!0},{pattern:/[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*:)/,alias:"unquoted"}],string:{pattern:e,greedy:!0},number:/[+-]?\b(?:NaN|Infinity|0x[a-fA-F\d]+)\b|[+-]?(?:\b\d+\.?\d*|\B\.\d+)(?:[eE][+-]?\d+\b)?/})}(Prism); +Prism.languages.jsonp=Prism.languages.extend("json",{punctuation:/[{}[\]();,.]/}),Prism.languages.insertBefore("jsonp","punctuation",{function:/[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*\()/}); +Prism.languages.lua={comment:/^#!.+|--(?:\[(=*)\[[\s\S]*?\]\1\]|.*)/m,string:{pattern:/(["'])(?:(?!\1)[^\\\r\n]|\\z(?:\r\n|\s)|\\(?:\r\n|[\s\S]))*\1|\[(=*)\[[\s\S]*?\]\2\]/,greedy:!0},number:/\b0x[a-f\d]+\.?[a-f\d]*(?:p[+-]?\d+)?\b|\b\d+(?:\.\B|\.?\d*(?:e[+-]?\d+)?\b)|\B\.\d+(?:e[+-]?\d+)?\b/i,keyword:/\b(?:and|break|do|else|elseif|end|false|for|function|goto|if|in|local|nil|not|or|repeat|return|then|true|until|while)\b/,function:/(?!\d)\w+(?=\s*(?:[({]))/,operator:[/[-+*%^&|#]|\/\/?|<[<=]?|>[>=]?|[=~]=?/,{pattern:/(^|[^.])\.\.(?!\.)/,lookbehind:!0}],punctuation:/[\[\](){},;]|\.+|:+/}; +Prism.languages.perl={comment:[{pattern:/(^\s*)=\w+[\s\S]*?=cut.*/m,lookbehind:!0},{pattern:/(^|[^\\$])#.*/,lookbehind:!0}],string:[{pattern:/\b(?:q|qq|qx|qw)\s*([^a-zA-Z0-9\s{(\[<])(?:(?!\1)[^\\]|\\[\s\S])*\1/,greedy:!0},{pattern:/\b(?:q|qq|qx|qw)\s+([a-zA-Z0-9])(?:(?!\1)[^\\]|\\[\s\S])*\1/,greedy:!0},{pattern:/\b(?:q|qq|qx|qw)\s*\((?:[^()\\]|\\[\s\S])*\)/,greedy:!0},{pattern:/\b(?:q|qq|qx|qw)\s*\{(?:[^{}\\]|\\[\s\S])*\}/,greedy:!0},{pattern:/\b(?:q|qq|qx|qw)\s*\[(?:[^[\]\\]|\\[\s\S])*\]/,greedy:!0},{pattern:/\b(?:q|qq|qx|qw)\s*<(?:[^<>\\]|\\[\s\S])*>/,greedy:!0},{pattern:/("|`)(?:(?!\1)[^\\]|\\[\s\S])*\1/,greedy:!0},{pattern:/'(?:[^'\\\r\n]|\\.)*'/,greedy:!0}],regex:[{pattern:/\b(?:m|qr)\s*([^a-zA-Z0-9\s{(\[<])(?:(?!\1)[^\\]|\\[\s\S])*\1[msixpodualngc]*/,greedy:!0},{pattern:/\b(?:m|qr)\s+([a-zA-Z0-9])(?:(?!\1)[^\\]|\\[\s\S])*\1[msixpodualngc]*/,greedy:!0},{pattern:/\b(?:m|qr)\s*\((?:[^()\\]|\\[\s\S])*\)[msixpodualngc]*/,greedy:!0},{pattern:/\b(?:m|qr)\s*\{(?:[^{}\\]|\\[\s\S])*\}[msixpodualngc]*/,greedy:!0},{pattern:/\b(?:m|qr)\s*\[(?:[^[\]\\]|\\[\s\S])*\][msixpodualngc]*/,greedy:!0},{pattern:/\b(?:m|qr)\s*<(?:[^<>\\]|\\[\s\S])*>[msixpodualngc]*/,greedy:!0},{pattern:/(^|[^-]\b)(?:s|tr|y)\s*([^a-zA-Z0-9\s{(\[<])(?:(?!\2)[^\\]|\\[\s\S])*\2(?:(?!\2)[^\\]|\\[\s\S])*\2[msixpodualngcer]*/,lookbehind:!0,greedy:!0},{pattern:/(^|[^-]\b)(?:s|tr|y)\s+([a-zA-Z0-9])(?:(?!\2)[^\\]|\\[\s\S])*\2(?:(?!\2)[^\\]|\\[\s\S])*\2[msixpodualngcer]*/,lookbehind:!0,greedy:!0},{pattern:/(^|[^-]\b)(?:s|tr|y)\s*\((?:[^()\\]|\\[\s\S])*\)\s*\((?:[^()\\]|\\[\s\S])*\)[msixpodualngcer]*/,lookbehind:!0,greedy:!0},{pattern:/(^|[^-]\b)(?:s|tr|y)\s*\{(?:[^{}\\]|\\[\s\S])*\}\s*\{(?:[^{}\\]|\\[\s\S])*\}[msixpodualngcer]*/,lookbehind:!0,greedy:!0},{pattern:/(^|[^-]\b)(?:s|tr|y)\s*\[(?:[^[\]\\]|\\[\s\S])*\]\s*\[(?:[^[\]\\]|\\[\s\S])*\][msixpodualngcer]*/,lookbehind:!0,greedy:!0},{pattern:/(^|[^-]\b)(?:s|tr|y)\s*<(?:[^<>\\]|\\[\s\S])*>\s*<(?:[^<>\\]|\\[\s\S])*>[msixpodualngcer]*/,lookbehind:!0,greedy:!0},{pattern:/\/(?:[^\/\\\r\n]|\\.)*\/[msixpodualngc]*(?=\s*(?:$|[\r\n,.;})&|\-+*~<>!?^]|(?:lt|gt|le|ge|eq|ne|cmp|not|and|or|xor|x)\b))/,greedy:!0}],variable:[/[&*$@%]\{\^[A-Z]+\}/,/[&*$@%]\^[A-Z_]/,/[&*$@%]#?(?=\{)/,/[&*$@%]#?(?:(?:::)*'?(?!\d)[\w$]+)+(?:::)*/i,/[&*$@%]\d+/,/(?!%=)[$@%][!"#$%&'()*+,\-.\/:;<=>?@[\\\]^_`{|}~]/],filehandle:{pattern:/<(?![<=])\S*>|\b_\b/,alias:"symbol"},vstring:{pattern:/v\d+(?:\.\d+)*|\d+(?:\.\d+){2,}/,alias:"string"},function:{pattern:/sub [a-z0-9_]+/i,inside:{keyword:/sub/}},keyword:/\b(?:any|break|continue|default|delete|die|do|else|elsif|eval|for|foreach|given|goto|if|last|local|my|next|our|package|print|redo|require|return|say|state|sub|switch|undef|unless|until|use|when|while)\b/,number:/\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0b[01](?:_?[01])*|(?:\d(?:_?\d)*)?\.?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)\b/,operator:/-[rwxoRWXOezsfdlpSbctugkTBMAC]\b|\+[+=]?|-[-=>]?|\*\*?=?|\/\/?=?|=[=~>]?|~[~=]?|\|\|?=?|&&?=?|<(?:=>?|<=?)?|>>?=?|![~=]?|[%^]=?|\.(?:=|\.\.?)?|[\\?]|\bx(?:=|\b)|\b(?:lt|gt|le|ge|eq|ne|cmp|not|and|or|xor)\b/,punctuation:/[{}[\];(),:]/}; +Prism.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0},"string-interpolation":{pattern:/(?:f|rf|fr)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:{{)*){(?!{)(?:[^{}]|{(?!{)(?:[^{}]|{(?!{)(?:[^{}])+})+})+}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|rb|br)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|rb|br)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^\s*)@\w+(?:\.\w+)*/im,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:and|as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:True|False|None)\b/,number:/(?:\b(?=\d)|\B(?=\.))(?:0[bo])?(?:(?:\d|0x[\da-f])[\da-f]*\.?\d*|\.\d+)(?:e[+-]?\d+)?j?\b/i,operator:/[-+%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},Prism.languages.python["string-interpolation"].inside.interpolation.inside.rest=Prism.languages.python,Prism.languages.py=Prism.languages.python; +!function(e){for(var a="/\\*(?:[^*/]|\\*(?!/)|/(?!\\*)|)*\\*/",t=0;t<2;t++)a=a.replace(//g,function(){return a});a=a.replace(//g,function(){return"[^\\s\\S]"}),e.languages.rust={comment:[{pattern:RegExp("(^|[^\\\\])"+a),lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/b?"(?:\\[\s\S]|[^\\"])*"|b?r(#*)"(?:[^"]|"(?!\1))*"\1/,greedy:!0},char:{pattern:/b?'(?:\\(?:x[0-7][\da-fA-F]|u{(?:[\da-fA-F]_*){1,6}|.)|[^\\\r\n\t'])'/,greedy:!0,alias:"string"},attribute:{pattern:/#!?\[(?:[^\[\]"]|"(?:\\[\s\S]|[^\\"])*")*\]/,greedy:!0,alias:"attr-name",inside:{string:null}},"closure-params":{pattern:/([=(,:]\s*|\bmove\s*)\|[^|]*\||\|[^|]*\|(?=\s*(?:\{|->))/,lookbehind:!0,greedy:!0,inside:{"closure-punctuation":{pattern:/^\||\|$/,alias:"punctuation"},rest:null}},"lifetime-annotation":{pattern:/'\w+/,alias:"symbol"},"fragment-specifier":{pattern:/(\$\w+:)[a-z]+/,lookbehind:!0,alias:"punctuation"},variable:/\$\w+/,"function-definition":{pattern:/(\bfn\s+)\w+/,lookbehind:!0,alias:"function"},"type-definition":{pattern:/(\b(?:enum|struct|union)\s+)\w+/,lookbehind:!0,alias:"class-name"},"module-declaration":[{pattern:/(\b(?:crate|mod)\s+)[a-z][a-z_\d]*/,lookbehind:!0,alias:"namespace"},{pattern:/(\b(?:crate|self|super)\s*)::\s*[a-z][a-z_\d]*\b(?:\s*::(?:\s*[a-z][a-z_\d]*\s*::)*)?/,lookbehind:!0,alias:"namespace",inside:{punctuation:/::/}}],keyword:[/\b(?:abstract|as|async|await|become|box|break|const|continue|crate|do|dyn|else|enum|extern|final|fn|for|if|impl|in|let|loop|macro|match|mod|move|mut|override|priv|pub|ref|return|self|Self|static|struct|super|trait|try|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\b/,/\b(?:[ui](?:8|16|32|64|128|size)|f(?:32|64)|bool|char|str)\b/],function:/\b[a-z_]\w*(?=\s*(?:::\s*<|\())/,macro:{pattern:/\w+!/,alias:"property"},constant:/\b[A-Z_][A-Z_\d]+\b/,"class-name":/\b[A-Z]\w*\b/,namespace:{pattern:/(?:\b[a-z][a-z_\d]*\s*::\s*)*\b[a-z][a-z_\d]*\s*::(?!\s*<)/,inside:{punctuation:/::/}},number:/\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(?:\d(?:_?\d)*)?\.?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)(?:_?(?:[iu](?:8|16|32|64|size)?|f32|f64))?\b/,boolean:/\b(?:false|true)\b/,punctuation:/->|\.\.=|\.{1,3}|::|[{}[\];(),:]/,operator:/[-+*\/%!^]=?|=[=>]?|&[&=]?|\|[|=]?|<>?=?|[@?]/},e.languages.rust["closure-params"].inside.rest=e.languages.rust,e.languages.rust.attribute.inside.string=e.languages.rust.string}(Prism); diff --git a/public/docs/vendor/require.min.js b/public/docs/vendor/require.min.js new file mode 100644 index 000000000..651902f21 --- /dev/null +++ b/public/docs/vendor/require.min.js @@ -0,0 +1,37 @@ +/* + RequireJS 2.1.22 Copyright (c) 2010-2015, The Dojo Foundation All Rights Reserved. + Available via the MIT or new BSD license. + see: http://github.com/jrburke/requirejs for details +*/ +var requirejs,require,define; +(function(ha){function L(b){return"[object Function]"===R.call(b)}function M(b){return"[object Array]"===R.call(b)}function x(b,c){if(b){var d;for(d=0;dthis.depCount&&!this.defined){if(L(l)){try{f=h.execCb(c,l,b,f)}catch(d){a=d}this.map.isDefine&&void 0===f&&((b=this.module)?f=b.exports: +this.usingExports&&(f=this.exports));if(a){if(this.events.error&&this.map.isDefine||k.onError!==ia)return a.requireMap=this.map,a.requireModules=this.map.isDefine?[this.map.id]:null,a.requireType=this.map.isDefine?"define":"require",B(this.error=a);if("undefined"!==typeof console&&console.error)console.error(a);else k.onError(a)}}else f=l;this.exports=f;if(this.map.isDefine&&!this.ignore&&(r[c]=f,k.onResourceLoad)){var e=[];x(this.depMaps,function(a){e.push(a.normalizedMap||a)});k.onResourceLoad(h, +this.map,e)}D(c);this.defined=!0}this.defining=!1;this.defined&&!this.defineEmitted&&(this.defineEmitted=!0,this.emit("defined",this.exports),this.defineEmitComplete=!0)}}},callPlugin:function(){var a=this.map,b=a.id,d=q(a.prefix);this.depMaps.push(d);v(d,"defined",y(this,function(f){var l,d,e=g(ga,this.map.id),N=this.map.name,p=this.map.parentMap?this.map.parentMap.name:null,r=h.makeRequire(a.parentMap,{enableBuildCallback:!0});if(this.map.unnormalized){if(f.normalize&&(N=f.normalize(N,function(a){return c(a, +p,!0)})||""),d=q(a.prefix+"!"+N,this.map.parentMap),v(d,"defined",y(this,function(a){this.map.normalizedMap=d;this.init([],function(){return a},null,{enabled:!0,ignore:!0})})),f=g(t,d.id)){this.depMaps.push(d);if(this.events.error)f.on("error",y(this,function(a){this.emit("error",a)}));f.enable()}}else e?(this.map.url=h.nameToUrl(e),this.load()):(l=y(this,function(a){this.init([],function(){return a},null,{enabled:!0})}),l.error=y(this,function(a){this.inited=!0;this.error=a;a.requireModules=[b]; +E(t,function(a){0===a.map.id.indexOf(b+"_unnormalized")&&D(a.map.id)});B(a)}),l.fromText=y(this,function(f,c){var d=a.name,e=q(d),N=T;c&&(f=c);N&&(T=!1);u(e);w(m.config,b)&&(m.config[d]=m.config[b]);try{k.exec(f)}catch(g){return B(G("fromtexteval","fromText eval for "+b+" failed: "+g,g,[b]))}N&&(T=!0);this.depMaps.push(e);h.completeLoad(d);r([d],l)}),f.load(a.name,r,l,m))}));h.enable(d,this);this.pluginMaps[d.id]=d},enable:function(){aa[this.map.id]=this;this.enabling=this.enabled=!0;x(this.depMaps, +y(this,function(a,b){var c,f;if("string"===typeof a){a=q(a,this.map.isDefine?this.map:this.map.parentMap,!1,!this.skipMap);this.depMaps[b]=a;if(c=g(S,a.id)){this.depExports[b]=c(this);return}this.depCount+=1;v(a,"defined",y(this,function(a){this.undefed||(this.defineDep(b,a),this.check())}));this.errback?v(a,"error",y(this,this.errback)):this.events.error&&v(a,"error",y(this,function(a){this.emit("error",a)}))}c=a.id;f=t[c];w(S,c)||!f||f.enabled||h.enable(a,this)}));E(this.pluginMaps,y(this,function(a){var b= +g(t,a.id);b&&!b.enabled&&h.enable(a,this)}));this.enabling=!1;this.check()},on:function(a,b){var c=this.events[a];c||(c=this.events[a]=[]);c.push(b)},emit:function(a,b){x(this.events[a],function(a){a(b)});"error"===a&&delete this.events[a]}};h={config:m,contextName:b,registry:t,defined:r,urlFetched:X,defQueue:H,defQueueMap:{},Module:ea,makeModuleMap:q,nextTick:k.nextTick,onError:B,configure:function(a){a.baseUrl&&"/"!==a.baseUrl.charAt(a.baseUrl.length-1)&&(a.baseUrl+="/");var b=m.shim,c={paths:!0, +bundles:!0,config:!0,map:!0};E(a,function(a,b){c[b]?(m[b]||(m[b]={}),Z(m[b],a,!0,!0)):m[b]=a});a.bundles&&E(a.bundles,function(a,b){x(a,function(a){a!==b&&(ga[a]=b)})});a.shim&&(E(a.shim,function(a,c){M(a)&&(a={deps:a});!a.exports&&!a.init||a.exportsFn||(a.exportsFn=h.makeShimExports(a));b[c]=a}),m.shim=b);a.packages&&x(a.packages,function(a){var b;a="string"===typeof a?{name:a}:a;b=a.name;a.location&&(m.paths[b]=a.location);m.pkgs[b]=a.name+"/"+(a.main||"main").replace(na,"").replace(V,"")});E(t, +function(a,b){a.inited||a.map.unnormalized||(a.map=q(b,null,!0))});(a.deps||a.callback)&&h.require(a.deps||[],a.callback)},makeShimExports:function(a){return function(){var b;a.init&&(b=a.init.apply(ha,arguments));return b||a.exports&&ja(a.exports)}},makeRequire:function(a,n){function e(c,d,g){var m,p;n.enableBuildCallback&&d&&L(d)&&(d.__requireJsBuild=!0);if("string"===typeof c){if(L(d))return B(G("requireargs","Invalid require call"),g);if(a&&w(S,c))return S[c](t[a.id]);if(k.get)return k.get(h, +c,a,e);m=q(c,a,!1,!0);m=m.id;return w(r,m)?r[m]:B(G("notloaded",'Module name "'+m+'" has not been loaded yet for context: '+b+(a?"":". Use require([])")))}Q();h.nextTick(function(){Q();p=u(q(null,a));p.skipMap=n.skipMap;p.init(c,d,g,{enabled:!0});I()});return e}n=n||{};Z(e,{isBrowser:F,toUrl:function(b){var d,e=b.lastIndexOf("."),n=b.split("/")[0];-1!==e&&("."!==n&&".."!==n||1e.attachEvent.toString().indexOf("[native code")||da?(e.addEventListener("load",b.onScriptLoad,!1),e.addEventListener("error",b.onScriptError,!1)):(T=!0,e.attachEvent("onreadystatechange",b.onScriptLoad));e.src=d;Q=e;I?D.insertBefore(e,I):D.appendChild(e);Q=null;return e}if(ka)try{importScripts(d),b.completeLoad(c)}catch(q){b.onError(G("importscripts","importScripts failed for "+ +c+" at "+d,q,[c]))}};F&&!v.skipDataMain&&Y(document.getElementsByTagName("script"),function(b){D||(D=b.parentNode);if(P=b.getAttribute("data-main"))return u=P,v.baseUrl||(J=u.split("/"),u=J.pop(),U=J.length?J.join("/")+"/":"./",v.baseUrl=U),u=u.replace(V,""),k.jsExtRegExp.test(u)&&(u=P),v.deps=v.deps?v.deps.concat(u):[u],!0});define=function(b,c,d){var g,e;"string"!==typeof b&&(d=c,c=b,b=null);M(c)||(d=c,c=null);!c&&L(d)&&(c=[],d.length&&(d.toString().replace(qa,"").replace(ra,function(b,d){c.push(d)}), +c=(1===d.length?["require"]:["require","exports","module"]).concat(c)));T&&(g=Q||pa())&&(b||(b=g.getAttribute("data-requiremodule")),e=K[g.getAttribute("data-requirecontext")]);e?(e.defQueue.push([b,c,d]),e.defQueueMap[b]=!0):W.push([b,c,d])};define.amd={jQuery:!0};k.exec=function(b){return eval(b)};k(v)}})(this); diff --git a/public/docs/vendor/semver.min.js b/public/docs/vendor/semver.min.js new file mode 100644 index 000000000..c2b3ff48d --- /dev/null +++ b/public/docs/vendor/semver.min.js @@ -0,0 +1 @@ +(function(e){if(typeof module==="object"&&module.exports===e)e=module.exports=K;e.SEMVER_SPEC_VERSION="2.0.0";var r=256;var t=Number.MAX_SAFE_INTEGER||9007199254740991;var n=e.re=[];var i=e.src=[];var s=0;var o=s++;i[o]="0|[1-9]\\d*";var a=s++;i[a]="[0-9]+";var f=s++;i[f]="\\d*[a-zA-Z-][a-zA-Z0-9-]*";var u=s++;i[u]="("+i[o]+")\\."+"("+i[o]+")\\."+"("+i[o]+")";var l=s++;i[l]="("+i[a]+")\\."+"("+i[a]+")\\."+"("+i[a]+")";var p=s++;i[p]="(?:"+i[o]+"|"+i[f]+")";var h=s++;i[h]="(?:"+i[a]+"|"+i[f]+")";var c=s++;i[c]="(?:-("+i[p]+"(?:\\."+i[p]+")*))";var v=s++;i[v]="(?:-?("+i[h]+"(?:\\."+i[h]+")*))";var m=s++;i[m]="[0-9A-Za-z-]+";var g=s++;i[g]="(?:\\+("+i[m]+"(?:\\."+i[m]+")*))";var w=s++;var y="v?"+i[u]+i[c]+"?"+i[g]+"?";i[w]="^"+y+"$";var d="[v=\\s]*"+i[l]+i[v]+"?"+i[g]+"?";var j=s++;i[j]="^"+d+"$";var b=s++;i[b]="((?:<|>)?=?)";var E=s++;i[E]=i[a]+"|x|X|\\*";var $=s++;i[$]=i[o]+"|x|X|\\*";var k=s++;i[k]="[v=\\s]*("+i[$]+")"+"(?:\\.("+i[$]+")"+"(?:\\.("+i[$]+")"+"(?:"+i[c]+")?"+i[g]+"?"+")?)?";var R=s++;i[R]="[v=\\s]*("+i[E]+")"+"(?:\\.("+i[E]+")"+"(?:\\.("+i[E]+")"+"(?:"+i[v]+")?"+i[g]+"?"+")?)?";var S=s++;i[S]="^"+i[b]+"\\s*"+i[k]+"$";var x=s++;i[x]="^"+i[b]+"\\s*"+i[R]+"$";var I=s++;i[I]="(?:~>?)";var T=s++;i[T]="(\\s*)"+i[I]+"\\s+";n[T]=new RegExp(i[T],"g");var V="$1~";var A=s++;i[A]="^"+i[I]+i[k]+"$";var C=s++;i[C]="^"+i[I]+i[R]+"$";var M=s++;i[M]="(?:\\^)";var N=s++;i[N]="(\\s*)"+i[M]+"\\s+";n[N]=new RegExp(i[N],"g");var _="$1^";var z=s++;i[z]="^"+i[M]+i[k]+"$";var P=s++;i[P]="^"+i[M]+i[R]+"$";var X=s++;i[X]="^"+i[b]+"\\s*("+d+")$|^$";var Z=s++;i[Z]="^"+i[b]+"\\s*("+y+")$|^$";var q=s++;i[q]="(\\s*)"+i[b]+"\\s*("+d+"|"+i[k]+")";n[q]=new RegExp(i[q],"g");var L="$1$2$3";var F=s++;i[F]="^\\s*("+i[k]+")"+"\\s+-\\s+"+"("+i[k]+")"+"\\s*$";var G=s++;i[G]="^\\s*("+i[R]+")"+"\\s+-\\s+"+"("+i[R]+")"+"\\s*$";var O=s++;i[O]="(<|>)?=?\\s*\\*";for(var B=0;Br)return null;var i=t?n[j]:n[w];if(!i.test(e))return null;try{return new K(e,t)}catch(s){return null}}e.valid=H;function H(e,r){var t=D(e,r);return t?t.version:null}e.clean=J;function J(e,r){var t=D(e.trim().replace(/^[=v]+/,""),r);return t?t.version:null}e.SemVer=K;function K(e,i){if(e instanceof K){if(e.loose===i)return e;else e=e.version}else if(typeof e!=="string"){throw new TypeError("Invalid Version: "+e)}if(e.length>r)throw new TypeError("version is longer than "+r+" characters");if(!(this instanceof K))return new K(e,i);this.loose=i;var s=e.trim().match(i?n[j]:n[w]);if(!s)throw new TypeError("Invalid Version: "+e);this.raw=e;this.major=+s[1];this.minor=+s[2];this.patch=+s[3];if(this.major>t||this.major<0)throw new TypeError("Invalid major version");if(this.minor>t||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>t||this.patch<0)throw new TypeError("Invalid patch version");if(!s[4])this.prerelease=[];else this.prerelease=s[4].split(".").map(function(e){if(/^[0-9]+$/.test(e)){var r=+e;if(r>=0&&r'};K.prototype.toString=function(){return this.version};K.prototype.compare=function(e){if(!(e instanceof K))e=new K(e,this.loose);return this.compareMain(e)||this.comparePre(e)};K.prototype.compareMain=function(e){if(!(e instanceof K))e=new K(e,this.loose);return Y(this.major,e.major)||Y(this.minor,e.minor)||Y(this.patch,e.patch)};K.prototype.comparePre=function(e){if(!(e instanceof K))e=new K(e,this.loose);if(this.prerelease.length&&!e.prerelease.length)return-1;else if(!this.prerelease.length&&e.prerelease.length)return 1;else if(!this.prerelease.length&&!e.prerelease.length)return 0;var r=0;do{var t=this.prerelease[r];var n=e.prerelease[r];if(t===undefined&&n===undefined)return 0;else if(n===undefined)return 1;else if(t===undefined)return-1;else if(t===n)continue;else return Y(t,n)}while(++r)};K.prototype.inc=function(e,r){switch(e){case"premajor":this.prerelease.length=0;this.patch=0;this.minor=0;this.major++;this.inc("pre",r);break;case"preminor":this.prerelease.length=0;this.patch=0;this.minor++;this.inc("pre",r);break;case"prepatch":this.prerelease.length=0;this.inc("patch",r);this.inc("pre",r);break;case"prerelease":if(this.prerelease.length===0)this.inc("patch",r);this.inc("pre",r);break;case"major":if(this.minor!==0||this.patch!==0||this.prerelease.length===0)this.major++;this.minor=0;this.patch=0;this.prerelease=[];break;case"minor":if(this.patch!==0||this.prerelease.length===0)this.minor++;this.patch=0;this.prerelease=[];break;case"patch":if(this.prerelease.length===0)this.patch++;this.prerelease=[];break;case"pre":if(this.prerelease.length===0)this.prerelease=[0];else{var t=this.prerelease.length;while(--t>=0){if(typeof this.prerelease[t]==="number"){this.prerelease[t]++;t=-2}}if(t===-1)this.prerelease.push(0)}if(r){if(this.prerelease[0]===r){if(isNaN(this.prerelease[1]))this.prerelease=[r,0]}else this.prerelease=[r,0]}break;default:throw new Error("invalid increment argument: "+e)}this.format();return this};e.inc=Q;function Q(e,r,t,n){if(typeof t==="string"){n=t;t=undefined}try{return new K(e,t).inc(r,n).version}catch(i){return null}}e.diff=U;function U(e,r){if(pr(e,r)){return null}else{var t=D(e);var n=D(r);if(t.prerelease.length||n.prerelease.length){for(var i in t){if(i==="major"||i==="minor"||i==="patch"){if(t[i]!==n[i]){return"pre"+i}}}return"prerelease"}for(var i in t){if(i==="major"||i==="minor"||i==="patch"){if(t[i]!==n[i]){return i}}}}}e.compareIdentifiers=Y;var W=/^[0-9]+$/;function Y(e,r){var t=W.test(e);var n=W.test(r);if(t&&n){e=+e;r=+r}return t&&!n?-1:n&&!t?1:er?1:0}e.rcompareIdentifiers=er;function er(e,r){return Y(r,e)}e.major=rr;function rr(e,r){return new K(e,r).major}e.minor=tr;function tr(e,r){return new K(e,r).minor}e.patch=nr;function nr(e,r){return new K(e,r).patch}e.compare=ir;function ir(e,r,t){return new K(e,t).compare(r)}e.compareLoose=sr;function sr(e,r){return ir(e,r,true)}e.rcompare=or;function or(e,r,t){return ir(r,e,t)}e.sort=ar;function ar(r,t){return r.sort(function(r,n){return e.compare(r,n,t)})}e.rsort=fr;function fr(r,t){return r.sort(function(r,n){return e.rcompare(r,n,t)})}e.gt=ur;function ur(e,r,t){return ir(e,r,t)>0}e.lt=lr;function lr(e,r,t){return ir(e,r,t)<0}e.eq=pr;function pr(e,r,t){return ir(e,r,t)===0}e.neq=hr;function hr(e,r,t){return ir(e,r,t)!==0}e.gte=cr;function cr(e,r,t){return ir(e,r,t)>=0}e.lte=vr;function vr(e,r,t){return ir(e,r,t)<=0}e.cmp=mr;function mr(e,r,t,n){var i;switch(r){case"===":if(typeof e==="object")e=e.version;if(typeof t==="object")t=t.version;i=e===t;break;case"!==":if(typeof e==="object")e=e.version;if(typeof t==="object")t=t.version;i=e!==t;break;case"":case"=":case"==":i=pr(e,t,n);break;case"!=":i=hr(e,t,n);break;case">":i=ur(e,t,n);break;case">=":i=cr(e,t,n);break;case"<":i=lr(e,t,n);break;case"<=":i=vr(e,t,n);break;default:throw new TypeError("Invalid operator: "+r)}return i}e.Comparator=gr;function gr(e,r){if(e instanceof gr){if(e.loose===r)return e;else e=e.value}if(!(this instanceof gr))return new gr(e,r);this.loose=r;this.parse(e);if(this.semver===wr)this.value="";else this.value=this.operator+this.semver.version}var wr={};gr.prototype.parse=function(e){var r=this.loose?n[X]:n[Z];var t=e.match(r);if(!t)throw new TypeError("Invalid comparator: "+e);this.operator=t[1];if(this.operator==="=")this.operator="";if(!t[2])this.semver=wr;else this.semver=new K(t[2],this.loose)};gr.prototype.inspect=function(){return''};gr.prototype.toString=function(){return this.value};gr.prototype.test=function(e){if(this.semver===wr)return true;if(typeof e==="string")e=new K(e,this.loose);return mr(e,this.operator,this.semver,this.loose)};e.Range=yr;function yr(e,r){if(e instanceof yr&&e.loose===r)return e;if(!(this instanceof yr))return new yr(e,r);this.loose=r;this.raw=e;this.set=e.split(/\s*\|\|\s*/).map(function(e){return this.parseRange(e.trim())},this).filter(function(e){return e.length});if(!this.set.length){throw new TypeError("Invalid SemVer Range: "+e)}this.format()}yr.prototype.inspect=function(){return''};yr.prototype.format=function(){this.range=this.set.map(function(e){return e.join(" ").trim()}).join("||").trim();return this.range};yr.prototype.toString=function(){return this.range};yr.prototype.parseRange=function(e){var r=this.loose;e=e.trim();var t=r?n[G]:n[F];e=e.replace(t,Tr);e=e.replace(n[q],L);e=e.replace(n[T],V);e=e.replace(n[N],_);e=e.split(/\s+/).join(" ");var i=r?n[X]:n[Z];var s=e.split(" ").map(function(e){return jr(e,r)}).join(" ").split(/\s+/);if(this.loose){s=s.filter(function(e){return!!e.match(i)})}s=s.map(function(e){return new gr(e,r)});return s};e.toComparators=dr;function dr(e,r){return new yr(e,r).set.map(function(e){return e.map(function(e){return e.value}).join(" ").trim().split(" ")})}function jr(e,r){e=kr(e,r);e=Er(e,r);e=Sr(e,r);e=Ir(e,r);return e}function br(e){return!e||e.toLowerCase()==="x"||e==="*"}function Er(e,r){return e.trim().split(/\s+/).map(function(e){return $r(e,r)}).join(" ")}function $r(e,r){var t=r?n[C]:n[A];return e.replace(t,function(e,r,t,n,i){var s;if(br(r))s="";else if(br(t))s=">="+r+".0.0 <"+(+r+1)+".0.0";else if(br(n))s=">="+r+"."+t+".0 <"+r+"."+(+t+1)+".0";else if(i){if(i.charAt(0)!=="-")i="-"+i;s=">="+r+"."+t+"."+n+i+" <"+r+"."+(+t+1)+".0"}else s=">="+r+"."+t+"."+n+" <"+r+"."+(+t+1)+".0";return s})}function kr(e,r){return e.trim().split(/\s+/).map(function(e){return Rr(e,r)}).join(" ")}function Rr(e,r){var t=r?n[P]:n[z];return e.replace(t,function(e,r,t,n,i){var s;if(br(r))s="";else if(br(t))s=">="+r+".0.0 <"+(+r+1)+".0.0";else if(br(n)){if(r==="0")s=">="+r+"."+t+".0 <"+r+"."+(+t+1)+".0";else s=">="+r+"."+t+".0 <"+(+r+1)+".0.0"}else if(i){if(i.charAt(0)!=="-")i="-"+i;if(r==="0"){if(t==="0")s=">="+r+"."+t+"."+n+i+" <"+r+"."+t+"."+(+n+1);else s=">="+r+"."+t+"."+n+i+" <"+r+"."+(+t+1)+".0"}else s=">="+r+"."+t+"."+n+i+" <"+(+r+1)+".0.0"}else{if(r==="0"){if(t==="0")s=">="+r+"."+t+"."+n+" <"+r+"."+t+"."+(+n+1);else s=">="+r+"."+t+"."+n+" <"+r+"."+(+t+1)+".0"}else s=">="+r+"."+t+"."+n+" <"+(+r+1)+".0.0"}return s})}function Sr(e,r){return e.split(/\s+/).map(function(e){return xr(e,r)}).join(" ")}function xr(e,r){e=e.trim();var t=r?n[x]:n[S];return e.replace(t,function(e,r,t,n,i,s){var o=br(t);var a=o||br(n);var f=a||br(i);var u=f;if(r==="="&&u)r="";if(o){if(r===">"||r==="<"){e="<0.0.0"}else{e="*"}}else if(r&&u){if(a)n=0;if(f)i=0;if(r===">"){r=">=";if(a){t=+t+1;n=0;i=0}else if(f){n=+n+1;i=0}}else if(r==="<="){r="<";if(a)t=+t+1;else n=+n+1}e=r+t+"."+n+"."+i}else if(a){e=">="+t+".0.0 <"+(+t+1)+".0.0"}else if(f){e=">="+t+"."+n+".0 <"+t+"."+(+n+1)+".0"}return e})}function Ir(e,r){return e.trim().replace(n[O],"")}function Tr(e,r,t,n,i,s,o,a,f,u,l,p,h){if(br(t))r="";else if(br(n))r=">="+t+".0.0";else if(br(i))r=">="+t+"."+n+".0";else r=">="+r;if(br(f))a="";else if(br(u))a="<"+(+f+1)+".0.0";else if(br(l))a="<"+f+"."+(+u+1)+".0";else if(p)a="<="+f+"."+u+"."+l+"-"+p;else a="<="+a;return(r+" "+a).trim()}yr.prototype.test=function(e){if(!e)return false;if(typeof e==="string")e=new K(e,this.loose);for(var r=0;r0){var n=e[t].semver;if(n.major===r.major&&n.minor===r.minor&&n.patch===r.patch)return true}}return false}return true}e.satisfies=Ar;function Ar(e,r,t){try{r=new yr(r,t)}catch(n){return false}return r.test(e)}e.maxSatisfying=Cr;function Cr(e,r,t){return e.filter(function(e){return Ar(e,r,t)}).sort(function(e,r){return or(e,r,t)})[0]||null}e.validRange=Mr;function Mr(e,r){try{return new yr(e,r).range||"*"}catch(t){return null}}e.ltr=Nr;function Nr(e,r,t){return zr(e,r,"<",t)}e.gtr=_r;function _r(e,r,t){return zr(e,r,">",t)}e.outside=zr;function zr(e,r,t,n){e=new K(e,n);r=new yr(r,n);var i,s,o,a,f;switch(t){case">":i=ur;s=vr;o=lr;a=">";f=">=";break;case"<":i=lr;s=cr;o=ur;a="<";f="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(Ar(e,r,n)){return false}for(var u=0;u=b.f?e():a.fonts.load(fa(b.a),b.h).then(function(a){1<=a.length?c():setTimeout(k,25)},function(){e()})}k()}),e=new Promise(function(a,c){setTimeout(c,b.f)});Promise.race([e,c]).then(function(){b.g(b.a)},function(){b.j(b.a)})};function R(a,b,d,c,e,f,g){this.v=a;this.B=b;this.c=d;this.a=c;this.s=g||"BESbswy";this.f={};this.w=e||3E3;this.u=f||null;this.o=this.j=this.h=this.g=null;this.g=new N(this.c,this.s);this.h=new N(this.c,this.s);this.j=new N(this.c,this.s);this.o=new N(this.c,this.s);a=new H(this.a.c+",serif",K(this.a));a=P(a);this.g.a.style.cssText=a;a=new H(this.a.c+",sans-serif",K(this.a));a=P(a);this.h.a.style.cssText=a;a=new H("serif",K(this.a));a=P(a);this.j.a.style.cssText=a;a=new H("sans-serif",K(this.a));a= +P(a);this.o.a.style.cssText=a;O(this.g);O(this.h);O(this.j);O(this.o)}var S={D:"serif",C:"sans-serif"},T=null;function U(){if(null===T){var a=/AppleWebKit\/([0-9]+)(?:\.([0-9]+))/.exec(window.navigator.userAgent);T=!!a&&(536>parseInt(a[1],10)||536===parseInt(a[1],10)&&11>=parseInt(a[2],10))}return T}R.prototype.start=function(){this.f.serif=this.j.a.offsetWidth;this.f["sans-serif"]=this.o.a.offsetWidth;this.A=q();la(this)}; +function ma(a,b,d){for(var c in S)if(S.hasOwnProperty(c)&&b===a.f[S[c]]&&d===a.f[S[c]])return!0;return!1}function la(a){var b=a.g.a.offsetWidth,d=a.h.a.offsetWidth,c;(c=b===a.f.serif&&d===a.f["sans-serif"])||(c=U()&&ma(a,b,d));c?q()-a.A>=a.w?U()&&ma(a,b,d)&&(null===a.u||a.u.hasOwnProperty(a.a.c))?V(a,a.v):V(a,a.B):na(a):V(a,a.v)}function na(a){setTimeout(p(function(){la(this)},a),50)}function V(a,b){setTimeout(p(function(){v(this.g.a);v(this.h.a);v(this.j.a);v(this.o.a);b(this.a)},a),0)};function W(a,b,d){this.c=a;this.a=b;this.f=0;this.o=this.j=!1;this.s=d}var X=null;W.prototype.g=function(a){var b=this.a;b.g&&w(b.f,[b.a.c("wf",a.c,K(a).toString(),"active")],[b.a.c("wf",a.c,K(a).toString(),"loading"),b.a.c("wf",a.c,K(a).toString(),"inactive")]);L(b,"fontactive",a);this.o=!0;oa(this)}; +W.prototype.h=function(a){var b=this.a;if(b.g){var d=y(b.f,b.a.c("wf",a.c,K(a).toString(),"active")),c=[],e=[b.a.c("wf",a.c,K(a).toString(),"loading")];d||c.push(b.a.c("wf",a.c,K(a).toString(),"inactive"));w(b.f,c,e)}L(b,"fontinactive",a);oa(this)};function oa(a){0==--a.f&&a.j&&(a.o?(a=a.a,a.g&&w(a.f,[a.a.c("wf","active")],[a.a.c("wf","loading"),a.a.c("wf","inactive")]),L(a,"active")):M(a.a))};function pa(a){this.j=a;this.a=new ja;this.h=0;this.f=this.g=!0}pa.prototype.load=function(a){this.c=new ca(this.j,a.context||this.j);this.g=!1!==a.events;this.f=!1!==a.classes;qa(this,new ha(this.c,a),a)}; +function ra(a,b,d,c,e){var f=0==--a.h;(a.f||a.g)&&setTimeout(function(){var a=e||null,k=c||null||{};if(0===d.length&&f)M(b.a);else{b.f+=d.length;f&&(b.j=f);var h,m=[];for(h=0;h