From a519f96c551cce2c67f59dd944bfef29f82b0bec Mon Sep 17 00:00:00 2001 From: echoyang7 <50300391+echoyang7@users.noreply.github.com> Date: Tue, 2 Jul 2024 02:20:35 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20Meituan-?= =?UTF-8?q?Dianping/lyrebird@ec1633e07bf648519dc13fa128b621fa33539327=20?= =?UTF-8?q?=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 404.html | 8 ++++---- aboutus/index.html | 6 +++--- advance/ci.html | 6 +++--- advance/elk.html | 6 +++--- advance/eventbus.html | 6 +++--- advance/index.html | 6 +++--- .../css/{0.styles.8bef0edd.css => 0.styles.dd7e152b.css} | 2 +- assets/js/{11.7a5c5418.js => 11.0ee2364c.js} | 2 +- assets/js/{12.e577c839.js => 12.30611dcd.js} | 2 +- assets/js/{14.d9a35a66.js => 14.5f3e4540.js} | 2 +- assets/js/{19.7535f979.js => 19.e4c5c819.js} | 2 +- assets/js/{20.865a3d0f.js => 20.575d42c2.js} | 2 +- assets/js/{21.0155ee9e.js => 21.351f2458.js} | 2 +- assets/js/{26.423926a7.js => 26.a8114a94.js} | 2 +- assets/js/{27.ec5fc7e3.js => 27.c0c307ad.js} | 2 +- assets/js/{28.880f57ed.js => 28.794246f7.js} | 2 +- assets/js/{30.100378dc.js => 30.7ea61316.js} | 2 +- assets/js/{4.2a0b7d2f.js => 4.3232c911.js} | 2 +- assets/js/{8.a358d4c9.js => 8.69a9da72.js} | 2 +- assets/js/{9.a9c336d6.js => 9.bbfafe20.js} | 2 +- assets/js/{app.eb13491c.js => app.77e69e02.js} | 4 ++-- checker/dev_debug.html | 6 +++--- checker/examples.html | 6 +++--- checker/index.html | 6 +++--- checker/request_editor.html | 6 +++--- develop/index.html | 6 +++--- develop/plugin.html | 6 +++--- guide/api.html | 6 +++--- guide/checker.html | 6 +++--- guide/command-line.html | 6 +++--- guide/config.html | 6 +++--- guide/faq.html | 6 +++--- guide/index.html | 6 +++--- guide/mockdata.html | 6 +++--- index.html | 6 +++--- plugins/android.html | 6 +++--- plugins/api-coverage.html | 6 +++--- plugins/bugit.html | 6 +++--- plugins/index.html | 6 +++--- plugins/ios.html | 6 +++--- plugins/tracking.html | 6 +++--- 41 files changed, 95 insertions(+), 95 deletions(-) rename assets/css/{0.styles.8bef0edd.css => 0.styles.dd7e152b.css} (97%) rename assets/js/{11.7a5c5418.js => 11.0ee2364c.js} (99%) rename assets/js/{12.e577c839.js => 12.30611dcd.js} (99%) rename assets/js/{14.d9a35a66.js => 14.5f3e4540.js} (93%) rename assets/js/{19.7535f979.js => 19.e4c5c819.js} (85%) rename assets/js/{20.865a3d0f.js => 20.575d42c2.js} (84%) rename assets/js/{21.0155ee9e.js => 21.351f2458.js} (85%) rename assets/js/{26.423926a7.js => 26.a8114a94.js} (99%) rename assets/js/{27.ec5fc7e3.js => 27.c0c307ad.js} (98%) rename assets/js/{28.880f57ed.js => 28.794246f7.js} (98%) rename assets/js/{30.100378dc.js => 30.7ea61316.js} (84%) rename assets/js/{4.2a0b7d2f.js => 4.3232c911.js} (99%) rename assets/js/{8.a358d4c9.js => 8.69a9da72.js} (60%) rename assets/js/{9.a9c336d6.js => 9.bbfafe20.js} (65%) rename assets/js/{app.eb13491c.js => app.77e69e02.js} (94%) diff --git a/404.html b/404.html index 1b6e62982..72600797a 100644 --- a/404.html +++ b/404.html @@ -8,13 +8,13 @@ - - + + -

404

That's a Four-Oh-Four.
+ - + diff --git a/aboutus/index.html b/aboutus/index.html index 541918c3f..08e1d2b0a 100644 --- a/aboutus/index.html +++ b/aboutus/index.html @@ -8,8 +8,8 @@ - - + + - + diff --git a/advance/ci.html b/advance/ci.html index 84cb38526..67d1a19b1 100644 --- a/advance/ci.html +++ b/advance/ci.html @@ -8,8 +8,8 @@ - - + +
- + diff --git a/advance/elk.html b/advance/elk.html index 846c46bdd..9248a9de3 100644 --- a/advance/elk.html +++ b/advance/elk.html @@ -8,8 +8,8 @@ - - + +
- + diff --git a/advance/eventbus.html b/advance/eventbus.html index fc73e88fd..b6444a8ff 100644 --- a/advance/eventbus.html +++ b/advance/eventbus.html @@ -8,8 +8,8 @@ - - + +
- + diff --git a/advance/index.html b/advance/index.html index 231f6cd63..3bc1f98d1 100644 --- a/advance/index.html +++ b/advance/index.html @@ -8,8 +8,8 @@ - - + +
- + diff --git a/assets/css/0.styles.8bef0edd.css b/assets/css/0.styles.dd7e152b.css similarity index 97% rename from assets/css/0.styles.8bef0edd.css rename to assets/css/0.styles.dd7e152b.css index 250483b22..88b5e906b 100644 --- a/assets/css/0.styles.8bef0edd.css +++ b/assets/css/0.styles.dd7e152b.css @@ -1 +1 @@ -code[class*=language-],pre[class*=language-]{color:#ccc;background:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#2d2d2d}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.block-comment,.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#999}.token.punctuation{color:#ccc}.token.attr-name,.token.deleted,.token.namespace,.token.tag{color:#e2777a}.token.function-name{color:#6196cc}.token.boolean,.token.function,.token.number{color:#f08d49}.token.class-name,.token.constant,.token.property,.token.symbol{color:#f8c555}.token.atrule,.token.builtin,.token.important,.token.keyword,.token.selector{color:#cc99cd}.token.attr-value,.token.char,.token.regex,.token.string,.token.variable{color:#7ec699}.token.entity,.token.operator,.token.url{color:#67cdcc}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.inserted{color:green}.theme-default-content code{color:#476582;padding:.25rem .5rem;margin:0;font-size:.85em;background-color:rgba(27,31,35,.05);border-radius:3px}.theme-default-content code .token.deleted{color:#ec5975}.theme-default-content code .token.inserted{color:#5f5cca}.theme-default-content pre,.theme-default-content pre[class*=language-]{line-height:1.4;padding:1.25rem 1.5rem;margin:.85rem 0;background-color:#282c34;border-radius:6px;overflow:auto}.theme-default-content pre[class*=language-] code,.theme-default-content pre code{color:#fff;padding:0;background-color:transparent;border-radius:0}div[class*=language-]{position:relative;background-color:#282c34;border-radius:6px}div[class*=language-] .highlight-lines{-webkit-user-select:none;user-select:none;padding-top:1.3rem;position:absolute;top:0;left:0;width:100%;line-height:1.4}div[class*=language-] .highlight-lines .highlighted{background-color:rgba(0,0,0,.66)}div[class*=language-] pre,div[class*=language-] pre[class*=language-]{background:transparent;position:relative;z-index:1}div[class*=language-]:before{position:absolute;z-index:3;top:.8em;right:1em;font-size:.75rem;color:hsla(0,0%,100%,.4)}div[class*=language-]:not(.line-numbers-mode) .line-numbers-wrapper{display:none}div[class*=language-].line-numbers-mode .highlight-lines .highlighted{position:relative}div[class*=language-].line-numbers-mode .highlight-lines .highlighted:before{content:" ";position:absolute;z-index:3;left:0;top:0;display:block;width:3.5rem;height:100%;background-color:rgba(0,0,0,.66)}div[class*=language-].line-numbers-mode pre{padding-left:4.5rem;vertical-align:middle}div[class*=language-].line-numbers-mode .line-numbers-wrapper{position:absolute;top:0;width:3.5rem;text-align:center;color:hsla(0,0%,100%,.3);padding:1.25rem 0;line-height:1.4}div[class*=language-].line-numbers-mode .line-numbers-wrapper br{-webkit-user-select:none;user-select:none}div[class*=language-].line-numbers-mode .line-numbers-wrapper .line-number{position:relative;z-index:4;-webkit-user-select:none;user-select:none;font-size:.85em}div[class*=language-].line-numbers-mode:after{content:"";position:absolute;z-index:2;top:0;left:0;width:3.5rem;height:100%;border-radius:6px 0 0 6px;border-right:1px solid rgba(0,0,0,.66);background-color:#282c34}div[class~=language-js]:before{content:"js"}div[class~=language-ts]:before{content:"ts"}div[class~=language-html]:before{content:"html"}div[class~=language-md]:before{content:"md"}div[class~=language-vue]:before{content:"vue"}div[class~=language-css]:before{content:"css"}div[class~=language-sass]:before{content:"sass"}div[class~=language-scss]:before{content:"scss"}div[class~=language-less]:before{content:"less"}div[class~=language-stylus]:before{content:"stylus"}div[class~=language-go]:before{content:"go"}div[class~=language-java]:before{content:"java"}div[class~=language-c]:before{content:"c"}div[class~=language-sh]:before{content:"sh"}div[class~=language-yaml]:before{content:"yaml"}div[class~=language-py]:before{content:"py"}div[class~=language-docker]:before{content:"docker"}div[class~=language-dockerfile]:before{content:"dockerfile"}div[class~=language-makefile]:before{content:"makefile"}div[class~=language-javascript]:before{content:"js"}div[class~=language-typescript]:before{content:"ts"}div[class~=language-markup]:before{content:"html"}div[class~=language-markdown]:before{content:"md"}div[class~=language-json]:before{content:"json"}div[class~=language-ruby]:before{content:"rb"}div[class~=language-python]:before{content:"py"}div[class~=language-bash]:before{content:"sh"}div[class~=language-php]:before{content:"php"}.custom-block .custom-block-title{font-weight:600;margin-bottom:-.4rem}.custom-block.danger,.custom-block.tip,.custom-block.warning{padding:.1rem 1.5rem;border-left-width:.5rem;border-left-style:solid;margin:1rem 0}.custom-block.tip{background-color:#f3f5f7;border-color:#42b983}.custom-block.warning{background-color:rgba(255,229,100,.3);border-color:#e7c000;color:#6b5900}.custom-block.warning .custom-block-title{color:#b29400}.custom-block.warning a{color:#2c3e50}.custom-block.danger{background-color:#ffe6e6;border-color:#c00;color:#4d0000}.custom-block.danger .custom-block-title{color:#900}.custom-block.danger a{color:#2c3e50}.custom-block.details{display:block;position:relative;border-radius:2px;margin:1.6em 0;padding:1.6em;background-color:#eee}.custom-block.details h4{margin-top:0}.custom-block.details figure:last-child,.custom-block.details p:last-child{margin-bottom:0;padding-bottom:0}.custom-block.details summary{outline:none;cursor:pointer}.arrow{display:inline-block;width:0;height:0}.arrow.up{border-bottom:6px solid #ccc}.arrow.down,.arrow.up{border-left:4px solid transparent;border-right:4px solid transparent}.arrow.down{border-top:6px solid #ccc}.arrow.right{border-left:6px solid #ccc}.arrow.left,.arrow.right{border-top:4px solid transparent;border-bottom:4px solid transparent}.arrow.left{border-right:6px solid #ccc}.theme-default-content:not(.custom){max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.theme-default-content:not(.custom){padding:2rem}}@media (max-width:419px){.theme-default-content:not(.custom){padding:1.5rem}}.table-of-contents .badge{vertical-align:middle}body,html{padding:0;margin:0;background-color:#fff}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:16px;color:#2c3e50}.page{padding-left:20rem}.navbar{z-index:20;right:0;height:3.6rem;background-color:#fff;box-sizing:border-box;border-bottom:1px solid #eaecef}.navbar,.sidebar-mask{position:fixed;top:0;left:0}.sidebar-mask{z-index:9;width:100vw;height:100vh;display:none}.sidebar{font-size:16px;background-color:#fff;width:20rem;position:fixed;z-index:10;margin:0;top:3.6rem;left:0;bottom:0;box-sizing:border-box;border-right:1px solid #eaecef;overflow-y:auto}.theme-default-content:not(.custom)>:first-child{margin-top:3.6rem}.theme-default-content:not(.custom) a:hover{text-decoration:underline}.theme-default-content:not(.custom) p.demo{padding:1rem 1.5rem;border:1px solid #ddd;border-radius:4px}.theme-default-content:not(.custom) img{max-width:100%}.theme-default-content.custom{padding:0;margin:0}.theme-default-content.custom img{max-width:100%}a{font-weight:500;text-decoration:none}a,p a code{color:#5f5cca}p a code{font-weight:400}kbd{background:#eee;border:.15rem solid #ddd;border-bottom:.25rem solid #ddd;border-radius:.15rem;padding:0 .15em}blockquote{font-size:1rem;color:#999;border-left:.2rem solid #dfe2e5;margin:1rem 0;padding:.25rem 0 .25rem 1rem}blockquote>p{margin:0}ol,ul{padding-left:1.2em}strong{font-weight:600}h1,h2,h3,h4,h5,h6{font-weight:600;line-height:1.25}.theme-default-content:not(.custom)>h1,.theme-default-content:not(.custom)>h2,.theme-default-content:not(.custom)>h3,.theme-default-content:not(.custom)>h4,.theme-default-content:not(.custom)>h5,.theme-default-content:not(.custom)>h6{margin-top:-3.1rem;padding-top:4.6rem;margin-bottom:0}.theme-default-content:not(.custom)>h1:first-child,.theme-default-content:not(.custom)>h2:first-child,.theme-default-content:not(.custom)>h3:first-child,.theme-default-content:not(.custom)>h4:first-child,.theme-default-content:not(.custom)>h5:first-child,.theme-default-content:not(.custom)>h6:first-child{margin-top:-1.5rem;margin-bottom:1rem}.theme-default-content:not(.custom)>h1:first-child+.custom-block,.theme-default-content:not(.custom)>h1:first-child+p,.theme-default-content:not(.custom)>h1:first-child+pre,.theme-default-content:not(.custom)>h2:first-child+.custom-block,.theme-default-content:not(.custom)>h2:first-child+p,.theme-default-content:not(.custom)>h2:first-child+pre,.theme-default-content:not(.custom)>h3:first-child+.custom-block,.theme-default-content:not(.custom)>h3:first-child+p,.theme-default-content:not(.custom)>h3:first-child+pre,.theme-default-content:not(.custom)>h4:first-child+.custom-block,.theme-default-content:not(.custom)>h4:first-child+p,.theme-default-content:not(.custom)>h4:first-child+pre,.theme-default-content:not(.custom)>h5:first-child+.custom-block,.theme-default-content:not(.custom)>h5:first-child+p,.theme-default-content:not(.custom)>h5:first-child+pre,.theme-default-content:not(.custom)>h6:first-child+.custom-block,.theme-default-content:not(.custom)>h6:first-child+p,.theme-default-content:not(.custom)>h6:first-child+pre{margin-top:2rem}h1:focus .header-anchor,h1:hover .header-anchor,h2:focus .header-anchor,h2:hover .header-anchor,h3:focus .header-anchor,h3:hover .header-anchor,h4:focus .header-anchor,h4:hover .header-anchor,h5:focus .header-anchor,h5:hover .header-anchor,h6:focus .header-anchor,h6:hover .header-anchor{opacity:1}h1{font-size:2.2rem}h2{font-size:1.65rem;padding-bottom:.3rem;border-bottom:1px solid #eaecef}h3{font-size:1.35rem}a.header-anchor{font-size:.85em;float:left;margin-left:-.87em;padding-right:.23em;margin-top:.125em;opacity:0}a.header-anchor:focus,a.header-anchor:hover{text-decoration:none}.line-number,code,kbd{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}ol,p,ul{line-height:1.7}hr{border:0;border-top:1px solid #eaecef}table{border-collapse:collapse;margin:1rem 0;display:block;overflow-x:auto}tr{border-top:1px solid #dfe2e5}tr:nth-child(2n){background-color:#f6f8fa}td,th{border:1px solid #dfe2e5;padding:.6em 1em}.theme-container.sidebar-open .sidebar-mask{display:block}.theme-container.no-navbar .theme-default-content:not(.custom)>h1,.theme-container.no-navbar h2,.theme-container.no-navbar h3,.theme-container.no-navbar h4,.theme-container.no-navbar h5,.theme-container.no-navbar h6{margin-top:1.5rem;padding-top:0}.theme-container.no-navbar .sidebar{top:0}@media (min-width:720px){.theme-container.no-sidebar .sidebar{display:none}.theme-container.no-sidebar .page{padding-left:0}}@media (max-width:959px){.sidebar{font-size:15px;width:16.4rem}.page{padding-left:16.4rem}}@media (max-width:719px){.sidebar{top:0;padding-top:3.6rem;transform:translateX(-100%);transition:transform .2s ease}.page{padding-left:0}.theme-container.sidebar-open .sidebar{transform:translateX(0)}.theme-container.no-navbar .sidebar{padding-top:0}}@media (max-width:419px){h1{font-size:1.9rem}.theme-default-content div[class*=language-]{margin:.85rem -1.5rem;border-radius:0}}#nprogress{pointer-events:none}#nprogress .bar{background:#5f5cca;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px #5f5cca,0 0 5px #5f5cca;opacity:1;transform:rotate(3deg) translateY(-4px)}#nprogress .spinner{display:block;position:fixed;z-index:1031;top:15px;right:15px}#nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border-color:#5f5cca transparent transparent #5f5cca;border-style:solid;border-width:2px;border-radius:50%;-webkit-animation:nprogress-spinner .4s linear infinite;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@-webkit-keyframes nprogress-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes nprogress-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.icon.outbound{color:#aaa;display:inline-block;vertical-align:middle;position:relative;top:-1px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.home{padding:3.6rem 2rem 0;max-width:960px;margin:0 auto;display:block}.home .hero{text-align:center}.home .hero img{max-width:100%;max-height:280px;display:block;margin:3rem auto 1.5rem}.home .hero h1{font-size:3rem}.home .hero .action,.home .hero .description,.home .hero h1{margin:1.8rem auto}.home .hero .description{max-width:35rem;font-size:1.6rem;line-height:1.3;color:#6a8bad}.home .hero .action-button{display:inline-block;font-size:1.2rem;color:#fff;background-color:#5f5cca;padding:.8rem 1.6rem;border-radius:4px;transition:background-color .1s ease;box-sizing:border-box;border-bottom:1px solid #4946c3}.home .hero .action-button:hover{background-color:#6f6ccf}.home .features{border-top:1px solid #eaecef;padding:1.2rem 0;margin-top:2.5rem;display:flex;flex-wrap:wrap;align-items:flex-start;align-content:stretch;justify-content:space-between}.home .feature{flex-grow:1;flex-basis:30%;max-width:30%}.home .feature h2{font-size:1.4rem;font-weight:500;border-bottom:none;padding-bottom:0;color:#3a5169}.home .feature p{color:#4e6e8e}.home .footer{padding:2.5rem;border-top:1px solid #eaecef;text-align:center;color:#4e6e8e}@media (max-width:719px){.home .features{flex-direction:column}.home .feature{max-width:100%;padding:0 2.5rem}}@media (max-width:419px){.home{padding-left:1.5rem;padding-right:1.5rem}.home .hero img{max-height:210px;margin:2rem auto 1.2rem}.home .hero h1{font-size:2rem}.home .hero .action,.home .hero .description,.home .hero h1{margin:1.2rem auto}.home .hero .description{font-size:1.2rem}.home .hero .action-button{font-size:1rem;padding:.6rem 1.2rem}.home .feature h2{font-size:1.25rem}}.search-box{display:inline-block;position:relative;margin-right:1rem}.search-box input{cursor:text;width:10rem;height:2rem;color:#4e6e8e;display:inline-block;border:1px solid #cfd4db;border-radius:2rem;font-size:.9rem;line-height:2rem;padding:0 .5rem 0 2rem;outline:none;transition:all .2s ease;background:#fff url(/lyrebird/assets/img/search.83621669.svg) .6rem .5rem no-repeat;background-size:1rem}.search-box input:focus{cursor:auto;border-color:#5f5cca}.search-box .suggestions{background:#fff;width:20rem;position:absolute;top:2rem;border:1px solid #cfd4db;border-radius:6px;padding:.4rem;list-style-type:none}.search-box .suggestions.align-right{right:0}.search-box .suggestion{line-height:1.4;padding:.4rem .6rem;border-radius:4px;cursor:pointer}.search-box .suggestion a{white-space:normal;color:#5d82a6}.search-box .suggestion a .page-title{font-weight:600}.search-box .suggestion a .header{font-size:.9em;margin-left:.25em}.search-box .suggestion.focused{background-color:#f3f4f5}.search-box .suggestion.focused a{color:#5f5cca}@media (max-width:959px){.search-box input{cursor:pointer;width:0;border-color:transparent;position:relative}.search-box input:focus{cursor:text;left:0;width:10rem}}@media (-ms-high-contrast:none){.search-box input{height:2rem}}@media (max-width:959px) and (min-width:719px){.search-box .suggestions{left:0}}@media (max-width:719px){.search-box{margin-right:0}.search-box input{left:1rem}.search-box .suggestions{right:0}}@media (max-width:419px){.search-box .suggestions{width:calc(100vw - 4rem)}.search-box input:focus{width:8rem}}.sidebar-button{cursor:pointer;display:none;width:1.25rem;height:1.25rem;position:absolute;padding:.6rem;top:.6rem;left:1rem}.sidebar-button .icon{display:block;width:1.25rem;height:1.25rem}@media (max-width:719px){.sidebar-button{display:block}}.dropdown-enter,.dropdown-leave-to{height:0!important}.dropdown-wrapper{cursor:pointer}.dropdown-wrapper .dropdown-title,.dropdown-wrapper .mobile-dropdown-title{display:block;font-size:.9rem;font-family:inherit;cursor:inherit;padding:inherit;line-height:1.4rem;background:transparent;border:none;font-weight:500;color:#2c3e50}.dropdown-wrapper .dropdown-title:hover,.dropdown-wrapper .mobile-dropdown-title:hover{border-color:transparent}.dropdown-wrapper .dropdown-title .arrow,.dropdown-wrapper .mobile-dropdown-title .arrow{vertical-align:middle;margin-top:-1px;margin-left:.4rem}.dropdown-wrapper .mobile-dropdown-title{display:none;font-weight:600}.dropdown-wrapper .mobile-dropdown-title font-size inherit:hover{color:#5f5cca}.dropdown-wrapper .nav-dropdown .dropdown-item{color:inherit;line-height:1.7rem}.dropdown-wrapper .nav-dropdown .dropdown-item h4{margin:.45rem 0 0;border-top:1px solid #eee;padding:1rem 1.5rem .45rem 1.25rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem-wrapper{padding:0;list-style:none}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem-wrapper .dropdown-subitem{font-size:.9em}.dropdown-wrapper .nav-dropdown .dropdown-item a{display:block;line-height:1.7rem;position:relative;border-bottom:none;font-weight:400;margin-bottom:0;padding:0 1.5rem 0 1.25rem}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active,.dropdown-wrapper .nav-dropdown .dropdown-item a:hover{color:#5f5cca}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{content:"";width:0;height:0;border-left:5px solid #5f5cca;border-top:3px solid transparent;border-bottom:3px solid transparent;position:absolute;top:calc(50% - 2px);left:9px}.dropdown-wrapper .nav-dropdown .dropdown-item:first-child h4{margin-top:0;padding-top:0;border-top:0}@media (max-width:719px){.dropdown-wrapper.open .dropdown-title{margin-bottom:.5rem}.dropdown-wrapper .dropdown-title{display:none}.dropdown-wrapper .mobile-dropdown-title{display:block}.dropdown-wrapper .nav-dropdown{transition:height .1s ease-out;overflow:hidden}.dropdown-wrapper .nav-dropdown .dropdown-item h4{border-top:0;margin-top:0;padding-top:0}.dropdown-wrapper .nav-dropdown .dropdown-item>a,.dropdown-wrapper .nav-dropdown .dropdown-item h4{font-size:15px;line-height:2rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem{font-size:14px;padding-left:1rem}}@media (min-width:719px){.dropdown-wrapper{height:1.8rem}.dropdown-wrapper.open .nav-dropdown,.dropdown-wrapper:hover .nav-dropdown{display:block!important}.dropdown-wrapper.open:blur{display:none}.dropdown-wrapper .nav-dropdown{display:none;height:auto!important;box-sizing:border-box;max-height:calc(100vh - 2.7rem);overflow-y:auto;position:absolute;top:100%;right:0;background-color:#fff;padding:.6rem 0;border:1px solid;border-color:#ddd #ddd #ccc;text-align:left;border-radius:.25rem;white-space:nowrap;margin:0}}.nav-links{display:inline-block}.nav-links a{line-height:1.4rem;color:inherit}.nav-links a.router-link-active,.nav-links a:hover{color:#5f5cca}.nav-links .nav-item{position:relative;display:inline-block;margin-left:1.5rem;line-height:2rem}.nav-links .nav-item:first-child{margin-left:0}.nav-links .repo-link{margin-left:1.5rem}@media (max-width:719px){.nav-links .nav-item,.nav-links .repo-link{margin-left:0}}@media (min-width:719px){.nav-links a.router-link-active,.nav-links a:hover{color:#2c3e50}.nav-item>a:not(.external).router-link-active,.nav-item>a:not(.external):hover{margin-bottom:-2px;border-bottom:2px solid #6c69ce}}.navbar{padding:.7rem 1.5rem;line-height:2.2rem}.navbar a,.navbar img,.navbar span{display:inline-block}.navbar .logo{height:2.2rem;min-width:2.2rem;margin-right:.8rem;vertical-align:top}.navbar .site-name{font-size:1.3rem;font-weight:600;color:#2c3e50;position:relative}.navbar .links{padding-left:1.5rem;box-sizing:border-box;background-color:#fff;white-space:nowrap;font-size:.9rem;position:absolute;right:1.5rem;top:.7rem;display:flex}.navbar .links .search-box{flex:0 0 auto;vertical-align:top}@media (max-width:719px){.navbar{padding-left:4rem}.navbar .can-hide{display:none}.navbar .links{padding-left:1.5rem}.navbar .site-name{width:calc(100vw - 9.4rem);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}}.page-edit{max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.page-edit{padding:2rem}}@media (max-width:419px){.page-edit{padding:1.5rem}}.page-edit{padding-top:1rem;padding-bottom:1rem;overflow:auto}.page-edit .edit-link{display:inline-block}.page-edit .edit-link a{color:#4e6e8e;margin-right:.25rem}.page-edit .last-updated{float:right;font-size:.9em}.page-edit .last-updated .prefix{font-weight:500;color:#4e6e8e}.page-edit .last-updated .time{font-weight:400;color:#767676}@media (max-width:719px){.page-edit .edit-link{margin-bottom:.5rem}.page-edit .last-updated{font-size:.8em;float:none;text-align:left}}.page-nav{max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.page-nav{padding:2rem}}@media (max-width:419px){.page-nav{padding:1.5rem}}.page-nav{padding-top:1rem;padding-bottom:0}.page-nav .inner{min-height:2rem;margin-top:0;border-top:1px solid #eaecef;padding-top:1rem;overflow:auto}.page-nav .next{float:right}.page{padding-bottom:2rem;display:block}.sidebar-group .sidebar-group{padding-left:.5em}.sidebar-group:not(.collapsable) .sidebar-heading:not(.clickable){cursor:auto;color:inherit}.sidebar-group.is-sub-group{padding-left:0}.sidebar-group.is-sub-group>.sidebar-heading{font-size:.95em;line-height:1.4;font-weight:400;padding-left:2rem}.sidebar-group.is-sub-group>.sidebar-heading:not(.clickable){opacity:.5}.sidebar-group.is-sub-group>.sidebar-group-items{padding-left:1rem}.sidebar-group.is-sub-group>.sidebar-group-items>li>.sidebar-link{font-size:.95em;border-left:none}.sidebar-group.depth-2>.sidebar-heading{border-left:none}.sidebar-heading{color:#2c3e50;transition:color .15s ease;cursor:pointer;font-size:1.1em;font-weight:700;padding:.35rem 1.5rem .35rem 1.25rem;width:100%;box-sizing:border-box;margin:0;border-left:.25rem solid transparent}.sidebar-heading.open,.sidebar-heading:hover{color:inherit}.sidebar-heading .arrow{position:relative;top:-.12em;left:.5em}.sidebar-heading.clickable.active{font-weight:600;color:#5f5cca;border-left-color:#5f5cca}.sidebar-heading.clickable:hover{color:#5f5cca}.sidebar-group-items{transition:height .1s ease-out;font-size:.95em;overflow:hidden}.sidebar .sidebar-sub-headers{padding-left:1rem;font-size:.95em}a.sidebar-link{font-size:1em;font-weight:400;display:inline-block;color:#2c3e50;border-left:.25rem solid transparent;padding:.35rem 1rem .35rem 1.25rem;line-height:1.4;width:100%;box-sizing:border-box}a.sidebar-link:hover{color:#5f5cca}a.sidebar-link.active{font-weight:600;color:#5f5cca;border-left-color:#5f5cca}.sidebar-group a.sidebar-link{padding-left:2rem}.sidebar-sub-headers a.sidebar-link{padding-top:.25rem;padding-bottom:.25rem;border-left:none}.sidebar-sub-headers a.sidebar-link.active{font-weight:500}.sidebar ul{padding:0;margin:0;list-style-type:none}.sidebar a{display:inline-block}.sidebar .nav-links{display:none;border-bottom:1px solid #eaecef;padding:.5rem 0 .75rem}.sidebar .nav-links a{font-weight:600}.sidebar .nav-links .nav-item,.sidebar .nav-links .repo-link{display:block;line-height:1.25rem;font-size:1.1em;padding:.5rem 0 .5rem 1.5rem}.sidebar>.sidebar-links{padding:1.5rem 0}.sidebar>.sidebar-links>li>a.sidebar-link{font-size:1.1em;line-height:1.7;font-weight:700}.sidebar>.sidebar-links>li:not(:first-child){margin-top:.75rem}@media (max-width:719px){.sidebar .nav-links{display:block}.sidebar .nav-links .dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{top:calc(1rem - 2px)}.sidebar>.sidebar-links{padding:1rem 0}}.theme-code-block[data-v-759a7d02]{display:none}.theme-code-block__active[data-v-759a7d02]{display:block}.theme-code-block>pre[data-v-759a7d02]{background-color:orange}.badge[data-v-15b7b770]{display:inline-block;font-size:14px;height:18px;line-height:18px;border-radius:3px;padding:0 6px;color:#fff}.badge.green[data-v-15b7b770],.badge.tip[data-v-15b7b770],.badge[data-v-15b7b770]{background-color:#42b983}.badge.error[data-v-15b7b770]{background-color:#da5961}.badge.warn[data-v-15b7b770],.badge.warning[data-v-15b7b770],.badge.yellow[data-v-15b7b770]{background-color:#e7c000}.badge+.badge[data-v-15b7b770]{margin-left:5px}.theme-code-group__nav[data-v-deefee04]{margin-bottom:-35px;background-color:#282c34;padding-bottom:22px;border-top-left-radius:6px;border-top-right-radius:6px;padding-left:10px;padding-top:10px}.theme-code-group__ul[data-v-deefee04]{margin:auto 0;padding-left:0;display:inline-flex;list-style:none}.theme-code-group__nav-tab[data-v-deefee04]{border:0;padding:5px;cursor:pointer;background-color:transparent;font-size:.85em;line-height:1.4;color:hsla(0,0%,100%,.9);font-weight:600}.theme-code-group__nav-tab-active[data-v-deefee04]{border-bottom:1px solid #42b983}.pre-blank[data-v-deefee04]{color:#42b983} \ No newline at end of file +code[class*=language-],pre[class*=language-]{color:#ccc;background:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#2d2d2d}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.block-comment,.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#999}.token.punctuation{color:#ccc}.token.attr-name,.token.deleted,.token.namespace,.token.tag{color:#e2777a}.token.function-name{color:#6196cc}.token.boolean,.token.function,.token.number{color:#f08d49}.token.class-name,.token.constant,.token.property,.token.symbol{color:#f8c555}.token.atrule,.token.builtin,.token.important,.token.keyword,.token.selector{color:#cc99cd}.token.attr-value,.token.char,.token.regex,.token.string,.token.variable{color:#7ec699}.token.entity,.token.operator,.token.url{color:#67cdcc}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.inserted{color:green}.theme-default-content code{color:#476582;padding:.25rem .5rem;margin:0;font-size:.85em;background-color:rgba(27,31,35,.05);border-radius:3px}.theme-default-content code .token.deleted{color:#ec5975}.theme-default-content code .token.inserted{color:#5f5cca}.theme-default-content pre,.theme-default-content pre[class*=language-]{line-height:1.4;padding:1.25rem 1.5rem;margin:.85rem 0;background-color:#282c34;border-radius:6px;overflow:auto}.theme-default-content pre[class*=language-] code,.theme-default-content pre code{color:#fff;padding:0;background-color:transparent;border-radius:0}div[class*=language-]{position:relative;background-color:#282c34;border-radius:6px}div[class*=language-] .highlight-lines{-webkit-user-select:none;user-select:none;padding-top:1.3rem;position:absolute;top:0;left:0;width:100%;line-height:1.4}div[class*=language-] .highlight-lines .highlighted{background-color:rgba(0,0,0,.66)}div[class*=language-] pre,div[class*=language-] pre[class*=language-]{background:transparent;position:relative;z-index:1}div[class*=language-]:before{position:absolute;z-index:3;top:.8em;right:1em;font-size:.75rem;color:hsla(0,0%,100%,.4)}div[class*=language-]:not(.line-numbers-mode) .line-numbers-wrapper{display:none}div[class*=language-].line-numbers-mode .highlight-lines .highlighted{position:relative}div[class*=language-].line-numbers-mode .highlight-lines .highlighted:before{content:" ";position:absolute;z-index:3;left:0;top:0;display:block;width:3.5rem;height:100%;background-color:rgba(0,0,0,.66)}div[class*=language-].line-numbers-mode pre{padding-left:4.5rem;vertical-align:middle}div[class*=language-].line-numbers-mode .line-numbers-wrapper{position:absolute;top:0;width:3.5rem;text-align:center;color:hsla(0,0%,100%,.3);padding:1.25rem 0;line-height:1.4}div[class*=language-].line-numbers-mode .line-numbers-wrapper br{-webkit-user-select:none;user-select:none}div[class*=language-].line-numbers-mode .line-numbers-wrapper .line-number{position:relative;z-index:4;-webkit-user-select:none;user-select:none;font-size:.85em}div[class*=language-].line-numbers-mode:after{content:"";position:absolute;z-index:2;top:0;left:0;width:3.5rem;height:100%;border-radius:6px 0 0 6px;border-right:1px solid rgba(0,0,0,.66);background-color:#282c34}div[class~=language-js]:before{content:"js"}div[class~=language-ts]:before{content:"ts"}div[class~=language-html]:before{content:"html"}div[class~=language-md]:before{content:"md"}div[class~=language-vue]:before{content:"vue"}div[class~=language-css]:before{content:"css"}div[class~=language-sass]:before{content:"sass"}div[class~=language-scss]:before{content:"scss"}div[class~=language-less]:before{content:"less"}div[class~=language-stylus]:before{content:"stylus"}div[class~=language-go]:before{content:"go"}div[class~=language-java]:before{content:"java"}div[class~=language-c]:before{content:"c"}div[class~=language-sh]:before{content:"sh"}div[class~=language-yaml]:before{content:"yaml"}div[class~=language-py]:before{content:"py"}div[class~=language-docker]:before{content:"docker"}div[class~=language-dockerfile]:before{content:"dockerfile"}div[class~=language-makefile]:before{content:"makefile"}div[class~=language-javascript]:before{content:"js"}div[class~=language-typescript]:before{content:"ts"}div[class~=language-markup]:before{content:"html"}div[class~=language-markdown]:before{content:"md"}div[class~=language-json]:before{content:"json"}div[class~=language-ruby]:before{content:"rb"}div[class~=language-python]:before{content:"py"}div[class~=language-bash]:before{content:"sh"}div[class~=language-php]:before{content:"php"}.custom-block .custom-block-title{font-weight:600;margin-bottom:-.4rem}.custom-block.danger,.custom-block.tip,.custom-block.warning{padding:.1rem 1.5rem;border-left-width:.5rem;border-left-style:solid;margin:1rem 0}.custom-block.tip{background-color:#f3f5f7;border-color:#42b983}.custom-block.warning{background-color:rgba(255,229,100,.3);border-color:#e7c000;color:#6b5900}.custom-block.warning .custom-block-title{color:#b29400}.custom-block.warning a{color:#2c3e50}.custom-block.danger{background-color:#ffe6e6;border-color:#c00;color:#4d0000}.custom-block.danger .custom-block-title{color:#900}.custom-block.danger a{color:#2c3e50}.custom-block.details{display:block;position:relative;border-radius:2px;margin:1.6em 0;padding:1.6em;background-color:#eee}.custom-block.details h4{margin-top:0}.custom-block.details figure:last-child,.custom-block.details p:last-child{margin-bottom:0;padding-bottom:0}.custom-block.details summary{outline:none;cursor:pointer}.arrow{display:inline-block;width:0;height:0}.arrow.up{border-bottom:6px solid #ccc}.arrow.down,.arrow.up{border-left:4px solid transparent;border-right:4px solid transparent}.arrow.down{border-top:6px solid #ccc}.arrow.right{border-left:6px solid #ccc}.arrow.left,.arrow.right{border-top:4px solid transparent;border-bottom:4px solid transparent}.arrow.left{border-right:6px solid #ccc}.theme-default-content:not(.custom){max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.theme-default-content:not(.custom){padding:2rem}}@media (max-width:419px){.theme-default-content:not(.custom){padding:1.5rem}}.table-of-contents .badge{vertical-align:middle}body,html{padding:0;margin:0;background-color:#fff}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:16px;color:#2c3e50}.page{padding-left:20rem}.navbar{z-index:20;right:0;height:3.6rem;background-color:#fff;box-sizing:border-box;border-bottom:1px solid #eaecef}.navbar,.sidebar-mask{position:fixed;top:0;left:0}.sidebar-mask{z-index:9;width:100vw;height:100vh;display:none}.sidebar{font-size:16px;background-color:#fff;width:20rem;position:fixed;z-index:10;margin:0;top:3.6rem;left:0;bottom:0;box-sizing:border-box;border-right:1px solid #eaecef;overflow-y:auto}.theme-default-content:not(.custom)>:first-child{margin-top:3.6rem}.theme-default-content:not(.custom) a:hover{text-decoration:underline}.theme-default-content:not(.custom) p.demo{padding:1rem 1.5rem;border:1px solid #ddd;border-radius:4px}.theme-default-content:not(.custom) img{max-width:100%}.theme-default-content.custom{padding:0;margin:0}.theme-default-content.custom img{max-width:100%}a{font-weight:500;text-decoration:none}a,p a code{color:#5f5cca}p a code{font-weight:400}kbd{background:#eee;border:.15rem solid #ddd;border-bottom:.25rem solid #ddd;border-radius:.15rem;padding:0 .15em}blockquote{font-size:1rem;color:#999;border-left:.2rem solid #dfe2e5;margin:1rem 0;padding:.25rem 0 .25rem 1rem}blockquote>p{margin:0}ol,ul{padding-left:1.2em}strong{font-weight:600}h1,h2,h3,h4,h5,h6{font-weight:600;line-height:1.25}.theme-default-content:not(.custom)>h1,.theme-default-content:not(.custom)>h2,.theme-default-content:not(.custom)>h3,.theme-default-content:not(.custom)>h4,.theme-default-content:not(.custom)>h5,.theme-default-content:not(.custom)>h6{margin-top:-3.1rem;padding-top:4.6rem;margin-bottom:0}.theme-default-content:not(.custom)>h1:first-child,.theme-default-content:not(.custom)>h2:first-child,.theme-default-content:not(.custom)>h3:first-child,.theme-default-content:not(.custom)>h4:first-child,.theme-default-content:not(.custom)>h5:first-child,.theme-default-content:not(.custom)>h6:first-child{margin-top:-1.5rem;margin-bottom:1rem}.theme-default-content:not(.custom)>h1:first-child+.custom-block,.theme-default-content:not(.custom)>h1:first-child+p,.theme-default-content:not(.custom)>h1:first-child+pre,.theme-default-content:not(.custom)>h2:first-child+.custom-block,.theme-default-content:not(.custom)>h2:first-child+p,.theme-default-content:not(.custom)>h2:first-child+pre,.theme-default-content:not(.custom)>h3:first-child+.custom-block,.theme-default-content:not(.custom)>h3:first-child+p,.theme-default-content:not(.custom)>h3:first-child+pre,.theme-default-content:not(.custom)>h4:first-child+.custom-block,.theme-default-content:not(.custom)>h4:first-child+p,.theme-default-content:not(.custom)>h4:first-child+pre,.theme-default-content:not(.custom)>h5:first-child+.custom-block,.theme-default-content:not(.custom)>h5:first-child+p,.theme-default-content:not(.custom)>h5:first-child+pre,.theme-default-content:not(.custom)>h6:first-child+.custom-block,.theme-default-content:not(.custom)>h6:first-child+p,.theme-default-content:not(.custom)>h6:first-child+pre{margin-top:2rem}h1:focus .header-anchor,h1:hover .header-anchor,h2:focus .header-anchor,h2:hover .header-anchor,h3:focus .header-anchor,h3:hover .header-anchor,h4:focus .header-anchor,h4:hover .header-anchor,h5:focus .header-anchor,h5:hover .header-anchor,h6:focus .header-anchor,h6:hover .header-anchor{opacity:1}h1{font-size:2.2rem}h2{font-size:1.65rem;padding-bottom:.3rem;border-bottom:1px solid #eaecef}h3{font-size:1.35rem}a.header-anchor{font-size:.85em;float:left;margin-left:-.87em;padding-right:.23em;margin-top:.125em;opacity:0}a.header-anchor:focus,a.header-anchor:hover{text-decoration:none}.line-number,code,kbd{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}ol,p,ul{line-height:1.7}hr{border:0;border-top:1px solid #eaecef}table{border-collapse:collapse;margin:1rem 0;display:block;overflow-x:auto}tr{border-top:1px solid #dfe2e5}tr:nth-child(2n){background-color:#f6f8fa}td,th{border:1px solid #dfe2e5;padding:.6em 1em}.theme-container.sidebar-open .sidebar-mask{display:block}.theme-container.no-navbar .theme-default-content:not(.custom)>h1,.theme-container.no-navbar h2,.theme-container.no-navbar h3,.theme-container.no-navbar h4,.theme-container.no-navbar h5,.theme-container.no-navbar h6{margin-top:1.5rem;padding-top:0}.theme-container.no-navbar .sidebar{top:0}@media (min-width:720px){.theme-container.no-sidebar .sidebar{display:none}.theme-container.no-sidebar .page{padding-left:0}}@media (max-width:959px){.sidebar{font-size:15px;width:16.4rem}.page{padding-left:16.4rem}}@media (max-width:719px){.sidebar{top:0;padding-top:3.6rem;transform:translateX(-100%);transition:transform .2s ease}.page{padding-left:0}.theme-container.sidebar-open .sidebar{transform:translateX(0)}.theme-container.no-navbar .sidebar{padding-top:0}}@media (max-width:419px){h1{font-size:1.9rem}.theme-default-content div[class*=language-]{margin:.85rem -1.5rem;border-radius:0}}#nprogress{pointer-events:none}#nprogress .bar{background:#5f5cca;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px #5f5cca,0 0 5px #5f5cca;opacity:1;transform:rotate(3deg) translateY(-4px)}#nprogress .spinner{display:block;position:fixed;z-index:1031;top:15px;right:15px}#nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border-color:#5f5cca transparent transparent #5f5cca;border-style:solid;border-width:2px;border-radius:50%;-webkit-animation:nprogress-spinner .4s linear infinite;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@-webkit-keyframes nprogress-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes nprogress-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.icon.outbound{color:#aaa;display:inline-block;vertical-align:middle;position:relative;top:-1px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.home{padding:3.6rem 2rem 0;max-width:960px;margin:0 auto;display:block}.home .hero{text-align:center}.home .hero img{max-width:100%;max-height:280px;display:block;margin:3rem auto 1.5rem}.home .hero h1{font-size:3rem}.home .hero .action,.home .hero .description,.home .hero h1{margin:1.8rem auto}.home .hero .description{max-width:35rem;font-size:1.6rem;line-height:1.3;color:#6a8bad}.home .hero .action-button{display:inline-block;font-size:1.2rem;color:#fff;background-color:#5f5cca;padding:.8rem 1.6rem;border-radius:4px;transition:background-color .1s ease;box-sizing:border-box;border-bottom:1px solid #4946c3}.home .hero .action-button:hover{background-color:#6f6ccf}.home .features{border-top:1px solid #eaecef;padding:1.2rem 0;margin-top:2.5rem;display:flex;flex-wrap:wrap;align-items:flex-start;align-content:stretch;justify-content:space-between}.home .feature{flex-grow:1;flex-basis:30%;max-width:30%}.home .feature h2{font-size:1.4rem;font-weight:500;border-bottom:none;padding-bottom:0;color:#3a5169}.home .feature p{color:#4e6e8e}.home .footer{padding:2.5rem;border-top:1px solid #eaecef;text-align:center;color:#4e6e8e}@media (max-width:719px){.home .features{flex-direction:column}.home .feature{max-width:100%;padding:0 2.5rem}}@media (max-width:419px){.home{padding-left:1.5rem;padding-right:1.5rem}.home .hero img{max-height:210px;margin:2rem auto 1.2rem}.home .hero h1{font-size:2rem}.home .hero .action,.home .hero .description,.home .hero h1{margin:1.2rem auto}.home .hero .description{font-size:1.2rem}.home .hero .action-button{font-size:1rem;padding:.6rem 1.2rem}.home .feature h2{font-size:1.25rem}}.search-box{display:inline-block;position:relative;margin-right:1rem}.search-box input{cursor:text;width:10rem;height:2rem;color:#4e6e8e;display:inline-block;border:1px solid #cfd4db;border-radius:2rem;font-size:.9rem;line-height:2rem;padding:0 .5rem 0 2rem;outline:none;transition:all .2s ease;background:#fff url(/lyrebird/assets/img/search.83621669.svg) .6rem .5rem no-repeat;background-size:1rem}.search-box input:focus{cursor:auto;border-color:#5f5cca}.search-box .suggestions{background:#fff;width:20rem;position:absolute;top:2rem;border:1px solid #cfd4db;border-radius:6px;padding:.4rem;list-style-type:none}.search-box .suggestions.align-right{right:0}.search-box .suggestion{line-height:1.4;padding:.4rem .6rem;border-radius:4px;cursor:pointer}.search-box .suggestion a{white-space:normal;color:#5d82a6}.search-box .suggestion a .page-title{font-weight:600}.search-box .suggestion a .header{font-size:.9em;margin-left:.25em}.search-box .suggestion.focused{background-color:#f3f4f5}.search-box .suggestion.focused a{color:#5f5cca}@media (max-width:959px){.search-box input{cursor:pointer;width:0;border-color:transparent;position:relative}.search-box input:focus{cursor:text;left:0;width:10rem}}@media (-ms-high-contrast:none){.search-box input{height:2rem}}@media (max-width:959px) and (min-width:719px){.search-box .suggestions{left:0}}@media (max-width:719px){.search-box{margin-right:0}.search-box input{left:1rem}.search-box .suggestions{right:0}}@media (max-width:419px){.search-box .suggestions{width:calc(100vw - 4rem)}.search-box input:focus{width:8rem}}.sidebar-button{cursor:pointer;display:none;width:1.25rem;height:1.25rem;position:absolute;padding:.6rem;top:.6rem;left:1rem}.sidebar-button .icon{display:block;width:1.25rem;height:1.25rem}@media (max-width:719px){.sidebar-button{display:block}}.dropdown-enter,.dropdown-leave-to{height:0!important}.dropdown-wrapper{cursor:pointer}.dropdown-wrapper .dropdown-title,.dropdown-wrapper .mobile-dropdown-title{display:block;font-size:.9rem;font-family:inherit;cursor:inherit;padding:inherit;line-height:1.4rem;background:transparent;border:none;font-weight:500;color:#2c3e50}.dropdown-wrapper .dropdown-title:hover,.dropdown-wrapper .mobile-dropdown-title:hover{border-color:transparent}.dropdown-wrapper .dropdown-title .arrow,.dropdown-wrapper .mobile-dropdown-title .arrow{vertical-align:middle;margin-top:-1px;margin-left:.4rem}.dropdown-wrapper .mobile-dropdown-title{display:none;font-weight:600}.dropdown-wrapper .mobile-dropdown-title font-size inherit:hover{color:#5f5cca}.dropdown-wrapper .nav-dropdown .dropdown-item{color:inherit;line-height:1.7rem}.dropdown-wrapper .nav-dropdown .dropdown-item h4{margin:.45rem 0 0;border-top:1px solid #eee;padding:1rem 1.5rem .45rem 1.25rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem-wrapper{padding:0;list-style:none}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem-wrapper .dropdown-subitem{font-size:.9em}.dropdown-wrapper .nav-dropdown .dropdown-item a{display:block;line-height:1.7rem;position:relative;border-bottom:none;font-weight:400;margin-bottom:0;padding:0 1.5rem 0 1.25rem}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active,.dropdown-wrapper .nav-dropdown .dropdown-item a:hover{color:#5f5cca}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{content:"";width:0;height:0;border-left:5px solid #5f5cca;border-top:3px solid transparent;border-bottom:3px solid transparent;position:absolute;top:calc(50% - 2px);left:9px}.dropdown-wrapper .nav-dropdown .dropdown-item:first-child h4{margin-top:0;padding-top:0;border-top:0}@media (max-width:719px){.dropdown-wrapper.open .dropdown-title{margin-bottom:.5rem}.dropdown-wrapper .dropdown-title{display:none}.dropdown-wrapper .mobile-dropdown-title{display:block}.dropdown-wrapper .nav-dropdown{transition:height .1s ease-out;overflow:hidden}.dropdown-wrapper .nav-dropdown .dropdown-item h4{border-top:0;margin-top:0;padding-top:0}.dropdown-wrapper .nav-dropdown .dropdown-item>a,.dropdown-wrapper .nav-dropdown .dropdown-item h4{font-size:15px;line-height:2rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem{font-size:14px;padding-left:1rem}}@media (min-width:719px){.dropdown-wrapper{height:1.8rem}.dropdown-wrapper.open .nav-dropdown,.dropdown-wrapper:hover .nav-dropdown{display:block!important}.dropdown-wrapper.open:blur{display:none}.dropdown-wrapper .nav-dropdown{display:none;height:auto!important;box-sizing:border-box;max-height:calc(100vh - 2.7rem);overflow-y:auto;position:absolute;top:100%;right:0;background-color:#fff;padding:.6rem 0;border:1px solid;border-color:#ddd #ddd #ccc;text-align:left;border-radius:.25rem;white-space:nowrap;margin:0}}.nav-links{display:inline-block}.nav-links a{line-height:1.4rem;color:inherit}.nav-links a.router-link-active,.nav-links a:hover{color:#5f5cca}.nav-links .nav-item{position:relative;display:inline-block;margin-left:1.5rem;line-height:2rem}.nav-links .nav-item:first-child{margin-left:0}.nav-links .repo-link{margin-left:1.5rem}@media (max-width:719px){.nav-links .nav-item,.nav-links .repo-link{margin-left:0}}@media (min-width:719px){.nav-links a.router-link-active,.nav-links a:hover{color:#2c3e50}.nav-item>a:not(.external).router-link-active,.nav-item>a:not(.external):hover{margin-bottom:-2px;border-bottom:2px solid #6c69ce}}.navbar{padding:.7rem 1.5rem;line-height:2.2rem}.navbar a,.navbar img,.navbar span{display:inline-block}.navbar .logo{height:2.2rem;min-width:2.2rem;margin-right:.8rem;vertical-align:top}.navbar .site-name{font-size:1.3rem;font-weight:600;color:#2c3e50;position:relative}.navbar .links{padding-left:1.5rem;box-sizing:border-box;background-color:#fff;white-space:nowrap;font-size:.9rem;position:absolute;right:1.5rem;top:.7rem;display:flex}.navbar .links .search-box{flex:0 0 auto;vertical-align:top}@media (max-width:719px){.navbar{padding-left:4rem}.navbar .can-hide{display:none}.navbar .links{padding-left:1.5rem}.navbar .site-name{width:calc(100vw - 9.4rem);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}}.page-edit{max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.page-edit{padding:2rem}}@media (max-width:419px){.page-edit{padding:1.5rem}}.page-edit{padding-top:1rem;padding-bottom:1rem;overflow:auto}.page-edit .edit-link{display:inline-block}.page-edit .edit-link a{color:#4e6e8e;margin-right:.25rem}.page-edit .last-updated{float:right;font-size:.9em}.page-edit .last-updated .prefix{font-weight:500;color:#4e6e8e}.page-edit .last-updated .time{font-weight:400;color:#767676}@media (max-width:719px){.page-edit .edit-link{margin-bottom:.5rem}.page-edit .last-updated{font-size:.8em;float:none;text-align:left}}.page-nav{max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.page-nav{padding:2rem}}@media (max-width:419px){.page-nav{padding:1.5rem}}.page-nav{padding-top:1rem;padding-bottom:0}.page-nav .inner{min-height:2rem;margin-top:0;border-top:1px solid #eaecef;padding-top:1rem;overflow:auto}.page-nav .next{float:right}.page{padding-bottom:2rem;display:block}.sidebar-group .sidebar-group{padding-left:.5em}.sidebar-group:not(.collapsable) .sidebar-heading:not(.clickable){cursor:auto;color:inherit}.sidebar-group.is-sub-group{padding-left:0}.sidebar-group.is-sub-group>.sidebar-heading{font-size:.95em;line-height:1.4;font-weight:400;padding-left:2rem}.sidebar-group.is-sub-group>.sidebar-heading:not(.clickable){opacity:.5}.sidebar-group.is-sub-group>.sidebar-group-items{padding-left:1rem}.sidebar-group.is-sub-group>.sidebar-group-items>li>.sidebar-link{font-size:.95em;border-left:none}.sidebar-group.depth-2>.sidebar-heading{border-left:none}.sidebar-heading{color:#2c3e50;transition:color .15s ease;cursor:pointer;font-size:1.1em;font-weight:700;padding:.35rem 1.5rem .35rem 1.25rem;width:100%;box-sizing:border-box;margin:0;border-left:.25rem solid transparent}.sidebar-heading.open,.sidebar-heading:hover{color:inherit}.sidebar-heading .arrow{position:relative;top:-.12em;left:.5em}.sidebar-heading.clickable.active{font-weight:600;color:#5f5cca;border-left-color:#5f5cca}.sidebar-heading.clickable:hover{color:#5f5cca}.sidebar-group-items{transition:height .1s ease-out;font-size:.95em;overflow:hidden}.sidebar .sidebar-sub-headers{padding-left:1rem;font-size:.95em}a.sidebar-link{font-size:1em;font-weight:400;display:inline-block;color:#2c3e50;border-left:.25rem solid transparent;padding:.35rem 1rem .35rem 1.25rem;line-height:1.4;width:100%;box-sizing:border-box}a.sidebar-link:hover{color:#5f5cca}a.sidebar-link.active{font-weight:600;color:#5f5cca;border-left-color:#5f5cca}.sidebar-group a.sidebar-link{padding-left:2rem}.sidebar-sub-headers a.sidebar-link{padding-top:.25rem;padding-bottom:.25rem;border-left:none}.sidebar-sub-headers a.sidebar-link.active{font-weight:500}.sidebar ul{padding:0;margin:0;list-style-type:none}.sidebar a{display:inline-block}.sidebar .nav-links{display:none;border-bottom:1px solid #eaecef;padding:.5rem 0 .75rem}.sidebar .nav-links a{font-weight:600}.sidebar .nav-links .nav-item,.sidebar .nav-links .repo-link{display:block;line-height:1.25rem;font-size:1.1em;padding:.5rem 0 .5rem 1.5rem}.sidebar>.sidebar-links{padding:1.5rem 0}.sidebar>.sidebar-links>li>a.sidebar-link{font-size:1.1em;line-height:1.7;font-weight:700}.sidebar>.sidebar-links>li:not(:first-child){margin-top:.75rem}@media (max-width:719px){.sidebar .nav-links{display:block}.sidebar .nav-links .dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{top:calc(1rem - 2px)}.sidebar>.sidebar-links{padding:1rem 0}}.badge[data-v-15b7b770]{display:inline-block;font-size:14px;height:18px;line-height:18px;border-radius:3px;padding:0 6px;color:#fff}.badge.green[data-v-15b7b770],.badge.tip[data-v-15b7b770],.badge[data-v-15b7b770]{background-color:#42b983}.badge.error[data-v-15b7b770]{background-color:#da5961}.badge.warn[data-v-15b7b770],.badge.warning[data-v-15b7b770],.badge.yellow[data-v-15b7b770]{background-color:#e7c000}.badge+.badge[data-v-15b7b770]{margin-left:5px}.theme-code-block[data-v-759a7d02]{display:none}.theme-code-block__active[data-v-759a7d02]{display:block}.theme-code-block>pre[data-v-759a7d02]{background-color:orange}.theme-code-group__nav[data-v-deefee04]{margin-bottom:-35px;background-color:#282c34;padding-bottom:22px;border-top-left-radius:6px;border-top-right-radius:6px;padding-left:10px;padding-top:10px}.theme-code-group__ul[data-v-deefee04]{margin:auto 0;padding-left:0;display:inline-flex;list-style:none}.theme-code-group__nav-tab[data-v-deefee04]{border:0;padding:5px;cursor:pointer;background-color:transparent;font-size:.85em;line-height:1.4;color:hsla(0,0%,100%,.9);font-weight:600}.theme-code-group__nav-tab-active[data-v-deefee04]{border-bottom:1px solid #42b983}.pre-blank[data-v-deefee04]{color:#42b983} \ No newline at end of file diff --git a/assets/js/11.7a5c5418.js b/assets/js/11.0ee2364c.js similarity index 99% rename from assets/js/11.7a5c5418.js rename to assets/js/11.0ee2364c.js index faee197c2..fddcf7820 100644 --- a/assets/js/11.7a5c5418.js +++ b/assets/js/11.0ee2364c.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[11],{233:function(t,e,r){t.exports=r.p+"assets/img/checker-a.dc4421b3.png"},234:function(t,e,r){t.exports=r.p+"assets/img/checker-b.f541161a.gif"},329:function(t,e,r){"use strict";r.r(e);var a=r(13),s=Object(a.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"使用指南"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#使用指南"}},[t._v("#")]),t._v(" 使用指南")]),t._v(" "),e("p",[t._v("扩展(Extension)-自定义脚本是一种支持用户⾃定义的Python脚本,在Lyrebird运行的过程中,于后台并行地工作。")]),t._v(" "),e("p",[t._v("无需搭建工程和前端开发,自定义脚本可灵活、轻巧、便捷、准确的对"),e("RouterLink",{attrs:{to:"/advance/eventbus.html"}},[t._v("消息总线")]),t._v("频道中的数据进行分析和校验。")],1),t._v(" "),e("p",[t._v("自定义脚本默认支持三种类型:")]),t._v(" "),e("ol",[e("li",[e("RouterLink",{attrs:{to:"/checker/request_editor.html"}},[t._v("请求修改器(Modifier)")]),t._v(": 如为请求添加Header Key、"),e("RouterLink",{attrs:{to:"/checker/request_editor.html#修改请求"}},[t._v("修改请求的Param")]),t._v("等")],1),t._v(" "),e("li",[e("RouterLink",{attrs:{to:"/checker/dev_debug.html"}},[t._v("请求检查器(Checker)")]),t._v(": 如可通过检查器监听网络请求频道,检测网络请求中的"),e("RouterLink",{attrs:{to:"/checker/examples.html#大图检测"}},[t._v("图片大小")]),t._v("是否满足预期,或检测是否"),e("RouterLink",{attrs:{to:"/checker/examples.html#重复请求检测"}},[t._v("重复请求")]),t._v("了同一个接口等")],1),t._v(" "),e("li",[t._v("其他(Other): 未分类或者综合应用")])]),t._v(" "),e("p",[t._v("可在脚本中使用全局变量"),e("strong",[t._v("ExtensionCategory")]),t._v("(String类型)人为指定Extension类型")]),t._v(" "),e("p",[t._v("可以在Lyrebird运行过程中随时开启或关闭自定义脚本,即插即用,方便灵活。")]),t._v(" "),e("p",[e("img",{attrs:{src:r(233),alt:""}})]),t._v(" "),e("blockquote",[e("p",[t._v("展开Extension标签可查看当前运行的自定义脚本,按组别聚合。\nActivated Tab展示已激活的Extension, Deactivated Tab展示未激活的Extension")])]),t._v(" "),e("p",[t._v("如果需要高级的检查和展示,可使用"),e("RouterLink",{attrs:{to:"/plugins/"}},[t._v("自定义插件")]),t._v("开发实现更复杂的场景和功能。")],1),t._v(" "),e("h2",{attrs:{id:"载入自定义脚本"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#载入自定义脚本"}},[t._v("#")]),t._v(" 载入自定义脚本")]),t._v(" "),e("p",[t._v("运行时携带的自定义脚本存放在默认路径~/.lyrebird/checkers下。对自定义脚本的新增、修改、删除,可在默认目录下操作文件。")]),t._v(" "),e("p",[t._v("当默认目录中没有可用的自定义脚本时,会自动载入示例脚本。目前提供的示例脚本如下:")]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",{staticStyle:{"text-align":"left"}},[t._v("Filename")]),t._v(" "),e("th",{staticStyle:{"text-align":"left"}},[t._v("Type")]),t._v(" "),e("th",{staticStyle:{"text-align":"left"}},[t._v("Description")])])]),t._v(" "),e("tbody",[e("tr",[e("td",{staticStyle:{"text-align":"left"}},[e("a",{attrs:{href:"https://github.com/Meituan-Dianping/lyrebird/tree/master/lyrebird/examples/checkers/img_size.py",target:"_blank",rel:"noopener noreferrer"}},[t._v("img_size.py"),e("OutboundLink")],1)]),t._v(" "),e("td",{staticStyle:{"text-align":"left"}},[t._v("检查器")]),t._v(" "),e("td",{staticStyle:{"text-align":"left"}},[t._v("检查网络请求中图片大小是否超出限制")])]),t._v(" "),e("tr",[e("td",{staticStyle:{"text-align":"left"}},[e("a",{attrs:{href:"https://github.com/Meituan-Dianping/lyrebird/tree/master/lyrebird/examples/checkers/duplicate_requests.py",target:"_blank",rel:"noopener noreferrer"}},[t._v("duplicate_requests.py"),e("OutboundLink")],1)]),t._v(" "),e("td",{staticStyle:{"text-align":"left"}},[t._v("检查器")]),t._v(" "),e("td",{staticStyle:{"text-align":"left"}},[t._v("检查在某段时间内是否有重复的网络请求")])]),t._v(" "),e("tr",[e("td",{staticStyle:{"text-align":"left"}},[e("a",{attrs:{href:"https://github.com/Meituan-Dianping/lyrebird/tree/master/lyrebird/examples/checkers/add_request_param.py",target:"_blank",rel:"noopener noreferrer"}},[t._v("add_request_param.py"),e("OutboundLink")],1)]),t._v(" "),e("td",{staticStyle:{"text-align":"left"}},[t._v("修改器")]),t._v(" "),e("td",{staticStyle:{"text-align":"left"}},[t._v("在Request中添加Param")])]),t._v(" "),e("tr",[e("td",{staticStyle:{"text-align":"left"}},[e("a",{attrs:{href:"https://github.com/Meituan-Dianping/lyrebird/tree/master/lyrebird/examples/checkers/add_response_header.py",target:"_blank",rel:"noopener noreferrer"}},[t._v("add_response_header.py"),e("OutboundLink")],1)]),t._v(" "),e("td",{staticStyle:{"text-align":"left"}},[t._v("修改器")]),t._v(" "),e("td",{staticStyle:{"text-align":"left"}},[t._v("在Response中添加Header Key")])])])]),t._v(" "),e("p",[t._v("此外,Lyrebird支持使用在启动时指定需要加载的脚本。")]),t._v(" "),e("div",{staticClass:"language-sh extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sh"}},[e("code",[t._v("lyrebird "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--script")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("filename"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--script")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("filename"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n")])])]),e("h2",{attrs:{id:"捕获报警"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#捕获报警"}},[t._v("#")]),t._v(" 捕获报警")]),t._v(" "),e("p",[t._v("在获取到数据后,便可对该数据进行检验和处理。当发现异常数据时,Lyrebird会在通知中心展示报警信息。")]),t._v(" "),e("p",[e("img",{attrs:{src:r(234),alt:""}})]),t._v(" "),e("p",[t._v("报警中可携带检查出的异常信息,也可以携带"),e("RouterLink",{attrs:{to:"/advance/eventbus.html"}},[t._v("消息总线")]),t._v("中其它频道的消息作为辅助信息,以丰富报警信息。")],1)])}),[],!1,null,null,null);e.default=s.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[11],{233:function(t,e,r){t.exports=r.p+"assets/img/checker-a.dc4421b3.png"},234:function(t,e,r){t.exports=r.p+"assets/img/checker-b.f541161a.gif"},331:function(t,e,r){"use strict";r.r(e);var a=r(13),s=Object(a.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"使用指南"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#使用指南"}},[t._v("#")]),t._v(" 使用指南")]),t._v(" "),e("p",[t._v("扩展(Extension)-自定义脚本是一种支持用户⾃定义的Python脚本,在Lyrebird运行的过程中,于后台并行地工作。")]),t._v(" "),e("p",[t._v("无需搭建工程和前端开发,自定义脚本可灵活、轻巧、便捷、准确的对"),e("RouterLink",{attrs:{to:"/advance/eventbus.html"}},[t._v("消息总线")]),t._v("频道中的数据进行分析和校验。")],1),t._v(" "),e("p",[t._v("自定义脚本默认支持三种类型:")]),t._v(" "),e("ol",[e("li",[e("RouterLink",{attrs:{to:"/checker/request_editor.html"}},[t._v("请求修改器(Modifier)")]),t._v(": 如为请求添加Header Key、"),e("RouterLink",{attrs:{to:"/checker/request_editor.html#修改请求"}},[t._v("修改请求的Param")]),t._v("等")],1),t._v(" "),e("li",[e("RouterLink",{attrs:{to:"/checker/dev_debug.html"}},[t._v("请求检查器(Checker)")]),t._v(": 如可通过检查器监听网络请求频道,检测网络请求中的"),e("RouterLink",{attrs:{to:"/checker/examples.html#大图检测"}},[t._v("图片大小")]),t._v("是否满足预期,或检测是否"),e("RouterLink",{attrs:{to:"/checker/examples.html#重复请求检测"}},[t._v("重复请求")]),t._v("了同一个接口等")],1),t._v(" "),e("li",[t._v("其他(Other): 未分类或者综合应用")])]),t._v(" "),e("p",[t._v("可在脚本中使用全局变量"),e("strong",[t._v("ExtensionCategory")]),t._v("(String类型)人为指定Extension类型")]),t._v(" "),e("p",[t._v("可以在Lyrebird运行过程中随时开启或关闭自定义脚本,即插即用,方便灵活。")]),t._v(" "),e("p",[e("img",{attrs:{src:r(233),alt:""}})]),t._v(" "),e("blockquote",[e("p",[t._v("展开Extension标签可查看当前运行的自定义脚本,按组别聚合。\nActivated Tab展示已激活的Extension, Deactivated Tab展示未激活的Extension")])]),t._v(" "),e("p",[t._v("如果需要高级的检查和展示,可使用"),e("RouterLink",{attrs:{to:"/plugins/"}},[t._v("自定义插件")]),t._v("开发实现更复杂的场景和功能。")],1),t._v(" "),e("h2",{attrs:{id:"载入自定义脚本"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#载入自定义脚本"}},[t._v("#")]),t._v(" 载入自定义脚本")]),t._v(" "),e("p",[t._v("运行时携带的自定义脚本存放在默认路径~/.lyrebird/checkers下。对自定义脚本的新增、修改、删除,可在默认目录下操作文件。")]),t._v(" "),e("p",[t._v("当默认目录中没有可用的自定义脚本时,会自动载入示例脚本。目前提供的示例脚本如下:")]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",{staticStyle:{"text-align":"left"}},[t._v("Filename")]),t._v(" "),e("th",{staticStyle:{"text-align":"left"}},[t._v("Type")]),t._v(" "),e("th",{staticStyle:{"text-align":"left"}},[t._v("Description")])])]),t._v(" "),e("tbody",[e("tr",[e("td",{staticStyle:{"text-align":"left"}},[e("a",{attrs:{href:"https://github.com/Meituan-Dianping/lyrebird/tree/master/lyrebird/examples/checkers/img_size.py",target:"_blank",rel:"noopener noreferrer"}},[t._v("img_size.py"),e("OutboundLink")],1)]),t._v(" "),e("td",{staticStyle:{"text-align":"left"}},[t._v("检查器")]),t._v(" "),e("td",{staticStyle:{"text-align":"left"}},[t._v("检查网络请求中图片大小是否超出限制")])]),t._v(" "),e("tr",[e("td",{staticStyle:{"text-align":"left"}},[e("a",{attrs:{href:"https://github.com/Meituan-Dianping/lyrebird/tree/master/lyrebird/examples/checkers/duplicate_requests.py",target:"_blank",rel:"noopener noreferrer"}},[t._v("duplicate_requests.py"),e("OutboundLink")],1)]),t._v(" "),e("td",{staticStyle:{"text-align":"left"}},[t._v("检查器")]),t._v(" "),e("td",{staticStyle:{"text-align":"left"}},[t._v("检查在某段时间内是否有重复的网络请求")])]),t._v(" "),e("tr",[e("td",{staticStyle:{"text-align":"left"}},[e("a",{attrs:{href:"https://github.com/Meituan-Dianping/lyrebird/tree/master/lyrebird/examples/checkers/add_request_param.py",target:"_blank",rel:"noopener noreferrer"}},[t._v("add_request_param.py"),e("OutboundLink")],1)]),t._v(" "),e("td",{staticStyle:{"text-align":"left"}},[t._v("修改器")]),t._v(" "),e("td",{staticStyle:{"text-align":"left"}},[t._v("在Request中添加Param")])]),t._v(" "),e("tr",[e("td",{staticStyle:{"text-align":"left"}},[e("a",{attrs:{href:"https://github.com/Meituan-Dianping/lyrebird/tree/master/lyrebird/examples/checkers/add_response_header.py",target:"_blank",rel:"noopener noreferrer"}},[t._v("add_response_header.py"),e("OutboundLink")],1)]),t._v(" "),e("td",{staticStyle:{"text-align":"left"}},[t._v("修改器")]),t._v(" "),e("td",{staticStyle:{"text-align":"left"}},[t._v("在Response中添加Header Key")])])])]),t._v(" "),e("p",[t._v("此外,Lyrebird支持使用在启动时指定需要加载的脚本。")]),t._v(" "),e("div",{staticClass:"language-sh extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sh"}},[e("code",[t._v("lyrebird "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--script")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("filename"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--script")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("filename"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n")])])]),e("h2",{attrs:{id:"捕获报警"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#捕获报警"}},[t._v("#")]),t._v(" 捕获报警")]),t._v(" "),e("p",[t._v("在获取到数据后,便可对该数据进行检验和处理。当发现异常数据时,Lyrebird会在通知中心展示报警信息。")]),t._v(" "),e("p",[e("img",{attrs:{src:r(234),alt:""}})]),t._v(" "),e("p",[t._v("报警中可携带检查出的异常信息,也可以携带"),e("RouterLink",{attrs:{to:"/advance/eventbus.html"}},[t._v("消息总线")]),t._v("中其它频道的消息作为辅助信息,以丰富报警信息。")],1)])}),[],!1,null,null,null);e.default=s.exports}}]); \ No newline at end of file diff --git a/assets/js/12.e577c839.js b/assets/js/12.30611dcd.js similarity index 99% rename from assets/js/12.e577c839.js rename to assets/js/12.30611dcd.js index 50773e3c0..22a40f812 100644 --- a/assets/js/12.e577c839.js +++ b/assets/js/12.30611dcd.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[12],{271:function(t,s,a){t.exports=a.p+"assets/img/checker-c.fe3ce13f.png"},331:function(t,s,a){"use strict";a.r(s);var n=a(13),r=Object(n.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"第一个检查器"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#第一个检查器"}},[t._v("#")]),t._v(" 第一个检查器")]),t._v(" "),s("p",[t._v("Lyrebird支持灵活的检查器编写、调试和运行。")]),t._v(" "),s("h2",{attrs:{id:"环境准备"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#环境准备"}},[t._v("#")]),t._v(" 环境准备")]),t._v(" "),s("p",[t._v("安装Lyrebird")]),t._v(" "),s("div",{staticClass:"language-sh extra-class"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[t._v("pip3 "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" lyrebird\n")])])]),s("p",[t._v("在检查器的默认路径~/.lyrebird/checkers/下,新建一个检查器。")]),t._v(" "),s("h2",{attrs:{id:"编写检查器"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#编写检查器"}},[t._v("#")]),t._v(" 编写检查器")]),t._v(" "),s("p",[t._v("第一个检查器的目的是实时检查Lyrebird的flow频道中图片数据的大小。")]),t._v(" "),s("h3",{attrs:{id:"监听频道"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#监听频道"}},[t._v("#")]),t._v(" 监听频道")]),t._v(" "),s("p",[t._v("在"),s("RouterLink",{attrs:{to:"/advance/eventbus.html"}},[t._v("消息总线")]),t._v("的频道中,flow频道包含了所有的网络请求,监听flow频道以获得设备的网络请求。")],1),t._v(" "),s("div",{staticClass:"language-python extra-class"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" lyrebird "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" event\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# 使用装饰器监听flow频道,当flow频道中出现新数据时,会回调img_size方法")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token decorator annotation punctuation"}},[t._v("@event")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'flow'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("img_size")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("msg"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("pass")]),t._v("\n")])])]),s("h3",{attrs:{id:"数据校验"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#数据校验"}},[t._v("#")]),t._v(" 数据校验")]),t._v(" "),s("p",[t._v("flow频道中出现新的数据时会回调检查器中的方法,并传入频道中的消息,此时可对该消息进行校验。")]),t._v(" "),s("div",{staticClass:"language-python extra-class"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" lyrebird "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" event\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# 检测阈值")]),t._v("\nTHRESHOLD_IMG_SIZE "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1024")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token decorator annotation punctuation"}},[t._v("@event")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'flow'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("img_size")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("msg"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" msg"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'flow'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'size'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" THRESHOLD_IMG_SIZE"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# 检测到数据中的size不满足预期值")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("pass")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v("\n")])])]),s("h3",{attrs:{id:"报警"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#报警"}},[t._v("#")]),t._v(" 报警")]),t._v(" "),s("p",[t._v("当检测到不满足预期的数据时,可调用Lyrebird"),s("RouterLink",{attrs:{to:"/advance/eventbus.html"}},[t._v("消息总线")]),t._v("的issue接口触发报警。")],1),t._v(" "),s("div",{staticClass:"language-python extra-class"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" lyrebird "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" event\n\nTHRESHOLD_IMG_SIZE "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1024")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token decorator annotation punctuation"}},[t._v("@event")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'flow'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("img_size")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("msg"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" msg"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'flow'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'size'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" THRESHOLD_IMG_SIZE"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n event"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("issue"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Image size is beyond expectations!'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v("\n")])])]),s("h2",{attrs:{id:"调试"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#调试"}},[t._v("#")]),t._v(" 调试")]),t._v(" "),s("p",[t._v("Lyrebird支持检查器的调试,调试时配置启动参数,使用--script命令指定启动时加载的脚本。")]),t._v(" "),s("div",{staticClass:"language-sh extra-class"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[t._v("lyrebird "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--script")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("filename"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n")])])]),s("p",[t._v("以VSCode为例,检查器debug配置如下。")]),t._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"version"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"0.2.0"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"configurations"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"name"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"checker"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"type"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"pythonExperimental"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"request"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"launch"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"program"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"${workspaceFolder}/venv/bin/lyrebird"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"args"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"--script"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"${file}"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"console"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"integratedTerminal"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("h3",{attrs:{id:"开始调试"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#开始调试"}},[t._v("#")]),t._v(" 开始调试")]),t._v(" "),s("p",[t._v("在所调试脚本为打开窗口时,在调试窗口选择checker,点击开始按钮即可开始调试。")]),t._v(" "),s("p",[s("img",{attrs:{src:a(271),alt:""}})]),t._v(" "),s("p",[t._v("至此,第一个检查器就编写完成了,启动Lyrebird,体验检查器功能吧!Have fun!")])])}),[],!1,null,null,null);s.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[12],{271:function(t,s,a){t.exports=a.p+"assets/img/checker-c.fe3ce13f.png"},330:function(t,s,a){"use strict";a.r(s);var n=a(13),r=Object(n.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"第一个检查器"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#第一个检查器"}},[t._v("#")]),t._v(" 第一个检查器")]),t._v(" "),s("p",[t._v("Lyrebird支持灵活的检查器编写、调试和运行。")]),t._v(" "),s("h2",{attrs:{id:"环境准备"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#环境准备"}},[t._v("#")]),t._v(" 环境准备")]),t._v(" "),s("p",[t._v("安装Lyrebird")]),t._v(" "),s("div",{staticClass:"language-sh extra-class"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[t._v("pip3 "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" lyrebird\n")])])]),s("p",[t._v("在检查器的默认路径~/.lyrebird/checkers/下,新建一个检查器。")]),t._v(" "),s("h2",{attrs:{id:"编写检查器"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#编写检查器"}},[t._v("#")]),t._v(" 编写检查器")]),t._v(" "),s("p",[t._v("第一个检查器的目的是实时检查Lyrebird的flow频道中图片数据的大小。")]),t._v(" "),s("h3",{attrs:{id:"监听频道"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#监听频道"}},[t._v("#")]),t._v(" 监听频道")]),t._v(" "),s("p",[t._v("在"),s("RouterLink",{attrs:{to:"/advance/eventbus.html"}},[t._v("消息总线")]),t._v("的频道中,flow频道包含了所有的网络请求,监听flow频道以获得设备的网络请求。")],1),t._v(" "),s("div",{staticClass:"language-python extra-class"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" lyrebird "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" event\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# 使用装饰器监听flow频道,当flow频道中出现新数据时,会回调img_size方法")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token decorator annotation punctuation"}},[t._v("@event")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'flow'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("img_size")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("msg"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("pass")]),t._v("\n")])])]),s("h3",{attrs:{id:"数据校验"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#数据校验"}},[t._v("#")]),t._v(" 数据校验")]),t._v(" "),s("p",[t._v("flow频道中出现新的数据时会回调检查器中的方法,并传入频道中的消息,此时可对该消息进行校验。")]),t._v(" "),s("div",{staticClass:"language-python extra-class"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" lyrebird "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" event\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# 检测阈值")]),t._v("\nTHRESHOLD_IMG_SIZE "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1024")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token decorator annotation punctuation"}},[t._v("@event")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'flow'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("img_size")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("msg"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" msg"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'flow'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'size'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" THRESHOLD_IMG_SIZE"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# 检测到数据中的size不满足预期值")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("pass")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v("\n")])])]),s("h3",{attrs:{id:"报警"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#报警"}},[t._v("#")]),t._v(" 报警")]),t._v(" "),s("p",[t._v("当检测到不满足预期的数据时,可调用Lyrebird"),s("RouterLink",{attrs:{to:"/advance/eventbus.html"}},[t._v("消息总线")]),t._v("的issue接口触发报警。")],1),t._v(" "),s("div",{staticClass:"language-python extra-class"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" lyrebird "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" event\n\nTHRESHOLD_IMG_SIZE "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1024")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token decorator annotation punctuation"}},[t._v("@event")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'flow'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("img_size")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("msg"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" msg"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'flow'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'size'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" THRESHOLD_IMG_SIZE"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n event"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("issue"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Image size is beyond expectations!'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v("\n")])])]),s("h2",{attrs:{id:"调试"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#调试"}},[t._v("#")]),t._v(" 调试")]),t._v(" "),s("p",[t._v("Lyrebird支持检查器的调试,调试时配置启动参数,使用--script命令指定启动时加载的脚本。")]),t._v(" "),s("div",{staticClass:"language-sh extra-class"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[t._v("lyrebird "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("--script")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("filename"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n")])])]),s("p",[t._v("以VSCode为例,检查器debug配置如下。")]),t._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"version"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"0.2.0"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"configurations"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"name"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"checker"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"type"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"pythonExperimental"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"request"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"launch"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"program"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"${workspaceFolder}/venv/bin/lyrebird"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"args"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"--script"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"${file}"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"console"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"integratedTerminal"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("h3",{attrs:{id:"开始调试"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#开始调试"}},[t._v("#")]),t._v(" 开始调试")]),t._v(" "),s("p",[t._v("在所调试脚本为打开窗口时,在调试窗口选择checker,点击开始按钮即可开始调试。")]),t._v(" "),s("p",[s("img",{attrs:{src:a(271),alt:""}})]),t._v(" "),s("p",[t._v("至此,第一个检查器就编写完成了,启动Lyrebird,体验检查器功能吧!Have fun!")])])}),[],!1,null,null,null);s.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/14.d9a35a66.js b/assets/js/14.5f3e4540.js similarity index 93% rename from assets/js/14.d9a35a66.js rename to assets/js/14.5f3e4540.js index b313a4e36..bfc36d0a1 100644 --- a/assets/js/14.d9a35a66.js +++ b/assets/js/14.5f3e4540.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[14],{235:function(t,r,s){t.exports=s.p+"assets/img/plugins.0316a3a5.gif"},344:function(t,r,s){"use strict";s.r(r);var e=s(13),a=Object(e.a)({},(function(){var t=this,r=t._self._c;return r("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[r("h1",{attrs:{id:"自定义插件"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#自定义插件"}},[t._v("#")]),t._v(" 自定义插件")]),t._v(" "),r("p",[t._v("相比"),r("RouterLink",{attrs:{to:"/checker/"}},[t._v("自定义脚本")]),t._v(",自定义插件(Plugin)是一种自定义程度更高的扩展方式。不仅可以监听Lyrebird"),r("RouterLink",{attrs:{to:"/advance/eventbus.html"}},[t._v("事件")]),t._v(",还可以自定义UI和接口。通过插件可以完成复杂的功能扩展,对Lyrebird能力进行扩展或者实现定制化的功能。")],1),t._v(" "),r("p",[r("img",{attrs:{src:s(235),alt:""}})])])}),[],!1,null,null,null);r.default=a.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[14],{235:function(t,r,s){t.exports=s.p+"assets/img/plugins.0316a3a5.gif"},341:function(t,r,s){"use strict";s.r(r);var e=s(13),a=Object(e.a)({},(function(){var t=this,r=t._self._c;return r("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[r("h1",{attrs:{id:"自定义插件"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#自定义插件"}},[t._v("#")]),t._v(" 自定义插件")]),t._v(" "),r("p",[t._v("相比"),r("RouterLink",{attrs:{to:"/checker/"}},[t._v("自定义脚本")]),t._v(",自定义插件(Plugin)是一种自定义程度更高的扩展方式。不仅可以监听Lyrebird"),r("RouterLink",{attrs:{to:"/advance/eventbus.html"}},[t._v("事件")]),t._v(",还可以自定义UI和接口。通过插件可以完成复杂的功能扩展,对Lyrebird能力进行扩展或者实现定制化的功能。")],1),t._v(" "),r("p",[r("img",{attrs:{src:s(235),alt:""}})])])}),[],!1,null,null,null);r.default=a.exports}}]); \ No newline at end of file diff --git a/assets/js/19.7535f979.js b/assets/js/19.e4c5c819.js similarity index 85% rename from assets/js/19.7535f979.js rename to assets/js/19.e4c5c819.js index 64e33d559..b28150a31 100644 --- a/assets/js/19.7535f979.js +++ b/assets/js/19.e4c5c819.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{327:function(t,s,n){"use strict";n.r(s);var r=n(13),a=Object(r.a)({},(function(){var t=this._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[t("h1",{attrs:{id:"持续集成"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#持续集成"}},[this._v("#")]),this._v(" 持续集成")])])}),[],!1,null,null,null);s.default=a.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{328:function(t,s,n){"use strict";n.r(s);var r=n(13),a=Object(r.a)({},(function(){var t=this._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[t("h1",{attrs:{id:"持续集成"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#持续集成"}},[this._v("#")]),this._v(" 持续集成")])])}),[],!1,null,null,null);s.default=a.exports}}]); \ No newline at end of file diff --git a/assets/js/20.865a3d0f.js b/assets/js/20.575d42c2.js similarity index 84% rename from assets/js/20.865a3d0f.js rename to assets/js/20.575d42c2.js index 7dd204818..7f3b9bc93 100644 --- a/assets/js/20.865a3d0f.js +++ b/assets/js/20.575d42c2.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[20],{328:function(t,s,e){"use strict";e.r(s);var n=e(13),r=Object(n.a)({},(function(){var t=this._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[t("h1",{attrs:{id:"接入elk"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#接入elk"}},[this._v("#")]),this._v(" 接入ELK")])])}),[],!1,null,null,null);s.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[20],{327:function(t,s,e){"use strict";e.r(s);var n=e(13),r=Object(n.a)({},(function(){var t=this._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[t("h1",{attrs:{id:"接入elk"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#接入elk"}},[this._v("#")]),this._v(" 接入ELK")])])}),[],!1,null,null,null);s.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/21.0155ee9e.js b/assets/js/21.351f2458.js similarity index 85% rename from assets/js/21.0155ee9e.js rename to assets/js/21.351f2458.js index 9546c96dc..112626710 100644 --- a/assets/js/21.0155ee9e.js +++ b/assets/js/21.351f2458.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[21],{330:function(t,s,n){"use strict";n.r(s);var r=n(13),a=Object(r.a)({},(function(){var t=this._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[t("h1",{attrs:{id:"消息总线"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#消息总线"}},[this._v("#")]),this._v(" 消息总线")])])}),[],!1,null,null,null);s.default=a.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[21],{329:function(t,s,n){"use strict";n.r(s);var r=n(13),a=Object(r.a)({},(function(){var t=this._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[t("h1",{attrs:{id:"消息总线"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#消息总线"}},[this._v("#")]),this._v(" 消息总线")])])}),[],!1,null,null,null);s.default=a.exports}}]); \ No newline at end of file diff --git a/assets/js/26.423926a7.js b/assets/js/26.a8114a94.js similarity index 99% rename from assets/js/26.423926a7.js rename to assets/js/26.a8114a94.js index 4589801ed..76b1436eb 100644 --- a/assets/js/26.423926a7.js +++ b/assets/js/26.a8114a94.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[26],{339:function(a,t,s){"use strict";s.r(t);var r=s(13),e=Object(r.a)({},(function(){var a=this,t=a._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[t("h1",{attrs:{id:"命令行"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#命令行"}},[a._v("#")]),a._v(" 命令行")]),a._v(" "),t("blockquote",[t("p",[a._v("在通过 pip 安装 Lyrebird 之后,可以直接使用 lyrebird 命令行启动。")])]),a._v(" "),t("h2",{attrs:{id:"h-help"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#h-help"}},[a._v("#")]),a._v(" -h --help")]),a._v(" "),t("p",[a._v("查看帮助")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" lyrebird "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-h")]),a._v("\nusage: lyrebird "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("-h"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("-V"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("-v"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("--mock MOCK"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("--proxy PROXY"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("--data DATA"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("-b"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("-c CONFIG"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("--log LOG"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("--script SCRIPT"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("--plugin PLUGIN"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("src,plugin"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("..")]),a._v(".\n\npositional arguments:\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("src,plugin"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n\noptional arguments:\n -h, "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--help")]),a._v(" show this "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("help")]),a._v(" message and "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("exit")]),a._v("\n -V, "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--version")]),a._v(" show lyrebird version\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-v")]),a._v(" Show verbose log\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--mock")]),a._v(" MOCK Set mock server port, default port is "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("4272")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--proxy")]),a._v(" PROXY Set proxy server port, default port is "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("9090")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--data")]),a._v(" DATA Set data dir, default is "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"./data/"')]),a._v("\n -b, "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--no_browser")]),a._v(" Start without "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("open")]),a._v(" a browser\n --no-mitm Start without mitmproxy on "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("4272")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-c")]),a._v(" CONFIG, "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--config")]),a._v(" CONFIG\n Start with a config file. Default is\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"~/.lyrebird/conf.json"')]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--log")]),a._v(" LOG Set output log "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("file")]),a._v(" path\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--script")]),a._v(" SCRIPT Set a checker script path\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--plugin")]),a._v(" PLUGIN Set a plugin project path\n")])])]),t("h2",{attrs:{id:"v-version"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#v-version"}},[a._v("#")]),a._v(" -V --version")]),a._v(" "),t("p",[a._v("查看版本")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" lyrebird "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-V")]),a._v("\nLyrebird "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1.6")]),a._v(".0\n")])])]),t("h2",{attrs:{id:"v-vv"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#v-vv"}},[a._v("#")]),a._v(" -v -vv")]),a._v(" "),t("p",[a._v("显示详细日志")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# lyrebird 将以静默模式启动")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" lyrebird\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# lyrebird 将以简单日志模式启动")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" lyrebird "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-v")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# lyrebird 将以详细日志模式启动")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" lyrebird "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-vv")]),a._v("\n")])])]),t("h2",{attrs:{id:"mock"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#mock"}},[a._v("#")]),a._v(" --mock")]),a._v(" "),t("p",[a._v("指定 mock 服务端口")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# 指定mock服务端口,lyrebird将在9000端口开启mock服务端口。(默认端口是9090)")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" lyrebird "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--mock")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("9000")]),a._v("\n")])])]),t("h2",{attrs:{id:"proxy"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#proxy"}},[a._v("#")]),a._v(" --proxy")]),a._v(" "),t("p",[a._v("指定代理服务端端口")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# 指定代理服务的端口,lyrebird将在8080端口开启代理服务端口。(默认端口是4272)")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" lyrebird "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--proxy")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("8080")]),a._v("\n")])])]),t("h2",{attrs:{id:"data"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#data"}},[a._v("#")]),a._v(" --data")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# 指定mock数据根目录")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" lyrebird "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--data")]),a._v(" ~/work/mockdata\n")])])]),t("h2",{attrs:{id:"b-no-browser"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#b-no-browser"}},[a._v("#")]),a._v(" -b --no_browser")]),a._v(" "),t("p",[a._v("启动时不打开浏览器")]),a._v(" "),t("h2",{attrs:{id:"no-mitm"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#no-mitm"}},[a._v("#")]),a._v(" --no-mitm")]),a._v(" "),t("p",[a._v("启动时不开启 mitmproxy [port:4272]")]),a._v(" "),t("h2",{attrs:{id:"c-config"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#c-config"}},[a._v("#")]),a._v(" -c --config")]),a._v(" "),t("p",[a._v("使用指定配置文件启动 lyrebird")]),a._v(" "),t("h2",{attrs:{id:"log"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#log"}},[a._v("#")]),a._v(" --log")]),a._v(" "),t("p",[a._v("指定输出日志文件的位置")]),a._v(" "),t("h2",{attrs:{id:"script"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#script"}},[a._v("#")]),a._v(" --script")]),a._v(" "),t("p",[a._v("从指定路径加载"),t("RouterLink",{attrs:{to:"/guide/checker.html"}},[a._v("自定义脚本")]),a._v("\n用于调试自定义脚本")],1),a._v(" "),t("h2",{attrs:{id:"plugin"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#plugin"}},[a._v("#")]),a._v(" --plugin")]),a._v(" "),t("p",[a._v("从源码启动自定义插件工程,用于插件开发和调试。")]),a._v(" "),t("h2",{attrs:{id:"gen"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#gen"}},[a._v("#")]),a._v(" gen")]),a._v(" "),t("p",[a._v("从模板生成一个自定义插件项目")]),a._v(" "),t("p",[a._v("安装好 Lyrebird 后,可通过 Lyrebird 命令行工具生成插件")]),a._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[a._v("# 在指定路径创建插件工程\nlyrebird gen /your/workspace/path\n\n# 创建过程中会要求输入插件名(用作包名\\显示名称\\插件项目目录名)\n>Please input your project name:\n\n# 例如输入demo_project\n# 您将会在 /your/workspace/path/demo_project得到一个插件工程\n")])])])])}),[],!1,null,null,null);t.default=e.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[26],{340:function(a,t,s){"use strict";s.r(t);var r=s(13),e=Object(r.a)({},(function(){var a=this,t=a._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[t("h1",{attrs:{id:"命令行"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#命令行"}},[a._v("#")]),a._v(" 命令行")]),a._v(" "),t("blockquote",[t("p",[a._v("在通过 pip 安装 Lyrebird 之后,可以直接使用 lyrebird 命令行启动。")])]),a._v(" "),t("h2",{attrs:{id:"h-help"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#h-help"}},[a._v("#")]),a._v(" -h --help")]),a._v(" "),t("p",[a._v("查看帮助")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" lyrebird "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-h")]),a._v("\nusage: lyrebird "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("-h"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("-V"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("-v"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("--mock MOCK"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("--proxy PROXY"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("--data DATA"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("-b"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("-c CONFIG"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("--log LOG"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("--script SCRIPT"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("--plugin PLUGIN"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("src,plugin"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("..")]),a._v(".\n\npositional arguments:\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("src,plugin"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n\noptional arguments:\n -h, "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--help")]),a._v(" show this "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("help")]),a._v(" message and "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("exit")]),a._v("\n -V, "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--version")]),a._v(" show lyrebird version\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-v")]),a._v(" Show verbose log\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--mock")]),a._v(" MOCK Set mock server port, default port is "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("4272")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--proxy")]),a._v(" PROXY Set proxy server port, default port is "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("9090")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--data")]),a._v(" DATA Set data dir, default is "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"./data/"')]),a._v("\n -b, "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--no_browser")]),a._v(" Start without "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("open")]),a._v(" a browser\n --no-mitm Start without mitmproxy on "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("4272")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-c")]),a._v(" CONFIG, "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--config")]),a._v(" CONFIG\n Start with a config file. Default is\n "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"~/.lyrebird/conf.json"')]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--log")]),a._v(" LOG Set output log "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("file")]),a._v(" path\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--script")]),a._v(" SCRIPT Set a checker script path\n "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--plugin")]),a._v(" PLUGIN Set a plugin project path\n")])])]),t("h2",{attrs:{id:"v-version"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#v-version"}},[a._v("#")]),a._v(" -V --version")]),a._v(" "),t("p",[a._v("查看版本")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" lyrebird "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-V")]),a._v("\nLyrebird "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1.6")]),a._v(".0\n")])])]),t("h2",{attrs:{id:"v-vv"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#v-vv"}},[a._v("#")]),a._v(" -v -vv")]),a._v(" "),t("p",[a._v("显示详细日志")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# lyrebird 将以静默模式启动")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" lyrebird\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# lyrebird 将以简单日志模式启动")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" lyrebird "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-v")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# lyrebird 将以详细日志模式启动")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" lyrebird "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-vv")]),a._v("\n")])])]),t("h2",{attrs:{id:"mock"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#mock"}},[a._v("#")]),a._v(" --mock")]),a._v(" "),t("p",[a._v("指定 mock 服务端口")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# 指定mock服务端口,lyrebird将在9000端口开启mock服务端口。(默认端口是9090)")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" lyrebird "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--mock")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("9000")]),a._v("\n")])])]),t("h2",{attrs:{id:"proxy"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#proxy"}},[a._v("#")]),a._v(" --proxy")]),a._v(" "),t("p",[a._v("指定代理服务端端口")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# 指定代理服务的端口,lyrebird将在8080端口开启代理服务端口。(默认端口是4272)")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" lyrebird "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--proxy")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("8080")]),a._v("\n")])])]),t("h2",{attrs:{id:"data"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#data"}},[a._v("#")]),a._v(" --data")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[a._v("# 指定mock数据根目录")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" lyrebird "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--data")]),a._v(" ~/work/mockdata\n")])])]),t("h2",{attrs:{id:"b-no-browser"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#b-no-browser"}},[a._v("#")]),a._v(" -b --no_browser")]),a._v(" "),t("p",[a._v("启动时不打开浏览器")]),a._v(" "),t("h2",{attrs:{id:"no-mitm"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#no-mitm"}},[a._v("#")]),a._v(" --no-mitm")]),a._v(" "),t("p",[a._v("启动时不开启 mitmproxy [port:4272]")]),a._v(" "),t("h2",{attrs:{id:"c-config"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#c-config"}},[a._v("#")]),a._v(" -c --config")]),a._v(" "),t("p",[a._v("使用指定配置文件启动 lyrebird")]),a._v(" "),t("h2",{attrs:{id:"log"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#log"}},[a._v("#")]),a._v(" --log")]),a._v(" "),t("p",[a._v("指定输出日志文件的位置")]),a._v(" "),t("h2",{attrs:{id:"script"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#script"}},[a._v("#")]),a._v(" --script")]),a._v(" "),t("p",[a._v("从指定路径加载"),t("RouterLink",{attrs:{to:"/guide/checker.html"}},[a._v("自定义脚本")]),a._v("\n用于调试自定义脚本")],1),a._v(" "),t("h2",{attrs:{id:"plugin"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#plugin"}},[a._v("#")]),a._v(" --plugin")]),a._v(" "),t("p",[a._v("从源码启动自定义插件工程,用于插件开发和调试。")]),a._v(" "),t("h2",{attrs:{id:"gen"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#gen"}},[a._v("#")]),a._v(" gen")]),a._v(" "),t("p",[a._v("从模板生成一个自定义插件项目")]),a._v(" "),t("p",[a._v("安装好 Lyrebird 后,可通过 Lyrebird 命令行工具生成插件")]),a._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[a._v("# 在指定路径创建插件工程\nlyrebird gen /your/workspace/path\n\n# 创建过程中会要求输入插件名(用作包名\\显示名称\\插件项目目录名)\n>Please input your project name:\n\n# 例如输入demo_project\n# 您将会在 /your/workspace/path/demo_project得到一个插件工程\n")])])])])}),[],!1,null,null,null);t.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/27.ec5fc7e3.js b/assets/js/27.c0c307ad.js similarity index 98% rename from assets/js/27.ec5fc7e3.js rename to assets/js/27.c0c307ad.js index a3a976dd7..945f63c9c 100644 --- a/assets/js/27.ec5fc7e3.js +++ b/assets/js/27.c0c307ad.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[27],{341:function(t,s,a){"use strict";a.r(s);var r=a(13),n=Object(r.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"配置文件"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#配置文件"}},[t._v("#")]),t._v(" 配置文件")]),t._v(" "),s("p",[t._v("Lyrebird第一次启动后,会在 ~/.lyrebird/conf.json 生成一个配置文件。")]),t._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"version"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"0.10.5"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"proxy.filters"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"proxy.port"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4272")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"mock.port"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("9090")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"mock.data"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"{{current_dir}}/mock_data/personal"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"mock.proxy_headers"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"scheme"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"MKScheme"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"host"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"MKOriginHost"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"port"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"MKOriginPort"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("h2",{attrs:{id:"proxy-filters"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#proxy-filters"}},[t._v("#")]),t._v(" proxy.filters")]),t._v(" "),s("p",[s("strong",[t._v("代理请求白名单")])]),t._v(" "),s("p",[t._v("不配置时所有请求都将从代理服务转发至mock服务端口。")]),t._v(" "),s("p",[t._v("配置后将只转发白名单内的请求到mock服务。其他请求将直接代理到原始地址,不做处理。")]),t._v(" "),s("p",[t._v("示例\n只处理所有包含meituan或google字符串的请求")]),t._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"proxy.filters"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"meituan"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"google"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("h2",{attrs:{id:"proxy-port"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#proxy-port"}},[t._v("#")]),t._v(" proxy.port")]),t._v(" "),s("p",[t._v("代理服务端口。 默认值4272")]),t._v(" "),s("h2",{attrs:{id:"mock-port"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#mock-port"}},[t._v("#")]),t._v(" mock.port")]),t._v(" "),s("p",[t._v("mock服务端口。默认9090")]),t._v(" "),s("h2",{attrs:{id:"mock-data"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#mock-data"}},[t._v("#")]),t._v(" mock.data")]),t._v(" "),s("p",[t._v("mock数据根目录。")])])}),[],!1,null,null,null);s.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[27],{344:function(t,s,a){"use strict";a.r(s);var r=a(13),n=Object(r.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"配置文件"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#配置文件"}},[t._v("#")]),t._v(" 配置文件")]),t._v(" "),s("p",[t._v("Lyrebird第一次启动后,会在 ~/.lyrebird/conf.json 生成一个配置文件。")]),t._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"version"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"0.10.5"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"proxy.filters"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"proxy.port"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4272")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"mock.port"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("9090")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"mock.data"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"{{current_dir}}/mock_data/personal"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"mock.proxy_headers"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"scheme"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"MKScheme"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"host"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"MKOriginHost"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"port"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"MKOriginPort"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("h2",{attrs:{id:"proxy-filters"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#proxy-filters"}},[t._v("#")]),t._v(" proxy.filters")]),t._v(" "),s("p",[s("strong",[t._v("代理请求白名单")])]),t._v(" "),s("p",[t._v("不配置时所有请求都将从代理服务转发至mock服务端口。")]),t._v(" "),s("p",[t._v("配置后将只转发白名单内的请求到mock服务。其他请求将直接代理到原始地址,不做处理。")]),t._v(" "),s("p",[t._v("示例\n只处理所有包含meituan或google字符串的请求")]),t._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"proxy.filters"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"meituan"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"google"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("h2",{attrs:{id:"proxy-port"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#proxy-port"}},[t._v("#")]),t._v(" proxy.port")]),t._v(" "),s("p",[t._v("代理服务端口。 默认值4272")]),t._v(" "),s("h2",{attrs:{id:"mock-port"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#mock-port"}},[t._v("#")]),t._v(" mock.port")]),t._v(" "),s("p",[t._v("mock服务端口。默认9090")]),t._v(" "),s("h2",{attrs:{id:"mock-data"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#mock-data"}},[t._v("#")]),t._v(" mock.data")]),t._v(" "),s("p",[t._v("mock数据根目录。")])])}),[],!1,null,null,null);s.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/28.880f57ed.js b/assets/js/28.794246f7.js similarity index 98% rename from assets/js/28.880f57ed.js rename to assets/js/28.794246f7.js index ed7cb1485..65447aaf0 100644 --- a/assets/js/28.880f57ed.js +++ b/assets/js/28.794246f7.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[28],{340:function(t,s,a){"use strict";a.r(s);var e=a(13),r=Object(e.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"faq"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#faq"}},[t._v("#")]),t._v(" FAQ")]),t._v(" "),s("h3",{attrs:{id:"ios10-3系统安装mitmproxy证书后仍无法抓取https接口数据"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#ios10-3系统安装mitmproxy证书后仍无法抓取https接口数据"}},[t._v("#")]),t._v(" IOS10.3系统安装mitmproxy证书后仍无法抓取https接口数据")]),t._v(" "),s("blockquote",[s("p",[t._v("IOS10.3 升级了ssl证书验证机制。 如果只是安装了证书而没有在关于里添加信任,客户端会主动关闭连接。\n(10.2安装了证书,在升级到10.3时,默认是信任的)")])]),t._v(" "),s("p",[s("strong",[t._v("解决办法:")])]),t._v(" "),s("p",[t._v("在安装了相关证书后,需要到设置 → 通过 → 关于本机 → 证书信任设置,选择对应的证书,启用完全信任。")]),t._v(" "),s("h3",{attrs:{id:"执行setup-sh时-提示ssl证书验证失败"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#执行setup-sh时-提示ssl证书验证失败"}},[t._v("#")]),t._v(" 执行setup.sh时,提示SSL证书验证失败")]),t._v(" "),s("blockquote",[s("p",[t._v("在pip安装依赖库的时候提示“There was a problem confirming the ssl certificate: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed”")])]),t._v(" "),s("p",[s("strong",[t._v("解决办法1:")])]),t._v(" "),s("p",[t._v("当前https请求使用了未认证的ssl证书,请检查当前环境是不是在代理环境下,如果是,请关闭代理服务,中心执行setup即可。")]),t._v(" "),s("p",[s("strong",[t._v("解决办法2:")])]),t._v(" "),s("p",[t._v("如果仍要在此环境下使用,需在setup.sh中做如下修改:")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[t._v("pip3 "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-r")]),t._v(" ./requirements.txt --trusted-host pypi.python.org\n")])])]),s("h3",{attrs:{id:"执行setup时报错-没有执行虚拟环境中的pip3"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#执行setup时报错-没有执行虚拟环境中的pip3"}},[t._v("#")]),t._v(" 执行setup时报错,没有执行虚拟环境中的pip3")]),t._v(" "),s("blockquote",[s("p",[t._v("由于本地python3环境中没有pip,创建虚拟环境中不包含pip命令,从而导致虚拟环境变量没有覆盖系统的pip。")])]),t._v(" "),s("p",[s("strong",[t._v("解决办法:")])]),t._v(" "),s("p",[t._v("重新安装python3")]),t._v(" "),s("ul",[s("li",[t._v("如果使用brew安装的可以使用brew uninstall python3卸载")]),t._v(" "),s("li",[t._v("如果使用其他方式安装的可以直接删除python安装的目录。")]),t._v(" "),s("li",[t._v("然后再使用brew install python3安装python3")])]),t._v(" "),s("p",[s("strong",[t._v("注意:")]),t._v(" 不要误删/System目录下的python2")]),t._v(" "),s("h3",{attrs:{id:"使用brew时提示安装权限问题或安装其他依赖失败"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#使用brew时提示安装权限问题或安装其他依赖失败"}},[t._v("#")]),t._v(" 使用brew时提示安装权限问题或安装其他依赖失败")]),t._v(" "),s("blockquote",[s("p",[t._v("由于macos10.12后进行了安全机制更新,旧版本的brew即使在更新后仍无法正常工作。需要卸载后重新安装即可。")])]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[t._v("uninstall\nruby "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-e")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"'),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$(")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("curl")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-fsSL")]),t._v(" https://raw.githubusercontent.com/Homebrew/install/master/uninstall"),s("span",{pre:!0,attrs:{class:"token variable"}},[t._v(")")])]),t._v('"')]),t._v("\nhomebrew doc\n")])])]),s("h3",{attrs:{id:"执行setup报错-pip-install-pyyaml失败"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#执行setup报错-pip-install-pyyaml失败"}},[t._v("#")]),t._v(" 执行setup报错,pip install PyYAML失败")]),t._v(" "),s("blockquote",[s("p",[t._v("错误提示: 使用xcode build 失败。")])]),t._v(" "),s("p",[s("strong",[t._v("解决办法:")])]),t._v(" "),s("p",[t._v("需要切换xcode sdk")]),t._v(" "),s("p",[t._v("在xcode preferences中选择8.0以上的xcode command line tools,然后重新build。")]),t._v(" "),s("h3",{attrs:{id:"提示无法找到lyrebird命令"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#提示无法找到lyrebird命令"}},[t._v("#")]),t._v(" 提示无法找到lyrebird命令")]),t._v(" "),s("blockquote",[s("p",[t._v("Python安装到系统Library目录下时,没有足够的权限。\n可以尝试使用虚拟环境。")])]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[t._v("python3 "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-m")]),t._v(" venv venv\n"),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("source")]),t._v(" venv/bin/activate\npip3 "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" lyrebird \n")])])])])}),[],!1,null,null,null);s.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[28],{339:function(t,s,a){"use strict";a.r(s);var e=a(13),r=Object(e.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"faq"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#faq"}},[t._v("#")]),t._v(" FAQ")]),t._v(" "),s("h3",{attrs:{id:"ios10-3系统安装mitmproxy证书后仍无法抓取https接口数据"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#ios10-3系统安装mitmproxy证书后仍无法抓取https接口数据"}},[t._v("#")]),t._v(" IOS10.3系统安装mitmproxy证书后仍无法抓取https接口数据")]),t._v(" "),s("blockquote",[s("p",[t._v("IOS10.3 升级了ssl证书验证机制。 如果只是安装了证书而没有在关于里添加信任,客户端会主动关闭连接。\n(10.2安装了证书,在升级到10.3时,默认是信任的)")])]),t._v(" "),s("p",[s("strong",[t._v("解决办法:")])]),t._v(" "),s("p",[t._v("在安装了相关证书后,需要到设置 → 通过 → 关于本机 → 证书信任设置,选择对应的证书,启用完全信任。")]),t._v(" "),s("h3",{attrs:{id:"执行setup-sh时-提示ssl证书验证失败"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#执行setup-sh时-提示ssl证书验证失败"}},[t._v("#")]),t._v(" 执行setup.sh时,提示SSL证书验证失败")]),t._v(" "),s("blockquote",[s("p",[t._v("在pip安装依赖库的时候提示“There was a problem confirming the ssl certificate: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed”")])]),t._v(" "),s("p",[s("strong",[t._v("解决办法1:")])]),t._v(" "),s("p",[t._v("当前https请求使用了未认证的ssl证书,请检查当前环境是不是在代理环境下,如果是,请关闭代理服务,中心执行setup即可。")]),t._v(" "),s("p",[s("strong",[t._v("解决办法2:")])]),t._v(" "),s("p",[t._v("如果仍要在此环境下使用,需在setup.sh中做如下修改:")]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[t._v("pip3 "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-r")]),t._v(" ./requirements.txt --trusted-host pypi.python.org\n")])])]),s("h3",{attrs:{id:"执行setup时报错-没有执行虚拟环境中的pip3"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#执行setup时报错-没有执行虚拟环境中的pip3"}},[t._v("#")]),t._v(" 执行setup时报错,没有执行虚拟环境中的pip3")]),t._v(" "),s("blockquote",[s("p",[t._v("由于本地python3环境中没有pip,创建虚拟环境中不包含pip命令,从而导致虚拟环境变量没有覆盖系统的pip。")])]),t._v(" "),s("p",[s("strong",[t._v("解决办法:")])]),t._v(" "),s("p",[t._v("重新安装python3")]),t._v(" "),s("ul",[s("li",[t._v("如果使用brew安装的可以使用brew uninstall python3卸载")]),t._v(" "),s("li",[t._v("如果使用其他方式安装的可以直接删除python安装的目录。")]),t._v(" "),s("li",[t._v("然后再使用brew install python3安装python3")])]),t._v(" "),s("p",[s("strong",[t._v("注意:")]),t._v(" 不要误删/System目录下的python2")]),t._v(" "),s("h3",{attrs:{id:"使用brew时提示安装权限问题或安装其他依赖失败"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#使用brew时提示安装权限问题或安装其他依赖失败"}},[t._v("#")]),t._v(" 使用brew时提示安装权限问题或安装其他依赖失败")]),t._v(" "),s("blockquote",[s("p",[t._v("由于macos10.12后进行了安全机制更新,旧版本的brew即使在更新后仍无法正常工作。需要卸载后重新安装即可。")])]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[t._v("uninstall\nruby "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-e")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"'),s("span",{pre:!0,attrs:{class:"token variable"}},[s("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$(")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("curl")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-fsSL")]),t._v(" https://raw.githubusercontent.com/Homebrew/install/master/uninstall"),s("span",{pre:!0,attrs:{class:"token variable"}},[t._v(")")])]),t._v('"')]),t._v("\nhomebrew doc\n")])])]),s("h3",{attrs:{id:"执行setup报错-pip-install-pyyaml失败"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#执行setup报错-pip-install-pyyaml失败"}},[t._v("#")]),t._v(" 执行setup报错,pip install PyYAML失败")]),t._v(" "),s("blockquote",[s("p",[t._v("错误提示: 使用xcode build 失败。")])]),t._v(" "),s("p",[s("strong",[t._v("解决办法:")])]),t._v(" "),s("p",[t._v("需要切换xcode sdk")]),t._v(" "),s("p",[t._v("在xcode preferences中选择8.0以上的xcode command line tools,然后重新build。")]),t._v(" "),s("h3",{attrs:{id:"提示无法找到lyrebird命令"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#提示无法找到lyrebird命令"}},[t._v("#")]),t._v(" 提示无法找到lyrebird命令")]),t._v(" "),s("blockquote",[s("p",[t._v("Python安装到系统Library目录下时,没有足够的权限。\n可以尝试使用虚拟环境。")])]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[t._v("python3 "),s("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-m")]),t._v(" venv venv\n"),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("source")]),t._v(" venv/bin/activate\npip3 "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" lyrebird \n")])])])])}),[],!1,null,null,null);s.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/30.100378dc.js b/assets/js/30.7ea61316.js similarity index 84% rename from assets/js/30.100378dc.js rename to assets/js/30.7ea61316.js index ce9fbf06a..52c6f52ab 100644 --- a/assets/js/30.100378dc.js +++ b/assets/js/30.7ea61316.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[30],{346:function(t,s,i){"use strict";i.r(s);var n=i(13),r=Object(n.a)({},(function(){var t=this._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[t("h1",{attrs:{id:"ios插件"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#ios插件"}},[this._v("#")]),this._v(" iOS插件")])])}),[],!1,null,null,null);s.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[30],{347:function(t,s,i){"use strict";i.r(s);var n=i(13),r=Object(n.a)({},(function(){var t=this._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[t("h1",{attrs:{id:"ios插件"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#ios插件"}},[this._v("#")]),this._v(" iOS插件")])])}),[],!1,null,null,null);s.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/4.2a0b7d2f.js b/assets/js/4.3232c911.js similarity index 99% rename from assets/js/4.2a0b7d2f.js rename to assets/js/4.3232c911.js index 45d7ba75a..52a36f042 100644 --- a/assets/js/4.2a0b7d2f.js +++ b/assets/js/4.3232c911.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[4],{304:function(t,s,a){t.exports=a.p+"assets/img/bugit_bug.3ad42558.png"},305:function(t,s,a){t.exports=a.p+"assets/img/bugit_api.cfc7400e.gif"},306:function(t,s,a){t.exports=a.p+"assets/img/bugit_alert.b459836f.gif"},307:function(t,s){t.exports="data:image/png;base64,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"},308:function(t,s,a){t.exports=a.p+"assets/img/bugit_cache.73931071.gif"},309:function(t,s,a){t.exports=a.p+"assets/img/bugit_devices.9fd96b94.gif"},310:function(t,s,a){t.exports=a.p+"assets/img/bugit_callback.dfdba2a3.png"},311:function(t,s,a){t.exports=a.p+"assets/img/bugit_name.f0d9157d.png"},312:function(t,s){t.exports="data:image/png;base64,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"},313:function(t,s){t.exports="data:image/png;base64,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"},314:function(t,s,a){t.exports=a.p+"assets/img/bugit_text.d316e8e4.png"},315:function(t,s,a){t.exports=a.p+"assets/img/bugit_text_extra.1df1477a.gif"},316:function(t,s,a){t.exports=a.p+"assets/img/bugit_form.99a55be7.png"},347:function(t,s,a){"use strict";a.r(s);var n=a(13),e=Object(n.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"bugit插件"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#bugit插件"}},[t._v("#")]),t._v(" BugIt插件")]),t._v(" "),s("p",[t._v("BugIt 是一个Issue提交的插件,目前应用于提交Bug场景下。")]),t._v(" "),s("p",[t._v("配合其他插件,BugIt提供了一种准确、快捷、有效的Issue生成服务。除填写Issue配置字段外,BugIt还提供Lyrebird中"),s("RouterLink",{attrs:{to:"/checker/"}},[t._v("自定义脚本")]),t._v("与其他"),s("RouterLink",{attrs:{to:"/plugins/"}},[t._v("自定义插件")]),t._v("("),s("RouterLink",{attrs:{to:"/plugins/android.html"}},[t._v("Android")]),t._v("、"),s("RouterLink",{attrs:{to:"/plugins/ios.html"}},[t._v("iOS")]),t._v(")数据。")],1),t._v(" "),s("p",[t._v("通过脚本配置,可支持任意Bug管理系统。")]),t._v(" "),s("h2",{attrs:{id:"快速开始"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#快速开始"}},[t._v("#")]),t._v(" 快速开始")]),t._v(" "),s("h3",{attrs:{id:"环境要求"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#环境要求"}},[t._v("#")]),t._v(" 环境要求")]),t._v(" "),s("ul",[s("li",[s("p",[t._v("macOS OR Linux")])]),t._v(" "),s("li",[s("p",[t._v("Python3.6及以上")])]),t._v(" "),s("li",[s("p",[t._v("Lyrebird 1.6及以上")])])]),t._v(" "),s("h3",{attrs:{id:"安装"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#安装"}},[t._v("#")]),t._v(" 安装")]),t._v(" "),s("div",{staticClass:"language-sh extra-class"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[t._v("pip3 "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" lyrebird-bugit\n")])])]),s("h3",{attrs:{id:"载入脚本文件"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#载入脚本文件"}},[t._v("#")]),t._v(" 载入脚本文件")]),t._v(" "),s("p",[t._v("BugIt workplace 配置由"),s("RouterLink",{attrs:{to:"/guide/config.html"}},[t._v("Lyrebird配置文件")]),t._v("统一管理。")],1),t._v(" "),s("p",[t._v('通过修改 ~/.lyrebird/conf.json 中 "bugit.workspace" 的值,可以修改 BugIt 读取脚本文件的路径。')]),t._v(" "),s("p",[t._v("对脚本的新增、修改、删除,可以在该目录下操作文件。")]),t._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),s("p",[t._v("使用BugIt时,必须有一个及以上的脚本文件")])]),t._v(" "),s("p",[t._v("配置脚本请参考"),s("a",{attrs:{href:"#%E7%A4%BA%E4%BE%8B%E8%84%9A%E6%9C%AC"}},[t._v("示例脚本")]),t._v("。")]),t._v(" "),s("h2",{attrs:{id:"功能介绍"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#功能介绍"}},[t._v("#")]),t._v(" 功能介绍")]),t._v(" "),s("h3",{attrs:{id:"bug提交"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#bug提交"}},[t._v("#")]),t._v(" Bug提交")]),t._v(" "),s("p",[t._v("读取脚本文件后,BugIt会得到一个Bug信息填充的界面,称之为Bug表单。")]),t._v(" "),s("p",[t._v("用户可以自定义Bug字段的 名称、先后顺序、填写样式、默认值。")]),t._v(" "),s("p",[s("img",{attrs:{src:a(304),alt:""}})]),t._v(" "),s("p",[t._v("BugIt可以通过配置服务向任意Bug管理系统提交Issue")]),t._v(" "),s("h3",{attrs:{id:"api数据获取"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#api数据获取"}},[t._v("#")]),t._v(" API数据获取")]),t._v(" "),s("p",[t._v("BugIt支持自动填充Lyrebird运行过程中抓取到的数据信息。")]),t._v(" "),s("p",[s("img",{attrs:{src:a(305),alt:""}})]),t._v(" "),s("h3",{attrs:{id:"报警获取"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#报警获取"}},[t._v("#")]),t._v(" 报警获取")]),t._v(" "),s("p",[t._v("在"),s("RouterLink",{attrs:{to:"/checker/"}},[t._v("自定义脚本")]),t._v("捕获报警后,可以通过通知中心随时跳转至BugIt。")],1),t._v(" "),s("p",[t._v("在右侧数据面板中,可以对历史"),s("RouterLink",{attrs:{to:"/advance/eventbus.html"}},[t._v("消息总线")]),t._v("中的信息进行回溯,补充至Bug中。")],1),t._v(" "),s("p",[s("img",{attrs:{src:a(306),alt:""}})]),t._v(" "),s("h3",{attrs:{id:"保存草稿功能"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#保存草稿功能"}},[t._v("#")]),t._v(" 保存草稿功能")]),t._v(" "),s("p",[t._v("按下[Commond]+[s]键,会将Bug相关字段信息进行存储为默认草稿Default。")]),t._v(" "),s("p",[t._v("自定义草稿步骤如下:")]),t._v(" "),s("ul",[s("li",[t._v("点击Draft按钮 "),s("img",{attrs:{src:a(307),width:"70"}})]),t._v(" "),s("li",[t._v("在弹出框中编辑草稿名称(默认为Default),草稿名称不能重复。")]),t._v(" "),s("li",[t._v("点击保存会将Bug相关字段信息进行存储为该模板下的一份草稿。")])]),t._v(" "),s("p",[t._v("草稿信息不受Lyrebird服务开关、浏览器缓存、脚本/界面切换的影响。")]),t._v(" "),s("p",[s("img",{attrs:{src:a(308),alt:""}})]),t._v(" "),s("p",[t._v("有效的利用缓存功能,是提高Bug上报效率的关键。")]),t._v(" "),s("h3",{attrs:{id:"插件在bugit中的应用"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#插件在bugit中的应用"}},[t._v("#")]),t._v(" 插件在Bugit中的应用")]),t._v(" "),s("h4",{attrs:{id:"android-ios插件"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#android-ios插件"}},[t._v("#")]),t._v(" Android iOS插件")]),t._v(" "),s("p",[t._v("安装"),s("RouterLink",{attrs:{to:"/plugins/android.html"}},[t._v("Android插件")]),t._v("、"),s("RouterLink",{attrs:{to:"/plugins/ios.html"}},[t._v("iOS插件")]),t._v("后,BugIt支持设备信息扩展服务。")],1),t._v(" "),s("ul",[s("li",[t._v("设备信息获取\n"),s("ul",[s("li",[t._v("BugIt 支持将设备名称、设备系统版本、被测 App 信息(Bundle ID(iOS)/PackageName(Android))填充到Issue内容中。")])])]),t._v(" "),s("li",[t._v("实时设备截图\n"),s("ul",[s("li",[t._v("BugIt 可以实时获取设备截图,并支持在截图上进行涂鸦、文本标记。")]),t._v(" "),s("li",[t._v("提交 Bug 时,截图将作为附件一并提交给脚本配置服务。")])])]),t._v(" "),s("li",[t._v("Crash Log 获取\n"),s("ul",[s("li",[t._v("在Lyrebird运行过程中,如发生 被测 App 发生 Crash,BugIt 会捕获到 Crash Log。")]),t._v(" "),s("li",[t._v("提交 Bug 时,Crash Log 将作为附件一并提交给脚本配置服务。")]),t._v(" "),s("li",[t._v("Crash 获取 暂不支持 iOS 设备")])])])]),t._v(" "),s("p",[s("img",{attrs:{src:a(309),alt:""}})]),t._v(" "),s("h2",{attrs:{id:"bug脚本说明"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#bug脚本说明"}},[t._v("#")]),t._v(" Bug脚本说明")]),t._v(" "),s("p",[t._v("BugIt通过加载配置脚本提供向Bug管理系统提交Issue的功能")]),t._v(" "),s("h3",{attrs:{id:"脚本示意图"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#脚本示意图"}},[t._v("#")]),t._v(" 脚本示意图")]),t._v(" "),s("p",[s("img",{attrs:{src:a(310),alt:""}})]),t._v(" "),s("p",[t._v("配置脚本需包含以下三部分")]),t._v(" "),s("ul",[s("li",[s("a",{attrs:{href:"#init%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6"}},[t._v("init配置文件")])]),t._v(" "),s("li",[s("a",{attrs:{href:"#form"}},[t._v("form()")])]),t._v(" "),s("li",[s("a",{attrs:{href:"#submit"}},[t._v("submit()")])])]),t._v(" "),s("h3",{attrs:{id:"bugit数据传递"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#bugit数据传递"}},[t._v("#")]),t._v(" BugIt数据传递")]),t._v(" "),s("p",[t._v("context 用于存储 BugIt 运行过程中产生的数据信息。"),s("a",{attrs:{href:"#form"}},[t._v("form()")]),t._v("、"),s("a",{attrs:{href:"#submit"}},[t._v("submit()")]),t._v("方法依赖于这些数据信息实现Bug信息的展示与提交")]),t._v(" "),s("p",[t._v("context关键字说明")]),t._v(" "),s("table",[s("thead",[s("tr",[s("th",{staticStyle:{"text-align":"center"}},[t._v("key")]),t._v(" "),s("th",{staticStyle:{"text-align":"left"}},[t._v("说明")]),t._v(" "),s("th",{staticStyle:{"text-align":"center"}},[t._v("使用场景")])])]),t._v(" "),s("tbody",[s("tr",[s("td",{staticStyle:{"text-align":"center"}},[t._v("cache")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("存储Bug缓存信息,详细用法请参考"),s("a",{attrs:{href:"#bug%E4%BF%A1%E6%81%AF%E7%BC%93%E5%AD%98"}},[t._v("Bug信息缓存")])]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("form()")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"center"}},[t._v("issue")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("存储Bug表单信息")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("issue()")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"center"}},[t._v("key")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("存储最近一次提交成功的Issue key")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("issue()、attachments()")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"center"}},[t._v("attachments")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("存储需要上报的附件信息")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("attachments()")])])])]),t._v(" "),s("h3",{attrs:{id:"init配置文件"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#init配置文件"}},[t._v("#")]),t._v(" init配置文件")]),t._v(" "),s("p",[t._v("BugIt 通过 name 来标识配置文件。")]),t._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),s("p",[t._v("BugIt 脚本必须含有 'name' 属性")])]),t._v(" "),s("div",{staticClass:"language-python extra-class"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[s("span",{pre:!0,attrs:{class:"token triple-quoted-string string"}},[t._v('"""\nTemplate name\n"""')]),t._v(" \nname "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'TEST-JIRA'")]),t._v("\n")])])]),s("p",[t._v("name 用于在 BugIt 前端页面上展示脚本名称。")]),t._v(" "),s("p",[s("img",{attrs:{src:a(311),alt:""}})]),t._v(" "),s("p",[t._v("选中配置文件后,BugIt init 脚本文件,获取脚本文件中回调方法("),s("a",{attrs:{href:"#form"}},[t._v("form()")]),t._v("、"),s("a",{attrs:{href:"#submit"}},[t._v("submit()")]),t._v(")。")]),t._v(" "),s("h3",{attrs:{id:"form"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#form"}},[t._v("#")]),t._v(" form()")]),t._v(" "),s("p",[t._v("form() 方法用于自定义Bug表单的字段与填写样式。")]),t._v(" "),s("p",[t._v("Bug 中的每一字段由一dict定义(通常称之为FormItem),表单配置时,通过dict的以下关键字去控制字段的名称、默认值、样式等内容。")]),t._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),s("p",[t._v("form()方法应返回一由FormItem组成的list。")])]),t._v(" "),s("h4",{attrs:{id:"formitem-dict说明"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#formitem-dict说明"}},[t._v("#")]),t._v(" FormItem dict说明")]),t._v(" "),s("table",[s("thead",[s("tr",[s("th",{staticStyle:{"text-align":"center"}},[t._v("key")]),t._v(" "),s("th",{staticStyle:{"text-align":"left"}},[t._v("说明")]),t._v(" "),s("th",{staticStyle:{"text-align":"center"}},[t._v("枚举值")]),t._v(" "),s("th",{staticStyle:{"text-align":"center"}},[t._v("是否必填")])])]),t._v(" "),s("tbody",[s("tr",[s("td",{staticStyle:{"text-align":"center"}},[t._v("name")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("展示在页面上的字段名称")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("--")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("Y")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"center"}},[t._v("value")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("对应字段填充的值")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("--")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("N")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"center"}},[t._v("component")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("字段展示的组件形式")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("'input'、'select'、'compoundTextarea'")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("Y")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"center"}},[t._v("options")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("配合 select component使用,用于存放select component的选项内容")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("--")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("N")])])])]),t._v(" "),s("h4",{attrs:{id:"bugit-支持的-component"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#bugit-支持的-component"}},[t._v("#")]),t._v(" BugIt 支持的 component")]),t._v(" "),s("ul",[s("li",[t._v("input")])]),t._v(" "),s("div",{staticClass:"language-python extra-class"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v("form_item_input "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'主题'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'component'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'input'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'value'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'defalut value'")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[s("img",{attrs:{src:a(312),alt:""}})]),t._v(" "),s("p",[t._v("input 组件会生成一个文本输入框,在声明时如果 value 不为空,则会作为默认值填充在输入框中")]),t._v(" "),s("ul",[s("li",[t._v("select")])]),t._v(" "),s("div",{staticClass:"language-python extra-class"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v("form_item_select "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'版本'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'component'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'select'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'options'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'id'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'001'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'option_1'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'id'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'002'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'option_2'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'value'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'001'")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[s("img",{attrs:{src:a(313),alt:""}})]),t._v(" "),s("p",[t._v("select组件会生成一个筛选框,筛选项由 options 定义,options 为一个 list,其中每一元素为 dict 类型。")]),t._v(" "),s("p",[t._v("option dict说明")]),t._v(" "),s("table",[s("thead",[s("tr",[s("th",{staticStyle:{"text-align":"center"}},[t._v("key")]),t._v(" "),s("th",{staticStyle:{"text-align":"left"}},[t._v("说明")]),t._v(" "),s("th",{staticStyle:{"text-align":"center"}},[t._v("是否必填")])])]),t._v(" "),s("tbody",[s("tr",[s("td",{staticStyle:{"text-align":"center"}},[t._v("id")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("筛选项唯一标识")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("Y")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"center"}},[t._v("name")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("筛选项在前端展示文本内容")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("Y")])])])]),t._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),s("p",[t._v("select 组件中,value应为option dict中对应 id 的值")])]),t._v(" "),s("ul",[s("li",[t._v("compoundTextarea")])]),t._v(" "),s("p",[t._v("compoundTextarea组件会生成一个文本框,在声明时如果 value 不为空,则会作为默认值填充在文本框中")]),t._v(" "),s("div",{staticClass:"language-python extra-class"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v("form_item_text "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'描述'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'component'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'compoundTextarea'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'value'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'defalut value'")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[s("img",{attrs:{src:a(314),alt:""}})]),t._v(" "),s("p",[t._v("compoundTextarea组件在 BugIt 中还用于支持 Lyrebird 其他信息的扩展。")]),t._v(" "),s("p",[t._v("选择"),s("RouterLink",{attrs:{to:"/advance/eventbus.html"}},[t._v("消息总线")]),t._v("或"),s("a",{attrs:{href:"#%E6%8F%92%E4%BB%B6%E5%9C%A8bugit%E4%B8%AD%E7%9A%84%E5%BA%94%E7%94%A8"}},[t._v("其他插件")]),t._v("的数据时,该数据将作为附加信息展示在 compoundTextarea 中。")],1),t._v(" "),s("p",[s("img",{attrs:{src:a(315),alt:""}})]),t._v(" "),s("p",[t._v("对应的数据信息将作为 'extraMsg' 存放在 FormItem中。\n此时From Item变成")]),t._v(" "),s("div",{staticClass:"language-python extra-class"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v("form_item_text "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'描述'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'component'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'compoundTextarea'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'value'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'defalut value'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'extraMsg'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'message'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Flow Info'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'message'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Notice Info'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'message'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Devices Info'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("h4",{attrs:{id:"form-方法示例代码"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#form-方法示例代码"}},[t._v("#")]),t._v(" form()方法示例代码")]),t._v(" "),s("div",{staticClass:"language-python extra-class"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("form")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("context"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token triple-quoted-string string"}},[t._v('"""\n BugIt callback function\n\n BugIt will call this function when user select this template from UI.\n This function should return a array, list all FormItem dict.\n\n """')]),t._v("\n form_item_input "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'主题'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'component'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'input'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'value'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'defalut value'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n form_item_select "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'版本'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'component'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'select'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'options'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'id'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'001'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'option_1'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'id'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'002'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'option_2'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'value'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'001'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n form_item_text "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'描述'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'component'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'compoundTextarea'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'value'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'defalut value'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n form "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("form_item_input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("form_item_select"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("form_item_text"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" form\n")])])]),s("p",[t._v("示例代码生成的 Bug 表单如下图所示\n"),s("img",{attrs:{src:a(316),alt:""}})]),t._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),s("p",[t._v("form()方法入参 "),s("a",{attrs:{href:"#bugit%E6%95%B0%E6%8D%AE%E4%BC%A0%E9%80%92"}},[t._v("context")]),t._v(" ,可用于传递缓存数据,相关用法详见"),s("a",{attrs:{href:"#bug%E4%BF%A1%E6%81%AF%E7%BC%93%E5%AD%98"}},[t._v("Bug信息缓存")])])]),t._v(" "),s("h3",{attrs:{id:"submit"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#submit"}},[t._v("#")]),t._v(" submit()")]),t._v(" "),s("p",[t._v("submit()方法用于向bug系统上提交Issue,生成Bug。")]),t._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),s("p",[t._v("submit()方法返回一组用于处理 submit 行为的方法。")])]),t._v(" "),s("p",[t._v("方法说明")]),t._v(" "),s("table",[s("thead",[s("tr",[s("th",{staticStyle:{"text-align":"center"}},[t._v("方法名")]),t._v(" "),s("th",{staticStyle:{"text-align":"center"}},[t._v("入参")]),t._v(" "),s("th",{staticStyle:{"text-align":"left"}},[t._v("说明")])])]),t._v(" "),s("tbody",[s("tr",[s("td",{staticStyle:{"text-align":"center"}},[t._v("issue")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("context")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("处理 Bug表单中的信息,通过 API 向 Bug 管理系统提交 Issue")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"center"}},[t._v("attachments")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("context")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("处理附件信息(如 "),s("RouterLink",{attrs:{to:"/plugins/android.html"}},[t._v("Android插件")]),t._v("、"),s("RouterLink",{attrs:{to:"/plugins/ios.html"}},[t._v("iOS插件")]),t._v("提供的截图或 Log),通过 API 向 创建的 Issue 中添加附件")],1)])])]),t._v(" "),s("h4",{attrs:{id:"submit-方法示例代码-以jira服务为例"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#submit-方法示例代码-以jira服务为例"}},[t._v("#")]),t._v(" submit()方法示例代码(以JIRA服务为例)")]),t._v(" "),s("div",{staticClass:"language-python extra-class"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("submit")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token triple-quoted-string string"}},[t._v('"""\n BugIt callback function\n\n BugIt will call this function when user tap submit button.\n This function should return a array, contains all submit actions.\n\n Each submit-action function have a argument. It contains form data and attachments info.\n """')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("issue"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" attachments"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("issue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("context"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token triple-quoted-string string"}},[t._v('"""\n This function is used to submit Issue \n """')]),t._v("\n form_data "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" context"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'issue'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n jira_fields "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# transform from_data to payload submited to API of JIRA")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" form_item "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" form_data"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" form_item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'主题'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n jira_fields"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'summary'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" form_item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'value'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("elif")]),t._v(" form_item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'版本'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n jira_fields"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'version'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("id")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("form_item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'value'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("elif")]),t._v(" form_item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'描述'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n jira_fields"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'description'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" form_item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'value'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# add extraMsg to description ")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" form_item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'extraMsg'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" add_des "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" form_item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'extraMsg'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n jira_fields"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'description'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+=")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'\\n'")]),t._v("\n jira_fields"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'description'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+=")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'------------------------------\\n'")]),t._v("\n jira_fields"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'description'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+=")]),t._v("add_des"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'message'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\n url "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'http://www.example.com/jira/rest/api/2/issue'")]),t._v("\n header "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Content-Type'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'application/json;charset=utf-8'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n resp "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" requests"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("post"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" auth"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'YOUR JIRA_USER_NAME'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'YOUR_JIRA_PASSWD'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("json"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"fields"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" jira_fields"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("headers"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("header"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" resp"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("status_code "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("200")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("and")]),t._v(" resp"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("status_code "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("300")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n body "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" json"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("loads"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("response"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("text"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" body"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("get"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'key'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n context"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'key'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" body"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'key'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("raise")]),t._v(" Exception"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token string"}},[t._v("f'Submit failed ")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("response"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("text"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("raise")]),t._v(" Exception"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token string"}},[t._v("f'Create issue failed with code ")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("response"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("status_code"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("\\n")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("response"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("text"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("attachments")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("context"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token triple-quoted-string string"}},[t._v('"""\n This function is used to upload attachments to the Issue which has been created\n """')]),t._v("\n key "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" context"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'key'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n attachments "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" context"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'attachments'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("len")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("attachments"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# No attachments")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v("\n\n url "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token string"}},[t._v("f'http://www.example.com/jira/rest/api/2/issue/")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("key"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("/attachments'")])]),t._v("\n headers "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'X-Atlassian-Token'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'nocheck'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n multiple_files "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# transform attachment data to payload submited to API of JIRA")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" attachment "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" attachments"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n attachment_path "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Path"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("attachment"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'path'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n multiple_files"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("append"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'file'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("attachment_path"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("name"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("open")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("str")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("attachment_path"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'rb'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n response "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" requests"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("post"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" files"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("multiple_files"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" headers"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("headers"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" response"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("status_code "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("200")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("and")]),t._v(" response"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("json"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'code'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("print")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Submit attachments success'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("raise")]),t._v(" Exception"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token string"}},[t._v("f'Submit failed ")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("response"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("text"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),s("h2",{attrs:{id:"脚本高级"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#脚本高级"}},[t._v("#")]),t._v(" 脚本高级")]),t._v(" "),s("h3",{attrs:{id:"bug表单动态化配置"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#bug表单动态化配置"}},[t._v("#")]),t._v(" Bug表单动态化配置")]),t._v(" "),s("p",[t._v("在提交Bug场景中,Bug表单的配置可能会由于项目结构的调整而发生变化。配置脚本的频繁变更会带来额外的工作量及不稳定因素。")]),t._v(" "),s("p",[t._v("针对此问题,可以采用动态化配置Bug表单的方法使 BugIt 更加灵活。")]),t._v(" "),s("p",[t._v("以以"),s("a",{attrs:{href:"https://www.atlassian.com/software/jira/",target:"_blank",rel:"noopener noreferrer"}},[t._v("JIRA"),s("OutboundLink")],1),t._v("服务为例,我们可以通过 API 实时地获取到 Bug 表单所需要的字段及格式。在 form() 方法中对API返回表单数据进行组装,返回符合 form() 预期结果的 list")]),t._v(" "),s("h4",{attrs:{id:"示例代码"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#示例代码"}},[t._v("#")]),t._v(" 示例代码")]),t._v(" "),s("div",{staticClass:"language-python extra-class"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v("\nPROJECT_KEY "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'TEST'")]),t._v("\nISSUE_TYPE_ID "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'10'")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("get_fields_metadata_from_JIRA_API")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token triple-quoted-string string"}},[t._v('"""\n Get origin fields by JIRA Rest API\n projecKeys: Set your project key\n issueTypeId: Set your issue type id\n expand: projects.issuetypes.fields\n """')]),t._v("\n response "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" requests"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("get"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token string"}},[t._v("f'http://http://www.example.com/jira/rest/api/2/issue/createmeta?projectKeys=")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("PROJECT_KEY"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("&issuetypeIds=")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("ISSUE_TYPE_ID"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("&expand=projects.issuetypes.fields'")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n result "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" response"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("json"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n fields "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" result"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'projects'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'issuetypes'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'fields'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" fields\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("make_options")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token triple-quoted-string string"}},[t._v('"""\n Make options of FormItem when field is select component\n """')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" option "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'allowedValues'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("not")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" option"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n option"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" option"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'value'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'allowedValues'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("make_item")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" component"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token triple-quoted-string string"}},[t._v('"""\n Make origin field from JIRA to FieldItem\n key: JIRA field key\n name: Displayed as the FormItem name\n schema: JIRA field schema\n """')]),t._v("\n schema "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'schema'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n item "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("dict")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("key"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" required"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'required'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" schema"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("schema"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" value"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'value'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" value\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'allowedValues'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'component'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'select'")]),t._v("\n item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'options'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" make_options"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'component'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'input'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" component"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'component'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" component\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" item\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("form")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("context"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n jira_fields "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" get_fields_metadata_from_JIRA_API"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n custom_fields "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" OrderedDict"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'描述'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'component'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'compoundTextarea'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n required_fields "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" field_key "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" origin_fields"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n field "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" origin_fields"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("field_key"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" custom_fields"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n custom_fields"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("update"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("make_item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n field_key"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n component"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("custom_fields"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("get"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'component'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("elif")]),t._v(" field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'required'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n required_fields"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("append"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("make_item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("field_key"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("pass")]),t._v("\n form "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("list")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("custom_fields"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("values"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("required_fields"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" form\n")])])]),s("h3",{attrs:{id:"bug信息缓存"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#bug信息缓存"}},[t._v("#")]),t._v(" Bug信息缓存")]),t._v(" "),s("p",[t._v("在form()方法中,利用"),s("a",{attrs:{href:"#bugit%E6%95%B0%E6%8D%AE%E4%BC%A0%E9%80%92"}},[t._v("context")]),t._v("可以实现数据缓存功能")]),t._v(" "),s("h4",{attrs:{id:"示例代码-2"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#示例代码-2"}},[t._v("#")]),t._v(" 示例代码")]),t._v(" "),s("div",{staticClass:"language-python extra-class"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("form")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("context"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n form "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# Your code to make form")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token triple-quoted-string string"}},[t._v('"""\n get cache if it exsit\n field value will be filled with cache value\n """')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" context"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("get"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'cache'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" field "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" form"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" cache_field "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" context"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("get"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'cache'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" cache_field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'key'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'key'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'value'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" cache_field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("get"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'value'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("''")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" form\n")])])]),s("h2",{attrs:{id:"示例脚本"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#示例脚本"}},[t._v("#")]),t._v(" 示例脚本")]),t._v(" "),s("p",[t._v("此示例脚本以"),s("a",{attrs:{href:"https://www.atlassian.com/software/jira/",target:"_blank",rel:"noopener noreferrer"}},[t._v("JIRA"),s("OutboundLink")],1),t._v("服务为例")]),t._v(" "),s("div",{staticClass:"language-python extra-class"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v("\n"),s("span",{pre:!0,attrs:{class:"token triple-quoted-string string"}},[t._v('"""\nTemplate name\n"""')]),t._v("\nname "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'TEST-JIRA'")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("form")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("context"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token triple-quoted-string string"}},[t._v('"""\n BugIt callback function\n\n BugIt will call this function when user select this template from UI.\n This function should return a array, list all FormItem dict.\n\n """')]),t._v("\n form_item_input "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'主题'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'component'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'input'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'value'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'defalut value'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n form_item_select "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'版本'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'component'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'select'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'options'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'id'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'001'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'option_1'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'id'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'002'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'option_2'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'value'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'001'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n form_item_text "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'描述'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'component'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'compoundTextarea'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'value'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'defalut value'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n form "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("form_item_input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("form_item_select"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("form_item_text"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token triple-quoted-string string"}},[t._v('"""\n get cache if it exsit\n field value will be filled with cache value\n """')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" context"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("get"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'cache'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" field "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" form"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" cache_field "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" context"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("get"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'cache'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" cache_field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'key'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'key'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'value'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" cache_field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("get"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'value'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("''")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" form\n\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("submit")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token triple-quoted-string string"}},[t._v('"""\n BugIt callback function\n\n BugIt will call this function when user tap submit button.\n This function should return a array, contains all submit actions.\n\n Each submit-action function have a argument. It contains form data and attachments info.\n """')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("issue"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" attachments"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("issue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("context"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token triple-quoted-string string"}},[t._v('"""\n This function is used to submit Issue \n """')]),t._v("\n form_data "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" context"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'issue'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n jira_fields "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# transform from_data to payload submited to API of JIRA")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" form_item "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" form_data"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" form_item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'主题'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n jira_fields"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'summary'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" form_item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'value'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("elif")]),t._v(" form_item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'版本'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n jira_fields"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'version'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("id")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("form_item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'value'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("elif")]),t._v(" form_item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'描述'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n jira_fields"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'description'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" form_item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'value'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" form_item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'extraMsg'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" add_des "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" form_item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'extraMsg'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n jira_fields"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'description'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+=")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'\\n'")]),t._v("\n jira_fields"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'description'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+=")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'------------------------------\\n'")]),t._v("\n jira_fields"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'description'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+=")]),t._v("add_des"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'message'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\n url "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'http://www.example.com/jira/rest/api/2/issue'")]),t._v("\n header "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Content-Type'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'application/json;charset=utf-8'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n resp "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" requests"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("post"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" auth"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'YOUR JIRA_USER_NAME'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'YOUR_JIRA_PASSWD'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("json"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"fields"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" jira_fields"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("headers"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("header"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" resp"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("status_code "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("200")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("and")]),t._v(" resp"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("status_code "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("300")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n body "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" json"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("loads"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("response"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("text"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" body"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("get"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'key'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n context"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'key'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" body"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'key'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("raise")]),t._v(" Exception"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token string"}},[t._v("f'Submit failed ")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("response"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("text"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("raise")]),t._v(" Exception"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token string"}},[t._v("f'Create issue failed with code ")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("response"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("status_code"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("\\n")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("response"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("text"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("attachments")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("context"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token triple-quoted-string string"}},[t._v('"""\n This function is used to upload attachments to the Issue which has been created\n """')]),t._v("\n key "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" context"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'key'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n attachments "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" context"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'attachments'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("len")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("attachments"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# No attachments")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v("\n\n url "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token string"}},[t._v("f'http://www.example.com/jira/rest/api/2/issue/")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("key"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("/attachments'")])]),t._v("\n headers "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'X-Atlassian-Token'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'nocheck'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n multiple_files "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# transform attachment data to payload submited to API of JIRA")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" attachment "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" attachments"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n attachment_path "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Path"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("attachment"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'path'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n multiple_files"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("append"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'file'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("attachment_path"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("name"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("open")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("str")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("attachment_path"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'rb'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n response "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" requests"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("post"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" files"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("multiple_files"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" headers"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("headers"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" response"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("status_code "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("200")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("and")]),t._v(" response"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("json"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'code'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("print")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Submit attachments success'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("raise")]),t._v(" Exception"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token string"}},[t._v("f'Submit failed ")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("response"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("text"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),s("h3",{attrs:{id:"jira-api-reference"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#jira-api-reference"}},[t._v("#")]),t._v(" JIRA API Reference")]),t._v(" "),s("ul",[s("li",[s("a",{attrs:{href:"https://docs.atlassian.com/software/jira/docs/api/REST/7.6.1/#api/2/issue-getCreateIssueMeta",target:"_blank",rel:"noopener noreferrer"}},[t._v("JIRA get create issue meta"),s("OutboundLink")],1)]),t._v(" "),s("li",[s("a",{attrs:{href:"https://docs.atlassian.com/software/jira/docs/api/REST/7.6.1/#api/2/issue-createIssue",target:"_blank",rel:"noopener noreferrer"}},[t._v("JIRA create issue"),s("OutboundLink")],1)]),t._v(" "),s("li",[s("a",{attrs:{href:"https://docs.atlassian.com/software/jira/docs/api/REST/7.6.1/#api/2/issue/%7BissueIdOrKey%7D/attachments-addAttachment",target:"_blank",rel:"noopener noreferrer"}},[t._v("JIRA add attachment"),s("OutboundLink")],1)])])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[4],{304:function(t,s,a){t.exports=a.p+"assets/img/bugit_bug.3ad42558.png"},305:function(t,s,a){t.exports=a.p+"assets/img/bugit_api.cfc7400e.gif"},306:function(t,s,a){t.exports=a.p+"assets/img/bugit_alert.b459836f.gif"},307:function(t,s){t.exports="data:image/png;base64,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"},308:function(t,s,a){t.exports=a.p+"assets/img/bugit_cache.73931071.gif"},309:function(t,s,a){t.exports=a.p+"assets/img/bugit_devices.9fd96b94.gif"},310:function(t,s,a){t.exports=a.p+"assets/img/bugit_callback.dfdba2a3.png"},311:function(t,s,a){t.exports=a.p+"assets/img/bugit_name.f0d9157d.png"},312:function(t,s){t.exports="data:image/png;base64,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"},313:function(t,s){t.exports="data:image/png;base64,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"},314:function(t,s,a){t.exports=a.p+"assets/img/bugit_text.d316e8e4.png"},315:function(t,s,a){t.exports=a.p+"assets/img/bugit_text_extra.1df1477a.gif"},316:function(t,s,a){t.exports=a.p+"assets/img/bugit_form.99a55be7.png"},346:function(t,s,a){"use strict";a.r(s);var n=a(13),e=Object(n.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"bugit插件"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#bugit插件"}},[t._v("#")]),t._v(" BugIt插件")]),t._v(" "),s("p",[t._v("BugIt 是一个Issue提交的插件,目前应用于提交Bug场景下。")]),t._v(" "),s("p",[t._v("配合其他插件,BugIt提供了一种准确、快捷、有效的Issue生成服务。除填写Issue配置字段外,BugIt还提供Lyrebird中"),s("RouterLink",{attrs:{to:"/checker/"}},[t._v("自定义脚本")]),t._v("与其他"),s("RouterLink",{attrs:{to:"/plugins/"}},[t._v("自定义插件")]),t._v("("),s("RouterLink",{attrs:{to:"/plugins/android.html"}},[t._v("Android")]),t._v("、"),s("RouterLink",{attrs:{to:"/plugins/ios.html"}},[t._v("iOS")]),t._v(")数据。")],1),t._v(" "),s("p",[t._v("通过脚本配置,可支持任意Bug管理系统。")]),t._v(" "),s("h2",{attrs:{id:"快速开始"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#快速开始"}},[t._v("#")]),t._v(" 快速开始")]),t._v(" "),s("h3",{attrs:{id:"环境要求"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#环境要求"}},[t._v("#")]),t._v(" 环境要求")]),t._v(" "),s("ul",[s("li",[s("p",[t._v("macOS OR Linux")])]),t._v(" "),s("li",[s("p",[t._v("Python3.6及以上")])]),t._v(" "),s("li",[s("p",[t._v("Lyrebird 1.6及以上")])])]),t._v(" "),s("h3",{attrs:{id:"安装"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#安装"}},[t._v("#")]),t._v(" 安装")]),t._v(" "),s("div",{staticClass:"language-sh extra-class"},[s("pre",{pre:!0,attrs:{class:"language-sh"}},[s("code",[t._v("pip3 "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" lyrebird-bugit\n")])])]),s("h3",{attrs:{id:"载入脚本文件"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#载入脚本文件"}},[t._v("#")]),t._v(" 载入脚本文件")]),t._v(" "),s("p",[t._v("BugIt workplace 配置由"),s("RouterLink",{attrs:{to:"/guide/config.html"}},[t._v("Lyrebird配置文件")]),t._v("统一管理。")],1),t._v(" "),s("p",[t._v('通过修改 ~/.lyrebird/conf.json 中 "bugit.workspace" 的值,可以修改 BugIt 读取脚本文件的路径。')]),t._v(" "),s("p",[t._v("对脚本的新增、修改、删除,可以在该目录下操作文件。")]),t._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),s("p",[t._v("使用BugIt时,必须有一个及以上的脚本文件")])]),t._v(" "),s("p",[t._v("配置脚本请参考"),s("a",{attrs:{href:"#%E7%A4%BA%E4%BE%8B%E8%84%9A%E6%9C%AC"}},[t._v("示例脚本")]),t._v("。")]),t._v(" "),s("h2",{attrs:{id:"功能介绍"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#功能介绍"}},[t._v("#")]),t._v(" 功能介绍")]),t._v(" "),s("h3",{attrs:{id:"bug提交"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#bug提交"}},[t._v("#")]),t._v(" Bug提交")]),t._v(" "),s("p",[t._v("读取脚本文件后,BugIt会得到一个Bug信息填充的界面,称之为Bug表单。")]),t._v(" "),s("p",[t._v("用户可以自定义Bug字段的 名称、先后顺序、填写样式、默认值。")]),t._v(" "),s("p",[s("img",{attrs:{src:a(304),alt:""}})]),t._v(" "),s("p",[t._v("BugIt可以通过配置服务向任意Bug管理系统提交Issue")]),t._v(" "),s("h3",{attrs:{id:"api数据获取"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#api数据获取"}},[t._v("#")]),t._v(" API数据获取")]),t._v(" "),s("p",[t._v("BugIt支持自动填充Lyrebird运行过程中抓取到的数据信息。")]),t._v(" "),s("p",[s("img",{attrs:{src:a(305),alt:""}})]),t._v(" "),s("h3",{attrs:{id:"报警获取"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#报警获取"}},[t._v("#")]),t._v(" 报警获取")]),t._v(" "),s("p",[t._v("在"),s("RouterLink",{attrs:{to:"/checker/"}},[t._v("自定义脚本")]),t._v("捕获报警后,可以通过通知中心随时跳转至BugIt。")],1),t._v(" "),s("p",[t._v("在右侧数据面板中,可以对历史"),s("RouterLink",{attrs:{to:"/advance/eventbus.html"}},[t._v("消息总线")]),t._v("中的信息进行回溯,补充至Bug中。")],1),t._v(" "),s("p",[s("img",{attrs:{src:a(306),alt:""}})]),t._v(" "),s("h3",{attrs:{id:"保存草稿功能"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#保存草稿功能"}},[t._v("#")]),t._v(" 保存草稿功能")]),t._v(" "),s("p",[t._v("按下[Commond]+[s]键,会将Bug相关字段信息进行存储为默认草稿Default。")]),t._v(" "),s("p",[t._v("自定义草稿步骤如下:")]),t._v(" "),s("ul",[s("li",[t._v("点击Draft按钮 "),s("img",{attrs:{src:a(307),width:"70"}})]),t._v(" "),s("li",[t._v("在弹出框中编辑草稿名称(默认为Default),草稿名称不能重复。")]),t._v(" "),s("li",[t._v("点击保存会将Bug相关字段信息进行存储为该模板下的一份草稿。")])]),t._v(" "),s("p",[t._v("草稿信息不受Lyrebird服务开关、浏览器缓存、脚本/界面切换的影响。")]),t._v(" "),s("p",[s("img",{attrs:{src:a(308),alt:""}})]),t._v(" "),s("p",[t._v("有效的利用缓存功能,是提高Bug上报效率的关键。")]),t._v(" "),s("h3",{attrs:{id:"插件在bugit中的应用"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#插件在bugit中的应用"}},[t._v("#")]),t._v(" 插件在Bugit中的应用")]),t._v(" "),s("h4",{attrs:{id:"android-ios插件"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#android-ios插件"}},[t._v("#")]),t._v(" Android iOS插件")]),t._v(" "),s("p",[t._v("安装"),s("RouterLink",{attrs:{to:"/plugins/android.html"}},[t._v("Android插件")]),t._v("、"),s("RouterLink",{attrs:{to:"/plugins/ios.html"}},[t._v("iOS插件")]),t._v("后,BugIt支持设备信息扩展服务。")],1),t._v(" "),s("ul",[s("li",[t._v("设备信息获取\n"),s("ul",[s("li",[t._v("BugIt 支持将设备名称、设备系统版本、被测 App 信息(Bundle ID(iOS)/PackageName(Android))填充到Issue内容中。")])])]),t._v(" "),s("li",[t._v("实时设备截图\n"),s("ul",[s("li",[t._v("BugIt 可以实时获取设备截图,并支持在截图上进行涂鸦、文本标记。")]),t._v(" "),s("li",[t._v("提交 Bug 时,截图将作为附件一并提交给脚本配置服务。")])])]),t._v(" "),s("li",[t._v("Crash Log 获取\n"),s("ul",[s("li",[t._v("在Lyrebird运行过程中,如发生 被测 App 发生 Crash,BugIt 会捕获到 Crash Log。")]),t._v(" "),s("li",[t._v("提交 Bug 时,Crash Log 将作为附件一并提交给脚本配置服务。")]),t._v(" "),s("li",[t._v("Crash 获取 暂不支持 iOS 设备")])])])]),t._v(" "),s("p",[s("img",{attrs:{src:a(309),alt:""}})]),t._v(" "),s("h2",{attrs:{id:"bug脚本说明"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#bug脚本说明"}},[t._v("#")]),t._v(" Bug脚本说明")]),t._v(" "),s("p",[t._v("BugIt通过加载配置脚本提供向Bug管理系统提交Issue的功能")]),t._v(" "),s("h3",{attrs:{id:"脚本示意图"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#脚本示意图"}},[t._v("#")]),t._v(" 脚本示意图")]),t._v(" "),s("p",[s("img",{attrs:{src:a(310),alt:""}})]),t._v(" "),s("p",[t._v("配置脚本需包含以下三部分")]),t._v(" "),s("ul",[s("li",[s("a",{attrs:{href:"#init%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6"}},[t._v("init配置文件")])]),t._v(" "),s("li",[s("a",{attrs:{href:"#form"}},[t._v("form()")])]),t._v(" "),s("li",[s("a",{attrs:{href:"#submit"}},[t._v("submit()")])])]),t._v(" "),s("h3",{attrs:{id:"bugit数据传递"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#bugit数据传递"}},[t._v("#")]),t._v(" BugIt数据传递")]),t._v(" "),s("p",[t._v("context 用于存储 BugIt 运行过程中产生的数据信息。"),s("a",{attrs:{href:"#form"}},[t._v("form()")]),t._v("、"),s("a",{attrs:{href:"#submit"}},[t._v("submit()")]),t._v("方法依赖于这些数据信息实现Bug信息的展示与提交")]),t._v(" "),s("p",[t._v("context关键字说明")]),t._v(" "),s("table",[s("thead",[s("tr",[s("th",{staticStyle:{"text-align":"center"}},[t._v("key")]),t._v(" "),s("th",{staticStyle:{"text-align":"left"}},[t._v("说明")]),t._v(" "),s("th",{staticStyle:{"text-align":"center"}},[t._v("使用场景")])])]),t._v(" "),s("tbody",[s("tr",[s("td",{staticStyle:{"text-align":"center"}},[t._v("cache")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("存储Bug缓存信息,详细用法请参考"),s("a",{attrs:{href:"#bug%E4%BF%A1%E6%81%AF%E7%BC%93%E5%AD%98"}},[t._v("Bug信息缓存")])]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("form()")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"center"}},[t._v("issue")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("存储Bug表单信息")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("issue()")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"center"}},[t._v("key")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("存储最近一次提交成功的Issue key")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("issue()、attachments()")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"center"}},[t._v("attachments")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("存储需要上报的附件信息")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("attachments()")])])])]),t._v(" "),s("h3",{attrs:{id:"init配置文件"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#init配置文件"}},[t._v("#")]),t._v(" init配置文件")]),t._v(" "),s("p",[t._v("BugIt 通过 name 来标识配置文件。")]),t._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),s("p",[t._v("BugIt 脚本必须含有 'name' 属性")])]),t._v(" "),s("div",{staticClass:"language-python extra-class"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[s("span",{pre:!0,attrs:{class:"token triple-quoted-string string"}},[t._v('"""\nTemplate name\n"""')]),t._v(" \nname "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'TEST-JIRA'")]),t._v("\n")])])]),s("p",[t._v("name 用于在 BugIt 前端页面上展示脚本名称。")]),t._v(" "),s("p",[s("img",{attrs:{src:a(311),alt:""}})]),t._v(" "),s("p",[t._v("选中配置文件后,BugIt init 脚本文件,获取脚本文件中回调方法("),s("a",{attrs:{href:"#form"}},[t._v("form()")]),t._v("、"),s("a",{attrs:{href:"#submit"}},[t._v("submit()")]),t._v(")。")]),t._v(" "),s("h3",{attrs:{id:"form"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#form"}},[t._v("#")]),t._v(" form()")]),t._v(" "),s("p",[t._v("form() 方法用于自定义Bug表单的字段与填写样式。")]),t._v(" "),s("p",[t._v("Bug 中的每一字段由一dict定义(通常称之为FormItem),表单配置时,通过dict的以下关键字去控制字段的名称、默认值、样式等内容。")]),t._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),s("p",[t._v("form()方法应返回一由FormItem组成的list。")])]),t._v(" "),s("h4",{attrs:{id:"formitem-dict说明"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#formitem-dict说明"}},[t._v("#")]),t._v(" FormItem dict说明")]),t._v(" "),s("table",[s("thead",[s("tr",[s("th",{staticStyle:{"text-align":"center"}},[t._v("key")]),t._v(" "),s("th",{staticStyle:{"text-align":"left"}},[t._v("说明")]),t._v(" "),s("th",{staticStyle:{"text-align":"center"}},[t._v("枚举值")]),t._v(" "),s("th",{staticStyle:{"text-align":"center"}},[t._v("是否必填")])])]),t._v(" "),s("tbody",[s("tr",[s("td",{staticStyle:{"text-align":"center"}},[t._v("name")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("展示在页面上的字段名称")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("--")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("Y")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"center"}},[t._v("value")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("对应字段填充的值")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("--")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("N")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"center"}},[t._v("component")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("字段展示的组件形式")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("'input'、'select'、'compoundTextarea'")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("Y")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"center"}},[t._v("options")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("配合 select component使用,用于存放select component的选项内容")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("--")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("N")])])])]),t._v(" "),s("h4",{attrs:{id:"bugit-支持的-component"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#bugit-支持的-component"}},[t._v("#")]),t._v(" BugIt 支持的 component")]),t._v(" "),s("ul",[s("li",[t._v("input")])]),t._v(" "),s("div",{staticClass:"language-python extra-class"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v("form_item_input "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'主题'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'component'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'input'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'value'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'defalut value'")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[s("img",{attrs:{src:a(312),alt:""}})]),t._v(" "),s("p",[t._v("input 组件会生成一个文本输入框,在声明时如果 value 不为空,则会作为默认值填充在输入框中")]),t._v(" "),s("ul",[s("li",[t._v("select")])]),t._v(" "),s("div",{staticClass:"language-python extra-class"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v("form_item_select "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'版本'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'component'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'select'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'options'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'id'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'001'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'option_1'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'id'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'002'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'option_2'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'value'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'001'")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[s("img",{attrs:{src:a(313),alt:""}})]),t._v(" "),s("p",[t._v("select组件会生成一个筛选框,筛选项由 options 定义,options 为一个 list,其中每一元素为 dict 类型。")]),t._v(" "),s("p",[t._v("option dict说明")]),t._v(" "),s("table",[s("thead",[s("tr",[s("th",{staticStyle:{"text-align":"center"}},[t._v("key")]),t._v(" "),s("th",{staticStyle:{"text-align":"left"}},[t._v("说明")]),t._v(" "),s("th",{staticStyle:{"text-align":"center"}},[t._v("是否必填")])])]),t._v(" "),s("tbody",[s("tr",[s("td",{staticStyle:{"text-align":"center"}},[t._v("id")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("筛选项唯一标识")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("Y")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"center"}},[t._v("name")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("筛选项在前端展示文本内容")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("Y")])])])]),t._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),s("p",[t._v("select 组件中,value应为option dict中对应 id 的值")])]),t._v(" "),s("ul",[s("li",[t._v("compoundTextarea")])]),t._v(" "),s("p",[t._v("compoundTextarea组件会生成一个文本框,在声明时如果 value 不为空,则会作为默认值填充在文本框中")]),t._v(" "),s("div",{staticClass:"language-python extra-class"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v("form_item_text "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'描述'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'component'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'compoundTextarea'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'value'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'defalut value'")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[s("img",{attrs:{src:a(314),alt:""}})]),t._v(" "),s("p",[t._v("compoundTextarea组件在 BugIt 中还用于支持 Lyrebird 其他信息的扩展。")]),t._v(" "),s("p",[t._v("选择"),s("RouterLink",{attrs:{to:"/advance/eventbus.html"}},[t._v("消息总线")]),t._v("或"),s("a",{attrs:{href:"#%E6%8F%92%E4%BB%B6%E5%9C%A8bugit%E4%B8%AD%E7%9A%84%E5%BA%94%E7%94%A8"}},[t._v("其他插件")]),t._v("的数据时,该数据将作为附加信息展示在 compoundTextarea 中。")],1),t._v(" "),s("p",[s("img",{attrs:{src:a(315),alt:""}})]),t._v(" "),s("p",[t._v("对应的数据信息将作为 'extraMsg' 存放在 FormItem中。\n此时From Item变成")]),t._v(" "),s("div",{staticClass:"language-python extra-class"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v("form_item_text "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'描述'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'component'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'compoundTextarea'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'value'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'defalut value'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'extraMsg'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'message'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Flow Info'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'message'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Notice Info'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'message'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Devices Info'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("h4",{attrs:{id:"form-方法示例代码"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#form-方法示例代码"}},[t._v("#")]),t._v(" form()方法示例代码")]),t._v(" "),s("div",{staticClass:"language-python extra-class"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("form")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("context"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token triple-quoted-string string"}},[t._v('"""\n BugIt callback function\n\n BugIt will call this function when user select this template from UI.\n This function should return a array, list all FormItem dict.\n\n """')]),t._v("\n form_item_input "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'主题'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'component'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'input'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'value'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'defalut value'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n form_item_select "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'版本'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'component'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'select'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'options'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'id'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'001'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'option_1'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'id'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'002'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'option_2'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'value'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'001'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n form_item_text "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'描述'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'component'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'compoundTextarea'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'value'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'defalut value'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n form "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("form_item_input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("form_item_select"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("form_item_text"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" form\n")])])]),s("p",[t._v("示例代码生成的 Bug 表单如下图所示\n"),s("img",{attrs:{src:a(316),alt:""}})]),t._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),s("p",[t._v("form()方法入参 "),s("a",{attrs:{href:"#bugit%E6%95%B0%E6%8D%AE%E4%BC%A0%E9%80%92"}},[t._v("context")]),t._v(" ,可用于传递缓存数据,相关用法详见"),s("a",{attrs:{href:"#bug%E4%BF%A1%E6%81%AF%E7%BC%93%E5%AD%98"}},[t._v("Bug信息缓存")])])]),t._v(" "),s("h3",{attrs:{id:"submit"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#submit"}},[t._v("#")]),t._v(" submit()")]),t._v(" "),s("p",[t._v("submit()方法用于向bug系统上提交Issue,生成Bug。")]),t._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),s("p",[t._v("submit()方法返回一组用于处理 submit 行为的方法。")])]),t._v(" "),s("p",[t._v("方法说明")]),t._v(" "),s("table",[s("thead",[s("tr",[s("th",{staticStyle:{"text-align":"center"}},[t._v("方法名")]),t._v(" "),s("th",{staticStyle:{"text-align":"center"}},[t._v("入参")]),t._v(" "),s("th",{staticStyle:{"text-align":"left"}},[t._v("说明")])])]),t._v(" "),s("tbody",[s("tr",[s("td",{staticStyle:{"text-align":"center"}},[t._v("issue")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("context")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("处理 Bug表单中的信息,通过 API 向 Bug 管理系统提交 Issue")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"center"}},[t._v("attachments")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("context")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("处理附件信息(如 "),s("RouterLink",{attrs:{to:"/plugins/android.html"}},[t._v("Android插件")]),t._v("、"),s("RouterLink",{attrs:{to:"/plugins/ios.html"}},[t._v("iOS插件")]),t._v("提供的截图或 Log),通过 API 向 创建的 Issue 中添加附件")],1)])])]),t._v(" "),s("h4",{attrs:{id:"submit-方法示例代码-以jira服务为例"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#submit-方法示例代码-以jira服务为例"}},[t._v("#")]),t._v(" submit()方法示例代码(以JIRA服务为例)")]),t._v(" "),s("div",{staticClass:"language-python extra-class"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("submit")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token triple-quoted-string string"}},[t._v('"""\n BugIt callback function\n\n BugIt will call this function when user tap submit button.\n This function should return a array, contains all submit actions.\n\n Each submit-action function have a argument. It contains form data and attachments info.\n """')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("issue"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" attachments"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("issue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("context"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token triple-quoted-string string"}},[t._v('"""\n This function is used to submit Issue \n """')]),t._v("\n form_data "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" context"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'issue'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n jira_fields "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# transform from_data to payload submited to API of JIRA")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" form_item "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" form_data"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" form_item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'主题'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n jira_fields"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'summary'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" form_item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'value'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("elif")]),t._v(" form_item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'版本'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n jira_fields"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'version'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("id")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("form_item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'value'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("elif")]),t._v(" form_item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'描述'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n jira_fields"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'description'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" form_item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'value'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# add extraMsg to description ")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" form_item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'extraMsg'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" add_des "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" form_item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'extraMsg'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n jira_fields"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'description'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+=")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'\\n'")]),t._v("\n jira_fields"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'description'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+=")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'------------------------------\\n'")]),t._v("\n jira_fields"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'description'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+=")]),t._v("add_des"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'message'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\n url "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'http://www.example.com/jira/rest/api/2/issue'")]),t._v("\n header "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Content-Type'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'application/json;charset=utf-8'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n resp "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" requests"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("post"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" auth"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'YOUR JIRA_USER_NAME'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'YOUR_JIRA_PASSWD'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("json"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"fields"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" jira_fields"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("headers"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("header"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" resp"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("status_code "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("200")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("and")]),t._v(" resp"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("status_code "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("300")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n body "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" json"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("loads"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("response"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("text"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" body"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("get"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'key'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n context"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'key'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" body"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'key'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("raise")]),t._v(" Exception"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token string"}},[t._v("f'Submit failed ")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("response"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("text"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("raise")]),t._v(" Exception"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token string"}},[t._v("f'Create issue failed with code ")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("response"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("status_code"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("\\n")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("response"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("text"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("attachments")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("context"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token triple-quoted-string string"}},[t._v('"""\n This function is used to upload attachments to the Issue which has been created\n """')]),t._v("\n key "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" context"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'key'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n attachments "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" context"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'attachments'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("len")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("attachments"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# No attachments")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v("\n\n url "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token string"}},[t._v("f'http://www.example.com/jira/rest/api/2/issue/")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("key"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("/attachments'")])]),t._v("\n headers "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'X-Atlassian-Token'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'nocheck'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n multiple_files "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# transform attachment data to payload submited to API of JIRA")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" attachment "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" attachments"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n attachment_path "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Path"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("attachment"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'path'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n multiple_files"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("append"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'file'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("attachment_path"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("name"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("open")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("str")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("attachment_path"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'rb'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n response "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" requests"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("post"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" files"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("multiple_files"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" headers"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("headers"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" response"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("status_code "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("200")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("and")]),t._v(" response"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("json"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'code'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("print")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Submit attachments success'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("raise")]),t._v(" Exception"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token string"}},[t._v("f'Submit failed ")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("response"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("text"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),s("h2",{attrs:{id:"脚本高级"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#脚本高级"}},[t._v("#")]),t._v(" 脚本高级")]),t._v(" "),s("h3",{attrs:{id:"bug表单动态化配置"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#bug表单动态化配置"}},[t._v("#")]),t._v(" Bug表单动态化配置")]),t._v(" "),s("p",[t._v("在提交Bug场景中,Bug表单的配置可能会由于项目结构的调整而发生变化。配置脚本的频繁变更会带来额外的工作量及不稳定因素。")]),t._v(" "),s("p",[t._v("针对此问题,可以采用动态化配置Bug表单的方法使 BugIt 更加灵活。")]),t._v(" "),s("p",[t._v("以以"),s("a",{attrs:{href:"https://www.atlassian.com/software/jira/",target:"_blank",rel:"noopener noreferrer"}},[t._v("JIRA"),s("OutboundLink")],1),t._v("服务为例,我们可以通过 API 实时地获取到 Bug 表单所需要的字段及格式。在 form() 方法中对API返回表单数据进行组装,返回符合 form() 预期结果的 list")]),t._v(" "),s("h4",{attrs:{id:"示例代码"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#示例代码"}},[t._v("#")]),t._v(" 示例代码")]),t._v(" "),s("div",{staticClass:"language-python extra-class"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v("\nPROJECT_KEY "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'TEST'")]),t._v("\nISSUE_TYPE_ID "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'10'")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("get_fields_metadata_from_JIRA_API")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token triple-quoted-string string"}},[t._v('"""\n Get origin fields by JIRA Rest API\n projecKeys: Set your project key\n issueTypeId: Set your issue type id\n expand: projects.issuetypes.fields\n """')]),t._v("\n response "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" requests"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("get"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token string"}},[t._v("f'http://http://www.example.com/jira/rest/api/2/issue/createmeta?projectKeys=")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("PROJECT_KEY"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("&issuetypeIds=")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("ISSUE_TYPE_ID"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("&expand=projects.issuetypes.fields'")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n result "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" response"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("json"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n fields "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" result"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'projects'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'issuetypes'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'fields'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" fields\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("make_options")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token triple-quoted-string string"}},[t._v('"""\n Make options of FormItem when field is select component\n """')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" option "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'allowedValues'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("not")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" option"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n option"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" option"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'value'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'allowedValues'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("make_item")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" component"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token triple-quoted-string string"}},[t._v('"""\n Make origin field from JIRA to FieldItem\n key: JIRA field key\n name: Displayed as the FormItem name\n schema: JIRA field schema\n """')]),t._v("\n schema "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'schema'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n item "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("dict")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("key"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("key"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" required"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'required'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" schema"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("schema"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" value"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'value'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" value\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'allowedValues'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'component'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'select'")]),t._v("\n item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'options'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" make_options"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'component'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'input'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" component"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'component'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" component\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" item\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("form")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("context"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n jira_fields "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" get_fields_metadata_from_JIRA_API"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n custom_fields "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" OrderedDict"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'描述'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'component'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'compoundTextarea'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n required_fields "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" field_key "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" origin_fields"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n field "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" origin_fields"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("field_key"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" custom_fields"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n custom_fields"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("update"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("make_item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n field_key"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n component"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("custom_fields"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("get"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'component'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("elif")]),t._v(" field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'required'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n required_fields"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("append"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("make_item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("field_key"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("pass")]),t._v("\n form "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("list")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("custom_fields"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("values"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("required_fields"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" form\n")])])]),s("h3",{attrs:{id:"bug信息缓存"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#bug信息缓存"}},[t._v("#")]),t._v(" Bug信息缓存")]),t._v(" "),s("p",[t._v("在form()方法中,利用"),s("a",{attrs:{href:"#bugit%E6%95%B0%E6%8D%AE%E4%BC%A0%E9%80%92"}},[t._v("context")]),t._v("可以实现数据缓存功能")]),t._v(" "),s("h4",{attrs:{id:"示例代码-2"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#示例代码-2"}},[t._v("#")]),t._v(" 示例代码")]),t._v(" "),s("div",{staticClass:"language-python extra-class"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("form")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("context"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n form "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# Your code to make form")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token triple-quoted-string string"}},[t._v('"""\n get cache if it exsit\n field value will be filled with cache value\n """')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" context"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("get"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'cache'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" field "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" form"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" cache_field "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" context"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("get"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'cache'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" cache_field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'key'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'key'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'value'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" cache_field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("get"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'value'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("''")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" form\n")])])]),s("h2",{attrs:{id:"示例脚本"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#示例脚本"}},[t._v("#")]),t._v(" 示例脚本")]),t._v(" "),s("p",[t._v("此示例脚本以"),s("a",{attrs:{href:"https://www.atlassian.com/software/jira/",target:"_blank",rel:"noopener noreferrer"}},[t._v("JIRA"),s("OutboundLink")],1),t._v("服务为例")]),t._v(" "),s("div",{staticClass:"language-python extra-class"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v("\n"),s("span",{pre:!0,attrs:{class:"token triple-quoted-string string"}},[t._v('"""\nTemplate name\n"""')]),t._v("\nname "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'TEST-JIRA'")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("form")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("context"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token triple-quoted-string string"}},[t._v('"""\n BugIt callback function\n\n BugIt will call this function when user select this template from UI.\n This function should return a array, list all FormItem dict.\n\n """')]),t._v("\n form_item_input "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'主题'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'component'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'input'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'value'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'defalut value'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n form_item_select "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'版本'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'component'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'select'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'options'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'id'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'001'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'option_1'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'id'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'002'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'option_2'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'value'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'001'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n form_item_text "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'描述'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'component'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'compoundTextarea'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'value'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'defalut value'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n form "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("form_item_input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("form_item_select"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("form_item_text"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token triple-quoted-string string"}},[t._v('"""\n get cache if it exsit\n field value will be filled with cache value\n """')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" context"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("get"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'cache'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" field "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" form"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" cache_field "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" context"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("get"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'cache'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" cache_field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'key'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'key'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'value'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" cache_field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("get"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'value'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("''")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" form\n\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("submit")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token triple-quoted-string string"}},[t._v('"""\n BugIt callback function\n\n BugIt will call this function when user tap submit button.\n This function should return a array, contains all submit actions.\n\n Each submit-action function have a argument. It contains form data and attachments info.\n """')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("issue"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" attachments"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("issue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("context"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token triple-quoted-string string"}},[t._v('"""\n This function is used to submit Issue \n """')]),t._v("\n form_data "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" context"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'issue'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n jira_fields "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# transform from_data to payload submited to API of JIRA")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" form_item "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" form_data"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" form_item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'主题'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n jira_fields"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'summary'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" form_item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'value'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("elif")]),t._v(" form_item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'版本'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n jira_fields"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'version'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("id")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("form_item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'value'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("elif")]),t._v(" form_item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'name'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'描述'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n jira_fields"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'description'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" form_item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'value'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" form_item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'extraMsg'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" add_des "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" form_item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'extraMsg'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n jira_fields"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'description'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+=")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'\\n'")]),t._v("\n jira_fields"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'description'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+=")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'------------------------------\\n'")]),t._v("\n jira_fields"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'description'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+=")]),t._v("add_des"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'message'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\n url "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'http://www.example.com/jira/rest/api/2/issue'")]),t._v("\n header "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Content-Type'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'application/json;charset=utf-8'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n resp "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" requests"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("post"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" auth"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'YOUR JIRA_USER_NAME'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'YOUR_JIRA_PASSWD'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("json"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"fields"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" jira_fields"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("headers"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("header"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" resp"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("status_code "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("200")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("and")]),t._v(" resp"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("status_code "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("300")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n body "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" json"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("loads"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("response"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("text"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" body"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("get"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'key'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n context"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'key'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" body"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'key'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("raise")]),t._v(" Exception"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token string"}},[t._v("f'Submit failed ")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("response"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("text"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("raise")]),t._v(" Exception"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token string"}},[t._v("f'Create issue failed with code ")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("response"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("status_code"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("\\n")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("response"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("text"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("attachments")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("context"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token triple-quoted-string string"}},[t._v('"""\n This function is used to upload attachments to the Issue which has been created\n """')]),t._v("\n key "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" context"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'key'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n attachments "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" context"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'attachments'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("len")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("attachments"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# No attachments")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v("\n\n url "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token string"}},[t._v("f'http://www.example.com/jira/rest/api/2/issue/")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("key"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("/attachments'")])]),t._v("\n headers "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'X-Atlassian-Token'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'nocheck'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n multiple_files "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# transform attachment data to payload submited to API of JIRA")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" attachment "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" attachments"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n attachment_path "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Path"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("attachment"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'path'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n multiple_files"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("append"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'file'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("attachment_path"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("name"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("open")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("str")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("attachment_path"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'rb'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n response "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" requests"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("post"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("url"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" files"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("multiple_files"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" headers"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("headers"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" response"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("status_code "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("200")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("and")]),t._v(" response"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("json"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'code'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("print")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Submit attachments success'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("raise")]),t._v(" Exception"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token string"}},[t._v("f'Submit failed ")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("response"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("text"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),s("h3",{attrs:{id:"jira-api-reference"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#jira-api-reference"}},[t._v("#")]),t._v(" JIRA API Reference")]),t._v(" "),s("ul",[s("li",[s("a",{attrs:{href:"https://docs.atlassian.com/software/jira/docs/api/REST/7.6.1/#api/2/issue-getCreateIssueMeta",target:"_blank",rel:"noopener noreferrer"}},[t._v("JIRA get create issue meta"),s("OutboundLink")],1)]),t._v(" "),s("li",[s("a",{attrs:{href:"https://docs.atlassian.com/software/jira/docs/api/REST/7.6.1/#api/2/issue-createIssue",target:"_blank",rel:"noopener noreferrer"}},[t._v("JIRA create issue"),s("OutboundLink")],1)]),t._v(" "),s("li",[s("a",{attrs:{href:"https://docs.atlassian.com/software/jira/docs/api/REST/7.6.1/#api/2/issue/%7BissueIdOrKey%7D/attachments-addAttachment",target:"_blank",rel:"noopener noreferrer"}},[t._v("JIRA add attachment"),s("OutboundLink")],1)])])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/8.a358d4c9.js b/assets/js/8.69a9da72.js similarity index 60% rename from assets/js/8.a358d4c9.js rename to assets/js/8.69a9da72.js index f7f45e0aa..00c6dff11 100644 --- a/assets/js/8.a358d4c9.js +++ b/assets/js/8.69a9da72.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[8],{253:function(t,e,n){},318:function(t,e,n){"use strict";n(253)},349:function(t,e,n){"use strict";n.r(e);var i={functional:!0,props:{type:{type:String,default:"tip"},text:String,vertical:{type:String,default:"top"}},render:(t,{props:e,slots:n})=>t("span",{class:["badge",e.type],style:{verticalAlign:e.vertical}},e.text||n().default)},p=(n(318),n(13)),l=Object(p.a)(i,void 0,void 0,!1,null,"15b7b770",null);e.default=l.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[8],{252:function(t,e,n){},317:function(t,e,n){"use strict";n(252)},349:function(t,e,n){"use strict";n.r(e);var i={functional:!0,props:{type:{type:String,default:"tip"},text:String,vertical:{type:String,default:"top"}},render:(t,{props:e,slots:n})=>t("span",{class:["badge",e.type],style:{verticalAlign:e.vertical}},e.text||n().default)},p=(n(317),n(13)),l=Object(p.a)(i,void 0,void 0,!1,null,"15b7b770",null);e.default=l.exports}}]); \ No newline at end of file diff --git a/assets/js/9.a9c336d6.js b/assets/js/9.bbfafe20.js similarity index 65% rename from assets/js/9.a9c336d6.js rename to assets/js/9.bbfafe20.js index 5e2371e28..f8ca41076 100644 --- a/assets/js/9.a9c336d6.js +++ b/assets/js/9.bbfafe20.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[9],{252:function(t,e,a){},317:function(t,e,a){"use strict";a(252)},322:function(t,e,a){"use strict";a.r(e);var s={name:"CodeBlock",props:{title:{type:String,required:!0},active:{type:Boolean,default:!1}},mounted(){this.$parent&&this.$parent.loadTabs&&this.$parent.loadTabs()}},i=(a(317),a(13)),n=Object(i.a)(s,(function(){return(0,this._self._c)("div",{staticClass:"theme-code-block",class:{"theme-code-block__active":this.active}},[this._t("default")],2)}),[],!1,null,"759a7d02",null);e.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[9],{253:function(t,e,a){},318:function(t,e,a){"use strict";a(253)},322:function(t,e,a){"use strict";a.r(e);var s={name:"CodeBlock",props:{title:{type:String,required:!0},active:{type:Boolean,default:!1}},mounted(){this.$parent&&this.$parent.loadTabs&&this.$parent.loadTabs()}},i=(a(318),a(13)),n=Object(i.a)(s,(function(){return(0,this._self._c)("div",{staticClass:"theme-code-block",class:{"theme-code-block__active":this.active}},[this._t("default")],2)}),[],!1,null,"759a7d02",null);e.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/app.eb13491c.js b/assets/js/app.77e69e02.js similarity index 94% rename from assets/js/app.eb13491c.js rename to assets/js/app.77e69e02.js index d36b01442..86341affc 100644 --- a/assets/js/app.eb13491c.js +++ b/assets/js/app.77e69e02.js @@ -1,4 +1,4 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[0],[]]);!function(t){function e(e){for(var r,a,s=e[0],u=e[1],c=e[2],f=0,p=[];f
'};function o(t,e,n){return tn?n:t}function i(t){return 100*(-1+t)}n.configure=function(t){var e,n;for(e in t)void 0!==(n=t[e])&&t.hasOwnProperty(e)&&(r[e]=n);return this},n.status=null,n.set=function(t){var e=n.isStarted();t=o(t,r.minimum,1),n.status=1===t?null:t;var u=n.render(!e),c=u.querySelector(r.barSelector),l=r.speed,f=r.easing;return u.offsetWidth,a((function(e){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(c,function(t,e,n){var o;return(o="translate3d"===r.positionUsing?{transform:"translate3d("+i(t)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+i(t)+"%,0)"}:{"margin-left":i(t)+"%"}).transition="all "+e+"ms "+n,o}(t,l,f)),1===t?(s(u,{transition:"none",opacity:1}),u.offsetWidth,setTimeout((function(){s(u,{transition:"all "+l+"ms linear",opacity:0}),setTimeout((function(){n.remove(),e()}),l)}),l)):setTimeout(e,l)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var t=function(){setTimeout((function(){n.status&&(n.trickle(),t())}),r.trickleSpeed)};return r.trickle&&t(),this},n.done=function(t){return t||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(t){var e=n.status;return e?("number"!=typeof t&&(t=(1-e)*o(Math.random()*e,.1,.95)),e=o(e+t,0,.994),n.set(e)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},t=0,e=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===e&&n.start(),t++,e++,r.always((function(){0==--e?(t=0,n.done()):n.set((t-e)/t)})),this):this},n.render=function(t){if(n.isRendered())return document.getElementById("nprogress");c(document.documentElement,"nprogress-busy");var e=document.createElement("div");e.id="nprogress",e.innerHTML=r.template;var o,a=e.querySelector(r.barSelector),u=t?"-100":i(n.status||0),l=document.querySelector(r.parent);return s(a,{transition:"all 0 linear",transform:"translate3d("+u+"%,0,0)"}),r.showSpinner||(o=e.querySelector(r.spinnerSelector))&&p(o),l!=document.body&&c(l,"nprogress-custom-parent"),l.appendChild(e),e},n.remove=function(){l(document.documentElement,"nprogress-busy"),l(document.querySelector(r.parent),"nprogress-custom-parent");var t=document.getElementById("nprogress");t&&p(t)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var t=document.body.style,e="WebkitTransform"in t?"Webkit":"MozTransform"in t?"Moz":"msTransform"in t?"ms":"OTransform"in t?"O":"";return e+"Perspective"in t?"translate3d":e+"Transform"in t?"translate":"margin"};var a=function(){var t=[];function e(){var n=t.shift();n&&n(e)}return function(n){t.push(n),1==t.length&&e()}}(),s=function(){var t=["Webkit","O","Moz","ms"],e={};function n(n){return n=n.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(t,e){return e.toUpperCase()})),e[n]||(e[n]=function(e){var n=document.body.style;if(e in n)return e;for(var r,o=t.length,i=e.charAt(0).toUpperCase()+e.slice(1);o--;)if((r=t[o]+i)in n)return r;return e}(n))}function r(t,e,r){e=n(e),t.style[e]=r}return function(t,e){var n,o,i=arguments;if(2==i.length)for(n in e)void 0!==(o=e[n])&&e.hasOwnProperty(n)&&r(t,n,o);else r(t,i[1],i[2])}}();function u(t,e){return("string"==typeof t?t:f(t)).indexOf(" "+e+" ")>=0}function c(t,e){var n=f(t),r=n+e;u(n,e)||(t.className=r.substring(1))}function l(t,e){var n,r=f(t);u(t,e)&&(n=r.replace(" "+e+" "," "),t.className=n.substring(1,n.length-1))}function f(t){return(" "+(t.className||"")+" ").replace(/\s+/gi," ")}function p(t){t&&t.parentNode&&t.parentNode.removeChild(t)}return n})?r.call(e,n,e,t):r)||(t.exports=o)},function(t,e,n){var r=n(24),o=Function.prototype.call;t.exports=r?o.bind(o):function(){return o.apply(o,arguments)}},function(t,e,n){var r=n(3);t.exports=!r((function(){var t=function(){}.bind();return"function"!=typeof t||t.hasOwnProperty("prototype")}))},function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e,n){var r=n(43),o=n(44);t.exports=function(t){return r(o(t))}},function(t,e,n){var r=n(2),o=r({}.toString),i=r("".slice);t.exports=function(t){return i(o(t),8,-1)}},function(t,e,n){var r=n(1),o=n(53),i=n(7),a=n(56),s=n(50),u=n(49),c=o("wks"),l=r.Symbol,f=l&&l.for,p=u?l:l&&l.withoutSetter||a;t.exports=function(t){if(!i(c,t)||!s&&"string"!=typeof c[t]){var e="Symbol."+t;s&&i(l,t)?c[t]=l[t]:c[t]=u&&f?f(e):p(e)}return c[t]}},function(t,e,n){var r=n(1),o=n(30),i=r["__core-js_shared__"]||o("__core-js_shared__",{});t.exports=i},function(t,e,n){var r=n(1),o=Object.defineProperty;t.exports=function(t,e){try{o(r,t,{value:e,configurable:!0,writable:!0})}catch(n){r[t]=e}return e}},function(t,e,n){var r=n(8),o=String,i=TypeError;t.exports=function(t){if(r(t))return t;throw i(o(t)+" is not an object")}},function(t,e,n){var r=n(136),o=n(10),i=Object.prototype,a=i.hasOwnProperty,s=i.propertyIsEnumerable,u=r(function(){return arguments}())?r:function(t){return o(t)&&a.call(t,"callee")&&!s.call(t,"callee")};t.exports=u},function(t,e,n){var r=n(9)(n(5),"Map");t.exports=r},function(t,e){t.exports=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}},function(t,e,n){var r=n(156),o=n(163),i=n(165),a=n(166),s=n(167);function u(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e-1&&t%1==0&&t<=9007199254740991}},function(t,e,n){var r=n(4),o=n(39),i=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,a=/^\w*$/;t.exports=function(t,e){if(r(t))return!1;var n=typeof t;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=t&&!o(t))||(a.test(t)||!i.test(t)||null!=e&&t in Object(e))}},function(t,e,n){var r=n(11),o=n(10);t.exports=function(t){return"symbol"==typeof t||o(t)&&"[object Symbol]"==r(t)}},function(t,e){t.exports=function(t){return t}},function(t,e,n){var r=n(1),o=n(42).f,i=n(15),a=n(101),s=n(30),u=n(59),c=n(117);t.exports=function(t,e){var n,l,f,p,d,h=t.target,v=t.global,m=t.stat;if(n=v?r:m?r[h]||s(h,{}):(r[h]||{}).prototype)for(l in e){if(p=e[l],f=t.dontCallGetSet?(d=o(n,l))&&d.value:n[l],!c(v?l:h+(m?".":"#")+l,t.forced)&&void 0!==f){if(typeof p==typeof f)continue;u(p,f)}(t.sham||f&&f.sham)&&i(p,"sham",!0),a(n,l,p,t)}}},function(t,e,n){var r=n(6),o=n(23),i=n(93),a=n(25),s=n(26),u=n(46),c=n(7),l=n(57),f=Object.getOwnPropertyDescriptor;e.f=r?f:function(t,e){if(t=s(t),e=u(e),l)try{return f(t,e)}catch(t){}if(c(t,e))return a(!o(i.f,t,e),t[e])}},function(t,e,n){var r=n(2),o=n(3),i=n(27),a=Object,s=r("".split);t.exports=o((function(){return!a("z").propertyIsEnumerable(0)}))?function(t){return"String"==i(t)?s(t,""):a(t)}:a},function(t,e,n){var r=n(45),o=TypeError;t.exports=function(t){if(r(t))throw o("Can't call method on "+t);return t}},function(t,e){t.exports=function(t){return null==t}},function(t,e,n){var r=n(94),o=n(47);t.exports=function(t){var e=r(t,"string");return o(e)?e:e+""}},function(t,e,n){var r=n(14),o=n(0),i=n(48),a=n(49),s=Object;t.exports=a?function(t){return"symbol"==typeof t}:function(t){var e=r("Symbol");return o(e)&&i(e.prototype,s(t))}},function(t,e,n){var r=n(2);t.exports=r({}.isPrototypeOf)},function(t,e,n){var r=n(50);t.exports=r&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},function(t,e,n){var r=n(51),o=n(3);t.exports=!!Object.getOwnPropertySymbols&&!o((function(){var t=Symbol();return!String(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&r&&r<41}))},function(t,e,n){var r,o,i=n(1),a=n(95),s=i.process,u=i.Deno,c=s&&s.versions||u&&u.version,l=c&&c.v8;l&&(o=(r=l.split("."))[0]>0&&r[0]<4?1:+(r[0]+r[1])),!o&&a&&(!(r=a.match(/Edge\/(\d+)/))||r[1]>=74)&&(r=a.match(/Chrome\/(\d+)/))&&(o=+r[1]),t.exports=o},function(t,e,n){var r=n(0),o=n(97),i=TypeError;t.exports=function(t){if(r(t))return t;throw i(o(t)+" is not a function")}},function(t,e,n){var r=n(54),o=n(29);(t.exports=function(t,e){return o[t]||(o[t]=void 0!==e?e:{})})("versions",[]).push({version:"3.25.1",mode:r?"pure":"global",copyright:"© 2014-2022 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.25.1/LICENSE",source:"https://github.com/zloirock/core-js"})},function(t,e){t.exports=!1},function(t,e,n){var r=n(44),o=Object;t.exports=function(t){return o(r(t))}},function(t,e,n){var r=n(2),o=0,i=Math.random(),a=r(1..toString);t.exports=function(t){return"Symbol("+(void 0===t?"":t)+")_"+a(++o+i,36)}},function(t,e,n){var r=n(6),o=n(3),i=n(99);t.exports=!r&&!o((function(){return 7!=Object.defineProperty(i("div"),"a",{get:function(){return 7}}).a}))},function(t,e){t.exports={}},function(t,e,n){var r=n(7),o=n(108),i=n(42),a=n(16);t.exports=function(t,e,n){for(var s=o(e),u=a.f,c=i.f,l=0;ll))return!1;var p=u.get(t),d=u.get(e);if(p&&d)return p==e&&d==t;var h=-1,v=!0,m=2&n?new r:void 0;for(u.set(t,e),u.set(e,t);++h-1&&t%1==0&&t=0&&Math.floor(e)===e&&isFinite(t)}function v(t){return a(t)&&"function"==typeof t.then&&"function"==typeof t.catch}function m(t){return null==t?"":Array.isArray(t)||p(t)&&t.toString===f?JSON.stringify(t,null,2):String(t)}function g(t){var e=parseFloat(t);return isNaN(e)?t:e}function y(t,e){for(var n=Object.create(null),r=t.split(","),o=0;o-1)return t.splice(n,1)}}var x=Object.prototype.hasOwnProperty;function w(t,e){return x.call(t,e)}function k(t){var e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}var O=/-(\w)/g,$=k((function(t){return t.replace(O,(function(t,e){return e?e.toUpperCase():""}))})),C=k((function(t){return t.charAt(0).toUpperCase()+t.slice(1)})),j=/\B([A-Z])/g,S=k((function(t){return t.replace(j,"-$1").toLowerCase()}));var E=Function.prototype.bind?function(t,e){return t.bind(e)}:function(t,e){function n(n){var r=arguments.length;return r?r>1?t.apply(e,arguments):t.call(e,n):t.call(e)}return n._length=t.length,n};function P(t,e){e=e||0;for(var n=t.length-e,r=new Array(n);n--;)r[n]=t[n+e];return r}function A(t,e){for(var n in e)t[n]=e[n];return t}function T(t){for(var e={},n=0;n0,Q=J&&J.indexOf("edge/")>0;J&&J.indexOf("android");var Z=J&&/iphone|ipad|ipod|ios/.test(J);J&&/chrome\/\d+/.test(J),J&&/phantomjs/.test(J);var tt,et=J&&J.match(/firefox\/(\d+)/),nt={}.watch,rt=!1;if(G)try{var ot={};Object.defineProperty(ot,"passive",{get:function(){rt=!0}}),window.addEventListener("test-passive",null,ot)}catch(t){}var it=function(){return void 0===tt&&(tt=!G&&"undefined"!=typeof global&&(global.process&&"server"===global.process.env.VUE_ENV)),tt},at=G&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function st(t){return"function"==typeof t&&/native code/.test(t.toString())}var ut,ct="undefined"!=typeof Symbol&&st(Symbol)&&"undefined"!=typeof Reflect&&st(Reflect.ownKeys);ut="undefined"!=typeof Set&&st(Set)?Set:function(){function t(){this.set=Object.create(null)}return t.prototype.has=function(t){return!0===this.set[t]},t.prototype.add=function(t){this.set[t]=!0},t.prototype.clear=function(){this.set=Object.create(null)},t}();var lt=null;function ft(t){void 0===t&&(t=null),t||lt&<._scope.off(),lt=t,t&&t._scope.on()}var pt=function(){function t(t,e,n,r,o,i,a,s){this.tag=t,this.data=e,this.children=n,this.text=r,this.elm=o,this.ns=void 0,this.context=i,this.fnContext=void 0,this.fnOptions=void 0,this.fnScopeId=void 0,this.key=e&&e.key,this.componentOptions=a,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=s,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1}return Object.defineProperty(t.prototype,"child",{get:function(){return this.componentInstance},enumerable:!1,configurable:!0}),t}(),dt=function(t){void 0===t&&(t="");var e=new pt;return e.text=t,e.isComment=!0,e};function ht(t){return new pt(void 0,void 0,void 0,String(t))}function vt(t){var e=new pt(t.tag,t.data,t.children&&t.children.slice(),t.text,t.elm,t.context,t.componentOptions,t.asyncFactory);return e.ns=t.ns,e.isStatic=t.isStatic,e.key=t.key,e.isComment=t.isComment,e.fnContext=t.fnContext,e.fnOptions=t.fnOptions,e.fnScopeId=t.fnScopeId,e.asyncMeta=t.asyncMeta,e.isCloned=!0,e}var mt=0,gt=function(){function t(){this.id=mt++,this.subs=[]}return t.prototype.addSub=function(t){this.subs.push(t)},t.prototype.removeSub=function(t){_(this.subs,t)},t.prototype.depend=function(e){t.target&&t.target.addDep(this)},t.prototype.notify=function(t){var e=this.subs.slice();for(var n=0,r=e.length;n0&&(Gt((c=t(c,"".concat(n||"","_").concat(r)))[0])&&Gt(f)&&(p[l]=ht(f.text+c[0].text),c.shift()),p.push.apply(p,c)):u(c)?Gt(f)?p[l]=ht(f.text+c):""!==c&&p.push(ht(c)):Gt(c)&&Gt(f)?p[l]=ht(f.text+c.text):(s(e._isVList)&&a(c.tag)&&i(c.key)&&a(n)&&(c.key="__vlist".concat(n,"_").concat(r,"__")),p.push(c)));return p}(t):void 0}function Gt(t){return a(t)&&a(t.text)&&!1===t.isComment}function Jt(t,e){var n,r,i,s,u=null;if(o(t)||"string"==typeof t)for(u=new Array(t.length),n=0,r=t.length;n0,s=e?!!e.$stable:!a,u=e&&e.$key;if(e){if(e._normalized)return e._normalized;if(s&&o&&o!==r&&u===o.$key&&!a&&!o.$hasNormal)return o;for(var c in i={},e)e[c]&&"$"!==c[0]&&(i[c]=he(t,n,c,e[c]))}else i={};for(var l in n)l in i||(i[l]=ve(n,l));return e&&Object.isExtensible(e)&&(e._normalized=i),H(i,"$stable",s),H(i,"$key",u),H(i,"$hasNormal",a),i}function he(t,e,n,r){var i=function(){var e=lt;ft(t);var n=arguments.length?r.apply(null,arguments):r({}),i=(n=n&&"object"==typeof n&&!o(n)?[n]:Kt(n))&&n[0];return ft(e),n&&(!i||1===n.length&&i.isComment&&!pe(i))?void 0:n};return r.proxy&&Object.defineProperty(e,n,{get:i,enumerable:!0,configurable:!0}),i}function ve(t,e){return function(){return t[e]}}function me(t){return{get attrs(){if(!t._attrsProxy){var e=t._attrsProxy={};H(e,"_v_attr_proxy",!0),ge(e,t.$attrs,r,t,"$attrs")}return t._attrsProxy},get listeners(){t._listenersProxy||ge(t._listenersProxy={},t.$listeners,r,t,"$listeners");return t._listenersProxy},get slots(){return function(t){t._slotsProxy||be(t._slotsProxy={},t.$scopedSlots);return t._slotsProxy}(t)},emit:E(t.$emit,t),expose:function(e){e&&Object.keys(e).forEach((function(n){return Nt(t,e,n)}))}}}function ge(t,e,n,r,o){var i=!1;for(var a in e)a in t?e[a]!==n[a]&&(i=!0):(i=!0,ye(t,a,r,o));for(var a in t)a in e||(i=!0,delete t[a]);return i}function ye(t,e,n,r){Object.defineProperty(t,e,{enumerable:!0,configurable:!0,get:function(){return n[r][e]}})}function be(t,e){for(var n in e)t[n]=e[n];for(var n in t)n in e||delete t[n]}var _e=null;function xe(t,e){return(t.__esModule||ct&&"Module"===t[Symbol.toStringTag])&&(t=t.default),l(t)?e.extend(t):t}function we(t){if(o(t))for(var e=0;edocument.createEvent("Event").timeStamp&&(sn=function(){return un.now()})}var cn=function(t,e){if(t.post){if(!e.post)return 1}else if(e.post)return-1;return t.id-e.id};function ln(){var t,e;for(an=sn(),rn=!0,Ze.sort(cn),on=0;onon&&Ze[n].id>t.id;)n--;Ze.splice(n+1,0,t)}else Ze.push(t);nn||(nn=!0,De(ln))}}function pn(t,e){if(t){for(var n=Object.create(null),r=ct?Reflect.ownKeys(t):Object.keys(t),o=0;o-1)if(i&&!w(o,"default"))a=!1;else if(""===a||a===S(t)){var u=Rn(String,o.type);(u<0||s-1:"string"==typeof t?t.split(",").indexOf(e)>-1:!!d(t)&&t.test(e)}function Jn(t,e){var n=t.cache,r=t.keys,o=t._vnode;for(var i in n){var a=n[i];if(a){var s=a.name;s&&!e(s)&&Xn(n,i,r,o)}}}function Xn(t,e,n,r){var o=t[e];!o||r&&o.tag===r.tag||o.componentInstance.$destroy(),t[e]=null,_(n,e)}Hn.prototype._init=function(t){var e=this;e._uid=qn++,e._isVue=!0,e.__v_skip=!0,e._scope=new Ft(!0),e._scope._vm=!0,t&&t._isComponent?function(t,e){var n=t.$options=Object.create(t.constructor.options),r=e._parentVnode;n.parent=e.parent,n._parentVnode=r;var o=r.componentOptions;n.propsData=o.propsData,n._parentListeners=o.listeners,n._renderChildren=o.children,n._componentTag=o.tag,e.render&&(n.render=e.render,n.staticRenderFns=e.staticRenderFns)}(e,t):e.$options=Sn(Vn(e.constructor),t||{},e),e._renderProxy=e,e._self=e,function(t){var e=t.$options,n=e.parent;if(n&&!e.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(t)}t.$parent=n,t.$root=n?n.$root:t,t.$children=[],t.$refs={},t._provided=n?n._provided:Object.create(null),t._watcher=null,t._inactive=null,t._directInactive=!1,t._isMounted=!1,t._isDestroyed=!1,t._isBeingDestroyed=!1}(e),function(t){t._events=Object.create(null),t._hasHookEvent=!1;var e=t.$options._parentListeners;e&&Ke(t,e)}(e),function(t){t._vnode=null,t._staticTrees=null;var e=t.$options,n=t.$vnode=e._parentVnode,o=n&&n.context;t.$slots=le(e._renderChildren,o),t.$scopedSlots=n?de(t.$parent,n.data.scopedSlots,t.$slots):r,t._c=function(e,n,r,o){return ke(t,e,n,r,o,!1)},t.$createElement=function(e,n,r,o){return ke(t,e,n,r,o,!0)};var i=n&&n.data;Pt(t,"$attrs",i&&i.attrs||r,null,!0),Pt(t,"$listeners",e._parentListeners||r,null,!0)}(e),Qe(e,"beforeCreate",void 0,!1),function(t){var e=pn(t.$options.inject,t);e&&(Ct(!1),Object.keys(e).forEach((function(n){Pt(t,n,e[n])})),Ct(!0))}(e),Dn(e),function(t){var e=t.$options.provide;if(e){var n=c(e)?e.call(t):e;if(!l(n))return;for(var r=zt(t),o=ct?Reflect.ownKeys(n):Object.keys(n),i=0;i1?P(n):n;for(var r=P(arguments,1),o='event handler for "'.concat(t,'"'),i=0,a=n.length;iparseInt(this.max)&&Xn(t,e[0],e,this._vnode),this.vnodeToCache=null}}},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var t in this.cache)Xn(this.cache,t,this.keys)},mounted:function(){var t=this;this.cacheVNode(),this.$watch("include",(function(e){Jn(t,(function(t){return Gn(e,t)}))})),this.$watch("exclude",(function(e){Jn(t,(function(t){return!Gn(e,t)}))}))},updated:function(){this.cacheVNode()},render:function(){var t=this.$slots.default,e=we(t),n=e&&e.componentOptions;if(n){var r=Kn(n),o=this.include,i=this.exclude;if(o&&(!r||!Gn(o,r))||i&&r&&Gn(i,r))return e;var a=this.cache,s=this.keys,u=null==e.key?n.Ctor.cid+(n.tag?"::".concat(n.tag):""):e.key;a[u]?(e.componentInstance=a[u].componentInstance,_(s,u),s.push(u)):(this.vnodeToCache=e,this.keyToCache=u),e.data.keepAlive=!0}return e||t&&t[0]}}};!function(t){var e={get:function(){return B}};Object.defineProperty(t,"config",e),t.util={warn:xn,extend:A,mergeOptions:Sn,defineReactive:Pt},t.set=At,t.delete=Tt,t.nextTick=De,t.observable=function(t){return Et(t),t},t.options=Object.create(null),F.forEach((function(e){t.options[e+"s"]=Object.create(null)})),t.options._base=t,A(t.options.components,Qn),function(t){t.use=function(t){var e=this._installedPlugins||(this._installedPlugins=[]);if(e.indexOf(t)>-1)return this;var n=P(arguments,1);return n.unshift(this),c(t.install)?t.install.apply(t,n):c(t)&&t.apply(null,n),e.push(t),this}}(t),function(t){t.mixin=function(t){return this.options=Sn(this.options,t),this}}(t),Wn(t),function(t){F.forEach((function(e){t[e]=function(t,n){return n?("component"===e&&p(n)&&(n.name=n.name||t,n=this.options._base.extend(n)),"directive"===e&&c(n)&&(n={bind:n,update:n}),this.options[e+"s"][t]=n,n):this.options[e+"s"][t]}}))}(t)}(Hn),Object.defineProperty(Hn.prototype,"$isServer",{get:it}),Object.defineProperty(Hn.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(Hn,"FunctionalRenderContext",{value:dn}),Hn.version="2.7.10";var Zn=y("style,class"),tr=y("input,textarea,option,select,progress"),er=y("contenteditable,draggable,spellcheck"),nr=y("events,caret,typing,plaintext-only"),rr=y("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible"),or="http://www.w3.org/1999/xlink",ir=function(t){return":"===t.charAt(5)&&"xlink"===t.slice(0,5)},ar=function(t){return ir(t)?t.slice(6,t.length):""},sr=function(t){return null==t||!1===t};function ur(t){for(var e=t.data,n=t,r=t;a(r.componentInstance);)(r=r.componentInstance._vnode)&&r.data&&(e=cr(r.data,e));for(;a(n=n.parent);)n&&n.data&&(e=cr(e,n.data));return function(t,e){if(a(t)||a(e))return lr(t,fr(e));return""}(e.staticClass,e.class)}function cr(t,e){return{staticClass:lr(t.staticClass,e.staticClass),class:a(t.class)?[t.class,e.class]:e.class}}function lr(t,e){return t?e?t+" "+e:t:e||""}function fr(t){return Array.isArray(t)?function(t){for(var e,n="",r=0,o=t.length;r-1?Mr(t,e,n):rr(e)?sr(n)?t.removeAttribute(e):(n="allowfullscreen"===e&&"EMBED"===t.tagName?"true":e,t.setAttribute(e,n)):er(e)?t.setAttribute(e,function(t,e){return sr(e)||"false"===e?"false":"contenteditable"===t&&nr(e)?e:"true"}(e,n)):ir(e)?sr(n)?t.removeAttributeNS(or,ar(e)):t.setAttributeNS(or,e,n):Mr(t,e,n)}function Mr(t,e,n){if(sr(n))t.removeAttribute(e);else{if(X&&!Y&&"TEXTAREA"===t.tagName&&"placeholder"===e&&""!==n&&!t.__ieph){var r=function(e){e.stopImmediatePropagation(),t.removeEventListener("input",r)};t.addEventListener("input",r),t.__ieph=!0}t.setAttribute(e,n)}}var Ir={create:Lr,update:Lr};function Dr(t,e){var n=e.elm,r=e.data,o=t.data;if(!(i(r.staticClass)&&i(r.class)&&(i(o)||i(o.staticClass)&&i(o.class)))){var s=ur(e),u=n._transitionClasses;a(u)&&(s=lr(s,fr(u))),s!==n._prevClass&&(n.setAttribute("class",s),n._prevClass=s)}}var Nr,Ur={create:Dr,update:Dr};function Fr(t,e,n){var r=Nr;return function o(){var i=e.apply(null,arguments);null!==i&&qr(t,o,n,r)}}var zr=Ee&&!(et&&Number(et[1])<=53);function Br(t,e,n,r){if(zr){var o=an,i=e;e=i._wrapper=function(t){if(t.target===t.currentTarget||t.timeStamp>=o||t.timeStamp<=0||t.target.ownerDocument!==document)return i.apply(this,arguments)}}Nr.addEventListener(t,e,rt?{capture:n,passive:r}:n)}function qr(t,e,n,r){(r||Nr).removeEventListener(t,e._wrapper||e,n)}function Vr(t,e){if(!i(t.data.on)||!i(e.data.on)){var n=e.data.on||{},r=t.data.on||{};Nr=e.elm||t.elm,function(t){if(a(t.__r)){var e=X?"change":"input";t[e]=[].concat(t.__r,t[e]||[]),delete t.__r}a(t.__c)&&(t.change=[].concat(t.__c,t.change||[]),delete t.__c)}(n),Vt(n,r,Br,qr,Fr,e.context),Nr=void 0}}var Hr,Wr={create:Vr,update:Vr,destroy:function(t){return Vr(t,wr)}};function Kr(t,e){if(!i(t.data.domProps)||!i(e.data.domProps)){var n,r,o=e.elm,u=t.data.domProps||{},c=e.data.domProps||{};for(n in(a(c.__ob__)||s(c._v_attr_proxy))&&(c=e.data.domProps=A({},c)),u)n in c||(o[n]="");for(n in c){if(r=c[n],"textContent"===n||"innerHTML"===n){if(e.children&&(e.children.length=0),r===u[n])continue;1===o.childNodes.length&&o.removeChild(o.childNodes[0])}if("value"===n&&"PROGRESS"!==o.tagName){o._value=r;var l=i(r)?"":String(r);Gr(o,l)&&(o.value=l)}else if("innerHTML"===n&&hr(o.tagName)&&i(o.innerHTML)){(Hr=Hr||document.createElement("div")).innerHTML="".concat(r,"");for(var f=Hr.firstChild;o.firstChild;)o.removeChild(o.firstChild);for(;f.firstChild;)o.appendChild(f.firstChild)}else if(r!==u[n])try{o[n]=r}catch(t){}}}}function Gr(t,e){return!t.composing&&("OPTION"===t.tagName||function(t,e){var n=!0;try{n=document.activeElement!==t}catch(t){}return n&&t.value!==e}(t,e)||function(t,e){var n=t.value,r=t._vModifiers;if(a(r)){if(r.number)return g(n)!==g(e);if(r.trim)return n.trim()!==e.trim()}return n!==e}(t,e))}var Jr={create:Kr,update:Kr},Xr=k((function(t){var e={},n=/:(.+)/;return t.split(/;(?![^(]*\))/g).forEach((function(t){if(t){var r=t.split(n);r.length>1&&(e[r[0].trim()]=r[1].trim())}})),e}));function Yr(t){var e=Qr(t.style);return t.staticStyle?A(t.staticStyle,e):e}function Qr(t){return Array.isArray(t)?T(t):"string"==typeof t?Xr(t):t}var Zr,to=/^--/,eo=/\s*!important$/,no=function(t,e,n){if(to.test(e))t.style.setProperty(e,n);else if(eo.test(n))t.style.setProperty(S(e),n.replace(eo,""),"important");else{var r=oo(e);if(Array.isArray(n))for(var o=0,i=n.length;o-1?e.split(so).forEach((function(e){return t.classList.add(e)})):t.classList.add(e);else{var n=" ".concat(t.getAttribute("class")||""," ");n.indexOf(" "+e+" ")<0&&t.setAttribute("class",(n+e).trim())}}function co(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(so).forEach((function(e){return t.classList.remove(e)})):t.classList.remove(e),t.classList.length||t.removeAttribute("class");else{for(var n=" ".concat(t.getAttribute("class")||""," "),r=" "+e+" ";n.indexOf(r)>=0;)n=n.replace(r," ");(n=n.trim())?t.setAttribute("class",n):t.removeAttribute("class")}}function lo(t){if(t){if("object"==typeof t){var e={};return!1!==t.css&&A(e,fo(t.name||"v")),A(e,t),e}return"string"==typeof t?fo(t):void 0}}var fo=k((function(t){return{enterClass:"".concat(t,"-enter"),enterToClass:"".concat(t,"-enter-to"),enterActiveClass:"".concat(t,"-enter-active"),leaveClass:"".concat(t,"-leave"),leaveToClass:"".concat(t,"-leave-to"),leaveActiveClass:"".concat(t,"-leave-active")}})),po=G&&!Y,ho="transition",vo="transitionend",mo="animation",go="animationend";po&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(ho="WebkitTransition",vo="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(mo="WebkitAnimation",go="webkitAnimationEnd"));var yo=G?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(t){return t()};function bo(t){yo((function(){yo(t)}))}function _o(t,e){var n=t._transitionClasses||(t._transitionClasses=[]);n.indexOf(e)<0&&(n.push(e),uo(t,e))}function xo(t,e){t._transitionClasses&&_(t._transitionClasses,e),co(t,e)}function wo(t,e,n){var r=Oo(t,e),o=r.type,i=r.timeout,a=r.propCount;if(!o)return n();var s="transition"===o?vo:go,u=0,c=function(){t.removeEventListener(s,l),n()},l=function(e){e.target===t&&++u>=a&&c()};setTimeout((function(){u0&&(n="transition",l=a,f=i.length):"animation"===e?c>0&&(n="animation",l=c,f=u.length):f=(n=(l=Math.max(a,c))>0?a>c?"transition":"animation":null)?"transition"===n?i.length:u.length:0,{type:n,timeout:l,propCount:f,hasTransform:"transition"===n&&ko.test(r[ho+"Property"])}}function $o(t,e){for(;t.length1}function Ao(t,e){!0!==e.data.show&&jo(e)}var To=function(t){var e,n,r={},c=t.modules,l=t.nodeOps;for(e=0;eh?_(t,i(n[g+1])?null:n[g+1].elm,n,d,g,r):d>g&&w(e,f,h)}(f,v,g,n,c):a(g)?(a(t.text)&&l.setTextContent(f,""),_(f,null,g,0,g.length-1,n)):a(v)?w(v,0,v.length-1):a(t.text)&&l.setTextContent(f,""):t.text!==e.text&&l.setTextContent(f,e.text),a(h)&&a(d=h.hook)&&a(d=d.postpatch)&&d(t,e)}}}function C(t,e,n){if(s(n)&&a(t.parent))t.parent.data.pendingInsert=e;else for(var r=0;r-1,a.selected!==i&&(a.selected=i);else if(I(Do(a),r))return void(t.selectedIndex!==s&&(t.selectedIndex=s));o||(t.selectedIndex=-1)}}function Io(t,e){return e.every((function(e){return!I(e,t)}))}function Do(t){return"_value"in t?t._value:t.value}function No(t){t.target.composing=!0}function Uo(t){t.target.composing&&(t.target.composing=!1,Fo(t.target,"input"))}function Fo(t,e){var n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!0),t.dispatchEvent(n)}function zo(t){return!t.componentInstance||t.data&&t.data.transition?t:zo(t.componentInstance._vnode)}var Bo={model:Lo,show:{bind:function(t,e,n){var r=e.value,o=(n=zo(n)).data&&n.data.transition,i=t.__vOriginalDisplay="none"===t.style.display?"":t.style.display;r&&o?(n.data.show=!0,jo(n,(function(){t.style.display=i}))):t.style.display=r?i:"none"},update:function(t,e,n){var r=e.value;!r!=!e.oldValue&&((n=zo(n)).data&&n.data.transition?(n.data.show=!0,r?jo(n,(function(){t.style.display=t.__vOriginalDisplay})):So(n,(function(){t.style.display="none"}))):t.style.display=r?t.__vOriginalDisplay:"none")},unbind:function(t,e,n,r,o){o||(t.style.display=t.__vOriginalDisplay)}}},qo={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function Vo(t){var e=t&&t.componentOptions;return e&&e.Ctor.options.abstract?Vo(we(e.children)):t}function Ho(t){var e={},n=t.$options;for(var r in n.propsData)e[r]=t[r];var o=n._parentListeners;for(var r in o)e[$(r)]=o[r];return e}function Wo(t,e){if(/\d-keep-alive$/.test(e.tag))return t("keep-alive",{props:e.componentOptions.propsData})}var Ko=function(t){return t.tag||pe(t)},Go=function(t){return"show"===t.name},Jo={name:"transition",props:qo,abstract:!0,render:function(t){var e=this,n=this.$slots.default;if(n&&(n=n.filter(Ko)).length){0;var r=this.mode;0;var o=n[0];if(function(t){for(;t=t.parent;)if(t.data.transition)return!0}(this.$vnode))return o;var i=Vo(o);if(!i)return o;if(this._leaving)return Wo(t,o);var a="__transition-".concat(this._uid,"-");i.key=null==i.key?i.isComment?a+"comment":a+i.tag:u(i.key)?0===String(i.key).indexOf(a)?i.key:a+i.key:i.key;var s=(i.data||(i.data={})).transition=Ho(this),c=this._vnode,l=Vo(c);if(i.data.directives&&i.data.directives.some(Go)&&(i.data.show=!0),l&&l.data&&!function(t,e){return e.key===t.key&&e.tag===t.tag}(i,l)&&!pe(l)&&(!l.componentInstance||!l.componentInstance._vnode.isComment)){var f=l.data.transition=A({},s);if("out-in"===r)return this._leaving=!0,Ht(f,"afterLeave",(function(){e._leaving=!1,e.$forceUpdate()})),Wo(t,o);if("in-out"===r){if(pe(i))return c;var p,d=function(){p()};Ht(s,"afterEnter",d),Ht(s,"enterCancelled",d),Ht(f,"delayLeave",(function(t){p=t}))}}return o}}},Xo=A({tag:String,moveClass:String},qo);function Yo(t){t.elm._moveCb&&t.elm._moveCb(),t.elm._enterCb&&t.elm._enterCb()}function Qo(t){t.data.newPos=t.elm.getBoundingClientRect()}function Zo(t){var e=t.data.pos,n=t.data.newPos,r=e.left-n.left,o=e.top-n.top;if(r||o){t.data.moved=!0;var i=t.elm.style;i.transform=i.WebkitTransform="translate(".concat(r,"px,").concat(o,"px)"),i.transitionDuration="0s"}}delete Xo.mode;var ti={Transition:Jo,TransitionGroup:{props:Xo,beforeMount:function(){var t=this,e=this._update;this._update=function(n,r){var o=Je(t);t.__patch__(t._vnode,t.kept,!1,!0),t._vnode=t.kept,o(),e.call(t,n,r)}},render:function(t){for(var e=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),r=this.prevChildren=this.children,o=this.$slots.default||[],i=this.children=[],a=Ho(this),s=0;s-1?mr[t]=e.constructor===window.HTMLUnknownElement||e.constructor===window.HTMLElement:mr[t]=/HTMLUnknownElement/.test(e.toString())},A(Hn.options.directives,Bo),A(Hn.options.components,ti),Hn.prototype.__patch__=G?To:L,Hn.prototype.$mount=function(t,e){return function(t,e,n){var r;t.$el=e,t.$options.render||(t.$options.render=dt),Qe(t,"beforeMount"),r=function(){t._update(t._render(),n)},new qe(t,r,L,{before:function(){t._isMounted&&!t._isDestroyed&&Qe(t,"beforeUpdate")}},!0),n=!1;var o=t._preWatchers;if(o)for(var i=0;i=0&&(e=t.slice(r),t=t.slice(0,r));var o=t.indexOf("?");return o>=0&&(n=t.slice(o+1),t=t.slice(0,o)),{path:t,query:n,hash:e}}(o.path||""),c=e&&e.path||"/",l=u.path?xi(u.path,c,n||o.append):c,f=function(t,e,n){void 0===e&&(e={});var r,o=n||ui;try{r=o(t||"")}catch(t){r={}}for(var i in e){var a=e[i];r[i]=Array.isArray(a)?a.map(si):si(a)}return r}(u.query,o.query,r&&r.options.parseQuery),p=o.hash||u.hash;return p&&"#"!==p.charAt(0)&&(p="#"+p),{_normalized:!0,path:l,query:f,hash:p}}var Bi,qi=function(){},Vi={name:"RouterLink",props:{to:{type:[String,Object],required:!0},tag:{type:String,default:"a"},custom:Boolean,exact:Boolean,exactPath:Boolean,append:Boolean,replace:Boolean,activeClass:String,exactActiveClass:String,ariaCurrentValue:{type:String,default:"page"},event:{type:[String,Array],default:"click"}},render:function(t){var e=this,n=this.$router,r=this.$route,o=n.resolve(this.to,r,this.append),i=o.location,a=o.route,s=o.href,u={},c=n.options.linkActiveClass,l=n.options.linkExactActiveClass,f=null==c?"router-link-active":c,p=null==l?"router-link-exact-active":l,d=null==this.activeClass?f:this.activeClass,h=null==this.exactActiveClass?p:this.exactActiveClass,v=a.redirectedFrom?fi(null,zi(a.redirectedFrom),null,n):a;u[h]=mi(r,v,this.exactPath),u[d]=this.exact||this.exactPath?u[h]:function(t,e){return 0===t.path.replace(li,"/").indexOf(e.path.replace(li,"/"))&&(!e.hash||t.hash===e.hash)&&function(t,e){for(var n in e)if(!(n in t))return!1;return!0}(t.query,e.query)}(r,v);var m=u[h]?this.ariaCurrentValue:null,g=function(t){Hi(t)&&(e.replace?n.replace(i,qi):n.push(i,qi))},y={click:Hi};Array.isArray(this.event)?this.event.forEach((function(t){y[t]=g})):y[this.event]=g;var b={class:u},_=!this.$scopedSlots.$hasNormal&&this.$scopedSlots.default&&this.$scopedSlots.default({href:s,route:a,navigate:g,isActive:u[d],isExactActive:u[h]});if(_){if(1===_.length)return _[0];if(_.length>1||!_.length)return 0===_.length?t():t("span",{},_)}if("a"===this.tag)b.on=y,b.attrs={href:s,"aria-current":m};else{var x=function t(e){var n;if(e)for(var r=0;r-1&&(s.params[p]=n.params[p]);return s.path=Fi(l.path,s.params),u(l,s,a)}if(s.path){s.params={};for(var d=0;d-1}function wa(t,e){return xa(t)&&t._isRouter&&(null==e||t.type===e)}function ka(t,e,n){var r=function(o){o>=t.length?n():t[o]?e(t[o],(function(){r(o+1)})):r(o+1)};r(0)}function Oa(t){return function(e,n,r){var o=!1,i=0,a=null;$a(t,(function(t,e,n,s){if("function"==typeof t&&void 0===t.cid){o=!0,i++;var u,c=Sa((function(e){var o;((o=e).__esModule||ja&&"Module"===o[Symbol.toStringTag])&&(e=e.default),t.resolved="function"==typeof e?e:Bi.extend(e),n.components[s]=e,--i<=0&&r()})),l=Sa((function(t){var e="Failed to resolve async component "+s+": "+t;a||(a=xa(t)?t:new Error(e),r(a))}));try{u=t(c,l)}catch(t){l(t)}if(u)if("function"==typeof u.then)u.then(c,l);else{var f=u.component;f&&"function"==typeof f.then&&f.then(c,l)}}})),o||r()}}function $a(t,e){return Ca(t.map((function(t){return Object.keys(t.components).map((function(n){return e(t.components[n],t.instances[n],t,n)}))})))}function Ca(t){return Array.prototype.concat.apply([],t)}var ja="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;function Sa(t){var e=!1;return function(){for(var n=[],r=arguments.length;r--;)n[r]=arguments[r];if(!e)return e=!0,t.apply(this,n)}}var Ea=function(t,e){this.router=t,this.base=function(t){if(!t)if(Wi){var e=document.querySelector("base");t=(t=e&&e.getAttribute("href")||"/").replace(/^https?:\/\/[^\/]+/,"")}else t="/";"/"!==t.charAt(0)&&(t="/"+t);return t.replace(/\/$/,"")}(e),this.current=di,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[],this.listeners=[]};function Pa(t,e,n,r){var o=$a(t,(function(t,r,o,i){var a=function(t,e){"function"!=typeof t&&(t=Bi.extend(t));return t.options[e]}(t,e);if(a)return Array.isArray(a)?a.map((function(t){return n(t,r,o,i)})):n(a,r,o,i)}));return Ca(r?o.reverse():o)}function Aa(t,e){if(e)return function(){return t.apply(e,arguments)}}Ea.prototype.listen=function(t){this.cb=t},Ea.prototype.onReady=function(t,e){this.ready?t():(this.readyCbs.push(t),e&&this.readyErrorCbs.push(e))},Ea.prototype.onError=function(t){this.errorCbs.push(t)},Ea.prototype.transitionTo=function(t,e,n){var r,o=this;try{r=this.router.match(t,this.current)}catch(t){throw this.errorCbs.forEach((function(e){e(t)})),t}var i=this.current;this.confirmTransition(r,(function(){o.updateRoute(r),e&&e(r),o.ensureURL(),o.router.afterHooks.forEach((function(t){t&&t(r,i)})),o.ready||(o.ready=!0,o.readyCbs.forEach((function(t){t(r)})))}),(function(t){n&&n(t),t&&!o.ready&&(wa(t,ma.redirected)&&i===di||(o.ready=!0,o.readyErrorCbs.forEach((function(e){e(t)}))))}))},Ea.prototype.confirmTransition=function(t,e,n){var r=this,o=this.current;this.pending=t;var i,a,s=function(t){!wa(t)&&xa(t)&&(r.errorCbs.length?r.errorCbs.forEach((function(e){e(t)})):console.error(t)),n&&n(t)},u=t.matched.length-1,c=o.matched.length-1;if(mi(t,o)&&u===c&&t.matched[u]===o.matched[c])return this.ensureURL(),t.hash&&oa(this.router,o,t,!1),s(((a=ba(i=o,t,ma.duplicated,'Avoided redundant navigation to current location: "'+i.fullPath+'".')).name="NavigationDuplicated",a));var l=function(t,e){var n,r=Math.max(t.length,e.length);for(n=0;n0)){var e=this.router,n=e.options.scrollBehavior,r=da&&n;r&&this.listeners.push(ra());var o=function(){var n=t.current,o=La(t.base);t.current===di&&o===t._startLocation||t.transitionTo(o,(function(t){r&&oa(e,t,n,!0)}))};window.addEventListener("popstate",o),this.listeners.push((function(){window.removeEventListener("popstate",o)}))}},e.prototype.go=function(t){window.history.go(t)},e.prototype.push=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){ha(wi(r.base+t.fullPath)),oa(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){va(wi(r.base+t.fullPath)),oa(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.ensureURL=function(t){if(La(this.base)!==this.current.fullPath){var e=wi(this.base+this.current.fullPath);t?ha(e):va(e)}},e.prototype.getCurrentLocation=function(){return La(this.base)},e}(Ea);function La(t){var e=window.location.pathname,n=e.toLowerCase(),r=t.toLowerCase();return!t||n!==r&&0!==n.indexOf(wi(r+"/"))||(e=e.slice(t.length)),(e||"/")+window.location.search+window.location.hash}var Ra=function(t){function e(e,n,r){t.call(this,e,n),r&&function(t){var e=La(t);if(!/^\/#/.test(e))return window.location.replace(wi(t+"/#"+e)),!0}(this.base)||Ma()}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setupListeners=function(){var t=this;if(!(this.listeners.length>0)){var e=this.router.options.scrollBehavior,n=da&&e;n&&this.listeners.push(ra());var r=function(){var e=t.current;Ma()&&t.transitionTo(Ia(),(function(r){n&&oa(t.router,r,e,!0),da||Ua(r.fullPath)}))},o=da?"popstate":"hashchange";window.addEventListener(o,r),this.listeners.push((function(){window.removeEventListener(o,r)}))}},e.prototype.push=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){Na(t.fullPath),oa(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){Ua(t.fullPath),oa(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.go=function(t){window.history.go(t)},e.prototype.ensureURL=function(t){var e=this.current.fullPath;Ia()!==e&&(t?Na(e):Ua(e))},e.prototype.getCurrentLocation=function(){return Ia()},e}(Ea);function Ma(){var t=Ia();return"/"===t.charAt(0)||(Ua("/"+t),!1)}function Ia(){var t=window.location.href,e=t.indexOf("#");return e<0?"":t=t.slice(e+1)}function Da(t){var e=window.location.href,n=e.indexOf("#");return(n>=0?e.slice(0,n):e)+"#"+t}function Na(t){da?ha(Da(t)):window.location.hash=t}function Ua(t){da?va(Da(t)):window.location.replace(Da(t))}var Fa=function(t){function e(e,n){t.call(this,e,n),this.stack=[],this.index=-1}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.push=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index+1).concat(t),r.index++,e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index).concat(t),e&&e(t)}),n)},e.prototype.go=function(t){var e=this,n=this.index+t;if(!(n<0||n>=this.stack.length)){var r=this.stack[n];this.confirmTransition(r,(function(){var t=e.current;e.index=n,e.updateRoute(r),e.router.afterHooks.forEach((function(e){e&&e(r,t)}))}),(function(t){wa(t,ma.duplicated)&&(e.index=n)}))}},e.prototype.getCurrentLocation=function(){var t=this.stack[this.stack.length-1];return t?t.fullPath:"/"},e.prototype.ensureURL=function(){},e}(Ea),za=function(t){void 0===t&&(t={}),this.app=null,this.apps=[],this.options=t,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=Ji(t.routes||[],this);var e=t.mode||"hash";switch(this.fallback="history"===e&&!da&&!1!==t.fallback,this.fallback&&(e="hash"),Wi||(e="abstract"),this.mode=e,e){case"history":this.history=new Ta(this,t.base);break;case"hash":this.history=new Ra(this,t.base,this.fallback);break;case"abstract":this.history=new Fa(this,t.base);break;default:0}},Ba={currentRoute:{configurable:!0}};za.prototype.match=function(t,e,n){return this.matcher.match(t,e,n)},Ba.currentRoute.get=function(){return this.history&&this.history.current},za.prototype.init=function(t){var e=this;if(this.apps.push(t),t.$once("hook:destroyed",(function(){var n=e.apps.indexOf(t);n>-1&&e.apps.splice(n,1),e.app===t&&(e.app=e.apps[0]||null),e.app||e.history.teardown()})),!this.app){this.app=t;var n=this.history;if(n instanceof Ta||n instanceof Ra){var r=function(t){n.setupListeners(),function(t){var r=n.current,o=e.options.scrollBehavior;da&&o&&"fullPath"in t&&oa(e,t,r,!1)}(t)};n.transitionTo(n.getCurrentLocation(),r,r)}n.listen((function(t){e.apps.forEach((function(e){e._route=t}))}))}},za.prototype.beforeEach=function(t){return Va(this.beforeHooks,t)},za.prototype.beforeResolve=function(t){return Va(this.resolveHooks,t)},za.prototype.afterEach=function(t){return Va(this.afterHooks,t)},za.prototype.onReady=function(t,e){this.history.onReady(t,e)},za.prototype.onError=function(t){this.history.onError(t)},za.prototype.push=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!=typeof Promise)return new Promise((function(e,n){r.history.push(t,e,n)}));this.history.push(t,e,n)},za.prototype.replace=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!=typeof Promise)return new Promise((function(e,n){r.history.replace(t,e,n)}));this.history.replace(t,e,n)},za.prototype.go=function(t){this.history.go(t)},za.prototype.back=function(){this.go(-1)},za.prototype.forward=function(){this.go(1)},za.prototype.getMatchedComponents=function(t){var e=t?t.matched?t:this.resolve(t).route:this.currentRoute;return e?[].concat.apply([],e.matched.map((function(t){return Object.keys(t.components).map((function(e){return t.components[e]}))}))):[]},za.prototype.resolve=function(t,e,n){var r=zi(t,e=e||this.history.current,n,this),o=this.match(r,e),i=o.redirectedFrom||o.fullPath;return{location:r,route:o,href:function(t,e,n){var r="hash"===n?"#"+e:e;return t?wi(t+"/"+r):r}(this.history.base,i,this.mode),normalizedTo:r,resolved:o}},za.prototype.getRoutes=function(){return this.matcher.getRoutes()},za.prototype.addRoute=function(t,e){this.matcher.addRoute(t,e),this.history.current!==di&&this.history.transitionTo(this.history.getCurrentLocation())},za.prototype.addRoutes=function(t){this.matcher.addRoutes(t),this.history.current!==di&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(za.prototype,Ba);var qa=za;function Va(t,e){return t.push(e),function(){var n=t.indexOf(e);n>-1&&t.splice(n,1)}}za.install=function t(e){if(!t.installed||Bi!==e){t.installed=!0,Bi=e;var n=function(t){return void 0!==t},r=function(t,e){var r=t.$options._parentVnode;n(r)&&n(r=r.data)&&n(r=r.registerRouteInstance)&&r(t,e)};e.mixin({beforeCreate:function(){n(this.$options.router)?(this._routerRoot=this,this._router=this.$options.router,this._router.init(this),e.util.defineReactive(this,"_route",this._router.history.current)):this._routerRoot=this.$parent&&this.$parent._routerRoot||this,r(this,this)},destroyed:function(){r(this)}}),Object.defineProperty(e.prototype,"$router",{get:function(){return this._routerRoot._router}}),Object.defineProperty(e.prototype,"$route",{get:function(){return this._routerRoot._route}}),e.component("RouterView",bi),e.component("RouterLink",Vi);var o=e.config.optionMergeStrategies;o.beforeRouteEnter=o.beforeRouteLeave=o.beforeRouteUpdate=o.created}},za.version="3.6.5",za.isNavigationFailure=wa,za.NavigationFailureType=ma,za.START_LOCATION=di,Wi&&window.Vue&&window.Vue.use(za);n(92);n(121);var Ha={NotFound:()=>n.e(15).then(n.bind(null,321)),Layout:()=>Promise.all([n.e(0),n.e(2)]).then(n.bind(null,320))},Wa={"v-326c0e96":()=>n.e(16).then(n.bind(null,324)),"v-8b86a244":()=>n.e(17).then(n.bind(null,325)),"v-caa72da0":()=>n.e(18).then(n.bind(null,326)),"v-790e8dcb":()=>n.e(19).then(n.bind(null,327)),"v-04dfc4b6":()=>n.e(20).then(n.bind(null,328)),"v-56b5564a":()=>n.e(11).then(n.bind(null,329)),"v-39a454ea":()=>n.e(21).then(n.bind(null,330)),"v-47c0aa36":()=>n.e(12).then(n.bind(null,331)),"v-78bb802a":()=>n.e(22).then(n.bind(null,332)),"v-62312bfa":()=>n.e(23).then(n.bind(null,333)),"v-3804bcfa":()=>n.e(13).then(n.bind(null,334)),"v-71cad5b2":()=>n.e(24).then(n.bind(null,335)),"v-7d8caafc":()=>n.e(7).then(n.bind(null,336)),"v-b4876636":()=>n.e(25).then(n.bind(null,337)),"v-3a909d05":()=>n.e(6).then(n.bind(null,338)),"v-0e0b83c2":()=>n.e(26).then(n.bind(null,339)),"v-89c07936":()=>n.e(28).then(n.bind(null,340)),"v-27e32547":()=>n.e(27).then(n.bind(null,341)),"v-e34cd2ba":()=>n.e(3).then(n.bind(null,342)),"v-59ecf1c5":()=>n.e(5).then(n.bind(null,343)),"v-2c392418":()=>n.e(14).then(n.bind(null,344)),"v-c6d83f46":()=>n.e(29).then(n.bind(null,345)),"v-a6e49ef6":()=>n.e(30).then(n.bind(null,346)),"v-d1914176":()=>n.e(4).then(n.bind(null,347)),"v-36233536":()=>n.e(31).then(n.bind(null,348))};function Ka(t){const e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}const Ga=/-(\w)/g,Ja=Ka(t=>t.replace(Ga,(t,e)=>e?e.toUpperCase():"")),Xa=/\B([A-Z])/g,Ya=Ka(t=>t.replace(Xa,"-$1").toLowerCase()),Qa=Ka(t=>t.charAt(0).toUpperCase()+t.slice(1));function Za(t,e){if(!e)return;if(t(e))return t(e);return e.includes("-")?t(Qa(Ja(e))):t(Qa(e))||t(Ya(e))}const ts=Object.assign({},Ha,Wa),es=t=>ts[t],ns=t=>Wa[t],rs=t=>Ha[t],os=t=>Hn.component(t);function is(t){return Za(ns,t)}function as(t){return Za(rs,t)}function ss(t){return Za(es,t)}function us(t){return Za(os,t)}function cs(...t){return Promise.all(t.filter(t=>t).map(async t=>{if(!us(t)&&ss(t)){const e=await ss(t)();Hn.component(t,e.default)}}))}function ls(t,e){"undefined"!=typeof window&&window.__VUEPRESS__&&(window.__VUEPRESS__[t]=e)}var fs=n(86),ps=n.n(fs),ds=n(87),hs=n.n(ds),vs={created(){if(this.siteMeta=this.$site.headTags.filter(([t])=>"meta"===t).map(([t,e])=>e),this.$ssrContext){const e=this.getMergedMetaTags();this.$ssrContext.title=this.$title,this.$ssrContext.lang=this.$lang,this.$ssrContext.pageMeta=(t=e)?t.map(t=>{let e="{e+=` ${n}="${hs()(t[n])}"`}),e+">"}).join("\n "):"",this.$ssrContext.canonicalLink=gs(this.$canonicalUrl)}var t},mounted(){this.currentMetaTags=[...document.querySelectorAll("meta")],this.updateMeta(),this.updateCanonicalLink()},methods:{updateMeta(){document.title=this.$title,document.documentElement.lang=this.$lang;const t=this.getMergedMetaTags();this.currentMetaTags=ys(t,this.currentMetaTags)},getMergedMetaTags(){const t=this.$page.frontmatter.meta||[];return ps()([{name:"description",content:this.$description}],t,this.siteMeta,bs)},updateCanonicalLink(){ms(),this.$canonicalUrl&&document.head.insertAdjacentHTML("beforeend",gs(this.$canonicalUrl))}},watch:{$page(){this.updateMeta(),this.updateCanonicalLink()}},beforeDestroy(){ys(null,this.currentMetaTags),ms()}};function ms(){const t=document.querySelector("link[rel='canonical']");t&&t.remove()}function gs(t=""){return t?``:""}function ys(t,e){if(e&&[...e].filter(t=>t.parentNode===document.head).forEach(t=>document.head.removeChild(t)),t)return t.map(t=>{const e=document.createElement("meta");return Object.keys(t).forEach(n=>{e.setAttribute(n,t[n])}),document.head.appendChild(e),e})}function bs(t){for(const e of["name","property","itemprop"])if(t.hasOwnProperty(e))return t[e]+e;return JSON.stringify(t)}var _s=n(88),xs={mounted(){window.addEventListener("scroll",this.onScroll)},methods:{onScroll:n.n(_s)()((function(){this.setActiveHash()}),300),setActiveHash(){const t=[].slice.call(document.querySelectorAll(".sidebar-link")),e=[].slice.call(document.querySelectorAll(".header-anchor")).filter(e=>t.some(t=>t.hash===e.hash)),n=Math.max(window.pageYOffset,document.documentElement.scrollTop,document.body.scrollTop),r=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight),o=window.innerHeight+n;for(let t=0;t=i.parentElement.offsetTop+10&&(!a||n{this.$nextTick(()=>{this.$vuepress.$set("disableScrollBehavior",!1)})})}}}},beforeDestroy(){window.removeEventListener("scroll",this.onScroll)}},ws=n(22),ks=n.n(ws),Os=[vs,xs,{mounted(){ks.a.configure({showSpinner:!1}),this.$router.beforeEach((t,e,n)=>{t.path===e.path||Hn.component(t.name)||ks.a.start(),n()}),this.$router.afterEach(()=>{ks.a.done(),this.isSidebarOpen=!1})}}],$s={name:"GlobalLayout",computed:{layout(){const t=this.getLayout();return ls("layout",t),Hn.component(t)}},methods:{getLayout(){if(this.$page.path){const t=this.$page.frontmatter.layout;return t&&(this.$vuepress.getLayoutAsyncComponent(t)||this.$vuepress.getVueComponent(t))?t:"Layout"}return"NotFound"}}},Cs=n(13),js=Object(Cs.a)($s,(function(){return(0,this._self._c)(this.layout,{tag:"component"})}),[],!1,null,null,null).exports;!function(t,e,n){switch(e){case"components":t[e]||(t[e]={}),Object.assign(t[e],n);break;case"mixins":t[e]||(t[e]=[]),t[e].push(...n);break;default:throw new Error("Unknown option name.")}}(js,"mixins",Os);const Ss=[{name:"v-326c0e96",path:"/",component:js,beforeEnter:(t,e,n)=>{cs("Layout","v-326c0e96").then(n)}},{path:"/index.html",redirect:"/"},{name:"v-8b86a244",path:"/aboutus/",component:js,beforeEnter:(t,e,n)=>{cs("Layout","v-8b86a244").then(n)}},{path:"/aboutus/index.html",redirect:"/aboutus/"},{name:"v-caa72da0",path:"/advance/",component:js,beforeEnter:(t,e,n)=>{cs("Layout","v-caa72da0").then(n)}},{path:"/advance/index.html",redirect:"/advance/"},{name:"v-790e8dcb",path:"/advance/ci.html",component:js,beforeEnter:(t,e,n)=>{cs("Layout","v-790e8dcb").then(n)}},{name:"v-04dfc4b6",path:"/advance/elk.html",component:js,beforeEnter:(t,e,n)=>{cs("Layout","v-04dfc4b6").then(n)}},{name:"v-56b5564a",path:"/checker/",component:js,beforeEnter:(t,e,n)=>{cs("Layout","v-56b5564a").then(n)}},{path:"/checker/index.html",redirect:"/checker/"},{name:"v-39a454ea",path:"/advance/eventbus.html",component:js,beforeEnter:(t,e,n)=>{cs("Layout","v-39a454ea").then(n)}},{name:"v-47c0aa36",path:"/checker/dev_debug.html",component:js,beforeEnter:(t,e,n)=>{cs("Layout","v-47c0aa36").then(n)}},{name:"v-78bb802a",path:"/checker/examples.html",component:js,beforeEnter:(t,e,n)=>{cs("Layout","v-78bb802a").then(n)}},{name:"v-62312bfa",path:"/checker/request_editor.html",component:js,beforeEnter:(t,e,n)=>{cs("Layout","v-62312bfa").then(n)}},{name:"v-3804bcfa",path:"/develop/",component:js,beforeEnter:(t,e,n)=>{cs("Layout","v-3804bcfa").then(n)}},{path:"/develop/index.html",redirect:"/develop/"},{name:"v-71cad5b2",path:"/develop/plugin.html",component:js,beforeEnter:(t,e,n)=>{cs("Layout","v-71cad5b2").then(n)}},{name:"v-7d8caafc",path:"/guide/",component:js,beforeEnter:(t,e,n)=>{cs("Layout","v-7d8caafc").then(n)}},{path:"/guide/index.html",redirect:"/guide/"},{name:"v-b4876636",path:"/guide/api.html",component:js,beforeEnter:(t,e,n)=>{cs("Layout","v-b4876636").then(n)}},{name:"v-3a909d05",path:"/guide/checker.html",component:js,beforeEnter:(t,e,n)=>{cs("Layout","v-3a909d05").then(n)}},{name:"v-0e0b83c2",path:"/guide/command-line.html",component:js,beforeEnter:(t,e,n)=>{cs("Layout","v-0e0b83c2").then(n)}},{name:"v-89c07936",path:"/guide/faq.html",component:js,beforeEnter:(t,e,n)=>{cs("Layout","v-89c07936").then(n)}},{name:"v-27e32547",path:"/guide/config.html",component:js,beforeEnter:(t,e,n)=>{cs("Layout","v-27e32547").then(n)}},{name:"v-e34cd2ba",path:"/guide/mockdata.html",component:js,beforeEnter:(t,e,n)=>{cs("Layout","v-e34cd2ba").then(n)}},{name:"v-59ecf1c5",path:"/plugins/android.html",component:js,beforeEnter:(t,e,n)=>{cs("Layout","v-59ecf1c5").then(n)}},{name:"v-2c392418",path:"/plugins/",component:js,beforeEnter:(t,e,n)=>{cs("Layout","v-2c392418").then(n)}},{path:"/plugins/index.html",redirect:"/plugins/"},{name:"v-c6d83f46",path:"/plugins/api-coverage.html",component:js,beforeEnter:(t,e,n)=>{cs("Layout","v-c6d83f46").then(n)}},{name:"v-a6e49ef6",path:"/plugins/ios.html",component:js,beforeEnter:(t,e,n)=>{cs("Layout","v-a6e49ef6").then(n)}},{name:"v-d1914176",path:"/plugins/bugit.html",component:js,beforeEnter:(t,e,n)=>{cs("Layout","v-d1914176").then(n)}},{name:"v-36233536",path:"/plugins/tracking.html",component:js,beforeEnter:(t,e,n)=>{cs("Layout","v-36233536").then(n)}},{path:"*",component:js}],Es={title:"",description:"",base:"/lyrebird/",headTags:[],pages:[{title:"Home",frontmatter:{home:!0,heroImage:"lyrebird.png",actionText:"快速开始 →",actionLink:"/guide/",features:[{title:"并行测试",details:"通过多个插件以及自动检查脚本并行工作,一次测试获得多角度数据,自动化脚本与手工测试并行执行。"},{title:"自定义脚本",details:"支持快速开发有针对性的轻量级脚本,并行检测测试时不易察觉的问题。"},{title:"自定义插件",details:"支持开发比脚本自由度更高的插件,实现自定义的UI及API,除支持并行检测之外,还可以很方便的扩展Lyrebird的能力。"},{title:"轻巧易用",details:"一键安装。自由选择插件和脚本,组合成适合自己业务特点的解决方案。"},{title:"手工及自动化测试通用",details:"不只提供UI操作,也可以通过API控制所有功能。"},{title:"完整的记录人机交互过程",details:"实时的记录测试执行过程中人机交互过程,更方便的记录问题、复现问题。"}],footer:"MIT Licensed | Copyright © 2018-present Meituan"},regularPath:"/",relativePath:"README.md",key:"v-326c0e96",path:"/"},{title:"关于我们",frontmatter:{},regularPath:"/aboutus/",relativePath:"aboutus/README.md",key:"v-8b86a244",path:"/aboutus/"},{title:"配置文件",frontmatter:{},regularPath:"/advance/",relativePath:"advance/README.md",key:"v-caa72da0",path:"/advance/"},{title:"持续集成",frontmatter:{},regularPath:"/advance/ci.html",relativePath:"advance/ci.md",key:"v-790e8dcb",path:"/advance/ci.html"},{title:"接入ELK",frontmatter:{},regularPath:"/advance/elk.html",relativePath:"advance/elk.md",key:"v-04dfc4b6",path:"/advance/elk.html"},{title:"使用指南",frontmatter:{},regularPath:"/checker/",relativePath:"checker/README.md",key:"v-56b5564a",path:"/checker/",headers:[{level:2,title:"载入自定义脚本",slug:"载入自定义脚本"},{level:2,title:"捕获报警",slug:"捕获报警"}]},{title:"消息总线",frontmatter:{},regularPath:"/advance/eventbus.html",relativePath:"advance/eventbus.md",key:"v-39a454ea",path:"/advance/eventbus.html"},{title:"第一个检查器",frontmatter:{},regularPath:"/checker/dev_debug.html",relativePath:"checker/dev_debug.md",key:"v-47c0aa36",path:"/checker/dev_debug.html",headers:[{level:2,title:"环境准备",slug:"环境准备"},{level:2,title:"编写检查器",slug:"编写检查器"},{level:3,title:"监听频道",slug:"监听频道"},{level:3,title:"数据校验",slug:"数据校验"},{level:3,title:"报警",slug:"报警"},{level:2,title:"调试",slug:"调试"},{level:3,title:"开始调试",slug:"开始调试"}]},{title:"示例",frontmatter:{},regularPath:"/checker/examples.html",relativePath:"checker/examples.md",key:"v-78bb802a",path:"/checker/examples.html",headers:[{level:2,title:"大图检测",slug:"大图检测"},{level:3,title:"忽略无关数据",slug:"忽略无关数据"},{level:3,title:"获取目标数据",slug:"获取目标数据"},{level:3,title:"得出校验结果",slug:"得出校验结果"},{level:2,title:"重复请求检测",slug:"重复请求检测"},{level:3,title:"忽略无关数据",slug:"忽略无关数据-2"},{level:3,title:"获取目标数据",slug:"获取目标数据-2"},{level:3,title:"得到校验结果",slug:"得到校验结果"},{level:3,title:"更新验证集合",slug:"更新验证集合"}]},{title:"修改器",frontmatter:{},regularPath:"/checker/request_editor.html",relativePath:"checker/request_editor.md",key:"v-62312bfa",path:"/checker/request_editor.html",headers:[{level:2,title:"环境准备",slug:"环境准备"},{level:2,title:"编写",slug:"编写"},{level:3,title:"注册",slug:"注册"},{level:3,title:"修改请求",slug:"修改请求"},{level:2,title:"调试",slug:"调试"}]},{title:"开发环境配置",frontmatter:{},regularPath:"/develop/",relativePath:"develop/README.md",key:"v-3804bcfa",path:"/develop/",headers:[{level:2,title:"开发环境",slug:"开发环境"},{level:2,title:"配置Lyrebird工程",slug:"配置lyrebird工程"},{level:2,title:"调试代码",slug:"调试代码"},{level:3,title:"后端代码",slug:"后端代码"},{level:3,title:"前端代码",slug:"前端代码"}]},{title:"自定义插件开发",frontmatter:{},regularPath:"/develop/plugin.html",relativePath:"develop/plugin.md",key:"v-71cad5b2",path:"/develop/plugin.html",headers:[{level:2,title:"创建项目",slug:"创建项目"},{level:2,title:"结构说明",slug:"结构说明"},{level:2,title:"构建项目",slug:"构建项目"},{level:3,title:"构建前端",slug:"构建前端"},{level:3,title:"构建插件",slug:"构建插件"},{level:2,title:"开发调试",slug:"开发调试"},{level:3,title:"前端",slug:"前端"},{level:3,title:"插件",slug:"插件"}]},{title:"快速开始",frontmatter:{},regularPath:"/guide/",relativePath:"guide/README.md",key:"v-7d8caafc",path:"/guide/",headers:[{level:2,title:"环境要求",slug:"环境要求"},{level:2,title:"安装",slug:"安装"},{level:3,title:"安装插件 (选装)",slug:"安装插件-选装"},{level:2,title:"启动",slug:"启动"},{level:2,title:"连接移动设备",slug:"连接移动设备"},{level:2,title:"查看及录制数据",slug:"查看及录制数据"},{level:2,title:"使用 mock 数据",slug:"使用-mock-数据"},{level:2,title:"管理 mock 数据",slug:"管理-mock-数据"}]},{title:"接口",frontmatter:{},regularPath:"/guide/api.html",relativePath:"guide/api.md",key:"v-b4876636",path:"/guide/api.html",headers:[{level:2,title:"Lyrebird状态",slug:"lyrebird状态"},{level:2,title:"获取缓存中请求列表",slug:"获取缓存中请求列表"},{level:2,title:"获取缓存中请求详情",slug:"获取缓存中请求详情"},{level:2,title:"激活mock数据组",slug:"激活mock数据组"},{level:2,title:"取消激活mock数据",slug:"取消激活mock数据"},{level:2,title:"获取已激活mock数据",slug:"获取已激活mock数据"},{level:2,title:"获取指定频道的消息总线数据",slug:"获取指定频道的消息总线数据"},{level:2,title:"获取当前网络带宽限速",slug:"获取当前网络带宽限速"},{level:2,title:"设置网络带宽限速",slug:"设置网络带宽限速"}]},{title:"扩展",frontmatter:{},regularPath:"/guide/checker.html",relativePath:"guide/checker.md",key:"v-3a909d05",path:"/guide/checker.html",headers:[{level:2,title:"自定义脚本",slug:"自定义脚本"},{level:3,title:"载入自定义脚本",slug:"载入自定义脚本"},{level:3,title:"示例脚本",slug:"示例脚本"},{level:3,title:"捕获报警",slug:"捕获报警"},{level:2,title:"自定义插件",slug:"自定义插件"},{level:3,title:"Android插件",slug:"android插件"},{level:3,title:"iOS插件",slug:"ios插件"},{level:3,title:"API覆盖率插件(APICoverage)",slug:"api覆盖率插件-apicoverage"},{level:3,title:"BugIt插件",slug:"bugit插件"}]},{title:"命令行",frontmatter:{},regularPath:"/guide/command-line.html",relativePath:"guide/command-line.md",key:"v-0e0b83c2",path:"/guide/command-line.html",headers:[{level:2,title:"-h --help",slug:"h-help"},{level:2,title:"-V --version",slug:"v-version"},{level:2,title:"-v -vv",slug:"v-vv"},{level:2,title:"--mock",slug:"mock"},{level:2,title:"--proxy",slug:"proxy"},{level:2,title:"--data",slug:"data"},{level:2,title:"-b --no_browser",slug:"b-no-browser"},{level:2,title:"--no-mitm",slug:"no-mitm"},{level:2,title:"-c --config",slug:"c-config"},{level:2,title:"--log",slug:"log"},{level:2,title:"--script",slug:"script"},{level:2,title:"--plugin",slug:"plugin"},{level:2,title:"gen",slug:"gen"}]},{title:"FAQ",frontmatter:{},regularPath:"/guide/faq.html",relativePath:"guide/faq.md",key:"v-89c07936",path:"/guide/faq.html",headers:[{level:3,title:"IOS10.3系统安装mitmproxy证书后仍无法抓取https接口数据",slug:"ios10-3系统安装mitmproxy证书后仍无法抓取https接口数据"},{level:3,title:"执行setup.sh时,提示SSL证书验证失败",slug:"执行setup-sh时-提示ssl证书验证失败"},{level:3,title:"执行setup时报错,没有执行虚拟环境中的pip3",slug:"执行setup时报错-没有执行虚拟环境中的pip3"},{level:3,title:"使用brew时提示安装权限问题或安装其他依赖失败",slug:"使用brew时提示安装权限问题或安装其他依赖失败"},{level:3,title:"执行setup报错,pip install PyYAML失败",slug:"执行setup报错-pip-install-pyyaml失败"},{level:3,title:"提示无法找到lyrebird命令",slug:"提示无法找到lyrebird命令"}]},{title:"配置文件",frontmatter:{},regularPath:"/guide/config.html",relativePath:"guide/config.md",key:"v-27e32547",path:"/guide/config.html",headers:[{level:2,title:"proxy.filters",slug:"proxy-filters"},{level:2,title:"proxy.port",slug:"proxy-port"},{level:2,title:"mock.port",slug:"mock-port"},{level:2,title:"mock.data",slug:"mock-data"}]},{title:"Mock数据管理",frontmatter:{},regularPath:"/guide/mockdata.html",relativePath:"guide/mockdata.md",key:"v-e34cd2ba",path:"/guide/mockdata.html",headers:[{level:2,title:"概念",slug:"概念"},{level:2,title:"存储",slug:"存储"},{level:2,title:"操作",slug:"操作"},{level:3,title:"数据组",slug:"数据组"},{level:3,title:"搜索",slug:"搜索"},{level:2,title:"命中规则",slug:"命中规则"},{level:3,title:"request.url",slug:"request-url"},{level:2,title:"标签",slug:"标签"},{level:2,title:"在自动化测试中使用mock功能",slug:"在自动化测试中使用mock功能"},{level:2,title:"通过Git管理mock数据",slug:"通过git管理mock数据"}]},{title:"Android插件",frontmatter:{},regularPath:"/plugins/android.html",relativePath:"plugins/android.md",key:"v-59ecf1c5",path:"/plugins/android.html",headers:[{level:2,title:"快速开始",slug:"快速开始"},{level:3,title:"环境要求",slug:"环境要求"},{level:3,title:"安装",slug:"安装"},{level:3,title:"启动",slug:"启动"},{level:2,title:"功能介绍",slug:"功能介绍"},{level:3,title:"控制应用",slug:"控制应用"},{level:3,title:"获取系统日志",slug:"获取系统日志"},{level:3,title:"命令行工具",slug:"命令行工具"}]},{title:"自定义插件",frontmatter:{},regularPath:"/plugins/",relativePath:"plugins/README.md",key:"v-2c392418",path:"/plugins/"},{title:"API覆盖率插件",frontmatter:{},regularPath:"/plugins/api-coverage.html",relativePath:"plugins/api-coverage.md",key:"v-c6d83f46",path:"/plugins/api-coverage.html"},{title:"iOS插件",frontmatter:{},regularPath:"/plugins/ios.html",relativePath:"plugins/ios.md",key:"v-a6e49ef6",path:"/plugins/ios.html"},{title:"BugIt插件",frontmatter:{},regularPath:"/plugins/bugit.html",relativePath:"plugins/bugit.md",key:"v-d1914176",path:"/plugins/bugit.html",headers:[{level:2,title:"快速开始",slug:"快速开始"},{level:3,title:"环境要求",slug:"环境要求"},{level:3,title:"安装",slug:"安装"},{level:3,title:"载入脚本文件",slug:"载入脚本文件"},{level:2,title:"功能介绍",slug:"功能介绍"},{level:3,title:"Bug提交",slug:"bug提交"},{level:3,title:"API数据获取",slug:"api数据获取"},{level:3,title:"报警获取",slug:"报警获取"},{level:3,title:"保存草稿功能",slug:"保存草稿功能"},{level:3,title:"插件在Bugit中的应用",slug:"插件在bugit中的应用"},{level:2,title:"Bug脚本说明",slug:"bug脚本说明"},{level:3,title:"脚本示意图",slug:"脚本示意图"},{level:3,title:"BugIt数据传递",slug:"bugit数据传递"},{level:3,title:"init配置文件",slug:"init配置文件"},{level:3,title:"form()",slug:"form"},{level:3,title:"submit()",slug:"submit"},{level:2,title:"脚本高级",slug:"脚本高级"},{level:3,title:"Bug表单动态化配置",slug:"bug表单动态化配置"},{level:3,title:"Bug信息缓存",slug:"bug信息缓存"},{level:2,title:"示例脚本",slug:"示例脚本"},{level:3,title:"JIRA API Reference",slug:"jira-api-reference"}]},{title:"埋点插件",frontmatter:{},regularPath:"/plugins/tracking.html",relativePath:"plugins/tracking.md",key:"v-36233536",path:"/plugins/tracking.html"}],themeConfig:{nav:[{text:"指南",link:"/guide/"},{text:"扩展",items:[{text:"自定义脚本",link:"/checker/"},{text:"自定义插件",link:"/plugins/"}]},{text:"高级",link:"/advance/"},{text:"开发者指南",link:"/develop/"},{text:"代码仓库",items:[{text:"Lyrebird",link:"https://github.com/Meituan-Dianping/lyrebird"},{text:"iOS",link:"https://github.com/Meituan-Dianping/lyrebird-ios"},{text:"Android",link:"https://github.com/Meituan-Dianping/lyrebird-android"},{text:"ApiCoverage",link:"https://github.com/Meituan-Dianping/lyrebird-api-coverage"},{text:"Tracking",link:"https://github.com/Meituan-Dianping/lyrebird-tracking"}]}],sidebarDepth:2,sidebar:{"/guide/":["","mockdata","checker","command-line","config","api","faq"],"/checker/":["","dev_debug","request_editor","examples"],"/plugins/":["","android","ios","tracking","api-coverage","bugit"],"/advance/":["","eventbus","ci","elk"],"/develop/":["","plugin"],"/aboutus/":[""]}},locales:{"/":{lang:"zh-CN",title:"Lyrebird",description:"面向移动应用的插件式测试工作台",path:"/"}}};n(227);Hn.component("CodeBlock",()=>Promise.all([n.e(0),n.e(9)]).then(n.bind(null,322))),Hn.component("Badge",()=>Promise.all([n.e(0),n.e(8)]).then(n.bind(null,349))),Hn.component("CodeGroup",()=>Promise.all([n.e(0),n.e(10)]).then(n.bind(null,323)));n(228);var Ps=[{},({Vue:t})=>{t.mixin({computed:{$dataBlock(){return this.$options.__data__block__}}})},{},{}],As=[];class Ts extends class{constructor(){this.store=new Hn({data:{state:{}}})}$get(t){return this.store.state[t]}$set(t,e){Hn.set(this.store.state,t,e)}$emit(...t){this.store.$emit(...t)}$on(...t){this.store.$on(...t)}}{}Object.assign(Ts.prototype,{getPageAsyncComponent:is,getLayoutAsyncComponent:as,getAsyncComponent:ss,getVueComponent:us});var Ls={install(t){const e=new Ts;t.$vuepress=e,t.prototype.$vuepress=e}};function Rs(t,e){const n=e.toLowerCase();return t.options.routes.some(t=>t.path.toLowerCase()===n)}var Ms={props:{pageKey:String,slotKey:{type:String,default:"default"}},render(t){const e=this.pageKey||this.$parent.$page.key;return ls("pageKey",e),Hn.component(e)||Hn.component(e,is(e)),Hn.component(e)?t(e):t("")}},Is={functional:!0,props:{slotKey:String,required:!0},render:(t,{props:e,slots:n})=>t("div",{class:["content__"+e.slotKey]},n()[e.slotKey])},Ds={computed:{openInNewWindowTitle(){return this.$themeLocaleConfig.openNewWindowText||"(opens new window)"}}},Ns=(n(229),n(230),Object(Cs.a)(Ds,(function(){var t=this._self._c;return t("span",[t("svg",{staticClass:"icon outbound",attrs:{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"}},[t("path",{attrs:{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}}),this._v(" "),t("polygon",{attrs:{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"}})]),this._v(" "),t("span",{staticClass:"sr-only"},[this._v(this._s(this.openInNewWindowTitle))])])}),[],!1,null,null,null).exports),Us={functional:!0,render(t,{parent:e,children:n}){if(e._isMounted)return n;e.$once("hook:mounted",()=>{e.$forceUpdate()})}};Hn.config.productionTip=!1,Hn.use(qa),Hn.use(Ls),Hn.mixin(function(t,e,n=Hn){!function(t){t.locales&&Object.keys(t.locales).forEach(e=>{t.locales[e].path=e});Object.freeze(t)}(e),n.$vuepress.$set("siteData",e);const r=new(t(n.$vuepress.$get("siteData"))),o=Object.getOwnPropertyDescriptors(Object.getPrototypeOf(r)),i={};return Object.keys(o).reduce((t,e)=>(e.startsWith("$")&&(t[e]=o[e].get),t),i),{computed:i}}(t=>class{setPage(t){this.__page=t}get $site(){return t}get $themeConfig(){return this.$site.themeConfig}get $frontmatter(){return this.$page.frontmatter}get $localeConfig(){const{locales:t={}}=this.$site;let e,n;for(const r in t)"/"===r?n=t[r]:0===this.$page.path.indexOf(r)&&(e=t[r]);return e||n||{}}get $siteTitle(){return this.$localeConfig.title||this.$site.title||""}get $canonicalUrl(){const{canonicalUrl:t}=this.$page.frontmatter;return"string"==typeof t&&t}get $title(){const t=this.$page,{metaTitle:e}=this.$page.frontmatter;if("string"==typeof e)return e;const n=this.$siteTitle,r=t.frontmatter.home?null:t.frontmatter.title||t.title;return n?r?r+" | "+n:n:r||"VuePress"}get $description(){const t=function(t){if(t){const e=t.filter(t=>"description"===t.name)[0];if(e)return e.content}}(this.$page.frontmatter.meta);return t||(this.$page.frontmatter.description||this.$localeConfig.description||this.$site.description||"")}get $lang(){return this.$page.frontmatter.lang||this.$localeConfig.lang||"en-US"}get $localePath(){return this.$localeConfig.path||"/"}get $themeLocaleConfig(){return(this.$site.themeConfig.locales||{})[this.$localePath]||{}}get $page(){return this.__page?this.__page:function(t,e){for(let n=0;nn||(t.hash?!Hn.$vuepress.$get("disableScrollBehavior")&&{selector:decodeURIComponent(t.hash)}:{x:0,y:0})});!function(t){t.beforeEach((e,n,r)=>{if(Rs(t,e.path))r();else if(/(\/|\.html)$/.test(e.path))if(/\/$/.test(e.path)){const n=e.path.replace(/\/$/,"")+".html";Rs(t,n)?r(n):r()}else r();else{const n=e.path+"/",o=e.path+".html";Rs(t,o)?r(o):Rs(t,n)?r(n):r()}})}(n);const r={};try{await Promise.all(Ps.filter(t=>"function"==typeof t).map(e=>e({Vue:Hn,options:r,router:n,siteData:Es,isServer:t})))}catch(t){console.error(t)}return{app:new Hn(Object.assign(r,{router:n,render:t=>t("div",{attrs:{id:"app"}},[t("RouterView",{ref:"layout"}),t("div",{class:"global-ui"},As.map(e=>t(e)))])})),router:n}}(!1).then(({app:t,router:e})=>{e.onReady(()=>{t.$mount("#app")})})}]); \ No newline at end of file +var r=Object.freeze({}),o=Array.isArray;function i(t){return null==t}function a(t){return null!=t}function s(t){return!0===t}function u(t){return"string"==typeof t||"number"==typeof t||"symbol"==typeof t||"boolean"==typeof t}function c(t){return"function"==typeof t}function l(t){return null!==t&&"object"==typeof t}var f=Object.prototype.toString;function p(t){return"[object Object]"===f.call(t)}function d(t){return"[object RegExp]"===f.call(t)}function h(t){var e=parseFloat(String(t));return e>=0&&Math.floor(e)===e&&isFinite(t)}function v(t){return a(t)&&"function"==typeof t.then&&"function"==typeof t.catch}function m(t){return null==t?"":Array.isArray(t)||p(t)&&t.toString===f?JSON.stringify(t,null,2):String(t)}function g(t){var e=parseFloat(t);return isNaN(e)?t:e}function y(t,e){for(var n=Object.create(null),r=t.split(","),o=0;o-1)return t.splice(n,1)}}var x=Object.prototype.hasOwnProperty;function w(t,e){return x.call(t,e)}function k(t){var e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}var O=/-(\w)/g,$=k((function(t){return t.replace(O,(function(t,e){return e?e.toUpperCase():""}))})),C=k((function(t){return t.charAt(0).toUpperCase()+t.slice(1)})),j=/\B([A-Z])/g,S=k((function(t){return t.replace(j,"-$1").toLowerCase()}));var E=Function.prototype.bind?function(t,e){return t.bind(e)}:function(t,e){function n(n){var r=arguments.length;return r?r>1?t.apply(e,arguments):t.call(e,n):t.call(e)}return n._length=t.length,n};function P(t,e){e=e||0;for(var n=t.length-e,r=new Array(n);n--;)r[n]=t[n+e];return r}function A(t,e){for(var n in e)t[n]=e[n];return t}function T(t){for(var e={},n=0;n0,Q=J&&J.indexOf("edge/")>0;J&&J.indexOf("android");var Z=J&&/iphone|ipad|ipod|ios/.test(J);J&&/chrome\/\d+/.test(J),J&&/phantomjs/.test(J);var tt,et=J&&J.match(/firefox\/(\d+)/),nt={}.watch,rt=!1;if(G)try{var ot={};Object.defineProperty(ot,"passive",{get:function(){rt=!0}}),window.addEventListener("test-passive",null,ot)}catch(t){}var it=function(){return void 0===tt&&(tt=!G&&"undefined"!=typeof global&&(global.process&&"server"===global.process.env.VUE_ENV)),tt},at=G&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function st(t){return"function"==typeof t&&/native code/.test(t.toString())}var ut,ct="undefined"!=typeof Symbol&&st(Symbol)&&"undefined"!=typeof Reflect&&st(Reflect.ownKeys);ut="undefined"!=typeof Set&&st(Set)?Set:function(){function t(){this.set=Object.create(null)}return t.prototype.has=function(t){return!0===this.set[t]},t.prototype.add=function(t){this.set[t]=!0},t.prototype.clear=function(){this.set=Object.create(null)},t}();var lt=null;function ft(t){void 0===t&&(t=null),t||lt&<._scope.off(),lt=t,t&&t._scope.on()}var pt=function(){function t(t,e,n,r,o,i,a,s){this.tag=t,this.data=e,this.children=n,this.text=r,this.elm=o,this.ns=void 0,this.context=i,this.fnContext=void 0,this.fnOptions=void 0,this.fnScopeId=void 0,this.key=e&&e.key,this.componentOptions=a,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=s,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1}return Object.defineProperty(t.prototype,"child",{get:function(){return this.componentInstance},enumerable:!1,configurable:!0}),t}(),dt=function(t){void 0===t&&(t="");var e=new pt;return e.text=t,e.isComment=!0,e};function ht(t){return new pt(void 0,void 0,void 0,String(t))}function vt(t){var e=new pt(t.tag,t.data,t.children&&t.children.slice(),t.text,t.elm,t.context,t.componentOptions,t.asyncFactory);return e.ns=t.ns,e.isStatic=t.isStatic,e.key=t.key,e.isComment=t.isComment,e.fnContext=t.fnContext,e.fnOptions=t.fnOptions,e.fnScopeId=t.fnScopeId,e.asyncMeta=t.asyncMeta,e.isCloned=!0,e}var mt=0,gt=function(){function t(){this.id=mt++,this.subs=[]}return t.prototype.addSub=function(t){this.subs.push(t)},t.prototype.removeSub=function(t){_(this.subs,t)},t.prototype.depend=function(e){t.target&&t.target.addDep(this)},t.prototype.notify=function(t){var e=this.subs.slice();for(var n=0,r=e.length;n0&&(Gt((c=t(c,"".concat(n||"","_").concat(r)))[0])&&Gt(f)&&(p[l]=ht(f.text+c[0].text),c.shift()),p.push.apply(p,c)):u(c)?Gt(f)?p[l]=ht(f.text+c):""!==c&&p.push(ht(c)):Gt(c)&&Gt(f)?p[l]=ht(f.text+c.text):(s(e._isVList)&&a(c.tag)&&i(c.key)&&a(n)&&(c.key="__vlist".concat(n,"_").concat(r,"__")),p.push(c)));return p}(t):void 0}function Gt(t){return a(t)&&a(t.text)&&!1===t.isComment}function Jt(t,e){var n,r,i,s,u=null;if(o(t)||"string"==typeof t)for(u=new Array(t.length),n=0,r=t.length;n0,s=e?!!e.$stable:!a,u=e&&e.$key;if(e){if(e._normalized)return e._normalized;if(s&&o&&o!==r&&u===o.$key&&!a&&!o.$hasNormal)return o;for(var c in i={},e)e[c]&&"$"!==c[0]&&(i[c]=he(t,n,c,e[c]))}else i={};for(var l in n)l in i||(i[l]=ve(n,l));return e&&Object.isExtensible(e)&&(e._normalized=i),H(i,"$stable",s),H(i,"$key",u),H(i,"$hasNormal",a),i}function he(t,e,n,r){var i=function(){var e=lt;ft(t);var n=arguments.length?r.apply(null,arguments):r({}),i=(n=n&&"object"==typeof n&&!o(n)?[n]:Kt(n))&&n[0];return ft(e),n&&(!i||1===n.length&&i.isComment&&!pe(i))?void 0:n};return r.proxy&&Object.defineProperty(e,n,{get:i,enumerable:!0,configurable:!0}),i}function ve(t,e){return function(){return t[e]}}function me(t){return{get attrs(){if(!t._attrsProxy){var e=t._attrsProxy={};H(e,"_v_attr_proxy",!0),ge(e,t.$attrs,r,t,"$attrs")}return t._attrsProxy},get listeners(){t._listenersProxy||ge(t._listenersProxy={},t.$listeners,r,t,"$listeners");return t._listenersProxy},get slots(){return function(t){t._slotsProxy||be(t._slotsProxy={},t.$scopedSlots);return t._slotsProxy}(t)},emit:E(t.$emit,t),expose:function(e){e&&Object.keys(e).forEach((function(n){return Nt(t,e,n)}))}}}function ge(t,e,n,r,o){var i=!1;for(var a in e)a in t?e[a]!==n[a]&&(i=!0):(i=!0,ye(t,a,r,o));for(var a in t)a in e||(i=!0,delete t[a]);return i}function ye(t,e,n,r){Object.defineProperty(t,e,{enumerable:!0,configurable:!0,get:function(){return n[r][e]}})}function be(t,e){for(var n in e)t[n]=e[n];for(var n in t)n in e||delete t[n]}var _e=null;function xe(t,e){return(t.__esModule||ct&&"Module"===t[Symbol.toStringTag])&&(t=t.default),l(t)?e.extend(t):t}function we(t){if(o(t))for(var e=0;edocument.createEvent("Event").timeStamp&&(sn=function(){return un.now()})}var cn=function(t,e){if(t.post){if(!e.post)return 1}else if(e.post)return-1;return t.id-e.id};function ln(){var t,e;for(an=sn(),rn=!0,Ze.sort(cn),on=0;onon&&Ze[n].id>t.id;)n--;Ze.splice(n+1,0,t)}else Ze.push(t);nn||(nn=!0,De(ln))}}function pn(t,e){if(t){for(var n=Object.create(null),r=ct?Reflect.ownKeys(t):Object.keys(t),o=0;o-1)if(i&&!w(o,"default"))a=!1;else if(""===a||a===S(t)){var u=Rn(String,o.type);(u<0||s-1:"string"==typeof t?t.split(",").indexOf(e)>-1:!!d(t)&&t.test(e)}function Jn(t,e){var n=t.cache,r=t.keys,o=t._vnode;for(var i in n){var a=n[i];if(a){var s=a.name;s&&!e(s)&&Xn(n,i,r,o)}}}function Xn(t,e,n,r){var o=t[e];!o||r&&o.tag===r.tag||o.componentInstance.$destroy(),t[e]=null,_(n,e)}Hn.prototype._init=function(t){var e=this;e._uid=qn++,e._isVue=!0,e.__v_skip=!0,e._scope=new Ft(!0),e._scope._vm=!0,t&&t._isComponent?function(t,e){var n=t.$options=Object.create(t.constructor.options),r=e._parentVnode;n.parent=e.parent,n._parentVnode=r;var o=r.componentOptions;n.propsData=o.propsData,n._parentListeners=o.listeners,n._renderChildren=o.children,n._componentTag=o.tag,e.render&&(n.render=e.render,n.staticRenderFns=e.staticRenderFns)}(e,t):e.$options=Sn(Vn(e.constructor),t||{},e),e._renderProxy=e,e._self=e,function(t){var e=t.$options,n=e.parent;if(n&&!e.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(t)}t.$parent=n,t.$root=n?n.$root:t,t.$children=[],t.$refs={},t._provided=n?n._provided:Object.create(null),t._watcher=null,t._inactive=null,t._directInactive=!1,t._isMounted=!1,t._isDestroyed=!1,t._isBeingDestroyed=!1}(e),function(t){t._events=Object.create(null),t._hasHookEvent=!1;var e=t.$options._parentListeners;e&&Ke(t,e)}(e),function(t){t._vnode=null,t._staticTrees=null;var e=t.$options,n=t.$vnode=e._parentVnode,o=n&&n.context;t.$slots=le(e._renderChildren,o),t.$scopedSlots=n?de(t.$parent,n.data.scopedSlots,t.$slots):r,t._c=function(e,n,r,o){return ke(t,e,n,r,o,!1)},t.$createElement=function(e,n,r,o){return ke(t,e,n,r,o,!0)};var i=n&&n.data;Pt(t,"$attrs",i&&i.attrs||r,null,!0),Pt(t,"$listeners",e._parentListeners||r,null,!0)}(e),Qe(e,"beforeCreate",void 0,!1),function(t){var e=pn(t.$options.inject,t);e&&(Ct(!1),Object.keys(e).forEach((function(n){Pt(t,n,e[n])})),Ct(!0))}(e),Dn(e),function(t){var e=t.$options.provide;if(e){var n=c(e)?e.call(t):e;if(!l(n))return;for(var r=zt(t),o=ct?Reflect.ownKeys(n):Object.keys(n),i=0;i1?P(n):n;for(var r=P(arguments,1),o='event handler for "'.concat(t,'"'),i=0,a=n.length;iparseInt(this.max)&&Xn(t,e[0],e,this._vnode),this.vnodeToCache=null}}},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var t in this.cache)Xn(this.cache,t,this.keys)},mounted:function(){var t=this;this.cacheVNode(),this.$watch("include",(function(e){Jn(t,(function(t){return Gn(e,t)}))})),this.$watch("exclude",(function(e){Jn(t,(function(t){return!Gn(e,t)}))}))},updated:function(){this.cacheVNode()},render:function(){var t=this.$slots.default,e=we(t),n=e&&e.componentOptions;if(n){var r=Kn(n),o=this.include,i=this.exclude;if(o&&(!r||!Gn(o,r))||i&&r&&Gn(i,r))return e;var a=this.cache,s=this.keys,u=null==e.key?n.Ctor.cid+(n.tag?"::".concat(n.tag):""):e.key;a[u]?(e.componentInstance=a[u].componentInstance,_(s,u),s.push(u)):(this.vnodeToCache=e,this.keyToCache=u),e.data.keepAlive=!0}return e||t&&t[0]}}};!function(t){var e={get:function(){return B}};Object.defineProperty(t,"config",e),t.util={warn:xn,extend:A,mergeOptions:Sn,defineReactive:Pt},t.set=At,t.delete=Tt,t.nextTick=De,t.observable=function(t){return Et(t),t},t.options=Object.create(null),F.forEach((function(e){t.options[e+"s"]=Object.create(null)})),t.options._base=t,A(t.options.components,Qn),function(t){t.use=function(t){var e=this._installedPlugins||(this._installedPlugins=[]);if(e.indexOf(t)>-1)return this;var n=P(arguments,1);return n.unshift(this),c(t.install)?t.install.apply(t,n):c(t)&&t.apply(null,n),e.push(t),this}}(t),function(t){t.mixin=function(t){return this.options=Sn(this.options,t),this}}(t),Wn(t),function(t){F.forEach((function(e){t[e]=function(t,n){return n?("component"===e&&p(n)&&(n.name=n.name||t,n=this.options._base.extend(n)),"directive"===e&&c(n)&&(n={bind:n,update:n}),this.options[e+"s"][t]=n,n):this.options[e+"s"][t]}}))}(t)}(Hn),Object.defineProperty(Hn.prototype,"$isServer",{get:it}),Object.defineProperty(Hn.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(Hn,"FunctionalRenderContext",{value:dn}),Hn.version="2.7.10";var Zn=y("style,class"),tr=y("input,textarea,option,select,progress"),er=y("contenteditable,draggable,spellcheck"),nr=y("events,caret,typing,plaintext-only"),rr=y("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible"),or="http://www.w3.org/1999/xlink",ir=function(t){return":"===t.charAt(5)&&"xlink"===t.slice(0,5)},ar=function(t){return ir(t)?t.slice(6,t.length):""},sr=function(t){return null==t||!1===t};function ur(t){for(var e=t.data,n=t,r=t;a(r.componentInstance);)(r=r.componentInstance._vnode)&&r.data&&(e=cr(r.data,e));for(;a(n=n.parent);)n&&n.data&&(e=cr(e,n.data));return function(t,e){if(a(t)||a(e))return lr(t,fr(e));return""}(e.staticClass,e.class)}function cr(t,e){return{staticClass:lr(t.staticClass,e.staticClass),class:a(t.class)?[t.class,e.class]:e.class}}function lr(t,e){return t?e?t+" "+e:t:e||""}function fr(t){return Array.isArray(t)?function(t){for(var e,n="",r=0,o=t.length;r-1?Mr(t,e,n):rr(e)?sr(n)?t.removeAttribute(e):(n="allowfullscreen"===e&&"EMBED"===t.tagName?"true":e,t.setAttribute(e,n)):er(e)?t.setAttribute(e,function(t,e){return sr(e)||"false"===e?"false":"contenteditable"===t&&nr(e)?e:"true"}(e,n)):ir(e)?sr(n)?t.removeAttributeNS(or,ar(e)):t.setAttributeNS(or,e,n):Mr(t,e,n)}function Mr(t,e,n){if(sr(n))t.removeAttribute(e);else{if(X&&!Y&&"TEXTAREA"===t.tagName&&"placeholder"===e&&""!==n&&!t.__ieph){var r=function(e){e.stopImmediatePropagation(),t.removeEventListener("input",r)};t.addEventListener("input",r),t.__ieph=!0}t.setAttribute(e,n)}}var Ir={create:Lr,update:Lr};function Dr(t,e){var n=e.elm,r=e.data,o=t.data;if(!(i(r.staticClass)&&i(r.class)&&(i(o)||i(o.staticClass)&&i(o.class)))){var s=ur(e),u=n._transitionClasses;a(u)&&(s=lr(s,fr(u))),s!==n._prevClass&&(n.setAttribute("class",s),n._prevClass=s)}}var Nr,Ur={create:Dr,update:Dr};function Fr(t,e,n){var r=Nr;return function o(){var i=e.apply(null,arguments);null!==i&&qr(t,o,n,r)}}var zr=Ee&&!(et&&Number(et[1])<=53);function Br(t,e,n,r){if(zr){var o=an,i=e;e=i._wrapper=function(t){if(t.target===t.currentTarget||t.timeStamp>=o||t.timeStamp<=0||t.target.ownerDocument!==document)return i.apply(this,arguments)}}Nr.addEventListener(t,e,rt?{capture:n,passive:r}:n)}function qr(t,e,n,r){(r||Nr).removeEventListener(t,e._wrapper||e,n)}function Vr(t,e){if(!i(t.data.on)||!i(e.data.on)){var n=e.data.on||{},r=t.data.on||{};Nr=e.elm||t.elm,function(t){if(a(t.__r)){var e=X?"change":"input";t[e]=[].concat(t.__r,t[e]||[]),delete t.__r}a(t.__c)&&(t.change=[].concat(t.__c,t.change||[]),delete t.__c)}(n),Vt(n,r,Br,qr,Fr,e.context),Nr=void 0}}var Hr,Wr={create:Vr,update:Vr,destroy:function(t){return Vr(t,wr)}};function Kr(t,e){if(!i(t.data.domProps)||!i(e.data.domProps)){var n,r,o=e.elm,u=t.data.domProps||{},c=e.data.domProps||{};for(n in(a(c.__ob__)||s(c._v_attr_proxy))&&(c=e.data.domProps=A({},c)),u)n in c||(o[n]="");for(n in c){if(r=c[n],"textContent"===n||"innerHTML"===n){if(e.children&&(e.children.length=0),r===u[n])continue;1===o.childNodes.length&&o.removeChild(o.childNodes[0])}if("value"===n&&"PROGRESS"!==o.tagName){o._value=r;var l=i(r)?"":String(r);Gr(o,l)&&(o.value=l)}else if("innerHTML"===n&&hr(o.tagName)&&i(o.innerHTML)){(Hr=Hr||document.createElement("div")).innerHTML="".concat(r,"");for(var f=Hr.firstChild;o.firstChild;)o.removeChild(o.firstChild);for(;f.firstChild;)o.appendChild(f.firstChild)}else if(r!==u[n])try{o[n]=r}catch(t){}}}}function Gr(t,e){return!t.composing&&("OPTION"===t.tagName||function(t,e){var n=!0;try{n=document.activeElement!==t}catch(t){}return n&&t.value!==e}(t,e)||function(t,e){var n=t.value,r=t._vModifiers;if(a(r)){if(r.number)return g(n)!==g(e);if(r.trim)return n.trim()!==e.trim()}return n!==e}(t,e))}var Jr={create:Kr,update:Kr},Xr=k((function(t){var e={},n=/:(.+)/;return t.split(/;(?![^(]*\))/g).forEach((function(t){if(t){var r=t.split(n);r.length>1&&(e[r[0].trim()]=r[1].trim())}})),e}));function Yr(t){var e=Qr(t.style);return t.staticStyle?A(t.staticStyle,e):e}function Qr(t){return Array.isArray(t)?T(t):"string"==typeof t?Xr(t):t}var Zr,to=/^--/,eo=/\s*!important$/,no=function(t,e,n){if(to.test(e))t.style.setProperty(e,n);else if(eo.test(n))t.style.setProperty(S(e),n.replace(eo,""),"important");else{var r=oo(e);if(Array.isArray(n))for(var o=0,i=n.length;o-1?e.split(so).forEach((function(e){return t.classList.add(e)})):t.classList.add(e);else{var n=" ".concat(t.getAttribute("class")||""," ");n.indexOf(" "+e+" ")<0&&t.setAttribute("class",(n+e).trim())}}function co(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(so).forEach((function(e){return t.classList.remove(e)})):t.classList.remove(e),t.classList.length||t.removeAttribute("class");else{for(var n=" ".concat(t.getAttribute("class")||""," "),r=" "+e+" ";n.indexOf(r)>=0;)n=n.replace(r," ");(n=n.trim())?t.setAttribute("class",n):t.removeAttribute("class")}}function lo(t){if(t){if("object"==typeof t){var e={};return!1!==t.css&&A(e,fo(t.name||"v")),A(e,t),e}return"string"==typeof t?fo(t):void 0}}var fo=k((function(t){return{enterClass:"".concat(t,"-enter"),enterToClass:"".concat(t,"-enter-to"),enterActiveClass:"".concat(t,"-enter-active"),leaveClass:"".concat(t,"-leave"),leaveToClass:"".concat(t,"-leave-to"),leaveActiveClass:"".concat(t,"-leave-active")}})),po=G&&!Y,ho="transition",vo="transitionend",mo="animation",go="animationend";po&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(ho="WebkitTransition",vo="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(mo="WebkitAnimation",go="webkitAnimationEnd"));var yo=G?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(t){return t()};function bo(t){yo((function(){yo(t)}))}function _o(t,e){var n=t._transitionClasses||(t._transitionClasses=[]);n.indexOf(e)<0&&(n.push(e),uo(t,e))}function xo(t,e){t._transitionClasses&&_(t._transitionClasses,e),co(t,e)}function wo(t,e,n){var r=Oo(t,e),o=r.type,i=r.timeout,a=r.propCount;if(!o)return n();var s="transition"===o?vo:go,u=0,c=function(){t.removeEventListener(s,l),n()},l=function(e){e.target===t&&++u>=a&&c()};setTimeout((function(){u0&&(n="transition",l=a,f=i.length):"animation"===e?c>0&&(n="animation",l=c,f=u.length):f=(n=(l=Math.max(a,c))>0?a>c?"transition":"animation":null)?"transition"===n?i.length:u.length:0,{type:n,timeout:l,propCount:f,hasTransform:"transition"===n&&ko.test(r[ho+"Property"])}}function $o(t,e){for(;t.length1}function Ao(t,e){!0!==e.data.show&&jo(e)}var To=function(t){var e,n,r={},c=t.modules,l=t.nodeOps;for(e=0;eh?_(t,i(n[g+1])?null:n[g+1].elm,n,d,g,r):d>g&&w(e,f,h)}(f,v,g,n,c):a(g)?(a(t.text)&&l.setTextContent(f,""),_(f,null,g,0,g.length-1,n)):a(v)?w(v,0,v.length-1):a(t.text)&&l.setTextContent(f,""):t.text!==e.text&&l.setTextContent(f,e.text),a(h)&&a(d=h.hook)&&a(d=d.postpatch)&&d(t,e)}}}function C(t,e,n){if(s(n)&&a(t.parent))t.parent.data.pendingInsert=e;else for(var r=0;r-1,a.selected!==i&&(a.selected=i);else if(I(Do(a),r))return void(t.selectedIndex!==s&&(t.selectedIndex=s));o||(t.selectedIndex=-1)}}function Io(t,e){return e.every((function(e){return!I(e,t)}))}function Do(t){return"_value"in t?t._value:t.value}function No(t){t.target.composing=!0}function Uo(t){t.target.composing&&(t.target.composing=!1,Fo(t.target,"input"))}function Fo(t,e){var n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!0),t.dispatchEvent(n)}function zo(t){return!t.componentInstance||t.data&&t.data.transition?t:zo(t.componentInstance._vnode)}var Bo={model:Lo,show:{bind:function(t,e,n){var r=e.value,o=(n=zo(n)).data&&n.data.transition,i=t.__vOriginalDisplay="none"===t.style.display?"":t.style.display;r&&o?(n.data.show=!0,jo(n,(function(){t.style.display=i}))):t.style.display=r?i:"none"},update:function(t,e,n){var r=e.value;!r!=!e.oldValue&&((n=zo(n)).data&&n.data.transition?(n.data.show=!0,r?jo(n,(function(){t.style.display=t.__vOriginalDisplay})):So(n,(function(){t.style.display="none"}))):t.style.display=r?t.__vOriginalDisplay:"none")},unbind:function(t,e,n,r,o){o||(t.style.display=t.__vOriginalDisplay)}}},qo={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function Vo(t){var e=t&&t.componentOptions;return e&&e.Ctor.options.abstract?Vo(we(e.children)):t}function Ho(t){var e={},n=t.$options;for(var r in n.propsData)e[r]=t[r];var o=n._parentListeners;for(var r in o)e[$(r)]=o[r];return e}function Wo(t,e){if(/\d-keep-alive$/.test(e.tag))return t("keep-alive",{props:e.componentOptions.propsData})}var Ko=function(t){return t.tag||pe(t)},Go=function(t){return"show"===t.name},Jo={name:"transition",props:qo,abstract:!0,render:function(t){var e=this,n=this.$slots.default;if(n&&(n=n.filter(Ko)).length){0;var r=this.mode;0;var o=n[0];if(function(t){for(;t=t.parent;)if(t.data.transition)return!0}(this.$vnode))return o;var i=Vo(o);if(!i)return o;if(this._leaving)return Wo(t,o);var a="__transition-".concat(this._uid,"-");i.key=null==i.key?i.isComment?a+"comment":a+i.tag:u(i.key)?0===String(i.key).indexOf(a)?i.key:a+i.key:i.key;var s=(i.data||(i.data={})).transition=Ho(this),c=this._vnode,l=Vo(c);if(i.data.directives&&i.data.directives.some(Go)&&(i.data.show=!0),l&&l.data&&!function(t,e){return e.key===t.key&&e.tag===t.tag}(i,l)&&!pe(l)&&(!l.componentInstance||!l.componentInstance._vnode.isComment)){var f=l.data.transition=A({},s);if("out-in"===r)return this._leaving=!0,Ht(f,"afterLeave",(function(){e._leaving=!1,e.$forceUpdate()})),Wo(t,o);if("in-out"===r){if(pe(i))return c;var p,d=function(){p()};Ht(s,"afterEnter",d),Ht(s,"enterCancelled",d),Ht(f,"delayLeave",(function(t){p=t}))}}return o}}},Xo=A({tag:String,moveClass:String},qo);function Yo(t){t.elm._moveCb&&t.elm._moveCb(),t.elm._enterCb&&t.elm._enterCb()}function Qo(t){t.data.newPos=t.elm.getBoundingClientRect()}function Zo(t){var e=t.data.pos,n=t.data.newPos,r=e.left-n.left,o=e.top-n.top;if(r||o){t.data.moved=!0;var i=t.elm.style;i.transform=i.WebkitTransform="translate(".concat(r,"px,").concat(o,"px)"),i.transitionDuration="0s"}}delete Xo.mode;var ti={Transition:Jo,TransitionGroup:{props:Xo,beforeMount:function(){var t=this,e=this._update;this._update=function(n,r){var o=Je(t);t.__patch__(t._vnode,t.kept,!1,!0),t._vnode=t.kept,o(),e.call(t,n,r)}},render:function(t){for(var e=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),r=this.prevChildren=this.children,o=this.$slots.default||[],i=this.children=[],a=Ho(this),s=0;s-1?mr[t]=e.constructor===window.HTMLUnknownElement||e.constructor===window.HTMLElement:mr[t]=/HTMLUnknownElement/.test(e.toString())},A(Hn.options.directives,Bo),A(Hn.options.components,ti),Hn.prototype.__patch__=G?To:L,Hn.prototype.$mount=function(t,e){return function(t,e,n){var r;t.$el=e,t.$options.render||(t.$options.render=dt),Qe(t,"beforeMount"),r=function(){t._update(t._render(),n)},new qe(t,r,L,{before:function(){t._isMounted&&!t._isDestroyed&&Qe(t,"beforeUpdate")}},!0),n=!1;var o=t._preWatchers;if(o)for(var i=0;i=0&&(e=t.slice(r),t=t.slice(0,r));var o=t.indexOf("?");return o>=0&&(n=t.slice(o+1),t=t.slice(0,o)),{path:t,query:n,hash:e}}(o.path||""),c=e&&e.path||"/",l=u.path?xi(u.path,c,n||o.append):c,f=function(t,e,n){void 0===e&&(e={});var r,o=n||ui;try{r=o(t||"")}catch(t){r={}}for(var i in e){var a=e[i];r[i]=Array.isArray(a)?a.map(si):si(a)}return r}(u.query,o.query,r&&r.options.parseQuery),p=o.hash||u.hash;return p&&"#"!==p.charAt(0)&&(p="#"+p),{_normalized:!0,path:l,query:f,hash:p}}var Bi,qi=function(){},Vi={name:"RouterLink",props:{to:{type:[String,Object],required:!0},tag:{type:String,default:"a"},custom:Boolean,exact:Boolean,exactPath:Boolean,append:Boolean,replace:Boolean,activeClass:String,exactActiveClass:String,ariaCurrentValue:{type:String,default:"page"},event:{type:[String,Array],default:"click"}},render:function(t){var e=this,n=this.$router,r=this.$route,o=n.resolve(this.to,r,this.append),i=o.location,a=o.route,s=o.href,u={},c=n.options.linkActiveClass,l=n.options.linkExactActiveClass,f=null==c?"router-link-active":c,p=null==l?"router-link-exact-active":l,d=null==this.activeClass?f:this.activeClass,h=null==this.exactActiveClass?p:this.exactActiveClass,v=a.redirectedFrom?fi(null,zi(a.redirectedFrom),null,n):a;u[h]=mi(r,v,this.exactPath),u[d]=this.exact||this.exactPath?u[h]:function(t,e){return 0===t.path.replace(li,"/").indexOf(e.path.replace(li,"/"))&&(!e.hash||t.hash===e.hash)&&function(t,e){for(var n in e)if(!(n in t))return!1;return!0}(t.query,e.query)}(r,v);var m=u[h]?this.ariaCurrentValue:null,g=function(t){Hi(t)&&(e.replace?n.replace(i,qi):n.push(i,qi))},y={click:Hi};Array.isArray(this.event)?this.event.forEach((function(t){y[t]=g})):y[this.event]=g;var b={class:u},_=!this.$scopedSlots.$hasNormal&&this.$scopedSlots.default&&this.$scopedSlots.default({href:s,route:a,navigate:g,isActive:u[d],isExactActive:u[h]});if(_){if(1===_.length)return _[0];if(_.length>1||!_.length)return 0===_.length?t():t("span",{},_)}if("a"===this.tag)b.on=y,b.attrs={href:s,"aria-current":m};else{var x=function t(e){var n;if(e)for(var r=0;r-1&&(s.params[p]=n.params[p]);return s.path=Fi(l.path,s.params),u(l,s,a)}if(s.path){s.params={};for(var d=0;d-1}function wa(t,e){return xa(t)&&t._isRouter&&(null==e||t.type===e)}function ka(t,e,n){var r=function(o){o>=t.length?n():t[o]?e(t[o],(function(){r(o+1)})):r(o+1)};r(0)}function Oa(t){return function(e,n,r){var o=!1,i=0,a=null;$a(t,(function(t,e,n,s){if("function"==typeof t&&void 0===t.cid){o=!0,i++;var u,c=Sa((function(e){var o;((o=e).__esModule||ja&&"Module"===o[Symbol.toStringTag])&&(e=e.default),t.resolved="function"==typeof e?e:Bi.extend(e),n.components[s]=e,--i<=0&&r()})),l=Sa((function(t){var e="Failed to resolve async component "+s+": "+t;a||(a=xa(t)?t:new Error(e),r(a))}));try{u=t(c,l)}catch(t){l(t)}if(u)if("function"==typeof u.then)u.then(c,l);else{var f=u.component;f&&"function"==typeof f.then&&f.then(c,l)}}})),o||r()}}function $a(t,e){return Ca(t.map((function(t){return Object.keys(t.components).map((function(n){return e(t.components[n],t.instances[n],t,n)}))})))}function Ca(t){return Array.prototype.concat.apply([],t)}var ja="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;function Sa(t){var e=!1;return function(){for(var n=[],r=arguments.length;r--;)n[r]=arguments[r];if(!e)return e=!0,t.apply(this,n)}}var Ea=function(t,e){this.router=t,this.base=function(t){if(!t)if(Wi){var e=document.querySelector("base");t=(t=e&&e.getAttribute("href")||"/").replace(/^https?:\/\/[^\/]+/,"")}else t="/";"/"!==t.charAt(0)&&(t="/"+t);return t.replace(/\/$/,"")}(e),this.current=di,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[],this.listeners=[]};function Pa(t,e,n,r){var o=$a(t,(function(t,r,o,i){var a=function(t,e){"function"!=typeof t&&(t=Bi.extend(t));return t.options[e]}(t,e);if(a)return Array.isArray(a)?a.map((function(t){return n(t,r,o,i)})):n(a,r,o,i)}));return Ca(r?o.reverse():o)}function Aa(t,e){if(e)return function(){return t.apply(e,arguments)}}Ea.prototype.listen=function(t){this.cb=t},Ea.prototype.onReady=function(t,e){this.ready?t():(this.readyCbs.push(t),e&&this.readyErrorCbs.push(e))},Ea.prototype.onError=function(t){this.errorCbs.push(t)},Ea.prototype.transitionTo=function(t,e,n){var r,o=this;try{r=this.router.match(t,this.current)}catch(t){throw this.errorCbs.forEach((function(e){e(t)})),t}var i=this.current;this.confirmTransition(r,(function(){o.updateRoute(r),e&&e(r),o.ensureURL(),o.router.afterHooks.forEach((function(t){t&&t(r,i)})),o.ready||(o.ready=!0,o.readyCbs.forEach((function(t){t(r)})))}),(function(t){n&&n(t),t&&!o.ready&&(wa(t,ma.redirected)&&i===di||(o.ready=!0,o.readyErrorCbs.forEach((function(e){e(t)}))))}))},Ea.prototype.confirmTransition=function(t,e,n){var r=this,o=this.current;this.pending=t;var i,a,s=function(t){!wa(t)&&xa(t)&&(r.errorCbs.length?r.errorCbs.forEach((function(e){e(t)})):console.error(t)),n&&n(t)},u=t.matched.length-1,c=o.matched.length-1;if(mi(t,o)&&u===c&&t.matched[u]===o.matched[c])return this.ensureURL(),t.hash&&oa(this.router,o,t,!1),s(((a=ba(i=o,t,ma.duplicated,'Avoided redundant navigation to current location: "'+i.fullPath+'".')).name="NavigationDuplicated",a));var l=function(t,e){var n,r=Math.max(t.length,e.length);for(n=0;n0)){var e=this.router,n=e.options.scrollBehavior,r=da&&n;r&&this.listeners.push(ra());var o=function(){var n=t.current,o=La(t.base);t.current===di&&o===t._startLocation||t.transitionTo(o,(function(t){r&&oa(e,t,n,!0)}))};window.addEventListener("popstate",o),this.listeners.push((function(){window.removeEventListener("popstate",o)}))}},e.prototype.go=function(t){window.history.go(t)},e.prototype.push=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){ha(wi(r.base+t.fullPath)),oa(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){va(wi(r.base+t.fullPath)),oa(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.ensureURL=function(t){if(La(this.base)!==this.current.fullPath){var e=wi(this.base+this.current.fullPath);t?ha(e):va(e)}},e.prototype.getCurrentLocation=function(){return La(this.base)},e}(Ea);function La(t){var e=window.location.pathname,n=e.toLowerCase(),r=t.toLowerCase();return!t||n!==r&&0!==n.indexOf(wi(r+"/"))||(e=e.slice(t.length)),(e||"/")+window.location.search+window.location.hash}var Ra=function(t){function e(e,n,r){t.call(this,e,n),r&&function(t){var e=La(t);if(!/^\/#/.test(e))return window.location.replace(wi(t+"/#"+e)),!0}(this.base)||Ma()}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setupListeners=function(){var t=this;if(!(this.listeners.length>0)){var e=this.router.options.scrollBehavior,n=da&&e;n&&this.listeners.push(ra());var r=function(){var e=t.current;Ma()&&t.transitionTo(Ia(),(function(r){n&&oa(t.router,r,e,!0),da||Ua(r.fullPath)}))},o=da?"popstate":"hashchange";window.addEventListener(o,r),this.listeners.push((function(){window.removeEventListener(o,r)}))}},e.prototype.push=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){Na(t.fullPath),oa(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){Ua(t.fullPath),oa(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.go=function(t){window.history.go(t)},e.prototype.ensureURL=function(t){var e=this.current.fullPath;Ia()!==e&&(t?Na(e):Ua(e))},e.prototype.getCurrentLocation=function(){return Ia()},e}(Ea);function Ma(){var t=Ia();return"/"===t.charAt(0)||(Ua("/"+t),!1)}function Ia(){var t=window.location.href,e=t.indexOf("#");return e<0?"":t=t.slice(e+1)}function Da(t){var e=window.location.href,n=e.indexOf("#");return(n>=0?e.slice(0,n):e)+"#"+t}function Na(t){da?ha(Da(t)):window.location.hash=t}function Ua(t){da?va(Da(t)):window.location.replace(Da(t))}var Fa=function(t){function e(e,n){t.call(this,e,n),this.stack=[],this.index=-1}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.push=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index+1).concat(t),r.index++,e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index).concat(t),e&&e(t)}),n)},e.prototype.go=function(t){var e=this,n=this.index+t;if(!(n<0||n>=this.stack.length)){var r=this.stack[n];this.confirmTransition(r,(function(){var t=e.current;e.index=n,e.updateRoute(r),e.router.afterHooks.forEach((function(e){e&&e(r,t)}))}),(function(t){wa(t,ma.duplicated)&&(e.index=n)}))}},e.prototype.getCurrentLocation=function(){var t=this.stack[this.stack.length-1];return t?t.fullPath:"/"},e.prototype.ensureURL=function(){},e}(Ea),za=function(t){void 0===t&&(t={}),this.app=null,this.apps=[],this.options=t,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=Ji(t.routes||[],this);var e=t.mode||"hash";switch(this.fallback="history"===e&&!da&&!1!==t.fallback,this.fallback&&(e="hash"),Wi||(e="abstract"),this.mode=e,e){case"history":this.history=new Ta(this,t.base);break;case"hash":this.history=new Ra(this,t.base,this.fallback);break;case"abstract":this.history=new Fa(this,t.base);break;default:0}},Ba={currentRoute:{configurable:!0}};za.prototype.match=function(t,e,n){return this.matcher.match(t,e,n)},Ba.currentRoute.get=function(){return this.history&&this.history.current},za.prototype.init=function(t){var e=this;if(this.apps.push(t),t.$once("hook:destroyed",(function(){var n=e.apps.indexOf(t);n>-1&&e.apps.splice(n,1),e.app===t&&(e.app=e.apps[0]||null),e.app||e.history.teardown()})),!this.app){this.app=t;var n=this.history;if(n instanceof Ta||n instanceof Ra){var r=function(t){n.setupListeners(),function(t){var r=n.current,o=e.options.scrollBehavior;da&&o&&"fullPath"in t&&oa(e,t,r,!1)}(t)};n.transitionTo(n.getCurrentLocation(),r,r)}n.listen((function(t){e.apps.forEach((function(e){e._route=t}))}))}},za.prototype.beforeEach=function(t){return Va(this.beforeHooks,t)},za.prototype.beforeResolve=function(t){return Va(this.resolveHooks,t)},za.prototype.afterEach=function(t){return Va(this.afterHooks,t)},za.prototype.onReady=function(t,e){this.history.onReady(t,e)},za.prototype.onError=function(t){this.history.onError(t)},za.prototype.push=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!=typeof Promise)return new Promise((function(e,n){r.history.push(t,e,n)}));this.history.push(t,e,n)},za.prototype.replace=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!=typeof Promise)return new Promise((function(e,n){r.history.replace(t,e,n)}));this.history.replace(t,e,n)},za.prototype.go=function(t){this.history.go(t)},za.prototype.back=function(){this.go(-1)},za.prototype.forward=function(){this.go(1)},za.prototype.getMatchedComponents=function(t){var e=t?t.matched?t:this.resolve(t).route:this.currentRoute;return e?[].concat.apply([],e.matched.map((function(t){return Object.keys(t.components).map((function(e){return t.components[e]}))}))):[]},za.prototype.resolve=function(t,e,n){var r=zi(t,e=e||this.history.current,n,this),o=this.match(r,e),i=o.redirectedFrom||o.fullPath;return{location:r,route:o,href:function(t,e,n){var r="hash"===n?"#"+e:e;return t?wi(t+"/"+r):r}(this.history.base,i,this.mode),normalizedTo:r,resolved:o}},za.prototype.getRoutes=function(){return this.matcher.getRoutes()},za.prototype.addRoute=function(t,e){this.matcher.addRoute(t,e),this.history.current!==di&&this.history.transitionTo(this.history.getCurrentLocation())},za.prototype.addRoutes=function(t){this.matcher.addRoutes(t),this.history.current!==di&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(za.prototype,Ba);var qa=za;function Va(t,e){return t.push(e),function(){var n=t.indexOf(e);n>-1&&t.splice(n,1)}}za.install=function t(e){if(!t.installed||Bi!==e){t.installed=!0,Bi=e;var n=function(t){return void 0!==t},r=function(t,e){var r=t.$options._parentVnode;n(r)&&n(r=r.data)&&n(r=r.registerRouteInstance)&&r(t,e)};e.mixin({beforeCreate:function(){n(this.$options.router)?(this._routerRoot=this,this._router=this.$options.router,this._router.init(this),e.util.defineReactive(this,"_route",this._router.history.current)):this._routerRoot=this.$parent&&this.$parent._routerRoot||this,r(this,this)},destroyed:function(){r(this)}}),Object.defineProperty(e.prototype,"$router",{get:function(){return this._routerRoot._router}}),Object.defineProperty(e.prototype,"$route",{get:function(){return this._routerRoot._route}}),e.component("RouterView",bi),e.component("RouterLink",Vi);var o=e.config.optionMergeStrategies;o.beforeRouteEnter=o.beforeRouteLeave=o.beforeRouteUpdate=o.created}},za.version="3.6.5",za.isNavigationFailure=wa,za.NavigationFailureType=ma,za.START_LOCATION=di,Wi&&window.Vue&&window.Vue.use(za);n(92);n(121);var Ha={NotFound:()=>n.e(15).then(n.bind(null,321)),Layout:()=>Promise.all([n.e(0),n.e(2)]).then(n.bind(null,320))},Wa={"v-326c0e96":()=>n.e(16).then(n.bind(null,324)),"v-8b86a244":()=>n.e(17).then(n.bind(null,325)),"v-caa72da0":()=>n.e(18).then(n.bind(null,326)),"v-04dfc4b6":()=>n.e(20).then(n.bind(null,327)),"v-790e8dcb":()=>n.e(19).then(n.bind(null,328)),"v-39a454ea":()=>n.e(21).then(n.bind(null,329)),"v-47c0aa36":()=>n.e(12).then(n.bind(null,330)),"v-56b5564a":()=>n.e(11).then(n.bind(null,331)),"v-78bb802a":()=>n.e(22).then(n.bind(null,332)),"v-62312bfa":()=>n.e(23).then(n.bind(null,333)),"v-3804bcfa":()=>n.e(13).then(n.bind(null,334)),"v-71cad5b2":()=>n.e(24).then(n.bind(null,335)),"v-7d8caafc":()=>n.e(7).then(n.bind(null,336)),"v-b4876636":()=>n.e(25).then(n.bind(null,337)),"v-3a909d05":()=>n.e(6).then(n.bind(null,338)),"v-89c07936":()=>n.e(28).then(n.bind(null,339)),"v-0e0b83c2":()=>n.e(26).then(n.bind(null,340)),"v-2c392418":()=>n.e(14).then(n.bind(null,341)),"v-e34cd2ba":()=>n.e(3).then(n.bind(null,342)),"v-59ecf1c5":()=>n.e(5).then(n.bind(null,343)),"v-27e32547":()=>n.e(27).then(n.bind(null,344)),"v-c6d83f46":()=>n.e(29).then(n.bind(null,345)),"v-d1914176":()=>n.e(4).then(n.bind(null,346)),"v-a6e49ef6":()=>n.e(30).then(n.bind(null,347)),"v-36233536":()=>n.e(31).then(n.bind(null,348))};function Ka(t){const e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}const Ga=/-(\w)/g,Ja=Ka(t=>t.replace(Ga,(t,e)=>e?e.toUpperCase():"")),Xa=/\B([A-Z])/g,Ya=Ka(t=>t.replace(Xa,"-$1").toLowerCase()),Qa=Ka(t=>t.charAt(0).toUpperCase()+t.slice(1));function Za(t,e){if(!e)return;if(t(e))return t(e);return e.includes("-")?t(Qa(Ja(e))):t(Qa(e))||t(Ya(e))}const ts=Object.assign({},Ha,Wa),es=t=>ts[t],ns=t=>Wa[t],rs=t=>Ha[t],os=t=>Hn.component(t);function is(t){return Za(ns,t)}function as(t){return Za(rs,t)}function ss(t){return Za(es,t)}function us(t){return Za(os,t)}function cs(...t){return Promise.all(t.filter(t=>t).map(async t=>{if(!us(t)&&ss(t)){const e=await ss(t)();Hn.component(t,e.default)}}))}function ls(t,e){"undefined"!=typeof window&&window.__VUEPRESS__&&(window.__VUEPRESS__[t]=e)}var fs=n(86),ps=n.n(fs),ds=n(87),hs=n.n(ds),vs={created(){if(this.siteMeta=this.$site.headTags.filter(([t])=>"meta"===t).map(([t,e])=>e),this.$ssrContext){const e=this.getMergedMetaTags();this.$ssrContext.title=this.$title,this.$ssrContext.lang=this.$lang,this.$ssrContext.pageMeta=(t=e)?t.map(t=>{let e="{e+=` ${n}="${hs()(t[n])}"`}),e+">"}).join("\n "):"",this.$ssrContext.canonicalLink=gs(this.$canonicalUrl)}var t},mounted(){this.currentMetaTags=[...document.querySelectorAll("meta")],this.updateMeta(),this.updateCanonicalLink()},methods:{updateMeta(){document.title=this.$title,document.documentElement.lang=this.$lang;const t=this.getMergedMetaTags();this.currentMetaTags=ys(t,this.currentMetaTags)},getMergedMetaTags(){const t=this.$page.frontmatter.meta||[];return ps()([{name:"description",content:this.$description}],t,this.siteMeta,bs)},updateCanonicalLink(){ms(),this.$canonicalUrl&&document.head.insertAdjacentHTML("beforeend",gs(this.$canonicalUrl))}},watch:{$page(){this.updateMeta(),this.updateCanonicalLink()}},beforeDestroy(){ys(null,this.currentMetaTags),ms()}};function ms(){const t=document.querySelector("link[rel='canonical']");t&&t.remove()}function gs(t=""){return t?``:""}function ys(t,e){if(e&&[...e].filter(t=>t.parentNode===document.head).forEach(t=>document.head.removeChild(t)),t)return t.map(t=>{const e=document.createElement("meta");return Object.keys(t).forEach(n=>{e.setAttribute(n,t[n])}),document.head.appendChild(e),e})}function bs(t){for(const e of["name","property","itemprop"])if(t.hasOwnProperty(e))return t[e]+e;return JSON.stringify(t)}var _s=n(88),xs={mounted(){window.addEventListener("scroll",this.onScroll)},methods:{onScroll:n.n(_s)()((function(){this.setActiveHash()}),300),setActiveHash(){const t=[].slice.call(document.querySelectorAll(".sidebar-link")),e=[].slice.call(document.querySelectorAll(".header-anchor")).filter(e=>t.some(t=>t.hash===e.hash)),n=Math.max(window.pageYOffset,document.documentElement.scrollTop,document.body.scrollTop),r=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight),o=window.innerHeight+n;for(let t=0;t=i.parentElement.offsetTop+10&&(!a||n{this.$nextTick(()=>{this.$vuepress.$set("disableScrollBehavior",!1)})})}}}},beforeDestroy(){window.removeEventListener("scroll",this.onScroll)}},ws=n(22),ks=n.n(ws),Os=[vs,xs,{mounted(){ks.a.configure({showSpinner:!1}),this.$router.beforeEach((t,e,n)=>{t.path===e.path||Hn.component(t.name)||ks.a.start(),n()}),this.$router.afterEach(()=>{ks.a.done(),this.isSidebarOpen=!1})}}],$s={name:"GlobalLayout",computed:{layout(){const t=this.getLayout();return ls("layout",t),Hn.component(t)}},methods:{getLayout(){if(this.$page.path){const t=this.$page.frontmatter.layout;return t&&(this.$vuepress.getLayoutAsyncComponent(t)||this.$vuepress.getVueComponent(t))?t:"Layout"}return"NotFound"}}},Cs=n(13),js=Object(Cs.a)($s,(function(){return(0,this._self._c)(this.layout,{tag:"component"})}),[],!1,null,null,null).exports;!function(t,e,n){switch(e){case"components":t[e]||(t[e]={}),Object.assign(t[e],n);break;case"mixins":t[e]||(t[e]=[]),t[e].push(...n);break;default:throw new Error("Unknown option name.")}}(js,"mixins",Os);const Ss=[{name:"v-326c0e96",path:"/",component:js,beforeEnter:(t,e,n)=>{cs("Layout","v-326c0e96").then(n)}},{path:"/index.html",redirect:"/"},{name:"v-8b86a244",path:"/aboutus/",component:js,beforeEnter:(t,e,n)=>{cs("Layout","v-8b86a244").then(n)}},{path:"/aboutus/index.html",redirect:"/aboutus/"},{name:"v-caa72da0",path:"/advance/",component:js,beforeEnter:(t,e,n)=>{cs("Layout","v-caa72da0").then(n)}},{path:"/advance/index.html",redirect:"/advance/"},{name:"v-04dfc4b6",path:"/advance/elk.html",component:js,beforeEnter:(t,e,n)=>{cs("Layout","v-04dfc4b6").then(n)}},{name:"v-790e8dcb",path:"/advance/ci.html",component:js,beforeEnter:(t,e,n)=>{cs("Layout","v-790e8dcb").then(n)}},{name:"v-39a454ea",path:"/advance/eventbus.html",component:js,beforeEnter:(t,e,n)=>{cs("Layout","v-39a454ea").then(n)}},{name:"v-47c0aa36",path:"/checker/dev_debug.html",component:js,beforeEnter:(t,e,n)=>{cs("Layout","v-47c0aa36").then(n)}},{name:"v-56b5564a",path:"/checker/",component:js,beforeEnter:(t,e,n)=>{cs("Layout","v-56b5564a").then(n)}},{path:"/checker/index.html",redirect:"/checker/"},{name:"v-78bb802a",path:"/checker/examples.html",component:js,beforeEnter:(t,e,n)=>{cs("Layout","v-78bb802a").then(n)}},{name:"v-62312bfa",path:"/checker/request_editor.html",component:js,beforeEnter:(t,e,n)=>{cs("Layout","v-62312bfa").then(n)}},{name:"v-3804bcfa",path:"/develop/",component:js,beforeEnter:(t,e,n)=>{cs("Layout","v-3804bcfa").then(n)}},{path:"/develop/index.html",redirect:"/develop/"},{name:"v-71cad5b2",path:"/develop/plugin.html",component:js,beforeEnter:(t,e,n)=>{cs("Layout","v-71cad5b2").then(n)}},{name:"v-7d8caafc",path:"/guide/",component:js,beforeEnter:(t,e,n)=>{cs("Layout","v-7d8caafc").then(n)}},{path:"/guide/index.html",redirect:"/guide/"},{name:"v-b4876636",path:"/guide/api.html",component:js,beforeEnter:(t,e,n)=>{cs("Layout","v-b4876636").then(n)}},{name:"v-3a909d05",path:"/guide/checker.html",component:js,beforeEnter:(t,e,n)=>{cs("Layout","v-3a909d05").then(n)}},{name:"v-89c07936",path:"/guide/faq.html",component:js,beforeEnter:(t,e,n)=>{cs("Layout","v-89c07936").then(n)}},{name:"v-0e0b83c2",path:"/guide/command-line.html",component:js,beforeEnter:(t,e,n)=>{cs("Layout","v-0e0b83c2").then(n)}},{name:"v-2c392418",path:"/plugins/",component:js,beforeEnter:(t,e,n)=>{cs("Layout","v-2c392418").then(n)}},{path:"/plugins/index.html",redirect:"/plugins/"},{name:"v-e34cd2ba",path:"/guide/mockdata.html",component:js,beforeEnter:(t,e,n)=>{cs("Layout","v-e34cd2ba").then(n)}},{name:"v-59ecf1c5",path:"/plugins/android.html",component:js,beforeEnter:(t,e,n)=>{cs("Layout","v-59ecf1c5").then(n)}},{name:"v-27e32547",path:"/guide/config.html",component:js,beforeEnter:(t,e,n)=>{cs("Layout","v-27e32547").then(n)}},{name:"v-c6d83f46",path:"/plugins/api-coverage.html",component:js,beforeEnter:(t,e,n)=>{cs("Layout","v-c6d83f46").then(n)}},{name:"v-d1914176",path:"/plugins/bugit.html",component:js,beforeEnter:(t,e,n)=>{cs("Layout","v-d1914176").then(n)}},{name:"v-a6e49ef6",path:"/plugins/ios.html",component:js,beforeEnter:(t,e,n)=>{cs("Layout","v-a6e49ef6").then(n)}},{name:"v-36233536",path:"/plugins/tracking.html",component:js,beforeEnter:(t,e,n)=>{cs("Layout","v-36233536").then(n)}},{path:"*",component:js}],Es={title:"",description:"",base:"/lyrebird/",headTags:[],pages:[{title:"Home",frontmatter:{home:!0,heroImage:"lyrebird.png",actionText:"快速开始 →",actionLink:"/guide/",features:[{title:"并行测试",details:"通过多个插件以及自动检查脚本并行工作,一次测试获得多角度数据,自动化脚本与手工测试并行执行。"},{title:"自定义脚本",details:"支持快速开发有针对性的轻量级脚本,并行检测测试时不易察觉的问题。"},{title:"自定义插件",details:"支持开发比脚本自由度更高的插件,实现自定义的UI及API,除支持并行检测之外,还可以很方便的扩展Lyrebird的能力。"},{title:"轻巧易用",details:"一键安装。自由选择插件和脚本,组合成适合自己业务特点的解决方案。"},{title:"手工及自动化测试通用",details:"不只提供UI操作,也可以通过API控制所有功能。"},{title:"完整的记录人机交互过程",details:"实时的记录测试执行过程中人机交互过程,更方便的记录问题、复现问题。"}],footer:"MIT Licensed | Copyright © 2018-present Meituan"},regularPath:"/",relativePath:"README.md",key:"v-326c0e96",path:"/"},{title:"关于我们",frontmatter:{},regularPath:"/aboutus/",relativePath:"aboutus/README.md",key:"v-8b86a244",path:"/aboutus/"},{title:"配置文件",frontmatter:{},regularPath:"/advance/",relativePath:"advance/README.md",key:"v-caa72da0",path:"/advance/"},{title:"接入ELK",frontmatter:{},regularPath:"/advance/elk.html",relativePath:"advance/elk.md",key:"v-04dfc4b6",path:"/advance/elk.html"},{title:"持续集成",frontmatter:{},regularPath:"/advance/ci.html",relativePath:"advance/ci.md",key:"v-790e8dcb",path:"/advance/ci.html"},{title:"消息总线",frontmatter:{},regularPath:"/advance/eventbus.html",relativePath:"advance/eventbus.md",key:"v-39a454ea",path:"/advance/eventbus.html"},{title:"第一个检查器",frontmatter:{},regularPath:"/checker/dev_debug.html",relativePath:"checker/dev_debug.md",key:"v-47c0aa36",path:"/checker/dev_debug.html",headers:[{level:2,title:"环境准备",slug:"环境准备"},{level:2,title:"编写检查器",slug:"编写检查器"},{level:3,title:"监听频道",slug:"监听频道"},{level:3,title:"数据校验",slug:"数据校验"},{level:3,title:"报警",slug:"报警"},{level:2,title:"调试",slug:"调试"},{level:3,title:"开始调试",slug:"开始调试"}]},{title:"使用指南",frontmatter:{},regularPath:"/checker/",relativePath:"checker/README.md",key:"v-56b5564a",path:"/checker/",headers:[{level:2,title:"载入自定义脚本",slug:"载入自定义脚本"},{level:2,title:"捕获报警",slug:"捕获报警"}]},{title:"示例",frontmatter:{},regularPath:"/checker/examples.html",relativePath:"checker/examples.md",key:"v-78bb802a",path:"/checker/examples.html",headers:[{level:2,title:"大图检测",slug:"大图检测"},{level:3,title:"忽略无关数据",slug:"忽略无关数据"},{level:3,title:"获取目标数据",slug:"获取目标数据"},{level:3,title:"得出校验结果",slug:"得出校验结果"},{level:2,title:"重复请求检测",slug:"重复请求检测"},{level:3,title:"忽略无关数据",slug:"忽略无关数据-2"},{level:3,title:"获取目标数据",slug:"获取目标数据-2"},{level:3,title:"得到校验结果",slug:"得到校验结果"},{level:3,title:"更新验证集合",slug:"更新验证集合"}]},{title:"修改器",frontmatter:{},regularPath:"/checker/request_editor.html",relativePath:"checker/request_editor.md",key:"v-62312bfa",path:"/checker/request_editor.html",headers:[{level:2,title:"环境准备",slug:"环境准备"},{level:2,title:"编写",slug:"编写"},{level:3,title:"注册",slug:"注册"},{level:3,title:"修改请求",slug:"修改请求"},{level:2,title:"调试",slug:"调试"}]},{title:"开发环境配置",frontmatter:{},regularPath:"/develop/",relativePath:"develop/README.md",key:"v-3804bcfa",path:"/develop/",headers:[{level:2,title:"开发环境",slug:"开发环境"},{level:2,title:"配置Lyrebird工程",slug:"配置lyrebird工程"},{level:2,title:"调试代码",slug:"调试代码"},{level:3,title:"后端代码",slug:"后端代码"},{level:3,title:"前端代码",slug:"前端代码"}]},{title:"自定义插件开发",frontmatter:{},regularPath:"/develop/plugin.html",relativePath:"develop/plugin.md",key:"v-71cad5b2",path:"/develop/plugin.html",headers:[{level:2,title:"创建项目",slug:"创建项目"},{level:2,title:"结构说明",slug:"结构说明"},{level:2,title:"构建项目",slug:"构建项目"},{level:3,title:"构建前端",slug:"构建前端"},{level:3,title:"构建插件",slug:"构建插件"},{level:2,title:"开发调试",slug:"开发调试"},{level:3,title:"前端",slug:"前端"},{level:3,title:"插件",slug:"插件"}]},{title:"快速开始",frontmatter:{},regularPath:"/guide/",relativePath:"guide/README.md",key:"v-7d8caafc",path:"/guide/",headers:[{level:2,title:"环境要求",slug:"环境要求"},{level:2,title:"安装",slug:"安装"},{level:3,title:"安装插件 (选装)",slug:"安装插件-选装"},{level:2,title:"启动",slug:"启动"},{level:2,title:"连接移动设备",slug:"连接移动设备"},{level:2,title:"查看及录制数据",slug:"查看及录制数据"},{level:2,title:"使用 mock 数据",slug:"使用-mock-数据"},{level:2,title:"管理 mock 数据",slug:"管理-mock-数据"}]},{title:"接口",frontmatter:{},regularPath:"/guide/api.html",relativePath:"guide/api.md",key:"v-b4876636",path:"/guide/api.html",headers:[{level:2,title:"Lyrebird状态",slug:"lyrebird状态"},{level:2,title:"获取缓存中请求列表",slug:"获取缓存中请求列表"},{level:2,title:"获取缓存中请求详情",slug:"获取缓存中请求详情"},{level:2,title:"激活mock数据组",slug:"激活mock数据组"},{level:2,title:"取消激活mock数据",slug:"取消激活mock数据"},{level:2,title:"获取已激活mock数据",slug:"获取已激活mock数据"},{level:2,title:"获取指定频道的消息总线数据",slug:"获取指定频道的消息总线数据"},{level:2,title:"获取当前网络带宽限速",slug:"获取当前网络带宽限速"},{level:2,title:"设置网络带宽限速",slug:"设置网络带宽限速"}]},{title:"扩展",frontmatter:{},regularPath:"/guide/checker.html",relativePath:"guide/checker.md",key:"v-3a909d05",path:"/guide/checker.html",headers:[{level:2,title:"自定义脚本",slug:"自定义脚本"},{level:3,title:"载入自定义脚本",slug:"载入自定义脚本"},{level:3,title:"示例脚本",slug:"示例脚本"},{level:3,title:"捕获报警",slug:"捕获报警"},{level:2,title:"自定义插件",slug:"自定义插件"},{level:3,title:"Android插件",slug:"android插件"},{level:3,title:"iOS插件",slug:"ios插件"},{level:3,title:"API覆盖率插件(APICoverage)",slug:"api覆盖率插件-apicoverage"},{level:3,title:"BugIt插件",slug:"bugit插件"}]},{title:"FAQ",frontmatter:{},regularPath:"/guide/faq.html",relativePath:"guide/faq.md",key:"v-89c07936",path:"/guide/faq.html",headers:[{level:3,title:"IOS10.3系统安装mitmproxy证书后仍无法抓取https接口数据",slug:"ios10-3系统安装mitmproxy证书后仍无法抓取https接口数据"},{level:3,title:"执行setup.sh时,提示SSL证书验证失败",slug:"执行setup-sh时-提示ssl证书验证失败"},{level:3,title:"执行setup时报错,没有执行虚拟环境中的pip3",slug:"执行setup时报错-没有执行虚拟环境中的pip3"},{level:3,title:"使用brew时提示安装权限问题或安装其他依赖失败",slug:"使用brew时提示安装权限问题或安装其他依赖失败"},{level:3,title:"执行setup报错,pip install PyYAML失败",slug:"执行setup报错-pip-install-pyyaml失败"},{level:3,title:"提示无法找到lyrebird命令",slug:"提示无法找到lyrebird命令"}]},{title:"命令行",frontmatter:{},regularPath:"/guide/command-line.html",relativePath:"guide/command-line.md",key:"v-0e0b83c2",path:"/guide/command-line.html",headers:[{level:2,title:"-h --help",slug:"h-help"},{level:2,title:"-V --version",slug:"v-version"},{level:2,title:"-v -vv",slug:"v-vv"},{level:2,title:"--mock",slug:"mock"},{level:2,title:"--proxy",slug:"proxy"},{level:2,title:"--data",slug:"data"},{level:2,title:"-b --no_browser",slug:"b-no-browser"},{level:2,title:"--no-mitm",slug:"no-mitm"},{level:2,title:"-c --config",slug:"c-config"},{level:2,title:"--log",slug:"log"},{level:2,title:"--script",slug:"script"},{level:2,title:"--plugin",slug:"plugin"},{level:2,title:"gen",slug:"gen"}]},{title:"自定义插件",frontmatter:{},regularPath:"/plugins/",relativePath:"plugins/README.md",key:"v-2c392418",path:"/plugins/"},{title:"Mock数据管理",frontmatter:{},regularPath:"/guide/mockdata.html",relativePath:"guide/mockdata.md",key:"v-e34cd2ba",path:"/guide/mockdata.html",headers:[{level:2,title:"概念",slug:"概念"},{level:2,title:"存储",slug:"存储"},{level:2,title:"操作",slug:"操作"},{level:3,title:"数据组",slug:"数据组"},{level:3,title:"搜索",slug:"搜索"},{level:2,title:"命中规则",slug:"命中规则"},{level:3,title:"request.url",slug:"request-url"},{level:2,title:"标签",slug:"标签"},{level:2,title:"在自动化测试中使用mock功能",slug:"在自动化测试中使用mock功能"},{level:2,title:"通过Git管理mock数据",slug:"通过git管理mock数据"}]},{title:"Android插件",frontmatter:{},regularPath:"/plugins/android.html",relativePath:"plugins/android.md",key:"v-59ecf1c5",path:"/plugins/android.html",headers:[{level:2,title:"快速开始",slug:"快速开始"},{level:3,title:"环境要求",slug:"环境要求"},{level:3,title:"安装",slug:"安装"},{level:3,title:"启动",slug:"启动"},{level:2,title:"功能介绍",slug:"功能介绍"},{level:3,title:"控制应用",slug:"控制应用"},{level:3,title:"获取系统日志",slug:"获取系统日志"},{level:3,title:"命令行工具",slug:"命令行工具"}]},{title:"配置文件",frontmatter:{},regularPath:"/guide/config.html",relativePath:"guide/config.md",key:"v-27e32547",path:"/guide/config.html",headers:[{level:2,title:"proxy.filters",slug:"proxy-filters"},{level:2,title:"proxy.port",slug:"proxy-port"},{level:2,title:"mock.port",slug:"mock-port"},{level:2,title:"mock.data",slug:"mock-data"}]},{title:"API覆盖率插件",frontmatter:{},regularPath:"/plugins/api-coverage.html",relativePath:"plugins/api-coverage.md",key:"v-c6d83f46",path:"/plugins/api-coverage.html"},{title:"BugIt插件",frontmatter:{},regularPath:"/plugins/bugit.html",relativePath:"plugins/bugit.md",key:"v-d1914176",path:"/plugins/bugit.html",headers:[{level:2,title:"快速开始",slug:"快速开始"},{level:3,title:"环境要求",slug:"环境要求"},{level:3,title:"安装",slug:"安装"},{level:3,title:"载入脚本文件",slug:"载入脚本文件"},{level:2,title:"功能介绍",slug:"功能介绍"},{level:3,title:"Bug提交",slug:"bug提交"},{level:3,title:"API数据获取",slug:"api数据获取"},{level:3,title:"报警获取",slug:"报警获取"},{level:3,title:"保存草稿功能",slug:"保存草稿功能"},{level:3,title:"插件在Bugit中的应用",slug:"插件在bugit中的应用"},{level:2,title:"Bug脚本说明",slug:"bug脚本说明"},{level:3,title:"脚本示意图",slug:"脚本示意图"},{level:3,title:"BugIt数据传递",slug:"bugit数据传递"},{level:3,title:"init配置文件",slug:"init配置文件"},{level:3,title:"form()",slug:"form"},{level:3,title:"submit()",slug:"submit"},{level:2,title:"脚本高级",slug:"脚本高级"},{level:3,title:"Bug表单动态化配置",slug:"bug表单动态化配置"},{level:3,title:"Bug信息缓存",slug:"bug信息缓存"},{level:2,title:"示例脚本",slug:"示例脚本"},{level:3,title:"JIRA API Reference",slug:"jira-api-reference"}]},{title:"iOS插件",frontmatter:{},regularPath:"/plugins/ios.html",relativePath:"plugins/ios.md",key:"v-a6e49ef6",path:"/plugins/ios.html"},{title:"埋点插件",frontmatter:{},regularPath:"/plugins/tracking.html",relativePath:"plugins/tracking.md",key:"v-36233536",path:"/plugins/tracking.html"}],themeConfig:{nav:[{text:"指南",link:"/guide/"},{text:"扩展",items:[{text:"自定义脚本",link:"/checker/"},{text:"自定义插件",link:"/plugins/"}]},{text:"高级",link:"/advance/"},{text:"开发者指南",link:"/develop/"},{text:"代码仓库",items:[{text:"Lyrebird",link:"https://github.com/Meituan-Dianping/lyrebird"},{text:"iOS",link:"https://github.com/Meituan-Dianping/lyrebird-ios"},{text:"Android",link:"https://github.com/Meituan-Dianping/lyrebird-android"},{text:"ApiCoverage",link:"https://github.com/Meituan-Dianping/lyrebird-api-coverage"},{text:"Tracking",link:"https://github.com/Meituan-Dianping/lyrebird-tracking"}]}],sidebarDepth:2,sidebar:{"/guide/":["","mockdata","checker","command-line","config","api","faq"],"/checker/":["","dev_debug","request_editor","examples"],"/plugins/":["","android","ios","tracking","api-coverage","bugit"],"/advance/":["","eventbus","ci","elk"],"/develop/":["","plugin"],"/aboutus/":[""]}},locales:{"/":{lang:"zh-CN",title:"Lyrebird",description:"面向移动应用的插件式测试工作台",path:"/"}}};n(227);Hn.component("Badge",()=>Promise.all([n.e(0),n.e(8)]).then(n.bind(null,349))),Hn.component("CodeBlock",()=>Promise.all([n.e(0),n.e(9)]).then(n.bind(null,322))),Hn.component("CodeGroup",()=>Promise.all([n.e(0),n.e(10)]).then(n.bind(null,323)));n(228);var Ps=[{},({Vue:t})=>{t.mixin({computed:{$dataBlock(){return this.$options.__data__block__}}})},{},{}],As=[];class Ts extends class{constructor(){this.store=new Hn({data:{state:{}}})}$get(t){return this.store.state[t]}$set(t,e){Hn.set(this.store.state,t,e)}$emit(...t){this.store.$emit(...t)}$on(...t){this.store.$on(...t)}}{}Object.assign(Ts.prototype,{getPageAsyncComponent:is,getLayoutAsyncComponent:as,getAsyncComponent:ss,getVueComponent:us});var Ls={install(t){const e=new Ts;t.$vuepress=e,t.prototype.$vuepress=e}};function Rs(t,e){const n=e.toLowerCase();return t.options.routes.some(t=>t.path.toLowerCase()===n)}var Ms={props:{pageKey:String,slotKey:{type:String,default:"default"}},render(t){const e=this.pageKey||this.$parent.$page.key;return ls("pageKey",e),Hn.component(e)||Hn.component(e,is(e)),Hn.component(e)?t(e):t("")}},Is={functional:!0,props:{slotKey:String,required:!0},render:(t,{props:e,slots:n})=>t("div",{class:["content__"+e.slotKey]},n()[e.slotKey])},Ds={computed:{openInNewWindowTitle(){return this.$themeLocaleConfig.openNewWindowText||"(opens new window)"}}},Ns=(n(229),n(230),Object(Cs.a)(Ds,(function(){var t=this._self._c;return t("span",[t("svg",{staticClass:"icon outbound",attrs:{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"}},[t("path",{attrs:{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}}),this._v(" "),t("polygon",{attrs:{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"}})]),this._v(" "),t("span",{staticClass:"sr-only"},[this._v(this._s(this.openInNewWindowTitle))])])}),[],!1,null,null,null).exports),Us={functional:!0,render(t,{parent:e,children:n}){if(e._isMounted)return n;e.$once("hook:mounted",()=>{e.$forceUpdate()})}};Hn.config.productionTip=!1,Hn.use(qa),Hn.use(Ls),Hn.mixin(function(t,e,n=Hn){!function(t){t.locales&&Object.keys(t.locales).forEach(e=>{t.locales[e].path=e});Object.freeze(t)}(e),n.$vuepress.$set("siteData",e);const r=new(t(n.$vuepress.$get("siteData"))),o=Object.getOwnPropertyDescriptors(Object.getPrototypeOf(r)),i={};return Object.keys(o).reduce((t,e)=>(e.startsWith("$")&&(t[e]=o[e].get),t),i),{computed:i}}(t=>class{setPage(t){this.__page=t}get $site(){return t}get $themeConfig(){return this.$site.themeConfig}get $frontmatter(){return this.$page.frontmatter}get $localeConfig(){const{locales:t={}}=this.$site;let e,n;for(const r in t)"/"===r?n=t[r]:0===this.$page.path.indexOf(r)&&(e=t[r]);return e||n||{}}get $siteTitle(){return this.$localeConfig.title||this.$site.title||""}get $canonicalUrl(){const{canonicalUrl:t}=this.$page.frontmatter;return"string"==typeof t&&t}get $title(){const t=this.$page,{metaTitle:e}=this.$page.frontmatter;if("string"==typeof e)return e;const n=this.$siteTitle,r=t.frontmatter.home?null:t.frontmatter.title||t.title;return n?r?r+" | "+n:n:r||"VuePress"}get $description(){const t=function(t){if(t){const e=t.filter(t=>"description"===t.name)[0];if(e)return e.content}}(this.$page.frontmatter.meta);return t||(this.$page.frontmatter.description||this.$localeConfig.description||this.$site.description||"")}get $lang(){return this.$page.frontmatter.lang||this.$localeConfig.lang||"en-US"}get $localePath(){return this.$localeConfig.path||"/"}get $themeLocaleConfig(){return(this.$site.themeConfig.locales||{})[this.$localePath]||{}}get $page(){return this.__page?this.__page:function(t,e){for(let n=0;nn||(t.hash?!Hn.$vuepress.$get("disableScrollBehavior")&&{selector:decodeURIComponent(t.hash)}:{x:0,y:0})});!function(t){t.beforeEach((e,n,r)=>{if(Rs(t,e.path))r();else if(/(\/|\.html)$/.test(e.path))if(/\/$/.test(e.path)){const n=e.path.replace(/\/$/,"")+".html";Rs(t,n)?r(n):r()}else r();else{const n=e.path+"/",o=e.path+".html";Rs(t,o)?r(o):Rs(t,n)?r(n):r()}})}(n);const r={};try{await Promise.all(Ps.filter(t=>"function"==typeof t).map(e=>e({Vue:Hn,options:r,router:n,siteData:Es,isServer:t})))}catch(t){console.error(t)}return{app:new Hn(Object.assign(r,{router:n,render:t=>t("div",{attrs:{id:"app"}},[t("RouterView",{ref:"layout"}),t("div",{class:"global-ui"},As.map(e=>t(e)))])})),router:n}}(!1).then(({app:t,router:e})=>{e.onReady(()=>{t.$mount("#app")})})}]); \ No newline at end of file diff --git a/checker/dev_debug.html b/checker/dev_debug.html index db412e109..14a64a6ca 100644 --- a/checker/dev_debug.html +++ b/checker/dev_debug.html @@ -8,8 +8,8 @@ - - + +
- + diff --git a/checker/examples.html b/checker/examples.html index 4aed36cc8..3d78468c3 100644 --- a/checker/examples.html +++ b/checker/examples.html @@ -8,8 +8,8 @@ - - + +
- + diff --git a/checker/index.html b/checker/index.html index 17c141c64..095fe19f1 100644 --- a/checker/index.html +++ b/checker/index.html @@ -8,8 +8,8 @@ - - + +
- + diff --git a/checker/request_editor.html b/checker/request_editor.html index 96ea31cad..e89fa4413 100644 --- a/checker/request_editor.html +++ b/checker/request_editor.html @@ -8,8 +8,8 @@ - - + +
- + diff --git a/develop/index.html b/develop/index.html index 82d9b2fb8..1632bfa02 100644 --- a/develop/index.html +++ b/develop/index.html @@ -8,8 +8,8 @@ - - + +
- + diff --git a/develop/plugin.html b/develop/plugin.html index bb79d36fb..ac4e91d6f 100644 --- a/develop/plugin.html +++ b/develop/plugin.html @@ -8,8 +8,8 @@ - - + +
- + diff --git a/guide/api.html b/guide/api.html index 0fefbfe48..036f847de 100644 --- a/guide/api.html +++ b/guide/api.html @@ -8,8 +8,8 @@ - - + +
- + diff --git a/guide/checker.html b/guide/checker.html index 8a7270dbb..50db21c24 100644 --- a/guide/checker.html +++ b/guide/checker.html @@ -8,8 +8,8 @@ - - + +
- + diff --git a/guide/command-line.html b/guide/command-line.html index 2d8a3a43e..9af57dbd2 100644 --- a/guide/command-line.html +++ b/guide/command-line.html @@ -8,8 +8,8 @@ - - + +
- + diff --git a/guide/config.html b/guide/config.html index dc1cba813..727f039b1 100644 --- a/guide/config.html +++ b/guide/config.html @@ -8,8 +8,8 @@ - - + +
- + diff --git a/guide/faq.html b/guide/faq.html index 31a012de9..f52389bbf 100644 --- a/guide/faq.html +++ b/guide/faq.html @@ -8,8 +8,8 @@ - - + +
- + diff --git a/guide/index.html b/guide/index.html index fcfab0c7c..be0eb7a11 100644 --- a/guide/index.html +++ b/guide/index.html @@ -8,8 +8,8 @@ - - + +
- + diff --git a/guide/mockdata.html b/guide/mockdata.html index 5d57ee2bb..528f489a3 100644 --- a/guide/mockdata.html +++ b/guide/mockdata.html @@ -8,8 +8,8 @@ - - + +
- + diff --git a/index.html b/index.html index 1fe2396d4..c25e5610c 100644 --- a/index.html +++ b/index.html @@ -8,8 +8,8 @@ - - + +

并行测试

通过多个插件以及自动检查脚本并行工作,一次测试获得多角度数据,自动化脚本与手工测试并行执行。

自定义脚本

支持快速开发有针对性的轻量级脚本,并行检测测试时不易察觉的问题。

自定义插件

支持开发比脚本自由度更高的插件,实现自定义的UI及API,除支持并行检测之外,还可以很方便的扩展Lyrebird的能力。

轻巧易用

一键安装。自由选择插件和脚本,组合成适合自己业务特点的解决方案。

手工及自动化测试通用

不只提供UI操作,也可以通过API控制所有功能。

完整的记录人机交互过程

实时的记录测试执行过程中人机交互过程,更方便的记录问题、复现问题。

- + diff --git a/plugins/android.html b/plugins/android.html index 3d50ce55a..ae4b548d4 100644 --- a/plugins/android.html +++ b/plugins/android.html @@ -8,8 +8,8 @@ - - + +
- + diff --git a/plugins/api-coverage.html b/plugins/api-coverage.html index c21056c52..f0d7d70ea 100644 --- a/plugins/api-coverage.html +++ b/plugins/api-coverage.html @@ -8,8 +8,8 @@ - - + +
- + diff --git a/plugins/bugit.html b/plugins/bugit.html index 33a707b4f..0b9675402 100644 --- a/plugins/bugit.html +++ b/plugins/bugit.html @@ -8,8 +8,8 @@ - - + +
- + diff --git a/plugins/index.html b/plugins/index.html index 26ea7266d..3a03e68fc 100644 --- a/plugins/index.html +++ b/plugins/index.html @@ -8,8 +8,8 @@ - - + +
- + diff --git a/plugins/ios.html b/plugins/ios.html index 7a27f3f2b..dbefc1700 100644 --- a/plugins/ios.html +++ b/plugins/ios.html @@ -8,8 +8,8 @@ - - + +
- + diff --git a/plugins/tracking.html b/plugins/tracking.html index fc73a8831..280bfe432 100644 --- a/plugins/tracking.html +++ b/plugins/tracking.html @@ -8,8 +8,8 @@ - - + +