From ec89d3ee4eced73b506244eec5d348030b4fab04 Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Thu, 16 May 2019 21:21:26 +0800 Subject: [PATCH] :fire: #356 --- i18n/en_US.json | 3 - i18n/ja_JP.json | 3 - i18n/ko_KR.json | 3 - i18n/zh_CN.json | 3 - i18n/zh_TW.json | 3 - package-lock.json | 383 +++++++++++++++++++------------------- package.json | 2 +- static/css/lib.min.css | 16 -- static/css/wide.min.css | 16 -- static/js/lib.min.js | 16 -- static/js/tree.js | 9 - static/js/wide.js | 30 --- static/js/wide.min.js | 18 +- static/js/wide.min.js.map | 2 +- views/index.html | 24 --- 15 files changed, 190 insertions(+), 341 deletions(-) diff --git a/i18n/en_US.json b/i18n/en_US.json index e75ed2f..75d6483 100644 --- a/i18n/en_US.json +++ b/i18n/en_US.json @@ -105,8 +105,6 @@ "start-get": "START [go get]", "get-succ": "[go get] SUCCESS", "get-error": "[go get] ERROR", - "start-git_clone": "START [git clone]", - "git_clone-done": "[git clone] DONE", "check_version": "Checking update", "new_version_available": "new version available", "go_env": "Go", @@ -173,7 +171,6 @@ "url": "URL", "short_url": "Short URL", "embeded": "Embeded", - "git_clone": "Git Clone", "terms": "Terms", "download": "Download", "decompress": "Decompress", diff --git a/i18n/ja_JP.json b/i18n/ja_JP.json index d9c5ff2..d8628fe 100644 --- a/i18n/ja_JP.json +++ b/i18n/ja_JP.json @@ -105,8 +105,6 @@ "start-get": "[go get] 開始", "get-succ": "[go get] 成功", "get-error": "[go get] 失敗", - "start-git_clone": "[git clone] 開始", - "git_clone-done": "[git clone] 終わった", "check_version": "更新をチェック中", "new_version_available": "新しいバージョンがあります", "go_env": "Go", @@ -173,7 +171,6 @@ "url": "リンク", "short_url": "ショートリンク", "embeded": "埋め込む", - "git_clone": "Git クローン", "terms": "利用規約", "download": "ダウンロード", "decompress": "解凍する", diff --git a/i18n/ko_KR.json b/i18n/ko_KR.json index d6e1e16..b0a0cc4 100644 --- a/i18n/ko_KR.json +++ b/i18n/ko_KR.json @@ -105,8 +105,6 @@ "start-get": "시작 [go get]", "get-succ": "[go get] 성공", "get-error": "[go get] 실패", - "start-git_clone": "시작 [git clone]", - "git_clone-done": "[git clone] 완성", "check_version": "최신버전검색중", "new_version_available": "최신업데이트 사용 가능", "go_env": "Go 환경", @@ -173,7 +171,6 @@ "url": "하이퍼링크", "short_url": "짧은 링크", "embeded": "삽입", - "git_clone": "Git clone", "terms": "사용계약", "download": "다운로드", "decompress": "압축풀기", diff --git a/i18n/zh_CN.json b/i18n/zh_CN.json index 114744d..b52a2b5 100644 --- a/i18n/zh_CN.json +++ b/i18n/zh_CN.json @@ -105,8 +105,6 @@ "start-get": "开始 [go get]", "get-succ": "[go get] 成功", "get-error": "[go get] 失败", - "start-git_clone": "开始 [git clone]", - "git_clone-done": "[git clone] 完成", "check_version": "正在检查更新", "new_version_available": "新版本可用", "go_env": "Go 环境", @@ -173,7 +171,6 @@ "url": "链接", "short_url": "短链接", "embeded": "嵌入", - "git_clone": "Git 克隆", "terms": "使用条款", "download": "下载", "decompress": "解压缩", diff --git a/i18n/zh_TW.json b/i18n/zh_TW.json index 4da4fc4..5e54d0b 100644 --- a/i18n/zh_TW.json +++ b/i18n/zh_TW.json @@ -105,8 +105,6 @@ "start-get": "開始 [go get]", "get-succ": "[go get] 成功", "get-error": "[go get] 失敗", - "start-git_clone": "開始 [git clone]", - "git_clone-done": "[git clone] 完成", "check_version": "正在檢查更新", "new_version_available": "可用新版本", "go_env": "Go 環境", @@ -173,7 +171,6 @@ "url": "連結", "short_url": "短網址", "embeded": "嵌入", - "git_clone": "Git Clone", "terms": "使用條款", "download": "下載", "decompress": "解壓縮", diff --git a/package-lock.json b/package-lock.json index dd31bf6..0ce8d06 100644 --- a/package-lock.json +++ b/package-lock.json @@ -55,7 +55,7 @@ }, "ansi-colors": { "version": "1.1.0", - "resolved": "http://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", "dev": true, "requires": { @@ -253,9 +253,9 @@ } }, "async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", "dev": true }, "async-settle": { @@ -358,9 +358,9 @@ "dev": true }, "binary-extensions": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz", - "integrity": "sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", "dev": true }, "brace-expansion": { @@ -449,12 +449,6 @@ } } }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, "cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", @@ -492,24 +486,31 @@ } }, "chokidar": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", - "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.6.tgz", + "integrity": "sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g==", "dev": true, "requires": { "anymatch": "^2.0.0", - "async-each": "^1.0.0", - "braces": "^2.3.0", - "fsevents": "^1.2.2", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", "glob-parent": "^3.1.0", - "inherits": "^2.0.1", + "inherits": "^2.0.3", "is-binary-path": "^1.0.0", "is-glob": "^4.0.0", - "lodash.debounce": "^4.0.8", - "normalize-path": "^2.1.1", + "normalize-path": "^3.0.0", "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0", - "upath": "^1.0.5" + "readdirp": "^2.2.1", + "upath": "^1.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + } } }, "class-utils": { @@ -647,9 +648,9 @@ } }, "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", "dev": true }, "concat-map": { @@ -906,9 +907,9 @@ } }, "duplexify": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.0.tgz", - "integrity": "sha512-fO3Di4tBKJpYTFHAxTU00BcfWMY9w24r/x21a6rZRbsD/ToUgGxsMbiGRmB7uVAXeGKXD9MwiLZa5E97EVgIRQ==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", "dev": true, "requires": { "end-of-stream": "^1.0.0", @@ -1186,32 +1187,21 @@ } }, "findup-sync": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", - "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", "dev": true, "requires": { "detect-file": "^1.0.0", - "is-glob": "^3.1.0", + "is-glob": "^4.0.0", "micromatch": "^3.0.4", "resolve-dir": "^1.0.1" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } } }, "fined": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fined/-/fined-1.1.0.tgz", - "integrity": "sha1-s33IRLdqL15wgeiE98CuNE8VNHY=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", + "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", "dev": true, "requires": { "expand-tilde": "^2.0.2", @@ -1222,19 +1212,19 @@ } }, "flagged-respawn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.0.tgz", - "integrity": "sha1-Tnmumy6zi/hrO7Vr8+ClaqX8q9c=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", + "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", "dev": true }, "flush-write-stream": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", - "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", "dev": true, "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.4" + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" } }, "for-in": { @@ -1278,14 +1268,14 @@ "dev": true }, "fsevents": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", - "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", + "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", "dev": true, "optional": true, "requires": { - "nan": "^2.9.2", - "node-pre-gyp": "^0.10.0" + "nan": "^2.12.1", + "node-pre-gyp": "^0.12.0" }, "dependencies": { "abbrev": { @@ -1306,7 +1296,7 @@ "optional": true }, "are-we-there-yet": { - "version": "1.1.4", + "version": "1.1.5", "bundled": true, "dev": true, "optional": true, @@ -1330,7 +1320,7 @@ } }, "chownr": { - "version": "1.0.1", + "version": "1.1.1", "bundled": true, "dev": true, "optional": true @@ -1357,16 +1347,16 @@ "optional": true }, "debug": { - "version": "2.6.9", + "version": "4.1.1", "bundled": true, "dev": true, "optional": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, "deep-extend": { - "version": "0.5.1", + "version": "0.6.0", "bundled": true, "dev": true, "optional": true @@ -1415,7 +1405,7 @@ } }, "glob": { - "version": "7.1.2", + "version": "7.1.3", "bundled": true, "dev": true, "optional": true, @@ -1435,12 +1425,12 @@ "optional": true }, "iconv-lite": { - "version": "0.4.21", + "version": "0.4.24", "bundled": true, "dev": true, "optional": true, "requires": { - "safer-buffer": "^2.1.0" + "safer-buffer": ">= 2.1.2 < 3" } }, "ignore-walk": { @@ -1501,16 +1491,16 @@ "dev": true }, "minipass": { - "version": "2.2.4", + "version": "2.3.5", "bundled": true, "dev": true, "requires": { - "safe-buffer": "^5.1.1", + "safe-buffer": "^5.1.2", "yallist": "^3.0.0" } }, "minizlib": { - "version": "1.1.0", + "version": "1.2.1", "bundled": true, "dev": true, "optional": true, @@ -1527,35 +1517,35 @@ } }, "ms": { - "version": "2.0.0", + "version": "2.1.1", "bundled": true, "dev": true, "optional": true }, "needle": { - "version": "2.2.0", + "version": "2.3.0", "bundled": true, "dev": true, "optional": true, "requires": { - "debug": "^2.1.2", + "debug": "^4.1.0", "iconv-lite": "^0.4.4", "sax": "^1.2.4" } }, "node-pre-gyp": { - "version": "0.10.0", + "version": "0.12.0", "bundled": true, "dev": true, "optional": true, "requires": { "detect-libc": "^1.0.2", "mkdirp": "^0.5.1", - "needle": "^2.2.0", + "needle": "^2.2.1", "nopt": "^4.0.1", "npm-packlist": "^1.1.6", "npmlog": "^4.0.2", - "rc": "^1.1.7", + "rc": "^1.2.7", "rimraf": "^2.6.1", "semver": "^5.3.0", "tar": "^4" @@ -1572,13 +1562,13 @@ } }, "npm-bundled": { - "version": "1.0.3", + "version": "1.0.6", "bundled": true, "dev": true, "optional": true }, "npm-packlist": { - "version": "1.1.10", + "version": "1.4.1", "bundled": true, "dev": true, "optional": true, @@ -1653,12 +1643,12 @@ "optional": true }, "rc": { - "version": "1.2.7", + "version": "1.2.8", "bundled": true, "dev": true, "optional": true, "requires": { - "deep-extend": "^0.5.1", + "deep-extend": "^0.6.0", "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" @@ -1688,16 +1678,16 @@ } }, "rimraf": { - "version": "2.6.2", + "version": "2.6.3", "bundled": true, "dev": true, "optional": true, "requires": { - "glob": "^7.0.5" + "glob": "^7.1.3" } }, "safe-buffer": { - "version": "5.1.1", + "version": "5.1.2", "bundled": true, "dev": true }, @@ -1714,7 +1704,7 @@ "optional": true }, "semver": { - "version": "5.5.0", + "version": "5.7.0", "bundled": true, "dev": true, "optional": true @@ -1765,17 +1755,17 @@ "optional": true }, "tar": { - "version": "4.4.1", + "version": "4.4.8", "bundled": true, "dev": true, "optional": true, "requires": { - "chownr": "^1.0.1", + "chownr": "^1.1.1", "fs-minipass": "^1.2.5", - "minipass": "^2.2.4", - "minizlib": "^1.1.0", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.1", + "safe-buffer": "^5.1.2", "yallist": "^3.0.2" } }, @@ -1786,12 +1776,12 @@ "optional": true }, "wide-align": { - "version": "1.1.2", + "version": "1.1.3", "bundled": true, "dev": true, "optional": true, "requires": { - "string-width": "^1.0.2" + "string-width": "^1.0.2 || 2" } }, "wrappy": { @@ -1800,7 +1790,7 @@ "dev": true }, "yallist": { - "version": "3.0.2", + "version": "3.0.3", "bundled": true, "dev": true } @@ -1825,9 +1815,9 @@ "dev": true }, "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -1878,13 +1868,15 @@ } }, "glob-watcher": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.1.tgz", - "integrity": "sha512-fK92r2COMC199WCyGUblrZKhjra3cyVMDiypDdqg1vsSDmexnbYivK1kNR4QItiNXLKmGlqan469ks67RtNa2g==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.3.tgz", + "integrity": "sha512-8tWsULNEPHKQ2MR4zXuzSmqbdyV5PtwwCaWSGQ1WwHsJ07ilNeN1JB8ntxhckbnpSHaf9dXFUHzIWvm1I13dsg==", "dev": true, "requires": { + "anymatch": "^2.0.0", "async-done": "^1.2.0", "chokidar": "^2.0.0", + "is-negated-glob": "^1.0.0", "just-debounce": "^1.0.0", "object.defaults": "^1.1.0" } @@ -1935,21 +1927,21 @@ "dev": true }, "gulp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.0.tgz", - "integrity": "sha1-lXZsYB2t5Kd+0+eyttwDiBtZY2Y=", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz", + "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==", "dev": true, "requires": { - "glob-watcher": "^5.0.0", - "gulp-cli": "^2.0.0", - "undertaker": "^1.0.0", + "glob-watcher": "^5.0.3", + "gulp-cli": "^2.2.0", + "undertaker": "^1.2.1", "vinyl-fs": "^3.0.0" }, "dependencies": { "gulp-cli": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.0.1.tgz", - "integrity": "sha512-RxujJJdN8/O6IW2nPugl7YazhmrIEjmiVfPKrWt68r71UCaLKS71Hp0gpKT+F6qOUFtr7KqtifDKaAJPRVvMYQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.2.0.tgz", + "integrity": "sha512-rGs3bVYHdyJpLqR0TUBnlcZ1O5O++Zs4bA0ajm+zr3WFCfiSLjGwoCBqFs18wzN+ZxahT9DkOK5nDf26iDsWjA==", "dev": true, "requires": { "ansi-colors": "^1.0.1", @@ -1962,7 +1954,7 @@ "gulplog": "^1.0.0", "interpret": "^1.1.0", "isobject": "^3.0.1", - "liftoff": "^2.5.0", + "liftoff": "^3.1.0", "matchdep": "^2.0.0", "mute-stdout": "^1.0.0", "pretty-hrtime": "^1.0.0", @@ -2195,9 +2187,9 @@ } }, "homedir-polyfill": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", - "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", "dev": true, "requires": { "parse-passwd": "^1.0.0" @@ -2232,9 +2224,9 @@ "dev": true }, "interpret": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", - "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", + "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", "dev": true }, "invert-kv": { @@ -2294,15 +2286,6 @@ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "dev": true, - "requires": { - "builtin-modules": "^1.0.0" - } - }, "is-data-descriptor": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", @@ -2364,9 +2347,9 @@ } }, "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", "dev": true, "requires": { "is-extglob": "^2.1.1" @@ -2467,19 +2450,10 @@ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, - "json-stable-stringify": { + "json-stable-stringify-without-jsonify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true, - "requires": { - "jsonify": "~0.0.0" - } - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, "just-debounce": { @@ -2532,13 +2506,13 @@ } }, "liftoff": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.5.0.tgz", - "integrity": "sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", + "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==", "dev": true, "requires": { "extend": "^3.0.0", - "findup-sync": "^2.0.0", + "findup-sync": "^3.0.0", "fined": "^1.0.1", "flagged-respawn": "^1.0.0", "is-plain-object": "^2.0.4", @@ -2549,7 +2523,7 @@ }, "load-json-file": { "version": "1.1.0", - "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, "requires": { @@ -2620,12 +2594,6 @@ "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=", "dev": true }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", - "dev": true - }, "lodash.escape": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", @@ -2749,6 +2717,29 @@ "micromatch": "^3.0.4", "resolve": "^1.4.0", "stack-trace": "0.0.10" + }, + "dependencies": { + "findup-sync": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", + "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", + "dev": true, + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^3.1.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + } + }, + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } } }, "memoizee": { @@ -2846,9 +2837,9 @@ "dev": true }, "nan": { - "version": "2.11.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz", - "integrity": "sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==", + "version": "2.13.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz", + "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==", "dev": true, "optional": true }, @@ -2878,13 +2869,13 @@ "dev": true }, "normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "requires": { "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", + "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" } @@ -2899,9 +2890,9 @@ } }, "now-and-later": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.0.tgz", - "integrity": "sha1-vGHLtFbXnLMiB85HygUTb/Ln1u4=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", + "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", "dev": true, "requires": { "once": "^1.3.2" @@ -2951,9 +2942,9 @@ } }, "object-keys": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", - "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true }, "object-visit": { @@ -3038,7 +3029,7 @@ }, "os-locale": { "version": "1.4.0", - "resolved": "http://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", "dev": true, "requires": { @@ -3333,12 +3324,12 @@ "dev": true }, "resolve": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", - "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.0.tgz", + "integrity": "sha512-WL2pBDjqT6pGUNSUzMw00o4T7If+z4H2x3Gz893WoUQ5KW8Vr9txp00ykiP16VBaZF5+j/OcXJHZ9+PCvdiDKw==", "dev": true, "requires": { - "path-parse": "^1.0.5" + "path-parse": "^1.0.6" } }, "resolve-dir": { @@ -3388,9 +3379,9 @@ } }, "semver": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz", - "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", "dev": true }, "semver-greatest-satisfied-range": { @@ -3570,9 +3561,9 @@ "dev": true }, "spdx-correct": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.2.tgz", - "integrity": "sha512-q9hedtzyXHr5S0A1vEPoK/7l8NpfkFYTq6iCY+Pno2ZbdZR6WexZFtqeVGkGxW3TEJMN914Z55EnAGMmenlIQQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", @@ -3596,9 +3587,9 @@ } }, "spdx-license-ids": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.1.tgz", - "integrity": "sha512-TfOfPcYGBB5sDuPn3deByxPhmfegAhpDYKSOXZQN81Oyrrif8ZCodOLzK3AesELnCx03kikhyDwh0pfvvQvF8w==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz", + "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==", "dev": true }, "split-string": { @@ -3720,9 +3711,9 @@ } }, "through2-filter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-2.0.0.tgz", - "integrity": "sha1-YLxVoNrLdghdsfna6Zq0P4PWIuw=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", + "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", "dev": true, "requires": { "through2": "~2.0.0", @@ -3843,9 +3834,9 @@ "dev": true }, "undertaker": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.2.0.tgz", - "integrity": "sha1-M52kZGJS0ILcN45wgGcpl1DhG0k=", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.2.1.tgz", + "integrity": "sha512-71WxIzDkgYk9ZS+spIB8iZXchFhAdEo2YU8xYqBYJ39DIUIqziK78ftm26eecoIY49X0J2MLhG4hr18Yp6/CMA==", "dev": true, "requires": { "arr-flatten": "^1.0.1", @@ -3901,13 +3892,13 @@ } }, "unique-stream": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.2.1.tgz", - "integrity": "sha1-WqADz76Uxf+GbE59ZouxxNuts2k=", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", + "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", "dev": true, "requires": { - "json-stable-stringify": "^1.0.0", - "through2-filter": "^2.0.0" + "json-stable-stringify-without-jsonify": "^1.0.1", + "through2-filter": "^3.0.0" } }, "unset-value": { @@ -3951,9 +3942,9 @@ } }, "upath": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", - "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", + "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==", "dev": true }, "urix": { @@ -3975,9 +3966,9 @@ "dev": true }, "v8flags": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.1.1.tgz", - "integrity": "sha512-iw/1ViSEaff8NJ3HLyEjawk/8hjJib3E7pvG4pddVXfUg1983s3VGsiClDjhK64MQVDGqc1Q8r18S4VKQZS9EQ==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.1.3.tgz", + "integrity": "sha512-amh9CCg3ZxkzQ48Mhcb8iX7xpAfYJgePHxWMQCBWECpOSqJUXgY26ncA61UTV0BkPqfhcy6mzwCIoP4ygxpW8w==", "dev": true, "requires": { "homedir-polyfill": "^1.0.1" @@ -4088,7 +4079,7 @@ }, "wrap-ansi": { "version": "2.1.0", - "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "requires": { diff --git a/package.json b/package.json index c742949..91098ae 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "build": "gulp" }, "devDependencies": { - "gulp": "^4.0.0", + "gulp": "^4.0.2", "gulp-concat": "^2.6.1", "gulp-minify-css": "^1.2.4", "gulp-sourcemaps": "^2.6.0", diff --git a/static/css/lib.min.css b/static/css/lib.min.css index 3ea2005..b153f50 100644 --- a/static/css/lib.min.css +++ b/static/css/lib.min.css @@ -1,19 +1,3 @@ -/* - * Copyright (c) 2014-2019, b3log.org & hacpai.com - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - .layout-hide,.ui-layout-resizer-sliding .ui-layout-toggler{display:none}body{font-family:Geneva,Arial,Helvetica,sans-serif;font-size:100%}.ui-layout-content{padding:10px;position:relative;overflow:auto}.layout-child-container,.layout-content-container{padding:0;overflow:hidden}.layout-child-container{border:0}.layout-scroll{overflow:auto}.ui-layout-resizer{border-width:0}.ui-layout-resizer-north-dragging,.ui-layout-resizer-south-dragging{border-width:1px 0}.ui-layout-resizer-east-dragging,.ui-layout-resizer-west-dragging{border-width:0 1px}.ui-layout-resizer-dragging-limit{background:#F0F0F0}.ui-layout-resizer-sliding{opacity:.1;filter:alpha(opacity=10)}.ui-layout-resizer-sliding-hover{opacity:1;filter:alpha(opacity=100)}.ui-layout-resizer-north-sliding-hover{border-bottom-width:1px}.ui-layout-resizer-south-sliding-hover{border-top-width:1px}.ui-layout-resizer-west-sliding-hover{border-right-width:1px}.ui-layout-resizer-east-sliding-hover{border-left-width:1px}.ui-layout-toggler{border:1px solid #BBB;background-color:#BBB}.ui-layout-resizer-hover .ui-layout-toggler{opacity:.6;filter:alpha(opacity=60)}.ui-layout-resizer-hover .ui-layout-toggler-hover,.ui-layout-toggler-hover{background-color:#FC6;opacity:1;filter:alpha(opacity=100)}.ui-layout-toggler-north,.ui-layout-toggler-south{border-width:0 1px}.ui-layout-toggler-east,.ui-layout-toggler-west{border-width:1px 0}.ui-layout-toggler .content{color:#666;font-size:12px;font-weight:700;width:100%;padding-bottom:.35ex}.ui-layout-mask{border:none!important;padding:0!important;margin:0!important;overflow:hidden!important;position:absolute!important;opacity:0!important;filter:Alpha(Opacity="0")!important}.ui-layout-mask-inside-pane{top:0!important;left:0!important;width:100%!important;height:100%!important}@media print{.ui-layout-pane,body.ui-layout-container{top:auto!important;bottom:auto!important;left:auto!important;right:auto!important}.ui-layout-pane,html{height:auto!important;overflow:visible!important}body.ui-layout-container{position:static!important}.ui-layout-resizer,.ui-layout-toggler{display:none!important}.ui-layout-pane{border:none!important;background:0 0!important;position:relative!important;width:auto!important}} .CodeMirror{font-family:monospace;height:300px;color:#000}.CodeMirror-lines{padding:4px 0}.CodeMirror pre{padding:0 4px}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:#fff}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror div.CodeMirror-cursor{border-left:1px solid #000}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.CodeMirror.cm-fat-cursor div.CodeMirror-cursor{width:auto;border:0;background:#7e7}.CodeMirror.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}@-moz-keyframes blink{0%,100%{background:#7e7}50%{background:0 0}}@-webkit-keyframes blink{0%,100%{background:#7e7}50%{background:0 0}}@keyframes blink{0%,100%{background:#7e7}50%{background:0 0}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-ruler{border-left:1px solid #ccc;position:absolute}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta,.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-header{color:#00f}.cm-s-default .cm-quote{color:#090}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-invalidchar,.cm-s-default .cm-error{color:red}div.CodeMirror span.CodeMirror-matchingbracket{color:#0f0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#f22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:#fff}.CodeMirror-scroll{overflow:scroll!important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:0;position:relative}.CodeMirror-sizer{position:relative;border-right:30px solid transparent}.CodeMirror-gutter-filler,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-vscrollbar{position:absolute;z-index:6;display:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;margin-bottom:-30px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;height:100%;-webkit-user-select:none;-moz-user-select:none;user-select:none}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:0 0;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent}.CodeMirror-wrap pre{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;overflow:auto}.CodeMirror-code{outline:0}.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber,.CodeMirror-scroll,.CodeMirror-sizer{-moz-box-sizing:content-box;box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-measure pre{position:static}.CodeMirror div.CodeMirror-cursor{position:absolute;border-right:none;width:0}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror ::selection{background:#d7d4f0}.CodeMirror ::-moz-selection{background:#d7d4f0}.cm-searching{background:#ffa;background:rgba(255,255,0,.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:''}span.CodeMirror-selectedtext{background:0 0} .CodeMirror-hints{position:absolute;z-index:10;overflow:hidden;list-style:none;margin:0;padding:2px;-webkit-box-shadow:2px 3px 5px rgba(0,0,0,.2);-moz-box-shadow:2px 3px 5px rgba(0,0,0,.2);box-shadow:2px 3px 5px rgba(0,0,0,.2);border-radius:3px;border:1px solid silver;background:#fff;font-size:90%;font-family:monospace;max-height:20em;overflow-y:auto}.CodeMirror-hint{margin:0;padding:0 4px;border-radius:2px;max-width:19em;overflow:hidden;white-space:pre;color:#000;cursor:pointer}li.CodeMirror-hint-active{background:#08f;color:#fff} diff --git a/static/css/wide.min.css b/static/css/wide.min.css index d1ed7ca..459cc83 100644 --- a/static/css/wide.min.css +++ b/static/css/wide.min.css @@ -1,19 +1,3 @@ -/* - * Copyright (c) 2014-2019, b3log.org & hacpai.com - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - .dialog-close-icon,.dialog-close-icon:hover{text-decoration:none}.dialog-background{height:100%;left:0;opacity:.3;position:absolute;top:0;width:100%;filter:alpha(opacity=30);display:none;background-color:#000;z-index:99}.dialog-panel{position:absolute;z-index:100;display:none;-moz-user-select:none;user-select:none;box-shadow:0 2px 10px 1px #000}.dialog-title{float:left;line-height:22px;margin-left:3px;font-weight:700}.dialog-header-bg{height:23px;background-color:#bbb;cursor:move;width:100%}.dialog-close-icon{float:right;margin:3px}.dialog-main>div{width:100%}.dialog-footer{padding:10px;text-align:right}#dialogCloseEditor button,.dialog-footer button{margin:0 5px}#dialogAlert,#dialogRemoveConfirm,.dialog-form,.dialog-prompt{padding:10px 15px 0;overflow:hidden}.dialog-main input,.dialog-main select{width:100%;margin:2px auto}#dialogGoFilePrompt>ul{position:relative;height:260px;overflow:auto;margin-top:5px;background-color:#FFF;border:1px solid #919191}#dialogPreference{margin:10px}#dialogPreference .tabs-panel{padding:10px}#dialogPreference .preference{margin-bottom:10px}#dialogPreference img.gravatar{width:48px;height:48px} body,ul{margin:0}body,button,input{font-family:Helvetica}.list li,body{overflow:hidden}::-webkit-scrollbar{background:0 0;width:16px;height:16px}::-webkit-scrollbar-corner{display:none;background-color:transparent}::-webkit-scrollbar-thumb{border:0 solid transparent;border-right-width:4px;border-left-width:4px;border-radius:9px;box-shadow:inset 0 0 0 1px rgba(128,128,128,.2),inset 0 0 0 4px rgba(128,128,128,.2)}::-webkit-scrollbar-thumb:horizontal{border-bottom-width:4px;border-top-width:4px}body{font-size:13px;color:#000}ul{padding:0;list-style:none}*{box-sizing:border-box}a{color:#4183c4;text-decoration:none}a:hover{text-decoration:underline}img{vertical-align:middle}.fn-left{float:left}.fn-right{float:right}.fn-clear:after,.fn-clear:before{display:table;content:""}.fn-clear:after{clear:both}.fn-none{display:none}.ft-small{color:#999;font-size:12px}.ft-red{color:#9d0000}.list li{cursor:pointer;line-height:20px;padding:0 3px;word-wrap:normal;word-break:normal;white-space:nowrap;text-overflow:ellipsis}.list li.selected,.list li:hover{background-color:#3875d7;color:#FFF}.list li.selected .ft-small,.list li:hover .ft-small{color:#FFF}@font-face{font-family:icomoon;src:url(fonts/icomoon.eot?lqk80d);src:url(fonts/icomoon.eot?lqk80d#iefix) format('embedded-opentype'),url(fonts/icomoon.ttf?lqk80d) format('truetype'),url(fonts/icomoon.woff?lqk80d) format('woff'),url(fonts/icomoon.svg?lqk80d#icomoon) format('svg');font-weight:400;font-style:normal}[class*=" ico-"],[class^=ico-]{font-family:icomoon!important;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;cursor:pointer;font-size:13px;line-height:20px}.ico-qqz:before{content:"\e900"}.ico-find:before{content:"\e602"}.ico-findfiles:before{content:"\e603"}.ico-editor:before{content:"\e604"}.ico-notification:before{content:"\e607"}.ico-price:before{content:"\e616"}.ico-report:before{content:"\e605"}.ico-signup:before{content:"\e606"}.ico-git:before{content:"\e624"}.ico-book:before{content:"\e623"}.ico-start:before{content:"\e9d7";text-shadow:0 0 rgba(0,0,0,.4)}.ico-tree:before{content:"\e600"}.ico-build:before{content:"\e601"}.ico-export:before{content:"\f0ed"}.ico-import:before{content:"\f0ee"}.ico-keyboard:before{content:"\f11c"}.ico-moveup:before{content:"\f148"}.ico-movedown:before{content:"\f149"}.ico-weibo:before{content:"\e621"}.ico-uniE608:before{content:"\e608"}.ico-max:before{content:"\e609"}.ico-remove:before{content:"\e60b"}.ico-buildrun:before{content:"\e60c"}.ico-about:before{content:"\e60d"}.ico-undo:before{content:"\e60e"}.ico-stop:before{content:"\e60f"}.ico-close:before{content:"\e611";text-shadow:0 0 rgba(0,0,0,.4)}.ico-format:before{content:"\e612"}.ico-restore:before{content:"\e613"}.toolbars .ico-restore:before{content:"\e60a"}.ico-min:before{content:"\e614";position:absolute;right:5px}.ico-redo:before{content:"\e615"}.ico-uniE617:before{content:"\e617"}.ico-signout:before{content:"\e618"}.ico-email:before{content:"\e619"}.ico-googleplus:before{content:"\e61a"}.ico-facebook:before{content:"\e61b"}.ico-twitter:before{content:"\e61c"}.ico-info:before{content:"\e61d"}.ico-goline:before{content:"\e61e"}.ico-share:before{content:"\e61f"}.ico-comment:before{content:"\e620"}.ico-github:before{content:"\f00a"}.ico-refresh:before{content:"\f021"}.ico-save:before{content:"\f0c7"} .frame li,.tabs>div{padding:0 5px;cursor:pointer}.footer .cursor,.frame li,.menu>ul>li>span,.notification-count,.tabs>div{cursor:pointer}.ico,.menu .split,.menu>ul>li,.tabs>div{float:left}.frame{position:absolute;width:320px;z-index:21;display:none}.frame li{line-height:25px}.frame li.disabled,.frame li.disabled .font-ico,.frame li.disabled:hover .font-ico{color:#999}.frame a{color:#000;text-decoration:none}.frame a:hover,.frame li:hover a{color:#FFF}.frame .space{display:inline-block;width:20px;height:15px}.frame .font-ico{margin-right:5px;width:15px;display:inline-block;text-align:center}.tabs{height:21px;overflow:hidden;width:100%}.tabs>div{line-height:20px;height:20px}.tabs>div>span.changed{font-weight:700}.tabs-panel{overflow:auto;flex:1;height:100%}.edit-exprinfo,.edit-panel{position:absolute;overflow:hidden}.menu{display:block!important}.menu>ul>li>span{font-size:12px;line-height:21px;padding:4px 7px}.menu .split{border-left:1px solid #919191;height:21px;margin:0 5px 0 0}.menu img.gravatar{float:left;margin:2px 8px;height:17px;width:17px;border-radius:9px}#buildRun{color:#6DB14C;font-size:19px}#buildRun.ico-stop{color:#9d0000;font-size:16px}.share-panel{position:absolute;z-index:20;width:226px;padding:5px 0;right:0;top:21px}.share-panel .font-ico{font-size:20px;transition:all .2s ease-out 0s;margin:0 5px;width:24px}.share-panel .font-ico:hover{transform:rotate(360deg)}.edit-panel{left:20%;width:60%;height:70%;flex-flow:column;display:flex}.toolbars{position:absolute;right:5px;top:1px}.ico{background-image:url(../images/ico-file.png);height:16px;margin:2px 0 0 -2px;width:16px}.edit-exprinfo{z-index:10;list-style:none;margin:0;padding:2px;-webkit-box-shadow:2px 3px 5px rgba(0,0,0,.2);-moz-box-shadow:2px 3px 5px rgba(0,0,0,.2);box-shadow:2px 3px 5px rgba(0,0,0,.2);border-radius:3px;border:1px solid silver;background:#fff;font-size:90%;max-height:20em;overflow-y:auto}.CodeMirror,.CodeMirror-hints{font-family:Consolas,'Courier New',monospace}.CodeMirror-hints .ico{margin:-1px 2px 0 -1px}.CodeMirror-focused .cm-matchhighlight{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAFklEQVQI12NgYGBgkKzc8x9CMDAwAAAmhwSbidEoSQAAAABJRU5ErkJggg==);background-position:bottom;background-repeat:repeat-x}.CodeMirror-hint{padding-right:18px;max-width:none}.CodeMirror-hint:hover{background:#08f;color:#fff}.CodeMirror div.CodeMirror-cursor{border-left:2px solid #333}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:transparent}.bottom-window-group{background-color:#fff;flex-flow:column}.bottom-window-group .output{font-family:Consolas,Courier New,monospace;padding:0 5px;line-height:16px;font-size:12px;overflow-x:scroll;outline:0}.bottom-window-group .output pre{margin:0;font-family:Consolas,'Courier New',monospace}.bottom-window-group .output .start-build,.bottom-window-group .output .start-get,.bottom-window-group .output .start-install,.bottom-window-group .output .start-test,.start-vet{color:#999}.bottom-window-group .output .build-succ,.bottom-window-group .output .get-succ,.bottom-window-group .output .install-succ,.bottom-window-group .output .test-succ,.vet-succ{color:#090}.bottom-window-group .output .build-error,.bottom-window-group .output .get-error,.bottom-window-group .output .install-error,.bottom-window-group .output .test-error,.vet-error{color:#9d0000}.bottom-window-group .output .stderr{color:gray;font-style:italic}.bottom-window-group .output .path{text-decoration:underline;cursor:pointer}.bottom-window-group table{width:100%}.bottom-window-group td{border-bottom:1px solid #919191;font-size:12px;line-height:19px}.bottom-window-group .notification{outline:0}.bottom-window-group .notification .severity,.bottom-window-group .notification .type{width:50px;padding:0 5px}.bottom-window-group .search{display:flex;flex-flow:column;outline:0}.footer{box-shadow:0 1px 0 0 rgba(255,255,255,.06) inset;padding-left:5px;line-height:18px;display:block!important}.notification-count{float:right;display:none;background-color:#9d0000;color:#FFF;margin:1px 5px;padding:0 2px;border-radius:3px;line-height:16px} diff --git a/static/js/lib.min.js b/static/js/lib.min.js index b957f46..4701c2e 100644 --- a/static/js/lib.min.js +++ b/static/js/lib.min.js @@ -1,19 +1,3 @@ -/* - * Copyright (c) 2014-2019, b3log.org & hacpai.com - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - !function(e,t){"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(h,e){var t=[],c=t.slice,g=t.concat,a=t.push,i=t.indexOf,n={},r=n.toString,m=n.hasOwnProperty,v={},y=h.document,o="2.1.1",C=function(e,t){return new C.fn.init(e,t)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,u=/^-ms-/,l=/-([\da-z])/gi,f=function(e,t){return t.toUpperCase()};function p(e){var t=e.length,n=C.type(e);return"function"!==n&&!C.isWindow(e)&&(!(1!==e.nodeType||!t)||("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),X=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),U=new RegExp(B),V=new RegExp("^"+W+"$"),Y={ID:new RegExp("^#("+R+")"),CLASS:new RegExp("^\\.("+R+")"),TAG:new RegExp("^("+R.replace("w","w*")+")"),ATTR:new RegExp("^"+$),PSEUDO:new RegExp("^"+B),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+P+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},G=/^(?:input|select|textarea|button)$/i,Q=/^h\d$/i,J=/^[^{]+\{\s*\[native \w/,K=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,Z=/[+~]/,ee=/'|\\/g,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)};try{H.apply(t=O.call(k.childNodes),k.childNodes),t[k.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){q.apply(e,O.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}function re(e,t,n,r){var i,o,s,a,u,l,c,f,p,d;if((t?t.ownerDocument||t:k)!==T&&v(t),n=n||[],!e||"string"!=typeof e)return n;if(1!==(a=(t=t||T).nodeType)&&9!==a)return[];if(y&&!r){if(i=K.exec(e))if(s=i[1]){if(9===a){if(!(o=t.getElementById(s))||!o.parentNode)return n;if(o.id===s)return n.push(o),n}else if(t.ownerDocument&&(o=t.ownerDocument.getElementById(s))&&C(t,o)&&o.id===s)return n.push(o),n}else{if(i[2])return H.apply(n,t.getElementsByTagName(e)),n;if((s=i[3])&&h.getElementsByClassName&&t.getElementsByClassName)return H.apply(n,t.getElementsByClassName(s)),n}if(h.qsa&&(!x||!x.test(e))){if(f=c=N,p=t,d=9===a&&e,1===a&&"object"!==t.nodeName.toLowerCase()){for(l=g(e),(c=t.getAttribute("id"))?f=c.replace(ee,"\\$&"):t.setAttribute("id",f),f="[id='"+f+"'] ",u=l.length;u--;)l[u]=f+he(l[u]);p=Z.test(e)&&pe(t.parentNode)||t,d=l.join(",")}if(d)try{return H.apply(n,p.querySelectorAll(d)),n}catch(e){}finally{c||t.removeAttribute("id")}}}return m(e.replace(I,"$1"),t,n,r)}function ie(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function oe(e){return e[N]=!0,e}function se(e){var t=T.createElement("div");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function ae(e,t){for(var n=e.split("|"),r=e.length;r--;)b.attrHandle[n[r]]=t}function ue(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||1<<31)-(~e.sourceIndex||1<<31);if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function le(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function ce(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function fe(s){return oe(function(o){return o=+o,oe(function(e,t){for(var n,r=s([],e.length,o),i=r.length;i--;)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function pe(e){return e&&typeof e.getElementsByTagName!==D&&e}for(e in h=re.support={},r=re.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},v=re.setDocument=function(e){var t,u=e?e.ownerDocument||e:k,n=u.defaultView;return u!==T&&9===u.nodeType&&u.documentElement?(i=(T=u).documentElement,y=!r(u),n&&n!==n.top&&(n.addEventListener?n.addEventListener("unload",function(){v()},!1):n.attachEvent&&n.attachEvent("onunload",function(){v()})),h.attributes=se(function(e){return e.className="i",!e.getAttribute("className")}),h.getElementsByTagName=se(function(e){return e.appendChild(u.createComment("")),!e.getElementsByTagName("*").length}),h.getElementsByClassName=J.test(u.getElementsByClassName)&&se(function(e){return e.innerHTML="
",e.firstChild.className="i",2===e.getElementsByClassName("i").length}),h.getById=se(function(e){return i.appendChild(e).id=N,!u.getElementsByName||!u.getElementsByName(N).length}),h.getById?(b.find.ID=function(e,t){if(typeof t.getElementById!==D&&y){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}}):(delete b.find.ID,b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t=typeof e.getAttributeNode!==D&&e.getAttributeNode("id");return t&&t.value===n}}),b.find.TAG=h.getElementsByTagName?function(e,t){return typeof t.getElementsByTagName!==D?t.getElementsByTagName(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"!==e)return o;for(;n=o[i++];)1===n.nodeType&&r.push(n);return r},b.find.CLASS=h.getElementsByClassName&&function(e,t){return typeof t.getElementsByClassName!==D&&y?t.getElementsByClassName(e):void 0},s=[],x=[],(h.qsa=J.test(u.querySelectorAll))&&(se(function(e){e.innerHTML="",e.querySelectorAll("[msallowclip^='']").length&&x.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||x.push("\\["+M+"*(?:value|"+P+")"),e.querySelectorAll(":checked").length||x.push(":checked")}),se(function(e){var t=u.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&x.push("name"+M+"*[*^$|!~]?="),e.querySelectorAll(":enabled").length||x.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),x.push(",.*:")})),(h.matchesSelector=J.test(a=i.matches||i.webkitMatchesSelector||i.mozMatchesSelector||i.oMatchesSelector||i.msMatchesSelector))&&se(function(e){h.disconnectedMatch=a.call(e,"div"),a.call(e,"[s!='']:x"),s.push("!=",B)}),x=x.length&&new RegExp(x.join("|")),s=s.length&&new RegExp(s.join("|")),t=J.test(i.compareDocumentPosition),C=t||J.test(i.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return c=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!h.sortDetached&&t.compareDocumentPosition(e)===n?e===u||e.ownerDocument===k&&C(k,e)?-1:t===u||t.ownerDocument===k&&C(k,t)?1:l?F.call(l,e)-F.call(l,t):0:4&n?-1:1)}:function(e,t){if(e===t)return c=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,s=[e],a=[t];if(!i||!o)return e===u?-1:t===u?1:i?-1:o?1:l?F.call(l,e)-F.call(l,t):0;if(i===o)return ue(e,t);for(n=e;n=n.parentNode;)s.unshift(n);for(n=t;n=n.parentNode;)a.unshift(n);for(;s[r]===a[r];)r++;return r?ue(s[r],a[r]):s[r]===k?-1:a[r]===k?1:0},u):T},re.matches=function(e,t){return re(e,null,null,t)},re.matchesSelector=function(e,t){if((e.ownerDocument||e)!==T&&v(e),t=t.replace(X,"='$1']"),!(!h.matchesSelector||!y||s&&s.test(t)||x&&x.test(t)))try{var n=a.call(e,t);if(n||h.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||re.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&re.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return Y.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&U.test(n)&&(t=g(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=u[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&u(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==D&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=re.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function T(e,n,r){if(C.isFunction(n))return C.grep(e,function(e,t){return!!n.call(e,t,e)!==r});if(n.nodeType)return C.grep(e,function(e){return e===n!==r});if("string"==typeof n){if(w.test(n))return C.filter(n,e,r);n=C.filter(n,e)}return C.grep(e,function(e){return 0<=i.call(n,e)!==r})}C.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?C.find.matchesSelector(r,e)?[r]:[]:C.find.matches(e,C.grep(t,function(e){return 1===e.nodeType}))},C.fn.extend({find:function(e){var t,n=this.length,r=[],i=this;if("string"!=typeof e)return this.pushStack(C(e).filter(function(){for(t=0;t)[^>]*|#([\w-]*))$/;(C.fn.init=function(e,t){var n,r;if(!e)return this;if("string"!=typeof e)return e.nodeType?(this.context=this[0]=e,this.length=1,this):C.isFunction(e)?void 0!==N.ready?N.ready(e):e(C):(void 0!==e.selector&&(this.selector=e.selector,this.context=e.context),C.makeArray(e,this));if(!(n="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:k.exec(e))||!n[1]&&t)return!t||t.jquery?(t||N).find(e):this.constructor(t).find(e);if(n[1]){if(t=t instanceof C?t[0]:t,C.merge(this,C.parseHTML(n[1],t&&t.nodeType?t.ownerDocument||t:y,!0)),b.test(n[1])&&C.isPlainObject(t))for(n in t)C.isFunction(this[n])?this[n](t[n]):this.attr(n,t[n]);return this}return(r=y.getElementById(n[2]))&&r.parentNode&&(this.length=1,this[0]=r),this.context=y,this.selector=e,this}).prototype=C.fn,N=C(y);var E=/^(?:parents|prev(?:Until|All))/,S={children:!0,contents:!0,next:!0,prev:!0};function j(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}C.extend({dir:function(e,t,n){for(var r=[],i=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(i&&C(e).is(n))break;r.push(e)}return r},sibling:function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}}),C.fn.extend({has:function(e){var t=C(e,this),n=t.length;return this.filter(function(){for(var e=0;ex",v.noCloneChecked=!!$.cloneNode(!0).lastChild.defaultValue;var U="undefined";v.focusinBubbles="onfocusin"in h;var V=/^key/,Y=/^(?:mouse|pointer|contextmenu)|click/,G=/^(?:focusinfocus|focusoutblur)$/,Q=/^([^.]*)(?:\.(.+)|)$/;function J(){return!0}function K(){return!1}function Z(){try{return y.activeElement}catch(e){}}C.event={global:{},add:function(t,e,n,r,i){var o,s,a,u,l,c,f,p,d,h,g,m=F.get(t);if(m)for(n.handler&&(n=(o=n).handler,i=o.selector),n.guid||(n.guid=C.guid++),(u=m.events)||(u=m.events={}),(s=m.handle)||(s=m.handle=function(e){return typeof C!==U&&C.event.triggered!==e.type?C.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(A)||[""]).length;l--;)d=g=(a=Q.exec(e[l])||[])[1],h=(a[2]||"").split(".").sort(),d&&(f=C.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=C.event.special[d]||{},c=C.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&C.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,s)||t.addEventListener&&t.addEventListener(d,s,!1)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),C.event.global[d]=!0)},remove:function(e,t,n,r,i){var o,s,a,u,l,c,f,p,d,h,g,m=F.hasData(e)&&F.get(e);if(m&&(u=m.events)){for(l=(t=(t||"").match(A)||[""]).length;l--;)if(d=g=(a=Q.exec(t[l])||[])[1],h=(a[2]||"").split(".").sort(),d){for(f=C.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],a=a[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),s=o=p.length;o--;)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||a&&!a.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));s&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,m.handle)||C.removeEvent(e,d,m.handle),delete u[d])}else for(d in u)C.event.remove(e,d+t[l],n,r,!0);C.isEmptyObject(u)&&(delete m.handle,F.remove(e,"events"))}},trigger:function(e,t,n,r){var i,o,s,a,u,l,c,f=[n||y],p=m.call(e,"type")?e.type:e,d=m.call(e,"namespace")?e.namespace.split("."):[];if(o=s=n=n||y,3!==n.nodeType&&8!==n.nodeType&&!G.test(p+C.event.triggered)&&(0<=p.indexOf(".")&&(p=(d=p.split(".")).shift(),d.sort()),u=p.indexOf(":")<0&&"on"+p,(e=e[C.expando]?e:new C.Event(p,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=d.join("."),e.namespace_re=e.namespace?new RegExp("(^|\\.)"+d.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:C.makeArray(t,[e]),c=C.event.special[p]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!C.isWindow(n)){for(a=c.delegateType||p,G.test(a+p)||(o=o.parentNode);o;o=o.parentNode)f.push(o),s=o;s===(n.ownerDocument||y)&&f.push(s.defaultView||s.parentWindow||h)}for(i=0;(o=f[i++])&&!e.isPropagationStopped();)e.type=1]*)\/>/gi,te=/<([\w:]+)/,ne=/<|&#?\w+;/,re=/<(?:script|style|link)/i,ie=/checked\s*(?:[^=]|=\s*.checked.)/i,oe=/^$|\/(?:java|ecma)script/i,se=/^true\/(.*)/,ae=/^\s*\s*$/g,ue={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function le(e,t){return C.nodeName(e,"table")&&C.nodeName(11!==t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function ce(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function fe(e){var t=se.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function pe(e,t){for(var n=0,r=e.length;n")+a[2],l=a[0];l--;)o=o.lastChild;C.merge(f,o.childNodes),(o=c.firstChild).textContent=""}else f.push(t.createTextNode(i));for(c.textContent="",p=0;i=f[p++];)if((!r||-1===C.inArray(i,r))&&(u=C.contains(i.ownerDocument,i),o=he(c.appendChild(i),"script"),u&&pe(o),n))for(l=0;i=o[l++];)oe.test(i.type||"")&&n.push(i);return c},cleanData:function(e){for(var t,n,r,i,o=C.event.special,s=0;void 0!==(n=e[s]);s++){if(C.acceptData(n)&&((i=n[F.expando])&&(t=F.cache[i]))){if(t.events)for(r in t.events)o[r]?C.event.remove(n,r):C.removeEvent(n,r,t.handle);F.cache[i]&&delete F.cache[i]}delete P.cache[n[P.expando]]}}}),C.fn.extend({text:function(e){return H(this,function(e){return void 0===e?C.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=e)})},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||le(this,e).appendChild(e)})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=le(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){for(var n,r=e?C.filter(e,this):this,i=0;null!=(n=r[i]);i++)t||1!==n.nodeType||C.cleanData(he(n)),n.parentNode&&(t&&C.contains(n.ownerDocument,n)&&pe(he(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(C.cleanData(he(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return C.clone(this,e,t)})},html:function(e){return H(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!re.test(e)&&!ue[(te.exec(e)||["",""])[1].toLowerCase()]){e=e.replace(ee,"<$1>");try{for(;n")).appendTo(t.documentElement))[0].contentDocument).write(),t.close(),n=ve(e,t),ge.detach()),me[e]=n),n}var xe=/^margin/,be=new RegExp("^("+I+")(?!px)[a-z%]+$","i"),we=function(e){return e.ownerDocument.defaultView.getComputedStyle(e,null)};function Te(e,t,n){var r,i,o,s,a=e.style;return(n=n||we(e))&&(s=n.getPropertyValue(t)||n[t]),n&&(""!==s||C.contains(e.ownerDocument,e)||(s=C.style(e,t)),be.test(s)&&xe.test(t)&&(r=a.width,i=a.minWidth,o=a.maxWidth,a.minWidth=a.maxWidth=a.width=s,s=n.width,a.width=r,a.minWidth=i,a.maxWidth=o)),void 0!==s?s+"":s}function Ce(e,t){return{get:function(){return e()?void delete this.get:(this.get=t).apply(this,arguments)}}}!function(){var t,n,r=y.documentElement,i=y.createElement("div"),o=y.createElement("div");if(o.style){function e(){o.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",o.innerHTML="",r.appendChild(i);var e=h.getComputedStyle(o,null);t="1%"!==e.top,n="4px"===e.width,r.removeChild(i)}o.style.backgroundClip="content-box",o.cloneNode(!0).style.backgroundClip="",v.clearCloneStyle="content-box"===o.style.backgroundClip,i.style.cssText="border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute",i.appendChild(o),h.getComputedStyle&&C.extend(v,{pixelPosition:function(){return e(),t},boxSizingReliable:function(){return null==n&&e(),n},reliableMarginRight:function(){var e,t=o.appendChild(y.createElement("div"));return t.style.cssText=o.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",t.style.marginRight=t.style.width="0",o.style.width="1px",r.appendChild(i),e=!parseFloat(h.getComputedStyle(t,null).marginRight),r.removeChild(i),e}})}}(),C.swap=function(e,t,n,r){var i,o,s={};for(o in t)s[o]=e.style[o],e.style[o]=t[o];for(o in i=n.apply(e,r||[]),t)e.style[o]=s[o];return i};var Ne=/^(none|table(?!-c[ea]).+)/,ke=new RegExp("^("+I+")(.*)$","i"),Ee=new RegExp("^([+-])=("+I+")","i"),Se={position:"absolute",visibility:"hidden",display:"block"},je={letterSpacing:"0",fontWeight:"400"},De=["Webkit","O","Moz","ms"];function Ae(e,t){if(t in e)return t;for(var n=t[0].toUpperCase()+t.slice(1),r=t,i=De.length;i--;)if((t=De[i]+n)in e)return t;return r}function Le(e,t,n){var r=ke.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function qe(e,t,n,r,i){for(var o=n===(r?"border":"content")?4:"width"===t?1:0,s=0;o<4;o+=2)"margin"===n&&(s+=C.css(e,n+_[o],!0,i)),r?("content"===n&&(s-=C.css(e,"padding"+_[o],!0,i)),"margin"!==n&&(s-=C.css(e,"border"+_[o]+"Width",!0,i))):(s+=C.css(e,"padding"+_[o],!0,i),"padding"!==n&&(s+=C.css(e,"border"+_[o]+"Width",!0,i)));return s}function He(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=we(e),s="border-box"===C.css(e,"boxSizing",!1,o);if(i<=0||null==i){if(((i=Te(e,t,o))<0||null==i)&&(i=e.style[t]),be.test(i))return i;r=s&&(v.boxSizingReliable()||i===e.style[t]),i=parseFloat(i)||0}return i+qe(e,t,n||(s?"border":"content"),r,o)+"px"}function Oe(e,t){for(var n,r,i,o=[],s=0,a=e.length;s").prop({async:!0,charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),y.head.appendChild(r[0])},abort:function(){i&&i()}}});var St=[],jt=/(=)\?(?=&|$)|\?\?/;C.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=St.pop()||C.expando+"_"+tt++;return this[e]=!0,e}}),C.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,s=!1!==e.jsonp&&(jt.test(e.url)?"url":"string"==typeof e.data&&!(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&jt.test(e.data)&&"data");return s||"jsonp"===e.dataTypes[0]?(r=e.jsonpCallback=C.isFunction(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,s?e[s]=e[s].replace(jt,"$1"+r):!1!==e.jsonp&&(e.url+=(nt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||C.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=h[r],h[r]=function(){o=arguments},n.always(function(){h[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,St.push(r)),o&&C.isFunction(i)&&i(o[0]),o=i=void 0}),"script"):void 0}),C.parseHTML=function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||y;var r=b.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=C.buildFragment([e],t,i),i&&i.length&&C(i).remove(),C.merge([],r.childNodes))};var Dt=C.fn.load;C.fn.load=function(e,t,n){if("string"!=typeof e&&Dt)return Dt.apply(this,arguments);var r,i,o,s=this,a=e.indexOf(" ");return 0<=a&&(r=C.trim(e.slice(a)),e=e.slice(0,a)),C.isFunction(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0").append(C.parseHTML(e)).find(r):e)}).complete(n&&function(e,t){s.each(n,o||[e.responseText,t,e])}),this},C.expr.filters.animated=function(t){return C.grep(C.timers,function(e){return t===e.elem}).length};var At=h.document.documentElement;function Lt(e){return C.isWindow(e)?e:9===e.nodeType&&e.defaultView}C.offset={setOffset:function(e,t,n){var r,i,o,s,a,u,l=C.css(e,"position"),c=C(e),f={};"static"===l&&(e.style.position="relative"),a=c.offset(),o=C.css(e,"top"),u=C.css(e,"left"),i=("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(s=(r=c.position()).top,r.left):(s=parseFloat(o)||0,parseFloat(u)||0),C.isFunction(t)&&(t=t.call(e,n,a)),null!=t.top&&(f.top=t.top-a.top+s),null!=t.left&&(f.left=t.left-a.left+i),"using"in t?t.using.call(e,f):c.css(f)}},C.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){C.offset.setOffset(this,t,e)});var e,n,r=this[0],i={top:0,left:0},o=r&&r.ownerDocument;return o?(e=o.documentElement,C.contains(e,r)?(typeof r.getBoundingClientRect!==U&&(i=r.getBoundingClientRect()),n=Lt(o),{top:i.top+n.pageYOffset-e.clientTop,left:i.left+n.pageXOffset-e.clientLeft}):i):void 0},position:function(){if(this[0]){var e,t,n=this[0],r={top:0,left:0};return"fixed"===C.css(n,"position")?t=n.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),C.nodeName(e[0],"html")||(r=e.offset()),r.top+=C.css(e[0],"borderTopWidth",!0),r.left+=C.css(e[0],"borderLeftWidth",!0)),{top:t.top-r.top-C.css(n,"marginTop",!0),left:t.left-r.left-C.css(n,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var e=this.offsetParent||At;e&&!C.nodeName(e,"html")&&"static"===C.css(e,"position");)e=e.offsetParent;return e||At})}}),C.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;C.fn[t]=function(e){return H(this,function(e,t,n){var r=Lt(e);return void 0===n?r?r[i]:e[t]:void(r?r.scrollTo(o?h.pageXOffset:n,o?n:h.pageYOffset):e[t]=n)},t,e,arguments.length,null)}}),C.each(["top","left"],function(e,n){C.cssHooks[n]=Ce(v.pixelPosition,function(e,t){return t?(t=Te(e,n),be.test(t)?C(e).position()[n]+"px":t):void 0})}),C.each({Height:"height",Width:"width"},function(o,s){C.each({padding:"inner"+o,content:s,"":"outer"+o},function(r,e){C.fn[e]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return H(this,function(e,t,n){var r;return C.isWindow(e)?e.document.documentElement["client"+o]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+o],r["scroll"+o],e.body["offset"+o],r["offset"+o],r["client"+o])):void 0===n?C.css(e,t,i):C.style(e,t,n,i)},s,n?e:void 0,n,null)}})}),C.fn.size=function(){return this.length},C.fn.andSelf=C.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return C});var qt=h.jQuery,Ht=h.$;return C.noConflict=function(e){return h.$===C&&(h.$=Ht),e&&h.jQuery===C&&(h.jQuery=qt),C},typeof e===U&&(h.jQuery=h.$=C),C}); !function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)}(function(P){function s(t,e){var i,s,n,o=t.nodeName.toLowerCase();return"area"===o?(s=(i=t.parentNode).name,!(!t.href||!s||"map"!==i.nodeName.toLowerCase())&&(!!(n=P("img[usemap='#"+s+"']")[0])&&a(n))):(/^(input|select|textarea|button|object)$/.test(o)?!t.disabled:"a"===o&&t.href||e)&&a(t)}function a(t){return P.expr.filters.visible(t)&&!P(t).parents().addBack().filter(function(){return"hidden"===P.css(this,"visibility")}).length}function t(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},P.extend(this._defaults,this.regional[""]),this.regional.en=P.extend(!0,{},this.regional[""]),this.regional["en-US"]=P.extend(!0,{},this.regional.en),this.dpDiv=i(P("
"))}function i(t){var e="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return t.delegate(e,"mouseout",function(){P(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&P(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&P(this).removeClass("ui-datepicker-next-hover")}).delegate(e,"mouseover",o)}function o(){P.datepicker._isDisabledDatepicker(g.inline?g.dpDiv.parent()[0]:g.input[0])||(P(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),P(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&P(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&P(this).addClass("ui-datepicker-next-hover"))}function u(t,e){for(var i in P.extend(t,e),e)null==e[i]&&(t[i]=e[i]);return t}function e(e){return function(){var t=this.element.val();e.apply(this,arguments),this._refresh(),t!==this.element.val()&&this._trigger("change")}}var n,r,h,l;P.ui=P.ui||{},P.extend(P.ui,{version:"1.11.4",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),P.fn.extend({scrollParent:function(t){var e=this.css("position"),i="absolute"===e,s=t?/(auto|scroll|hidden)/:/(auto|scroll)/,n=this.parents().filter(function(){var t=P(this);return(!i||"static"!==t.css("position"))&&s.test(t.css("overflow")+t.css("overflow-y")+t.css("overflow-x"))}).eq(0);return"fixed"!==e&&n.length?n:P(this[0].ownerDocument||document)},uniqueId:(l=0,function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++l)})}),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&P(this).removeAttr("id")})}}),P.extend(P.expr[":"],{data:P.expr.createPseudo?P.expr.createPseudo(function(e){return function(t){return!!P.data(t,e)}}):function(t,e,i){return!!P.data(t,i[3])},focusable:function(t){return s(t,!isNaN(P.attr(t,"tabindex")))},tabbable:function(t){var e=P.attr(t,"tabindex"),i=isNaN(e);return(i||0<=e)&&s(t,!i)}}),P("").outerWidth(1).jquery||P.each(["Width","Height"],function(t,i){function s(t,e,i,s){return P.each(n,function(){e-=parseFloat(P.css(t,"padding"+this))||0,i&&(e-=parseFloat(P.css(t,"border"+this+"Width"))||0),s&&(e-=parseFloat(P.css(t,"margin"+this))||0)}),e}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:P.fn.innerWidth,innerHeight:P.fn.innerHeight,outerWidth:P.fn.outerWidth,outerHeight:P.fn.outerHeight};P.fn["inner"+i]=function(t){return void 0===t?a["inner"+i].call(this):this.each(function(){P(this).css(o,s(this,t)+"px")})},P.fn["outer"+i]=function(t,e){return"number"!=typeof t?a["outer"+i].call(this,t):this.each(function(){P(this).css(o,s(this,t,!0,e)+"px")})}}),P.fn.addBack||(P.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),P("").data("a-b","a").removeData("a-b").data("a-b")&&(P.fn.removeData=(h=P.fn.removeData,function(t){return arguments.length?h.call(this,P.camelCase(t)):h.call(this)})),P.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),P.fn.extend({focus:(r=P.fn.focus,function(e,i){return"number"==typeof e?this.each(function(){var t=this;setTimeout(function(){P(t).focus(),i&&i.call(t)},e)}):r.apply(this,arguments)}),disableSelection:(n="onselectstart"in document.createElement("div")?"selectstart":"mousedown",function(){return this.bind(n+".ui-disableSelection",function(t){t.preventDefault()})}),enableSelection:function(){return this.unbind(".ui-disableSelection")},zIndex:function(t){if(void 0!==t)return this.css("zIndex",t);if(this.length)for(var e,i,s=P(this[0]);s.length&&s[0]!==document;){if(("absolute"===(e=s.css("position"))||"relative"===e||"fixed"===e)&&(i=parseInt(s.css("zIndex"),10),!isNaN(i)&&0!==i))return i;s=s.parent()}return 0}}),P.ui.plugin={add:function(t,e,i){var s,n=P.ui[t].prototype;for(s in i)n.plugins[s]=n.plugins[s]||[],n.plugins[s].push([e,i[s]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}};var c,d=0,p=Array.prototype.slice;P.cleanData=(c=P.cleanData,function(t){var e,i,s;for(s=0;null!=(i=t[s]);s++)try{(e=P._data(i,"events"))&&e.remove&&P(i).triggerHandler("remove")}catch(t){}c(t)}),P.widget=function(t,i,e){var s,n,o,a,r={},h=t.split(".")[0];return t=t.split(".")[1],s=h+"-"+t,e||(e=i,i=P.Widget),P.expr[":"][s.toLowerCase()]=function(t){return!!P.data(t,s)},P[h]=P[h]||{},n=P[h][t],o=P[h][t]=function(t,e){return this._createWidget?void(arguments.length&&this._createWidget(t,e)):new o(t,e)},P.extend(o,n,{version:e.version,_proto:P.extend({},e),_childConstructors:[]}),(a=new i).options=P.widget.extend({},a.options),P.each(e,function(e,s){return P.isFunction(s)?void(r[e]=(n=function(){return i.prototype[e].apply(this,arguments)},o=function(t){return i.prototype[e].apply(this,t)},function(){var t,e=this._super,i=this._superApply;return this._super=n,this._superApply=o,t=s.apply(this,arguments),this._super=e,this._superApply=i,t})):void(r[e]=s);var n,o}),o.prototype=P.widget.extend(a,{widgetEventPrefix:n&&a.widgetEventPrefix||t},r,{constructor:o,namespace:h,widgetName:t,widgetFullName:s}),n?(P.each(n._childConstructors,function(t,e){var i=e.prototype;P.widget(i.namespace+"."+i.widgetName,o,e._proto)}),delete n._childConstructors):i._childConstructors.push(o),P.widget.bridge(t,o),o},P.widget.extend=function(t){for(var e,i,s=p.call(arguments,1),n=0,o=s.length;n",options:{disabled:!1,create:null},_createWidget:function(t,e){e=P(e||this.defaultElement||this)[0],this.element=P(e),this.uuid=d++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=P(),this.hoverable=P(),this.focusable=P(),e!==this&&(P.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===e&&this.destroy()}}),this.document=P(e.style?e.ownerDocument:e.document||e),this.window=P(this.document[0].defaultView||this.document[0].parentWindow)),this.options=P.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:P.noop,_getCreateEventData:P.noop,_create:P.noop,_init:P.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetFullName).removeData(P.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:P.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return P.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t]=P.widget.extend({},this.options[t]),n=0;i.length-1>n;n++)s[i[n]]=s[i[n]]||{},s=s[i[n]];if(t=i.pop(),1===arguments.length)return void 0===s[t]?null:s[t];s[t]=e}else{if(1===arguments.length)return void 0===this.options[t]?null:this.options[t];o[t]=e}return this._setOptions(o),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return this.options[t]=e,"disabled"===t&&(this.widget().toggleClass(this.widgetFullName+"-disabled",!!e),e&&(this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus"))),this},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_on:function(a,r,t){var h,l=this;"boolean"!=typeof a&&(t=r,r=a,a=!1),t?(r=h=P(r),this.bindings=this.bindings.add(r)):(t=r,r=this.element,h=this.widget()),P.each(t,function(t,e){function i(){return a||!0!==l.options.disabled&&!P(this).hasClass("ui-state-disabled")?("string"==typeof e?l[e]:e).apply(l,arguments):void 0}"string"!=typeof e&&(i.guid=e.guid=e.guid||i.guid||P.guid++);var s=t.match(/^([\w:-]*)\s*(.*)$/),n=s[1]+l.eventNamespace,o=s[2];o?h.delegate(o,n,i):r.bind(n,i)})},_off:function(t,e){e=(e||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,t.unbind(e).undelegate(e),this.bindings=P(this.bindings.not(t).get()),this.focusable=P(this.focusable.not(t).get()),this.hoverable=P(this.hoverable.not(t).get())},_delay:function(t,e){var i=this;return setTimeout(function(){return("string"==typeof t?i[t]:t).apply(i,arguments)},e||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){P(t.currentTarget).addClass("ui-state-hover")},mouseleave:function(t){P(t.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){P(t.currentTarget).addClass("ui-state-focus")},focusout:function(t){P(t.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(t,e,i){var s,n,o=this.options[t];if(i=i||{},(e=P.Event(e)).type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),e.target=this.element[0],n=e.originalEvent)for(s in n)s in e||(e[s]=n[s]);return this.element.trigger(e,i),!(P.isFunction(o)&&!1===o.apply(this.element[0],[e].concat(i))||e.isDefaultPrevented())}},P.each({show:"fadeIn",hide:"fadeOut"},function(o,a){P.Widget.prototype["_"+o]=function(e,t,i){"string"==typeof t&&(t={effect:t});var s,n=t?!0===t||"number"==typeof t?a:t.effect||a:o;"number"==typeof(t=t||{})&&(t={duration:t}),s=!P.isEmptyObject(t),t.complete=i,t.delay&&e.delay(t.delay),s&&P.effects&&P.effects.effect[n]?e[o](t):n!==o&&e[n]?e[n](t.duration,t.easing,i):e.queue(function(t){P(this)[o](),i&&i.call(e[0]),t()})}}),P.widget;var f=!1;P(document).mouseup(function(){f=!1}),P.widget("ui.mouse",{version:"1.11.4",options:{cancel:"input,textarea,button,select,option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.bind("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).bind("click."+this.widgetName,function(t){return!0===P.data(t.target,e.widgetName+".preventClickEvent")?(P.removeData(t.target,e.widgetName+".preventClickEvent"),t.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName),this._mouseMoveDelegate&&this.document.unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(t){if(!f){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(t),this._mouseDownEvent=t;var e=this,i=1===t.which,s=!("string"!=typeof this.options.cancel||!t.target.nodeName)&&P(t.target).closest(this.options.cancel).length;return i&&!s&&this._mouseCapture(t)&&(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=!1!==this._mouseStart(t),!this._mouseStarted)?t.preventDefault():(!0===P.data(t.target,this.widgetName+".preventClickEvent")&&P.removeData(t.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return e._mouseMove(t)},this._mouseUpDelegate=function(t){return e._mouseUp(t)},this.document.bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),t.preventDefault(),f=!0)),!0}},_mouseMove:function(t){if(this._mouseMoved){if(P.ui.ie&&(!document.documentMode||document.documentMode<9)&&!t.button)return this._mouseUp(t);if(!t.which)return this._mouseUp(t)}return(t.which||t.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(t),t.preventDefault()):(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=!1!==this._mouseStart(this._mouseDownEvent,t),this._mouseStarted?this._mouseDrag(t):this._mouseUp(t)),!this._mouseStarted)},_mouseUp:function(t){return this.document.unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,t.target===this._mouseDownEvent.target&&P.data(t.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(t)),f=!1},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),function(){function x(t,e,i){return[parseFloat(t[0])*(h.test(t[0])?e/100:1),parseFloat(t[1])*(h.test(t[1])?i/100:1)]}function k(t,e){return parseInt(P.css(t,e),10)||0}P.ui=P.ui||{};var n,C,D=Math.max,I=Math.abs,T=Math.round,s=/left|center|right/,o=/top|center|bottom/,a=/[\+\-]\d+(\.[\d]+)?%?/,r=/^\w+/,h=/%$/,l=P.fn.position;P.position={scrollbarWidth:function(){if(void 0!==n)return n;var t,e,i=P("
"),s=i.children()[0];return P("body").append(i),t=s.offsetWidth,i.css("overflow","scroll"),t===(e=s.offsetWidth)&&(e=i[0].clientWidth),i.remove(),n=t-e},getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),s="scroll"===e||"auto"===e&&t.widthI(e+i)&&(o.horizontal="center"),fI(s+n)&&(o.vertical="middle"),o.important=D(I(e),I(i))>D(I(s),I(n))?"horizontal":"vertical",u.using.call(this,t,o)}),a.offset(P.extend(l,{using:t}))})},P.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,o=s.width,a=t.left-e.collisionPosition.marginLeft,r=n-a,h=a+e.collisionWidth-o-n;e.collisionWidth>o?0o?0i)&&(t.left+=u+d+p):0I(s))&&(t.left+=u+d+p))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,a=n.height,r=n.isWindow?n.scrollTop:n.offset.top,h=t.top-e.collisionPosition.marginTop,l=h-r,c=h+e.collisionHeight-a-r,u="top"===e.my[1]?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,d="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,p=-2*e.offset[1];l<0?((s=t.top+u+d+p+e.collisionHeight-a-o)<0||I(l)>s)&&(t.top+=u+d+p):0I(i))&&(t.top+=u+d+p))}},flipfit:{left:function(){P.ui.position.flip.left.apply(this,arguments),P.ui.position.fit.left.apply(this,arguments)},top:function(){P.ui.position.flip.top.apply(this,arguments),P.ui.position.fit.top.apply(this,arguments)}}},function(){var t,e,i,s,n,o=document.getElementsByTagName("body")[0],a=document.createElement("div");for(n in t=document.createElement(o?"div":"body"),i={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},o&&P.extend(i,{position:"absolute",left:"-1000px",top:"-1000px"}),i)t.style[n]=i[n];t.appendChild(a),(e=o||document.documentElement).insertBefore(t,e.firstChild),a.style.cssText="position: absolute; left: 10.7432222px;",s=P(a).offset().left,C=10").css("position","absolute").appendTo(t.parent()).outerWidth(t.outerWidth()).outerHeight(t.outerHeight()).offset(t.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_blurActiveElement:function(t){var e=this.document[0];if(this.handleElement.is(t.target))try{e.activeElement&&"body"!==e.activeElement.nodeName.toLowerCase()&&P(e.activeElement).blur()}catch(t){}},_mouseStart:function(t){var e=this.options;return this.helper=this._createHelper(t),this.helper.addClass("ui-draggable-dragging"),this._cacheHelperProportions(),P.ui.ddmanager&&(P.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(!0),this.offsetParent=this.helper.offsetParent(),this.hasFixedAncestor=0i[2]&&(h=i[2]+this.offset.click.left),t.pageY-this.offset.click.top>i[3]&&(l=i[3]+this.offset.click.top)),a.grid&&(n=a.grid[1]?this.originalPageY+Math.round((l-this.originalPageY)/a.grid[1])*a.grid[1]:this.originalPageY,l=i?n-this.offset.click.top>=i[1]||n-this.offset.click.top>i[3]?n:n-this.offset.click.top>=i[1]?n-a.grid[1]:n+a.grid[1]:n,o=a.grid[0]?this.originalPageX+Math.round((h-this.originalPageX)/a.grid[0])*a.grid[0]:this.originalPageX,h=i?o-this.offset.click.left>=i[0]||o-this.offset.click.left>i[2]?o:o-this.offset.click.left>=i[0]?o-a.grid[0]:o+a.grid[0]:o),"y"===a.axis&&(h=this.originalPageX),"x"===a.axis&&(l=this.originalPageY)),{top:l-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.offset.scroll.top:r?0:this.offset.scroll.top),left:h-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.offset.scroll.left:r?0:this.offset.scroll.left)}},_clear:function(){this.helper.removeClass("ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1,this.destroyOnClear&&this.destroy()},_normalizeRightBottom:function(){"y"!==this.options.axis&&"auto"!==this.helper.css("right")&&(this.helper.width(this.helper.width()),this.helper.css("right","auto")),"x"!==this.options.axis&&"auto"!==this.helper.css("bottom")&&(this.helper.height(this.helper.height()),this.helper.css("bottom","auto"))},_trigger:function(t,e,i){return i=i||this._uiHash(),P.ui.plugin.call(this,t,[e,i,this],!0),/^(drag|start|stop)/.test(t)&&(this.positionAbs=this._convertPositionTo("absolute"),i.offset=this.positionAbs),P.Widget.prototype._trigger.call(this,t,e,i)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),P.ui.plugin.add("draggable","connectToSortable",{start:function(e,t,i){var s=P.extend({},t,{item:i.element});i.sortables=[],P(i.options.connectToSortable).each(function(){var t=P(this).sortable("instance");t&&!t.options.disabled&&(i.sortables.push(t),t.refreshPositions(),t._trigger("activate",e,s))})},stop:function(e,t,i){var s=P.extend({},t,{item:i.element});i.cancelHelperRemoval=!1,P.each(i.sortables,function(){var t=this;t.isOver?(t.isOver=0,i.cancelHelperRemoval=!0,t.cancelHelperRemoval=!1,t._storedCSS={position:t.placeholder.css("position"),top:t.placeholder.css("top"),left:t.placeholder.css("left")},t._mouseStop(e),t.options.helper=t.options._helper):(t.cancelHelperRemoval=!0,t._trigger("deactivate",e,s))})},drag:function(i,s,n){P.each(n.sortables,function(){var t=!1,e=this;e.positionAbs=n.positionAbs,e.helperProportions=n.helperProportions,e.offset.click=n.offset.click,e._intersectsWith(e.containerCache)&&(t=!0,P.each(n.sortables,function(){return this.positionAbs=n.positionAbs,this.helperProportions=n.helperProportions,this.offset.click=n.offset.click,this!==e&&this._intersectsWith(this.containerCache)&&P.contains(e.element[0],this.element[0])&&(t=!1),t})),t?(e.isOver||(e.isOver=1,n._parent=s.helper.parent(),e.currentItem=s.helper.appendTo(e.element).data("ui-sortable-item",!0),e.options._helper=e.options.helper,e.options.helper=function(){return s.helper[0]},i.target=e.currentItem[0],e._mouseCapture(i,!0),e._mouseStart(i,!0,!0),e.offset.click.top=n.offset.click.top,e.offset.click.left=n.offset.click.left,e.offset.parent.left-=n.offset.parent.left-e.offset.parent.left,e.offset.parent.top-=n.offset.parent.top-e.offset.parent.top,n._trigger("toSortable",i),n.dropped=e.element,P.each(n.sortables,function(){this.refreshPositions()}),n.currentItem=n.element,e.fromOutside=n),e.currentItem&&(e._mouseDrag(i),s.position=e.position)):e.isOver&&(e.isOver=0,e.cancelHelperRemoval=!0,e.options._revert=e.options.revert,e.options.revert=!1,e._trigger("out",i,e._uiHash(e)),e._mouseStop(i,!0),e.options.revert=e.options._revert,e.options.helper=e.options._helper,e.placeholder&&e.placeholder.remove(),s.helper.appendTo(n._parent),n._refreshOffsets(i),s.position=n._generatePosition(i,!0),n._trigger("fromSortable",i),n.dropped=!1,P.each(n.sortables,function(){this.refreshPositions()}))})}}),P.ui.plugin.add("draggable","cursor",{start:function(t,e,i){var s=P("body"),n=i.options;s.css("cursor")&&(n._cursor=s.css("cursor")),s.css("cursor",n.cursor)},stop:function(t,e,i){var s=i.options;s._cursor&&P("body").css("cursor",s._cursor)}}),P.ui.plugin.add("draggable","opacity",{start:function(t,e,i){var s=P(e.helper),n=i.options;s.css("opacity")&&(n._opacity=s.css("opacity")),s.css("opacity",n.opacity)},stop:function(t,e,i){var s=i.options;s._opacity&&P(e.helper).css("opacity",s._opacity)}}),P.ui.plugin.add("draggable","scroll",{start:function(t,e,i){i.scrollParentNotHidden||(i.scrollParentNotHidden=i.helper.scrollParent(!1)),i.scrollParentNotHidden[0]!==i.document[0]&&"HTML"!==i.scrollParentNotHidden[0].tagName&&(i.overflowOffset=i.scrollParentNotHidden.offset())},drag:function(t,e,i){var s=i.options,n=!1,o=i.scrollParentNotHidden[0],a=i.document[0];o!==a&&"HTML"!==o.tagName?(s.axis&&"x"===s.axis||(i.overflowOffset.top+o.offsetHeight-t.pageY=Math.abs(l-_),n=f>=Math.abs(c-v),o=f>=Math.abs(r-g),a=f>=Math.abs(h-m),s&&(e.position.top=i._convertPositionTo("relative",{top:l-i.helperProportions.height,left:0}).top),n&&(e.position.top=i._convertPositionTo("relative",{top:c,left:0}).top),o&&(e.position.left=i._convertPositionTo("relative",{top:0,left:r-i.helperProportions.width}).left),a&&(e.position.left=i._convertPositionTo("relative",{top:0,left:h}).left)),d=s||n||o||a,"outer"!==p.snapMode&&(s=f>=Math.abs(l-v),n=f>=Math.abs(c-_),o=f>=Math.abs(r-m),a=f>=Math.abs(h-g),s&&(e.position.top=i._convertPositionTo("relative",{top:l,left:0}).top),n&&(e.position.top=i._convertPositionTo("relative",{top:c-i.helperProportions.height,left:0}).top),o&&(e.position.left=i._convertPositionTo("relative",{top:0,left:r}).left),a&&(e.position.left=i._convertPositionTo("relative",{top:0,left:h-i.helperProportions.width}).left)),!i.snapElements[u].snapping&&(s||n||o||a||d)&&i.options.snap.snap&&i.options.snap.snap.call(i.element,t,P.extend(i._uiHash(),{snapItem:i.snapElements[u].item})),i.snapElements[u].snapping=s||n||o||a||d)}}),P.ui.plugin.add("draggable","stack",{start:function(t,e,i){var s,n=i.options,o=P.makeArray(P(n.stack)).sort(function(t,e){return(parseInt(P(t).css("zIndex"),10)||0)-(parseInt(P(e).css("zIndex"),10)||0)});o.length&&(s=parseInt(P(o[0]).css("zIndex"),10)||0,P(o).each(function(t){P(this).css("zIndex",s+t)}),this.css("zIndex",s+o.length))}}),P.ui.plugin.add("draggable","zIndex",{start:function(t,e,i){var s=P(e.helper),n=i.options;s.css("zIndex")&&(n._zIndex=s.css("zIndex")),s.css("zIndex",n.zIndex)},stop:function(t,e,i){var s=i.options;s._zIndex&&P(e.helper).css("zIndex",s._zIndex)}}),P.ui.draggable,P.widget("ui.droppable",{version:"1.11.4",widgetEventPrefix:"drop",options:{accept:"*",activeClass:!1,addClasses:!0,greedy:!1,hoverClass:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var t,e=this.options,i=e.accept;this.isover=!1,this.isout=!0,this.accept=P.isFunction(i)?i:function(t){return t.is(i)},this.proportions=function(){return arguments.length?void(t=arguments[0]):t||(t={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight})},this._addToManager(e.scope),e.addClasses&&this.element.addClass("ui-droppable")},_addToManager:function(t){P.ui.ddmanager.droppables[t]=P.ui.ddmanager.droppables[t]||[],P.ui.ddmanager.droppables[t].push(this)},_splice:function(t){for(var e=0;t.length>e;e++)t[e]===this&&t.splice(e,1)},_destroy:function(){var t=P.ui.ddmanager.droppables[this.options.scope];this._splice(t),this.element.removeClass("ui-droppable ui-droppable-disabled")},_setOption:function(t,e){if("accept"===t)this.accept=P.isFunction(e)?e:function(t){return t.is(e)};else if("scope"===t){var i=P.ui.ddmanager.droppables[this.options.scope];this._splice(i),this._addToManager(e)}this._super(t,e)},_activate:function(t){var e=P.ui.ddmanager.current;this.options.activeClass&&this.element.addClass(this.options.activeClass),e&&this._trigger("activate",t,this.ui(e))},_deactivate:function(t){var e=P.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass),e&&this._trigger("deactivate",t,this.ui(e))},_over:function(t){var e=P.ui.ddmanager.current;e&&(e.currentItem||e.element)[0]!==this.element[0]&&this.accept.call(this.element[0],e.currentItem||e.element)&&(this.options.hoverClass&&this.element.addClass(this.options.hoverClass),this._trigger("over",t,this.ui(e)))},_out:function(t){var e=P.ui.ddmanager.current;e&&(e.currentItem||e.element)[0]!==this.element[0]&&this.accept.call(this.element[0],e.currentItem||e.element)&&(this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("out",t,this.ui(e)))},_drop:function(e,t){var i=t||P.ui.ddmanager.current,s=!1;return!(!i||(i.currentItem||i.element)[0]===this.element[0])&&(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function(){var t=P(this).droppable("instance");return t.options.greedy&&!t.options.disabled&&t.options.scope===i.options.scope&&t.accept.call(t.element[0],i.currentItem||i.element)&&P.ui.intersect(i,P.extend(t,{offset:t.element.offset()}),t.options.tolerance,e)?!(s=!0):void 0}),!s&&(!!this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.activeClass&&this.element.removeClass(this.options.activeClass),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("drop",e,this.ui(i)),this.element)))},ui:function(t){return{draggable:t.currentItem||t.element,helper:t.helper,position:t.position,offset:t.positionAbs}}}),P.ui.intersect=function(){function d(t,e,i){return e<=t&&th&&c>a-t.helperProportions.width/2&&o+t.helperProportions.height/2>l&&u>r-t.helperProportions.height/2;case"pointer":return d(s.pageY,l,e.proportions().height)&&d(s.pageX,h,e.proportions().width);case"touch":return(l<=o&&o<=u||l<=r&&r<=u||oi;i++)if(!(n[i].options.disabled||t&&!n[i].accept.call(n[i].element[0],t.currentItem||t.element))){for(s=0;a.length>s;s++)if(a[s]===n[i].element[0]){n[i].proportions().height=0;continue t}n[i].visible="none"!==n[i].element.css("display"),n[i].visible&&("mousedown"===o&&n[i]._activate.call(n[i],e),n[i].offset=n[i].element.offset(),n[i].proportions({width:n[i].element[0].offsetWidth,height:n[i].element[0].offsetHeight}))}},drop:function(t,e){var i=!1;return P.each((P.ui.ddmanager.droppables[t.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&P.ui.intersect(t,this,this.options.tolerance,e)&&(i=this._drop.call(this,e)||i),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],t.currentItem||t.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,e)))}),i},dragStart:function(t,e){t.element.parentsUntil("body").bind("scroll.droppable",function(){t.options.refreshPositions||P.ui.ddmanager.prepareOffsets(t,e)})},drag:function(o,a){o.options.refreshPositions&&P.ui.ddmanager.prepareOffsets(o,a),P.each(P.ui.ddmanager.droppables[o.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var t,e,i,s=P.ui.intersect(o,this,this.options.tolerance,a),n=!s&&this.isover?"isout":s&&!this.isover?"isover":null;n&&(this.options.greedy&&(e=this.options.scope,(i=this.element.parents(":data(ui-droppable)").filter(function(){return P(this).droppable("instance").options.scope===e})).length&&((t=P(i[0]).droppable("instance")).greedyChild="isover"===n)),t&&"isover"===n&&(t.isover=!1,t.isout=!0,t._out.call(t,a)),this[n]=!0,this["isout"===n?"isover":"isout"]=!1,this["isover"===n?"_over":"_out"].call(this,a),t&&"isout"===n&&(t.isout=!1,t.isover=!0,t._over.call(t,a)))}})},dragStop:function(t,e){t.element.parentsUntil("body").unbind("scroll.droppable"),t.options.refreshPositions||P.ui.ddmanager.prepareOffsets(t,e)}},P.ui.droppable,P.widget("ui.resizable",P.ui.mouse,{version:"1.11.4",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseInt(t,10)||0},_isNumber:function(t){return!isNaN(parseInt(t,10))},_hasScroll:function(t,e){if("hidden"===P(t).css("overflow"))return!1;var i=e&&"left"===e?"scrollLeft":"scrollTop",s=!1;return 0").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")}),this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0}),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css({margin:this.originalElement.css("margin")}),this._proportionallyResize()),this.handles=n.handles||(P(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=P(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),t=this.handles.split(","),this.handles={},e=0;t.length>e;e++)i=P.trim(t[e]),(s=P("
")).css({zIndex:n.zIndex}),"se"===i&&s.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[i]=".ui-resizable-"+i,this.element.append(s);this._renderAxis=function(t){var e,i,s,n;for(e in t=t||this.element,this.handles)this.handles[e].constructor===String?this.handles[e]=this.element.children(this.handles[e]).first().show():(this.handles[e].jquery||this.handles[e].nodeType)&&(this.handles[e]=P(this.handles[e]),this._on(this.handles[e],{mousedown:o._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(i=P(this.handles[e],this.element),n=/sw|ne|nw|se|n|s/.test(e)?i.outerHeight():i.outerWidth(),s=["padding",/ne|nw|n/.test(e)?"Top":/se|sw|s/.test(e)?"Bottom":/^e$/.test(e)?"Right":"Left"].join(""),t.css(s,n),this._proportionallyResize()),this._handles=this._handles.add(this.handles[e])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.mouseover(function(){o.resizing||(this.className&&(s=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),o.axis=s&&s[1]?s[1]:"se")}),n.autoHide&&(this._handles.hide(),P(this.element).addClass("ui-resizable-autohide").mouseenter(function(){n.disabled||(P(this).removeClass("ui-resizable-autohide"),o._handles.show())}).mouseleave(function(){n.disabled||o.resizing||(P(this).addClass("ui-resizable-autohide"),o._handles.hide())})),this._mouseInit()},_destroy:function(){this._mouseDestroy();var t,e=function(t){P(t).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(e(this.element),t=this.element,this.originalElement.css({position:t.css("position"),width:t.outerWidth(),height:t.outerHeight(),top:t.css("top"),left:t.css("left")}).insertAfter(t),t.remove()),this.originalElement.css("resize",this.originalResizeStyle),e(this.originalElement),this},_mouseCapture:function(t){var e,i,s=!1;for(e in this.handles)((i=P(this.handles[e])[0])===t.target||P.contains(i,t.target))&&(s=!0);return!this.options.disabled&&s},_mouseStart:function(t){var e,i,s,n=this.options,o=this.element;return this.resizing=!0,this._renderProxy(),e=this._num(this.helper.css("left")),i=this._num(this.helper.css("top")),n.containment&&(e+=P(n.containment).scrollLeft()||0,i+=P(n.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:e,top:i},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:o.width(),height:o.height()},this.originalSize=this._helper?{width:o.outerWidth(),height:o.outerHeight()}:{width:o.width(),height:o.height()},this.sizeDiff={width:o.outerWidth()-o.width(),height:o.outerHeight()-o.height()},this.originalPosition={left:e,top:i},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof n.aspectRatio?n.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=P(".ui-resizable-"+this.axis).css("cursor"),P("body").css("cursor","auto"===s?this.axis+"-resize":s),o.addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var e,i,s=this.originalMousePosition,n=this.axis,o=t.pageX-s.left||0,a=t.pageY-s.top||0,r=this._change[n];return this._updatePrevProperties(),r&&(e=r.apply(this,[t,o,a]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(e=this._updateRatio(e,t)),e=this._respectSize(e,t),this._updateCache(e),this._propagate("resize",t),i=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),P.isEmptyObject(i)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges())),!1},_mouseStop:function(t){this.resizing=!1;var e,i,s,n,o,a,r,h=this.options,l=this;return this._helper&&(s=(i=(e=this._proportionallyResizeElements).length&&/textarea/i.test(e[0].nodeName))&&this._hasScroll(e[0],"left")?0:l.sizeDiff.height,n=i?0:l.sizeDiff.width,o={width:l.helper.width()-n,height:l.helper.height()-s},a=parseInt(l.element.css("left"),10)+(l.position.left-l.originalPosition.left)||null,r=parseInt(l.element.css("top"),10)+(l.position.top-l.originalPosition.top)||null,h.animate||this.element.css(P.extend(o,{top:r,left:a})),l.helper.height(l.size.height),l.helper.width(l.size.width),this._helper&&!h.animate&&this._proportionallyResize()),P("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidtht.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.position.top+this.size.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e<4;e++)i[e]=parseInt(s[e],10)||0,i[e]+=parseInt(n[e],10)||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var t=this.element,e=this.options;this.elementOffset=t.offset(),this._helper?(this.helper=this.helper||P("
"),this.helper.addClass(this._helper).css({width:this.element.outerWidth()-1,height:this.element.outerHeight()-1,position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++e.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize;return{top:this.originalPosition.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(t,e,i){return P.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},sw:function(t,e,i){return P.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,e,i]))},ne:function(t,e,i){return P.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},nw:function(t,e,i){return P.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,e,i]))}},_propagate:function(t,e){P.ui.plugin.call(this,t,[e,this.ui()]),"resize"!==t&&this._trigger(t,e,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),P.ui.plugin.add("resizable","animate",{stop:function(e){var i=P(this).resizable("instance"),t=i.options,s=i._proportionallyResizeElements,n=s.length&&/textarea/i.test(s[0].nodeName),o=n&&i._hasScroll(s[0],"left")?0:i.sizeDiff.height,a=n?0:i.sizeDiff.width,r={width:i.size.width-a,height:i.size.height-o},h=parseInt(i.element.css("left"),10)+(i.position.left-i.originalPosition.left)||null,l=parseInt(i.element.css("top"),10)+(i.position.top-i.originalPosition.top)||null;i.element.animate(P.extend(r,l&&h?{top:l,left:h}:{}),{duration:t.animateDuration,easing:t.animateEasing,step:function(){var t={width:parseInt(i.element.css("width"),10),height:parseInt(i.element.css("height"),10),top:parseInt(i.element.css("top"),10),left:parseInt(i.element.css("left"),10)};s&&s.length&&P(s[0]).css({width:t.width,height:t.height}),i._updateCache(t),i._propagate("resize",e)}})}}),P.ui.plugin.add("resizable","containment",{start:function(){var i,s,t,e,n,o,a,r=P(this).resizable("instance"),h=r.options,l=r.element,c=h.containment,u=c instanceof P?c.get(0):/parent/.test(c)?l.parent().get(0):c;u&&(r.containerElement=P(u),/document/.test(c)||c===document?(r.containerOffset={left:0,top:0},r.containerPosition={left:0,top:0},r.parentData={element:P(document),left:0,top:0,width:P(document).width(),height:P(document).height()||document.body.parentNode.scrollHeight}):(i=P(u),s=[],P(["Top","Right","Left","Bottom"]).each(function(t,e){s[t]=r._num(i.css("padding"+e))}),r.containerOffset=i.offset(),r.containerPosition=i.position(),r.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},t=r.containerOffset,e=r.containerSize.height,n=r.containerSize.width,o=r._hasScroll(u,"left")?u.scrollWidth:n,a=r._hasScroll(u)?u.scrollHeight:e,r.parentData={element:u,left:t.left,top:t.top,width:o,height:a}))},resize:function(t){var e,i,s,n,o=P(this).resizable("instance"),a=o.options,r=o.containerOffset,h=o.position,l=o._aspectRatio||t.shiftKey,c={top:0,left:0},u=o.containerElement,d=!0;u[0]!==document&&/static/.test(u.css("position"))&&(c=r),h.left<(o._helper?r.left:0)&&(o.size.width=o.size.width+(o._helper?o.position.left-r.left:o.position.left-c.left),l&&(o.size.height=o.size.width/o.aspectRatio,d=!1),o.position.left=a.helper?r.left:0),h.top<(o._helper?r.top:0)&&(o.size.height=o.size.height+(o._helper?o.position.top-r.top:o.position.top),l&&(o.size.width=o.size.height*o.aspectRatio,d=!1),o.position.top=o._helper?r.top:0),s=o.containerElement.get(0)===o.element.parent().get(0),n=/relative|absolute/.test(o.containerElement.css("position")),o.offset.top=s&&n?(o.offset.left=o.parentData.left+o.position.left,o.parentData.top+o.position.top):(o.offset.left=o.element.offset().left,o.element.offset().top),e=Math.abs(o.sizeDiff.width+(o._helper?o.offset.left-c.left:o.offset.left-r.left)),i=Math.abs(o.sizeDiff.height+(o._helper?o.offset.top-c.top:o.offset.top-r.top)),e+o.size.width>=o.parentData.width&&(o.size.width=o.parentData.width-e,l&&(o.size.height=o.size.width/o.aspectRatio,d=!1)),i+o.size.height>=o.parentData.height&&(o.size.height=o.parentData.height-i,l&&(o.size.width=o.size.height*o.aspectRatio,d=!1)),d||(o.position.left=o.prevPosition.left,o.position.top=o.prevPosition.top,o.size.width=o.prevSize.width,o.size.height=o.prevSize.height)},stop:function(){var t=P(this).resizable("instance"),e=t.options,i=t.containerOffset,s=t.containerPosition,n=t.containerElement,o=P(t.helper),a=o.offset(),r=o.outerWidth()-t.sizeDiff.width,h=o.outerHeight()-t.sizeDiff.height;t._helper&&!e.animate&&/relative/.test(n.css("position"))&&P(this).css({left:a.left-s.left-i.left,width:r,height:h}),t._helper&&!e.animate&&/static/.test(n.css("position"))&&P(this).css({left:a.left-s.left-i.left,width:r,height:h})}}),P.ui.plugin.add("resizable","alsoResize",{start:function(){var t=P(this).resizable("instance").options;P(t.alsoResize).each(function(){var t=P(this);t.data("ui-resizable-alsoresize",{width:parseInt(t.width(),10),height:parseInt(t.height(),10),left:parseInt(t.css("left"),10),top:parseInt(t.css("top"),10)})})},resize:function(t,i){var e=P(this).resizable("instance"),s=e.options,n=e.originalSize,o=e.originalPosition,a={height:e.size.height-n.height||0,width:e.size.width-n.width||0,top:e.position.top-o.top||0,left:e.position.left-o.left||0};P(s.alsoResize).each(function(){var t=P(this),s=P(this).data("ui-resizable-alsoresize"),n={},e=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];P.each(e,function(t,e){var i=(s[e]||0)+(a[e]||0);i&&0<=i&&(n[e]=i||null)}),t.css(n)})},stop:function(){P(this).removeData("resizable-alsoresize")}}),P.ui.plugin.add("resizable","ghost",{start:function(){var t=P(this).resizable("instance"),e=t.options,i=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass("string"==typeof e.ghost?e.ghost:""),t.ghost.appendTo(t.helper)},resize:function(){var t=P(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=P(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),P.ui.plugin.add("resizable","grid",{resize:function(){var t,e=P(this).resizable("instance"),i=e.options,s=e.size,n=e.originalSize,o=e.originalPosition,a=e.axis,r="number"==typeof i.grid?[i.grid,i.grid]:i.grid,h=r[0]||1,l=r[1]||1,c=Math.round((s.width-n.width)/h)*h,u=Math.round((s.height-n.height)/l)*l,d=n.width+c,p=n.height+u,f=i.maxWidth&&d>i.maxWidth,m=i.maxHeight&&p>i.maxHeight,g=i.minWidth&&i.minWidth>d,v=i.minHeight&&i.minHeight>p;i.grid=r,g&&(d+=h),v&&(p+=l),f&&(d-=h),m&&(p-=l),/^(se|s|e)$/.test(a)?(e.size.width=d,e.size.height=p):/^(ne)$/.test(a)?(e.size.width=d,e.size.height=p,e.position.top=o.top-u):/^(sw)$/.test(a)?(e.size.width=d,e.size.height=p,e.position.left=o.left-c):((p-l<=0||d-h<=0)&&(t=e._getPaddingPlusBorderDimensions(this)),e.position.top=0")},_destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item"),this.element.removeClass("ui-selectable ui-selectable-disabled"),this._mouseDestroy()},_mouseStart:function(i){var s=this,t=this.options;this.opos=[i.pageX,i.pageY],this.options.disabled||(this.selectees=P(t.filter,this.element[0]),this._trigger("start",i),P(t.appendTo).append(this.helper),this.helper.css({left:i.pageX,top:i.pageY,width:0,height:0}),t.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var t=P.data(this,"selectable-item");t.startselected=!0,i.metaKey||i.ctrlKey||(t.$element.removeClass("ui-selected"),t.selected=!1,t.$element.addClass("ui-unselecting"),t.unselecting=!0,s._trigger("unselecting",i,{unselecting:t.element}))}),P(i.target).parents().addBack().each(function(){var t,e=P.data(this,"selectable-item");return e?(t=!i.metaKey&&!i.ctrlKey||!e.$element.hasClass("ui-selected"),e.$element.removeClass(t?"ui-unselecting":"ui-selected").addClass(t?"ui-selecting":"ui-unselecting"),e.unselecting=!t,e.selecting=t,(e.selected=t)?s._trigger("selecting",i,{selecting:e.element}):s._trigger("unselecting",i,{unselecting:e.element}),!1):void 0}))},_mouseDrag:function(i){if(this.dragged=!0,!this.options.disabled){var t,s=this,n=this.options,o=this.opos[0],a=this.opos[1],r=i.pageX,h=i.pageY;return rr||o>t.right||t.top>h||a>t.bottom):"fit"===n.tolerance&&(e=t.left>o&&r>t.right&&t.top>a&&h>t.bottom),e?(t.selected&&(t.$element.removeClass("ui-selected"),t.selected=!1),t.unselecting&&(t.$element.removeClass("ui-unselecting"),t.unselecting=!1),t.selecting||(t.$element.addClass("ui-selecting"),t.selecting=!0,s._trigger("selecting",i,{selecting:t.element}))):(t.selecting&&((i.metaKey||i.ctrlKey)&&t.startselected?(t.$element.removeClass("ui-selecting"),t.selecting=!1,t.$element.addClass("ui-selected"),t.selected=!0):(t.$element.removeClass("ui-selecting"),t.selecting=!1,t.startselected&&(t.$element.addClass("ui-unselecting"),t.unselecting=!0),s._trigger("unselecting",i,{unselecting:t.element}))),t.selected&&(i.metaKey||i.ctrlKey||t.startselected||(t.$element.removeClass("ui-selected"),t.selected=!1,t.$element.addClass("ui-unselecting"),t.unselecting=!0,s._trigger("unselecting",i,{unselecting:t.element})))))}),!1}},_mouseStop:function(e){var i=this;return this.dragged=!1,P(".ui-unselecting",this.element[0]).each(function(){var t=P.data(this,"selectable-item");t.$element.removeClass("ui-unselecting"),t.unselecting=!1,t.startselected=!1,i._trigger("unselected",e,{unselected:t.element})}),P(".ui-selecting",this.element[0]).each(function(){var t=P.data(this,"selectable-item");t.$element.removeClass("ui-selecting").addClass("ui-selected"),t.selecting=!1,t.selected=!0,t.startselected=!0,i._trigger("selected",e,{selected:t.element})}),this._trigger("stop",e),this.helper.remove(),!1}}),P.widget("ui.sortable",P.ui.mouse,{version:"1.11.4",widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_isOverAxis:function(t,e,i){return e<=t&&t*{ cursor: "+o.cursor+" !important; }").appendTo(n)),o.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",o.opacity)),o.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",o.zIndex)),this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",t,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!i)for(s=this.containers.length-1;0<=s;s--)this.containers[s]._trigger("activate",t,this._uiHash(this));return P.ui.ddmanager&&(P.ui.ddmanager.current=this),P.ui.ddmanager&&!o.dropBehaviour&&P.ui.ddmanager.prepareOffsets(this,t),this.dragging=!0,this.helper.addClass("ui-sortable-helper"),this._mouseDrag(t),!0},_mouseDrag:function(t){var e,i,s,n,o=this.options,a=!1;for(this.position=this._generatePosition(t),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-t.pageYt[this.floating?"width":"height"]?p:e+this.helperProportions.width/2>o&&a>i-this.helperProportions.width/2&&s+this.helperProportions.height/2>r&&h>n-this.helperProportions.height/2},_intersectsWithPointer:function(t){var e="x"===this.options.axis||this._isOverAxis(this.positionAbs.top+this.offset.click.top,t.top,t.height),i="y"===this.options.axis||this._isOverAxis(this.positionAbs.left+this.offset.click.left,t.left,t.width),s=e&&i,n=this._getDragVerticalDirection(),o=this._getDragHorizontalDirection();return!!s&&(this.floating?o&&"right"===o||"down"===n?2:1:n&&("down"===n?2:1))},_intersectsWithSides:function(t){var e=this._isOverAxis(this.positionAbs.top+this.offset.click.top,t.top+t.height/2,t.height),i=this._isOverAxis(this.positionAbs.left+this.offset.click.left,t.left+t.width/2,t.width),s=this._getDragVerticalDirection(),n=this._getDragHorizontalDirection();return this.floating&&n?"right"===n&&i||"left"===n&&!i:s&&("down"===s&&e||"up"===s&&!e)},_getDragVerticalDirection:function(){var t=this.positionAbs.top-this.lastPositionAbs.top;return 0!==t&&(0e;e++)if(i[e]===t.item[0])return!1;return!0})},_refreshItems:function(t){this.items=[],this.containers=[this];var e,i,s,n,o,a,r,h,l=this.items,c=[[P.isFunction(this.options.items)?this.options.items.call(this.element[0],t,{item:this.currentItem}):P(this.options.items,this.element),this]],u=this._connectWith();if(u&&this.ready)for(e=u.length-1;0<=e;e--)for(i=(s=P(u[e],this.document[0])).length-1;0<=i;i--)(n=P.data(s[i],this.widgetFullName))&&n!==this&&!n.options.disabled&&(c.push([P.isFunction(n.options.items)?n.options.items.call(n.element[0],t,{item:this.currentItem}):P(n.options.items,n.element),n]),this.containers.push(n));for(e=c.length-1;0<=e;e--)for(o=c[e][1],i=0,h=(a=c[e][0]).length;i",i.document[0]).addClass(s||i.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper");return"tbody"===t?i._createTrPlaceholder(i.currentItem.find("tr").eq(0),P("",i.document[0]).appendTo(e)):"tr"===t?i._createTrPlaceholder(i.currentItem,e):"img"===t&&e.attr("src",i.currentItem.attr("src")),s||e.css("visibility","hidden"),e},update:function(t,e){(!s||n.forcePlaceholderSize)&&(e.height()||e.height(i.currentItem.innerHeight()-parseInt(i.currentItem.css("paddingTop")||0,10)-parseInt(i.currentItem.css("paddingBottom")||0,10)),e.width()||e.width(i.currentItem.innerWidth()-parseInt(i.currentItem.css("paddingLeft")||0,10)-parseInt(i.currentItem.css("paddingRight")||0,10)))}}),i.placeholder=P(n.placeholder.element.call(i.element,i.currentItem)),i.currentItem.after(i.placeholder),n.placeholder.update(i,i.placeholder)},_createTrPlaceholder:function(t,e){var i=this;t.children().each(function(){P(" ",i.document[0]).attr("colspan",P(this).attr("colspan")||1).appendTo(e)})},_contactContainers:function(t){var e,i,s,n,o,a,r,h,l,c,u=null,d=null;for(e=this.containers.length-1;0<=e;e--)if(!P.contains(this.currentItem[0],this.containers[e].element[0]))if(this._intersectsWith(this.containers[e].containerCache)){if(u&&P.contains(this.containers[e].element[0],u.element[0]))continue;u=this.containers[e],d=e}else this.containers[e].containerCache.over&&(this.containers[e]._trigger("out",t,this._uiHash(this)),this.containers[e].containerCache.over=0);if(u)if(1===this.containers.length)this.containers[d].containerCache.over||(this.containers[d]._trigger("over",t,this._uiHash(this)),this.containers[d].containerCache.over=1);else{for(s=1e4,n=null,o=(l=u.floating||this._isFloating(this.currentItem))?"left":"top",a=l?"width":"height",c=l?"clientX":"clientY",i=this.items.length-1;0<=i;i--)P.contains(this.containers[d].element[0],this.items[i].item[0])&&this.items[i].item[0]!==this.currentItem[0]&&(r=this.items[i].item.offset()[o],h=!1,t[c]-r>this.items[i][a]/2&&(h=!0),s>Math.abs(t[c]-r)&&(s=Math.abs(t[c]-r),n=this.items[i],this.direction=h?"up":"down"));if(!n&&!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[d])return void(this.currentContainer.containerCache.over||(this.containers[d]._trigger("over",t,this._uiHash()),this.currentContainer.containerCache.over=1));n?this._rearrange(t,n,null,!0):this._rearrange(t,null,this.containers[d].element,!0),this._trigger("change",t,this._uiHash()),this.containers[d]._trigger("change",t,this._uiHash(this)),this.currentContainer=this.containers[d],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[d]._trigger("over",t,this._uiHash(this)),this.containers[d].containerCache.over=1}},_createHelper:function(t){var e=this.options,i=P.isFunction(e.helper)?P(e.helper.apply(this.element[0],[t,this.currentItem])):"clone"===e.helper?this.currentItem.clone():this.currentItem;return i.parents("body").length||P("parent"!==e.appendTo?e.appendTo:this.currentItem[0].parentNode)[0].appendChild(i[0]),i[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),(!i[0].style.width||e.forceHelperSize)&&i.width(this.currentItem.width()),(!i[0].style.height||e.forceHelperSize)&&i.height(this.currentItem.height()),i},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),P.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),"left"in t&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var t=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==this.document[0]&&P.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===this.document[0].body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&P.ui.ie)&&(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"!==this.cssPosition)return{top:0,left:0};var t=this.currentItem.position();return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:t.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,e,i,s=this.options;"parent"===s.containment&&(s.containment=this.helper[0].parentNode),("document"===s.containment||"window"===s.containment)&&(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,"document"===s.containment?this.document.width():this.window.width()-this.helperProportions.width-this.margins.left,("document"===s.containment?this.document.width():this.window.height()||this.document[0].body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(s.containment)||(t=P(s.containment)[0],e=P(s.containment).offset(),i="hidden"!==P(t).css("overflow"),this.containment=[e.left+(parseInt(P(t).css("borderLeftWidth"),10)||0)+(parseInt(P(t).css("paddingLeft"),10)||0)-this.margins.left,e.top+(parseInt(P(t).css("borderTopWidth"),10)||0)+(parseInt(P(t).css("paddingTop"),10)||0)-this.margins.top,e.left+(i?Math.max(t.scrollWidth,t.offsetWidth):t.offsetWidth)-(parseInt(P(t).css("borderLeftWidth"),10)||0)-(parseInt(P(t).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,e.top+(i?Math.max(t.scrollHeight,t.offsetHeight):t.offsetHeight)-(parseInt(P(t).css("borderTopWidth"),10)||0)-(parseInt(P(t).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(t,e){e||(e=this.position);var i="absolute"===t?1:-1,s="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&P.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,n=/(html|body)/i.test(s[0].tagName);return{top:e.top+this.offset.relative.top*i+this.offset.parent.top*i-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():n?0:s.scrollTop())*i,left:e.left+this.offset.relative.left*i+this.offset.parent.left*i-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():n?0:s.scrollLeft())*i}},_generatePosition:function(t){var e,i,s=this.options,n=t.pageX,o=t.pageY,a="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&P.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,r=/(html|body)/i.test(a[0].tagName);return"relative"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(t.pageX-this.offset.click.leftthis.containment[2]&&(n=this.containment[2]+this.offset.click.left),t.pageY-this.offset.click.top>this.containment[3]&&(o=this.containment[3]+this.offset.click.top)),s.grid&&(e=this.originalPageY+Math.round((o-this.originalPageY)/s.grid[1])*s.grid[1],o=this.containment?e-this.offset.click.top>=this.containment[1]&&e-this.offset.click.top<=this.containment[3]?e:e-this.offset.click.top>=this.containment[1]?e-s.grid[1]:e+s.grid[1]:e,i=this.originalPageX+Math.round((n-this.originalPageX)/s.grid[0])*s.grid[0],n=this.containment?i-this.offset.click.left>=this.containment[0]&&i-this.offset.click.left<=this.containment[2]?i:i-this.offset.click.left>=this.containment[0]?i-s.grid[0]:i+s.grid[0]:i)),{top:o-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():r?0:a.scrollTop()),left:n-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():r?0:a.scrollLeft())}},_rearrange:function(t,e,i,s){i?i[0].appendChild(this.placeholder[0]):e.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?e.item[0]:e.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter;this._delay(function(){n===this.counter&&this.refreshPositions(!s)})},_clear:function(t,e){function i(e,i,s){return function(t){s._trigger(e,t,i._uiHash(i))}}this.reverting=!1;var s,n=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(s in this._storedCSS)("auto"===this._storedCSS[s]||"static"===this._storedCSS[s])&&(this._storedCSS[s]="");this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();for(this.fromOutside&&!e&&n.push(function(t){this._trigger("receive",t,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||e||n.push(function(t){this._trigger("update",t,this._uiHash())}),this!==this.currentContainer&&(e||(n.push(function(t){this._trigger("remove",t,this._uiHash())}),n.push(function(e){return function(t){e._trigger("receive",t,this._uiHash(this))}}.call(this,this.currentContainer)),n.push(function(e){return function(t){e._trigger("update",t,this._uiHash(this))}}.call(this,this.currentContainer)))),s=this.containers.length-1;0<=s;s--)e||n.push(i("deactivate",this,this.containers[s])),this.containers[s].containerCache.over&&(n.push(i("out",this,this.containers[s])),this.containers[s].containerCache.over=0);if(this.storedCursor&&(this.document.find("body").css("cursor",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,e||this._trigger("beforeStop",t,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.cancelHelperRemoval||(this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null),!e){for(s=0;n.length>s;s++)n[s].call(this,t);this._trigger("stop",t,this._uiHash())}return this.fromOutside=!1,!this.cancelHelperRemoval},_trigger:function(){!1===P.Widget.prototype._trigger.apply(this,arguments)&&this.cancel()},_uiHash:function(t){var e=t||this;return{helper:e.helper,placeholder:e.placeholder||P([]),position:e.position,originalPosition:e.originalPosition,offset:e.positionAbs,item:e.currentItem,sender:t?t.element:null}}}),P.widget("ui.accordion",{version:"1.11.4",options:{active:0,animate:{},collapsible:!1,event:"click",header:"> li > :first-child,> :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var t=this.options;this.prevShow=this.prevHide=P(),this.element.addClass("ui-accordion ui-widget ui-helper-reset").attr("role","tablist"),t.collapsible||!1!==t.active&&null!=t.active||(t.active=0),this._processPanels(),t.active<0&&(t.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():P()}},_createIcons:function(){var t=this.options.icons;t&&(P("").addClass("ui-accordion-header-icon ui-icon "+t.header).prependTo(this.headers),this.active.children(".ui-accordion-header-icon").removeClass(t.header).addClass(t.activeHeader),this.headers.addClass("ui-accordion-icons"))},_destroyIcons:function(){this.headers.removeClass("ui-accordion-icons").children(".ui-accordion-header-icon").remove()},_destroy:function(){var t;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"),this.headers.removeClass("ui-accordion-header ui-accordion-header-active ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("aria-controls").removeAttr("tabIndex").removeUniqueId(),this._destroyIcons(),t=this.headers.next().removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled").css("display","").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&&t.css("height","")},_setOption:function(t,e){return"active"===t?void this._activate(e):("event"===t&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(e)),this._super(t,e),"collapsible"!==t||e||!1!==this.options.active||this._activate(0),"icons"===t&&(this._destroyIcons(),e&&this._createIcons()),void("disabled"===t&&(this.element.toggleClass("ui-state-disabled",!!e).attr("aria-disabled",e),this.headers.add(this.headers.next()).toggleClass("ui-state-disabled",!!e))))},_keydown:function(t){if(!t.altKey&&!t.ctrlKey){var e=P.ui.keyCode,i=this.headers.length,s=this.headers.index(t.target),n=!1;switch(t.keyCode){case e.RIGHT:case e.DOWN:n=this.headers[(s+1)%i];break;case e.LEFT:case e.UP:n=this.headers[(s-1+i)%i];break;case e.SPACE:case e.ENTER:this._eventHandler(t);break;case e.HOME:n=this.headers[0];break;case e.END:n=this.headers[i-1]}n&&(P(t.target).attr("tabIndex",-1),P(n).attr("tabIndex",0),n.focus(),t.preventDefault())}},_panelKeyDown:function(t){t.keyCode===P.ui.keyCode.UP&&t.ctrlKey&&P(t.currentTarget).prev().focus()},refresh:function(){var t=this.options;this._processPanels(),!1===t.active&&!0===t.collapsible||!this.headers.length?(t.active=!1,this.active=P()):!1===t.active?this._activate(0):this.active.length&&!P.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(t.active=!1,this.active=P()):this._activate(Math.max(0,t.active-1)):t.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var t=this.headers,e=this.panels;this.headers=this.element.find(this.options.header).addClass("ui-accordion-header ui-state-default ui-corner-all"),this.panels=this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom").filter(":not(.ui-accordion-content-active)").hide(),e&&(this._off(t.not(this.headers)),this._off(e.not(this.panels)))},_refresh:function(){var i,t=this.options,e=t.heightStyle,s=this.element.parent();this.active=this._findActive(t.active).addClass("ui-accordion-header-active ui-state-active ui-corner-top").removeClass("ui-corner-all"),this.active.next().addClass("ui-accordion-content-active").show(),this.headers.attr("role","tab").each(function(){var t=P(this),e=t.uniqueId().attr("id"),i=t.next(),s=i.uniqueId().attr("id");t.attr("aria-controls",s),i.attr("aria-labelledby",e)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(t.event),"fill"===e?(i=s.height(),this.element.siblings(":visible").each(function(){var t=P(this),e=t.css("position");"absolute"!==e&&"fixed"!==e&&(i-=t.outerHeight(!0))}),this.headers.each(function(){i-=P(this).outerHeight(!0)}),this.headers.next().each(function(){P(this).height(Math.max(0,i-P(this).innerHeight()+P(this).height()))}).css("overflow","auto")):"auto"===e&&(i=0,this.headers.next().each(function(){i=Math.max(i,P(this).css("height","").height())}).height(i))},_activate:function(t){var e=this._findActive(t)[0];e!==this.active[0]&&(e=e||this.active[0],this._eventHandler({target:e,currentTarget:e,preventDefault:P.noop}))},_findActive:function(t){return"number"==typeof t?this.headers.eq(t):P()},_setupEvents:function(t){var i={keydown:"_keydown"};t&&P.each(t.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(t){var e=this.options,i=this.active,s=P(t.currentTarget),n=s[0]===i[0],o=n&&e.collapsible,a=o?P():s.next(),r=i.next(),h={oldHeader:i,oldPanel:r,newHeader:o?P():s,newPanel:a};t.preventDefault(),n&&!e.collapsible||!1===this._trigger("beforeActivate",t,h)||(e.active=!o&&this.headers.index(s),this.active=n?P():s,this._toggle(h),i.removeClass("ui-accordion-header-active ui-state-active"),e.icons&&i.children(".ui-accordion-header-icon").removeClass(e.icons.activeHeader).addClass(e.icons.header),n||(s.removeClass("ui-corner-all").addClass("ui-accordion-header-active ui-state-active ui-corner-top"),e.icons&&s.children(".ui-accordion-header-icon").removeClass(e.icons.header).addClass(e.icons.activeHeader),s.next().addClass("ui-accordion-content-active")))},_toggle:function(t){var e=t.newPanel,i=this.prevShow.length?this.prevShow:t.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=e,this.prevHide=i,this.options.animate?this._animate(e,i,t):(i.hide(),e.show(),this._toggleComplete(t)),i.attr({"aria-hidden":"true"}),i.prev().attr({"aria-selected":"false","aria-expanded":"false"}),e.length&&i.length?i.prev().attr({tabIndex:-1,"aria-expanded":"false"}):e.length&&this.headers.filter(function(){return 0===parseInt(P(this).attr("tabIndex"),10)}).attr("tabIndex",-1),e.attr("aria-hidden","false").prev().attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_animate:function(t,i,e){var s,n,o,a=this,r=0,h=t.css("box-sizing"),l=t.length&&(!i.length||t.index()",delay:300,options:{icons:{submenu:"ui-icon-carat-1-e"},items:"> *",menus:"ul",position:{my:"left-1 top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().addClass("ui-menu ui-widget ui-widget-content").toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length).attr({role:this.options.role,tabIndex:0}),this.options.disabled&&this.element.addClass("ui-state-disabled").attr("aria-disabled","true"),this._on({"mousedown .ui-menu-item":function(t){t.preventDefault()},"click .ui-menu-item":function(t){var e=P(t.target);!this.mouseHandled&&e.not(".ui-state-disabled").length&&(this.select(t),t.isPropagationStopped()||(this.mouseHandled=!0),e.has(".ui-menu").length?this.expand(t):!this.element.is(":focus")&&P(this.document[0].activeElement).closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(t){if(!this.previousFilter){var e=P(t.currentTarget);e.siblings(".ui-state-active").removeClass("ui-state-active"),this.focus(t,e)}},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this.element.find(this.options.items).eq(0);e||this.focus(t,i)},blur:function(t){this._delay(function(){P.contains(this.element[0],this.document[0].activeElement)||this.collapseAll(t)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(t){this._closeOnDocumentClick(t)&&this.collapseAll(t),this.mouseHandled=!1}})},_destroy:function(){this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeClass("ui-menu ui-widget ui-widget-content ui-menu-icons ui-front").removeAttr("role").removeAttr("tabIndex").removeAttr("aria-labelledby").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-disabled").removeUniqueId().show(),this.element.find(".ui-menu-item").removeClass("ui-menu-item").removeAttr("role").removeAttr("aria-disabled").removeUniqueId().removeClass("ui-state-hover").removeAttr("tabIndex").removeAttr("role").removeAttr("aria-haspopup").children().each(function(){var t=P(this);t.data("ui-menu-submenu-carat")&&t.remove()}),this.element.find(".ui-menu-divider").removeClass("ui-menu-divider ui-widget-content")},_keydown:function(t){var e,i,s,n,o=!0;switch(t.keyCode){case P.ui.keyCode.PAGE_UP:this.previousPage(t);break;case P.ui.keyCode.PAGE_DOWN:this.nextPage(t);break;case P.ui.keyCode.HOME:this._move("first","first",t);break;case P.ui.keyCode.END:this._move("last","last",t);break;case P.ui.keyCode.UP:this.previous(t);break;case P.ui.keyCode.DOWN:this.next(t);break;case P.ui.keyCode.LEFT:this.collapse(t);break;case P.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(t);break;case P.ui.keyCode.ENTER:case P.ui.keyCode.SPACE:this._activate(t);break;case P.ui.keyCode.ESCAPE:this.collapse(t);break;default:o=!1,i=this.previousFilter||"",s=String.fromCharCode(t.keyCode),n=!1,clearTimeout(this.filterTimer),s===i?n=!0:s=i+s,e=this._filterMenuItems(s),(e=n&&-1!==e.index(this.active.next())?this.active.nextAll(".ui-menu-item"):e).length||(s=String.fromCharCode(t.keyCode),e=this._filterMenuItems(s)),e.length?(this.focus(t,e),this.previousFilter=s,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}o&&t.preventDefault()},_activate:function(t){this.active.is(".ui-state-disabled")||(this.active.is("[aria-haspopup='true']")?this.expand(t):this.select(t))},refresh:function(){var t,e=this,s=this.options.icons.submenu,i=this.element.find(this.options.menus);this.element.toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length),i.filter(":not(.ui-menu)").addClass("ui-menu ui-widget ui-widget-content ui-front").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var t=P(this),e=t.parent(),i=P("").addClass("ui-menu-icon ui-icon "+s).data("ui-menu-submenu-carat",!0);e.attr("aria-haspopup","true").prepend(i),t.attr("aria-labelledby",e.attr("id"))}),(t=i.add(this.element).find(this.options.items)).not(".ui-menu-item").each(function(){var t=P(this);e._isDivider(t)&&t.addClass("ui-widget-content ui-menu-divider")}),t.not(".ui-menu-item, .ui-menu-divider").addClass("ui-menu-item").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),t.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!P.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){"icons"===t&&this.element.find(".ui-menu-icon").removeClass(this.options.icons.submenu).addClass(e.submenu),"disabled"===t&&this.element.toggleClass("ui-state-disabled",!!e).attr("aria-disabled",e),this._super(t,e)},focus:function(t,e){var i,s;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),s=this.active.addClass("ui-state-focus").removeClass("ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),this.active.parent().closest(".ui-menu-item").addClass("ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),(i=e.children(".ui-menu")).length&&t&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(t){var e,i,s,n,o,a;this._hasScroll()&&(e=parseFloat(P.css(this.activeMenu[0],"borderTopWidth"))||0,i=parseFloat(P.css(this.activeMenu[0],"paddingTop"))||0,s=t.offset().top-this.activeMenu.offset().top-e-i,n=this.activeMenu.scrollTop(),o=this.activeMenu.height(),a=t.outerHeight(),s<0?this.activeMenu.scrollTop(n+s):o",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,_create:function(){var i,s,n,t=this.element[0].nodeName.toLowerCase(),e="textarea"===t,o="input"===t;this.isMultiLine=!!e||!o&&this.element.prop("isContentEditable"),this.valueMethod=this.element[e||o?"val":"text"],this.isNewMenu=!0,this.element.addClass("ui-autocomplete-input").attr("autocomplete","off"),this._on(this.element,{keydown:function(t){if(this.element.prop("readOnly"))s=n=i=!0;else{s=n=i=!1;var e=P.ui.keyCode;switch(t.keyCode){case e.PAGE_UP:i=!0,this._move("previousPage",t);break;case e.PAGE_DOWN:i=!0,this._move("nextPage",t);break;case e.UP:i=!0,this._keyEvent("previous",t);break;case e.DOWN:i=!0,this._keyEvent("next",t);break;case e.ENTER:this.menu.active&&(i=!0,t.preventDefault(),this.menu.select(t));break;case e.TAB:this.menu.active&&this.menu.select(t);break;case e.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(t),t.preventDefault());break;default:s=!0,this._searchTimeout(t)}}},keypress:function(t){if(i)return i=!1,void((!this.isMultiLine||this.menu.element.is(":visible"))&&t.preventDefault());if(!s){var e=P.ui.keyCode;switch(t.keyCode){case e.PAGE_UP:this._move("previousPage",t);break;case e.PAGE_DOWN:this._move("nextPage",t);break;case e.UP:this._keyEvent("previous",t);break;case e.DOWN:this._keyEvent("next",t)}}},input:function(t){return n?(n=!1,void t.preventDefault()):void this._searchTimeout(t)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){return this.cancelBlur?void delete this.cancelBlur:(clearTimeout(this.searching),this.close(t),void this._change(t))}}),this._initSource(),this.menu=P("
    ").addClass("ui-autocomplete ui-front").appendTo(this._appendTo()).menu({role:null}).hide().menu("instance"),this._on(this.menu.element,{mousedown:function(t){t.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur});var i=this.menu.element[0];P(t.target).closest(".ui-menu-item").length||this._delay(function(){var e=this;this.document.one("mousedown",function(t){t.target===e.element[0]||t.target===i||P.contains(i,t.target)||e.close()})})},menufocus:function(t,e){var i,s;return this.isNewMenu&&(this.isNewMenu=!1,t.originalEvent&&/^mouse/.test(t.originalEvent.type))?(this.menu.blur(),void this.document.one("mousemove",function(){P(t.target).trigger(t.originalEvent)})):(s=e.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",t,{item:s})&&t.originalEvent&&/^key/.test(t.originalEvent.type)&&this._value(s.value),void((i=e.item.attr("aria-label")||s.value)&&P.trim(i).length&&(this.liveRegion.children().hide(),P("
    ").text(i).appendTo(this.liveRegion))))},menuselect:function(t,e){var i=e.item.data("ui-autocomplete-item"),s=this.previous;this.element[0]!==this.document[0].activeElement&&(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s,this.selectedItem=i})),!1!==this._trigger("select",t,{item:i})&&this._value(i.value),this.term=this._value(),this.close(t),this.selectedItem=i}}),this.liveRegion=P("",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).addClass("ui-helper-hidden-accessible").appendTo(this.document[0].body),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(t,e){this._super(t,e),"source"===t&&this._initSource(),"appendTo"===t&&this.menu.element.appendTo(this._appendTo()),"disabled"===t&&e&&this.xhr&&this.xhr.abort()},_appendTo:function(){var t=this.options.appendTo;return t&&(t=t.jquery||t.nodeType?P(t):this.document.find(t).eq(0)),t&&t[0]||(t=this.element.closest(".ui-front")),t.length||(t=this.document[0].body),t},_initSource:function(){var i,s,n=this;P.isArray(this.options.source)?(i=this.options.source,this.source=function(t,e){e(P.ui.autocomplete.filter(i,t.term))}):"string"==typeof this.options.source?(s=this.options.source,this.source=function(t,e){n.xhr&&n.xhr.abort(),n.xhr=P.ajax({url:s,data:t,dataType:"json",success:function(t){e(t)},error:function(){e([])}})}):this.source=this.options.source},_searchTimeout:function(s){clearTimeout(this.searching),this.searching=this._delay(function(){var t=this.term===this._value(),e=this.menu.element.is(":visible"),i=s.altKey||s.ctrlKey||s.metaKey||s.shiftKey;(!t||t&&!e&&!i)&&(this.selectedItem=null,this.search(null,s))},this.options.delay)},search:function(t,e){return t=null!=t?t:this._value(),this.term=this._value(),t.length").text(e.label).appendTo(t)},_move:function(t,e){return this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(t)||this.menu.isLastItem()&&/^next/.test(t)?(this.isMultiLine||this._value(this.term),void this.menu.blur()):void this.menu[t](e):void this.search(null,e)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(t,e){(!this.isMultiLine||this.menu.element.is(":visible"))&&(this._move(t,e),e.preventDefault())}}),P.extend(P.ui.autocomplete,{escapeRegex:function(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(t,e){var i=RegExp(P.ui.autocomplete.escapeRegex(e),"i");return P.grep(t,function(t){return i.test(t.label||t.value||t)})}}),P.widget("ui.autocomplete",P.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(t){return t+(1").text(e).appendTo(this.liveRegion))}}),P.ui.autocomplete;var m,g,v,_="ui-button ui-widget ui-state-default ui-corner-all",b="ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",y=function(){var t=P(this);setTimeout(function(){t.find(":ui-button").button("refresh")},1)},w=function(t){var e=t.name,i=t.form,s=P([]);return e&&(e=e.replace(/'/g,"\\'"),s=i?P(i).find("[name='"+e+"'][type=radio]"):P("[name='"+e+"'][type=radio]",t.ownerDocument).filter(function(){return!this.form})),s};P.widget("ui.button",{version:"1.11.4",defaultElement:"").addClass(this._triggerClass).html(n?P("").attr({src:n,alt:s,title:s}):s)),t[a?"before":"after"](e.trigger),e.trigger.click(function(){return P.datepicker._datepickerShowing&&P.datepicker._lastInput===t[0]?P.datepicker._hideDatepicker():(P.datepicker._datepickerShowing&&P.datepicker._lastInput!==t[0]&&P.datepicker._hideDatepicker(),P.datepicker._showDatepicker(t[0])),!1}))},_autoSize:function(t){if(this._get(t,"autoSize")&&!t.inline){var e,i,s,n,o=new Date(2009,11,20),a=this._get(t,"dateFormat");a.match(/[DM]/)&&(e=function(t){for(n=s=i=0;t.length>n;n++)t[n].length>i&&(i=t[n].length,s=n);return s},o.setMonth(e(this._get(t,a.match(/MM/)?"monthNames":"monthNamesShort"))),o.setDate(e(this._get(t,a.match(/DD/)?"dayNames":"dayNamesShort"))+20-o.getDay())),t.input.attr("size",this._formatDate(t,o).length)}},_inlineDatepicker:function(t,e){var i=P(t);i.hasClass(this.markerClassName)||(i.addClass(this.markerClassName).append(e.dpDiv),P.data(t,"datepicker",e),this._setDate(e,this._getDefaultDate(e),!0),this._updateDatepicker(e),this._updateAlternate(e),e.settings.disabled&&this._disableDatepicker(t),e.dpDiv.css("display","block"))},_dialogDatepicker:function(t,e,i,s,n){var o,a,r,h,l,c=this._dialogInst;return c||(this.uuid+=1,o="dp"+this.uuid,this._dialogInput=P(""),this._dialogInput.keydown(this._doKeyDown),P("body").append(this._dialogInput),(c=this._dialogInst=this._newInst(this._dialogInput,!1)).settings={},P.data(this._dialogInput[0],"datepicker",c)),u(c.settings,s||{}),e=e&&e.constructor===Date?this._formatDate(c,e):e,this._dialogInput.val(e),this._pos=n?n.length?n:[n.pageX,n.pageY]:null,this._pos||(a=document.documentElement.clientWidth,r=document.documentElement.clientHeight,h=document.documentElement.scrollLeft||document.body.scrollLeft,l=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[a/2-100+h,r/2-150+l]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),c.settings.onSelect=i,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),P.blockUI&&P.blockUI(this.dpDiv),P.data(this._dialogInput[0],"datepicker",c),this},_destroyDatepicker:function(t){var e,i=P(t),s=P.data(t,"datepicker");i.hasClass(this.markerClassName)&&(e=t.nodeName.toLowerCase(),P.removeData(t,"datepicker"),"input"===e?(s.append.remove(),s.trigger.remove(),i.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)):("div"===e||"span"===e)&&i.removeClass(this.markerClassName).empty(),g===s&&(g=null))},_enableDatepicker:function(e){var t,i,s=P(e),n=P.data(e,"datepicker");s.hasClass(this.markerClassName)&&("input"===(t=e.nodeName.toLowerCase())?(e.disabled=!1,n.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""})):("div"===t||"span"===t)&&((i=s.children("."+this._inlineClass)).children().removeClass("ui-state-disabled"),i.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=P.map(this._disabledInputs,function(t){return t===e?null:t}))},_disableDatepicker:function(e){var t,i,s=P(e),n=P.data(e,"datepicker");s.hasClass(this.markerClassName)&&("input"===(t=e.nodeName.toLowerCase())?(e.disabled=!0,n.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"})):("div"===t||"span"===t)&&((i=s.children("."+this._inlineClass)).children().addClass("ui-state-disabled"),i.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=P.map(this._disabledInputs,function(t){return t===e?null:t}),this._disabledInputs[this._disabledInputs.length]=e)},_isDisabledDatepicker:function(t){if(!t)return!1;for(var e=0;this._disabledInputs.length>e;e++)if(this._disabledInputs[e]===t)return!0;return!1},_getInst:function(t){try{return P.data(t,"datepicker")}catch(t){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(t,e,i){var s,n,o,a,r=this._getInst(t);return 2===arguments.length&&"string"==typeof e?"defaults"===e?P.extend({},P.datepicker._defaults):r?"all"===e?P.extend({},r.settings):this._get(r,e):null:(s=e||{},"string"==typeof e&&((s={})[e]=i),void(r&&(this._curInst===r&&this._hideDatepicker(),n=this._getDateDatepicker(t,!0),o=this._getMinMaxDate(r,"min"),a=this._getMinMaxDate(r,"max"),u(r.settings,s),null!==o&&void 0!==s.dateFormat&&void 0===s.minDate&&(r.settings.minDate=this._formatDate(r,o)),null!==a&&void 0!==s.dateFormat&&void 0===s.maxDate&&(r.settings.maxDate=this._formatDate(r,a)),"disabled"in s&&(s.disabled?this._disableDatepicker(t):this._enableDatepicker(t)),this._attachments(P(t),r),this._autoSize(r),this._setDate(r,n),this._updateAlternate(r),this._updateDatepicker(r))))},_changeDatepicker:function(t,e,i){this._optionDatepicker(t,e,i)},_refreshDatepicker:function(t){var e=this._getInst(t);e&&this._updateDatepicker(e)},_setDateDatepicker:function(t,e){var i=this._getInst(t);i&&(this._setDate(i,e),this._updateDatepicker(i),this._updateAlternate(i))},_getDateDatepicker:function(t,e){var i=this._getInst(t);return i&&!i.inline&&this._setDateFromField(i,e),i?this._getDate(i):null},_doKeyDown:function(t){var e,i,s,n=P.datepicker._getInst(t.target),o=!0,a=n.dpDiv.is(".ui-datepicker-rtl");if(n._keyEvent=!0,P.datepicker._datepickerShowing)switch(t.keyCode){case 9:P.datepicker._hideDatepicker(),o=!1;break;case 13:return(s=P("td."+P.datepicker._dayOverClass+":not(."+P.datepicker._currentClass+")",n.dpDiv))[0]&&P.datepicker._selectDay(t.target,n.selectedMonth,n.selectedYear,s[0]),(e=P.datepicker._get(n,"onSelect"))?(i=P.datepicker._formatDate(n),e.apply(n.input?n.input[0]:null,[i,n])):P.datepicker._hideDatepicker(),!1;case 27:P.datepicker._hideDatepicker();break;case 33:P.datepicker._adjustDate(t.target,t.ctrlKey?-P.datepicker._get(n,"stepBigMonths"):-P.datepicker._get(n,"stepMonths"),"M");break;case 34:P.datepicker._adjustDate(t.target,t.ctrlKey?+P.datepicker._get(n,"stepBigMonths"):+P.datepicker._get(n,"stepMonths"),"M");break;case 35:(t.ctrlKey||t.metaKey)&&P.datepicker._clearDate(t.target),o=t.ctrlKey||t.metaKey;break;case 36:(t.ctrlKey||t.metaKey)&&P.datepicker._gotoToday(t.target),o=t.ctrlKey||t.metaKey;break;case 37:(t.ctrlKey||t.metaKey)&&P.datepicker._adjustDate(t.target,a?1:-1,"D"),o=t.ctrlKey||t.metaKey,t.originalEvent.altKey&&P.datepicker._adjustDate(t.target,t.ctrlKey?-P.datepicker._get(n,"stepBigMonths"):-P.datepicker._get(n,"stepMonths"),"M");break;case 38:(t.ctrlKey||t.metaKey)&&P.datepicker._adjustDate(t.target,-7,"D"),o=t.ctrlKey||t.metaKey;break;case 39:(t.ctrlKey||t.metaKey)&&P.datepicker._adjustDate(t.target,a?-1:1,"D"),o=t.ctrlKey||t.metaKey,t.originalEvent.altKey&&P.datepicker._adjustDate(t.target,t.ctrlKey?+P.datepicker._get(n,"stepBigMonths"):+P.datepicker._get(n,"stepMonths"),"M");break;case 40:(t.ctrlKey||t.metaKey)&&P.datepicker._adjustDate(t.target,7,"D"),o=t.ctrlKey||t.metaKey;break;default:o=!1}else 36===t.keyCode&&t.ctrlKey?P.datepicker._showDatepicker(this):o=!1;o&&(t.preventDefault(),t.stopPropagation())},_doKeyPress:function(t){var e,i,s=P.datepicker._getInst(t.target);return P.datepicker._get(s,"constrainInput")?(e=P.datepicker._possibleChars(P.datepicker._get(s,"dateFormat")),i=String.fromCharCode(null==t.charCode?t.keyCode:t.charCode),t.ctrlKey||t.metaKey||i<" "||!e||-1r&&sh&&ns+1&&i.charAt(s+1)===t;return e&&s++,e},y=function(t){var e=b(t),i="@"===t?14:"!"===t?20:"y"===t&&e?4:"o"===t?3:2,s=RegExp("^\\d{"+("y"===t?i:1)+","+i+"}"),n=o.substring(r).match(s);if(!n)throw"Missing number at position "+r;return r+=n[0].length,parseInt(n[0],10)},w=function(t,e,i){var s=-1,n=P.map(b(t)?i:e,function(t,e){return[[e,t]]}).sort(function(t,e){return-(t[1].length-e[1].length)});if(P.each(n,function(t,e){var i=e[1];return o.substr(r,i.length).toLowerCase()===i.toLowerCase()?(s=e[0],r+=i.length,!1):void 0}),-1!==s)return s+1;throw"Unknown name at position "+r},x=function(){if(o.charAt(r)!==i.charAt(s))throw"Unexpected literal at position "+r;r++};for(s=0;i.length>s;s++)if(_)"'"!==i.charAt(s)||b("'")?x():_=!1;else switch(i.charAt(s)){case"d":g=y("d");break;case"D":w("D",c,u);break;case"o":v=y("o");break;case"m":m=y("m");break;case"M":m=w("M",d,p);break;case"y":f=y("y");break;case"@":f=(a=new Date(y("@"))).getFullYear(),m=a.getMonth()+1,g=a.getDate();break;case"!":f=(a=new Date((y("!")-this._ticksTo1970)/1e4)).getFullYear(),m=a.getMonth()+1,g=a.getDate();break;case"'":b("'")?x():_=!0;break;default:x()}if(o.length>r&&(n=o.substr(r),!/^\s+/.test(n)))throw"Extra/unparsed characters found in date: "+n;if(-1===f?f=(new Date).getFullYear():f<100&&(f+=(new Date).getFullYear()-(new Date).getFullYear()%100+(f<=l?0:-100)),-1s+1&&i.charAt(s+1)===t;return e&&s++,e},l=function(t,e,i){var s=""+e;if(h(t))for(;i>s.length;)s="0"+s;return s},c=function(t,e,i,s){return h(t)?s[e]:i[e]},u="",d=!1;if(t)for(s=0;i.length>s;s++)if(d)"'"!==i.charAt(s)||h("'")?u+=i.charAt(s):d=!1;else switch(i.charAt(s)){case"d":u+=l("d",t.getDate(),2);break;case"D":u+=c("D",t.getDay(),n,o);break;case"o":u+=l("o",Math.round((new Date(t.getFullYear(),t.getMonth(),t.getDate()).getTime()-new Date(t.getFullYear(),0,0).getTime())/864e5),3);break;case"m":u+=l("m",t.getMonth()+1,2);break;case"M":u+=c("M",t.getMonth(),a,r);break;case"y":u+=h("y")?t.getFullYear():(t.getYear()%100<10?"0":"")+t.getYear()%100;break;case"@":u+=t.getTime();break;case"!":u+=1e4*t.getTime()+this._ticksTo1970;break;case"'":h("'")?u+="'":d=!0;break;default:u+=i.charAt(s)}return u},_possibleChars:function(i){var s,t="",e=!1,n=function(t){var e=i.length>s+1&&i.charAt(s+1)===t;return e&&s++,e};for(s=0;i.length>s;s++)if(e)"'"!==i.charAt(s)||n("'")?t+=i.charAt(s):e=!1;else switch(i.charAt(s)){case"d":case"m":case"y":case"@":t+="0123456789";break;case"D":case"M":return null;case"'":n("'")?t+="'":e=!0;break;default:t+=i.charAt(s)}return t},_get:function(t,e){return void 0!==t.settings[e]?t.settings[e]:this._defaults[e]},_setDateFromField:function(t,e){if(t.input.val()!==t.lastVal){var i=this._get(t,"dateFormat"),s=t.lastVal=t.input?t.input.val():null,n=this._getDefaultDate(t),o=n,a=this._getFormatConfig(t);try{o=this.parseDate(i,s,a)||n}catch(t){s=e?"":s}t.selectedDay=o.getDate(),t.drawMonth=t.selectedMonth=o.getMonth(),t.drawYear=t.selectedYear=o.getFullYear(),t.currentDay=s?o.getDate():0,t.currentMonth=s?o.getMonth():0,t.currentYear=s?o.getFullYear():0,this._adjustInstDate(t)}},_getDefaultDate:function(t){return this._restrictMinMax(t,this._determineDate(t,this._get(t,"defaultDate"),new Date))},_determineDate:function(r,t,e){var i,s,n=null==t||""===t?e:"string"==typeof t?function(t){try{return P.datepicker.parseDate(P.datepicker._get(r,"dateFormat"),t,P.datepicker._getFormatConfig(r))}catch(t){}for(var e=(t.toLowerCase().match(/^c/)?P.datepicker._getDate(r):null)||new Date,i=e.getFullYear(),s=e.getMonth(),n=e.getDate(),o=/([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,a=o.exec(t);a;){switch(a[2]||"d"){case"d":case"D":n+=parseInt(a[1],10);break;case"w":case"W":n+=7*parseInt(a[1],10);break;case"m":case"M":s+=parseInt(a[1],10),n=Math.min(n,P.datepicker._getDaysInMonth(i,s));break;case"y":case"Y":i+=parseInt(a[1],10),n=Math.min(n,P.datepicker._getDaysInMonth(i,s))}a=o.exec(t)}return new Date(i,s,n)}(t):"number"==typeof t?isNaN(t)?e:(i=t,(s=new Date).setDate(s.getDate()+i),s):new Date(t.getTime());return(n=n&&"Invalid Date"==""+n?e:n)&&(n.setHours(0),n.setMinutes(0),n.setSeconds(0),n.setMilliseconds(0)),this._daylightSavingAdjust(n)},_daylightSavingAdjust:function(t){return t?(t.setHours(12e;)--Z<0&&(Z=11,tt--);for(t.drawMonth=Z,t.drawYear=tt,i=this._get(t,"prevText"),i=K?this.formatDate(i,this._daylightSavingAdjust(new Date(tt,Z-X,1)),this._getFormatConfig(t)):i,s=this._canAdjustMonth(t,-1,tt,Z)?""+i+"":q?"":""+i+"",n=this._get(t,"nextText"),n=K?this.formatDate(n,this._daylightSavingAdjust(new Date(tt,Z+X,1)),this._getFormatConfig(t)):n,o=this._canAdjustMonth(t,1,tt,Z)?""+n+"":q?"":""+n+"",a=this._get(t,"currentText"),r=this._get(t,"gotoCurrent")&&t.currentDay?G:Y,a=K?this.formatDate(a,r,this._getFormatConfig(t)):a,h=t.inline?"":"",l=j?"
    "+(B?h:"")+(this._isInRange(t,r)?"":"")+(B?"":h)+"
    ":"",c=parseInt(this._get(t,"firstDay"),10),c=isNaN(c)?0:c,u=this._get(t,"showWeek"),d=this._get(t,"dayNames"),p=this._get(t,"dayNamesMin"),f=this._get(t,"monthNames"),m=this._get(t,"monthNamesShort"),g=this._get(t,"beforeShowDay"),v=this._get(t,"showOtherMonths"),_=this._get(t,"selectOtherMonths"),b=this._getDefaultDate(t),y="",x=0;U[0]>x;x++){for(k="",this.maxRows=4,C=0;U[1]>C;C++){if(D=this._daylightSavingAdjust(new Date(tt,Z,t.selectedDay)),I=" ui-corner-all",T="",$){if(T+="
    "}for(T+="
    "+(/all|left/.test(I)&&0===x?B?o:s:"")+(/all|right/.test(I)&&0===x?B?s:o:"")+this._generateMonthYearHeader(t,Z,tt,Q,J,0",P=u?"":"",w=0;w<7;w++)P+="";for(T+=P+"",S=this._getDaysInMonth(tt,Z),tt===t.selectedYear&&Z===t.selectedMonth&&(t.selectedDay=Math.min(t.selectedDay,S)),z=(this._getFirstDayOfMonth(tt,Z)-c+7)%7,H=Math.ceil((z+S)/7),A=$&&this.maxRows>H?this.maxRows:H,this.maxRows=A,N=this._daylightSavingAdjust(new Date(tt,Z,1-z)),E=0;E",W=u?"":"",w=0;w<7;w++)O=g?g.apply(t.input?t.input[0]:null,[N]):[!0,""],R=(F=N.getMonth()!==Z)&&!_||!O[0]||Q&&N"+(F&&!v?" ":R?""+N.getDate()+"":""+N.getDate()+"")+"",N.setDate(N.getDate()+1),N=this._daylightSavingAdjust(N);T+=W+""}11<++Z&&(Z=0,tt++),k+=T+="
    "+this._get(t,"weekHeader")+""+p[M]+"
    "+this._get(t,"calculateWeek")(N)+"
    "+($?"
    "+(0
    ":""):"")}y+=k}return y+=l,t._keyEvent=!1,y},_generateMonthYearHeader:function(t,e,i,s,n,o,a,r){var h,l,c,u,d,p,f,m,g=this._get(t,"changeMonth"),v=this._get(t,"changeYear"),_=this._get(t,"showMonthAfterYear"),b="
    ",y="";if(o||!g)y+=""+a[e]+"";else{for(h=s&&s.getFullYear()===i,l=n&&n.getFullYear()===i,y+=""}if(_||(b+=y+(!o&&g&&v?"":" ")),!t.yearshtml)if(t.yearshtml="",o||!v)b+=""+i+"";else{for(u=this._get(t,"yearRange").split(":"),d=(new Date).getFullYear(),f=(p=function(t){var e=t.match(/c[+\-].*/)?i+parseInt(t.substring(1),10):t.match(/[+\-].*/)?d+parseInt(t,10):parseInt(t,10);return isNaN(e)?d:e})(u[0]),m=Math.max(f,p(u[1]||"")),f=s?Math.max(f,s.getFullYear()):f,m=n?Math.min(m,n.getFullYear()):m,t.yearshtml+="",b+=t.yearshtml,t.yearshtml=null}return b+=this._get(t,"yearSuffix"),_&&(b+=(!o&&g&&v?"":" ")+y),b+"
    "},_adjustInstDate:function(t,e,i){var s=t.drawYear+("Y"===i?e:0),n=t.drawMonth+("M"===i?e:0),o=Math.min(t.selectedDay,this._getDaysInMonth(s,n))+("D"===i?e:0),a=this._restrictMinMax(t,this._daylightSavingAdjust(new Date(s,n,o)));t.selectedDay=a.getDate(),t.drawMonth=t.selectedMonth=a.getMonth(),t.drawYear=t.selectedYear=a.getFullYear(),("M"===i||"Y"===i)&&this._notifyChange(t)},_restrictMinMax:function(t,e){var i=this._getMinMaxDate(t,"min"),s=this._getMinMaxDate(t,"max"),n=i&&e=n.getTime())&&(!o||e.getTime()<=o.getTime())&&(!a||e.getFullYear()>=a)&&(!r||r>=e.getFullYear())},_getFormatConfig:function(t){var e=this._get(t,"shortYearCutoff");return{shortYearCutoff:e="string"!=typeof e?e:(new Date).getFullYear()%100+parseInt(e,10),dayNamesShort:this._get(t,"dayNamesShort"),dayNames:this._get(t,"dayNames"),monthNamesShort:this._get(t,"monthNamesShort"),monthNames:this._get(t,"monthNames")}},_formatDate:function(t,e,i,s){e||(t.currentDay=t.selectedDay,t.currentMonth=t.selectedMonth,t.currentYear=t.selectedYear);var n=e?"object"==typeof e?e:this._daylightSavingAdjust(new Date(s,i,e)):this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return this.formatDate(this._get(t,"dateFormat"),n,this._getFormatConfig(t))}}),P.fn.datepicker=function(t){if(!this.length)return this;P.datepicker.initialized||(P(document).mousedown(P.datepicker._checkExternalClick),P.datepicker.initialized=!0),0===P("#"+P.datepicker._mainDivId).length&&P("body").append(P.datepicker.dpDiv);var e=Array.prototype.slice.call(arguments,1);return"string"!=typeof t||"isDisabled"!==t&&"getDate"!==t&&"widget"!==t?"option"===t&&2===arguments.length&&"string"==typeof arguments[1]?P.datepicker["_"+t+"Datepicker"].apply(P.datepicker,[this[0]].concat(e)):this.each(function(){"string"==typeof t?P.datepicker["_"+t+"Datepicker"].apply(P.datepicker,[this].concat(e)):P.datepicker._attachDatepicker(this,t)}):P.datepicker["_"+t+"Datepicker"].apply(P.datepicker,[this[0]].concat(e))},P.datepicker=new t,P.datepicker.initialized=!1,P.datepicker.uuid=(new Date).getTime(),P.datepicker.version="1.11.4",P.datepicker,P.widget("ui.dialog",{version:"1.11.4",options:{appendTo:"body",autoOpen:!0,buttons:[],closeOnEscape:!0,closeText:"Close",dialogClass:"",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(t){var e=P(this).css(t).offset().top;e<0&&P(this).css("top",t.top-e)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},sizeRelatedOptions:{buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},resizableRelatedOptions:{maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),this.options.title=this.options.title||this.originalTitle,this._createWrapper(),this.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(this.uiDialog),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&P.fn.draggable&&this._makeDraggable(),this.options.resizable&&P.fn.resizable&&this._makeResizable(),this._isOpen=!1,this._trackFocus()},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var t=this.options.appendTo;return t&&(t.jquery||t.nodeType)?P(t):this.document.find(t||"body").eq(0)},_destroy:function(){var t,e=this.originalPosition;this._untrackInstance(),this._destroyOverlay(),this.element.removeUniqueId().removeClass("ui-dialog-content ui-widget-content").css(this.originalCss).detach(),this.uiDialog.stop(!0,!0).remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),(t=e.parent.children().eq(e.index)).length&&t[0]!==this.element[0]?t.before(this.element):e.parent.append(this.element)},widget:function(){return this.uiDialog},disable:P.noop,enable:P.noop,close:function(t){var e,i=this;if(this._isOpen&&!1!==this._trigger("beforeClose",t)){if(this._isOpen=!1,this._focusedElement=null,this._destroyOverlay(),this._untrackInstance(),!this.opener.filter(":focusable").focus().length)try{(e=this.document[0].activeElement)&&"body"!==e.nodeName.toLowerCase()&&P(e).blur()}catch(t){}this._hide(this.uiDialog,this.options.hide,function(){i._trigger("close",t)})}},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(t,e){var i=!1,s=this.uiDialog.siblings(".ui-front:visible").map(function(){return+P(this).css("z-index")}).get(),n=Math.max.apply(null,s);return n>=+this.uiDialog.css("z-index")&&(this.uiDialog.css("z-index",n+1),i=!0),i&&!e&&this._trigger("focus",t),i},open:function(){var t=this;return this._isOpen?void(this._moveToTop()&&this._focusTabbable()):(this._isOpen=!0,this.opener=P(this.document[0].activeElement),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this.overlay&&this.overlay.css("z-index",this.uiDialog.css("z-index")-1),this._show(this.uiDialog,this.options.show,function(){t._focusTabbable(),t._trigger("focus")}),this._makeFocusTarget(),void this._trigger("open"))},_focusTabbable:function(){var t=this._focusedElement;t||(t=this.element.find("[autofocus]")),t.length||(t=this.element.find(":tabbable")),t.length||(t=this.uiDialogButtonPane.find(":tabbable")),t.length||(t=this.uiDialogTitlebarClose.filter(":tabbable")),t.length||(t=this.uiDialog),t.eq(0).focus()},_keepFocus:function(t){function e(){var t=this.document[0].activeElement;this.uiDialog[0]===t||P.contains(this.uiDialog[0],t)||this._focusTabbable()}t.preventDefault(),e.call(this),this._delay(e)},_createWrapper:function(){this.uiDialog=P("
    ").addClass("ui-dialog ui-widget ui-widget-content ui-corner-all ui-front "+this.options.dialogClass).hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._on(this.uiDialog,{keydown:function(t){if(this.options.closeOnEscape&&!t.isDefaultPrevented()&&t.keyCode&&t.keyCode===P.ui.keyCode.ESCAPE)return t.preventDefault(),void this.close(t);if(t.keyCode===P.ui.keyCode.TAB&&!t.isDefaultPrevented()){var e=this.uiDialog.find(":tabbable"),i=e.filter(":first"),s=e.filter(":last");t.target!==s[0]&&t.target!==this.uiDialog[0]||t.shiftKey?t.target!==i[0]&&t.target!==this.uiDialog[0]||!t.shiftKey||(this._delay(function(){s.focus()}),t.preventDefault()):(this._delay(function(){i.focus()}),t.preventDefault())}},mousedown:function(t){this._moveToTop(t)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var t;this.uiDialogTitlebar=P("
    ").addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(this.uiDialog),this._on(this.uiDialogTitlebar,{mousedown:function(t){P(t.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.focus()}}),this.uiDialogTitlebarClose=P("").button({label:this.options.closeText,icons:{primary:"ui-icon-closethick"},text:!1}).addClass("ui-dialog-titlebar-close").appendTo(this.uiDialogTitlebar),this._on(this.uiDialogTitlebarClose,{click:function(t){t.preventDefault(),this.close(t)}}),t=P("").uniqueId().addClass("ui-dialog-title").prependTo(this.uiDialogTitlebar),this._title(t),this.uiDialog.attr({"aria-labelledby":t.attr("id")})},_title:function(t){this.options.title||t.html(" "),t.text(this.options.title)},_createButtonPane:function(){this.uiDialogButtonPane=P("
    ").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),this.uiButtonSet=P("
    ").addClass("ui-dialog-buttonset").appendTo(this.uiDialogButtonPane),this._createButtons()},_createButtons:function(){var n=this,t=this.options.buttons;return this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),P.isEmptyObject(t)||P.isArray(t)&&!t.length?void this.uiDialog.removeClass("ui-dialog-buttons"):(P.each(t,function(t,e){var i,s;e=P.isFunction(e)?{click:e,text:t}:e,e=P.extend({type:"button"},e),i=e.click,e.click=function(){i.apply(n.element[0],arguments)},s={icons:e.icons,text:e.showText},delete e.icons,delete e.showText,P("",e).button(s).appendTo(n.uiButtonSet)}),this.uiDialog.addClass("ui-dialog-buttons"),void this.uiDialogButtonPane.appendTo(this.uiDialog))},_makeDraggable:function(){function n(t){return{position:t.position,offset:t.offset}}var o=this,a=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(t,e){P(this).addClass("ui-dialog-dragging"),o._blockFrames(),o._trigger("dragStart",t,n(e))},drag:function(t,e){o._trigger("drag",t,n(e))},stop:function(t,e){var i=e.offset.left-o.document.scrollLeft(),s=e.offset.top-o.document.scrollTop();a.position={my:"left top",at:"left"+(0<=i?"+":"")+i+" top"+(0<=s?"+":"")+s,of:o.window},P(this).removeClass("ui-dialog-dragging"),o._unblockFrames(),o._trigger("dragStop",t,n(e))}})},_makeResizable:function(){function o(t){return{originalPosition:t.originalPosition,originalSize:t.originalSize,position:t.position,size:t.size}}var a=this,r=this.options,t=r.resizable,e=this.uiDialog.css("position"),i="string"==typeof t?t:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:r.maxWidth,maxHeight:r.maxHeight,minWidth:r.minWidth,minHeight:this._minHeight(),handles:i,start:function(t,e){P(this).addClass("ui-dialog-resizing"),a._blockFrames(),a._trigger("resizeStart",t,o(e))},resize:function(t,e){a._trigger("resize",t,o(e))},stop:function(t,e){var i=a.uiDialog.offset(),s=i.left-a.document.scrollLeft(),n=i.top-a.document.scrollTop();r.height=a.uiDialog.height(),r.width=a.uiDialog.width(),r.position={my:"left top",at:"left"+(0<=s?"+":"")+s+" top"+(0<=n?"+":"")+n,of:a.window},P(this).removeClass("ui-dialog-resizing"),a._unblockFrames(),a._trigger("resizeStop",t,o(e))}}).css("position",e)},_trackFocus:function(){this._on(this.widget(),{focusin:function(t){this._makeFocusTarget(),this._focusedElement=P(t.target)}})},_makeFocusTarget:function(){this._untrackInstance(),this._trackingInstances().unshift(this)},_untrackInstance:function(){var t=this._trackingInstances(),e=P.inArray(this,t);-1!==e&&t.splice(e,1)},_trackingInstances:function(){var t=this.document.data("ui-dialog-instances");return t||(t=[],this.document.data("ui-dialog-instances",t)),t},_minHeight:function(){var t=this.options;return"auto"===t.height?t.minHeight:Math.min(t.minHeight,t.height)},_position:function(){var t=this.uiDialog.is(":visible");t||this.uiDialog.show(),this.uiDialog.position(this.options.position),t||this.uiDialog.hide()},_setOptions:function(t){var i=this,s=!1,n={};P.each(t,function(t,e){i._setOption(t,e),t in i.sizeRelatedOptions&&(s=!0),t in i.resizableRelatedOptions&&(n[t]=e)}),s&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",n)},_setOption:function(t,e){var i,s,n=this.uiDialog;"dialogClass"===t&&n.removeClass(this.options.dialogClass).addClass(e),"disabled"!==t&&(this._super(t,e),"appendTo"===t&&this.uiDialog.appendTo(this._appendTo()),"buttons"===t&&this._createButtons(),"closeText"===t&&this.uiDialogTitlebarClose.button({label:""+e}),"draggable"===t&&((i=n.is(":data(ui-draggable)"))&&!e&&n.draggable("destroy"),!i&&e&&this._makeDraggable()),"position"===t&&this._position(),"resizable"===t&&((s=n.is(":data(ui-resizable)"))&&!e&&n.resizable("destroy"),s&&"string"==typeof e&&n.resizable("option","handles",e),s||!1===e||this._makeResizable()),"title"===t&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size:function(){var t,e,i,s=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),s.minWidth>s.width&&(s.width=s.minWidth),t=this.uiDialog.css({height:"auto",width:s.width}).outerHeight(),e=Math.max(0,s.minHeight-t),i="number"==typeof s.maxHeight?Math.max(0,s.maxHeight-t):"none","auto"===s.height?this.element.css({minHeight:e,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,s.height-t)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var t=P(this);return P("
    ").css({position:"absolute",width:t.outerWidth(),height:t.outerHeight()}).appendTo(t.parent()).offset(t.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(t){return!!P(t.target).closest(".ui-dialog").length||!!P(t.target).closest(".ui-datepicker").length},_createOverlay:function(){if(this.options.modal){var e=!0;this._delay(function(){e=!1}),this.document.data("ui-dialog-overlays")||this._on(this.document,{focusin:function(t){e||this._allowInteraction(t)||(t.preventDefault(),this._trackingInstances()[0]._focusTabbable())}}),this.overlay=P("
    ").addClass("ui-widget-overlay ui-front").appendTo(this._appendTo()),this._on(this.overlay,{mousedown:"_keepFocus"}),this.document.data("ui-dialog-overlays",(this.document.data("ui-dialog-overlays")||0)+1)}},_destroyOverlay:function(){if(this.options.modal&&this.overlay){var t=this.document.data("ui-dialog-overlays")-1;t?this.document.data("ui-dialog-overlays",t):this.document.unbind("focusin").removeData("ui-dialog-overlays"),this.overlay.remove(),this.overlay=null}}}),P.widget("ui.progressbar",{version:"1.11.4",options:{max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min}),this.valueDiv=P("
    ").appendTo(this.element),this._refreshValue()},_destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.valueDiv.remove()},value:function(t){return void 0===t?this.options.value:(this.options.value=this._constrainedValue(t),void this._refreshValue())},_constrainedValue:function(t){return void 0===t&&(t=this.options.value),this.indeterminate=!1===t,"number"!=typeof t&&(t=0),!this.indeterminate&&Math.min(this.options.max,Math.max(this.min,t))},_setOptions:function(t){var e=t.value;delete t.value,this._super(t),this.options.value=this._constrainedValue(e),this._refreshValue()},_setOption:function(t,e){"max"===t&&(e=Math.max(this.min,e)),"disabled"===t&&this.element.toggleClass("ui-state-disabled",!!e).attr("aria-disabled",e),this._super(t,e)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var t=this.options.value,e=this._percentage();this.valueDiv.toggle(this.indeterminate||t>this.min).toggleClass("ui-corner-right",t===this.options.max).width(e.toFixed(0)+"%"),this.element.toggleClass("ui-progressbar-indeterminate",this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=P("
    ").appendTo(this.valueDiv))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":t}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==t&&(this.oldValue=t,this._trigger("change")),t===this.options.max&&this._trigger("complete")}}),P.widget("ui.selectmenu",{version:"1.11.4",defaultElement:"'}),menu.undisabled(["save-all","close-all","build","run","go-test","go-vet","go-get","go-install","find","find-next","find-previous","replace","replace-all","format","autocomplete","jump-to-decl","expr-info","find-usages","toggle-comment","edit"]);var i=document.getElementById("editor"+o);i.value=e.content;var r=CodeMirror.fromTextArea(i,{lineNumbers:!0,autofocus:!0,autoCloseBrackets:!0,matchBrackets:!0,highlightSelectionMatches:{showToken:/\w/},rulers:[{color:"#ccc",column:120,lineStyle:"dashed"}],styleActiveLine:!0,theme:config.editorTheme,tabSize:config.editorTabSize,indentUnit:4,indentWithTabs:!0,foldGutter:!0,cursorHeight:1,path:e.path,readOnly:wide.curNode.isGOAPI,profile:"xhtml",extraKeys:{"Ctrl-\\":"autocompleteAnyWord",".":"autocompleteAfterDot","Ctrl-/":"toggleComment","Ctrl-I":"exprInfo","Ctrl-L":"gotoLine","Ctrl-E":"deleteLine","Ctrl-D":"doNothing","Ctrl-B":"jumpToDecl","Ctrl-S":function(){wide.saveFile()},"Shift-Ctrl-S":function(){menu.saveAllFiles()},"Shift-Alt-F":function(){var e=editors.getCurrentPath();if(!e)return!1;wide.fmt(e,wide.curEditor)},"Alt-F7":"findUsages","Shift-Alt-Enter":function(){windows.isMaxEditor?windows.restoreEditor():windows.maxEditor()},"Shift-Ctrl-Up":"copyLinesUp","Shift-Ctrl-Down":"copyLinesDown","Shift-Alt-Up":"moveLinesUp","Shift-Alt-Down":"moveLinesDown","Shift-Alt-J":"selectIdentifier"}});"text/html"===e.mode&&emmetCodeMirror(r),r.on("cursorActivity",function(e){$(".edit-exprinfo").remove();var t=e.getCursor();$(".footer .cursor").text("| "+(t.line+1)+":"+(t.ch+1)+" |")}),r.on("blur",function(e){$(".edit-exprinfo").remove()}),r.on("changes",function(t){t.doc.isClean()?$(".edit-panel .tabs > div").each(function(){var e=$(this).find("span:eq(0)");e.attr("title")===t.options.path&&e.removeClass("changed")}):$(".edit-panel .tabs > div").each(function(){var e=$(this).find("span:eq(0)");e.attr("title")===t.options.path&&e.addClass("changed")})}),r.on("keydown",function(e,t){if(!(t.altKey||t.ctrlKey||t.shiftKey)){var o=t.which;o<48||57 table"),i="";n.cmd&&"init-notification"===n.cmd?console.log("[notification onmessage]"+o.data):(i+=''+n.severity+''+n.message+''+n.type+"",t.append(i),$(".notification-count").show())},o.onclose=function(o){console.log("[notification onclose] disconnected ("+o.code+")")},o.onerror=function(o){console.log("[notification onerror]")}}}; var tree={fileTree:void 0,getCurrentNodeLastNode:function(e){var t=e.children[e.children.length-1];return t.open?tree.getCurrentNodeLastNode(t):t},getNextShowNode:function(e){return 0!==e.level?e.getParentNode().getNextNode()?e.getParentNode().getNextNode():tree.getNextShowNode(e.getParentNode()):e.getNextNode()},isBottomNode:function(e){return!e.open&&(e.getParentNode()?!!e.getParentNode().isLastNode&&tree.isBottomNode(e.getParentNode()):!!e.isLastNode)},getTIdByPath:function(e){for(var t=tree.fileTree.transformToArray(tree.fileTree.getNodes()),i=0,o=t.length;i$(".content").height()&&(o=o-r.height()-25),r.css({top:o+"px",left:e.clientX+"px",display:"block"}).show(),n.hide()}else{wide.curNode.removable?n.find(".remove").removeClass("disabled"):n.find(".remove").addClass("disabled"),-1===wide.curNode.path.indexOf("zip",wide.curNode.path.length-"zip".length)?n.find(".decompress").hide():n.find(".decompress").show(),-1===wide.curNode.path.indexOf("go",wide.curNode.path.length-"go".length)?n.find(".linux64").hide():n.find(".linux64").show();var o=e.clientY-10;n.height()+o>$(".content").height()&&(o=o-n.height()-25),n.css({top:o+"px",left:e.clientX+"px",display:"block"}).show(),r.hide(),menu.disabled(["import","git-clone"])}$("#files").focus()}},onClick:function(e,t,i,o){i&&(wide.curNode=i,tree.fileTree.selectNode(i),menu.undisabled(["import","export","git-clone"]),tree.isDir()||menu.disabled(["import","git-clone"]),$("#files").focus())}}};tree.fileTree=$.fn.zTree.init($("#files"),t,e.data.children),session.restore()}}}),this._initSearch(),this._initRename()},openFile:function(o,e){wide.curNode=o;for(var r=e,t=0,i=editors.data.length;t input:eq(0)").keyup(function(e){var t=$(this).closest(".dialog-main").find(".dialog-footer > button:eq(0)");13!==e.which||t.prop("disabled")||t.click(),""===$.trim($(this).val())?t.prop("disabled",!0):t.prop("disabled",!1)}),$("#dialogSearchForm > input:eq(1)").keyup(function(e){var t=$(this).closest(".dialog-main").find(".dialog-footer > button:eq(0)");13!==e.which||t.prop("disabled")||t.click()}),$("#dialogSearchForm").dialog({modal:!0,height:80,width:260,title:config.label.search,okText:config.label.search,cancelText:config.label.cancel,afterOpen:function(){$("#dialogSearchForm > input:eq(0)").val("").focus(),$("#dialogSearchForm > input:eq(1)").val(""),$("#dialogSearchForm").closest(".dialog-main").find(".dialog-footer > button:eq(0)").prop("disabled",!0)},ok:function(){var t=newWideRequest();wide.curNode?t.dir=wide.curNode.path:t.dir="",t.text=$("#dialogSearchForm > input:eq(0)").val(),t.extension=$("#dialogSearchForm > input:eq(1)").val(),$.ajax({type:"POST",url:config.context+"/file/search/text",data:JSON.stringify(t),dataType:"json",success:function(e){e.succ&&($("#dialogSearchForm").dialog("close"),editors.appendSearch(e.data,"founds",t.text))}})}})},_initRename:function(){$("#dialogRenamePrompt").dialog({modal:!0,height:52,width:260,title:config.label.rename,okText:config.label.rename,cancelText:config.label.cancel,afterOpen:function(){$("#dialogRenamePrompt").closest(".dialog-main").find(".dialog-footer > button:eq(0)").prop("disabled",!0),$("#dialogRenamePrompt > input").val(wide.curNode.name).select().focus()},ok:function(){var e=$("#dialogRenamePrompt > input").val(),t=newWideRequest();t.oldPath=wide.curNode.path,t.newPath=wide.curNode.path.substring(0,wide.curNode.path.lastIndexOf("/")+1)+e,$.ajax({type:"POST",url:config.context+"/file/rename",data:JSON.stringify(t),dataType:"json",success:function(e){if(!e.succ)return $("#dialogRenamePrompt").dialog("close"),bottomGroup.tabs.setCurrent("notification"),windows.flowBottom(),$(".bottom-window-group .notification").focus(),!1;$("#dialogRenamePrompt").dialog("close")}})}})}}; -var wide={curNode:void 0,curEditor:void 0,curProcessId:void 0,refreshOutline:function(){if(!wide.curEditor||wide.curEditor&&"go"!==wide.curEditor.doc.getMode().name)return $("#outline").html(""),!1;var e=newWideRequest();e.code=wide.curEditor.getValue(),$.ajax({type:"POST",async:!1,url:config.context+"/outline",data:JSON.stringify(e),dataType:"json",success:function(e){if(e.succ){for(var t=e.data,o='
      ',i=["constDecls","varDecls","funcDecls","structDecls","interfaceDecls","typeDecls"],a=0,n=i.length;a '+s.Name+""}$("#outline").html(o+"
    "),$("#outline li").dblclick(function(){var e=$(this),t=CodeMirror.Pos(e.data("line"),e.data("ch")),o=wide.curEditor;o.setCursor(t);var i=Math.floor(o.getScrollInfo().clientHeight/o.defaultTextHeight()/2),a=o.cursorCoords({line:t.line-i,ch:0},"local");o.scrollTo(0,a.top),o.focus()})}}})},_initDialog:function(){$(".dialog-prompt > input").keyup(function(e){var t=$(this).closest(".dialog-main").find(".dialog-footer > button:eq(0)");13!==e.which||t.prop("disabled")||t.click(),""===$.trim($(this).val())?t.prop("disabled",!0):t.prop("disabled",!1)}),$("#dialogAlert").dialog({modal:!0,height:40,width:350,title:config.label.tip,hiddenOk:!0,cancelText:config.label.confirm,afterOpen:function(e){$("#dialogAlert").html(e)}}),$("#dialogRemoveConfirm").dialog({modal:!0,height:36,width:260,title:config.label.delete,okText:config.label.delete,cancelText:config.label.cancel,afterOpen:function(){$("#dialogRemoveConfirm > b").html('"'+wide.curNode.name+'"')},ok:function(){var e=newWideRequest();e.path=wide.curNode.path,$.ajax({type:"POST",url:config.context+"/file/remove",data:JSON.stringify(e),dataType:"json",success:function(e){if(!e.succ)return $("#dialogRemoveConfirm").dialog("close"),bottomGroup.tabs.setCurrent("notification"),windows.flowBottom(),$(".bottom-window-group .notification").focus(),!1;$("#dialogRemoveConfirm").dialog("close")}})}}),$("#dialogNewFilePrompt").dialog({modal:!0,height:52,width:260,title:config.label.create_file,okText:config.label.create,cancelText:config.label.cancel,afterOpen:function(){$("#dialogNewFilePrompt > input").val("").focus(),$("#dialogNewFilePrompt").closest(".dialog-main").find(".dialog-footer > button:eq(0)").prop("disabled",!0)},ok:function(){var t=newWideRequest(),e=$("#dialogNewFilePrompt > input").val();t.path=wide.curNode.path+"/"+e,t.fileType="f",$.ajax({type:"POST",url:config.context+"/file/new",data:JSON.stringify(t),dataType:"json",success:function(e){if(!e.succ)return $("#dialogNewFilePrompt").dialog("close"),bottomGroup.tabs.setCurrent("notification"),windows.flowBottom(),$(".bottom-window-group .notification").focus(),!1;$("#dialogNewFilePrompt").dialog("close"),setTimeout(function(){var e=tree.getTIdByPath(t.path);tree.openFile(tree.fileTree.getNodeByTId(e)),tree.fileTree.selectNode(wide.curNode)},100)}})}}),$("#dialogNewDirPrompt").dialog({modal:!0,height:52,width:260,title:config.label.create_dir,okText:config.label.create,cancelText:config.label.cancel,afterOpen:function(){$("#dialogNewDirPrompt > input").val("").focus(),$("#dialogNewDirPrompt").closest(".dialog-main").find(".dialog-footer > button:eq(0)").prop("disabled",!0)},ok:function(){var e=$("#dialogNewDirPrompt > input").val(),t=newWideRequest();t.path=wide.curNode.path+"/"+e,t.fileType="d",$.ajax({type:"POST",url:config.context+"/file/new",data:JSON.stringify(t),dataType:"json",success:function(e){if(!e.succ)return $("#dialogNewDirPrompt").dialog("close"),bottomGroup.tabs.setCurrent("notification"),windows.flowBottom(),$(".bottom-window-group .notification").focus(),!1;$("#dialogNewDirPrompt").dialog("close")}})}}),$("#dialogGoFilePrompt").dialog({modal:!0,height:320,width:660,title:config.label.goto_file,okText:config.label.go,cancelText:config.label.cancel,afterInit:function(){$("#dialogGoFilePrompt").on("dblclick","li",function(){var e=tree.getTIdByPath($(this).find(".ft-small").text());tree.openFile(tree.fileTree.getNodeByTId(e)),tree.fileTree.selectNode(wide.curNode),$("#dialogGoFilePrompt").dialog("close"),wide.curEditor.focus()}),$("#dialogGoFilePrompt").on("click","li",function(){var e=$("#dialogGoFilePrompt > .list");e.find("li").removeClass("selected"),e.data("index",$(this).data("index")),$(this).addClass("selected")}),hotkeys.bindList($("#dialogGoFilePrompt > input"),$("#dialogGoFilePrompt > .list"),function(e){var t=tree.getTIdByPath(e.find(".ft-small").text());tree.openFile(tree.fileTree.getNodeByTId(t)),tree.fileTree.selectNode(wide.curNode),$("#dialogGoFilePrompt").dialog("close"),wide.curEditor.focus()}),$("#dialogGoFilePrompt > input").bind("input",function(){var e=$("#dialogGoFilePrompt > input").val(),t=newWideRequest();t.path="",t.name="*"+e+"*",wide.curNode&&(t.path=wide.curNode.path),$.ajax({type:"POST",url:config.context+"/file/find/name",data:JSON.stringify(t),dataType:"json",success:function(e){if(e.succ){for(var t=e.data,o="",i=0,a=t.length;i'+l+'    '+n+"":'
  • '+l+'    '+n+"
  • "}$("#dialogGoFilePrompt > ul").html(o)}}})})},afterOpen:function(){$("#dialogGoFilePrompt > input").val("").focus(),$("#dialogGoFilePrompt").closest(".dialog-main").find(".dialog-footer > button:eq(0)").prop("disabled",!0),$("#dialogGoFilePrompt .list").html("").data("index",0)},ok:function(){var e=tree.getTIdByPath($("#dialogGoFilePrompt .selected .ft-small").text());tree.openFile(tree.fileTree.getNodeByTId(e)),tree.fileTree.selectNode(wide.curNode),$("#dialogGoFilePrompt").dialog("close"),wide.curEditor.focus()}}),$("#dialogGoLinePrompt").dialog({modal:!0,height:52,width:260,title:config.label.goto_line,okText:config.label.go,cancelText:config.label.cancel,afterOpen:function(){$("#dialogGoLinePrompt > input").val("").focus(),$("#dialogGoLinePrompt").closest(".dialog-main").find(".dialog-footer > button:eq(0)").prop("disabled",!0)},ok:function(){var e=parseInt($("#dialogGoLinePrompt > input").val())-1;$("#dialogGoLinePrompt").dialog("close");var t=wide.curEditor,o=t.getCursor();t.setCursor(CodeMirror.Pos(e,o.ch));var i=Math.floor(t.getScrollInfo().clientHeight/t.defaultTextHeight()/2),a=t.cursorCoords({line:e-i,ch:o.ch},"local");t.scrollTo(0,a.top),t.focus()}}),$("#dialogGitClonePrompt").dialog({modal:!0,height:52,width:360,title:config.label.git_clone,okText:config.label.confirm,cancelText:config.label.cancel,afterOpen:function(){$("#dialogGitClonePrompt > input").val("").focus(),$("#dialogGitClonePrompt").closest(".dialog-main").find(".dialog-footer > button:eq(0)").prop("disabled",!0)},ok:function(){$("#dialogGitClonePrompt").dialog("close");var e=newWideRequest();e.path=wide.curNode.path,e.repository=$("#dialogGitClonePrompt > input").val(),$.ajax({type:"POST",url:config.context+"/git/clone",data:JSON.stringify(e),dataType:"json",success:function(e){}})}})},_initWS:function(){var e=new ReconnectingWebSocket(config.channel+"/output/ws?sid="+config.wideSessionId);e.onopen=function(){console.log("[output onopen] connected")},e.onmessage=function(e){console.log("[output onmessage]"+e.data);var t=JSON.parse(e.data);(goLintFound&&(goLintFound=[]),"run"===t.nextCmd)&&((c=newWideRequest()).executable=t.executable,$.ajax({type:"POST",url:config.context+"/run",data:JSON.stringify(c),dataType:"json"}));switch(t.cmd){case"run":var o=$(".bottom-window-group .output > div").html();wide.curProcessId&&""!==o?bottomGroup.fillOutput(o.replace(/<\/pre>$/g,t.output+"")):bottomGroup.fillOutput(o+"
    "+t.output+"
    "),wide.curProcessId=t.pid;break;case"run-done":bottomGroup.fillOutput($(".bottom-window-group .output > div").html().replace(/<\/pre>$/g,t.output+"")),wide.curProcessId=void 0,$("#buildRun").removeClass("ico-stop").addClass("ico-buildrun").attr("title",config.label.build_n_run);break;case"start-build":case"start-test":case"start-vet":case"start-install":case"start-get":case"start-git_clone":bottomGroup.fillOutput(t.output);break;case"go test":case"go vet":case"go install":case"go get":bottomGroup.fillOutput($(".bottom-window-group .output > div").html()+t.output);break;case"git clone":bottomGroup.fillOutput($(".bottom-window-group .output > div").html()+t.output),tree.fileTree.reAsyncChildNodes(wide.curNode,"refresh",!1);break;case"build":case"cross-build":if(bottomGroup.fillOutput($(".bottom-window-group .output > div").html()+t.output),t.lints){for(var i={},a=0;a ul > li").unbind().removeClass("selected"),menu.subMenu())}),window.onbeforeunload=function(){if(0 div").each(function(){var e=$(this).find("span:eq(0)");e.attr("title")===t&&e.removeClass("changed")})}})},saveFile:function(){var e=editors.getCurrentPath();if(!e)return!1;var t=wide.curEditor;if(t.doc.isClean())return!1;if("text/x-go"===t.getOption("mode")){wide.gofmt(e,wide.curEditor);var o=newWideRequest();return o.file=e,o.code=t.getValue(),o.nextCmd="",$.ajax({type:"POST",url:config.context+"/build",data:JSON.stringify(o),dataType:"json",beforeSend:function(){bottomGroup.resetOutput()},success:function(e){}}),void wide.refreshOutline()}wide._save(e,wide.curEditor)},stop:function(){if($("#buildRun").hasClass("ico-buildrun"))return menu.run(),!1;if(!wide.curProcessId)return!1;var e=newWideRequest();e.pid=wide.curProcessId,$.ajax({type:"POST",url:config.context+"/stop",data:JSON.stringify(e),dataType:"json",success:function(e){$("#buildRun").removeClass("ico-stop").addClass("ico-buildrun").attr("title",config.label.build_n_run)}})},gofmt:function(t,o){var i=o.getCursor(),a=o.getScrollInfo(),e=newWideRequest();e.file=t,e.code=o.getValue(),e.cursorLine=i.line,e.cursorCh=i.ch,$.ajax({async:!1,type:"POST",url:config.context+"/go/fmt",data:JSON.stringify(e),dataType:"json",success:function(e){e.succ&&(o.setValue(e.data.code),o.setCursor(i),o.scrollTo(null,a.top),wide._save(t,o))}})},fmt:function(e,t){var o=t.getOption("mode"),i=t.getCursor(),a=t.getScrollInfo(),n=newWideRequest();n.file=e,n.code=t.getValue(),n.cursorLine=i.line,n.cursorCh=i.ch;var l=null;switch(o){case"text/x-go":$.ajax({async:!1,type:"POST",url:config.context+"/go/fmt",data:JSON.stringify(n),dataType:"json",success:function(e){e.succ&&(l=e.data.code)}});break;case"text/html":l=html_beautify(t.getValue());break;case"text/javascript":case"application/json":l=js_beautify(t.getValue());break;case"text/css":l=css_beautify(t.getValue())}l&&(t.setValue(l),t.setCursor(i),t.scrollTo(null,a.top),wide._save(e,t))},getClassBySuffix:function(e){var t="ico-ztree-other ";switch(e){case"html":case"htm":t="ico-ztree-html ";break;case"go":t="ico-ztree-go ";break;case"css":t="ico-ztree-css ";break;case"txt":t="ico-ztree-text ";break;case"sql":t="ico-ztree-sql ";break;case"properties":t="ico-ztree-pro ";break;case"md":t="ico-ztree-md ";break;case"json":t="ico-ztree-js ";break;case"xml":t="ico-ztree-xml ";break;case"jpg":case"jpeg":case"bmp":case"gif":case"png":case"svg":case"ico":t="ico-ztree-img "}return t}};$(document).ready(function(){wide.init(),tree.init(),menu.init(),hotkeys.init(),session.init(),notification.init(),editors.init(),windows.init(),bottomGroup.init()}); +var wide={curNode:void 0,curEditor:void 0,curProcessId:void 0,refreshOutline:function(){if(!wide.curEditor||wide.curEditor&&"go"!==wide.curEditor.doc.getMode().name)return $("#outline").html(""),!1;var e=newWideRequest();e.code=wide.curEditor.getValue(),$.ajax({type:"POST",async:!1,url:config.context+"/outline",data:JSON.stringify(e),dataType:"json",success:function(e){if(e.succ){for(var t=e.data,o='
      ',i=["constDecls","varDecls","funcDecls","structDecls","interfaceDecls","typeDecls"],a=0,n=i.length;a '+s.Name+""}$("#outline").html(o+"
    "),$("#outline li").dblclick(function(){var e=$(this),t=CodeMirror.Pos(e.data("line"),e.data("ch")),o=wide.curEditor;o.setCursor(t);var i=Math.floor(o.getScrollInfo().clientHeight/o.defaultTextHeight()/2),a=o.cursorCoords({line:t.line-i,ch:0},"local");o.scrollTo(0,a.top),o.focus()})}}})},_initDialog:function(){$(".dialog-prompt > input").keyup(function(e){var t=$(this).closest(".dialog-main").find(".dialog-footer > button:eq(0)");13!==e.which||t.prop("disabled")||t.click(),""===$.trim($(this).val())?t.prop("disabled",!0):t.prop("disabled",!1)}),$("#dialogAlert").dialog({modal:!0,height:40,width:350,title:config.label.tip,hiddenOk:!0,cancelText:config.label.confirm,afterOpen:function(e){$("#dialogAlert").html(e)}}),$("#dialogRemoveConfirm").dialog({modal:!0,height:36,width:260,title:config.label.delete,okText:config.label.delete,cancelText:config.label.cancel,afterOpen:function(){$("#dialogRemoveConfirm > b").html('"'+wide.curNode.name+'"')},ok:function(){var e=newWideRequest();e.path=wide.curNode.path,$.ajax({type:"POST",url:config.context+"/file/remove",data:JSON.stringify(e),dataType:"json",success:function(e){if(!e.succ)return $("#dialogRemoveConfirm").dialog("close"),bottomGroup.tabs.setCurrent("notification"),windows.flowBottom(),$(".bottom-window-group .notification").focus(),!1;$("#dialogRemoveConfirm").dialog("close")}})}}),$("#dialogNewFilePrompt").dialog({modal:!0,height:52,width:260,title:config.label.create_file,okText:config.label.create,cancelText:config.label.cancel,afterOpen:function(){$("#dialogNewFilePrompt > input").val("").focus(),$("#dialogNewFilePrompt").closest(".dialog-main").find(".dialog-footer > button:eq(0)").prop("disabled",!0)},ok:function(){var t=newWideRequest(),e=$("#dialogNewFilePrompt > input").val();t.path=wide.curNode.path+"/"+e,t.fileType="f",$.ajax({type:"POST",url:config.context+"/file/new",data:JSON.stringify(t),dataType:"json",success:function(e){if(!e.succ)return $("#dialogNewFilePrompt").dialog("close"),bottomGroup.tabs.setCurrent("notification"),windows.flowBottom(),$(".bottom-window-group .notification").focus(),!1;$("#dialogNewFilePrompt").dialog("close"),setTimeout(function(){var e=tree.getTIdByPath(t.path);tree.openFile(tree.fileTree.getNodeByTId(e)),tree.fileTree.selectNode(wide.curNode)},100)}})}}),$("#dialogNewDirPrompt").dialog({modal:!0,height:52,width:260,title:config.label.create_dir,okText:config.label.create,cancelText:config.label.cancel,afterOpen:function(){$("#dialogNewDirPrompt > input").val("").focus(),$("#dialogNewDirPrompt").closest(".dialog-main").find(".dialog-footer > button:eq(0)").prop("disabled",!0)},ok:function(){var e=$("#dialogNewDirPrompt > input").val(),t=newWideRequest();t.path=wide.curNode.path+"/"+e,t.fileType="d",$.ajax({type:"POST",url:config.context+"/file/new",data:JSON.stringify(t),dataType:"json",success:function(e){if(!e.succ)return $("#dialogNewDirPrompt").dialog("close"),bottomGroup.tabs.setCurrent("notification"),windows.flowBottom(),$(".bottom-window-group .notification").focus(),!1;$("#dialogNewDirPrompt").dialog("close")}})}}),$("#dialogGoFilePrompt").dialog({modal:!0,height:320,width:660,title:config.label.goto_file,okText:config.label.go,cancelText:config.label.cancel,afterInit:function(){$("#dialogGoFilePrompt").on("dblclick","li",function(){var e=tree.getTIdByPath($(this).find(".ft-small").text());tree.openFile(tree.fileTree.getNodeByTId(e)),tree.fileTree.selectNode(wide.curNode),$("#dialogGoFilePrompt").dialog("close"),wide.curEditor.focus()}),$("#dialogGoFilePrompt").on("click","li",function(){var e=$("#dialogGoFilePrompt > .list");e.find("li").removeClass("selected"),e.data("index",$(this).data("index")),$(this).addClass("selected")}),hotkeys.bindList($("#dialogGoFilePrompt > input"),$("#dialogGoFilePrompt > .list"),function(e){var t=tree.getTIdByPath(e.find(".ft-small").text());tree.openFile(tree.fileTree.getNodeByTId(t)),tree.fileTree.selectNode(wide.curNode),$("#dialogGoFilePrompt").dialog("close"),wide.curEditor.focus()}),$("#dialogGoFilePrompt > input").bind("input",function(){var e=$("#dialogGoFilePrompt > input").val(),t=newWideRequest();t.path="",t.name="*"+e+"*",wide.curNode&&(t.path=wide.curNode.path),$.ajax({type:"POST",url:config.context+"/file/find/name",data:JSON.stringify(t),dataType:"json",success:function(e){if(e.succ){for(var t=e.data,o="",i=0,a=t.length;i'+l+'    '+n+"":'
  • '+l+'    '+n+"
  • "}$("#dialogGoFilePrompt > ul").html(o)}}})})},afterOpen:function(){$("#dialogGoFilePrompt > input").val("").focus(),$("#dialogGoFilePrompt").closest(".dialog-main").find(".dialog-footer > button:eq(0)").prop("disabled",!0),$("#dialogGoFilePrompt .list").html("").data("index",0)},ok:function(){var e=tree.getTIdByPath($("#dialogGoFilePrompt .selected .ft-small").text());tree.openFile(tree.fileTree.getNodeByTId(e)),tree.fileTree.selectNode(wide.curNode),$("#dialogGoFilePrompt").dialog("close"),wide.curEditor.focus()}}),$("#dialogGoLinePrompt").dialog({modal:!0,height:52,width:260,title:config.label.goto_line,okText:config.label.go,cancelText:config.label.cancel,afterOpen:function(){$("#dialogGoLinePrompt > input").val("").focus(),$("#dialogGoLinePrompt").closest(".dialog-main").find(".dialog-footer > button:eq(0)").prop("disabled",!0)},ok:function(){var e=parseInt($("#dialogGoLinePrompt > input").val())-1;$("#dialogGoLinePrompt").dialog("close");var t=wide.curEditor,o=t.getCursor();t.setCursor(CodeMirror.Pos(e,o.ch));var i=Math.floor(t.getScrollInfo().clientHeight/t.defaultTextHeight()/2),a=t.cursorCoords({line:e-i,ch:o.ch},"local");t.scrollTo(0,a.top),t.focus()}})},_initWS:function(){var e=new ReconnectingWebSocket(config.channel+"/output/ws?sid="+config.wideSessionId);e.onopen=function(){console.log("[output onopen] connected")},e.onmessage=function(e){console.log("[output onmessage]"+e.data);var t=JSON.parse(e.data);(goLintFound&&(goLintFound=[]),"run"===t.nextCmd)&&((c=newWideRequest()).executable=t.executable,$.ajax({type:"POST",url:config.context+"/run",data:JSON.stringify(c),dataType:"json"}));switch(t.cmd){case"run":var o=$(".bottom-window-group .output > div").html();wide.curProcessId&&""!==o?bottomGroup.fillOutput(o.replace(/<\/pre>$/g,t.output+"")):bottomGroup.fillOutput(o+"
    "+t.output+"
    "),wide.curProcessId=t.pid;break;case"run-done":bottomGroup.fillOutput($(".bottom-window-group .output > div").html().replace(/<\/pre>$/g,t.output+"")),wide.curProcessId=void 0,$("#buildRun").removeClass("ico-stop").addClass("ico-buildrun").attr("title",config.label.build_n_run);break;case"start-build":case"start-test":case"start-vet":case"start-install":case"start-get":bottomGroup.fillOutput(t.output);break;case"go test":case"go vet":case"go install":case"go get":bottomGroup.fillOutput($(".bottom-window-group .output > div").html()+t.output);break;case"git clone":bottomGroup.fillOutput($(".bottom-window-group .output > div").html()+t.output),tree.fileTree.reAsyncChildNodes(wide.curNode,"refresh",!1);break;case"build":case"cross-build":if(bottomGroup.fillOutput($(".bottom-window-group .output > div").html()+t.output),t.lints){for(var i={},a=0;a ul > li").unbind().removeClass("selected"),menu.subMenu())}),window.onbeforeunload=function(){if(0 div").each(function(){var e=$(this).find("span:eq(0)");e.attr("title")===t&&e.removeClass("changed")})}})},saveFile:function(){var e=editors.getCurrentPath();if(!e)return!1;var t=wide.curEditor;if(t.doc.isClean())return!1;if("text/x-go"===t.getOption("mode")){wide.gofmt(e,wide.curEditor);var o=newWideRequest();return o.file=e,o.code=t.getValue(),o.nextCmd="",$.ajax({type:"POST",url:config.context+"/build",data:JSON.stringify(o),dataType:"json",beforeSend:function(){bottomGroup.resetOutput()},success:function(e){}}),void wide.refreshOutline()}wide._save(e,wide.curEditor)},stop:function(){if($("#buildRun").hasClass("ico-buildrun"))return menu.run(),!1;if(!wide.curProcessId)return!1;var e=newWideRequest();e.pid=wide.curProcessId,$.ajax({type:"POST",url:config.context+"/stop",data:JSON.stringify(e),dataType:"json",success:function(e){$("#buildRun").removeClass("ico-stop").addClass("ico-buildrun").attr("title",config.label.build_n_run)}})},gofmt:function(t,o){var i=o.getCursor(),a=o.getScrollInfo(),e=newWideRequest();e.file=t,e.code=o.getValue(),e.cursorLine=i.line,e.cursorCh=i.ch,$.ajax({async:!1,type:"POST",url:config.context+"/go/fmt",data:JSON.stringify(e),dataType:"json",success:function(e){e.succ&&(o.setValue(e.data.code),o.setCursor(i),o.scrollTo(null,a.top),wide._save(t,o))}})},fmt:function(e,t){var o=t.getOption("mode"),i=t.getCursor(),a=t.getScrollInfo(),n=newWideRequest();n.file=e,n.code=t.getValue(),n.cursorLine=i.line,n.cursorCh=i.ch;var l=null;switch(o){case"text/x-go":$.ajax({async:!1,type:"POST",url:config.context+"/go/fmt",data:JSON.stringify(n),dataType:"json",success:function(e){e.succ&&(l=e.data.code)}});break;case"text/html":l=html_beautify(t.getValue());break;case"text/javascript":case"application/json":l=js_beautify(t.getValue());break;case"text/css":l=css_beautify(t.getValue())}l&&(t.setValue(l),t.setCursor(i),t.scrollTo(null,a.top),wide._save(e,t))},getClassBySuffix:function(e){var t="ico-ztree-other ";switch(e){case"html":case"htm":t="ico-ztree-html ";break;case"go":t="ico-ztree-go ";break;case"css":t="ico-ztree-css ";break;case"txt":t="ico-ztree-text ";break;case"sql":t="ico-ztree-sql ";break;case"properties":t="ico-ztree-pro ";break;case"md":t="ico-ztree-md ";break;case"json":t="ico-ztree-js ";break;case"xml":t="ico-ztree-xml ";break;case"jpg":case"jpeg":case"bmp":case"gif":case"png":case"svg":case"ico":t="ico-ztree-img "}return t}};$(document).ready(function(){wide.init(),tree.init(),menu.init(),hotkeys.init(),session.init(),notification.init(),editors.init(),windows.init(),bottomGroup.init()}); var session={init:function(){this._initWS();var s=function(e){var t="normal";return e.isClosed?t="min":e.size>=$("body").width()&&(t="max"),t};setInterval(function(){var e,t=newWideRequest(),o=[],n=editors.getCurrentId()?editors.getCurrentPath():"";editors.tabs.obj._$tabs.find("div").each(function(){var e=$(this);e.find("span:eq(0)").attr("title")!==config.label.start_page&&o.push(e.find("span:eq(0)").attr("title"))}),e=tree.getOpenPaths(),t.currentFile=n,t.fileTree=e,t.files=o,t.layout={side:{size:windows.outerLayout.west.state.size,state:s(windows.outerLayout.west.state)},sideRight:{size:windows.innerLayout.east.state.size,state:s(windows.innerLayout.east.state)},bottom:{size:windows.innerLayout.south.state.size,state:s(windows.innerLayout.south.state)}},$.ajax({type:"POST",url:config.context+"/session/save",data:JSON.stringify(t),dataType:"json",success:function(e){}})},3e4)},restore:function(){if(config.latestSessionContent){for(var e=config.latestSessionContent.fileTree,t=config.latestSessionContent.files,o=config.latestSessionContent.currentFile,n="",s=[],i=tree.fileTree.transformToArray(tree.fileTree.getNodes()),r=0,a=i.length;r'+("Connected to server [sid="+config.wideSessionId+"], "+function(e,t){var o=new Date(e),n={"M+":o.getMonth()+1,"d+":o.getDate(),"h+":o.getHours(),"m+":o.getMinutes(),"s+":o.getSeconds(),"q+":Math.floor((o.getMonth()+3)/3),S:o.getMilliseconds()};for(var s in/(y+)/.test(t)&&(t=t.replace(RegExp.$1,(o.getFullYear()+"").substr(4-RegExp.$1.length))),n)new RegExp("("+s+")").test(t)&&(t=t.replace(RegExp.$1,1===RegExp.$1.length?n[s]:("00"+n[s]).substr((""+n[s]).length)));return t}((new Date).getTime(),"yyyy-MM-dd hh:mm:ss"))+''+e+"",$(".bottom-window-group .notification > table").append(t)},e.onmessage=function(e){var t=JSON.parse(e.data);switch(t.cmd){case"create-file":var o=tree.fileTree.getNodeByTId(tree.getTIdByPath(t.dir)),n=t.path.replace(t.dir+"/",""),s=CodeMirror.findModeByFileName(n),i=wide.getClassBySuffix(n.split(".")[1]);t.type&&"f"===t.type?tree.fileTree.addNodes(o,[{id:t.path,name:n,iconSkin:i,path:t.path,mode:s,removable:!0,creatable:!0}]):tree.fileTree.addNodes(o,[{id:t.path,name:n,iconSkin:"ico-ztree-dir ",path:t.path,removable:!0,creatable:!0,isParent:!0}]);break;case"remove-file":case"rename-file":o=tree.fileTree.getNodeByTId(tree.getTIdByPath(t.path));tree.fileTree.removeNode(o);for(var r=tree.fileTree.transformToArray(o),a=0,d=r.length;a'+("Disconnected from server, trying to reconnect it [sid="+config.wideSessionId+"]")+''+t+"",$(".bottom-window-group .notification > table").append(o),$(".notification-count").show()},e.onerror=function(e){console.log("[session onerror]")}}}; var menu={init:function(){this.subMenu(),this._initPreference(),this._initAbout(),this._initShare(),$(".menu .frame li").click(function(){$(".menu > ul > li").unbind().removeClass("selected"),menu.subMenu()})},_initShare:function(){$(".menu .ico-share").hover(function(){$(".menu .share-panel").show()}),$(".share-panel .font-ico").click(function(){var e=$(this).attr("class").split("-")[2],t="https://wide.b3log.org",a="https://wide.b3log.org/static/images/wide-logo.png",n={};n.email="mailto:?subject="+$("title").text()+"&body="+$("meta[name=description]").attr("content")+" "+t;var i=encodeURIComponent($("meta[name=description]").attr("content")+" "+t+" #golang");n.twitter="https://twitter.com/intent/tweet?status="+i,n.facebook="https://www.facebook.com/sharer/sharer.php?u="+t,n.googleplus="https://plus.google.com/share?url="+t;var o=encodeURIComponent($("title").text()+". \n"+$("meta[name=description]").attr("content")+" #golang#");n.weibo="http://v.t.sina.com.cn/share/share.php?title="+o+"&url="+t+"&pic="+a,n.qqz="https://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url="+t+"&sharesource=qzone&title="+o+"&pics="+a,window.open(n[e],"_blank","top=100,left=200,width=648,height=618")})},_initAbout:function(){$("#dialogAbout").load(config.context+"/about",function(){$("#dialogAbout").dialog({modal:!0,title:config.label.about,hideFooter:!0,afterOpen:function(){$.ajax({url:"https://rhythm.b3log.org/version/wide/latest",type:"GET",dataType:"jsonp",jsonp:"callback",success:function(e,t){$("#dialogAbout .version").text()===e.wideVersion?$(".upgrade").text(config.label.uptodate):$(".upgrade").html(config.label.new_version_available+config.label.colon+""+e.wideVersion+"")}})}})})},disabled:function(e){for(var t=0,a=e.length;t ul > li").click(function(e){1!==$(e.target).closest(".frame").length&&($(this).find(".frame").show(),$(".menu > ul > li").removeClass("selected"),$(this).addClass("selected"),$(".menu > ul > li").unbind(),$(".menu > ul > li").mouseover(function(){1!==$(e.target).closest(".frame").length&&($(".menu .frame").hide(),$(this).find(".frame").show(),$(".menu > ul > li").removeClass("selected"),$(this).addClass("selected"))}))})},openPreference:function(){$("#dialogPreference").dialog("open")},saveAllFiles:function(){if($(".menu li.save-all").hasClass("disabled"))return!1;for(var e=0,t=editors.data.length;e div").each(function(e){0!==e&&t.push($(this).data("index"))}),$("#dialogCloseEditor").data("removeData",t),$(".edit-panel .tabs .ico-close:eq(0)").click()},exit:function(){var e=newWideRequest();$.ajax({type:"POST",url:config.context+"/logout",data:JSON.stringify(e),dataType:"json",success:function(e){e.succ&&(window.location.href=config.context+"/login")}})},openAbout:function(){$("#dialogAbout").dialog("open")},goget:function(){menu.saveAllFiles();var e=editors.getCurrentPath();if(!e)return!1;if($(".menu li.go-get").hasClass("disabled"))return!1;var t=newWideRequest();t.file=e,$.ajax({type:"POST",url:config.context+"/go/get",data:JSON.stringify(t),dataType:"json",beforeSend:function(){bottomGroup.resetOutput()},success:function(e){}})},goinstall:function(){menu.saveAllFiles();var e=editors.getCurrentPath();if(!e)return!1;if($(".menu li.go-install").hasClass("disabled"))return!1;var t=newWideRequest();t.file=e,$.ajax({type:"POST",url:config.context+"/go/install",data:JSON.stringify(t),dataType:"json",beforeSend:function(){bottomGroup.resetOutput()},success:function(e){}})},test:function(){menu.saveAllFiles();var e=editors.getCurrentPath();if(!e)return!1;if($(".menu li.go-test").hasClass("disabled"))return!1;var t=newWideRequest();t.file=e,$.ajax({type:"POST",url:config.context+"/go/test",data:JSON.stringify(t),dataType:"json",beforeSend:function(){bottomGroup.resetOutput()},success:function(e){}})},govet:function(){menu.saveAllFiles();var e=editors.getCurrentPath();if(!e)return!1;if($(".menu li.go-vet").hasClass("disabled"))return!1;var t=newWideRequest();t.file=e,$.ajax({type:"POST",url:config.context+"/go/vet",data:JSON.stringify(t),dataType:"json",beforeSend:function(){bottomGroup.resetOutput()},success:function(e){}})},run:function(){if(menu.saveAllFiles(),$("#buildRun").hasClass("ico-stop"))return wide.stop(),!1;var e=editors.getCurrentPath();if(!e)return!1;if($(".menu li.run").hasClass("disabled"))return!1;var t=newWideRequest();t.file=e,t.code=wide.curEditor.getValue(),t.nextCmd="run",$.ajax({type:"POST",url:config.context+"/build",data:JSON.stringify(t),dataType:"json",beforeSend:function(){bottomGroup.resetOutput(),$("#buildRun").addClass("ico-stop").removeClass("ico-buildrun").attr("title",config.label.stop)},success:function(e){}})},build:function(){menu.saveAllFiles();var e=editors.getCurrentPath();if(!e)return!1;if($(".menu li.build").hasClass("disabled"))return!1;var t=newWideRequest();t.file=e,t.code=wide.curEditor.getValue(),t.nextCmd="",$.ajax({type:"POST",url:config.context+"/build",data:JSON.stringify(t),dataType:"json",beforeSend:function(){bottomGroup.resetOutput()},success:function(e){}})},_initPreference:function(){$("#dialogPreference").load(config.context+"/preference",function(){$("#dialogPreference input").keyup(function(){var t=!1,a=[],e="";$("#dialogPreference input").each(function(){var e=$(this);e.val()!=e.data("value")&&(t=!0),""===$.trim(e.val())&&a.push(e)});var n=$("#dialogPreference").closest(".dialog-main").find(".dialog-footer > button:eq(0)");if(t?n.prop("disabled",!1):n.prop("disabled",!0),0===a.length)$("#dialogPreference").find(".tip").html(""),n.prop("disabled",!1);else{for(var i=0,o=a.length;i div[data-index="'+l+'"]').text()+"] -> ["+r.substr(0,r.length-1)+"]: "+config.label.no_empty+"
    "}$("#dialogPreference").find(".tip").html(e),n.prop("disabled",!0)}}),$("#dialogPreference select").on("change",function(){var e=!1;$("#dialogPreference select").each(function(){$(this).val()!==$(this).data("value")&&(e=!0)});var t=$("#dialogPreference").closest(".dialog-main").find(".dialog-footer > button:eq(0)");e?t.prop("disabled",!1):t.prop("disabled",!0)}),$("#dialogPreference").dialog({modal:!0,height:280,width:800,title:config.label.preference,okText:config.label.apply,cancelText:config.label.cancel,afterOpen:function(){$("#dialogPreference").closest(".dialog-main").find(".dialog-footer > button:eq(0)").prop("disabled",!0)},ok:function(){var e=newWideRequest(),t=$("#dialogPreference"),o=t.find("input[name=fontFamily]"),l=t.find("input[name=fontSize]"),r=t.find("select[name=goFmt]"),s=t.find("input[name=GoBuildArgsForLinux]"),d=t.find("input[name=GoBuildArgsForWindows]"),u=t.find("input[name=GoBuildArgsForDarwin]"),c=t.find("input[name=workspace]"),f=t.find("input[name=password]"),g=t.find("input[name=email]"),p=t.find("select[name=locale]"),v=t.find("select[name=theme]"),m=t.find("input[name=editorFontFamily]"),h=t.find("input[name=editorFontSize]"),b=t.find("input[name=editorLineHeight]"),w=t.find("select[name=editorTheme]"),x=t.find("input[name=editorTabSize]"),y=t.find("select[name=keymap]");$.extend(e,{fontFamily:o.val(),fontSize:l.val(),goFmt:r.val(),GoBuildArgsForLinux:s.val(),GoBuildArgsForWindows:d.val(),GoBuildArgsForDarwin:u.val(),workspace:c.val(),password:f.val(),email:g.val(),locale:p.val(),theme:v.val(),editorFontFamily:m.val(),editorFontSize:h.val(),editorLineHeight:b.val(),editorTheme:w.val(),editorTabSize:x.val(),keymap:y.val()}),config.keymap!==y.val()&&window.location.reload(),$.ajax({type:"POST",url:config.context+"/preference",data:JSON.stringify(e),success:function(e,t,a){if(!e.succ)return!1;o.data("value",o.val()),l.data("value",l.val()),r.data("value",r.val()),s.data("value",s.val()),d.data("value",d.val()),u.data("value",u.val()),c.data("value",c.val()),f.data("value",f.val()),g.data("value",g.val()),p.data("value",p.val()),v.data("value",v.val()),m.data("value",m.val()),h.data("value",h.val()),b.data("value",b.val()),w.data("value",w.val()),x.data("value",x.val()),y.data("value",y.val()),config.keymap=y.val(),$("#dialogPreference").closest(".dialog-main").find(".dialog-footer > button:eq(0)").prop("disabled",!0),$("#themesLink").attr("href",config.staticServer+"/static/css/themes/"+v.val()+".css"),config.editorTheme=w.val();for(var n=0,i=editors.data.length;nLiyuan Li\n * @version 1.0.0.1, Dec 8, 2015\n */\nvar Tabs = function (obj) {\n obj._$tabsPanel = $(obj.id + \" > .tabs-panel\");\n obj._$tabs = $(obj.id + \" > .tabs\");\n obj._stack = [];\n\n this.obj = obj;\n this.obj.STACKSIZE = 64;\n\n this._init(obj);\n\n // DOM 元素存在时,应顺序入栈\n var _it = this;\n $(obj.id + \" > .tabs > div\").each(function () {\n var id = $(this).data(\"index\");\n if (obj._stack.length === _it.obj.STACKSIZE) {\n obj._stack.splice(0, 1);\n }\n if (obj._stack[obj._stack.length - 1] !== id) {\n _it.obj._stack.push(id);\n }\n });\n\n};\n\n$.extend(Tabs.prototype, {\n _init: function (obj) {\n var _that = this;\n\n obj._$tabs.on(\"click\", \"div\", function (event) {\n if ($(this).hasClass('current')) {\n return false;\n }\n\n var id = $(this).data(\"index\");\n _that.setCurrent(id);\n if (typeof (obj.clickAfter) === \"function\") {\n obj.clickAfter(id);\n }\n });\n\n obj._$tabs.on(\"click\", \".ico-close\", function (event) {\n var id = $(this).parent().data(\"index\"),\n isRemove = true;\n\n if (typeof obj.removeBefore === 'function') {\n isRemove = obj.removeBefore(id);\n }\n\n if (isRemove) {\n _that.del(id);\n }\n event.stopPropagation();\n });\n },\n _hasId: function (id) {\n var $tabs = this.obj._$tabs;\n if ($tabs.find('div[data-index=\"' + id + '\"]').length === 0) {\n return false;\n }\n return true;\n },\n add: function (data) {\n // 添加当前 tab\n if (this.getCurrentId() === data.id) {\n return false;\n }\n\n // 当前 tab 已经存在\n if (this._hasId(data.id)) {\n this.setCurrent(data.id);\n return false;\n }\n\n var $tabsPanel = this.obj._$tabsPanel,\n $tabs = this.obj._$tabs;\n\n $tabs.append('
    '\n + data.title + '
    ');\n $tabsPanel.append('
    ' + data.content\n + '
    ');\n\n this.setCurrent(data.id);\n\n if (typeof data.after === 'function') {\n data.after();\n }\n },\n del: function (id) {\n var $tabsPanel = this.obj._$tabsPanel,\n $tabs = this.obj._$tabs,\n stack = this.obj._stack,\n prevId = null;\n\n $tabs.children(\"div[data-index='\" + id + \"']\").remove();\n $tabsPanel.children(\"div[data-index='\" + id + \"']\").remove();\n\n // 移除堆栈中该 id\n for (var i = 0; i < stack.length; i++) {\n if (id === stack[i]) {\n stack.splice(i, 1);\n i--;\n }\n }\n\n prevId = stack[stack.length - 1];\n\n if (typeof this.obj.removeAfter === 'function') {\n this.obj.removeAfter(id, prevId);\n }\n\n this.setCurrent(prevId);\n },\n getCurrentId: function () {\n var $tabs = this.obj._$tabs;\n return $tabs.children(\".current\").data(\"index\");\n },\n setCurrent: function (path) {\n if (!path) {\n return false;\n }\n\n var $tabsPanel = this.obj._$tabsPanel,\n $tabs = this.obj._$tabs;\n\n var $currentTab = $tabs.children(\".current\");\n if ($currentTab.data(\"index\") === path) {\n return false;\n }\n\n // tab 顺序入栈,如栈满则清除\n var stack = this.obj._stack;\n if (stack.length === this.obj.STACKSIZE) {\n stack.splice(0, 1);\n }\n if (stack[stack.length - 1] !== path) {\n this.obj._stack.push(path);\n }\n\n $tabs.children(\"div\").removeClass(\"current\");\n $tabsPanel.children(\"div\").hide();\n\n $tabs.children('div[data-index=\"' + path + '\"]').addClass(\"current\");\n $tabsPanel.children('div[data-index=\"' + path + '\"]').show();\n\n if (typeof this.obj.setAfter === 'function') {\n this.obj.setAfter();\n }\n\n var id = this.getCurrentId();\n if (\"startPage\" === id) {\n return;\n }\n\n // set tree node selected\n var tId = tree.getTIdByPath(id);\n var node = tree.fileTree.getNodeByTId(tId);\n tree.fileTree.selectNode(node);\n wide.curNode = node;\n\n for (var i = 0, ii = editors.data.length; i < ii; i++) {\n if (editors.data[i].id === id) {\n wide.curEditor = editors.data[i].editor;\n break;\n }\n }\n\n if (wide.curEditor) {\n var cursor = wide.curEditor.getCursor();\n wide.curEditor.setCursor(cursor);\n wide.curEditor.focus();\n wide.refreshOutline();\n\n $(\".footer .cursor\").text('| ' + (cursor.line + 1) + ':' + (cursor.ch + 1) + ' |');\n }\n }\n});","/*\n * Copyright (c) 2014-2018, b3log.org & hacpai.com\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * @file dialog.js\n *\n * @author Liyuan Li\n * @version 1.0.0.1, Dec 8, 2015\n */\n(function ($) {\n $.fn.extend({\n dialog: {\n version: \"0.0.1.7\",\n author: \"v@b3log.org\"\n }\n });\n\n var dpuuid = new Date().getTime();\n var PROP_NAME = 'dialog';\n\n var Dialog = function () {\n this._defaults = {\n \"styleClass\": {\n \"background\": \"dialog-background\",\n \"panel\": \"dialog-panel\",\n \"main\": \"dialog-main\",\n \"footer\": \"dialog-footer\",\n \"headerMiddle\": \"dialog-header-middle\",\n \"headerBg\": \"dialog-header-bg\",\n \"closeIcon\": \"dialog-close-icon\",\n \"closeIconHover\": \"dialog-close-icon-hover\",\n \"title\": \"dialog-title\"\n }\n };\n };\n\n $.extend(Dialog.prototype, {\n _attach: function (target, settings) {\n if (!target.id) {\n this.uuid++;\n target.id = 'dp' + this.uuid;\n }\n var inst = this._newInst($(target));\n\n inst.settings = $.extend({}, settings || {});\n $.data(target, PROP_NAME, inst);\n this._init(target);\n },\n /* Create a new instance object. */\n _newInst: function (target) {\n // escape jQuery meta chars\n var id = target[0].id.replace(/([^A-Za-z0-9_])/g, '\\\\\\\\$1');\n return {\n id: id\n };\n },\n _getInst: function (target) {\n try {\n return $.data(target, PROP_NAME);\n } catch (err) {\n throw 'Missing instance data for this dialog';\n }\n },\n _destroyDialog: function (target) {\n var inst = $.dialog._getInst(target);\n var id = inst.id;\n $.removeData(target, PROP_NAME);\n\n $(target).prependTo(\"#\" + id + \"Wrap\").unwrap();\n $(target).removeAttr(\"style\");\n\n var styleClass = this._getDefaults($.dialog._defaults, inst.settings, \"styleClass\");\n $(\".\" + styleClass.background).remove();\n $(\"#\" + id + \"Dialog\").remove();\n },\n _init: function (target) {\n var inst = this._getInst(target);\n var id = inst.id,\n settings = inst.settings;\n var windowH = $(window).height(),\n windowW = $(window).width();\n var styleClass = this._getDefaults($.dialog._defaults, settings, \"styleClass\"),\n dialogH = settings.height ? settings.height : parseInt(windowH * 0.6),\n dialogW = settings.width ? settings.width : parseInt(windowW * 0.6);\n\n // get settings or default value.\n settings.title = settings.title ? settings.title : \"\";\n settings.okText = settings.okText ? settings.okText : \"Ok\";\n settings.cancelText = settings.cancelText ? settings.cancelText : \"Cancel\";\n\n // build HTML.\n var footerHTML = \"\",\n headerHTML = \"
    \"\n + settings.title + \"
    \";\n\n // Sets footerHTML.\n if (!settings.hideFooter) {\n if (!settings.hiddenOk) {\n footerHTML = \"\";\n }\n footerHTML += \"\";\n }\n\n var dialogHTML = \"
    \" + headerHTML\n + \"
    \"\n + footerHTML + \"
    \";\n\n var bgHTML = \"\";\n if (settings.modal && $(\".\" + styleClass.background).length === 0) {\n var bgHeight = windowH < document.documentElement.scrollHeight\n ? document.documentElement.scrollHeight : windowH;\n bgHTML = \"
    \";\n }\n\n // Package dialog.\n $(\"#\" + id).wrap(\"
    \");\n var cloneObj = $(target).clone(true);\n $(target).remove();\n $('body').append(bgHTML + dialogHTML);\n $($(\"#\" + id + \"Dialog .\" + styleClass.main + \" div\").get(0)).append(cloneObj);\n $(cloneObj).show();\n\n // Bind event.\n $(\"#\" + id + \"Dialog .\" + styleClass.closeIcon).bind(\"click\", function () {\n $.dialog._close(id, settings);\n });\n\n var $buttons = $(\"#\" + id + \"Dialog .\" + styleClass.footer + \" button\");\n $($buttons.get(1)).bind(\"click\", function () {\n $.dialog._close(id, settings);\n });\n\n $($buttons.get(0)).bind(\"click\", function () {\n if (settings.ok === undefined || settings.ok()) {\n $.dialog._close(id, settings);\n }\n });\n\n this._bindMove(id, styleClass.headerBg, dialogH, dialogW);\n\n // esc exit\n $(window).keyup(function (event) {\n if (event.keyCode === 27) {\n $.dialog._close(id, settings);\n }\n });\n\n $(window).resize(function () {\n var height = $(\"body\").height() > $(window).height() ? $(\"body\").height() : $(window).height();\n $(\".dialog-background\").height(height);\n });\n\n if (typeof settings.afterInit === \"function\") {\n settings.afterInit();\n }\n },\n _bindMove: function (id, className) {\n $(\"#\" + id + \"Dialog .\" + className).mousedown(function (event) {\n var _document = document;\n if (!event) {\n event = window.event;\n }\n var dialog = document.getElementById(id + \"Dialog\");\n var x = event.clientX - parseInt(dialog.style.left),\n y = event.clientY - parseInt(dialog.style.top);\n _document.ondragstart = \"return false;\";\n _document.onselectstart = \"return false;\";\n _document.onselect = \"document.selection.empty();\";\n\n if (this.setCapture) {\n this.setCapture();\n } else if (window.captureEvents) {\n window.captureEvents(Event.MOUSEMOVE | Event.MOUSEUP);\n }\n\n _document.onmousemove = function (event) {\n if (!event) {\n event = window.event;\n }\n var positionX = event.clientX - x,\n positionY = event.clientY - y;\n if (positionX < 0) {\n positionX = 0;\n }\n if (positionX > $(window).width() - $(dialog).width()) {\n positionX = $(window).width() - $(dialog).width();\n }\n if (positionY > $(window).height() - $(dialog).height()) {\n positionY = $(window).height() - $(dialog).height();\n }\n if (positionY < 0) {\n positionY = 0;\n }\n dialog.style.left = positionX + \"px\";\n dialog.style.top = positionY + \"px\";\n };\n\n _document.onmouseup = function () {\n if (this.releaseCapture) {\n this.releaseCapture();\n } else if (window.captureEvents) {\n window.captureEvents(Event.MOUSEMOVE | Event.MOUSEUP);\n }\n _document.onmousemove = null;\n _document.onmouseup = null;\n _document.ondragstart = null;\n _document.onselectstart = null;\n _document.onselect = null;\n };\n });\n },\n _close: function (id, settings) {\n if ($(\"#\" + id + \"Dialog\").css(\"display\") === \"none\") {\n return;\n }\n if (settings.close === undefined || settings.close()) {\n $(\"#\" + id + \"Dialog\").hide();\n if (settings.modal) {\n var styleClass = this._getDefaults($.dialog._defaults, settings, \"styleClass\");\n $(\".\" + styleClass.background).hide();\n }\n }\n },\n _closeDialog: function (target) {\n var inst = this._getInst(target);\n var id = inst.id,\n settings = inst.settings;\n $.dialog._close(id, settings);\n },\n _openDialog: function (target, msg) {\n var inst = this._getInst(target);\n var id = inst.id,\n settings = inst.settings,\n top = \"\", left = \"\",\n $dialog = $(\"#\" + id + \"Dialog\"),\n windowH = $(window).height(),\n windowW = $(window).width(),\n dialogH = settings.height ? settings.height : parseInt(windowH * 0.6),\n dialogW = settings.width ? settings.width : parseInt(windowW * 0.6);\n\n // Sets position.\n if (settings.position) {\n top = settings.position.top;\n left = settings.position.left;\n } else {\n // 20(footer) + 23(header)\n top = parseInt((windowH - dialogH - 43) / 2);\n if (top < 0) {\n top = 0;\n }\n left = parseInt((windowW - dialogW) / 2);\n }\n $dialog.css({\n \"top\": top + \"px\",\n \"left\": left + \"px\"\n }).show();\n\n if (settings.modal) {\n var styleClass = this._getDefaults($.dialog._defaults, settings, \"styleClass\");\n $(\".\" + styleClass.background).show();\n }\n\n if (typeof settings.afterOpen === \"function\") {\n settings.afterOpen(msg);\n }\n\n $(\"#\" + id + \"Dialog .dialog-footer button:eq(0)\").focus();\n },\n _updateDialog: function (target, data) {\n var inst = this._getInst(target);\n var id = inst.id,\n settings = inst.settings;\n var styleClass = this._getDefaults($.dialog._defaults, settings, \"styleClass\");\n $.extend(settings, data);\n var $dialog = $(\"#\" + id + \"Dialog\");\n if (data.position) {\n $dialog.css({\n \"top\": data.position.top,\n \"left\": data.position.left\n });\n }\n\n if (data.width) {\n $dialog.width(data.width + 26);\n $dialog.find(\".\" + styleClass.main + \" div\")[0].style.width = data.width + \"px\";\n $dialog.find(\".\" + styleClass.headerBg).width(data.width + 18);\n }\n\n if (data.height) {\n $dialog.find(\".\" + styleClass.main + \" div\")[0].style.height = data.height + \"px\";\n }\n\n if (data.title) {\n $dialog.find(\".\" + styleClass.title).html(data.title);\n }\n\n if (data.modal !== undefined) {\n if (data.modal) {\n $(\".\" + styleClass.background).show();\n } else {\n $(\".\" + styleClass.background).hide();\n }\n }\n\n if (data.hideFooter !== undefined) {\n if (data.hideFooter) {\n $dialog.find(\".\" + styleClass.footer).hide();\n } else {\n $dialog.find(\".\" + styleClass.footer).show();\n }\n }\n\n },\n _getDefaults: function (defaults, settings, key) {\n if (key === \"styleClass\") {\n if (settings.theme === \"default\" || settings.theme === undefined) {\n return defaults.styleClass;\n }\n settings.styleClass = {};\n for (var styleName in defaults[key]) {\n settings.styleClass[styleName] = settings.theme + \"-\" + defaults.styleClass[styleName];\n }\n } else if (key === \"height\" || key === \"width\") {\n if (settings[key] === null || settings[key] === undefined) {\n return \"auto\";\n } else {\n return settings[key] + \"px\";\n }\n } else {\n if (settings[key] === null || settings[key] === undefined) {\n return defaults[key];\n }\n }\n return settings[key];\n }\n });\n\n $.fn.dialog = function (options) {\n var otherArgs = Array.prototype.slice.call(arguments);\n\n if (typeof options === 'string') {\n otherArgs.shift();\n return $.dialog['_' + options + 'Dialog'].apply($.dialog, [this[0]].concat(otherArgs));\n }\n return this.each(function () {\n $.dialog._attach(this, options);\n });\n };\n\n $.dialog = new Dialog();\n\n // Add another global to avoid noConflict issues with inline event handlers\n window['DP_jQuery_' + dpuuid] = $;\n})(jQuery);","/*\n * Copyright (c) 2014-2018, b3log.org & hacpai.com\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * @file editor.js\n *\n * @author Liyuan Li\n * @author Liang Ding\n * @version 1.1.1.0, Jan 12, 2016\n */\nvar editors = {\n autocompleteMutex: false,\n data: [],\n tabs: {},\n getEditorByPath: function (path) {\n for (var i = 0, ii = editors.data.length; i < ii; i++) {\n if (editors.data[i].editor.options.path === path) {\n return editors.data[i].editor;\n }\n }\n },\n close: function () {\n $('.edit-panel .tabs > div[data-index=\"' + $('.edit-panel .frame').data('index') + ']').find('.ico-close').click();\n },\n closeOther: function () {\n var currentIndex = $(\".edit-panel .frame\").data(\"index\");\n\n // 设置全部关闭标识\n var removeData = [];\n $(\".edit-panel .tabs > div\").each(function (i) {\n if (currentIndex !== $(this).data(\"index\")) {\n removeData.push($(this).data(\"index\"));\n }\n });\n if (removeData.length === 0) {\n return false;\n }\n var firstIndex = removeData.splice(0, 1);\n $(\"#dialogCloseEditor\").data(\"removeData\", removeData);\n // 开始关闭\n $('.edit-panel .tabs > div[data-index=\"' + firstIndex + '\"]').find(\".ico-close\").click();\n },\n _removeAllMarker: function () {\n var removeData = $(\"#dialogCloseEditor\").data(\"removeData\");\n if (removeData && removeData.length > 0) {\n var removeIndex = removeData.splice(0, 1);\n $(\"#dialogCloseEditor\").data(\"removeData\", removeData);\n $('.edit-panel .tabs > div[data-index=\"' + removeIndex + '\"] .ico-close').click();\n }\n if (wide.curEditor) {\n wide.curEditor.focus();\n }\n },\n _initClose: function () {\n new ZeroClipboard($(\"#copyFilePath\"));\n\n // 关闭、关闭其他、关闭所有\n $(\".edit-panel\").on(\"mouseup\", '.tabs > div', function (event) {\n event.stopPropagation();\n\n if (event.button === 0) { // 左键\n $(\".edit-panel .frame\").hide();\n return false;\n }\n\n // event.button === 2 右键\n var left = event.screenX;\n if ($(\".side\").css(\"left\") === \"auto\" || $(\".side\").css(\"left\") === \"0px\") {\n left = event.screenX - $(\".side\").width();\n }\n $(\".edit-panel .frame\").show().css({\n \"left\": left + \"px\",\n \"top\": \"21px\"\n }).data('index', $(this).data(\"index\"));\n\n $(\"#copyFilePath\").attr('data-clipboard-text', $(this).find(\"span:eq(0)\").attr(\"title\"));\n return false;\n });\n },\n init: function () {\n $(\"#dialogCloseEditor\").dialog({\n \"modal\": true,\n \"height\": 90,\n \"width\": 260,\n \"title\": config.label.tip,\n \"hideFooter\": true,\n \"afterOpen\": function (fileName) {\n $(\"#dialogCloseEditor > div:eq(0)\").html(config.label.file\n + ' ' + fileName + '. ' + config.label.confirm_save + '?');\n $(\"#dialogCloseEditor button:eq(0)\").focus();\n },\n \"afterInit\": function () {\n $(\"#dialogCloseEditor button.save\").click(function () {\n var i = $(\"#dialogCloseEditor\").data(\"index\");\n wide.fmt(editors.data[i].id, editors.data[i].editor);\n editors.tabs.del(editors.data[i].id);\n $(\"#dialogCloseEditor\").dialog(\"close\");\n editors._removeAllMarker();\n });\n\n $(\"#dialogCloseEditor button.discard\").click(function () {\n var i = $(\"#dialogCloseEditor\").data(\"index\");\n editors.tabs.del(editors.data[i].id);\n $(\"#dialogCloseEditor\").dialog(\"close\");\n editors._removeAllMarker();\n });\n\n $(\"#dialogCloseEditor button.cancel\").click(function (event) {\n $(\"#dialogCloseEditor\").dialog(\"close\");\n editors._removeAllMarker();\n });\n }\n });\n\n editors.tabs = new Tabs({\n id: \".edit-panel\",\n setAfter: function () {\n if (wide.curEditor) {\n wide.curEditor.focus();\n }\n },\n clickAfter: function (id) {\n if (id === 'startPage') {\n wide.curEditor = undefined;\n $(\".footer .cursor\").text('');\n wide.refreshOutline();\n \n return false;\n }\n },\n removeBefore: function (id) {\n if (id === 'startPage') { // 当前关闭的 tab 是起始页\n editors._removeAllMarker();\n return true;\n }\n\n for (var i = 0, ii = editors.data.length; i < ii; i++) {\n if (editors.data[i].id === id) {\n if (editors.data[i].editor.doc.isClean()) {\n editors._removeAllMarker();\n return true;\n } else {\n $(\"#dialogCloseEditor\").dialog(\"open\", $('.edit-panel .tabs > div[data-index=\"'\n + editors.data[i].id + '\"] > span:eq(0)').text());\n $(\"#dialogCloseEditor\").data(\"index\", i);\n return false;\n }\n\n break;\n }\n }\n },\n removeAfter: function (id, nextId) {\n if ($(\".edit-panel .tabs > div\").length === 0) {\n // 全部 tab 都关闭时才 disables 菜单中“全部关闭”的按钮\n menu.disabled(['close-all']);\n }\n\n // 移除编辑器\n for (var i = 0, ii = editors.data.length; i < ii; i++) {\n if (editors.data[i].id === id) {\n editors.data.splice(i, 1);\n break;\n }\n }\n\n if (editors.data.length === 0) { // 起始页可能存在,所以用编辑器数据判断\n menu.disabled(['save-all', 'build', 'run', 'go-test', 'go-vet', 'go-get', 'go-install',\n 'find', 'find-next', 'find-previous', 'replace', 'replace-all',\n 'format', 'autocomplete', 'jump-to-decl', 'expr-info', 'find-usages', 'toggle-comment',\n 'edit']);\n\n // remove selected tree node\n tree.fileTree.cancelSelectedNode();\n wide.curNode = undefined;\n wide.curEditor = undefined;\n wide.refreshOutline();\n $(\".footer .cursor\").text('');\n return false;\n }\n\n if (!nextId) {\n // 编辑器区域不存在打开的 Tab\n // remove selected tree node\n tree.fileTree.cancelSelectedNode();\n wide.curNode = undefined;\n wide.curEditor = undefined;\n wide.refreshOutline();\n $(\".footer .cursor\").text('');\n return false;\n }\n\n if (nextId === editors.tabs.getCurrentId()) {\n // 关闭的不是当前编辑器\n return false;\n }\n }\n });\n\n this._initCodeMirrorHotKeys();\n this.openStartPage();\n this._initClose();\n },\n openStartPage: function () {\n wide.curEditor = undefined;\n wide.refreshOutline();\n $(\".footer .cursor\").text('');\n\n var dateFormat = function (time, fmt) {\n var date = new Date(time);\n var dateObj = {\n \"M+\": date.getMonth() + 1, //月份 \n \"d+\": date.getDate(), //日 \n \"h+\": date.getHours(), //小时 \n \"m+\": date.getMinutes(), //分 \n \"s+\": date.getSeconds(), //秒 \n \"q+\": Math.floor((date.getMonth() + 3) / 3), //季度 \n \"S\": date.getMilliseconds() //毫秒 \n };\n if (/(y+)/.test(fmt))\n fmt = fmt.replace(RegExp.$1, (date.getFullYear() + \"\").substr(4 - RegExp.$1.length));\n for (var k in dateObj)\n if (new RegExp(\"(\" + k + \")\").test(fmt)) {\n fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1)\n ? (dateObj[k]) : ((\"00\" + dateObj[k]).substr((\"\" + dateObj[k]).length)));\n }\n return fmt;\n };\n\n editors.tabs.add({\n id: \"startPage\",\n title: ' ' + config.label.start_page + '',\n content: '
    ',\n after: function () {\n $(\"#startPage\").load(config.context + '/start?sid=' + config.wideSessionId);\n $.ajax({\n url: \"https://hacpai.com/apis/articles?tags=wide,golang&p=1&size=20\",\n type: \"GET\",\n dataType: \"jsonp\",\n jsonp: \"callback\",\n success: function (data, textStatus) {\n var articles = data.articles;\n if (0 === articles.length) {\n return;\n }\n\n // 按 size = 20 取,但只保留最多 9 篇\n var length = articles.length;\n if (length > 9) {\n length = 9;\n }\n\n var listHTML = \"\");\n }\n });\n }\n });\n },\n getCurrentId: function () {\n var ret = editors.tabs.getCurrentId();\n if (ret === 'startPage') {\n ret = null;\n }\n \n return ret;\n },\n getCurrentPath: function () {\n var currentPath = $(\".edit-panel .tabs .current span:eq(0)\").attr(\"title\");\n if (currentPath === config.label.start_page) {\n currentPath = null;\n }\n return currentPath;\n },\n _initCodeMirrorHotKeys: function () {\n CodeMirror.registerHelper(\"hint\", \"go\", function (editor) {\n editor = wide.curEditor; // 使用当前编辑器覆盖实参,因为异步调用的原因,实参不一定正确\n var word = /[\\w$]+/;\n\n var cur = editor.getCursor(), curLine = editor.getLine(cur.line);\n\n var start = cur.ch, end = start;\n while (end < curLine.length && word.test(curLine.charAt(end))) {\n ++end;\n }\n while (start && word.test(curLine.charAt(start - 1))) {\n --start;\n }\n\n var request = newWideRequest();\n request.path = $(\".edit-panel .tabs .current > span:eq(0)\").attr(\"title\");\n request.code = editor.getValue();\n request.cursorLine = cur.line;\n request.cursorCh = cur.ch;\n\n var autocompleteHints = [];\n\n if (editors.autocompleteMutex && editor.state.completionActive) {\n return;\n }\n\n editors.autocompleteMutex = true;\n\n $.ajax({\n async: false, // 同步执行\n type: 'POST',\n url: config.context + '/autocomplete',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (data) {\n var autocompleteArray = data[1];\n\n if (autocompleteArray) {\n for (var i = 0; i < autocompleteArray.length; i++) {\n var displayText = '',\n text = autocompleteArray[i].name;\n\n switch (autocompleteArray[i].class) {\n case \"type\":\n displayText = ''// + autocompleteArray[i].class \n + '' + autocompleteArray[i].name + ' '\n + autocompleteArray[i].type + '';\n break;\n case \"const\":\n displayText = ''// + autocompleteArray[i].class \n + '' + autocompleteArray[i].name + ' '\n + autocompleteArray[i].type + '';\n break;\n case \"var\":\n displayText = ''// + autocompleteArray[i].class \n + '' + autocompleteArray[i].name + ' '\n + autocompleteArray[i].type + '';\n break;\n case \"package\":\n displayText = ''// + autocompleteArray[i].class \n + '' + autocompleteArray[i].name + ' '\n + autocompleteArray[i].type + '';\n break;\n case \"func\":\n displayText = ''// + autocompleteArray[i].class \n + '' + autocompleteArray[i].name + ''\n + autocompleteArray[i].type.substring(4) + '';\n text += '()';\n break;\n default:\n console.warn(\"Can't handle autocomplete [\" + autocompleteArray[i].class + \"]\");\n break;\n }\n\n autocompleteHints[i] = {\n displayText: displayText,\n text: text\n };\n }\n }\n\n editor.doc.markClean();\n $(\".edit-panel .tabs .current > span:eq(0)\").removeClass(\"changed\");\n }\n });\n\n setTimeout(function () {\n editors.autocompleteMutex = false;\n }, 20);\n\n return {list: autocompleteHints, from: CodeMirror.Pos(cur.line, start), to: CodeMirror.Pos(cur.line, end)};\n });\n\n CodeMirror.commands.autocompleteAfterDot = function (cm) {\n var mode = cm.getMode();\n if (mode && \"go\" !== mode.name) {\n return CodeMirror.Pass;\n }\n\n var token = cm.getTokenAt(cm.getCursor());\n\n if (\"comment\" === token.type || \"string\" === token.type) {\n return CodeMirror.Pass;\n }\n\n setTimeout(function () {\n if (!cm.state.completionActive) {\n cm.showHint({hint: CodeMirror.hint.go, completeSingle: false});\n }\n }, 50);\n\n return CodeMirror.Pass;\n };\n\n CodeMirror.commands.autocompleteAnyWord = function (cm) {\n cm.showHint({hint: CodeMirror.hint.auto});\n };\n\n CodeMirror.commands.gotoLine = function (cm) {\n $(\"#dialogGoLinePrompt\").dialog(\"open\");\n };\n\n // 用于覆盖 cm 默认绑定的某些快捷键功能.\n CodeMirror.commands.doNothing = function (cm) {\n };\n\n CodeMirror.commands.exprInfo = function (cm) {\n var cur = wide.curEditor.getCursor();\n\n var request = newWideRequest();\n request.path = $(\".edit-panel .tabs .current > span:eq(0)\").attr(\"title\");\n request.code = wide.curEditor.getValue();\n request.cursorLine = cur.line;\n request.cursorCh = cur.ch;\n\n $.ajax({\n type: 'POST',\n url: config.context + '/exprinfo',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (!result.succ) {\n return;\n }\n \n var position = wide.curEditor.cursorCoords();\n $(\"body\").append('
    ' + result.data + '
    ');\n }\n });\n };\n\n CodeMirror.commands.copyLinesDown = function (cm) {\n var content = '',\n selectoion = cm.listSelections()[0];\n\n var from = selectoion.anchor,\n to = selectoion.head;\n if (from.line > to.line) {\n from = selectoion.head;\n to = selectoion.anchor;\n }\n\n for (var i = from.line, max = to.line; i <= max; i++) {\n if (to.ch !== 0 || i !== max) { // 下一行选中为0时,不应添加内容\n content += '\\n' + cm.getLine(i);\n }\n }\n // 下一行选中为0时,应添加到上一行末\n var replaceToLine = to.line;\n if (to.ch === 0) {\n replaceToLine = to.line - 1;\n }\n cm.replaceRange(content, CodeMirror.Pos(replaceToLine));\n\n var offset = replaceToLine - from.line + 1;\n cm.setSelection(CodeMirror.Pos(from.line + offset, from.ch),\n CodeMirror.Pos(to.line + offset, to.ch));\n };\n\n CodeMirror.commands.copyLinesUp = function (cm) {\n var content = '',\n selectoion = cm.listSelections()[0];\n\n var from = selectoion.anchor,\n to = selectoion.head;\n if (from.line > to.line) {\n from = selectoion.head;\n to = selectoion.anchor;\n }\n\n for (var i = from.line, max = to.line; i <= max; i++) {\n if (to.ch !== 0 || i !== max) { // 下一行选中为0时,不应添加内容\n content += '\\n' + cm.getLine(i);\n }\n }\n\n // 下一行选中为0时,应添加到上一行末\n var replaceToLine = to.line;\n if (to.ch === 0) {\n replaceToLine = to.line - 1;\n }\n cm.replaceRange(content, CodeMirror.Pos(replaceToLine));\n\n cm.setSelection(CodeMirror.Pos(from.line, from.ch),\n CodeMirror.Pos(to.line, to.ch));\n };\n\n CodeMirror.commands.moveLinesUp = function (cm) {\n var selectoion = cm.listSelections()[0];\n\n var from = selectoion.anchor,\n to = selectoion.head;\n if (from.line > to.line) {\n from = selectoion.head;\n to = selectoion.anchor;\n }\n\n if (from.line === 0) {\n return false;\n }\n // 下一行选中为0时,应添加到上一行末\n var replaceToLine = to.line;\n if (to.ch === 0) {\n replaceToLine = to.line - 1;\n }\n cm.replaceRange('\\n' + cm.getLine(from.line - 1), CodeMirror.Pos(replaceToLine));\n if (from.line === 1) {\n // 移除第一行的换行\n cm.replaceRange('', CodeMirror.Pos(0, 0),\n CodeMirror.Pos(1, 0));\n } else {\n cm.replaceRange('', CodeMirror.Pos(from.line - 2, cm.getLine(from.line - 2).length),\n CodeMirror.Pos(from.line - 1, cm.getLine(from.line - 1).length));\n }\n\n cm.setSelection(CodeMirror.Pos(from.line - 1, from.ch),\n CodeMirror.Pos(to.line - 1, to.ch));\n };\n\n CodeMirror.commands.moveLinesDown = function (cm) {\n var selectoion = cm.listSelections()[0];\n\n var from = selectoion.anchor,\n to = selectoion.head;\n if (from.line > to.line) {\n from = selectoion.head;\n to = selectoion.anchor;\n }\n\n if (to.line === cm.lastLine()) {\n return false;\n }\n\n // 下一行选中为0时,应添加到上一行末\n var replaceToLine = to.line;\n if (to.ch === 0) {\n replaceToLine = to.line - 1;\n }\n // 把选中的下一行添加到选中区域的上一行\n if (from.line === 0) {\n cm.replaceRange(cm.getLine(replaceToLine + 1) + '\\n', CodeMirror.Pos(0, 0));\n } else {\n cm.replaceRange('\\n' + cm.getLine(replaceToLine + 1), CodeMirror.Pos(from.line - 1));\n }\n // 删除选中的下一行\n cm.replaceRange('', CodeMirror.Pos(replaceToLine + 1, cm.getLine(replaceToLine + 1).length),\n CodeMirror.Pos(replaceToLine + 2, cm.getLine(replaceToLine + 2).length));\n\n cm.setSelection(CodeMirror.Pos(from.line + 1, from.ch),\n CodeMirror.Pos(to.line + 1, to.ch));\n };\n\n CodeMirror.commands.jumpToDecl = function (cm) {\n var cur = wide.curEditor.getCursor();\n\n var request = newWideRequest();\n request.path = $(\".edit-panel .tabs .current > span:eq(0)\").attr(\"title\");\n request.code = wide.curEditor.getValue();\n request.cursorLine = cur.line;\n request.cursorCh = cur.ch;\n\n $.ajax({\n type: 'POST',\n url: config.context + '/find/decl',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (!result.succ) {\n return;\n }\n \n var data = result.data;\n\n var tId = tree.getTIdByPath(data.path);\n wide.curNode = tree.fileTree.getNodeByTId(tId);\n tree.fileTree.selectNode(wide.curNode);\n\n tree.openFile(wide.curNode, CodeMirror.Pos(data.cursorLine - 1, data.cursorCh - 1));\n }\n });\n };\n\n CodeMirror.commands.findUsages = function (cm) {\n var cur = wide.curEditor.getCursor();\n\n var request = newWideRequest();\n request.path = $(\".edit-panel .tabs .current > span:eq(0)\").attr(\"title\");\n request.code = wide.curEditor.getValue();\n request.cursorLine = cur.line;\n request.cursorCh = cur.ch;\n\n $.ajax({\n type: 'POST',\n url: config.context + '/find/usages',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (!result.succ) {\n return;\n }\n\n editors.appendSearch(result.data, 'usages', '');\n }\n });\n };\n\n CodeMirror.commands.selectIdentifier = function (cm) {\n var cur = cm.getCursor();\n var word = cm.findWordAt(cur);\n cm.extendSelection(word.anchor, word.head);\n };\n },\n appendSearch: function (data, type, key) {\n var searcHTML = '
      ',\n key = key.toLowerCase();\n\n for (var i = 0, ii = data.length; i < ii; i++) {\n var contents = '',\n lowerCaseContents = data[i].contents[0].toLowerCase(),\n matches = lowerCaseContents.split(key),\n startIndex = 0,\n endIndex = 0;\n for (var j = 0, max = matches.length; j < max; j++) {\n startIndex = endIndex + matches[j].length;\n endIndex = startIndex + key.length;\n var keyWord = data[i].contents[0].substring(startIndex, endIndex);\n if (keyWord !== '') {\n keyWord = '' + keyWord + '';\n }\n contents += data[i].contents[0].substring(startIndex - matches[j].length, startIndex) + keyWord;\n }\n\n searcHTML += '
    • '\n + contents + \"    \" + data[i].path\n + ' (' + data[i].line + ':'\n + data[i].ch + ')
    • ';\n }\n\n if (data.length === 0) {\n searcHTML += '
    • ' + config.label.search_no_match + '
    • ';\n }\n searcHTML += '
    ';\n\n var $search = $('.bottom-window-group .search'),\n title = config.label.find_usages;\n if (type === \"founds\") {\n title = config.label.search_text;\n }\n if ($search.find(\"ul\").length === 0) {\n bottomGroup.searchTab = new Tabs({\n id: \".bottom-window-group .search\",\n removeAfter: function (id, prevId) {\n if ($search.find(\"ul\").length === 1) {\n $search.find(\".tabs\").hide();\n }\n }\n });\n\n $search.on(\"click\", \"li\", function () {\n $search.find(\"li\").removeClass(\"selected\");\n $(this).addClass(\"selected\");\n });\n\n $search.on(\"dblclick\", \"li\", function () {\n var $it = $(this),\n tId = tree.getTIdByPath($it.attr(\"title\"));\n tree.openFile(tree.fileTree.getNodeByTId(tId));\n tree.fileTree.selectNode(wide.curNode);\n\n var line = $it.find(\".position\").data(\"line\") - 1;\n var cursor = CodeMirror.Pos(line, $it.find(\".position\").data(\"ch\") - 1);\n\n\n var editor = wide.curEditor;\n editor.setCursor(cursor);\n\n var half = Math.floor(editor.getScrollInfo().clientHeight / editor.defaultTextHeight() / 2);\n var cursorCoords = editor.cursorCoords({line: cursor.line - half, ch: 0}, \"local\");\n editor.scrollTo(0, cursorCoords.top);\n\n wide.curEditor.focus();\n });\n\n $search.find(\".tabs-panel > div\").append(searcHTML);\n\n $search.find(\".tabs .first\").text(title);\n } else {\n $search.find(\".tabs\").show();\n bottomGroup.searchTab.add({\n \"id\": \"search\" + (new Date()).getTime(),\n \"title\": title,\n \"content\": searcHTML\n });\n }\n\n // focus\n bottomGroup.tabs.setCurrent(\"search\");\n windows.flowBottom();\n $(\".bottom-window-group .search\").focus();\n },\n // 新建一个编辑器 Tab,如果已经存在 Tab 则切换到该 Tab.\n newEditor: function (data, cursor) {\n var id = wide.curNode.id;\n\n editors.tabs.add({\n id: id,\n title: '' + wide.curNode.name + '',\n content: ''\n });\n\n menu.undisabled(['save-all', 'close-all', 'build', 'run', 'go-test', 'go-vet', 'go-get', 'go-install',\n 'find', 'find-next', 'find-previous', 'replace', 'replace-all',\n 'format', 'autocomplete', 'jump-to-decl', 'expr-info', 'find-usages', 'toggle-comment',\n 'edit']);\n\n var textArea = document.getElementById(\"editor\" + id);\n textArea.value = data.content;\n\n var editor = CodeMirror.fromTextArea(textArea, {\n lineNumbers: true,\n autofocus: true,\n autoCloseBrackets: true,\n matchBrackets: true,\n highlightSelectionMatches: {showToken: /\\w/},\n rulers: [{color: \"#ccc\", column: 120, lineStyle: \"dashed\"}],\n styleActiveLine: true,\n theme: config.editorTheme,\n tabSize: config.editorTabSize,\n indentUnit: 4,\n indentWithTabs: true,\n foldGutter: true,\n cursorHeight: 1,\n path: data.path,\n readOnly: wide.curNode.isGOAPI,\n profile: 'xhtml', // define Emmet output profile\n extraKeys: {\n \"Ctrl-\\\\\": \"autocompleteAnyWord\",\n \".\": \"autocompleteAfterDot\",\n \"Ctrl-/\": 'toggleComment',\n \"Ctrl-I\": \"exprInfo\",\n \"Ctrl-L\": \"gotoLine\",\n \"Ctrl-E\": \"deleteLine\",\n \"Ctrl-D\": \"doNothing\", // 取消默认的 deleteLine\n \"Ctrl-B\": \"jumpToDecl\",\n \"Ctrl-S\": function () {\n wide.saveFile();\n },\n \"Shift-Ctrl-S\": function () {\n menu.saveAllFiles();\n },\n \"Shift-Alt-F\": function () {\n var currentPath = editors.getCurrentPath();\n if (!currentPath) {\n return false;\n }\n wide.fmt(currentPath, wide.curEditor);\n },\n \"Alt-F7\": \"findUsages\",\n \"Shift-Alt-Enter\": function () {\n if (windows.isMaxEditor) {\n windows.restoreEditor();\n } else {\n windows.maxEditor();\n }\n },\n \"Shift-Ctrl-Up\": \"copyLinesUp\",\n \"Shift-Ctrl-Down\": \"copyLinesDown\",\n \"Shift-Alt-Up\": \"moveLinesUp\",\n \"Shift-Alt-Down\": \"moveLinesDown\",\n \"Shift-Alt-J\": \"selectIdentifier\"\n }\n });\n\n if (\"text/html\" === data.mode) {\n emmetCodeMirror(editor);\n }\n\n editor.on('cursorActivity', function (cm) {\n $(\".edit-exprinfo\").remove();\n var cursor = cm.getCursor();\n\n $(\".footer .cursor\").text('| ' + (cursor.line + 1) + ':' + (cursor.ch + 1) + ' |');\n });\n\n editor.on('blur', function (cm) {\n $(\".edit-exprinfo\").remove();\n });\n\n editor.on('changes', function (cm) {\n if (cm.doc.isClean()) { // no modification\n $(\".edit-panel .tabs > div\").each(function () {\n var $span = $(this).find(\"span:eq(0)\");\n if ($span.attr(\"title\") === cm.options.path) {\n $span.removeClass(\"changed\");\n }\n });\n\n return;\n }\n\n // changed\n\n $(\".edit-panel .tabs > div\").each(function () {\n var $span = $(this).find(\"span:eq(0)\");\n if ($span.attr(\"title\") === cm.options.path) {\n $span.addClass(\"changed\");\n }\n });\n });\n\n editor.on('keydown', function (cm, evt) {\n if (evt.altKey || evt.ctrlKey || evt.shiftKey) {\n return;\n }\n\n var k = evt.which;\n\n if (k < 48) {\n return;\n }\n\n // hit [0-9]\n\n if (k > 57 && k < 65) {\n return;\n }\n\n // hit [a-z]\n\n if (k > 90) {\n return;\n }\n\n if (config.autocomplete) {\n if (0.5 <= Math.random()) {\n CodeMirror.commands.autocompleteAfterDot(cm);\n }\n }\n });\n\n editor.setSize('100%', $(\".edit-panel\").height() - $(\".edit-panel .tabs\").height());\n editor.setOption(\"mode\", data.mode);\n editor.setOption(\"gutters\", [\"CodeMirror-lint-markers\", \"CodeMirror-foldgutter\"]);\n\n if (\"wide\" !== config.keymap) {\n editor.setOption(\"keyMap\", config.keymap);\n }\n\n if (\"text/x-go\" === data.mode || \"application/json\" === data.mode) {\n editor.setOption(\"lint\", true);\n }\n\n if (\"application/xml\" === data.mode || \"text/html\" === data.mode) {\n editor.setOption(\"autoCloseTags\", true);\n }\n\n wide.curEditor = editor;\n editors.data.push({\n \"editor\": editor,\n \"id\": id\n });\n\n $(\".footer .cursor\").text('| ' + (cursor.line + 1) + ':' + (cursor.ch + 1) + ' |');\n\n var half = Math.floor(wide.curEditor.getScrollInfo().clientHeight / wide.curEditor.defaultTextHeight() / 2);\n var cursorCoords = wide.curEditor.cursorCoords({line: cursor.line - half, ch: 0}, \"local\");\n wide.curEditor.scrollTo(0, cursorCoords.top);\n\n editor.setCursor(cursor);\n editor.focus();\n }\n};","/*\n * Copyright (c) 2014-2018, b3log.org & hacpai.com\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * @file notification.js\n *\n * @author Liyuan Li\n * @author Liang Ding\n * @version 1.0.0.1, Dec 8, 2015\n */\nvar notification = {\n init: function () {\n $(\".notification-count\").click(function () {\n bottomGroup.tabs.setCurrent(\"notification\");\n $(\".bottom-window-group .notification\").focus();\n $(this).hide();\n });\n\n this._initWS();\n },\n _initWS: function () {\n var notificationWS = new ReconnectingWebSocket(config.channel + '/notification/ws?sid=' + config.wideSessionId);\n\n notificationWS.onopen = function () {\n console.log('[notification onopen] connected');\n };\n\n notificationWS.onmessage = function (e) {\n var data = JSON.parse(e.data),\n $notification = $('.bottom-window-group .notification > table'),\n notificationHTML = '';\n \n if (data.cmd && \"init-notification\" === data.cmd) {\n console.log('[notification onmessage]' + e.data);\n \n return;\n }\n\n notificationHTML += '' + data.severity\n + '' + data.message\n + '' + data.type + '';\n $notification.append(notificationHTML);\n\n $(\".notification-count\").show();\n };\n\n notificationWS.onclose = function (e) {\n console.log('[notification onclose] disconnected (' + e.code + ')');\n };\n\n notificationWS.onerror = function (e) {\n console.log('[notification onerror]');\n };\n }\n};","/*\n * Copyright (c) 2014-2018, b3log.org & hacpai.com\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * @file tree.js\n *\n * @author Liyuan Li\n * @author Liang Ding\n * @version 1.0.1.1, Dec 15, 2015\n */\nvar tree = {\n fileTree: undefined,\n // 递归获取当前节点展开中的最后一个节点\n getCurrentNodeLastNode: function (node) {\n var returnNode = node.children[node.children.length - 1];\n if (returnNode.open) {\n return tree.getCurrentNodeLastNode(returnNode);\n } else {\n return returnNode;\n }\n },\n // 按照树展现获取下一个节点\n getNextShowNode: function (node) {\n if (node.level !== 0) {\n if (node.getParentNode().getNextNode()) {\n return node.getParentNode().getNextNode();\n } else {\n return tree.getNextShowNode(node.getParentNode());\n }\n } else {\n return node.getNextNode();\n }\n },\n isBottomNode: function (node) {\n if (node.open) {\n return false;\n }\n\n if (node.getParentNode()) {\n if (node.getParentNode().isLastNode) {\n return tree.isBottomNode(node.getParentNode());\n } else {\n return false;\n }\n } else {\n if (node.isLastNode) {\n return true;\n } else {\n return false;\n }\n }\n },\n getTIdByPath: function (path) {\n var nodes = tree.fileTree.transformToArray(tree.fileTree.getNodes());\n for (var i = 0, ii = nodes.length; i < ii; i++) {\n if (nodes[i].path === path) {\n return nodes[i].tId;\n }\n }\n\n return undefined;\n },\n getOpenPaths: function () {\n var nodes = tree.fileTree.transformToArray(tree.fileTree.getNodes()),\n paths = [];\n for (var i = 0, ii = nodes.length; i < ii; i++) {\n if (nodes[i].open) {\n paths.push(nodes[i].path);\n }\n }\n\n return paths;\n },\n getAllParents: function (node, parents) {\n if (!parents) {\n parents = [];\n }\n\n if (!node || !node.parentTId) {\n return parents;\n } else {\n parents.push(node.getParentNode());\n return tree.getAllParents(node.getParentNode(), parents);\n }\n },\n isParents: function (tId, parentPath) {\n var node = tree.fileTree.getNodeByTId(tId);\n if (!node || !node.parentTId) {\n return false;\n } else {\n var parentNode = tree.fileTree.getNodeByTId(node.parentTId);\n if (node.path === parentPath) {\n return true;\n } else {\n return tree.isParents(parentNode.tId, parentPath);\n }\n }\n },\n isDir: function () {\n if (wide.curNode.iconSkin.indexOf(\"ico-ztree-dir\") === 0) {\n return true;\n }\n\n return false;\n },\n newFile: function (it) {\n if ($(it).hasClass(\"disabled\")) {\n return false;\n }\n\n $(\"#dialogNewFilePrompt\").dialog(\"open\");\n },\n newDir: function (it) {\n if ($(it).hasClass(\"disabled\")) {\n return false;\n }\n\n $(\"#dialogNewDirPrompt\").dialog(\"open\");\n },\n removeIt: function (it) {\n if (it) {\n if ($(it).hasClass(\"disabled\")) {\n return false;\n }\n } else {\n if (!wide.curNode.removable) {\n return false;\n }\n }\n\n $(\"#dialogRemoveConfirm\").dialog(\"open\");\n },\n rename: function (it) {\n if (it) {\n if ($(it).hasClass(\"disabled\")) {\n return false;\n }\n }\n\n $(\"#dialogRenamePrompt\").dialog(\"open\");\n },\n export: function () {\n var request = newWideRequest(),\n isSucc = false;\n request.path = wide.curNode.path;\n\n $.ajax({\n async: false,\n type: 'POST',\n url: config.context + '/file/zip/new',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (!result.succ) {\n $(\"#dialogAlert\").dialog(\"open\", result.msg);\n\n return false;\n }\n\n isSucc = true;\n }\n });\n\n if (isSucc) {\n window.open(config.context + '/file/zip?path=' + wide.curNode.path + \".zip\");\n }\n },\n crossCompile: function (platform) {\n var request = newWideRequest();\n request.path = wide.curNode.path;\n request.platform = platform;\n\n $.ajax({\n async: false,\n type: 'POST',\n url: config.context + '/cross',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (!result.succ) {\n $(\"#dialogAlert\").dialog(\"open\", result.msg);\n\n return false;\n }\n }\n });\n },\n decompress: function () {\n var request = newWideRequest();\n request.path = wide.curNode.path;\n\n $.ajax({\n async: false,\n type: 'POST',\n url: config.context + '/file/decompress',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (!result.succ) {\n $(\"#dialogAlert\").dialog(\"open\", result.msg);\n\n return false;\n }\n\n var dir = wide.curNode.getParentNode();\n tree.fileTree.reAsyncChildNodes(dir, \"refresh\");\n }\n });\n },\n refresh: function (it) {\n if (it) {\n if ($(it).hasClass(\"disabled\")) {\n return false;\n }\n }\n\n tree.fileTree.reAsyncChildNodes(wide.curNode, \"refresh\", true);\n },\n gitClone: function (it) {\n if (it) {\n if ($(it).hasClass(\"disabled\")) {\n return false;\n }\n }\n\n $(\"#dialogGitClonePrompt\").dialog('open');\n },\n import: function () {\n var request = newWideRequest();\n request.path = wide.curNode.path;\n\n $('#importFileupload').fileupload({\n url: \"/file/upload?path=\" + request.path,\n dataType: 'json',\n formData: request,\n done: function (e, result) {\n tree.fileTree.reAsyncChildNodes(wide.curNode, \"refresh\");\n },\n fail: function () {\n console.log(arguments);\n }\n });\n },\n init: function () {\n $(\"#file\").click(function () {\n $(this).focus();\n });\n\n var request = newWideRequest();\n\n $.ajax({\n type: 'POST',\n url: config.context + '/files',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (result.succ) {\n var $dirRMenu = $(\"#dirRMenu\");\n var $fileRMenu = $(\"#fileRMenu\");\n var setting = {\n data: {\n key: {\n title: \"path\"\n }\n },\n view: {\n showTitle: true,\n selectedMulti: false\n },\n async: {\n enable: true,\n url: config.context + \"/file/refresh\",\n autoParam: [\"path\"]\n },\n callback: {\n onDblClick: function (event, treeId, treeNode) {\n if (treeNode) {\n tree.openFile(treeNode);\n }\n },\n onRightClick: function (event, treeId, treeNode) {\n if (treeNode && !treeNode.isGOAPI) {\n menu.undisabled(['import', 'export', 'git-clone']);\n\n wide.curNode = treeNode;\n tree.fileTree.selectNode(treeNode);\n\n if (!tree.isDir()) { // if right click on a file\n if (wide.curNode.removable) {\n $fileRMenu.find(\".remove\").removeClass(\"disabled\");\n } else {\n $fileRMenu.find(\".remove\").addClass(\"disabled\");\n }\n\n if (-1 === wide.curNode.path.indexOf(\"zip\", wide.curNode.path.length - \"zip\".length)) { // !path.endsWith(\"zip\")\n $fileRMenu.find(\".decompress\").hide();\n } else {\n $fileRMenu.find(\".decompress\").show();\n }\n\n if (-1 === wide.curNode.path.indexOf(\"go\", wide.curNode.path.length - \"go\".length)) { // !path.endsWith(\"go\")\n $fileRMenu.find(\".linux64\").hide();\n } else {\n $fileRMenu.find(\".linux64\").show();\n }\n\n var top = event.clientY - 10;\n if ($fileRMenu.height() + top > $('.content').height()) {\n top = top - $fileRMenu.height() - 25;\n }\n $fileRMenu.css({\n \"top\": top + \"px\",\n \"left\": event.clientX + \"px\",\n \"display\": \"block\"\n }).show();\n\n $dirRMenu.hide();\n\n menu.disabled(['import', 'git-clone']);\n } else { // 右击了目录\n if (wide.curNode.removable) {\n $dirRMenu.find(\".remove\").removeClass(\"disabled\");\n } else {\n $dirRMenu.find(\".remove\").addClass(\"disabled\");\n }\n\n if (wide.curNode.creatable) {\n $dirRMenu.find(\".create\").removeClass(\"disabled\");\n } else {\n $dirRMenu.find(\".create\").addClass(\"disabled\");\n }\n\n var top = event.clientY - 10;\n if ($dirRMenu.height() + top > $('.content').height()) {\n top = top - $dirRMenu.height() - 25;\n }\n\n $dirRMenu.css({\n \"top\": top + \"px\",\n \"left\": event.clientX + \"px\",\n \"display\": \"block\"\n }).show();\n\n $fileRMenu.hide();\n }\n $(\"#files\").focus();\n }\n },\n onClick: function (event, treeId, treeNode, clickFlag) {\n if (treeNode) {\n wide.curNode = treeNode;\n tree.fileTree.selectNode(treeNode);\n\n menu.undisabled(['import', 'export', 'git-clone']);\n if (!tree.isDir()) {\n menu.disabled(['import', 'git-clone']);\n }\n\n $(\"#files\").focus();\n }\n }\n }\n };\n tree.fileTree = $.fn.zTree.init($(\"#files\"), setting, result.data.children);\n\n session.restore();\n }\n }\n });\n\n this._initSearch();\n this._initRename();\n },\n openFile: function (treeNode, cursor) {\n wide.curNode = treeNode;\n var tempCursor = cursor;\n\n for (var i = 0, ii = editors.data.length; i < ii; i++) {\n // 该节点文件已经打开\n if (editors.data[i].id === treeNode.path) {\n editors.tabs.setCurrent(treeNode.path);\n wide.curEditor = editors.data[i].editor;\n\n if (!tempCursor) {\n tempCursor = wide.curEditor.getCursor();\n }\n $(\".footer .cursor\").text('| ' + (tempCursor.line + 1) + ':' + (tempCursor.ch + 1) + ' |');\n\n wide.curEditor.setCursor(tempCursor);\n var half = Math.floor(wide.curEditor.getScrollInfo().clientHeight / wide.curEditor.defaultTextHeight() / 2);\n var cursorCoords = wide.curEditor.cursorCoords({line: tempCursor.line - half, ch: 0}, \"local\");\n wide.curEditor.scrollTo(0, cursorCoords.top);\n wide.curEditor.focus();\n\n wide.refreshOutline();\n return false;\n }\n }\n\n if (!tree.isDir()) {\n var request = newWideRequest();\n request.path = treeNode.path;\n\n $.ajax({\n async: false,\n type: 'POST',\n url: config.context + '/file',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (!result.succ) {\n $(\"#dialogAlert\").dialog(\"open\", result.msg);\n\n return false;\n }\n\n var data = result.data;\n\n if (!data.mode) {\n var mode = CodeMirror.findModeByFileName(treeNode.path);\n if (mode) {\n data.mode = mode.mime;\n } else {\n data.mode = 'text/plain';\n }\n }\n\n if (!data.mode) {\n console.error(\"Can't find mode by file name [\" + treeNode.path + \"]\");\n }\n\n if (\"img\" === data.mode) { // 是图片文件的话新建 tab 打开\n // 最好是开 tab,但这个最终取决于浏览器设置\n var w = window.open(config.context + data.path);\n return false;\n }\n\n if (!tempCursor) {\n tempCursor = CodeMirror.Pos(0, 0);\n }\n\n editors.newEditor(data, tempCursor);\n\n wide.refreshOutline();\n }\n });\n }\n },\n _initSearch: function () {\n $(\"#dialogSearchForm > input:eq(0)\").keyup(function (event) {\n var $okBtn = $(this).closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\");\n if (event.which === 13 && !$okBtn.prop(\"disabled\")) {\n $okBtn.click();\n }\n\n if ($.trim($(this).val()) === \"\") {\n $okBtn.prop(\"disabled\", true);\n } else {\n $okBtn.prop(\"disabled\", false);\n }\n });\n\n $(\"#dialogSearchForm > input:eq(1)\").keyup(function (event) {\n var $okBtn = $(this).closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\");\n if (event.which === 13 && !$okBtn.prop(\"disabled\")) {\n $okBtn.click();\n }\n });\n\n $(\"#dialogSearchForm\").dialog({\n \"modal\": true,\n \"height\": 80,\n \"width\": 260,\n \"title\": config.label.search,\n \"okText\": config.label.search,\n \"cancelText\": config.label.cancel,\n \"afterOpen\": function () {\n $(\"#dialogSearchForm > input:eq(0)\").val('').focus();\n $(\"#dialogSearchForm > input:eq(1)\").val('');\n $(\"#dialogSearchForm\").closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\").prop(\"disabled\", true);\n },\n \"ok\": function () {\n var request = newWideRequest();\n\n if (!wide.curNode) {\n request.dir = \"\";\n } else {\n request.dir = wide.curNode.path;\n }\n\n request.text = $(\"#dialogSearchForm > input:eq(0)\").val();\n request.extension = $(\"#dialogSearchForm > input:eq(1)\").val();\n\n $.ajax({\n type: 'POST',\n url: config.context + '/file/search/text',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (!result.succ) {\n return;\n }\n\n $(\"#dialogSearchForm\").dialog(\"close\");\n editors.appendSearch(result.data, 'founds', request.text);\n }\n });\n }\n });\n },\n _initRename: function () {\n $(\"#dialogRenamePrompt\").dialog({\n \"modal\": true,\n \"height\": 52,\n \"width\": 260,\n \"title\": config.label.rename,\n \"okText\": config.label.rename,\n \"cancelText\": config.label.cancel,\n \"afterOpen\": function () {\n $(\"#dialogRenamePrompt\").closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\").prop(\"disabled\", true);\n $(\"#dialogRenamePrompt > input\").val(wide.curNode.name).select().focus();\n },\n \"ok\": function () {\n var name = $(\"#dialogRenamePrompt > input\").val(),\n request = newWideRequest();\n\n request.oldPath = wide.curNode.path;\n request.newPath = wide.curNode.path.substring(0, wide.curNode.path.lastIndexOf(\"/\") + 1) + name;\n\n $.ajax({\n type: 'POST',\n url: config.context + '/file/rename',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (!result.succ) {\n $(\"#dialogRenamePrompt\").dialog(\"close\");\n bottomGroup.tabs.setCurrent(\"notification\");\n windows.flowBottom();\n $(\".bottom-window-group .notification\").focus();\n return false;\n }\n\n $(\"#dialogRenamePrompt\").dialog(\"close\");\n }\n });\n }\n });\n }\n};","/*\n * Copyright (c) 2014-2018, b3log.org & hacpai.com\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * @file wide.js\n *\n * @author Liyuan Li\n * @author Liang Ding\n * @version 1.0.0.1, Dec 8, 2015\n */\nvar wide = {\n curNode: undefined,\n curEditor: undefined,\n curProcessId: undefined, // curent running process id (pid)\n refreshOutline: function () {\n if (!wide.curEditor ||\n (wide.curEditor && wide.curEditor.doc.getMode().name !== \"go\")) {\n $(\"#outline\").html('');\n return false;\n }\n\n var request = newWideRequest();\n request.code = wide.curEditor.getValue();\n\n $.ajax({\n type: 'POST',\n async: false,\n url: config.context + '/outline',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (!result.succ) {\n return;\n }\n\n var data = result.data;\n\n var outlineHTML = '
      ',\n decls = ['constDecls', 'varDecls', 'funcDecls',\n 'structDecls', 'interfaceDecls', 'typeDecls'];\n\n for (var i = 0, max = decls.length; i < max; i++) {\n var key = decls[i];\n for (var j = 0, maxj = data[key].length; j < maxj; j++) {\n var obj = data[key][j];\n outlineHTML += '
    • ' + obj.Name + '
    • ';\n }\n }\n $(\"#outline\").html(outlineHTML + '
    ');\n\n $(\"#outline li\").dblclick(function () {\n var $it = $(this),\n cursor = CodeMirror.Pos($it.data('line'), $it.data(\"ch\"));\n\n var editor = wide.curEditor;\n editor.setCursor(cursor);\n\n var half = Math.floor(editor.getScrollInfo().clientHeight / editor.defaultTextHeight() / 2);\n var cursorCoords = editor.cursorCoords({line: cursor.line - half, ch: 0}, \"local\");\n editor.scrollTo(0, cursorCoords.top);\n\n editor.focus();\n });\n }\n });\n },\n _initDialog: function () {\n $(\".dialog-prompt > input\").keyup(function (event) {\n var $okBtn = $(this).closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\");\n if (event.which === 13 && !$okBtn.prop(\"disabled\")) {\n $okBtn.click();\n }\n\n if ($.trim($(this).val()) === \"\") {\n $okBtn.prop(\"disabled\", true);\n } else {\n $okBtn.prop(\"disabled\", false);\n }\n });\n\n $(\"#dialogAlert\").dialog({\n \"modal\": true,\n \"height\": 40,\n \"width\": 350,\n \"title\": config.label.tip,\n \"hiddenOk\": true,\n \"cancelText\": config.label.confirm,\n \"afterOpen\": function (msg) {\n $(\"#dialogAlert\").html(msg);\n }\n });\n\n $(\"#dialogRemoveConfirm\").dialog({\n \"modal\": true,\n \"height\": 36,\n \"width\": 260,\n \"title\": config.label.delete,\n \"okText\": config.label.delete,\n \"cancelText\": config.label.cancel,\n \"afterOpen\": function () {\n $(\"#dialogRemoveConfirm > b\").html('\"' + wide.curNode.name + '\"');\n },\n \"ok\": function () {\n var request = newWideRequest();\n request.path = wide.curNode.path;\n\n $.ajax({\n type: 'POST',\n url: config.context + '/file/remove',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (!result.succ) {\n $(\"#dialogRemoveConfirm\").dialog(\"close\");\n bottomGroup.tabs.setCurrent(\"notification\");\n windows.flowBottom();\n $(\".bottom-window-group .notification\").focus();\n return false;\n }\n\n $(\"#dialogRemoveConfirm\").dialog(\"close\");\n }\n });\n }\n });\n\n $(\"#dialogNewFilePrompt\").dialog({\n \"modal\": true,\n \"height\": 52,\n \"width\": 260,\n \"title\": config.label.create_file,\n \"okText\": config.label.create,\n \"cancelText\": config.label.cancel,\n \"afterOpen\": function () {\n $(\"#dialogNewFilePrompt > input\").val('').focus();\n $(\"#dialogNewFilePrompt\").closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\").prop(\"disabled\", true);\n },\n \"ok\": function () {\n var request = newWideRequest(),\n name = $(\"#dialogNewFilePrompt > input\").val();\n\n request.path = wide.curNode.path + \"/\" + name;\n request.fileType = \"f\";\n\n $.ajax({\n type: 'POST',\n url: config.context + '/file/new',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (!result.succ) {\n $(\"#dialogNewFilePrompt\").dialog(\"close\");\n bottomGroup.tabs.setCurrent(\"notification\");\n windows.flowBottom();\n $(\".bottom-window-group .notification\").focus();\n return false;\n }\n\n $(\"#dialogNewFilePrompt\").dialog(\"close\");\n\n setTimeout(function () { // Delay, waiting the file change notified and then open it\n var tId = tree.getTIdByPath(request.path);\n tree.openFile(tree.fileTree.getNodeByTId(tId));\n tree.fileTree.selectNode(wide.curNode);\n }, 100);\n }\n });\n }\n });\n\n $(\"#dialogNewDirPrompt\").dialog({\n \"modal\": true,\n \"height\": 52,\n \"width\": 260,\n \"title\": config.label.create_dir,\n \"okText\": config.label.create,\n \"cancelText\": config.label.cancel,\n \"afterOpen\": function () {\n $(\"#dialogNewDirPrompt > input\").val('').focus();\n $(\"#dialogNewDirPrompt\").closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\").prop(\"disabled\", true);\n },\n \"ok\": function () {\n var name = $(\"#dialogNewDirPrompt > input\").val(),\n request = newWideRequest();\n\n request.path = wide.curNode.path + \"/\" + name;\n request.fileType = \"d\";\n\n $.ajax({\n type: 'POST',\n url: config.context + '/file/new',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (!result.succ) {\n $(\"#dialogNewDirPrompt\").dialog(\"close\");\n bottomGroup.tabs.setCurrent(\"notification\");\n windows.flowBottom();\n $(\".bottom-window-group .notification\").focus();\n return false;\n }\n\n $(\"#dialogNewDirPrompt\").dialog(\"close\");\n }\n });\n }\n });\n\n $(\"#dialogGoFilePrompt\").dialog({\n \"modal\": true,\n \"height\": 320,\n \"width\": 660,\n \"title\": config.label.goto_file,\n \"okText\": config.label.go,\n \"cancelText\": config.label.cancel,\n \"afterInit\": function () {\n $(\"#dialogGoFilePrompt\").on(\"dblclick\", \"li\", function () {\n var tId = tree.getTIdByPath($(this).find(\".ft-small\").text());\n tree.openFile(tree.fileTree.getNodeByTId(tId));\n tree.fileTree.selectNode(wide.curNode);\n $(\"#dialogGoFilePrompt\").dialog(\"close\");\n wide.curEditor.focus();\n });\n\n $(\"#dialogGoFilePrompt\").on(\"click\", \"li\", function () {\n var $list = $(\"#dialogGoFilePrompt > .list\");\n $list.find(\"li\").removeClass(\"selected\");\n $list.data(\"index\", $(this).data(\"index\"));\n $(this).addClass(\"selected\");\n });\n\n hotkeys.bindList($(\"#dialogGoFilePrompt > input\"), $(\"#dialogGoFilePrompt > .list\"), function ($selected) {\n var tId = tree.getTIdByPath($selected.find(\".ft-small\").text());\n tree.openFile(tree.fileTree.getNodeByTId(tId));\n tree.fileTree.selectNode(wide.curNode);\n $(\"#dialogGoFilePrompt\").dialog(\"close\");\n wide.curEditor.focus();\n });\n\n $(\"#dialogGoFilePrompt > input\").bind(\"input\", function () {\n var name = $(\"#dialogGoFilePrompt > input\").val();\n\n var request = newWideRequest();\n request.path = '';\n request.name = '*' + name + '*';\n if (wide.curNode) {\n request.path = wide.curNode.path;\n }\n\n $.ajax({\n type: 'POST',\n url: config.context + '/file/find/name',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (!result.succ) {\n return;\n }\n\n var data = result.data;\n\n var goFileHTML = '';\n for (var i = 0, max = data.length; i < max; i++) {\n var path = data[i].path,\n name = path.substr(path.lastIndexOf(\"/\") + 1),\n icoSkin = wide.getClassBySuffix(name.split(\".\")[1]);\n if (i === 0) {\n goFileHTML += '
  • '\n + name + '    '\n + path + '
  • ';\n } else {\n goFileHTML += '
  • '\n + name + '    '\n + path + '
  • ';\n }\n }\n\n $(\"#dialogGoFilePrompt > ul\").html(goFileHTML);\n }\n });\n });\n },\n \"afterOpen\": function () {\n $(\"#dialogGoFilePrompt > input\").val('').focus();\n $(\"#dialogGoFilePrompt\").closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\").prop(\"disabled\", true);\n $(\"#dialogGoFilePrompt .list\").html('').data(\"index\", 0);\n },\n \"ok\": function () {\n var tId = tree.getTIdByPath($(\"#dialogGoFilePrompt .selected .ft-small\").text());\n tree.openFile(tree.fileTree.getNodeByTId(tId));\n tree.fileTree.selectNode(wide.curNode);\n $(\"#dialogGoFilePrompt\").dialog(\"close\");\n wide.curEditor.focus();\n }\n });\n\n $(\"#dialogGoLinePrompt\").dialog({\n \"modal\": true,\n \"height\": 52,\n \"width\": 260,\n \"title\": config.label.goto_line,\n \"okText\": config.label.go,\n \"cancelText\": config.label.cancel,\n \"afterOpen\": function () {\n $(\"#dialogGoLinePrompt > input\").val('').focus();\n $(\"#dialogGoLinePrompt\").closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\").prop(\"disabled\", true);\n },\n \"ok\": function () {\n var line = parseInt($(\"#dialogGoLinePrompt > input\").val()) - 1;\n $(\"#dialogGoLinePrompt\").dialog(\"close\");\n\n var editor = wide.curEditor;\n var cursor = editor.getCursor();\n\n editor.setCursor(CodeMirror.Pos(line, cursor.ch));\n\n var half = Math.floor(editor.getScrollInfo().clientHeight / editor.defaultTextHeight() / 2);\n var cursorCoords = editor.cursorCoords({line: line - half, ch: cursor.ch}, \"local\");\n editor.scrollTo(0, cursorCoords.top);\n\n editor.focus();\n }\n });\n\n $(\"#dialogGitClonePrompt\").dialog({\n \"modal\": true,\n \"height\": 52,\n \"width\": 360,\n \"title\": config.label.git_clone,\n \"okText\": config.label.confirm,\n \"cancelText\": config.label.cancel,\n \"afterOpen\": function () {\n $(\"#dialogGitClonePrompt > input\").val('').focus();\n $(\"#dialogGitClonePrompt\").closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\").prop(\"disabled\", true);\n },\n \"ok\": function () {\n $(\"#dialogGitClonePrompt\").dialog(\"close\");\n\n var request = newWideRequest();\n request.path = wide.curNode.path;\n request.repository = $(\"#dialogGitClonePrompt > input\").val();\n\n $.ajax({\n type: 'POST',\n url: config.context + '/git/clone',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n }\n });\n }\n });\n },\n _initWS: function () {\n var outputWS = new ReconnectingWebSocket(config.channel + '/output/ws?sid=' + config.wideSessionId);\n outputWS.onopen = function () {\n console.log('[output onopen] connected');\n };\n\n outputWS.onmessage = function (e) {\n console.log('[output onmessage]' + e.data);\n var data = JSON.parse(e.data);\n\n if (goLintFound) {\n goLintFound = [];\n }\n\n if ('run' === data.nextCmd) {\n var request = newWideRequest();\n request.executable = data.executable;\n\n $.ajax({\n type: 'POST',\n url: config.context + '/run',\n data: JSON.stringify(request),\n dataType: \"json\"\n });\n }\n\n switch (data.cmd) {\n case 'run':\n var content = $('.bottom-window-group .output > div').html();\n if (!wide.curProcessId || '' === content) {\n bottomGroup.fillOutput(content + '
    ' + data.output + '
    ');\n } else {\n bottomGroup.fillOutput(content.replace(/<\\/pre>$/g, data.output + ''));\n }\n\n wide.curProcessId = data.pid;\n\n break;\n case 'run-done':\n bottomGroup.fillOutput($('.bottom-window-group .output > div').html().replace(/<\\/pre>$/g, data.output + ''));\n\n wide.curProcessId = undefined;\n $(\"#buildRun\").removeClass(\"ico-stop\")\n .addClass(\"ico-buildrun\").attr(\"title\", config.label.build_n_run);\n\n break;\n case 'start-build':\n case 'start-test':\n case 'start-vet':\n case 'start-install':\n case 'start-get':\n case 'start-git_clone':\n bottomGroup.fillOutput(data.output);\n\n break;\n case 'go test':\n case 'go vet':\n case 'go install':\n case 'go get':\n bottomGroup.fillOutput($('.bottom-window-group .output > div').html() + data.output);\n\n break;\n case 'git clone':\n bottomGroup.fillOutput($('.bottom-window-group .output > div').html() + data.output);\n tree.fileTree.reAsyncChildNodes(wide.curNode, \"refresh\", false);\n\n break;\n case 'build':\n case 'cross-build':\n bottomGroup.fillOutput($('.bottom-window-group .output > div').html() + data.output);\n\n if (data.lints) { // has build error\n var files = {};\n\n for (var i = 0; i < data.lints.length; i++) {\n var lint = data.lints[i];\n\n goLintFound.push({from: CodeMirror.Pos(lint.lineNo, 0),\n to: CodeMirror.Pos(lint.lineNo, 0),\n message: lint.msg, severity: lint.severity});\n\n files[lint.file] = lint.file;\n }\n\n $(\"#buildRun\").removeClass(\"ico-stop\")\n .addClass(\"ico-buildrun\").attr(\"title\", config.label.build_n_run);\n\n // trigger gutter lint\n for (var path in files) {\n var editor = editors.getEditorByPath(path);\n CodeMirror.signal(editor, \"change\", editor);\n }\n } else {\n if ('cross-build' === data.cmd) {\n var request = newWideRequest(),\n path = null;\n request.path = data.executable;\n request.name = data.name;\n\n $.ajax({\n async: false,\n type: 'POST',\n url: config.context + '/file/zip/new',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (!result.succ) {\n $(\"#dialogAlert\").dialog(\"open\", result.msg);\n\n return false;\n }\n\n path = result.data;\n }\n });\n\n if (path) {\n window.open(config.context + '/file/zip?path=' + path + \".zip\");\n }\n }\n }\n\n break;\n }\n };\n outputWS.onclose = function (e) {\n console.log('[output onclose] disconnected (' + e.code + ')');\n };\n outputWS.onerror = function (e) {\n console.log('[output onerror]');\n };\n },\n _initFooter: function () {\n $(\".footer .cursor\").dblclick(function () {\n $(\"#dialogGoLinePrompt\").dialog(\"open\");\n });\n },\n init: function () {\n this._initFooter();\n\n this._initWS();\n\n // 点击隐藏弹出层\n $(\"body\").bind(\"mouseup\", function (event) {\n // MAC 右键文件树失效\n if (event.which === 3) {\n return false;\n }\n\n $(\".frame\").hide();\n\n if (!($(event.target).closest(\".frame\").length === 1 || event.target.className === \"frame\")) {\n $(\".menu > ul > li\").unbind().removeClass(\"selected\");\n menu.subMenu();\n }\n });\n\n // 刷新提示\n window.onbeforeunload = function () {\n if (editors.data.length > 0) {\n return config.label.confirm_save;\n }\n };\n\n // 禁止鼠标右键菜单\n document.oncontextmenu = function () {\n return false;\n };\n\n this._initDialog();\n },\n _save: function (path, editor) {\n if (!path) {\n return false;\n }\n\n var request = newWideRequest();\n request.file = path;\n request.code = editor.getValue();\n\n $.ajax({\n type: 'POST',\n url: config.context + '/file/save',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n // reset the save state\n editor.doc.markClean();\n $(\".edit-panel .tabs > div\").each(function () {\n var $span = $(this).find(\"span:eq(0)\");\n if ($span.attr(\"title\") === path) {\n $span.removeClass(\"changed\");\n }\n });\n }\n });\n },\n saveFile: function () {\n var path = editors.getCurrentPath();\n if (!path) {\n return false;\n }\n\n var editor = wide.curEditor;\n if (editor.doc.isClean()) { // no modification\n return false;\n }\n\n if (\"text/x-go\" === editor.getOption(\"mode\")) {\n wide.gofmt(path, wide.curEditor); // go fmt will save\n\n // build the file at once\n var request = newWideRequest();\n request.file = path;\n request.code = editor.getValue();\n request.nextCmd = \"\"; // build only, no following operation\n $.ajax({\n type: 'POST',\n url: config.context + '/build',\n data: JSON.stringify(request),\n dataType: \"json\",\n beforeSend: function () {\n bottomGroup.resetOutput();\n },\n success: function (result) {\n }\n });\n\n // refresh outline\n wide.refreshOutline();\n\n return;\n }\n\n wide._save(path, wide.curEditor);\n },\n stop: function () {\n if ($(\"#buildRun\").hasClass(\"ico-buildrun\")) {\n menu.run();\n return false;\n }\n\n if (!wide.curProcessId) {\n return false;\n }\n\n var request = newWideRequest();\n request.pid = wide.curProcessId;\n\n $.ajax({\n type: 'POST',\n url: config.context + '/stop',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n $(\"#buildRun\").removeClass(\"ico-stop\")\n .addClass(\"ico-buildrun\").attr(\"title\", config.label.build_n_run);\n }\n });\n },\n gofmt: function (path, editor) {\n var cursor = editor.getCursor();\n var scrollInfo = editor.getScrollInfo();\n\n var request = newWideRequest();\n request.file = path;\n request.code = editor.getValue();\n request.cursorLine = cursor.line;\n request.cursorCh = cursor.ch;\n\n $.ajax({\n async: false, // sync\n type: 'POST',\n url: config.context + '/go/fmt',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (result.succ) {\n editor.setValue(result.data.code);\n editor.setCursor(cursor);\n editor.scrollTo(null, scrollInfo.top);\n\n wide._save(path, editor);\n }\n }\n });\n },\n fmt: function (path, editor) {\n var mode = editor.getOption(\"mode\");\n\n var cursor = editor.getCursor();\n var scrollInfo = editor.getScrollInfo();\n\n var request = newWideRequest();\n request.file = path;\n request.code = editor.getValue();\n request.cursorLine = cursor.line;\n request.cursorCh = cursor.ch;\n\n var formatted = null;\n\n switch (mode) {\n case \"text/x-go\":\n $.ajax({\n async: false, // sync\n type: 'POST',\n url: config.context + '/go/fmt',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (result.succ) {\n formatted = result.data.code;\n }\n }\n });\n\n break;\n case \"text/html\":\n formatted = html_beautify(editor.getValue());\n break;\n case \"text/javascript\":\n case \"application/json\":\n formatted = js_beautify(editor.getValue());\n break;\n case \"text/css\":\n formatted = css_beautify(editor.getValue());\n break;\n default :\n break;\n }\n\n if (formatted) {\n editor.setValue(formatted);\n editor.setCursor(cursor);\n editor.scrollTo(null, scrollInfo.top);\n\n wide._save(path, editor);\n }\n },\n getClassBySuffix: function (suffix) {\n var iconSkin = \"ico-ztree-other \";\n switch (suffix) {\n case \"html\":\n case \"htm\":\n iconSkin = \"ico-ztree-html \";\n break;\n case \"go\":\n iconSkin = \"ico-ztree-go \";\n break;\n case \"css\":\n iconSkin = \"ico-ztree-css \";\n break;\n case \"txt\":\n iconSkin = \"ico-ztree-text \";\n break;\n case \"sql\":\n iconSkin = \"ico-ztree-sql \";\n break;\n case \"properties\":\n iconSkin = \"ico-ztree-pro \";\n break;\n case \"md\":\n iconSkin = \"ico-ztree-md \";\n break;\n case \"js\", \"json\":\n iconSkin = \"ico-ztree-js \";\n break;\n case \"xml\":\n iconSkin = \"ico-ztree-xml \";\n break;\n case \"jpg\":\n case \"jpeg\":\n case \"bmp\":\n case \"gif\":\n case \"png\":\n case \"svg\":\n case \"ico\":\n iconSkin = \"ico-ztree-img \";\n break;\n }\n\n return iconSkin;\n }\n};\n\n$(document).ready(function () {\n wide.init();\n tree.init();\n menu.init();\n hotkeys.init();\n session.init();\n notification.init();\n editors.init();\n windows.init();\n bottomGroup.init();\n});\n","/*\n * Copyright (c) 2014-2018, b3log.org & hacpai.com\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * @file session.js\n *\n * @author Liyuan Li\n * @version 1.1.0.1, Dec 8, 2015\n */\nvar session = {\n init: function () {\n this._initWS();\n\n var getLayoutState = function (paneState) {\n var state = 'normal';\n if (paneState.isClosed) {\n state = 'min';\n } else if (paneState.size >= $('body').width()) {\n state = 'max';\n }\n\n return state;\n };\n\n // save session content every 30 seconds\n setInterval(function () {\n var request = newWideRequest(),\n filse = [],\n fileTree = [],\n currentId = editors.getCurrentId(),\n currentFile = currentId ? editors.getCurrentPath() : \"\";\n\n editors.tabs.obj._$tabs.find(\"div\").each(function () {\n var $it = $(this);\n if ($it.find(\"span:eq(0)\").attr(\"title\") !== config.label.start_page) {\n filse.push($it.find(\"span:eq(0)\").attr(\"title\"));\n }\n });\n\n fileTree = tree.getOpenPaths();\n\n request.currentFile = currentFile; // current editor file\n request.fileTree = fileTree; // file tree expansion state\n request.files = filse; // editor tabs\n\n\n request.layout = {\n \"side\": {\n \"size\": windows.outerLayout.west.state.size,\n \"state\": getLayoutState(windows.outerLayout.west.state)\n },\n \"sideRight\": {\n \"size\": windows.innerLayout.east.state.size,\n \"state\": getLayoutState(windows.innerLayout.east.state)\n },\n \"bottom\": {\n \"size\": windows.innerLayout.south.state.size,\n \"state\": getLayoutState(windows.innerLayout.south.state)\n }\n };\n\n $.ajax({\n type: 'POST',\n url: config.context + '/session/save',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n }\n });\n }, 30000);\n },\n restore: function () {\n if (!config.latestSessionContent) {\n return;\n }\n\n var fileTree = config.latestSessionContent.fileTree,\n files = config.latestSessionContent.files,\n currentFile = config.latestSessionContent.currentFile,\n id = \"\",\n nodesToOpen = [];\n\n var nodes = tree.fileTree.transformToArray(tree.fileTree.getNodes());\n\n for (var i = 0, ii = nodes.length; i < ii; i++) {\n // expand tree\n for (var j = 0, jj = fileTree.length; j < jj; j++) {\n if (nodes[i].path === fileTree[j]) {\n // expand this node only if its parents are open\n var parents = tree.getAllParents(tree.fileTree.getNodeByTId(nodes[i].tId)),\n isOpen = true;\n for (var l = 0, max = parents.length; l < max; l++) {\n if (parents[l].open === false) {\n isOpen = false;\n }\n }\n if (isOpen) {\n tree.fileTree.expandNode(nodes[i], true, false, true);\n } else {\n // flag it is open\n nodes[i].open = true;\n }\n break;\n }\n }\n\n // open editors\n for (var k = 0, kk = files.length; k < kk; k++) {\n if (nodes[i].path === files[k]) {\n nodesToOpen.push(nodes[i]);\n break;\n }\n }\n\n if (nodes[i].path === currentFile) {\n id = nodes[i].path;\n\n // FIXME: 上面的展开是异步进行的,所以执行到这里的时候可能还没有展开完,导致定位不了可视区域\n tree.fileTree.selectNode(nodes[i]);\n wide.curNode = nodes[i];\n }\n }\n\n // handle the open sequence of editors\n for (var m = 0, mm = files.length; m < mm; m++) {\n for (var n = 0, nn = nodesToOpen.length; n < nn; n++) {\n if (nodesToOpen[n].path === files[m]) {\n tree.openFile(nodesToOpen[n]);\n break;\n }\n }\n }\n\n // set the current editor\n editors.tabs.setCurrent(id);\n for (var c = 0, max = editors.data.length; c < max; c++) {\n if (id === editors.data[c].id) {\n wide.curEditor = editors.data[c].editor;\n break;\n }\n } \n },\n _initWS: function () {\n // Used for session retention, server will release all resources of the session if this channel closed\n var sessionWS = new ReconnectingWebSocket(config.channel + '/session/ws?sid=' + config.wideSessionId);\n\n sessionWS.onopen = function () {\n console.log('[session onopen] connected');\n\n var dateFormat = function (time, fmt) {\n var date = new Date(time);\n var dateObj = {\n \"M+\": date.getMonth() + 1,\n \"d+\": date.getDate(),\n \"h+\": date.getHours(),\n \"m+\": date.getMinutes(),\n \"s+\": date.getSeconds(),\n \"q+\": Math.floor((date.getMonth() + 3) / 3),\n \"S\": date.getMilliseconds()\n };\n if (/(y+)/.test(fmt))\n fmt = fmt.replace(RegExp.$1, (date.getFullYear() + \"\").substr(4 - RegExp.$1.length));\n for (var k in dateObj)\n if (new RegExp(\"(\" + k + \")\").test(fmt)) {\n fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1)\n ? (dateObj[k]) : ((\"00\" + dateObj[k]).substr((\"\" + dateObj[k]).length)));\n }\n return fmt;\n };\n\n var data = {type: \"Network\", severity: \"INFO\",\n message: \"Connected to server [sid=\" + config.wideSessionId + \"], \" + dateFormat(new Date().getTime(), 'yyyy-MM-dd hh:mm:ss')},\n $notification = $('.bottom-window-group .notification > table'),\n notificationHTML = '';\n\n notificationHTML += '' + data.severity\n + '' + data.message\n + '' + data.type + '';\n $notification.append(notificationHTML);\n };\n\n sessionWS.onmessage = function (e) {\n var data = JSON.parse(e.data);\n switch (data.cmd) {\n case 'create-file':\n var node = tree.fileTree.getNodeByTId(tree.getTIdByPath(data.dir)),\n name = data.path.replace(data.dir + '/', ''),\n mode = CodeMirror.findModeByFileName(name),\n iconSkin = wide.getClassBySuffix(name.split(\".\")[1]);\n\n if (data.type && data.type === 'f') {\n tree.fileTree.addNodes(node, [{\n \"id\": data.path,\n \"name\": name,\n \"iconSkin\": iconSkin,\n \"path\": data.path,\n \"mode\": mode,\n \"removable\": true,\n \"creatable\": true\n }]);\n\n } else {\n tree.fileTree.addNodes(node, [{\n \"id\": data.path,\n \"name\": name,\n \"iconSkin\": \"ico-ztree-dir \",\n \"path\": data.path,\n \"removable\": true,\n \"creatable\": true,\n \"isParent\": true\n }]);\n }\n break;\n case 'remove-file':\n case 'rename-file':\n var node = tree.fileTree.getNodeByTId(tree.getTIdByPath(data.path));\n tree.fileTree.removeNode(node);\n\n var nodes = tree.fileTree.transformToArray(node);\n for (var i = 0, ii = nodes.length; i < ii; i++) {\n editors.tabs.del(nodes[i].path);\n }\n\n break;\n }\n };\n sessionWS.onclose = function (e) {\n console.log('[session onclose] disconnected (' + e.code + ')');\n\n var data = {type: \"Network\", severity: \"ERROR\",\n message: \"Disconnected from server, trying to reconnect it [sid=\" + config.wideSessionId + \"]\"},\n $notification = $('.bottom-window-group .notification > table'),\n notificationHTML = '';\n\n notificationHTML += '' + data.severity\n + '' + data.message\n + '' + data.type + '';\n $notification.append(notificationHTML);\n\n $(\".notification-count\").show();\n };\n sessionWS.onerror = function (e) {\n console.log('[session onerror]');\n };\n }\n};","/*\n * Copyright (c) 2014-2018, b3log.org & hacpai.com\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * @file menu.js\n *\n * @author Liyuan Li\n * @author Liang Ding\n * @version 1.0.1.3, Oct 5, 2018\n */\nvar menu = {\n init: function () {\n this.subMenu();\n this._initPreference();\n this._initAbout();\n this._initShare();\n\n // 点击子菜单后消失\n $(\".menu .frame li\").click(function () {\n $(\".menu > ul > li\").unbind().removeClass(\"selected\");\n menu.subMenu();\n });\n },\n _initShare: function () {\n $(\".menu .ico-share\").hover(function () {\n $(\".menu .share-panel\").show();\n });\n\n $(\".share-panel .font-ico\").click(function () {\n var key = $(this).attr('class').split('-')[2];\n var url = \"https://wide.b3log.org\", pic = 'https://wide.b3log.org/static/images/wide-logo.png';\n var urls = {};\n urls.email = \"mailto:?subject=\" + $('title').text()\n + \"&body=\" + $('meta[name=description]').attr('content') + ' ' + url;\n\n var twitterShare = encodeURIComponent($('meta[name=description]').attr('content') + \" \" + url + \" #golang\");\n urls.twitter = \"https://twitter.com/intent/tweet?status=\" + twitterShare;\n\n urls.facebook = \"https://www.facebook.com/sharer/sharer.php?u=\" + url;\n urls.googleplus = \"https://plus.google.com/share?url=\" + url;\n\n var title = encodeURIComponent($('title').text() + '. \\n' + $('meta[name=description]').attr('content')\n + \" #golang#\");\n urls.weibo = \"http://v.t.sina.com.cn/share/share.php?title=\" + title + \"&url=\" + url + \"&pic=\" + pic;\n urls.qqz = \"https://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url=\" + url + \"&sharesource=qzone&title=\" + title+ \"&pics=\" + pic;\n\n window.open(urls[key], \"_blank\", \"top=100,left=200,width=648,height=618\");\n });\n },\n _initAbout: function () {\n $(\"#dialogAbout\").load(config.context + '/about', function () {\n $(\"#dialogAbout\").dialog({\n \"modal\": true,\n \"title\": config.label.about,\n \"hideFooter\": true,\n \"afterOpen\": function () {\n $.ajax({\n url: \"https://rhythm.b3log.org/version/wide/latest\",\n type: \"GET\",\n dataType: \"jsonp\",\n jsonp: \"callback\",\n success: function (data, textStatus) {\n if ($(\"#dialogAbout .version\").text() === data.wideVersion) {\n $(\".upgrade\").text(config.label.uptodate);\n } else {\n $(\".upgrade\").html(config.label.new_version_available + config.label.colon\n + \"\" + data.wideVersion + \"\");\n }\n }\n });\n }\n });\n });\n },\n disabled: function (list) {\n for (var i = 0, max = list.length; i < max; i++) {\n $(\".menu li.\" + list[i]).addClass(\"disabled\");\n }\n },\n undisabled: function (list) {\n for (var i = 0, max = list.length; i < max; i++) {\n $(\".menu li.\" + list[i]).removeClass(\"disabled\");\n }\n },\n // 焦点不在菜单上时需点击展开子菜单,否则为鼠标移动展开\n subMenu: function () {\n $(\".menu > ul > li\").click(function (event) {\n if ($(event.target).closest(\".frame\").length === 1) {\n return;\n }\n var $it = $(this);\n $it.find('.frame').show();\n $(\".menu > ul > li\").removeClass(\"selected\");\n $(this).addClass(\"selected\");\n\n $(\".menu > ul > li\").unbind();\n\n $(\".menu > ul > li\").mouseover(function () {\n if ($(event.target).closest(\".frame\").length === 1) {\n return;\n }\n $(\".menu .frame\").hide();\n $(this).find('.frame').show();\n $(\".menu > ul > li\").removeClass(\"selected\");\n $(this).addClass(\"selected\");\n });\n });\n },\n openPreference: function () {\n $(\"#dialogPreference\").dialog(\"open\");\n },\n saveAllFiles: function () {\n if ($(\".menu li.save-all\").hasClass(\"disabled\")) {\n return false;\n }\n for (var i = 0, ii = editors.data.length; i < ii; i++) {\n var path = editors.data[i].id;\n var editor = editors.data[i].editor;\n\n if (\"text/x-go\" === editor.getOption(\"mode\")) {\n wide.fmt(path, editor);\n } else {\n wide._save(path, editor);\n }\n }\n },\n closeAllFiles: function () {\n if ($(\".menu li.close-all\").hasClass(\"disabled\")) {\n return false;\n }\n\n // 设置全部关闭标识\n var removeData = [];\n $(\".edit-panel .tabs > div\").each(function (i) {\n if (i !== 0) {\n removeData.push($(this).data(\"index\"));\n }\n });\n $(\"#dialogCloseEditor\").data(\"removeData\", removeData);\n // 开始关闭\n $(\".edit-panel .tabs .ico-close:eq(0)\").click();\n },\n exit: function () {\n var request = newWideRequest();\n\n $.ajax({\n type: 'POST',\n url: config.context + '/logout',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (result.succ) {\n window.location.href = config.context + \"/login\";\n }\n }\n });\n },\n openAbout: function () {\n $(\"#dialogAbout\").dialog(\"open\");\n },\n goget: function () {\n menu.saveAllFiles();\n\n var currentPath = editors.getCurrentPath();\n if (!currentPath) {\n return false;\n }\n\n if ($(\".menu li.go-get\").hasClass(\"disabled\")) {\n return false;\n }\n\n var request = newWideRequest();\n request.file = currentPath;\n\n $.ajax({\n type: 'POST',\n url: config.context + '/go/get',\n data: JSON.stringify(request),\n dataType: \"json\",\n beforeSend: function () {\n bottomGroup.resetOutput();\n },\n success: function (result) {\n }\n });\n },\n goinstall: function () {\n menu.saveAllFiles();\n\n var currentPath = editors.getCurrentPath();\n if (!currentPath) {\n return false;\n }\n\n if ($(\".menu li.go-install\").hasClass(\"disabled\")) {\n return false;\n }\n\n var request = newWideRequest();\n request.file = currentPath;\n\n $.ajax({\n type: 'POST',\n url: config.context + '/go/install',\n data: JSON.stringify(request),\n dataType: \"json\",\n beforeSend: function () {\n bottomGroup.resetOutput();\n },\n success: function (result) {\n }\n });\n },\n // go test.\n test: function () {\n menu.saveAllFiles();\n\n var currentPath = editors.getCurrentPath();\n if (!currentPath) {\n return false;\n }\n\n if ($(\".menu li.go-test\").hasClass(\"disabled\")) {\n return false;\n }\n\n var request = newWideRequest();\n request.file = currentPath;\n\n $.ajax({\n type: 'POST',\n url: config.context + '/go/test',\n data: JSON.stringify(request),\n dataType: \"json\",\n beforeSend: function () {\n bottomGroup.resetOutput();\n },\n success: function (result) {\n }\n });\n },\n // go vet.\n govet: function () {\n menu.saveAllFiles();\n\n var currentPath = editors.getCurrentPath();\n if (!currentPath) {\n return false;\n }\n\n if ($(\".menu li.go-vet\").hasClass(\"disabled\")) {\n return false;\n }\n\n var request = newWideRequest();\n request.file = currentPath;\n\n $.ajax({\n type: 'POST',\n url: config.context + '/go/vet',\n data: JSON.stringify(request),\n dataType: \"json\",\n beforeSend: function () {\n bottomGroup.resetOutput();\n },\n success: function (result) {\n }\n });\n },\n // Build & Run.\n run: function () {\n menu.saveAllFiles();\n\n if ($(\"#buildRun\").hasClass(\"ico-stop\")) {\n wide.stop();\n return false;\n }\n\n var currentPath = editors.getCurrentPath();\n if (!currentPath) {\n return false;\n }\n\n if ($(\".menu li.run\").hasClass(\"disabled\")) {\n return false;\n }\n\n var request = newWideRequest();\n request.file = currentPath;\n request.code = wide.curEditor.getValue();\n request.nextCmd = \"run\";\n\n $.ajax({\n type: 'POST',\n url: config.context + '/build',\n data: JSON.stringify(request),\n dataType: \"json\",\n beforeSend: function () {\n bottomGroup.resetOutput();\n\n $(\"#buildRun\").addClass(\"ico-stop\")\n .removeClass(\"ico-buildrun\").attr(\"title\", config.label.stop);\n },\n success: function (result) {\n }\n });\n },\n // Build.\n build: function () {\n menu.saveAllFiles();\n\n var currentPath = editors.getCurrentPath();\n if (!currentPath) {\n return false;\n }\n\n if ($(\".menu li.build\").hasClass(\"disabled\")) {\n return false;\n }\n\n var request = newWideRequest();\n request.file = currentPath;\n request.code = wide.curEditor.getValue();\n request.nextCmd = \"\"; // build only, no following operation\n\n $.ajax({\n type: 'POST',\n url: config.context + '/build',\n data: JSON.stringify(request),\n dataType: \"json\",\n beforeSend: function () {\n bottomGroup.resetOutput();\n },\n success: function (result) {\n }\n });\n },\n _initPreference: function () {\n $(\"#dialogPreference\").load(config.context + '/preference', function () {\n $(\"#dialogPreference input\").keyup(function () {\n var isChange = false,\n emptys = [],\n emptysTip = '';\n $(\"#dialogPreference input\").each(function () {\n var $it = $(this);\n // data-value 如为数字,则不会和 value 一样转换为 String,再次不使用全等\n if ($it.val() != $it.data(\"value\")) {\n isChange = true;\n }\n\n if ($.trim($it.val()) === '') {\n emptys.push($it);\n }\n });\n\n var $okBtn = $(\"#dialogPreference\").closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\");\n if (isChange) {\n $okBtn.prop(\"disabled\", false);\n } else {\n $okBtn.prop(\"disabled\", true);\n }\n\n if (emptys.length === 0) {\n $(\"#dialogPreference\").find(\".tip\").html(\"\");\n $okBtn.prop(\"disabled\", false);\n } else {\n for (var i = 0, max = emptys.length; i < max; i++) {\n var tabIndex = emptys[i].closest('div').data(\"index\"),\n text = $.trim(emptys[i].parent().text());\n emptysTip += '[' + $('#dialogPreference .tabs > div[data-index=\"' + tabIndex + '\"]').text()\n + '] -> [' + text.substr(0, text.length - 1)\n + ']: ' + config.label.no_empty + \"
    \";\n }\n $(\"#dialogPreference\").find(\".tip\").html(emptysTip);\n $okBtn.prop(\"disabled\", true);\n }\n });\n\n $(\"#dialogPreference select\").on(\"change\", function () {\n var isChange = false;\n $(\"#dialogPreference select\").each(function () {\n if ($(this).val() !== $(this).data(\"value\")) {\n isChange = true;\n }\n });\n\n var $okBtn = $(\"#dialogPreference\").closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\");\n if (isChange) {\n $okBtn.prop(\"disabled\", false);\n } else {\n $okBtn.prop(\"disabled\", true);\n }\n });\n\n $(\"#dialogPreference\").dialog({\n \"modal\": true,\n \"height\": 280,\n \"width\": 800,\n \"title\": config.label.preference,\n \"okText\": config.label.apply,\n \"cancelText\": config.label.cancel,\n \"afterOpen\": function () {\n var $okBtn = $(\"#dialogPreference\").closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\");\n $okBtn.prop(\"disabled\", true);\n },\n \"ok\": function () {\n var request = newWideRequest(),\n $dialogPreference = $(\"#dialogPreference\"),\n $fontFamily = $dialogPreference.find(\"input[name=fontFamily]\"),\n $fontSize = $dialogPreference.find(\"input[name=fontSize]\"),\n $goFmt = $dialogPreference.find(\"select[name=goFmt]\"),\n $GoBuildArgsForLinux = $dialogPreference.find(\"input[name=GoBuildArgsForLinux]\"),\n $GoBuildArgsForWindows = $dialogPreference.find(\"input[name=GoBuildArgsForWindows]\"),\n $GoBuildArgsForDarwin = $dialogPreference.find(\"input[name=GoBuildArgsForDarwin]\"),\n $workspace = $dialogPreference.find(\"input[name=workspace]\"),\n $password = $dialogPreference.find(\"input[name=password]\"),\n $email = $dialogPreference.find(\"input[name=email]\"),\n $locale = $dialogPreference.find(\"select[name=locale]\"),\n $theme = $dialogPreference.find(\"select[name=theme]\"),\n $editorFontFamily = $dialogPreference.find(\"input[name=editorFontFamily]\"),\n $editorFontSize = $dialogPreference.find(\"input[name=editorFontSize]\"),\n $editorLineHeight = $dialogPreference.find(\"input[name=editorLineHeight]\"),\n $editorTheme = $dialogPreference.find(\"select[name=editorTheme]\"),\n $editorTabSize = $dialogPreference.find(\"input[name=editorTabSize]\"),\n $keymap = $dialogPreference.find(\"select[name=keymap]\");\n\n $.extend(request, {\n \"fontFamily\": $fontFamily.val(),\n \"fontSize\": $fontSize.val(),\n \"goFmt\": $goFmt.val(),\n \"GoBuildArgsForLinux\": $GoBuildArgsForLinux.val(),\n \"GoBuildArgsForWindows\": $GoBuildArgsForWindows.val(),\n \"GoBuildArgsForDarwin\": $GoBuildArgsForDarwin.val(),\n \"workspace\": $workspace.val(),\n \"password\": $password.val(),\n \"email\": $email.val(),\n \"locale\": $locale.val(),\n \"theme\": $theme.val(),\n \"editorFontFamily\": $editorFontFamily.val(),\n \"editorFontSize\": $editorFontSize.val(),\n \"editorLineHeight\": $editorLineHeight.val(),\n \"editorTheme\": $editorTheme.val(),\n \"editorTabSize\": $editorTabSize.val(),\n \"keymap\": $keymap.val()\n });\n\n if (config.keymap !== $keymap.val()) {\n window.location.reload();\n }\n\n $.ajax({\n type: 'POST',\n url: config.context + '/preference',\n data: JSON.stringify(request),\n success: function (result, textStatus, jqXHR) {\n if (!result.succ) {\n return false;\n }\n\n $fontFamily.data(\"value\", $fontFamily.val());\n $fontSize.data(\"value\", $fontSize.val());\n $goFmt.data(\"value\", $goFmt.val());\n $GoBuildArgsForLinux.data(\"value\", $GoBuildArgsForLinux.val());\n $GoBuildArgsForWindows.data(\"value\", $GoBuildArgsForWindows.val());\n $GoBuildArgsForDarwin.data(\"value\", $GoBuildArgsForDarwin.val());\n $workspace.data(\"value\", $workspace.val());\n $password.data(\"value\", $password.val());\n $email.data(\"value\", $email.val());\n $locale.data(\"value\", $locale.val());\n $theme.data(\"value\", $theme.val());\n $editorFontFamily.data(\"value\", $editorFontFamily.val());\n $editorFontSize.data(\"value\", $editorFontSize.val());\n $editorLineHeight.data(\"value\", $editorLineHeight.val());\n $editorTheme.data(\"value\", $editorTheme.val());\n $editorTabSize.data(\"value\", $editorTabSize.val());\n $keymap.data(\"value\", $keymap.val());\n\n // update the config\n config.keymap = $keymap.val();\n\n var $okBtn = $(\"#dialogPreference\").closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\");\n $okBtn.prop(\"disabled\", true);\n\n $(\"#themesLink\").attr(\"href\", config.staticServer + '/static/css/themes/' + $theme.val() + '.css');\n\n config.editorTheme = $editorTheme.val();\n for (var i = 0, ii = editors.data.length; i < ii; i++) {\n editors.data[i].editor.setOption(\"theme\", $editorTheme.val());\n }\n }\n });\n }\n });\n\n new Tabs({\n id: \".preference\"\n });\n });\n }\n};\n","/*\n * Copyright (c) 2014-2018, b3log.org & hacpai.com\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * @file windows.js\n *\n * @author Liyuan Li\n * @author Liang Ding\n * @version 1.1.2.2, Feb 16, 2016\n */\nvar windows = {\n isMaxEditor: false,\n outerLayout: {},\n innerLayout: {},\n init: function () {\n if (!config.latestSessionContent) {\n config.latestSessionContent = {\n \"fileTree\": [],\n \"files\": [],\n \"currentFile\": \"\",\n };\n }\n \n if (!config.latestSessionContent.layout) {\n config.latestSessionContent.layout = {\n \"side\": {\n \"size\": 200,\n \"state\": 'normal'\n },\n \"sideRight\": {\n \"size\": 200,\n \"state\": 'normal'\n },\n \"bottom\": {\n \"size\": 100,\n \"state\": 'normal'\n }\n };\n }\n\n var layout = config.latestSessionContent.layout;\n\n this.outerLayout = $('body').layout({\n north__paneSelector: \".menu\",\n center__paneSelector: \".content\",\n south__paneSelector: \".footer\",\n north__size: 22,\n south__size: 19,\n spacing_open: 2,\n north__spacing_open: 0,\n south__spacing_open: 0,\n defaults: {\n fxSpeed_open: 300,\n fxSpeed_close: 100,\n fxSettings_close: {\n easing: \"easeOutQuint\"\n },\n fxSettings_open: {\n easing: \"easeInQuint\"\n }\n },\n west: {\n size: layout.side.size,\n paneSelector: \".side\",\n togglerLength_open: 0,\n togglerLength_closed: 15,\n togglerAlign_closed: \"top\",\n slideTrigger_open: \"mouseover\",\n spacing_closed: 15,\n minSize: 100,\n togglerClass: \"ico-restore\",\n togglerTip_open: config.label.min,\n togglerTip_closed: config.label.restore_side,\n resizerTip: config.label.resize,\n initClosed: (layout.side.state === 'min')\n }\n });\n\n this.innerLayout = $('div.content').layout({\n spacing_open: 2,\n defaults: {\n fxSpeed_open: 300,\n fxSpeed_close: 100,\n fxSettings_close: {\n easing: \"easeOutQuint\"\n },\n fxSettings_open: {\n easing: \"easeInQuint\"\n }\n },\n center: {\n paneSelector: \".edit-panel\"\n },\n east: {\n size: layout.sideRight.size,\n paneSelector: \".side-right\",\n togglerLength_open: 0,\n togglerLength_closed: 15,\n togglerAlign_closed: \"top\",\n slideTrigger_open: \"mouseover\",\n spacing_closed: 15,\n minSize: 100,\n togglerClass: \"ico-restore\",\n togglerTip_open: config.label.min,\n togglerTip_closed: config.label.restore_outline,\n resizerTip: config.label.resize,\n initClosed: (layout.sideRight.state === 'min')\n },\n south: {\n size: layout.bottom.size,\n paneSelector: \".bottom-window-group\",\n togglerLength_open: 0,\n togglerLength_closed: 15,\n togglerAlign_closed: \"top\",\n slideTrigger_open: \"mouseover\",\n spacing_closed: 16,\n minSize: 100,\n togglerClass: \"ico-restore\",\n togglerTip_open: config.label.min,\n togglerTip_closed: config.label.restore_bottom,\n resizerTip: config.label.resize,\n initClosed: (layout.bottom.state === 'min'),\n ondrag_end: function (type, pane) {\n windows.refreshEditor(pane, 'drag');\n },\n onresize_end: function (type, pane) {\n windows.refreshEditor(pane, 'resize');\n },\n onclose_end: function (type, pane) {\n windows.refreshEditor(pane, 'close');\n },\n onopen_end: function (type, pane) {\n windows.refreshEditor(pane, 'open');\n },\n onshow_end: function (type, pane) {\n windows.refreshEditor(pane, 'show');\n }\n }\n });\n\n this.outerLayout.addCloseBtn(\".side .ico-min\", \"west\");\n this.innerLayout.addCloseBtn(\".side-right .ico-min\", \"east\");\n this.innerLayout.addCloseBtn(\".bottom-window-group .ico-min\", \"south\");\n\n if (layout.side.state === 'max') {\n windows.maxSide();\n }\n if (layout.sideRight.state === 'max') {\n windows.maxSideRight();\n }\n if (layout.bottom.state === 'max') {\n windows.maxBottom();\n }\n\n $(\".toolbars .ico-max\").click(function () {\n windows.toggleEditor();\n });\n\n $(\".edit-panel .tabs\").on(\"dblclick\", function () {\n windows.toggleEditor();\n });\n\n $(\".bottom-window-group .tabs\").dblclick(function () {\n var $it = $(\".bottom-window-group\");\n if ($it.hasClass(\"bottom-window-group-max\")) {\n windows.restoreBottom();\n } else {\n windows.maxBottom($it);\n }\n });\n\n $(\".side .tabs\").dblclick(function () {\n var $it = $(\".side\");\n if ($it.hasClass(\"side-max\")) {\n windows.restoreSide();\n } else {\n windows.restoreSide($it);\n }\n });\n\n $(\".side-right .tabs\").dblclick(function () {\n var $it = $(\".side-right\");\n if ($it.hasClass(\"side-right-max\")) {\n windows.restoreSideRight();\n } else {\n windows.maxSideRight($it);\n }\n });\n\n $('.bottom-window-group .search').height($('.bottom-window-group .tabs-panel').height());\n $(window).resize(function () {\n windows.refreshEditor($('.bottom-window-group'));\n });\n\n },\n maxEditor: function () {\n var $it = $(\".toolbars .font-ico\");\n windows.outerLayout.close('west');\n windows.innerLayout.close('south');\n windows.innerLayout.close('east');\n $it.removeClass('ico-max').addClass('ico-restore').attr('title', config.label.min);\n windows.isMaxEditor = true;\n },\n maxBottom: function ($it) {\n $it.data('height', $it.height()).addClass(\"bottom-window-group-max\").find('.ico-min').hide();\n windows.outerLayout.hide('west');\n windows.innerLayout.hide('east');\n windows.innerLayout.sizePane('south', $('.content').height());\n },\n maxSide: function ($it) {\n $it.data('width', $it.width()).addClass(\"side-max\").find('.ico-min').hide();\n $('.content').hide();\n windows.outerLayout.sizePane('west', $('body').width());\n },\n maxSideRight: function ($it) {\n $it.addClass(\"side-right-max\").data('width', $it.width()).find('.ico-min').hide();\n windows.outerLayout.hide('west');\n windows.innerLayout.hide('south');\n windows.innerLayout.sizePane('east', $('body').width());\n },\n toggleEditor: function () {\n var $it = $(\".toolbars .font-ico\");\n if ($it.hasClass('ico-restore')) {\n windows.restoreEditor();\n } else {\n windows.maxEditor();\n }\n },\n restoreBottom: function () {\n var $it = $(\".bottom-window-group\");\n $it.removeClass(\"bottom-window-group-max\").find('.ico-min').show();\n windows.outerLayout.show('west');\n windows.innerLayout.show('east');\n windows.innerLayout.sizePane('south', $it.data('height'));\n },\n restoreSide: function () {\n var $it = $(\".side\");\n $it.removeClass(\"side-max\").find('.ico-min').show();\n $('.content').show();\n windows.outerLayout.sizePane('west', $it.data('width'));\n },\n restoreSideRight: function () {\n var $it = $(\".side-right\");\n $it.removeClass(\"side-right-max\").find('.ico-min').show();\n windows.outerLayout.show('west');\n windows.innerLayout.show('south');\n windows.innerLayout.sizePane('east', $it.data('width'));\n },\n restoreEditor: function () {\n windows.outerLayout.open('west');\n windows.innerLayout.open('south');\n windows.innerLayout.open('east');\n windows.isMaxEditor = false;\n $(\".toolbars .font-ico\").addClass('ico-max').removeClass('ico-restore').attr('title', config.label.max_editor);\n },\n refreshEditor: function (pane, type) {\n var editorDatas = editors.data,\n height = $('.content').height() - pane.height() - 24;\n switch (type) {\n case 'close':\n height = $('.content').height() - 40;\n break;\n default:\n break;\n }\n for (var i = 0, ii = editorDatas.length; i < ii; i++) {\n editorDatas[i].editor.setSize(\"100%\", height);\n }\n\n $('.bottom-window-group .search').height($('.bottom-window-group .tabs-panel').height());\n },\n flowBottom: function () {\n if (windows.innerLayout.south.state.isClosed) {\n windows.innerLayout.slideOpen('south');\n }\n }\n};","/*\n * Copyright (c) 2014-2018, b3log.org & hacpai.com\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * @file hotkeys.js\n *\n * @author Liyuan Li\n * @author Liang Ding\n * @version 1.0.0.2, Dec 15, 2015\n */\nvar hotkeys = {\n defaultKeyMap: {\n // Ctrl-0\n goEditor: {\n ctrlKey: true,\n altKey: false,\n shiftKey: false,\n which: 48,\n fun: function () {\n if (wide.curEditor) {\n wide.curEditor.focus();\n }\n }\n },\n // Ctrl-1\n goFileTree: {\n ctrlKey: true,\n altKey: false,\n shiftKey: false,\n which: 49,\n fun: function () {\n // 有些元素需设置 tabindex 为 -1 时才可以 focus\n if (windows.outerLayout.west.state.isClosed) {\n windows.outerLayout.slideOpen('west');\n }\n $(\"#files\").focus();\n }\n },\n // Ctrl-2\n goOutline: {\n ctrlKey: true,\n altKey: false,\n shiftKey: false,\n which: 50,\n fun: function () {\n if (windows.innerLayout.east.state.isClosed) {\n windows.innerLayout.slideOpen('east');\n }\n\n $(\"#outline\").focus();\n }\n },\n // Ctrl-4\n goOutput: {\n ctrlKey: true,\n altKey: false,\n shiftKey: false,\n which: 52,\n fun: function () {\n bottomGroup.tabs.setCurrent(\"output\");\n windows.flowBottom();\n $(\".bottom-window-group .output\").focus();\n }\n },\n // Ctrl-5\n goSearch: {\n ctrlKey: true,\n altKey: false,\n shiftKey: false,\n which: 53,\n fun: function () {\n bottomGroup.tabs.setCurrent(\"search\");\n windows.flowBottom();\n $(\".bottom-window-group .search\").focus();\n }\n },\n // Ctrl-6\n goNotification: {\n ctrlKey: true,\n altKey: false,\n shiftKey: false,\n which: 54,\n fun: function () {\n bottomGroup.tabs.setCurrent(\"notification\");\n windows.flowBottom();\n $(\".bottom-window-group .notification\").focus();\n }\n },\n // Alt-C\n clearWindow: {\n ctrlKey: false,\n altKey: true,\n shiftKey: false,\n which: 67\n },\n // Ctrl-D 窗口组切换 \n changeEditor: {\n ctrlKey: true,\n altKey: false,\n shiftKey: false,\n which: 68\n },\n // Ctrl-F search \n search: {\n ctrlKey: true,\n altKey: false,\n shiftKey: false,\n which: 70\n },\n // Ctrl-Q close current editor \n closeCurEditor: {\n ctrlKey: true,\n altKey: false,\n shiftKey: false,\n which: 81\n },\n // Ctrl-R\n rename: {\n ctrlKey: true,\n altKey: false,\n shiftKey: false,\n which: 82\n },\n // Shift-Alt-O 跳转到文件\n goFile: {\n ctrlKey: false,\n altKey: true,\n shiftKey: true,\n which: 79\n },\n // F5 Build\n build: {\n ctrlKey: false,\n altKey: false,\n shiftKey: false,\n which: 116\n },\n // F6 Build & Run\n buildRun: {\n ctrlKey: false,\n altKey: false,\n shiftKey: false,\n which: 117\n }\n },\n bindList: function ($source, $list, enterFun) {\n $list.data(\"index\", 0);\n $source.keydown(function (event) {\n var index = $list.data(\"index\"),\n count = $list.find(\"li\").length;\n\n if (count === 0) {\n return true;\n }\n\n if (event.which === 38) { // up\n index--;\n if (index < 0) {\n index = count - 1;\n }\n }\n\n if (event.which === 40) { // down\n index++;\n if (index > count - 1) {\n index = 0;\n }\n }\n\n var $selected = $list.find(\"li:eq(\" + index + \")\");\n\n if (event.which === 13) { // enter\n enterFun($selected);\n }\n\n $list.find(\"li\").removeClass(\"selected\");\n $list.data(\"index\", index);\n $selected.addClass(\"selected\");\n\n if (index === 0) {\n $list.scrollTop(0);\n } else {\n if ($selected[0].offsetTop + $list.scrollTop() > $list.height()) {\n if (event.which === 40) {\n $list.scrollTop($list.scrollTop() + $selected.height());\n } else {\n $list.scrollTop($selected[0].offsetTop);\n }\n } else {\n $list.scrollTop(0);\n }\n }\n\n // 阻止上下键改变光标位置\n if (event.which === 38 || event.which === 40 || event.which === 13) {\n return false;\n }\n });\n },\n _bindOutput: function () {\n $(\".bottom-window-group .output\").keydown(function (event) {\n var hotKeys = hotkeys.defaultKeyMap;\n if (event.altKey === hotKeys.clearWindow.altKey\n && event.which === hotKeys.clearWindow.which) { // Alt-C clear output\n bottomGroup.clear('output');\n\n event.preventDefault();\n\n return;\n }\n });\n },\n _bindFileTree: function () {\n $(\"#files\").keydown(function (event) {\n event.preventDefault();\n\n var hotKeys = hotkeys.defaultKeyMap;\n if (event.ctrlKey === hotKeys.search.ctrlKey\n && event.which === hotKeys.search.which) { // Ctrl-F 搜索\n $(\"#dialogSearchForm\").dialog(\"open\");\n return;\n }\n\n if (event.ctrlKey === hotKeys.rename.ctrlKey\n && event.which === hotKeys.rename.which) { // Ctrl-R 重命名\n if (wide.curNode.removable) {\n $(\"#dialogRenamePrompt\").dialog(\"open\");\n }\n return;\n }\n\n switch (event.which) {\n case 46: // delete\n tree.removeIt();\n break;\n case 13: // enter\n if (!wide.curNode) {\n return false;\n }\n\n if (tree.isDir()) {\n if (wide.curNode.open) {\n return false;\n }\n\n tree.fileTree.expandNode(wide.curNode, true, false, true);\n $(\"#files\").focus();\n\n break;\n }\n\n tree.openFile(wide.curNode);\n\n break;\n case 38: // up\n var node = {};\n\n if (!wide.curNode) { // select the first one if no node been selected\n node = tree.fileTree.getNodeByTId(\"files_1\");\n } else {\n if (wide.curNode && wide.curNode.isFirstNode && wide.curNode.level === 0) {\n return false;\n }\n\n node = wide.curNode.getPreNode();\n if (wide.curNode.isFirstNode && wide.curNode.getParentNode()) {\n node = wide.curNode.getParentNode();\n }\n\n var preNode = wide.curNode.getPreNode();\n if (preNode && tree.isDir() && preNode.open) {\n node = tree.getCurrentNodeLastNode(preNode);\n }\n }\n\n wide.curNode = node;\n tree.fileTree.selectNode(node);\n $(\"#files\").focus();\n break;\n case 40: // down\n var node = {};\n\n if (!wide.curNode) { // select the first one if no node been selected \n node = tree.fileTree.getNodeByTId(\"files_1\");\n } else {\n if (wide.curNode && tree.isBottomNode(wide.curNode)) {\n return false;\n }\n\n node = wide.curNode.getNextNode();\n if (tree.isDir() && wide.curNode.open) {\n node = wide.curNode.children[0];\n }\n\n var nextShowNode = tree.getNextShowNode(wide.curNode);\n if (wide.curNode.isLastNode && wide.curNode.level !== 0 && !wide.curNode.open && nextShowNode) {\n node = nextShowNode;\n }\n }\n\n if (node) {\n wide.curNode = node;\n tree.fileTree.selectNode(node);\n }\n\n $(\"#files\").focus();\n break;\n case 37: // left\n if (!wide.curNode) {\n wide.curNode = tree.fileTree.getNodeByTId(\"files_1\");\n tree.fileTree.selectNode(wide.curNode);\n $(\"#files\").focus();\n return false;\n }\n\n if (!tree.isDir() || !wide.curNode.open) {\n return false;\n }\n\n tree.fileTree.expandNode(wide.curNode, false, false, true);\n $(\"#files\").focus();\n break;\n case 39: // right\n if (!wide.curNode) {\n wide.curNode = tree.fileTree.getNodeByTId(\"files_1\");\n tree.fileTree.selectNode(wide.curNode);\n $(\"#files\").focus();\n return false;\n }\n\n if (!tree.isDir() || wide.curNode.open) {\n return false;\n }\n\n tree.fileTree.expandNode(wide.curNode, true, false, true);\n $(\"#files\").focus();\n\n break;\n case 116: // F5\n if (!wide.curNode || !tree.isDir()) {\n return false;\n }\n\n tree.refresh(wide.curNode);\n\n break;\n }\n });\n },\n _bindDocument: function () {\n var hotKeys = this.defaultKeyMap;\n $(document).keydown(function (event) {\n if (event.ctrlKey === hotKeys.goEditor.ctrlKey\n && event.which === hotKeys.goEditor.which) { // Ctrl-0 焦点切换到当前编辑器\n hotKeys.goEditor.fun();\n event.preventDefault();\n\n return;\n }\n\n if (event.ctrlKey === hotKeys.goFileTree.ctrlKey\n && event.which === hotKeys.goFileTree.which) { // Ctrl-1 焦点切换到文件树\n hotKeys.goFileTree.fun();\n event.preventDefault();\n\n return;\n }\n\n if (event.ctrlKey === hotKeys.goOutline.ctrlKey\n && event.which === hotKeys.goOutline.which) { // Ctrl-2 焦点切换到大纲\n hotKeys.goOutline.fun();\n event.preventDefault();\n\n return;\n }\n\n if (event.ctrlKey === hotKeys.goOutput.ctrlKey\n && event.which === hotKeys.goOutput.which) { // Ctrl-4 焦点切换到输出窗口 \n hotKeys.goOutput.fun();\n event.preventDefault();\n\n return;\n }\n\n if (event.ctrlKey === hotKeys.goSearch.ctrlKey\n && event.which === hotKeys.goSearch.which) { // Ctrl-5 焦点切换到搜索窗口 \n hotKeys.goSearch.fun();\n event.preventDefault();\n\n return;\n }\n\n if (event.ctrlKey === hotKeys.goNotification.ctrlKey\n && event.which === hotKeys.goNotification.which) { // Ctrl-6 焦点切换到通知窗口 \n hotKeys.goNotification.fun();\n event.preventDefault();\n\n return;\n }\n\n if (event.ctrlKey === hotKeys.closeCurEditor.ctrlKey\n && event.which === hotKeys.closeCurEditor.which) { // Ctrl-Q 关闭当前编辑器 \n $(\".edit-panel .tabs > div.current\").find(\".ico-close\").click();\n event.preventDefault();\n\n return;\n }\n\n if (event.ctrlKey === hotKeys.changeEditor.ctrlKey\n && event.which === hotKeys.changeEditor.which) { // Ctrl-D 窗口组切换\n if (document.activeElement.className === \"notification\"\n || document.activeElement.className === \"output\"\n || document.activeElement.className === \"search\") {\n // 焦点在底部窗口组时,对底部进行切换\n var tabs = [\"output\", \"search\", \"notification\"],\n nextPath = \"\";\n for (var i = 0, ii = tabs.length; i < ii; i++) {\n if (bottomGroup.tabs.getCurrentId() === tabs[i]) {\n if (i < ii - 1) {\n nextPath = tabs[i + 1];\n } else {\n nextPath = tabs[0];\n }\n break;\n }\n }\n bottomGroup.tabs.setCurrent(nextPath);\n $(\".bottom-window-group .\" + nextPath).focus();\n\n event.preventDefault();\n\n return false;\n }\n\n if (editors.data.length > 1) {\n var nextPath = \"\";\n for (var i = 0, ii = editors.data.length; i < ii; i++) {\n var currentId = editors.getCurrentId();\n if (currentId) {\n if (currentId === editors.data[i].id) {\n if (i < ii - 1) {\n nextPath = editors.data[i + 1].id;\n wide.curEditor = editors.data[i + 1].editor;\n } else {\n nextPath = editors.data[0].id;\n wide.curEditor = editors.data[0].editor;\n }\n break;\n }\n }\n }\n\n editors.tabs.setCurrent(nextPath);\n var nextTId = tree.getTIdByPath(nextPath);\n wide.curNode = tree.fileTree.getNodeByTId(nextTId);\n\n tree.fileTree.selectNode(wide.curNode);\n wide.refreshOutline();\n var cursor = wide.curEditor.getCursor();\n $(\".footer .cursor\").text('| ' + (cursor.line + 1) + ':' + (cursor.ch + 1) + ' |');\n wide.curEditor.focus();\n }\n\n event.preventDefault();\n\n return false;\n }\n\n if (event.which === hotKeys.build.which) { // F5 Build\n menu.build();\n event.preventDefault();\n\n return;\n }\n\n if (event.which === hotKeys.buildRun.which) { // F6 Build & Run\n menu.run();\n event.preventDefault();\n\n return;\n }\n\n if (event.ctrlKey === hotKeys.goFile.ctrlKey\n && event.altKey === hotKeys.goFile.altKey\n && event.shiftKey === hotKeys.goFile.shiftKey\n && event.which === hotKeys.goFile.which) { // Shift-Alt-O 跳转到文件\n $(\"#dialogGoFilePrompt\").dialog(\"open\");\n }\n });\n },\n init: function () {\n this._bindFileTree();\n this._bindOutput();\n this._bindDocument();\n }\n};","/*\n * Copyright (c) 2014-2018, b3log.org & hacpai.com\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * @file bottomGroup.js\n *\n * @author Liyuan Li\n * @author Liang Ding\n * @version 1.1.1.1, Mar 15, 2017\n */\nvar bottomGroup = {\n tabs: undefined,\n searchTab: undefined,\n init: function () {\n this._initTabs();\n this._initFrame();\n\n $('.bottom-window-group .output').click(function () {\n $(this).focus();\n });\n\n $('.bottom-window-group .output').on('click', '.path', function (event) {\n var $path = $(this),\n tId = tree.getTIdByPath($path.data(\"path\"));\n tree.openFile(tree.fileTree.getNodeByTId(tId),\n CodeMirror.Pos($path.data(\"line\") - 1, $path.data(\"column\") - 1));\n event.preventDefault();\n return false;\n });\n },\n _initFrame: function () {\n $(\".bottom-window-group .output\").parent().mouseup(function (event) {\n event.stopPropagation();\n\n if (event.button === 0) { // 左键\n $(\".bottom-window-group .frame\").hide();\n return;\n }\n\n // event.button === 2 右键\n var left = event.screenX,\n $it = $(this);\n if ($(\".side\").css(\"left\") === \"auto\" || $(\".side\").css(\"left\") === \"0px\") {\n left = event.screenX - $(\".side\").width();\n }\n $(\".bottom-window-group .frame\").show().css({\n \"left\": left + \"px\",\n \"top\": (event.offsetY + event.target.offsetTop - $it.scrollTop() - 10) + \"px\"\n });\n return;\n });\n },\n clear: function (id) {\n $('.bottom-window-group .' + id + ' > div').text('');\n },\n resetOutput: function () {\n this.clear('output');\n bottomGroup.tabs.setCurrent(\"output\");\n windows.flowBottom();\n },\n _initTabs: function () {\n this.tabs = new Tabs({\n id: \".bottom-window-group\",\n clickAfter: function (id) {\n this._$tabsPanel.find(\".\" + id).focus();\n }\n });\n },\n fillOutput: function (data) {\n var $output = $('.bottom-window-group .output');\n\n data = data.replace(/\\r/g, '');\n data = data.replace(/\\n/g, '
    ');\n\n if (-1 !== data.indexOf(\"
    \")) {\n data = Autolinker.link(data);\n }\n\n $output.find(\"div\").html(data);\n $output.parent().scrollTop($output[0].scrollHeight);\n }\n};\n"]} \ No newline at end of file +{"version":3,"sources":["tabs.js","dialog.js","editors.js","notification.js","tree.js","wide.js","session.js","menu.js","windows.js","hotkeys.js","bottomGroup.js"],"names":["Tabs","obj","_$tabsPanel","$","id","_$tabs","_stack","this","STACKSIZE","_init","_it","each","data","length","splice","push","extend","prototype","_that","on","event","hasClass","setCurrent","clickAfter","parent","isRemove","removeBefore","del","stopPropagation","_hasId","find","add","getCurrentId","$tabsPanel","append","title","content","after","prevId","$tabs","stack","children","remove","i","removeAfter","path","removeClass","hide","addClass","show","setAfter","tId","tree","getTIdByPath","node","fileTree","getNodeByTId","selectNode","wide","curNode","ii","editors","curEditor","editor","cursor","getCursor","setCursor","focus","refreshOutline","text","line","ch","fn","dialog","version","author","dpuuid","Date","getTime","PROP_NAME","Dialog","_defaults","styleClass","background","panel","main","footer","headerMiddle","headerBg","closeIcon","closeIconHover","_attach","target","settings","uuid","inst","_newInst","replace","_getInst","err","_destroyDialog","removeData","prependTo","unwrap","removeAttr","_getDefaults","windowH","window","height","windowW","width","dialogH","parseInt","dialogW","okText","cancelText","footerHTML","headerHTML","hideFooter","hiddenOk","dialogHTML","bgHTML","modal","document","documentElement","scrollHeight","wrap","cloneObj","clone","get","bind","_close","$buttons","undefined","ok","_bindMove","keyup","keyCode","resize","afterInit","className","mousedown","_document","getElementById","x","clientX","style","left","y","clientY","top","ondragstart","onselectstart","onselect","setCapture","captureEvents","Event","MOUSEMOVE","MOUSEUP","onmousemove","positionX","positionY","onmouseup","releaseCapture","css","close","_closeDialog","_openDialog","msg","$dialog","position","afterOpen","_updateDialog","html","defaults","key","theme","styleName","options","otherArgs","Array","slice","call","arguments","shift","apply","concat","jQuery","autocompleteMutex","tabs","getEditorByPath","click","closeOther","currentIndex","firstIndex","_removeAllMarker","removeIndex","_initClose","ZeroClipboard","button","screenX","attr","init","config","label","tip","fileName","file","confirm_save","fmt","doc","isClean","nextId","menu","disabled","cancelSelectedNode","_initCodeMirrorHotKeys","openStartPage","dateFormat","time","date","dateObj","M+","getMonth","d+","getDate","h+","getHours","m+","getMinutes","s+","getSeconds","q+","Math","floor","S","getMilliseconds","k","test","RegExp","$1","getFullYear","substr","start_page","load","context","wideSessionId","ajax","url","type","dataType","jsonp","success","textStatus","articles","listHTML","community","article","articlePermalink","articleTitle","articleCreateTime","ret","getCurrentPath","currentPath","CodeMirror","registerHelper","word","cur","curLine","getLine","start","end","charAt","request","newWideRequest","code","getValue","cursorLine","cursorCh","autocompleteHints","state","completionActive","async","JSON","stringify","autocompleteArray","displayText","name","class","substring","console","warn","markClean","setTimeout","list","from","Pos","to","commands","autocompleteAfterDot","cm","mode","getMode","Pass","token","getTokenAt","showHint","hint","go","completeSingle","autocompleteAnyWord","auto","gotoLine","doNothing","exprInfo","result","succ","cursorCoords","copyLinesDown","selectoion","listSelections","anchor","head","max","replaceToLine","replaceRange","offset","setSelection","copyLinesUp","moveLinesUp","moveLinesDown","lastLine","jumpToDecl","openFile","findUsages","appendSearch","selectIdentifier","findWordAt","extendSelection","searcHTML","toLowerCase","contents","matches","split","startIndex","endIndex","j","keyWord","search_no_match","$search","find_usages","search_text","bottomGroup","searchTab","$it","half","getScrollInfo","clientHeight","defaultTextHeight","scrollTo","windows","flowBottom","newEditor","iconSkin","undisabled","textArea","value","fromTextArea","lineNumbers","autofocus","autoCloseBrackets","matchBrackets","highlightSelectionMatches","showToken","rulers","color","column","lineStyle","styleActiveLine","editorTheme","tabSize","editorTabSize","indentUnit","indentWithTabs","foldGutter","cursorHeight","readOnly","isGOAPI","profile","extraKeys","Ctrl-\\",".","Ctrl-/","Ctrl-I","Ctrl-L","Ctrl-E","Ctrl-D","Ctrl-B","Ctrl-S","saveFile","Shift-Ctrl-S","saveAllFiles","Shift-Alt-F","Alt-F7","Shift-Alt-Enter","isMaxEditor","restoreEditor","maxEditor","Shift-Ctrl-Up","Shift-Ctrl-Down","Shift-Alt-Up","Shift-Alt-Down","Shift-Alt-J","emmetCodeMirror","$span","evt","altKey","ctrlKey","shiftKey","which","autocomplete","random","setSize","setOption","keymap","notification","_initWS","notificationWS","ReconnectingWebSocket","channel","onopen","log","onmessage","e","parse","$notification","notificationHTML","cmd","severity","message","onclose","onerror","getCurrentNodeLastNode","returnNode","open","getNextShowNode","level","getParentNode","getNextNode","isBottomNode","isLastNode","nodes","transformToArray","getNodes","getOpenPaths","paths","getAllParents","parents","parentTId","isParents","parentPath","parentNode","isDir","indexOf","newFile","it","newDir","removeIt","removable","rename","export","isSucc","crossCompile","platform","decompress","dir","reAsyncChildNodes","refresh","gitClone","import","fileupload","formData","done","fail","$dirRMenu","$fileRMenu","setting","view","showTitle","selectedMulti","enable","autoParam","callback","onDblClick","treeId","treeNode","onRightClick","creatable","display","onClick","clickFlag","zTree","session","restore","_initSearch","_initRename","tempCursor","findModeByFileName","mime","error","$okBtn","closest","prop","trim","val","search","cancel","extension","select","oldPath","newPath","lastIndexOf","curProcessId","outlineHTML","decls","maxj","Ch","Line","Name","dblclick","_initDialog","confirm","delete","create_file","create","fileType","create_dir","goto_file","$list","hotkeys","bindList","$selected","goFileHTML","icoSkin","getClassBySuffix","goto_line","outputWS","goLintFound","nextCmd","executable","fillOutput","output","pid","build_n_run","lints","files","lint","lineNo","signal","_initFooter","unbind","subMenu","onbeforeunload","oncontextmenu","_save","getOption","gofmt","beforeSend","resetOutput","stop","run","scrollInfo","setValue","formatted","html_beautify","js_beautify","css_beautify","suffix","ready","getLayoutState","paneState","isClosed","size","setInterval","filse","currentFile","layout","side","outerLayout","west","sideRight","innerLayout","east","bottom","south","latestSessionContent","nodesToOpen","jj","isOpen","l","expandNode","kk","m","mm","n","nn","c","sessionWS","addNodes","isParent","removeNode","_initPreference","_initAbout","_initShare","hover","pic","urls","email","twitterShare","encodeURIComponent","twitter","facebook","googleplus","weibo","qqz","about","wideVersion","uptodate","new_version_available","colon","wideDownload","mouseover","openPreference","closeAllFiles","exit","location","href","openAbout","goget","goinstall","govet","build","isChange","emptys","emptysTip","tabIndex","no_empty","preference","$dialogPreference","$fontFamily","$fontSize","$goFmt","$GoBuildArgsForLinux","$GoBuildArgsForWindows","$GoBuildArgsForDarwin","$workspace","$password","$email","$locale","$theme","$editorFontFamily","$editorFontSize","$editorLineHeight","$editorTheme","$editorTabSize","$keymap","fontFamily","fontSize","goFmt","GoBuildArgsForLinux","GoBuildArgsForWindows","GoBuildArgsForDarwin","workspace","password","locale","editorFontFamily","editorFontSize","editorLineHeight","reload","jqXHR","staticServer","north__paneSelector","center__paneSelector","south__paneSelector","north__size","south__size","spacing_open","north__spacing_open","south__spacing_open","fxSpeed_open","fxSpeed_close","fxSettings_close","easing","fxSettings_open","paneSelector","togglerLength_open","togglerLength_closed","togglerAlign_closed","slideTrigger_open","spacing_closed","minSize","togglerClass","togglerTip_open","min","togglerTip_closed","restore_side","resizerTip","initClosed","center","restore_outline","restore_bottom","ondrag_end","pane","refreshEditor","onresize_end","onclose_end","onopen_end","onshow_end","addCloseBtn","maxSide","maxSideRight","maxBottom","toggleEditor","restoreBottom","restoreSide","restoreSideRight","sizePane","max_editor","editorDatas","slideOpen","defaultKeyMap","goEditor","fun","goFileTree","goOutline","goOutput","goSearch","goNotification","clearWindow","changeEditor","closeCurEditor","goFile","buildRun","$source","enterFun","keydown","index","count","scrollTop","offsetTop","_bindOutput","hotKeys","clear","preventDefault","_bindFileTree","isFirstNode","getPreNode","preNode","nextShowNode","_bindDocument","activeElement","nextPath","currentId","nextTId","_initTabs","_initFrame","$path","mouseup","offsetY","$output","Autolinker","link"],"mappings":"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","file":"wide.min.js","sourcesContent":["/*\r\n * Copyright (c) 2014-2019, b3log.org & hacpai.com\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * https://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\n/*\r\n * @file tabs.js\r\n *\r\n * @author Liyuan Li\r\n * @version 1.0.0.1, Dec 8, 2015\r\n */\r\nvar Tabs = function (obj) {\r\n obj._$tabsPanel = $(obj.id + \" > .tabs-panel\");\r\n obj._$tabs = $(obj.id + \" > .tabs\");\r\n obj._stack = [];\r\n\r\n this.obj = obj;\r\n this.obj.STACKSIZE = 64;\r\n\r\n this._init(obj);\r\n\r\n // DOM 元素存在时,应顺序入栈\r\n var _it = this;\r\n $(obj.id + \" > .tabs > div\").each(function () {\r\n var id = $(this).data(\"index\");\r\n if (obj._stack.length === _it.obj.STACKSIZE) {\r\n obj._stack.splice(0, 1);\r\n }\r\n if (obj._stack[obj._stack.length - 1] !== id) {\r\n _it.obj._stack.push(id);\r\n }\r\n });\r\n\r\n};\r\n\r\n$.extend(Tabs.prototype, {\r\n _init: function (obj) {\r\n var _that = this;\r\n\r\n obj._$tabs.on(\"click\", \"div\", function (event) {\r\n if ($(this).hasClass('current')) {\r\n return false;\r\n }\r\n\r\n var id = $(this).data(\"index\");\r\n _that.setCurrent(id);\r\n if (typeof (obj.clickAfter) === \"function\") {\r\n obj.clickAfter(id);\r\n }\r\n });\r\n\r\n obj._$tabs.on(\"click\", \".ico-close\", function (event) {\r\n var id = $(this).parent().data(\"index\"),\r\n isRemove = true;\r\n\r\n if (typeof obj.removeBefore === 'function') {\r\n isRemove = obj.removeBefore(id);\r\n }\r\n\r\n if (isRemove) {\r\n _that.del(id);\r\n }\r\n event.stopPropagation();\r\n });\r\n },\r\n _hasId: function (id) {\r\n var $tabs = this.obj._$tabs;\r\n if ($tabs.find('div[data-index=\"' + id + '\"]').length === 0) {\r\n return false;\r\n }\r\n return true;\r\n },\r\n add: function (data) {\r\n // 添加当前 tab\r\n if (this.getCurrentId() === data.id) {\r\n return false;\r\n }\r\n\r\n // 当前 tab 已经存在\r\n if (this._hasId(data.id)) {\r\n this.setCurrent(data.id);\r\n return false;\r\n }\r\n\r\n var $tabsPanel = this.obj._$tabsPanel,\r\n $tabs = this.obj._$tabs;\r\n\r\n $tabs.append('
    '\r\n + data.title + '
    ');\r\n $tabsPanel.append('
    ' + data.content\r\n + '
    ');\r\n\r\n this.setCurrent(data.id);\r\n\r\n if (typeof data.after === 'function') {\r\n data.after();\r\n }\r\n },\r\n del: function (id) {\r\n var $tabsPanel = this.obj._$tabsPanel,\r\n $tabs = this.obj._$tabs,\r\n stack = this.obj._stack,\r\n prevId = null;\r\n\r\n $tabs.children(\"div[data-index='\" + id + \"']\").remove();\r\n $tabsPanel.children(\"div[data-index='\" + id + \"']\").remove();\r\n\r\n // 移除堆栈中该 id\r\n for (var i = 0; i < stack.length; i++) {\r\n if (id === stack[i]) {\r\n stack.splice(i, 1);\r\n i--;\r\n }\r\n }\r\n\r\n prevId = stack[stack.length - 1];\r\n\r\n if (typeof this.obj.removeAfter === 'function') {\r\n this.obj.removeAfter(id, prevId);\r\n }\r\n\r\n this.setCurrent(prevId);\r\n },\r\n getCurrentId: function () {\r\n var $tabs = this.obj._$tabs;\r\n return $tabs.children(\".current\").data(\"index\");\r\n },\r\n setCurrent: function (path) {\r\n if (!path) {\r\n return false;\r\n }\r\n\r\n var $tabsPanel = this.obj._$tabsPanel,\r\n $tabs = this.obj._$tabs;\r\n\r\n var $currentTab = $tabs.children(\".current\");\r\n if ($currentTab.data(\"index\") === path) {\r\n return false;\r\n }\r\n\r\n // tab 顺序入栈,如栈满则清除\r\n var stack = this.obj._stack;\r\n if (stack.length === this.obj.STACKSIZE) {\r\n stack.splice(0, 1);\r\n }\r\n if (stack[stack.length - 1] !== path) {\r\n this.obj._stack.push(path);\r\n }\r\n\r\n $tabs.children(\"div\").removeClass(\"current\");\r\n $tabsPanel.children(\"div\").hide();\r\n\r\n $tabs.children('div[data-index=\"' + path + '\"]').addClass(\"current\");\r\n $tabsPanel.children('div[data-index=\"' + path + '\"]').show();\r\n\r\n if (typeof this.obj.setAfter === 'function') {\r\n this.obj.setAfter();\r\n }\r\n\r\n var id = this.getCurrentId();\r\n if (\"startPage\" === id) {\r\n return;\r\n }\r\n\r\n // set tree node selected\r\n var tId = tree.getTIdByPath(id);\r\n var node = tree.fileTree.getNodeByTId(tId);\r\n tree.fileTree.selectNode(node);\r\n wide.curNode = node;\r\n\r\n for (var i = 0, ii = editors.data.length; i < ii; i++) {\r\n if (editors.data[i].id === id) {\r\n wide.curEditor = editors.data[i].editor;\r\n break;\r\n }\r\n }\r\n\r\n if (wide.curEditor) {\r\n var cursor = wide.curEditor.getCursor();\r\n wide.curEditor.setCursor(cursor);\r\n wide.curEditor.focus();\r\n wide.refreshOutline();\r\n\r\n $(\".footer .cursor\").text('| ' + (cursor.line + 1) + ':' + (cursor.ch + 1) + ' |');\r\n }\r\n }\r\n});","/*\r\n * Copyright (c) 2014-2019, b3log.org & hacpai.com\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * https://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\n/*\r\n * @file dialog.js\r\n *\r\n * @author Liyuan Li\r\n * @version 1.0.0.1, Dec 8, 2015\r\n */\r\n(function ($) {\r\n $.fn.extend({\r\n dialog: {\r\n version: \"0.0.1.7\",\r\n author: \"v@b3log.org\"\r\n }\r\n });\r\n\r\n var dpuuid = new Date().getTime();\r\n var PROP_NAME = 'dialog';\r\n\r\n var Dialog = function () {\r\n this._defaults = {\r\n \"styleClass\": {\r\n \"background\": \"dialog-background\",\r\n \"panel\": \"dialog-panel\",\r\n \"main\": \"dialog-main\",\r\n \"footer\": \"dialog-footer\",\r\n \"headerMiddle\": \"dialog-header-middle\",\r\n \"headerBg\": \"dialog-header-bg\",\r\n \"closeIcon\": \"dialog-close-icon\",\r\n \"closeIconHover\": \"dialog-close-icon-hover\",\r\n \"title\": \"dialog-title\"\r\n }\r\n };\r\n };\r\n\r\n $.extend(Dialog.prototype, {\r\n _attach: function (target, settings) {\r\n if (!target.id) {\r\n this.uuid++;\r\n target.id = 'dp' + this.uuid;\r\n }\r\n var inst = this._newInst($(target));\r\n\r\n inst.settings = $.extend({}, settings || {});\r\n $.data(target, PROP_NAME, inst);\r\n this._init(target);\r\n },\r\n /* Create a new instance object. */\r\n _newInst: function (target) {\r\n // escape jQuery meta chars\r\n var id = target[0].id.replace(/([^A-Za-z0-9_])/g, '\\\\\\\\$1');\r\n return {\r\n id: id\r\n };\r\n },\r\n _getInst: function (target) {\r\n try {\r\n return $.data(target, PROP_NAME);\r\n } catch (err) {\r\n throw 'Missing instance data for this dialog';\r\n }\r\n },\r\n _destroyDialog: function (target) {\r\n var inst = $.dialog._getInst(target);\r\n var id = inst.id;\r\n $.removeData(target, PROP_NAME);\r\n\r\n $(target).prependTo(\"#\" + id + \"Wrap\").unwrap();\r\n $(target).removeAttr(\"style\");\r\n\r\n var styleClass = this._getDefaults($.dialog._defaults, inst.settings, \"styleClass\");\r\n $(\".\" + styleClass.background).remove();\r\n $(\"#\" + id + \"Dialog\").remove();\r\n },\r\n _init: function (target) {\r\n var inst = this._getInst(target);\r\n var id = inst.id,\r\n settings = inst.settings;\r\n var windowH = $(window).height(),\r\n windowW = $(window).width();\r\n var styleClass = this._getDefaults($.dialog._defaults, settings, \"styleClass\"),\r\n dialogH = settings.height ? settings.height : parseInt(windowH * 0.6),\r\n dialogW = settings.width ? settings.width : parseInt(windowW * 0.6);\r\n\r\n // get settings or default value.\r\n settings.title = settings.title ? settings.title : \"\";\r\n settings.okText = settings.okText ? settings.okText : \"Ok\";\r\n settings.cancelText = settings.cancelText ? settings.cancelText : \"Cancel\";\r\n\r\n // build HTML.\r\n var footerHTML = \"\",\r\n headerHTML = \"
    \"\r\n + settings.title + \"
    \";\r\n\r\n // Sets footerHTML.\r\n if (!settings.hideFooter) {\r\n if (!settings.hiddenOk) {\r\n footerHTML = \"\";\r\n }\r\n footerHTML += \"\";\r\n }\r\n\r\n var dialogHTML = \"
    \" + headerHTML\r\n + \"
    \"\r\n + footerHTML + \"
    \";\r\n\r\n var bgHTML = \"\";\r\n if (settings.modal && $(\".\" + styleClass.background).length === 0) {\r\n var bgHeight = windowH < document.documentElement.scrollHeight\r\n ? document.documentElement.scrollHeight : windowH;\r\n bgHTML = \"
    \";\r\n }\r\n\r\n // Package dialog.\r\n $(\"#\" + id).wrap(\"
    \");\r\n var cloneObj = $(target).clone(true);\r\n $(target).remove();\r\n $('body').append(bgHTML + dialogHTML);\r\n $($(\"#\" + id + \"Dialog .\" + styleClass.main + \" div\").get(0)).append(cloneObj);\r\n $(cloneObj).show();\r\n\r\n // Bind event.\r\n $(\"#\" + id + \"Dialog .\" + styleClass.closeIcon).bind(\"click\", function () {\r\n $.dialog._close(id, settings);\r\n });\r\n\r\n var $buttons = $(\"#\" + id + \"Dialog .\" + styleClass.footer + \" button\");\r\n $($buttons.get(1)).bind(\"click\", function () {\r\n $.dialog._close(id, settings);\r\n });\r\n\r\n $($buttons.get(0)).bind(\"click\", function () {\r\n if (settings.ok === undefined || settings.ok()) {\r\n $.dialog._close(id, settings);\r\n }\r\n });\r\n\r\n this._bindMove(id, styleClass.headerBg, dialogH, dialogW);\r\n\r\n // esc exit\r\n $(window).keyup(function (event) {\r\n if (event.keyCode === 27) {\r\n $.dialog._close(id, settings);\r\n }\r\n });\r\n\r\n $(window).resize(function () {\r\n var height = $(\"body\").height() > $(window).height() ? $(\"body\").height() : $(window).height();\r\n $(\".dialog-background\").height(height);\r\n });\r\n\r\n if (typeof settings.afterInit === \"function\") {\r\n settings.afterInit();\r\n }\r\n },\r\n _bindMove: function (id, className) {\r\n $(\"#\" + id + \"Dialog .\" + className).mousedown(function (event) {\r\n var _document = document;\r\n if (!event) {\r\n event = window.event;\r\n }\r\n var dialog = document.getElementById(id + \"Dialog\");\r\n var x = event.clientX - parseInt(dialog.style.left),\r\n y = event.clientY - parseInt(dialog.style.top);\r\n _document.ondragstart = \"return false;\";\r\n _document.onselectstart = \"return false;\";\r\n _document.onselect = \"document.selection.empty();\";\r\n\r\n if (this.setCapture) {\r\n this.setCapture();\r\n } else if (window.captureEvents) {\r\n window.captureEvents(Event.MOUSEMOVE | Event.MOUSEUP);\r\n }\r\n\r\n _document.onmousemove = function (event) {\r\n if (!event) {\r\n event = window.event;\r\n }\r\n var positionX = event.clientX - x,\r\n positionY = event.clientY - y;\r\n if (positionX < 0) {\r\n positionX = 0;\r\n }\r\n if (positionX > $(window).width() - $(dialog).width()) {\r\n positionX = $(window).width() - $(dialog).width();\r\n }\r\n if (positionY > $(window).height() - $(dialog).height()) {\r\n positionY = $(window).height() - $(dialog).height();\r\n }\r\n if (positionY < 0) {\r\n positionY = 0;\r\n }\r\n dialog.style.left = positionX + \"px\";\r\n dialog.style.top = positionY + \"px\";\r\n };\r\n\r\n _document.onmouseup = function () {\r\n if (this.releaseCapture) {\r\n this.releaseCapture();\r\n } else if (window.captureEvents) {\r\n window.captureEvents(Event.MOUSEMOVE | Event.MOUSEUP);\r\n }\r\n _document.onmousemove = null;\r\n _document.onmouseup = null;\r\n _document.ondragstart = null;\r\n _document.onselectstart = null;\r\n _document.onselect = null;\r\n };\r\n });\r\n },\r\n _close: function (id, settings) {\r\n if ($(\"#\" + id + \"Dialog\").css(\"display\") === \"none\") {\r\n return;\r\n }\r\n if (settings.close === undefined || settings.close()) {\r\n $(\"#\" + id + \"Dialog\").hide();\r\n if (settings.modal) {\r\n var styleClass = this._getDefaults($.dialog._defaults, settings, \"styleClass\");\r\n $(\".\" + styleClass.background).hide();\r\n }\r\n }\r\n },\r\n _closeDialog: function (target) {\r\n var inst = this._getInst(target);\r\n var id = inst.id,\r\n settings = inst.settings;\r\n $.dialog._close(id, settings);\r\n },\r\n _openDialog: function (target, msg) {\r\n var inst = this._getInst(target);\r\n var id = inst.id,\r\n settings = inst.settings,\r\n top = \"\", left = \"\",\r\n $dialog = $(\"#\" + id + \"Dialog\"),\r\n windowH = $(window).height(),\r\n windowW = $(window).width(),\r\n dialogH = settings.height ? settings.height : parseInt(windowH * 0.6),\r\n dialogW = settings.width ? settings.width : parseInt(windowW * 0.6);\r\n\r\n // Sets position.\r\n if (settings.position) {\r\n top = settings.position.top;\r\n left = settings.position.left;\r\n } else {\r\n // 20(footer) + 23(header)\r\n top = parseInt((windowH - dialogH - 43) / 2);\r\n if (top < 0) {\r\n top = 0;\r\n }\r\n left = parseInt((windowW - dialogW) / 2);\r\n }\r\n $dialog.css({\r\n \"top\": top + \"px\",\r\n \"left\": left + \"px\"\r\n }).show();\r\n\r\n if (settings.modal) {\r\n var styleClass = this._getDefaults($.dialog._defaults, settings, \"styleClass\");\r\n $(\".\" + styleClass.background).show();\r\n }\r\n\r\n if (typeof settings.afterOpen === \"function\") {\r\n settings.afterOpen(msg);\r\n }\r\n\r\n $(\"#\" + id + \"Dialog .dialog-footer button:eq(0)\").focus();\r\n },\r\n _updateDialog: function (target, data) {\r\n var inst = this._getInst(target);\r\n var id = inst.id,\r\n settings = inst.settings;\r\n var styleClass = this._getDefaults($.dialog._defaults, settings, \"styleClass\");\r\n $.extend(settings, data);\r\n var $dialog = $(\"#\" + id + \"Dialog\");\r\n if (data.position) {\r\n $dialog.css({\r\n \"top\": data.position.top,\r\n \"left\": data.position.left\r\n });\r\n }\r\n\r\n if (data.width) {\r\n $dialog.width(data.width + 26);\r\n $dialog.find(\".\" + styleClass.main + \" div\")[0].style.width = data.width + \"px\";\r\n $dialog.find(\".\" + styleClass.headerBg).width(data.width + 18);\r\n }\r\n\r\n if (data.height) {\r\n $dialog.find(\".\" + styleClass.main + \" div\")[0].style.height = data.height + \"px\";\r\n }\r\n\r\n if (data.title) {\r\n $dialog.find(\".\" + styleClass.title).html(data.title);\r\n }\r\n\r\n if (data.modal !== undefined) {\r\n if (data.modal) {\r\n $(\".\" + styleClass.background).show();\r\n } else {\r\n $(\".\" + styleClass.background).hide();\r\n }\r\n }\r\n\r\n if (data.hideFooter !== undefined) {\r\n if (data.hideFooter) {\r\n $dialog.find(\".\" + styleClass.footer).hide();\r\n } else {\r\n $dialog.find(\".\" + styleClass.footer).show();\r\n }\r\n }\r\n\r\n },\r\n _getDefaults: function (defaults, settings, key) {\r\n if (key === \"styleClass\") {\r\n if (settings.theme === \"default\" || settings.theme === undefined) {\r\n return defaults.styleClass;\r\n }\r\n settings.styleClass = {};\r\n for (var styleName in defaults[key]) {\r\n settings.styleClass[styleName] = settings.theme + \"-\" + defaults.styleClass[styleName];\r\n }\r\n } else if (key === \"height\" || key === \"width\") {\r\n if (settings[key] === null || settings[key] === undefined) {\r\n return \"auto\";\r\n } else {\r\n return settings[key] + \"px\";\r\n }\r\n } else {\r\n if (settings[key] === null || settings[key] === undefined) {\r\n return defaults[key];\r\n }\r\n }\r\n return settings[key];\r\n }\r\n });\r\n\r\n $.fn.dialog = function (options) {\r\n var otherArgs = Array.prototype.slice.call(arguments);\r\n\r\n if (typeof options === 'string') {\r\n otherArgs.shift();\r\n return $.dialog['_' + options + 'Dialog'].apply($.dialog, [this[0]].concat(otherArgs));\r\n }\r\n return this.each(function () {\r\n $.dialog._attach(this, options);\r\n });\r\n };\r\n\r\n $.dialog = new Dialog();\r\n\r\n // Add another global to avoid noConflict issues with inline event handlers\r\n window['DP_jQuery_' + dpuuid] = $;\r\n})(jQuery);","/*\r\n * Copyright (c) 2014-2019, b3log.org & hacpai.com\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * https://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\n/*\r\n * @file editor.js\r\n *\r\n * @author Liyuan Li\r\n * @author Liang Ding\r\n * @version 1.1.1.0, Jan 12, 2016\r\n */\r\nvar editors = {\r\n autocompleteMutex: false,\r\n data: [],\r\n tabs: {},\r\n getEditorByPath: function (path) {\r\n for (var i = 0, ii = editors.data.length; i < ii; i++) {\r\n if (editors.data[i].editor.options.path === path) {\r\n return editors.data[i].editor;\r\n }\r\n }\r\n },\r\n close: function () {\r\n $('.edit-panel .tabs > div[data-index=\"' + $('.edit-panel .frame').data('index') + ']').find('.ico-close').click();\r\n },\r\n closeOther: function () {\r\n var currentIndex = $(\".edit-panel .frame\").data(\"index\");\r\n\r\n // 设置全部关闭标识\r\n var removeData = [];\r\n $(\".edit-panel .tabs > div\").each(function (i) {\r\n if (currentIndex !== $(this).data(\"index\")) {\r\n removeData.push($(this).data(\"index\"));\r\n }\r\n });\r\n if (removeData.length === 0) {\r\n return false;\r\n }\r\n var firstIndex = removeData.splice(0, 1);\r\n $(\"#dialogCloseEditor\").data(\"removeData\", removeData);\r\n // 开始关闭\r\n $('.edit-panel .tabs > div[data-index=\"' + firstIndex + '\"]').find(\".ico-close\").click();\r\n },\r\n _removeAllMarker: function () {\r\n var removeData = $(\"#dialogCloseEditor\").data(\"removeData\");\r\n if (removeData && removeData.length > 0) {\r\n var removeIndex = removeData.splice(0, 1);\r\n $(\"#dialogCloseEditor\").data(\"removeData\", removeData);\r\n $('.edit-panel .tabs > div[data-index=\"' + removeIndex + '\"] .ico-close').click();\r\n }\r\n if (wide.curEditor) {\r\n wide.curEditor.focus();\r\n }\r\n },\r\n _initClose: function () {\r\n new ZeroClipboard($(\"#copyFilePath\"));\r\n\r\n // 关闭、关闭其他、关闭所有\r\n $(\".edit-panel\").on(\"mouseup\", '.tabs > div', function (event) {\r\n event.stopPropagation();\r\n\r\n if (event.button === 0) { // 左键\r\n $(\".edit-panel .frame\").hide();\r\n return false;\r\n }\r\n\r\n // event.button === 2 右键\r\n var left = event.screenX;\r\n if ($(\".side\").css(\"left\") === \"auto\" || $(\".side\").css(\"left\") === \"0px\") {\r\n left = event.screenX - $(\".side\").width();\r\n }\r\n $(\".edit-panel .frame\").show().css({\r\n \"left\": left + \"px\",\r\n \"top\": \"21px\"\r\n }).data('index', $(this).data(\"index\"));\r\n\r\n $(\"#copyFilePath\").attr('data-clipboard-text', $(this).find(\"span:eq(0)\").attr(\"title\"));\r\n return false;\r\n });\r\n },\r\n init: function () {\r\n $(\"#dialogCloseEditor\").dialog({\r\n \"modal\": true,\r\n \"height\": 90,\r\n \"width\": 260,\r\n \"title\": config.label.tip,\r\n \"hideFooter\": true,\r\n \"afterOpen\": function (fileName) {\r\n $(\"#dialogCloseEditor > div:eq(0)\").html(config.label.file\r\n + ' ' + fileName + '. ' + config.label.confirm_save + '?');\r\n $(\"#dialogCloseEditor button:eq(0)\").focus();\r\n },\r\n \"afterInit\": function () {\r\n $(\"#dialogCloseEditor button.save\").click(function () {\r\n var i = $(\"#dialogCloseEditor\").data(\"index\");\r\n wide.fmt(editors.data[i].id, editors.data[i].editor);\r\n editors.tabs.del(editors.data[i].id);\r\n $(\"#dialogCloseEditor\").dialog(\"close\");\r\n editors._removeAllMarker();\r\n });\r\n\r\n $(\"#dialogCloseEditor button.discard\").click(function () {\r\n var i = $(\"#dialogCloseEditor\").data(\"index\");\r\n editors.tabs.del(editors.data[i].id);\r\n $(\"#dialogCloseEditor\").dialog(\"close\");\r\n editors._removeAllMarker();\r\n });\r\n\r\n $(\"#dialogCloseEditor button.cancel\").click(function (event) {\r\n $(\"#dialogCloseEditor\").dialog(\"close\");\r\n editors._removeAllMarker();\r\n });\r\n }\r\n });\r\n\r\n editors.tabs = new Tabs({\r\n id: \".edit-panel\",\r\n setAfter: function () {\r\n if (wide.curEditor) {\r\n wide.curEditor.focus();\r\n }\r\n },\r\n clickAfter: function (id) {\r\n if (id === 'startPage') {\r\n wide.curEditor = undefined;\r\n $(\".footer .cursor\").text('');\r\n wide.refreshOutline();\r\n \r\n return false;\r\n }\r\n },\r\n removeBefore: function (id) {\r\n if (id === 'startPage') { // 当前关闭的 tab 是起始页\r\n editors._removeAllMarker();\r\n return true;\r\n }\r\n\r\n for (var i = 0, ii = editors.data.length; i < ii; i++) {\r\n if (editors.data[i].id === id) {\r\n if (editors.data[i].editor.doc.isClean()) {\r\n editors._removeAllMarker();\r\n return true;\r\n } else {\r\n $(\"#dialogCloseEditor\").dialog(\"open\", $('.edit-panel .tabs > div[data-index=\"'\r\n + editors.data[i].id + '\"] > span:eq(0)').text());\r\n $(\"#dialogCloseEditor\").data(\"index\", i);\r\n return false;\r\n }\r\n\r\n break;\r\n }\r\n }\r\n },\r\n removeAfter: function (id, nextId) {\r\n if ($(\".edit-panel .tabs > div\").length === 0) {\r\n // 全部 tab 都关闭时才 disables 菜单中“全部关闭”的按钮\r\n menu.disabled(['close-all']);\r\n }\r\n\r\n // 移除编辑器\r\n for (var i = 0, ii = editors.data.length; i < ii; i++) {\r\n if (editors.data[i].id === id) {\r\n editors.data.splice(i, 1);\r\n break;\r\n }\r\n }\r\n\r\n if (editors.data.length === 0) { // 起始页可能存在,所以用编辑器数据判断\r\n menu.disabled(['save-all', 'build', 'run', 'go-test', 'go-vet', 'go-get', 'go-install',\r\n 'find', 'find-next', 'find-previous', 'replace', 'replace-all',\r\n 'format', 'autocomplete', 'jump-to-decl', 'expr-info', 'find-usages', 'toggle-comment',\r\n 'edit']);\r\n\r\n // remove selected tree node\r\n tree.fileTree.cancelSelectedNode();\r\n wide.curNode = undefined;\r\n wide.curEditor = undefined;\r\n wide.refreshOutline();\r\n $(\".footer .cursor\").text('');\r\n return false;\r\n }\r\n\r\n if (!nextId) {\r\n // 编辑器区域不存在打开的 Tab\r\n // remove selected tree node\r\n tree.fileTree.cancelSelectedNode();\r\n wide.curNode = undefined;\r\n wide.curEditor = undefined;\r\n wide.refreshOutline();\r\n $(\".footer .cursor\").text('');\r\n return false;\r\n }\r\n\r\n if (nextId === editors.tabs.getCurrentId()) {\r\n // 关闭的不是当前编辑器\r\n return false;\r\n }\r\n }\r\n });\r\n\r\n this._initCodeMirrorHotKeys();\r\n this.openStartPage();\r\n this._initClose();\r\n },\r\n openStartPage: function () {\r\n wide.curEditor = undefined;\r\n wide.refreshOutline();\r\n $(\".footer .cursor\").text('');\r\n\r\n var dateFormat = function (time, fmt) {\r\n var date = new Date(time);\r\n var dateObj = {\r\n \"M+\": date.getMonth() + 1, //月份 \r\n \"d+\": date.getDate(), //日 \r\n \"h+\": date.getHours(), //小时 \r\n \"m+\": date.getMinutes(), //分 \r\n \"s+\": date.getSeconds(), //秒 \r\n \"q+\": Math.floor((date.getMonth() + 3) / 3), //季度 \r\n \"S\": date.getMilliseconds() //毫秒 \r\n };\r\n if (/(y+)/.test(fmt))\r\n fmt = fmt.replace(RegExp.$1, (date.getFullYear() + \"\").substr(4 - RegExp.$1.length));\r\n for (var k in dateObj)\r\n if (new RegExp(\"(\" + k + \")\").test(fmt)) {\r\n fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1)\r\n ? (dateObj[k]) : ((\"00\" + dateObj[k]).substr((\"\" + dateObj[k]).length)));\r\n }\r\n return fmt;\r\n };\r\n\r\n editors.tabs.add({\r\n id: \"startPage\",\r\n title: ' ' + config.label.start_page + '',\r\n content: '
    ',\r\n after: function () {\r\n $(\"#startPage\").load(config.context + '/start?sid=' + config.wideSessionId);\r\n $.ajax({\r\n url: \"https://hacpai.com/apis/articles?tags=wide,golang&p=1&size=20\",\r\n type: \"GET\",\r\n dataType: \"jsonp\",\r\n jsonp: \"callback\",\r\n success: function (data, textStatus) {\r\n var articles = data.articles;\r\n if (0 === articles.length) {\r\n return;\r\n }\r\n\r\n // 按 size = 20 取,但只保留最多 9 篇\r\n var length = articles.length;\r\n if (length > 9) {\r\n length = 9;\r\n }\r\n\r\n var listHTML = \"\");\r\n }\r\n });\r\n }\r\n });\r\n },\r\n getCurrentId: function () {\r\n var ret = editors.tabs.getCurrentId();\r\n if (ret === 'startPage') {\r\n ret = null;\r\n }\r\n \r\n return ret;\r\n },\r\n getCurrentPath: function () {\r\n var currentPath = $(\".edit-panel .tabs .current span:eq(0)\").attr(\"title\");\r\n if (currentPath === config.label.start_page) {\r\n currentPath = null;\r\n }\r\n return currentPath;\r\n },\r\n _initCodeMirrorHotKeys: function () {\r\n CodeMirror.registerHelper(\"hint\", \"go\", function (editor) {\r\n editor = wide.curEditor; // 使用当前编辑器覆盖实参,因为异步调用的原因,实参不一定正确\r\n var word = /[\\w$]+/;\r\n\r\n var cur = editor.getCursor(), curLine = editor.getLine(cur.line);\r\n\r\n var start = cur.ch, end = start;\r\n while (end < curLine.length && word.test(curLine.charAt(end))) {\r\n ++end;\r\n }\r\n while (start && word.test(curLine.charAt(start - 1))) {\r\n --start;\r\n }\r\n\r\n var request = newWideRequest();\r\n request.path = $(\".edit-panel .tabs .current > span:eq(0)\").attr(\"title\");\r\n request.code = editor.getValue();\r\n request.cursorLine = cur.line;\r\n request.cursorCh = cur.ch;\r\n\r\n var autocompleteHints = [];\r\n\r\n if (editors.autocompleteMutex && editor.state.completionActive) {\r\n return;\r\n }\r\n\r\n editors.autocompleteMutex = true;\r\n\r\n $.ajax({\r\n async: false, // 同步执行\r\n type: 'POST',\r\n url: config.context + '/autocomplete',\r\n data: JSON.stringify(request),\r\n dataType: \"json\",\r\n success: function (data) {\r\n var autocompleteArray = data[1];\r\n\r\n if (autocompleteArray) {\r\n for (var i = 0; i < autocompleteArray.length; i++) {\r\n var displayText = '',\r\n text = autocompleteArray[i].name;\r\n\r\n switch (autocompleteArray[i].class) {\r\n case \"type\":\r\n displayText = ''// + autocompleteArray[i].class \r\n + '' + autocompleteArray[i].name + ' '\r\n + autocompleteArray[i].type + '';\r\n break;\r\n case \"const\":\r\n displayText = ''// + autocompleteArray[i].class \r\n + '' + autocompleteArray[i].name + ' '\r\n + autocompleteArray[i].type + '';\r\n break;\r\n case \"var\":\r\n displayText = ''// + autocompleteArray[i].class \r\n + '' + autocompleteArray[i].name + ' '\r\n + autocompleteArray[i].type + '';\r\n break;\r\n case \"package\":\r\n displayText = ''// + autocompleteArray[i].class \r\n + '' + autocompleteArray[i].name + ' '\r\n + autocompleteArray[i].type + '';\r\n break;\r\n case \"func\":\r\n displayText = ''// + autocompleteArray[i].class \r\n + '' + autocompleteArray[i].name + ''\r\n + autocompleteArray[i].type.substring(4) + '';\r\n text += '()';\r\n break;\r\n default:\r\n console.warn(\"Can't handle autocomplete [\" + autocompleteArray[i].class + \"]\");\r\n break;\r\n }\r\n\r\n autocompleteHints[i] = {\r\n displayText: displayText,\r\n text: text\r\n };\r\n }\r\n }\r\n\r\n editor.doc.markClean();\r\n $(\".edit-panel .tabs .current > span:eq(0)\").removeClass(\"changed\");\r\n }\r\n });\r\n\r\n setTimeout(function () {\r\n editors.autocompleteMutex = false;\r\n }, 20);\r\n\r\n return {list: autocompleteHints, from: CodeMirror.Pos(cur.line, start), to: CodeMirror.Pos(cur.line, end)};\r\n });\r\n\r\n CodeMirror.commands.autocompleteAfterDot = function (cm) {\r\n var mode = cm.getMode();\r\n if (mode && \"go\" !== mode.name) {\r\n return CodeMirror.Pass;\r\n }\r\n\r\n var token = cm.getTokenAt(cm.getCursor());\r\n\r\n if (\"comment\" === token.type || \"string\" === token.type) {\r\n return CodeMirror.Pass;\r\n }\r\n\r\n setTimeout(function () {\r\n if (!cm.state.completionActive) {\r\n cm.showHint({hint: CodeMirror.hint.go, completeSingle: false});\r\n }\r\n }, 50);\r\n\r\n return CodeMirror.Pass;\r\n };\r\n\r\n CodeMirror.commands.autocompleteAnyWord = function (cm) {\r\n cm.showHint({hint: CodeMirror.hint.auto});\r\n };\r\n\r\n CodeMirror.commands.gotoLine = function (cm) {\r\n $(\"#dialogGoLinePrompt\").dialog(\"open\");\r\n };\r\n\r\n // 用于覆盖 cm 默认绑定的某些快捷键功能.\r\n CodeMirror.commands.doNothing = function (cm) {\r\n };\r\n\r\n CodeMirror.commands.exprInfo = function (cm) {\r\n var cur = wide.curEditor.getCursor();\r\n\r\n var request = newWideRequest();\r\n request.path = $(\".edit-panel .tabs .current > span:eq(0)\").attr(\"title\");\r\n request.code = wide.curEditor.getValue();\r\n request.cursorLine = cur.line;\r\n request.cursorCh = cur.ch;\r\n\r\n $.ajax({\r\n type: 'POST',\r\n url: config.context + '/exprinfo',\r\n data: JSON.stringify(request),\r\n dataType: \"json\",\r\n success: function (result) {\r\n if (!result.succ) {\r\n return;\r\n }\r\n \r\n var position = wide.curEditor.cursorCoords();\r\n $(\"body\").append('
    ' + result.data + '
    ');\r\n }\r\n });\r\n };\r\n\r\n CodeMirror.commands.copyLinesDown = function (cm) {\r\n var content = '',\r\n selectoion = cm.listSelections()[0];\r\n\r\n var from = selectoion.anchor,\r\n to = selectoion.head;\r\n if (from.line > to.line) {\r\n from = selectoion.head;\r\n to = selectoion.anchor;\r\n }\r\n\r\n for (var i = from.line, max = to.line; i <= max; i++) {\r\n if (to.ch !== 0 || i !== max) { // 下一行选中为0时,不应添加内容\r\n content += '\\n' + cm.getLine(i);\r\n }\r\n }\r\n // 下一行选中为0时,应添加到上一行末\r\n var replaceToLine = to.line;\r\n if (to.ch === 0) {\r\n replaceToLine = to.line - 1;\r\n }\r\n cm.replaceRange(content, CodeMirror.Pos(replaceToLine));\r\n\r\n var offset = replaceToLine - from.line + 1;\r\n cm.setSelection(CodeMirror.Pos(from.line + offset, from.ch),\r\n CodeMirror.Pos(to.line + offset, to.ch));\r\n };\r\n\r\n CodeMirror.commands.copyLinesUp = function (cm) {\r\n var content = '',\r\n selectoion = cm.listSelections()[0];\r\n\r\n var from = selectoion.anchor,\r\n to = selectoion.head;\r\n if (from.line > to.line) {\r\n from = selectoion.head;\r\n to = selectoion.anchor;\r\n }\r\n\r\n for (var i = from.line, max = to.line; i <= max; i++) {\r\n if (to.ch !== 0 || i !== max) { // 下一行选中为0时,不应添加内容\r\n content += '\\n' + cm.getLine(i);\r\n }\r\n }\r\n\r\n // 下一行选中为0时,应添加到上一行末\r\n var replaceToLine = to.line;\r\n if (to.ch === 0) {\r\n replaceToLine = to.line - 1;\r\n }\r\n cm.replaceRange(content, CodeMirror.Pos(replaceToLine));\r\n\r\n cm.setSelection(CodeMirror.Pos(from.line, from.ch),\r\n CodeMirror.Pos(to.line, to.ch));\r\n };\r\n\r\n CodeMirror.commands.moveLinesUp = function (cm) {\r\n var selectoion = cm.listSelections()[0];\r\n\r\n var from = selectoion.anchor,\r\n to = selectoion.head;\r\n if (from.line > to.line) {\r\n from = selectoion.head;\r\n to = selectoion.anchor;\r\n }\r\n\r\n if (from.line === 0) {\r\n return false;\r\n }\r\n // 下一行选中为0时,应添加到上一行末\r\n var replaceToLine = to.line;\r\n if (to.ch === 0) {\r\n replaceToLine = to.line - 1;\r\n }\r\n cm.replaceRange('\\n' + cm.getLine(from.line - 1), CodeMirror.Pos(replaceToLine));\r\n if (from.line === 1) {\r\n // 移除第一行的换行\r\n cm.replaceRange('', CodeMirror.Pos(0, 0),\r\n CodeMirror.Pos(1, 0));\r\n } else {\r\n cm.replaceRange('', CodeMirror.Pos(from.line - 2, cm.getLine(from.line - 2).length),\r\n CodeMirror.Pos(from.line - 1, cm.getLine(from.line - 1).length));\r\n }\r\n\r\n cm.setSelection(CodeMirror.Pos(from.line - 1, from.ch),\r\n CodeMirror.Pos(to.line - 1, to.ch));\r\n };\r\n\r\n CodeMirror.commands.moveLinesDown = function (cm) {\r\n var selectoion = cm.listSelections()[0];\r\n\r\n var from = selectoion.anchor,\r\n to = selectoion.head;\r\n if (from.line > to.line) {\r\n from = selectoion.head;\r\n to = selectoion.anchor;\r\n }\r\n\r\n if (to.line === cm.lastLine()) {\r\n return false;\r\n }\r\n\r\n // 下一行选中为0时,应添加到上一行末\r\n var replaceToLine = to.line;\r\n if (to.ch === 0) {\r\n replaceToLine = to.line - 1;\r\n }\r\n // 把选中的下一行添加到选中区域的上一行\r\n if (from.line === 0) {\r\n cm.replaceRange(cm.getLine(replaceToLine + 1) + '\\n', CodeMirror.Pos(0, 0));\r\n } else {\r\n cm.replaceRange('\\n' + cm.getLine(replaceToLine + 1), CodeMirror.Pos(from.line - 1));\r\n }\r\n // 删除选中的下一行\r\n cm.replaceRange('', CodeMirror.Pos(replaceToLine + 1, cm.getLine(replaceToLine + 1).length),\r\n CodeMirror.Pos(replaceToLine + 2, cm.getLine(replaceToLine + 2).length));\r\n\r\n cm.setSelection(CodeMirror.Pos(from.line + 1, from.ch),\r\n CodeMirror.Pos(to.line + 1, to.ch));\r\n };\r\n\r\n CodeMirror.commands.jumpToDecl = function (cm) {\r\n var cur = wide.curEditor.getCursor();\r\n\r\n var request = newWideRequest();\r\n request.path = $(\".edit-panel .tabs .current > span:eq(0)\").attr(\"title\");\r\n request.code = wide.curEditor.getValue();\r\n request.cursorLine = cur.line;\r\n request.cursorCh = cur.ch;\r\n\r\n $.ajax({\r\n type: 'POST',\r\n url: config.context + '/find/decl',\r\n data: JSON.stringify(request),\r\n dataType: \"json\",\r\n success: function (result) {\r\n if (!result.succ) {\r\n return;\r\n }\r\n \r\n var data = result.data;\r\n\r\n var tId = tree.getTIdByPath(data.path);\r\n wide.curNode = tree.fileTree.getNodeByTId(tId);\r\n tree.fileTree.selectNode(wide.curNode);\r\n\r\n tree.openFile(wide.curNode, CodeMirror.Pos(data.cursorLine - 1, data.cursorCh - 1));\r\n }\r\n });\r\n };\r\n\r\n CodeMirror.commands.findUsages = function (cm) {\r\n var cur = wide.curEditor.getCursor();\r\n\r\n var request = newWideRequest();\r\n request.path = $(\".edit-panel .tabs .current > span:eq(0)\").attr(\"title\");\r\n request.code = wide.curEditor.getValue();\r\n request.cursorLine = cur.line;\r\n request.cursorCh = cur.ch;\r\n\r\n $.ajax({\r\n type: 'POST',\r\n url: config.context + '/find/usages',\r\n data: JSON.stringify(request),\r\n dataType: \"json\",\r\n success: function (result) {\r\n if (!result.succ) {\r\n return;\r\n }\r\n\r\n editors.appendSearch(result.data, 'usages', '');\r\n }\r\n });\r\n };\r\n\r\n CodeMirror.commands.selectIdentifier = function (cm) {\r\n var cur = cm.getCursor();\r\n var word = cm.findWordAt(cur);\r\n cm.extendSelection(word.anchor, word.head);\r\n };\r\n },\r\n appendSearch: function (data, type, key) {\r\n var searcHTML = '
      ',\r\n key = key.toLowerCase();\r\n\r\n for (var i = 0, ii = data.length; i < ii; i++) {\r\n var contents = '',\r\n lowerCaseContents = data[i].contents[0].toLowerCase(),\r\n matches = lowerCaseContents.split(key),\r\n startIndex = 0,\r\n endIndex = 0;\r\n for (var j = 0, max = matches.length; j < max; j++) {\r\n startIndex = endIndex + matches[j].length;\r\n endIndex = startIndex + key.length;\r\n var keyWord = data[i].contents[0].substring(startIndex, endIndex);\r\n if (keyWord !== '') {\r\n keyWord = '' + keyWord + '';\r\n }\r\n contents += data[i].contents[0].substring(startIndex - matches[j].length, startIndex) + keyWord;\r\n }\r\n\r\n searcHTML += '
    • '\r\n + contents + \"    \" + data[i].path\r\n + ' (' + data[i].line + ':'\r\n + data[i].ch + ')
    • ';\r\n }\r\n\r\n if (data.length === 0) {\r\n searcHTML += '
    • ' + config.label.search_no_match + '
    • ';\r\n }\r\n searcHTML += '
    ';\r\n\r\n var $search = $('.bottom-window-group .search'),\r\n title = config.label.find_usages;\r\n if (type === \"founds\") {\r\n title = config.label.search_text;\r\n }\r\n if ($search.find(\"ul\").length === 0) {\r\n bottomGroup.searchTab = new Tabs({\r\n id: \".bottom-window-group .search\",\r\n removeAfter: function (id, prevId) {\r\n if ($search.find(\"ul\").length === 1) {\r\n $search.find(\".tabs\").hide();\r\n }\r\n }\r\n });\r\n\r\n $search.on(\"click\", \"li\", function () {\r\n $search.find(\"li\").removeClass(\"selected\");\r\n $(this).addClass(\"selected\");\r\n });\r\n\r\n $search.on(\"dblclick\", \"li\", function () {\r\n var $it = $(this),\r\n tId = tree.getTIdByPath($it.attr(\"title\"));\r\n tree.openFile(tree.fileTree.getNodeByTId(tId));\r\n tree.fileTree.selectNode(wide.curNode);\r\n\r\n var line = $it.find(\".position\").data(\"line\") - 1;\r\n var cursor = CodeMirror.Pos(line, $it.find(\".position\").data(\"ch\") - 1);\r\n\r\n\r\n var editor = wide.curEditor;\r\n editor.setCursor(cursor);\r\n\r\n var half = Math.floor(editor.getScrollInfo().clientHeight / editor.defaultTextHeight() / 2);\r\n var cursorCoords = editor.cursorCoords({line: cursor.line - half, ch: 0}, \"local\");\r\n editor.scrollTo(0, cursorCoords.top);\r\n\r\n wide.curEditor.focus();\r\n });\r\n\r\n $search.find(\".tabs-panel > div\").append(searcHTML);\r\n\r\n $search.find(\".tabs .first\").text(title);\r\n } else {\r\n $search.find(\".tabs\").show();\r\n bottomGroup.searchTab.add({\r\n \"id\": \"search\" + (new Date()).getTime(),\r\n \"title\": title,\r\n \"content\": searcHTML\r\n });\r\n }\r\n\r\n // focus\r\n bottomGroup.tabs.setCurrent(\"search\");\r\n windows.flowBottom();\r\n $(\".bottom-window-group .search\").focus();\r\n },\r\n // 新建一个编辑器 Tab,如果已经存在 Tab 则切换到该 Tab.\r\n newEditor: function (data, cursor) {\r\n var id = wide.curNode.id;\r\n\r\n editors.tabs.add({\r\n id: id,\r\n title: '' + wide.curNode.name + '',\r\n content: ''\r\n });\r\n\r\n menu.undisabled(['save-all', 'close-all', 'build', 'run', 'go-test', 'go-vet', 'go-get', 'go-install',\r\n 'find', 'find-next', 'find-previous', 'replace', 'replace-all',\r\n 'format', 'autocomplete', 'jump-to-decl', 'expr-info', 'find-usages', 'toggle-comment',\r\n 'edit']);\r\n\r\n var textArea = document.getElementById(\"editor\" + id);\r\n textArea.value = data.content;\r\n\r\n var editor = CodeMirror.fromTextArea(textArea, {\r\n lineNumbers: true,\r\n autofocus: true,\r\n autoCloseBrackets: true,\r\n matchBrackets: true,\r\n highlightSelectionMatches: {showToken: /\\w/},\r\n rulers: [{color: \"#ccc\", column: 120, lineStyle: \"dashed\"}],\r\n styleActiveLine: true,\r\n theme: config.editorTheme,\r\n tabSize: config.editorTabSize,\r\n indentUnit: 4,\r\n indentWithTabs: true,\r\n foldGutter: true,\r\n cursorHeight: 1,\r\n path: data.path,\r\n readOnly: wide.curNode.isGOAPI,\r\n profile: 'xhtml', // define Emmet output profile\r\n extraKeys: {\r\n \"Ctrl-\\\\\": \"autocompleteAnyWord\",\r\n \".\": \"autocompleteAfterDot\",\r\n \"Ctrl-/\": 'toggleComment',\r\n \"Ctrl-I\": \"exprInfo\",\r\n \"Ctrl-L\": \"gotoLine\",\r\n \"Ctrl-E\": \"deleteLine\",\r\n \"Ctrl-D\": \"doNothing\", // 取消默认的 deleteLine\r\n \"Ctrl-B\": \"jumpToDecl\",\r\n \"Ctrl-S\": function () {\r\n wide.saveFile();\r\n },\r\n \"Shift-Ctrl-S\": function () {\r\n menu.saveAllFiles();\r\n },\r\n \"Shift-Alt-F\": function () {\r\n var currentPath = editors.getCurrentPath();\r\n if (!currentPath) {\r\n return false;\r\n }\r\n wide.fmt(currentPath, wide.curEditor);\r\n },\r\n \"Alt-F7\": \"findUsages\",\r\n \"Shift-Alt-Enter\": function () {\r\n if (windows.isMaxEditor) {\r\n windows.restoreEditor();\r\n } else {\r\n windows.maxEditor();\r\n }\r\n },\r\n \"Shift-Ctrl-Up\": \"copyLinesUp\",\r\n \"Shift-Ctrl-Down\": \"copyLinesDown\",\r\n \"Shift-Alt-Up\": \"moveLinesUp\",\r\n \"Shift-Alt-Down\": \"moveLinesDown\",\r\n \"Shift-Alt-J\": \"selectIdentifier\"\r\n }\r\n });\r\n\r\n if (\"text/html\" === data.mode) {\r\n emmetCodeMirror(editor);\r\n }\r\n\r\n editor.on('cursorActivity', function (cm) {\r\n $(\".edit-exprinfo\").remove();\r\n var cursor = cm.getCursor();\r\n\r\n $(\".footer .cursor\").text('| ' + (cursor.line + 1) + ':' + (cursor.ch + 1) + ' |');\r\n });\r\n\r\n editor.on('blur', function (cm) {\r\n $(\".edit-exprinfo\").remove();\r\n });\r\n\r\n editor.on('changes', function (cm) {\r\n if (cm.doc.isClean()) { // no modification\r\n $(\".edit-panel .tabs > div\").each(function () {\r\n var $span = $(this).find(\"span:eq(0)\");\r\n if ($span.attr(\"title\") === cm.options.path) {\r\n $span.removeClass(\"changed\");\r\n }\r\n });\r\n\r\n return;\r\n }\r\n\r\n // changed\r\n\r\n $(\".edit-panel .tabs > div\").each(function () {\r\n var $span = $(this).find(\"span:eq(0)\");\r\n if ($span.attr(\"title\") === cm.options.path) {\r\n $span.addClass(\"changed\");\r\n }\r\n });\r\n });\r\n\r\n editor.on('keydown', function (cm, evt) {\r\n if (evt.altKey || evt.ctrlKey || evt.shiftKey) {\r\n return;\r\n }\r\n\r\n var k = evt.which;\r\n\r\n if (k < 48) {\r\n return;\r\n }\r\n\r\n // hit [0-9]\r\n\r\n if (k > 57 && k < 65) {\r\n return;\r\n }\r\n\r\n // hit [a-z]\r\n\r\n if (k > 90) {\r\n return;\r\n }\r\n\r\n if (config.autocomplete) {\r\n if (0.5 <= Math.random()) {\r\n CodeMirror.commands.autocompleteAfterDot(cm);\r\n }\r\n }\r\n });\r\n\r\n editor.setSize('100%', $(\".edit-panel\").height() - $(\".edit-panel .tabs\").height());\r\n editor.setOption(\"mode\", data.mode);\r\n editor.setOption(\"gutters\", [\"CodeMirror-lint-markers\", \"CodeMirror-foldgutter\"]);\r\n\r\n if (\"wide\" !== config.keymap) {\r\n editor.setOption(\"keyMap\", config.keymap);\r\n }\r\n\r\n if (\"text/x-go\" === data.mode || \"application/json\" === data.mode) {\r\n editor.setOption(\"lint\", true);\r\n }\r\n\r\n if (\"application/xml\" === data.mode || \"text/html\" === data.mode) {\r\n editor.setOption(\"autoCloseTags\", true);\r\n }\r\n\r\n wide.curEditor = editor;\r\n editors.data.push({\r\n \"editor\": editor,\r\n \"id\": id\r\n });\r\n\r\n $(\".footer .cursor\").text('| ' + (cursor.line + 1) + ':' + (cursor.ch + 1) + ' |');\r\n\r\n var half = Math.floor(wide.curEditor.getScrollInfo().clientHeight / wide.curEditor.defaultTextHeight() / 2);\r\n var cursorCoords = wide.curEditor.cursorCoords({line: cursor.line - half, ch: 0}, \"local\");\r\n wide.curEditor.scrollTo(0, cursorCoords.top);\r\n\r\n editor.setCursor(cursor);\r\n editor.focus();\r\n }\r\n};","/*\r\n * Copyright (c) 2014-2019, b3log.org & hacpai.com\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * https://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\n/*\r\n * @file notification.js\r\n *\r\n * @author Liyuan Li\r\n * @author Liang Ding\r\n * @version 1.0.0.1, Dec 8, 2015\r\n */\r\nvar notification = {\r\n init: function () {\r\n $(\".notification-count\").click(function () {\r\n bottomGroup.tabs.setCurrent(\"notification\");\r\n $(\".bottom-window-group .notification\").focus();\r\n $(this).hide();\r\n });\r\n\r\n this._initWS();\r\n },\r\n _initWS: function () {\r\n var notificationWS = new ReconnectingWebSocket(config.channel + '/notification/ws?sid=' + config.wideSessionId);\r\n\r\n notificationWS.onopen = function () {\r\n console.log('[notification onopen] connected');\r\n };\r\n\r\n notificationWS.onmessage = function (e) {\r\n var data = JSON.parse(e.data),\r\n $notification = $('.bottom-window-group .notification > table'),\r\n notificationHTML = '';\r\n \r\n if (data.cmd && \"init-notification\" === data.cmd) {\r\n console.log('[notification onmessage]' + e.data);\r\n \r\n return;\r\n }\r\n\r\n notificationHTML += '' + data.severity\r\n + '' + data.message\r\n + '' + data.type + '';\r\n $notification.append(notificationHTML);\r\n\r\n $(\".notification-count\").show();\r\n };\r\n\r\n notificationWS.onclose = function (e) {\r\n console.log('[notification onclose] disconnected (' + e.code + ')');\r\n };\r\n\r\n notificationWS.onerror = function (e) {\r\n console.log('[notification onerror]');\r\n };\r\n }\r\n};","/*\r\n * Copyright (c) 2014-2019, b3log.org & hacpai.com\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * https://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\n/*\r\n * @file tree.js\r\n *\r\n * @author Liyuan Li\r\n * @author Liang Ding\r\n * @version 1.0.1.1, Dec 15, 2015\r\n */\r\nvar tree = {\r\n fileTree: undefined,\r\n // 递归获取当前节点展开中的最后一个节点\r\n getCurrentNodeLastNode: function (node) {\r\n var returnNode = node.children[node.children.length - 1];\r\n if (returnNode.open) {\r\n return tree.getCurrentNodeLastNode(returnNode);\r\n } else {\r\n return returnNode;\r\n }\r\n },\r\n // 按照树展现获取下一个节点\r\n getNextShowNode: function (node) {\r\n if (node.level !== 0) {\r\n if (node.getParentNode().getNextNode()) {\r\n return node.getParentNode().getNextNode();\r\n } else {\r\n return tree.getNextShowNode(node.getParentNode());\r\n }\r\n } else {\r\n return node.getNextNode();\r\n }\r\n },\r\n isBottomNode: function (node) {\r\n if (node.open) {\r\n return false;\r\n }\r\n\r\n if (node.getParentNode()) {\r\n if (node.getParentNode().isLastNode) {\r\n return tree.isBottomNode(node.getParentNode());\r\n } else {\r\n return false;\r\n }\r\n } else {\r\n if (node.isLastNode) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n },\r\n getTIdByPath: function (path) {\r\n var nodes = tree.fileTree.transformToArray(tree.fileTree.getNodes());\r\n for (var i = 0, ii = nodes.length; i < ii; i++) {\r\n if (nodes[i].path === path) {\r\n return nodes[i].tId;\r\n }\r\n }\r\n\r\n return undefined;\r\n },\r\n getOpenPaths: function () {\r\n var nodes = tree.fileTree.transformToArray(tree.fileTree.getNodes()),\r\n paths = [];\r\n for (var i = 0, ii = nodes.length; i < ii; i++) {\r\n if (nodes[i].open) {\r\n paths.push(nodes[i].path);\r\n }\r\n }\r\n\r\n return paths;\r\n },\r\n getAllParents: function (node, parents) {\r\n if (!parents) {\r\n parents = [];\r\n }\r\n\r\n if (!node || !node.parentTId) {\r\n return parents;\r\n } else {\r\n parents.push(node.getParentNode());\r\n return tree.getAllParents(node.getParentNode(), parents);\r\n }\r\n },\r\n isParents: function (tId, parentPath) {\r\n var node = tree.fileTree.getNodeByTId(tId);\r\n if (!node || !node.parentTId) {\r\n return false;\r\n } else {\r\n var parentNode = tree.fileTree.getNodeByTId(node.parentTId);\r\n if (node.path === parentPath) {\r\n return true;\r\n } else {\r\n return tree.isParents(parentNode.tId, parentPath);\r\n }\r\n }\r\n },\r\n isDir: function () {\r\n if (wide.curNode.iconSkin.indexOf(\"ico-ztree-dir\") === 0) {\r\n return true;\r\n }\r\n\r\n return false;\r\n },\r\n newFile: function (it) {\r\n if ($(it).hasClass(\"disabled\")) {\r\n return false;\r\n }\r\n\r\n $(\"#dialogNewFilePrompt\").dialog(\"open\");\r\n },\r\n newDir: function (it) {\r\n if ($(it).hasClass(\"disabled\")) {\r\n return false;\r\n }\r\n\r\n $(\"#dialogNewDirPrompt\").dialog(\"open\");\r\n },\r\n removeIt: function (it) {\r\n if (it) {\r\n if ($(it).hasClass(\"disabled\")) {\r\n return false;\r\n }\r\n } else {\r\n if (!wide.curNode.removable) {\r\n return false;\r\n }\r\n }\r\n\r\n $(\"#dialogRemoveConfirm\").dialog(\"open\");\r\n },\r\n rename: function (it) {\r\n if (it) {\r\n if ($(it).hasClass(\"disabled\")) {\r\n return false;\r\n }\r\n }\r\n\r\n $(\"#dialogRenamePrompt\").dialog(\"open\");\r\n },\r\n export: function () {\r\n var request = newWideRequest(),\r\n isSucc = false;\r\n request.path = wide.curNode.path;\r\n\r\n $.ajax({\r\n async: false,\r\n type: 'POST',\r\n url: config.context + '/file/zip/new',\r\n data: JSON.stringify(request),\r\n dataType: \"json\",\r\n success: function (result) {\r\n if (!result.succ) {\r\n $(\"#dialogAlert\").dialog(\"open\", result.msg);\r\n\r\n return false;\r\n }\r\n\r\n isSucc = true;\r\n }\r\n });\r\n\r\n if (isSucc) {\r\n window.open(config.context + '/file/zip?path=' + wide.curNode.path + \".zip\");\r\n }\r\n },\r\n crossCompile: function (platform) {\r\n var request = newWideRequest();\r\n request.path = wide.curNode.path;\r\n request.platform = platform;\r\n\r\n $.ajax({\r\n async: false,\r\n type: 'POST',\r\n url: config.context + '/cross',\r\n data: JSON.stringify(request),\r\n dataType: \"json\",\r\n success: function (result) {\r\n if (!result.succ) {\r\n $(\"#dialogAlert\").dialog(\"open\", result.msg);\r\n\r\n return false;\r\n }\r\n }\r\n });\r\n },\r\n decompress: function () {\r\n var request = newWideRequest();\r\n request.path = wide.curNode.path;\r\n\r\n $.ajax({\r\n async: false,\r\n type: 'POST',\r\n url: config.context + '/file/decompress',\r\n data: JSON.stringify(request),\r\n dataType: \"json\",\r\n success: function (result) {\r\n if (!result.succ) {\r\n $(\"#dialogAlert\").dialog(\"open\", result.msg);\r\n\r\n return false;\r\n }\r\n\r\n var dir = wide.curNode.getParentNode();\r\n tree.fileTree.reAsyncChildNodes(dir, \"refresh\");\r\n }\r\n });\r\n },\r\n refresh: function (it) {\r\n if (it) {\r\n if ($(it).hasClass(\"disabled\")) {\r\n return false;\r\n }\r\n }\r\n\r\n tree.fileTree.reAsyncChildNodes(wide.curNode, \"refresh\", true);\r\n },\r\n gitClone: function (it) {\r\n if (it) {\r\n if ($(it).hasClass(\"disabled\")) {\r\n return false;\r\n }\r\n }\r\n\r\n $(\"#dialogGitClonePrompt\").dialog('open');\r\n },\r\n import: function () {\r\n var request = newWideRequest();\r\n request.path = wide.curNode.path;\r\n\r\n $('#importFileupload').fileupload({\r\n url: \"/file/upload?path=\" + request.path,\r\n dataType: 'json',\r\n formData: request,\r\n done: function (e, result) {\r\n tree.fileTree.reAsyncChildNodes(wide.curNode, \"refresh\");\r\n },\r\n fail: function () {\r\n console.log(arguments);\r\n }\r\n });\r\n },\r\n init: function () {\r\n $(\"#file\").click(function () {\r\n $(this).focus();\r\n });\r\n\r\n var request = newWideRequest();\r\n\r\n $.ajax({\r\n type: 'POST',\r\n url: config.context + '/files',\r\n data: JSON.stringify(request),\r\n dataType: \"json\",\r\n success: function (result) {\r\n if (result.succ) {\r\n var $dirRMenu = $(\"#dirRMenu\");\r\n var $fileRMenu = $(\"#fileRMenu\");\r\n var setting = {\r\n data: {\r\n key: {\r\n title: \"path\"\r\n }\r\n },\r\n view: {\r\n showTitle: true,\r\n selectedMulti: false\r\n },\r\n async: {\r\n enable: true,\r\n url: config.context + \"/file/refresh\",\r\n autoParam: [\"path\"]\r\n },\r\n callback: {\r\n onDblClick: function (event, treeId, treeNode) {\r\n if (treeNode) {\r\n tree.openFile(treeNode);\r\n }\r\n },\r\n onRightClick: function (event, treeId, treeNode) {\r\n if (treeNode && !treeNode.isGOAPI) {\r\n menu.undisabled(['import', 'export', 'git-clone']);\r\n\r\n wide.curNode = treeNode;\r\n tree.fileTree.selectNode(treeNode);\r\n\r\n if (!tree.isDir()) { // if right click on a file\r\n if (wide.curNode.removable) {\r\n $fileRMenu.find(\".remove\").removeClass(\"disabled\");\r\n } else {\r\n $fileRMenu.find(\".remove\").addClass(\"disabled\");\r\n }\r\n\r\n if (-1 === wide.curNode.path.indexOf(\"zip\", wide.curNode.path.length - \"zip\".length)) { // !path.endsWith(\"zip\")\r\n $fileRMenu.find(\".decompress\").hide();\r\n } else {\r\n $fileRMenu.find(\".decompress\").show();\r\n }\r\n\r\n if (-1 === wide.curNode.path.indexOf(\"go\", wide.curNode.path.length - \"go\".length)) { // !path.endsWith(\"go\")\r\n $fileRMenu.find(\".linux64\").hide();\r\n } else {\r\n $fileRMenu.find(\".linux64\").show();\r\n }\r\n\r\n var top = event.clientY - 10;\r\n if ($fileRMenu.height() + top > $('.content').height()) {\r\n top = top - $fileRMenu.height() - 25;\r\n }\r\n $fileRMenu.css({\r\n \"top\": top + \"px\",\r\n \"left\": event.clientX + \"px\",\r\n \"display\": \"block\"\r\n }).show();\r\n\r\n $dirRMenu.hide();\r\n\r\n menu.disabled(['import', 'git-clone']);\r\n } else { // 右击了目录\r\n if (wide.curNode.removable) {\r\n $dirRMenu.find(\".remove\").removeClass(\"disabled\");\r\n } else {\r\n $dirRMenu.find(\".remove\").addClass(\"disabled\");\r\n }\r\n\r\n if (wide.curNode.creatable) {\r\n $dirRMenu.find(\".create\").removeClass(\"disabled\");\r\n } else {\r\n $dirRMenu.find(\".create\").addClass(\"disabled\");\r\n }\r\n\r\n var top = event.clientY - 10;\r\n if ($dirRMenu.height() + top > $('.content').height()) {\r\n top = top - $dirRMenu.height() - 25;\r\n }\r\n\r\n $dirRMenu.css({\r\n \"top\": top + \"px\",\r\n \"left\": event.clientX + \"px\",\r\n \"display\": \"block\"\r\n }).show();\r\n\r\n $fileRMenu.hide();\r\n }\r\n $(\"#files\").focus();\r\n }\r\n },\r\n onClick: function (event, treeId, treeNode, clickFlag) {\r\n if (treeNode) {\r\n wide.curNode = treeNode;\r\n tree.fileTree.selectNode(treeNode);\r\n\r\n menu.undisabled(['import', 'export', 'git-clone']);\r\n if (!tree.isDir()) {\r\n menu.disabled(['import', 'git-clone']);\r\n }\r\n\r\n $(\"#files\").focus();\r\n }\r\n }\r\n }\r\n };\r\n tree.fileTree = $.fn.zTree.init($(\"#files\"), setting, result.data.children);\r\n\r\n session.restore();\r\n }\r\n }\r\n });\r\n\r\n this._initSearch();\r\n this._initRename();\r\n },\r\n openFile: function (treeNode, cursor) {\r\n wide.curNode = treeNode;\r\n var tempCursor = cursor;\r\n\r\n for (var i = 0, ii = editors.data.length; i < ii; i++) {\r\n // 该节点文件已经打开\r\n if (editors.data[i].id === treeNode.path) {\r\n editors.tabs.setCurrent(treeNode.path);\r\n wide.curEditor = editors.data[i].editor;\r\n\r\n if (!tempCursor) {\r\n tempCursor = wide.curEditor.getCursor();\r\n }\r\n $(\".footer .cursor\").text('| ' + (tempCursor.line + 1) + ':' + (tempCursor.ch + 1) + ' |');\r\n\r\n wide.curEditor.setCursor(tempCursor);\r\n var half = Math.floor(wide.curEditor.getScrollInfo().clientHeight / wide.curEditor.defaultTextHeight() / 2);\r\n var cursorCoords = wide.curEditor.cursorCoords({line: tempCursor.line - half, ch: 0}, \"local\");\r\n wide.curEditor.scrollTo(0, cursorCoords.top);\r\n wide.curEditor.focus();\r\n\r\n wide.refreshOutline();\r\n return false;\r\n }\r\n }\r\n\r\n if (!tree.isDir()) {\r\n var request = newWideRequest();\r\n request.path = treeNode.path;\r\n\r\n $.ajax({\r\n async: false,\r\n type: 'POST',\r\n url: config.context + '/file',\r\n data: JSON.stringify(request),\r\n dataType: \"json\",\r\n success: function (result) {\r\n if (!result.succ) {\r\n $(\"#dialogAlert\").dialog(\"open\", result.msg);\r\n\r\n return false;\r\n }\r\n\r\n var data = result.data;\r\n\r\n if (!data.mode) {\r\n var mode = CodeMirror.findModeByFileName(treeNode.path);\r\n if (mode) {\r\n data.mode = mode.mime;\r\n } else {\r\n data.mode = 'text/plain';\r\n }\r\n }\r\n\r\n if (!data.mode) {\r\n console.error(\"Can't find mode by file name [\" + treeNode.path + \"]\");\r\n }\r\n\r\n if (\"img\" === data.mode) { // 是图片文件的话新建 tab 打开\r\n // 最好是开 tab,但这个最终取决于浏览器设置\r\n var w = window.open(config.context + data.path);\r\n return false;\r\n }\r\n\r\n if (!tempCursor) {\r\n tempCursor = CodeMirror.Pos(0, 0);\r\n }\r\n\r\n editors.newEditor(data, tempCursor);\r\n\r\n wide.refreshOutline();\r\n }\r\n });\r\n }\r\n },\r\n _initSearch: function () {\r\n $(\"#dialogSearchForm > input:eq(0)\").keyup(function (event) {\r\n var $okBtn = $(this).closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\");\r\n if (event.which === 13 && !$okBtn.prop(\"disabled\")) {\r\n $okBtn.click();\r\n }\r\n\r\n if ($.trim($(this).val()) === \"\") {\r\n $okBtn.prop(\"disabled\", true);\r\n } else {\r\n $okBtn.prop(\"disabled\", false);\r\n }\r\n });\r\n\r\n $(\"#dialogSearchForm > input:eq(1)\").keyup(function (event) {\r\n var $okBtn = $(this).closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\");\r\n if (event.which === 13 && !$okBtn.prop(\"disabled\")) {\r\n $okBtn.click();\r\n }\r\n });\r\n\r\n $(\"#dialogSearchForm\").dialog({\r\n \"modal\": true,\r\n \"height\": 80,\r\n \"width\": 260,\r\n \"title\": config.label.search,\r\n \"okText\": config.label.search,\r\n \"cancelText\": config.label.cancel,\r\n \"afterOpen\": function () {\r\n $(\"#dialogSearchForm > input:eq(0)\").val('').focus();\r\n $(\"#dialogSearchForm > input:eq(1)\").val('');\r\n $(\"#dialogSearchForm\").closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\").prop(\"disabled\", true);\r\n },\r\n \"ok\": function () {\r\n var request = newWideRequest();\r\n\r\n if (!wide.curNode) {\r\n request.dir = \"\";\r\n } else {\r\n request.dir = wide.curNode.path;\r\n }\r\n\r\n request.text = $(\"#dialogSearchForm > input:eq(0)\").val();\r\n request.extension = $(\"#dialogSearchForm > input:eq(1)\").val();\r\n\r\n $.ajax({\r\n type: 'POST',\r\n url: config.context + '/file/search/text',\r\n data: JSON.stringify(request),\r\n dataType: \"json\",\r\n success: function (result) {\r\n if (!result.succ) {\r\n return;\r\n }\r\n\r\n $(\"#dialogSearchForm\").dialog(\"close\");\r\n editors.appendSearch(result.data, 'founds', request.text);\r\n }\r\n });\r\n }\r\n });\r\n },\r\n _initRename: function () {\r\n $(\"#dialogRenamePrompt\").dialog({\r\n \"modal\": true,\r\n \"height\": 52,\r\n \"width\": 260,\r\n \"title\": config.label.rename,\r\n \"okText\": config.label.rename,\r\n \"cancelText\": config.label.cancel,\r\n \"afterOpen\": function () {\r\n $(\"#dialogRenamePrompt\").closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\").prop(\"disabled\", true);\r\n $(\"#dialogRenamePrompt > input\").val(wide.curNode.name).select().focus();\r\n },\r\n \"ok\": function () {\r\n var name = $(\"#dialogRenamePrompt > input\").val(),\r\n request = newWideRequest();\r\n\r\n request.oldPath = wide.curNode.path;\r\n request.newPath = wide.curNode.path.substring(0, wide.curNode.path.lastIndexOf(\"/\") + 1) + name;\r\n\r\n $.ajax({\r\n type: 'POST',\r\n url: config.context + '/file/rename',\r\n data: JSON.stringify(request),\r\n dataType: \"json\",\r\n success: function (result) {\r\n if (!result.succ) {\r\n $(\"#dialogRenamePrompt\").dialog(\"close\");\r\n bottomGroup.tabs.setCurrent(\"notification\");\r\n windows.flowBottom();\r\n $(\".bottom-window-group .notification\").focus();\r\n return false;\r\n }\r\n\r\n $(\"#dialogRenamePrompt\").dialog(\"close\");\r\n }\r\n });\r\n }\r\n });\r\n }\r\n};","/*\r\n * Copyright (c) 2014-2019, b3log.org & hacpai.com\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * https://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\n/*\r\n * @file wide.js\r\n *\r\n * @author Liyuan Li\r\n * @author Liang Ding\r\n * @version 1.0.0.1, Dec 8, 2015\r\n */\r\nvar wide = {\r\n curNode: undefined,\r\n curEditor: undefined,\r\n curProcessId: undefined, // curent running process id (pid)\r\n refreshOutline: function () {\r\n if (!wide.curEditor ||\r\n (wide.curEditor && wide.curEditor.doc.getMode().name !== \"go\")) {\r\n $(\"#outline\").html('');\r\n return false;\r\n }\r\n\r\n var request = newWideRequest();\r\n request.code = wide.curEditor.getValue();\r\n\r\n $.ajax({\r\n type: 'POST',\r\n async: false,\r\n url: config.context + '/outline',\r\n data: JSON.stringify(request),\r\n dataType: \"json\",\r\n success: function (result) {\r\n if (!result.succ) {\r\n return;\r\n }\r\n\r\n var data = result.data;\r\n\r\n var outlineHTML = '
      ',\r\n decls = ['constDecls', 'varDecls', 'funcDecls',\r\n 'structDecls', 'interfaceDecls', 'typeDecls'];\r\n\r\n for (var i = 0, max = decls.length; i < max; i++) {\r\n var key = decls[i];\r\n for (var j = 0, maxj = data[key].length; j < maxj; j++) {\r\n var obj = data[key][j];\r\n outlineHTML += '
    • ' + obj.Name + '
    • ';\r\n }\r\n }\r\n $(\"#outline\").html(outlineHTML + '
    ');\r\n\r\n $(\"#outline li\").dblclick(function () {\r\n var $it = $(this),\r\n cursor = CodeMirror.Pos($it.data('line'), $it.data(\"ch\"));\r\n\r\n var editor = wide.curEditor;\r\n editor.setCursor(cursor);\r\n\r\n var half = Math.floor(editor.getScrollInfo().clientHeight / editor.defaultTextHeight() / 2);\r\n var cursorCoords = editor.cursorCoords({line: cursor.line - half, ch: 0}, \"local\");\r\n editor.scrollTo(0, cursorCoords.top);\r\n\r\n editor.focus();\r\n });\r\n }\r\n });\r\n },\r\n _initDialog: function () {\r\n $(\".dialog-prompt > input\").keyup(function (event) {\r\n var $okBtn = $(this).closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\");\r\n if (event.which === 13 && !$okBtn.prop(\"disabled\")) {\r\n $okBtn.click();\r\n }\r\n\r\n if ($.trim($(this).val()) === \"\") {\r\n $okBtn.prop(\"disabled\", true);\r\n } else {\r\n $okBtn.prop(\"disabled\", false);\r\n }\r\n });\r\n\r\n $(\"#dialogAlert\").dialog({\r\n \"modal\": true,\r\n \"height\": 40,\r\n \"width\": 350,\r\n \"title\": config.label.tip,\r\n \"hiddenOk\": true,\r\n \"cancelText\": config.label.confirm,\r\n \"afterOpen\": function (msg) {\r\n $(\"#dialogAlert\").html(msg);\r\n }\r\n });\r\n\r\n $(\"#dialogRemoveConfirm\").dialog({\r\n \"modal\": true,\r\n \"height\": 36,\r\n \"width\": 260,\r\n \"title\": config.label.delete,\r\n \"okText\": config.label.delete,\r\n \"cancelText\": config.label.cancel,\r\n \"afterOpen\": function () {\r\n $(\"#dialogRemoveConfirm > b\").html('\"' + wide.curNode.name + '\"');\r\n },\r\n \"ok\": function () {\r\n var request = newWideRequest();\r\n request.path = wide.curNode.path;\r\n\r\n $.ajax({\r\n type: 'POST',\r\n url: config.context + '/file/remove',\r\n data: JSON.stringify(request),\r\n dataType: \"json\",\r\n success: function (result) {\r\n if (!result.succ) {\r\n $(\"#dialogRemoveConfirm\").dialog(\"close\");\r\n bottomGroup.tabs.setCurrent(\"notification\");\r\n windows.flowBottom();\r\n $(\".bottom-window-group .notification\").focus();\r\n return false;\r\n }\r\n\r\n $(\"#dialogRemoveConfirm\").dialog(\"close\");\r\n }\r\n });\r\n }\r\n });\r\n\r\n $(\"#dialogNewFilePrompt\").dialog({\r\n \"modal\": true,\r\n \"height\": 52,\r\n \"width\": 260,\r\n \"title\": config.label.create_file,\r\n \"okText\": config.label.create,\r\n \"cancelText\": config.label.cancel,\r\n \"afterOpen\": function () {\r\n $(\"#dialogNewFilePrompt > input\").val('').focus();\r\n $(\"#dialogNewFilePrompt\").closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\").prop(\"disabled\", true);\r\n },\r\n \"ok\": function () {\r\n var request = newWideRequest(),\r\n name = $(\"#dialogNewFilePrompt > input\").val();\r\n\r\n request.path = wide.curNode.path + \"/\" + name;\r\n request.fileType = \"f\";\r\n\r\n $.ajax({\r\n type: 'POST',\r\n url: config.context + '/file/new',\r\n data: JSON.stringify(request),\r\n dataType: \"json\",\r\n success: function (result) {\r\n if (!result.succ) {\r\n $(\"#dialogNewFilePrompt\").dialog(\"close\");\r\n bottomGroup.tabs.setCurrent(\"notification\");\r\n windows.flowBottom();\r\n $(\".bottom-window-group .notification\").focus();\r\n return false;\r\n }\r\n\r\n $(\"#dialogNewFilePrompt\").dialog(\"close\");\r\n\r\n setTimeout(function () { // Delay, waiting the file change notified and then open it\r\n var tId = tree.getTIdByPath(request.path);\r\n tree.openFile(tree.fileTree.getNodeByTId(tId));\r\n tree.fileTree.selectNode(wide.curNode);\r\n }, 100);\r\n }\r\n });\r\n }\r\n });\r\n\r\n $(\"#dialogNewDirPrompt\").dialog({\r\n \"modal\": true,\r\n \"height\": 52,\r\n \"width\": 260,\r\n \"title\": config.label.create_dir,\r\n \"okText\": config.label.create,\r\n \"cancelText\": config.label.cancel,\r\n \"afterOpen\": function () {\r\n $(\"#dialogNewDirPrompt > input\").val('').focus();\r\n $(\"#dialogNewDirPrompt\").closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\").prop(\"disabled\", true);\r\n },\r\n \"ok\": function () {\r\n var name = $(\"#dialogNewDirPrompt > input\").val(),\r\n request = newWideRequest();\r\n\r\n request.path = wide.curNode.path + \"/\" + name;\r\n request.fileType = \"d\";\r\n\r\n $.ajax({\r\n type: 'POST',\r\n url: config.context + '/file/new',\r\n data: JSON.stringify(request),\r\n dataType: \"json\",\r\n success: function (result) {\r\n if (!result.succ) {\r\n $(\"#dialogNewDirPrompt\").dialog(\"close\");\r\n bottomGroup.tabs.setCurrent(\"notification\");\r\n windows.flowBottom();\r\n $(\".bottom-window-group .notification\").focus();\r\n return false;\r\n }\r\n\r\n $(\"#dialogNewDirPrompt\").dialog(\"close\");\r\n }\r\n });\r\n }\r\n });\r\n\r\n $(\"#dialogGoFilePrompt\").dialog({\r\n \"modal\": true,\r\n \"height\": 320,\r\n \"width\": 660,\r\n \"title\": config.label.goto_file,\r\n \"okText\": config.label.go,\r\n \"cancelText\": config.label.cancel,\r\n \"afterInit\": function () {\r\n $(\"#dialogGoFilePrompt\").on(\"dblclick\", \"li\", function () {\r\n var tId = tree.getTIdByPath($(this).find(\".ft-small\").text());\r\n tree.openFile(tree.fileTree.getNodeByTId(tId));\r\n tree.fileTree.selectNode(wide.curNode);\r\n $(\"#dialogGoFilePrompt\").dialog(\"close\");\r\n wide.curEditor.focus();\r\n });\r\n\r\n $(\"#dialogGoFilePrompt\").on(\"click\", \"li\", function () {\r\n var $list = $(\"#dialogGoFilePrompt > .list\");\r\n $list.find(\"li\").removeClass(\"selected\");\r\n $list.data(\"index\", $(this).data(\"index\"));\r\n $(this).addClass(\"selected\");\r\n });\r\n\r\n hotkeys.bindList($(\"#dialogGoFilePrompt > input\"), $(\"#dialogGoFilePrompt > .list\"), function ($selected) {\r\n var tId = tree.getTIdByPath($selected.find(\".ft-small\").text());\r\n tree.openFile(tree.fileTree.getNodeByTId(tId));\r\n tree.fileTree.selectNode(wide.curNode);\r\n $(\"#dialogGoFilePrompt\").dialog(\"close\");\r\n wide.curEditor.focus();\r\n });\r\n\r\n $(\"#dialogGoFilePrompt > input\").bind(\"input\", function () {\r\n var name = $(\"#dialogGoFilePrompt > input\").val();\r\n\r\n var request = newWideRequest();\r\n request.path = '';\r\n request.name = '*' + name + '*';\r\n if (wide.curNode) {\r\n request.path = wide.curNode.path;\r\n }\r\n\r\n $.ajax({\r\n type: 'POST',\r\n url: config.context + '/file/find/name',\r\n data: JSON.stringify(request),\r\n dataType: \"json\",\r\n success: function (result) {\r\n if (!result.succ) {\r\n return;\r\n }\r\n\r\n var data = result.data;\r\n\r\n var goFileHTML = '';\r\n for (var i = 0, max = data.length; i < max; i++) {\r\n var path = data[i].path,\r\n name = path.substr(path.lastIndexOf(\"/\") + 1),\r\n icoSkin = wide.getClassBySuffix(name.split(\".\")[1]);\r\n if (i === 0) {\r\n goFileHTML += '
  • '\r\n + name + '    '\r\n + path + '
  • ';\r\n } else {\r\n goFileHTML += '
  • '\r\n + name + '    '\r\n + path + '
  • ';\r\n }\r\n }\r\n\r\n $(\"#dialogGoFilePrompt > ul\").html(goFileHTML);\r\n }\r\n });\r\n });\r\n },\r\n \"afterOpen\": function () {\r\n $(\"#dialogGoFilePrompt > input\").val('').focus();\r\n $(\"#dialogGoFilePrompt\").closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\").prop(\"disabled\", true);\r\n $(\"#dialogGoFilePrompt .list\").html('').data(\"index\", 0);\r\n },\r\n \"ok\": function () {\r\n var tId = tree.getTIdByPath($(\"#dialogGoFilePrompt .selected .ft-small\").text());\r\n tree.openFile(tree.fileTree.getNodeByTId(tId));\r\n tree.fileTree.selectNode(wide.curNode);\r\n $(\"#dialogGoFilePrompt\").dialog(\"close\");\r\n wide.curEditor.focus();\r\n }\r\n });\r\n\r\n $(\"#dialogGoLinePrompt\").dialog({\r\n \"modal\": true,\r\n \"height\": 52,\r\n \"width\": 260,\r\n \"title\": config.label.goto_line,\r\n \"okText\": config.label.go,\r\n \"cancelText\": config.label.cancel,\r\n \"afterOpen\": function () {\r\n $(\"#dialogGoLinePrompt > input\").val('').focus();\r\n $(\"#dialogGoLinePrompt\").closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\").prop(\"disabled\", true);\r\n },\r\n \"ok\": function () {\r\n var line = parseInt($(\"#dialogGoLinePrompt > input\").val()) - 1;\r\n $(\"#dialogGoLinePrompt\").dialog(\"close\");\r\n\r\n var editor = wide.curEditor;\r\n var cursor = editor.getCursor();\r\n\r\n editor.setCursor(CodeMirror.Pos(line, cursor.ch));\r\n\r\n var half = Math.floor(editor.getScrollInfo().clientHeight / editor.defaultTextHeight() / 2);\r\n var cursorCoords = editor.cursorCoords({line: line - half, ch: cursor.ch}, \"local\");\r\n editor.scrollTo(0, cursorCoords.top);\r\n\r\n editor.focus();\r\n }\r\n });\r\n },\r\n _initWS: function () {\r\n var outputWS = new ReconnectingWebSocket(config.channel + '/output/ws?sid=' + config.wideSessionId);\r\n outputWS.onopen = function () {\r\n console.log('[output onopen] connected');\r\n };\r\n\r\n outputWS.onmessage = function (e) {\r\n console.log('[output onmessage]' + e.data);\r\n var data = JSON.parse(e.data);\r\n\r\n if (goLintFound) {\r\n goLintFound = [];\r\n }\r\n\r\n if ('run' === data.nextCmd) {\r\n var request = newWideRequest();\r\n request.executable = data.executable;\r\n\r\n $.ajax({\r\n type: 'POST',\r\n url: config.context + '/run',\r\n data: JSON.stringify(request),\r\n dataType: \"json\"\r\n });\r\n }\r\n\r\n switch (data.cmd) {\r\n case 'run':\r\n var content = $('.bottom-window-group .output > div').html();\r\n if (!wide.curProcessId || '' === content) {\r\n bottomGroup.fillOutput(content + '
    ' + data.output + '
    ');\r\n } else {\r\n bottomGroup.fillOutput(content.replace(/<\\/pre>$/g, data.output + ''));\r\n }\r\n\r\n wide.curProcessId = data.pid;\r\n\r\n break;\r\n case 'run-done':\r\n bottomGroup.fillOutput($('.bottom-window-group .output > div').html().replace(/<\\/pre>$/g, data.output + ''));\r\n\r\n wide.curProcessId = undefined;\r\n $(\"#buildRun\").removeClass(\"ico-stop\")\r\n .addClass(\"ico-buildrun\").attr(\"title\", config.label.build_n_run);\r\n\r\n break;\r\n case 'start-build':\r\n case 'start-test':\r\n case 'start-vet':\r\n case 'start-install':\r\n case 'start-get':\r\n bottomGroup.fillOutput(data.output);\r\n\r\n break;\r\n case 'go test':\r\n case 'go vet':\r\n case 'go install':\r\n case 'go get':\r\n bottomGroup.fillOutput($('.bottom-window-group .output > div').html() + data.output);\r\n\r\n break;\r\n case 'git clone':\r\n bottomGroup.fillOutput($('.bottom-window-group .output > div').html() + data.output);\r\n tree.fileTree.reAsyncChildNodes(wide.curNode, \"refresh\", false);\r\n\r\n break;\r\n case 'build':\r\n case 'cross-build':\r\n bottomGroup.fillOutput($('.bottom-window-group .output > div').html() + data.output);\r\n\r\n if (data.lints) { // has build error\r\n var files = {};\r\n\r\n for (var i = 0; i < data.lints.length; i++) {\r\n var lint = data.lints[i];\r\n\r\n goLintFound.push({from: CodeMirror.Pos(lint.lineNo, 0),\r\n to: CodeMirror.Pos(lint.lineNo, 0),\r\n message: lint.msg, severity: lint.severity});\r\n\r\n files[lint.file] = lint.file;\r\n }\r\n\r\n $(\"#buildRun\").removeClass(\"ico-stop\")\r\n .addClass(\"ico-buildrun\").attr(\"title\", config.label.build_n_run);\r\n\r\n // trigger gutter lint\r\n for (var path in files) {\r\n var editor = editors.getEditorByPath(path);\r\n CodeMirror.signal(editor, \"change\", editor);\r\n }\r\n } else {\r\n if ('cross-build' === data.cmd) {\r\n var request = newWideRequest(),\r\n path = null;\r\n request.path = data.executable;\r\n request.name = data.name;\r\n\r\n $.ajax({\r\n async: false,\r\n type: 'POST',\r\n url: config.context + '/file/zip/new',\r\n data: JSON.stringify(request),\r\n dataType: \"json\",\r\n success: function (result) {\r\n if (!result.succ) {\r\n $(\"#dialogAlert\").dialog(\"open\", result.msg);\r\n\r\n return false;\r\n }\r\n\r\n path = result.data;\r\n }\r\n });\r\n\r\n if (path) {\r\n window.open(config.context + '/file/zip?path=' + path + \".zip\");\r\n }\r\n }\r\n }\r\n\r\n break;\r\n }\r\n };\r\n outputWS.onclose = function (e) {\r\n console.log('[output onclose] disconnected (' + e.code + ')');\r\n };\r\n outputWS.onerror = function (e) {\r\n console.log('[output onerror]');\r\n };\r\n },\r\n _initFooter: function () {\r\n $(\".footer .cursor\").dblclick(function () {\r\n $(\"#dialogGoLinePrompt\").dialog(\"open\");\r\n });\r\n },\r\n init: function () {\r\n this._initFooter();\r\n\r\n this._initWS();\r\n\r\n // 点击隐藏弹出层\r\n $(\"body\").bind(\"mouseup\", function (event) {\r\n // MAC 右键文件树失效\r\n if (event.which === 3) {\r\n return false;\r\n }\r\n\r\n $(\".frame\").hide();\r\n\r\n if (!($(event.target).closest(\".frame\").length === 1 || event.target.className === \"frame\")) {\r\n $(\".menu > ul > li\").unbind().removeClass(\"selected\");\r\n menu.subMenu();\r\n }\r\n });\r\n\r\n // 刷新提示\r\n window.onbeforeunload = function () {\r\n if (editors.data.length > 0) {\r\n return config.label.confirm_save;\r\n }\r\n };\r\n\r\n // 禁止鼠标右键菜单\r\n document.oncontextmenu = function () {\r\n return false;\r\n };\r\n\r\n this._initDialog();\r\n },\r\n _save: function (path, editor) {\r\n if (!path) {\r\n return false;\r\n }\r\n\r\n var request = newWideRequest();\r\n request.file = path;\r\n request.code = editor.getValue();\r\n\r\n $.ajax({\r\n type: 'POST',\r\n url: config.context + '/file/save',\r\n data: JSON.stringify(request),\r\n dataType: \"json\",\r\n success: function (result) {\r\n // reset the save state\r\n editor.doc.markClean();\r\n $(\".edit-panel .tabs > div\").each(function () {\r\n var $span = $(this).find(\"span:eq(0)\");\r\n if ($span.attr(\"title\") === path) {\r\n $span.removeClass(\"changed\");\r\n }\r\n });\r\n }\r\n });\r\n },\r\n saveFile: function () {\r\n var path = editors.getCurrentPath();\r\n if (!path) {\r\n return false;\r\n }\r\n\r\n var editor = wide.curEditor;\r\n if (editor.doc.isClean()) { // no modification\r\n return false;\r\n }\r\n\r\n if (\"text/x-go\" === editor.getOption(\"mode\")) {\r\n wide.gofmt(path, wide.curEditor); // go fmt will save\r\n\r\n // build the file at once\r\n var request = newWideRequest();\r\n request.file = path;\r\n request.code = editor.getValue();\r\n request.nextCmd = \"\"; // build only, no following operation\r\n $.ajax({\r\n type: 'POST',\r\n url: config.context + '/build',\r\n data: JSON.stringify(request),\r\n dataType: \"json\",\r\n beforeSend: function () {\r\n bottomGroup.resetOutput();\r\n },\r\n success: function (result) {\r\n }\r\n });\r\n\r\n // refresh outline\r\n wide.refreshOutline();\r\n\r\n return;\r\n }\r\n\r\n wide._save(path, wide.curEditor);\r\n },\r\n stop: function () {\r\n if ($(\"#buildRun\").hasClass(\"ico-buildrun\")) {\r\n menu.run();\r\n return false;\r\n }\r\n\r\n if (!wide.curProcessId) {\r\n return false;\r\n }\r\n\r\n var request = newWideRequest();\r\n request.pid = wide.curProcessId;\r\n\r\n $.ajax({\r\n type: 'POST',\r\n url: config.context + '/stop',\r\n data: JSON.stringify(request),\r\n dataType: \"json\",\r\n success: function (result) {\r\n $(\"#buildRun\").removeClass(\"ico-stop\")\r\n .addClass(\"ico-buildrun\").attr(\"title\", config.label.build_n_run);\r\n }\r\n });\r\n },\r\n gofmt: function (path, editor) {\r\n var cursor = editor.getCursor();\r\n var scrollInfo = editor.getScrollInfo();\r\n\r\n var request = newWideRequest();\r\n request.file = path;\r\n request.code = editor.getValue();\r\n request.cursorLine = cursor.line;\r\n request.cursorCh = cursor.ch;\r\n\r\n $.ajax({\r\n async: false, // sync\r\n type: 'POST',\r\n url: config.context + '/go/fmt',\r\n data: JSON.stringify(request),\r\n dataType: \"json\",\r\n success: function (result) {\r\n if (result.succ) {\r\n editor.setValue(result.data.code);\r\n editor.setCursor(cursor);\r\n editor.scrollTo(null, scrollInfo.top);\r\n\r\n wide._save(path, editor);\r\n }\r\n }\r\n });\r\n },\r\n fmt: function (path, editor) {\r\n var mode = editor.getOption(\"mode\");\r\n\r\n var cursor = editor.getCursor();\r\n var scrollInfo = editor.getScrollInfo();\r\n\r\n var request = newWideRequest();\r\n request.file = path;\r\n request.code = editor.getValue();\r\n request.cursorLine = cursor.line;\r\n request.cursorCh = cursor.ch;\r\n\r\n var formatted = null;\r\n\r\n switch (mode) {\r\n case \"text/x-go\":\r\n $.ajax({\r\n async: false, // sync\r\n type: 'POST',\r\n url: config.context + '/go/fmt',\r\n data: JSON.stringify(request),\r\n dataType: \"json\",\r\n success: function (result) {\r\n if (result.succ) {\r\n formatted = result.data.code;\r\n }\r\n }\r\n });\r\n\r\n break;\r\n case \"text/html\":\r\n formatted = html_beautify(editor.getValue());\r\n break;\r\n case \"text/javascript\":\r\n case \"application/json\":\r\n formatted = js_beautify(editor.getValue());\r\n break;\r\n case \"text/css\":\r\n formatted = css_beautify(editor.getValue());\r\n break;\r\n default :\r\n break;\r\n }\r\n\r\n if (formatted) {\r\n editor.setValue(formatted);\r\n editor.setCursor(cursor);\r\n editor.scrollTo(null, scrollInfo.top);\r\n\r\n wide._save(path, editor);\r\n }\r\n },\r\n getClassBySuffix: function (suffix) {\r\n var iconSkin = \"ico-ztree-other \";\r\n switch (suffix) {\r\n case \"html\":\r\n case \"htm\":\r\n iconSkin = \"ico-ztree-html \";\r\n break;\r\n case \"go\":\r\n iconSkin = \"ico-ztree-go \";\r\n break;\r\n case \"css\":\r\n iconSkin = \"ico-ztree-css \";\r\n break;\r\n case \"txt\":\r\n iconSkin = \"ico-ztree-text \";\r\n break;\r\n case \"sql\":\r\n iconSkin = \"ico-ztree-sql \";\r\n break;\r\n case \"properties\":\r\n iconSkin = \"ico-ztree-pro \";\r\n break;\r\n case \"md\":\r\n iconSkin = \"ico-ztree-md \";\r\n break;\r\n case \"js\", \"json\":\r\n iconSkin = \"ico-ztree-js \";\r\n break;\r\n case \"xml\":\r\n iconSkin = \"ico-ztree-xml \";\r\n break;\r\n case \"jpg\":\r\n case \"jpeg\":\r\n case \"bmp\":\r\n case \"gif\":\r\n case \"png\":\r\n case \"svg\":\r\n case \"ico\":\r\n iconSkin = \"ico-ztree-img \";\r\n break;\r\n }\r\n\r\n return iconSkin;\r\n }\r\n};\r\n\r\n$(document).ready(function () {\r\n wide.init();\r\n tree.init();\r\n menu.init();\r\n hotkeys.init();\r\n session.init();\r\n notification.init();\r\n editors.init();\r\n windows.init();\r\n bottomGroup.init();\r\n});\r\n","/*\r\n * Copyright (c) 2014-2019, b3log.org & hacpai.com\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * https://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\n/*\r\n * @file session.js\r\n *\r\n * @author Liyuan Li\r\n * @version 1.1.0.1, Dec 8, 2015\r\n */\r\nvar session = {\r\n init: function () {\r\n this._initWS();\r\n\r\n var getLayoutState = function (paneState) {\r\n var state = 'normal';\r\n if (paneState.isClosed) {\r\n state = 'min';\r\n } else if (paneState.size >= $('body').width()) {\r\n state = 'max';\r\n }\r\n\r\n return state;\r\n };\r\n\r\n // save session content every 30 seconds\r\n setInterval(function () {\r\n var request = newWideRequest(),\r\n filse = [],\r\n fileTree = [],\r\n currentId = editors.getCurrentId(),\r\n currentFile = currentId ? editors.getCurrentPath() : \"\";\r\n\r\n editors.tabs.obj._$tabs.find(\"div\").each(function () {\r\n var $it = $(this);\r\n if ($it.find(\"span:eq(0)\").attr(\"title\") !== config.label.start_page) {\r\n filse.push($it.find(\"span:eq(0)\").attr(\"title\"));\r\n }\r\n });\r\n\r\n fileTree = tree.getOpenPaths();\r\n\r\n request.currentFile = currentFile; // current editor file\r\n request.fileTree = fileTree; // file tree expansion state\r\n request.files = filse; // editor tabs\r\n\r\n\r\n request.layout = {\r\n \"side\": {\r\n \"size\": windows.outerLayout.west.state.size,\r\n \"state\": getLayoutState(windows.outerLayout.west.state)\r\n },\r\n \"sideRight\": {\r\n \"size\": windows.innerLayout.east.state.size,\r\n \"state\": getLayoutState(windows.innerLayout.east.state)\r\n },\r\n \"bottom\": {\r\n \"size\": windows.innerLayout.south.state.size,\r\n \"state\": getLayoutState(windows.innerLayout.south.state)\r\n }\r\n };\r\n\r\n $.ajax({\r\n type: 'POST',\r\n url: config.context + '/session/save',\r\n data: JSON.stringify(request),\r\n dataType: \"json\",\r\n success: function (result) {\r\n }\r\n });\r\n }, 30000);\r\n },\r\n restore: function () {\r\n if (!config.latestSessionContent) {\r\n return;\r\n }\r\n\r\n var fileTree = config.latestSessionContent.fileTree,\r\n files = config.latestSessionContent.files,\r\n currentFile = config.latestSessionContent.currentFile,\r\n id = \"\",\r\n nodesToOpen = [];\r\n\r\n var nodes = tree.fileTree.transformToArray(tree.fileTree.getNodes());\r\n\r\n for (var i = 0, ii = nodes.length; i < ii; i++) {\r\n // expand tree\r\n for (var j = 0, jj = fileTree.length; j < jj; j++) {\r\n if (nodes[i].path === fileTree[j]) {\r\n // expand this node only if its parents are open\r\n var parents = tree.getAllParents(tree.fileTree.getNodeByTId(nodes[i].tId)),\r\n isOpen = true;\r\n for (var l = 0, max = parents.length; l < max; l++) {\r\n if (parents[l].open === false) {\r\n isOpen = false;\r\n }\r\n }\r\n if (isOpen) {\r\n tree.fileTree.expandNode(nodes[i], true, false, true);\r\n } else {\r\n // flag it is open\r\n nodes[i].open = true;\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // open editors\r\n for (var k = 0, kk = files.length; k < kk; k++) {\r\n if (nodes[i].path === files[k]) {\r\n nodesToOpen.push(nodes[i]);\r\n break;\r\n }\r\n }\r\n\r\n if (nodes[i].path === currentFile) {\r\n id = nodes[i].path;\r\n\r\n // FIXME: 上面的展开是异步进行的,所以执行到这里的时候可能还没有展开完,导致定位不了可视区域\r\n tree.fileTree.selectNode(nodes[i]);\r\n wide.curNode = nodes[i];\r\n }\r\n }\r\n\r\n // handle the open sequence of editors\r\n for (var m = 0, mm = files.length; m < mm; m++) {\r\n for (var n = 0, nn = nodesToOpen.length; n < nn; n++) {\r\n if (nodesToOpen[n].path === files[m]) {\r\n tree.openFile(nodesToOpen[n]);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // set the current editor\r\n editors.tabs.setCurrent(id);\r\n for (var c = 0, max = editors.data.length; c < max; c++) {\r\n if (id === editors.data[c].id) {\r\n wide.curEditor = editors.data[c].editor;\r\n break;\r\n }\r\n } \r\n },\r\n _initWS: function () {\r\n // Used for session retention, server will release all resources of the session if this channel closed\r\n var sessionWS = new ReconnectingWebSocket(config.channel + '/session/ws?sid=' + config.wideSessionId);\r\n\r\n sessionWS.onopen = function () {\r\n console.log('[session onopen] connected');\r\n\r\n var dateFormat = function (time, fmt) {\r\n var date = new Date(time);\r\n var dateObj = {\r\n \"M+\": date.getMonth() + 1,\r\n \"d+\": date.getDate(),\r\n \"h+\": date.getHours(),\r\n \"m+\": date.getMinutes(),\r\n \"s+\": date.getSeconds(),\r\n \"q+\": Math.floor((date.getMonth() + 3) / 3),\r\n \"S\": date.getMilliseconds()\r\n };\r\n if (/(y+)/.test(fmt))\r\n fmt = fmt.replace(RegExp.$1, (date.getFullYear() + \"\").substr(4 - RegExp.$1.length));\r\n for (var k in dateObj)\r\n if (new RegExp(\"(\" + k + \")\").test(fmt)) {\r\n fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1)\r\n ? (dateObj[k]) : ((\"00\" + dateObj[k]).substr((\"\" + dateObj[k]).length)));\r\n }\r\n return fmt;\r\n };\r\n\r\n var data = {type: \"Network\", severity: \"INFO\",\r\n message: \"Connected to server [sid=\" + config.wideSessionId + \"], \" + dateFormat(new Date().getTime(), 'yyyy-MM-dd hh:mm:ss')},\r\n $notification = $('.bottom-window-group .notification > table'),\r\n notificationHTML = '';\r\n\r\n notificationHTML += '' + data.severity\r\n + '' + data.message\r\n + '' + data.type + '';\r\n $notification.append(notificationHTML);\r\n };\r\n\r\n sessionWS.onmessage = function (e) {\r\n var data = JSON.parse(e.data);\r\n switch (data.cmd) {\r\n case 'create-file':\r\n var node = tree.fileTree.getNodeByTId(tree.getTIdByPath(data.dir)),\r\n name = data.path.replace(data.dir + '/', ''),\r\n mode = CodeMirror.findModeByFileName(name),\r\n iconSkin = wide.getClassBySuffix(name.split(\".\")[1]);\r\n\r\n if (data.type && data.type === 'f') {\r\n tree.fileTree.addNodes(node, [{\r\n \"id\": data.path,\r\n \"name\": name,\r\n \"iconSkin\": iconSkin,\r\n \"path\": data.path,\r\n \"mode\": mode,\r\n \"removable\": true,\r\n \"creatable\": true\r\n }]);\r\n\r\n } else {\r\n tree.fileTree.addNodes(node, [{\r\n \"id\": data.path,\r\n \"name\": name,\r\n \"iconSkin\": \"ico-ztree-dir \",\r\n \"path\": data.path,\r\n \"removable\": true,\r\n \"creatable\": true,\r\n \"isParent\": true\r\n }]);\r\n }\r\n break;\r\n case 'remove-file':\r\n case 'rename-file':\r\n var node = tree.fileTree.getNodeByTId(tree.getTIdByPath(data.path));\r\n tree.fileTree.removeNode(node);\r\n\r\n var nodes = tree.fileTree.transformToArray(node);\r\n for (var i = 0, ii = nodes.length; i < ii; i++) {\r\n editors.tabs.del(nodes[i].path);\r\n }\r\n\r\n break;\r\n }\r\n };\r\n sessionWS.onclose = function (e) {\r\n console.log('[session onclose] disconnected (' + e.code + ')');\r\n\r\n var data = {type: \"Network\", severity: \"ERROR\",\r\n message: \"Disconnected from server, trying to reconnect it [sid=\" + config.wideSessionId + \"]\"},\r\n $notification = $('.bottom-window-group .notification > table'),\r\n notificationHTML = '';\r\n\r\n notificationHTML += '' + data.severity\r\n + '' + data.message\r\n + '' + data.type + '';\r\n $notification.append(notificationHTML);\r\n\r\n $(\".notification-count\").show();\r\n };\r\n sessionWS.onerror = function (e) {\r\n console.log('[session onerror]');\r\n };\r\n }\r\n};","/*\r\n * Copyright (c) 2014-2019, b3log.org & hacpai.com\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * https://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\n/*\r\n * @file menu.js\r\n *\r\n * @author Liyuan Li\r\n * @author Liang Ding\r\n * @version 1.0.1.3, Oct 5, 2018\r\n */\r\nvar menu = {\r\n init: function () {\r\n this.subMenu();\r\n this._initPreference();\r\n this._initAbout();\r\n this._initShare();\r\n\r\n // 点击子菜单后消失\r\n $(\".menu .frame li\").click(function () {\r\n $(\".menu > ul > li\").unbind().removeClass(\"selected\");\r\n menu.subMenu();\r\n });\r\n },\r\n _initShare: function () {\r\n $(\".menu .ico-share\").hover(function () {\r\n $(\".menu .share-panel\").show();\r\n });\r\n\r\n $(\".share-panel .font-ico\").click(function () {\r\n var key = $(this).attr('class').split('-')[2];\r\n var url = \"https://wide.b3log.org\", pic = 'https://wide.b3log.org/static/images/wide-logo.png';\r\n var urls = {};\r\n urls.email = \"mailto:?subject=\" + $('title').text()\r\n + \"&body=\" + $('meta[name=description]').attr('content') + ' ' + url;\r\n\r\n var twitterShare = encodeURIComponent($('meta[name=description]').attr('content') + \" \" + url + \" #golang\");\r\n urls.twitter = \"https://twitter.com/intent/tweet?status=\" + twitterShare;\r\n\r\n urls.facebook = \"https://www.facebook.com/sharer/sharer.php?u=\" + url;\r\n urls.googleplus = \"https://plus.google.com/share?url=\" + url;\r\n\r\n var title = encodeURIComponent($('title').text() + '. \\n' + $('meta[name=description]').attr('content')\r\n + \" #golang#\");\r\n urls.weibo = \"http://v.t.sina.com.cn/share/share.php?title=\" + title + \"&url=\" + url + \"&pic=\" + pic;\r\n urls.qqz = \"https://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url=\" + url + \"&sharesource=qzone&title=\" + title+ \"&pics=\" + pic;\r\n\r\n window.open(urls[key], \"_blank\", \"top=100,left=200,width=648,height=618\");\r\n });\r\n },\r\n _initAbout: function () {\r\n $(\"#dialogAbout\").load(config.context + '/about', function () {\r\n $(\"#dialogAbout\").dialog({\r\n \"modal\": true,\r\n \"title\": config.label.about,\r\n \"hideFooter\": true,\r\n \"afterOpen\": function () {\r\n $.ajax({\r\n url: \"https://rhythm.b3log.org/version/wide/latest\",\r\n type: \"GET\",\r\n dataType: \"jsonp\",\r\n jsonp: \"callback\",\r\n success: function (data, textStatus) {\r\n if ($(\"#dialogAbout .version\").text() === data.wideVersion) {\r\n $(\".upgrade\").text(config.label.uptodate);\r\n } else {\r\n $(\".upgrade\").html(config.label.new_version_available + config.label.colon\r\n + \"\" + data.wideVersion + \"\");\r\n }\r\n }\r\n });\r\n }\r\n });\r\n });\r\n },\r\n disabled: function (list) {\r\n for (var i = 0, max = list.length; i < max; i++) {\r\n $(\".menu li.\" + list[i]).addClass(\"disabled\");\r\n }\r\n },\r\n undisabled: function (list) {\r\n for (var i = 0, max = list.length; i < max; i++) {\r\n $(\".menu li.\" + list[i]).removeClass(\"disabled\");\r\n }\r\n },\r\n // 焦点不在菜单上时需点击展开子菜单,否则为鼠标移动展开\r\n subMenu: function () {\r\n $(\".menu > ul > li\").click(function (event) {\r\n if ($(event.target).closest(\".frame\").length === 1) {\r\n return;\r\n }\r\n var $it = $(this);\r\n $it.find('.frame').show();\r\n $(\".menu > ul > li\").removeClass(\"selected\");\r\n $(this).addClass(\"selected\");\r\n\r\n $(\".menu > ul > li\").unbind();\r\n\r\n $(\".menu > ul > li\").mouseover(function () {\r\n if ($(event.target).closest(\".frame\").length === 1) {\r\n return;\r\n }\r\n $(\".menu .frame\").hide();\r\n $(this).find('.frame').show();\r\n $(\".menu > ul > li\").removeClass(\"selected\");\r\n $(this).addClass(\"selected\");\r\n });\r\n });\r\n },\r\n openPreference: function () {\r\n $(\"#dialogPreference\").dialog(\"open\");\r\n },\r\n saveAllFiles: function () {\r\n if ($(\".menu li.save-all\").hasClass(\"disabled\")) {\r\n return false;\r\n }\r\n for (var i = 0, ii = editors.data.length; i < ii; i++) {\r\n var path = editors.data[i].id;\r\n var editor = editors.data[i].editor;\r\n\r\n if (\"text/x-go\" === editor.getOption(\"mode\")) {\r\n wide.fmt(path, editor);\r\n } else {\r\n wide._save(path, editor);\r\n }\r\n }\r\n },\r\n closeAllFiles: function () {\r\n if ($(\".menu li.close-all\").hasClass(\"disabled\")) {\r\n return false;\r\n }\r\n\r\n // 设置全部关闭标识\r\n var removeData = [];\r\n $(\".edit-panel .tabs > div\").each(function (i) {\r\n if (i !== 0) {\r\n removeData.push($(this).data(\"index\"));\r\n }\r\n });\r\n $(\"#dialogCloseEditor\").data(\"removeData\", removeData);\r\n // 开始关闭\r\n $(\".edit-panel .tabs .ico-close:eq(0)\").click();\r\n },\r\n exit: function () {\r\n var request = newWideRequest();\r\n\r\n $.ajax({\r\n type: 'POST',\r\n url: config.context + '/logout',\r\n data: JSON.stringify(request),\r\n dataType: \"json\",\r\n success: function (result) {\r\n if (result.succ) {\r\n window.location.href = config.context + \"/login\";\r\n }\r\n }\r\n });\r\n },\r\n openAbout: function () {\r\n $(\"#dialogAbout\").dialog(\"open\");\r\n },\r\n goget: function () {\r\n menu.saveAllFiles();\r\n\r\n var currentPath = editors.getCurrentPath();\r\n if (!currentPath) {\r\n return false;\r\n }\r\n\r\n if ($(\".menu li.go-get\").hasClass(\"disabled\")) {\r\n return false;\r\n }\r\n\r\n var request = newWideRequest();\r\n request.file = currentPath;\r\n\r\n $.ajax({\r\n type: 'POST',\r\n url: config.context + '/go/get',\r\n data: JSON.stringify(request),\r\n dataType: \"json\",\r\n beforeSend: function () {\r\n bottomGroup.resetOutput();\r\n },\r\n success: function (result) {\r\n }\r\n });\r\n },\r\n goinstall: function () {\r\n menu.saveAllFiles();\r\n\r\n var currentPath = editors.getCurrentPath();\r\n if (!currentPath) {\r\n return false;\r\n }\r\n\r\n if ($(\".menu li.go-install\").hasClass(\"disabled\")) {\r\n return false;\r\n }\r\n\r\n var request = newWideRequest();\r\n request.file = currentPath;\r\n\r\n $.ajax({\r\n type: 'POST',\r\n url: config.context + '/go/install',\r\n data: JSON.stringify(request),\r\n dataType: \"json\",\r\n beforeSend: function () {\r\n bottomGroup.resetOutput();\r\n },\r\n success: function (result) {\r\n }\r\n });\r\n },\r\n // go test.\r\n test: function () {\r\n menu.saveAllFiles();\r\n\r\n var currentPath = editors.getCurrentPath();\r\n if (!currentPath) {\r\n return false;\r\n }\r\n\r\n if ($(\".menu li.go-test\").hasClass(\"disabled\")) {\r\n return false;\r\n }\r\n\r\n var request = newWideRequest();\r\n request.file = currentPath;\r\n\r\n $.ajax({\r\n type: 'POST',\r\n url: config.context + '/go/test',\r\n data: JSON.stringify(request),\r\n dataType: \"json\",\r\n beforeSend: function () {\r\n bottomGroup.resetOutput();\r\n },\r\n success: function (result) {\r\n }\r\n });\r\n },\r\n // go vet.\r\n govet: function () {\r\n menu.saveAllFiles();\r\n\r\n var currentPath = editors.getCurrentPath();\r\n if (!currentPath) {\r\n return false;\r\n }\r\n\r\n if ($(\".menu li.go-vet\").hasClass(\"disabled\")) {\r\n return false;\r\n }\r\n\r\n var request = newWideRequest();\r\n request.file = currentPath;\r\n\r\n $.ajax({\r\n type: 'POST',\r\n url: config.context + '/go/vet',\r\n data: JSON.stringify(request),\r\n dataType: \"json\",\r\n beforeSend: function () {\r\n bottomGroup.resetOutput();\r\n },\r\n success: function (result) {\r\n }\r\n });\r\n },\r\n // Build & Run.\r\n run: function () {\r\n menu.saveAllFiles();\r\n\r\n if ($(\"#buildRun\").hasClass(\"ico-stop\")) {\r\n wide.stop();\r\n return false;\r\n }\r\n\r\n var currentPath = editors.getCurrentPath();\r\n if (!currentPath) {\r\n return false;\r\n }\r\n\r\n if ($(\".menu li.run\").hasClass(\"disabled\")) {\r\n return false;\r\n }\r\n\r\n var request = newWideRequest();\r\n request.file = currentPath;\r\n request.code = wide.curEditor.getValue();\r\n request.nextCmd = \"run\";\r\n\r\n $.ajax({\r\n type: 'POST',\r\n url: config.context + '/build',\r\n data: JSON.stringify(request),\r\n dataType: \"json\",\r\n beforeSend: function () {\r\n bottomGroup.resetOutput();\r\n\r\n $(\"#buildRun\").addClass(\"ico-stop\")\r\n .removeClass(\"ico-buildrun\").attr(\"title\", config.label.stop);\r\n },\r\n success: function (result) {\r\n }\r\n });\r\n },\r\n // Build.\r\n build: function () {\r\n menu.saveAllFiles();\r\n\r\n var currentPath = editors.getCurrentPath();\r\n if (!currentPath) {\r\n return false;\r\n }\r\n\r\n if ($(\".menu li.build\").hasClass(\"disabled\")) {\r\n return false;\r\n }\r\n\r\n var request = newWideRequest();\r\n request.file = currentPath;\r\n request.code = wide.curEditor.getValue();\r\n request.nextCmd = \"\"; // build only, no following operation\r\n\r\n $.ajax({\r\n type: 'POST',\r\n url: config.context + '/build',\r\n data: JSON.stringify(request),\r\n dataType: \"json\",\r\n beforeSend: function () {\r\n bottomGroup.resetOutput();\r\n },\r\n success: function (result) {\r\n }\r\n });\r\n },\r\n _initPreference: function () {\r\n $(\"#dialogPreference\").load(config.context + '/preference', function () {\r\n $(\"#dialogPreference input\").keyup(function () {\r\n var isChange = false,\r\n emptys = [],\r\n emptysTip = '';\r\n $(\"#dialogPreference input\").each(function () {\r\n var $it = $(this);\r\n // data-value 如为数字,则不会和 value 一样转换为 String,再次不使用全等\r\n if ($it.val() != $it.data(\"value\")) {\r\n isChange = true;\r\n }\r\n\r\n if ($.trim($it.val()) === '') {\r\n emptys.push($it);\r\n }\r\n });\r\n\r\n var $okBtn = $(\"#dialogPreference\").closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\");\r\n if (isChange) {\r\n $okBtn.prop(\"disabled\", false);\r\n } else {\r\n $okBtn.prop(\"disabled\", true);\r\n }\r\n\r\n if (emptys.length === 0) {\r\n $(\"#dialogPreference\").find(\".tip\").html(\"\");\r\n $okBtn.prop(\"disabled\", false);\r\n } else {\r\n for (var i = 0, max = emptys.length; i < max; i++) {\r\n var tabIndex = emptys[i].closest('div').data(\"index\"),\r\n text = $.trim(emptys[i].parent().text());\r\n emptysTip += '[' + $('#dialogPreference .tabs > div[data-index=\"' + tabIndex + '\"]').text()\r\n + '] -> [' + text.substr(0, text.length - 1)\r\n + ']: ' + config.label.no_empty + \"
    \";\r\n }\r\n $(\"#dialogPreference\").find(\".tip\").html(emptysTip);\r\n $okBtn.prop(\"disabled\", true);\r\n }\r\n });\r\n\r\n $(\"#dialogPreference select\").on(\"change\", function () {\r\n var isChange = false;\r\n $(\"#dialogPreference select\").each(function () {\r\n if ($(this).val() !== $(this).data(\"value\")) {\r\n isChange = true;\r\n }\r\n });\r\n\r\n var $okBtn = $(\"#dialogPreference\").closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\");\r\n if (isChange) {\r\n $okBtn.prop(\"disabled\", false);\r\n } else {\r\n $okBtn.prop(\"disabled\", true);\r\n }\r\n });\r\n\r\n $(\"#dialogPreference\").dialog({\r\n \"modal\": true,\r\n \"height\": 280,\r\n \"width\": 800,\r\n \"title\": config.label.preference,\r\n \"okText\": config.label.apply,\r\n \"cancelText\": config.label.cancel,\r\n \"afterOpen\": function () {\r\n var $okBtn = $(\"#dialogPreference\").closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\");\r\n $okBtn.prop(\"disabled\", true);\r\n },\r\n \"ok\": function () {\r\n var request = newWideRequest(),\r\n $dialogPreference = $(\"#dialogPreference\"),\r\n $fontFamily = $dialogPreference.find(\"input[name=fontFamily]\"),\r\n $fontSize = $dialogPreference.find(\"input[name=fontSize]\"),\r\n $goFmt = $dialogPreference.find(\"select[name=goFmt]\"),\r\n $GoBuildArgsForLinux = $dialogPreference.find(\"input[name=GoBuildArgsForLinux]\"),\r\n $GoBuildArgsForWindows = $dialogPreference.find(\"input[name=GoBuildArgsForWindows]\"),\r\n $GoBuildArgsForDarwin = $dialogPreference.find(\"input[name=GoBuildArgsForDarwin]\"),\r\n $workspace = $dialogPreference.find(\"input[name=workspace]\"),\r\n $password = $dialogPreference.find(\"input[name=password]\"),\r\n $email = $dialogPreference.find(\"input[name=email]\"),\r\n $locale = $dialogPreference.find(\"select[name=locale]\"),\r\n $theme = $dialogPreference.find(\"select[name=theme]\"),\r\n $editorFontFamily = $dialogPreference.find(\"input[name=editorFontFamily]\"),\r\n $editorFontSize = $dialogPreference.find(\"input[name=editorFontSize]\"),\r\n $editorLineHeight = $dialogPreference.find(\"input[name=editorLineHeight]\"),\r\n $editorTheme = $dialogPreference.find(\"select[name=editorTheme]\"),\r\n $editorTabSize = $dialogPreference.find(\"input[name=editorTabSize]\"),\r\n $keymap = $dialogPreference.find(\"select[name=keymap]\");\r\n\r\n $.extend(request, {\r\n \"fontFamily\": $fontFamily.val(),\r\n \"fontSize\": $fontSize.val(),\r\n \"goFmt\": $goFmt.val(),\r\n \"GoBuildArgsForLinux\": $GoBuildArgsForLinux.val(),\r\n \"GoBuildArgsForWindows\": $GoBuildArgsForWindows.val(),\r\n \"GoBuildArgsForDarwin\": $GoBuildArgsForDarwin.val(),\r\n \"workspace\": $workspace.val(),\r\n \"password\": $password.val(),\r\n \"email\": $email.val(),\r\n \"locale\": $locale.val(),\r\n \"theme\": $theme.val(),\r\n \"editorFontFamily\": $editorFontFamily.val(),\r\n \"editorFontSize\": $editorFontSize.val(),\r\n \"editorLineHeight\": $editorLineHeight.val(),\r\n \"editorTheme\": $editorTheme.val(),\r\n \"editorTabSize\": $editorTabSize.val(),\r\n \"keymap\": $keymap.val()\r\n });\r\n\r\n if (config.keymap !== $keymap.val()) {\r\n window.location.reload();\r\n }\r\n\r\n $.ajax({\r\n type: 'POST',\r\n url: config.context + '/preference',\r\n data: JSON.stringify(request),\r\n success: function (result, textStatus, jqXHR) {\r\n if (!result.succ) {\r\n return false;\r\n }\r\n\r\n $fontFamily.data(\"value\", $fontFamily.val());\r\n $fontSize.data(\"value\", $fontSize.val());\r\n $goFmt.data(\"value\", $goFmt.val());\r\n $GoBuildArgsForLinux.data(\"value\", $GoBuildArgsForLinux.val());\r\n $GoBuildArgsForWindows.data(\"value\", $GoBuildArgsForWindows.val());\r\n $GoBuildArgsForDarwin.data(\"value\", $GoBuildArgsForDarwin.val());\r\n $workspace.data(\"value\", $workspace.val());\r\n $password.data(\"value\", $password.val());\r\n $email.data(\"value\", $email.val());\r\n $locale.data(\"value\", $locale.val());\r\n $theme.data(\"value\", $theme.val());\r\n $editorFontFamily.data(\"value\", $editorFontFamily.val());\r\n $editorFontSize.data(\"value\", $editorFontSize.val());\r\n $editorLineHeight.data(\"value\", $editorLineHeight.val());\r\n $editorTheme.data(\"value\", $editorTheme.val());\r\n $editorTabSize.data(\"value\", $editorTabSize.val());\r\n $keymap.data(\"value\", $keymap.val());\r\n\r\n // update the config\r\n config.keymap = $keymap.val();\r\n\r\n var $okBtn = $(\"#dialogPreference\").closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\");\r\n $okBtn.prop(\"disabled\", true);\r\n\r\n $(\"#themesLink\").attr(\"href\", config.staticServer + '/static/css/themes/' + $theme.val() + '.css');\r\n\r\n config.editorTheme = $editorTheme.val();\r\n for (var i = 0, ii = editors.data.length; i < ii; i++) {\r\n editors.data[i].editor.setOption(\"theme\", $editorTheme.val());\r\n }\r\n }\r\n });\r\n }\r\n });\r\n\r\n new Tabs({\r\n id: \".preference\"\r\n });\r\n });\r\n }\r\n};\r\n","/*\r\n * Copyright (c) 2014-2019, b3log.org & hacpai.com\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * https://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\n/*\r\n * @file windows.js\r\n *\r\n * @author Liyuan Li\r\n * @author Liang Ding\r\n * @version 1.1.2.2, Feb 16, 2016\r\n */\r\nvar windows = {\r\n isMaxEditor: false,\r\n outerLayout: {},\r\n innerLayout: {},\r\n init: function () {\r\n if (!config.latestSessionContent) {\r\n config.latestSessionContent = {\r\n \"fileTree\": [],\r\n \"files\": [],\r\n \"currentFile\": \"\",\r\n };\r\n }\r\n \r\n if (!config.latestSessionContent.layout) {\r\n config.latestSessionContent.layout = {\r\n \"side\": {\r\n \"size\": 200,\r\n \"state\": 'normal'\r\n },\r\n \"sideRight\": {\r\n \"size\": 200,\r\n \"state\": 'normal'\r\n },\r\n \"bottom\": {\r\n \"size\": 100,\r\n \"state\": 'normal'\r\n }\r\n };\r\n }\r\n\r\n var layout = config.latestSessionContent.layout;\r\n\r\n this.outerLayout = $('body').layout({\r\n north__paneSelector: \".menu\",\r\n center__paneSelector: \".content\",\r\n south__paneSelector: \".footer\",\r\n north__size: 22,\r\n south__size: 19,\r\n spacing_open: 2,\r\n north__spacing_open: 0,\r\n south__spacing_open: 0,\r\n defaults: {\r\n fxSpeed_open: 300,\r\n fxSpeed_close: 100,\r\n fxSettings_close: {\r\n easing: \"easeOutQuint\"\r\n },\r\n fxSettings_open: {\r\n easing: \"easeInQuint\"\r\n }\r\n },\r\n west: {\r\n size: layout.side.size,\r\n paneSelector: \".side\",\r\n togglerLength_open: 0,\r\n togglerLength_closed: 15,\r\n togglerAlign_closed: \"top\",\r\n slideTrigger_open: \"mouseover\",\r\n spacing_closed: 15,\r\n minSize: 100,\r\n togglerClass: \"ico-restore\",\r\n togglerTip_open: config.label.min,\r\n togglerTip_closed: config.label.restore_side,\r\n resizerTip: config.label.resize,\r\n initClosed: (layout.side.state === 'min')\r\n }\r\n });\r\n\r\n this.innerLayout = $('div.content').layout({\r\n spacing_open: 2,\r\n defaults: {\r\n fxSpeed_open: 300,\r\n fxSpeed_close: 100,\r\n fxSettings_close: {\r\n easing: \"easeOutQuint\"\r\n },\r\n fxSettings_open: {\r\n easing: \"easeInQuint\"\r\n }\r\n },\r\n center: {\r\n paneSelector: \".edit-panel\"\r\n },\r\n east: {\r\n size: layout.sideRight.size,\r\n paneSelector: \".side-right\",\r\n togglerLength_open: 0,\r\n togglerLength_closed: 15,\r\n togglerAlign_closed: \"top\",\r\n slideTrigger_open: \"mouseover\",\r\n spacing_closed: 15,\r\n minSize: 100,\r\n togglerClass: \"ico-restore\",\r\n togglerTip_open: config.label.min,\r\n togglerTip_closed: config.label.restore_outline,\r\n resizerTip: config.label.resize,\r\n initClosed: (layout.sideRight.state === 'min')\r\n },\r\n south: {\r\n size: layout.bottom.size,\r\n paneSelector: \".bottom-window-group\",\r\n togglerLength_open: 0,\r\n togglerLength_closed: 15,\r\n togglerAlign_closed: \"top\",\r\n slideTrigger_open: \"mouseover\",\r\n spacing_closed: 16,\r\n minSize: 100,\r\n togglerClass: \"ico-restore\",\r\n togglerTip_open: config.label.min,\r\n togglerTip_closed: config.label.restore_bottom,\r\n resizerTip: config.label.resize,\r\n initClosed: (layout.bottom.state === 'min'),\r\n ondrag_end: function (type, pane) {\r\n windows.refreshEditor(pane, 'drag');\r\n },\r\n onresize_end: function (type, pane) {\r\n windows.refreshEditor(pane, 'resize');\r\n },\r\n onclose_end: function (type, pane) {\r\n windows.refreshEditor(pane, 'close');\r\n },\r\n onopen_end: function (type, pane) {\r\n windows.refreshEditor(pane, 'open');\r\n },\r\n onshow_end: function (type, pane) {\r\n windows.refreshEditor(pane, 'show');\r\n }\r\n }\r\n });\r\n\r\n this.outerLayout.addCloseBtn(\".side .ico-min\", \"west\");\r\n this.innerLayout.addCloseBtn(\".side-right .ico-min\", \"east\");\r\n this.innerLayout.addCloseBtn(\".bottom-window-group .ico-min\", \"south\");\r\n\r\n if (layout.side.state === 'max') {\r\n windows.maxSide();\r\n }\r\n if (layout.sideRight.state === 'max') {\r\n windows.maxSideRight();\r\n }\r\n if (layout.bottom.state === 'max') {\r\n windows.maxBottom();\r\n }\r\n\r\n $(\".toolbars .ico-max\").click(function () {\r\n windows.toggleEditor();\r\n });\r\n\r\n $(\".edit-panel .tabs\").on(\"dblclick\", function () {\r\n windows.toggleEditor();\r\n });\r\n\r\n $(\".bottom-window-group .tabs\").dblclick(function () {\r\n var $it = $(\".bottom-window-group\");\r\n if ($it.hasClass(\"bottom-window-group-max\")) {\r\n windows.restoreBottom();\r\n } else {\r\n windows.maxBottom($it);\r\n }\r\n });\r\n\r\n $(\".side .tabs\").dblclick(function () {\r\n var $it = $(\".side\");\r\n if ($it.hasClass(\"side-max\")) {\r\n windows.restoreSide();\r\n } else {\r\n windows.restoreSide($it);\r\n }\r\n });\r\n\r\n $(\".side-right .tabs\").dblclick(function () {\r\n var $it = $(\".side-right\");\r\n if ($it.hasClass(\"side-right-max\")) {\r\n windows.restoreSideRight();\r\n } else {\r\n windows.maxSideRight($it);\r\n }\r\n });\r\n\r\n $('.bottom-window-group .search').height($('.bottom-window-group .tabs-panel').height());\r\n $(window).resize(function () {\r\n windows.refreshEditor($('.bottom-window-group'));\r\n });\r\n\r\n },\r\n maxEditor: function () {\r\n var $it = $(\".toolbars .font-ico\");\r\n windows.outerLayout.close('west');\r\n windows.innerLayout.close('south');\r\n windows.innerLayout.close('east');\r\n $it.removeClass('ico-max').addClass('ico-restore').attr('title', config.label.min);\r\n windows.isMaxEditor = true;\r\n },\r\n maxBottom: function ($it) {\r\n $it.data('height', $it.height()).addClass(\"bottom-window-group-max\").find('.ico-min').hide();\r\n windows.outerLayout.hide('west');\r\n windows.innerLayout.hide('east');\r\n windows.innerLayout.sizePane('south', $('.content').height());\r\n },\r\n maxSide: function ($it) {\r\n $it.data('width', $it.width()).addClass(\"side-max\").find('.ico-min').hide();\r\n $('.content').hide();\r\n windows.outerLayout.sizePane('west', $('body').width());\r\n },\r\n maxSideRight: function ($it) {\r\n $it.addClass(\"side-right-max\").data('width', $it.width()).find('.ico-min').hide();\r\n windows.outerLayout.hide('west');\r\n windows.innerLayout.hide('south');\r\n windows.innerLayout.sizePane('east', $('body').width());\r\n },\r\n toggleEditor: function () {\r\n var $it = $(\".toolbars .font-ico\");\r\n if ($it.hasClass('ico-restore')) {\r\n windows.restoreEditor();\r\n } else {\r\n windows.maxEditor();\r\n }\r\n },\r\n restoreBottom: function () {\r\n var $it = $(\".bottom-window-group\");\r\n $it.removeClass(\"bottom-window-group-max\").find('.ico-min').show();\r\n windows.outerLayout.show('west');\r\n windows.innerLayout.show('east');\r\n windows.innerLayout.sizePane('south', $it.data('height'));\r\n },\r\n restoreSide: function () {\r\n var $it = $(\".side\");\r\n $it.removeClass(\"side-max\").find('.ico-min').show();\r\n $('.content').show();\r\n windows.outerLayout.sizePane('west', $it.data('width'));\r\n },\r\n restoreSideRight: function () {\r\n var $it = $(\".side-right\");\r\n $it.removeClass(\"side-right-max\").find('.ico-min').show();\r\n windows.outerLayout.show('west');\r\n windows.innerLayout.show('south');\r\n windows.innerLayout.sizePane('east', $it.data('width'));\r\n },\r\n restoreEditor: function () {\r\n windows.outerLayout.open('west');\r\n windows.innerLayout.open('south');\r\n windows.innerLayout.open('east');\r\n windows.isMaxEditor = false;\r\n $(\".toolbars .font-ico\").addClass('ico-max').removeClass('ico-restore').attr('title', config.label.max_editor);\r\n },\r\n refreshEditor: function (pane, type) {\r\n var editorDatas = editors.data,\r\n height = $('.content').height() - pane.height() - 24;\r\n switch (type) {\r\n case 'close':\r\n height = $('.content').height() - 40;\r\n break;\r\n default:\r\n break;\r\n }\r\n for (var i = 0, ii = editorDatas.length; i < ii; i++) {\r\n editorDatas[i].editor.setSize(\"100%\", height);\r\n }\r\n\r\n $('.bottom-window-group .search').height($('.bottom-window-group .tabs-panel').height());\r\n },\r\n flowBottom: function () {\r\n if (windows.innerLayout.south.state.isClosed) {\r\n windows.innerLayout.slideOpen('south');\r\n }\r\n }\r\n};","/*\r\n * Copyright (c) 2014-2019, b3log.org & hacpai.com\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * https://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\n/*\r\n * @file hotkeys.js\r\n *\r\n * @author Liyuan Li\r\n * @author Liang Ding\r\n * @version 1.0.0.2, Dec 15, 2015\r\n */\r\nvar hotkeys = {\r\n defaultKeyMap: {\r\n // Ctrl-0\r\n goEditor: {\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n which: 48,\r\n fun: function () {\r\n if (wide.curEditor) {\r\n wide.curEditor.focus();\r\n }\r\n }\r\n },\r\n // Ctrl-1\r\n goFileTree: {\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n which: 49,\r\n fun: function () {\r\n // 有些元素需设置 tabindex 为 -1 时才可以 focus\r\n if (windows.outerLayout.west.state.isClosed) {\r\n windows.outerLayout.slideOpen('west');\r\n }\r\n $(\"#files\").focus();\r\n }\r\n },\r\n // Ctrl-2\r\n goOutline: {\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n which: 50,\r\n fun: function () {\r\n if (windows.innerLayout.east.state.isClosed) {\r\n windows.innerLayout.slideOpen('east');\r\n }\r\n\r\n $(\"#outline\").focus();\r\n }\r\n },\r\n // Ctrl-4\r\n goOutput: {\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n which: 52,\r\n fun: function () {\r\n bottomGroup.tabs.setCurrent(\"output\");\r\n windows.flowBottom();\r\n $(\".bottom-window-group .output\").focus();\r\n }\r\n },\r\n // Ctrl-5\r\n goSearch: {\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n which: 53,\r\n fun: function () {\r\n bottomGroup.tabs.setCurrent(\"search\");\r\n windows.flowBottom();\r\n $(\".bottom-window-group .search\").focus();\r\n }\r\n },\r\n // Ctrl-6\r\n goNotification: {\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n which: 54,\r\n fun: function () {\r\n bottomGroup.tabs.setCurrent(\"notification\");\r\n windows.flowBottom();\r\n $(\".bottom-window-group .notification\").focus();\r\n }\r\n },\r\n // Alt-C\r\n clearWindow: {\r\n ctrlKey: false,\r\n altKey: true,\r\n shiftKey: false,\r\n which: 67\r\n },\r\n // Ctrl-D 窗口组切换 \r\n changeEditor: {\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n which: 68\r\n },\r\n // Ctrl-F search \r\n search: {\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n which: 70\r\n },\r\n // Ctrl-Q close current editor \r\n closeCurEditor: {\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n which: 81\r\n },\r\n // Ctrl-R\r\n rename: {\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n which: 82\r\n },\r\n // Shift-Alt-O 跳转到文件\r\n goFile: {\r\n ctrlKey: false,\r\n altKey: true,\r\n shiftKey: true,\r\n which: 79\r\n },\r\n // F5 Build\r\n build: {\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n which: 116\r\n },\r\n // F6 Build & Run\r\n buildRun: {\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n which: 117\r\n }\r\n },\r\n bindList: function ($source, $list, enterFun) {\r\n $list.data(\"index\", 0);\r\n $source.keydown(function (event) {\r\n var index = $list.data(\"index\"),\r\n count = $list.find(\"li\").length;\r\n\r\n if (count === 0) {\r\n return true;\r\n }\r\n\r\n if (event.which === 38) { // up\r\n index--;\r\n if (index < 0) {\r\n index = count - 1;\r\n }\r\n }\r\n\r\n if (event.which === 40) { // down\r\n index++;\r\n if (index > count - 1) {\r\n index = 0;\r\n }\r\n }\r\n\r\n var $selected = $list.find(\"li:eq(\" + index + \")\");\r\n\r\n if (event.which === 13) { // enter\r\n enterFun($selected);\r\n }\r\n\r\n $list.find(\"li\").removeClass(\"selected\");\r\n $list.data(\"index\", index);\r\n $selected.addClass(\"selected\");\r\n\r\n if (index === 0) {\r\n $list.scrollTop(0);\r\n } else {\r\n if ($selected[0].offsetTop + $list.scrollTop() > $list.height()) {\r\n if (event.which === 40) {\r\n $list.scrollTop($list.scrollTop() + $selected.height());\r\n } else {\r\n $list.scrollTop($selected[0].offsetTop);\r\n }\r\n } else {\r\n $list.scrollTop(0);\r\n }\r\n }\r\n\r\n // 阻止上下键改变光标位置\r\n if (event.which === 38 || event.which === 40 || event.which === 13) {\r\n return false;\r\n }\r\n });\r\n },\r\n _bindOutput: function () {\r\n $(\".bottom-window-group .output\").keydown(function (event) {\r\n var hotKeys = hotkeys.defaultKeyMap;\r\n if (event.altKey === hotKeys.clearWindow.altKey\r\n && event.which === hotKeys.clearWindow.which) { // Alt-C clear output\r\n bottomGroup.clear('output');\r\n\r\n event.preventDefault();\r\n\r\n return;\r\n }\r\n });\r\n },\r\n _bindFileTree: function () {\r\n $(\"#files\").keydown(function (event) {\r\n event.preventDefault();\r\n\r\n var hotKeys = hotkeys.defaultKeyMap;\r\n if (event.ctrlKey === hotKeys.search.ctrlKey\r\n && event.which === hotKeys.search.which) { // Ctrl-F 搜索\r\n $(\"#dialogSearchForm\").dialog(\"open\");\r\n return;\r\n }\r\n\r\n if (event.ctrlKey === hotKeys.rename.ctrlKey\r\n && event.which === hotKeys.rename.which) { // Ctrl-R 重命名\r\n if (wide.curNode.removable) {\r\n $(\"#dialogRenamePrompt\").dialog(\"open\");\r\n }\r\n return;\r\n }\r\n\r\n switch (event.which) {\r\n case 46: // delete\r\n tree.removeIt();\r\n break;\r\n case 13: // enter\r\n if (!wide.curNode) {\r\n return false;\r\n }\r\n\r\n if (tree.isDir()) {\r\n if (wide.curNode.open) {\r\n return false;\r\n }\r\n\r\n tree.fileTree.expandNode(wide.curNode, true, false, true);\r\n $(\"#files\").focus();\r\n\r\n break;\r\n }\r\n\r\n tree.openFile(wide.curNode);\r\n\r\n break;\r\n case 38: // up\r\n var node = {};\r\n\r\n if (!wide.curNode) { // select the first one if no node been selected\r\n node = tree.fileTree.getNodeByTId(\"files_1\");\r\n } else {\r\n if (wide.curNode && wide.curNode.isFirstNode && wide.curNode.level === 0) {\r\n return false;\r\n }\r\n\r\n node = wide.curNode.getPreNode();\r\n if (wide.curNode.isFirstNode && wide.curNode.getParentNode()) {\r\n node = wide.curNode.getParentNode();\r\n }\r\n\r\n var preNode = wide.curNode.getPreNode();\r\n if (preNode && tree.isDir() && preNode.open) {\r\n node = tree.getCurrentNodeLastNode(preNode);\r\n }\r\n }\r\n\r\n wide.curNode = node;\r\n tree.fileTree.selectNode(node);\r\n $(\"#files\").focus();\r\n break;\r\n case 40: // down\r\n var node = {};\r\n\r\n if (!wide.curNode) { // select the first one if no node been selected \r\n node = tree.fileTree.getNodeByTId(\"files_1\");\r\n } else {\r\n if (wide.curNode && tree.isBottomNode(wide.curNode)) {\r\n return false;\r\n }\r\n\r\n node = wide.curNode.getNextNode();\r\n if (tree.isDir() && wide.curNode.open) {\r\n node = wide.curNode.children[0];\r\n }\r\n\r\n var nextShowNode = tree.getNextShowNode(wide.curNode);\r\n if (wide.curNode.isLastNode && wide.curNode.level !== 0 && !wide.curNode.open && nextShowNode) {\r\n node = nextShowNode;\r\n }\r\n }\r\n\r\n if (node) {\r\n wide.curNode = node;\r\n tree.fileTree.selectNode(node);\r\n }\r\n\r\n $(\"#files\").focus();\r\n break;\r\n case 37: // left\r\n if (!wide.curNode) {\r\n wide.curNode = tree.fileTree.getNodeByTId(\"files_1\");\r\n tree.fileTree.selectNode(wide.curNode);\r\n $(\"#files\").focus();\r\n return false;\r\n }\r\n\r\n if (!tree.isDir() || !wide.curNode.open) {\r\n return false;\r\n }\r\n\r\n tree.fileTree.expandNode(wide.curNode, false, false, true);\r\n $(\"#files\").focus();\r\n break;\r\n case 39: // right\r\n if (!wide.curNode) {\r\n wide.curNode = tree.fileTree.getNodeByTId(\"files_1\");\r\n tree.fileTree.selectNode(wide.curNode);\r\n $(\"#files\").focus();\r\n return false;\r\n }\r\n\r\n if (!tree.isDir() || wide.curNode.open) {\r\n return false;\r\n }\r\n\r\n tree.fileTree.expandNode(wide.curNode, true, false, true);\r\n $(\"#files\").focus();\r\n\r\n break;\r\n case 116: // F5\r\n if (!wide.curNode || !tree.isDir()) {\r\n return false;\r\n }\r\n\r\n tree.refresh(wide.curNode);\r\n\r\n break;\r\n }\r\n });\r\n },\r\n _bindDocument: function () {\r\n var hotKeys = this.defaultKeyMap;\r\n $(document).keydown(function (event) {\r\n if (event.ctrlKey === hotKeys.goEditor.ctrlKey\r\n && event.which === hotKeys.goEditor.which) { // Ctrl-0 焦点切换到当前编辑器\r\n hotKeys.goEditor.fun();\r\n event.preventDefault();\r\n\r\n return;\r\n }\r\n\r\n if (event.ctrlKey === hotKeys.goFileTree.ctrlKey\r\n && event.which === hotKeys.goFileTree.which) { // Ctrl-1 焦点切换到文件树\r\n hotKeys.goFileTree.fun();\r\n event.preventDefault();\r\n\r\n return;\r\n }\r\n\r\n if (event.ctrlKey === hotKeys.goOutline.ctrlKey\r\n && event.which === hotKeys.goOutline.which) { // Ctrl-2 焦点切换到大纲\r\n hotKeys.goOutline.fun();\r\n event.preventDefault();\r\n\r\n return;\r\n }\r\n\r\n if (event.ctrlKey === hotKeys.goOutput.ctrlKey\r\n && event.which === hotKeys.goOutput.which) { // Ctrl-4 焦点切换到输出窗口 \r\n hotKeys.goOutput.fun();\r\n event.preventDefault();\r\n\r\n return;\r\n }\r\n\r\n if (event.ctrlKey === hotKeys.goSearch.ctrlKey\r\n && event.which === hotKeys.goSearch.which) { // Ctrl-5 焦点切换到搜索窗口 \r\n hotKeys.goSearch.fun();\r\n event.preventDefault();\r\n\r\n return;\r\n }\r\n\r\n if (event.ctrlKey === hotKeys.goNotification.ctrlKey\r\n && event.which === hotKeys.goNotification.which) { // Ctrl-6 焦点切换到通知窗口 \r\n hotKeys.goNotification.fun();\r\n event.preventDefault();\r\n\r\n return;\r\n }\r\n\r\n if (event.ctrlKey === hotKeys.closeCurEditor.ctrlKey\r\n && event.which === hotKeys.closeCurEditor.which) { // Ctrl-Q 关闭当前编辑器 \r\n $(\".edit-panel .tabs > div.current\").find(\".ico-close\").click();\r\n event.preventDefault();\r\n\r\n return;\r\n }\r\n\r\n if (event.ctrlKey === hotKeys.changeEditor.ctrlKey\r\n && event.which === hotKeys.changeEditor.which) { // Ctrl-D 窗口组切换\r\n if (document.activeElement.className === \"notification\"\r\n || document.activeElement.className === \"output\"\r\n || document.activeElement.className === \"search\") {\r\n // 焦点在底部窗口组时,对底部进行切换\r\n var tabs = [\"output\", \"search\", \"notification\"],\r\n nextPath = \"\";\r\n for (var i = 0, ii = tabs.length; i < ii; i++) {\r\n if (bottomGroup.tabs.getCurrentId() === tabs[i]) {\r\n if (i < ii - 1) {\r\n nextPath = tabs[i + 1];\r\n } else {\r\n nextPath = tabs[0];\r\n }\r\n break;\r\n }\r\n }\r\n bottomGroup.tabs.setCurrent(nextPath);\r\n $(\".bottom-window-group .\" + nextPath).focus();\r\n\r\n event.preventDefault();\r\n\r\n return false;\r\n }\r\n\r\n if (editors.data.length > 1) {\r\n var nextPath = \"\";\r\n for (var i = 0, ii = editors.data.length; i < ii; i++) {\r\n var currentId = editors.getCurrentId();\r\n if (currentId) {\r\n if (currentId === editors.data[i].id) {\r\n if (i < ii - 1) {\r\n nextPath = editors.data[i + 1].id;\r\n wide.curEditor = editors.data[i + 1].editor;\r\n } else {\r\n nextPath = editors.data[0].id;\r\n wide.curEditor = editors.data[0].editor;\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n editors.tabs.setCurrent(nextPath);\r\n var nextTId = tree.getTIdByPath(nextPath);\r\n wide.curNode = tree.fileTree.getNodeByTId(nextTId);\r\n\r\n tree.fileTree.selectNode(wide.curNode);\r\n wide.refreshOutline();\r\n var cursor = wide.curEditor.getCursor();\r\n $(\".footer .cursor\").text('| ' + (cursor.line + 1) + ':' + (cursor.ch + 1) + ' |');\r\n wide.curEditor.focus();\r\n }\r\n\r\n event.preventDefault();\r\n\r\n return false;\r\n }\r\n\r\n if (event.which === hotKeys.build.which) { // F5 Build\r\n menu.build();\r\n event.preventDefault();\r\n\r\n return;\r\n }\r\n\r\n if (event.which === hotKeys.buildRun.which) { // F6 Build & Run\r\n menu.run();\r\n event.preventDefault();\r\n\r\n return;\r\n }\r\n\r\n if (event.ctrlKey === hotKeys.goFile.ctrlKey\r\n && event.altKey === hotKeys.goFile.altKey\r\n && event.shiftKey === hotKeys.goFile.shiftKey\r\n && event.which === hotKeys.goFile.which) { // Shift-Alt-O 跳转到文件\r\n $(\"#dialogGoFilePrompt\").dialog(\"open\");\r\n }\r\n });\r\n },\r\n init: function () {\r\n this._bindFileTree();\r\n this._bindOutput();\r\n this._bindDocument();\r\n }\r\n};","/*\r\n * Copyright (c) 2014-2019, b3log.org & hacpai.com\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * https://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\n/*\r\n * @file bottomGroup.js\r\n *\r\n * @author Liyuan Li\r\n * @author Liang Ding\r\n * @version 1.1.1.1, Mar 15, 2017\r\n */\r\nvar bottomGroup = {\r\n tabs: undefined,\r\n searchTab: undefined,\r\n init: function () {\r\n this._initTabs();\r\n this._initFrame();\r\n\r\n $('.bottom-window-group .output').click(function () {\r\n $(this).focus();\r\n });\r\n\r\n $('.bottom-window-group .output').on('click', '.path', function (event) {\r\n var $path = $(this),\r\n tId = tree.getTIdByPath($path.data(\"path\"));\r\n tree.openFile(tree.fileTree.getNodeByTId(tId),\r\n CodeMirror.Pos($path.data(\"line\") - 1, $path.data(\"column\") - 1));\r\n event.preventDefault();\r\n return false;\r\n });\r\n },\r\n _initFrame: function () {\r\n $(\".bottom-window-group .output\").parent().mouseup(function (event) {\r\n event.stopPropagation();\r\n\r\n if (event.button === 0) { // 左键\r\n $(\".bottom-window-group .frame\").hide();\r\n return;\r\n }\r\n\r\n // event.button === 2 右键\r\n var left = event.screenX,\r\n $it = $(this);\r\n if ($(\".side\").css(\"left\") === \"auto\" || $(\".side\").css(\"left\") === \"0px\") {\r\n left = event.screenX - $(\".side\").width();\r\n }\r\n $(\".bottom-window-group .frame\").show().css({\r\n \"left\": left + \"px\",\r\n \"top\": (event.offsetY + event.target.offsetTop - $it.scrollTop() - 10) + \"px\"\r\n });\r\n return;\r\n });\r\n },\r\n clear: function (id) {\r\n $('.bottom-window-group .' + id + ' > div').text('');\r\n },\r\n resetOutput: function () {\r\n this.clear('output');\r\n bottomGroup.tabs.setCurrent(\"output\");\r\n windows.flowBottom();\r\n },\r\n _initTabs: function () {\r\n this.tabs = new Tabs({\r\n id: \".bottom-window-group\",\r\n clickAfter: function (id) {\r\n this._$tabsPanel.find(\".\" + id).focus();\r\n }\r\n });\r\n },\r\n fillOutput: function (data) {\r\n var $output = $('.bottom-window-group .output');\r\n\r\n data = data.replace(/\\r/g, '');\r\n data = data.replace(/\\n/g, '
    ');\r\n\r\n if (-1 !== data.indexOf(\"
    \")) {\r\n data = Autolinker.link(data);\r\n }\r\n\r\n $output.find(\"div\").html(data);\r\n $output.parent().scrollTop($output[0].scrollHeight);\r\n }\r\n};\r\n"]} \ No newline at end of file diff --git a/views/index.html b/views/index.html index 9881ed7..be3b694 100644 --- a/views/index.html +++ b/views/index.html @@ -296,18 +296,6 @@
-
  • {{.i18n.team}}
    @@ -316,11 +304,6 @@ {{.i18n.sign_up}}
  • -
  • -
  • - - {{.i18n.git_clone}} -
  • @@ -424,10 +407,6 @@ {{.i18n.refresh}}
  • -
  • - {{.i18n.git_clone}} -
  • -
  • {{.i18n.import}}
  • @@ -574,9 +553,6 @@
    -
    - -