From 9a091c5e06c8d380d895a15bb887455d42938c0b Mon Sep 17 00:00:00 2001 From: yixian Date: Sun, 27 Sep 2020 18:49:08 +1000 Subject: [PATCH] document update --- src/document/cn/apidoc.json | 55 - src/document/cn/apis.js | 1220 ---------------- src/document/cn/overview.md | 97 -- src/document/en/apidoc.json | 55 - src/document/en/apis.js | 1234 ----------------- src/document/en/overview.md | 103 -- src/document/openapi/cn/document.yml | 9 + .../openapi/cn/img/UPayCardOrder_CN.jpg | Bin 0 -> 84312 bytes .../openapi/cn/img/UPayCardPreOrder_CN.jpg | Bin 0 -> 86100 bytes src/document/openapi/en/document.yml | 10 + .../openapi/en/img/UPayCardOrder_EN.jpg | Bin 0 -> 99572 bytes .../openapi/en/img/UPayCardPreOrder_EN.jpg | Bin 0 -> 98742 bytes src/document/tpl/css/style.css | 532 ------- src/document/tpl/img/favicon.ico | Bin 894 -> 0 bytes src/document/tpl/index.html | 672 --------- src/document/tpl/locales/ca.js | 25 - src/document/tpl/locales/de.js | 25 - src/document/tpl/locales/es.js | 25 - src/document/tpl/locales/fr.js | 25 - src/document/tpl/locales/it.js | 25 - src/document/tpl/locales/locale.js | 47 - src/document/tpl/locales/nl.js | 25 - src/document/tpl/locales/pl.js | 25 - src/document/tpl/locales/pt_br.js | 25 - src/document/tpl/locales/ru.js | 25 - src/document/tpl/locales/zh.js | 25 - src/document/tpl/locales/zh_cn.js | 25 - src/document/tpl/main.js | 746 ---------- src/document/tpl/utils/handlebars_helper.js | 346 ----- src/document/tpl/utils/send_sample_request.js | 181 --- .../tpl/vendor/bootstrap-responsive.min.css | 9 - src/document/tpl/vendor/bootstrap.min.css | 9 - src/document/tpl/vendor/bootstrap.min.js | 6 - .../tpl/vendor/diff_match_patch.min.js | 49 - src/document/tpl/vendor/handlebars.min.js | 28 - src/document/tpl/vendor/jquery.min.js | 4 - src/document/tpl/vendor/lodash.min.js | 61 - .../tpl/vendor/path-to-regexp/LICENSE | 21 - .../tpl/vendor/path-to-regexp/index.js | 204 --- src/document/tpl/vendor/polyfill.js | 100 -- src/document/tpl/vendor/prettify.css | 101 -- .../tpl/vendor/prettify/lang-apollo.js | 2 - .../tpl/vendor/prettify/lang-basic.js | 3 - src/document/tpl/vendor/prettify/lang-clj.js | 18 - src/document/tpl/vendor/prettify/lang-css.js | 2 - src/document/tpl/vendor/prettify/lang-dart.js | 3 - .../tpl/vendor/prettify/lang-erlang.js | 2 - src/document/tpl/vendor/prettify/lang-go.js | 1 - src/document/tpl/vendor/prettify/lang-hs.js | 2 - src/document/tpl/vendor/prettify/lang-lisp.js | 3 - src/document/tpl/vendor/prettify/lang-llvm.js | 1 - src/document/tpl/vendor/prettify/lang-lua.js | 2 - .../tpl/vendor/prettify/lang-matlab.js | 6 - src/document/tpl/vendor/prettify/lang-ml.js | 2 - .../tpl/vendor/prettify/lang-mumps.js | 2 - src/document/tpl/vendor/prettify/lang-n.js | 4 - .../tpl/vendor/prettify/lang-pascal.js | 3 - .../tpl/vendor/prettify/lang-proto.js | 1 - src/document/tpl/vendor/prettify/lang-r.js | 2 - src/document/tpl/vendor/prettify/lang-rd.js | 1 - .../tpl/vendor/prettify/lang-scala.js | 2 - src/document/tpl/vendor/prettify/lang-sql.js | 2 - src/document/tpl/vendor/prettify/lang-tcl.js | 3 - src/document/tpl/vendor/prettify/lang-tex.js | 1 - src/document/tpl/vendor/prettify/lang-vb.js | 2 - src/document/tpl/vendor/prettify/lang-vhdl.js | 3 - src/document/tpl/vendor/prettify/lang-wiki.js | 2 - src/document/tpl/vendor/prettify/lang-xq.js | 3 - src/document/tpl/vendor/prettify/lang-yaml.js | 2 - src/document/tpl/vendor/prettify/prettify.css | 1 - src/document/tpl/vendor/prettify/prettify.js | 30 - .../tpl/vendor/prettify/run_prettify.js | 34 - src/document/tpl/vendor/require.min.js | 36 - src/document/tpl/vendor/semver.min.js | 1 - src/document/tpl/vendor/webfontloader.js | 17 - 75 files changed, 19 insertions(+), 6354 deletions(-) delete mode 100644 src/document/cn/apidoc.json delete mode 100644 src/document/cn/apis.js delete mode 100644 src/document/cn/overview.md delete mode 100644 src/document/en/apidoc.json delete mode 100644 src/document/en/apis.js delete mode 100644 src/document/en/overview.md create mode 100644 src/document/openapi/cn/img/UPayCardOrder_CN.jpg create mode 100644 src/document/openapi/cn/img/UPayCardPreOrder_CN.jpg create mode 100644 src/document/openapi/en/img/UPayCardOrder_EN.jpg create mode 100644 src/document/openapi/en/img/UPayCardPreOrder_EN.jpg delete mode 100644 src/document/tpl/css/style.css delete mode 100644 src/document/tpl/img/favicon.ico delete mode 100644 src/document/tpl/index.html delete mode 100644 src/document/tpl/locales/ca.js delete mode 100644 src/document/tpl/locales/de.js delete mode 100644 src/document/tpl/locales/es.js delete mode 100644 src/document/tpl/locales/fr.js delete mode 100644 src/document/tpl/locales/it.js delete mode 100644 src/document/tpl/locales/locale.js delete mode 100644 src/document/tpl/locales/nl.js delete mode 100644 src/document/tpl/locales/pl.js delete mode 100644 src/document/tpl/locales/pt_br.js delete mode 100644 src/document/tpl/locales/ru.js delete mode 100644 src/document/tpl/locales/zh.js delete mode 100644 src/document/tpl/locales/zh_cn.js delete mode 100644 src/document/tpl/main.js delete mode 100644 src/document/tpl/utils/handlebars_helper.js delete mode 100644 src/document/tpl/utils/send_sample_request.js delete mode 100644 src/document/tpl/vendor/bootstrap-responsive.min.css delete mode 100644 src/document/tpl/vendor/bootstrap.min.css delete mode 100644 src/document/tpl/vendor/bootstrap.min.js delete mode 100644 src/document/tpl/vendor/diff_match_patch.min.js delete mode 100644 src/document/tpl/vendor/handlebars.min.js delete mode 100644 src/document/tpl/vendor/jquery.min.js delete mode 100644 src/document/tpl/vendor/lodash.min.js delete mode 100644 src/document/tpl/vendor/path-to-regexp/LICENSE delete mode 100644 src/document/tpl/vendor/path-to-regexp/index.js delete mode 100644 src/document/tpl/vendor/polyfill.js delete mode 100644 src/document/tpl/vendor/prettify.css delete mode 100644 src/document/tpl/vendor/prettify/lang-apollo.js delete mode 100644 src/document/tpl/vendor/prettify/lang-basic.js delete mode 100644 src/document/tpl/vendor/prettify/lang-clj.js delete mode 100644 src/document/tpl/vendor/prettify/lang-css.js delete mode 100644 src/document/tpl/vendor/prettify/lang-dart.js delete mode 100644 src/document/tpl/vendor/prettify/lang-erlang.js delete mode 100644 src/document/tpl/vendor/prettify/lang-go.js delete mode 100644 src/document/tpl/vendor/prettify/lang-hs.js delete mode 100644 src/document/tpl/vendor/prettify/lang-lisp.js delete mode 100644 src/document/tpl/vendor/prettify/lang-llvm.js delete mode 100644 src/document/tpl/vendor/prettify/lang-lua.js delete mode 100644 src/document/tpl/vendor/prettify/lang-matlab.js delete mode 100644 src/document/tpl/vendor/prettify/lang-ml.js delete mode 100644 src/document/tpl/vendor/prettify/lang-mumps.js delete mode 100644 src/document/tpl/vendor/prettify/lang-n.js delete mode 100644 src/document/tpl/vendor/prettify/lang-pascal.js delete mode 100644 src/document/tpl/vendor/prettify/lang-proto.js delete mode 100644 src/document/tpl/vendor/prettify/lang-r.js delete mode 100644 src/document/tpl/vendor/prettify/lang-rd.js delete mode 100644 src/document/tpl/vendor/prettify/lang-scala.js delete mode 100644 src/document/tpl/vendor/prettify/lang-sql.js delete mode 100644 src/document/tpl/vendor/prettify/lang-tcl.js delete mode 100644 src/document/tpl/vendor/prettify/lang-tex.js delete mode 100644 src/document/tpl/vendor/prettify/lang-vb.js delete mode 100644 src/document/tpl/vendor/prettify/lang-vhdl.js delete mode 100644 src/document/tpl/vendor/prettify/lang-wiki.js delete mode 100644 src/document/tpl/vendor/prettify/lang-xq.js delete mode 100644 src/document/tpl/vendor/prettify/lang-yaml.js delete mode 100644 src/document/tpl/vendor/prettify/prettify.css delete mode 100644 src/document/tpl/vendor/prettify/prettify.js delete mode 100644 src/document/tpl/vendor/prettify/run_prettify.js delete mode 100644 src/document/tpl/vendor/require.min.js delete mode 100644 src/document/tpl/vendor/semver.min.js delete mode 100644 src/document/tpl/vendor/webfontloader.js diff --git a/src/document/cn/apidoc.json b/src/document/cn/apidoc.json deleted file mode 100644 index c07257310..000000000 --- a/src/document/cn/apidoc.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "name": "RoyalPay网关支付接口", - "version": "1.1.0", - "description": "RoyalPay网关支付第三方开发者对接文档", - "title": "RoyalPay网关支付接口", - "url": "https://mpay.royalpay.com.au", - "header":{ - "title":"Overview", - "filename":"overview.md" - }, - "order":[ - "Overview", - "QRCode", - "NewQRCode", - "NativeQRCode", - "QRCodePay", - "JSApi", - "NewJSAPI", - "WxJSAPIPay", - "AliJSAPIPay", - "MobileH5", - "Miniprogram_Payment", - "NewMobileH5Pay", - "MobileH5Pay", - "CardPayment", - "CardPreOrder", - "CardInputView", - "CardOrder", - "RetailPay", - "RetailMicroPay", - "RetailQRCode", - "JD_Online_Payment", - "Alipay_Online_Payment", - "HF_Online_Payment", - "CB_BankPay", - "SDKPayment", - "Customs_Declaration", - "CommonApi", - "GetExchange", - "OrderStatus", - "RefundOrder", - "RefundQuery", - "ListOrder", - "ListTransaction", - "SettleLog", - "PayNotice", - "update_file", - "application_merchant", - "query_merchant", - "merchant_notice" - ], - "template":{ - "forceLanguage":"zh_cn" - } -} diff --git a/src/document/cn/apis.js b/src/document/cn/apis.js deleted file mode 100644 index f709e6288..000000000 --- a/src/document/cn/apis.js +++ /dev/null @@ -1,1220 +0,0 @@ -/** - * @apiDefine API API - * API接口列表 - */ -/** - * @apiDefine Sign - * @apiParam (QueryParam) {Long} time 必填,UTC毫秒时间戳 - * @apiParam (QueryParam) {String} nonce_str 必填,随机字符串 - * @apiParam (QueryParam) {String} sign 必填,签名 - */ -/** - * @apiDefine PathVariable Path Variable - */ -/** - * @apiDefine QueryParam Query Params - */ -/** - * @apiDefine JSON JSON字段 - */ -/** - * @apiDefine BINARY 文件数据流 - */ -/** - * @apiDefine SUB_JSON JSON子字段 - */ -/** - * @apiDefine COMPANY_SUB_JSON company_info - JSON子字段 - */ -/** - * @apiDefine CONTACT_SUB_JSON contact_info - JSON子字段 - */ -/** - * @apiDefine LEGAL_SUB_JSON legal_info - JSON子字段 - */ -/** - * @apiDefine PAY_SUB_JSON pay_info - JSON子字段 - */ -/** - * @apiDefine SETTLE_SUB_JSON settle_info - JSON子字段 - */ -/** - * @apiDefine COMPLIANCE_SUB_JSON compliance_file_info - JSON子字段 - */ -/** - * @apiDefine ERROR_CODE 错误码 - */ -/** - * @apiDefine GlobalError - * @apiError (ERROR) return_code Error Code - * @apiError (ERROR) return_msg Error Description - * @apiError (ERROR_CODE) SYSTEMERROR 系统内部异常 - * @apiError (ERROR_CODE) INVALID_SHORT_ID 商户编码不合法或没有对应商户 - * @apiError (ERROR_CODE) SIGN_TIMEOUT 签名超时,time字段与服务器时间相差超过5分钟 - * @apiError (ERROR_CODE) INVALID_SIGN 签名错误 - * @apiError (ERROR_CODE) PARAM_INVALID 参数不符合要求,具体细节可参考return_msg字段 - * @apiError (ERROR_CODE) NOT_PERMITTED 未开通网关支付权限 - * @apiError (ERROR_CODE) INVALID_CHANNEL 不合法的支付渠道名称,请检查大小写 - * - */ -/** - * @apiDefine MerchantError - * @apiError (ERROR_CODE) SYSTEMERROR 系统内部异常 - * @apiError (ERROR_CODE) INVALID_SHORT_ID 网关编码不合法或没有对应网关编码 - * @apiError (ERROR_CODE) INVALID_SIGN 签名错误 - * - */ -/** - * @api {GET} /api/v1.0/gateway/partners/{partner_code}/channel_exchange_rate 获取当前汇率 - * @apiName GetExchange - * @apiGroup CommonApi - * @apiVersion 1.0.0 - * @apiDescription - * 获取当前各渠道AUD兑CNY汇率值(1AUD=?CNY),该汇率仅做参考,以实际成交汇率为准 - * @apiHeader Accept application/json - * @apiParam (PathVariable) {String} partner_code 必填,商户编码,由4位大写字母或数字构成 - * @apiUse Sign - * - * @apiSuccess {String} return_code 执行结果 - * @apiSuccess {Double} wechat_rate 微信汇率 - * @apiSuccess {Double} alipay_retail_rate 支付宝线下渠道汇率 - * @apiSuccess {Double} alipay_online_rate 支付宝线上渠道汇率 - * - * @apiUse GlobalError - */ -/** - * @api {PUT} /api/v1.0/gateway/partners/{partner_code}/orders/{order_id} 创建QRCode支付单 - * @apiName NewQRCode - * @apiGroup QRCode - * @apiVersion 1.0.0 - * @apiDescription - * QRCode支付单适用于PC端网页/应用进行支付,用户使用微信/支付宝客户端扫描下单后生成的二维码完成支付。
- *
- * 返回值包括二维码字符串,二维码图片,支付地址,商户可以自行决定直接展示二维码或跳转支付页,跳转支付页需要带上签名信息。 - * 货币类型如果是CNY,注意通过汇率转换后不得低于0.01AUD,否则订单可以创建成功,但支付时会报金额不合法错误 - * @apiHeader Accept application/json - * @apiHeader Content-Type application/json - * @apiParam (PathVariable) {String} partner_code 必填,商户编码,由4位大写字母或数字构成 - * @apiParam (PathVariable) {String} order_id 必填,商户支付订单号,要求同一商户唯一 - * @apiUse Sign - * @apiParam (JSON) {String} description 必填,订单标题(最大长度128字符,超出自动截取) - * @apiParam (JSON) {int} price 必填,金额,单位为货币最小单位,例如使用100表示AUD1.00 - * @apiParam (JSON) {String=AUD,CNY} currency=AUD 币种代码 - * @apiParam (JSON) {String=Alipay,Wechat} channel 支付渠道,大小写敏感 - * @apiParam (JSON) {String} notify_url 支付通知url,详见支付通知api,不填则不会推送支付通知 - * @apiParam (JSON) {String} operator 操作人员标识 - * - * @apiSuccess {String} return_code 执行结果 - * @apiSuccess {String} result_code SUCCESS表示创建订单成功,EXISTS表示订单已存在 - * @apiSuccess {String} channel 支付渠道 - * @apiSuccess {String} partner_code 商户编码 - * @apiSuccess {String} full_name 商户注册全名 - * @apiSuccess {String} partner_name 商户名称 - * @apiSuccess {String} order_id RoyalPay订单ID,同时也是支付渠道订单ID,最终支付成功的订单ID可能不同 - * @apiSuccess {String} partner_order_id 商户订单ID - * @apiSuccess {String} code_url 支付码字符串,商户可以据此自行生产二维码 - * @apiSuccess {String} qrcode_img Base64封装的二维码图片,可直接作为img的src属性 - * @apiSuccess {String} pay_url 跳转URL - * - * @apiUse GlobalError - * @apiError (ERROR_CODE) ORDER_MISMATCH 订单号与商户不匹配 - * @apiError (ERROR_CODE) ORDER_PAID 订单已支付 - * - */ -/** - * @api {PUT} /api/v1.0/gateway/partners/{partner_code}/native_orders/{order_id} 创建Native QRCode支付单 - * @apiName NativeQRCode - * @apiGroup QRCode - * @apiVersion 1.0.0 - * @apiDescription - * QRCode支付单适用于PC端网页/应用进行支付,用户使用微信/支付宝客户端扫描下单后生成的二维码完成支付。
- *
- * 返回值包括二维码字符串,二维码图片,支付地址,商户可以自行决定直接展示二维码或跳转支付页,跳转支付页需要带上签名信息。 - * 货币类型如果是CNY,注意通过汇率转换后不得低于0.01AUD,否则订单可以创建成功,但支付时会报金额不合法错误 - * @apiHeader Accept application/json - * @apiHeader Content-Type application/json - * @apiParam (PathVariable) {String} partner_code 必填,商户编码,由4-6位大写字母或数字构成 - * @apiParam (PathVariable) {String} order_id 必填,商户支付订单号,要求同一商户唯一 - * @apiUse Sign - * @apiParam (JSON) {String} description 必填,订单标题(最大长度128字符,超出自动截取) - * @apiParam (JSON) {int} price 必填,金额,单位为货币最小单位,例如使用100表示1.00 AUD - * @apiParam (JSON) {String=AUD,CNY} currency=AUD 币种代码 - * @apiParam (JSON) {String=Alipay,Wechat} channel 支付渠道,大小写敏感 - * @apiParam (JSON) {String} notify_url 支付通知url,详见支付通知api,不填则不会推送支付通知 - * @apiParam (JSON) {String} operator 操作人员标识 - * - * @apiSuccess {String} return_code 执行结果 - * @apiSuccess {String} result_code SUCCESS表示创建订单成功,EXISTS表示订单已存在 - * @apiSuccess {String} channel 支付渠道 - * @apiSuccess {String} partner_code 商户编码 - * @apiSuccess {String} full_name 商户注册全名 - * @apiSuccess {String} partner_name 商户名称 - * @apiSuccess {String} order_id GlobalFreePay订单ID,同时也是支付渠道订单ID,最终支付成功的订单ID可能不同 - * @apiSuccess {String} partner_order_id 商户订单ID - * @apiSuccess {String} code_url 支付码字符串,商户可以据此自行生产二维码 - * @apiSuccess {String} qrcode_img Base64封装的二维码图片,可直接作为img的src属性 - * @apiSuccess {String} pay_url 跳转URL - * - * @apiUse GlobalError - * @apiError (ERROR_CODE) ORDER_MISMATCH 订单号与商户不匹配 - * @apiError (ERROR_CODE) ORDER_PAID 订单已支付 - * - */ -/** - * @api {GET} /api/v1.0/gateway/partners/{partner_code}/orders/{order_id}/pay QRCode支付跳转页 - * @apiName QRCodePay - * @apiDescription 必须先调用创建QRCode订单接口再进行跳转。 - * 建议在用户回调到对应页时通过后台查询订单状态接口确认订单的支付状态。 - * @apiVersion 1.0.0 - * @apiGroup QRCode - * @apiParam (PathVariable) {String} partner_code 必填,商户编码,由4位大写字母或数字构成 - * @apiParam (PathVariable) {String} order_id 必填,商户支付订单号,要求已预先创建 - * @apiUse Sign - * @apiParam (QueryParam) {String} redirect 必填,支付成功后跳转页面,回调时会带上签名参数用于校验 - * - * @apiUse GlobalError - * @apiError (ERROR_CODE) ORDER_NOT_EXIST 订单不存在 - * @apiError (ERROR_CODE) ORDER_MISMATCH 订单号与商户不匹配 - */ -/** - * @api {PUT} /api/v1.0/h5_payment/partners/{partner_code}/orders/{order_id} 创建H5支付单(仅支持支付宝) - * @apiName NewMobileH5Pay - * @apiGroup MobileH5 - * @apiVersion 1.0.0 - * @apiDescription - * - * H5支付适用场景为移动端App或者手机自带浏览器进行支付,用户下单后浏览器跳转至微信支付页面并自动拉起支付宝客户端完成支付。
- * 返回值包括跳转支付地址,跳转支付页需要带上签名信息。 - * 货币类型如果是CNY,注意通过汇率转换后不得低于0.01AUD,否则订单可以创建成功,但支付时会报金额不合法错误
- * - * @apiHeader Accept application/json - * @apiHeader Content-Type application/json - * @apiParam (PathVariable) {String} partner_code 必填,商户编码,由4位大写字母或数字构成 - * @apiParam (PathVariable) {String} order_id 必填,商户支付订单号,要求同一商户唯一 - * @apiUse Sign - * @apiParam (JSON) {String} description 必填,订单标题(最大长度128字符,超出自动截取) - * @apiParam (JSON) {int} price 必填,金额,单位为货币最小单位,例如使用100表示AUD1.00 - * @apiParam (JSON) {String=AUD,CNY} currency=AUD 币种代码 - * @apiParam (JSON) {String=Alipay} channel 支付渠道,大小写敏感 - * @apiParam (JSON) {String} notify_url 支付通知url,详见支付通知api,不填则不会推送支付通知 - * @apiParam (JSON) {String} operator 操作人员标识 - * - * @apiSuccess {String} return_code 执行结果 - * @apiSuccess {String} result_code SUCCESS表示创建订单成功,EXISTS表示订单已存在 - * @apiSuccess {String} partner_code 商户编码 - * @apiSuccess {String} channel 支付渠道 - * @apiSuccess {String} full_name 商户注册全名 - * @apiSuccess {String} partner_name 商户名称 - * @apiSuccess {String} order_id RoyalPay订单ID,同时也是支付渠道订单ID,最终支付成功的订单ID可能不同 - * @apiSuccess {String} partner_order_id 商户订单ID - * @apiSuccess {String} pay_url 跳转URL - * - * @apiUse GlobalError - * @apiError (ERROR_CODE) ORDER_MISMATCH 订单号与商户不匹配 - * @apiError (ERROR_CODE) ORDER_PAID 订单已支付 - * - */ -/** - * @api {GET} /api/v1.0/h5_payment/partners/{partner_code}/orders/{order_id}/pay H5支付跳转页 - * @apiName MobileH5Pay - * @apiDescription 必须先调用创建H5支付订单接口再进行跳转。 - * 建议在用户回调到对应页时通过后台查询订单状态接口确认订单的支付状态。 - * @apiVersion 1.0.0 - * @apiGroup MobileH5 - * @apiParam (PathVariable) {String} partner_code 必填,商户编码,由4位大写字母或数字构成 - * @apiParam (PathVariable) {String} order_id 必填,商户支付订单号,要求已预先创建 - * @apiUse Sign - * @apiParam (QueryParam) {String} redirect 必填,支付成功后跳转页面,回调时会带上签名参数用于校验 - * - * @apiUse GlobalError - * @apiError (ERROR_CODE) ORDER_NOT_EXIST 订单不存在 - * @apiError (ERROR_CODE) ORDER_MISMATCH 订单号与商户不匹配 - */ -/** - * @api {PUT} /api/v1.0/gateway/partners/{partner_code}/pre_card_orders/{order_id} 创建卡支付预订单 - * @apiName CardPreOrder - * @apiGroup CardPayment - * @apiVersion 1.0.0 - * @apiDescription - * - * 卡支付即消费者输入银行卡信息进行下单的接口,接入卡支付需要额外的合规流程。
- * 卡支付预订单是先下单,然后跳转royalpay支付页由消费者输入卡信息并完成支付
- * 卡支付预订单允许消费者多次尝试输入,因此除非主动关闭订单,订单有效期会一直持续到有效期结束。 - * - * @apiHeader Accept application/json - * @apiHeader Content-Type application/json - * @apiParam (PathVariable) {String} partner_code 必填,商户编码,由4位大写字母或数字构成 - * @apiParam (PathVariable) {String} order_id 必填,商户支付订单号,要求同一商户唯一 - * @apiUse Sign - * @apiParam (JSON) {String} description 必填,订单标题(最大长度128字符,超出自动截取) - * @apiParam (JSON) {int} price 必填,金额,单位为货币最小单位,例如使用100表示AUD1.00 - * @apiParam (JSON) {String=AUD,CNY} currency=AUD 币种代码,卡支付仅支持AUD下单 - * @apiParam (JSON) {String} notify_url 支付通知url,详见支付通知api,不填则不会推送支付通知 - * @apiParam (JSON) {String} operator 操作人员标识 - * @apiParam (JSON) {Boolean} domestic_only 默认为false,是否只允许本国卡。由于境内境外卡支付手续费差异巨大,可在此限制。 - * @apiParam (JSON) {Boolean} disable_credit_card 默认为false,如果希望限制消费者使用信用卡支付可传入true - * @apiParam (JSON) {String} customer_id 可选参数,如果事先进行了tokenize操作可提供customer id,消费者随后仅需输入cvv信息 - * @apiParam (JSON) {JSON} customer 可选参数,提交消费者基本信息,可为charge back发生时提供依据 - * - * @apiParam (customer) {String} name 姓名,可选,如果未提供会自动使用card holder name - * @apiParam (customer) {String} postcode 邮编,可选,4位数字 - * @apiParam (customer) {String} address 地址,可选 - * @apiParam (customer) {String} city 城市,如Sydney - * @apiParam (customer) {String} state 州,可选,三位大写代码,如VIC - * @apiParam (customer) {String} country 国家,可选,ISO-3600-1标准收录的两位国家代码 - * - * @apiSuccess {String} return_code 执行结果 - * @apiSuccess {String} result_code SUCCESS表示创建订单成功,EXISTS表示订单已存在 - * @apiSuccess {String} partner_code 商户编码 - * @apiSuccess {String} channel 支付渠道 - * @apiSuccess {String} full_name 商户注册全名 - * @apiSuccess {String} partner_name 商户名称 - * @apiSuccess {String} order_id RoyalPay订单ID,同时也是支付渠道订单ID,最终支付成功的订单ID可能不同 - * @apiSuccess {String} partner_order_id 商户订单ID - * @apiSuccess {String} pay_url 跳转URL - * - * @apiUse GlobalError - * @apiError (ERROR_CODE) ORDER_MISMATCH 订单号与商户不匹配 - * @apiError (ERROR_CODE) ORDER_PAID 订单已支付 - * - */ -/** - * @api {PUT} /api/v1.0/gateway/partners/{partner_code}/card_orders/{order_id} 创建卡支付订单 - * @apiName CardOrder - * @apiGroup CardPayment - * @apiVersion 1.0.0 - * @apiDescription - * - * 卡支付即消费者输入银行卡信息进行下单的接口,接入卡支付需要额外的合规流程。
- * 卡支付订单需要在商户页面引入js sdk并生成加密卡输入界面,消费者输入卡信息后通过回调将加密后的卡信息返回,商户请求时带上加密卡信息
- * 卡支付下单无需后续消费者交互,直接可查询下单结果 - * - * @apiHeader Accept application/json - * @apiHeader Content-Type application/json - * @apiParam (PathVariable) {String} partner_code 必填,商户编码,由4位大写字母或数字构成 - * @apiParam (PathVariable) {String} order_id 必填,商户支付订单号,要求同一商户唯一 - * @apiUse Sign - * @apiParam (JSON) {String} description 必填,订单标题(最大长度128字符,超出自动截取) - * @apiParam (JSON) {int} price 必填,金额,单位为货币最小单位,例如使用100表示AUD1.00 - * @apiParam (JSON) {String=AUD,CNY} currency=AUD 币种代码,卡支付仅支持AUD下单 - * @apiParam (JSON) {String} notify_url 支付通知url,详见支付通知api,不填则不会推送支付通知 - * @apiParam (JSON) {String} operator 操作人员标识 - * @apiParam (JSON) {Boolean} domestic_only 默认为false,是否只允许本国卡。由于境内境外卡支付手续费差异巨大,可在此限制。 - * @apiParam (JSON) {Boolean} disable_credit_card 默认为false,如果希望限制消费者使用信用卡支付可传入true - * @apiParam (JSON) {String} key_id 必填,加密卡信息key id - * @apiParam (JSON) {String} card_info 必填,加密卡信息secret - * @apiParam (JSON) {JSON} customer 可选参数,提交消费者基本信息,可为charge back发生时提供依据 - * - * @apiParam (customer) {String} name 姓名,可选,如果未提供会自动使用card holder name - * @apiParam (customer) {String} postcode 邮编,可选,4位数字 - * @apiParam (customer) {String} address 地址,可选 - * @apiParam (customer) {String} city 城市,如Sydney - * @apiParam (customer) {String} state 州,可选,三位大写代码,如VIC - * @apiParam (customer) {String} country 国家,可选,ISO-3600-1标准收录的两位国家代码 - * - * @apiSuccess {String} return_code 执行结果 - * @apiSuccess {String} result_code SUCCESS表示创建订单成功,EXISTS表示订单已存在 - * @apiSuccess {String} partner_code 商户编码 - * @apiSuccess {String} channel 支付渠道 - * @apiSuccess {String} full_name 商户注册全名 - * @apiSuccess {String} partner_name 商户名称 - * @apiSuccess {String} order_id RoyalPay订单ID,同时也是支付渠道订单ID,最终支付成功的订单ID可能不同 - * @apiSuccess {String} partner_order_id 商户订单ID - * @apiSuccess {String} pay_url 跳转URL - * - * @apiUse GlobalError - * @apiError (ERROR_CODE) ORDER_MISMATCH 订单号与商户不匹配 - * @apiError (ERROR_CODE) ORDER_PAID 订单已支付 - * - */ -/** - * @api {GET} /api/v1.0/card_payment_view/partners/{partner_code}/orders/{order_id}/view 卡支付跳转页 - * @apiName CardInputView - * @apiDescription 必须先调用创建卡支付预订单接口再进行跳转。优先使用接口返回地址。 - * 建议在用户回调到对应页时通过后台查询订单状态接口确认订单的支付状态。 - * @apiVersion 1.0.0 - * @apiGroup CardPayment - * @apiParam (PathVariable) {String} partner_code 必填,商户编码,由4位大写字母或数字构成 - * @apiParam (PathVariable) {String} order_id 必填,商户支付订单号,要求已预先创建 - * @apiUse Sign - * @apiParam (QueryParam) {String} redirect 必填,支付成功后跳转页面,回调时会带上签名参数用于校验 - * - * @apiUse GlobalError - * @apiError (ERROR_CODE) ORDER_NOT_EXIST 订单不存在 - * @apiError (ERROR_CODE) ORDER_MISMATCH 订单号与商户不匹配 - */ -/** - * @api {PUT} /api/v1.0/jsapi_gateway/partners/{partner_code}/orders/{order_id} 创建JSAPI订单 - * @apiName NewJSAPI - * @apiGroup JSApi - * @apiVersion 1.1.0 - * @apiDescription - * JSAPI适用于在微信/支付宝内打开的网页进行支付,如果用户从微信公众号进入支付页要求公众号已完成认证。用户下单后跳转至RoyalPay订单页,并拉起微信或支付宝内置收银台完成支付
- *
- * 返回值包括支付地址,商户应该引导用户跳转支付页,跳转支付页需要带上签名信息; - * 货币类型如果是CNY,注意通过汇率转换后不得低于0.01AUD,否则订单可以创建成功,但支付时会报金额不合法错误 - * @apiHeader Accept application/json - * @apiHeader Content-Type application/json - * @apiParam (PathVariable) {String} partner_code 必填,商户编码,由4位大写字母或数字构成 - * @apiParam (PathVariable) {String} order_id 必填,商户支付订单号,要求同一商户唯一 - * @apiUse Sign - * @apiParam (JSON) {String} description 必填,订单标题(最大长度128字符,超出自动截取) - * @apiParam (JSON) {int} price 必填,金额,单位为货币最小单位,例如使用100表示AUD1.00 - * @apiParam (JSON) {String=AUD,CNY} currency=AUD 币种代码 - * @apiParam (JSON) {String=Alipay,Wechat} channel 支付渠道,大小写敏感 - * @apiParam (JSON) {String} notify_url 支付通知url,详见支付通知api,不填则不会推送支付通知 - * @apiParam (JSON) {String} operator 操作人员标识 - * - * @apiSuccess {String} return_code 执行结果 - * @apiSuccess {String} result_code SUCCESS表示创建订单成功,EXISTS表示订单已存在 - * @apiSuccess {String} partner_code 商户编码 - * @apiSuccess {String} channel 支付渠道 - * @apiSuccess {String} full_name 商户注册全名 - * @apiSuccess {String} partner_name 商户名称 - * @apiSuccess {String} order_id RoyalPay订单ID,同时也是支付渠道订单ID,最终支付成功的订单ID可能不同 - * @apiSuccess {String} partner_order_id 商户订单ID - * @apiSuccess {String} pay_url 跳转URL - * - * @apiUse GlobalError - * @apiError (ERROR_CODE) ORDER_MISMATCH 订单号与商户不匹配 - * @apiError (ERROR_CODE) ORDER_PAID 订单已支付 - * - */ -/** - * @api {GET} /api/v1.0/wechat_jsapi_gateway/partners/{partner_code}_order_{order_id} 微信JSAPI支付跳转页 - * @apiName WxJSAPIPay - * @apiDescription 必须先调用创建JSAPI订单接口再进行跳转,最终URL以下单api返回的pay_url为准 - * @apiVersion 1.0.0 - * @apiGroup JSApi - * @apiParam (PathVariable) {String} partner_code 必填,商户编码,由4位大写字母或数字构成 - * @apiParam (PathVariable) {String} order_id 必填,商户支付订单号,要求已预先创建 - * @apiUse Sign - * @apiParam (QueryParam) {String} redirect 必填,支付成功后跳转页面 - * @apiParam (QueryParam) {Boolean=true,false} directpay='false' 是否直接支付 - * - * @apiUse GlobalError - * @apiError (ERROR_CODE) ORDER_NOT_EXIST 订单不存在 - * @apiError (ERROR_CODE) ORDER_MISMATCH 订单号与商户不匹配 - */ -/** - * @api {GET} /api/v1.0/gateway/alipay/partners/{partner_code}/orders/{order_id}/app_pay 支付宝JSAPI支付跳转页 - * @apiName AliJSAPIPay - * @apiDescription 必须先调用创建JSAPI订单接口再进行跳转,最终URL以下单api返回的pay_url为准 - * @apiVersion 1.0.0 - * @apiGroup JSApi - * @apiParam (PathVariable) {String} partner_code 必填,商户编码,由4位大写字母或数字构成 - * @apiParam (PathVariable) {String} order_id 必填,商户支付订单号,要求已预先创建 - * @apiUse Sign - * @apiParam (QueryParam) {String} redirect 必填,支付成功后跳转页面 - * @apiParam (QueryParam) {Boolean=true,false} directpay='false' 是否进入页面时立刻支付 - * - * @apiUse GlobalError - * @apiError (ERROR_CODE) ORDER_NOT_EXIST 订单不存在 - * @apiError (ERROR_CODE) ORDER_MISMATCH 订单号与商户不匹配 - */ -/** - * @api {PUT} /api/v1.0/micropay/partners/{partner_code}/orders/{order_id} 创建线下支付订单 - * @apiName RetailMicroPay - * @apiDescription - * 线下支付订单接口用于带有扫码设备的收银终端进行对接,商户输入金额后要求客户出示支付码,用扫码枪扫码后将扫码内容和金额一并提交并完成支付操作。 - * 线下支付订单接口现已兼容微信、支付宝通道
- * - * @apiVersion 1.0.2 - * @apiGroup RetailPay - * - * @apiParam (PathVariable) {String} partner_code 必填,商户编码,由4位大写字母或数字构成 - * @apiParam (PathVariable) {String} order_id 必填,商户支付订单号 - * @apiUse Sign - * @apiParam (JSON) {String} description 必填,订单标题(最大长度128字符,超出自动截取) - * @apiParam (JSON) {int} price 必填,金额,单位为货币最小单位,例如使用100表示AUD1.00 - * @apiParam (JSON) {String=AUD,CNY} currency=AUD 币种代码 - * @apiParam (JSON) {String} device_id 必填,设备ID - * @apiParam (JSON) {String} auth_code 必填,扫描用户微信客户端得到的支付码 - * @apiParam (JSON) {String} notify_url 支付通知url,详见支付通知api,不填则不会推送支付通知 - * - * @apiSuccess {String} return_code 执行结果 - * @apiSuccess {String} result_code - *
    - *
  • PAYING:等待支付
  • - *
  • CREATE_FAIL:订单创建失败
  • - *
  • CLOSED:已关闭
  • - *
  • PAY_FAIL:支付失败
  • - *
  • PAY_SUCCESS:支付成功
  • - *
- * @apiSuccess {String} order_id RoyalPay订单ID,同时也是支付渠道订单ID - * @apiSuccess {String} partner_order_id 商户订单ID - * @apiSuccess {int} total_fee 订单金额,单位是货币最小面值单位 - * @apiSuccess {int} real_fee 实际支付金额,单位是货币最小面值单位(目前等于订单金额,为卡券预留) - * @apiSuccess {String} pay_time 支付时间(yyyy-MM-dd HH:mm:ss,GMT+10) - * @apiSuccess {String} create_time 订单创建时间(最新订单为准)(yyyy-MM-dd HH:mm:ss,GMT+10) - * @apiSuccess {String} currency 币种,通常为AUD - * @apiSuccess {String} channel 支付渠道 Alipay|支付宝、Wechat|微信、Bestpay|翼支付 - * - * @apiUse GlobalError - * @apiError (ERROR_CODE) ORDER_MISMATCH 订单号与商户不匹配 - * @apiError (ERROR_CODE) ORDER_PAID 订单已支付 - * @apiError (ERROR_CODE) AUTHCODEEXPIRE 二维码已过期 - * @apiError (ERROR_CODE) NOTENOUGH 余额不足 - * @apiError (ERROR_CODE) NOTSUPORTCARD 不支持卡类型 - * @apiError (ERROR_CODE) AUTH_CODE_ERROR 二维码被重复提交 - * @apiError (ERROR_CODE) AUTH_CODE_INVALID 不是微信支付二维码 - */ -/** - * @api {PUT} /api/v1.0/retail_qrcode/partners/{partner_code}/orders/{order_id} 创建线下QRCode支付单 - * @apiName RetailQRCode - * @apiGroup RetailPay - * @apiVersion 1.0.2 - * @apiDescription - * 线下QRCode支付用于对接无扫码设备的收银终端,下单后得到二维码地址,自行生成二维码图片后展示在收银终端屏幕上,并由用户使用对应支付客户端进行扫码支付。 - * 线下QRCode现已同时兼容支付宝、微信和翼支付客户端进行支付
- *
- * 货币类型如果是CNY,注意通过汇率转换后不得低于0.01AUD,否则订单可以创建成功,但支付时会报金额不合法错误 - * @apiHeader Accept application/json - * @apiHeader Content-Type application/json - * @apiParam (PathVariable) {String} partner_code 必填,商户编码,由4位大写字母或数字构成 - * @apiParam (PathVariable) {String} order_id 必填,商户支付订单号,要求同一商户唯一 - * @apiUse Sign - * @apiParam (JSON) {String} description 必填,订单标题(最大长度128字符,超出自动截取) - * @apiParam (JSON) {int} price 必填,金额,单位为货币最小单位,例如使用100表示AUD1.00 - * @apiParam (JSON) {String=AUD,CNY} currency=AUD 币种代码 - * @apiParam (JSON) {String} device_id 必填,设备ID - * @apiParam (JSON) {String} notify_url 支付通知url,详见支付通知api,不填则不会推送支付通知 - * @apiParam (JSON) {String} operator 操作人员标识 - * - * @apiSuccess {String} return_code 执行结果 - * @apiSuccess {String} result_code SUCCESS表示创建订单成功,EXISTS表示订单已存在 - * @apiSuccess {String} partner_code 商户编码 - * @apiSuccess {String} full_name 商户注册全名 - * @apiSuccess {String} partner_name 商户名称 - * @apiSuccess {String} order_id RoyalPay订单ID,同时也是支付渠道订单ID,最终支付成功的订单ID可能不同 - * @apiSuccess {String} partner_order_id 商户订单ID - * @apiSuccess {String} code_url 支付码字符串,商户可以据此自行生产二维码 - * - * @apiUse GlobalError - * @apiError (ERROR_CODE) ORDER_MISMATCH 订单号与商户不匹配 - * @apiError (ERROR_CODE) ORDER_PAID 订单已支付 - */ -/** - * @api {GET} /api/v1.0/gateway/partners/{partner_code}/orders/{order_id} 查询订单状态 - * @apiName OrderStatus - * @apiGroup CommonApi - * @apiVersion 1.0.3 - * @apiDescription 查询范围包括QRCode订单、JSAPI订单和线下支付订单 - * @apiHeader Accept application/json - * - * @apiParam (PathVariable) {String} partner_code 必填,商户编码,由4位大写字母或数字构成 - * @apiParam (PathVariable) {String} order_id 必填,商户支付订单号 - * @apiUse Sign - * - * @apiSuccess {String} return_code 执行结果 - * @apiSuccess {String} result_code - *
    - *
  • PAYING:等待支付
  • - *
  • CREATE_FAIL:订单创建失败
  • - *
  • CLOSED:已关闭
  • - *
  • PAY_FAIL:支付失败
  • - *
  • PAY_SUCCESS:支付成功
  • - *
  • PARTIAL_REFUND:部分退款
  • - *
  • FULL_REFUND:全额退款
  • - *
- * 如果需要可以用相同订单号再次发起支付单,支付成功或支付中的无法重复发起订单 - * @apiSuccess {String} order_id RoyalPay订单ID,同时也是支付渠道订单ID,最终支付成功的订单ID可能不同 - * @apiSuccess {String} partner_order_id 商户订单ID - * @apiSuccess {String} channel_order_id 渠道方(支付宝、微信)交易流水号 - * @apiSuccess {int} total_fee 订单金额,单位是货币最小面值单位 - * @apiSuccess {int} real_fee 实际支付金额,单位是货币最小面值单位(目前等于订单金额,为卡券预留) - * @apiSuccess {Double} rate 交易时使用的汇率,1AUD=?CNY - * @apiSuccess {String} pay_time 支付时间(yyyy-MM-dd HH:mm:ss,GMT+10) - * @apiSuccess {String} create_time 订单创建时间(最新订单为准)(yyyy-MM-dd HH:mm:ss,GMT+10) - * @apiSuccess {String} currency 币种,通常为AUD - * @apiSuccess {String} channel 支付渠道 Alipay|支付宝、Wechat|微信、Bestpay|翼支付 - * @apiSuccess {Json} customer_info - *
    - *
  • alipay_user_id:用户id
  • - *
  • alipay_account:用户账号
  • - *
- * 仅支付宝返回该参数,其他渠道为空对象 - * - * @apiUse GlobalError - * @apiError (ERROR_CODE) ORDER_NOT_EXIST 订单不存在 - * @apiError (ERROR_CODE) ORDER_MISMATCH 订单号与商户不匹配 - * - */ -/** - * @api {PUT} /api/v1.0/gateway/partners/{partner_code}/orders/{order_id}/refunds/{refund_id} 申请退款 - * @apiName RefundOrder - * @apiGroup CommonApi - * @apiVersion 1.0.2 - * @apiHeader Accept application/json - * @apiHeader Content-Type application/json - * @apiDescription 一笔支付订单可以分多次退款,退款总金额不得超过实际支付金额,退款币种与支付订单一致 - * @apiParam (PathVariable) {String} partner_code 必填,商户编码,由4位大写字母或数字构成 - * @apiParam (PathVariable) {String} order_id 必填,商户支付订单号 - * @apiParam (PathVariable) {String} refund_id 必填,商户退款单号 - * @apiUse Sign - * @apiParam (JSON) {int} fee 必填,退款金额,单位是货币最小单位,单个订单退款单金额总和不能超过用户支付金额 - * @apiParam (JSON) {String} device_id 可选,设备ID - * - * @apiSuccess {String} return_code 执行结果 - * @apiSuccess {String} result_code - *
    - *
  • WAITING:正在提交
  • - *
  • CREATE_FAILED:提交失败
  • - *
  • SUCCESS:提交成功
  • - *
  • FAILED:退款失败
  • - *
  • FINISHED:退款成功
  • - *
  • CHANGE:退款无法到账,需要人工介入
  • - *
- * @apiSuccess {String} refund_id RoyalPay退款单号 - * @apiSuccess {String} partner_refund_id 商户提交的退款单号 - * @apiSuccess {int} amount 退款金额,单位是货币最小单位 - * @apiSuccess {String} currency 币种,通常为AUD - * - * @apiUse GlobalError - * @apiError (ERROR_CODE) ORDER_NOT_EXIST 订单不存在 - * @apiError (ERROR_CODE) ORDER_MISMATCH 订单号与商户不匹配 - * @apiError (ERROR_CODE) ORDER_NOT_PAID 订单未支付完成,无法退款 - */ -/** - * @api {GET} /api/v1.0/gateway/partners/{partner_code}/orders/{order_id}/refunds/{refund_id} 查询退款状态 - * @apiName RefundQuery - * @apiGroup CommonApi - * @apiVersion 1.0.0 - * @apiHeader Accept application/json - * @apiHeader Content-Type application/json - * - * @apiParam (PathVariable) {String} partner_code 必填,商户编码,由4位大写字母或数字构成 - * @apiParam (PathVariable) {String} order_id 必填,商户支付订单号 - * @apiParam (PathVariable) {String} refund_id 必填,商户退款单号 - * @apiUse Sign - * - * @apiSuccess {String} return_code 执行结果 - * @apiSuccess {String} result_code - *
    - *
  • WAITING:正在提交
  • - *
  • CREATE_FAILED:提交失败
  • - *
  • SUCCESS:提交成功
  • - *
  • FAILED:退款失败
  • - *
  • FINISHED:退款成功
  • - *
  • CHANGE:退款无法到账,需要人工介入
  • - *
- * @apiSuccess {String} refund_id RoyalPay退款单号 - * @apiSuccess {String} partner_refund_id 商户提交的退款单号 - * @apiSuccess {int} amount 退款金额,单位是货币最小单位 - * @apiSuccess {String} currency 币种,通常为AUD - * - * @apiUse GlobalError - * @apiError (ERROR_CODE) ORDER_NOT_EXIST 订单不存在 - * @apiError (ERROR_CODE) ORDER_MISMATCH 订单号与商户不匹配 - * @apiError (ERROR_CODE) ORDER_NOT_PAID 订单未支付完成,无法退款 - * @apiError (ERROR_CODE) REFUND_NOT_EXIST 退款单不存在 - * @apiError (ERROR_CODE) REFUND_MISMATCH 退款单号与支付单不匹配 - */ -/** - * @api {GET} /api/v1.0/gateway/partners/{partner_code}/orders 查看账单 - * @apiName ListOrder - * @apiGroup CommonApi - * @apiVersion 1.0.0 - * @apiHeader Accept application/json - * @apiHeader Content-Type application/json - * @apiParam (PathVariable) {String} partner_code 必填,商户编码,由4位大写字母或数字构成 - * @apiUse Sign - * @apiParam (QueryParam) {String} date 订单创建日期,'yyyyMMdd'格式,GMT+10,不填默认查询所有订单 - * @apiParam (QueryParam) {String='ALL','PAID','REFUNDED'} status='ALL' - * 订单状态 - *
    - *
  • ALL:全部订单,包括未完成订单和已关闭订单
  • - *
  • PAID:只列出支付过的订单,包括存在退款订单
  • - *
  • REFUNDED:只列出存在退款订单
  • - *
- * @apiParam (QueryParam) {int} page=1 页码,从1开始计算 - * @apiParam (QueryParam) {int} limit=10 每页条数 - * - * @apiSuccess (ROOT) {String} return_code 执行结果 - * @apiSuccess (ROOT) {JSON[]} data 订单列表 - * @apiSuccess (ROOT) {JSON} pagination 分页信息 - * @apiSuccess (ROOT) {JSON} analysis 统计信息 - * - * @apiSuccess (data) {String} order_id RoyalPay订单ID - * @apiSuccess (data) {String} partner_order_id 商户订单ID - * @apiSuccess (data) {int} total_fee 订单金额,单位是货币最小单位 - * @apiSuccess (data) {int} real_fee 订单支付金额,单位是货币最小单位 - * @apiSuccess (data) {String} channel 支付渠道 Alipay|支付宝、Wechat|微信、Bestpay|翼支付 - * @apiSuccess (data) {String} currency 币种 - * @apiSuccess (data) {String} create_time 格式'yyyy-MM-dd HH:mm:ss',GMT+10,订单创建时间 - * @apiSuccess (data) {String} pay_time 格式'yyyy-MM-dd HH:mm:ss',GMT+10,支付时间,未支付订单为空 - * @apiSuccess (data) {String} status - * 订单状态 - *
    - *
  • SUBMITTING:提交中
  • - *
  • SUBMIT_FAIL:提交失败
  • - *
  • WAITING_PAYMENT:等待支付
  • - *
  • CLOSED:已关闭
  • - *
  • PAYMENT_FAIL:支付失败
  • - *
  • SUCCESS:支付成功
  • - *
  • PARTIAL_REFUND:部分退款
  • - *
  • FULL_REFUND:全额退款
  • - *
- * @apiSuccess (data) {String} order_body 订单标题 - * @apiSuccess (data) {String} gateway - * 订单模式 - *
    - *
  • Retail In-Store:RoyalPay官方POS线下支付
  • - *
  • QRCODE:商户静态二维码
  • - *
  • Online API:网站QRCode API支付
  • - *
  • WeChat HTML5:JSAPI支付
  • - *
  • Retail API:线下API支付
  • - *
  • Mobile H5:H5 API支付
  • - *
- * @apiSuccess (data) {String} partner_code 商户编码 - * @apiSuccess (data) {String} partner_name 商户名称 - * @apiSuccess (data) {String} refund_fee 当前订单退款金额,货币最小单位 - * - * @apiSuccess (pagination) {int} page 页码 - * @apiSuccess (pagination) {int} limit 每页条数 - * @apiSuccess (pagination) {int} totalCount 总条数 - * @apiSuccess (pagination) {int} totalPages 总页数 - * - * @apiSuccess (analysis) {int} order_count 支付成功订单数(包含有退款订单) - * @apiSuccess (analysis) {int} total_fee 成交订单总额,货币最小单位 - * @apiSuccess (analysis) {int} real_fee 支付总额,货币最小单位 - * - * @apiUse GlobalError - */ - -/** - * @api {GET} /api/v1.0/gateway/partners/{partner_code}/transactions 查看账单流水 - * @apiName ListTransaction - * @apiGroup CommonApi - * @apiVersion 1.0.0 - * @apiDescription 本接口将列出商户当日所有流水,包括所有接口(含非网关接口)支付通道的付款、RoyalPay优惠补贴、退款、 - * 退款失败补正、系统补正、营销账户转入转出等,不含清算信息
- * 注意一笔付款订单或退款订单均可能对应多条流水记录 - * @apiHeader Accept application/json - * @apiHeader Content-Type application/json - * @apiParam (PathVariable) {String} partner_code 必填,商户编码,由4位大写字母或数字构成 - * @apiUse Sign - * @apiParam (QueryParam) {String} date 必填, 账单日期,'yyyyMMdd'格式,GMT+10 - * - * @apiSuccess (ROOT) {String} return_code 执行结果 - * @apiSuccess (ROOT) {String} result_code 业务执行结果 - * @apiSuccess (ROOT) {int} transaction_count 流水总条目 - * @apiSuccess (ROOT) {int} order_count 付款单数 - * @apiSuccess (ROOT) {int} refund_count 退款单数 - * @apiSuccess (ROOT) {JSON[]} transactions 流水列表 - * - * @apiSuccess (transactions) {String} transaction_time 交易时间,格式yyyyMMddHHmmss,GMT+10 - * @apiSuccess (transactions) {String} partner_code 订单关联商户 - * @apiSuccess (transactions) {String} order_id RoyalPay订单ID - * @apiSuccess (transactions) {String} partner_order_id 商户订单ID - * @apiSuccess (transactions) {String} channel_order_id 渠道方(Alipay/Bestpay/Wechat)订单号 - * @apiSuccess (transactions) {String} refund_id RoyalPay退款单ID(仅退款或退款失败补正) - * @apiSuccess (transactions) {String} partner_refund_id 商户系统提交退款ID(仅退款或退款失败补正) - * @apiSuccess (transactions) {String} gateway 下单接口 - *
    - *
  • 0: RoyalPay POS机付款码(扫描客户展示的付款码)
  • - *
  • 1: RoyalPay POS机聚合支付码(客户扫描POS展示的二维码)
  • - *
  • 2: RoyalPay 商户静态码
  • - *
  • 3: QRCode 网关
  • - *
  • 4: JSAPI 网关
  • - *
  • 5: 第三方POS付款码网关
  • - *
  • 6: 第三方POS聚合支付码网关
  • - *
  • 7: RoyalPay 商户静态码(已停用)
  • - *
  • 8: H5网关
  • - *
- * @apiSuccess (transactions) {String} channel 支付渠道 Alipay|支付宝、AlipayOnline|支付宝线上、Wechat|微信、Bestpay|翼支付 - * @apiSuccess (transactions) {String} type 流水类型 - *
    - *
  • Credit: 入账
  • - *
  • Debit: 出账
  • - *
- * @apiSuccess (transactions) {String} currency 币种 - * @apiSuccess (transactions) {int} total_amount 订单总金额,单位是货币最小单位 - * @apiSuccess (transactions) {int} input_amount 订单输入金额,单位是货币最小单位 - * @apiSuccess (transactions) {int} customer_payment_amount 用户实际支付金额,单位是货币最小单位 - * @apiSuccess (transactions) {int} settle_amount 结算金额,币种为AUD,单位是货币最小单位 - * @apiSuccess (transactions) {int} transfer_amount 打款金额(结算金额-手续费-GST),币种为AUD,单位是货币最小单位 - * @apiSuccess (transactions) {int} surcharge 手续费,币种为AUD,单位是货币最小单位 - * @apiSuccess (transactions) {int} gst GST金额,币种为AUD,单位是货币最小单位 - * @apiSuccess (transactions) {double} exchange_rate 使用汇率 - * @apiSuccess (transactions) {String} remark 备注 - * - * @apiUse GlobalError - */ -/** - * @api {GET} /api/v1.0/gateway/partners/{partner_code}/settlements 查看清算详情 - * @apiName SettleLog - * @apiGroup CommonApi - * @apiVersion 1.0.0 - * @apiDescription 本接口将列出商户当日清算的所有流水,包括所有接口(含非网关接口)支付通道的付款、RoyalPay优惠补贴、退款、 - * 退款失败补正、系统补正、营销账户转入转出等
- * 注意一笔付款订单或退款订单均可能对应多条流水记录 - * @apiHeader Accept application/json - * @apiHeader Content-Type application/json - * @apiParam (PathVariable) {String} partner_code 必填,商户编码,由4位大写字母或数字构成 - * @apiUse Sign - * @apiParam (QueryParam) {String} date 必填, 清算日期,'yyyyMMdd'格式,GMT+10 - * - * @apiSuccess (ROOT) {String} return_code 执行结果 - * @apiSuccess (ROOT) {String} result_code 业务执行结果 - * @apiSuccess (ROOT) {String} settle_from 订单起始日期,yyyyMMdd - * @apiSuccess (ROOT) {String} settle_to 订单截止日期,yyyyMMdd - * @apiSuccess (ROOT) {String} settle_days 清算周期(T+n) - * @apiSuccess (ROOT) {int} transaction_count 流水总条目 - * @apiSuccess (ROOT) {int} order_count 付款单数 - * @apiSuccess (ROOT) {int} refund_count 退款单数 - * @apiSuccess (ROOT) {int} total_credit 入账总金额(AUD分) - * @apiSuccess (ROOT) {int} total_debit 支出总金额(AUD分) - * @apiSuccess (ROOT) {int} total_surcharge 手续费总额(AUD分) - * @apiSuccess (ROOT) {int} total_transfer 打款总额(AUD分) - * @apiSuccess (ROOT) {JSON[]} transactions 流水列表 - * - * @apiSuccess (transactions) {String} transaction_time 交易时间,格式yyyyMMddHHmmss,GMT+10 - * @apiSuccess (transactions) {String} partner_code 订单关联商户 - * @apiSuccess (transactions) {String} order_id RoyalPay订单ID - * @apiSuccess (transactions) {String} partner_order_id 商户订单ID - * @apiSuccess (transactions) {String} channel_order_id 渠道方(Alipay/Bestpay/Wechat)订单号 - * @apiSuccess (transactions) {String} refund_id RoyalPay退款单ID(仅退款或退款失败补正) - * @apiSuccess (transactions) {String} partner_refund_id 商户系统提交退款ID(仅退款或退款失败补正) - * @apiSuccess (transactions) {String} gateway 下单接口 - *
    - *
  • 0: RoyalPay POS机付款码(扫描客户展示的付款码)
  • - *
  • 1: RoyalPay POS机聚合支付码(客户扫描POS展示的二维码)
  • - *
  • 2: RoyalPay 商户静态码
  • - *
  • 3: QRCode 网关
  • - *
  • 4: JSAPI 网关
  • - *
  • 5: 第三方POS付款码网关
  • - *
  • 6: 第三方POS聚合支付码网关
  • - *
  • 7: RoyalPay 商户静态码(已停用)
  • - *
  • 8: H5网关
  • - *
- * @apiSuccess (transactions) {String} channel 支付渠道 Alipay|支付宝、AlipayOnline|支付宝线上、Wechat|微信、Bestpay|翼支付 - * @apiSuccess (transactions) {String} type 流水类型 - *
    - *
  • Credit: 入账
  • - *
  • Debit: 出账
  • - *
- * @apiSuccess (transactions) {String} currency 币种 - * @apiSuccess (transactions) {int} total_amount 订单总金额,单位是货币最小单位 - * @apiSuccess (transactions) {int} input_amount 订单输入金额,单位是货币最小单位 - * @apiSuccess (transactions) {int} customer_payment_amount 用户实际支付金额,单位是货币最小单位 - * @apiSuccess (transactions) {int} settle_amount 结算金额,单位是AUD分 - * @apiSuccess (transactions) {String} surcharge_rate 手续费费率(x%) - * @apiSuccess (transactions) {int} surcharge 手续费金额,单位是AUD分 - * @apiSuccess (transactions) {int} gst GST金额,单位是AUD分 - * @apiSuccess (transactions) {int} transfer_amount 打款金额,单位是AUD分 - * @apiSuccess (transactions) {double} exchange_rate 使用汇率 - * @apiSuccess (transactions) {String} remark 备注 - * - * @apiUse GlobalError - */ -/** - * @api {POST} /notify_url 付款通知 - * @apiName PayNotice - * @apiGroup CommonApi - * @apiVersion 1.0.0 - * @apiDescription - * 若订单创建时提供了notify_url,系统会在用户支付成功后向这个地址主动发送支付成功状态推送,请求方式为POST - * 与服务器API不同,推送校验参数会包含在json内,商户系统应该验证校验参数,确定来源正确后再次进行订单接口查询确认订单支付状态再进行后续操作。 - * 商户系统收到请求后应按要求返回参数,若RoyalPay未收到合法参数,视为商户未接收成功,推送动作最多会重试3次,商户系统应当能够处理收到的重复请求 - * - *

建议在收到推送后主动调用查询接口确认支付状态,避免其他第三方伪造推送!!!

- * @apiHeader Accept application/json - * @apiHeader Content-Type application/json - * @apiParam (JSON) {long} time UTC时间戳 - * @apiParam (JSON) {String} nonce_str 随机字符串 - * @apiParam (JSON) {String} sign 签名 - * @apiParam (JSON) {String} partner_order_id 商户订单ID - * @apiParam (JSON) {String} channel_order_id 渠道方(支付宝、微信)交易流水号 - * @apiParam (JSON) {String} order_id RoyalPay订单ID - * @apiParam (JSON) {int} total_fee 订单金额,单位是最小货币单位 - * @apiParam (JSON) {int} real_fee 支付金额,单位是最小货币单位 - * @apiParam (JSON) {Double} rate 交易时使用的汇率,1AUD=?CNY - * @apiParam (JSON) {String} currency 币种,AUD - * @apiParam (JSON) {String} channel 支付渠道 Alipay|支付宝、AlipayOnline|支付宝线上、Wechat|微信、Bestpay|翼支付 - * @apiParam (JSON) {String} create_time 订单创建时间,格式为'yyyy-MM-dd HH:mm:ss',GMT+10 - * @apiParam (JSON) {String} pay_time 订单支付时间,格式为'yyyy-MM-dd HH:mm:ss',GMT+10 - * - * @apiSuccess {String} return_code SUCCESS - */ -/** - * @api {PUT} /api/v1.0/jd_gateway/partners/{partner_code}/orders/{order_id} 创建京东Web订单 - * @apiName JDAPI - * @apiDescription - * 用于PC端京东支付,创建订单后跳转到返回的pay_url(需附加签名参数和redirect参数),随后进入京东支付页面完成支付 - * 该接口仅现仅支持京东支付。
- * - * @apiVersion 1.0.0 - * @apiGroup JD_Online_Payment - * @apiHeader Accept application/json - * @apiHeader Content-Type application/json - * @apiParam (PathVariable) {String} partner_code 必填,商户编码,由4位大写字母或数字构成 - * @apiParam (PathVariable) {String} order_id 必填,商户支付订单号,要求同一商户唯一 - * @apiUse Sign - * @apiParam (JSON) {String} description 必填,订单标题(最大长度128字符,超出自动截取) - * @apiParam (JSON) {String} user_id 必填,商户平台用户的唯一账号 - * @apiParam (JSON) {String} mobile 必填,商户平台用户的手机号 - * @apiParam (JSON) {int} price 必填,金额,单位为货币最小单位,例如使用100表示AUD1.00 - * @apiParam (JSON) {String=AUD,CNY} currency=AUD 币种代码 - * @apiParam (JSON) {String} notify_url 支付通知url,详见支付通知api,不填则不会推送支付通知 - * @apiParam (JSON) {String} operator 操作人员标识 - * - * @apiSuccess {String} return_code 执行结果 - * @apiSuccess {String} result_code SUCCESS表示创建订单成功,EXISTS表示订单已存在 - * @apiSuccess {String} partner_code 商户编码 - * @apiSuccess {String} full_name 商户注册全名 - * @apiSuccess {String} partner_name 商户名称 - * @apiSuccess {String} order_id RoyalPay订单ID,同时也是支付渠道订单ID,最终支付成功的订单ID可能不同 - * @apiSuccess {String} partner_order_id 商户订单ID - * @apiSuccess {String} pay_url 跳转URL - * - * @apiUse GlobalError - * @apiError (ERROR_CODE) ORDER_MISMATCH 订单号与商户不匹配 - * @apiError (ERROR_CODE) ORDER_PAID 订单已支付 - * - */ - -/** - * @api {PUT} /api/v1.0/gateway/partners/{partner_code}/microapp_orders/{order_id} 创建小程序订单 - * @apiName microapp - * @apiDescription - * 接入微信小程序需完成海外主体认证,并且认证主体需要与在RoyalPay开通的商户主体一致。具体如何认证请查看微信公众平台相关文档。 - * 用于小程序中发起支付,创建订单后返回小程序支付所需参数,该接口现仅支持微信小程序。 - * 接入参考文档 - *
- * - * @apiVersion 1.0.0 - * @apiGroup Miniprogram_Payment - * @apiHeader Accept application/json - * @apiHeader Content-Type application/json - * @apiParam (PathVariable) {String} partner_code 必填,商户编码,由4位大写字母或数字构成 - * @apiParam (PathVariable) {String} order_id 必填,商户支付订单号,要求同一商户唯一 - * @apiUse Sign - * @apiParam (JSON) {String} description 必填,订单标题(最大长度128字符,超出自动截取) - * @apiParam (JSON) {int} price 必填,金额,单位为货币最小单位,例如使用100表示AUD1.00 - * @apiParam (JSON) {String=AUD,CNY} currency=AUD 币种代码 - * @apiParam (JSON) {String=Alipay,Wechat} channel=Wechat 支付通道,微信小程序只能调用微信渠道,支付宝小程序只能调用支付宝渠道 - * @apiParam (JSON) {String} notify_url 支付通知url,详见支付通知api,不填则不会推送支付通知 - * @apiParam (JSON) {String} operator 操作人员标识 - * @apiParam (JSON) {String} appid 小程序appid(接入微信小程序必填,支付宝不需要) - * @apiParam (JSON) {String} customer_id 小程序获取的用户id(微信为openid,支付宝为userid) - * - * @apiSuccess {String} return_code 执行结果 - * @apiSuccess {String} result_code SUCCESS表示创建订单成功,EXISTS表示订单已存在 - * @apiSuccess {String} partner_code 商户编码 - * @apiSuccess {String} full_name 商户注册全名 - * @apiSuccess {String} partner_name 商户名称 - * @apiSuccess {String} order_id RoyalPay订单ID,同时也是支付渠道订单ID,最终支付成功的订单ID可能不同 - * @apiSuccess {String} partner_order_id 商户订单ID - * @apiSuccess {String} sdk_params 小程序支付所需参数(Json字符串) - * - * @apiUse GlobalError - * @apiError (ERROR_CODE) ORDER_MISMATCH 订单号与商户不匹配 - * @apiError (ERROR_CODE) ORDER_PAID 订单已支付 - * - */ - - -/** - * @api {PUT} /api/v1.0/alipay/partners/{partner_code}/orders/{order_id} 创建支付宝Web订单 - * @apiName AlipayOnline - * @apiDescription - * 用于PC端支付宝支付,创建订单后跳转到返回的pay_url(需附加签名参数和redirect参数),随后进入支付宝支付页面完成支付 - * 该接口现仅支持支付宝。
- * - * @apiVersion 1.0.0 - * @apiGroup Alipay_Online_Payment - * @apiHeader Accept application/json - * @apiHeader Content-Type application/json - * @apiParam (PathVariable) {String} partner_code 必填,商户编码,由4位大写字母或数字构成 - * @apiParam (PathVariable) {String} order_id 必填,商户支付订单号,要求同一商户唯一 - * @apiUse Sign - * @apiParam (JSON) {String} description 必填,订单标题(最大长度128字符,超出自动截取) - * @apiParam (JSON) {int} price 必填,金额,单位为货币最小单位,例如使用100表示AUD1.00 - * @apiParam (JSON) {String=AUD,CNY} currency=AUD 币种代码 - * @apiParam (JSON) {String} notify_url 支付通知url,详见支付通知api,不填则不会推送支付通知 - * @apiParam (JSON) {String} operator 操作人员标识 - * - * @apiSuccess {String} return_code 执行结果 - * @apiSuccess {String} result_code SUCCESS表示创建订单成功,EXISTS表示订单已存在 - * @apiSuccess {String} partner_code 商户编码 - * @apiSuccess {String} full_name 商户注册全名 - * @apiSuccess {String} partner_name 商户名称 - * @apiSuccess {String} order_id RoyalPay订单ID,同时也是支付渠道订单ID,最终支付成功的订单ID可能不同 - * @apiSuccess {String} partner_order_id 商户订单ID - * @apiSuccess {String} pay_url 跳转URL - * - * @apiUse GlobalError - * @apiError (ERROR_CODE) ORDER_MISMATCH 订单号与商户不匹配 - * @apiError (ERROR_CODE) ORDER_PAID 订单已支付 - * - */ -/** - * @api {PUT} /api/v1.0/gateway/partners/{partner_code}/app_orders/{order_id} 创建SDK订单 - * @apiName SDK - * @apiDescription - * 用于移动端APP调用微信SDK支付,调用API创建订单,得到微信SDK调用参数,将参数传递给SDK拉起微信支付,并由微信客户端直接返回支付结果。 - * 强烈建议获得支付结果后再调用RoyalPay订单查询API确认完成支付后再进行后续流程,避免因超时自动撤单导致资金损失
- *
- * 关于客户端和支付宝整合的更多信息: 支付宝SDK文档
- * 关于客户端和微信整合的更多信息: 微信SDK文档
- * Alipay SDK for Android
- * Alipay SDK for iOS
- * Wechat SDK for Android
- * Wechat SDK for iOS - * - * @apiVersion 1.0.0 - * @apiGroup SDKPayment - * @apiHeader Accept application/json - * @apiHeader Content-Type application/json - * @apiParam (PathVariable) {String} partner_code 必填,商户编码,由4位大写字母或数字构成 - * @apiParam (PathVariable) {String} order_id 必填,商户支付订单号,要求同一商户唯一 - * @apiUse Sign - * @apiParam (JSON) {String} description 必填,订单标题(最大长度128字符,超出自动截取) - * @apiParam (JSON) {int} price 必填,金额,单位为货币最小单位,例如使用100表示AUD1.00 - * @apiParam (JSON) {String=AUD,CNY} currency=AUD 币种代码 - * @apiParam (JSON) {String=Alipay,Wechat} channel 支付渠道,必填,大小写敏感 - * @apiParam (JSON) {String} notify_url 支付通知url,详见支付通知api,不填则不会推送支付通知 - * @apiParam (JSON) {String} operator 操作人员标识 - * @apiParam (JSON) {String=android,iphone,ipad} system 客户端操作系统类型,支付宝通道可选,微信不需要 - * @apiParam (JSON) {String} version 客户端版本号,支付宝通道可选,微信不需要 - * @apiParam (JSON) {String} appid 微信 appid,微信通道要求必填 - * - * @apiSuccess {String} return_code 执行结果 - * @apiSuccess {String} result_code SUCCESS表示创建订单成功,EXISTS表示订单已存在 - * @apiSuccess {String} partner_code 商户编码 - * @apiSuccess {String} full_name 商户注册全名 - * @apiSuccess {String} partner_name 商户名称 - * @apiSuccess {String} order_id RoyalPay订单ID,同时也是支付渠道订单ID,最终支付成功的订单ID可能不同 - * @apiSuccess {String} partner_order_id 商户订单ID - * @apiSuccess {String} sdk_params 调用SDK的参数字符串 - * - * @apiUse GlobalError - * @apiError (ERROR_CODE) ORDER_MISMATCH 订单号与商户不匹配 - * @apiError (ERROR_CODE) ORDER_PAID 订单已支付 - * - */ - -/** - * @api {PUT} /api/v1.0/hf_gateway/partners/{partner_code}/orders/{orderId} 创建汇付Web订单 - * @apiName hfapi - * @apiDescription - * 用于PC端汇付通支付,创建订单后跳转到返回的pay_url,随后进入汇付通支付页面完成支付 - * 该接口仅现仅支持汇付通支付。
- * - * @apiVersion 1.0.0 - * @apiGroup HF_Online_Payment - * @apiHeader Accept application/json - * @apiHeader Content-Type application/json - * @apiParam (PathVariable) {String} partner_code 必填,商户编码,由4位大写字母或数字构成 - * @apiParam (PathVariable) {String} order_id 必填,商户支付订单号,要求同一商户唯一 - * @apiUse Sign - * @apiParam (JSON) {String} description 必填,订单标题(最大长度128字符,超出自动截取) - * @apiParam (JSON) {String} mobile 必填,商户平台用户的手机号 - * @apiParam (JSON) {int} price 必填,金额,单位为货币最小单位,例如使用100表示AUD1.00 - * @apiParam (JSON) {String} product_id 必填,商品类别代码 * 商品类别代码 - * @apiParam (JSON) {String} product_name 必填 商品名称 - * @apiParam (JSON) {String} product_count 商品数量 - * @apiParam (JSON) {String=AUD} currency=AUD 币种代码(当前仅支持AUD) - * @apiParam (JSON) {String} notify_url 支付通知url,详见支付通知api,不填则不会推送支付通知 - * @apiParam (JSON) {String} operator 操作人员标识 - * - * @apiSuccess {String} return_code 执行结果 - * @apiSuccess {String} result_code SUCCESS表示创建订单成功,EXISTS表示订单已存在 - * @apiSuccess {String} partner_code 商户编码 - * @apiSuccess {String} full_name 商户注册全名 - * @apiSuccess {String} partner_name 商户名称 - * @apiSuccess {String} order_id RoyalPay订单ID,同时也是支付渠道订单ID,最终支付成功的订单ID可能不同 - * @apiSuccess {String} partner_order_id 商户订单ID - * @apiSuccess {String} pay_url 跳转URL - * - * @apiUse GlobalError - * @apiError (ERROR_CODE) ORDER_MISMATCH 订单号与商户不匹配 - * @apiError (ERROR_CODE) ORDER_PAID 订单已支付 - * - */ -/** - * @api {PUT} /api/v1.0/cb_bankpay/partners/{partner_code}/orders/{order_id} 创建网银快捷支付订单 - * @apiName cbbankpayapi - * @apiDescription - * 用于PC端网银快捷支付,创建订单后跳转到返回的pay_url,随后进入网银快捷支付页面完成支付 - * - * @apiVersion 1.0.0 - * @apiGroup CB_BankPay - * @apiHeader Accept application/json - * @apiHeader Content-Type application/json - * @apiParam (PathVariable) {String} partner_code 必填,商户编码,由4位大写字母或数字构成 - * @apiParam (PathVariable) {String} order_id 必填,商户支付订单号,要求同一商户唯一 - * @apiUse Sign - * @apiParam (JSON) {String} description 必填,订单标题(最大长度128字符,超出自动截取) - * @apiParam (JSON) {int} price 必填,金额,单位为货币最小单位,例如使用100表示AUD1.00 - * @apiParam (JSON) {String} product_name 必填 商品名称 - * @apiParam (JSON) {int} gateway_type 必填,8:跳转H5网关,9:跳转PC网关 - * @apiParam (JSON) {String=AUD,CNY} currency=AUD 币种代码(若商户选择的通道为拉卡拉则只支持AUD) - * @apiParam (JSON) {String} notify_url 支付通知url,详见支付通知api,不填则不会推送支付通知 - * @apiParam (JSON) {String} operator 操作人员标识 - * - * @apiSuccess {String} return_code 执行结果 - * @apiSuccess {String} result_code SUCCESS表示创建订单成功,EXISTS表示订单已存在 - * @apiSuccess {String} partner_code 商户编码 - * @apiSuccess {String} full_name 商户注册全名 - * @apiSuccess {String} partner_name 商户名称 - * @apiSuccess {String} order_id RoyalPay订单ID,最终支付成功的订单ID可能不同 - * @apiSuccess {String} partner_order_id 商户订单ID - * @apiSuccess {String} channel 支付渠道 - * @apiSuccess {String} pay_url 跳转URL - * - * @apiUse GlobalError - * @apiError (ERROR_CODE) ORDER_MISMATCH 订单号与商户不匹配 - * @apiError (ERROR_CODE) ORDER_PAID 订单已支付 - * - */ -/** - * @api {PUT} /api/v1.0/customs/partners/{partner_code}/declare/report/{client_report_id} 创建报关单 - * @apiName declare_report - * @apiDescription - * 用于商户提交海关需要的订单附件信息。仅支持微信和支付宝,微信只支持一个月内的支付订单进行报关申请。 - * - * @apiVersion 1.0.0 - * @apiGroup Custom - * @apiHeader Accept application/json - * @apiHeader Content-Type application/json - * @apiParam (PathVariable) {String} partner_code 必填,商户编码,由4-6位大写字母或数字构成 - * @apiParam (PathVariable) {String} client_report_id 必填,商户申请报关单号,要求同一商户唯一 - * @apiUse Sign - * @apiParam (JSON) {String} order_id 必填,商户支付订单号,要求同一商户唯一 - * @apiParam (JSON) {String} custom 必填,海关编号 * 渠道海关编号 - * @apiParam (JSON) {String} mch_custom_id 必填,商户在海关备案的编号 - * @apiParam (JSON) {String} mch_custom_name 必填,商户海关备案名称 - * @apiParam (JSON) {JSON[]} sub_order 子订单(拆单) - * - * @apiParam (SUB_JSON) {String} sub_order_no 商户子订单号 - * @apiParam (SUB_JSON) {String=CNY} fee_type=CNY 币种代码 - * @apiParam (SUB_JSON) {Double} order_fee 子订单金额 - * @apiParam (SUB_JSON) {Double} transport_fee 子订单物流金额 - * - * @apiSuccess {String} report_id RoyalPay海关单号 - * @apiSuccess {String} client_report_id 商户申请报关单号 - * @apiSuccess {String} report_status 报关单状态: PROCCESSING,SUBMITED,FAILED,SUCCESS - * @apiSuccess {String} channel 支付渠道 - * @apiSuccess {String} custom 海关编号 - * @apiSuccess {String} mch_custom_no 商户在海关备案的编号 - * @apiSuccess {String} mch_custom_name 商户海关备案名称 - * @apiSuccess {String} order_id RoyalPay订单号 - * @apiSuccess {String} transaction_id 支付渠道订单号 - * @apiSuccess {String} order_currency 币种 - * @apiSuccess {Double} order_amount 订单金额 - * @apiSuccess {String} report_time 报关时间 - * @apiSuccess {String} creation_date 报关单创建时间 - * @apiSuccess {String} last_update_date 更新时间 - * @apiSuccess {String} error_code 错误代码 - * @apiSuccess {String} error_msg 错误返回的信息描述 - * @apiSuccess {String} verify_department 验核机构 - * @apiSuccess {String} verify_department_trade_id 验核机构交易流水号 - * @apiSuccess {JSON[]} sub_orders 拆单信息(可能返回多个) - * - * @apiSuccess (SUB_JSON) {String} sub_order_no 商户子订单号 - * @apiSuccess (SUB_JSON) {String=CNY} fee_type=CNY 币种代码 - * @apiSuccess (SUB_JSON) {Double} order_fee 子订单金额 - * @apiSuccess (SUB_JSON) {Double} transport_fee 子订单物流金额 - * @apiSuccess (SUB_JSON) {String} verify_department 验核机构 - * @apiSuccess (SUB_JSON) {String} verify_department_trade_id 验核机构交易流水号 - * @apiSuccess (SUB_JSON) {String} report_status 报关单状态: PROCCESSING,SUBMITED,FAILED,SUCCESS - * @apiSuccess (SUB_JSON) {String} error_code 错误代码 - * @apiSuccess (SUB_JSON) {String} error_msg 错误返回的信息描述 - * - * @apiUse GlobalError - * @apiError (ERROR_CODE) ORDER_MISMATCH 订单号与商户不匹配 - * - */ - -/** - * @api {PUT} /api/v1.0/customs/partners/{partner_code}/redeclare/report/{client_report_id} 重新提交报关单 - * @apiName redeclare_report - * @apiDescription - * 用于重新提交未报关成功的报关单 - * - * @apiVersion 1.0.0 - * @apiGroup Custom - * @apiHeader Accept application/json - * @apiHeader Content-Type application/json - * @apiParam (PathVariable) {String} partner_code 必填,商户编码,由4-6位大写字母或数字构成 - * @apiParam (PathVariable) {String} client_report_id 必填,商户申请报关单号,要求同一商户唯一 - * @apiUse Sign - * - * @apiSuccess {String} report_id RoyalPay海关单号 - * @apiSuccess {String} client_report_id 商户申请报关单号 - * @apiSuccess {String} report_status 报关单状态: PROCCESSING,SUBMITED,FAILED,SUCCESS - * @apiSuccess {String} channel 支付渠道 - * @apiSuccess {String} custom 海关编号 - * @apiSuccess {String} mch_custom_no 商户在海关备案的编号 - * @apiSuccess {String} mch_custom_name 商户海关备案名称 - * @apiSuccess {String} order_id RoyalPay订单号 - * @apiSuccess {String} transaction_id 支付渠道订单号 - * @apiSuccess {String} order_currency 币种 - * @apiSuccess {Double} order_amount 订单金额 - * @apiSuccess {String} report_time 报关时间 - * @apiSuccess {String} creation_date 报关单创建时间 - * @apiSuccess {String} last_update_date 更新时间 - * @apiSuccess {String} error_code 错误代码 - * @apiSuccess {String} error_msg 错误返回的信息描述 - * @apiSuccess {String} verify_department 验核机构 - * @apiSuccess {String} verify_department_trade_id 验核机构交易流水号 - * @apiSuccess {JSON[]} sub_orders 拆单信息(可能返回多个) - * - * @apiSuccess (SUB_JSON) {String} sub_order_no 商户子订单号 - * @apiSuccess (SUB_JSON) {String=CNY} fee_type=CNY 币种代码 - * @apiSuccess (SUB_JSON) {Double} order_fee 子订单金额 - * @apiSuccess (SUB_JSON) {Double} transport_fee 子订单物流金额 - * @apiSuccess (SUB_JSON) {String} verify_department 验核机构 - * @apiSuccess (SUB_JSON) {String} verify_department_trade_id 验核机构交易流水号 - * @apiSuccess (SUB_JSON) {String} report_status 报关单状态: PROCCESSING,SUBMITED,FAILED,SUCCESS - * @apiSuccess (SUB_JSON) {String} error_code 错误代码 - * @apiSuccess (SUB_JSON) {String} error_msg 错误返回的信息描述 - * - * @apiUse GlobalError - * @apiError (ERROR_CODE) ORDER_MISMATCH 订单号与商户不匹配 - * - */ -/** - * @api {GET} /api/v1.0/customs/partners/{partner_code}/declare/query/{client_report_id} 查询报关单 - * @apiName declare_query - * @apiDescription - * 用于商户查询报关单号的状态。 - * - * @apiVersion 1.0.0 - * @apiGroup Custom - * @apiHeader Accept application/json - * @apiHeader Content-Type application/json - * @apiParam (PathVariable) {String} partner_code 必填,商户编码,由4-6位大写字母或数字构成 - * @apiParam (PathVariable) {String} client_report_id 必填,商户申请报关单号,要求同一商户唯一 - * @apiUse Sign - * - * @apiSuccess {String} return_code 执行结果 - * @apiSuccess {String} report_status 报关单状态: PROCCESSING,SUBMITED,FAILED,SUCCESS - * @apiSuccess {String} report_id RoyalPay海关单号 - * @apiSuccess {String} client_report_id 商户申请报关单号 - * @apiSuccess {String} return_msg 错误描述,仅在执行结果不为SUCCESS情况下出现 - * @apiSuccess {String} order_id RoyalPay订单号 - * @apiSuccess {String} partner_order_id 商户订单ID - * @apiSuccess {String} verify_department 验核机构 - * @apiSuccess {String} verify_department_trade_id 验核机构交易流水号 - * @apiSuccess {JSON[]} sub_orders 拆单信息(可能返回多个) - * - * @apiSuccess (SUB_JSON) {String} sub_order_no 商户子订单号 - * @apiSuccess (SUB_JSON) {String=CNY} fee_type=CNY 币种代码 - * @apiSuccess (SUB_JSON) {Double} order_fee 子订单金额 - * @apiSuccess (SUB_JSON) {Double} transport_fee 子订单物流金额 - * @apiSuccess (SUB_JSON) {String} verify_department 验核机构 - * @apiSuccess (SUB_JSON) {String} verify_department_trade_id 验核机构交易流水号 - * @apiSuccess (SUB_JSON) {String} report_status 报关单状态: PROCCESSING,SUBMITED,FAILED,SUCCESS - * @apiSuccess (SUB_JSON) {String} error_code 错误代码 - * @apiSuccess (SUB_JSON) {String} error_msg 错误返回的信息描述 - * - * @apiUse GlobalError - * @apiError (ERROR_CODE) ORDER_MISMATCH 订单号与商户不匹配 - * - */ -function apis() { - -} diff --git a/src/document/cn/overview.md b/src/document/cn/overview.md deleted file mode 100644 index 0b63621c3..000000000 --- a/src/document/cn/overview.md +++ /dev/null @@ -1,97 +0,0 @@ -# Overview - -## 域名 - -#### 生产环境 -[https://mpay.royalpay.com.au/](https://mpay.royalpay.com.au/) - -## 请求方式和参数格式 - -支付单和退款单提交均为PUT方式,订单查询均为GET方式;包含Request Entity的请求参数格式为json - -除跳转页面外,所有的Accept均为application/json;所有的PUT/POST请求Content-Type为application/json - -系统使用UTF-8字符集 - -参数分为三种:Path Variable/Query Param/JSON entity -+ PathVariable:包含在URI内的参数 -+ Query Param:在URI末尾?后的key=value形式的参数 -+ JSON entity:只在PUT/POST请求中使用 - -所有返回JSON的API,成功访问返回状态值均为200(不论执行结果)。JSON固定包含字段return_code,若值为SUCCESS则表示执行成功; -其他值表示执行失败,此时可查询错误码了解对应的错误类型,此时还会携带return_msg字段作为错误描述信息 - -## 多语言支持 - -系统错误提示支持中文、英文两种语言,默认根据Request Header中的Accept-Language值自动选择,如需调整亦可以添加locale cookie进行指定。 - -## 选择接入API - - - -## 支付宝渠道区分 - -支付宝根据调用接口不同分为线上和线下两个渠道,两个渠道分别使用不同的汇率和手续费费率,为避免混淆在此区分: -+ 线上渠道:包含H5 Mobile、Web支付、APP SDK、JSAPI、QR Code 5种支付方式 -+ 线下渠道:Retail Pay 支付方式 - -相似接口区别 -- JSAPI和H5 Mobile:JSAPI只能在支付宝客户端内访问的页面调起支付,H5可以在移动设备任意浏览器或App的WebView调起支付 -- Web支付和QR Code: Web支付会跳转到支付宝官方收银台,用户可以选择登陆账号或用客户端扫码完成支付;QR Code方式商户可以自行展示创建的二维码,也可以跳转到RoyalPay展示的收银台页面显示二维码,用户只能用支付宝客户端扫码完成支付。 - -## 签名算法 - -每次请求都必须加入签名信息作为请求校验。校验参数全部以Query Param参数的方式附加在URL后面,顺序不分先后。 - -签名过程: -1. 连接生成签名的原始字符串,需要4个参数,使用&连接,无需转码 - -> valid_string=partner_code&time&nonce_str&credential_code - -参数说明: -- partner_code:商户编码,由4位大写字母或数字构成 -- time:UTC毫秒时间戳,取当前UTC时间的毫秒数时间戳,Long类型,5分钟内有效 -- nonce_str:随机字符串,无长度限制,请使用URL安全字符(避开&,=等符号),请注意HTTP URL的最大长度限制,建议长度在10到30位 -- credential_code:系统为商户分配的开发校验码,请妥善保管,不要在公开场合泄露 - -2. 使用SHA256进行签名,并转为Hex小写字符串 -> sign=hex(sha256(valid_string)).toLowerCase() - -3. 在请求中把签名使用的time,nonce_str和生成的sign一同作为Query Param参数发送 -> 案例 -> -> valid_string=RPAY&1468691301081&aaf2a94c8c2d56d5b43a1a3d9d811102&pQ5Jc9eoTcsxqPY5uQ3p2WmvSy0zEYeP -> sign=64712672795f94fa3bfb2e88ac09cb75d09bcf8a3c3dcaa529d8290dd6587060 - -> 测试地址:https://mpay.royalpay.com.au/sign_test.html - -## 币种代码 - -由于微信端限制原因,RoyalPay只接受人民币和澳元两个币种的支付订单 -- AUD:澳元 -- CNY:人民币 - -## 业务规则 -- QRCode支付是在网页上展示二维码,用户使用微信扫一扫扫码后直接进入微信支付页面,适用于商城类web网站; -- JSAPI支付是在微信浏览器内直接跳转到RoyalPay让用户选择支付订单,页面只能在微信客户端打开,适用于微店; -- 创建订单时需要提供订单号,同一个订单允许重复提交,系统会自动根据订单状态判断是否创建新订单并关闭旧订单。因此商户端应该同一个订单只用一个单号,避免重复付款; -- 由于存在自动创建新订单机制,创建订单后返回的RoyalPay单号不代表最终支付的单号; -- QRCode支付订单创建后会直接返回QRCode和pay_url,商户可以自行选择展示支付二维码或跳转至RoyalPay支付页; -- JSAPI支付订单创建后会返回pay_url,商户应该跳转到这个地址让用户完成支付; -- 跳转pay_url时必须加上签名信息; -- 每次请求都应该生成新的签名; -- 订单成功支付后会调用订单中提供的notify_url,详情可以查看API定义;若创建订单时未提供,商户需要在创建订单后轮询订单状态接口,直到订单被支付或过期; -- 订单支付有效期为5分钟,超时可以用相同的订单号重新发起请求,建议重新发起请求的时机为用户再次打开支付页的时候; -- 使用跳转支付页前应该先调用后台服务输入金额等参数创建订单后再跳转; -- 创建订单、创建退款接口都允许同订单号重复调用,但是具体参数以初次请求的参数为准; -- 所有和金额相关的数字均以货币最小面值为单位,以AUD为例,100表示AUD 1.00。 - -## 案例 - -https://example.royalpay.com.au/api/payment/order - - - -## 示例代码 -- PHP: [https://mpay.royalpay.com.au/static/phpdemo.zip](https://mpay.royalpay.com.au/static/phpdemo.zip) -- Java: [https://mpay.royalpay.com.au/static/javademo.zip](https://mpay.royalpay.com.au/static/javademo.zip) \ No newline at end of file diff --git a/src/document/en/apidoc.json b/src/document/en/apidoc.json deleted file mode 100644 index 4039388f3..000000000 --- a/src/document/en/apidoc.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "name": "RoyalPay Gateway Payment API", - "version": "1.1.0", - "description": "RoyalPay Gateway Payment API for Third-Party Developers", - "title": "RoyalPay Gateway Payment API", - "url": "https://mpay.royalpay.com.au", - "header":{ - "title":"Overview", - "filename":"overview.md" - }, - "order":[ - "Overview", - "QRCode", - "NewQRCode", - "NativeQRCode", - "QRCodePay", - "JSApi", - "NewJSAPI", - "WxJSAPIPay", - "AliJSAPIPay", - "MobileH5", - "Miniprogram_Payment", - "NewMobileH5Pay", - "MobileH5Pay", - "CardPayment", - "CardPreOrder", - "CardInputView", - "CardOrder", - "RetailPay", - "RetailMicroPay", - "RetailQRCode", - "JD_Online_Payment", - "Alipay_Online_Payment", - "HF_Online_Payment", - "CB_BankPay", - "SDKPayment", - "Customs_Declaration", - "CommonApi", - "GetExchange", - "OrderStatus", - "RefundOrder", - "RefundQuery", - "ListOrder", - "ListTransaction", - "SettleLog", - "PayNotice", - "update_file", - "application_merchant", - "query_merchant", - "merchant_notice" - ], - "template":{ - "forceLanguage":"en" - } -} diff --git a/src/document/en/apis.js b/src/document/en/apis.js deleted file mode 100644 index 1e0a2d51c..000000000 --- a/src/document/en/apis.js +++ /dev/null @@ -1,1234 +0,0 @@ -/** - * @apiDefine API API - * API List - */ -/** - * @apiDefine Sign - * @apiParam (QueryParam) {Long} time Required, UTC timestamp in milliseconds - * @apiParam (QueryParam) {String} nonce_str Required, Random string - * @apiParam (QueryParam) {String} sign Required, Sign - */ -/** - * @apiDefine PathVariable Path Variable - */ -/** - * @apiDefine QueryParam Query Params - */ -/** - * @apiDefine BINARY File data stream - */ -/** - * @apiDefine JSON JSON keys - */ -/** - * @apiDefine COMPANY_SUB_JSON company_info - JSON child keys - */ -/** - * @apiDefine CONTACT_SUB_JSON contact_info - JSON child keys - */ -/** - * @apiDefine LEGAL_SUB_JSON legal_info - JSON child keys - */ -/** - * @apiDefine PAY_SUB_JSON pay_info - JSON child keys - */ -/** - * @apiDefine SETTLE_SUB_JSON settle_info - JSON child keys - */ -/** - * @apiDefine COMPLIANCE_SUB_JSON compliance_file_info - JSON child keys - */ -/** - * @apiDefine SUB_JSON JSON child keys - */ -/** - * @apiDefine ERROR_CODE Error Code - */ -/** - * @apiDefine GlobalError - * @apiError (ERROR) return_code Error Code - * @apiError (ERROR) return_msg Error Description - * @apiError (ERROR_CODE) SYSTEMERROR Exception inside system - * @apiError (ERROR_CODE) INVALID_SHORT_ID Partner code is invalid or there is no partner associated with this code - * @apiError (ERROR_CODE) SIGN_TIMEOUT Sign expired, the difference between time and the server time is more than 5 minutes - * @apiError (ERROR_CODE) INVALID_SIGN Invalid sign - * @apiError (ERROR_CODE) PARAM_INVALID Parameters are invalid. See return_msg for more details. - * @apiError (ERROR_CODE) NOT_PERMITTED Gateway payment permission has not been enabled for this partner - * @apiError (ERROR_CODE) INVALID_CHANNEL Channel name is not available, check the Capitalize - * - */ -/** - * @apiDefine MerchantError - * @apiError (ERROR_CODE) SYSTEMERROR SYSTEM ERROR - * @apiError (ERROR_CODE) INVALID_SHORT_ID GateWay Short ID is invalid - * @apiError (ERROR_CODE) INVALID_SIGN Sign invalid - * - */ -/** - * @api {GET} /api/v1.0/gateway/partners/{partner_code}/exchange_rate Get Current Exchange Rate - * @apiName GetExchange - * @apiGroup CommonApi - * @apiVersion 1.0.0 - * @apiDescription - * Get current exchange rate from AUD to CNY provided by WeChat and Alipay(AUD 1=CNY ?). This exchange rate shown is for reference only, please refer to the real time exchange rate when processing the actual transaction. - * @apiHeader Accept application/json - * @apiParam (PathVariable) {String} partner_code Required, Partner Code - * @apiUse Sign - * - * @apiSuccess {String} return_code Execution result - * @apiSuccess {Double} wechat_rate Exchange rate for WeChat - * @apiSuccess {Double} alipay_retail_rate Exchange rate for Alipay Retail Trade - * @apiSuccess {Double} alipay_online_rate Exchange rate for Alipay Online Trade - * - * @apiUse GlobalError - */ -/** - * @api {PUT} /api/v1.0/gateway/partners/{partner_code}/orders/{order_id} Create QR Code Payment - * @apiName NewQRCode - * @apiGroup QRCode - * @apiVersion 1.0.0 - * @apiDescription - * QR Code Payment is used for webpage/application on PC. Customers use WeChat or Alipay app to scan QR Code generated when creating order and finish the payment.
- *
- * Return value contains QR Code string, QR Ccode image and payment page address. Partners can decide how to finish the payment. - * If the currency is CNY, equivalent AUD amount shall never less than 0.01AUD, - * otherwise user will get Invalid Amount Error from WeChat when making the payment. - * @apiHeader Accept application/json - * @apiHeader Content-Type application/json - * @apiParam (PathVariable) {String} partner_code Required, Partner Code - * @apiParam (PathVariable) {String} order_id Required, Partner order id. Shall be unique for the same partner. If repeated, order will be recognized as an existing order. - * @apiUse Sign - * @apiParam (JSON) {String} description Required, Description of an order. - * @apiParam (JSON) {int} price Required, Price of the order. Use the base unit of the currency. - * @apiParam (JSON) {String=AUD,CNY} currency=AUD Currency - * @apiParam (JSON) {String=Alipay,Wechat} channel Payment channel, case sensitive - * @apiParam (JSON) {String} notify_url System will call the notify url if provided when the payment succeeds - * @apiParam (JSON) {String} operator Note for the operator who created this order. - * - * @apiSuccess {String} return_code Execution result - * @apiSuccess {String} result_code SUCCESS means order created successfully, EXISTS means order has already existed. - * @apiSuccess {String} channel Payment channel - * @apiSuccess {String} partner_code Partner code - * @apiSuccess {String} full_name Partner's full company name when registered - * @apiSuccess {String} partner_name Partner's name - * @apiSuccess {String} order_id Order id in RoyalPay, which is also payment channel(Wechat/Alipay) order id. The final order id which is paid may be different from this one. - * @apiSuccess {String} partner_order_id Partner order id - * @apiSuccess {String} code_url QR Code string. Partners can create the payment QR Code according to this value. - * @apiSuccess {String} qrcode_img QR Code image formatted in Base64. Can be used as the src attribute on img element - * @apiSuccess {String} pay_url Payment page in RoyalPay - * - * @apiUse GlobalError - * @apiError (ERROR_CODE) ORDER_MISMATCH Order is not belong to this partner. - * @apiError (ERROR_CODE) ORDER_PAID Order has already been paid - * - */ -/** - * @api {PUT} /api/v1.0/gateway/partners/{partner_code}/native_orders/{order_id} Create QR Code Payment - * @apiName NativeQRCode - * @apiGroup QRCode - * @apiVersion 1.0.0 - * @apiDescription - * QR Code Payment is used for webpage/application on PC. Customers use WeChat or Alipay app to scan QR Code generated when creating order and finish the payment.
- *
- * Return value contains QR Code string, QR Ccode image and payment page address. Partners can decide how to finish the payment. - * If the currency is CNY, equivalent AUD amount shall never less than 0.01 AUD, - * otherwise user will get Invalid Amount Error from WeChat when making the payment. - * @apiHeader Accept application/json - * @apiHeader Content-Type application/json - * @apiParam (PathVariable) {String} partner_code Required, Partner Code - * @apiParam (PathVariable) {String} order_id Required, Partner order id. Shall be unique for the same partner. If repeated, order will be recognized as an existing order. - * @apiUse Sign - * @apiParam (JSON) {String} description Required, Description of an order. - * @apiParam (JSON) {int} price Required, Price of the order. Use the base unit of the currency. - * @apiParam (JSON) {String=AUD,CNY} currency=AUD Currency - * @apiParam (JSON) {String=Alipay,Wechat} channel Payment channel, case sensitive - * @apiParam (JSON) {String} notify_url System will call the notify url if provided when the payment succeeds - * @apiParam (JSON) {String} operator Note for the operator who created this order. - * - * @apiSuccess {String} return_code Execution result - * @apiSuccess {String} result_code SUCCESS means order created successfully, EXISTS means order has already existed. - * @apiSuccess {String} channel Payment channel - * @apiSuccess {String} partner_code Partner code - * @apiSuccess {String} full_name Partner's full company name when registered - * @apiSuccess {String} partner_name Partner's name - * @apiSuccess {String} order_id Order id in GlobalFreePay, which is also payment channel(Wechat/Alipay) order id. The final order id which is paid may be different from this one. - * @apiSuccess {String} partner_order_id Partner order id - * @apiSuccess {String} code_url QR Code string. Partners can create the payment QR Code according to this value. - * @apiSuccess {String} qrcode_img QR Code image formatted in Base64. Can be used as the src attribute on img element - * @apiSuccess {String} pay_url Payment page in GlobalFreePay - * - * @apiUse GlobalError - * @apiError (ERROR_CODE) ORDER_MISMATCH Order is not belong to this partner. - * @apiError (ERROR_CODE) ORDER_PAID Order has already been paid - * - */ -/** - * @api {GET} /api/v1.0/gateway/partners/{partner_code}/orders/{order_id}/pay QR Code Payment Page in RoyalPay - * @apiName QRCodePay - * @apiDescription - * This page mush be called after payment order has been created. - * When jumping back to redirection URL, it is recommended to call the order query API to make sure the payment has succeeded. - * @apiVersion 1.0.0 - * @apiGroup QRCode - * @apiParam (PathVariable) {String} partner_code Required, Partner code - * @apiParam (PathVariable) {String} order_id Required, Partner order id. It shall have already been created - * @apiUse Sign - * @apiParam (QueryParam) {String} redirect Required, Redirect url when payment succeeded. Contain sign parameters for validation. - * - * @apiUse GlobalError - * @apiError (ERROR_CODE) ORDER_NOT_EXIST Order does not exist - * @apiError (ERROR_CODE) ORDER_MISMATCH Order is not belong to this partner - */ -/** - * @api {PUT} /api/v1.0/h5_payment/partners/{partner_code}/orders/{order_id} Create H5 Payment(Only support Alipay) - * @apiName NewMobileH5Pay - * @apiGroup MobileH5 - * @apiVersion 1.0.0 - * @apiDescription - * - * Alipay has no limit at the moment.
- * H5 Payment is used for payment in Webpage or App on mobile outside WeChat or Alipay App. The browser would redirect to a webpage from WeChat or Alipay and call the App to finish the payment.
- * Return value contains a payment page. Partners shall guide users to redirect to this page. Sign params are required. - * If the currency is CNY, equivalent AUD amount shall never less than 0.01AUD, - * otherwise user will get Invalid Amount Error from WeChat when making the payment.
- * - * @apiHeader Accept application/json - * @apiHeader Content-Type application/json - * @apiParam (PathVariable) {String} partner_code Required, Partner code - * @apiParam (PathVariable) {String} order_id Required, Partner order id - * @apiUse Sign - * @apiParam (JSON) {String} description Required, Order description - * @apiParam (JSON) {int} price Required, Price of the order. Use the base unit of the currency. - * @apiParam (JSON) {String=AUD,CNY} currency=AUD currency - * @apiParam (JSON) {String=Alipay} channel Payment channel, case sensitive - * @apiParam (JSON) {String} notify_url System will call the notify url if provided when the payment succeeds - * @apiParam (JSON) {String} operator Note for the operator who created this order. - * - * @apiSuccess {String} return_code Execution result - * @apiSuccess {String} result_code SUCCESS means order created successfully, EXISTS means order has already existed. - * @apiSuccess {String} partner_code Partner code - * @apiSuccess {String} channel Payment channel - * @apiSuccess {String} full_name Partner's full company name when registered - * @apiSuccess {String} partner_name Partner's name - * @apiSuccess {String} order_id Order id in RoyalPay, which is also payment channel(Wechat/Alipay) order id. - * @apiSuccess {String} partner_order_id Partner order id - * @apiSuccess {String} pay_url Payment page in RoyalPay. - * - * @apiUse GlobalError - * @apiError (ERROR_CODE) ORDER_MISMATCH Order is not belong to this partner - * @apiError (ERROR_CODE) ORDER_PAID Order has already been paid - * - */ -/** - * @api {GET} /api/v1.0/h5_payment/partners/{partner_code}/orders/{order_id}/pay H5 Payment Page - * @apiName MobileH5Pay - * @apiDescription This page mush be called after payment order has been created. - * When jumping back to redirection URL, it is recommended to call the order query API to make sure the payment has succeeded. - * @apiVersion 1.0.0 - * @apiGroup MobileH5 - * @apiParam (PathVariable) {String} partner_code Required, Partner code - * @apiParam (PathVariable) {String} order_id Required, Partner order id. It shall have already been created - * @apiUse Sign - * @apiParam (QueryParam) {String} redirect Required, Redirect url when payment succeeded. Contain sign parameters for validation. - * - * @apiUse GlobalError - * @apiError (ERROR_CODE) ORDER_NOT_EXIST Order does not exist - * @apiError (ERROR_CODE) ORDER_MISMATCH Order is not belong to this partner - */ -/** - * @api {PUT} /api/v1.0/gateway/partners/{partner_code}/pre_card_orders/{order_id} Create Card Pre Order - * @apiName CardPreOrder - * @apiGroup CardPayment - * @apiVersion 1.0.0 - * @apiDescription - * - * Card payment method is that customer provider their card information to finish payments. Enable card payment require addition compliance process.
- * Card Pre Order is the way merchant create order first and then redirect to the page on royalpay to ask customer input card information and finish payment.
- * Card Pre Order allows customer retry multiple times. So unless merchant call the closing api. Order will exists available until hit the expire time. - * - * @apiHeader Accept application/json - * @apiHeader Content-Type application/json - * @apiParam (PathVariable) {String} partner_code Required, Partner code - * @apiParam (PathVariable) {String} order_id Required, Partner order id - * @apiUse Sign - * @apiParam (JSON) {String} description Required, Order description - * @apiParam (JSON) {int} price Required, Price of the order. Use the base unit of the currency. - * @apiParam (JSON) {String=AUD,CNY} currency=AUD currency, Only AUD supported - * @apiParam (JSON) {String} notify_url System will call the notify url if provided when the payment succeeds - * @apiParam (JSON) {String} operator Note for the operator who created this order. - * @apiParam (JSON) {Boolean} domestic_only Default is false, Due to there is a huge rate difference between domestic cards and international cards. merchants can disable international cards - * @apiParam (JSON) {Boolean} disable_credit_card Default is false, if merchants want to limit customers not using credit cards. this parameter can be helpful - * @apiParam (JSON) {String} customer_id Optional, if merchants tokenized customer's card with a customer id, it can reference the card information and customers will only provide cvv2 code then. - * @apiParam (JSON) {JSON} customer Optional, json object, provide customer's basic information in case there were a charge back happened - * - * @apiParam (customer) {String} name customer's name. optional. if not provided system will use card holder name - * @apiParam (customer) {String} postcode optional - * @apiParam (customer) {String} address optional - * @apiParam (customer) {String} city optional,like Sydney - * @apiParam (customer) {String} state optional, 3-character state name. like NSW - * @apiParam (customer) {String} country optional, nation code, use 2-character code in ISO-3600-1 - * - * @apiSuccess {String} return_code Execution result - * @apiSuccess {String} result_code SUCCESS means order created successfully, EXISTS means order has already existed. - * @apiSuccess {String} partner_code Partner code - * @apiSuccess {String} channel Payment channel - * @apiSuccess {String} full_name Partner's full company name when registered - * @apiSuccess {String} partner_name Partner's name - * @apiSuccess {String} order_id Order id in RoyalPay, which is also payment channel(Wechat/Alipay) order id. - * @apiSuccess {String} partner_order_id Partner order id - * @apiSuccess {String} pay_url Payment page in RoyalPay. - * - * @apiUse GlobalError - * @apiError (ERROR_CODE) ORDER_MISMATCH Order is not belong to this partner - * @apiError (ERROR_CODE) ORDER_PAID Order has already been paid - * - */ -/** - * @api {PUT} /api/v1.0/gateway/partners/{partner_code}/card_orders/{order_id} 创建卡支付订单 - * @apiName CardOrder - * @apiGroup CardPayment - * @apiVersion 1.0.0 - * @apiDescription - * - * Card payment method is that customer provider their card information to finish payments. Enable card payment require addition compliance process.
- * Card Order is the way merchant import our sdk in payment page and display a encrypting card input view. then collect the encrypted card info from callback and then pass them to royalpay to create order and finish payments
- * Card Order api do not need customers reaction any more. merchants can check payment result directly after created order. - * - * @apiHeader Accept application/json - * @apiHeader Content-Type application/json - * @apiParam (PathVariable) {String} partner_code Required, Partner code - * @apiParam (PathVariable) {String} order_id Required, Partner order id - * @apiUse Sign - * @apiParam (JSON) {String} description Required, Order description - * @apiParam (JSON) {int} price Required, Price of the order. Use the base unit of the currency. - * @apiParam (JSON) {String=AUD,CNY} currency=AUD currency, Only AUD supported - * @apiParam (JSON) {String} notify_url System will call the notify url if provided when the payment succeeds - * @apiParam (JSON) {String} operator Note for the operator who created this order. - * @apiParam (JSON) {String} key_id Required, key_id of encrypted callback - * @apiParam (JSON) {String} card_info Required, secret of encrypted callback - * @apiParam (JSON) {Boolean} domestic_only Default is false, Due to there is a huge rate difference between domestic cards and international cards. merchants can disable international cards - * @apiParam (JSON) {Boolean} disable_credit_card Default is false, if merchants want to limit customers not using credit cards. this parameter can be helpful - * @apiParam (JSON) {JSON} customer Optional, json object, provide customer's basic information in case there were a charge back happened - * - * @apiParam (customer) {String} name customer's name. optional. if not provided system will use card holder name - * @apiParam (customer) {String} postcode optional - * @apiParam (customer) {String} address optional - * @apiParam (customer) {String} city optional,like Sydney - * @apiParam (customer) {String} state optional, 3-character state name. like NSW - * @apiParam (customer) {String} country optional, nation code, use 2-character code in ISO-3600-1 - * - * @apiSuccess {String} return_code Execution result - * @apiSuccess {String} result_code SUCCESS means order created successfully, EXISTS means order has already existed. - * @apiSuccess {String} partner_code Partner code - * @apiSuccess {String} channel Payment channel - * @apiSuccess {String} full_name Partner's full company name when registered - * @apiSuccess {String} partner_name Partner's name - * @apiSuccess {String} order_id Order id in RoyalPay, which is also payment channel(Wechat/Alipay) order id. - * @apiSuccess {String} partner_order_id Partner order id - * @apiSuccess {String} pay_url Payment page in RoyalPay. - * - * @apiUse GlobalError - * @apiError (ERROR_CODE) ORDER_MISMATCH Order is not belong to this partner - * @apiError (ERROR_CODE) ORDER_PAID Order has already been paid - * - */ -/** - * @api {GET} /api/v1.0/card_payment_view/partners/{partner_code}/orders/{order_id}/view 卡支付跳转页 - * @apiName CardInputView - * @apiDescription This page mush be called after payment order has been created. - * When jumping back to redirection URL, it is recommended to call the order query API to make sure the payment has succeeded. - * @apiVersion 1.0.0 - * @apiGroup CardPayment - * @apiParam (PathVariable) {String} partner_code Required, Partner code - * @apiParam (PathVariable) {String} order_id Required, Partner order id. It shall have already been created - * @apiUse Sign - * @apiParam (QueryParam) {String} redirect Required, Redirect url when payment succeeded. Contain sign parameters for validation. - * - * @apiUse GlobalError - * @apiError (ERROR_CODE) ORDER_NOT_EXIST Order does not exist - * @apiError (ERROR_CODE) ORDER_MISMATCH Order is not belong to this partner - */ -/** - * @api {PUT} /api/v1.0/jsapi_gateway/partners/{partner_code}/orders/{order_id} Create JSAPI Payment Order - * @apiName NewJSAPI - * @apiGroup JSApi - * @apiVersion 1.1.0 - * @apiDescription - * JSAPI Payment is used to pay in webpage which was opened in WeChat or Alipay App. If customers enter this page from WeChat Official Account, this Official Account is required to be authorized. - * Customers will jump to RoyalPay order page and call WeChat or Alipay Payment Board to finish payment.
- *
- * Return value contains a payment page. Partners shall guide users to redirect to the page. Sign params is required when redirect happens. - * If the currency is CNY, equivalent AUD amount shall never less than 0.01AUD, - * otherwise user will get Invalid Amount Error from WeChat when making the payment. - * @apiHeader Accept application/json - * @apiHeader Content-Type application/json - * @apiParam (PathVariable) {String} partner_code Required, Partner code - * @apiParam (PathVariable) {String} order_id Required, Partner order id - * @apiUse Sign - * @apiParam (JSON) {String} description Required, Order description - * @apiParam (JSON) {int} price Required, Price of the order. Use the base unit of the currency. - * @apiParam (JSON) {String=AUD,CNY} currency=AUD currency - * @apiParam (JSON) {String=Alipay,Wechat} channel Payment channel, case sensitive - * @apiParam (JSON) {String} notify_url System will call the notify url if provided when the payment succeeds - * @apiParam (JSON) {String} operator Note for the operator who created this order. - * - * @apiSuccess {String} return_code Execution result - * @apiSuccess {String} result_code SUCCESS means order created successfully, EXISTS means order has already existed. - * @apiSuccess {String} partner_code Partner code - * @apiSuccess {String} channel Payment Channel - * @apiSuccess {String} full_name Partner's full company name when registered - * @apiSuccess {String} partner_name Partner's name - * @apiSuccess {String} order_id Order id in RoyalPay, which is also payment channel(Wechat/Alipay) order id. The final order id which is paid may be different from this one - * @apiSuccess {String} partner_order_id Partner order id - * @apiSuccess {String} pay_url Payment page in RoyalPay. Can only be accessed through WeChat - * - * @apiUse GlobalError - * @apiError (ERROR_CODE) ORDER_MISMATCH Order is not belong to this partner - * @apiError (ERROR_CODE) ORDER_PAID Order has already been paid - * - */ -/** - * @api {GET} /api/v1.0/wechat_jsapi_gateway/partners/{partner_code}_order_{order_id} WeChat JSAPI Payment Page in RoyalPay - * @apiName WxJSAPIPay - * @apiDescription This page must be called after Payment Order has been created. Actural url shall be according to pay_url param from order creation - * @apiVersion 1.0.0 - * @apiGroup JSApi - * @apiParam (PathVariable) {String} partner_code Required, Partner code - * @apiParam (PathVariable) {String} order_id Required, Partner order id. Must have already been created - * @apiUse Sign - * @apiParam (QueryParam) {String} redirect Required, Redirect url when the payment succeeded - * @apiParam (QueryParam) {Boolean=true,false} directpay='false' whether open direct pay mode. - * - * @apiUse GlobalError - * @apiError (ERROR_CODE) ORDER_NOT_EXIST Order does not exist - * @apiError (ERROR_CODE) ORDER_MISMATCH Order is not belong to this partner - */ -/** - * @api {GET} /api/v1.0/gateway/alipay/partners/{partner_code}/orders/{order_id}/app_pay Alipay JSAPI Payment Page in RoyalPay - * @apiName AliJSAPIPay - * @apiDescription This page must be called after Payment Order has been created. Actural url shall be according to pay_url param from order creation - * @apiVersion 1.0.0 - * @apiGroup JSApi - * @apiParam (PathVariable) {String} partner_code Required, Partner code - * @apiParam (PathVariable) {String} order_id Required, Partner order id. Must have already been created - * @apiUse Sign - * @apiParam (QueryParam) {String} redirect Required, Redirect url when the payment succeeded - * @apiParam (QueryParam) {Boolean=true,false} directpay='false' whether open direct pay mode. - * - * @apiUse GlobalError - * @apiError (ERROR_CODE) ORDER_NOT_EXIST Order does not exist - * @apiError (ERROR_CODE) ORDER_MISMATCH Order is not belong to this partner - */ -/** - * @api {PUT} /api/v1.0/micropay/partners/{partner_code}/orders/{order_id} Create Retail Passive Payment Order - * @apiName RetailMicroPay - * @apiDescription - * Retail Passive Payment is used for cashier terminals which can scan BarCode or QRCode. - * Shop staff input the payment amount and ask customers for their payment code, then system send price and payment code to server and finish the payment. - * Retail Passive Payment now support both Alipay and WeChat
- * - * @apiVersion 1.0.2 - * @apiGroup RetailPay - - * @apiParam (PathVariable) {String} partner_code Required, Partner code - * @apiParam (PathVariable) {String} order_id Required, Partner order id - * @apiUse Sign - * @apiParam (JSON) {String} description Required, Order description - * @apiParam (JSON) {int} price Required, Price of the order. Use the base unit of the currency. - * @apiParam (JSON) {String=AUD,CNY} currency=AUD currency - * @apiParam (JSON) {String} device_id Required, ID of the device which sends the request - * @apiParam (JSON) {String} auth_code Required, The Payment QR Code scanned from customer's WeChat Wallet. - * @apiParam (JSON) {String} notify_url System will call the notify url if provided when the payment succeeds. - * - * @apiSuccess {String} return_code Execution result - * @apiSuccess {String} result_code Order status - *
    - *
  • PAYING:Waiting for payment
  • - *
  • CREATE_FAIL:Fail to create order
  • - *
  • CLOSED:Order closed
  • - *
  • PAY_FAIL:Payment failed
  • - *
  • PAY_SUCCESS:Payment succeeded
  • - *
- * @apiSuccess {String} order_id Order id in RoyalPay, which is also payment channel(Wechat/Alipay) order id. - * @apiSuccess {String} partner_order_id Partner order id - * @apiSuccess {int} total_fee Order amount, which uses the base unit of current currency - * @apiSuccess {int} real_fee Actual paid amount.(The same as total fee at the moment. After coupon feature is finished, this may be different.) - * @apiSuccess {String} pay_time Time when order is paid(yyyy-MM-dd HH:mm:ss, UTC+10) - * @apiSuccess {String} create_time Time when order is created(according to the latest order)(yyyy-MM-dd HH:mm:ss, UTC+10) - * @apiSuccess {String} currency Currency. Default value is AUD. - * @apiSuccess {String} channel Currency. Channel. Alipay,Wechat,Bestpay. - * - * @apiUse GlobalError - * @apiError (ERROR_CODE) ORDER_MISMATCH Order ID does not belongs to current partner. - * @apiError (ERROR_CODE) ORDER_PAID Order has already been paid - * @apiError (ERROR_CODE) AUTHCODEEXPIRE QR Code expired - * @apiError (ERROR_CODE) NOTENOUGH The customer does not have enough balance to finish the payment - * @apiError (ERROR_CODE) NOTSUPORTCARD Card type is not supported - * @apiError (ERROR_CODE) AUTH_CODE_ERROR Payment QR Code has been used twice - * @apiError (ERROR_CODE) AUTH_CODE_INVALID The submitted QR Code is not a WeChat Payment QR Code - */ -/** - * @api {PUT} /api/v1.0/retail_qrcode/partners/{partner_code}/orders/{order_id} Create Retail Active Payment Order - * @apiName RetailQRCode - * @apiGroup RetailPay - * @apiVersion 1.0.2 - * @apiDescription - * Retail Active Payment is used for cashier terminals which cannot scan Barcode or QRCode. - * Get the Code url after create the order, convert this url to a QRCode and ask customers use their app to scan this QRCode then finish the payment. - * Retail Active Payment now support Alipay, WeChat and Bestpay
- *
- * If the currency is CNY, equivalent AUD amount shall never less than 0.01AUD, - * otherwise user will get Invalid Amount Error from WeChat when making the payment. - * @apiHeader Accept application/json - * @apiHeader Content-Type application/json - * @apiParam (PathVariable) {String} partner_code Required, Partner Code - * @apiParam (PathVariable) {String} order_id Required, Partner order id. Shall be unique for the same partner. If repeated, order will be recognized as an existed order. - * @apiUse Sign - * @apiParam (JSON) {String} description Required, Description of order. - * @apiParam (JSON) {int} price Required, Price of the order. Use the base unit of the currency. - * @apiParam (JSON) {String=AUD,CNY} currency=AUD Currency - * @apiParam (JSON) {String} device_id Required, ID of the device which sends the request. - * @apiParam (JSON) {String} notify_url System will call the notify url if provided when the payment succeeds - * - * @apiSuccess {String} return_code Execution result - * @apiSuccess {String} result_code SUCCESS means order created successfully, EXISTS means order has already existed. - * @apiSuccess {String} partner_code Partner code - * @apiSuccess {String} full_name Partner's full company name when registered - * @apiSuccess {String} partner_name Partner's name - * @apiSuccess {String} order_id Order id in RoyalPay, which is also payment channel(Wechat/Alipay) order id. The final order id which is paid may be different from this one - * @apiSuccess {String} partner_order_id Partner order id - * @apiSuccess {String} code_url QR Code string. Partners can create the payment QR Code according to this value. - * - * @apiUse GlobalError - * @apiError (ERROR_CODE) ORDER_MISMATCH Order is not belong to this partner. - * @apiError (ERROR_CODE) ORDER_PAID Order has already been paid - */ - - -/** - * @api {GET} /api/v1.0/gateway/partners/{partner_code}/orders/{order_id} Query Order Status - * @apiName OrderStatus - * @apiGroup CommonApi - * @apiVersion 1.0.1 - * @apiDescription Including QR Code orders, JSAPI orders and Retail orders - * @apiHeader Accept application/json - * - * @apiParam (PathVariable) {String} partner_code Required, Partner code - * @apiParam (PathVariable) {String} order_id Required, Partner order id - * @apiUse Sign - * - * @apiSuccess {String} return_code Execution result - * @apiSuccess {String} result_code - *
    - *
  • PAYING: Waiting for payment
  • - *
  • CREATE_FAIL: Fail to create order
  • - *
  • CLOSED: Order closed
  • - *
  • PAY_FAIL: Payment failed
  • - *
  • PAY_SUCCESS: Payment succeeded
  • - *
  • PARTIAL_REFUND: Partial refunded
  • - *
  • Full_REFUND: Full refunded
  • - *
- * Use the same order id to call create order API can renew the order. PAYING, PAY_SUCCESS orders cannot be renewed. - * @apiSuccess {String} order_id Order id in RoyalPay, which is also payment channel(Wechat/Alipay) order id. The final order id which is paid may be different from this one - * @apiSuccess {String} partner_order_id Partner order id - * @apiSuccess {String} channel_order_id PayChannel(Alipay、Wechat) Transaction Trade No - * @apiSuccess {int} total_fee Order amount, which uses the base unit of current currency - * @apiSuccess {int} real_fee Actual paid amount.(Equal to total fee at the moment. After coupon feature is finished, this value may be different. ) - * @apiSuccess {Double} rate Exchange Rate used while trading. 1AUD=?CNY - * @apiSuccess {String} pay_time Time when order is paid(yyyy-MM-dd HH:mm:ss, UTC+10) - * @apiSuccess {String} create_time Time when order is created(according to the latest order)(yyyy-MM-dd HH:mm:ss, UTC+10) - * @apiSuccess {String} currency Currency. Default value is AUD. - * @apiSuccess {String} channel Channel. Alipay,Wechat,Bestpay. - * - * @apiUse GlobalError - * @apiError (ERROR_CODE) ORDER_NOT_EXIST Order does not exist - * @apiError (ERROR_CODE) ORDER_MISMATCH Order is not belong to this partner - * - */ -/** - * @api {PUT} /api/v1.0/gateway/partners/{partner_code}/orders/{order_id}/refunds/{refund_id} Apply for Refund - * @apiName RefundOrder - * @apiGroup CommonApi - * @apiVersion 1.0.0 - * @apiHeader Accept application/json - * @apiHeader Content-Type application/json - * @apiDescription - * One payment order can create more than one refund orders. Total amount of all refund orders must be less than or equal to the actual paid amount and the currency of refund order is the same as the payment order. - * @apiParam (PathVariable) {String} partner_code Required, Partner code - * @apiParam (PathVariable) {String} order_id Required, Partner payment order id - * @apiParam (PathVariable) {String} refund_id Required, Partner refund order id - * @apiUse Sign - * @apiParam (JSON) {int} fee Required, Refund amount. Use base unit of the currency. Total amount of all refund orders must be less than actual paid amount. - * @apiParam (JSON) {String} device_id is Optional, ID of the device which sends the request - * @apiSuccess {String} return_code Execution result - * @apiSuccess {String} result_code - *
    - *
  • WAITING: Order is being submitted to WeChat
  • - *
  • CREATE_FAILED: Fail to submit to WeChat
  • - *
  • SUCCESS: Submission succeeded
  • - *
  • FAILED: Refund failed
  • - *
  • FINISHED: Refund success(funds has already been returned to user's account)
  • - *
  • CHANGE: Refund can not return to user's account. Manual operation is required
  • - *
- * @apiSuccess {String} refund_id RoyalPay Refund id - * @apiSuccess {String} partner_refund_id Partner refund id - * @apiSuccess {int} amount Refund amount - * @apiSuccess {String} currency Refund currency - * - * @apiUse GlobalError - * @apiError (ERROR_CODE) ORDER_NOT_EXIST Payment order does not exist - * @apiError (ERROR_CODE) ORDER_MISMATCH Payment order is not belong to this partner - * @apiError (ERROR_CODE) ORDER_NOT_PAID Payment order is not paid - */ -/** - * @api {GET} /api/v1.0/gateway/partners/{partner_code}/orders/{order_id}/refunds/{refund_id} Query Refund Order Status - * @apiName RefundQuery - * @apiGroup CommonApi - * @apiVersion 1.0.0 - * @apiHeader Accept application/json - * @apiHeader Content-Type application/json - * - * @apiParam (PathVariable) {String} partner_code Required, Partner code - * @apiParam (PathVariable) {String} order_id Required, Partner payment order id - * @apiParam (PathVariable) {String} refund_id Required, Partner refund order id - * @apiUse Sign - * - * @apiSuccess {String} return_code Execution result - * @apiSuccess {String} result_code - *
    - *
  • WAITING: Order is being submitted to WeChat
  • - *
  • CREATE_FAILED: Fail to submit to WeChat
  • - *
  • SUCCESS: Submission succeeded
  • - *
  • FAILED: Refund failed
  • - *
  • FINISHED: Refund succeeded(funds have already been returned to user's account)
  • - *
  • CHANGE: Refund can not return to user's account. Manual operation is required
  • - *
- * @apiSuccess {String} refund_id RoyalPay Refund id - * @apiSuccess {String} partner_refund_id Partner refund id - * @apiSuccess {int} amount refund Amount - * @apiSuccess {String} currency Refund currency - * - * @apiUse GlobalError - * @apiError (ERROR_CODE) ORDER_NOT_EXIST Payment order does not exist - * @apiError (ERROR_CODE) ORDER_MISMATCH Payment order is not belong to this partner - * @apiError (ERROR_CODE) ORDER_NOT_PAID Payment order is not paid - * @apiError (ERROR_CODE) REFUND_NOT_EXIST Refund order does not exist - * @apiError (ERROR_CODE) REFUND_MISMATCH Refund order is not belong to this payment order - */ - -/** - * @api {GET} /api/v1.0/gateway/partners/{partner_code}/orders Check Orders - * @apiName ListOrder - * @apiGroup CommonApi - * @apiVersion 1.0.0 - * @apiDescription - * Get a list of orders. This api may change in the future. - * @apiHeader Accept application/json - * @apiHeader Content-Type application/json - * @apiParam (PathVariable) {String} partner_code Required, Partner code - * @apiUse Sign - * @apiParam (QueryParam) {String} date Payment order creation date,which is formatted in 'yyyyMMdd' ,UTC+10. Query all orders if not provided - * @apiParam (QueryParam) {String='ALL','PAID','REFUNDED'} status='ALL' - * Order status - *
    - *
  • ALL: All orders, including orders not paid and closed
  • - *
  • PAID: Only paid orders. including orders which have refunds.
  • - *
  • REFUNDED: Only orders which have refunds
  • - *
- * @apiParam (QueryParam) {int} page=1 Page number. start with 1 - * @apiParam (QueryParam) {int} limit=10 Rows per page - * - * @apiSuccess (ROOT) {String} return_code Execution result - * @apiSuccess (ROOT) {JSON[]} data Orders list - * @apiSuccess (ROOT) {JSON} pagination Pagination information - * @apiSuccess (ROOT) {JSON} analysis Payment analysis - * - * @apiSuccess (data) {String} order_id RoyalPay Order ID - * @apiSuccess (data) {String} partner_order_id Partner Order ID - * @apiSuccess (data) {int} total_fee Order amount - * @apiSuccess (data) {int} real_fee Actual paid amount - * @apiSuccess (data) {String} payment via channel: Alipay, Bestpay, Wechat - * @apiSuccess (data) {String} currency Currency - * @apiSuccess (data) {String} create_time Time when order is created, which is formatted in 'yyyy-MM-dd HH:mm:ss', UTC+10 - * @apiSuccess (data) {String} pay_time Time when order is paid, which is formatted in 'yyyy-MM-dd HH:mm:ss', UTC+10. will be null if not paid - * @apiSuccess (data) {String} status - * order status - *
    - *
  • SUBMITTING: Submitting to wechat
  • - *
  • SUBMIT_FAIL: Submission failed
  • - *
  • WAITING_PAYMENT: Submission succeeded and wait for payment
  • - *
  • CLOSED: Order closed
  • - *
  • PAYMENT_FAIL: Payment failed
  • - *
  • SUCCESS: Payment succeeded
  • - *
  • PARTIAL_REFUND: Partial Refunded
  • - *
  • FULL_REFUND: Full Refunded
  • - *
- * @apiSuccess (data) {String} order_body Order description - * @apiSuccess (data) {String} gateway - *
    - *
  • Retail In-Store: Paid from official EFTPos or App
  • - *
  • QRCODE: Paid from merchant static QR Code
  • - *
  • Online API: Paid from QR Code API
  • - *
  • WeChat HTML5: Paid from JSAPI
  • - *
  • Retail API: Paid from Retail API
  • - *
  • Mobile H5: Paid from H5 Api
  • - *
- * @apiSuccess (data) {String} partner_code Partner code - * @apiSuccess (data) {String} partner_name Partner name - * @apiSuccess (data) {String} refund_fee Total refund amount of this order - * - * @apiSuccess (pagination) {int} page Page number,start with 1 - * @apiSuccess (pagination) {int} limit Rows per page - * @apiSuccess (pagination) {int} totalCount Total rows - * @apiSuccess (pagination) {int} totalPages Total pages - * - * @apiSuccess (analysis) {int} order_count Order count of successful payment (including orders which have refunds) - * @apiSuccess (analysis) {int} total_fee Total amount - * @apiSuccess (analysis) {int} real_fee Actual paid amount - * - * @apiUse GlobalError - */ -/** - * @api {GET} /api/v1.0/gateway/partners/{partner_code}/transactions Query Daily Transactions - * @apiName ListTransaction - * @apiGroup CommonApi - * @apiVersion 1.0.0 - * @apiDescription This Api will list all transactions for current merchant in the day, - * containing all payment methods(include no gateway methods) and all payment channels such as - * payment, RoyalPay discount cashback, refunds, credit for failure refunds, system pay back, - * cashback account income/outcome, etc. Settlement transactions will not be contained.
- * Notice: A payment order or refund order can contains several transaction records - * @apiHeader Accept application/json - * @apiHeader Content-Type application/json - * @apiParam (PathVariable) {String} partner_code Required, Partner code - * @apiUse Sign - * @apiParam (QueryParam) {String} date Required, Transaction date. Format as 'yyyyMMdd',GMT+10 - * - * @apiSuccess (ROOT) {String} return_code Execution result,SUCCESS - * @apiSuccess (ROOT) {String} result_code Process result - * @apiSuccess (ROOT) {int} transaction_count transaction record count - * @apiSuccess (ROOT) {int} order_count payment order count - * @apiSuccess (ROOT) {int} refund_count refund order count - * @apiSuccess (ROOT) {JSON[]} transactions transaction list - * - * @apiSuccess (transactions) {String} transaction_time Trade time, format as yyyyMMddHHmmss,GMT+10 - * @apiSuccess (transactions) {String} partner_code Order connected partner code - * @apiSuccess (transactions) {String} order_id RoyalPay Order ID - * @apiSuccess (transactions) {String} partner_order_id Partner Order ID - * @apiSuccess (transactions) {String} channel_order_id Order ID in payment channel (Alipay/Bestpay/Wechat) - * @apiSuccess (transactions) {String} refund_id RoyalPay Refund ID (Only in refunds or refunds failure cashback) - * @apiSuccess (transactions) {String} partner_refund_id Partner refund ID (Only in refunds or refunds failure cashback) - * @apiSuccess (transactions) {String} gateway Payment method - *
    - *
  • 0: RoyalPay EftPOS Payment Code (Scan Payment Code displaying in customer's device)
  • - *
  • 1: RoyalPay EftPOS Order Code (Customer scan QR Code displaying on POS screen)
  • - *
  • 2: RoyalPay Static Merchant QRCode
  • - *
  • 3: QRCode Gateway
  • - *
  • 4: JSAPI Gateway
  • - *
  • 5: Gateway for third-party EftPOS Payment Code
  • - *
  • 6: Gateway for third-party EftPOS Order Code
  • - *
  • 7: RoyalPay Static Merchant QRCode(deprecated)
  • - *
  • 8: H5 Payment Gateway
  • - *
- * @apiSuccess (transactions) {String} channel Payment Channel (Alipay, AlipayOnline, Wechat, Bestpay) - * @apiSuccess (transactions) {String} type Trade Direction - *
    - *
  • Credit: Income
  • - *
  • Debit: Outcome
  • - *
- * @apiSuccess (transactions) {String} currency currency(AUD/CNY) - * @apiSuccess (transactions) {int} total_amount Total payment amount, which uses the base unit of order currency - * @apiSuccess (transactions) {int} input_amount Order input amount, which uses the base unit of order currency - * @apiSuccess (transactions) {int} settle_amount Settle amount, AUD cents - * @apiSuccess (transactions) {int} transfer_amount Final settle amount(settle amount - surcharge - gst), AUD cents - * @apiSuccess (transactions) {int} surcharge surcharge, AUD cents - * @apiSuccess (transactions) {int} gst GST, AUD cents - * @apiSuccess (transactions) {double} exchange_rate Using exchange rate - * @apiSuccess (transactions) {String} remark Remark - * - * @apiUse GlobalError - */ -/** - * @api {GET} /api/v1.0/gateway/partners/{partner_code}/settlements Query Settlement Details - * @apiName SettleLog - * @apiGroup CommonApi - * @apiVersion 1.0.0 - * @apiDescription This Api will list all transactions with the settlement this day, - * containing all payment methods(include no gateway methods) and all payment channels such as - * payment, RoyalPay discount cashback, refunds, credit for failure refunds, system pay back, - * cashback account income/outcome, etc.
- * Notice: A payment order or refund order can contains several transaction records - * @apiHeader Accept application/json - * @apiHeader Content-Type application/json - * @apiParam (PathVariable) {String} partner_code Required, Partner code - * @apiUse Sign - * @apiParam (QueryParam) {String} date Required, Transaction date. Format as 'yyyyMMdd',GMT+10 - * - * @apiSuccess (ROOT) {String} return_code Execution result,SUCCESS - * @apiSuccess (ROOT) {String} result_code Process result - * @apiSuccess (ROOT) {String} settle_from Transaction date from,yyyyMMdd - * @apiSuccess (ROOT) {String} settle_to Transaction date to, yyyyMMdd - * @apiSuccess (ROOT) {String} settle_days Settle delay(T+n) - * @apiSuccess (ROOT) {int} transaction_count transaction record count - * @apiSuccess (ROOT) {int} order_count payment order count - * @apiSuccess (ROOT) {int} refund_count refund order count - * @apiSuccess (ROOT) {int} total_credit Total credit amount (AUD cent) - * @apiSuccess (ROOT) {int} total_debit Total debit amount (AUD cent) - * @apiSuccess (ROOT) {int} total_surcharge Total surcharge amount(AUD cent) - * @apiSuccess (ROOT) {int} total_transfer Total amount sending to merchant's bank account(AUD cent) - * @apiSuccess (ROOT) {JSON[]} transactions transaction list - * - * @apiSuccess (transactions) {String} transaction_time Trade time, format as yyyyMMddHHmmss,GMT+10 - * @apiSuccess (transactions) {String} partner_code Order connected partner code - * @apiSuccess (transactions) {String} order_id RoyalPay Order ID - * @apiSuccess (transactions) {String} partner_order_id Partner Order ID - * @apiSuccess (transactions) {String} channel_order_id Order ID in payment channel (Alipay/Bestpay/Wechat) - * @apiSuccess (transactions) {String} refund_id RoyalPay Refund ID (Only in refunds or refunds failure cashback) - * @apiSuccess (transactions) {String} partner_refund_id Partner refund ID (Only in refunds or refunds failure cashback) - * @apiSuccess (transactions) {String} gateway Payment method - *
    - *
  • 0: RoyalPay EftPOS Payment Code (Scan Payment Code displaying in customer's device)
  • - *
  • 1: RoyalPay EftPOS Order Code (Customer scan QR Code displaying on POS screen)
  • - *
  • 2: RoyalPay Static Merchant QRCode
  • - *
  • 3: QRCode Gateway
  • - *
  • 4: JSAPI Gateway
  • - *
  • 5: Gateway for third-party EftPOS Payment Code
  • - *
  • 6: Gateway for third-party EftPOS Order Code
  • - *
  • 7: RoyalPay Static Merchant QRCode(deprecated)
  • - *
  • 8: H5 Payment Gateway
  • - *
- * @apiSuccess (transactions) {String} channel Payment Channel (Alipay, AlipayOnline, Wechat, Bestpay) - * @apiSuccess (transactions) {String} type Trade Direction - *
    - *
  • Credit: Income
  • - *
  • Debit: Outcome
  • - *
- * @apiSuccess (transactions) {String} currency currency(AUD/CNY) - * @apiSuccess (transactions) {int} total_amount Total payment amount, which uses the base unit of order currency - * @apiSuccess (transactions) {int} input_amount Order input amount, which uses the base unit of order currency - * @apiSuccess (transactions) {int} settle_amount Amount to make settlement, AUD cents - * @apiSuccess (transactions) {String} surcharge_rate Rate of surcharge (x%) - * @apiSuccess (transactions) {int} surcharge Surcharge amount, AUD cents - * @apiSuccess (transactions) {int} gst GST, AUD cents - * @apiSuccess (transactions) {int} transfer_amount Amount send to merchant's bank account, AUD cents - * @apiSuccess (transactions) {double} exchange_rate Using exchange rate - * @apiSuccess (transactions) {String} remark Remark - * - * @apiUse GlobalError - */ -/** - * @api {POST} /notify_url Payment Success Notice - * @apiName PayNotice - * @apiGroup API - * @apiVersion 1.0.0 - * @apiDescription - * If notify_url is provided when order is created. System will post request to this url when the payment succeeds. Request method is POST. - * Different from Server APIs, sign parameters will be included in json entity. Partner system shall valid them to prevent fake requests. - * Partner system shall response with correct parameters. If RoyalPay did not receive valid response, system will regard as receiving failed and retry the notification. - * System will retry up to3 times. Partner system shall be able to handle the repeated requests. - * - *

It is recommended to actively call the query API to confirm the payment status after receiving the push, so as to prevent other third parties from forging the push!

- * @apiHeader Accept application/json - * @apiHeader Content-Type application/json - * @apiParam (JSON) {long} time UTC timestamp in millis - * @apiParam (JSON) {String} nonce_str Random string - * @apiParam (JSON) {String} sign Sign - * @apiParam (JSON) {String} partner_order_id Partner order id - * @apiParam (JSON) {String} channel_order_id PayChannel(Alipay、Wechat) Transaction Trade No - * @apiParam (JSON) {String} order_id RoyalPay order id - * @apiParam (JSON) {int} total_fee Order amount - * @apiParam (JSON) {int} real_fee Actual paid amount - * @apiParam (JSON) {Double} rate Exchange Rate used while trading. 1AUD=?CNY - * @apiParam (JSON) {String} currency Currency,AUD - * @apiParam (JSON) {String} channel Payment Channel Alipay、AlipayOnline、Wechat、Bestpay - * @apiParam (JSON) {String} create_time Time when order is created, which is formatted in 'yyyy-MM-dd HH:mm:ss', UTC+10 - * @apiParam (JSON) {String} pay_time Time when order is paid, which is formatted in 'yyyy-MM-dd HH:mm:ss', UTC+10. - * - * @apiSuccess {String} return_code SUCCESS - */ - -/** - * @api {PUT} /api/v1.0/jd_gateway/partners/{partner_code}/orders/{order_id} Create JD Payment Order - * @apiName JDPAY - * @apiDescription - * Use for JD Payment in PC Website. After create order, jump to the pay_url returned and attach sign params and redirect param. - * Then enter JD Pay page to finish payment.
- * JD Channel Only.
- * - * @apiVersion 1.0.0 - * @apiGroup JD_Online_Payment - * @apiHeader Accept application/json - * @apiHeader Content-Type application/json - * @apiParam (PathVariable) {String} partner_code Required, Partner code - * @apiParam (PathVariable) {String} order_id Required, Partner order id - * @apiUse Sign - * @apiParam (JSON) {String} description Required, Order description - * @apiParam (JSON) {String} user_id Required,Only account number of the user on the merchant platform - * @apiParam (JSON) {String} mobile Required,Mobile phone - * @apiParam (JSON) {int} price Required, Price of the order. Use the base unit of the currency (cent). - * @apiParam (JSON) {String=AUD,CNY} currency=AUD Currency - * @apiParam (JSON) {String} notify_url System will call the notify url if provided when the payment succeeds - * @apiParam (JSON) {String} operator Note for the operator who created this order. - * - * @apiSuccess {String} return_code Execution result - * @apiSuccess {String} result_code SUCCESS means order created successfully, EXISTS means order has already existed. - * @apiSuccess {String} partner_code Partner code - * @apiSuccess {String} full_name Partner's full company name when registered - * @apiSuccess {String} partner_name Partner's name - * @apiSuccess {String} order_id Order id in RoyalPay, which is also payment channel(Wechat/Alipay) order id. The final order id which is paid may be different from this one - * @apiSuccess {String} partner_order_id Partner order id - * @apiSuccess {String} pay_url Payment page in RoyalPay. Can only be accessed through WeChat - * - * @apiUse GlobalError - * @apiError (ERROR_CODE) ORDER_MISMATCH Order is not belong to this partner - * @apiError (ERROR_CODE) ORDER_PAID Order has already been paid - * - */ - -/** - * @api {PUT} /api/v1.0/gateway/partners/{partner_code}/microapp_orders/{order_id} Create Miniprogram Order - * @apiName microapp - * @apiDescription - Use for call Payment in Wechat/Alipay miniprogram. After create order, returned and redirect param. - * *
- * MiniProgram_WechatPay doc - * - * @apiVersion 1.0.0 - * @apiGroup Miniprogram_Payment - * @apiHeader Accept application/json - * @apiHeader Content-Type application/json - * @apiParam (PathVariable) {String} partner_code Required, Partner code - * @apiParam (PathVariable) {String} order_id Required, Partner order id - * @apiUse Sign - * @apiParam (JSON) {String} description Required, Order description - * @apiParam (JSON) {int} price Required, Price of the order. Use the base unit of the currency. - * @apiParam (JSON) {String=AUD,CNY} currency=AUD Currency - * @apiParam (JSON) {String=Wechat,Alipay} channel=Wechat Payment channel. Wechat for Wechat miniprogram and Alipay for Alipay miniprogram - * @apiParam (JSON) {String} notify_url System will call the notify url if provided when the payment succeeds - * @apiParam (JSON) {String} operator Note for the operator who created this order. - * @apiParam (JSON) {String} appid Wechat channel required, miniprogram app_id - * @apiParam (JSON) {String} customer_id wechat miniprogram open_id or alipay miniprogram userid - * - * @apiSuccess {String} return_code Execution result - * @apiSuccess {String} result_code SUCCESS means order created successfully, EXISTS means order has already existed. - * @apiSuccess {String} partner_code Partner code - * @apiSuccess {String} full_name Partner's full company name when registered - * @apiSuccess {String} partner_name Partner's name - * @apiSuccess {String} order_id Order id in RoyalPay, which is also payment channel(Wechat/Alipay) order id. The final order id which is paid may be different from this one - * @apiSuccess {String} partner_order_id Partner order id - * @apiSuccess {String} pay_url Payment page in RoyalPay. Can only be accessed through WeChat - * @apiSuccess {String} sdk_params The required parameters for payment.(Json String) - * - * @apiUse GlobalError - * @apiError (ERROR_CODE) ORDER_MISMATCH Order is not belong to this partner - * @apiError (ERROR_CODE) ORDER_PAID Order has already been paid - * - */ - - -/** - * @api {PUT} /api/v1.0/alipay/partners/{partner_code}/orders/{order_id} Create Alipay Online Order - * @apiName AlipayOnline - * @apiDescription - * Use for Alipay Payment in PC Website. After create order, jump to the pay_url returned and attach sign params and redirect param. - * Then enter Alipay page to finish payment.
- * Alipay Channel Only.
- * - * @apiVersion 1.0.0 - * @apiGroup Alipay_Online_Payment - * @apiHeader Accept application/json - * @apiHeader Content-Type application/json - * @apiParam (PathVariable) {String} partner_code Required, Partner code - * @apiParam (PathVariable) {String} order_id Required, Partner order id - * @apiUse Sign - * @apiParam (JSON) {String} description Required, Order description - * @apiParam (JSON) {int} price Required, Price of the order. Use the base unit of the currency. - * @apiParam (JSON) {String=AUD,CNY} currency=AUD Currency - * @apiParam (JSON) {String} notify_url System will call the notify url if provided when the payment succeeds - * @apiParam (JSON) {String} operator Note for the operator who created this order. - * - * @apiSuccess {String} return_code Execution result - * @apiSuccess {String} result_code SUCCESS means order created successfully, EXISTS means order has already existed. - * @apiSuccess {String} partner_code Partner code - * @apiSuccess {String} full_name Partner's full company name when registered - * @apiSuccess {String} partner_name Partner's name - * @apiSuccess {String} order_id Order id in RoyalPay, which is also payment channel(Wechat/Alipay) order id. The final order id which is paid may be different from this one - * @apiSuccess {String} partner_order_id Partner order id - * @apiSuccess {String} pay_url Payment page in RoyalPay. Can only be accessed through WeChat - * - * @apiUse GlobalError - * @apiError (ERROR_CODE) ORDER_MISMATCH Order is not belong to this partner - * @apiError (ERROR_CODE) ORDER_PAID Order has already been paid - * - */ - -/** - * @api {PUT} /api/v1.0/gateway/partners/{partner_code}/app_orders/{order_id} Create SDK Order - * @apiName SDK - * @apiDescription - * Used for mobile Apps calling Wechat payment with Wechat SDK. Call this api to create order and get param string for SDK calling. Call SDK api with the param to start payment and get payment result from Wechat app - * It is strongly advised to request RoyalPay order query Api to confirm that the order has been paid in order to cancelling order by system at the same time.
- *
- * More information for integration with Alipay: Alipay SDK Document
- * More information for integration with Wehcat: Wechat SDK Document
- - * Alipay SDK for Android
- * Alipay SDK for iOS
- * Wechat SDK for Android
- * Wechat SDK for iOS - * - * @apiVersion 1.0.0 - * @apiGroup SDKPayment - * @apiHeader Accept application/json - * @apiHeader Content-Type application/json - * @apiParam (PathVariable) {String} partner_code Required, Partner code - * @apiParam (PathVariable) {String} order_id Required, Partner order id - * @apiUse Sign - * @apiParam (JSON) {String} description Required, Order description - * @apiParam (JSON) {int} price Required, Price of the order. Use the base unit of the currency. - * @apiParam (JSON) {String=AUD,CNY} currency=AUD Currency - * @apiParam (JSON) {String=Alipay,Wechat} channel payment channel, required, case sensitive - * @apiParam (JSON) {String} notify_url System will call the notify url if provided when the payment succeeds - * @apiParam (JSON) {String} operator Note for the operator who created this order. - * @apiParam (JSON) {String=android,iphone,ipad} system os type of client app, optional for Alipay, not required for Wechat - * @apiParam (JSON) {String} version client app version, optional for Alipay, not required for Wechat - * @apiParam (JSON) {String} appid wechat appid, required for Wechat, not required for Alipay - * - * @apiSuccess {String} return_code Execution result - * @apiSuccess {String} result_code SUCCESS means order created successfully, EXISTS means order has already existed. - * @apiSuccess {String} partner_code Partner code - * @apiSuccess {String} full_name Partner's full company name when registered - * @apiSuccess {String} partner_name Partner's name - * @apiSuccess {String} order_id Order id in RoyalPay, which is also payment channel(Wechat/Alipay) order id. The final order id which is paid may be different from this one - * @apiSuccess {String} partner_order_id Partner order id - * @apiSuccess {String} sdk_params param string for calling SDK - * - * @apiUse GlobalError - * @apiError (ERROR_CODE) ORDER_MISMATCH Order is not belong to this partner - * @apiError (ERROR_CODE) ORDER_PAID Order has already been paid - * - */ - - -/** - * @api {PUT} /api/v1.0/hf_gateway/partners/{partner_code}/orders/{orderId} Create HF Web Order - * @apiName hfapi - * @apiDescription - * Use for HF Payment in PC Website. After create order, jump to the pay_url returned and attach sign params and redirect param. - * Then enter HF Pay page to finish payment.
- * - * @apiVersion 1.0.0 - * @apiGroup HF_Online_Payment - * @apiHeader Accept application/json - * @apiHeader Content-Type application/json - * @apiParam (PathVariable) {String} partner_code Required, Partner code - * @apiParam (PathVariable) {String} order_id Required, Partner order id - * @apiUse Sign - * @apiParam (JSON) {String} description Required, Order description - * @apiParam (JSON) {String} mobile Required,Mobile phone - * @apiParam (JSON) {int} price Required, Price of the order. Use the base unit of the currency. - * @apiParam (JSON) {String} product_id Product code Required * Product Code List - * @apiParam (JSON) {String} product_name Product name Required - * @apiParam (JSON) {String} product_count Product count - * @apiParam (JSON) {String=AUD} currency=AUD Currency (only AUD) - * @apiParam (JSON) {String} notify_url System will call the notify url if provided when the payment succeeds - * @apiParam (JSON) {String} operator Note for the operator who created this order. - * - * @apiSuccess {String} return_code Execution result - * @apiSuccess {String} result_code SUCCESS means order created successfully, EXISTS means order has already existed. - * @apiSuccess {String} partner_code Partner code - * @apiSuccess {String} full_name Partner's full company name when registered - * @apiSuccess {String} partner_name Partner's name - * @apiSuccess {String} order_id Order id in RoyalPay. The final order id which is paid may be different from this one - * @apiSuccess {String} partner_order_id Partner order id - * @apiSuccess {String} pay_url Payment page in RoyalPay. - * - * @apiUse GlobalError - * @apiError (ERROR_CODE) ORDER_MISMATCH Order is not belong to this partner - * @apiError (ERROR_CODE) ORDER_PAID Order has already been paid - * - */ -/** - * @api {PUT} /api/v1.0/cb_bankpay/partners/{partner_code}/orders/{order_id} Create CB BankPay Order - * @apiName cbbankpayapi - * @apiDescription - * Use for CB BankPay in PC Website. After create order, jump to the pay_url returned and attach sign params and redirect param. - * - * @apiVersion 1.0.0 - * @apiGroup CB_BankPay - * @apiHeader Accept application/json - * @apiHeader Content-Type application/json - * @apiParam (PathVariable) {String} partner_code Required, Partner code - * @apiParam (PathVariable) {String} order_id Required, Partner order id - * @apiUse Sign - * @apiParam (JSON) {String} description Required, Order description - * @apiParam (JSON) {int} price Required, Price of the order. Use the base unit of the currency. - * @apiParam (JSON) {String} product_name Product name Required - * @apiParam (JSON) {int} gateway_type Gateway Require 8: H5 gateway,9: PC gateway - * @apiParam (JSON) {String=AUD,CNY} currency=AUD Currency (Only AUD When Merchants Choose LakalaPay) - * @apiParam (JSON) {String} notify_url System will call the notify url if provided when the payment succeeds - * @apiParam (JSON) {String} operator Note for the operator who created this order. - * - * @apiSuccess {String} return_code Execution result - * @apiSuccess {String} result_code SUCCESS means order created successfully, EXISTS means order has already existed. - * @apiSuccess {String} partner_code Partner code - * @apiSuccess {String} full_name Partner's full company name when registered - * @apiSuccess {String} partner_name Partner's name - * @apiSuccess {String} order_id Order id in RoyalPay. The final order id which is paid may be different from this one - * @apiSuccess {String} partner_order_id Partner order id - * @apiSuccess {String} pay_url Payment page in RoyalPay. - * - * @apiUse GlobalError - * @apiError (ERROR_CODE) ORDER_MISMATCH Order is not belong to this partner - * @apiError (ERROR_CODE) ORDER_PAID Order has already been paid - * - */ -/** - * @api {PUT} /api/v1.0/customs/partners/{partner_code}/declare/report/{client_report_id} Create Declare ID - * @apiName declare_report - * @apiDescription - * Used to submit the attachment information of the order required by the merchant. WeChat and Alipay are only supported. WeChat only supports payment orders within one month for customs declaration. - * - * @apiVersion 1.0.0 - * @apiGroup Custom - * @apiHeader Accept application/json - * @apiHeader Content-Type application/json - * @apiParam (PathVariable) {String} partner_code Required, Partner code - * @apiParam (PathVariable) {String} client_report_id Required, Client declare ID - * @apiUse Sign - * @apiParam (JSON) {String} order_id Required, Partner order id - * @apiParam (JSON) {String} custom Required, Customs No. * Customs No. - * @apiParam (JSON) {String} mch_custom_id Required, Customs record id - * @apiParam (JSON) {String} mch_custom_name Required, Customs record name - * @apiParam (JSON) {JSON[]} sub_order Child orders - * - * @apiParam (SUB_JSON) {String} sub_order_no Child order ID - * @apiParam (SUB_JSON) {String=CNY} fee_type=CNY Currency - * @apiParam (SUB_JSON) {Double} order_fee Child Order Amount - * @apiParam (SUB_JSON) {Double} transport_fee Child Order Logistics Amount - * - * @apiSuccess {String} report_id RoyalPay declare ID - * @apiSuccess {String} client_report_id Client declare ID - * @apiSuccess {String} report_status Result status: PROCCESSING,SUBMITED,FAILED,SUCCESS - * @apiSuccess {String} channel Channel - * @apiSuccess {String} custom Customs No. - * @apiSuccess {String} mch_custom_no Customs record ID - * @apiSuccess {String} mch_custom_name Customs record name - * @apiSuccess {String} order_id RoyalPay Order ID - * @apiSuccess {String} transaction_id Channel Order ID - * @apiSuccess {String} order_currency Currency - * @apiSuccess {Double} order_amount Order Amount - * @apiSuccess {String} report_time Declare Time - * @apiSuccess {String} creation_date Create Time - * @apiSuccess {String} last_update_date Update Time - * @apiSuccess {String} error_code Error Code - * @apiSuccess {String} error_msg Error Description - * @apiSuccess {String} verify_department Verify Department - * @apiSuccess {String} verify_department_trade_id Verify Department Trade Id - * @apiSuccess {JSON[]} sub_orders sub_order Child orders - * - * @apiSuccess (SUB_JSON) {String} sub_order_no Child order ID - * @apiSuccess (SUB_JSON) {String=CNY} fee_type=CNY Currency - * @apiSuccess (SUB_JSON) {Double} order_fee Child Order Amount - * @apiSuccess (SUB_JSON) {Double} transport_fee Child Order Logistics Amount - * @apiSuccess (SUB_JSON) {String} verify_department Verify Department - * @apiSuccess (SUB_JSON) {String} verify_department_trade_id Verify Department Trade Id - * @apiSuccess (SUB_JSON) {String} report_status 0:PROCCESSING,1:SUBMITED,2:FAIL,3:SUCCESS - * @apiSuccess (SUB_JSON) {String} error_code Error Code - * @apiSuccess (SUB_JSON) {String} error_msg Error Description - * - * @apiUse GlobalError - * @apiError (ERROR_CODE) ORDER_MISMATCH Order is not belong to this partner - * - */ - -/** - * @api {PUT} /api/v1.0/customs/partners/{partner_code}/redeclare/report/{client_report_id} Redeclare - * @apiName redeclare_report - * @apiDescription - * Used to resubmit the attachment information of the order required by the merchant. - * - * @apiVersion 1.0.0 - * @apiGroup Custom - * @apiHeader Accept application/json - * @apiHeader Content-Type application/json - * @apiParam (PathVariable) {String} partner_code Required, Partner code - * @apiParam (PathVariable) {String} client_report_id Required, Client declare ID - * @apiUse Sign - * - * @apiSuccess {String} report_id RoyalPay declare ID - * @apiSuccess {String} client_report_id Client declare ID - * @apiSuccess {String} report_status Result status: PROCCESSING,SUBMITED,FAILED,SUCCESS - * @apiSuccess {String} channel Channel - * @apiSuccess {String} custom Customs No. - * @apiSuccess {String} mch_custom_no Customs record ID - * @apiSuccess {String} mch_custom_name Customs record name - * @apiSuccess {String} order_id RoyalPay Order ID - * @apiSuccess {String} transaction_id Channel Order ID - * @apiSuccess {String} order_currency Currency - * @apiSuccess {Double} order_amount Order Amount - * @apiSuccess {String} report_time Declare Time - * @apiSuccess {String} creation_date Create Time - * @apiSuccess {String} last_update_date Update Time - * @apiSuccess {String} error_code Error Code - * @apiSuccess {String} error_msg Error Description - * @apiSuccess {String} verify_department Verify Department - * @apiSuccess {String} verify_department_trade_id Verify Department Trade Id - * @apiSuccess {JSON[]} sub_orders sub_order Child orders - * - * @apiSuccess (SUB_JSON) {String} sub_order_no Child order ID - * @apiSuccess (SUB_JSON) {String=CNY} fee_type=CNY Currency - * @apiSuccess (SUB_JSON) {Double} order_fee Child Order Amount - * @apiSuccess (SUB_JSON) {Double} transport_fee Child Order Logistics Amount - * @apiSuccess (SUB_JSON) {String} verify_department Verify Department - * @apiSuccess (SUB_JSON) {String} verify_department_trade_id Verify Department Trade Id - * @apiSuccess (SUB_JSON) {String} report_status 0:PROCCESSING,1:SUBMITED,2:FAIL,3:SUCCESS - * @apiSuccess (SUB_JSON) {String} error_code Error Code - * @apiSuccess (SUB_JSON) {String} error_msg Error Description - * - * @apiUse GlobalError - * @apiError (ERROR_CODE) ORDER_MISMATCH Order is not belong to this partner - * - */ -/** - * @api {GET} /api/v1.0/customs/partners/{partner_code}/declare/query/{client_report_id} Query Declare ID - * @apiName declare_query - * @apiDescription - * Used by the merchant to check the status of the customs declaration number. - * - * @apiVersion 1.0.0 - * @apiGroup Custom - * @apiHeader Accept application/json - * @apiHeader Content-Type application/json - * @apiParam (PathVariable) {String} partner_code Required, Partner code - * @apiParam (PathVariable) {String} client_report_id Required,Client declare ID - * @apiUse Sign - * - * @apiSuccess {String} return_code Execution result - * @apiSuccess {String} report_status Result status: PROCCESSING,SUBMITED,FAILED,SUCCESS - * @apiSuccess {String} report_id RoyalPay declare ID - * @apiSuccess {String} client_report_id Client declare ID - * @apiSuccess {String} return_msg Error Description - * @apiSuccess {String} order_id RoyalPay Order ID - * @apiSuccess {String} partner_order_id Partner Order ID - * @apiSuccess {String} verify_department Verify Department - * @apiSuccess {String} verify_department_trade_id Verify Department Trade Id - * @apiSuccess {JSON[]} sub_orders sub_order Child orders - * - * @apiSuccess (SUB_JSON) {String} sub_order_no Child order ID - * @apiSuccess (SUB_JSON) {String=CNY} fee_type=CNY Currency - * @apiSuccess (SUB_JSON) {Double} order_fee Child Order Amount - * @apiSuccess (SUB_JSON) {Double} transport_fee Child Order Logistics Amount - * @apiSuccess (SUB_JSON) {String} verify_department Verify Department - * @apiSuccess (SUB_JSON) {String} verify_department_trade_id Verify Department Trade Id - * @apiSuccess (SUB_JSON) {String} report_status 0:PROCCESSING,1:SUBMITED,2:FAIL,3:SUCCESS - * @apiSuccess (SUB_JSON) {String} error_code Error Code - * @apiSuccess (SUB_JSON) {String} error_msg Error Description - * - * @apiUse GlobalError - * @apiError (ERROR_CODE) ORDER_MISMATCH Order is not belong to this partner - * - */ -function apis() { - -} diff --git a/src/document/en/overview.md b/src/document/en/overview.md deleted file mode 100644 index 287ebaae2..000000000 --- a/src/document/en/overview.md +++ /dev/null @@ -1,103 +0,0 @@ -# Overview - -## Domain - -#### Production Environment -[https://mpay.royalpay.com.au/](https://mpay.royalpay.com.au/) -#### Sandbox Environment -[https://sandbox.royalpay.com.au/](https://sandbox.royalpay.com.au/) - -Sandbox has different sign parameters. Contact us to configure it for you. - -## Request And Parameters - -Request for payment or refund shall use PUT method. Request for querying order -shall use GET method. All requests including Request Entity are in JSON format. - -Accept in the request header shall be set to application/json for all requests except redirect pages. -Content-Type in the request header shall be set to application/json for all PUT/POST requests. - -System charset is UTF-8. - -There are 3 groups of parameters: Path Variable, Query Param, JSON Entity -+ Path Variable: included in the path as patterns -+ Query Param: parameters after the URI '?' symbol and formatted like key=value -+ JSON Entity: only used in PUT/POST requests - -Our API server will return 200 in JSON if the request has successfully reached the server, which does not indicate the success or failure of the actual operation. All responses in JSON format will include a return_code field which contains the operation result. The value SUCCESS indicates that the operation was successful while other values shows the type of error that happened. Response will also contain a return_msg field for detailed error message. - -## Multi-Language - -System error message supports Simplified Chinese and English. The system by default will automatically choose the language according to the Accept-Language value in request header. Cookie "locale" value (zh-CN or en-US) will affect the result language. - -## Which Gateway Api is for me? - - - -## Alipay Channels - -According to different Api used, Alipay channel was distributed to Retail channel and Online channel. Two channels has different exchange rate and surcharge rate. -+ Online Channel: Including H5 Mobile, Online Payment, APP SDK, JSAPI and QR Code Api -+ Retail Channel: Including Retail Pay - -Difference -- JSAPI and H5 Mobile: JSAPI can only be called in the web page opened in Alipay Client. H5 Mobile can call the payment panel in any browser or webview in App in the mobile device. -- Online Payment and QR Code: Online payment will jump to Alipay Official payment page. Customers can scan QR Code displayed in the page or sign in their account directly to finish payment. QR Code can provide a QR Code. Merchants can display this QR Code in their web page or jump to RoyalPay to display the QR Code. Customers can only scan the QR Code with their Alipay Client to finish payment. - -## Sign Algorithm - -Sign messages are required in each request for validation. Sign parameters are all attached to URL as query params, and the order is irrelevant. - -Sign Program: -1. Connect 4 parameters with '&' symbol into an original valid string. Escape value is not required. - -> valid_string=partner_code&time&nonce_str&credential_code - -Parameters: -- partner_code: Code for partner, including four uppercase letters or numbers. -- time: UTC timestamp in milliseconds. Take current timestamp of UTC. Data type is Long. The difference between time and RoyalPay server time should be less than 5 minutes. -- nonce_str: Random string. No limit for length. URL-Safe characters are required. The proposed length is 10-30 characters. -- credential_code: Partner credential code for development provided by RoyalPay system. Keep it safe and never disclose it to the public. If compromised, contact us to change it. - -2. Sign the valid string with SHA256 and turn to lowercase Hex string -> sign=hex(sha256(valid_string)).toLowerCase() - -3. Include the time,nonce_str and sign into Query Param when calling api. -> Example -> -> valid_string=RPAY&1468691301081&aaf2a94c8c2d56d5b43a1a3d9d811102&pQ5Jc9eoTcsxqPY5uQ3p2WmvSy0zEYeP -> sign=64712672795f94fa3bfb2e88ac09cb75d09bcf8a3c3dcaa529d8290dd6587060 - -> Test Page:https://mpay.royalpay.com.au/sign_test.html - -## Currency Codes - -RoyalPay can only accept the following currencies at the moment. Please note that the settlement currency will always be Australian Dollar. -- AUD -- CNY - -## Business Roles -- QR Code Payment displays a QR code image in a web page. Customers will scan the code via their WeChat and complete the payment in the linked web page. It is suitable for online shopping websites. -- JSAPI Payment redirects customers to a web page in WeChat. This page can only be opened within WeChat app and it is suitable for payment from micro-shops on WeChat platform. -- Retail passive payment(Scan Payment Code in customers’ WeChat Wallet) and active payment(Generate Payment QR Code for customers to scan) are used in retail environment such as payment terminals and pos machines. -- Order ID is required when creating an order. The same order id can be sent again. The system will decide to renew an order or close the old order according to the order status. System will recognise the same order id to avoid duplicated payments from customers. -- As orders can be resubmitted, Order ID returned by our server might not represent the last Order ID paid. -- QR Code order creation will return QR Code and pay_url. Merchants may decide whether to display the QR code on their website or to redirect customer to the payment page available at pay_url. -- JSAPI order creation will return pay_url. Merchants shall redirect customer to the payment page available at pay_url, and complete the payment. -- When redirecting to pay_url, sign information is required. -- Each request shall use new timestamp, nonce_str and sign. -- Our system will notify the caller after an order is paid successfully if notify_url was provided when creating an order. Otherwise, Merchants shall call the order query method repeatedly until order is paid or closed. -- Each unpaid order will be valid for 5 minutes. Expired order can be renewed with same the order id. It is suggested to trigger the event when user open the payment page again. -- Always redirect to RoyalPay’s payment page after calling the order creation method. -- Same order id is allowed in both creating new payment order and creating refund order but order details shall refer back to the initial request details. -- Price is specified in the base unit of the given currency. Using currency AUD as an example, 105 means 105 cents or $1.05. - -## Demo - -https://example.royalpay.com.au/api/payment/order - - - -## Demo Codes -- PHP: [https://mpay.royalpay.com.au/static/phpdemo.zip](https://mpay.royalpay.com.au/static/phpdemo.zip) -- Java: [https://mpay.royalpay.com.au/static/javademo.zip](https://mpay.royalpay.com.au/static/javademo.zip) diff --git a/src/document/openapi/cn/document.yml b/src/document/openapi/cn/document.yml index 14a18debc..54ff50107 100644 --- a/src/document/openapi/cn/document.yml +++ b/src/document/openapi/cn/document.yml @@ -128,6 +128,15 @@ tags: - name: CardPayment description: | 卡支付即消费者输入银行卡信息进行下单的接口,接入卡支付需要额外的合规流程。 + 卡支付分为预订单模式和直接下单模式。 + + 预订单模式即先提交订单基本信息(单号、金额等),得到返回的pay_url参数后跳转到对应收银台,消费者可以在收银台完成卡信息输入,同时可以通过customer_id机制允许同一个customer在后续支付中免于输入完整的卡信息实现快速支付。也支持开启3DS加强消费者的校验规避charge back风险 + + + 直接下单模式即在商户自己收银台展示我们集成的加密卡信息输入框,消费者输入卡信息后会将加密后的卡信息通过页面回调给商户前端,商户提交订单的时候将加密信息同时提交,无需额外跳转即可完成支付流程,此模式暂不支持3DS校验 + + + Direct-Order mode allow merchants to embed our secure card input frame in their cashier page. It can supply encrypted card information with callback to merchant's ui. Merchants just submit the encrypted card information and order basic information together and will get the payment result directly. However, this mode do not support 3-DS now. + li > a { - display: block; - width: 192px; - margin: 0; - padding: 2px 11px; - border: 0; - border-left: transparent 4px solid; - border-right: transparent 4px solid; - font-family: "Source Sans Pro", sans-serif; - font-weight: 400; - font-size: 14px; -} - -.sidenav > li.nav-header > a { - padding: 5px 15px; - border: 1px solid #e5e5e5; - width: 190px; - font-family: "Source Sans Pro", sans-serif; - font-weight: 700; - font-size: 16px; - background-color: #ffffff; -} - -.sidenav > li.nav-header.active > a { - background-color: #0088cc; -} - -.sidenav > .active > a { - position: relative; - z-index: 2; -} - -.sidenav > li > a:hover { - background-color: #ffffff; -} - -.sidenav > li.has-modifications a { - border-right: #60d060 4px solid; -} - -.sidenav > li.is-new a { - border-left: #e5e5e5 4px solid; -} - -/* ------------------------------------------------------------------------------------------ - * Compare - * ------------------------------------------------------------------------------------------ */ - -ins { - background: #60d060; - text-decoration: none; - color: #000000; -} - -del { - background: #f05050; - color: #000000; -} - -.label-ins { - background-color: #60d060; -} - -.label-del { - background-color: #f05050; - text-decoration: line-through; -} - -pre.ins { - background-color: #60d060; -} - -pre.del { - background-color: #f05050; - text-decoration: line-through; -} - -table.ins th, -table.ins td { - background-color: #60d060; -} - -table.del th, -table.del td { - background-color: #f05050; - text-decoration: line-through; -} - -tr.ins td { - background-color: #60d060; -} - -tr.del td { - background-color: #f05050; - text-decoration: line-through; -} - -/* ------------------------------------------------------------------------------------------ - * Spinner - * ------------------------------------------------------------------------------------------ */ - -#loader { - position: absolute; - width: 100%; -} - -#loader p { - padding-top: 80px; - margin-left: -4px; -} - -.spinner { - margin: 200px auto; - width: 60px; - height: 60px; - position: relative; -} - -.container1 > div, .container2 > div, .container3 > div { - width: 14px; - height: 14px; - background-color: #0088cc; - - border-radius: 100%; - position: absolute; - -webkit-animation: bouncedelay 1.2s infinite ease-in-out; - animation: bouncedelay 1.2s infinite ease-in-out; - /* Prevent first frame from flickering when animation starts */ - -webkit-animation-fill-mode: both; - animation-fill-mode: both; -} - -.spinner .spinner-container { - position: absolute; - width: 100%; - height: 100%; -} - -.container2 { - -webkit-transform: rotateZ(45deg); - transform: rotateZ(45deg); -} - -.container3 { - -webkit-transform: rotateZ(90deg); - transform: rotateZ(90deg); -} - -.circle1 { top: 0; left: 0; } -.circle2 { top: 0; right: 0; } -.circle3 { right: 0; bottom: 0; } -.circle4 { left: 0; bottom: 0; } - -.container2 .circle1 { - -webkit-animation-delay: -1.1s; - animation-delay: -1.1s; -} - -.container3 .circle1 { - -webkit-animation-delay: -1.0s; - animation-delay: -1.0s; -} - -.container1 .circle2 { - -webkit-animation-delay: -0.9s; - animation-delay: -0.9s; -} - -.container2 .circle2 { - -webkit-animation-delay: -0.8s; - animation-delay: -0.8s; -} - -.container3 .circle2 { - -webkit-animation-delay: -0.7s; - animation-delay: -0.7s; -} - -.container1 .circle3 { - -webkit-animation-delay: -0.6s; - animation-delay: -0.6s; -} - -.container2 .circle3 { - -webkit-animation-delay: -0.5s; - animation-delay: -0.5s; -} - -.container3 .circle3 { - -webkit-animation-delay: -0.4s; - animation-delay: -0.4s; -} - -.container1 .circle4 { - -webkit-animation-delay: -0.3s; - animation-delay: -0.3s; -} - -.container2 .circle4 { - -webkit-animation-delay: -0.2s; - animation-delay: -0.2s; -} - -.container3 .circle4 { - -webkit-animation-delay: -0.1s; - animation-delay: -0.1s; -} - -@-webkit-keyframes bouncedelay { - 0%, 80%, 100% { -webkit-transform: scale(0.0) } - 40% { -webkit-transform: scale(1.0) } -} - -@keyframes bouncedelay { - 0%, 80%, 100% { - transform: scale(0.0); - -webkit-transform: scale(0.0); - } 40% { - transform: scale(1.0); - -webkit-transform: scale(1.0); - } -} - -/* ------------------------------------------------------------------------------------------ - * Tabs - * ------------------------------------------------------------------------------------------ */ -ul.nav-tabs { - margin: 0; -} - -/* ------------------------------------------------------------------------------------------ - * Print - * ------------------------------------------------------------------------------------------ */ - -@media print { - - #sidenav, - #version, - #versions, - section .version, - section .versions { - display: none; - } - - #content { - margin-left: 0; - } - - a { - text-decoration: none; - color: inherit; - } - - a:after { - content: " [" attr(href) "] "; - } - - p { - color: #000000 - } - - pre { - background-color: #ffffff; - color: #000000; - padding: 10px; - border: #808080 1px solid; - border-radius: 6px; - position: relative; - margin: 10px 0 20px 0; - } - -} /* /@media print */ diff --git a/src/document/tpl/img/favicon.ico b/src/document/tpl/img/favicon.ico deleted file mode 100644 index c307a043933f0e860284157007820fccbe0fc96f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 894 zcmdUuF-rqM6ojAn2d)y!l(7l<0Sa4)bsGCC1jQ;~7c8z2NtY8s$`~6pMGzDegoNu- zL@-!L!~}wc5V437IkY*y&4xu5e}L}I?#-JU-p($Z$Q+O73G1S4&5JCENScWxDW=x- zP<(U8O;P?D)-rOqJxf*D5X#fMtSq@XeWi86$CGh&FK141Qt~NVWtAj}bFN-DLPvaT z*RIZLGz1Vz2nbHj-L#d^{{!N!&pBAbk2j(^U(2=VbJTML#&?*0s93%{?MEL%tQGVj{yYS9qIdd y=|=!E>V$}|g9zOiSnsP@V9MK)_i(HXtO!B3{(nl`|3Ly2=CXc=hEFxke;MD%5Rt_I diff --git a/src/document/tpl/index.html b/src/document/tpl/index.html deleted file mode 100644 index 445151ae7..000000000 --- a/src/document/tpl/index.html +++ /dev/null @@ -1,672 +0,0 @@ - - - - - RoyalPay网关支付接口 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
-
-
-
-
- - -
-
-
- -
- -
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-

Loading...

-
-
- - - - diff --git a/src/document/tpl/locales/ca.js b/src/document/tpl/locales/ca.js deleted file mode 100644 index 65af5df2b..000000000 --- a/src/document/tpl/locales/ca.js +++ /dev/null @@ -1,25 +0,0 @@ -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/src/document/tpl/locales/de.js b/src/document/tpl/locales/de.js deleted file mode 100644 index f66420d00..000000000 --- a/src/document/tpl/locales/de.js +++ /dev/null @@ -1,25 +0,0 @@ -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/src/document/tpl/locales/es.js b/src/document/tpl/locales/es.js deleted file mode 100644 index 3d47e800e..000000000 --- a/src/document/tpl/locales/es.js +++ /dev/null @@ -1,25 +0,0 @@ -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/src/document/tpl/locales/fr.js b/src/document/tpl/locales/fr.js deleted file mode 100644 index 100a64291..000000000 --- a/src/document/tpl/locales/fr.js +++ /dev/null @@ -1,25 +0,0 @@ -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/src/document/tpl/locales/it.js b/src/document/tpl/locales/it.js deleted file mode 100644 index 676d8b207..000000000 --- a/src/document/tpl/locales/it.js +++ /dev/null @@ -1,25 +0,0 @@ -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.' : 'Nessnu 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:' : 'visualizza la versione:', - 'Size range:' : 'Intervallo dimensione:', - 'Type' : 'Tipo', - 'url' : 'url' - } -}); diff --git a/src/document/tpl/locales/locale.js b/src/document/tpl/locales/locale.js deleted file mode 100644 index 1bf556b6b..000000000 --- a/src/document/tpl/locales/locale.js +++ /dev/null @@ -1,47 +0,0 @@ -define([ - './locales/ca.js', - './locales/de.js', - './locales/es.js', - './locales/fr.js', - './locales/it.js', - './locales/nl.js', - './locales/pl.js', - './locales/pt_br.js', - './locales/ru.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/src/document/tpl/locales/nl.js b/src/document/tpl/locales/nl.js deleted file mode 100644 index bddfeeb18..000000000 --- a/src/document/tpl/locales/nl.js +++ /dev/null @@ -1,25 +0,0 @@ -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/src/document/tpl/locales/pl.js b/src/document/tpl/locales/pl.js deleted file mode 100644 index db645ee16..000000000 --- a/src/document/tpl/locales/pl.js +++ /dev/null @@ -1,25 +0,0 @@ -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/src/document/tpl/locales/pt_br.js b/src/document/tpl/locales/pt_br.js deleted file mode 100644 index 2bd78b0d3..000000000 --- a/src/document/tpl/locales/pt_br.js +++ /dev/null @@ -1,25 +0,0 @@ -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/src/document/tpl/locales/ru.js b/src/document/tpl/locales/ru.js deleted file mode 100644 index c5f338214..000000000 --- a/src/document/tpl/locales/ru.js +++ /dev/null @@ -1,25 +0,0 @@ -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/src/document/tpl/locales/zh.js b/src/document/tpl/locales/zh.js deleted file mode 100644 index 66522067f..000000000 --- a/src/document/tpl/locales/zh.js +++ /dev/null @@ -1,25 +0,0 @@ -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/src/document/tpl/locales/zh_cn.js b/src/document/tpl/locales/zh_cn.js deleted file mode 100644 index 1938ca184..000000000 --- a/src/document/tpl/locales/zh_cn.js +++ /dev/null @@ -1,25 +0,0 @@ -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' : '参数', - 'Permission:' : '权限:', - 'Response' : '返回', - 'Send' : '发送', - 'Send a Sample Request' : '发送示例请求', - 'show up to version:' : '显示到指定版本:', - 'Size range:' : '取值范围:', - 'Type' : '类型', - 'url' : '网址' - } -}); diff --git a/src/document/tpl/main.js b/src/document/tpl/main.js deleted file mode 100644 index ef58c7b4d..000000000 --- a/src/document/tpl/main.js +++ /dev/null @@ -1,746 +0,0 @@ -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.min', - pathToRegexp: './vendor/path-to-regexp/index', - prettify: './vendor/prettify/prettify', - semver: './vendor/semver.min', - utilsSampleRequest: './utils/send_sample_request', - webfontloader: 'vendor/webfontloader' - }, - shim: { - bootstrap: { - deps: ['jquery'] - }, - diffMatchPatch: { - exports: 'diff_match_patch' - }, - handlebars: { - exports: 'Handlebars' - }, - handlebarsExtended: { - deps: ['jquery', 'handlebars'], - exports: 'Handlebars' - }, - prettify: { - exports: 'prettyPrint' - } - }, - urlArgs: 'v=' + (new Date()).getTime(), - waitSeconds: 15 -}); - -require([ - 'jquery', - 'lodash', - 'locales', - 'handlebarsExtended', - './api_project.js', - './api_data.js', - 'prettify', - 'utilsSampleRequest', - 'semver', - 'webfontloader', - 'bootstrap', - 'pathToRegexp' -], function($, _, locale, Handlebars, apiProject, apiData, prettyPrint, sampleRequest, semver, WebFont) { - - // load google web fonts - // loadGoogleFontCss(); - - 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); - - // 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 - }); - } else { - nav.push({ - title: entry.title, - group: group, - hidden: true, - name: entry.name, - type: entry.type, - version: entry.version - }); - } - oldName = entry.name; - } - }); - }); - - // Mainmenu Header entry - if (apiProject.header) { - nav.unshift({ - group: '_', - isHeader: true, - title: (apiProject.header.title == null) ? locale.__('General') : apiProject.header.title, - isFixed: true - }); - } - - // Mainmenu Footer entry - if (apiProject.footer && apiProject.footer.title != null) { - nav.push({ - 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 - if (apiProject.url) - 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 - }); - oldName = entry.name; - } - }); - - // render Section with Articles - var fields = { - group: groupEntry, - title: title, - description: description, - articles: articles - }; - content += templateSections(fields); - }); - $('#sections').append( content ); - - // Bootstrap Scrollspy - $(this).scrollspy({ target: '#scrollingNav', offset: 18 }); - - // 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'); - }); - - // Quickjump on Pageload to hash position. - if(window.location.hash) { - var id = window.location.hash; - if ($(id).length > 0) - $('html,body').animate({ scrollTop: parseInt($(id).offset().top) }, 0); - } - - /** - * 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) { - if (_.any(fields[name], function(item) { return item.type; }) ) - result = true; - }); - return result; - } - - /** - * On Template changes, recall plugins. - */ - function initDynamic() { - // bootstrap popover - $('a[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 request switch - $('.sample-request-switch').click(function (e) { - var name = '.' + $(this).attr('name') + '-fields'; - $(name).addClass('hide'); - $(this).parent().next(name).removeClass('hide'); - }); - - // call scrollspy refresh method - $(window).scrollspy('refresh'); - - // init modules - sampleRequest.initDynamic(); - } - initDynamic(); - - // Pre- / Code-Format - prettyPrint(); - - // - // HTML-Template specific jQuery-Functions - // - // Change Main Version - $('#versions li.version a').on('click', function(e) { - e.preventDefault(); - - var selectedVersion = $(this).html(); - $('#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 (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; - }); - - // 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'); - - if (window.location.hash) { - var id = window.location.hash; - $('html,body').animate({ scrollTop: parseInt($(id).offset().top) - 18 }, 0); - } - } - - /** - * 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 muss neu zugewiesen werden (sollte eigentlich mit on automatisch funktionieren... sollte) - $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; - } - - /** - * Load google fonts. - */ - function loadGoogleFontCss() { - WebFont.load({ - active: function() { - // Update scrollspy - $(window).scrollspy('refresh') - }, - google: { - families: ['Source Code Pro', 'Source Sans Pro:n4,n6,n7'] - } - }); - } - - /** - * 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[1]; // reference keep for sorting - if (key == 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; - } - -}); diff --git a/src/document/tpl/utils/handlebars_helper.js b/src/document/tpl/utils/handlebars_helper.js deleted file mode 100644 index 0740d6239..000000000 --- a/src/document/tpl/utils/handlebars_helper.js +++ /dev/null @@ -1,346 +0,0 @@ -define([ - 'locales', - 'handlebars', - 'diffMatchPatch' -], function(locale, Handlebars, DiffMatchPatch) { - - /** - * 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_not_notice',function (context, options) { - if(context.indexOf('notify_url')<0){ - return options.fn(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(compare, 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(''); - }; - - // Exports - return Handlebars; -}); diff --git a/src/document/tpl/utils/send_sample_request.js b/src/document/tpl/utils/send_sample_request.js deleted file mode 100644 index 6e4d69713..000000000 --- a/src/document/tpl/utils/send_sample_request.js +++ /dev/null @@ -1,181 +0,0 @@ -define([ - 'jquery' -], function($) { - - 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 ( ! element.optional && element.defaultValue !== '') { - value = element.defaultValue; - } - header[key] = value; - }); - }); - - // create JSON dictionary of parameters - var param = {}; - var paramType = {}; - $root.find(".sample-request-param:checked").each(function(i, element) { - var group = $(element).data("sample-request-param-group-id"); - $root.find("[data-sample-request-param-group=\"" + group + "\"]").each(function(i, element) { - var key = $(element).data("sample-request-param-name"); - var value = element.value; - if ( ! element.optional && element.defaultValue !== '') { - value = element.defaultValue; - } - param[key] = value; - paramType[key] = $(element).next().text(); - }); - }); - - // grab user-inputted URL - var url = $root.find(".sample-request-url").val(); - - // 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); - if (param[key] !== undefined) { - url = url.replace(matches[i], encodeURIComponent(param[key])); - - // remove URL parameters from list - delete param[key]; - } - } // for - - $root.find(".sample-request-response").fadeTo(250, 1); - $root.find(".sample-request-response-json").html("Loading..."); - refreshScrollSpy(); - - _.each( param, function( val, key ) { - var t = paramType[ key ].toLowerCase(); - if ( t === 'object' || t === 'array' ) { - try { - param[ key ] = JSON.parse( val ); - } catch (e) { - } - } - }); - - // send AJAX request, catch success or error callback - var ajaxRequest = { - url : url, - headers : header, - data : param, - type : type.toUpperCase(), - success : displaySuccess, - error : displayError - }; - - $.ajax(ajaxRequest); - - - function displaySuccess(data, status, jqXHR) { - var jsonResponse; - try { - jsonResponse = JSON.parse(jqXHR.responseText); - jsonResponse = JSON.stringify(jsonResponse, null, 4); - } catch (e) { - jsonResponse = data; - } - $root.find(".sample-request-response-json").html(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 = escape(jqXHR.responseText); - } - - if (jsonResponse) - message += "
" + 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").html(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; - } - - /** - * Exports. - */ - return { - initDynamic: initDynamic - }; - -}); diff --git a/src/document/tpl/vendor/bootstrap-responsive.min.css b/src/document/tpl/vendor/bootstrap-responsive.min.css deleted file mode 100644 index 96a435be9..000000000 --- a/src/document/tpl/vendor/bootstrap-responsive.min.css +++ /dev/null @@ -1,9 +0,0 @@ -/*! - * Bootstrap Responsive v2.3.2 - * - * Copyright 2013 Twitter, Inc - * Licensed under the Apache License v2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Designed and built with all the love in the world by @mdo and @fat. - */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}@-ms-viewport{width:device-width}.hidden{display:none;visibility:hidden}.visible-phone{display:none!important}.visible-tablet{display:none!important}.hidden-desktop{display:none!important}.visible-desktop{display:inherit!important}@media(min-width:768px) and (max-width:979px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-tablet{display:inherit!important}.hidden-tablet{display:none!important}}@media(max-width:767px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-phone{display:inherit!important}.hidden-phone{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:inherit!important}.hidden-print{display:none!important}}@media(min-width:1200px){.row{margin-left:-30px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:30px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:1170px}.span12{width:1170px}.span11{width:1070px}.span10{width:970px}.span9{width:870px}.span8{width:770px}.span7{width:670px}.span6{width:570px}.span5{width:470px}.span4{width:370px}.span3{width:270px}.span2{width:170px}.span1{width:70px}.offset12{margin-left:1230px}.offset11{margin-left:1130px}.offset10{margin-left:1030px}.offset9{margin-left:930px}.offset8{margin-left:830px}.offset7{margin-left:730px}.offset6{margin-left:630px}.offset5{margin-left:530px}.offset4{margin-left:430px}.offset3{margin-left:330px}.offset2{margin-left:230px}.offset1{margin-left:130px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.564102564102564%;*margin-left:2.5109110747408616%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.564102564102564%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.45299145299145%;*width:91.39979996362975%}.row-fluid .span10{width:82.90598290598291%;*width:82.8527914166212%}.row-fluid .span9{width:74.35897435897436%;*width:74.30578286961266%}.row-fluid .span8{width:65.81196581196582%;*width:65.75877432260411%}.row-fluid .span7{width:57.26495726495726%;*width:57.21176577559556%}.row-fluid .span6{width:48.717948717948715%;*width:48.664757228587014%}.row-fluid .span5{width:40.17094017094017%;*width:40.11774868157847%}.row-fluid .span4{width:31.623931623931625%;*width:31.570740134569924%}.row-fluid .span3{width:23.076923076923077%;*width:23.023731587561375%}.row-fluid .span2{width:14.52991452991453%;*width:14.476723040552828%}.row-fluid .span1{width:5.982905982905983%;*width:5.929714493544281%}.row-fluid .offset12{margin-left:105.12820512820512%;*margin-left:105.02182214948171%}.row-fluid .offset12:first-child{margin-left:102.56410256410257%;*margin-left:102.45771958537915%}.row-fluid .offset11{margin-left:96.58119658119658%;*margin-left:96.47481360247316%}.row-fluid .offset11:first-child{margin-left:94.01709401709402%;*margin-left:93.91071103837061%}.row-fluid .offset10{margin-left:88.03418803418803%;*margin-left:87.92780505546462%}.row-fluid .offset10:first-child{margin-left:85.47008547008548%;*margin-left:85.36370249136206%}.row-fluid .offset9{margin-left:79.48717948717949%;*margin-left:79.38079650845607%}.row-fluid .offset9:first-child{margin-left:76.92307692307693%;*margin-left:76.81669394435352%}.row-fluid .offset8{margin-left:70.94017094017094%;*margin-left:70.83378796144753%}.row-fluid .offset8:first-child{margin-left:68.37606837606839%;*margin-left:68.26968539734497%}.row-fluid .offset7{margin-left:62.393162393162385%;*margin-left:62.28677941443899%}.row-fluid .offset7:first-child{margin-left:59.82905982905982%;*margin-left:59.72267685033642%}.row-fluid .offset6{margin-left:53.84615384615384%;*margin-left:53.739770867430444%}.row-fluid .offset6:first-child{margin-left:51.28205128205128%;*margin-left:51.175668303327875%}.row-fluid .offset5{margin-left:45.299145299145295%;*margin-left:45.1927623204219%}.row-fluid .offset5:first-child{margin-left:42.73504273504273%;*margin-left:42.62865975631933%}.row-fluid .offset4{margin-left:36.75213675213675%;*margin-left:36.645753773413354%}.row-fluid .offset4:first-child{margin-left:34.18803418803419%;*margin-left:34.081651209310785%}.row-fluid .offset3{margin-left:28.205128205128204%;*margin-left:28.0987452264048%}.row-fluid .offset3:first-child{margin-left:25.641025641025642%;*margin-left:25.53464266230224%}.row-fluid .offset2{margin-left:19.65811965811966%;*margin-left:19.551736679396257%}.row-fluid .offset2:first-child{margin-left:17.094017094017094%;*margin-left:16.98763411529369%}.row-fluid .offset1{margin-left:11.11111111111111%;*margin-left:11.004728132387708%}.row-fluid .offset1:first-child{margin-left:8.547008547008547%;*margin-left:8.440625568285142%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:30px}input.span12,textarea.span12,.uneditable-input.span12{width:1156px}input.span11,textarea.span11,.uneditable-input.span11{width:1056px}input.span10,textarea.span10,.uneditable-input.span10{width:956px}input.span9,textarea.span9,.uneditable-input.span9{width:856px}input.span8,textarea.span8,.uneditable-input.span8{width:756px}input.span7,textarea.span7,.uneditable-input.span7{width:656px}input.span6,textarea.span6,.uneditable-input.span6{width:556px}input.span5,textarea.span5,.uneditable-input.span5{width:456px}input.span4,textarea.span4,.uneditable-input.span4{width:356px}input.span3,textarea.span3,.uneditable-input.span3{width:256px}input.span2,textarea.span2,.uneditable-input.span2{width:156px}input.span1,textarea.span1,.uneditable-input.span1{width:56px}.thumbnails{margin-left:-30px}.thumbnails>li{margin-left:30px}.row-fluid .thumbnails{margin-left:0}}@media(min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:724px}.span12{width:724px}.span11{width:662px}.span10{width:600px}.span9{width:538px}.span8{width:476px}.span7{width:414px}.span6{width:352px}.span5{width:290px}.span4{width:228px}.span3{width:166px}.span2{width:104px}.span1{width:42px}.offset12{margin-left:764px}.offset11{margin-left:702px}.offset10{margin-left:640px}.offset9{margin-left:578px}.offset8{margin-left:516px}.offset7{margin-left:454px}.offset6{margin-left:392px}.offset5{margin-left:330px}.offset4{margin-left:268px}.offset3{margin-left:206px}.offset2{margin-left:144px}.offset1{margin-left:82px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.7624309392265194%;*margin-left:2.709239449864817%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.7624309392265194%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.43646408839778%;*width:91.38327259903608%}.row-fluid .span10{width:82.87292817679558%;*width:82.81973668743387%}.row-fluid .span9{width:74.30939226519337%;*width:74.25620077583166%}.row-fluid .span8{width:65.74585635359117%;*width:65.69266486422946%}.row-fluid .span7{width:57.18232044198895%;*width:57.12912895262725%}.row-fluid .span6{width:48.61878453038674%;*width:48.56559304102504%}.row-fluid .span5{width:40.05524861878453%;*width:40.00205712942283%}.row-fluid .span4{width:31.491712707182323%;*width:31.43852121782062%}.row-fluid .span3{width:22.92817679558011%;*width:22.87498530621841%}.row-fluid .span2{width:14.3646408839779%;*width:14.311449394616199%}.row-fluid .span1{width:5.801104972375691%;*width:5.747913483013988%}.row-fluid .offset12{margin-left:105.52486187845304%;*margin-left:105.41847889972962%}.row-fluid .offset12:first-child{margin-left:102.76243093922652%;*margin-left:102.6560479605031%}.row-fluid .offset11{margin-left:96.96132596685082%;*margin-left:96.8549429881274%}.row-fluid .offset11:first-child{margin-left:94.1988950276243%;*margin-left:94.09251204890089%}.row-fluid .offset10{margin-left:88.39779005524862%;*margin-left:88.2914070765252%}.row-fluid .offset10:first-child{margin-left:85.6353591160221%;*margin-left:85.52897613729868%}.row-fluid .offset9{margin-left:79.8342541436464%;*margin-left:79.72787116492299%}.row-fluid .offset9:first-child{margin-left:77.07182320441989%;*margin-left:76.96544022569647%}.row-fluid .offset8{margin-left:71.2707182320442%;*margin-left:71.16433525332079%}.row-fluid .offset8:first-child{margin-left:68.50828729281768%;*margin-left:68.40190431409427%}.row-fluid .offset7{margin-left:62.70718232044199%;*margin-left:62.600799341718584%}.row-fluid .offset7:first-child{margin-left:59.94475138121547%;*margin-left:59.838368402492065%}.row-fluid .offset6{margin-left:54.14364640883978%;*margin-left:54.037263430116376%}.row-fluid .offset6:first-child{margin-left:51.38121546961326%;*margin-left:51.27483249088986%}.row-fluid .offset5{margin-left:45.58011049723757%;*margin-left:45.47372751851417%}.row-fluid .offset5:first-child{margin-left:42.81767955801105%;*margin-left:42.71129657928765%}.row-fluid .offset4{margin-left:37.01657458563536%;*margin-left:36.91019160691196%}.row-fluid .offset4:first-child{margin-left:34.25414364640884%;*margin-left:34.14776066768544%}.row-fluid .offset3{margin-left:28.45303867403315%;*margin-left:28.346655695309746%}.row-fluid .offset3:first-child{margin-left:25.69060773480663%;*margin-left:25.584224756083227%}.row-fluid .offset2{margin-left:19.88950276243094%;*margin-left:19.783119783707537%}.row-fluid .offset2:first-child{margin-left:17.12707182320442%;*margin-left:17.02068884448102%}.row-fluid .offset1{margin-left:11.32596685082873%;*margin-left:11.219583872105325%}.row-fluid .offset1:first-child{margin-left:8.56353591160221%;*margin-left:8.457152932878806%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:710px}input.span11,textarea.span11,.uneditable-input.span11{width:648px}input.span10,textarea.span10,.uneditable-input.span10{width:586px}input.span9,textarea.span9,.uneditable-input.span9{width:524px}input.span8,textarea.span8,.uneditable-input.span8{width:462px}input.span7,textarea.span7,.uneditable-input.span7{width:400px}input.span6,textarea.span6,.uneditable-input.span6{width:338px}input.span5,textarea.span5,.uneditable-input.span5{width:276px}input.span4,textarea.span4,.uneditable-input.span4{width:214px}input.span3,textarea.span3,.uneditable-input.span3{width:152px}input.span2,textarea.span2,.uneditable-input.span2{width:90px}input.span1,textarea.span1,.uneditable-input.span1{width:28px}}@media(max-width:767px){body{padding-right:20px;padding-left:20px}.navbar-fixed-top,.navbar-fixed-bottom,.navbar-static-top{margin-right:-20px;margin-left:-20px}.container-fluid{padding:0}.dl-horizontal dt{float:none;width:auto;clear:none;text-align:left}.dl-horizontal dd{margin-left:0}.container{width:auto}.row-fluid{width:100%}.row,.thumbnails{margin-left:0}.thumbnails>li{float:none;margin-left:0}[class*="span"],.uneditable-input[class*="span"],.row-fluid [class*="span"]{display:block;float:none;width:100%;margin-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.span12,.row-fluid .span12{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="offset"]:first-child{margin-left:0}.input-large,.input-xlarge,.input-xxlarge,input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.input-prepend input,.input-append input,.input-prepend input[class*="span"],.input-append input[class*="span"]{display:inline-block;width:auto}.controls-row [class*="span"]+[class*="span"]{margin-left:0}.modal{position:fixed;top:20px;right:20px;left:20px;width:auto;margin:0}.modal.fade{top:-100px}.modal.fade.in{top:20px}}@media(max-width:480px){.nav-collapse{-webkit-transform:translate3d(0,0,0)}.page-header h1 small{display:block;line-height:20px}input[type="checkbox"],input[type="radio"]{border:1px solid #ccc}.form-horizontal .control-label{float:none;width:auto;padding-top:0;text-align:left}.form-horizontal .controls{margin-left:0}.form-horizontal .control-list{padding-top:0}.form-horizontal .form-actions{padding-right:10px;padding-left:10px}.media .pull-left,.media .pull-right{display:block;float:none;margin-bottom:10px}.media-object{margin-right:0;margin-left:0}.modal{top:10px;right:10px;left:10px}.modal-header .close{padding:10px;margin:-10px}.carousel-caption{position:static}}@media(max-width:979px){body{padding-top:0}.navbar-fixed-top,.navbar-fixed-bottom{position:static}.navbar-fixed-top{margin-bottom:20px}.navbar-fixed-bottom{margin-top:20px}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding:5px}.navbar .container{width:auto;padding:0}.navbar .brand{padding-right:10px;padding-left:10px;margin:0 0 0 -5px}.nav-collapse{clear:both}.nav-collapse .nav{float:none;margin:0 0 10px}.nav-collapse .nav>li{float:none}.nav-collapse .nav>li>a{margin-bottom:2px}.nav-collapse .nav>.divider-vertical{display:none}.nav-collapse .nav .nav-header{color:#777;text-shadow:none}.nav-collapse .nav>li>a,.nav-collapse .dropdown-menu a{padding:9px 15px;font-weight:bold;color:#777;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.nav-collapse .btn{padding:4px 10px 4px;font-weight:normal;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.nav-collapse .dropdown-menu li+li a{margin-bottom:2px}.nav-collapse .nav>li>a:hover,.nav-collapse .nav>li>a:focus,.nav-collapse .dropdown-menu a:hover,.nav-collapse .dropdown-menu a:focus{background-color:#f2f2f2}.navbar-inverse .nav-collapse .nav>li>a,.navbar-inverse .nav-collapse .dropdown-menu a{color:#999}.navbar-inverse .nav-collapse .nav>li>a:hover,.navbar-inverse .nav-collapse .nav>li>a:focus,.navbar-inverse .nav-collapse .dropdown-menu a:hover,.navbar-inverse .nav-collapse .dropdown-menu a:focus{background-color:#111}.nav-collapse.in .btn-group{padding:0;margin-top:5px}.nav-collapse .dropdown-menu{position:static;top:auto;left:auto;display:none;float:none;max-width:none;padding:0;margin:0 15px;background-color:transparent;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.nav-collapse .open>.dropdown-menu{display:block}.nav-collapse .dropdown-menu:before,.nav-collapse .dropdown-menu:after{display:none}.nav-collapse .dropdown-menu .divider{display:none}.nav-collapse .nav>li>.dropdown-menu:before,.nav-collapse .nav>li>.dropdown-menu:after{display:none}.nav-collapse .navbar-form,.nav-collapse .navbar-search{float:none;padding:10px 15px;margin:10px 0;border-top:1px solid #f2f2f2;border-bottom:1px solid #f2f2f2;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1)}.navbar-inverse .nav-collapse .navbar-form,.navbar-inverse .nav-collapse .navbar-search{border-top-color:#111;border-bottom-color:#111}.navbar .nav-collapse .nav.pull-right{float:none;margin-left:0}.nav-collapse,.nav-collapse.collapse{height:0;overflow:hidden}.navbar .btn-navbar{display:block}.navbar-static .navbar-inner{padding-right:10px;padding-left:10px}}@media(min-width:980px){.nav-collapse.collapse{height:auto!important;overflow:visible!important}} diff --git a/src/document/tpl/vendor/bootstrap.min.css b/src/document/tpl/vendor/bootstrap.min.css deleted file mode 100644 index df96c8648..000000000 --- a/src/document/tpl/vendor/bootstrap.min.css +++ /dev/null @@ -1,9 +0,0 @@ -/*! - * Bootstrap v2.3.2 - * - * Copyright 2013 Twitter, Inc - * Licensed under the Apache License v2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Designed and built with all the love in the world by @mdo and @fat. - */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}a:hover,a:active{outline:0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{width:auto\9;height:auto;max-width:100%;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}#map_canvas img,.google-maps img{max-width:none}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{*overflow:visible;line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,html input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:20px;color:#333;background-color:#fff}a{color:#08c;text-decoration:none}a:hover,a:focus{color:#005580;text-decoration:underline}.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1)}.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px}.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.span12{width:940px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.127659574468085%;*margin-left:2.074468085106383%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.127659574468085%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%}.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%}.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%}.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%}.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%}.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%}.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%}.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%}.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%}.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%}.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%}.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%}.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%}.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%}.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%}.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%}.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%}.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%}.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%}.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%}.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%}.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%}.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%}.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%}.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%}.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%}.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%}.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%}.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%}.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%}.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%}.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%}.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%}.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%}.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%}[class*="span"].hide,.row-fluid [class*="span"].hide{display:none}[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;line-height:0;content:""}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;line-height:0;content:""}.container-fluid:after{clear:both}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:21px;font-weight:200;line-height:30px}small{font-size:85%}strong{font-weight:bold}em{font-style:italic}cite{font-style:normal}.muted{color:#999}a.muted:hover,a.muted:focus{color:#808080}.text-warning{color:#c09853}a.text-warning:hover,a.text-warning:focus{color:#a47e3c}.text-error{color:#b94a48}a.text-error:hover,a.text-error:focus{color:#953b39}.text-info{color:#3a87ad}a.text-info:hover,a.text-info:focus{color:#2d6987}.text-success{color:#468847}a.text-success:hover,a.text-success:focus{color:#356635}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:inherit;font-weight:bold;line-height:20px;color:inherit;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#999}h1,h2,h3{line-height:40px}h1{font-size:38.5px}h2{font-size:31.5px}h3{font-size:24.5px}h4{font-size:17.5px}h5{font-size:14px}h6{font-size:11.9px}h1 small{font-size:24.5px}h2 small{font-size:17.5px}h3 small{font-size:14px}h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #eee}ul,ol{padding:0;margin:0 0 10px 25px}ul ul,ul ol,ol ol,ol ul{margin-bottom:0}li{line-height:20px}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}ul.inline,ol.inline{margin-left:0;list-style:none}ul.inline>li,ol.inline>li{display:inline-block;*display:inline;padding-right:5px;padding-left:5px;*zoom:1}dl{margin-bottom:20px}dt,dd{line-height:20px}dt{font-weight:bold}dd{margin-left:10px}.dl-horizontal{*zoom:1}.dl-horizontal:before,.dl-horizontal:after{display:table;line-height:0;content:""}.dl-horizontal:after{clear:both}.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}hr{margin:20px 0;border:0;border-top:1px solid #eee;border-bottom:1px solid #fff}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{margin-bottom:0;font-size:17.5px;font-weight:300;line-height:1.25}blockquote small{display:block;line-height:20px;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:20px}code,pre{padding:0 3px 2px;font-family:Monaco,Menlo,Consolas,"Courier New",monospace;font-size:12px;color:#333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}code{padding:2px 4px;color:#d14;white-space:nowrap;background-color:#f7f7f9;border:1px solid #e1e1e8}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:20px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}pre.prettyprint{margin-bottom:20px}pre code{padding:0;color:inherit;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 20px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:15px;color:#999}label,input,button,select,textarea{font-size:14px;font-weight:normal;line-height:20px}input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}label{display:block;margin-bottom:5px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:10px;font-size:14px;line-height:20px;color:#555;vertical-align:middle;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}input,textarea,.uneditable-input{width:206px}textarea{height:auto}textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#fff;border:1px solid #ccc;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82,168,236,0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6)}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;*margin-top:0;line-height:normal}input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto}select,input[type="file"]{height:30px;*margin-top:4px;line-height:30px}select{width:220px;background-color:#fff;border:1px solid #ccc}select[multiple],select[size]{height:auto}select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.uneditable-input,.uneditable-textarea{color:#999;cursor:not-allowed;background-color:#fcfcfc;border-color:#ccc;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);box-shadow:inset 0 1px 2px rgba(0,0,0,0.025)}.uneditable-input{overflow:hidden;white-space:nowrap}.uneditable-textarea{width:auto;height:auto}input:-moz-placeholder,textarea:-moz-placeholder{color:#999}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#999}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}.radio,.checkbox{min-height:20px;padding-left:20px}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-20px}.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}.input-mini{width:60px}.input-small{width:90px}.input-medium{width:150px}.input-large{width:210px}.input-xlarge{width:270px}.input-xxlarge{width:530px}input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0}.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:926px}input.span11,textarea.span11,.uneditable-input.span11{width:846px}input.span10,textarea.span10,.uneditable-input.span10{width:766px}input.span9,textarea.span9,.uneditable-input.span9{width:686px}input.span8,textarea.span8,.uneditable-input.span8{width:606px}input.span7,textarea.span7,.uneditable-input.span7{width:526px}input.span6,textarea.span6,.uneditable-input.span6{width:446px}input.span5,textarea.span5,.uneditable-input.span5{width:366px}input.span4,textarea.span4,.uneditable-input.span4{width:286px}input.span3,textarea.span3,.uneditable-input.span3{width:206px}input.span2,textarea.span2,.uneditable-input.span2{width:126px}input.span1,textarea.span1,.uneditable-input.span1{width:46px}.controls-row{*zoom:1}.controls-row:before,.controls-row:after{display:table;line-height:0;content:""}.controls-row:after{clear:both}.controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left}.controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eee}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent}.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853}.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#c09853;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e}.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853}.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48}.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48}.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392}.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48}.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847}.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847}.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b}.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#dff0d8;border-color:#468847}.control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#3a87ad}.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#3a87ad}.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#3a87ad;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#2d6987;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3}.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#3a87ad;background-color:#d9edf7;border-color:#3a87ad}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}.form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1}.form-actions:before,.form-actions:after{display:table;line-height:0;content:""}.form-actions:after{clear:both}.help-block,.help-inline{color:#595959}.help-block{display:block;margin-bottom:10px}.help-inline{display:inline-block;*display:inline;padding-left:5px;vertical-align:middle;*zoom:1}.input-append,.input-prepend{display:inline-block;margin-bottom:10px;font-size:0;white-space:nowrap;vertical-align:middle}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu,.input-append .popover,.input-prepend .popover{font-size:14px}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2}.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:14px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#eee;border:1px solid #ccc}.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .btn-group>.dropdown-toggle{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append .active,.input-prepend .active{background-color:#a9dba9;border-color:#46a546}.input-prepend .add-on,.input-prepend .btn{margin-right:-1px}.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px}.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggle{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .btn-group:first-child{margin-left:0}input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;margin-bottom:0;vertical-align:middle;*zoom:1}.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block}.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0}.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:10px}legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:20px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;line-height:0;content:""}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:180px}.form-horizontal .help-block{margin-bottom:0}.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:10px}.form-horizontal .form-actions{padding-left:180px}table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:20px}.table th,.table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #ddd}.table th{font-weight:bold}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed th,.table-condensed td{padding:4px 5px}.table-bordered{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.table-bordered th,.table-bordered td{border-left:1px solid #ddd}.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0}.table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child,.table-bordered tbody:first-child tr:first-child>th:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child,.table-bordered tbody:first-child tr:first-child>th:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tbody:last-child tr:last-child>th:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>th:first-child{-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px}.table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tbody:last-child tr:last-child>th:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>th:last-child{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px}.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-moz-border-radius-bottomleft:0}.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomright:0}.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-striped tbody>tr:nth-child(odd)>td,.table-striped tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover tbody tr:hover>td,.table-hover tbody tr:hover>th{background-color:#f5f5f5}table td[class*="span"],table th[class*="span"],.row-fluid table td[class*="span"],.row-fluid table th[class*="span"]{display:table-cell;float:none;margin-left:0}.table td.span1,.table th.span1{float:none;width:44px;margin-left:0}.table td.span2,.table th.span2{float:none;width:124px;margin-left:0}.table td.span3,.table th.span3{float:none;width:204px;margin-left:0}.table td.span4,.table th.span4{float:none;width:284px;margin-left:0}.table td.span5,.table th.span5{float:none;width:364px;margin-left:0}.table td.span6,.table th.span6{float:none;width:444px;margin-left:0}.table td.span7,.table th.span7{float:none;width:524px;margin-left:0}.table td.span8,.table th.span8{float:none;width:604px;margin-left:0}.table td.span9,.table th.span9{float:none;width:684px;margin-left:0}.table td.span10,.table th.span10{float:none;width:764px;margin-left:0}.table td.span11,.table th.span11{float:none;width:844px;margin-left:0}.table td.span12,.table th.span12{float:none;width:924px;margin-left:0}.table tbody tr.success>td{background-color:#dff0d8}.table tbody tr.error>td{background-color:#f2dede}.table tbody tr.warning>td{background-color:#fcf8e3}.table tbody tr.info>td{background-color:#d9edf7}.table-hover tbody tr.success:hover>td{background-color:#d0e9c6}.table-hover tbody tr.error:hover>td{background-color:#ebcccc}.table-hover tbody tr.warning:hover>td{background-color:#faf2cc}.table-hover tbody tr.info:hover>td{background-color:#c4e3f3}[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;margin-top:1px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat}.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:focus>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>li>a:focus>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:focus>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"],.dropdown-submenu:focus>a>[class*=" icon-"]{background-image:url("../img/glyphicons-halflings-white.png")}.icon-glass{background-position:0 0}.icon-music{background-position:-24px 0}.icon-search{background-position:-48px 0}.icon-envelope{background-position:-72px 0}.icon-heart{background-position:-96px 0}.icon-star{background-position:-120px 0}.icon-star-empty{background-position:-144px 0}.icon-user{background-position:-168px 0}.icon-film{background-position:-192px 0}.icon-th-large{background-position:-216px 0}.icon-th{background-position:-240px 0}.icon-th-list{background-position:-264px 0}.icon-ok{background-position:-288px 0}.icon-remove{background-position:-312px 0}.icon-zoom-in{background-position:-336px 0}.icon-zoom-out{background-position:-360px 0}.icon-off{background-position:-384px 0}.icon-signal{background-position:-408px 0}.icon-cog{background-position:-432px 0}.icon-trash{background-position:-456px 0}.icon-home{background-position:0 -24px}.icon-file{background-position:-24px -24px}.icon-time{background-position:-48px -24px}.icon-road{background-position:-72px -24px}.icon-download-alt{background-position:-96px -24px}.icon-download{background-position:-120px -24px}.icon-upload{background-position:-144px -24px}.icon-inbox{background-position:-168px -24px}.icon-play-circle{background-position:-192px -24px}.icon-repeat{background-position:-216px -24px}.icon-refresh{background-position:-240px -24px}.icon-list-alt{background-position:-264px -24px}.icon-lock{background-position:-287px -24px}.icon-flag{background-position:-312px -24px}.icon-headphones{background-position:-336px -24px}.icon-volume-off{background-position:-360px -24px}.icon-volume-down{background-position:-384px -24px}.icon-volume-up{background-position:-408px -24px}.icon-qrcode{background-position:-432px -24px}.icon-barcode{background-position:-456px -24px}.icon-tag{background-position:0 -48px}.icon-tags{background-position:-25px -48px}.icon-book{background-position:-48px -48px}.icon-bookmark{background-position:-72px -48px}.icon-print{background-position:-96px -48px}.icon-camera{background-position:-120px -48px}.icon-font{background-position:-144px -48px}.icon-bold{background-position:-167px -48px}.icon-italic{background-position:-192px -48px}.icon-text-height{background-position:-216px -48px}.icon-text-width{background-position:-240px -48px}.icon-align-left{background-position:-264px -48px}.icon-align-center{background-position:-288px -48px}.icon-align-right{background-position:-312px -48px}.icon-align-justify{background-position:-336px -48px}.icon-list{background-position:-360px -48px}.icon-indent-left{background-position:-384px -48px}.icon-indent-right{background-position:-408px -48px}.icon-facetime-video{background-position:-432px -48px}.icon-picture{background-position:-456px -48px}.icon-pencil{background-position:0 -72px}.icon-map-marker{background-position:-24px -72px}.icon-adjust{background-position:-48px -72px}.icon-tint{background-position:-72px -72px}.icon-edit{background-position:-96px -72px}.icon-share{background-position:-120px -72px}.icon-check{background-position:-144px -72px}.icon-move{background-position:-168px -72px}.icon-step-backward{background-position:-192px -72px}.icon-fast-backward{background-position:-216px -72px}.icon-backward{background-position:-240px -72px}.icon-play{background-position:-264px -72px}.icon-pause{background-position:-288px -72px}.icon-stop{background-position:-312px -72px}.icon-forward{background-position:-336px -72px}.icon-fast-forward{background-position:-360px -72px}.icon-step-forward{background-position:-384px -72px}.icon-eject{background-position:-408px -72px}.icon-chevron-left{background-position:-432px -72px}.icon-chevron-right{background-position:-456px -72px}.icon-plus-sign{background-position:0 -96px}.icon-minus-sign{background-position:-24px -96px}.icon-remove-sign{background-position:-48px -96px}.icon-ok-sign{background-position:-72px -96px}.icon-question-sign{background-position:-96px -96px}.icon-info-sign{background-position:-120px -96px}.icon-screenshot{background-position:-144px -96px}.icon-remove-circle{background-position:-168px -96px}.icon-ok-circle{background-position:-192px -96px}.icon-ban-circle{background-position:-216px -96px}.icon-arrow-left{background-position:-240px -96px}.icon-arrow-right{background-position:-264px -96px}.icon-arrow-up{background-position:-289px -96px}.icon-arrow-down{background-position:-312px -96px}.icon-share-alt{background-position:-336px -96px}.icon-resize-full{background-position:-360px -96px}.icon-resize-small{background-position:-384px -96px}.icon-plus{background-position:-408px -96px}.icon-minus{background-position:-433px -96px}.icon-asterisk{background-position:-456px -96px}.icon-exclamation-sign{background-position:0 -120px}.icon-gift{background-position:-24px -120px}.icon-leaf{background-position:-48px -120px}.icon-fire{background-position:-72px -120px}.icon-eye-open{background-position:-96px -120px}.icon-eye-close{background-position:-120px -120px}.icon-warning-sign{background-position:-144px -120px}.icon-plane{background-position:-168px -120px}.icon-calendar{background-position:-192px -120px}.icon-random{width:16px;background-position:-216px -120px}.icon-comment{background-position:-240px -120px}.icon-magnet{background-position:-264px -120px}.icon-chevron-up{background-position:-288px -120px}.icon-chevron-down{background-position:-313px -119px}.icon-retweet{background-position:-336px -120px}.icon-shopping-cart{background-position:-360px -120px}.icon-folder-close{width:16px;background-position:-384px -120px}.icon-folder-open{width:16px;background-position:-408px -120px}.icon-resize-vertical{background-position:-432px -119px}.icon-resize-horizontal{background-position:-456px -118px}.icon-hdd{background-position:0 -144px}.icon-bullhorn{background-position:-24px -144px}.icon-bell{background-position:-48px -144px}.icon-certificate{background-position:-72px -144px}.icon-thumbs-up{background-position:-96px -144px}.icon-thumbs-down{background-position:-120px -144px}.icon-hand-right{background-position:-144px -144px}.icon-hand-left{background-position:-168px -144px}.icon-hand-up{background-position:-192px -144px}.icon-hand-down{background-position:-216px -144px}.icon-circle-arrow-right{background-position:-240px -144px}.icon-circle-arrow-left{background-position:-264px -144px}.icon-circle-arrow-up{background-position:-288px -144px}.icon-circle-arrow-down{background-position:-312px -144px}.icon-globe{background-position:-336px -144px}.icon-wrench{background-position:-360px -144px}.icon-tasks{background-position:-384px -144px}.icon-filter{background-position:-408px -144px}.icon-briefcase{background-position:-432px -144px}.icon-fullscreen{background-position:-456px -144px}.dropup,.dropdown{position:relative}.dropdown-toggle{*margin-bottom:-3px}.dropdown-toggle:active,.open .dropdown-toggle{outline:0}.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.dropdown .caret{margin-top:8px;margin-left:2px}.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;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-submenu:hover>a,.dropdown-submenu:focus>a{color:#fff;text-decoration:none;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0)}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;outline:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0)}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open{*z-index:1000}.open>.dropdown-menu{display:block}.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{border-top:0;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;-webkit-border-radius:5px 5px 5px 0;-moz-border-radius:5px 5px 5px 0;border-radius:5px 5px 5px 0}.dropdown-submenu>a:after{display:block;float:right;width:0;height:0;margin-top:5px;margin-right:-10px;border-color:transparent;border-left-color:#ccc;border-style:solid;border-width:5px 0 5px 5px;content:" "}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.dropdown .dropdown-menu .nav-header{padding-right:20px;padding-left:20px}.typeahead{z-index:1051;margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:bold;line-height:20px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn{display:inline-block;*display:inline;padding:4px 12px;margin-bottom:0;*margin-left:.3em;font-size:14px;line-height:20px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;*background-color:#e6e6e6;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #ccc;*border:0;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zoom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn:hover,.btn:focus,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}.btn:active,.btn.active{background-color:#ccc \9}.btn:first-child{*margin-left:0}.btn:hover,.btn:focus{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:11px 19px;font-size:17.5px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px}.btn-small{padding:2px 10px;font-size:11.9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0}.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px}.btn-mini{padding:0 6px;font-size:10.5px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255,255,255,0.75)}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#006dcc;*background-color:#04c;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;border-color:#04c #04c #002a80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0044cc',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#04c;*background-color:#003bb3}.btn-primary:active,.btn-primary.active{background-color:#039 \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#faa732;*background-color:#f89406;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;border-color:#f89406 #f89406 #ad6704;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#f89406;*background-color:#df8505}.btn-warning:active,.btn-warning.active{background-color:#c67605 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#da4f49;*background-color:#bd362f;background-image:-moz-linear-gradient(top,#ee5f5b,#bd362f);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#bd362f));background-image:-webkit-linear-gradient(top,#ee5f5b,#bd362f);background-image:-o-linear-gradient(top,#ee5f5b,#bd362f);background-image:linear-gradient(to bottom,#ee5f5b,#bd362f);background-repeat:repeat-x;border-color:#bd362f #bd362f #802420;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffbd362f',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#bd362f;*background-color:#a9302a}.btn-danger:active,.btn-danger.active{background-color:#942a25 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#5bb75b;*background-color:#51a351;background-image:-moz-linear-gradient(top,#62c462,#51a351);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#51a351));background-image:-webkit-linear-gradient(top,#62c462,#51a351);background-image:-o-linear-gradient(top,#62c462,#51a351);background-image:linear-gradient(to bottom,#62c462,#51a351);background-repeat:repeat-x;border-color:#51a351 #51a351 #387038;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff51a351',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#51a351;*background-color:#499249}.btn-success:active,.btn-success.active{background-color:#408140 \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#49afcd;*background-color:#2f96b4;background-image:-moz-linear-gradient(top,#5bc0de,#2f96b4);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#2f96b4));background-image:-webkit-linear-gradient(top,#5bc0de,#2f96b4);background-image:-o-linear-gradient(top,#5bc0de,#2f96b4);background-image:linear-gradient(to bottom,#5bc0de,#2f96b4);background-repeat:repeat-x;border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff2f96b4',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#2f96b4;*background-color:#2a85a0}.btn-info:active,.btn-info.active{background-color:#24748c \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#363636;*background-color:#222;background-image:-moz-linear-gradient(top,#444,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#444),to(#222));background-image:-webkit-linear-gradient(top,#444,#222);background-image:-o-linear-gradient(top,#444,#222);background-image:linear-gradient(to bottom,#444,#222);background-repeat:repeat-x;border-color:#222 #222 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444',endColorstr='#ff222222',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#222;*background-color:#151515}.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9}button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{color:#08c;cursor:pointer;border-color:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:hover,.btn-link:focus{color:#005580;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus{color:#333;text-decoration:none}.btn-group{position:relative;display:inline-block;*display:inline;*margin-left:.3em;font-size:0;white-space:nowrap;vertical-align:middle;*zoom:1}.btn-group:first-child{*margin-left:0}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{margin-top:10px;margin-bottom:10px;font-size:0}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group{margin-left:5px}.btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn+.btn{margin-left:-1px}.btn-group>.btn,.btn-group>.dropdown-menu,.btn-group>.popover{font-size:14px}.btn-group>.btn-mini{font-size:10.5px}.btn-group>.btn-small{font-size:11.9px}.btn-group>.btn-large{font-size:17.5px}.btn-group>.btn:first-child{margin-left:0;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{*padding-top:5px;padding-right:8px;*padding-bottom:5px;padding-left:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn-group>.btn-mini+.dropdown-toggle{*padding-top:2px;padding-right:5px;*padding-bottom:2px;padding-left:5px}.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px}.btn-group>.btn-large+.dropdown-toggle{*padding-top:7px;padding-right:12px;*padding-bottom:7px;padding-left:12px}.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6}.btn-group.open .btn-primary.dropdown-toggle{background-color:#04c}.btn-group.open .btn-warning.dropdown-toggle{background-color:#f89406}.btn-group.open .btn-danger.dropdown-toggle{background-color:#bd362f}.btn-group.open .btn-success.dropdown-toggle{background-color:#51a351}.btn-group.open .btn-info.dropdown-toggle{background-color:#2f96b4}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#222}.btn .caret{margin-top:8px;margin-left:0}.btn-large .caret{margin-top:6px}.btn-large .caret{border-top-width:5px;border-right-width:5px;border-left-width:5px}.btn-mini .caret,.btn-small .caret{margin-top:8px}.dropup .btn-large .caret{border-bottom-width:5px}.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#fff;border-bottom-color:#fff}.btn-group-vertical{display:inline-block;*display:inline;*zoom:1}.btn-group-vertical>.btn{display:block;float:none;max-width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical>.btn+.btn{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.btn-group-vertical>.btn:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.btn-group-vertical>.btn-large:first-child{-webkit-border-radius:6px 6px 0 0;-moz-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0}.btn-group-vertical>.btn-large:last-child{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.alert{padding:8px 35px 8px 14px;margin-bottom:20px;text-shadow:0 1px 0 rgba(255,255,255,0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.alert,.alert h4{color:#c09853}.alert h4{margin:0}.alert .close{position:relative;top:-2px;right:-21px;line-height:20px}.alert-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.alert-success h4{color:#468847}.alert-danger,.alert-error{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.alert-danger h4,.alert-error h4{color:#b94a48}.alert-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.alert-info h4{color:#3a87ad}.alert-block{padding-top:14px;padding-bottom:14px}.alert-block>p,.alert-block>ul{margin-bottom:0}.alert-block p+p{margin-top:5px}.nav{margin-bottom:20px;margin-left:0;list-style:none}.nav>li>a{display:block}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li>a>img{max-width:none}.nav>.pull-right{float:right}.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:20px;color:#999;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase}.nav li+.nav-header{margin-top:9px}.nav-list{padding-right:15px;padding-left:15px;margin-bottom:0}.nav-list>li>a,.nav-list .nav-header{margin-right:-15px;margin-left:-15px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.nav-list>li>a{padding:3px 15px}.nav-list>.active>a,.nav-list>.active>a:hover,.nav-list>.active>a:focus{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.2);background-color:#08c}.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{margin-right:2px}.nav-list .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.nav-tabs,.nav-pills{*zoom:1}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;line-height:0;content:""}.nav-tabs:after,.nav-pills:after{clear:both}.nav-tabs>li,.nav-pills>li{float:left}.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{margin-bottom:-1px}.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:20px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover,.nav-tabs>li>a:focus{border-color:#eee #eee #ddd}.nav-tabs>.active>a,.nav-tabs>.active>a:hover,.nav-tabs>.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.nav-pills>.active>a,.nav-pills>.active>a:hover,.nav-pills>.active>a:focus{color:#fff;background-color:#08c}.nav-stacked>li{float:none}.nav-stacked>li>a{margin-right:0}.nav-tabs.nav-stacked{border-bottom:0}.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-topleft:4px}.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-moz-border-radius-bottomleft:4px}.nav-tabs.nav-stacked>li>a:hover,.nav-tabs.nav-stacked>li>a:focus{z-index:2;border-color:#ddd}.nav-pills.nav-stacked>li>a{margin-bottom:3px}.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px}.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.nav .dropdown-toggle .caret{margin-top:6px;border-top-color:#08c;border-bottom-color:#08c}.nav .dropdown-toggle:hover .caret,.nav .dropdown-toggle:focus .caret{border-top-color:#005580;border-bottom-color:#005580}.nav-tabs .dropdown-toggle .caret{margin-top:8px}.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .active .dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.nav>.dropdown.active>a:hover,.nav>.dropdown.active>a:focus{cursor:pointer}.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover,.nav>li.dropdown.open.active>a:focus{color:#fff;background-color:#999;border-color:#999}.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret,.nav li.dropdown.open a:focus .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=100)}.tabs-stacked .open>a:hover,.tabs-stacked .open>a:focus{border-color:#999}.tabbable{*zoom:1}.tabbable:before,.tabbable:after{display:table;line-height:0;content:""}.tabbable:after{clear:both}.tab-content{overflow:auto}.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #ddd}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.tabs-below>.nav-tabs>li>a:hover,.tabs-below>.nav-tabs>li>a:focus{border-top-color:#ddd;border-bottom-color:transparent}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover,.tabs-below>.nav-tabs>.active>a:focus{border-color:transparent #ddd #ddd #ddd}.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px}.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd}.tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.tabs-left>.nav-tabs>li>a:hover,.tabs-left>.nav-tabs>li>a:focus{border-color:#eee #ddd #eee #eee}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover,.tabs-left>.nav-tabs .active>a:focus{border-color:#ddd transparent #ddd #ddd;*border-right-color:#fff}.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd}.tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.tabs-right>.nav-tabs>li>a:hover,.tabs-right>.nav-tabs>li>a:focus{border-color:#eee #eee #eee #ddd}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover,.tabs-right>.nav-tabs .active>a:focus{border-color:#ddd #ddd #ddd transparent;*border-left-color:#fff}.nav>.disabled>a{color:#999}.nav>.disabled>a:hover,.nav>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent}.navbar{*position:relative;*z-index:2;margin-bottom:20px;overflow:visible}.navbar-inner{min-height:40px;padding-right:20px;padding-left:20px;background-color:#fafafa;background-image:-moz-linear-gradient(top,#fff,#f2f2f2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#f2f2f2));background-image:-webkit-linear-gradient(top,#fff,#f2f2f2);background-image:-o-linear-gradient(top,#fff,#f2f2f2);background-image:linear-gradient(to bottom,#fff,#f2f2f2);background-repeat:repeat-x;border:1px solid #d4d4d4;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#fff2f2f2',GradientType=0);*zoom:1;-webkit-box-shadow:0 1px 4px rgba(0,0,0,0.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,0.065);box-shadow:0 1px 4px rgba(0,0,0,0.065)}.navbar-inner:before,.navbar-inner:after{display:table;line-height:0;content:""}.navbar-inner:after{clear:both}.navbar .container{width:auto}.nav-collapse.collapse{height:auto;overflow:visible}.navbar .brand{display:block;float:left;padding:10px 20px 10px;margin-left:-20px;font-size:20px;font-weight:200;color:#777;text-shadow:0 1px 0 #fff}.navbar .brand:hover,.navbar .brand:focus{text-decoration:none}.navbar-text{margin-bottom:0;line-height:40px;color:#777}.navbar-link{color:#777}.navbar-link:hover,.navbar-link:focus{color:#333}.navbar .divider-vertical{height:40px;margin:0 9px;border-right:1px solid #fff;border-left:1px solid #f2f2f2}.navbar .btn,.navbar .btn-group{margin-top:5px}.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn,.navbar .input-prepend .btn-group,.navbar .input-append .btn-group{margin-top:0}.navbar-form{margin-bottom:0;*zoom:1}.navbar-form:before,.navbar-form:after{display:table;line-height:0;content:""}.navbar-form:after{clear:both}.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:5px}.navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0}.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px}.navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}.navbar-search{position:relative;float:left;margin-top:5px;margin-bottom:0}.navbar-search .search-query{padding:4px 14px;margin-bottom:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.navbar-static-top{position:static;margin-bottom:0}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px}.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-right:0;padding-left:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:0 1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,0.1);box-shadow:0 1px 10px rgba(0,0,0,0.1)}.navbar-fixed-bottom{bottom:0}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,0.1);box-shadow:0 -1px 10px rgba(0,0,0,0.1)}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right;margin-right:0}.navbar .nav>li{float:left}.navbar .nav>li>a{float:none;padding:10px 15px 10px;color:#777;text-decoration:none;text-shadow:0 1px 0 #fff}.navbar .nav .dropdown-toggle .caret{margin-top:8px}.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{color:#333;text-decoration:none;background-color:transparent}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#555;text-decoration:none;background-color:#e5e5e5;-webkit-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);box-shadow:inset 0 3px 8px rgba(0,0,0,0.125)}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-right:5px;margin-left:5px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#ededed;*background-color:#e5e5e5;background-image:-moz-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f2f2f2),to(#e5e5e5));background-image:-webkit-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:-o-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:linear-gradient(to bottom,#f2f2f2,#e5e5e5);background-repeat:repeat-x;border-color:#e5e5e5 #e5e5e5 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2',endColorstr='#ffe5e5e5',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075)}.navbar .btn-navbar:hover,.navbar .btn-navbar:focus,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#fff;background-color:#e5e5e5;*background-color:#d9d9d9}.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#ccc \9}.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.25);-moz-box-shadow:0 1px 0 rgba(0,0,0,0.25);box-shadow:0 1px 0 rgba(0,0,0,0.25)}.btn-navbar .icon-bar+.icon-bar{margin-top:3px}.navbar .nav>li>.dropdown-menu:before{position:absolute;top:-7px;left:9px;display:inline-block;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-left:7px solid transparent;border-bottom-color:rgba(0,0,0,0.2);content:''}.navbar .nav>li>.dropdown-menu:after{position:absolute;top:-6px;left:10px;display:inline-block;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent;content:''}.navbar-fixed-bottom .nav>li>.dropdown-menu:before{top:auto;bottom:-7px;border-top:7px solid #ccc;border-bottom:0;border-top-color:rgba(0,0,0,0.2)}.navbar-fixed-bottom .nav>li>.dropdown-menu:after{top:auto;bottom:-6px;border-top:6px solid #fff;border-bottom:0}.navbar .nav li.dropdown>a:hover .caret,.navbar .nav li.dropdown>a:focus .caret{border-top-color:#333;border-bottom-color:#333}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{color:#555;background-color:#e5e5e5}.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#777;border-bottom-color:#777}.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{right:12px;left:auto}.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{right:13px;left:auto}.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{right:100%;left:auto;margin-right:-1px;margin-left:0;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.navbar-inverse .navbar-inner{background-color:#1b1b1b;background-image:-moz-linear-gradient(top,#222,#111);background-image:-webkit-gradient(linear,0 0,0 100%,from(#222),to(#111));background-image:-webkit-linear-gradient(top,#222,#111);background-image:-o-linear-gradient(top,#222,#111);background-image:linear-gradient(to bottom,#222,#111);background-repeat:repeat-x;border-color:#252525;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222',endColorstr='#ff111111',GradientType=0)}.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#999;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover,.navbar-inverse .brand:focus,.navbar-inverse .nav>li>a:focus{color:#fff}.navbar-inverse .brand{color:#999}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#fff;background-color:#111}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover,.navbar-inverse .navbar-link:focus{color:#fff}.navbar-inverse .divider-vertical{border-right-color:#222;border-left-color:#111}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{color:#fff;background-color:#111}.navbar-inverse .nav li.dropdown>a:hover .caret,.navbar-inverse .nav li.dropdown>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#999;border-bottom-color:#999}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-search .search-query{color:#fff;background-color:#515151;border-color:#111;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#333;text-shadow:0 1px 0 #fff;background-color:#fff;border:0;outline:0;-webkit-box-shadow:0 0 3px rgba(0,0,0,0.15);-moz-box-shadow:0 0 3px rgba(0,0,0,0.15);box-shadow:0 0 3px rgba(0,0,0,0.15)}.navbar-inverse .btn-navbar{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e0e0e;*background-color:#040404;background-image:-moz-linear-gradient(top,#151515,#040404);background-image:-webkit-gradient(linear,0 0,0 100%,from(#151515),to(#040404));background-image:-webkit-linear-gradient(top,#151515,#040404);background-image:-o-linear-gradient(top,#151515,#040404);background-image:linear-gradient(to bottom,#151515,#040404);background-repeat:repeat-x;border-color:#040404 #040404 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515',endColorstr='#ff040404',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:focus,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#fff;background-color:#040404;*background-color:#000}.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#000 \9}.breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.breadcrumb>li{display:inline-block;*display:inline;text-shadow:0 1px 0 #fff;*zoom:1}.breadcrumb>li>.divider{padding:0 5px;color:#ccc}.breadcrumb>.active{color:#999}.pagination{margin:20px 0}.pagination ul{display:inline-block;*display:inline;margin-bottom:0;margin-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*zoom:1;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.pagination ul>li{display:inline}.pagination ul>li>a,.pagination ul>li>span{float:left;padding:4px 12px;line-height:20px;text-decoration:none;background-color:#fff;border:1px solid #ddd;border-left-width:0}.pagination ul>li>a:hover,.pagination ul>li>a:focus,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#f5f5f5}.pagination ul>.active>a,.pagination ul>.active>span{color:#999;cursor:default}.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>a:focus{color:#999;cursor:default;background-color:transparent}.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.pagination-centered{text-align:center}.pagination-right{text-align:right}.pagination-large ul>li>a,.pagination-large ul>li>span{padding:11px 19px;font-size:17.5px}.pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.pagination-mini ul>li:first-child>a,.pagination-small ul>li:first-child>a,.pagination-mini ul>li:first-child>span,.pagination-small ul>li:first-child>span{-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-bottomleft:3px;-moz-border-radius-topleft:3px}.pagination-mini ul>li:last-child>a,.pagination-small ul>li:last-child>a,.pagination-mini ul>li:last-child>span,.pagination-small ul>li:last-child>span{-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:3px}.pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 10px;font-size:11.9px}.pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:0 6px;font-size:10.5px}.pager{margin:20px 0;text-align:center;list-style:none;*zoom:1}.pager:before,.pager:after{display:table;line-height:0;content:""}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#f5f5f5}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;cursor:default;background-color:#fff}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}.modal{position:fixed;top:10%;left:50%;z-index:1050;width:560px;margin-left:-280px;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;outline:0;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}.modal.fade{top:-25%;-webkit-transition:opacity .3s linear,top .3s ease-out;-moz-transition:opacity .3s linear,top .3s ease-out;-o-transition:opacity .3s linear,top .3s ease-out;transition:opacity .3s linear,top .3s ease-out}.modal.fade.in{top:10%}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-header h3{margin:0;line-height:30px}.modal-body{position:relative;max-height:400px;padding:15px;overflow-y:auto}.modal-form{margin-bottom:0}.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;*zoom:1;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.modal-footer:before,.modal-footer:after{display:table;line-height:0;content:""}.modal-footer:after{clear:both}.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}.tooltip{position:absolute;z-index:1030;display:block;font-size:11px;line-height:1.4;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}.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-inner{max-width:200px;padding:8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#000;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#000;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#000;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.popover-title:empty{display:none}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;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,0.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);border-top-width:0}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,0.25);border-right-width:0}.popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0}.thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:before,.thumbnails:after{display:table;line-height:0;content:""}.thumbnails:after{clear:both}.row-fluid .thumbnails{margin-left:0}.thumbnails>li{float:left;margin-bottom:20px;margin-left:20px}.thumbnail{display:block;padding:4px;line-height:20px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.055);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.055);box-shadow:0 1px 3px rgba(0,0,0,0.055);-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}a.thumbnail:hover,a.thumbnail:focus{border-color:#08c;-webkit-box-shadow:0 1px 4px rgba(0,105,214,0.25);-moz-box-shadow:0 1px 4px rgba(0,105,214,0.25);box-shadow:0 1px 4px rgba(0,105,214,0.25)}.thumbnail>img{display:block;max-width:100%;margin-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#555}.media,.media-body{overflow:hidden;*overflow:visible;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{margin-left:0;list-style:none}.label,.badge{display:inline-block;padding:2px 4px;font-size:11.844px;font-weight:bold;line-height:14px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);white-space:nowrap;vertical-align:baseline;background-color:#999}.label{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.badge{padding-right:9px;padding-left:9px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}.label:empty,.badge:empty{display:none}a.label:hover,a.label:focus,a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.label-important,.badge-important{background-color:#b94a48}.label-important[href],.badge-important[href]{background-color:#953b39}.label-warning,.badge-warning{background-color:#f89406}.label-warning[href],.badge-warning[href]{background-color:#c67605}.label-success,.badge-success{background-color:#468847}.label-success[href],.badge-success[href]{background-color:#356635}.label-info,.badge-info{background-color:#3a87ad}.label-info[href],.badge-info[href]{background-color:#2d6987}.label-inverse,.badge-inverse{background-color:#333}.label-inverse[href],.badge-inverse[href]{background-color:#1a1a1a}.btn .label,.btn .badge{position:relative;top:-1px}.btn-mini .label,.btn-mini .badge{top:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 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:#f7f7f7;background-image:-moz-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9));background-image:-webkit-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-o-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:linear-gradient(to bottom,#f5f5f5,#f9f9f9);background-repeat:repeat-x;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#fff9f9f9',GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress .bar{float:left;width:0;height:100%;font-size:12px;color:#fff;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top,#149bdf,#0480be);background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));background-image:-webkit-linear-gradient(top,#149bdf,#0480be);background-image:-o-linear-gradient(top,#149bdf,#0480be);background-image:linear-gradient(to bottom,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf',endColorstr='#ff0480be',GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15)}.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px}.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top,#ee5f5b,#c43c35);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35));background-image:-webkit-linear-gradient(top,#ee5f5b,#c43c35);background-image:-o-linear-gradient(top,#ee5f5b,#c43c35);background-image:linear-gradient(to bottom,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffc43c35',GradientType=0)}.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top,#62c462,#57a957);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957));background-image:-webkit-linear-gradient(top,#62c462,#57a957);background-image:-o-linear-gradient(top,#62c462,#57a957);background-image:linear-gradient(to bottom,#62c462,#57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff57a957',GradientType=0)}.progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top,#5bc0de,#339bb9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#339bb9));background-image:-webkit-linear-gradient(top,#5bc0de,#339bb9);background-image:-o-linear-gradient(top,#5bc0de,#339bb9);background-image:linear-gradient(to bottom,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff339bb9',GradientType=0)}.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-warning .bar,.progress .bar-warning{background-color:#faa732;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0)}.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#fbb450;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.accordion{margin-bottom:20px}.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.accordion-heading{border-bottom:0}.accordion-heading .accordion-toggle{display:block;padding:8px 15px}.accordion-toggle{cursor:pointer}.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5}.carousel{position:relative;margin-bottom:20px;line-height:1}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-moz-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;line-height:1}.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:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#fff;text-align:center;background:#222;border:3px solid #fff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:.5;filter:alpha(opacity=50)}.carousel-control.right{right:15px;left:auto}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-indicators{position:absolute;top:15px;right:15px;z-index:5;margin:0;list-style:none}.carousel-indicators li{display:block;float:left;width:10px;height:10px;margin-left:5px;text-indent:-999px;background-color:#ccc;background-color:rgba(255,255,255,0.25);border-radius:5px}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:0;bottom:0;left:0;padding:15px;background:#333;background:rgba(0,0,0,0.75)}.carousel-caption h4,.carousel-caption p{line-height:20px;color:#fff}.carousel-caption h4{margin:0 0 5px}.carousel-caption p{margin-bottom:0}.hero-unit{padding:60px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:30px;color:inherit;background-color:#eee;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;color:inherit}.hero-unit li{line-height:30px}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed} diff --git a/src/document/tpl/vendor/bootstrap.min.js b/src/document/tpl/vendor/bootstrap.min.js deleted file mode 100644 index 848258d38..000000000 --- a/src/document/tpl/vendor/bootstrap.min.js +++ /dev/null @@ -1,6 +0,0 @@ -/*! -* Bootstrap.js by @fat & @mdo -* Copyright 2013 Twitter, Inc. -* http://www.apache.org/licenses/LICENSE-2.0.txt -*/ -!function(e){"use strict";e(function(){e.support.transition=function(){var e=function(){var e=document.createElement("bootstrap"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},n;for(n in t)if(e.style[n]!==undefined)return t[n]}();return e&&{end:e}}()})}(window.jQuery),!function(e){"use strict";var t='[data-dismiss="alert"]',n=function(n){e(n).on("click",t,this.close)};n.prototype.close=function(t){function s(){i.trigger("closed").remove()}var n=e(this),r=n.attr("data-target"),i;r||(r=n.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,"")),i=e(r),t&&t.preventDefault(),i.length||(i=n.hasClass("alert")?n:n.parent()),i.trigger(t=e.Event("close"));if(t.isDefaultPrevented())return;i.removeClass("in"),e.support.transition&&i.hasClass("fade")?i.on(e.support.transition.end,s):s()};var r=e.fn.alert;e.fn.alert=function(t){return this.each(function(){var r=e(this),i=r.data("alert");i||r.data("alert",i=new n(this)),typeof t=="string"&&i[t].call(r)})},e.fn.alert.Constructor=n,e.fn.alert.noConflict=function(){return e.fn.alert=r,this},e(document).on("click.alert.data-api",t,n.prototype.close)}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.button.defaults,n)};t.prototype.setState=function(e){var t="disabled",n=this.$element,r=n.data(),i=n.is("input")?"val":"html";e+="Text",r.resetText||n.data("resetText",n[i]()),n[i](r[e]||this.options[e]),setTimeout(function(){e=="loadingText"?n.addClass(t).attr(t,t):n.removeClass(t).removeAttr(t)},0)},t.prototype.toggle=function(){var e=this.$element.closest('[data-toggle="buttons-radio"]');e&&e.find(".active").removeClass("active"),this.$element.toggleClass("active")};var n=e.fn.button;e.fn.button=function(n){return this.each(function(){var r=e(this),i=r.data("button"),s=typeof n=="object"&&n;i||r.data("button",i=new t(this,s)),n=="toggle"?i.toggle():n&&i.setState(n)})},e.fn.button.defaults={loadingText:"loading..."},e.fn.button.Constructor=t,e.fn.button.noConflict=function(){return e.fn.button=n,this},e(document).on("click.button.data-api","[data-toggle^=button]",function(t){var n=e(t.target);n.hasClass("btn")||(n=n.closest(".btn")),n.button("toggle")})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.$indicators=this.$element.find(".carousel-indicators"),this.options=n,this.options.pause=="hover"&&this.$element.on("mouseenter",e.proxy(this.pause,this)).on("mouseleave",e.proxy(this.cycle,this))};t.prototype={cycle:function(t){return t||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(e.proxy(this.next,this),this.options.interval)),this},getActiveIndex:function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},to:function(t){var n=this.getActiveIndex(),r=this;if(t>this.$items.length-1||t<0)return;return this.sliding?this.$element.one("slid",function(){r.to(t)}):n==t?this.pause().cycle():this.slide(t>n?"next":"prev",e(this.$items[t]))},pause:function(t){return t||(this.paused=!0),this.$element.find(".next, .prev").length&&e.support.transition.end&&(this.$element.trigger(e.support.transition.end),this.cycle(!0)),clearInterval(this.interval),this.interval=null,this},next:function(){if(this.sliding)return;return this.slide("next")},prev:function(){if(this.sliding)return;return this.slide("prev")},slide:function(t,n){var r=this.$element.find(".item.active"),i=n||r[t](),s=this.interval,o=t=="next"?"left":"right",u=t=="next"?"first":"last",a=this,f;this.sliding=!0,s&&this.pause(),i=i.length?i:this.$element.find(".item")[u](),f=e.Event("slide",{relatedTarget:i[0],direction:o});if(i.hasClass("active"))return;this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid",function(){var t=e(a.$indicators.children()[a.getActiveIndex()]);t&&t.addClass("active")}));if(e.support.transition&&this.$element.hasClass("slide")){this.$element.trigger(f);if(f.isDefaultPrevented())return;i.addClass(t),i[0].offsetWidth,r.addClass(o),i.addClass(o),this.$element.one(e.support.transition.end,function(){i.removeClass([t,o].join(" ")).addClass("active"),r.removeClass(["active",o].join(" ")),a.sliding=!1,setTimeout(function(){a.$element.trigger("slid")},0)})}else{this.$element.trigger(f);if(f.isDefaultPrevented())return;r.removeClass("active"),i.addClass("active"),this.sliding=!1,this.$element.trigger("slid")}return s&&this.cycle(),this}};var n=e.fn.carousel;e.fn.carousel=function(n){return this.each(function(){var r=e(this),i=r.data("carousel"),s=e.extend({},e.fn.carousel.defaults,typeof n=="object"&&n),o=typeof n=="string"?n:s.slide;i||r.data("carousel",i=new t(this,s)),typeof n=="number"?i.to(n):o?i[o]():s.interval&&i.pause().cycle()})},e.fn.carousel.defaults={interval:5e3,pause:"hover"},e.fn.carousel.Constructor=t,e.fn.carousel.noConflict=function(){return e.fn.carousel=n,this},e(document).on("click.carousel.data-api","[data-slide], [data-slide-to]",function(t){var n=e(this),r,i=e(n.attr("data-target")||(r=n.attr("href"))&&r.replace(/.*(?=#[^\s]+$)/,"")),s=e.extend({},i.data(),n.data()),o;i.carousel(s),(o=n.attr("data-slide-to"))&&i.data("carousel").pause().to(o).cycle(),t.preventDefault()})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.collapse.defaults,n),this.options.parent&&(this.$parent=e(this.options.parent)),this.options.toggle&&this.toggle()};t.prototype={constructor:t,dimension:function(){var e=this.$element.hasClass("width");return e?"width":"height"},show:function(){var t,n,r,i;if(this.transitioning||this.$element.hasClass("in"))return;t=this.dimension(),n=e.camelCase(["scroll",t].join("-")),r=this.$parent&&this.$parent.find("> .accordion-group > .in");if(r&&r.length){i=r.data("collapse");if(i&&i.transitioning)return;r.collapse("hide"),i||r.data("collapse",null)}this.$element[t](0),this.transition("addClass",e.Event("show"),"shown"),e.support.transition&&this.$element[t](this.$element[0][n])},hide:function(){var t;if(this.transitioning||!this.$element.hasClass("in"))return;t=this.dimension(),this.reset(this.$element[t]()),this.transition("removeClass",e.Event("hide"),"hidden"),this.$element[t](0)},reset:function(e){var t=this.dimension();return this.$element.removeClass("collapse")[t](e||"auto")[0].offsetWidth,this.$element[e!==null?"addClass":"removeClass"]("collapse"),this},transition:function(t,n,r){var i=this,s=function(){n.type=="show"&&i.reset(),i.transitioning=0,i.$element.trigger(r)};this.$element.trigger(n);if(n.isDefaultPrevented())return;this.transitioning=1,this.$element[t]("in"),e.support.transition&&this.$element.hasClass("collapse")?this.$element.one(e.support.transition.end,s):s()},toggle:function(){this[this.$element.hasClass("in")?"hide":"show"]()}};var n=e.fn.collapse;e.fn.collapse=function(n){return this.each(function(){var r=e(this),i=r.data("collapse"),s=e.extend({},e.fn.collapse.defaults,r.data(),typeof n=="object"&&n);i||r.data("collapse",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.collapse.defaults={toggle:!0},e.fn.collapse.Constructor=t,e.fn.collapse.noConflict=function(){return e.fn.collapse=n,this},e(document).on("click.collapse.data-api","[data-toggle=collapse]",function(t){var n=e(this),r,i=n.attr("data-target")||t.preventDefault()||(r=n.attr("href"))&&r.replace(/.*(?=#[^\s]+$)/,""),s=e(i).data("collapse")?"toggle":n.data();n[e(i).hasClass("in")?"addClass":"removeClass"]("collapsed"),e(i).collapse(s)})}(window.jQuery),!function(e){"use strict";function r(){e(".dropdown-backdrop").remove(),e(t).each(function(){i(e(this)).removeClass("open")})}function i(t){var n=t.attr("data-target"),r;n||(n=t.attr("href"),n=n&&/#/.test(n)&&n.replace(/.*(?=#[^\s]*$)/,"")),r=n&&e(n);if(!r||!r.length)r=t.parent();return r}var t="[data-toggle=dropdown]",n=function(t){var n=e(t).on("click.dropdown.data-api",this.toggle);e("html").on("click.dropdown.data-api",function(){n.parent().removeClass("open")})};n.prototype={constructor:n,toggle:function(t){var n=e(this),s,o;if(n.is(".disabled, :disabled"))return;return s=i(n),o=s.hasClass("open"),r(),o||("ontouchstart"in document.documentElement&&e('