diff --git a/.gitignore b/.gitignore index 3e1b1c30..742e2334 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,3 @@ /web composer.lock /.ddev -docs/.vuepress/dist diff --git a/docs/.vuepress/dist/assets/css/0.styles.e953c376.css b/docs/.vuepress/dist/assets/css/0.styles.e953c376.css new file mode 100644 index 00000000..5756ccfa --- /dev/null +++ b/docs/.vuepress/dist/assets/css/0.styles.e953c376.css @@ -0,0 +1 @@ +ul.code-language-switcher{border-radius:6px 6px 0 0;background:#e1e9f0}ul.code-language-switcher li a{color:#476582}ul.code-language-switcher li a:hover:not(.active){background:hsla(0,0%,100%,.5)}code[class*=language-],pre[class*=language-]{color:#ccc;background:none}:not(pre)>code[class*=language-],pre[class*=language-]{background:#2d2d2d}.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.inserted{color:green}code[class*=language-],pre[class*=language-]{color:#657b83;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;line-height:1.5;-moz-tab-size:4;-ms-hyphens:none}code[class*=language-]::-moz-selection,code[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection{background:#073642}code[class*=language-]::selection,code[class*=language-] ::selection,pre[class*=language-]::selection,pre[class*=language-] ::selection{background:#073642}pre[class*=language-]{padding:1em;border-radius:.3em}:not(pre)>code[class*=language-],pre[class*=language-]{background-color:#fdf6e3}:not(pre)>code[class*=language-]{border-radius:.3em}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#93a1a1}.token.punctuation{color:#586e75}.token.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#268bd2}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string,.token.url{color:#2aa198}.token.entity{color:#657b83;background:#eee8d5}.token.atrule,.token.attr-value,.token.keyword{color:#859900}.token.class-name,.token.function{color:#b58900}.token.important,.token.regex,.token.variable{color:#cb4b16}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.theme-default-content pre[class*=language-] code,.theme-default-content pre code{color:#fff}div[class*=language-] .highlight-lines .highlighted{background-color:rgba(0,0,0,.66)}div[class*=language-]:before{color:hsla(0,0%,100%,.4)}div[class~=language-json]:before{content:"json"}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:#449211}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:419px){h1{font-size:1.9rem}.theme-default-content div[class*=language-]{margin:.85rem -1.5rem;border-radius:0}}.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:#449211}.theme-default-content pre,.theme-default-content pre[class*=language-]{line-height:1.4;padding:1.25rem 1.5rem;margin:.85rem 0;background-color:#2f2f2f;border-radius:6px;overflow:auto}.theme-default-content pre[class*=language-] code,.theme-default-content pre code{color:inherit;padding:0;background-color:transparent;border-radius:0}div[class*=language-]{position:relative;background-color:#2f2f2f;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:#2d2d2d}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:rgba(0,0,0,.25)}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:#2f2f2f}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-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-ruby]:before{content:"rb"}div[class~=language-python]:before{content:"py"}div[class~=language-bash]:before{content:"sh"}@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:0;border-radius:0}}.theme-container.split .page>ul.code-language-switcher{position:fixed;top:3.6rem;padding:.7rem 2.5rem}@media (min-width:960px){.theme-container.split .page{position:relative;width:calc(50% - 10rem)}.theme-container.split .page:after{display:block;position:fixed;top:0;right:0;bottom:0;width:calc(50% - 10rem);background:#f1f5f8;content:".";font-size:0}.theme-container.split .page>ul.code-language-switcher{right:0;width:calc(50% - 10rem)}.theme-container.split .page .theme-default-content{margin-right:0}.theme-container.split .page .theme-default-content .split{margin:0 -2.5rem;width:calc(200% + 10rem);display:flex;flex-direction:row}.theme-container.split .page .theme-default-content .split>div{z-index:1;width:50%;padding-left:2.5rem;padding-right:2.5rem;box-sizing:border-box}.theme-container.split .page .theme-default-content .split>div.right pre,.theme-container.split .page .theme-default-content .split>div.right pre[class*=language-]{margin-left:-2.5rem;margin-right:-2.5rem;padding:0 2.5rem;white-space:pre-wrap;background-color:transparent}.theme-container.split .page .theme-default-content .split>div.right pre:before,.theme-container.split .page .theme-default-content .split>div.right pre[class*=language-]:before{display:none}.theme-container.split .page .theme-default-content .split>div.right pre .highlighted-line,.theme-container.split .page .theme-default-content .split>div.right pre[class*=language-] .highlighted-line{margin:0 -2.5rem;padding:0 2.5rem}}@media (max-width:959px){.theme-container.split .page>ul.code-language-switcher{padding-left:2rem;padding-right:2rem;width:calc(100% - 16.4rem)}.theme-container.split .page .theme-default-content>:first-child{margin-top:7.2rem}.theme-container.split .page .theme-default-content>h1:first-child,.theme-container.split .page .theme-default-content>h2:first-child,.theme-container.split .page .theme-default-content>h3:first-child,.theme-container.split .page .theme-default-content>h4:first-child,.theme-container.split .page .theme-default-content>h5:first-child,.theme-container.split .page .theme-default-content>h6:first-child{padding-top:0}.theme-container.split .page pre,.theme-container.split .page pre[class*=language-]{margin:1em 0;border-radius:6px}.theme-container.split .page h1,.theme-container.split .page h2,.theme-container.split .page h3,.theme-container.split .page h4,.theme-container.split .page h5,.theme-container.split .page h6{margin-top:-6.7rem;padding-top:8.2rem}}@media (max-width:719px){.theme-container.split .page>ul.code-language-switcher{width:100%}}@media (max-width:419px){.theme-container.split .page>ul.code-language-switcher{padding-left:1.5rem;padding-right:1.5rem}}.sidebar{background-color:#fbfcfd}.theme-container .sidebar-heading{color:#999}.theme-container .sidebar-heading.open,.theme-container .sidebar-heading:hover{color:inherit}kbd{border:solid #ddd;border-width:1px 1px 3px;padding:.15em .325em;font-size:.85em}.theme-container .algolia-search-wrapper .algolia-autocomplete .ds-dropdown-menu{border:1px solid transparent;border-radius:6px;padding:.5rem .75rem;box-shadow:0 20px 55px rgba(0,0,0,.3)}.theme-container .algolia-search-wrapper .algolia-autocomplete .ds-dropdown-menu:before{border-top:1px solid transparent;border-right:1px solid transparent}.theme-container .algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--category-header{padding:5px 0;margin-bottom:.5rem}.theme-container .algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column{background:transparent;background:none}.theme-container .algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--category-header{color:inherit;background:transparent}.theme-container .algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion--highlight{color:#449211}.algolia-autocomplete .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight{box-shadow:none}.theme-default-content dl{display:flex;flex-flow:row wrap;padding:1.25rem 1.5rem;line-height:1.7;background:#f1f5f8;border-radius:6px}.theme-default-content dl dd,.theme-default-content dl dt{margin:.25rem 0 0;word-wrap:break-word}.theme-default-content dl dt{width:9rem;padding-right:1rem;box-sizing:border-box;display:flex;align-items:top;justify-content:flex-end;font-weight:700}.theme-default-content dl dd{width:calc(100% - 9rem)}.theme-default-content tr:nth-child(2n){background-color:#f1f5f8}.theme-default-content code{background:rgba(0,72.85714285714286,127.5,.054901960784314)}.theme-default-content pre,.theme-default-content pre[class*=language-]{white-space:pre}.theme-default-content .highlighted-line{background-color:#e1e9f0}.theme-default-content a.outbound-link{color:#4e6e8e;margin-right:.25rem}.theme-default-content a+svg.outbound{margin-left:.25rem;position:relative;top:2px}.theme-default-content .custom-block div[class*=language-]{background:none;border-radius:0;margin-left:-24px;margin-right:-24px}.theme-default-content .custom-block div[class*=language-] .highlight-lines{padding-top:0}.theme-default-content .custom-block div[class*=language-] pre,.theme-default-content .custom-block div[class*=language-] pre[class*=language-]{padding-top:0;padding-bottom:0}div.table{margin:1rem 0;border:1px solid #dfe2e5;overflow-x:auto}div.table table{display:table;margin:0;border:none;width:100%}div.table table tbody:first-child tr:first-child,div.table table tbody:first-child tr:first-child td,div.table table tbody:first-child tr:first-child th,div.table table thead tr:first-child,div.table table thead tr:first-child td,div.table table thead tr:first-child th{border-top:none}div.table table tbody tr:last-child td,div.table table tbody tr:last-child th{border-bottom:none}div.table table td:first-child,div.table table th:first-child{border-left:none}div.table table td:last-child,div.table table th:last-child{border-right:none}.nav-links{font-family:monospace,monospace}.sidebar-links a.active{background-color:#eee;font-weight:400}.sidebar-links .sidebar-sub-header a.active{background-color:transparent;font-weight:400}code[class*=language-],pre[class*=language-]{text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;color:#eee;background:#2f2f2f;font-family:Roboto Mono,monospace;font-size:1em;line-height:1.5em;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}code[class*=language-]::selection,code[class*=language-] ::selection,pre[class*=language-]::selection,pre[class*=language-] ::selection{background:#363636}:not(pre)>code[class*=language-]{white-space:normal;border-radius:.2em;padding:.1em}pre[class*=language-]{overflow:auto;position:relative;margin:.5em 0;padding:1.25em 1em}.language-css>code,.language-sass>code,.language-scss>code{color:#fd9170}[class*=language-] .namespace{opacity:.7}.token.atrule{color:#c792ea}.token.attr-name{color:#ffcb6b}.token.attr-value,.token.attribute{color:#a5e844}.token.boolean{color:#c792ea}.token.builtin{color:#ffcb6b}.token.cdata,.token.char{color:#80cbc4}.token.class{color:#ffcb6b}.token.class-name{color:#f2ff00}.token.comment{color:#616161}.token.constant{color:#c792ea}.token.deleted{color:#f66}.token.doctype{color:#616161}.token.entity{color:#f66}.token.function{color:#c792ea}.token.hexcode{color:#f2ff00}.token.id,.token.important{color:#c792ea;font-weight:700}.token.inserted{color:#80cbc4}.token.keyword{color:#c792ea}.token.number{color:#fd9170}.token.operator{color:#89ddff}.token.prolog{color:#616161}.token.property{color:#80cbc4}.token.pseudo-class,.token.pseudo-element{color:#a5e844}.token.punctuation{color:#89ddff}.token.regex{color:#f2ff00}.token.selector{color:#f66}.token.string{color:#a5e844}.token.symbol{color:#c792ea}.token.tag{color:#f66}.token.unit{color:#fd9170}.token.url,.token.variable{color:#f66}.code-toggle{margin:.85rem 0}.code-toggle ul.code-language-switcher{border-radius:6px 6px 0 0}.code-toggle div[class*=language-]{border-radius:0 0 6px 6px}.code-toggle div[class*=language-]:before{display:none}.code-toggle>div>div[class*=language-]>pre,.code-toggle>div>div[class*=language-]>pre[class*=language-]{margin:0}ul.code-language-switcher{height:3.6rem;box-sizing:border-box;display:flex;flex-direction:row;margin:0;padding:.7rem 1.5rem;font-size:15px;line-height:1.4;z-index:2;background:#3a404c}ul.code-language-switcher li{margin:0 5px 0 0;padding:0;list-style-type:none}ul.code-language-switcher li a{display:block;padding:0 .625rem;line-height:2.2rem;cursor:pointer;border-radius:4px;color:#a6dbd6}ul.code-language-switcher li a:hover{text-decoration:none!important}ul.code-language-switcher li a:hover:not(.active){background:hsla(0,0%,100%,.1)}ul.code-language-switcher li a.active{color:#3a8d85;cursor:default;background-color:#fff}table.multiple-header-rows tr:nth-child(2n){background-color:transparent}table.multiple-header-rows tr.shade{background-color:#f1f5f8}table.multiple-header-rows tr th{border:none;text-align:left}table.multiple-header-rows tr:not(:first-child) th{padding-top:2em}#nprogress{pointer-events:none}#nprogress .bar{background:#449211;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 #449211,0 0 5px #449211;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:#449211 transparent transparent #449211;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:#449211;padding:.8rem 1.6rem;border-radius:4px;transition:background-color .1s ease;box-sizing:border-box;border-bottom:1px solid #3d830f}.home .hero .action-button:hover{background-color:#52b115}.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}}.algolia-search-wrapper>span{vertical-align:middle}.algolia-search-wrapper .algolia-autocomplete{line-height:normal}.algolia-search-wrapper .algolia-autocomplete .ds-dropdown-menu{background-color:#fff;border:1px solid #999;border-radius:4px;font-size:16px;margin:6px 0 0;padding:4px;text-align:left}.algolia-search-wrapper .algolia-autocomplete .ds-dropdown-menu:before{border-color:#999}.algolia-search-wrapper .algolia-autocomplete .ds-dropdown-menu [class*=ds-dataset-]{border:none;padding:0}.algolia-search-wrapper .algolia-autocomplete .ds-dropdown-menu .ds-suggestions{margin-top:0}.algolia-search-wrapper .algolia-autocomplete .ds-dropdown-menu .ds-suggestion{border-bottom:1px solid #eaecef}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion--highlight{color:#2c815b}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion{border-color:#eaecef;padding:0}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--category-header{padding:5px 10px;margin-top:0;background:#449211;color:#fff;font-weight:600}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--highlight{background:hsla(0,0%,100%,.6)}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--wrapper{padding:0}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--title{font-weight:600;margin-bottom:0;color:#2c3e50}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column{vertical-align:top;padding:5px 7px 5px 5px;border-color:#eaecef;background:#f1f3f5}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column:after{display:none}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column-text{color:#555}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-footer{border-color:#eaecef}.algolia-search-wrapper .algolia-autocomplete .ds-cursor .algolia-docsearch-suggestion--content{background-color:#e7edf3!important;color:#2c3e50}@media (min-width:719px){.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column{float:none;width:150px;min-width:150px;display:table-cell}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--content{float:none;display:table-cell;width:100%;vertical-align:top}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .ds-dropdown-menu{min-width:515px!important}}@media (max-width:719px){.algolia-search-wrapper .ds-dropdown-menu{min-width:calc(100vw - 4rem)!important;max-width:calc(100vw - 4rem)!important}.algolia-search-wrapper .algolia-docsearch-suggestion--wrapper{padding:5px 7px 5px 5px!important}.algolia-search-wrapper .algolia-docsearch-suggestion--subcategory-column{padding:0!important;background:#fff!important}.algolia-search-wrapper .algolia-docsearch-suggestion--subcategory-column-text:after{content:" > ";font-size:10px;line-height:14.4px;display:inline-block;width:5px;margin:-3px 3px 0;vertical-align:middle}}.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(/docs/craft-v4/assets/img/search.83621669.svg) .6rem .5rem no-repeat;background-size:1rem}.search-box input:focus{cursor:auto;border-color:#449211}.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:#449211}@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:#449211}.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:#449211}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{content:"";width:0;height:0;border-left:5px solid #449211;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:#449211}.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 #50ab14}}.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}.code-language-switcher.split{border-radius:0}.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:#449211;border-left-color:#449211}.sidebar-heading.clickable:hover{color:#449211}.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:#449211}a.sidebar-link.active{font-weight:600;color:#449211;border-left-color:#449211}.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}}.info-hud{display:inline-block}.info-hud .v-popover{color:#b8c2cc;display:inline-block;line-height:0}.info-hud .v-popover.open,.info-hud .v-popover:hover{cursor:pointer;color:#da5a47}.tooltip{max-width:250px}.info-circle{fill:currentColor;width:18px;height:18px;top:-1px;position:relative;display:inline-block;vertical-align:middle}.tooltip{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none;border-radius:3px;display:block!important;z-index:10000;background:#fff;box-shadow:0 25px 80px rgba(0,0,0,.4);padding:24px}.tooltip .tooltip-arrow{width:0;height:0;border-style:solid;position:absolute;margin:12px;border-color:#fff}.tooltip[x-placement^=top]{margin-bottom:12px}.tooltip[x-placement^=top] .tooltip-arrow{border-width:12px 12px 0;border-left-color:transparent!important;border-right-color:transparent!important;border-bottom-color:transparent!important;bottom:-12px;left:calc(50% - 12px);margin-top:0;margin-bottom:0}.tooltip[x-placement^=bottom]{margin-top:12px}.tooltip[x-placement^=bottom] .tooltip-arrow{border-width:0 12px 12px;border-left-color:transparent!important;border-right-color:transparent!important;border-top-color:transparent!important;top:-12px;left:calc(50% - 12px);margin-top:0;margin-bottom:0}.tooltip[x-placement^=right]{margin-left:12px}.tooltip[x-placement^=right] .tooltip-arrow{border-width:12px 12px 12px 0;border-left-color:transparent!important;border-top-color:transparent!important;border-bottom-color:transparent!important;left:-12px;top:calc(50% - 12px);margin-left:0;margin-right:0}.tooltip[x-placement^=left]{margin-right:12px}.tooltip[x-placement^=left] .tooltip-arrow{border-width:12px 0 12px 12px;border-top-color:transparent!important;border-right-color:transparent!important;border-bottom-color:transparent!important;right:-12px;top:calc(50% - 12px);margin-left:0;margin-right:0}.tooltip[aria-hidden=true]{visibility:hidden;opacity:0;transition:opacity .15s,visibility .15s}.tooltip[aria-hidden=false]{visibility:visible;opacity:1;transition:opacity .15s}table{display:table;width:100%;position:relative;overflow:visible;margin-bottom:3em}table,td,tr{border:0}.edition{width:15%}.support{position:relative;overflow:visible;font-weight:700}.info{margin-left:.75rem}.smaller{font-size:.9rem;line-height:1.25rem}.browser-shot{display:block;position:relative;margin-top:2em;margin-bottom:2em}.browser-shot-wrapper{margin:0}.browser-shot-content{display:block;position:relative;box-shadow:0 0 48px rgba(74,124,246,.1);background:transparent;border-radius:6px}.browser-top{border-top-right-radius:6px;border-top-left-radius:6px;height:22px;background:#e5edfd url(/docs/craft-v4/assets/img/window-buttons.87b6b579.svg) no-repeat 0;background-size:auto 18px}.address-bar{display:block;background-color:#e5edfd;padding:0 .5em .5em}.address{color:#2c3e50;background:hsla(0,0%,100%,.5);font-weight:400;display:block;padding:.125em .25em;font-size:.75em;text-decoration:none}.browser-shot:hover{text-decoration:none!important}.browser-shot .image{margin:0;position:relative;border-bottom-right-radius:6px;border-bottom-left-radius:6px;overflow:hidden;background-color:transparent}.browser-shot .image.limit-height{overflow-x:hidden;overflow-y:auto}.browser-shot .image img{position:relative;display:block;max-width:100%;height:auto}.browser-shot .caption{text-align:center;margin-top:1em;font-size:.9em;color:#637599}.meta-details{width:100%;font-size:.8rem;border-top:1px solid rgba(0,0,0,.1);border-bottom:1px solid rgba(0,0,0,.1)}.meta-details p{margin:.25rem 0}.meta-details .item{margin-right:1rem}.meta-details .label{opacity:.6;margin-right:.125rem}.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:#2f2f2f;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}.searchbox{display:inline-block;position:relative;width:200px;height:32px!important;white-space:nowrap;box-sizing:border-box;visibility:visible!important}.searchbox .algolia-autocomplete{display:block;width:100%;height:100%}.searchbox__wrapper{width:100%;height:100%;z-index:999;position:relative}.searchbox__input{display:inline-block;box-sizing:border-box;transition:box-shadow .4s ease,background .4s ease;border:0;border-radius:16px;box-shadow:inset 0 0 0 1px #ccc;background:#fff!important;padding:0 26px 0 32px;width:100%;height:100%;vertical-align:middle;white-space:normal;font-size:12px;-webkit-appearance:none;-moz-appearance:none;appearance:none}.searchbox__input::-webkit-search-cancel-button,.searchbox__input::-webkit-search-decoration,.searchbox__input::-webkit-search-results-button,.searchbox__input::-webkit-search-results-decoration{display:none}.searchbox__input:hover{box-shadow:inset 0 0 0 1px #b3b3b3}.searchbox__input:active,.searchbox__input:focus{outline:0;box-shadow:inset 0 0 0 1px #aaa;background:#fff}.searchbox__input:-ms-input-placeholder{color:#aaa}.searchbox__input::-moz-placeholder{color:#aaa}.searchbox__input::placeholder{color:#aaa}.searchbox__submit{position:absolute;top:0;margin:0;border:0;border-radius:16px 0 0 16px;background-color:rgba(69,142,225,0);padding:0;width:32px;height:100%;vertical-align:middle;text-align:center;font-size:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;right:inherit;left:0}.searchbox__submit:before{display:inline-block;margin-right:-4px;height:100%;vertical-align:middle;content:""}.searchbox__submit:active,.searchbox__submit:hover{cursor:pointer}.searchbox__submit:focus{outline:0}.searchbox__submit svg{width:14px;height:14px;vertical-align:middle;fill:#6d7e96}.searchbox__reset{display:block;position:absolute;top:8px;right:8px;margin:0;border:0;background:none;cursor:pointer;padding:0;font-size:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;fill:rgba(0,0,0,.5)}.searchbox__reset.hide{display:none}.searchbox__reset:focus{outline:0}.searchbox__reset svg{display:block;margin:4px;width:8px;height:8px}.searchbox__input:valid~.searchbox__reset{display:block;-webkit-animation-name:sbx-reset-in;animation-name:sbx-reset-in;-webkit-animation-duration:.15s;animation-duration:.15s}@-webkit-keyframes sbx-reset-in{0%{transform:translate3d(-20%,0,0);opacity:0}to{transform:none;opacity:1}}@keyframes sbx-reset-in{0%{transform:translate3d(-20%,0,0);opacity:0}to{transform:none;opacity:1}}.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu{right:0!important;left:inherit!important}.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu:before{right:48px}.algolia-autocomplete.algolia-autocomplete-left .ds-dropdown-menu{left:0!important;right:inherit!important}.algolia-autocomplete.algolia-autocomplete-left .ds-dropdown-menu:before{left:48px}.algolia-autocomplete .ds-dropdown-menu{top:-6px;border-radius:4px;margin:6px 0 0;padding:0;text-align:left;height:auto;position:relative;background:transparent;border:none;z-index:999;max-width:600px;min-width:500px;box-shadow:0 1px 0 0 rgba(0,0,0,.2),0 2px 3px 0 rgba(0,0,0,.1)}.algolia-autocomplete .ds-dropdown-menu:before{display:block;position:absolute;content:"";width:14px;height:14px;background:#fff;z-index:1000;top:-7px;border-top:1px solid #d9d9d9;border-right:1px solid #d9d9d9;transform:rotate(-45deg);border-radius:2px}.algolia-autocomplete .ds-dropdown-menu .ds-suggestions{position:relative;z-index:1000;margin-top:8px}.algolia-autocomplete .ds-dropdown-menu .ds-suggestions a:hover{text-decoration:none}.algolia-autocomplete .ds-dropdown-menu .ds-suggestion{cursor:pointer}.algolia-autocomplete .ds-dropdown-menu .ds-suggestion.ds-cursor .algolia-docsearch-suggestion.suggestion-layout-simple,.algolia-autocomplete .ds-dropdown-menu .ds-suggestion.ds-cursor .algolia-docsearch-suggestion:not(.suggestion-layout-simple) .algolia-docsearch-suggestion--content{background-color:rgba(69,142,225,.05)}.algolia-autocomplete .ds-dropdown-menu [class^=ds-dataset-]{position:relative;border:1px solid #d9d9d9;background:#fff;border-radius:4px;overflow:auto;padding:0 8px 8px}.algolia-autocomplete .ds-dropdown-menu *{box-sizing:border-box}.algolia-autocomplete .algolia-docsearch-suggestion{display:block;position:relative;padding:0 8px;background:#fff;color:#02060c;overflow:hidden}.algolia-autocomplete .algolia-docsearch-suggestion--highlight{color:#174d8c;background:rgba(143,187,237,.1);padding:.1em .05em}.algolia-autocomplete .algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--category-header-lvl0 .algolia-docsearch-suggestion--highlight,.algolia-autocomplete .algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--category-header-lvl1 .algolia-docsearch-suggestion--highlight,.algolia-autocomplete .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight{padding:0 0 1px;background:inherit;box-shadow:inset 0 -2px 0 0 rgba(69,142,225,.8);color:inherit}.algolia-autocomplete .algolia-docsearch-suggestion--content{display:block;float:right;width:70%;position:relative;padding:5.33333px 0 5.33333px 10.66667px;cursor:pointer}.algolia-autocomplete .algolia-docsearch-suggestion--content:before{content:"";position:absolute;display:block;top:0;height:100%;width:1px;background:#ddd;left:-1px}.algolia-autocomplete .algolia-docsearch-suggestion--category-header{position:relative;border-bottom:1px solid #ddd;display:none;margin-top:8px;padding:4px 0;font-size:1em;color:#33363d}.algolia-autocomplete .algolia-docsearch-suggestion--wrapper{width:100%;float:left;padding:8px 0 0}.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column{float:left;width:30%;text-align:right;position:relative;padding:5.33333px 10.66667px;color:#a4a7ae;font-size:.9em;word-wrap:break-word}.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column:before{content:"";position:absolute;display:block;top:0;height:100%;width:1px;background:#ddd;right:0}.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-inline{display:none}.algolia-autocomplete .algolia-docsearch-suggestion--title{margin-bottom:4px;color:#02060c;font-size:.9em;font-weight:700}.algolia-autocomplete .algolia-docsearch-suggestion--text{display:block;line-height:1.2em;font-size:.85em;color:#63676d}.algolia-autocomplete .algolia-docsearch-suggestion--no-results{width:100%;padding:8px 0;text-align:center;font-size:1.2em}.algolia-autocomplete .algolia-docsearch-suggestion--no-results:before{display:none}.algolia-autocomplete .algolia-docsearch-suggestion code{padding:1px 5px;font-size:90%;border:none;color:#222;background-color:#ebebeb;border-radius:3px;font-family:Menlo,Monaco,Consolas,Courier New,monospace}.algolia-autocomplete .algolia-docsearch-suggestion code .algolia-docsearch-suggestion--highlight{background:none}.algolia-autocomplete .algolia-docsearch-suggestion.algolia-docsearch-suggestion__main .algolia-docsearch-suggestion--category-header,.algolia-autocomplete .algolia-docsearch-suggestion.algolia-docsearch-suggestion__secondary{display:block}@media (min-width:768px){.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column{display:block}}@media (max-width:768px){.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column{display:inline-block;width:auto;float:left;padding:0;color:#02060c;font-size:.9em;font-weight:700;text-align:left;opacity:.5}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column:before{display:none}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column:after{content:"|"}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--content{display:inline-block;width:auto;text-align:left;float:left;padding:0}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--content:before{display:none}}.algolia-autocomplete .suggestion-layout-simple.algolia-docsearch-suggestion{border-bottom:1px solid #eee;padding:8px;margin:0}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--content{width:100%;padding:0}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--content:before{display:none}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--category-header{margin:0;padding:0;display:block;width:100%;border:none}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--category-header-lvl0,.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--category-header-lvl1{opacity:.6;font-size:.85em}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--category-header-lvl1:before{background-image:url('data:image/svg+xml;utf8,');content:"";width:10px;height:10px;display:inline-block}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--wrapper{width:100%;float:left;margin:0;padding:0}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--duplicate-content,.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--subcategory-inline{display:none!important}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--title{margin:0;color:#458ee1;font-size:.9em;font-weight:400}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--title:before{content:"#";font-weight:700;color:#458ee1;display:inline-block}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--text{margin:4px 0 0;display:block;line-height:1.4em;padding:5.33333px 8px;background:#f8f8f8;font-size:.85em;opacity:.8}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight{color:#3f4145;font-weight:700;box-shadow:none}.algolia-autocomplete .algolia-docsearch-footer{width:134px;height:20px;z-index:2000;margin-top:10.66667px;float:right;font-size:0;line-height:0}.algolia-autocomplete .algolia-docsearch-footer--logo{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='168' height='24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath d='M78.988.938h16.594a2.968 2.968 0 012.966 2.966V20.5a2.967 2.967 0 01-2.966 2.964H78.988a2.967 2.967 0 01-2.966-2.964V3.897A2.961 2.961 0 0178.988.938zm41.937 17.866c-4.386.02-4.386-3.54-4.386-4.106l-.007-13.336 2.675-.424v13.254c0 .322 0 2.358 1.718 2.364v2.248zm-10.846-2.18c.821 0 1.43-.047 1.855-.129v-2.719a6.334 6.334 0 00-1.574-.199 5.7 5.7 0 00-.897.069 2.699 2.699 0 00-.814.24c-.24.116-.439.28-.582.491-.15.212-.219.335-.219.656 0 .628.219.991.616 1.23s.938.362 1.615.362zm-.233-9.7c.883 0 1.629.109 2.231.328.602.218 1.088.525 1.444.915.363.396.609.922.76 1.483.157.56.232 1.175.232 1.85v6.874a32.5 32.5 0 01-1.868.314c-.834.123-1.772.185-2.813.185-.69 0-1.327-.069-1.895-.198a4.001 4.001 0 01-1.471-.636 3.085 3.085 0 01-.951-1.134c-.226-.465-.343-1.12-.343-1.803 0-.656.13-1.073.384-1.525a3.24 3.24 0 011.047-1.106c.445-.287.95-.492 1.532-.615a8.8 8.8 0 011.82-.185 8.404 8.404 0 011.972.24v-.438c0-.307-.035-.6-.11-.874a1.88 1.88 0 00-.384-.73 1.784 1.784 0 00-.724-.493 3.164 3.164 0 00-1.143-.205c-.616 0-1.177.075-1.69.164a7.735 7.735 0 00-1.26.307l-.321-2.192c.335-.117.834-.233 1.478-.349a10.98 10.98 0 012.073-.178zm52.842 9.626c.822 0 1.43-.048 1.854-.13V13.7a6.347 6.347 0 00-1.574-.199c-.294 0-.595.021-.896.069a2.7 2.7 0 00-.814.24 1.46 1.46 0 00-.582.491c-.15.212-.218.335-.218.656 0 .628.218.991.615 1.23.404.245.938.362 1.615.362zm-.226-9.694c.883 0 1.629.108 2.231.327.602.219 1.088.526 1.444.915.355.39.609.923.759 1.483a6.8 6.8 0 01.233 1.852v6.873c-.41.088-1.034.19-1.868.314-.834.123-1.772.184-2.813.184-.69 0-1.327-.068-1.895-.198a4.001 4.001 0 01-1.471-.635 3.085 3.085 0 01-.951-1.134c-.226-.465-.343-1.12-.343-1.804 0-.656.13-1.073.384-1.524.26-.45.608-.82 1.047-1.107.445-.286.95-.491 1.532-.614a8.803 8.803 0 012.751-.13c.329.034.671.096 1.04.185v-.437a3.3 3.3 0 00-.109-.875 1.873 1.873 0 00-.384-.731 1.784 1.784 0 00-.724-.492 3.165 3.165 0 00-1.143-.205c-.616 0-1.177.075-1.69.164a7.75 7.75 0 00-1.26.307l-.321-2.193c.335-.116.834-.232 1.478-.348a11.633 11.633 0 012.073-.177zm-8.034-1.271a1.626 1.626 0 01-1.628-1.62c0-.895.725-1.62 1.628-1.62.904 0 1.63.725 1.63 1.62 0 .895-.733 1.62-1.63 1.62zm1.348 13.22h-2.689V7.27l2.69-.423v11.956zm-4.714 0c-4.386.02-4.386-3.54-4.386-4.107l-.008-13.336 2.676-.424v13.254c0 .322 0 2.358 1.718 2.364v2.248zm-8.698-5.903c0-1.156-.253-2.119-.746-2.788-.493-.677-1.183-1.01-2.067-1.01-.882 0-1.574.333-2.065 1.01-.493.676-.733 1.632-.733 2.788 0 1.168.246 1.953.74 2.63.492.683 1.183 1.018 2.066 1.018.882 0 1.574-.342 2.067-1.019.492-.683.738-1.46.738-2.63zm2.737-.007c0 .902-.13 1.584-.397 2.33a5.52 5.52 0 01-1.128 1.906 4.986 4.986 0 01-1.752 1.223c-.685.286-1.739.45-2.265.45-.528-.006-1.574-.157-2.252-.45a5.096 5.096 0 01-1.744-1.223c-.487-.527-.863-1.162-1.137-1.906a6.345 6.345 0 01-.41-2.33c0-.902.123-1.77.397-2.508a5.554 5.554 0 011.15-1.892 5.133 5.133 0 011.75-1.216c.679-.287 1.425-.423 2.232-.423.808 0 1.553.142 2.237.423a4.88 4.88 0 011.753 1.216 5.644 5.644 0 011.135 1.892c.287.738.431 1.606.431 2.508zm-20.138 0c0 1.12.246 2.363.738 2.882.493.52 1.13.78 1.91.78.424 0 .828-.062 1.204-.178.377-.116.677-.253.917-.417V9.33a10.476 10.476 0 00-1.766-.226c-.971-.028-1.71.37-2.23 1.004-.513.636-.773 1.75-.773 2.788zm7.438 5.274c0 1.824-.466 3.156-1.404 4.004-.936.846-2.367 1.27-4.296 1.27-.705 0-2.17-.137-3.34-.396l.431-2.118c.98.205 2.272.26 2.95.26 1.074 0 1.84-.219 2.299-.656.459-.437.684-1.086.684-1.948v-.437a8.07 8.07 0 01-1.047.397c-.43.13-.93.198-1.492.198-.739 0-1.41-.116-2.018-.349a4.206 4.206 0 01-1.567-1.025c-.431-.45-.774-1.017-1.013-1.694-.24-.677-.363-1.885-.363-2.773 0-.834.13-1.88.384-2.577.26-.696.629-1.298 1.129-1.796.493-.498 1.095-.881 1.8-1.162a6.605 6.605 0 012.428-.457c.87 0 1.67.109 2.45.24.78.129 1.444.265 1.985.415V18.17z' fill='%235468FF'/%3E%3Cpath d='M6.972 6.677v1.627c-.712-.446-1.52-.67-2.425-.67-.585 0-1.045.13-1.38.391a1.24 1.24 0 00-.502 1.03c0 .425.164.765.494 1.02.33.256.835.532 1.516.83.447.192.795.356 1.045.495.25.138.537.332.862.582.324.25.563.548.718.894.154.345.23.741.23 1.188 0 .947-.334 1.691-1.004 2.234-.67.542-1.537.814-2.601.814-1.18 0-2.16-.229-2.936-.686v-1.708c.84.628 1.814.942 2.92.942.585 0 1.048-.136 1.388-.407.34-.271.51-.646.51-1.125 0-.287-.1-.55-.302-.79-.203-.24-.42-.42-.655-.542-.234-.123-.585-.29-1.053-.503a61.27 61.27 0 01-.582-.271 13.67 13.67 0 01-.55-.287 4.275 4.275 0 01-.567-.351 6.92 6.92 0 01-.455-.4c-.18-.17-.31-.34-.39-.51-.08-.17-.155-.37-.224-.598a2.553 2.553 0 01-.104-.742c0-.915.333-1.638.998-2.17.664-.532 1.523-.798 2.576-.798.968 0 1.793.17 2.473.51zm7.468 5.696v-.287c-.022-.607-.187-1.088-.495-1.444-.309-.357-.75-.535-1.324-.535-.532 0-.99.194-1.373.583-.382.388-.622.949-.717 1.683h3.909zm1.005 2.792v1.404c-.596.34-1.383.51-2.362.51-1.255 0-2.255-.377-3-1.132-.744-.755-1.116-1.744-1.116-2.968 0-1.297.34-2.316 1.021-3.055.68-.74 1.548-1.11 2.6-1.11 1.033 0 1.852.323 2.458.966.606.644.91 1.572.91 2.784 0 .33-.033.676-.096 1.038h-5.314c.107.702.405 1.239.894 1.611.49.372 1.106.558 1.85.558.862 0 1.58-.202 2.155-.606zm6.605-1.77h-1.212c-.596 0-1.045.116-1.349.35-.303.234-.454.532-.454.894 0 .372.117.664.35.877.235.213.575.32 1.022.32.51 0 .912-.142 1.204-.424.293-.281.44-.651.44-1.108v-.91zm-4.068-2.554V9.325c.627-.361 1.457-.542 2.489-.542 2.116 0 3.175 1.026 3.175 3.08V17h-1.548v-.957c-.415.68-1.143 1.02-2.186 1.02-.766 0-1.38-.22-1.843-.661-.462-.442-.694-1.003-.694-1.684 0-.776.293-1.38.878-1.81.585-.431 1.404-.647 2.457-.647h1.34V11.8c0-.554-.133-.971-.399-1.253-.266-.282-.707-.423-1.324-.423a4.07 4.07 0 00-2.345.718zm9.333-1.93v1.42c.394-1 1.101-1.5 2.123-1.5.148 0 .313.016.494.048v1.531a1.885 1.885 0 00-.75-.143c-.542 0-.989.24-1.34.718-.351.479-.527 1.048-.527 1.707V17h-1.563V8.91h1.563zm5.01 4.084c.022.82.272 1.492.75 2.019.479.526 1.15.79 2.01.79.639 0 1.235-.176 1.788-.527v1.404c-.521.319-1.186.479-1.995.479-1.265 0-2.276-.4-3.031-1.197-.755-.798-1.133-1.792-1.133-2.984 0-1.16.38-2.151 1.14-2.975.761-.825 1.79-1.237 3.088-1.237.702 0 1.346.149 1.93.447v1.436a3.242 3.242 0 00-1.77-.495c-.84 0-1.513.266-2.019.798-.505.532-.758 1.213-.758 2.042zM40.24 5.72v4.579c.458-1 1.293-1.5 2.505-1.5.787 0 1.42.245 1.899.734.479.49.718 1.17.718 2.042V17h-1.564v-5.106c0-.553-.14-.98-.422-1.284-.282-.303-.652-.455-1.11-.455-.531 0-1.002.202-1.411.606-.41.405-.615 1.022-.615 1.851V17h-1.563V5.72h1.563zm14.966 10.02c.596 0 1.096-.253 1.5-.758.404-.506.606-1.157.606-1.955 0-.915-.202-1.62-.606-2.114-.404-.495-.92-.742-1.548-.742-.553 0-1.05.224-1.491.67-.442.447-.662 1.133-.662 2.058 0 .958.212 1.67.638 2.138.425.469.946.703 1.563.703zM53.004 5.72v4.42c.574-.894 1.388-1.341 2.44-1.341 1.022 0 1.857.383 2.506 1.149.649.766.973 1.781.973 3.047 0 1.138-.309 2.109-.925 2.912-.617.803-1.463 1.205-2.537 1.205-1.075 0-1.894-.447-2.457-1.34V17h-1.58V5.72h1.58zm9.908 11.104l-3.223-7.913h1.739l1.005 2.632 1.26 3.415c.096-.32.48-1.458 1.15-3.415l.909-2.632h1.66l-2.92 7.866c-.777 2.074-1.963 3.11-3.559 3.11a2.92 2.92 0 01-.734-.079v-1.34c.17.042.351.064.543.064 1.032 0 1.755-.57 2.17-1.708z' fill='%235D6494'/%3E%3Cpath d='M89.632 5.967v-.772a.978.978 0 00-.978-.977h-2.28a.978.978 0 00-.978.977v.793c0 .088.082.15.171.13a7.127 7.127 0 011.984-.28c.65 0 1.295.088 1.917.259.082.02.164-.04.164-.13m-6.248 1.01l-.39-.389a.977.977 0 00-1.382 0l-.465.465a.973.973 0 000 1.38l.383.383c.062.061.15.047.205-.014.226-.307.472-.601.746-.874.281-.28.568-.526.883-.751.068-.042.075-.137.02-.2m4.16 2.453v3.341c0 .096.104.165.192.117l2.97-1.537c.068-.034.089-.117.055-.184a3.695 3.695 0 00-3.08-1.866c-.068 0-.136.054-.136.13m0 8.048a4.489 4.489 0 01-4.49-4.482 4.488 4.488 0 014.49-4.482 4.488 4.488 0 014.489 4.482 4.484 4.484 0 01-4.49 4.482m0-10.85a6.363 6.363 0 100 12.729 6.37 6.37 0 006.372-6.368 6.358 6.358 0 00-6.371-6.36' fill='%23FFF'/%3E%3C/g%3E%3C/svg%3E");background-repeat:no-repeat;background-position:50%;background-size:100%;overflow:hidden;text-indent:-9000px;padding:0!important;width:100%;height:100%;display:block} \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/img/predefined-html-settings.0eef5487.png b/docs/.vuepress/dist/assets/img/predefined-html-settings.0eef5487.png new file mode 100644 index 00000000..5d908da3 Binary files /dev/null and b/docs/.vuepress/dist/assets/img/predefined-html-settings.0eef5487.png differ diff --git a/docs/.vuepress/dist/assets/img/predefined-html.2225658b.png b/docs/.vuepress/dist/assets/img/predefined-html.2225658b.png new file mode 100644 index 00000000..0bc10a6f Binary files /dev/null and b/docs/.vuepress/dist/assets/img/predefined-html.2225658b.png differ diff --git a/docs/.vuepress/dist/assets/img/sprout-address-modal.a33c38a5.png b/docs/.vuepress/dist/assets/img/sprout-address-modal.a33c38a5.png new file mode 100644 index 00000000..84e8b57c Binary files /dev/null and b/docs/.vuepress/dist/assets/img/sprout-address-modal.a33c38a5.png differ diff --git a/docs/.vuepress/dist/assets/img/sprout-components.42288e58.png b/docs/.vuepress/dist/assets/img/sprout-components.42288e58.png new file mode 100644 index 00000000..9a85964c Binary files /dev/null and b/docs/.vuepress/dist/assets/img/sprout-components.42288e58.png differ diff --git a/docs/.vuepress/dist/assets/img/sprout-features.eef8c9e7.png b/docs/.vuepress/dist/assets/img/sprout-features.eef8c9e7.png new file mode 100644 index 00000000..20dbb5c4 Binary files /dev/null and b/docs/.vuepress/dist/assets/img/sprout-features.eef8c9e7.png differ diff --git a/docs/.vuepress/dist/assets/img/sprout-gender-field-dropdown.6cb2b83c.png b/docs/.vuepress/dist/assets/img/sprout-gender-field-dropdown.6cb2b83c.png new file mode 100644 index 00000000..1c6b0d54 Binary files /dev/null and b/docs/.vuepress/dist/assets/img/sprout-gender-field-dropdown.6cb2b83c.png differ diff --git a/docs/.vuepress/dist/assets/img/sprout-gender-field.b3ff3e4e.png b/docs/.vuepress/dist/assets/img/sprout-gender-field.b3ff3e4e.png new file mode 100644 index 00000000..b8026cac Binary files /dev/null and b/docs/.vuepress/dist/assets/img/sprout-gender-field.b3ff3e4e.png differ diff --git a/docs/.vuepress/dist/assets/img/sprout-name-field-settings.0dabba9c.png b/docs/.vuepress/dist/assets/img/sprout-name-field-settings.0dabba9c.png new file mode 100644 index 00000000..66b2cf08 Binary files /dev/null and b/docs/.vuepress/dist/assets/img/sprout-name-field-settings.0dabba9c.png differ diff --git a/docs/.vuepress/dist/assets/img/sprout-name-multiple.18d4a7d7.png b/docs/.vuepress/dist/assets/img/sprout-name-multiple.18d4a7d7.png new file mode 100644 index 00000000..0166606f Binary files /dev/null and b/docs/.vuepress/dist/assets/img/sprout-name-multiple.18d4a7d7.png differ diff --git a/docs/.vuepress/dist/assets/img/sprout-name-single.308cde1b.png b/docs/.vuepress/dist/assets/img/sprout-name-single.308cde1b.png new file mode 100644 index 00000000..7e3c14a9 Binary files /dev/null and b/docs/.vuepress/dist/assets/img/sprout-name-single.308cde1b.png differ diff --git a/docs/.vuepress/dist/assets/img/sprout-notes-field-output.5f88c983.png b/docs/.vuepress/dist/assets/img/sprout-notes-field-output.5f88c983.png new file mode 100644 index 00000000..4c6648c8 Binary files /dev/null and b/docs/.vuepress/dist/assets/img/sprout-notes-field-output.5f88c983.png differ diff --git a/docs/.vuepress/dist/assets/img/sprout-phone-field.a82a688d.png b/docs/.vuepress/dist/assets/img/sprout-phone-field.a82a688d.png new file mode 100644 index 00000000..d9127173 Binary files /dev/null and b/docs/.vuepress/dist/assets/img/sprout-phone-field.a82a688d.png differ diff --git a/docs/.vuepress/dist/assets/img/sprout-seo-fieldtype.5f60b1ca.png b/docs/.vuepress/dist/assets/img/sprout-seo-fieldtype.5f60b1ca.png new file mode 100644 index 00000000..2bb804f3 Binary files /dev/null and b/docs/.vuepress/dist/assets/img/sprout-seo-fieldtype.5f60b1ca.png differ diff --git a/docs/.vuepress/dist/assets/img/sprout-seo-metadata-spreadsheet.71c10566.png b/docs/.vuepress/dist/assets/img/sprout-seo-metadata-spreadsheet.71c10566.png new file mode 100644 index 00000000..c2f4d5df Binary files /dev/null and b/docs/.vuepress/dist/assets/img/sprout-seo-metadata-spreadsheet.71c10566.png differ diff --git a/docs/.vuepress/dist/assets/img/sproutseo-global-metadata.3c427a2a.png b/docs/.vuepress/dist/assets/img/sproutseo-global-metadata.3c427a2a.png new file mode 100644 index 00000000..b69eb146 Binary files /dev/null and b/docs/.vuepress/dist/assets/img/sproutseo-global-metadata.3c427a2a.png differ diff --git a/docs/.vuepress/dist/assets/img/window-buttons.87b6b579.svg b/docs/.vuepress/dist/assets/img/window-buttons.87b6b579.svg new file mode 100644 index 00000000..e726776c --- /dev/null +++ b/docs/.vuepress/dist/assets/img/window-buttons.87b6b579.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/img/xml-sitemap.d7e314b4.png b/docs/.vuepress/dist/assets/img/xml-sitemap.d7e314b4.png new file mode 100644 index 00000000..a4d7d848 Binary files /dev/null and b/docs/.vuepress/dist/assets/img/xml-sitemap.d7e314b4.png differ diff --git a/docs/.vuepress/dist/assets/js/1.7d7425b3.js b/docs/.vuepress/dist/assets/js/1.7d7425b3.js new file mode 100644 index 00000000..de4cc5b2 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/1.7d7425b3.js @@ -0,0 +1,25 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[1],{413:function(e,t,n){"use strict"; +/**! + * @fileOverview Kickass library to create and place poppers near their reference elements. + * @version 1.16.1 + * @license + * Copyright (c) 2016 Federico Zivolo and contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */var o="undefined"!=typeof window&&"undefined"!=typeof document&&"undefined"!=typeof navigator,r=function(){for(var e=["Edge","Trident","Firefox"],t=0;t=0)return 1;return 0}();var i=o&&window.Promise?function(e){var t=!1;return function(){t||(t=!0,window.Promise.resolve().then((function(){t=!1,e()})))}}:function(e){var t=!1;return function(){t||(t=!0,setTimeout((function(){t=!1,e()}),r))}};function s(e){return e&&"[object Function]"==={}.toString.call(e)}function a(e,t){if(1!==e.nodeType)return[];var n=e.ownerDocument.defaultView.getComputedStyle(e,null);return t?n[t]:n}function u(e){return"HTML"===e.nodeName?e:e.parentNode||e.host}function p(e){if(!e)return document.body;switch(e.nodeName){case"HTML":case"BODY":return e.ownerDocument.body;case"#document":return e.body}var t=a(e),n=t.overflow,o=t.overflowX,r=t.overflowY;return/(auto|scroll|overlay)/.test(n+r+o)?e:p(u(e))}function c(e){return e&&e.referenceNode?e.referenceNode:e}var l=o&&!(!window.MSInputMethodContext||!document.documentMode),f=o&&/MSIE 10/.test(navigator.userAgent);function d(e){return 11===e?l:10===e?f:l||f}function h(e){if(!e)return document.documentElement;for(var t=d(10)?document.body:null,n=e.offsetParent||null;n===t&&e.nextElementSibling;)n=(e=e.nextElementSibling).offsetParent;var o=n&&n.nodeName;return o&&"BODY"!==o&&"HTML"!==o?-1!==["TH","TD","TABLE"].indexOf(n.nodeName)&&"static"===a(n,"position")?h(n):n:e?e.ownerDocument.documentElement:document.documentElement}function v(e){return null!==e.parentNode?v(e.parentNode):e}function m(e,t){if(!(e&&e.nodeType&&t&&t.nodeType))return document.documentElement;var n=e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING,o=n?e:t,r=n?t:e,i=document.createRange();i.setStart(o,0),i.setEnd(r,0);var s,a,u=i.commonAncestorContainer;if(e!==u&&t!==u||o.contains(r))return"BODY"===(a=(s=u).nodeName)||"HTML"!==a&&h(s.firstElementChild)!==s?h(u):u;var p=v(e);return p.host?m(p.host,t):m(e,v(t).host)}function b(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"top",n="top"===t?"scrollTop":"scrollLeft",o=e.nodeName;if("BODY"===o||"HTML"===o){var r=e.ownerDocument.documentElement,i=e.ownerDocument.scrollingElement||r;return i[n]}return e[n]}function g(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=b(t,"top"),r=b(t,"left"),i=n?-1:1;return e.top+=o*i,e.bottom+=o*i,e.left+=r*i,e.right+=r*i,e}function y(e,t){var n="x"===t?"Left":"Top",o="Left"===n?"Right":"Bottom";return parseFloat(e["border"+n+"Width"])+parseFloat(e["border"+o+"Width"])}function _(e,t,n,o){return Math.max(t["offset"+e],t["scroll"+e],n["client"+e],n["offset"+e],n["scroll"+e],d(10)?parseInt(n["offset"+e])+parseInt(o["margin"+("Height"===e?"Top":"Left")])+parseInt(o["margin"+("Height"===e?"Bottom":"Right")]):0)}function w(e){var t=e.body,n=e.documentElement,o=d(10)&&getComputedStyle(n);return{height:_("Height",t,n,o),width:_("Width",t,n,o)}}var O=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},E=function(){function e(e,t){for(var n=0;n2&&void 0!==arguments[2]&&arguments[2],o=d(10),r="HTML"===t.nodeName,i=$(e),s=$(t),u=p(e),c=a(t),l=parseFloat(c.borderTopWidth),f=parseFloat(c.borderLeftWidth);n&&r&&(s.top=Math.max(s.top,0),s.left=Math.max(s.left,0));var h=T({top:i.top-s.top-l,left:i.left-s.left-f,width:i.width,height:i.height});if(h.marginTop=0,h.marginLeft=0,!o&&r){var v=parseFloat(c.marginTop),m=parseFloat(c.marginLeft);h.top-=l-v,h.bottom-=l-v,h.left-=f-m,h.right-=f-m,h.marginTop=v,h.marginLeft=m}return(o&&!n?t.contains(u):t===u&&"BODY"!==u.nodeName)&&(h=g(h,t)),h}function k(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=e.ownerDocument.documentElement,o=x(e,n),r=Math.max(n.clientWidth,window.innerWidth||0),i=Math.max(n.clientHeight,window.innerHeight||0),s=t?0:b(n),a=t?0:b(n,"left"),u={top:s-o.top+o.marginTop,left:a-o.left+o.marginLeft,width:r,height:i};return T(u)}function S(e){var t=e.nodeName;if("BODY"===t||"HTML"===t)return!1;if("fixed"===a(e,"position"))return!0;var n=u(e);return!!n&&S(n)}function N(e){if(!e||!e.parentElement||d())return document.documentElement;for(var t=e.parentElement;t&&"none"===a(t,"transform");)t=t.parentElement;return t||document.documentElement}function A(e,t,n,o){var r=arguments.length>4&&void 0!==arguments[4]&&arguments[4],i={top:0,left:0},s=r?N(e):m(e,c(t));if("viewport"===o)i=k(s,r);else{var a=void 0;"scrollParent"===o?"BODY"===(a=p(u(t))).nodeName&&(a=e.ownerDocument.documentElement):a="window"===o?e.ownerDocument.documentElement:o;var l=x(a,s,r);if("HTML"!==a.nodeName||S(s))i=l;else{var f=w(e.ownerDocument),d=f.height,h=f.width;i.top+=l.top-l.marginTop,i.bottom=d+l.top,i.left+=l.left-l.marginLeft,i.right=h+l.left}}var v="number"==typeof(n=n||0);return i.left+=v?n:n.left||0,i.top+=v?n:n.top||0,i.right-=v?n:n.right||0,i.bottom-=v?n:n.bottom||0,i}function L(e){return e.width*e.height}function P(e,t,n,o,r){var i=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;if(-1===e.indexOf("auto"))return e;var s=A(n,o,i,r),a={top:{width:s.width,height:t.top-s.top},right:{width:s.right-t.right,height:s.height},bottom:{width:s.width,height:s.bottom-t.bottom},left:{width:t.left-s.left,height:s.height}},u=Object.keys(a).map((function(e){return C({key:e},a[e],{area:L(a[e])})})).sort((function(e,t){return t.area-e.area})),p=u.filter((function(e){var t=e.width,o=e.height;return t>=n.clientWidth&&o>=n.clientHeight})),c=p.length>0?p[0].key:u[0].key,l=e.split("-")[1];return c+(l?"-"+l:"")}function D(e,t,n){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,r=o?N(t):m(t,c(n));return x(n,r,o)}function I(e){var t=e.ownerDocument.defaultView.getComputedStyle(e),n=parseFloat(t.marginTop||0)+parseFloat(t.marginBottom||0),o=parseFloat(t.marginLeft||0)+parseFloat(t.marginRight||0);return{width:e.offsetWidth+o,height:e.offsetHeight+n}}function z(e){var t={left:"right",right:"left",bottom:"top",top:"bottom"};return e.replace(/left|right|bottom|top/g,(function(e){return t[e]}))}function H(e,t,n){n=n.split("-")[0];var o=I(e),r={width:o.width,height:o.height},i=-1!==["right","left"].indexOf(n),s=i?"top":"left",a=i?"left":"top",u=i?"height":"width",p=i?"width":"height";return r[s]=t[s]+t[u]/2-o[u]/2,r[a]=n===a?t[a]-o[p]:t[z(a)],r}function M(e,t){return Array.prototype.find?e.find(t):e.filter(t)[0]}function B(e,t,n){return(void 0===n?e:e.slice(0,function(e,t,n){if(Array.prototype.findIndex)return e.findIndex((function(e){return e[t]===n}));var o=M(e,(function(e){return e[t]===n}));return e.indexOf(o)}(e,"name",n))).forEach((function(e){e.function&&console.warn("`modifier.function` is deprecated, use `modifier.fn`!");var n=e.function||e.fn;e.enabled&&s(n)&&(t.offsets.popper=T(t.offsets.popper),t.offsets.reference=T(t.offsets.reference),t=n(t,e))})),t}function F(){if(!this.state.isDestroyed){var e={instance:this,styles:{},arrowStyles:{},attributes:{},flipped:!1,offsets:{}};e.offsets.reference=D(this.state,this.popper,this.reference,this.options.positionFixed),e.placement=P(this.options.placement,e.offsets.reference,this.popper,this.reference,this.options.modifiers.flip.boundariesElement,this.options.modifiers.flip.padding),e.originalPlacement=e.placement,e.positionFixed=this.options.positionFixed,e.offsets.popper=H(this.popper,e.offsets.reference,e.placement),e.offsets.popper.position=this.options.positionFixed?"fixed":"absolute",e=B(this.modifiers,e),this.state.isCreated?this.options.onUpdate(e):(this.state.isCreated=!0,this.options.onCreate(e))}}function R(e,t){return e.some((function(e){var n=e.name;return e.enabled&&n===t}))}function W(e){for(var t=[!1,"ms","Webkit","Moz","O"],n=e.charAt(0).toUpperCase()+e.slice(1),o=0;o1&&void 0!==arguments[1]&&arguments[1],n=ee.indexOf(e),o=ee.slice(n+1).concat(ee.slice(0,n));return t?o.reverse():o}var ne="flip",oe="clockwise",re="counterclockwise";function ie(e,t,n,o){var r=[0,0],i=-1!==["right","left"].indexOf(o),s=e.split(/(\+|\-)/).map((function(e){return e.trim()})),a=s.indexOf(M(s,(function(e){return-1!==e.search(/,|\s/)})));s[a]&&-1===s[a].indexOf(",")&&console.warn("Offsets separated by white space(s) are deprecated, use a comma (,) instead.");var u=/\s*,\s*|\s+/,p=-1!==a?[s.slice(0,a).concat([s[a].split(u)[0]]),[s[a].split(u)[1]].concat(s.slice(a+1))]:[s];return(p=p.map((function(e,o){var r=(1===o?!i:i)?"height":"width",s=!1;return e.reduce((function(e,t){return""===e[e.length-1]&&-1!==["+","-"].indexOf(t)?(e[e.length-1]=t,s=!0,e):s?(e[e.length-1]+=t,s=!1,e):e.concat(t)}),[]).map((function(e){return function(e,t,n,o){var r=e.match(/((?:\-|\+)?\d*\.?\d*)(.*)/),i=+r[1],s=r[2];if(!i)return e;if(0===s.indexOf("%")){var a=void 0;switch(s){case"%p":a=n;break;case"%":case"%r":default:a=o}return T(a)[t]/100*i}if("vh"===s||"vw"===s){return("vh"===s?Math.max(document.documentElement.clientHeight,window.innerHeight||0):Math.max(document.documentElement.clientWidth,window.innerWidth||0))/100*i}return i}(e,r,t,n)}))}))).forEach((function(e,t){e.forEach((function(n,o){X(n)&&(r[t]+=n*("-"===e[o-1]?-1:1))}))})),r}var se={placement:"bottom",positionFixed:!1,eventsEnabled:!0,removeOnDestroy:!1,onCreate:function(){},onUpdate:function(){},modifiers:{shift:{order:100,enabled:!0,fn:function(e){var t=e.placement,n=t.split("-")[0],o=t.split("-")[1];if(o){var r=e.offsets,i=r.reference,s=r.popper,a=-1!==["bottom","top"].indexOf(n),u=a?"left":"top",p=a?"width":"height",c={start:j({},u,i[u]),end:j({},u,i[u]+i[p]-s[p])};e.offsets.popper=C({},s,c[o])}return e}},offset:{order:200,enabled:!0,fn:function(e,t){var n=t.offset,o=e.placement,r=e.offsets,i=r.popper,s=r.reference,a=o.split("-")[0],u=void 0;return u=X(+n)?[+n,0]:ie(n,i,s,a),"left"===a?(i.top+=u[0],i.left-=u[1]):"right"===a?(i.top+=u[0],i.left+=u[1]):"top"===a?(i.left+=u[0],i.top-=u[1]):"bottom"===a&&(i.left+=u[0],i.top+=u[1]),e.popper=i,e},offset:0},preventOverflow:{order:300,enabled:!0,fn:function(e,t){var n=t.boundariesElement||h(e.instance.popper);e.instance.reference===n&&(n=h(n));var o=W("transform"),r=e.instance.popper.style,i=r.top,s=r.left,a=r[o];r.top="",r.left="",r[o]="";var u=A(e.instance.popper,e.instance.reference,t.padding,n,e.positionFixed);r.top=i,r.left=s,r[o]=a,t.boundaries=u;var p=t.priority,c=e.offsets.popper,l={primary:function(e){var n=c[e];return c[e]u[e]&&!t.escapeWithReference&&(o=Math.min(c[n],u[e]-("right"===e?c.width:c.height))),j({},n,o)}};return p.forEach((function(e){var t=-1!==["left","top"].indexOf(e)?"primary":"secondary";c=C({},c,l[t](e))})),e.offsets.popper=c,e},priority:["left","right","top","bottom"],padding:5,boundariesElement:"scrollParent"},keepTogether:{order:400,enabled:!0,fn:function(e){var t=e.offsets,n=t.popper,o=t.reference,r=e.placement.split("-")[0],i=Math.floor,s=-1!==["top","bottom"].indexOf(r),a=s?"right":"bottom",u=s?"left":"top",p=s?"width":"height";return n[a]i(o[a])&&(e.offsets.popper[u]=i(o[a])),e}},arrow:{order:500,enabled:!0,fn:function(e,t){var n;if(!Q(e.instance.modifiers,"arrow","keepTogether"))return e;var o=t.element;if("string"==typeof o){if(!(o=e.instance.popper.querySelector(o)))return e}else if(!e.instance.popper.contains(o))return console.warn("WARNING: `arrow.element` must be child of its popper element!"),e;var r=e.placement.split("-")[0],i=e.offsets,s=i.popper,u=i.reference,p=-1!==["left","right"].indexOf(r),c=p?"height":"width",l=p?"Top":"Left",f=l.toLowerCase(),d=p?"left":"top",h=p?"bottom":"right",v=I(o)[c];u[h]-vs[h]&&(e.offsets.popper[f]+=u[f]+v-s[h]),e.offsets.popper=T(e.offsets.popper);var m=u[f]+u[c]/2-v/2,b=a(e.instance.popper),g=parseFloat(b["margin"+l]),y=parseFloat(b["border"+l+"Width"]),_=m-e.offsets.popper[f]-g-y;return _=Math.max(Math.min(s[c]-v,_),0),e.arrowElement=o,e.offsets.arrow=(j(n={},f,Math.round(_)),j(n,d,""),n),e},element:"[x-arrow]"},flip:{order:600,enabled:!0,fn:function(e,t){if(R(e.instance.modifiers,"inner"))return e;if(e.flipped&&e.placement===e.originalPlacement)return e;var n=A(e.instance.popper,e.instance.reference,t.padding,t.boundariesElement,e.positionFixed),o=e.placement.split("-")[0],r=z(o),i=e.placement.split("-")[1]||"",s=[];switch(t.behavior){case ne:s=[o,r];break;case oe:s=te(o);break;case re:s=te(o,!0);break;default:s=t.behavior}return s.forEach((function(a,u){if(o!==a||s.length===u+1)return e;o=e.placement.split("-")[0],r=z(o);var p=e.offsets.popper,c=e.offsets.reference,l=Math.floor,f="left"===o&&l(p.right)>l(c.left)||"right"===o&&l(p.left)l(c.top)||"bottom"===o&&l(p.top)l(n.right),v=l(p.top)l(n.bottom),b="left"===o&&d||"right"===o&&h||"top"===o&&v||"bottom"===o&&m,g=-1!==["top","bottom"].indexOf(o),y=!!t.flipVariations&&(g&&"start"===i&&d||g&&"end"===i&&h||!g&&"start"===i&&v||!g&&"end"===i&&m),_=!!t.flipVariationsByContent&&(g&&"start"===i&&h||g&&"end"===i&&d||!g&&"start"===i&&m||!g&&"end"===i&&v),w=y||_;(f||b||w)&&(e.flipped=!0,(f||b)&&(o=s[u+1]),w&&(i=function(e){return"end"===e?"start":"start"===e?"end":e}(i)),e.placement=o+(i?"-"+i:""),e.offsets.popper=C({},e.offsets.popper,H(e.instance.popper,e.offsets.reference,e.placement)),e=B(e.instance.modifiers,e,"flip"))})),e},behavior:"flip",padding:5,boundariesElement:"viewport",flipVariations:!1,flipVariationsByContent:!1},inner:{order:700,enabled:!1,fn:function(e){var t=e.placement,n=t.split("-")[0],o=e.offsets,r=o.popper,i=o.reference,s=-1!==["left","right"].indexOf(n),a=-1===["top","left"].indexOf(n);return r[s?"left":"top"]=i[n]-(a?r[s?"width":"height"]:0),e.placement=z(t),e.offsets.popper=T(r),e}},hide:{order:800,enabled:!0,fn:function(e){if(!Q(e.instance.modifiers,"hide","preventOverflow"))return e;var t=e.offsets.reference,n=M(e.instance.modifiers,(function(e){return"preventOverflow"===e.name})).boundaries;if(t.bottomn.right||t.top>n.bottom||t.right2&&void 0!==arguments[2]?arguments[2]:{};O(this,e),this.scheduleUpdate=function(){return requestAnimationFrame(o.update)},this.update=i(this.update.bind(this)),this.options=C({},e.Defaults,r),this.state={isDestroyed:!1,isCreated:!1,scrollParents:[]},this.reference=t&&t.jquery?t[0]:t,this.popper=n&&n.jquery?n[0]:n,this.options.modifiers={},Object.keys(C({},e.Defaults.modifiers,r.modifiers)).forEach((function(t){o.options.modifiers[t]=C({},e.Defaults.modifiers[t]||{},r.modifiers?r.modifiers[t]:{})})),this.modifiers=Object.keys(this.options.modifiers).map((function(e){return C({name:e},o.options.modifiers[e])})).sort((function(e,t){return e.order-t.order})),this.modifiers.forEach((function(e){e.enabled&&s(e.onLoad)&&e.onLoad(o.reference,o.popper,o.options,e,o.state)})),this.update();var a=this.options.eventsEnabled;a&&this.enableEventListeners(),this.state.eventsEnabled=a}return E(e,[{key:"update",value:function(){return F.call(this)}},{key:"destroy",value:function(){return V.call(this)}},{key:"enableEventListeners",value:function(){return G.call(this)}},{key:"disableEventListeners",value:function(){return Y.call(this)}}]),e}();ae.Utils=("undefined"!=typeof window?window:global).PopperUtils,ae.placements=Z,ae.Defaults=se;var ue=ae;var pe=void 0;function ce(){ce.init||(ce.init=!0,pe=-1!==function(){var e=window.navigator.userAgent,t=e.indexOf("MSIE ");if(t>0)return parseInt(e.substring(t+5,e.indexOf(".",t)),10);if(e.indexOf("Trident/")>0){var n=e.indexOf("rv:");return parseInt(e.substring(n+3,e.indexOf(".",n)),10)}var o=e.indexOf("Edge/");return o>0?parseInt(e.substring(o+5,e.indexOf(".",o)),10):-1}())}var le={render:function(){var e=this.$createElement;return(this._self._c||e)("div",{staticClass:"resize-observer",attrs:{tabindex:"-1"}})},staticRenderFns:[],_scopeId:"data-v-b329ee4c",name:"resize-observer",methods:{compareAndNotify:function(){this._w===this.$el.offsetWidth&&this._h===this.$el.offsetHeight||(this._w=this.$el.offsetWidth,this._h=this.$el.offsetHeight,this.$emit("notify"))},addResizeHandlers:function(){this._resizeObject.contentDocument.defaultView.addEventListener("resize",this.compareAndNotify),this.compareAndNotify()},removeResizeHandlers:function(){this._resizeObject&&this._resizeObject.onload&&(!pe&&this._resizeObject.contentDocument&&this._resizeObject.contentDocument.defaultView.removeEventListener("resize",this.compareAndNotify),delete this._resizeObject.onload)}},mounted:function(){var e=this;ce(),this.$nextTick((function(){e._w=e.$el.offsetWidth,e._h=e.$el.offsetHeight}));var t=document.createElement("object");this._resizeObject=t,t.setAttribute("aria-hidden","true"),t.setAttribute("tabindex",-1),t.onload=this.addResizeHandlers,t.type="text/html",pe&&this.$el.appendChild(t),t.data="about:blank",pe||this.$el.appendChild(t)},beforeDestroy:function(){this.removeResizeHandlers()}};var fe={version:"0.4.5",install:function(e){e.component("resize-observer",le),e.component("ResizeObserver",le)}},de=null;"undefined"!=typeof window?de=window.Vue:"undefined"!=typeof global&&(de=global.Vue),de&&de.use(fe);function he(e){return(he="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function ve(e,t){for(var n=0;n-1};var Ae=function(e,t){var n=this.__data__,o=$e(n,e);return o<0?(++this.size,n.push([e,t])):n[o][1]=t,this};function Le(e){var t=-1,n=null==e?0:e.length;for(this.clear();++ta))return!1;var p=i.get(e);if(p&&i.get(t))return p==t;var c=-1,l=!0,f=2&n?new Wt:void 0;for(i.set(e,t),i.set(t,e);++c-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991},_n={};_n["[object Float32Array]"]=_n["[object Float64Array]"]=_n["[object Int8Array]"]=_n["[object Int16Array]"]=_n["[object Int32Array]"]=_n["[object Uint8Array]"]=_n["[object Uint8ClampedArray]"]=_n["[object Uint16Array]"]=_n["[object Uint32Array]"]=!0,_n["[object Arguments]"]=_n["[object Array]"]=_n["[object ArrayBuffer]"]=_n["[object Boolean]"]=_n["[object DataView]"]=_n["[object Date]"]=_n["[object Error]"]=_n["[object Function]"]=_n["[object Map]"]=_n["[object Number]"]=_n["[object Object]"]=_n["[object RegExp]"]=_n["[object Set]"]=_n["[object String]"]=_n["[object WeakMap]"]=!1;var wn=function(e){return pn(e)&&yn(e.length)&&!!_n[Ze(e)]};var On=function(e){return function(t){return e(t)}},En=Be((function(e,t){var n=t&&!t.nodeType&&t,o=n&&e&&!e.nodeType&&e,r=o&&o.exports===n&&Fe.process,i=function(){try{var e=o&&o.require&&o.require("util").types;return e||r&&r.binding&&r.binding("util")}catch(e){}}();e.exports=i})),jn=En&&En.isTypedArray,Cn=jn?On(jn):wn,Tn=Object.prototype.hasOwnProperty;var $n=function(e,t){var n=en(e),o=!n&&hn(e),r=!n&&!o&&mn(e),i=!n&&!o&&!r&&Cn(e),s=n||o||r||i,a=s?un(e.length,String):[],u=a.length;for(var p in e)!t&&!Tn.call(e,p)||s&&("length"==p||r&&("offset"==p||"parent"==p)||i&&("buffer"==p||"byteLength"==p||"byteOffset"==p)||gn(p,u))||a.push(p);return a},xn=Object.prototype;var kn=function(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||xn)};var Sn=function(e,t){return function(n){return e(t(n))}},Nn=Sn(Object.keys,Object),An=Object.prototype.hasOwnProperty;var Ln=function(e){if(!kn(e))return Nn(e);var t=[];for(var n in Object(e))An.call(e,n)&&"constructor"!=n&&t.push(n);return t};var Pn=function(e){return null!=e&&yn(e.length)&&!nt(e)};var Dn=function(e){return Pn(e)?$n(e):Ln(e)};var In=function(e){return tn(e,Dn,an)},zn=Object.prototype.hasOwnProperty;var Hn=function(e,t,n,o,r,i){var s=1&n,a=In(e),u=a.length;if(u!=In(t).length&&!s)return!1;for(var p=u;p--;){var c=a[p];if(!(s?c in t:zn.call(t,c)))return!1}var l=i.get(e);if(l&&i.get(t))return l==t;var f=!0;i.set(e,t),i.set(t,e);for(var d=s;++p
',trigger:"hover focus",offset:0},to=[],no=function(){function e(t,n){var o=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),me(this,"_events",[]),me(this,"_setTooltipNodeEvent",(function(e,t,n,r){var i=e.relatedreference||e.toElement||e.relatedTarget;return!!o._tooltipNode.contains(i)&&(o._tooltipNode.addEventListener(e.type,(function n(i){var s=i.relatedreference||i.toElement||i.relatedTarget;o._tooltipNode.removeEventListener(e.type,n),t.contains(s)||o._scheduleHide(t,r.delay,r,i)})),!0)})),n=ge({},eo,{},n),t.jquery&&(t=t[0]),this.show=this.show.bind(this),this.hide=this.hide.bind(this),this.reference=t,this.options=n,this._isOpen=!1,this._init()}var t,n,o;return t=e,(n=[{key:"show",value:function(){this._show(this.reference,this.options)}},{key:"hide",value:function(){this._hide()}},{key:"dispose",value:function(){this._dispose()}},{key:"toggle",value:function(){return this._isOpen?this.hide():this.show()}},{key:"setClasses",value:function(e){this._classes=e}},{key:"setContent",value:function(e){this.options.title=e,this._tooltipNode&&this._setContent(e,this.options)}},{key:"setOptions",value:function(e){var t=!1,n=e&&e.classes||lo.options.defaultClass;Zn(this._classes,n)||(this.setClasses(n),t=!0),e=so(e);var o=!1,r=!1;for(var i in this.options.offset===e.offset&&this.options.placement===e.placement||(o=!0),(this.options.template!==e.template||this.options.trigger!==e.trigger||this.options.container!==e.container||t)&&(r=!0),e)this.options[i]=e[i];if(this._tooltipNode)if(r){var s=this._isOpen;this.dispose(),this._init(),s&&this.show()}else o&&this.popperInstance.update()}},{key:"_init",value:function(){var e="string"==typeof this.options.trigger?this.options.trigger.split(" "):[];this._isDisposed=!1,this._enableDocumentTouch=-1===e.indexOf("manual"),e=e.filter((function(e){return-1!==["click","hover","focus"].indexOf(e)})),this._setEventListeners(this.reference,e,this.options),this.$_originalTitle=this.reference.getAttribute("title"),this.reference.removeAttribute("title"),this.reference.setAttribute("data-original-title",this.$_originalTitle)}},{key:"_create",value:function(e,t){var n=window.document.createElement("div");n.innerHTML=t.trim();var o=n.childNodes[0];return o.id="tooltip_".concat(Math.random().toString(36).substr(2,10)),o.setAttribute("aria-hidden","true"),this.options.autoHide&&-1!==this.options.trigger.indexOf("hover")&&(o.addEventListener("mouseenter",this.hide),o.addEventListener("click",this.hide)),o}},{key:"_setContent",value:function(e,t){var n=this;this.asyncContent=!1,this._applyContent(e,t).then((function(){n.popperInstance.update()}))}},{key:"_applyContent",value:function(e,t){var n=this;return new Promise((function(o,r){var i=t.html,s=n._tooltipNode;if(s){var a=s.querySelector(n.options.innerSelector);if(1===e.nodeType){if(i){for(;a.firstChild;)a.removeChild(a.firstChild);a.appendChild(e)}}else{if("function"==typeof e){var u=e();return void(u&&"function"==typeof u.then?(n.asyncContent=!0,t.loadingClass&&we(s,t.loadingClass),t.loadingContent&&n._applyContent(t.loadingContent,t),u.then((function(e){return t.loadingClass&&Oe(s,t.loadingClass),n._applyContent(e,t)})).then(o).catch(r)):n._applyContent(u,t).then(o).catch(r))}i?a.innerHTML=e:a.innerText=e}o()}}))}},{key:"_show",value:function(e,t){if(!t||"string"!=typeof t.container||document.querySelector(t.container)){clearTimeout(this._disposeTimer),delete(t=Object.assign({},t)).offset;var n=!0;this._tooltipNode&&(we(this._tooltipNode,this._classes),n=!1);var o=this._ensureShown(e,t);return n&&this._tooltipNode&&we(this._tooltipNode,this._classes),we(e,["v-tooltip-open"]),o}}},{key:"_ensureShown",value:function(e,t){var n=this;if(this._isOpen)return this;if(this._isOpen=!0,to.push(this),this._tooltipNode)return this._tooltipNode.style.display="",this._tooltipNode.setAttribute("aria-hidden","false"),this.popperInstance.enableEventListeners(),this.popperInstance.update(),this.asyncContent&&this._setContent(t.title,t),this;var o=e.getAttribute("title")||t.title;if(!o)return this;var r=this._create(e,t.template);this._tooltipNode=r,e.setAttribute("aria-describedby",r.id);var i=this._findContainer(t.container,e);this._append(r,i);var s=ge({},t.popperOptions,{placement:t.placement});return s.modifiers=ge({},s.modifiers,{arrow:{element:this.options.arrowSelector}}),t.boundariesElement&&(s.modifiers.preventOverflow={boundariesElement:t.boundariesElement}),this.popperInstance=new ue(e,r,s),this._setContent(o,t),requestAnimationFrame((function(){!n._isDisposed&&n.popperInstance?(n.popperInstance.update(),requestAnimationFrame((function(){n._isDisposed?n.dispose():n._isOpen&&r.setAttribute("aria-hidden","false")}))):n.dispose()})),this}},{key:"_noLongerOpen",value:function(){var e=to.indexOf(this);-1!==e&&to.splice(e,1)}},{key:"_hide",value:function(){var e=this;if(!this._isOpen)return this;this._isOpen=!1,this._noLongerOpen(),this._tooltipNode.style.display="none",this._tooltipNode.setAttribute("aria-hidden","true"),this.popperInstance.disableEventListeners(),clearTimeout(this._disposeTimer);var t=lo.options.disposeTimeout;return null!==t&&(this._disposeTimer=setTimeout((function(){e._tooltipNode&&(e._tooltipNode.removeEventListener("mouseenter",e.hide),e._tooltipNode.removeEventListener("click",e.hide),e._removeTooltipNode())}),t)),Oe(this.reference,["v-tooltip-open"]),this}},{key:"_removeTooltipNode",value:function(){if(this._tooltipNode){var e=this._tooltipNode.parentNode;e&&(e.removeChild(this._tooltipNode),this.reference.removeAttribute("aria-describedby")),this._tooltipNode=null}}},{key:"_dispose",value:function(){var e=this;return this._isDisposed=!0,this.reference.removeAttribute("data-original-title"),this.$_originalTitle&&this.reference.setAttribute("title",this.$_originalTitle),this._events.forEach((function(t){var n=t.func,o=t.event;e.reference.removeEventListener(o,n)})),this._events=[],this._tooltipNode?(this._hide(),this._tooltipNode.removeEventListener("mouseenter",this.hide),this._tooltipNode.removeEventListener("click",this.hide),this.popperInstance.destroy(),this.popperInstance.options.removeOnDestroy||this._removeTooltipNode()):this._noLongerOpen(),this}},{key:"_findContainer",value:function(e,t){return"string"==typeof e?e=window.document.querySelector(e):!1===e&&(e=t.parentNode),e}},{key:"_append",value:function(e,t){t.appendChild(e)}},{key:"_setEventListeners",value:function(e,t,n){var o=this,r=[],i=[];t.forEach((function(e){switch(e){case"hover":r.push("mouseenter"),i.push("mouseleave"),o.options.hideOnTargetClick&&i.push("click");break;case"focus":r.push("focus"),i.push("blur"),o.options.hideOnTargetClick&&i.push("click");break;case"click":r.push("click"),i.push("click")}})),r.forEach((function(t){var r=function(t){!0!==o._isOpen&&(t.usedByTooltip=!0,o._scheduleShow(e,n.delay,n,t))};o._events.push({event:t,func:r}),e.addEventListener(t,r)})),i.forEach((function(t){var r=function(t){!0!==t.usedByTooltip&&o._scheduleHide(e,n.delay,n,t)};o._events.push({event:t,func:r}),e.addEventListener(t,r)}))}},{key:"_onDocumentTouch",value:function(e){this._enableDocumentTouch&&this._scheduleHide(this.reference,this.options.delay,this.options,e)}},{key:"_scheduleShow",value:function(e,t,n){var o=this,r=t&&t.show||t||0;clearTimeout(this._scheduleTimer),this._scheduleTimer=window.setTimeout((function(){return o._show(e,n)}),r)}},{key:"_scheduleHide",value:function(e,t,n,o){var r=this,i=t&&t.hide||t||0;clearTimeout(this._scheduleTimer),this._scheduleTimer=window.setTimeout((function(){if(!1!==r._isOpen&&r._tooltipNode.ownerDocument.body.contains(r._tooltipNode)){if("mouseleave"===o.type&&r._setTooltipNodeEvent(o,e,t,n))return;r._hide(e,n)}}),i)}}])&&ve(t.prototype,n),o&&ve(t,o),e}();"undefined"!=typeof document&&document.addEventListener("touchstart",(function(e){for(var t=0;t
',defaultArrowSelector:".tooltip-arrow, .tooltip__arrow",defaultInnerSelector:".tooltip-inner, .tooltip__inner",defaultDelay:0,defaultTrigger:"hover focus",defaultOffset:0,defaultContainer:"body",defaultBoundariesElement:void 0,defaultPopperOptions:{},defaultLoadingClass:"tooltip-loading",defaultLoadingContent:"...",autoHide:!0,defaultHideOnTargetClick:!0,disposeTimeout:5e3,popover:{defaultPlacement:"bottom",defaultClass:"vue-popover-theme",defaultBaseClass:"tooltip popover",defaultWrapperClass:"wrapper",defaultInnerClass:"tooltip-inner popover-inner",defaultArrowClass:"tooltip-arrow popover-arrow",defaultOpenClass:"open",defaultDelay:0,defaultTrigger:"click",defaultOffset:0,defaultContainer:"body",defaultBoundariesElement:void 0,defaultPopperOptions:{},defaultAutoHide:!0,defaultHandleResize:!0}};function so(e){var t={placement:void 0!==e.placement?e.placement:lo.options.defaultPlacement,delay:void 0!==e.delay?e.delay:lo.options.defaultDelay,html:void 0!==e.html?e.html:lo.options.defaultHtml,template:void 0!==e.template?e.template:lo.options.defaultTemplate,arrowSelector:void 0!==e.arrowSelector?e.arrowSelector:lo.options.defaultArrowSelector,innerSelector:void 0!==e.innerSelector?e.innerSelector:lo.options.defaultInnerSelector,trigger:void 0!==e.trigger?e.trigger:lo.options.defaultTrigger,offset:void 0!==e.offset?e.offset:lo.options.defaultOffset,container:void 0!==e.container?e.container:lo.options.defaultContainer,boundariesElement:void 0!==e.boundariesElement?e.boundariesElement:lo.options.defaultBoundariesElement,autoHide:void 0!==e.autoHide?e.autoHide:lo.options.autoHide,hideOnTargetClick:void 0!==e.hideOnTargetClick?e.hideOnTargetClick:lo.options.defaultHideOnTargetClick,loadingClass:void 0!==e.loadingClass?e.loadingClass:lo.options.defaultLoadingClass,loadingContent:void 0!==e.loadingContent?e.loadingContent:lo.options.defaultLoadingContent,popperOptions:ge({},void 0!==e.popperOptions?e.popperOptions:lo.options.defaultPopperOptions)};if(t.offset){var n=he(t.offset),o=t.offset;("number"===n||"string"===n&&-1===o.indexOf(","))&&(o="0, ".concat(o)),t.popperOptions.modifiers||(t.popperOptions.modifiers={}),t.popperOptions.modifiers.offset={offset:o}}return t.trigger&&-1!==t.trigger.indexOf("click")&&(t.hideOnTargetClick=!1),t}function ao(e,t){for(var n=e.placement,o=0;o2&&void 0!==arguments[2]?arguments[2]:{},o=uo(t),r=void 0!==t.classes?t.classes:lo.options.defaultClass,i=ge({title:o},so(ge({},t,{placement:ao(t,n)}))),s=e._tooltip=new no(e,i);s.setClasses(r),s._vueEl=e;var a=void 0!==t.targetClasses?t.targetClasses:lo.options.defaultTargetClass;return e._tooltipTargetClasses=a,we(e,a),s}(e,o,r),void 0!==o.show&&o.show!==e._tooltipOldShow&&(e._tooltipOldShow=o.show,o.show?n.show():n.hide())):po(e)}var lo={options:io,bind:co,update:co,unbind:function(e){po(e)}};function fo(e){e.addEventListener("click",vo),e.addEventListener("touchstart",mo,!!Ee&&{passive:!0})}function ho(e){e.removeEventListener("click",vo),e.removeEventListener("touchstart",mo),e.removeEventListener("touchend",bo),e.removeEventListener("touchcancel",go)}function vo(e){var t=e.currentTarget;e.closePopover=!t.$_vclosepopover_touch,e.closeAllPopover=t.$_closePopoverModifiers&&!!t.$_closePopoverModifiers.all}function mo(e){if(1===e.changedTouches.length){var t=e.currentTarget;t.$_vclosepopover_touch=!0;var n=e.changedTouches[0];t.$_vclosepopover_touchPoint=n,t.addEventListener("touchend",bo),t.addEventListener("touchcancel",go)}}function bo(e){var t=e.currentTarget;if(t.$_vclosepopover_touch=!1,1===e.changedTouches.length){var n=e.changedTouches[0],o=t.$_vclosepopover_touchPoint;e.closePopover=Math.abs(n.screenY-o.screenY)<20&&Math.abs(n.screenX-o.screenX)<20,e.closeAllPopover=t.$_closePopoverModifiers&&!!t.$_closePopoverModifiers.all}}function go(e){e.currentTarget.$_vclosepopover_touch=!1}var yo={bind:function(e,t){var n=t.value,o=t.modifiers;e.$_closePopoverModifiers=o,(void 0===n||n)&&fo(e)},update:function(e,t){var n=t.value,o=t.oldValue,r=t.modifiers;e.$_closePopoverModifiers=r,n!==o&&(void 0===n||n?fo(e):ho(e))},unbind:function(e){ho(e)}};function _o(e){var t=lo.options.popover[e];return void 0===t?lo.options[e]:t}var wo=!1;"undefined"!=typeof window&&"undefined"!=typeof navigator&&(wo=/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream);var Oo=[],Eo=function(){};"undefined"!=typeof window&&(Eo=window.Element);var jo={name:"VPopover",components:{ResizeObserver:le},props:{open:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},placement:{type:String,default:function(){return _o("defaultPlacement")}},delay:{type:[String,Number,Object],default:function(){return _o("defaultDelay")}},offset:{type:[String,Number],default:function(){return _o("defaultOffset")}},trigger:{type:String,default:function(){return _o("defaultTrigger")}},container:{type:[String,Object,Eo,Boolean],default:function(){return _o("defaultContainer")}},boundariesElement:{type:[String,Eo],default:function(){return _o("defaultBoundariesElement")}},popperOptions:{type:Object,default:function(){return _o("defaultPopperOptions")}},popoverClass:{type:[String,Array],default:function(){return _o("defaultClass")}},popoverBaseClass:{type:[String,Array],default:function(){return lo.options.popover.defaultBaseClass}},popoverInnerClass:{type:[String,Array],default:function(){return lo.options.popover.defaultInnerClass}},popoverWrapperClass:{type:[String,Array],default:function(){return lo.options.popover.defaultWrapperClass}},popoverArrowClass:{type:[String,Array],default:function(){return lo.options.popover.defaultArrowClass}},autoHide:{type:Boolean,default:function(){return lo.options.popover.defaultAutoHide}},handleResize:{type:Boolean,default:function(){return lo.options.popover.defaultHandleResize}},openGroup:{type:String,default:null},openClass:{type:[String,Array],default:function(){return lo.options.popover.defaultOpenClass}}},data:function(){return{isOpen:!1,id:Math.random().toString(36).substr(2,10)}},computed:{cssClass:function(){return me({},this.openClass,this.isOpen)},popoverId:function(){return"popover_".concat(this.id)}},watch:{open:function(e){e?this.show():this.hide()},disabled:function(e,t){e!==t&&(e?this.hide():this.open&&this.show())},container:function(e){if(this.isOpen&&this.popperInstance){var t=this.$refs.popover,n=this.$refs.trigger,o=this.$_findContainer(this.container,n);if(!o)return void console.warn("No container for popover",this);o.appendChild(t),this.popperInstance.scheduleUpdate()}},trigger:function(e){this.$_removeEventListeners(),this.$_addEventListeners()},placement:function(e){var t=this;this.$_updatePopper((function(){t.popperInstance.options.placement=e}))},offset:"$_restartPopper",boundariesElement:"$_restartPopper",popperOptions:{handler:"$_restartPopper",deep:!0}},created:function(){this.$_isDisposed=!1,this.$_mounted=!1,this.$_events=[],this.$_preventOpen=!1},mounted:function(){var e=this.$refs.popover;e.parentNode&&e.parentNode.removeChild(e),this.$_init(),this.open&&this.show()},deactivated:function(){this.hide()},beforeDestroy:function(){this.dispose()},methods:{show:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=t.event,o=(t.skipDelay,t.force),r=void 0!==o&&o;!r&&this.disabled||(this.$_scheduleShow(n),this.$emit("show")),this.$emit("update:open",!0),this.$_beingShowed=!0,requestAnimationFrame((function(){e.$_beingShowed=!1}))},hide:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.event;e.skipDelay;this.$_scheduleHide(t),this.$emit("hide"),this.$emit("update:open",!1)},dispose:function(){if(this.$_isDisposed=!0,this.$_removeEventListeners(),this.hide({skipDelay:!0}),this.popperInstance&&(this.popperInstance.destroy(),!this.popperInstance.options.removeOnDestroy)){var e=this.$refs.popover;e.parentNode&&e.parentNode.removeChild(e)}this.$_mounted=!1,this.popperInstance=null,this.isOpen=!1,this.$emit("dispose")},$_init:function(){-1===this.trigger.indexOf("manual")&&this.$_addEventListeners()},$_show:function(){var e=this,t=this.$refs.trigger,n=this.$refs.popover;if(clearTimeout(this.$_disposeTimer),!this.isOpen){if(this.popperInstance&&(this.isOpen=!0,this.popperInstance.enableEventListeners(),this.popperInstance.scheduleUpdate()),!this.$_mounted){var o=this.$_findContainer(this.container,t);if(!o)return void console.warn("No container for popover",this);o.appendChild(n),this.$_mounted=!0}if(!this.popperInstance){var r=ge({},this.popperOptions,{placement:this.placement});if(r.modifiers=ge({},r.modifiers,{arrow:ge({},r.modifiers&&r.modifiers.arrow,{element:this.$refs.arrow})}),this.offset){var i=this.$_getOffset();r.modifiers.offset=ge({},r.modifiers&&r.modifiers.offset,{offset:i})}this.boundariesElement&&(r.modifiers.preventOverflow=ge({},r.modifiers&&r.modifiers.preventOverflow,{boundariesElement:this.boundariesElement})),this.popperInstance=new ue(t,n,r),requestAnimationFrame((function(){if(e.hidden)return e.hidden=!1,void e.$_hide();!e.$_isDisposed&&e.popperInstance?(e.popperInstance.scheduleUpdate(),requestAnimationFrame((function(){if(e.hidden)return e.hidden=!1,void e.$_hide();e.$_isDisposed?e.dispose():e.isOpen=!0}))):e.dispose()}))}var s=this.openGroup;if(s)for(var a,u=0;u1&&void 0!==arguments[1]&&arguments[1];if(clearTimeout(this.$_scheduleTimer),e)this.$_show();else{var t=parseInt(this.delay&&this.delay.show||this.delay||0);this.$_scheduleTimer=setTimeout(this.$_show.bind(this),t)}},$_scheduleHide:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(clearTimeout(this.$_scheduleTimer),n)this.$_hide();else{var o=parseInt(this.delay&&this.delay.hide||this.delay||0);this.$_scheduleTimer=setTimeout((function(){if(e.isOpen){if(t&&"mouseleave"===t.type)if(e.$_setTooltipNodeEvent(t))return;e.$_hide()}}),o)}},$_setTooltipNodeEvent:function(e){var t=this,n=this.$refs.trigger,o=this.$refs.popover,r=e.relatedreference||e.toElement||e.relatedTarget;return!!o.contains(r)&&(o.addEventListener(e.type,(function r(i){var s=i.relatedreference||i.toElement||i.relatedTarget;o.removeEventListener(e.type,r),n.contains(s)||t.hide({event:i})})),!0)},$_removeEventListeners:function(){var e=this.$refs.trigger;this.$_events.forEach((function(t){var n=t.func,o=t.event;e.removeEventListener(o,n)})),this.$_events=[]},$_updatePopper:function(e){this.popperInstance&&(e(),this.isOpen&&this.popperInstance.scheduleUpdate())},$_restartPopper:function(){if(this.popperInstance){var e=this.isOpen;this.dispose(),this.$_isDisposed=!1,this.$_init(),e&&this.show({skipDelay:!0,force:!0})}},$_handleGlobalClose:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.$_beingShowed||(this.hide({event:e}),e.closePopover?this.$emit("close-directive"):this.$emit("auto-hide"),n&&(this.$_preventOpen=!0,setTimeout((function(){t.$_preventOpen=!1}),300)))},$_handleResize:function(){this.isOpen&&this.popperInstance&&(this.popperInstance.scheduleUpdate(),this.$emit("resize"))}}};function Co(e){for(var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=function(n){var o=Oo[n];if(o.$refs.popover){var r=o.$refs.popover.contains(e.target);requestAnimationFrame((function(){(e.closeAllPopover||e.closePopover&&r||o.autoHide&&!r)&&o.$_handleGlobalClose(e,t)}))}},o=0;o0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}(cr);var dr=function(e,t){return fr(ur(e,t,ir),e+"")};var hr=function(e,t,n){if(!et(n))return!1;var o=typeof t;return!!("number"==o?Pn(n)&&gn(t,n.length):"string"==o&&t in n)&&Te(n[t],e)};var vr=function(e){return dr((function(t,n){var o=-1,r=n.length,i=r>1?n[r-1]:void 0,s=r>2?n[2]:void 0;for(i=e.length>3&&"function"==typeof i?(r--,i):void 0,s&&hr(n[0],n[1],s)&&(i=r<3?void 0:i,r=1),t=Object(t);++o1&&void 0!==arguments[1]?arguments[1]:{};if(!e.installed){e.installed=!0;var o={};vr(o,io,n),mr.options=o,lo.options=o,t.directive("tooltip",lo),t.directive("close-popover",yo),t.component("v-popover",xo)}},get enabled(){return oo.enabled},set enabled(e){oo.enabled=e}},br=null;"undefined"!=typeof window?br=window.Vue:"undefined"!=typeof global&&(br=global.Vue),br&&br.use(mr);t.a=mr}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/10.ac58ef12.js b/docs/.vuepress/dist/assets/js/10.ac58ef12.js new file mode 100644 index 00000000..f093e323 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/10.ac58ef12.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[10],{467:function(t,e,a){t.exports=a.p+"assets/img/sproutseo-global-metadata.3c427a2a.png"},468:function(t,e,a){t.exports=a.p+"assets/img/sprout-seo-fieldtype.5f60b1ca.png"},469:function(t,e,a){t.exports=a.p+"assets/img/sprout-seo-metadata-spreadsheet.71c10566.png"},592:function(t,e,a){"use strict";a.r(e);var o=a(34),s=Object(o.a)({},(function(){var t=this,e=t.$createElement,o=t._self._c||e;return o("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[o("h1",[t._v("About Sprout SEO")]),t._v(" "),o("blockquote",[o("p",[t._v("Metadata is content too.")])]),t._v(" "),o("p",[t._v("Sprout SEO provides you an intuitive, seamless, and flexible way to manage your SEO strategy within Craft CMS. Content authors will enjoy a clear visual relationship between content and metadata where they can focus on content and maximize visibility.")]),t._v(" "),o("p",[t._v("Sprout SEO helps manage several types of metadata:")]),t._v(" "),o("ul",[o("li",[t._v("Search")]),t._v(" "),o("li",[t._v("Social Sharing")]),t._v(" "),o("li",[t._v("Structured Data")]),t._v(" "),o("li",[t._v("Sitemaps (See the "),o("RouterLink",{attrs:{to:"/sitemaps/"}},[t._v("Sprout Sitemaps")]),t._v(" docs for more info)")],1),t._v(" "),o("li",[t._v("Redirects (See the "),o("RouterLink",{attrs:{to:"/redirects/"}},[t._v("Sprout Redirects")]),t._v(" docs for more info)")],1)]),t._v(" "),o("p",[t._v("Refine your Metadata across three different levels of priority:")]),t._v(" "),o("ul",[o("li",[t._v("Global Metadata")]),t._v(" "),o("li",[t._v("Element Metadata")]),t._v(" "),o("li",[t._v("Template Metadata")])]),t._v(" "),o("p",[t._v("Often, the first time one of your visitors sees your content it is in search results or from a shared link. Make sure you're treating your metadata like a first class citizen alongside your content.")]),t._v(" "),o("p",[t._v("Edit your content confidently. Throughout your content management experience, Sprout SEO will indicate which fields power the metadata on your site and provide some additional information about the scope and priority of how that field will affect your metadata.")]),t._v(" "),o("h2",{attrs:{id:"global-metadata"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#global-metadata"}},[t._v("#")]),t._v(" Global Metadata")]),t._v(" "),o("p",[o("RouterLink",{attrs:{to:"/seo/global-metadata.html"}},[t._v("Global Metadata")]),t._v(" is managed from the Globals tab and filled out once when you setup Sprout SEO. Globals ensure you have metadata in place for your website identity and prepare Structured Data for your brand. Globals will help you communicate to the search engines information about your brand identity, how to get in touch, and general details so you always have something relevant about your business in search results and social sharing.")],1),t._v(" "),o("p",[o("img",{attrs:{src:a(467),alt:"Global Metadata"}})]),t._v(" "),o("h2",{attrs:{id:"element-metadata"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#element-metadata"}},[t._v("#")]),t._v(" Element Metadata")]),t._v(" "),o("p",[o("strong",[t._v("Element Metadata")]),t._v(" is managed with the powerful "),o("RouterLink",{attrs:{to:"/seo/element-metadata-field.html"}},[t._v("Metadata Field")]),t._v(". The Metadata field allows you to configure how your metadata is handled for every entry. If you want to have a tight integration with your existing content fields, you can reuse existing fields and the Metadata field will blend right into your existing content. If you want detailed control, you can enable overrides for each type of metadata and manage it all manually.")],1),t._v(" "),o("p",[o("img",{attrs:{src:a(468),alt:"Element Metadata Field"}})]),t._v(" "),o("h2",{attrs:{id:"_100-control"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#_100-control"}},[t._v("#")]),t._v(" 100% control")]),t._v(" "),o("div",{pre:!0},[o("p",[t._v("Sprout SEO is powered by a single tag to your templates. Place the optimize tag within the "),o("code",[t._v("")]),t._v(" tag of your HTML page and you're up and running:")])]),o("div",{staticClass:"language-twig extra-class"},[o("pre",{pre:!0,attrs:{class:"language-twig"}},[o("code",[o("span",{pre:!0,attrs:{class:"token twig language-twig"}},[o("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),o("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("sproutseo")]),t._v(" "),o("span",{pre:!0,attrs:{class:"token string"}},[o("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("optimize"),o("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),t._v(" "),o("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n")])])]),o("p",[t._v("While the simple setup above should handle most use cases, Sprout SEO is also extremely customizable and gives you fine-grained control over all of your metadata. Sprout SEO also supports:")]),t._v(" "),o("ul",[o("li",[t._v("An API to add support for additional types of "),o("RouterLink",{attrs:{to:"/sitemaps/custom-url-enabled-sections.html"}},[t._v("URL-enabled Elements")])],1),t._v(" "),o("li",[t._v("An API to add support for additional types of "),o("RouterLink",{attrs:{to:"/seo/custom-schema.html"}},[t._v("Structured Data schemas")])],1),t._v(" "),o("li",[t._v("Overriding metadata in your templates via "),o("RouterLink",{attrs:{to:"/seo/template-overrides.html"}},[t._v("Template Overrides")])],1),t._v(" "),o("li",[t._v("Overriding the default metadata templates using a "),o("RouterLink",{attrs:{to:"/seo/custom-metadata-variable.html"}},[t._v("Custom Metadata Variable")])],1)]),t._v(" "),o("h2",{attrs:{id:"metadata-spreadsheet"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#metadata-spreadsheet"}},[t._v("#")]),t._v(" Metadata Spreadsheet")]),t._v(" "),o("p",[t._v("If you want to have a detailed understanding of all of the types of metadata supported by Sprout SEO and how the fields relate to those different types of metadata an their priorities, we have prepared a spreadsheet with all the details:")]),t._v(" "),o("ul",[o("li",[o("a",{attrs:{href:"https://docs.google.com/spreadsheets/d/1OWvJVPkxdiqiemT2AMX76yPacLfi3aBuyRhgRy4_NIU/edit?usp=sharing",target:"_blank",rel:"noopener noreferrer"}},[t._v("Sprout SEO - Metadata Levels & Priorities"),o("OutboundLink")],1)])]),t._v(" "),o("p",[o("img",{attrs:{src:a(469),alt:"Metadata Levels and Priorities Spreadsheet"}})]),t._v(" "),o("div",{staticClass:"custom-block tip"},[o("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),o("p",[t._v("We use the term "),o("strong",[t._v("Metadata")]),t._v(" to refer to all types of Metadata together. More specifically we may refer to "),o("strong",[t._v("Meta Tags")]),t._v(", which are traditional metadata, and "),o("strong",[t._v("Social Sharing")]),t._v(", which relies on a series of more specific Meta Tags around two specifications (Open Graph and Twitter) but applies to many other mediums as well from Pinterest to Slack chat, etc. Sprout SEO also let's you manage "),o("strong",[t._v("Structured Data")]),t._v(" (Knowledge Graph, Rich Cards) which supports many different "),o("strong",[t._v("Schemas")]),t._v(" and is output as JSON-LD in your templates. Finally, "),o("strong",[t._v("Sitemap")]),t._v(" metadata, allows you to define a list of URLs that search engines should know about on your site.")])])])}),[],!1,null,null,null);e.default=s.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/100.95eea4e9.js b/docs/.vuepress/dist/assets/js/100.95eea4e9.js new file mode 100644 index 00000000..aa1f4df8 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/100.95eea4e9.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[100],{570:function(e,t,a){"use strict";a.r(t);var s=a(34),r=Object(s.a)({},(function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",[e._v("Spam Protection")]),e._v(" "),a("p",[e._v("Sprout Forms provides several methods to manage Spam. The Spam Protection settings give admins tools to configure how to redirect users, save spam entries in the database, generate spam reports, and configure and create custom Captchas to provide additional layers of validation.")]),e._v(" "),a("h3",{attrs:{id:"how-it-works"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#how-it-works"}},[e._v("#")]),e._v(" How it works")]),e._v(" "),a("ol",[a("li",[e._v("If field validation errors exist on a submitted entry, it will be redirected back to the form. Spam redirect rules are only processed if no field validation errors exist.")]),e._v(" "),a("li",[e._v("If no field validation errors exist and an enabled Captcha flags an entry as Spam, the Entry will be assigned the 'Spam' status.")]),e._v(" "),a("li",[e._v("If Saving Spam Entries to the database is enabled, it is saved to the database along with any Failed Captcha error messages.")]),e._v(" "),a("li",[e._v("The user will be redirected as normal to the thank you page or be sent back to the form based on the 'Spam Redirect Behavior' setting")])]),e._v(" "),a("h3",{attrs:{id:"spam-status"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#spam-status"}},[e._v("#")]),e._v(" Spam Status")]),e._v(" "),a("p",[e._v("When submitted Entries are marked as Spam, they will be saved to the database with the "),a("em",[e._v("Spam")]),e._v(" status. The Entries listing page does not display Spam Entries when viewing the All Entries and Form-specific Entries sources.")]),e._v(" "),a("p",[e._v("To view Spam Entries you can select the "),a("em",[e._v("Spam")]),e._v(" source in the sidebar or generate a "),a("em",[e._v("Spam Log Report")]),e._v(" on the Reports tab. Spam Entries will list the "),a("em",[e._v("Failed Captcha")]),e._v(" methods that caused an Entry to be marked as spam and the "),a("em",[e._v("Spam Log Report")]),e._v(" can give a broad overview of what types of Captchas are being triggered the most.")]),e._v(" "),a("p",[e._v("To update one or more Entries to be marked as "),a("em",[e._v("Spam")]),e._v(" or vice versa use the Element Actions:")]),e._v(" "),a("ul",[a("li",[a("strong",[e._v("Mark as Spam")]),e._v(" - Marks one or more entries with the Spam status")]),e._v(" "),a("li",[a("strong",[e._v("Mark as Default Status")]),e._v(" - Marks one or more entries with the Default Status defined in the Entry Statuses settings")])]),e._v(" "),a("h3",{attrs:{id:"captchas"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#captchas"}},[e._v("#")]),e._v(" Captchas")]),e._v(" "),a("p",[e._v("Captchas can be enabled in the global settings to establish criteria that form submitters are required to meet. Captchas are enabled by default for individual forms but there is a setting to enable or disable Captchas on any particular form. While several Captchas can be enabled on the Global level, Forms only have a single setting to toggle whether those Captchas are used on a given Form.")]),e._v(" "),a("div",{pre:!0},[a("p",[e._v("Failed Captcha error messages will be logged to the DB and appear in the sidebar when editing an individual Spam Entry. Captcha error messages are not treated as field validation errors and will not display by default in your templates. If you wish to display the Captcha errors in your templates you can create custom Form Templates retrieve them via the "),a("code",[e._v("formHandle.getCaptchaErrors()")]),e._v(" method.")])])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/101.a8855b0f.js b/docs/.vuepress/dist/assets/js/101.a8855b0f.js new file mode 100644 index 00000000..9f278e59 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/101.a8855b0f.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[101],{568:function(t,s,a){"use strict";a.r(s);var n=a(34),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",[t._v("Submission Limit")]),t._v(" "),a("p",[t._v("If you want to disable your form after a certain number of submissions, conditionally display your form based on the entry count.")]),t._v(" "),a("div",{staticClass:"language-twig extra-class"},[a("pre",{pre:!0,attrs:{class:"language-twig"}},[a("code",[a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" totalEntries "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" sprout"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("forms"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("entries"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("formHandle"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("contact"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("count"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Use a specific number or a dynamic value like globalSet.submissionLimit #}")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" totalEntries "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("49")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n Try again next time!\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("else")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" sprout"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("forms"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("displayForm"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("contact"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n")])])])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/102.2c659b0c.js b/docs/.vuepress/dist/assets/js/102.2c659b0c.js new file mode 100644 index 00000000..bb47acdb --- /dev/null +++ b/docs/.vuepress/dist/assets/js/102.2c659b0c.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[102],{569:function(t,s,a){"use strict";a.r(s);var e=a(34),n=Object(e.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",[t._v("Submitting a Form via AJAX")]),t._v(" "),a("p",[t._v("The Sprout Forms 'Submission Method' setting allows you to choose to submit your forms via AJAX. If the default behavior does not fit your needs, you can adjust the workflow by using Custom Form Templates to tweak the default settings, watch several Form Submission javascript events, or throw out the Sprout Forms JS entirely and replace it with your own.")]),t._v(" "),a("h2",{attrs:{id:"submit-event"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#submit-event"}},[t._v("#")]),t._v(" Submit Event")]),t._v(" "),a("div",{pre:!0},[a("p",[t._v("Unless you want to swap out theSprout Forms javascript entirely, we recommend that you don't add any Event Listeners to the "),a("code",[t._v("submit")]),t._v(" Event as they can cause conflicts and unexpected behavior that can be hard to troubleshoot. Instead, let Sprout Forms watch the "),a("code",[t._v("submit")]),t._v(" Event and hijack the form submission in one of the "),a("RouterLink",{pre:!0,attrs:{to:"/forms/javascript-events.html"}},[t._v("Javascript Events")]),t._v(" that we provide.")],1)]),a("div",{staticClass:"language-javascript extra-class"},[a("pre",{pre:!0,attrs:{class:"language-javascript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("BAD")]),t._v("\nform"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("addEventListener")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'submit'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("event")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// ...")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("BETTER")]),t._v("\nform"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("addEventListener")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'onSproutFormsSubmit'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("event")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// ...")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("h2",{attrs:{id:"adjust-submit-handler-settings"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#adjust-submit-handler-settings"}},[t._v("#")]),t._v(" Adjust Submit Handler settings")]),t._v(" "),a("p",[t._v("If necessary, the Submit Handler javascript can be customized using several settings. An example of how to override the default values is below, however, the example shows all the default values:")]),t._v(" "),a("div",{staticClass:"language-javascript extra-class"},[a("pre",{pre:!0,attrs:{class:"language-javascript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SproutFormsSubmitHandler")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'{{ id }}'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("successMessageClass")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'sproutforms-message-success'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("errorMessageClass")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'sproutforms-message-errors'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("messageElement")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'div'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("errorsContainerElement")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'ul.errors'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("errorsItemElement")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'li'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v('// Fields are targeted via their dynamic field handle: id="fields-{fieldHandle}-field"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("fieldWrapperIdPrefix")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'fields-'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("fieldWrapperIdSuffix")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'-field'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// The selector used to identify the wrapper for all fields")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token literal-property property"}},[t._v("fieldWrapperQuerySelector")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'.field'")]),t._v(" \n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])])}),[],!1,null,null,null);s.default=n.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/103.5a7e1c3a.js b/docs/.vuepress/dist/assets/js/103.5a7e1c3a.js new file mode 100644 index 00000000..3fb0a662 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/103.5a7e1c3a.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[103],{571:function(t,e,a){"use strict";a.r(e);var s=a(34),r=Object(s.a)({},(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",[t._v("Template Overrides")]),t._v(" "),a("p",[t._v("Sprout Forms gives you 100% control over your form output using the Template Overrides. If you wish to reuse your Template Overrides on multiple projects, you can create "),a("RouterLink",{attrs:{to:"/forms/custom-form-templates.html"}},[t._v("Custom Form Templates")]),t._v(".")],1),t._v(" "),a("h2",{attrs:{id:"customizing-templates"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#customizing-templates"}},[t._v("#")]),t._v(" Customizing Templates")]),t._v(" "),a("p",[t._v("Once you have enabled Template Overrides, you can override one or all of the following template files:")]),t._v(" "),a("div",{staticClass:"table"},[a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("File")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("Notes")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("form.html")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}})]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("tab.html")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}})]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("field.html")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Also requires tab.html and errors.html")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("errors.html")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}})]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("fields/*")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("See "),a("em",[t._v("Customizing Fields")]),t._v(" below.")])])])])]),t._v(" "),a("div",{pre:!0},[a("p",[t._v("Your edits could be as small as adding a custom id to the "),a("code",[t._v("
")]),t._v(" tag or reworking the entire HTML structure to work nicely with Foundation, Bootstrap, or your favorite front-end framework.")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("Enabling template overrides gives you full control over the underlying template code. If something stops working as expected, test your form using the default Form Templates to help determine if you may have unintentionally bumped something.")])]),t._v(" "),a("h3",{attrs:{id:"customizing-fields"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#customizing-fields"}},[t._v("#")]),t._v(" Customizing Fields")]),t._v(" "),a("p",[t._v("All input fields can be overridden by placing an override template in the "),a("em",[t._v("fields")]),t._v(" folder:")]),t._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("singleline/input.html\nparagraph/input.html\nphone/input.html\n")])])]),a("div",{pre:!0},[a("p",[t._v("A field's folder name is the lowercase version of its field name without spaces and can be retrieved dynamically by calling "),a("code",[t._v("field.getFieldInputFolder()")]),t._v(".")])]),a("h3",{attrs:{id:"customizing-email"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#customizing-email"}},[t._v("#")]),t._v(" Customizing Email")]),t._v(" "),a("p",[t._v("For customizing email notifications, see "),a("RouterLink",{attrs:{to:"/email/template-overrides.html"}},[t._v("Email Templates")]),t._v(".")],1),t._v(" "),a("h3",{attrs:{id:"getting-started"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#getting-started"}},[t._v("#")]),t._v(" Getting Started")]),t._v(" "),a("p",[t._v("To get started, copy all of the default Sprout Forms templates to your Custom Template Overrides folder. You can find the templates in Sprout Forms here:")]),t._v(" "),a("div",{staticClass:"language-html extra-class"},[a("pre",{pre:!0,attrs:{class:"language-html"}},[a("code",[t._v("vendor/barrelstrength/sprout/templates/forms\n")])])]),a("h2",{attrs:{id:"settings"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#settings"}},[t._v("#")]),t._v(" Settings")]),t._v(" "),a("h3",{attrs:{id:"global-settings"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#global-settings"}},[t._v("#")]),t._v(" Global settings")]),t._v(" "),a("p",[t._v("Setup a Global Form Template override in the Sprout Forms settings and add the path to the template folder where you wish to place your overrides:")]),t._v(" "),a("div",{staticClass:"language-html extra-class"},[a("pre",{pre:!0,attrs:{class:"language-html"}},[a("code",[t._v("Sprout Forms → Settings → Default Form Templates → Add Custom\n")])])]),a("p",[t._v("If you wish to customize Form Templates on a per-form basis, enable the setting:")]),t._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("Enable custom form templates on a per-form basis\n")])])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("Setting the Custom Template Folder value to "),a("code",[t._v("_forms")]),t._v(" would allow you to place your override templates in the "),a("code",[t._v("craft/templates/_forms")]),t._v(" folder.")])]),t._v(" "),a("h3",{attrs:{id:"per-form-settings"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#per-form-settings"}},[t._v("#")]),t._v(" Per-form settings")]),t._v(" "),a("p",[t._v("When you "),a("em",[t._v("Enable custom form templates on a per-form basis")]),t._v(", you'll have to add the override folder in your form settings.")]),t._v(" "),a("p",[t._v("When creating a new form, in the Form Settings sidebar, select the Form Template or add the Form Template folder you wish to use for your overrides.")])])}),[],!1,null,null,null);e.default=r.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/104.dd530c59.js b/docs/.vuepress/dist/assets/js/104.dd530c59.js new file mode 100644 index 00000000..cb061465 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/104.dd530c59.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[104],{572:function(t,a,e){"use strict";e.r(a);var s=e(34),n=Object(s.a)({},(function(){var t=this,a=t.$createElement,e=t._self._c||a;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",[t._v("Thank You Page")]),t._v(" "),e("p",[t._v("The Success Message Form setting can be used to customize a Thank You message when using the default Form Templates. If you prefer to send the user to a separate Thank You page you may need to take additional steps to display your success message.")]),t._v(" "),e("h2",{attrs:{id:"using-a-query-string-to-display-a-custom-thank-you-message"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#using-a-query-string-to-display-a-custom-thank-you-message"}},[t._v("#")]),t._v(" Using a query string to display a custom thank you message")]),t._v(" "),e("div",{pre:!0},[e("p",[t._v("Within your form, add a hidden field with the name "),e("code",[t._v("redirect")]),t._v(". This line of code will redirect your form on a successful submission to any template you wish:")])]),e("div",{staticClass:"language-twig extra-class"},[e("pre",{pre:!0,attrs:{class:"language-twig"}},[e("code",[e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" redirectInput"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token string"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("contact?message=thankyou"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n")])])]),e("div",{pre:!0},[e("p",[t._v("You can redirect a user to the same template as that you form or a completely different template. You can also pass that template a query string which you can use to conditionally display content in your thank you page template. In the example above, we are passing the query string "),e("code",[t._v("?message=thankyou")]),t._v(" and we can use that query string in a conditional statement like so:")])]),e("div",{staticClass:"language-twig extra-class"},[e("pre",{pre:!0,attrs:{class:"language-twig"}},[e("code",[e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" craft"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("request"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getParam"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token string"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("message"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("thankyou"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v(" ... "),e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n")])])]),e("p",[t._v("The query string method is the easiest way to setup a thank you page.")]),t._v(" "),e("h2",{attrs:{id:"using-a-url-segment-to-display-a-custom-thank-you-message"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#using-a-url-segment-to-display-a-custom-thank-you-message"}},[t._v("#")]),t._v(" Using a url segment to display a custom thank you message")]),t._v(" "),e("p",[t._v("If you don't want to use a query string for some reason, you can also add a segment to your redirect URL and setup a route.")]),t._v(" "),e("p",[t._v("To use this method you will need to create a redirect value that just uses URL segments:")]),t._v(" "),e("div",{staticClass:"language-html extra-class"},[e("pre",{pre:!0,attrs:{class:"language-html"}},[e("code",[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("redirect"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("contact/thankyou"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n")])])]),e("p",[t._v("By default, when your form redirects, that page won't load properly because Craft doesn't know where to route that URL to yet.")]),t._v(" "),e("div",{pre:!0},[e("p",[t._v("You can setup a route in the Control Panel "),e("code",[t._v("Settings->Routes->Create New Route")]),t._v(" or in the "),e("code",[t._v("craft/config/routes")]),t._v(" template.")])]),e("div",{pre:!0},[e("p",[t._v("For our example, if we setup our route in the control panel we would use the following settings to tell Craft to display the "),e("code",[t._v("contact")]),t._v(" template when a user is redirected to "),e("code",[t._v("contact/thankyou")]),t._v(".")])]),e("p",[t._v("URI"),e("br"),t._v(" "),e("strong",[t._v("contact/thankyou")])]),t._v(" "),e("p",[t._v("Template"),e("br"),t._v(" "),e("strong",[t._v("contact")])]),t._v(" "),e("div",{pre:!0},[e("p",[t._v("Once we've routed the user to the correct template, we can display our thank you message using a conditional statement that tests for our "),e("code",[t._v("thankyou")]),t._v(" slug in the second segment of the URL:")])]),e("div",{staticClass:"language-twig extra-class"},[e("pre",{pre:!0,attrs:{class:"language-twig"}},[e("code",[e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" craft"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("request"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getSegment"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("thankyou"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v(" ... "),e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n")])])])])}),[],!1,null,null,null);a.default=n.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/105.1c8ddde5.js b/docs/.vuepress/dist/assets/js/105.1c8ddde5.js new file mode 100644 index 00000000..754268cd --- /dev/null +++ b/docs/.vuepress/dist/assets/js/105.1c8ddde5.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[105],{574:function(t,a,s){"use strict";s.r(a);var e=s(34),n=Object(e.a)({},(function(){var t=this,a=t.$createElement,s=t._self._c||a;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",[t._v("Translating Error Messages")]),t._v(" "),s("p",[t._v("If you need to translate your Form error messages, currently, you will need to use "),s("a",{attrs:{href:"https://craftcms.com/support/static-translations",target:"_blank",rel:"noopener noreferrer"}},[t._v("static translations"),s("OutboundLink")],1),t._v(".")]),t._v(" "),s("p",[t._v("Let's look at a brief overview of this method in the context of the Form plugin.")]),t._v(" "),s("ol",[s("li",[t._v("Wrap your error messages in the translate filter")])]),t._v(" "),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" errors "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("-%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("ul")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("errors"),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 twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("for")]),t._v(" error "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("in")]),t._v(" errors "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("li")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" error"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("site"),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 delimiter punctuation"}},[t._v("}}")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endfor")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("-%}")])]),t._v("\n")])])]),s("div",{pre:!0},[s("ol",{pre:!0,attrs:{start:"2"}},[s("li",[t._v("Add a "),s("code",[t._v("translations")]),t._v(" folder to your project")])])]),s("div",{staticClass:"language-text extra-class"},[s("div",{staticClass:"highlight-lines"},[s("br"),s("br"),s("div",{staticClass:"highlighted"},[t._v(" ")]),s("br"),s("br"),s("br")]),s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[t._v("config \nstorage\ntranslations\nvendor\nweb\n")])])]),s("ol",{attrs:{start:"3"}},[s("li",[t._v("Add a locale-specific translation file to your project")])]),t._v(" "),s("div",{pre:!0},[s("p",[t._v("Add a file to the "),s("code",[t._v("craft/translations")]),t._v(" folder for the locale you wish to provide translations.")])]),s("div",{staticClass:"language-html extra-class"},[s("pre",{pre:!0,attrs:{class:"language-html"}},[s("code",[t._v("craft/translations/en_gb.php\n")])])]),s("p",[t._v("In that file, add add an array of the translations you wish to include:")]),t._v(" "),s("div",{staticClass:"language-php extra-class"},[s("pre",{pre:!0,attrs:{class:"language-php"}},[s("code",[s("span",{pre:!0,attrs:{class:"token php language-php"}},[s("span",{pre:!0,attrs:{class:"token delimiter important"}},[t._v("")]),t._v(" \n "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'Whatever you want to translate the original message to'")]),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("p",[t._v("The first item in the array is the default message that you want to translate. The second item in the array is your translation. You can translate from one language into another, or even within the same language if you want to change the default error messaging.")]),t._v(" "),s("p",[t._v("If you need to translate multiple phrases, you can add multiple phrases to your translation file and separate them by commas:")]),t._v(" "),s("div",{staticClass:"language-php extra-class"},[s("pre",{pre:!0,attrs:{class:"language-php"}},[s("code",[s("span",{pre:!0,attrs:{class:"token php language-php"}},[s("span",{pre:!0,attrs:{class:"token delimiter important"}},[t._v("")]),t._v(" \n "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'Whatever you want to translate the original message to'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'Phone Field cannot be blank'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" \n "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'A new error message'")]),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")])])])])])}),[],!1,null,null,null);a.default=n.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/106.4a3f1891.js b/docs/.vuepress/dist/assets/js/106.4a3f1891.js new file mode 100644 index 00000000..4a211ec3 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/106.4a3f1891.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[106],{575:function(t,e,a){"use strict";a.r(e);var s=a(34),n=Object(s.a)({},(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",[t._v("Translating Forms")]),t._v(" "),a("p",[t._v("There are a few approaches to translating forms. None are ideal.")]),t._v(" "),a("h2",{attrs:{id:"translating-in-the-cp"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#translating-in-the-cp"}},[t._v("#")]),t._v(" Translating in the CP")]),t._v(" "),a("div",{staticClass:"split"},[a("div",{staticClass:"left"},[a("p",[t._v("You can add a translation file to your project using "),a("a",{attrs:{href:"https://craftcms.com/docs/4.x/sites.html#static-message-translations",target:"_blank",rel:"noopener noreferrer"}},[t._v("Static Translations"),a("OutboundLink")],1),t._v(" and target Sprout Forms using the translation categories that it uses. Sprout Forms relies on multiple modules so there are multiple translation categories you will need to translate if you want full a complete translation.")]),t._v(" "),a("p",[t._v("We include English to English translation files in each module, so you can copy that translation file as a starting point. New releases may add or remove some translations so complete translation over time may require some upkeep. We don't change a lot the language in the CP too often, but now and then we do and it's not something we broadcast when we do.")]),t._v(" "),a("p",[t._v('You can see this translation file in some of the other packages Sprout Forms uses. While not every one of those translations will be used in Sprout Forms, as you can see, Sprout Forms relies on several different modules to provide all it\'s functionality so translating "Sprout Forms" also includes translating a good part of Sprout Fields, Sprout Reports, and Sprout Email:')]),t._v(" "),a("ul",[a("li",[a("a",{attrs:{href:"https://github.com/barrelstrength/craft-sprout-forms/blob/v3.6.6/src/translations/en/sprout-forms.php",target:"_blank",rel:"noopener noreferrer"}},[t._v("Sprout Forms"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"https://github.com/barrelstrength/craft-sprout-base-fields/blob/v1/src/translations/en/sprout-base-fields.php",target:"_blank",rel:"noopener noreferrer"}},[t._v("Sprout Base Fields"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"https://github.com/barrelstrength/craft-sprout-base-email/blob/v1/src/translations/en/sprout-base-email.php",target:"_blank",rel:"noopener noreferrer"}},[t._v("Sprout Base Email"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"https://github.com/barrelstrength/craft-sprout-base-reports/blob/v1/src/translations/en/sprout-base-reports.php%E2%80%8B",target:"_blank",rel:"noopener noreferrer"}},[t._v("Sprout Base Reports"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"https://github.com/barrelstrength/craft-sprout-base/blob/v5/src/translations/en/sprout-base-settings.php%E2%80%8B",target:"_blank",rel:"noopener noreferrer"}},[t._v("Sprout Base"),a("OutboundLink")],1)])])]),t._v(" "),a("div",{staticClass:"right"})]),t._v(" "),a("h2",{attrs:{id:"translating-form-content"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#translating-form-content"}},[t._v("#")]),t._v(" Translating form content")]),t._v(" "),a("p",[t._v("Multiple languages are a tricky topic in Forms. Form Elements behave in the opposite manner than Entry Elements. With Entry Elements you setup a Field and you want the content of that field to be translatable into multiple languages by a content editor. In Forms, when you set up a field you want the Label and Instructional text to be translatable and the content is just submitted once by the user in whatever language you present them.")]),t._v(" "),a("p",[t._v("It gets trickier when we begin to consider if you want the same layout for your translated forms (one field may make sense in one language but not in another). Solving this problem within the same framework as Craft Elements would require that we make Form Labels and Instructional Text Elements and some form fields (like Dropdowns) would require additional Custom Fields to translate the list of items in their settings. As you can likely see, that direction gets messy quickly.")]),t._v(" "),a("p",[t._v("We've looked into the options around this the following options seem to be the available approaches:")]),t._v(" "),a("ol",[a("li",[a("strong",[t._v("Create a Form for each language.")]),t._v(" This is probably the best option right now. You can duplicate a form once you create it using the Save->Save as New Form option. You can name your Form Handles with segments that match your Site Handles or Language and dynamically load a Form for the site being loaded:")])]),t._v(" "),a("div",{staticClass:"language-twig extra-class"},[a("pre",{pre:!0,attrs:{class:"language-twig"}},[a("code",[a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" formHandle "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("contactform-"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("~")]),t._v(" currentSite"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("handle "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" sprout"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("forms"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("displayForm"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("formHandle"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n")])])]),a("ol",{attrs:{start:"2"}},[a("li",[a("p",[t._v("You can create one form and "),a("strong",[t._v("manage the translations using static translations")]),t._v(" in a file (https://craftcms.com/docs/4.x/sites.html#static-message-translations). This is possible but probably not ideal because you would have to update a translation file each time you made a change to your form in the CP.")])]),t._v(" "),a("li",[a("p",[t._v("At some point, we could potentially create a "),a("strong",[t._v("database-driven translation")]),t._v(" file that allows you to add translations in the Control Panel. If we do this, you'd still have to manage translations in a separate part of the CP than where you build your form so while it's a different method, you will still be editing data in two places to accomplish the goal.")])])]),t._v(" "),a("p",[t._v("While #3 isn't an option right now, we mention it as we feel it makes #1 a more palatable option and in our discussions with users and researching this topic and how other form plugins handle multiple languages, it seems #1 is the most used option.")])])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/107.79f3e425.js b/docs/.vuepress/dist/assets/js/107.79f3e425.js new file mode 100644 index 00000000..9040b315 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/107.79f3e425.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[107],{573:function(t,e,s){"use strict";s.r(e);var o=s(34),i=Object(o.a)({},(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",[t._v("About Sprout Lists")]),t._v(" "),s("p",[t._v("Sprout Lists allows you create lists. Lists can be useful so users can:")]),t._v(" "),s("ul",[s("li",[t._v("Subscribe and unsubscribe to an Email Newsletter")]),t._v(" "),s("li",[t._v("Subscribe and unsubscribe to be notified about updates")]),t._v(" "),s("li",[t._v("Follow or un-follow someone to find something more easily")]),t._v(" "),s("li",[t._v("Like or unlike an item to express approval")]),t._v(" "),s("li",[t._v("Up-vote or down-vote something to express interest")])]),t._v(" "),s("p",[t._v("Sprout Lists provides two additional Elements in Craft: "),s("strong",[t._v("Lists")]),t._v(" and "),s("strong",[t._v("Subscribers")]),t._v(".")]),t._v(" "),s("p",[t._v("Create custom Lists and standalone subscribers or designate any existing Element as a List and treat Users as Subscribers. You have the flexibility to create advanced relationships that you can leverage in your user interface, reporting, and email marketing efforts.")]),t._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),s("p",[t._v("We will use the term "),s("strong",[t._v("Subscribe")]),t._v(" throughout the docs, but you can substitute in the terms "),s("strong",[t._v("Follow")]),t._v(" or "),s("strong",[t._v("Like")]),t._v(" or "),s("strong",[t._v("Vote")]),t._v(" as you prefer.")])])])}),[],!1,null,null,null);e.default=i.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/108.f01686a9.js b/docs/.vuepress/dist/assets/js/108.f01686a9.js new file mode 100644 index 00000000..5498b8ea --- /dev/null +++ b/docs/.vuepress/dist/assets/js/108.f01686a9.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[108],{577:function(t,a,s){"use strict";s.r(a);var n=s(34),e=Object(n.a)({},(function(){var t=this,a=t.$createElement,s=t._self._c||a;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",[t._v("Craft 3")]),t._v(" "),s("p",[t._v("Sprout Lists installation and update instructions for Craft 3.")]),t._v(" "),s("h2",{attrs:{id:"requirements"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),s("ul",[s("li",[t._v("Craft CMS 3.0.0 or a more recent version of Craft")])]),t._v(" "),s("h2",{attrs:{id:"installation-via-plugin-store"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#installation-via-plugin-store"}},[t._v("#")]),t._v(" Installation via Plugin Store")]),t._v(" "),s("ol",[s("li",[t._v("Find the plugin in the Plugin Store in your Craft Control Panel")]),t._v(" "),s("li",[t._v("Go to "),s("em",[t._v("Settings → Plugins")]),t._v(" and select “Install”")])]),t._v(" "),s("h2",{attrs:{id:"installation-via-composer"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#installation-via-composer"}},[t._v("#")]),t._v(" Installation via Composer")]),t._v(" "),s("div",{pre:!0},[s("ol",[s("li",[t._v("Open your terminal and go to your Craft project:"),s("br"),t._v(" "),s("code",[t._v("cd /path/to/project")])]),t._v(" "),s("li",[t._v("Then tell Composer to load the plugin:"),s("br"),t._v(" "),s("code",[t._v("composer require barrelstrength/sprout-lists")])]),t._v(" "),s("li",[t._v("In the Control Panel, go to "),s("em",[t._v("Settings → Plugins")]),t._v(" and select “Install”")])])]),s("h2",{attrs:{id:"upgrading"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#upgrading"}},[t._v("#")]),t._v(" Upgrading")]),t._v(" "),s("h3",{attrs:{id:"upgrading-to-v2-x"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#upgrading-to-v2-x"}},[t._v("#")]),t._v(" Upgrading to v2.x")]),t._v(" "),s("p",[t._v("Sprout Lists v2 includes several updates that will require template changes from earlier versions. These updates include a complete refactoring of how Lists are submitted and managed in templates. Please see the updated Core Concept pages for complete examples.")]),t._v(" "),s("p",[t._v("Some general updates include:")]),t._v(" "),s("div",{pre:!0},[s("ul",[s("li",[t._v("Adding and removing Subscribers now require the Users "),s("code",[t._v("email")]),t._v(" to identify the Subscriber")]),t._v(" "),s("li",[t._v("A Lists Element ID and Handle now must be unique")]),t._v(" "),s("li",[t._v("Previous template tags have been removed in favor of the general "),s("code",[t._v("sprout.lists.lists")]),t._v(" and "),s("code",[t._v("sprout.lists.subscribers")]),t._v(" tags and improved handling of related queries on List and Subscriber models.")])])]),s("h3",{attrs:{id:"checking-if-a-subscriber-is-on-a-list"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#checking-if-a-subscriber-is-on-a-list"}},[t._v("#")]),t._v(" Checking if a Subscriber is on a list")]),t._v(" "),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[t._v("New:\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Retrieve a list #}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" list "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" sprout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("lists"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("lists\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("id"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("123")]),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("one"),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 delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Define the subscription you wish to add or remove from a list #}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" subscription "),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 email"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" currentUser"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("email\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Check if the subscription already exists on a list #}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" list"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("isSubscribed"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("subscription"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n...\n\nOld:\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" params "),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 listHandle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("listHandle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n userId"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" currentUser"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("id"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n elementId"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" entry"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("id"),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(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" sprout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("lists"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("isSubscribed"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("params"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n...\n")])])]),s("h4",[t._v("Adding a Subscriber to a List")]),t._v(" "),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[t._v("New:\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("form")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("method")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),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(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("accept-charset")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("utf-8"),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 twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" csrfInput"),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 delimiter punctuation"}},[t._v("}}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("action"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sprout-lists/lists/add"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("list[type]"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("barrelstrength\\sproutbaselists\\listtypes\\MailingList"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("list[id]"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("123"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),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(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("subscription[email]"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" currentUser"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("email "),s("span",{pre:!0,attrs:{class:"token delimiter 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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("submit"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Add to List"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\nOld:\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("form")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("method")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),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(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("accept-charset")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("utf-8"),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 twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" csrfInput"),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 delimiter punctuation"}},[t._v("}}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("action"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sprout-lists/lists/subscribe"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("listHandle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("listHandle"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("elementId"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" entry"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("id "),s("span",{pre:!0,attrs:{class:"token delimiter 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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("userId"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" currentUser"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("id "),s("span",{pre:!0,attrs:{class:"token delimiter 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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("submit"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Add to List"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),s("h4",[t._v("Removing a Subscriber from a List")]),t._v(" "),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[t._v("New:\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("form")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("method")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),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(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("accept-charset")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("utf-8"),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 twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" csrfInput"),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 delimiter punctuation"}},[t._v("}}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("action"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sprout-lists/lists/remove"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("list[type]"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("barrelstrength\\sproutbaselists\\listtypes\\MailingList"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("list[id]"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("123"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),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(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("subscription[email]"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" currentUser"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("email "),s("span",{pre:!0,attrs:{class:"token delimiter 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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("submit"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Remove from List"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\nOld:\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("form")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("method")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),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(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("accept-charset")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("utf-8"),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 twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" csrfInput"),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 delimiter punctuation"}},[t._v("}}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("action"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sprout-lists/lists/unsubscribe"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("listHandle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("listHandle"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("elementId"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" entry"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("id "),s("span",{pre:!0,attrs:{class:"token delimiter 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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("userId"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" currentUser"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("id "),s("span",{pre:!0,attrs:{class:"token delimiter 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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("submit"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Remove from List"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),s("h3",{attrs:{id:"displaying-total-subscribers-on-a-list"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#displaying-total-subscribers-on-a-list"}},[t._v("#")]),t._v(" Displaying Total Subscribers on a List")]),t._v(" "),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[t._v("New:\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" list "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" sprout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("lists"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("lists"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("id"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("123")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("one"),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 delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" list"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("count "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n\nOld:\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" totalSubscribers "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" sprout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("lists"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("subscriberCount"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n listHandle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("listHandle"),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(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" totalSubscribers "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n")])])]),s("h2",{attrs:{id:"upgrading-to-lists-v4-44-444-unreleased"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#upgrading-to-lists-v4-44-444-unreleased"}},[t._v("#")]),t._v(" Upgrading to Lists v4.44.444 - UNRELEASED")]),t._v(" "),s("div",{pre:!0},[s("p",[t._v("Sprout Lists 4 is a major release the includes an update to the underlying architecture. The Sprout Lists user experience will remain familiar but several conventions have changed. Most notably, the core codebase for "),s("code",[t._v("barrelstrength/sprout-lists")]),t._v(" has been moved to the "),s("code",[t._v("barrelstrength/sprout-base")]),t._v(" package so any custom code, translations, or direct links to the Sprout Lists Control Panel will need to be updated to target the new naming conventions. Plugin-specific Control Panel settings have also moved to the Craft settings area.")])]),s("div",{pre:!0},[s("div",{pre:!0,attrs:{class:"table"}},[s("table",[s("thead",[s("tr",[s("th",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Feature")]),t._v(" "),s("th",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Old Name")]),t._v(" "),s("th",{pre:!0,attrs:{style:"text-align:left"}},[t._v("New Name")])])]),t._v(" "),s("tbody",[s("tr",[s("td",{pre:!0,attrs:{style:"text-align:left"}},[t._v("CP URL")]),t._v(" "),s("td",{pre:!0,attrs:{style:"text-align:left"}},[s("code",[t._v("admin/sprout-lists")])]),t._v(" "),s("td",{pre:!0,attrs:{style:"text-align:left"}},[s("code",[t._v("admin/sprout/lists")])])]),t._v(" "),s("tr",[s("td",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Template Variables")]),t._v(" "),s("td",{pre:!0,attrs:{style:"text-align:left"}},[s("code",[t._v("craft.sproutLists")])]),t._v(" "),s("td",{pre:!0,attrs:{style:"text-align:left"}},[s("code",[t._v("sprout.lists")])])]),t._v(" "),s("tr",[s("td",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Translation Category")]),t._v(" "),s("td",{pre:!0,attrs:{style:"text-align:left"}},[s("code",[t._v("sprout-lists")])]),t._v(" "),s("td",{pre:!0,attrs:{style:"text-align:left"}},[s("code",[t._v("sprout")])])]),t._v(" "),s("tr",[s("td",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Controller Namespace")]),t._v(" "),s("td",{pre:!0,attrs:{style:"text-align:left"}},[s("code",[t._v("barrelstrength/sproutlists/controllers")])]),t._v(" "),s("td",{pre:!0,attrs:{style:"text-align:left"}},[s("code",[t._v("barrelstrength/sproutbase/app/lists/controllers")])])]),t._v(" "),s("tr",[s("td",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Service Namespace")]),t._v(" "),s("td",{pre:!0,attrs:{style:"text-align:left"}},[s("code",[t._v("barrelstrength/sproutlists/services")])]),t._v(" "),s("td",{pre:!0,attrs:{style:"text-align:left"}},[s("code",[t._v("barrelstrength/sproutbase/app/lists/services")])])])])])])])])}),[],!1,null,null,null);a.default=e.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/109.13b785d2.js b/docs/.vuepress/dist/assets/js/109.13b785d2.js new file mode 100644 index 00000000..fe4a875b --- /dev/null +++ b/docs/.vuepress/dist/assets/js/109.13b785d2.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[109],{579:function(t,s,e){"use strict";e.r(s);var i=e(34),o=Object(i.a)({},(function(){var t=this,s=t.$createElement,e=t._self._c||s;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",[t._v("List Types")]),t._v(" "),e("p",[t._v("Sprout Lists provides a default Subscriber List Type. Developers can add additional List Types to enable users and admins to subscribe and unsubscribe from third-party lists.")]),t._v(" "),e("p",[t._v("A Custom List Type allows you to integrate with a third party API to:")]),t._v(" "),e("ul",[e("li",[t._v("Enable a user to subscribe and unsubscribe to a list on the front-end of your website")]),t._v(" "),e("li",[t._v("Enable an admin to subscribe and unsubscribe a user to a list in the Craft Control Panel (coming soon)")]),t._v(" "),e("li",[t._v("Enable users to subscribe to a list when submitting a form using Sprout Forms (coming soon)")])]),t._v(" "),e("h2",{attrs:{id:"creating-a-custom-list-type"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#creating-a-custom-list-type"}},[t._v("#")]),t._v(" Creating a Custom List Type")]),t._v(" "),e("p",[t._v("You can create a Custom List Type by:")]),t._v(" "),e("div",{pre:!0},[e("ol",[e("li",[t._v("Extending "),e("code",[t._v("ListType")]),t._v(" with your Custom List Type")]),t._v(" "),e("li",[t._v("Register your Custom List Type using the "),e("code",[t._v("registerSproutListsListTypes()")]),t._v(" hook")])])]),e("p",[t._v("Sprout Lists uses its own Custom List Type API. See the Subscriber List Type as an example in Sprout Lists (sproutlists/integrations/sproutlists/SproutLists_SubscriberListType.php).")])])}),[],!1,null,null,null);s.default=o.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/11.3f650265.js b/docs/.vuepress/dist/assets/js/11.3f650265.js new file mode 100644 index 00000000..3e399fe5 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/11.3f650265.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[11],{374:function(t,s,c){},377:function(t,s,c){"use strict";c(374)},411:function(t,s,c){"use strict";c.r(s);var e=c(2),a=c(413);e.a.use(a.a),a.a.options.autoHide=!1;var i={},n=(c(377),c(34)),o=Object(n.a)(i,(function(){var t=this.$createElement,s=this._self._c||t;return s("div",{staticClass:"info-hud"},[s("v-popover",{attrs:{placement:"right"}},[s("svg",{staticClass:"info-circle",attrs:{viewBox:"0 0 512 512"}},[s("path",{attrs:{d:"M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z"}})]),this._v(" "),s("template",{slot:"popover"},[this._t("default")],2)],2)],1)}),[],!1,null,null,null);s.default=o.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/110.17e4dc0e.js b/docs/.vuepress/dist/assets/js/110.17e4dc0e.js new file mode 100644 index 00000000..eaf125d2 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/110.17e4dc0e.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[110],{580:function(t,a,s){"use strict";s.r(a);var n=s(34),e=Object(n.a)({},(function(){var t=this,a=t.$createElement,s=t._self._c||a;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",[t._v("Lists")]),t._v(" "),s("p",[t._v("A List can be associated with any Element and contain one or more Subscriptions. The default List Type to use in Sprout Lists is the Mailing List.")]),t._v(" "),s("h2",{attrs:{id:"mailing-list"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#mailing-list"}},[t._v("#")]),t._v(" Mailing List")]),t._v(" "),s("p",[t._v("Mailing Lists can have "),s("RouterLink",{attrs:{to:"/lists/subscribers.html"}},[t._v("Subscribers")]),t._v(". The relationship between a List and a Subscriber is a "),s("RouterLink",{attrs:{to:"/lists/subscriptions.html"}},[t._v("Subscription")]),t._v(". Mailing Lists can be created from the Control Panel.")],1),t._v(" "),s("h3",{attrs:{id:"using-elements-as-mailing-lists"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#using-elements-as-mailing-lists"}},[t._v("#")]),t._v(" Using Elements as Mailing Lists")]),t._v(" "),s("p",[t._v("Mailing Lists are flexible and powerful as they allow you to treat any Element Type as a List (Entries, Categories, Users, Products, etc.). Here are a few examples:")]),t._v(" "),s("div",{staticClass:"table"},[s("table",[s("thead",[s("tr",[s("th",{staticStyle:{"text-align":"left"}},[t._v("Element")]),t._v(" "),s("th",{staticStyle:{"text-align":"left"}},[t._v("Example use case")])])]),t._v(" "),s("tbody",[s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("List Element (default)")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("Send a newsletter to subscribers")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("Product Element")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("Allow users to follow a product to be updated about new features or releases")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("User Element")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("Allow users to follow their favorite author and get notified when new articles are posted")])])])])]),t._v(" "),s("h2",{attrs:{id:"templating"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#templating"}},[t._v("#")]),t._v(" Templating")]),t._v(" "),s("h3",{attrs:{id:"subscribe-and-unsubscribe"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#subscribe-and-unsubscribe"}},[t._v("#")]),t._v(" Subscribe and Unsubscribe")]),t._v(" "),s("p",[t._v("Below is a full example of how give a user can Subscriber or Unsubscribe from a list using the "),s("strong",[t._v("List ID")]),t._v(" to identify the List.")]),t._v(" "),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Retrieve a list #}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" list "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" sprout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("lists"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("lists\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("id"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("123")]),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("one"),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 delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Define the subscription you wish to add or remove from a list #}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" subscription "),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 email"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" currentUser"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("email\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Check if the subscription already exists on a list #}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" list"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("isSubscribed"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("subscription"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Remove a subscriber from a list #}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("form")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("method")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),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(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("accept-charset")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("utf-8"),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 twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" csrfInput"),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 delimiter punctuation"}},[t._v("}}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("action"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sprout-lists/lists/remove"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("list[type]"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("barrelstrength\\sproutbaselists\\listtypes\\MailingList"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("list[id]"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("123"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),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(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("subscription[email]"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" currentUser"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("email "),s("span",{pre:!0,attrs:{class:"token delimiter 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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("submit"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Remove from List"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("else")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Add a subscriber to a list #}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("form")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("method")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),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(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("accept-charset")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("utf-8"),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 twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" csrfInput"),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 delimiter punctuation"}},[t._v("}}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("action"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sprout-lists/lists/add"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("list[type]"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("barrelstrength\\sproutbaselists\\listtypes\\MailingList"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("list[id]"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("123"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),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(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("subscription[email]"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" currentUser"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("email "),s("span",{pre:!0,attrs:{class:"token delimiter 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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("submit"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Add to List"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n")])])]),s("h3",{attrs:{id:"list-elements"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#list-elements"}},[t._v("#")]),t._v(" List Elements")]),t._v(" "),s("div",{pre:!0},[s("p",[t._v("While the List can be linked to the default List Element ID, a List can also be mapped to any Element in Craft (Entries, Users, Products, etc.). If you choose to identify your List by a non-List Element you will need to use two variables to submit and retrieve data from the list. The combination of the two variables "),s("code",[t._v("elementId")]),t._v(" and "),s("code",[t._v("listHandle")]),t._v(" must be unique.")])]),s("div",{pre:!0},[s("p",[t._v("This means that Lists that target two different "),s("code",[t._v("elementId")]),t._v("s can use the same "),s("code",[t._v("listHandle")]),t._v(". And two Lists that use the same "),s("code",[t._v("elementId")]),t._v(" would require unique handles. Be sure to update your queries and form input fields to reflect both the "),s("code",[t._v("elementId")]),t._v(" and "),s("code",[t._v("listHandle")]),t._v(" attributes as appropriate.")])]),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Retrieve a list #}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" list "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" sprout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("lists"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("lists\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("elementId"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("123")]),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("handle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("newsletter"),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("one"),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 delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Define the subscription you wish to add or remove from a list #}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" subscription "),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 email"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" currentUser"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("email\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Check if the subscription already exists on a list #}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" list"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("isSubscribed"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("subscription"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Remove a subscriber from a list #}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("form")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("method")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),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(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("accept-charset")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("utf-8"),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 twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" csrfInput"),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 delimiter punctuation"}},[t._v("}}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("action"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sprout-lists/lists/remove"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("list[type]"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("barrelstrength\\sproutbaselists\\listtypes\\MailingList"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("list[elementId]"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("123"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("list[handle]"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("newsletter"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),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(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("subscription[email]"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" currentUser"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("email "),s("span",{pre:!0,attrs:{class:"token delimiter 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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("submit"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Remove from List"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("else")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Add a subscriber to a list #}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("form")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("method")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),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(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("accept-charset")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("utf-8"),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 twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" csrfInput"),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 delimiter punctuation"}},[t._v("}}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("action"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sprout-lists/lists/add"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("list[type]"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("barrelstrength\\sproutbaselists\\listtypes\\MailingList"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("list[elementId]"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("123"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("list[handle]"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("newsletter"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),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(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("subscription[email]"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" currentUser"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("email "),s("span",{pre:!0,attrs:{class:"token delimiter 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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("submit"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Add to List"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n")])])]),s("h3",{attrs:{id:"subscriber-info"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#subscriber-info"}},[t._v("#")]),t._v(" Subscriber Info")]),t._v(" "),s("div",{pre:!0},[s("p",[t._v("When you add a Subscriber to a List you can optionally define their First and Last Name as well. If you wish to sync the First and Last Name with a Craft User profile, you can enable "),s("code",[t._v("User Sync")]),t._v(" in the Settings. By default Subscriber info will be stored only in the Subscriber Element in Sprout Lists.")])]),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("form")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("method")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),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(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("accept-charset")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("utf-8"),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 twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" csrfInput"),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 delimiter punctuation"}},[t._v("}}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("action"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sprout-lists/lists/add"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("list[type]"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("barrelstrength\\sproutbaselists\\listtypes\\MailingList"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("list[id]"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("123"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),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(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("subscription[email]"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" currentUser"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("email "),s("span",{pre:!0,attrs:{class:"token delimiter 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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),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(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("subscription[firstName]"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" currentUser"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("firstName "),s("span",{pre:!0,attrs:{class:"token delimiter 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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),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(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("subscription[lastName]"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" currentUser"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("lastName "),s("span",{pre:!0,attrs:{class:"token delimiter 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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("submit"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Add to List"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),s("h3",{attrs:{id:"displaying-counts"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#displaying-counts"}},[t._v("#")]),t._v(" Displaying Counts")]),t._v(" "),s("p",[t._v("The number of Subscribers or Items on a list can be retrieved like so:")]),t._v(" "),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" list "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" sprout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("lists"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("lists"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("id"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("123")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("one"),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 delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" list"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("count "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n")])])])])}),[],!1,null,null,null);a.default=e.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/111.bc2645a5.js b/docs/.vuepress/dist/assets/js/111.bc2645a5.js new file mode 100644 index 00000000..e5fbd852 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/111.bc2645a5.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[111],{578:function(t,e,s){"use strict";s.r(e);var a=s(34),n=Object(a.a)({},(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h2",{attrs:{id:"settings"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#settings"}},[t._v("#")]),t._v(" Settings")]),t._v(" "),s("div",{pre:!0},[s("p",[t._v("Settings can be managed in the Control Panel "),s("em",[t._v("Sprout Lists → Settings")]),t._v(" or via a config file in "),s("code",[t._v("config/sprout-lists.php")])])]),s("div",{staticClass:"language-php extra-class"},[s("pre",{pre:!0,attrs:{class:"language-php"}},[s("code",[s("span",{pre:!0,attrs:{class:"token php language-php"}},[s("span",{pre:!0,attrs:{class:"token delimiter important"}},[t._v("")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'Sprout Lists'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Create a relationship between a Sprout Subscriber and a matching")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Craft User, based on the email address")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'enableUserSync'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Subscriber Lists will be automatically created when a subscribe form")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// is submitted and no matching List is found.")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'enableAutoList'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant boolean"}},[t._v("false")]),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("h3",{attrs:{id:"enable-user-sync"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#enable-user-sync"}},[t._v("#")]),t._v(" Enable User Sync")]),t._v(" "),s("div",{pre:!0},[s("p",[t._v("When an "),s("code",[t._v("email address")]),t._v(" is added to a Subscriber List, if the "),s("code",[t._v("email address")]),t._v(" matches the address of a known "),s("code",[t._v("User ID")]),t._v(" in Craft, Sprout Lists can create a link between the two. Enable this behavior the the Sprout Lists settings.")])]),s("p",[t._v("User Sync will behave as follows when enabled:")]),t._v(" "),s("ul",[s("li",[t._v("When a new user is created in Sprout Lists, Sprout Lists will check if any Craft Users with a matching email address also exist. If so, Sprout Lists will create a link between the two.")]),t._v(" "),s("li",[t._v("When a new user is created and saved in Craft, if there are any matching Subscribers in Sprout Lists, their Sprout Lists Subscriber Records will be linked to the Craft User account.")]),t._v(" "),s("li",[t._v("When any updates are made to the Email, First Name, and Last Name fields of a Sprout Lists Subscriber or Craft User, those updates will be reflected in both places")])]),t._v(" "),s("div",{staticClass:"custom-block warning"},[s("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),s("p",[t._v("With User Sync enabled, if you submit a blank value for the First Name or Last Name fields (in Sprout List or Craft), the field will also be updated with a blank value in the other location. You will need to enforce First Name and Last Name fields as required if necessary.")])])])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/112.88b49893.js b/docs/.vuepress/dist/assets/js/112.88b49893.js new file mode 100644 index 00000000..b71d0c7d --- /dev/null +++ b/docs/.vuepress/dist/assets/js/112.88b49893.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[112],{581:function(t,e,s){"use strict";s.r(e);var i=s(34),r=Object(i.a)({},(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",[t._v("Subscriber List")]),t._v(" "),s("p",[t._v("Lists and Subscribers can be used for "),s("RouterLink",{attrs:{to:"/data-studio/mailing-lists.html"}},[t._v("Mailing Lists")]),t._v(" via the Subscriber List integration for Sprout Reports. Mailing Lists can be used in Sprout Email and Sprout Forms.")],1),t._v(" "),s("div",{pre:!0},[s("p",[t._v("If you have Sprout Reports installed when you install Sprout Lists, the Subscriber List Data Source will be installed for you and you will see a Subscriber List Report as an option in the New Report menu. If you installed Sprout Reports after Sprout Lists, visit the "),s("code",[t._v("Sprout Reports -> Data Sources")]),t._v(" tab to install the Subscriber List Data Source and make it available to Sprout Reports.")])])])}),[],!1,null,null,null);e.default=r.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/113.cdbe1a15.js b/docs/.vuepress/dist/assets/js/113.cdbe1a15.js new file mode 100644 index 00000000..ace4c2bf --- /dev/null +++ b/docs/.vuepress/dist/assets/js/113.cdbe1a15.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[113],{583:function(t,s,a){"use strict";a.r(s);var e=a(34),n=Object(e.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",[t._v("Subscribers")]),t._v(" "),a("p",[t._v("A Subscriber is the person that subscribes to a list. A subscriber can be an existing User in Craft or an anonymous user. In either case, the Subscriber is identified by their email address.")]),t._v(" "),a("p",[t._v("A Subscriber can be added to multiple Lists but a Subscriber can only be added to a specific list once. A Subscriber can subscribe to any Element in Craft – Entries, Categories, Products, Users, Lists, etc.")]),t._v(" "),a("p",[t._v("When an "),a("em",[t._v("email address")]),t._v(" is added to a Subscriber List, if the "),a("em",[t._v("email address")]),t._v(" matches the address of a known User in Craft, a link can be created between the two.")]),t._v(" "),a("p",[t._v("See the "),a("RouterLink",{attrs:{to:"/lists/settings.html"}},[t._v("Enable User Sync")]),t._v(" setting for more info.")],1),t._v(" "),a("h2",{attrs:{id:"templating"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#templating"}},[t._v("#")]),t._v(" Templating")]),t._v(" "),a("h3",{attrs:{id:"get-all-lists-belonging-to-a-specific-subscriber"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#get-all-lists-belonging-to-a-specific-subscriber"}},[t._v("#")]),t._v(" Get all Lists belonging to a specific Subscriber")]),t._v(" "),a("div",{staticClass:"language-twig extra-class"},[a("pre",{pre:!0,attrs:{class:"language-twig"}},[a("code",[a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" subscriber "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" sprout"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("lists"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("subscribers\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("email"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("ben@barrelstrengthdesign.com"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("one"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n \n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("for")]),t._v(" list "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("in")]),t._v(" subscriber"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getLists"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("all"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" list"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("name "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endfor")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n")])])]),a("h3",{attrs:{id:"get-all-subscribers-on-a-given-list"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#get-all-subscribers-on-a-given-list"}},[t._v("#")]),t._v(" Get all Subscribers on a given List")]),t._v(" "),a("p",[t._v("The List ID can be found in the sidebar of the List edit page in the control panel.")]),t._v(" "),a("div",{staticClass:"language-twig extra-class"},[a("pre",{pre:!0,attrs:{class:"language-twig"}},[a("code",[a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" subscribers "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" sprout"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("lists"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("subscribers\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("listId"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("123")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("all"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("for")]),t._v(" subscriber "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("in")]),t._v(" subscribers "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" subscriber"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("email "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endfor")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n")])])])])}),[],!1,null,null,null);s.default=n.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/114.f5c7c99a.js b/docs/.vuepress/dist/assets/js/114.f5c7c99a.js new file mode 100644 index 00000000..1add325c --- /dev/null +++ b/docs/.vuepress/dist/assets/js/114.f5c7c99a.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[114],{582:function(t,s,i){"use strict";i.r(s);var e=i(34),n=Object(e.a)({},(function(){var t=this.$createElement,s=this._self._c||t;return s("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[s("h1",[this._v("Subscriptions")]),this._v(" "),s("p",[this._v("Subscriptions are the relationship between a List and a Subscriber.")]),this._v(" "),s("h2",{attrs:{id:"mailing-lists"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#mailing-lists"}},[this._v("#")]),this._v(" Mailing Lists")])])}),[],!1,null,null,null);s.default=n.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/115.607eb147.js b/docs/.vuepress/dist/assets/js/115.607eb147.js new file mode 100644 index 00000000..e66b86d1 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/115.607eb147.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[115],{588:function(t,a,s){"use strict";s.r(a);var n=s(34),e=Object(n.a)({},(function(){var t=this,a=t.$createElement,s=t._self._c||a;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",[t._v("Wish Lists")]),t._v(" "),s("h2",{attrs:{id:"create-a-list"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#create-a-list"}},[t._v("#")]),t._v(" Create a List")]),t._v(" "),s("p",[t._v("Wish Lists can be managed by Users and, in many cases, the User ID will be used as the Element ID that the List depends on.")]),t._v(" "),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("form")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("method")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),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(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("accept-charset")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("utf-8"),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 twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" csrfInput"),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 delimiter punctuation"}},[t._v("}}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" redirectInput"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("lists"),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 delimiter punctuation"}},[t._v("}}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("action"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sprout-lists/lists/save-list"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("listType"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("barrelstrength\\sproutbaselists\\listtypes\\WishList"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("elementId"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" currentUser"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("id "),s("span",{pre:!0,attrs:{class:"token delimiter 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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),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(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),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 attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Wish List"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),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(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("handle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("favorites-uniqueHandle"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("submit"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Save List"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),s("h2",{attrs:{id:"subscribe-and-unsubscribe"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#subscribe-and-unsubscribe"}},[t._v("#")]),t._v(" Subscribe and Unsubscribe")]),t._v(" "),s("p",[t._v("Below is a full example of how give a user can Add or Remove items from a Wish List. Wish Lists h")]),t._v(" "),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Get all lists of a certain type that belong to a user #}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" lists "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" sprout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("lists"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("lists\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("elementId"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("currentUser"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("id"),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("handle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("favorites*"),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("all"),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 delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Let a user choose a List to add an item #}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("form")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("method")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),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(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("accept-charset")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("utf-8"),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 twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" csrfInput"),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 delimiter punctuation"}},[t._v("}}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("action"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sprout-lists/lists/add"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("list[type]"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("barrelstrength\\sproutbaselists\\listtypes\\WishList"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("list[elementId]"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" currentUser"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("id "),s("span",{pre:!0,attrs:{class:"token delimiter 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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("subscription[itemId]"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("123"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("select")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("list[id]"),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 twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("for")]),t._v(" list "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("in")]),t._v(" lists "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("option")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" list"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("id "),s("span",{pre:!0,attrs:{class:"token delimiter 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 twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" list"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("name "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endfor")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("submit"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Add to List"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),s("h2",{attrs:{id:"list-elements"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#list-elements"}},[t._v("#")]),t._v(" List Elements")]),t._v(" "),s("div",{pre:!0},[s("p",[t._v("While the List can be linked to the default List Element ID, a List can also be mapped to any Element in Craft (Entries, Users, Products, etc.). If you choose to identify your List by a non-List Element you will need to use two variables to submit and retrieve data from the list. The combination of the two variables "),s("code",[t._v("elementId")]),t._v(" and "),s("code",[t._v("listHandle")]),t._v(" must be unique.")])]),s("div",{pre:!0},[s("p",[t._v("This means that Lists that target two different "),s("code",[t._v("elementId")]),t._v("s can use the same "),s("code",[t._v("listHandle")]),t._v(". And two Lists that use the same "),s("code",[t._v("elementId")]),t._v(" would require unique handles. Be sure to update your queries and form input fields to reflect both the "),s("code",[t._v("elementId")]),t._v(" and "),s("code",[t._v("listHandle")]),t._v(" attributes as appropriate.")])]),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Retrieve a list #}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" list "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" sprout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("lists"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("lists\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("elementId"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("123")]),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("handle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("newsletter"),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("one"),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 delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Define the subscription you wish to add or remove from a list #}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" subscription "),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 email"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" currentUser"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("email\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Check if the subscription already exists on a list #}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" list"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("isSubscribed"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("subscription"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Remove a subscriber from a list #}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("form")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("method")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),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(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("accept-charset")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("utf-8"),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 twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" csrfInput"),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 delimiter punctuation"}},[t._v("}}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("action"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sprout-lists/lists/remove"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("list[type]"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("barrelstrength\\sproutbaselists\\listtypes\\MailingList"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("list[elementId]"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("123"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("list[handle]"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("newsletter"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),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(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("subscription[email]"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" currentUser"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("email "),s("span",{pre:!0,attrs:{class:"token delimiter 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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("submit"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Remove from List"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("else")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Add a subscriber to a list #}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("form")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("method")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),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(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("accept-charset")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("utf-8"),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 twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" csrfInput"),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 delimiter punctuation"}},[t._v("}}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("action"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sprout-lists/lists/add"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("list[type]"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("barrelstrength\\sproutbaselists\\listtypes\\MailingList"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("list[elementId]"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("123"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("list[handle]"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("newsletter"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),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(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("subscription[email]"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" currentUser"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("email "),s("span",{pre:!0,attrs:{class:"token delimiter 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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("submit"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Add to List"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n")])])]),s("h2",{attrs:{id:"subscriber-info"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#subscriber-info"}},[t._v("#")]),t._v(" Subscriber Info")]),t._v(" "),s("div",{pre:!0},[s("p",[t._v("When you add a Subscriber to a List you can optionally define their First and Last Name as well. If you wish to sync the First and Last Name with a Craft User profile, you can enable "),s("code",[t._v("User Sync")]),t._v(" in the Settings. By default Subscriber info will be stored only in the Subscriber Element in Sprout Lists.")])]),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("form")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("method")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),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(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("accept-charset")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("utf-8"),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 twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" csrfInput"),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 delimiter punctuation"}},[t._v("}}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("action"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sprout-lists/lists/add"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("list[type]"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("barrelstrength\\sproutbaselists\\listtypes\\MailingList"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("list[id]"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("123"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),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(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("subscription[email]"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" currentUser"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("email "),s("span",{pre:!0,attrs:{class:"token delimiter 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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),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(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("subscription[firstName]"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" currentUser"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("firstName "),s("span",{pre:!0,attrs:{class:"token delimiter 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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),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(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("subscription[lastName]"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" currentUser"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("lastName "),s("span",{pre:!0,attrs:{class:"token delimiter 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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("submit"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Add to List"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),s("h2",{attrs:{id:"wish-lists"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#wish-lists"}},[t._v("#")]),t._v(" Wish Lists")]),t._v(" "),s("p",[t._v("Sprout Lists can treat any Element as a List. This is a powerful detail and opens the door for a lot more creative uses of lists.")]),t._v(" "),s("p",[t._v("Consider the following examples:")]),t._v(" "),s("div",{staticClass:"table"},[s("table",[s("thead",[s("tr",[s("th",{staticStyle:{"text-align":"left"}},[t._v("Type of List")]),t._v(" "),s("th",{staticStyle:{"text-align":"left"}},[t._v("Use Case")]),t._v(" "),s("th",{staticStyle:{"text-align":"left"}},[t._v("Element ID")])])]),t._v(" "),s("tbody",[s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("Favorite Author")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("A list of people who have expressed interest in being notified when an author they like posts a new article")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("In this case, the List is the User Element ID of the Author that is being followed.")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("Product Release")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("A list of people who want to be notified when a new product is released")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("The List here is the Product Element ID.")])])])])])])}),[],!1,null,null,null);a.default=e.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/116.5d278be9.js b/docs/.vuepress/dist/assets/js/116.5d278be9.js new file mode 100644 index 00000000..2ebf6930 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/116.5d278be9.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[116],{584:function(t,e,l){"use strict";l.r(e);var i=l(34),a=Object(i.a)({},(function(){var t=this,e=t.$createElement,l=t._self._c||e;return l("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[l("h1",[t._v("Multi-Site")]),t._v(" "),l("p",[t._v("The Sprout team is dedicated to making products that support multi-lingual and multi-regional websites. We are proud to have customers and contributors from over 25 countries around the world.")]),t._v(" "),l("h2",{attrs:{id:"custom-fields"}},[l("a",{staticClass:"header-anchor",attrs:{href:"#custom-fields"}},[t._v("#")]),t._v(" Custom Fields")]),t._v(" "),l("p",[t._v("All Custom Fields support Craft's native Field options.")]),t._v(" "),l("div",{staticClass:"table"},[l("table",[l("thead",[l("tr",[l("th",{staticStyle:{"text-align":"left"}},[t._v("Feature")]),t._v(" "),l("th",{staticStyle:{"text-align":"left"}},[t._v("Plugin")]),t._v(" "),l("th",{staticStyle:{"text-align":"center"}},[t._v("Per-site")]),t._v(" "),l("th",{staticStyle:{"text-align":"center"}},[t._v("Per-group")]),t._v(" "),l("th",{staticStyle:{"text-align":"center"}},[t._v("Per-language")]),t._v(" "),l("th",{staticStyle:{"text-align":"center"}},[t._v("Custom")])])]),t._v(" "),l("tbody",[l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Address Field")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("Fields")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Email Field")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("Fields")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Gender Field")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("Fields")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Name Field")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("Fields")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Notes Field")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("Fields")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Phone Field")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("Fields")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Predefined Field")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("Fields")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Regex Field")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("Fields")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("URL Field")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("Fields")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Metadata Field")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("SEO")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Form Relations Field")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("Forms")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Entry Relations Field")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("Forms")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("✔")])])])])]),t._v(" "),l("h2",{attrs:{id:"custom-components"}},[l("a",{staticClass:"header-anchor",attrs:{href:"#custom-components"}},[t._v("#")]),t._v(" Custom Components")]),t._v(" "),l("p",[t._v("Custom Sprout components support the multi-site settings that fit best with their use case. If we don't support a multi-lingual or multi-regional workflow that you'd like to see, "),l("RouterLink",{attrs:{to:"/support/support.html#feature-requests"}},[t._v("let us know")]),t._v(".")],1),t._v(" "),l("div",{staticClass:"table"},[l("table",[l("thead",[l("tr",[l("th",{staticStyle:{"text-align":"left"}},[t._v("Feature")]),t._v(" "),l("th",{staticStyle:{"text-align":"left"}},[t._v("Plugin")]),t._v(" "),l("th",{staticStyle:{"text-align":"center"}},[t._v("Per-site")]),t._v(" "),l("th",{staticStyle:{"text-align":"center"}},[t._v("Per-group")]),t._v(" "),l("th",{staticStyle:{"text-align":"center"}},[t._v("Per-language")]),t._v(" "),l("th",{staticStyle:{"text-align":"center"}},[t._v("Custom")])])]),t._v(" "),l("tbody",[l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Global Metadata")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("SEO")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("–")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Sitemaps"),l("sup",[t._v("1")])]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("SEO")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("–")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Redirects")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("SEO")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("–")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Forms")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("Forms")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("○")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("–")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Form Entries")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("Forms")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("○")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("–")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Notification Email")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("Email")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("○")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("○")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("○")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("○")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Campaign Email")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("Email")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("○")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("–")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Sent Email")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("Email")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("○")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("–")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Reports")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("Reports")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("○")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("–")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Data Sources")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("Reports")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("–")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Importing")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("Import")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("✔")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("–")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Seeding")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("Import")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("○")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("–")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("List")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("Lists")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("○")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("–")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Subscriber")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("Lists")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("○")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("–")])])])])]),t._v(" "),l("p",[l("em",[l("sup",[t._v("1")]),t._v(" Multi-lingual XML Sitemaps are supported by adding related sites that use different languages to the same Site Group.")])]),t._v(" "),l("h4",[t._v("Legend")]),t._v(" "),l("div",{staticClass:"table"},[l("table",[l("thead",[l("tr",[l("th",{staticStyle:{"text-align":"left"}},[t._v("Icon")]),t._v(" "),l("th",{staticStyle:{"text-align":"left"}},[t._v("Description")])])]),t._v(" "),l("tbody",[l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("✔")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("Supported")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("○")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("Planned/Under Consideration")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("–")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("Not Planned")])])])])])])}),[],!1,null,null,null);e.default=a.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/117.30bc125f.js b/docs/.vuepress/dist/assets/js/117.30bc125f.js new file mode 100644 index 00000000..f066bf3c --- /dev/null +++ b/docs/.vuepress/dist/assets/js/117.30bc125f.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[117],{587:function(t,e,r){"use strict";r.r(e);var a=r(34),o=Object(a.a)({},(function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[r("h1",[t._v("Craft 3")]),t._v(" "),r("p",[t._v("Sprout SEO installation and update instructions for Craft 3.")]),t._v(" "),r("h2",{attrs:{id:"requirements"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),r("ul",[r("li",[t._v("Craft CMS 3.0.0 or a more recent version of Craft")])]),t._v(" "),r("h2",{attrs:{id:"installation-via-plugin-store"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#installation-via-plugin-store"}},[t._v("#")]),t._v(" Installation via Plugin Store")]),t._v(" "),r("ol",[r("li",[t._v("Find the plugin in the Plugin Store in your Craft Control Panel")]),t._v(" "),r("li",[t._v("Go to "),r("em",[t._v("Settings → Plugins")]),t._v(" and select “Install”")])]),t._v(" "),r("h2",{attrs:{id:"installation-via-composer"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#installation-via-composer"}},[t._v("#")]),t._v(" Installation via Composer")]),t._v(" "),r("div",{pre:!0},[r("ol",[r("li",[t._v("Open your terminal and go to your Craft project:"),r("br"),r("code",[t._v("cd /path/to/project")])]),t._v(" "),r("li",[t._v("Then tell Composer to load the plugin:"),r("br"),r("code",[t._v("composer require barrelstrength/sprout-seo")])]),t._v(" "),r("li",[t._v("In the Control Panel, go to "),r("em",[t._v("Settings → Plugins")]),t._v(" and select “Install”")])])]),r("h2",{attrs:{id:"upgrading-to-craft-3"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#upgrading-to-craft-3"}},[t._v("#")]),t._v(" Upgrading to Craft 3")]),t._v(" "),r("div",{staticClass:"custom-block warning"},[r("p",{staticClass:"custom-block-title"},[t._v("BEFORE YOU UPDATE")]),t._v(" "),r("p",[t._v("Make sure you have updated to the latest version of Sprout SEO 3.x before updating to Sprout Import 4.x for Craft 3")])]),t._v(" "),r("h2",{attrs:{id:"upgrading-to-redirects-2-0-unreleased"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#upgrading-to-redirects-2-0-unreleased"}},[t._v("#")]),t._v(" Upgrading to Redirects 2.0 - UNRELEASED")]),t._v(" "),r("p",[t._v("Upgrade to the latest before updating.\nPurge 404 redirects")])])}),[],!1,null,null,null);e.default=o.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/118.8b6503b5.js b/docs/.vuepress/dist/assets/js/118.8b6503b5.js new file mode 100644 index 00000000..028f5120 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/118.8b6503b5.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[118],{586:function(t,s,e){"use strict";e.r(s);var n=e(34),a=Object(n.a)({},(function(){var t=this,s=t.$createElement,e=t._self._c||s;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",[t._v("Settings")]),t._v(" "),e("div",{pre:!0},[e("p",[t._v("Settings can be managed in the Control Panel "),e("em",[t._v("Sprout Redirects → Settings")]),t._v(" or via a config file in "),e("code",[t._v("config/sprout-redirects.php")])])]),e("div",{staticClass:"language-php extra-class"},[e("pre",{pre:!0,attrs:{class:"language-php"}},[e("code",[e("span",{pre:!0,attrs:{class:"token php language-php"}},[e("span",{pre:!0,attrs:{class:"token delimiter important"}},[t._v("")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'Sprout Redirects'")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Process Redirect rules and log 404 requests.")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'enableRedirects'")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant boolean"}},[t._v("true")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Log 'Page Not Found' errors as 404 Redirects")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'enable404RedirectLog'")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant boolean"}},[t._v("false")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// How to match 404 requests with Redirect records already captured in")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//the database.")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// urlWithQueryStrings: match the entire URL including query strings")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// urlWithoutQueryStrings: remove all parameters from the request URL")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// before searching for a match")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'redirectMatchStrategy'")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'urlWithoutQueryStrings'")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// How to treat query strings after processing a redirect")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// removeQueryStrings - remove the query string from the incoming")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// URL entirely")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// appendQueryStrings - add any query string from the incoming URL to")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// the New Url")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'queryStringStrategy'")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'removeQueryStrings'")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Enable to capture the IP Address used when a 404 request is saved")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'trackRemoteIp'")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant boolean"}},[t._v("false")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// The target number of 404 Redirects that will be stored in the database")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// per-site, after the cleanup task runs.")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'total404Redirects'")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("250")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// The probability that the 404 Redirect cleanup task will run each")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// web request")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 0 - None")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 100000 - 1 in 10")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 10000 - 1 in 100")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 1000 - selected>1 in 1,000")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 100 - 1 in 10,000")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 10 - 1 in 100,000")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 1 - 1 in 1,000,000")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'cleanupProbability'")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("1000")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Add any regular expression patterns you wish to exclude from the")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Redirect log. Overriding this setting will override any updates made by")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v('// the "Add to Excluded URLs" action.')]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 'excludedUrlPatterns' => ''")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])])])}),[],!1,null,null,null);s.default=a.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/119.7c100ec1.js b/docs/.vuepress/dist/assets/js/119.7c100ec1.js new file mode 100644 index 00000000..25cdb6f5 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/119.7c100ec1.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[119],{590:function(t,e,l){"use strict";l.r(e);var a=l(34),i=Object(a.a)({},(function(){var t=this,e=t.$createElement,l=t._self._c||e;return l("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[l("h1",[t._v("Query Strings in Redirects")]),t._v(" "),l("p",[t._v("Control the behavior around query strings in your Redirects using the "),l("strong",[t._v("Redirect Match Strategy")]),t._v(" and "),l("strong",[t._v("Query String Strategy")]),t._v(" settings. Below we'll take a look at examples of how these settings can be used.")]),t._v(" "),l("h3",{attrs:{id:"redirect-match-strategy"}},[l("a",{staticClass:"header-anchor",attrs:{href:"#redirect-match-strategy"}},[t._v("#")]),t._v(" Redirect Match Strategy")]),t._v(" "),l("p",[t._v("The Redirect Match Strategy setting determines how to match 404 requests with Redirect records already captured in the database. Once the incoming Request URL is received, depending on this setting, the query string value may be retained or removed before searching the database for a matching value.")]),t._v(" "),l("h4",[t._v("URL (with query strings) Example")]),t._v(" "),l("div",{staticClass:"table"},[l("table",[l("thead",[l("tr",[l("th",{staticStyle:{"text-align":"left"}},[t._v("Request URL")]),t._v(" "),l("th",{staticStyle:{"text-align":"left"}},[t._v("www.website.com/blog?p=123")])])]),t._v(" "),l("tbody",[l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Old URL Search Value")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("blog?p=123")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Old URL Match")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("blog?p=123")])])])])]),t._v(" "),l("h4",[t._v("URL (without query strings) Example")]),t._v(" "),l("div",{staticClass:"table"},[l("table",[l("thead",[l("tr",[l("th",{staticStyle:{"text-align":"left"}},[t._v("Request URL")]),t._v(" "),l("th",{staticStyle:{"text-align":"left"}},[t._v("www.website.com/blog?p=123")])])]),t._v(" "),l("tbody",[l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Old URL Search Value")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("blog")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Old URL Match")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("blog")])])])])]),t._v(" "),l("h3",{attrs:{id:"query-string-strategy"}},[l("a",{staticClass:"header-anchor",attrs:{href:"#query-string-strategy"}},[t._v("#")]),t._v(" Query String Strategy")]),t._v(" "),l("p",[t._v("The Query String Strategy setting determines how to treat query strings after processing a redirect.")]),t._v(" "),l("h4",[t._v("Remove Query Strings Example")]),t._v(" "),l("div",{staticClass:"table"},[l("table",[l("thead",[l("tr",[l("th",{staticStyle:{"text-align":"left"}},[t._v("Request URL")]),t._v(" "),l("th",{staticStyle:{"text-align":"left"}},[t._v("www.website.com/blog?p=123")])])]),t._v(" "),l("tbody",[l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("New URL Match")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("blog/slug-name")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("New URL Redirect Location")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("blog/slug-name")])])])])]),t._v(" "),l("h4",[t._v("Append Query Strings Example")]),t._v(" "),l("div",{staticClass:"table"},[l("table",[l("thead",[l("tr",[l("th",{staticStyle:{"text-align":"left"}},[t._v("Request URL")]),t._v(" "),l("th",{staticStyle:{"text-align":"left"}},[t._v("www.website.com/blog?p=123")])])]),t._v(" "),l("tbody",[l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("New URL Match")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("blog/slug-name")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("New URL Redirect Location")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("blog/slug-name?p=123")])])])])]),t._v(" "),l("h3",{attrs:{id:"combining-strategies"}},[l("a",{staticClass:"header-anchor",attrs:{href:"#combining-strategies"}},[t._v("#")]),t._v(" Combining Strategies")]),t._v(" "),l("p",[t._v("Together the "),l("strong",[t._v("Redirect Match Strategy")]),t._v(" and "),l("strong",[t._v("Query String Strategy")]),t._v(" settings allow redirects to be configured in several ways")]),t._v(" "),l("h4",[t._v("URL (with query strings) + Remove Query Strings")]),t._v(" "),l("div",{staticClass:"table"},[l("table",[l("thead",[l("tr",[l("th",{staticStyle:{"text-align":"left"}},[t._v("Request URL")]),t._v(" "),l("th",{staticStyle:{"text-align":"left"}},[t._v("www.website.com/blog?p=123")])])]),t._v(" "),l("tbody",[l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Old URL Search Value")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("blog?p=123")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Old URL Match")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("blog?p=123")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("New URL Match")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("blog/slug-name")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("New URL Redirect Location")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("blog/slug-name")])])])])]),t._v(" "),l("h4",[t._v("URL (with query strings) + Append Query Strings")]),t._v(" "),l("div",{staticClass:"table"},[l("table",[l("thead",[l("tr",[l("th",{staticStyle:{"text-align":"left"}},[t._v("Request URL")]),t._v(" "),l("th",{staticStyle:{"text-align":"left"}},[t._v("www.website.com/blog?p=123")])])]),t._v(" "),l("tbody",[l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Old URL Search Value")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("blog?p=123")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Old URL Match")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("blog?p=123")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("New URL Match")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("blog/slug-name")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("New URL Redirect Location")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("blog/slug-name?p=123")])])])])]),t._v(" "),l("h4",[t._v("URL (without query strings) + Remove Query Strings")]),t._v(" "),l("div",{staticClass:"table"},[l("table",[l("thead",[l("tr",[l("th",{staticStyle:{"text-align":"left"}},[t._v("Request URL")]),t._v(" "),l("th",{staticStyle:{"text-align":"left"}},[t._v("www.website.com/blog?p=123")])])]),t._v(" "),l("tbody",[l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Old URL Search Value")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("blog")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Old URL Match")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("blog")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("New URL Match")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("blog/slug-name")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("New URL Redirect Location")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("blog/slug-name")])])])])]),t._v(" "),l("h4",[t._v("URL (without query strings) + Append Query Strings")]),t._v(" "),l("div",{staticClass:"table"},[l("table",[l("thead",[l("tr",[l("th",{staticStyle:{"text-align":"left"}},[t._v("Request URL")]),t._v(" "),l("th",{staticStyle:{"text-align":"left"}},[t._v("www.website.com/blog?p=123")])])]),t._v(" "),l("tbody",[l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Old URL Search Value")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("blog")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Old URL Match")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("blog")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("New URL Match")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("blog/slug-name")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("New URL Redirect Location")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("blog/slug-name?p=123")])])])])])])}),[],!1,null,null,null);e.default=i.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/12.cda859ed.js b/docs/.vuepress/dist/assets/js/12.cda859ed.js new file mode 100644 index 00000000..19326dab --- /dev/null +++ b/docs/.vuepress/dist/assets/js/12.cda859ed.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[12],{406:function(t,e,n){},477:function(t,e,n){"use strict";n(406)},620: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:function(t,e){var n=e.props,i=e.slots;return t("span",{class:["badge",n.type],style:{verticalAlign:n.vertical}},n.text||i().default)}},r=(n(477),n(34)),p=Object(r.a)(i,void 0,void 0,!1,null,"15b7b770",null);e.default=p.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/120.45752f45.js b/docs/.vuepress/dist/assets/js/120.45752f45.js new file mode 100644 index 00000000..0b58c6fe --- /dev/null +++ b/docs/.vuepress/dist/assets/js/120.45752f45.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[120],{606:function(e,t,i){"use strict";i.r(t);var a=i(34),s=Object(a.a)({},(function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[i("h1",[e._v("Sprout Sent Email")]),e._v(" "),i("p",[e._v("Sent Email Elements capture instances of emails that are sent by Craft. Sent Emails can be used to review Sent Emails, troubleshoot customer support and deliverability issues, and re-send email to your users.")]),e._v(" "),i("p",[e._v("A Sent Email is created when:")]),e._v(" "),i("ol",[i("li",[e._v("Craft sends a system email")]),e._v(" "),i("li",[e._v("Sprout Email sends a Notification Email")]),e._v(" "),i("li",[e._v("Sprout Email sends a Campaign Email")])]),e._v(" "),i("p",[e._v("While Sent Emails may indicate an email has been successfully sent by Craft, this status does no indicate anything about the deliverability of the Sent Emails. To get additional information on whether an email was delivered or bounced, consider using an email service provider such as Mailgun, Sparkpost or other similar services.")]),e._v(" "),i("div",{staticClass:"custom-block tip"},[i("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),i("p",[e._v("Our goal is to capture all emails sent by Craft, including emails that failed to send. If you run into a scenario that is not being captured by Sprout Email, "),i("a",{attrs:{href:"mailto:sprout@barrelstrengthdesign.com"}},[e._v("let us know")]),e._v(".")])]),e._v(" "),i("h2",{attrs:{id:"tracking-info"}},[i("a",{staticClass:"header-anchor",attrs:{href:"#tracking-info"}},[e._v("#")]),e._v(" Tracking Info")]),e._v(" "),i("p",[e._v("Sent Emails capture the following info:")]),e._v(" "),i("ul",[i("li",[e._v("Date Sent")]),e._v(" "),i("li",[e._v("Subject")]),e._v(" "),i("li",[e._v("Sender Name")]),e._v(" "),i("li",[e._v("Sender Email")]),e._v(" "),i("li",[e._v("Recipient (or List)")]),e._v(" "),i("li",[e._v("A copy of the HTML Email")]),e._v(" "),i("li",[e._v("A copy of the Text Email")]),e._v(" "),i("li",[e._v("Email Type")]),e._v(" "),i("li",[e._v("Test Email (Y/N)")]),e._v(" "),i("li",[e._v("Source (i.e. Sprout Email, Craft)")]),e._v(" "),i("li",[e._v("Source Version (i.e. Sprout Email 1.2.3)")]),e._v(" "),i("li",[e._v("Craft Version")]),e._v(" "),i("li",[e._v("IP Address")]),e._v(" "),i("li",[e._v("User Agent")]),e._v(" "),i("li",[e._v("Protocol")]),e._v(" "),i("li",[e._v("Host Name")]),e._v(" "),i("li",[e._v("Port")]),e._v(" "),i("li",[e._v("SMTP Secure Transport Type")]),e._v(" "),i("li",[e._v("Timeout")])]),e._v(" "),i("p",[i("em",[e._v("Info may vary based on the type of email being captured")])]),e._v(" "),i("h2",{attrs:{id:"view-content"}},[i("a",{staticClass:"header-anchor",attrs:{href:"#view-content"}},[e._v("#")]),e._v(" View Content")]),e._v(" "),i("p",[e._v('Select the "View Content" link to display the HTML and Text versions of the email sent.')]),e._v(" "),i("h2",{attrs:{id:"search"}},[i("a",{staticClass:"header-anchor",attrs:{href:"#search"}},[e._v("#")]),e._v(" Search")]),e._v(" "),i("p",[e._v("Sent Emails can be searched by:")]),e._v(" "),i("ul",[i("li",[e._v("Recipient")]),e._v(" "),i("li",[e._v("Subject")])])])}),[],!1,null,null,null);t.default=s.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/121.9b251a68.js b/docs/.vuepress/dist/assets/js/121.9b251a68.js new file mode 100644 index 00000000..15b89953 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/121.9b251a68.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[121],{591:function(t,a,e){"use strict";e.r(a);var n=e(34),s=Object(n.a)({},(function(){var t=this,a=t.$createElement,e=t._self._c||a;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",[t._v("Craft 3")]),t._v(" "),e("p",[t._v("Sprout Sent Email installation and update instructions for Craft 3.")]),t._v(" "),e("h2",{attrs:{id:"requirements"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),e("ul",[e("li",[t._v("Craft CMS 3.4.0 or a more recent version of Craft")])]),t._v(" "),e("h2",{attrs:{id:"installation-via-plugin-store"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#installation-via-plugin-store"}},[t._v("#")]),t._v(" Installation via Plugin Store")]),t._v(" "),e("ol",[e("li",[t._v("Find the plugin in the Plugin Store in your Craft Control Panel")]),t._v(" "),e("li",[t._v("Go to "),e("em",[t._v("Settings → Plugins")]),t._v(" and select “Install”")])]),t._v(" "),e("h2",{attrs:{id:"installation-via-composer"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#installation-via-composer"}},[t._v("#")]),t._v(" Installation via Composer")]),t._v(" "),e("div",{pre:!0},[e("ol",[e("li",[t._v("Open your terminal and go to your Craft project:"),e("br"),e("code",[t._v("cd /path/to/project")])]),t._v(" "),e("li",[t._v("Then tell Composer to load the plugin:"),e("br"),e("code",[t._v("composer require barrelstrength/sprout-sent-email")])]),t._v(" "),e("li",[t._v("In the Control Panel, go to "),e("em",[t._v("Settings → Plugins")]),t._v(" and select “Install”")])])]),e("h2",{attrs:{id:"migrating-from-sprout-email"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#migrating-from-sprout-email"}},[t._v("#")]),t._v(" Migrating from Sprout Email")]),t._v(" "),e("p",[t._v("If you've been using Sprout Email only for the Sent Email feature, you may be able to upgrade and just use this more focused plugin now. To do so, and preserve your data you will want to:")]),t._v(" "),e("ol",[e("li",[t._v("Backup your database")]),t._v(" "),e("li",[t._v("Upgrade to Sprout Email v4.3.0 (to make sure you trigger all the necessary migrations that make Sprout Sent Email an independent module)")]),t._v(" "),e("li",[t._v("Install Sprout Sent Email and enable it")]),t._v(" "),e("li",[t._v("Uninstall Sprout Email")])]),t._v(" "),e("h2",{attrs:{id:"upgrading-to-sent-email-2-0-0-unreleased"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#upgrading-to-sent-email-2-0-0-unreleased"}},[t._v("#")]),t._v(" Upgrading to Sent Email 2.0.0 - UNRELEASED")]),t._v(" "),e("p",[t._v("Upgrade to the latest before updating.\nPurge old SENT EMAIL before updating.")]),t._v(" "),e("p",[t._v("Any custom integrations implementing Sent Email tracking will need to update the following method:")]),t._v(" "),e("div",{staticClass:"language-php extra-class"},[e("pre",{pre:!0,attrs:{class:"language-php"}},[e("code",[e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// OLD")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("createInfoTableModel")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$pluginHandle")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword type-hint"}},[t._v("array")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$values")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("NEW")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("createInfoTableModel")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$sourceName")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$sourceVersion")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("''")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword type-hint"}},[t._v("array")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$values")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])])])}),[],!1,null,null,null);a.default=s.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/122.36decc53.js b/docs/.vuepress/dist/assets/js/122.36decc53.js new file mode 100644 index 00000000..01c9a0d8 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/122.36decc53.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[122],{598:function(t,n,s){"use strict";s.r(n);var a=s(34),e=Object(a.a)({},(function(){var t=this,n=t.$createElement,s=t._self._c||n;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",[t._v("Settings")]),t._v(" "),s("div",{pre:!0},[s("p",[t._v("Settings can be managed in the Control Panel "),s("em",[t._v("Sprout Sent Email → Settings")]),t._v(" or via a config file in "),s("code",[t._v("config/sprout-sent-email.php")])])]),s("div",{staticClass:"language-php extra-class"},[s("pre",{pre:!0,attrs:{class:"language-php"}},[s("code",[s("span",{pre:!0,attrs:{class:"token php language-php"}},[s("span",{pre:!0,attrs:{class:"token delimiter important"}},[t._v("")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'Sprout Sent Email'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Enable Sent Email tracking")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'enableSentEmails'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// The total number of Sent Emails that will be stored")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// in the database per-site")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'sentEmailsLimit'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("5000")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// The probability that the Sent Emails cleanup task will run")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// each time a Sent Email is tracked")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'cleanupProbability'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1000")]),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")])])])])])}),[],!1,null,null,null);n.default=e.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/123.33925275.js b/docs/.vuepress/dist/assets/js/123.33925275.js new file mode 100644 index 00000000..98925fbf --- /dev/null +++ b/docs/.vuepress/dist/assets/js/123.33925275.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[123],{593:function(t,n,e){"use strict";e.r(n);var a=e(34),s=Object(a.a)({},(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",[t._v("Block Search Robots")]),t._v(" "),e("p",[t._v("There are various methods to block robots from indexing your website. The Moz article "),e("a",{attrs:{href:"https://moz.com/learn/seo/robotstxt",target:"_blank",rel:"noopener noreferrer"}},[t._v("Robots.txt and Meta Robots"),e("OutboundLink")],1),t._v(" discusses some of the methods in greater detail.")]),t._v(" "),e("div",{pre:!0},[e("p",[t._v("If you would like to block robots using the meta "),e("code",[t._v("noindex")]),t._v(" robots tag, you can do so with the following technique:")])]),e("div",{pre:!0},[e("ol",[e("li",[t._v("Setup a Craft multi-environment configuration")]),t._v(" "),e("li",[t._v("Define a custom environment variable that you can use in your templates")]),t._v(" "),e("li",[t._v("Conditionally output the "),e("code",[t._v("noindex")]),t._v(" tag in all environments that are not the live environment using the "),e("code",[t._v("sprout.seo.meta")]),t._v(" variable")])])]),e("div",{pre:!0},[e("p",[t._v("In the example below, the conditional statement assumes we have created an "),e("code",[t._v("env")]),t._v(" variable in our "),e("code",[t._v("general.php")]),t._v(" that is set to "),e("code",[t._v("live")]),t._v(" in our Live environment and not set to live in all of our other environments:")])]),e("div",{staticClass:"language-twig extra-class"},[e("pre",{pre:!0,attrs:{class:"language-twig"}},[e("code",[e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" craft"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("config"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("env "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("live"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("do")]),t._v(" sprout"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("seo"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("meta"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n robots"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("noindex"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("nofollow"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n")])])])])}),[],!1,null,null,null);n.default=s.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/124.7c67b52a.js b/docs/.vuepress/dist/assets/js/124.7c67b52a.js new file mode 100644 index 00000000..5651e943 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/124.7c67b52a.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[124],{594:function(t,a,e){"use strict";e.r(a);var s=e(34),n=Object(s.a)({},(function(){var t=this,a=t.$createElement,e=t._self._c||a;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",[t._v("Canonical URLs")]),t._v(" "),e("div",{pre:!0},[e("p",[t._v("If you need to customize the "),e("code",[t._v("canonical")]),t._v(" URLs that appear in your metadata or in your XML sitemap you have multiple options:")])]),e("ul",[e("li",[t._v("Custom Pages")]),t._v(" "),e("li",[t._v("Metadata Field")]),t._v(" "),e("li",[t._v("Template Overrides")])]),t._v(" "),e("h2",{attrs:{id:"custom-pages"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#custom-pages"}},[t._v("#")]),t._v(" Custom Pages")]),t._v(" "),e("p",[t._v('To add support for a custom page with Canonical URL that does not exist in other URL-Enabled Sections, toggle the global plugin setting for "Enable Custom Pages" and a new section will appear on your Sitemaps management page that allows you to add custom URLs to the XML sitemap.')]),t._v(" "),e("h2",{attrs:{id:"metadata-field"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#metadata-field"}},[t._v("#")]),t._v(" Metadata Field")]),t._v(" "),e("p",[t._v('To allow overrides to the Canonical URL of a page for an individual entry, enable the "Canonical URL" setting when you set up your metadata field. This will display an additional Canonical URL option for your Metadata field that can be updated by content managers.')]),t._v(" "),e("h2",{attrs:{id:"template-overrides"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#template-overrides"}},[t._v("#")]),t._v(" Template Overrides")]),t._v(" "),e("div",{staticClass:"custom-block warning"},[e("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),e("p",[t._v("Overriding Canonical URLs in your templates breaks the relationship with XML Sitemaps and the awareness Sprout SEO has about Canonical URL overrides. To add Custom URLs in a supported way to your XML Sitemaps see the documentation on "),e("RouterLink",{attrs:{to:"/sitemaps/sitemaps.html#custom-urls"}},[t._v("Custom Pages")]),t._v(".")],1)]),t._v(" "),e("div",{pre:!0},[e("p",[t._v("To override the "),e("code",[t._v("canonical")]),t._v(" meta value on any given page in your templates, use the "),e("code",[t._v("sprout.seo.meta")]),t._v(" tag and set the "),e("code",[t._v("canonical")]),t._v(" attribute to the appropriate URL:")])]),e("div",{staticClass:"language-twig extra-class"},[e("pre",{pre:!0,attrs:{class:"language-twig"}},[e("code",[e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("do")]),t._v(" sprout"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("seo"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("meta"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n canonical"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" customUrl"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("sproutseo")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("optimize"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n")])])])])}),[],!1,null,null,null);a.default=n.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/125.7ced821b.js b/docs/.vuepress/dist/assets/js/125.7ced821b.js new file mode 100644 index 00000000..6b829b5e --- /dev/null +++ b/docs/.vuepress/dist/assets/js/125.7ced821b.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[125],{596:function(e,t,a){"use strict";a.r(t);var o=a(34),s=Object(o.a)({},(function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",[e._v("Schema")]),e._v(" "),a("p",[e._v("Sprout SEO allows you to map your content in Craft CMS to the be output as Structured Data. The mapping between your content and the Structured Data that gets output is called a schema. Sprout SEO supports two types of mappings:")]),e._v(" "),a("ul",[a("li",[a("strong",[e._v("Default Schema Mappings")]),e._v(" - a small, predictable subset of Schema Types and Properties that we can support out of the box. This will get you up and running and output more Structured Data for your content than the average website.")]),e._v(" "),a("li",[a("strong",[e._v("Custom Schema Mappings")]),e._v(" - If you have more specialized content, Sprout SEO provides an extensive Schema API where you can map your content and custom fields and support more advanced schema mappings for your online and SEO strategies.")])]),e._v(" "),a("h2",{attrs:{id:"custom-schema"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#custom-schema"}},[e._v("#")]),e._v(" Custom Schema")]),e._v(" "),a("p",[e._v("You can create your own Custom Schema by:")]),e._v(" "),a("div",{pre:!0},[a("ol",[a("li",[e._v("Extending "),a("code",[e._v("Schema")]),e._v(" with your Custom Schema")]),e._v(" "),a("li",[e._v("Register your Custom Schema using the registerSproutSeoSchemas() hook")])])]),a("p",[e._v("Sprout SEO uses its own Schema API. See over 15 Schema integration examples in Sprout SEO (sproutseo/integrations/sproutseo/schema).")]),e._v(" "),a("p",[e._v("Download the "),a("a",{attrs:{href:"https://s3.amazonaws.com/sprout.barrelstrengthdesign.com-assets/content/docs/examplecustomschema.zip",target:"_blank",rel:"noopener noreferrer"}},[e._v("Example Custom Schema Plugin"),a("OutboundLink")],1),e._v(" for an example of how to build a Custom Schema Integration as a separate plugin. The "),a("em",[e._v("Example Custom Schema Plugin")]),e._v(" includes lots of comments and some discussion of the available helper methods and other techniques to use while building your Custom Schema.")]),e._v(" "),a("p",[e._v("Once you have created a Custom Schema, you should see it as an option in the Main Entity dropdown for your Sections and Element Metadata fields. It will only be processed and output as metadata on pages where you have it selected in your Main Entity settings.")]),e._v(" "),a("h2",{attrs:{id:"validation"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#validation"}},[e._v("#")]),e._v(" Validation")]),e._v(" "),a("p",[e._v("Structured Data schema are primarily defined on "),a("a",{attrs:{href:"https://schema.org",target:"_blank",rel:"noopener noreferrer"}},[e._v("schema.org"),a("OutboundLink")],1),e._v(" but the vocabulary you see on schema.org is often not exactly the same as the feedback you get from Google's "),a("a",{attrs:{href:"https://search.google.com/structured-data/testing-tool",target:"_blank",rel:"noopener noreferrer"}},[e._v("Structured Data Testing Tool"),a("OutboundLink")],1),e._v(".")])])}),[],!1,null,null,null);t.default=s.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/126.403bf971.js b/docs/.vuepress/dist/assets/js/126.403bf971.js new file mode 100644 index 00000000..09785381 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/126.403bf971.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[126],{600:function(t,a,e){"use strict";e.r(a);var s=e(34),n=Object(s.a)({},(function(){var t=this,a=t.$createElement,e=t._self._c||a;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",[t._v("Elements Without URLs")]),t._v(" "),e("p",[t._v("The "),e("RouterLink",{attrs:{to:"/seo/element-metadata-field.html"}},[t._v("Metadata Field")]),t._v(" can be used on Elements like Users and Tags, that do not support URLs by default. To manage metadata on Non-URL-Enabled Elements you will need to:")],1),t._v(" "),e("div",{pre:!0},[e("ul",[e("li",[t._v("Setup a custom route in Craft to load your element on a specific page")]),t._v(" "),e("li",[t._v("Add a Metadata Field to the Element's Field Layout")]),t._v(" "),e("li",[t._v("Define the Element ID in your template's Sprout Seo "),e("code",[t._v("meta")]),t._v(" tag")])])]),e("h3",{attrs:{id:"user-metadata"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#user-metadata"}},[t._v("#")]),t._v(" User Metadata")]),t._v(" "),e("div",{staticClass:"language-twig extra-class"},[e("pre",{pre:!0,attrs:{class:"language-twig"}},[e("code",[e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Determine the User Element for your page #}")])]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" user "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" craft"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("users"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("id"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("one"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Set the `id` variable to the Element ID that has your Metadata field #}")])]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("do")]),t._v(" sprout"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("seo"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("meta"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n id"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" user"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("id\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Prepare your metadata #}")])]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("sproutseo")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("optimize"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n")])])]),e("h2",{attrs:{id:"custom-elements"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#custom-elements"}},[t._v("#")]),t._v(" Custom Elements")]),t._v(" "),e("p",[t._v("Add integrated Metadata and XML Sitemap support for custom Elements or any Element that does not support URLs via a "),e("RouterLink",{attrs:{to:"/sitemaps/custom-url-enabled-sections.html"}},[t._v("Custom URL-Enabled Section")]),t._v(".")],1)])}),[],!1,null,null,null);a.default=n.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/127.dcc0d5d5.js b/docs/.vuepress/dist/assets/js/127.dcc0d5d5.js new file mode 100644 index 00000000..a2096120 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/127.dcc0d5d5.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[127],{599:function(e,t,a){"use strict";a.r(t);var r=a(34),o=Object(r.a)({},(function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",[e._v("FAQ")]),e._v(" "),a("p",[e._v("Frequently asked questions about Sprout SEO.")]),e._v(" "),a("h2",{attrs:{id:"my-page-is-outputting-the-wrong-metadata"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#my-page-is-outputting-the-wrong-metadata"}},[e._v("#")]),e._v(" My page is outputting the wrong metadata?")]),e._v(" "),a("p",[e._v("This is usually due to an incorrect setting or configuration somewhere. Check your settings and make sure you've assigned the right Element Metadata field to your Field Layout. Make sure your Custom Sections are enabled.")]),e._v(" "),a("div",{pre:!0},[a("p",[e._v("A tricker one to troubleshoot is when matched variable names may take priority over one another in your template. Make sure you don't override the primary variable ("),a("code",[e._v("entry")]),e._v(", "),a("code",[e._v("category")]),e._v(", "),a("code",[e._v("product")]),e._v(", etc.) that Craft or a Custom Element Type makes available to the page, or any other URL-enabled pages:")])]),a("div",{pre:!0},[a("p",[e._v("For example, a line that defines a "),a("code",[e._v("category")]),e._v(" variable:")])]),a("div",{staticClass:"language-twig extra-class"},[a("pre",{pre:!0,attrs:{class:"language-twig"}},[a("code",[a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[e._v("{%")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[e._v("set")]),e._v(" category "),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v("=")]),e._v(" product"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(".")]),e._v("category"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(".")]),e._v("last"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[e._v("%}")])]),e._v("\n")])])]),a("div",{pre:!0},[a("p",[e._v("May override the expected "),a("code",[e._v("category")]),e._v(" variable that Craft makes available to a Category page with URLs and also may override the "),a("code",[e._v("entry")]),e._v(" or "),a("code",[e._v("product")]),e._v(" variables on an Entry or Product Page with URLs.")])]),a("div",{pre:!0},[a("p",[e._v("Avoid using the generic variable names that Craft depends on when possible and use more specific variable names such as "),a("code",[e._v("productCategory")]),e._v(" to avoid unexpected behavior.")])])])}),[],!1,null,null,null);t.default=o.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/128.94f59a60.js b/docs/.vuepress/dist/assets/js/128.94f59a60.js new file mode 100644 index 00000000..3371edd6 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/128.94f59a60.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[128],{601:function(t,a,s){"use strict";s.r(a);var n=s(34),e=Object(n.a)({},(function(){var t=this,a=t.$createElement,s=t._self._c||a;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",[t._v("Global Metadata")]),t._v(" "),s("p",[t._v("Global Metadata is managed from the Globals tab and filled out once when you setup Sprout SEO. Globals ensure you have metadata in place for your website identity and prepare Structured Data for your brand. Globals will help you communicate to the search engines information about your brand identity, how to get in touch, and general details so you always have something relevant about your business in search results and social sharing.")]),t._v(" "),s("h2",{attrs:{id:"website-identity"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#website-identity"}},[t._v("#")]),t._v(" Website Identity")]),t._v(" "),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" globals "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" sprout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("seo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getGlobalMetadata"),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 delimiter punctuation"}},[t._v("%}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" identity "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" globals"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("identity "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" identity"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("name "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" identity"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("alternateName "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" identity"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("description "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" ogImage "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" craft"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("app"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("elements"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getElementById"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("identity"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("image"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" ogImage "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" ogImage"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getUrl"),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 delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" identity"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("keywords "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" identity"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("email "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" identity"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("telephone"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("country "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" identity"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("telephone"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("phone "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" identity"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("latitude "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" identity"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("longitude "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" identity"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("foundingDate"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("date "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" identity"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("priceRange "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Opening Hours Start on Sunday #}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" days "),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 string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("Sunday"),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"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("Monday"),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"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("Tuesday"),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"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("Wednesday"),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"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("Thursday"),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"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("Friday"),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"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("Saturday"),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 delimiter punctuation"}},[t._v("%}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("for")]),t._v(" day "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("in")]),t._v(" identity"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("openingHours "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" days"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("loop"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("index0"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" day"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("open"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("time "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("-"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" day"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("close"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("time "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endfor")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" identity"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("address"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("countryCode "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" identity"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("address"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("administrativeAreaCode "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" identity"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("address"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("locality "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" identity"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("address"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("postalCode "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" identity"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("address"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("address1 "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" identity"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("address"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("address2 "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n")])])]),s("h2",{attrs:{id:"contacts"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#contacts"}},[t._v("#")]),t._v(" Contacts")]),t._v(" "),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" globals "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" sprout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("seo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getGlobalMetadata"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("currentSite"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" contacts "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" globals"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("contacts "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("for")]),t._v(" contact "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("in")]),t._v(" contacts "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" contact"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("contactType "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" contact"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("telephone "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endfor")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n")])])]),s("h3",{attrs:{id:"getcontacts"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getcontacts"}},[t._v("#")]),t._v(" getContacts")]),t._v(" "),s("div",{pre:!0},[s("p",[t._v("You can display a list of the Contacts from your Global Sprout SEO settings on your website using the "),s("code",[t._v("getContacts")]),t._v(" tag:")])]),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" contacts "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" sprout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("seo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getContacts"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("currentSite"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("ul")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("for")]),t._v(" contact "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("in")]),t._v(" contacts "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("li")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("tel:"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" contact"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("telephone "),s("span",{pre:!0,attrs:{class:"token delimiter 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 twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" contact"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("type "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endfor")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),s("h2",{attrs:{id:"social-profiles"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#social-profiles"}},[t._v("#")]),t._v(" Social Profiles")]),t._v(" "),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" globals "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" sprout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("seo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getGlobalMetadata"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("currentSite"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" social "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" globals"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("social "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("for")]),t._v(" profile "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("in")]),t._v(" social "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" profile"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("profileName "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" profile"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("url "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endfor")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n")])])]),s("h3",{attrs:{id:"getsocialprofilestag"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getsocialprofilestag"}},[t._v("#")]),t._v(" getSocialProfilesTag")]),t._v(" "),s("div",{pre:!0},[s("p",[t._v("You can display a list of the Social Profiles in your Global Sprout SEO settings on your website using the "),s("code",[t._v("getSocialProfiles")]),t._v(" tag:")])]),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" socialProfiles "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" sprout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("seo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getSocialProfiles"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("currentSite"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("ul")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("for")]),t._v(" socialProfile "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("in")]),t._v(" socialProfiles "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("li")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" socialProfile"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("url "),s("span",{pre:!0,attrs:{class:"token delimiter 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 twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" socialProfile"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("name "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endfor")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),s("h2",{attrs:{id:"verify-ownership"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#verify-ownership"}},[t._v("#")]),t._v(" Verify Ownership")]),t._v(" "),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" globals "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" sprout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("seo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getGlobalMetadata"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("currentSite"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" ownership "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" globals"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ownership "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("for")]),t._v(" item "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("in")]),t._v(" ownership "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("service "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("metaTag "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" item"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("verificationCode "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endfor")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n")])])]),s("h2",{attrs:{id:"customization"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#customization"}},[t._v("#")]),t._v(" Customization")]),t._v(" "),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" globals "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" sprout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("seo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getGlobalMetadata"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("currentSite"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" settings "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" globals"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("settings "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" settings"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("seoDivider "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" settings"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("defaultOgType "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" settings"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ogTransform "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" settings"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("twitterTransform "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" settings"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("defaultTwitterCard "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" settings"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("appendTitleValueOnHomepage "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" settings"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("appendTitleValue "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n")])])]),s("h2",{attrs:{id:"robots"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#robots"}},[t._v("#")]),t._v(" Robots")]),t._v(" "),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" globals "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" sprout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("seo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getGlobalMetadata"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("currentSite"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" robots "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" globals"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("robots "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("for")]),t._v(" key"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("enabled "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("in")]),t._v(" robots "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" key "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" enabled "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endfor")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n")])])])])}),[],!1,null,null,null);a.default=e.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/129.adf4305f.js b/docs/.vuepress/dist/assets/js/129.adf4305f.js new file mode 100644 index 00000000..ee6f0f35 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/129.adf4305f.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[129],{603:function(t,a,e){"use strict";e.r(a);var s=e(34),r=Object(s.a)({},(function(){var t=this,a=t.$createElement,e=t._self._c||a;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",[t._v("Craft 3")]),t._v(" "),e("p",[t._v("Sprout SEO installation and update instructions for Craft 3.")]),t._v(" "),e("h2",{attrs:{id:"requirements"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),e("ul",[e("li",[t._v("Craft CMS 3.0.0 or a more recent version of Craft")])]),t._v(" "),e("h2",{attrs:{id:"installation-via-plugin-store"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#installation-via-plugin-store"}},[t._v("#")]),t._v(" Installation via Plugin Store")]),t._v(" "),e("ol",[e("li",[t._v("Find the plugin in the Plugin Store in your Craft Control Panel")]),t._v(" "),e("li",[t._v("Go to "),e("em",[t._v("Settings → Plugins")]),t._v(" and select “Install”")])]),t._v(" "),e("h2",{attrs:{id:"installation-via-composer"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#installation-via-composer"}},[t._v("#")]),t._v(" Installation via Composer")]),t._v(" "),e("div",{pre:!0},[e("ol",[e("li",[t._v("Open your terminal and go to your Craft project:"),e("br"),e("code",[t._v("cd /path/to/project")])]),t._v(" "),e("li",[t._v("Then tell Composer to load the plugin:"),e("br"),e("code",[t._v("composer require barrelstrength/sprout-seo")])]),t._v(" "),e("li",[t._v("In the Control Panel, go to "),e("em",[t._v("Settings → Plugins")]),t._v(" and select “Install”")])])]),e("h2",{attrs:{id:"upgrading-to-sprout-seo-4"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#upgrading-to-sprout-seo-4"}},[t._v("#")]),t._v(" Upgrading to Sprout SEO 4")]),t._v(" "),e("p",[t._v("Upgrading to Sprout SEO 4 requires upgrading to Craft 3.")]),t._v(" "),e("div",{staticClass:"custom-block warning"},[e("p",{staticClass:"custom-block-title"},[t._v("BEFORE YOU UPDATE")]),t._v(" "),e("p",[t._v("Make sure you have updated to the latest version of Sprout SEO 3.x before updating to Sprout SEO 4.x for Craft 3. The update from Sprout SEO 2 to 3 on Craft 2 was a larger update than the update from Sprout SEO 3 to 4 when migrating from Craft 2 to Craft 3. See the "),e("RouterLink",{attrs:{to:"/seo/installing-and-updating-craft-2.html#updating-to-sprout-seo-3"}},[t._v("Sprout SEO 3 upgrade documentation")]),t._v(" for more details.")],1)]),t._v(" "),e("h3",{attrs:{id:"breaking-changes"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#breaking-changes"}},[t._v("#")]),t._v(" Breaking changes")]),t._v(" "),e("h4",[t._v("Sections")]),t._v(" "),e("p",[t._v("Sprout SEO 4 removes Section Metadata as it was largely not necessary and can be easily created within an existing site architecture using Singles, Channels, and the provided Metadata field. Any Section Metadata will need to be manually moved to an appropriate section and Element Metadata field.")]),t._v(" "),e("h2",{attrs:{id:"upgrading-to-sprout-seo-4-4"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#upgrading-to-sprout-seo-4-4"}},[t._v("#")]),t._v(" Upgrading to Sprout SEO 4.4")]),t._v(" "),e("p",[t._v("Sprout SEO 4.4 updates how metadata is normalized and processed. For most users, these changes will not be noticed as metadata is generated and output in the same way. For users with custom implementations, please read below.")]),t._v(" "),e("h3",{attrs:{id:"breaking-changes-2"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#breaking-changes-2"}},[t._v("#")]),t._v(" Breaking changes")]),t._v(" "),e("h4",[t._v("Metadata Model")]),t._v(" "),e("div",{pre:!0},[e("p",[t._v("Retrieving metadata from the Metadata model is no longer done directly on the model. Metadata is now stored in Meta Type classes on the Metadata Model's "),e("code",[t._v("$metaTypes")]),t._v(" attribute. Values on the model represent the raw data necessary to calculate the final values. The raw data can be retrieved by calling the "),e("code",[t._v("getRawData()")]),t._v(" method. The calculated values can be retrieved by calling the "),e("code",[t._v("getMetaTagData()")]),t._v(" method.")])]),e("div",{staticClass:"language-php extra-class"},[e("pre",{pre:!0,attrs:{class:"language-php"}},[e("code",[e("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$metadata")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name class-name-fully-qualified"}},[t._v("barrelstrength"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("sproutseo"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("models"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("Metadata")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Get all the static values stored that will be used to calculate the final metadata")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$metadata")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getRawData")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Get a multi-dimensional array metadata by Meta Type with key value arrays of all calculated metadata")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$metadata")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getMetaTagData")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),e("div",{pre:!0},[e("p",[t._v("Previously you could access meta attributes directly on the model. Using the updated Metadata model you will need to retrieve the calculated value by getting the metadata by type and calling the getter for the value you want to retrieve. See all Meta Types in the "),e("code",[t._v("sprout-seo/src/meta")]),t._v(" folder of the plugin.")])]),e("div",{staticClass:"language-php extra-class"},[e("pre",{pre:!0,attrs:{class:"language-php"}},[e("code",[e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# OLD")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$prioritizedMetadataModel")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token property"}},[t._v("title")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# NEW")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$searchMetaType")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$prioritizedMetadataModel")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getMetaTypes")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'search'")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$searchMetaType")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getTitle")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),e("h4",[t._v("Custom Schema")]),t._v(" "),e("p",[t._v("Several values in Custom Schema are often determined by grabbing those metadata values from the Globals or Metadata models. As the Globals and Metadata models have changed, you will want to revisit any Custom Schema and ensure your data is being retrieved and processed properly.")]),t._v(" "),e("p",[t._v("Optimized metadata values should now be retrieved using their getters:")]),t._v(" "),e("div",{staticClass:"language-php extra-class"},[e("pre",{pre:!0,attrs:{class:"language-php"}},[e("code",[e("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$metadata")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$this")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token property"}},[t._v("prioritizedMetadataModel")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# OLD")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$title")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$metadata")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token property"}},[t._v("optimizedTitle")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$description")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$metadata")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token property"}},[t._v("optimizedDescription")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$image")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$metadata")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token property"}},[t._v("optimizedImage")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$keywords")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$metadata")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token property"}},[t._v("optimizedKeywords")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# NEW")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$title")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$metadata")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getOptimizedTitle")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$description")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$metadata")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getOptimizedDescription")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$image")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$metadata")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getOptimizedImage")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$keywords")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$metadata")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("getOptimizedKeywords")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),e("p",[t._v("Previously image IDs were stored as arrays. They are now stored as the image ID as a string.")]),t._v(" "),e("div",{staticClass:"language-php extra-class"},[e("pre",{pre:!0,attrs:{class:"language-php"}},[e("code",[e("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$schema")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$this")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),e("span",{pre:!0,attrs:{class:"token property"}},[t._v("globals")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),e("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'identity'")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# OLD")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$imageId")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$schema")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),e("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'image'")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("??")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("null")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# NEW")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$imageId")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$schema")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),e("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'image'")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("??")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[t._v("null")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),e("h4",[t._v("Globals meta column")]),t._v(" "),e("div",{pre:!0},[e("p",[t._v("The "),e("code",[t._v("sproutseo_globals.meta")]),t._v(" column has been removed and Global Metadata is now calculated at the time it is needed. If you referenced the Globals::$meta column in any custom implementations, you can now just call the getter for the metadata you want from the final Metadata model.")])]),e("h2",{attrs:{id:"upgrading-to-seo-5-0-0-unreleased"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#upgrading-to-seo-5-0-0-unreleased"}},[t._v("#")]),t._v(" Upgrading to SEO 5.0.0 - UNRELEASED")]),t._v(" "),e("div",{pre:!0},[e("p",[t._v("Sprout SEO 5 is a major release the includes an update to the underlying architecture. The Sprout SEO user experience will remain familiar but several conventions have changed. Most notably, the core codebase for "),e("code",[t._v("barrelstrength/sprout-seo")]),t._v(" has been moved to the "),e("code",[t._v("barrelstrength/sprout-base")]),t._v(" package so any custom code, translations, or direct links to the Sprout SEO Control Panel will need to be updated to target the new naming conventions. Plugin-specific Control Panel settings have also moved to the Craft settings area.")])]),e("div",{pre:!0},[e("div",{pre:!0,attrs:{class:"table"}},[e("table",[e("thead",[e("tr",[e("th",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Feature")]),t._v(" "),e("th",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Old Name")]),t._v(" "),e("th",{pre:!0,attrs:{style:"text-align:left"}},[t._v("New Name")])])]),t._v(" "),e("tbody",[e("tr",[e("td",{pre:!0,attrs:{style:"text-align:left"}},[t._v("CP URL")]),t._v(" "),e("td",{pre:!0,attrs:{style:"text-align:left"}},[e("code",[t._v("admin/sprout-seo")])]),t._v(" "),e("td",{pre:!0,attrs:{style:"text-align:left"}},[e("code",[t._v("admin/sprout/seo")])])]),t._v(" "),e("tr",[e("td",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Template Variables")]),t._v(" "),e("td",{pre:!0,attrs:{style:"text-align:left"}},[e("code",[t._v("craft.sproutSeo")])]),t._v(" "),e("td",{pre:!0,attrs:{style:"text-align:left"}},[e("code",[t._v("sprout.seo")])])]),t._v(" "),e("tr",[e("td",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Translation Category")]),t._v(" "),e("td",{pre:!0,attrs:{style:"text-align:left"}},[e("code",[t._v("sprout-seo")])]),t._v(" "),e("td",{pre:!0,attrs:{style:"text-align:left"}},[e("code",[t._v("sprout")])])]),t._v(" "),e("tr",[e("td",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Controller Namespace")]),t._v(" "),e("td",{pre:!0,attrs:{style:"text-align:left"}},[e("code",[t._v("barrelstrength/sproutseo/controllers")])]),t._v(" "),e("td",{pre:!0,attrs:{style:"text-align:left"}},[e("code",[t._v("barrelstrength/sproutbase/app/seo/controllers")])])]),t._v(" "),e("tr",[e("td",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Service Namespace")]),t._v(" "),e("td",{pre:!0,attrs:{style:"text-align:left"}},[e("code",[t._v("barrelstrength/sproutseo/services")])]),t._v(" "),e("td",{pre:!0,attrs:{style:"text-align:left"}},[e("code",[t._v("barrelstrength/sproutbase/app/seo/services")])])]),t._v(" "),e("tr",[e("td",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Optimize Service")]),t._v(" "),e("td",{pre:!0,attrs:{style:"text-align:left"}},[e("code",[t._v("SproutSeo::$app->optimize")])]),t._v(" "),e("td",{pre:!0,attrs:{style:"text-align:left"}},[e("code",[t._v("SproutBase::$app->optimizeMetadata")])])]),t._v(" "),e("tr",[e("td",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Optimize Service")]),t._v(" "),e("td",{pre:!0,attrs:{style:"text-align:left"}},[e("code",[t._v("SproutSeo::$app->schema")])]),t._v(" "),e("td",{pre:!0,attrs:{style:"text-align:left"}},[e("code",[t._v("SproutBase::$app->schemaMetadata")])])])])])])])])}),[],!1,null,null,null);a.default=r.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/13.bf38e594.js b/docs/.vuepress/dist/assets/js/13.bf38e594.js new file mode 100644 index 00000000..58dcb5d7 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/13.bf38e594.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[13],{407:function(t,e,a){},478:function(t,e,a){"use strict";a(407)},487:function(t,e,a){"use strict";a.r(e);var n={name:"CodeBlock",props:{title:{type:String,required:!0},active:{type:Boolean,default:!1}},mounted:function(){this.$parent&&this.$parent.loadTabs&&this.$parent.loadTabs()}},i=(a(478),a(34)),s=Object(i.a)(n,(function(){var t=this.$createElement;return(this._self._c||t)("div",{staticClass:"theme-code-block",class:{"theme-code-block__active":this.active}},[this._t("default")],2)}),[],!1,null,"759a7d02",null);e.default=s.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/130.99d8d93b.js b/docs/.vuepress/dist/assets/js/130.99d8d93b.js new file mode 100644 index 00000000..7f0e6532 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/130.99d8d93b.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[130],{604:function(t,e,a){"use strict";a.r(e);var s=a(34),n=Object(s.a)({},(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",[t._v("Settings")]),t._v(" "),a("div",{pre:!0},[a("p",[t._v("Settings can be managed in the Control Panel "),a("em",[t._v("Sprout SEO → Settings")]),t._v(" or via a config file in "),a("code",[t._v("config/sprout-seo.php")]),t._v(". As Redirect and Sitemap functionality are managed in separate modules, for file-based config overrides you'll want to use the config overrides for each respective module: "),a("code",[t._v("config/sprout-redirects.php")]),t._v(" and "),a("code",[t._v("config/sprout-sitemaps.php")]),t._v(". See below for links to the documentation of each module.")])]),a("h2",{attrs:{id:"metadata"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#metadata"}},[t._v("#")]),t._v(" Metadata")]),t._v(" "),a("div",{staticClass:"language-php extra-class"},[a("pre",{pre:!0,attrs:{class:"language-php"}},[a("code",[a("span",{pre:!0,attrs:{class:"token php language-php"}},[a("span",{pre:!0,attrs:{class:"token delimiter important"}},[t._v("")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'Sprout SEO'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// The maximum number of characters to allow for Meta Description fields")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'maxMetaDescriptionLength'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("160")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Sprout SEO prepares and outputs all of your metadata in your template")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'enableRenderMetadata'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Make a global `metadata` variable available to all of your templates")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'useMetadataVariable'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant boolean"}},[t._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// The name of the metadata variable available to your templates")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 'metadataVariable' => 'metadata'")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Display field handle next to the field name in your Element Metadata ")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// field settings")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'displayFieldHandles'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant boolean"}},[t._v("false")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])]),a("h2",{attrs:{id:"redirects"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#redirects"}},[t._v("#")]),t._v(" Redirects")]),t._v(" "),a("ul",[a("li",[t._v("See "),a("RouterLink",{attrs:{to:"/redirects/plugin-settings.html"}},[t._v("Sprout Redirects")]),t._v(" for documentation of the Redirects settings")],1)]),t._v(" "),a("h2",{attrs:{id:"sent-email"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#sent-email"}},[t._v("#")]),t._v(" Sent Email")]),t._v(" "),a("ul",[a("li",[t._v("See "),a("RouterLink",{attrs:{to:"/sitemaps/plugin-settings.html"}},[t._v("Sprout Sitemaps")]),t._v(" for documentation of the Sitemap settings")],1)])])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/131.384e94fa.js b/docs/.vuepress/dist/assets/js/131.384e94fa.js new file mode 100644 index 00000000..8ecdc559 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/131.384e94fa.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[131],{602:function(t,s,a){"use strict";a.r(s);var n=a(34),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",[t._v("Template Overrides")]),t._v(" "),a("p",[t._v("Template Overrides allow you to modify your metadata in your Craft templates. While this can help with some scenarios, it is not always ideal as it makes it harder to give content authors control over all metadata in the Control Panel and increases the complexity of the codebase that needs to be managed over time.")]),t._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[t._v("PROCEED WITH CAUTION")]),t._v(" "),a("p",[t._v("Template Overrides should be considered a last resort. If you feel you have no other options and need to use them, reach out and "),a("a",{attrs:{href:"mailto:sprout@barrelstrengthdesign.com"}},[t._v("let us know")]),t._v(". We'd love to understand your use case so we can improve Sprout SEO and make it less likely you need to use Template Overrides in the future.")])]),t._v(" "),a("h2",{attrs:{id:"templating"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#templating"}},[t._v("#")]),t._v(" Templating")]),t._v(" "),a("p",[t._v("Metadata defined in templates gets the highest priority when metadata is processed.")]),t._v(" "),a("div",{pre:!0},[a("p",[t._v("The "),a("code",[t._v("meta")]),t._v(" variable allows you to override metadata within templates. The "),a("code",[t._v("meta")]),t._v(" variable must use the "),a("code",[t._v("do")]),t._v(" tag syntax and must be run "),a("em",[t._v("before")]),t._v(" the "),a("code",[t._v("{% sproutseo 'optimize' %}")]),t._v(" tag in your templates.")])]),a("h3",{attrs:{id:"a-simple-page"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#a-simple-page"}},[t._v("#")]),t._v(" A Simple Page")]),t._v(" "),a("h4",[t._v("page.twig")]),t._v(" "),a("div",{staticClass:"language-twig extra-class"},[a("pre",{pre:!0,attrs:{class:"language-twig"}},[a("code",[a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("do")]),t._v(" sprout"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("seo"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("meta"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n title"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" entry"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("title"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("sproutseo")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("optimize"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n")])])]),a("h3",{attrs:{id:"extending-a-layout"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#extending-a-layout"}},[t._v("#")]),t._v(" Extending a Layout")]),t._v(" "),a("h4",[t._v("_layout.twig")]),t._v(" "),a("div",{staticClass:"language-twig extra-class"},[a("pre",{pre:!0,attrs:{class:"language-twig"}},[a("code",[a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("sproutseo")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("optimize"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n")])])]),a("h4",[t._v("section/_entry.twig (extends your layout)")]),t._v(" "),a("p",[t._v("Below is an example of all of the values you can override.")]),t._v(" "),a("div",{staticClass:"language-twig extra-class"},[a("pre",{pre:!0,attrs:{class:"language-twig"}},[a("code",[a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("do")]),t._v(" sprout"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("seo"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("meta"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n title"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" entry"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("title"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n description"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" entry"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("body"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("striptags"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("slice"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("150")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n canonical"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n robots"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("noindex,nofollow"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n region"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n placename"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n latitude"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n longitude"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n ogTitle"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n ogType"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n ogUrl"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n ogImage"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n ogImageWidth"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n ogImageHeight"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n ogImageType"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" \n ogSiteName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n ogAuthor"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n ogPublisher"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" \n ogDescription"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n ogAudio"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n ogVideo"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n ogLocale"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n twitterCard"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n twitterSite"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n twitterCreator"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n twitterTitle"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n twitterDescription"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n twitterUrl"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n twitterImage"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n twitterPlayer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n twitterPlayerStream"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" \n twitterPlayerStreamContentType"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" \n twitterPlayerWidth"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" \n twitterPlayerHeight"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" \n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n")])])])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/132.1087666f.js b/docs/.vuepress/dist/assets/js/132.1087666f.js new file mode 100644 index 00000000..4f17fa72 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/132.1087666f.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[132],{610:function(t,e,a){"use strict";a.r(e);var s=a(34),n=Object(s.a)({},(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",[t._v("Custom Sections")]),t._v(" "),a("p",[t._v("Custom Sections allow you to add arbitrary page URLs to your XML Sitemap and manage metadata for pages that may not be otherwise supported using the URL-Enabled Sections or Element Metadata field.")]),t._v(" "),a("div",{staticClass:"custom-block danger"},[a("p",{staticClass:"custom-block-title"},[t._v("DANGER")]),t._v(" "),a("p",[t._v("Custom Sections have been deprecated in Sprout SEO 4.")]),t._v(" "),a("p",[t._v("We strongly recommend using the "),a("RouterLink",{attrs:{to:"/seo/element-metadata-field.html"}},[t._v("Element Metadata Field")]),t._v(" instead. The same functionality can be achieved with the right configuration and upgrading to the latest version of Sprout SEO will be easier if you do. Custom Pages are now handled entirely in the Sitemaps section.")],1)]),t._v(" "),a("p",[t._v("Consider a User Profile section where all User data is managed in the Users section, however no specific page exists for the listing page of all the User Profiles on the front-end. In this case, you may want to create a Custom Section for your User Profile listing page.")]),t._v(" "),a("p",[t._v("Custom Sections probably only need to be used for more advanced situations. Managing metadata and XML sitemaps via the default URL-Enabled Settings will likely require less overhead to get setup and be easier for the average user to understand.")]),t._v(" "),a("p",[t._v("Custom Sections can be enabled in Sprout SEO's Advanced settings and will require additional, manual updates to your template to add to the metadata cascade.")]),t._v(" "),a("div",{pre:!0},[a("p",[t._v("To indicate that you want a specific Custom Section added to the metadata processed in a template, use the Sprout SEO "),a("code",[t._v("meta")]),t._v(" tag and set the "),a("code",[t._v("section")]),t._v(" attribute to the handle of your Custom Section. All custom section handles should be prefixed with "),a("code",[t._v("sproutseo_section")]),t._v(":")])]),a("div",{staticClass:"language-twig extra-class"},[a("pre",{pre:!0,attrs:{class:"language-twig"}},[a("code",[a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("do")]),t._v(" sprout"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("seo"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("meta"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n section"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("sproutseo_section:customSectionHandle"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n")])])]),a("p",[t._v("By default, the value you use in the Custom Sections URL setting will be used for the URL. This URL is not monitored in any way dynamically, only output in your metadata when you specifically tell it to be output with the code above.")]),t._v(" "),a("p",[t._v("As you can only define one URL in a Custom Section, if you plans to use the Custom Section as fallback metadata in more than one template, you can further customize your meta override tag to output a unique URL on each page where the override exists:")]),t._v(" "),a("div",{staticClass:"language-twig extra-class"},[a("pre",{pre:!0,attrs:{class:"language-twig"}},[a("code",[a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("do")]),t._v(" sprout"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("seo"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("meta"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n section"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("sproutseo_section:customSectionHandle"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n canonical"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" craft"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("url"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n ogUrl"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" craft"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("url"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n twitterUrl"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" craft"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("request"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("url\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n")])])])])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/133.ba0c0359.js b/docs/.vuepress/dist/assets/js/133.ba0c0359.js new file mode 100644 index 00000000..225a6224 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/133.ba0c0359.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[133],{607:function(e,t,n){"use strict";n.r(t);var a=n(34),o=Object(a.a)({},(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[n("h1",[e._v("URL-Enabled Sections")]),e._v(" "),n("p",[e._v("Sprout SEO does not just help you manage extensive metadata for Entries. It can also help you manage metadata for all URL-Enabled Element Types. This includes:")]),e._v(" "),n("ul",[n("li",[e._v("Entries")]),e._v(" "),n("li",[e._v("Categories")]),e._v(" "),n("li",[e._v("Craft Commerce Products")])]),e._v(" "),n("p",[e._v("Support can be added for additional Element Types using the URL-Enabled Section Type API.")]),e._v(" "),n("p",[e._v("URL-Enabled Section Types are an advanced and powerful integration that helps us standardize differences across Element Types, so Sprout SEO can treat all of your Elements like you do – as content. This enables users to easily manage metadata in the same way across all element types and easily add any URL-Enabled content to an XML sitemap.")]),e._v(" "),n("p",[e._v("You can create your own URL-Enabled Section Type by:")]),e._v(" "),n("div",{pre:!0},[n("ol",[n("li",[e._v("Extending "),n("code",[e._v("UrlEnabledSectionType")]),e._v(" with your Custom URL-Enabled Section Type")]),e._v(" "),n("li",[e._v("Register your Custom URL-Enabled Section Type using the "),n("code",[e._v("registerSproutSeoUrlEnabledSectionTypes()")]),e._v(" hook")])])]),n("p",[e._v("The best place to get started with building your own URL Enabled Section Type is by looking at the existing integrations withing Sprout SEO (sproutseo/integrations/sproutseo/sectiontypes)")])])}),[],!1,null,null,null);t.default=o.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/134.c744e8d5.js b/docs/.vuepress/dist/assets/js/134.c744e8d5.js new file mode 100644 index 00000000..db74c604 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/134.c744e8d5.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[134],{609:function(t,s,n){"use strict";n.r(s);var a=n(34),e=Object(a.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("h1",[t._v("Settings")]),t._v(" "),n("div",{pre:!0},[n("p",[t._v("Settings can be managed in the Control Panel "),n("em",[t._v("Sprout Sitemaps → Settings")]),t._v(" or via a config file in "),n("code",[t._v("config/sprout-sitemaps.php")])])]),n("div",{staticClass:"language-php extra-class"},[n("pre",{pre:!0,attrs:{class:"language-php"}},[n("code",[n("span",{pre:!0,attrs:{class:"token php language-php"}},[n("span",{pre:!0,attrs:{class:"token delimiter important"}},[t._v("")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'Sprout Sitemaps'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Output a dynamic XML sitemap of all pages in your URL-Enabled Sections.")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'enableDynamicSitemaps'")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token constant boolean"}},[t._v("true")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// The number of items that display on each page of your sitemap.")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'totalElementsPerSitemap'")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("500")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Generate a single, multilingual sitemap.xml file for each Site Group.")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'enableMultilingualSitemaps'")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token constant boolean"}},[t._v("false")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Add a section on the Sitemaps tab to manage Custom Pages that exist")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// outside of any URL-Enabled Sections.")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'enableCustomSections'")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token constant boolean"}},[t._v("false")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/135.0cea6223.js b/docs/.vuepress/dist/assets/js/135.0cea6223.js new file mode 100644 index 00000000..ab2753d1 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/135.0cea6223.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[135],{608:function(t,a,s){"use strict";s.r(a);var e=s(34),n=Object(e.a)({},(function(){var t=this,a=t.$createElement,s=t._self._c||a;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",[t._v("Sitemaps")]),t._v(" "),s("p",[t._v("Generate sitemaps for all of your URL-enabled content for one or more languages.")]),t._v(" "),s("p",[t._v("Sitemaps currently support the following types of content:")]),t._v(" "),s("ol",[s("li",[t._v("Entries")]),t._v(" "),s("li",[t._v("Categories")]),t._v(" "),s("li",[t._v("Craft Commerce Products")]),t._v(" "),s("li",[t._v("Custom Page URLs")])]),t._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),s("p",[t._v("Plugins can add XML Sitemap support for Custom Elements. See the developer documentation for "),s("RouterLink",{attrs:{to:"/sitemaps/custom-url-enabled-sections.html"}},[t._v("URL-Enabled Sections")]),t._v(".")],1)]),t._v(" "),s("h2",{attrs:{id:"section-settings"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#section-settings"}},[t._v("#")]),t._v(" Section Settings")]),t._v(" "),s("p",[t._v("All of your URL-enabled content types will appear on the Sitemap Settings page with the following settings:")]),t._v(" "),s("div",{staticClass:"table"},[s("table",[s("thead",[s("tr",[s("th",{staticStyle:{"text-align":"left"}},[t._v("Setting")]),t._v(" "),s("th",{staticStyle:{"text-align":"left"}},[t._v("Description")])])]),t._v(" "),s("tbody",[s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("Enabled")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("Enable it or disable it in your sitemap")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("Priority")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("Update the Priority of the items in the Section relative to the other items in your Sitemap")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("Change Frequency")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("Update the Change Frequency of the items in the Section relative to other items in your Sitemap")])])])])]),t._v(" "),s("h2",{attrs:{id:"sitemap-xml"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#sitemap-xml"}},[t._v("#")]),t._v(" Sitemap XML")]),t._v(" "),s("p",[t._v("Your sitemap will consist of two or more XML Sitemap files. This will include a Sitemap Index file that lists all relevant sitemaps for your website and individual XML Sitemap files for each respective section. Individual Sitemap files will be broken into multiple files when the number of entries is more than the "),s("em",[t._v("Total Elements Per Sitemap")]),t._v(" setting value.")]),t._v(" "),s("h3",{attrs:{id:"sitemap-index"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#sitemap-index"}},[t._v("#")]),t._v(" Sitemap Index")]),t._v(" "),s("div",{pre:!0},[s("p",[t._v("Your Sitemap Index will be output when you visit the URL: "),s("code",[t._v("/sitemap.xml")])])]),s("div",{staticClass:"language-xml Craft 3 extra-class"},[s("pre",{pre:!0,attrs:{class:"language-xml"}},[s("code",[s("span",{pre:!0,attrs:{class:"token prolog"}},[t._v('')]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("sitemapindex")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("xmlns")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("http://www.sitemaps.org/schemas/sitemap/0.9"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("sitemap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("loc")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("{{ siteUrl }}sitemap-singles.xml"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("lastmod")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("{{ now|date('Y-m-d') }}"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("sitemap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("loc")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("{{ siteUrl }}sitemap-G76D5Oizt4fH-1.xml"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("lastmod")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("{{ now|date('Y-m-d') }}"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("sitemap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("loc")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("{{ siteUrl }}sitemap-9O2U0q1gdvPM-1.xml"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("lastmod")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("{{ now|date('Y-m-d') }}"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("sitemap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("loc")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("{{ siteUrl }}sitemap-1TGQYAvdWwEU-1.xml"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("lastmod")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("{{ now|date('Y-m-d') }}"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("sitemap")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("loc")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("{{ siteUrl }}sitemap-custom-pages.xml"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("lastmod")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("{{ now|date('Y-m-d') }}"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[t._v("Note")]),t._v(" "),s("p",[t._v("Individual XML Sitemap URLs will use a unique string of characters to hide the internal naming convention of your Craft content architecture. When "),s("code",[t._v("devMode")]),t._v(" is enabled, a query string will be appended to Sitemap URLs so that you can more easily confirm what sections are appearing in the sitemap.")])]),t._v(" "),s("h3",{attrs:{id:"section-specific-sitemaps-single-language"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#section-specific-sitemaps-single-language"}},[t._v("#")]),t._v(" Section-specific Sitemaps (Single Language)")]),t._v(" "),s("p",[t._v("Each individual sitemap will list the URLs for the content in your URL-Enabled Sections.")]),t._v(" "),s("div",{staticClass:"language- extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[t._v('\n\n \n http://website.com/example-url\n 2017-08-08T03:08:03Z\n weekly\n 0.5 \n \n \n http://website.com/example-url2\n 2017-08-08T03:08:03Z\n weekly\n 0.5 \n \n\n')])])]),s("h3",{attrs:{id:"section-specific-sitemaps-multi-language"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#section-specific-sitemaps-multi-language"}},[t._v("#")]),t._v(" Section-specific Sitemaps (Multi-language)")]),t._v(" "),s("p",[t._v("If you have a multi-language site, your sitemap will adjust to reference URLs for all related content across languages.")]),t._v(" "),s("div",{staticClass:"language- extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[t._v('\n\n \n http://website.com/example-url\n 2017-08-08T03:08:03Z\n weekly\n 0.5\n \n \n \n \n \n http://website.com/example-url2\n 2017-08-08T03:08:03Z\n weekly\n 0.5\n \n \n \n \n\n')])])]),s("h2",{attrs:{id:"custom-pages"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#custom-pages"}},[t._v("#")]),t._v(" Custom Pages")]),t._v(" "),s("p",[t._v("If you have more advanced Sitemap needs, Sprout SEO's Sitemap tool allows you to add any number of Custom Pages that will also be output in your Sitemap. Custom Pages can be managed in Multi-Site sitemaps on a per-site basis.")]),t._v(" "),s("p",[t._v("Enable Custom Pages management features in the Plugin Settings.")])])}),[],!1,null,null,null);a.default=n.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/136.fdff940c.js b/docs/.vuepress/dist/assets/js/136.fdff940c.js new file mode 100644 index 00000000..68e4fb78 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/136.fdff940c.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[136],{615:function(e,t,o){"use strict";o.r(t);var n=o(34),a=Object(n.a)({},(function(){var e=this,t=e.$createElement,o=e._self._c||t;return o("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[o("h1",[e._v("Pricing")]),e._v(" "),o("p",[e._v("Our team has invested over 10,000 hours into Sprout plugins for Craft CMS and we have many more planned to make sure they are supported and improved. We try to make them available to you at a reasonable rate and hope that you benefit from them by saving many hours on your projects and being able to build elegant, flexible solutions to the problems you face.")]),e._v(" "),o("p",[e._v("If you or your client can justify the price of investing in one of our plugins for your project, please purchase a commercial license via the "),o("a",{attrs:{href:"https://plugins.craftcms.com/developer/169",target:"_blank",rel:"noopener noreferrer"}},[e._v("Craft Plugin Store"),o("OutboundLink")],1),e._v(". It helps ensure we can continue doing what we're doing and be available to offer reliable support.")]),e._v(" "),o("h2",{attrs:{id:"discounts-donations"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#discounts-donations"}},[e._v("#")]),e._v(" Discounts & Donations")]),e._v(" "),o("p",[e._v("We understand that many projects have budget considerations. If you feel your project falls in this category, and would still like to use one of our commercial plugins we will match any discounts that you received from Pixel & Tonic for Craft CMS and we also consider standalone license donations.")]),e._v(" "),o("div",{staticClass:"custom-block tip"},[o("p",{staticClass:"custom-block-title"},[e._v("License Requests")]),e._v(" "),o("p",[e._v("For discount and donation requests, please send us a note at "),o("a",{attrs:{href:"mailto:sprout@barrelstrengthdesign.com?subject=Discount%20or%20Donation%20Request"}},[e._v("sprout@barrelstrengthdesign.com")]),e._v(" and tell us a little bit about your project and which plugins you would like to use.")])])])}),[],!1,null,null,null);t.default=a.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/137.0e9e6b0e.js b/docs/.vuepress/dist/assets/js/137.0e9e6b0e.js new file mode 100644 index 00000000..04eeaf34 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/137.0e9e6b0e.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[137],{611:function(t,e,a){"use strict";a.r(e);var r=a(34),s=Object(r.a)({},(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",[t._v("Road Map")]),t._v(" "),a("p",[t._v("The Sprout Plugins are in the process of being updated for Craft 4 and integrating many of the new features that Craft 4 makes available to custom Elements. We are taking the opportunity during this major release to simplify our codebase, migration process, and our non-core plugins.")]),t._v(" "),a("p",[t._v("We unfortunately can't provide any release dates, estimates, or guesses until we are ready to release and any comments we make to this end may be subject to change but have ordered the plugins below in the order we expect them to be released.")]),t._v(" "),a("p",[t._v("Please subscribe to the linked Craft 4 support issue below for any plugins that you wish to receive an update on once we release. If you have a time-sensitive need, you may have to roll your own update for now. We imagine this uncertainty will be frustrating to some, and hope the wait will be worth it for those who are able.")]),t._v(" "),a("h2",{attrs:{id:"sprout-marketing-suite"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#sprout-marketing-suite"}},[t._v("#")]),t._v(" Sprout Marketing Suite")]),t._v(" "),a("div",{staticClass:"table"},[a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("Plugin")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("Upgrade Status")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("Follow for Updates")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("Sprout Data Studio")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Released")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[a("RouterLink",{attrs:{to:"/data-studio/"}},[t._v("Docs")])],1)]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("Sprout Redirects")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Released")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[a("RouterLink",{attrs:{to:"/redirects/"}},[t._v("Docs")])],1)]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("Sprout Email")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("In progress")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[a("a",{attrs:{href:"https://github.com/barrelstrength/craft-sprout-email/issues/186",target:"_blank",rel:"noopener noreferrer"}},[t._v("Github Issue"),a("OutboundLink")],1)])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("Sprout Forms")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("In progress")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[a("a",{attrs:{href:"https://github.com/barrelstrength/craft-sprout-forms/issues/612",target:"_blank",rel:"noopener noreferrer"}},[t._v("Github Issue"),a("OutboundLink")],1)])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("Sprout Sitemaps")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("In progress")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[a("a",{attrs:{href:"https://github.com/barrelstrength/craft-sprout-sitemaps/issues/17",target:"_blank",rel:"noopener noreferrer"}},[t._v("Github Issue"),a("OutboundLink")],1)])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("Sprout SEO")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("In progress")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[a("a",{attrs:{href:"https://github.com/barrelstrength/craft-sprout-seo/issues/262",target:"_blank",rel:"noopener noreferrer"}},[t._v("Github Issue"),a("OutboundLink")],1)])])])])]),t._v(" "),a("p",[a("em",[t._v("If you do not see a plugin listed here, we probably have no plans to migrate it to Craft 4. Check the Github repository for the plugin you are curious about for more details.")])])])}),[],!1,null,null,null);e.default=s.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/138.414a06a6.js b/docs/.vuepress/dist/assets/js/138.414a06a6.js new file mode 100644 index 00000000..96f97bca --- /dev/null +++ b/docs/.vuepress/dist/assets/js/138.414a06a6.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[138],{613:function(e,t,s){"use strict";s.r(t);var o=s(34),r=Object(o.a)({},(function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[s("h1",[e._v("Security")]),e._v(" "),s("p",[e._v("Please do not post security issues publicly. We appreciate your efforts to responsibly disclose your findings, and will make every effort to acknowledge your contributions.")]),e._v(" "),s("p",[e._v("To report a security issue, email "),s("a",{attrs:{href:"mailto:sprout@barrelstrengthdesign.com?subject=SECURITY"}},[e._v("sprout@barrelstrengthdesign.com")]),e._v(" and, in the subject line, include the word "),s("strong",[e._v('"SECURITY"')]),e._v(".")]),e._v(" "),s("p",[e._v("We'll respond as soon as we can, and will keep you updated throughout the process.")])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/139.518de489.js b/docs/.vuepress/dist/assets/js/139.518de489.js new file mode 100644 index 00000000..e9050fc1 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/139.518de489.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[139],{614:function(t,e,r){"use strict";r.r(e);var s=r(34),a=Object(s.a)({},(function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[r("h1",[t._v("Support")]),t._v(" "),r("p",[t._v("Sprout provides dedicated support for license holders and "),r("RouterLink",{attrs:{to:"/support/training.html"}},[t._v("free training")]),t._v(".")],1),t._v(" "),r("h2",{attrs:{id:"bugs-feature-requests"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#bugs-feature-requests"}},[t._v("#")]),t._v(" Bugs & Feature Requests")]),t._v(" "),r("p",[t._v("Running into an issue while upgrading? Read the "),r("RouterLink",{attrs:{to:"/configuration/updates.html"}},[t._v("Update Guides")]),t._v(" for more information on the latest updates and releases.")],1),t._v(" "),r("div",{staticClass:"table"},[r("table",[r("thead",[r("tr",[r("th",{staticStyle:{"text-align":"left"}},[t._v("Plugin")]),t._v(" "),r("th",{staticStyle:{"text-align":"left"}},[t._v("Bugs")]),t._v(" "),r("th",{staticStyle:{"text-align":"left"}},[t._v("Feature Requests")]),t._v(" "),r("th",{staticStyle:{"text-align":"left"}},[t._v("Uncategorized")])])]),t._v(" "),r("tbody",[r("tr",[r("td",{staticStyle:{"text-align":"left"}},[t._v("Sprout Forms")]),t._v(" "),r("td",{staticStyle:{"text-align":"left"}},[t._v("Craft "),r("a",{attrs:{href:"https://github.com/barrelstrength/craft-sprout-forms/issues?q=is%3Aissue+is%3Aopen+label%3Abug+label%3Ac4",target:"_blank",rel:"noopener noreferrer"}},[t._v("v4"),r("OutboundLink")],1),t._v(" | "),r("a",{attrs:{href:"https://github.com/barrelstrength/craft-sprout-forms/issues?q=is%3Aissue+is%3Aopen+label%3Abug+label%3Ac3",target:"_blank",rel:"noopener noreferrer"}},[t._v("v3"),r("OutboundLink")],1)]),t._v(" "),r("td",{staticStyle:{"text-align":"left"}},[r("a",{attrs:{href:"https://github.com/barrelstrength/craft-sprout-forms/issues?q=is%3Aopen+is%3Aissue+label%3Afeature",target:"_blank",rel:"noopener noreferrer"}},[t._v("View All"),r("OutboundLink")],1)]),t._v(" "),r("td",{staticStyle:{"text-align":"left"}},[r("a",{attrs:{href:"https://github.com/barrelstrength/craft-sprout-forms/issues?q=is%3Aissue+is%3Aopen+no%3Alabel",target:"_blank",rel:"noopener noreferrer"}},[t._v("View All"),r("OutboundLink")],1)])]),t._v(" "),r("tr",[r("td",{staticStyle:{"text-align":"left"}},[t._v("Sprout SEO")]),t._v(" "),r("td",{staticStyle:{"text-align":"left"}},[t._v("Craft "),r("a",{attrs:{href:"https://github.com/barrelstrength/craft-sprout-seo/issues?&q=is%3Aissue+is%3Aopen+label%3Abug+label%3Ac4",target:"_blank",rel:"noopener noreferrer"}},[t._v("v4"),r("OutboundLink")],1),t._v(" | "),r("a",{attrs:{href:"https://github.com/barrelstrength/craft-sprout-seo/issues?&q=is%3Aissue+is%3Aopen+label%3Abug+label%3Ac3",target:"_blank",rel:"noopener noreferrer"}},[t._v("v3"),r("OutboundLink")],1)]),t._v(" "),r("td",{staticStyle:{"text-align":"left"}},[r("a",{attrs:{href:"https://github.com/barrelstrength/craft-sprout-seo/issues?q=is%3Aopen+is%3Aissue+label%3Afeature",target:"_blank",rel:"noopener noreferrer"}},[t._v("View All"),r("OutboundLink")],1)]),t._v(" "),r("td",{staticStyle:{"text-align":"left"}},[r("a",{attrs:{href:"https://github.com/barrelstrength/craft-sprout-seo/issues?q=is%3Aissue+is%3Aopen+no%3Alabel",target:"_blank",rel:"noopener noreferrer"}},[t._v("View All"),r("OutboundLink")],1)])]),t._v(" "),r("tr",[r("td",{staticStyle:{"text-align":"left"}},[t._v("Sprout Redirects")]),t._v(" "),r("td",{staticStyle:{"text-align":"left"}},[t._v("Craft "),r("a",{attrs:{href:"https://github.com/barrelstrength/craft-sprout-redirects/issues?q=is%3Aissue+is%3Aopen+label%3Abug+label%3Ac4",target:"_blank",rel:"noopener noreferrer"}},[t._v("v4"),r("OutboundLink")],1),t._v(" | "),r("a",{attrs:{href:"https://github.com/barrelstrength/craft-sprout-redirects/issues?q=is%3Aissue+is%3Aopen+label%3Abug+label%3Ac3",target:"_blank",rel:"noopener noreferrer"}},[t._v("v3"),r("OutboundLink")],1)]),t._v(" "),r("td",{staticStyle:{"text-align":"left"}},[r("a",{attrs:{href:"https://github.com/barrelstrength/craft-sprout-redirects/issues?q=is%3Aopen+is%3Aissue+label%3Afeature",target:"_blank",rel:"noopener noreferrer"}},[t._v("View All"),r("OutboundLink")],1)]),t._v(" "),r("td",{staticStyle:{"text-align":"left"}},[r("a",{attrs:{href:"https://github.com/barrelstrength/craft-sprout-redirects/issues?q=is%3Aissue+is%3Aopen+no%3Alabel",target:"_blank",rel:"noopener noreferrer"}},[t._v("View All"),r("OutboundLink")],1)])]),t._v(" "),r("tr",[r("td",{staticStyle:{"text-align":"left"}},[t._v("Sprout Sitemaps")]),t._v(" "),r("td",{staticStyle:{"text-align":"left"}},[t._v("Craft "),r("a",{attrs:{href:"https://github.com/barrelstrength/craft-sprout-sitemaps/issues?q=is%3Aissue+is%3Aopen+label%3Abug+label%3Ac4",target:"_blank",rel:"noopener noreferrer"}},[t._v("v4"),r("OutboundLink")],1),t._v(" | "),r("a",{attrs:{href:"https://github.com/barrelstrength/craft-sprout-sitemaps/issues?q=is%3Aissue+is%3Aopen+label%3Abug+label%3Ac3",target:"_blank",rel:"noopener noreferrer"}},[t._v("v3"),r("OutboundLink")],1)]),t._v(" "),r("td",{staticStyle:{"text-align":"left"}},[r("a",{attrs:{href:"https://github.com/barrelstrength/craft-sprout-sitemaps/issues?q=is%3Aopen+is%3Aissue+label%3Afeature",target:"_blank",rel:"noopener noreferrer"}},[t._v("View All"),r("OutboundLink")],1)]),t._v(" "),r("td",{staticStyle:{"text-align":"left"}},[r("a",{attrs:{href:"https://github.com/barrelstrength/craft-sprout-sitemaps/issues?q=is%3Aissue+is%3Aopen+no%3Alabel",target:"_blank",rel:"noopener noreferrer"}},[t._v("View All"),r("OutboundLink")],1)])]),t._v(" "),r("tr",[r("td",{staticStyle:{"text-align":"left"}},[t._v("Sprout Email")]),t._v(" "),r("td",{staticStyle:{"text-align":"left"}},[t._v("Craft "),r("a",{attrs:{href:"https://github.com/barrelstrength/craft-sprout-email/issues?q=is%3Aissue+is%3Aopen+label%3Abug+label%3Ac4",target:"_blank",rel:"noopener noreferrer"}},[t._v("v4"),r("OutboundLink")],1),t._v(" | "),r("a",{attrs:{href:"https://github.com/barrelstrength/craft-sprout-email/issues?q=is%3Aissue+is%3Aopen+label%3Abug+label%3Ac3",target:"_blank",rel:"noopener noreferrer"}},[t._v("v3"),r("OutboundLink")],1)]),t._v(" "),r("td",{staticStyle:{"text-align":"left"}},[r("a",{attrs:{href:"https://github.com/barrelstrength/craft-sprout-email/issues?q=is%3Aopen+is%3Aissue+label%3Afeature",target:"_blank",rel:"noopener noreferrer"}},[t._v("View All"),r("OutboundLink")],1)]),t._v(" "),r("td",{staticStyle:{"text-align":"left"}},[r("a",{attrs:{href:"https://github.com/barrelstrength/craft-sprout-email/issues?q=is%3Aissue+is%3Aopen+no%3Alabel",target:"_blank",rel:"noopener noreferrer"}},[t._v("View All"),r("OutboundLink")],1)])]),t._v(" "),r("tr",[r("td",{staticStyle:{"text-align":"left"}},[t._v("Sprout Reports")]),t._v(" "),r("td",{staticStyle:{"text-align":"left"}},[t._v("Craft "),r("a",{attrs:{href:"https://github.com/barrelstrength/craft-sprout-reports/issues?q=is%3Aissue+is%3Aopen+label%3Abug+label%3Ac4",target:"_blank",rel:"noopener noreferrer"}},[t._v("v4"),r("OutboundLink")],1),t._v(" | "),r("a",{attrs:{href:"https://github.com/barrelstrength/craft-sprout-reports/issues?q=is%3Aissue+is%3Aopen+label%3Abug+label%3Ac3",target:"_blank",rel:"noopener noreferrer"}},[t._v("v3"),r("OutboundLink")],1)]),t._v(" "),r("td",{staticStyle:{"text-align":"left"}},[r("a",{attrs:{href:"https://github.com/barrelstrength/craft-sprout-reports/issues?q=is%3Aopen+is%3Aissue+label%3Afeature",target:"_blank",rel:"noopener noreferrer"}},[t._v("View All"),r("OutboundLink")],1)]),t._v(" "),r("td",{staticStyle:{"text-align":"left"}},[r("a",{attrs:{href:"https://github.com/barrelstrength/craft-sprout-reports/issues?q=is%3Aissue+is%3Aopen+no%3Alabel",target:"_blank",rel:"noopener noreferrer"}},[t._v("View All"),r("OutboundLink")],1)])])])])]),t._v(" "),r("div",{staticClass:"custom-block tip"},[r("p",{staticClass:"custom-block-title"},[t._v("Custom Projects & Support")]),t._v(" "),r("p",[t._v("If you need a planned feature that we have not yet added, consider hiring us. We are available for custom development and consulting services and are happy to improve or extend our plugins based on your project needs.")]),t._v(" "),r("p",[t._v("Contact us: "),r("a",{attrs:{href:"mailto:sprout@barrelstrengthdesign.com"}},[t._v("sprout@barrelstrengthdesign.com")])])]),t._v(" "),r("h2",{attrs:{id:"troubleshooting"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#troubleshooting"}},[t._v("#")]),t._v(" Troubleshooting")]),t._v(" "),r("p",[t._v("When we run into a problem, we typically start with a few of the following things:")]),t._v(" "),r("h3",{attrs:{id:"clear-cache"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#clear-cache"}},[t._v("#")]),t._v(" Clear cache")]),t._v(" "),r("p",[t._v("Clear cache in the Craft settings. Clear cache in the browser. Try a different browser. Try a different network. Take a walk. Clear cache again!")]),t._v(" "),r("h3",{attrs:{id:"upgrade-to-the-latest-software"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#upgrade-to-the-latest-software"}},[t._v("#")]),t._v(" Upgrade to the latest software")]),t._v(" "),r("p",[t._v("Make sure you are using the latest version of Craft and all plugins on your website.")]),t._v(" "),r("h3",{attrs:{id:"simplify-the-code-you-are-working-with-to-as-simple-as-it-gets"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#simplify-the-code-you-are-working-with-to-as-simple-as-it-gets"}},[t._v("#")]),t._v(" Simplify the code you are working with to as simple as it gets")]),t._v(" "),r("p",[t._v("If you're trying to get code to work in a complex template, copy the code you are having trouble with and see if you can get it working in a blank template. Simplify the code in the area causing trouble to just output plain text, and then slowly add back more complexity variable by variable.")]),t._v(" "),r("h3",{attrs:{id:"install-a-fresh-version-of-the-plugin"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#install-a-fresh-version-of-the-plugin"}},[t._v("#")]),t._v(" Install a fresh version of the plugin")]),t._v(" "),r("p",[t._v("To help rule out plugin conflicts or upgrade issues, re-install your plugin on a temporary development site and create a quick prototype of what you are trying to do again and see if it works in a fresh environment.")]),t._v(" "),r("h2",{attrs:{id:"support-questions"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#support-questions"}},[t._v("#")]),t._v(" Support Questions")]),t._v(" "),r("p",[t._v("If you are unable to find an answer, support is available for Sprout license holders. We typically respond within 24-48 hours during the business week. We monitor support tickets during US business hours Monday-Friday, 9am-6pm ET (1pm-10pm GMT).")]),t._v(" "),r("div",{staticClass:"custom-block warning"},[r("p",{staticClass:"custom-block-title"},[t._v("Last-minute Support")]),t._v(" "),r("p",[t._v("While we do offer license holders free support and do our best to solve any issues that come up in a timely manner, we are not able to guarantee a response time or time to resolution for all issues. Please plan your projects and upgrades with enough time to test and reach out with any questions.")])]),t._v(" "),r("h3",{attrs:{id:"craft-stack-exchange"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#craft-stack-exchange"}},[t._v("#")]),t._v(" Craft Stack Exchange")]),t._v(" "),r("p",[t._v("If you have a general question, consider posting your question on Craft Stack Exchange so you and others can benefit from finding the question in search results in the future. We monitor Craft Stack Exchange for posts tagged:")]),t._v(" "),r("div",{pre:!0},[r("ul",[r("li",[r("code",[t._v("plugin-sproutcampaigns")])]),t._v(" "),r("li",[r("code",[t._v("plugin-sproutemail")])]),t._v(" "),r("li",[r("code",[t._v("plugin-sproutforms")])]),t._v(" "),r("li",[r("code",[t._v("plugin-sproutseo")])]),t._v(" "),r("li",[r("code",[t._v("plugin-sproutsitemaps")])]),t._v(" "),r("li",[r("code",[t._v("plugin-sproutredirects")])]),t._v(" "),r("li",[r("code",[t._v("plugin-sproutdatastudio")])]),t._v(" "),r("li",[r("code",[t._v("plugin-sproutsentemail")])])])]),r("h3",{attrs:{id:"email"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#email"}},[t._v("#")]),t._v(" Email")]),t._v(" "),r("p",[t._v("For bugs and general support that doesn't fall in another category, please contact us at: "),r("a",{attrs:{href:"mailto:sprout@barrelstrengthdesign.com"}},[t._v("sprout@barrelstrengthdesign.com")])]),t._v(" "),r("div",{staticClass:"custom-block warning"},[r("p",{staticClass:"custom-block-title"},[t._v("Unofficial Support Channels")]),t._v(" "),r("p",[t._v("While you may find Sprout team members on Craft Discord, Twitter, or over private email, we do not monitor these channels for support and messages can be overlooked or lost to history.")]),t._v(" "),r("p",[t._v("If you are in need of support, please use one of the official support channels listed above.")])])])}),[],!1,null,null,null);e.default=a.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/14.b74639c3.js b/docs/.vuepress/dist/assets/js/14.b74639c3.js new file mode 100644 index 00000000..29f262c7 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/14.b74639c3.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[14],{408:function(e,t,a){},479:function(e,t,a){"use strict";a(408)},488:function(e,t,a){"use strict";a.r(t);a(94),a(45),a(12),a(123),a(124);var o={name:"CodeGroup",data:function(){return{codeTabs:[],activeCodeTabIndex:-1}},watch:{activeCodeTabIndex:function(e){this.activateCodeTab(e)}},mounted:function(){this.loadTabs()},methods:{changeCodeTab:function(e){this.activeCodeTabIndex=e},loadTabs:function(){var e=this;this.codeTabs=(this.$slots.default||[]).filter((function(e){return Boolean(e.componentOptions)})).map((function(t,a){return""===t.componentOptions.propsData.active&&(e.activeCodeTabIndex=a),{title:t.componentOptions.propsData.title,elm:t.elm}})),-1===this.activeCodeTabIndex&&this.codeTabs.length>0&&(this.activeCodeTabIndex=0),this.activateCodeTab(0)},activateCodeTab:function(e){this.codeTabs.forEach((function(e){e.elm&&e.elm.classList.remove("theme-code-block__active")})),this.codeTabs[e].elm&&this.codeTabs[e].elm.classList.add("theme-code-block__active")}}},n=(a(479),a(34)),c=Object(n.a)(o,(function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("ClientOnly",[a("div",{staticClass:"theme-code-group"},[a("div",{staticClass:"theme-code-group__nav"},[a("ul",{staticClass:"theme-code-group__ul"},e._l(e.codeTabs,(function(t,o){return a("li",{key:t.title,staticClass:"theme-code-group__li"},[a("button",{staticClass:"theme-code-group__nav-tab",class:{"theme-code-group__nav-tab-active":o===e.activeCodeTabIndex},on:{click:function(t){return e.changeCodeTab(o)}}},[e._v("\n "+e._s(t.title)+"\n ")])])})),0)]),e._v(" "),e._t("default"),e._v(" "),e.codeTabs.length<1?a("pre",{staticClass:"pre-blank"},[e._v("// Make sure to add code blocks to your code group")]):e._e()],2)])}),[],!1,null,"deefee04",null);t.default=c.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/140.6aeef46e.js b/docs/.vuepress/dist/assets/js/140.6aeef46e.js new file mode 100644 index 00000000..23b372c5 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/140.6aeef46e.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[140],{612:function(t,e,r){"use strict";r.r(e);var a=r(34),n=Object(a.a)({},(function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[r("h1",[t._v("Training")]),t._v(" "),r("p",[t._v("Barrel Strength offers free training to help you get up to speed on our Sprout Plugins and Craft CMS. Join us to improve your own understanding of Craft CMS and the plugin ecosystem or invite your team for a small group session.")]),t._v(" "),r("h2",{attrs:{id:"sprout-plugins"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#sprout-plugins"}},[t._v("#")]),t._v(" Sprout Plugins")]),t._v(" "),r("p",[t._v("If you've recently purchased a Sprout plugin or are just curious about having a high-level understanding of all that Sprout can bring to your projects, schedule a free, half-hour coaching session. We're happy to dive into whatever topic you'd like to get a better understanding around. Some topics we've discussed in the past:")]),t._v(" "),r("ul",[r("li",[t._v("A general overview of Sprout Marketing Suite")]),t._v(" "),r("li",[t._v("Business goals around SEO, Email Marketing, and Reporting")]),t._v(" "),r("li",[t._v("Design a content architecture for reusable landing pages with Forms")]),t._v(" "),r("li",[t._v("Custom metadata for Social Sharing and Structured Data")]),t._v(" "),r("li",[t._v("Customizing Form Templates and Email Templates using Twig")]),t._v(" "),r("li",[t._v("Extending Sprout Plugins with new features such as additional Form Fields, Form Integration with third-party CRMs, Mailer Integrations with third-party email providers, and custom Data Sources")]),t._v(" "),r("li",[t._v("Data migrations")]),t._v(" "),r("li",[t._v("And more...")])]),t._v(" "),r("p",[t._v("Schedule a "),r("a",{attrs:{href:"https://barrelstrengthdesign.com/schedule/ben-parizek",target:"_blank",rel:"noopener noreferrer"}},[t._v("Sprout Coaching Session"),r("OutboundLink")],1)]),t._v(" "),r("h2",{attrs:{id:"team-training"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#team-training"}},[t._v("#")]),t._v(" Team Training")]),t._v(" "),r("p",[t._v("For a more specialized training, Barrel Strength also offers training for Craft CMS and Craft Commerce via Straight Up Craft.")]),t._v(" "),r("p",[t._v("Find more details and links to sign up on the "),r("a",{attrs:{href:"https://straightupcraft.com/training/teams",target:"_blank",rel:"noopener noreferrer"}},[t._v("Training for Teams"),r("OutboundLink")],1),t._v(" page on Straight Up Craft.")])])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/141.612c1e83.js b/docs/.vuepress/dist/assets/js/141.612c1e83.js new file mode 100644 index 00000000..eb641b7d --- /dev/null +++ b/docs/.vuepress/dist/assets/js/141.612c1e83.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[141],{617:function(t,e,r){"use strict";r.r(e);var n=r(34),a=Object(n.a)({},(function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[r("h1",[t._v("Craftnet Resources")]),t._v(" "),r("p",[t._v("Tools for managing plugin licenses via the Craftnet API.")]),t._v(" "),r("ul",[r("li",[r("a",{attrs:{href:"https://github.com/barrelstrength/craftnet-php",target:"_blank",rel:"noopener noreferrer"}},[t._v("Craftnet API PHP Wrapper"),r("OutboundLink")],1),t._v(" - A PHP library which implements the functionality of the Craftnet API (Barrel Strength)")]),t._v(" "),r("li",[r("a",{attrs:{href:"https://github.com/studioespresso/craft3-craftnet-cp",target:"_blank",rel:"noopener noreferrer"}},[t._v("Craftnet CP Plugin"),r("OutboundLink")],1),t._v(" - A Craft plugin that leverages the Craftnet API PHP Wrapper (Studio Espresso)")])])])}),[],!1,null,null,null);e.default=a.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/142.c4d6e5e7.js b/docs/.vuepress/dist/assets/js/142.c4d6e5e7.js new file mode 100644 index 00000000..3af8180e --- /dev/null +++ b/docs/.vuepress/dist/assets/js/142.c4d6e5e7.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[142],{618:function(t,e,r){"use strict";r.r(e);var o=r(34),n=Object(o.a)({},(function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[r("h1",[t._v("PhpStorm Resources")]),t._v(" "),r("p",[t._v("Tools to help with Craft templating and plugin development workflows in PhpStorm.")]),t._v(" "),r("ul",[r("li",[r("a",{attrs:{href:"https://github.com/barrelstrength/PhpStorm-Live-Templates-Craft-CMS",target:"_blank",rel:"noopener noreferrer"}},[t._v("PhpStorm Settings for Craft CMS"),r("OutboundLink")],1)]),t._v(" "),r("li",[r("a",{attrs:{href:"https://github.com/barrelstrength/PhpStorm-Live-Templates-Craft-CMS",target:"_blank",rel:"noopener noreferrer"}},[t._v("PhpStorm Live Templates for Craft CMS"),r("OutboundLink")],1)]),t._v(" "),r("li",[r("a",{attrs:{href:"https://github.com/barrelstrength/PhpStorm-Live-Templates-Twig-Extended",target:"_blank",rel:"noopener noreferrer"}},[t._v("PhpStorm Live Templates for Twig"),r("OutboundLink")],1)])])])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/143.a62609d8.js b/docs/.vuepress/dist/assets/js/143.a62609d8.js new file mode 100644 index 00000000..9bd5e69e --- /dev/null +++ b/docs/.vuepress/dist/assets/js/143.a62609d8.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[143],{619:function(t,e,r){"use strict";r.r(e);var n=r(34),i=Object(n.a)({},(function(){var t=this.$createElement,e=this._self._c||t;return e("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[e("h1",[this._v("Sublime Text Resources")]),this._v(" "),e("p",[this._v("Tools to help with Craft templating and plugin development workflows in Sublime Text.")]),this._v(" "),e("ul",[e("li",[e("a",{attrs:{href:"https://github.com/barrelstrength/Craft-Twig.tmbundle",target:"_blank",rel:"noopener noreferrer"}},[this._v("Craft Twig for Sublime Text"),e("OutboundLink")],1)])])])}),[],!1,null,null,null);e.default=i.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/144.ecccb69f.js b/docs/.vuepress/dist/assets/js/144.ecccb69f.js new file mode 100644 index 00000000..d046746f --- /dev/null +++ b/docs/.vuepress/dist/assets/js/144.ecccb69f.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[144],{616:function(e,t,a){"use strict";a.r(t);var r=a(34),o=Object(r.a)({},(function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",[e._v("Upgrading to v4.44.444")]),e._v(" "),a("div",{pre:!0},[a("p",[e._v("Sprout "),a("code",[e._v("4.44.444")]),e._v(" provides a familiar author experience, introduces a simplified plugin architecture with the Sprout Framework module, and removes the need for a number of dependencies that were causing several permission and migration issues on Craft 3 websites. Designers and developers will want to read through these upgrade notes carefully - several things have changed.")])]),a("h2",{attrs:{id:"prepare-to-upgrade"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#prepare-to-upgrade"}},[e._v("#")]),e._v(" Prepare to upgrade")]),e._v(" "),a("ol",[a("li",[e._v("Review all upgrade guides for Craft and Sprout to prepare for your upgrade")]),e._v(" "),a("li",[e._v("Review the 'Breaking Changes' section of the Sprout Module changelogs")]),e._v(" "),a("li",[e._v("Confirm that all of the Sprout plugins that you want to upgrade are available on Craft 4. See the "),a("RouterLink",{attrs:{to:"/support/road-map.html"}},[e._v("Road Map")]),e._v(".")],1),e._v(" "),a("li",[e._v("Confirm that you have a migration path for any plugins that will not be available on Craft 4. See the "),a("RouterLink",{attrs:{to:"/support/road-map.html"}},[e._v("Road Map")]),e._v(".")],1)]),e._v(" "),a("h2",{attrs:{id:"upgrade"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#upgrade"}},[e._v("#")]),e._v(" Upgrade")]),e._v(" "),a("ol",[a("li",[e._v("Update to the latest version of Craft 3")]),e._v(" "),a("li",[e._v("Update all installed Sprout plugins to the most recent version on Craft 3")]),e._v(" "),a("li",[e._v("Upgrade to Craft 4 (This step will trigger Sprout migrations for plugins with the same name)")]),e._v(" "),a("li",[e._v("Install any Sprout plugins with new names to trigger their respective migrations")])]),e._v(" "),a("h2",{attrs:{id:"breaking-changes"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#breaking-changes"}},[e._v("#")]),e._v(" Breaking Changes")]),e._v(" "),a("h3",{attrs:{id:"all-sprout-modules"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#all-sprout-modules"}},[e._v("#")]),e._v(" All Sprout modules")]),e._v(" "),a("div",{pre:!0},[a("ul",[a("li",[e._v("See the "),a("a",{pre:!0,attrs:{href:"https://github.com/barrelstrength/craft-sprout/blob/v4/CHANGELOG",target:"_blank",rel:"noopener noreferrer"}},[e._v("Sprout Framework Core Changelog"),a("OutboundLink",{pre:!0})],1),e._v(" for a full list of changes")]),e._v(" "),a("li",[e._v("All Twig variables now use the "),a("code",[e._v("sprout")]),e._v(" variable")]),e._v(" "),a("li",[e._v("All Default templates sets can now be included from the site template root "),a("code",[e._v("_sprout")])]),e._v(" "),a("li",[e._v("All Example templates can now be included from the site template root "),a("code",[e._v("_sprout/examples")])]),e._v(" "),a("li",[e._v("All plugin settings are now managed in their respective modules")]),e._v(" "),a("li",[e._v("Plugins no longer support an "),a("em",[e._v("Alternate Name")]),e._v(" setting")]),e._v(" "),a("li",[e._v("Any references to Sprout Project Config settings keys will need to be updated")]),e._v(" "),a("li",[e._v("All custom APIs have new routes and namespaces")])])]),a("h3",{attrs:{id:"reports-data-studio"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#reports-data-studio"}},[e._v("#")]),e._v(" Reports => Data Studio")]),e._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),a("p",[e._v("Due to this plugins name change (Reports => Data Studio) you will need to manually install it after upgrading to Craft 4 to trigger its migrations. If you have any Report-related dashboard widgets you may see an error when you first login to your Craft 4 control panel. Navigate directly to the plugins page "),a("code",[e._v("/admin/settings/plugins")]),e._v(" to install the plugin.")])]),e._v(" "),a("div",{pre:!0},[a("ul",[a("li",[e._v("See the "),a("a",{pre:!0,attrs:{href:"https://github.com/barrelstrength/craft-sprout/blob/v4/CHANGELOG",target:"_blank",rel:"noopener noreferrer"}},[e._v("Sprout Data Studio Changelog"),a("OutboundLink",{pre:!0})],1),e._v(" for a full list of changes")]),e._v(" "),a("li",[e._v("Sprout Reports has been renamed to Sprout Data Studio")]),e._v(" "),a("li",[e._v("Sprout Data Studio now has a Lite and Pro Edition")]),e._v(" "),a("li",[e._v("Existing Sprout Reports license holders will be upgraded to a Sprout Data Studio Pro license")]),e._v(" "),a("li",[e._v("Updated variable "),a("code",[e._v("craft.sproutReports")]),e._v(" => "),a("code",[e._v("sprout.twigDataSet")])]),e._v(" "),a("li",[e._v("Twig Template Data Sources that use a Craft DateTime picker in their templates will need to update the date syntax to use Twig the "),a("a",{pre:!0,attrs:{href:"https://craftcms.com/docs/4.x/upgrade.html#template-functions",target:"_blank",rel:"noopener noreferrer"}},[e._v("date function"),a("OutboundLink",{pre:!0})],1)]),e._v(" "),a("li",[e._v("Twig Template Data Sources should update "),a("code",[e._v("{%- includejs %}")]),e._v(" => "),a("code",[e._v("{%- js %}")])]),e._v(" "),a("li",[e._v("Any references to the Project Config settings key should be updated "),a("code",[e._v("sprout-reports")]),e._v(" => "),a("code",[e._v("sprout-module-data-studio")])]),e._v(" "),a("li",[e._v("Custom DataSources should use "),a("code",[e._v("BarrelStrength\\Sprout\\datastudio\\datasources\\DataSource")]),e._v(" (See "),a("code",[e._v("vendor/barrelstrength/sprout/src/datastudio/components/datasources")]),e._v(" for examples)")]),e._v(" "),a("li",[e._v("Access Data Source permissions have been removed in favor of Craft User permissions. Confirm any permissions that were previously assigned to Data Sources are now assigned to the User Groups appropriately.")]),e._v(" "),a("li",[e._v("Date Sources used as email lists will need to be migrated manually to Audience Types (once the email module is released)")])])]),a("h3",{attrs:{id:"redirects"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#redirects"}},[e._v("#")]),e._v(" Redirects")]),e._v(" "),a("ul",[a("li",[e._v("Lite Edition now allows managing unlimited Redirects")]),e._v(" "),a("li",[e._v("Global Excluded URLs (available in the Lite edition) can now be managed in Project Config")]),e._v(" "),a("li",[e._v("Site-specific Excluded URLs and are now a Pro feature")]),e._v(" "),a("li",[e._v("Exclude URL Element Actions are now a Pro feature")]),e._v(" "),a("li",[e._v("Status Update Element Actions are now a Pro feature")])])])}),[],!1,null,null,null);t.default=o.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/15.3e0aa40c.js b/docs/.vuepress/dist/assets/js/15.3e0aa40c.js new file mode 100644 index 00000000..2a766aa0 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/15.3e0aa40c.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[15],{405:function(s,t,a){},476:function(s,t,a){"use strict";a(405)},486:function(s,t,a){"use strict";a.r(t);var e={props:{items:{type:Array}}},n=(a(476),a(34)),l=Object(n.a)(e,(function(){var s=this,t=s.$createElement,a=s._self._c||t;return a("div",{staticClass:"meta-details"},[a("p",s._l(s.items,(function(t,e){return a("span",{key:e,staticClass:"item"},[a("span",{staticClass:"label"},[s._v(s._s(t.label)+":")]),s._v(" "),a("span",{staticClass:"value"},[s._v(s._s(t.value))])])})),0)])}),[],!1,null,null,null);t.default=l.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/16.e2b0ac0b.js b/docs/.vuepress/dist/assets/js/16.e2b0ac0b.js new file mode 100644 index 00000000..76e1bf14 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/16.e2b0ac0b.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[16],{446:function(t,e,a){t.exports=a.p+"assets/img/sprout-components.42288e58.png"},447:function(t,e,a){t.exports=a.p+"assets/img/sprout-features.eef8c9e7.png"},490:function(t,e,a){"use strict";a.r(e);var s=a(34),r=Object(s.a)({},(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",[t._v("Core Concepts")]),t._v(" "),s("p",[t._v("Sprout Marketing Suite is a premium suite of plugins designed for businesses who want to use Craft CMS as the core of content management and digital marketing workflows.")]),t._v(" "),s("p",[t._v("Sprout provides a seamless Craft experience for content authors and an exceptional amount of flexibility for designers and developers.")]),t._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[t._v("Craft 4 Support")]),t._v(" "),s("p",[t._v("Sprout Marketing Suite plugins are coming to Craft 4. See our "),s("RouterLink",{attrs:{to:"/support/road-map.html"}},[t._v("Road Map")]),t._v(" for more details.")],1)]),t._v(" "),s("h2",{attrs:{id:"digital-marketing"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#digital-marketing"}},[t._v("#")]),t._v(" Digital Marketing")]),t._v(" "),s("p",[t._v("Sprout adds new components to use in your content architecture including Forms, Emails, and Reports.")]),t._v(" "),s("p",[s("img",{attrs:{src:a(446),alt:"Sprout Components"}})]),t._v(" "),s("p",[t._v("Where Craft provides the excellent content management features, Sprout adds components specialized toward business and marketing use cases.")]),t._v(" "),s("p",[s("img",{attrs:{src:a(447),alt:"Sprout Features"}})]),t._v(" "),s("h2",{attrs:{id:"modular-architecture"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#modular-architecture"}},[t._v("#")]),t._v(" Modular Architecture")]),t._v(" "),s("p",[t._v("As we developed Sprout we observed that a lot of features that we designed could benefit more than one use case. For example, our Reports features can be used on it's own, for running reports on Form submissions in Sprout Forms, and to build dynamic email lists in Sprout Email.")]),t._v(" "),s("p",[t._v("Rather than re-invent the wheel in each "),s("strong",[t._v("plugin")]),t._v(", we chose to build out features such as Reports as a "),s("strong",[t._v("module")]),t._v(" that can be used by all of our plugins and for your custom reporting needs as well. Users experience a unified, familiar workflow however they are using Reports on a site.")]),t._v(" "),s("p",[t._v("Modules can be enabled and disabled to ensure only the relevant ones are available to users. Explore the full list of "),s("RouterLink",{attrs:{to:"/features.html"}},[t._v("module features")]),t._v(". Collectively, these modules are referred to as the Sprout Framework.")],1),t._v(" "),s("h2",{attrs:{id:"plugin-bundles"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#plugin-bundles"}},[t._v("#")]),t._v(" Plugin Bundles")]),t._v(" "),s("p",[t._v("The key Sprout Plugins bundle multiple modules to provide their feature set. View the "),s("RouterLink",{attrs:{to:"/features.html"}},[t._v("Lite and Pro")]),t._v(" page to see a breakdown of features in each module.")],1),t._v(" "),s("div",{staticClass:"table"},[s("table",[s("thead",[s("tr",[s("th",{staticStyle:{"text-align":"left"}},[t._v("Plugin")]),t._v(" "),s("th",{staticStyle:{"text-align":"left"}},[t._v("Modules")])])]),t._v(" "),s("tbody",[s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("Sprout Forms")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("Forms, Data Studio, Notifications")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("Sprout Email")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("Notifications, Campaigns, Sent Email")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("Sprout SEO")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("Meta, Redirects, Sitemaps")])])])])]),t._v(" "),s("p",[t._v("While most websites benefit from the full feature set of the packages above, a few modules have been packaged in standalone plugins when they can also solve a narrow use case.")]),t._v(" "),s("div",{staticClass:"table"},[s("table",[s("thead",[s("tr",[s("th",{staticStyle:{"text-align":"left"}},[t._v("Plugin")]),t._v(" "),s("th",{staticStyle:{"text-align":"left"}},[t._v("Modules")])])]),t._v(" "),s("tbody",[s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("Sprout Data Studio")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("Data Studio")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("Sprout Sitemaps")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("Sitemaps")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("Sprout Redirects")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("Redirects")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("Sprout Sent Email")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("Sent Email")])])])])]),t._v(" "),s("p",[t._v("View all of our plugins in the "),s("a",{attrs:{href:"https://plugins.craftcms.com/developer/169",target:"_blank",rel:"noopener noreferrer"}},[t._v("Craft Plugin Store"),s("OutboundLink")],1)]),t._v(" "),s("h2",{attrs:{id:"support-training"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#support-training"}},[t._v("#")]),t._v(" Support & Training")]),t._v(" "),s("p",[t._v("Sprout Plugins are driven by real world projects and business and marketing requirements. If you depend on Craft CMS or Sprout Plugins as critical software for your online business, we offer Craft CMS audits, support, training, and consulting as standalone services and as compliments to our products.")]),t._v(" "),s("ul",[s("li",[s("RouterLink",{attrs:{to:"/support/support.html"}},[t._v("Support")])],1),t._v(" "),s("li",[s("RouterLink",{attrs:{to:"/support/training.html"}},[t._v("Training")])],1)])])}),[],!1,null,null,null);e.default=r.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/17.d83573ed.js b/docs/.vuepress/dist/assets/js/17.d83573ed.js new file mode 100644 index 00000000..14be1c00 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/17.d83573ed.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[17],{450:function(e,t,s){e.exports=s.p+"assets/img/sprout-gender-field.b3ff3e4e.png"},451:function(e,t,s){e.exports=s.p+"assets/img/sprout-gender-field-dropdown.6cb2b83c.png"},529:function(e,t,s){"use strict";s.r(t);var a=s(34),r=Object(a.a)({},(function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",[e._v("Gender Field")]),e._v(" "),a("p",[e._v("The Gender Field is a gender neutral field type for Craft CMS. Allow your users to choose a gender, decline the question, or provide a custom value.")]),e._v(" "),a("p",[a("img",{attrs:{src:s(450),alt:"Gender Neutral Field"}})]),e._v(" "),a("p",[a("img",{attrs:{src:s(451),alt:"Gender Neutral Field"}})]),e._v(" "),a("h2",{attrs:{id:"templates"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#templates"}},[e._v("#")]),e._v(" Templates")]),e._v(" "),a("p",[e._v("You can access your Gender Field in your templates via it's field handle.")]),e._v(" "),a("div",{staticClass:"language-twig extra-class"},[a("pre",{pre:!0,attrs:{class:"language-twig"}},[a("code",[a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[e._v("{{")]),e._v(" entry"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(".")]),e._v("genderField "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[e._v("}}")])]),e._v("\n")])])])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/18.21d87662.js b/docs/.vuepress/dist/assets/js/18.21d87662.js new file mode 100644 index 00000000..855972d5 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/18.21d87662.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[18],{456:function(t,a,s){t.exports=s.p+"assets/img/predefined-html.2225658b.png"},457:function(t,a,s){t.exports=s.p+"assets/img/predefined-html-settings.0eef5487.png"},533:function(t,a,s){"use strict";s.r(a);var e=s(34),n=Object(e.a)({},(function(){var t=this,a=t.$createElement,e=t._self._c||a;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",[t._v("Predefined Field")]),t._v(" "),e("p",[t._v("The Predefined Field allows you parse Twig and define the value of your field ahead of time. This can be useful to help optimize queries or prepare data for a specific use case before it is needed.")]),t._v(" "),e("p",[t._v("The Predefined Field is not editable.")]),t._v(" "),e("h2",{attrs:{id:"settings"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#settings"}},[t._v("#")]),t._v(" Settings")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("Field Format")]),t._v(" - The value you want to prepare when the Predefined Field is saved.")]),t._v(" "),e("li",[e("strong",[t._v("Show Field")]),t._v(" - Enable to display the value you saved in the Field Layout")]),t._v(" "),e("li",[e("strong",[t._v("Output Format")]),t._v(" - The output method to use when displaying the value: Input, Textarea, or HTML")]),t._v(" "),e("li",[e("strong",[t._v("Render dynamically in field layout")]),t._v(" - Enable to process the value of the field when the page is loaded in the Control Panel")])]),t._v(" "),e("p",[e("a",{attrs:{href:"https://barrelstrengthdesign.com",target:"_blank",rel:"noopener noreferrer"}},[t._v("Link Name"),e("OutboundLink")],1)]),t._v(" "),e("h3",{attrs:{id:"field-format"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#field-format"}},[t._v("#")]),t._v(" Field Format")]),t._v(" "),e("p",[t._v("Define the value you want using the "),e("strong",[t._v("Field Format")]),t._v(" setting when you create your field. The Field Format setting can parse Twig and process values from the element being saved.")]),t._v(" "),e("div",{pre:!0},[e("p",[t._v("The Field Format setting accepts Craft object syntax using the "),e("code",[t._v("object")]),t._v(" variable to reference the current Element being saved:")])]),e("div",{staticClass:"language-twig extra-class"},[e("pre",{pre:!0,attrs:{class:"language-twig"}},[e("code",[e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" object"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("title "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" object"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("customField "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" object"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("customField"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("first"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("id "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n")])])]),e("p",[t._v("And shorthand syntax:")]),t._v(" "),e("div",{staticClass:"language-twig extra-class"},[e("pre",{pre:!0,attrs:{class:"language-twig"}},[e("code",[t._v("{title}\n{customField}\n{customField.first().id}\n")])])]),e("h3",{attrs:{id:"matrix-field-usage"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#matrix-field-usage"}},[t._v("#")]),t._v(" Matrix Field Usage")]),t._v(" "),e("div",{pre:!0},[e("p",[t._v("Matrix Blocks are Elements too. If you use a Predefined Field within a matrix block, the "),e("code",[t._v("object")]),t._v(" available to the Predefined Field is a "),e("code",[t._v("MatrixBlockModel")]),t._v(" and any custom fields available in the Matrix Block:")])]),e("div",{staticClass:"language-twig extra-class"},[e("pre",{pre:!0,attrs:{class:"language-twig"}},[e("code",[e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" object"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("type "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n{type}\n")])])]),e("div",{pre:!0},[e("p",[t._v("To reference the parent Element of the Matrix Block, you can use the "),e("code",[t._v("owner")]),t._v(" property:")])]),e("div",{staticClass:"language-twig extra-class"},[e("pre",{pre:!0,attrs:{class:"language-twig"}},[e("code",[e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" object"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("owner"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("title "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" object"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("owner"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("customField "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" object"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("owner"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("customField"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("first"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("id "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n")])])]),e("p",[t._v("Or shorthand:")]),t._v(" "),e("div",{staticClass:"language-twig extra-class"},[e("pre",{pre:!0,attrs:{class:"language-twig"}},[e("code",[t._v("{owner.title}\n{owner.customField}\n{owner.customField.first().id}\n")])])]),e("h3",{attrs:{id:"custom-html"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#custom-html"}},[t._v("#")]),t._v(" Custom HTML")]),t._v(" "),e("p",[t._v("The Predefined Field can output any HTML that you want to show content authors. This allows for a lot of flexibility and should also be approached carefully as it also allows for a lot of abuse.")]),t._v(" "),e("div",{pre:!0},[e("p",[t._v("One use case for this configuration can be to show reverse relationships (the elements related to the one you are editing but that are created via the Field Layout of the other element). When displaying reverse relationships it's possible that the value that the Predefined field stored in the database when your element was saved is inaccurate, as the related values can change without updating your Predefined field value. In this case, you can enable the "),e("code",[t._v("Render dynamically in field layout")]),t._v(" setting to re-process the value of the Predefined field when it is loaded in the Control Panel.")])]),e("p",[t._v("In the example below, the Predefined field shows the Users that are related to a given Entry and outputs a list of those related Users with links to their respective Entries in the Control Panel and on the front-end:")]),t._v(" "),e("h4",[t._v("Dynamic HTML Output")]),t._v(" "),e("p",[e("img",{attrs:{src:s(456),alt:"Predefined Field Example HTML Reverse Relation Field"}})]),t._v(" "),e("h4",[t._v("Dynamic HTML Settings")]),t._v(" "),e("p",[e("img",{attrs:{src:s(457),alt:"Predefined Field Example HTML Settings"}})]),t._v(" "),e("h4",[t._v("Example HTML Table")]),t._v(" "),e("p",[t._v("The following table code can be used as an example to create a Craft-styled table:")]),t._v(" "),e("div",{staticClass:"language-twig extra-class"},[e("pre",{pre:!0,attrs:{class:"language-twig"}},[e("code",[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("table")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("data fullwidth"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("thead")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("th")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("Name"),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("th")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("Position"),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("th")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("Nationality"),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("td")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("thin"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("for")]),t._v(" user "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("in")]),t._v(" craft"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("users"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("group"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token string"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("teamMembers"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("orderBy"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token string"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("position"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("relatedTo"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("object"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("id"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("all"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("tr")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("td")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("span")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("status "),e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" user"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getStatus"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" user"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getCpEditUrl"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" user"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getFullName"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("td")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" user"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("position "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("td")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("🇩🇪"),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("td")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("a")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" user"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getUrl"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("target")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("_blank"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("data-icon")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("world"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),e("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("title")]),e("span",{pre:!0,attrs:{class:"token attr-value"}},[e("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Visit webpage"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endfor")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token tag"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])])])}),[],!1,null,null,null);a.default=n.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/19.c9308328.js b/docs/.vuepress/dist/assets/js/19.c9308328.js new file mode 100644 index 00000000..d579de5d --- /dev/null +++ b/docs/.vuepress/dist/assets/js/19.c9308328.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{465:function(t,e,r){t.exports=r.p+"assets/img/redirect-edit-page.9e127d07.png"},466:function(t,e,r){t.exports=r.p+"assets/img/404-redirect-settings.6283de09.png"},589:function(t,e,r){"use strict";r.r(e);var a=r(34),s=Object(a.a)({},(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",[t._v("Redirects")]),t._v(" "),a("p",[t._v("Redirects allow you to forward users and search engines to the appropriate content on your site. Redirects can be managed on a per-site basis directly in the Control Panel.")]),t._v(" "),a("p",[t._v("Sprout SEO supports 3 types of Redirects:")]),t._v(" "),a("div",{staticClass:"table"},[a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"center"}},[t._v("Type")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("Description")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"center"}},[a("strong",[t._v("301")])]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Redirect content that has permanently moved to a new location")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"center"}},[a("strong",[t._v("302")])]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Redirect content that has temporarily moved to a new location")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"center"}},[a("strong",[t._v("404")])]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Captures a 404 request and allows you to manually convert the URL that is 404ing into a 301 or 302 redirect.")])])])])]),t._v(" "),a("h2",{attrs:{id:"redirect-settings"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#redirect-settings"}},[t._v("#")]),t._v(" Redirect Settings")]),t._v(" "),a("p",[t._v("Each Redirect has 4 settings, tracks the count of how many times it was used, and can be enabled or disabled.")]),t._v(" "),a("p",[a("img",{attrs:{src:r(465),alt:"Sprout SEO Redirects - Edit Page"}})]),t._v(" "),a("div",{staticClass:"table"},[a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("Setting")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("Description")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[a("strong",[t._v("Old URL")])]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("The URL where your content used to live")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[a("strong",[t._v("New URL")])]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("The URL where your content will live in the future")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[a("strong",[t._v("Method")])]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Indicate to search engines whether the redirect behavior is permanent or temporary")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[a("strong",[t._v("Match Patterns (optional)")])]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Enables additional checks to process more advanced patter matching in the redirects using regular expressions")])])])])]),t._v(" "),a("h2",{attrs:{id:"bulk-actions"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#bulk-actions"}},[t._v("#")]),t._v(" Bulk Actions")]),t._v(" "),a("p",[t._v("Redirects can be updated via bulk actions by selecting the checkboxes next to each Redirect on the Redirect listing page. Currently supported bulk actions include:")]),t._v(" "),a("div",{pre:!0},[a("div",{pre:!0,attrs:{class:"table"}},[a("table",[a("thead",[a("tr",[a("th",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Bulk Action")]),t._v(" "),a("th",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Description")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("strong",[t._v("Update Status to Enabled")])]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Updates a Redirect status to 'Enabled'")])]),t._v(" "),a("tr",[a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("strong",[t._v("Update Status to Disabled")])]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Updates a Redirect status to 'Disabled'")])]),t._v(" "),a("tr",[a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("strong",[t._v("Update Method to 301")])]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Updates a Redirect Method to a 301 Redirect")])]),t._v(" "),a("tr",[a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("strong",[t._v("Update Method to 302")])]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Updates a Redirect Method to a 302 Redirect")])]),t._v(" "),a("tr",[a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("strong",[t._v("Add to Excluded URLs")])]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Adds an Old URL to the "),a("code",[t._v("Settings->Redirects->Excluded URL Patterns")]),t._v(" setting."),a("br"),a("br"),t._v(" "),a("em",[t._v("This action only appears when 404 Redirects are selected.")])])]),t._v(" "),a("tr",[a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("strong",[t._v("Edit")])]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Opens a Redirect's Edit page in the Control Panel."),a("br"),a("br"),t._v(" "),a("em",[t._v("This action only appears when a single Redirect is selected.")])])]),t._v(" "),a("tr",[a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("strong",[t._v("Delete")])]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Deletes a Redirect.")])])])])])]),a("h2",{attrs:{id:"regular-expressions"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#regular-expressions"}},[t._v("#")]),t._v(" Regular Expressions")]),t._v(" "),a("p",[t._v("Redirect multiple URLs with a similar pattern by selecting the "),a("strong",[t._v("Match Patterns")]),t._v(" option. When the Match Patterns option is selected, you can then use "),a("em",[t._v("Regular Expressions")]),t._v(" in the Old URL field and reference "),a("em",[t._v("Capture Groups")]),t._v(" in the New Url field.")]),t._v(" "),a("div",{staticClass:"table"},[a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("Old Url - Regular Expressions")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("New Url - Capture Groups")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("/old-location/(.*)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("new-location/$1")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("/old-location/(\\d{4})/(\\d{2})")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("new-location/$1/$2")])])])])]),t._v(" "),a("h2",{attrs:{id:"order-of-redirects"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#order-of-redirects"}},[t._v("#")]),t._v(" Order of Redirects")]),t._v(" "),a("div",{pre:!0},[a("p",[t._v("Redirects can be re-ordered via drag and drop when ordered by the "),a("code",[t._v("Structure")]),t._v(" option on the Redirect listing page.")])]),a("p",[t._v("Redirects are processed from top to bottom as they are seen in the Structure view. If two or more redirects match a URL, the highest on the list will be the one that takes priority in how a particular URL is redirected.")]),t._v(" "),a("p",[t._v("Redirects are not processed until Craft tries all other Routing options. When a page is about to 404, Sprout SEO will then check to see if a URL matches a Redirect rule and route things accordingly. This takes place between step 5 and 6 of Craft's "),a("a",{attrs:{href:"https://craftcms.com/docs/routing",target:"_blank",rel:"noopener noreferrer"}},[t._v("Routing"),a("OutboundLink")],1),t._v(" rules. Waiting until the last moment allows you to optimize your website experience and page speed for the majority of your users while still helping redirect any people attempting to access old URLs to the right place.")]),t._v(" "),a("h2",{attrs:{id:"_404-redirects"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_404-redirects"}},[t._v("#")]),t._v(" 404 Redirects")]),t._v(" "),a("p",[t._v("To monitor and capture 404 Redirects, you will need to enable them in your Sprout SEO settings: "),a("em",[t._v("Settings->General->Log 404 Redirects")]),t._v(".")]),t._v(" "),a("p",[a("img",{attrs:{src:r(466),alt:"Log 404 Redirects"}})]),t._v(" "),a("p",[t._v("404 Redirects will get created with a disabled status and a default redirect location to your home page.")]),t._v(" "),a("p",[t._v("404 Redirects will need to be reviewed and manually updated to choose a redirect method (301 or 302), a redirect location, and be enabled.")]),t._v(" "),a("p",[t._v("You can view all 404 Redirects on the Redirects tab using the filter in the sidebar for '404 - Page Not Found'.")]),t._v(" "),a("h2",{attrs:{id:"importing-redirects"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#importing-redirects"}},[t._v("#")]),t._v(" Importing Redirects")]),t._v(" "),a("p",[t._v("Sprout Import provides a Sprout SEO Redirect import utility that can help you convert a spreadsheet of Redirects into a JSON format that can be imported with Sprout Import.")]),t._v(" "),a("p",[t._v("To use this feature:")]),t._v(" "),a("ol",[a("li",[t._v("Create a spreadsheet of your redirects with 5 columns:")])]),t._v(" "),a("ul",[a("li",[t._v("oldUrl (relative url)")]),t._v(" "),a("li",[t._v("newUrl (relative url)")]),t._v(" "),a("li",[t._v("method (301, 302, 404)")]),t._v(" "),a("li",[t._v("regex (1 or 0)")]),t._v(" "),a("li",[t._v("count (0)")])]),t._v(" "),a("ol",{attrs:{start:"2"}},[a("li",[t._v("Create a sixth column to combine all of your Redirect values into a comma-separated list:")])]),t._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("oldUrl, newUrl, method, regex, count\n")])])]),a("ol",{attrs:{start:"3"}},[a("li",[t._v("Copy and paste your list of comma-separated redirects into the Sprout Import SEO Helper utility")])]),t._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("/old-url, /new-url, 301, 0, 0\n/another-old-url, /another-new-url, 302, 0, 0\n/retired-section(.*), /new-section, 301, 1, 0\n")])])]),a("div",{pre:!0},[a("ol",{pre:!0,attrs:{start:"4"}},[a("li",[t._v('Select "Generate JSON" and copy the output to the '),a("code",[t._v("Sprout Import->Import")]),t._v(" tab "),a("code",[t._v("Import via Copy/Paste")]),t._v(" field.")])])]),a("h2",{attrs:{id:"additional-notes"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#additional-notes"}},[t._v("#")]),t._v(" Additional Notes")]),t._v(" "),a("h3",{attrs:{id:"_301-vs-302-redirects"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_301-vs-302-redirects"}},[t._v("#")]),t._v(" 301 vs 302 Redirects")]),t._v(" "),a("p",[t._v("When you create a Redirect for the first time, it's often best to create it as a 302 redirect, test it, and then update it to be a 301 Redirect.")]),t._v(" "),a("p",[t._v("A 301 Redirect gets cached in a visitors browser. The only way to clear the cache of a visitors browser is to ask them to go into their browser and clear their cache. In the case that you publish an incorrect 301 redirect, you could run into a scenario where 100s of visitors to your site get the wrong URL cached in their browser. Even if you correct the redirect, each one of those users will need to clear their browser cache before the old URL they are trying to access will see your updated Redirect. By testing your Redirects as 302 Redirects first, you reduce the risk that your users will get incorrect URLs cached in their browsers.")]),t._v(" "),a("p",[t._v("Sprout SEO provides a bulk Element Action where you can update a group of Redirects from 302 Redirects to 301 Redirects after testing.")]),t._v(" "),a("h3",{attrs:{id:"redirects-not-handled-by-sprout-seo"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#redirects-not-handled-by-sprout-seo"}},[t._v("#")]),t._v(" Redirects not handled by Sprout SEO")]),t._v(" "),a("div",{pre:!0},[a("p",[t._v("Sprout SEO allows you to manage redirects for any page that could result in a 404. In a few edge cases, there can be a scenario where Craft processes a request and does not throw a 404 for a URI that you wish to Redirect. In these scenarios, we currently recommend handling these types of Redirects outside of Sprout SEO using .htaccess, the "),a("code",[t._v("{% redirect %}")]),t._v(" tag, or some other method.")])])])}),[],!1,null,null,null);e.default=s.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/20.d364c377.js b/docs/.vuepress/dist/assets/js/20.d364c377.js new file mode 100644 index 00000000..95c0ae2d --- /dev/null +++ b/docs/.vuepress/dist/assets/js/20.d364c377.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[20],{471:function(e,t,a){e.exports=a.p+"assets/img/sprout-seo-element-metadata-field-meta-details.982d7460.png"},472:function(e,t,a){e.exports=a.p+"assets/img/sprout-seo-field-layout-editable-fields.47264571.png"},597:function(e,t,a){"use strict";a.r(t);var s=a(34),i=Object(s.a)({},(function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[s("h1",[e._v("Metadata Field")]),e._v(" "),s("p",[e._v("The Metadata field gives you fine-grained control over how Entry-specific metadata is recognized and managed for your content. By default, we recommend setting up your Metadata field to reuse existing fields in your content and simplify the management over your metadata. Using a common Title, Summary, and Image field can go a very long way to get things setup quickly and provide comprehensive SEO.")]),e._v(" "),s("h2",{attrs:{id:"field-settings"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#field-settings"}},[e._v("#")]),e._v(" Field Settings")]),e._v(" "),s("p",[e._v("The Metadata Field gives you several ways to setup your metadata. Keep it simple, and map all of your metadata to existing fields or choose to have fine grained control over every setting.")]),e._v(" "),s("p",[e._v("The default Metadata fields include:")]),e._v(" "),s("ul",[s("li",[e._v("Meta Title")]),e._v(" "),s("li",[e._v("Meta Description")]),e._v(" "),s("li",[e._v("Meta Keywords")]),e._v(" "),s("li",[e._v("Meta Image")]),e._v(" "),s("li",[e._v("Main Entity")]),e._v(" "),s("li",[e._v("Canonical URL")]),e._v(" "),s("li",[e._v("Meta Details: Search")]),e._v(" "),s("li",[e._v("Meta Details: Open Graph")]),e._v(" "),s("li",[e._v("Meta Details: Twitter")]),e._v(" "),s("li",[e._v("Meta Details: Geo")]),e._v(" "),s("li",[e._v("Meta Details: Robots")])]),e._v(" "),s("h3",{attrs:{id:"existing-fields"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#existing-fields"}},[e._v("#")]),e._v(" Existing Fields")]),e._v(" "),s("p",[e._v("The easiest way to manage your metadata is to map your Metadata fields to existing fields in your field layout. The Meta Title and Meta Description fields will be used for Search and Social Sharing metadata fields. The Meta Image field will be used for Social Sharing.")]),e._v(" "),s("h3",{attrs:{id:"display-editable-field"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#display-editable-field"}},[e._v("#")]),e._v(" Display Editable Field")]),e._v(" "),s("p",[e._v("Select the "),s("strong",[e._v("Display Editable Field")]),e._v(" option if you want Sprout SEO to output a field in your Field Layout to manage a specific type of metadata metadata.")]),e._v(" "),s("div",{staticClass:"custom-block warning"},[s("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),s("p",[e._v("Choosing to Display Editable Fields will increase the amount of time and effort necessary to post your content and manage your metadata. This level of control may not be necessary and will require a higher ongoing budget to manage well.")])]),e._v(" "),s("h3",{attrs:{id:"add-custom-format"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#add-custom-format"}},[e._v("#")]),e._v(" Add Custom Format")]),e._v(" "),s("div",{pre:!0},[s("p",[e._v("When the "),s("strong",[e._v("Add Custom Format")]),e._v(" option is selected, you can reference any fields available to your saved Element using Craft Object Syntax. For example, you could reference the Title field in your custom format as "),s("code",[e._v("{title}")]),e._v(" or "),s("code",[e._v("{{ object.title }}")]),e._v(" and a custom field as "),s("code",[e._v("{customFieldHandle}")]),e._v(" or "),s("code",[e._v("{{ object.customFieldHandle }}")]),e._v(":")])]),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[e._v("{title} - {region} - {year} \n")])])]),s("p",[e._v("When using the 'Add Custom Format' setting for an image, your value should be the id of an image such as:")]),e._v(" "),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[e._v("{%")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[e._v("if")]),e._v(" object"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("'")]),e._v("assetFieldHandle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("'")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("]")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[e._v("%}")])]),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[e._v("{{")]),e._v(" object"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(".")]),e._v("assetFieldHandle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(".")]),e._v("first"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(".")]),e._v("id "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[e._v("}}")])]),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[e._v("{%")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[e._v("endif")]),e._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[e._v("%}")])]),e._v("\n")])])]),s("h3",{attrs:{id:"meta-details"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#meta-details"}},[e._v("#")]),e._v(" Meta Details")]),e._v(" "),s("p",[e._v("Meta Details fields can be enabled for Metadata fields to give you or your SEO team granular control over your metadata. Meta Details fields display as matrix-style blocks. Users can optionally select one or more Meta Details blocks to override any specific fields for a metadata type.")]),e._v(" "),s("div",{pre:!0},[s("p",[e._v("Enable Meta Details fields in "),s("code",[e._v("Settings->Advanced->Enable Meta Details fields")]),e._v(".")])]),s("p",[e._v("When Meta Details fields are enabled, you will see new options in your Metadata Field settings that allow you to give users more control over managing metadata in entries using the Metadata field.")]),e._v(" "),s("p",[e._v("In addition to the fields defined (or mapped) in the default Metadata settings you will be able to enable Meta Details overrides for Main Entity (Structured Data), Search, Open Graph, Twitter, Geo, and Robots metadata.")]),e._v(" "),s("h4",[e._v("Enable the Meta Details fields you wish to allow users to override in your Entries")]),e._v(" "),s("p",[s("img",{attrs:{src:a(471),alt:"Element Metadata Meta Details Fields"}})]),e._v(" "),s("h4",[e._v("Meta Details fields display as tabs")]),e._v(" "),s("p",[s("img",{attrs:{src:a(472),alt:"Element Metadata Meta Details Fields"}})]),e._v(" "),s("h2",{attrs:{id:"updating-metadata"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#updating-metadata"}},[e._v("#")]),e._v(" Updating Metadata")]),e._v(" "),s("h4",[e._v("What happens to my existing content if I add a new Metadata Field to a Field Layout?")]),e._v(" "),s("p",[e._v("When you add a Metadata field to an existing URL-Enabled Section's Field Layout, Sprout SEO will trigger a task to resave all Elements in the affected URL-Enabled Section. When each Element is saved, an updated version of your metadata will also be saved.")]),e._v(" "),s("h4",[e._v("What happens to my existing metadata if I change my metadata mapping in my Metadata Field settings?")]),e._v(" "),s("p",[e._v("When you update an existing Metadata field's settings, Sprout SEO will trigger a task to resave all Elements in any URL-Enabled Section that use your Metadata in its Field Layout. When each Element is saved, an updated version of your metadata will also be saved.")])])}),[],!1,null,null,null);t.default=i.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/21.26966947.js b/docs/.vuepress/dist/assets/js/21.26966947.js new file mode 100644 index 00000000..9ce7050a --- /dev/null +++ b/docs/.vuepress/dist/assets/js/21.26966947.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[21],{448:function(t,s,a){t.exports=a.p+"assets/img/sprout-address-modal.a33c38a5.png"},526:function(t,s,a){"use strict";a.r(s);var e=a(34),n=Object(e.a)({},(function(){var t=this,s=t.$createElement,e=t._self._c||s;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",[t._v("Address Field")]),t._v(" "),e("p",[t._v("The Address Field is an international field type which let's you capture and display address data using a Craft-style Address modal. The Address Field supports addresses for 200 countries from Google's Address Data Service.")]),t._v(" "),e("p",[e("img",{attrs:{src:a(448),alt:"Address Field Modal"}})]),t._v(" "),e("p",[t._v("The Address Field uses Craft's Relations field and modal edit UI to stay consistent with the Craft User experience, simplifies often-complex multi-column address layouts to a single column, and works with Craft's Matrix field.")]),t._v(" "),e("h2",{attrs:{id:"templates"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#templates"}},[t._v("#")]),t._v(" Templates")]),t._v(" "),e("p",[t._v("You can access your Address Field in your templates via it's field handle.")]),t._v(" "),e("div",{staticClass:"language-twig extra-class"},[e("pre",{pre:!0,attrs:{class:"language-twig"}},[e("code",[e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" entry"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("addressField"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("countryCode "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" entry"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("addressField"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("countryThreeLetterCode "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" entry"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("addressField"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("currencyCode "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" entry"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("addressField"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("locale "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" entry"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("addressField"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("administrativeArea "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" entry"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("addressField"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("administrativeAreaCode "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" entry"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("addressField"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("locality "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" entry"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("addressField"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("dependentLocality "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" entry"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("addressField"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("postalCode "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" entry"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("addressField"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("sortingCode "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" entry"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("addressField"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("address1 "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" entry"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("addressField"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("address2 "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" entry"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("addressField"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("country "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n")])])]),e("h2",{attrs:{id:"settings"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#settings"}},[t._v("#")]),t._v(" Settings")]),t._v(" "),e("div",{pre:!0},[e("p",[t._v("Addresses are validated based on the country that is selected. Validation is handled by Google's Address Data Service (via the "),e("code",[t._v("commerceguys/addressing")]),t._v(" library).")])]),e("p",[t._v("By default, the Address Field is setup for international addresses from all countries but can be limited to a single country as well.")])])}),[],!1,null,null,null);s.default=n.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/22.cfbf5b6d.js b/docs/.vuepress/dist/assets/js/22.cfbf5b6d.js new file mode 100644 index 00000000..71afa147 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/22.cfbf5b6d.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[22],{449:function(e,a,t){e.exports=t.p+"assets/img/sprout-email-field.35100d75.png"},528:function(e,a,t){"use strict";t.r(a);var s=t(34),i=Object(s.a)({},(function(){var e=this,a=e.$createElement,s=e._self._c||a;return s("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[s("h1",[e._v("Email Field")]),e._v(" "),s("p",[e._v("The Email Address field allows you to require a valid email address using Craft and Sprout Forms front-end Fields.")]),e._v(" "),s("p",[s("img",{attrs:{src:t(449),alt:"Sprout Email Field"}})]),e._v(" "),s("div",{pre:!0},[s("p",[e._v("When an email address is recognized, a "),s("em",[e._v("Send Email")]),e._v(" icon appears at the right hand side of an Email Address field. If you click on the "),s("em",[e._v("Send Email")]),e._v(" link, your computer will open your primary mail program and populate the "),s("code",[e._v("to:")]),e._v(" field with your email address.")])]),s("h2",{attrs:{id:"templates"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#templates"}},[e._v("#")]),e._v(" Templates")]),e._v(" "),s("p",[e._v("You can access your Email Field in your templates via it's field handle.")]),e._v(" "),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[e._v("{{")]),e._v(" entry"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(".")]),e._v("emailField "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[e._v("}}")])]),e._v("\n")])])]),s("h2",{attrs:{id:"settings"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#settings"}},[e._v("#")]),e._v(" Settings")]),e._v(" "),s("p",[e._v("The Email Address field uses PHPs "),s("a",{attrs:{href:"http://php.net/manual/en/filter.filters.validate.php",target:"_blank",rel:"noopener noreferrer"}},[e._v("FILTER_VALIDATE_EMAIL"),s("OutboundLink")],1),e._v(" which states:")]),e._v(" "),s("blockquote",[s("p",[e._v("In general, this validates e-mail addresses against the syntax in RFC 822, with the exceptions that comments and whitespace folding and dotless domain names are not supported.")])]),e._v(" "),s("h3",{attrs:{id:"custom-validation-and-error-messages"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#custom-validation-and-error-messages"}},[e._v("#")]),e._v(" Custom Validation and Error Messages")]),e._v(" "),s("p",[e._v("If you have more specific email validation needs, you can select the "),s("em",[e._v("Email Addresses for this field have their own validation pattern")]),e._v(" setting and provide a custom "),s("strong",[e._v("Validation Pattern")]),e._v(" and "),s("strong",[e._v("Error Message")]),e._v(".")]),e._v(" "),s("h3",{attrs:{id:"require-email-address-to-be-unique"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#require-email-address-to-be-unique"}},[e._v("#")]),e._v(" Require email address to be unique")]),e._v(" "),s("p",[e._v("Enable the "),s("em",[e._v("Require email address to be unique")]),e._v(" option if you want to ensure that an email address can only be used once. Duplicate emails using the same field will be considered invalid. Unique emails are only considered on a per-field basis. If you create multiple Email Address fields with the "),s("em",[e._v("Require email address to be unique")]),e._v(" option, similar emails can be used across the different fields, but not for data using the same email field.")]),e._v(" "),s("p",[e._v("One use case where this might be handy is if you are running a contest and have a landing page form where you only want each person (identified by email address) to be able to submit one entry.")]),e._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),s("p",[e._v("On the front-end, the Email Field supports HTML5 client-side validation including the "),s("code",[e._v("required")]),e._v(" attribute, the "),s("code",[e._v("email")]),e._v(" input type, and custom validation patterns and error messages.")])])])}),[],!1,null,null,null);a.default=i.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/23.347b5364.js b/docs/.vuepress/dist/assets/js/23.347b5364.js new file mode 100644 index 00000000..d7de6bd5 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/23.347b5364.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[23],{452:function(e,t,o){e.exports=o.p+"assets/img/sprout-notes-field-output.5f88c983.png"},531:function(e,t,o){"use strict";o.r(t);var s=o(34),i=Object(s.a)({},(function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[s("h1",[e._v("Notes Field")]),e._v(" "),s("p",[e._v("The Notes Field is a Matrix-style, information-only field for Craft CMS that allows you to add supplementary information to a Field Layout.")]),e._v(" "),s("p",[s("img",{attrs:{src:o(452),alt:"Notes Field"}})]),e._v(" "),s("h2",{attrs:{id:"custom-styles"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#custom-styles"}},[e._v("#")]),e._v(" Custom Styles")]),e._v(" "),s("div",{pre:!0},[s("p",[e._v("To add custom styles, create a new CSS file with your styles in the "),s("code",[e._v("config/sproutnotes")]),e._v(" folder.")])]),s("div",{pre:!0},[s("p",[e._v("The name of your CSS file will display in the "),s("em",[e._v("Style")]),e._v(" dropdown of your Notes field settings. For example, if you name your file "),s("code",[e._v("Zebra Stripes.css")]),e._v(" the option "),s("em",[e._v("Zebra Stripes")]),e._v(" will appear in your Style settings dropdown.")])]),s("div",{pre:!0},[s("p",[e._v("Field styles depend on dynamic field names so your classes will need to include the "),s("code",[e._v("FIELDHANDLE")]),e._v(" placeholder in order for Sprout Fields to swap out the placeholder with the right Field ID for your styles to display properly.")])]),s("p",[e._v("See our Default CSS styles for an example and use your browsers Inspect Code feature to explore how these styles are applied to your Notes field.")]),e._v(" "),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[e._v(".field[id=fields-FIELDHANDLE-field] {\n background-color: #fafafa;\n border: 1px solid #e3e5e8;\n padding: 0;\n border-radius: 5px;\n}\n.field[id=fields-FIELDHANDLE-field] .heading {\n background: #ebedef;\n padding: 7px 14px 7px;\n margin: 0;\n}\n.field[id=fields-FIELDHANDLE-field] .input {\n padding: 7px 14px 14px;\n}\n.field[id=fields-FIELDHANDLE-field] label {\n color: #576575;\n cursor: pointer;\n display: block;\n font-size: 1em;\n font-weight: bold;\n padding-right: 100px;\n}\n.field[id=fields-FIELDHANDLE-field] ul {\n color: #232323;\n list-style-type: disc;\n margin: 0 0 1em 3em;\n}\n")])])])])}),[],!1,null,null,null);t.default=i.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/24.3978c547.js b/docs/.vuepress/dist/assets/js/24.3978c547.js new file mode 100644 index 00000000..ed533993 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/24.3978c547.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[24],{458:function(t,e,a){t.exports=a.p+"assets/img/sprout-phone-field.a82a688d.png"},535:function(t,e,a){"use strict";a.r(e);var n=a(34),s=Object(n.a)({},(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("h1",[t._v("Phone Field")]),t._v(" "),n("p",[t._v("The Phone Field Type helps you manage valid international phone numbers with a custom Phone Field.")]),t._v(" "),n("p",[n("img",{attrs:{src:a(458),alt:"Sprout Phone Field"}})]),t._v(" "),n("p",[t._v("When a phone number is recognized, a "),n("em",[t._v("Phone")]),t._v(" icon appears at the right hand side of the phone field. If you click on the "),n("em",[t._v("Phone")]),t._v(" link, your computer will open your primary phone program to initiate a call.")]),t._v(" "),n("p",[t._v("The Phone Field helps parse, format, and validate phone numbers for all countries and regions of the world.")]),t._v(" "),n("h2",{attrs:{id:"templates"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#templates"}},[t._v("#")]),t._v(" Templates")]),t._v(" "),n("p",[t._v("The Phone Field is provided to your Twig Template as a Phone Model with several options:")]),t._v(" "),n("div",{staticClass:"language-twig extra-class"},[n("pre",{pre:!0,attrs:{class:"language-twig"}},[n("code",[n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" entry"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("phoneField"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("phone "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v(" "),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# 707-541-4131 #}")])]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" entry"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("phoneField"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("country "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v(" "),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# US #}")])]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" entry"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("phoneField"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("code "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v(" "),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# 1 #}")])]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" entry"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("phoneField"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("international "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v(" "),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# +1 707-541-4131 #}")])]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" entry"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("phoneField"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("national "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v(" "),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# (707) 541-4131 #}")])]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" entry"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("phoneField"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("E164 "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v(" "),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# +17075414131 #}")])]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" entry"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("phoneField"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("RFC3966 "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v(" "),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# tel:+1-707-541-4131 #}")])]),t._v("\n")])])]),n("h2",{attrs:{id:"settings"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#settings"}},[t._v("#")]),t._v(" Settings")]),t._v(" "),n("div",{pre:!0},[n("p",[t._v("Phone Numbers are validated based on the country that is selected. Validation is powered by Google's international phone number library "),n("code",[t._v("libphonenumber")]),t._v(".")])]),n("p",[t._v("By default, the Phone Field is setup for international addresses from all countries but can be limited to a single country as well.")])])}),[],!1,null,null,null);e.default=s.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/25.1cc4d8e4.js b/docs/.vuepress/dist/assets/js/25.1cc4d8e4.js new file mode 100644 index 00000000..fd7cf609 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/25.1cc4d8e4.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[25],{459:function(t,e,a){t.exports=a.p+"assets/img/example-url-field.0aed9694.gif"},537:function(t,e,a){"use strict";a.r(e);var s=a(34),i=Object(s.a)({},(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",[t._v("URL Field")]),t._v(" "),s("p",[t._v("The URL field allows you to require a valid URL using Craft and Sprout Forms front-end Fields.")]),t._v(" "),s("p",[s("img",{attrs:{src:a(459),alt:"Sprout URL Field"}})]),t._v(" "),s("div",{pre:!0},[s("p",[t._v("When a URL is recognized, a "),s("code",[t._v("Visit URL")]),t._v(" icon appears on the right side of the input field. You can test the URL in the field by opening it in a new window.")])]),s("h2",{attrs:{id:"templates"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#templates"}},[t._v("#")]),t._v(" Templates")]),t._v(" "),s("p",[t._v("Display your URL field value in your templates:")]),t._v(" "),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" entry"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("urlField "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n")])])]),s("h2",{attrs:{id:"settings"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#settings"}},[t._v("#")]),t._v(" Settings")]),t._v(" "),s("div",{pre:!0},[s("p",[t._v("For the URL field to validate, your input must begin with "),s("code",[t._v("http://")]),t._v(", "),s("code",[t._v("https://")]),t._v(", or "),s("code",[t._v("ftp://")]),t._v("; have some number of characters followed by a period "),s("code",[t._v(".")]),t._v(", and then some other number of characters. Query strings are permitted after the initial period.")])]),s("div",{staticClass:"custom-block warning"},[s("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),s("p",[t._v("The default URL validation is not meant to catch every link that is invalid. The URL Field is designed to reduce the chances that invalid emails are caused by small typos.")])]),t._v(" "),s("p",[s("strong",[t._v("Custom Validation and Error Messages")])]),t._v(" "),s("p",[t._v("If you have more specific URL validation needs, you can select the "),s("em",[t._v("Links for this field have their own validation pattern")]),t._v(" setting and provide a custom "),s("strong",[t._v("Validation Pattern")]),t._v(" and "),s("strong",[t._v("Error Message")]),t._v(". Custom Validation Patterns support regular expressions.")]),t._v(" "),s("p",[t._v("Below are a few regular expressions for common services. These types of patterns may help enforce that a URL submitted is associated with a specific domain. You can adjust them to meet your specific needs or create your own patterns. These are only provided as examples to help get you started:")]),t._v(" "),s("div",{pre:!0},[s("div",{pre:!0,attrs:{class:"table"}},[s("table",[s("thead",[s("tr",[s("th",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Regular Expression")]),t._v(" "),s("th",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Notes")])])]),t._v(" "),s("tbody",[s("tr",[s("td",{pre:!0,attrs:{style:"text-align:left"}},[t._v("^https://www.facebook.com/(.*)")]),t._v(" "),s("td",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Match URLs that begin with "),s("code",[t._v("https://www.facebook.com/")])])]),t._v(" "),s("tr",[s("td",{pre:!0,attrs:{style:"text-align:left"}},[t._v("^https://www.linkedin.com/(.*)")]),t._v(" "),s("td",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Match URLs that begin with "),s("code",[t._v("https://www.linkedin.com/")])])]),t._v(" "),s("tr",[s("td",{pre:!0,attrs:{style:"text-align:left"}},[t._v("^https://www.pinterest.com/(.*)")]),t._v(" "),s("td",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Match URLs that begin with "),s("code",[t._v("https://www.pinterest.com/")])])]),t._v(" "),s("tr",[s("td",{pre:!0,attrs:{style:"text-align:left"}},[t._v("^https://twitter.com/(.*)")]),t._v(" "),s("td",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Match URLs that begin with "),s("code",[t._v("https://www.twitter.com/")])])])])])])])])}),[],!1,null,null,null);e.default=i.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/26.2e3b8157.js b/docs/.vuepress/dist/assets/js/26.2e3b8157.js new file mode 100644 index 00000000..62942beb --- /dev/null +++ b/docs/.vuepress/dist/assets/js/26.2e3b8157.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[26],{460:function(t,r,s){t.exports=s.p+"assets/img/sprout-forms-drag-drop.81853120.png"},538:function(t,r,s){"use strict";s.r(r);var o=s(34),e=Object(o.a)({},(function(){var t=this,r=t.$createElement,o=t._self._c||r;return o("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[o("h1",[t._v("About Sprout Forms")]),t._v(" "),o("p",[t._v("Sprout Forms is an online form builder for Craft CMS that makes it easy for content authors to manage complex forms while also giving a wonderful amount of control for designers and developers.")]),t._v(" "),o("p",[o("img",{attrs:{src:s(460),alt:"Drag & Drop Forms"}})]),t._v(" "),o("h2",{attrs:{id:"easy-setup"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#easy-setup"}},[t._v("#")]),t._v(" Easy Setup")]),t._v(" "),o("p",[t._v("Get up in running in minutes with Sprout Forms default "),o("RouterLink",{attrs:{to:"/forms/default-form-templates.html"}},[t._v("Form Templates")]),t._v(".")],1),t._v(" "),o("div",{staticClass:"language-twig extra-class"},[o("pre",{pre:!0,attrs:{class:"language-twig"}},[o("code",[o("span",{pre:!0,attrs:{class:"token twig language-twig"}},[o("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" sprout"),o("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("forms"),o("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("displayForm"),o("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),o("span",{pre:!0,attrs:{class:"token string"}},[o("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("contactForm"),o("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),o("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),o("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n")])])]),o("p",[t._v("Sprout Forms supports over 20 fields, spam protection, error handling, etc.")]),t._v(" "),o("h2",{attrs:{id:"_100-control"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#_100-control"}},[t._v("#")]),t._v(" 100% Control")]),t._v(" "),o("p",[t._v("As you need more fine-grained control over your forms and form workflows, you have it. Sprout Forms let's you customize:")]),t._v(" "),o("ul",[o("li",[t._v("Form Templates ("),o("RouterLink",{attrs:{to:"/forms/template-overrides.html"}},[t._v("Template Overrides")]),t._v(", "),o("RouterLink",{attrs:{to:"/forms/custom-form-templates.html"}},[t._v("Custom Form Templates")]),t._v(")")],1),t._v(" "),o("li",[t._v("Form Fields ("),o("RouterLink",{attrs:{to:"/forms/custom-form-fields.html"}},[t._v("Form Fields")]),t._v(")")],1),t._v(" "),o("li",[t._v("Email Templates ("),o("RouterLink",{attrs:{to:"/email/template-overrides.html"}},[t._v("Template Overrides")]),t._v(")")],1),t._v(" "),o("li",[t._v("Form Entry Titles")]),t._v(" "),o("li",[t._v("Form Entry Workflow Statuses")]),t._v(" "),o("li",[t._v("How you save your form data")]),t._v(" "),o("li",[t._v("Where you submit your form data ("),o("RouterLink",{attrs:{to:"/forms/integrations.html"}},[t._v("Integrations")]),t._v(")")],1),t._v(" "),o("li",[t._v("Spam Protection")]),t._v(" "),o("li",[t._v("Reporting")]),t._v(" "),o("li",[t._v("Importing and Exporting data")])])])}),[],!1,null,null,null);r.default=e.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/27.b31ad30b.js b/docs/.vuepress/dist/assets/js/27.b31ad30b.js new file mode 100644 index 00000000..87c86e70 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/27.b31ad30b.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[27],{464:function(t,e,s){t.exports=s.p+"assets/img/redirects-index.49e5851c.png"},585:function(t,e,s){"use strict";s.r(e);var n=s(34),r=Object(n.a)({},(function(){var t=this.$createElement,e=this._self._c||t;return e("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[e("h1",[this._v("About Sprout Redirects")]),this._v(" "),e("p",[this._v("Sprout Redirects enables content managers to manage Redirects and Short URLs, track 404s, and ensure all content is findable.")]),this._v(" "),e("p",[e("img",{attrs:{src:s(464),alt:"Sprout SEO Redirects - Element Index Page"}})])])}),[],!1,null,null,null);e.default=r.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/28.1ed8b4da.js b/docs/.vuepress/dist/assets/js/28.1ed8b4da.js new file mode 100644 index 00000000..4f4d2fbe --- /dev/null +++ b/docs/.vuepress/dist/assets/js/28.1ed8b4da.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[28],{470:function(t,a,s){t.exports=s.p+"assets/img/sprout-seo-metadata-variable.10b20815.png"},595:function(t,a,s){"use strict";s.r(a);var n=s(34),e=Object(n.a)({},(function(){var t=this,a=t.$createElement,n=t._self._c||a;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("h1",[t._v("Custom Metadata Variable")]),t._v(" "),n("div",{pre:!0},[n("p",[t._v("Sprout SEO generates the metadata that is output to your pages with the "),n("code",[t._v("sproutseo")]),t._v(" tag:")])]),n("div",{staticClass:"language-twig extra-class"},[n("pre",{pre:!0,attrs:{class:"language-twig"}},[n("code",[n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("sproutseo")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("optimize"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),t._v(" "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n")])])]),n("p",[t._v("If you prefer to have full control over the metadata and how it is output on your pages, you can stop Sprout SEO from outputting metadata for you and just let it generate the metadata and make it available to your Twig template as a variable.")]),t._v(" "),n("p",[t._v("This will give you control to change the output format, stop certain items from being output, and even output additional metadata in new ways to meet your needs. To give yourself control over your metadata variable, you'll need to update two Advanced settings:")]),t._v(" "),n("div",{staticClass:"table"},[n("table",[n("thead",[n("tr",[n("th",{staticStyle:{"text-align":"left"}},[t._v("Setting")]),t._v(" "),n("th",{staticStyle:{"text-align":"left"}},[t._v("Description")])])]),t._v(" "),n("tbody",[n("tr",[n("td",{staticStyle:{"text-align":"left"}},[n("strong",[t._v("Automatically render metadata")])]),t._v(" "),n("td",{staticStyle:{"text-align":"left"}},[t._v("Disable this setting to stop Sprout SEO from outputting your metadata.")])]),t._v(" "),n("tr",[n("td",{staticStyle:{"text-align":"left"}},[n("strong",[t._v("Enable custom metadata variable")])]),t._v(" "),n("td",{staticStyle:{"text-align":"left"}},[t._v("Enable this setting and give your custom metadata variable a name. Sprout SEO will process your metadata and make it available to your template as this variable.")])])])])]),t._v(" "),n("p",[n("img",{attrs:{src:s(470),alt:"Custom Metadata Variable"}})]),t._v(" "),n("div",{pre:!0},[n("p",[t._v("To manage the metadata that Sprout SEO generates as a custom variable in your templates, you can do something like the following. Reference Sprout SEO's own template in "),n("code",[t._v("sproutseo/templates/_special/metadata.html")]),t._v(" and be sure to continue to use the "),n("code",[t._v("{% sproutseo 'optimize' %}")]),t._v(" tag "),n("em",[t._v("before")]),t._v(" you access your "),n("code",[t._v("metadata")]),t._v(" variable in your templates (it's necessary to process your metadata and make the variable available):")])]),n("div",{staticClass:"language-twig extra-class"},[n("pre",{pre:!0,attrs:{class:"language-twig"}},[n("code",[n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("sproutseo")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("optimize"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),t._v(" "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" globals "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" metadata"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("globals "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("-%}")])]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" meta "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" metadata"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("meta "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("-%}")])]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" schema "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" metadata"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("schema "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("for")]),t._v(" name"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("in")]),t._v(" meta"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("search "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("switch")]),t._v(" name "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("case")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("title"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("title")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" value "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("case")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("author"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("link")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" value "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("rel")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("author"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("case")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("publisher"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("link")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" value "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("rel")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("publisher"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("default")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("meta")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" name "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("content")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" value "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endswitch")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endfor")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("for")]),t._v(" name"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("in")]),t._v(" meta"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("robots "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("switch")]),t._v(" name "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("case")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("canonical"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("link")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("rel")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("canonical"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("href")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" value "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("default")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("meta")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" name "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("content")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" value "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endswitch")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endfor")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("for")]),t._v(" name"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("in")]),t._v(" meta"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("geo "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("meta")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" name "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("content")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" value "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endfor")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("for")]),t._v(" name"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("in")]),t._v(" meta"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("openGraph "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("meta")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("property")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" name "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("content")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" value "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endfor")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("for")]),t._v(" name"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" value "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("in")]),t._v(" meta"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("twitterCard "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("meta")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" name "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("content")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" value "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endfor")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("for")]),t._v(" property "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("in")]),t._v(" globals"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ownership "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token tag"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("meta")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" property"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("metaTag "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("property")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" property"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("metaTag "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),n("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("content")]),n("span",{pre:!0,attrs:{class:"token attr-value"}},[n("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" property"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("verificationCode "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endfor")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("for")]),t._v(" item "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("in")]),t._v(" schema "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("-%}")])]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" item "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" item"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getSchema"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token twig language-twig"}},[n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endfor")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n")])])])])}),[],!1,null,null,null);a.default=e.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/29.0d89dae2.js b/docs/.vuepress/dist/assets/js/29.0d89dae2.js new file mode 100644 index 00000000..ae2c9d40 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/29.0d89dae2.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[29],{473:function(t,e,i){t.exports=i.p+"assets/img/xml-sitemap.d7e314b4.png"},605:function(t,e,i){"use strict";i.r(e);var s=i(34),a=Object(s.a)({},(function(){var t=this.$createElement,e=this._self._c||t;return e("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[e("h1",[this._v("About Sprout Sitemaps")]),this._v(" "),e("p",[this._v("Sprout Sitemaps gives you fine-grained control over your XML Sitemaps for standalone, multi-lingual, and multi-regional sites. Sitemaps are managed directly within Craft (no template updates required).")]),this._v(" "),e("p",[e("img",{attrs:{src:i(473),alt:"Sitemap Management"}})])])}),[],!1,null,null,null);e.default=a.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/30.19e2addd.js b/docs/.vuepress/dist/assets/js/30.19e2addd.js new file mode 100644 index 00000000..3036eba3 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/30.19e2addd.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[30],{484:function(t,e,s){"use strict";s.r(e);var n=["There's nothing here.","How did we get here?","That's a Four-Oh-Four.","Looks like we've got some broken links."],o={methods:{getMsg:function(){return n[Math.floor(Math.random()*n.length)]}}},i=s(34),h=Object(i.a)(o,(function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"theme-container"},[e("div",{staticClass:"theme-default-content"},[e("h1",[this._v("404")]),this._v(" "),e("blockquote",[this._v(this._s(this.getMsg()))]),this._v(" "),e("RouterLink",{attrs:{to:"/"}},[this._v("\n Take me home.\n ")])],1)])}),[],!1,null,null,null);e.default=h.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/31.230d5cf6.js b/docs/.vuepress/dist/assets/js/31.230d5cf6.js new file mode 100644 index 00000000..e8b9259c --- /dev/null +++ b/docs/.vuepress/dist/assets/js/31.230d5cf6.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[31],{492:function(t,e,a){"use strict";a.r(e);var i=a(34),n=Object(i.a)({},(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",[t._v("About Sprout Campaigns")]),t._v(" "),a("p",[t._v("Sprout Email enables integrated email marketing, targeted transactional email, tracking and re-sending Sent Emails, and flexible subscriber and list management.")]),t._v(" "),a("p",[t._v("The table below gives a top level overview of the current Mailers and List integrations in Sprout Email.")]),t._v(" "),a("div",{staticClass:"table"},[a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("Mailer")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("Available Via")]),t._v(" "),a("th",{staticStyle:{"text-align":"center"}},[t._v("Campaigns")]),t._v(" "),a("th",{staticStyle:{"text-align":"center"}},[t._v("Notifications")]),t._v(" "),a("th",{staticStyle:{"text-align":"center"}},[t._v("Lists")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("Default Mailer")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Sprout Email")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[a("strong",[t._v("✓")])]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[a("strong",[t._v("✓")])])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("Copy/Paste")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Sprout Email")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[a("strong",[t._v("✓")])]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("–")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("MailChimp")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[a("a",{attrs:{href:"https://github.com/barrelstrength/craft-sprout-mailchimp",target:"_blank",rel:"noopener noreferrer"}},[t._v("Plugin"),a("OutboundLink")],1)]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[a("strong",[t._v("✓")])]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("–")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("Campaign Monitor")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[a("a",{attrs:{href:"https://github.com/barrelstrength/craft-sprout-campaign-monitor",target:"_blank",rel:"noopener noreferrer"}},[t._v("Plugin"),a("OutboundLink")],1)]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[a("strong",[t._v("✓")])]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("–")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("Custom Mailers")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[a("a",{attrs:{href:"mailto:sprout@barrelstrengthdesign.com"}},[t._v("Contact Us")]),t._v("!")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[a("strong",[t._v("✓")])]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("–")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("–")])])])])]),t._v(" "),a("h2",{attrs:{id:"notification-emails"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#notification-emails"}},[t._v("#")]),t._v(" Notification Emails")]),t._v(" "),a("p",[t._v("Send personalized notification emails to your users when events are triggered in Craft. Stay in the loop about new content on your site, changes to your content, a publish workflow, or when forms are submitted (Sprout Forms) or purchases are made (Craft Commerce).")]),t._v(" "),a("p",[a("RouterLink",{attrs:{to:"/email/notification-emails.html"}},[t._v("Read More")])],1),t._v(" "),a("h2",{attrs:{id:"campaigns-emails"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#campaigns-emails"}},[t._v("#")]),t._v(" Campaigns Emails")]),t._v(" "),a("p",[t._v("Campaign Emails allow you to create powerful email campaigns using Live Preview, Matrix, and all of Craft's fields. Manage your Email Templates using HTML and Twig right within Craft's template structure and export your Campaign Emails to popular email service providers like Campaign Monitor and MailChimp.")]),t._v(" "),a("p",[a("RouterLink",{attrs:{to:"/campaigns/campaign-emails.html"}},[t._v("Read More")])],1),t._v(" "),a("h2",{attrs:{id:"sent-email"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#sent-email"}},[t._v("#")]),t._v(" Sent Email")]),t._v(" "),a("p",[t._v("Sent Email tracking captures a copy of all emails sent from your website. Review Sent Emails, confirm sent statuses, and re-send email to your users.")]),t._v(" "),a("p",[a("RouterLink",{attrs:{to:"/email/sent-emails.html"}},[t._v("Read More")])],1)])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/32.9a25418b.js b/docs/.vuepress/dist/assets/js/32.9a25418b.js new file mode 100644 index 00000000..e503f22f --- /dev/null +++ b/docs/.vuepress/dist/assets/js/32.9a25418b.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[32],{489:function(t,a,e){"use strict";e.r(a);var s=e(34),n=Object(s.a)({},(function(){var t=this,a=t.$createElement,e=t._self._c||a;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",[t._v("Campaign Emails")]),t._v(" "),e("p",[t._v("Campaign Email Elements allow you to build and manage marketing and bulk email right within Craft and send those emails via your favorite Email Service Providers.")]),t._v(" "),e("div",{staticClass:"table"},[e("table",[e("thead",[e("tr",[e("th",{staticStyle:{"text-align":"left"}},[t._v("Mailer")]),t._v(" "),e("th",{staticStyle:{"text-align":"left"}},[t._v("Description")])])]),t._v(" "),e("tbody",[e("tr",[e("td",{staticStyle:{"text-align":"left"}},[e("RouterLink",{attrs:{to:"/campaigns/copy-paste-mailer.html"}},[t._v("Copy/Paste")])],1),t._v(" "),e("td",{staticStyle:{"text-align":"left"}},[t._v("Copy and paste your email campaigns to better (or worse) places")])]),t._v(" "),e("tr",[e("td",{staticStyle:{"text-align":"left"}},[e("a",{attrs:{href:"https://github.com/barrelstrength/craft-sprout-mailchimp",target:"_blank",rel:"noopener noreferrer"}},[t._v("MailChimp"),e("OutboundLink")],1)]),t._v(" "),e("td",{staticStyle:{"text-align":"left"}},[t._v("Send your email campaigns via MailChimp")])]),t._v(" "),e("tr",[e("td",{staticStyle:{"text-align":"left"}},[e("a",{attrs:{href:"https://github.com/barrelstrength/craft-sprout-mailchimp",target:"_blank",rel:"noopener noreferrer"}},[t._v("Campaign Monitor"),e("OutboundLink")],1)]),t._v(" "),e("td",{staticStyle:{"text-align":"left"}},[t._v("Send your email campaigns via Campaign Monitor")])]),t._v(" "),e("tr",[e("td",{staticStyle:{"text-align":"left"}},[t._v("Custom")]),t._v(" "),e("td",{staticStyle:{"text-align":"left"}},[t._v("Via a "),e("RouterLink",{attrs:{to:"/email/custom-mailers.html"}},[t._v("Custom Mailer")]),t._v(" or "),e("a",{attrs:{href:"mailto:sprout@barrelstrengthdesign.com"}},[t._v("Get in touch")]),t._v("!")],1)])])])]),t._v(" "),e("h2",{attrs:{id:"campaign-types"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#campaign-types"}},[t._v("#")]),t._v(" Campaign Types")]),t._v(" "),e("p",[t._v("When you first setup your Campaign Emails you will need to select a "),e("strong",[t._v("Campaign Type")]),t._v(". The Campaign Type defines which Mailer you want to use and will affect several things about your Campaign Email Workflow.")]),t._v(" "),e("h3",{attrs:{id:"service-provider"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#service-provider"}},[t._v("#")]),t._v(" Service Provider")]),t._v(" "),e("p",[t._v("The selected Campaign Type will determine which Email Service is used when sending your Campaign Emails. Each Mailer will have settings necessary for connecting and sending emails via the Mailer's email service provider.")]),t._v(" "),e("h3",{attrs:{id:"lists"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#lists"}},[t._v("#")]),t._v(" Lists")]),t._v(" "),e("p",[t._v("If a Mailer supports Lists, a dropdown with all available email lists will appear in the sidebar settings when creating a new Campaign Email.")]),t._v(" "),e("h2",{attrs:{id:"email-templates"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#email-templates"}},[t._v("#")]),t._v(" Email Templates")]),t._v(" "),e("p",[t._v("Email Templates for your Campaign Emails can be managed via "),e("RouterLink",{attrs:{to:"/email/template-overrides.html"}},[t._v("Template Overrides")]),t._v(" or via a "),e("RouterLink",{attrs:{to:"/email/custom-email-templates.html"}},[t._v("Custom Email Template")]),t._v(".")],1),t._v(" "),e("h2",{attrs:{id:"test-emails"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#test-emails"}},[t._v("#")]),t._v(" Test Emails")]),t._v(" "),e("p",[t._v("Each email service provider handles tests differently. The "),e("em",[t._v("Send Test")]),t._v(" behavior may vary depending on the Campaign Type you are using.")]),t._v(" "),e("h2",{attrs:{id:"templating"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#templating"}},[t._v("#")]),t._v(" Templating")]),t._v(" "),e("div",{pre:!0},[e("p",[t._v("To output your Campaign emails in your templates you can use the "),e("code",[t._v("sprout.email.entries")]),t._v(" tag. Here is a basic overview of what is available:")])]),e("div",{staticClass:"language-twig extra-class"},[e("pre",{pre:!0,attrs:{class:"language-twig"}},[e("code",[e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" id "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" sprout"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("email"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("entries"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("id"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("first"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" slug "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" sprout"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("email"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("entries"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("slug"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token string"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("my-email-slug"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("first"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" campaignId "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" sprout"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("email"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("entries"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("campaignId"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("find"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" campaignHandle "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" sprout"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("email"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("entries"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("campaignHandle"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token string"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("myCampaign"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("find"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n")])])])])}),[],!1,null,null,null);a.default=n.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/33.633f8a76.js b/docs/.vuepress/dist/assets/js/33.633f8a76.js new file mode 100644 index 00000000..48d0308e --- /dev/null +++ b/docs/.vuepress/dist/assets/js/33.633f8a76.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[33],{493:function(t,a,s){"use strict";s.r(a);var e=s(34),n=Object(e.a)({},(function(){var t=this,a=t.$createElement,s=t._self._c||a;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",[t._v("Copy/Paste Mailer")]),t._v(" "),s("p",[t._v("The Copy/Paste Mailer is for situations where you want to use Craft to build your emails, but you will be using a different system to send your emails.")]),t._v(" "),s("p",[t._v("Setting up a Copy/Paste Campaign is similar to setting up other campaigns, but it doesn't require any settings about who you will be sending to or via what platform. When your email is ready, you will have the option to Copy the HTML and Text output and Paste it wherever your heart desires.")]),t._v(" "),s("h2",{attrs:{id:"templates"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#templates"}},[t._v("#")]),t._v(" Templates")]),t._v(" "),s("p",[t._v("Copy/Paste templates also come with some additional behavior. You can set two templates for your Copy/Paste emails. The first is the template that you would like to use to preview your email within Craft. This template gives allows you to review the email as it should look in it's final form. The second template can be the same, but can also be a separate template. The second template is used for what you want to Copy/Paste to another system. This is useful as some other systems require that you add a header and footer, but have an open ended WYSIWYG where you copy the body of your email template.")]),t._v(" "),s("p",[t._v("For example, your Copy/Paste template settings and templates may work like this:")]),t._v(" "),s("h3",{attrs:{id:"entry-template"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#entry-template"}},[t._v("#")]),t._v(" Entry Template")]),t._v(" "),s("h4",[t._v("emails/email-wrapper")]),t._v(" "),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[s("span",{pre:!0,attrs:{class:"token doctype"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("html")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("head")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("title")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("Email Title"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("body")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("include")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("_emails/email-body"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),s("h3",{attrs:{id:"entry-copy-paste-template"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#entry-copy-paste-template"}},[t._v("#")]),t._v(" Entry Copy/Paste Template")]),t._v(" "),s("h4",[t._v("emails/email-body")]),t._v(" "),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("for")]),t._v(" block "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("in")]),t._v(" email"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("matrixFieldHandle "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" block"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("type "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("heading"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" block"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("heading "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" block"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("type "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("body"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" block"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("body "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endfor")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n")])])])])}),[],!1,null,null,null);a.default=n.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/34.9379600d.js b/docs/.vuepress/dist/assets/js/34.9379600d.js new file mode 100644 index 00000000..90df1e97 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/34.9379600d.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[34],{491:function(t,a,e){"use strict";e.r(a);var r=e(34),o=Object(r.a)({},(function(){var t=this,a=t.$createElement,e=t._self._c||a;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",[t._v("Craft 3")]),t._v(" "),e("p",[t._v("Sprout Email installation and update instructions for Craft 3.")]),t._v(" "),e("h2",{attrs:{id:"requirements"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),e("ul",[e("li",[t._v("Craft CMS 3.0.0 or a more recent version of Craft")])]),t._v(" "),e("h2",{attrs:{id:"installation-via-plugin-store"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#installation-via-plugin-store"}},[t._v("#")]),t._v(" Installation via Plugin Store")]),t._v(" "),e("ol",[e("li",[t._v("Find the plugin in the Plugin Store in your Craft Control Panel")]),t._v(" "),e("li",[t._v("Go to "),e("em",[t._v("Settings → Plugins")]),t._v(" and select “Install”")])]),t._v(" "),e("h2",{attrs:{id:"installation-via-composer"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#installation-via-composer"}},[t._v("#")]),t._v(" Installation via Composer")]),t._v(" "),e("div",{pre:!0},[e("ol",[e("li",[t._v("Open your terminal and go to your Craft project:"),e("br"),e("code",[t._v("cd /path/to/project")])]),t._v(" "),e("li",[t._v("Then tell Composer to load the plugin:"),e("br"),e("code",[t._v("composer require barrelstrength/sprout-forms")])]),t._v(" "),e("li",[t._v("In the Control Panel, go to "),e("em",[t._v("Settings → Plugins")]),t._v(" and select “Install”")])])]),e("h2",{attrs:{id:"upgrading-to-craft-3-unreleased"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#upgrading-to-craft-3-unreleased"}},[t._v("#")]),t._v(" Upgrading to Craft 3 - UNRELEASED")]),t._v(" "),e("div",{staticClass:"custom-block warning"},[e("p",{staticClass:"custom-block-title"},[t._v("BEFORE YOU UPDATE")]),t._v(" "),e("p",[t._v("Make sure you have updated to the latest version of Sprout Email 3.x before updating to Sprout Email 4.x for Craft 3")])]),t._v(" "),e("div",{pre:!0},[e("p",[t._v("CampaignEmail element no longer provides an 'entry' variable to the template, only "),e("code",[t._v("email")]),t._v(" variable")])])])}),[],!1,null,null,null);a.default=o.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/35.ca2a4599.js b/docs/.vuepress/dist/assets/js/35.ca2a4599.js new file mode 100644 index 00000000..2ee7ff45 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/35.ca2a4599.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[35],{494:function(t,a,s){"use strict";s.r(a);var e=s(34),n=Object(e.a)({},(function(){var t=this,a=t.$createElement,s=t._self._c||a;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",[t._v("Settings")]),t._v(" "),s("p",[t._v("Customize the details of your email configuration and workflows with the following settings.")]),t._v(" "),s("h2",{attrs:{id:"general"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#general"}},[t._v("#")]),t._v(" General")]),t._v(" "),s("h3",{attrs:{id:"plugin-name"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#plugin-name"}},[t._v("#")]),t._v(" Plugin Name")]),t._v(" "),s("p",[t._v("Update this setting to rename "),s("strong",[t._v("Sprout Email")]),t._v(" in your Control Panel.")]),t._v(" "),s("h3",{attrs:{id:"choose-which-features-to-enable"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#choose-which-features-to-enable"}},[t._v("#")]),t._v(" Choose which features to enable")]),t._v(" "),s("p",[t._v("Sprout Email includes features for Notification Emails, Campaign Emails, and Sent Email tracking. Sent Email tracking is disabled by default.")]),t._v(" "),s("p",[t._v("Customize which features display in the Sprout Forms sidebar and only include the features you need.")]),t._v(" "),s("h3",{attrs:{id:"default-email-templates"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#default-email-templates"}},[t._v("#")]),t._v(" Default Email Templates")]),t._v(" "),s("p",[t._v("By default, Sprout Email uses our simple, base Basic Notification Email Templates. If you would like to customize the default Email Templates used on all of your Notification Emails, select the Email Template you wish to use here or setup "),s("RouterLink",{attrs:{to:"/email/template-overrides.html"}},[t._v("Template Overrides")]),t._v(".")],1),t._v(" "),s("h3",{attrs:{id:"enable-custom-email-templates-on-a-per-email-basis"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#enable-custom-email-templates-on-a-per-email-basis"}},[t._v("#")]),t._v(" Enable custom Email Templates on a per-email basis")]),t._v(" "),s("p",[t._v("If you need multiple base Email Templates for your Notification Emails, you can enable this setting and select the specific Email Template you wish to use on each Notification Email you set up.")]),t._v(" "),s("h2",{attrs:{id:"campaign-types"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#campaign-types"}},[t._v("#")]),t._v(" Campaign Types")]),t._v(" "),s("p",[t._v("Campaign Types allow you to configure how a specific Campaign should work. Choose a Mailer, Email Templates, customize your Field Layout, and more.")]),t._v(" "),s("h2",{attrs:{id:"mailers"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#mailers"}},[t._v("#")]),t._v(" Mailers")]),t._v(" "),s("p",[t._v("The Mailers tab will list all available Mailers. Custom Mailers can be installed as separate plugins. Mailers that need to be configured will display a link to manage their settings.")]),t._v(" "),s("h2",{attrs:{id:"config-settings"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#config-settings"}},[t._v("#")]),t._v(" Config Settings")]),t._v(" "),s("div",{pre:!0},[s("p",[t._v("You can add the following settings to your "),s("code",[t._v("general.php")]),t._v(" file.")])]),s("h3",{attrs:{id:"mailer-api-settings"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#mailer-api-settings"}},[t._v("#")]),t._v(" Mailer API settings")]),t._v(" "),s("div",{staticClass:"language-php extra-class"},[s("pre",{pre:!0,attrs:{class:"language-php"}},[s("code",[s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'sproutEmail'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("array")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'campaignmonitor'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("array")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'apiKey'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'CONFIG OVERRIDE'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'clientId'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'CONFIG OVERRIDE'")]),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 single-quoted-string"}},[t._v("'mailchimp'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("array")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'apiKey'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'CONFIG OVERRIDE'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'inlineCss'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'CONFIG OVERRIDE'")]),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 single-quoted-string"}},[t._v("'mailgun'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("array")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'apiKey'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'CONFIG OVERRIDE'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'domain'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'CONFIG OVERRIDE'")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'tagPattern'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'CONFIG OVERRIDE'")]),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 punctuation"}},[t._v(")")]),t._v("\n")])])]),s("h3",{attrs:{id:"scheduled-emails"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#scheduled-emails"}},[t._v("#")]),t._v(" Scheduled Emails")]),t._v(" "),s("div",{pre:!0},[s("p",[t._v("Display Date Scheduled is currently a hidden config setting. It will enabled a "),s("code",[t._v("Date Scheduled")]),t._v(" field for your campaigns and an option to mark a Campaign Email with a "),s("code",[t._v("Scheduled")]),t._v(" status. Enabling this does not enabling scheduled emails. At this point, adding support for scheduling functionality would have to be done via a separate custom plugin.")])]),s("div",{staticClass:"language-php extra-class"},[s("pre",{pre:!0,attrs:{class:"language-php"}},[s("code",[s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'sproutEmail'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("array")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'displayDateScheduled'")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant boolean"}},[t._v("true")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])])])}),[],!1,null,null,null);a.default=n.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/36.0c660a58.js b/docs/.vuepress/dist/assets/js/36.0c660a58.js new file mode 100644 index 00000000..422fd97f --- /dev/null +++ b/docs/.vuepress/dist/assets/js/36.0c660a58.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[36],{497:function(t,e,s){"use strict";s.r(e);var a=s(34),n=Object(a.a)({},(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",[t._v("Coding Guidelines")]),t._v(" "),s("p",[t._v("A central principle of the Sprout Plugin Suite is to create an experience – for both users and developers – that looks and feels like the native experience with Craft CMS. Toward that end, wherever possible, Sprout adopts conventions set forth by Craft CMS. General conventions include:")]),t._v(" "),s("div",{staticClass:"table"},[s("table",[s("thead",[s("tr",[s("th",{staticStyle:{"text-align":"left"}},[t._v("Convention")]),t._v(" "),s("th",{staticStyle:{"text-align":"left"}},[t._v("Notes")])])]),t._v(" "),s("tbody",[s("tr",[s("td",{staticStyle:{"text-align":"left"}},[s("a",{attrs:{href:"https://github.com/craftcms/cms",target:"_blank",rel:"noopener noreferrer"}},[t._v("Craft CMS codebase"),s("OutboundLink")],1)]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("Use Craft's APIs in the same way that Craft uses them")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[s("a",{attrs:{href:"https://docs.craftcms.com/v3/extend/coding-guidelines.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("Coding Guidelines"),s("OutboundLink")],1)]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("Follow conventions outlined in Craft's Coding Guidelines")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[s("a",{attrs:{href:"https://github.com/barrelstrength/phpstorm-settings",target:"_blank",rel:"noopener noreferrer"}},[t._v("PhpStorm Settings"),s("OutboundLink")],1)]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("Use the 'Barrel Strength - Craft CMS Project' Code Styles and Inspections. These were initially inspired by the infrequently-updated "),s("a",{attrs:{href:"https://github.com/craftcms/phpstorm-settings",target:"_blank",rel:"noopener noreferrer"}},[t._v("Craft Code Style"),s("OutboundLink")],1),t._v(" and "),s("a",{attrs:{href:"https://github.com/craftcms/phpstorm-settings",target:"_blank",rel:"noopener noreferrer"}},[t._v("Craft Inspections"),s("OutboundLink")],1),t._v(" with some additional customization.")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[s("a",{attrs:{href:"https://plugins.jetbrains.com/plugin/7622-php-inspections-ea-extended-",target:"_blank",rel:"noopener noreferrer"}},[t._v("Php Inspections (EA Extended)"),s("OutboundLink")],1)]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("More code conventions for PhpStorm")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[s("a",{attrs:{href:"https://plugins.jetbrains.com/plugin/9400-yii2-inspections",target:"_blank",rel:"noopener noreferrer"}},[t._v("Yii2 and Craft CMS 3 Inspections"),s("OutboundLink")],1)]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("Yii 2 and Craft-specific inspections in PhpStorm")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[s("a",{attrs:{href:"https://github.com/craftcms/sass",target:"_blank",rel:"noopener noreferrer"}},[t._v("Sass Mixins for Craft CMS"),s("OutboundLink")],1)]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("Use Craft's Control Panel style conventions (reference)")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[s("a",{attrs:{href:"https://www.npmjs.com/package/@pixelandtonic/craftui",target:"_blank",rel:"noopener noreferrer"}},[t._v("Craft UI"),s("OutboundLink")],1)]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("Vue.js components and styles for Craft CMS apps (reference)")])])])])]),t._v(" "),s("p",[t._v("Where there are no clear Craft conventions for our codebase or workflows we endeavor to establish our own conventions that align with the Craft User Experience and are consistent with cultural conventions in the Craft community. An incomplete list of these conventions are outlined below.")]),t._v(" "),s("h2",{attrs:{id:"git-workflow"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#git-workflow"}},[t._v("#")]),t._v(" Git Workflow")]),t._v(" "),s("p",[t._v("We use a git workflow in the spirit of the "),s("a",{attrs:{href:"http://nvie.com/posts/a-successful-git-branching-model/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Git branching model"),s("OutboundLink")],1),t._v(" with a few updates to better fit our workflow.")]),t._v(" "),s("div",{pre:!0},[s("p",[t._v("As we have to maintain multiple master copies of our plugins, instead of a "),s("code",[t._v("master")]),t._v(" branch, we maintain multiple master version branches. These branches are named using the format "),s("code",[t._v("v#")]),t._v(" where "),s("code",[t._v("v2")]),t._v(" would represent all releases for the "),s("code",[t._v("v2.x")]),t._v(" branch of the software. These version numbers correlate with the plugin version numbers, not the Craft version number, as we may have multiple major releases of a plugin for a single release of Craft.")])]),s("div",{staticClass:"language- extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[t._v("# Example plugin branches\n- develop\n- feature/feature-name\n- bugfix/bugfix-name\n- v1\n- v2\n- v3\n")])])]),s("h2",{attrs:{id:"local-development"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#local-development"}},[t._v("#")]),t._v(" Local Development")]),t._v(" "),s("p",[t._v("Create a symlink to the plugin or module within the Craft project that will be used for development:")]),t._v(" "),s("div",{staticClass:"language- extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[t._v("$ ln -s /path/to/cloned/repo /path/to/symlink/in/project/vendor/barrelstrength/folder\n")])])]),s("div",{pre:!0},[s("p",[t._v("In the case you will be editing front-end assets, you'll need to configure "),s("code",[t._v("npm")]),t._v(" and process the "),s("code",[t._v("scss")]),t._v(" and "),s("code",[t._v("js")]),t._v(" files you edit in a give asset bundle's "),s("code",[t._v("src/web/[assetbundle]/src")]),t._v(" folder into the "),s("code",[t._v("src/web/[assetbundle]/dist")]),t._v(" folder:")])]),s("div",{staticClass:"language- extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[t._v("npm install\nnpm run watch\n")])])]),s("h2",{attrs:{id:"naming"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#naming"}},[t._v("#")]),t._v(" Naming")]),t._v(" "),s("p",[t._v("The name of a plugin will be used in several different contexts. We use the following conventions:")]),t._v(" "),s("div",{staticClass:"table"},[s("table",[s("thead",[s("tr",[s("th",{staticStyle:{"text-align":"left"}},[t._v("Context")]),t._v(" "),s("th",{staticStyle:{"text-align":"left"}},[t._v("Naming Convention")])])]),t._v(" "),s("tbody",[s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("GitHub repo")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("barrelstrength/craft-sprout-forms")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("Composer/Packagist")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("barrelstrength/sprout-forms")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("Plugin folder")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("barrelstrength/sprout-forms")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("Namespace")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("barrelstrength/sproutforms")])])])])]),t._v(" "),s("h2",{attrs:{id:"folder-structure"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#folder-structure"}},[t._v("#")]),t._v(" Folder Structure")]),t._v(" "),s("p",[t._v("When possible, we follow conventions in Craft's folder architecture in our plugins.")]),t._v(" "),s("h3",{attrs:{id:"root-directory-and-key-src-files"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#root-directory-and-key-src-files"}},[t._v("#")]),t._v(" Root directory and key src files")]),t._v(" "),s("div",{staticClass:"language- extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[t._v("├── .github\n├── .gitignore\n├── CHANGELOG-[MODULE].md\n├── composer.json\n├── lib\n├── LICENSE.md\n├── README.md\n└── src\n ├── Plugin.php\n └── translations\n └── en\n└── webpack.mix.js\n")])])]),s("div",{pre:!0},[s("p",[t._v("References within "),s("code",[t._v("README.md")]),t._v(" and any other general information files should be kept to a minimum and point users toward our docs, where we maintain more comprehensive documentation. As we maintain several plugins, it gets tedious to update references in numerous general information files and our documentation serves as a centralized place for this type of information about our plugins.")])]),s("div",{pre:!0},[s("p",[t._v("Each module has it's own "),s("code",[t._v("CHANGELOG-[MODULE].md")]),t._v(" file. These are the canonical sources for documenting changes and this data will be copied to a plugin's "),s("code",[t._v("CHANGELOG.md")]),t._v(" file for each module used by a plugin.")])]),s("div",{pre:!0},[s("p",[t._v("Similarly, we aim to keep the "),s("code",[t._v("composer.json")]),t._v(" file as simple as possible. Don't add "),s("code",[t._v("schemaVersion")]),t._v(", "),s("code",[t._v("hasCpSection")]),t._v(", or "),s("code",[t._v("hasCpSettings")]),t._v(" to this file. They should go in the primary plugin module class to more easily toggle the settings without running into issues with cached values in Craft's "),s("code",[t._v("plugins.php")]),t._v(" file.")])]),s("div",{pre:!0},[s("p",[t._v("We rename the primary module class "),s("code",[t._v("Plugin.php")]),t._v(" to use the name of the plugin (i.e. "),s("code",[t._v("SproutForms.php")]),t._v("). This update requires that we set the "),s("code",[t._v("composer.json")]),t._v(" "),s("em",[t._v("extra->class")]),t._v(" setting to define the Plugin.php as a file with the name of the plugin itself.")])]),s("div",{pre:!0},[s("p",[t._v("Front-end packages are managed in "),s("code",[t._v("package.json")]),t._v(". Third-party libraries that must be included in the plugin are are added to the "),s("code",[t._v("lib")]),t._v(" folder. CSS (SCSS) and Javascript (ES6) assets are managed with Webpack via Laravel Mix. Each Asset Source is configured in "),s("code",[t._v("webpack.mix.js")]),t._v(" to process files from the "),s("code",[t._v("src/web/[assetbundle]/src")]),t._v(" folder and compile them to the "),s("code",[t._v("src/web/[assetbundle]/dist")]),t._v(" folder.")])]),s("p",[t._v("Four npm scripts are available during development:")]),t._v(" "),s("div",{pre:!0},[s("ul",[s("li",[s("strong",[t._v("watch")]),t._v(" - Watches for changes in resources and builds production "),s("code",[t._v("dist/")]),t._v(" files")]),t._v(" "),s("li",[s("strong",[t._v("build")]),t._v(" - Builds production "),s("code",[t._v("dist/")]),t._v(" files once")]),t._v(" "),s("li",[s("strong",[t._v("debug")]),t._v(" - Watches for changes in resources and builds dev "),s("code",[t._v("dist/")]),t._v(" files")]),t._v(" "),s("li",[s("strong",[t._v("dev")]),t._v(" - Builds dev "),s("code",[t._v("dist/")]),t._v(" files once")])])]),s("div",{pre:!0},[s("p",[t._v("The "),s("code",[t._v("dist/")]),t._v(" files built for production and dev have the same filenames, so it is a convention that we only commit production files to the repository. The "),s("code",[t._v("debug")]),t._v(" and "),s("code",[t._v("dev")]),t._v(" commands can be used when debugging.")])]),s("h3",{attrs:{id:"resources-and-templating"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#resources-and-templating"}},[t._v("#")]),t._v(" Resources and templating")]),t._v(" "),s("div",{staticClass:"language- extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[t._v("└── src\n └── web\n └── assets\n └── [assetbundle]\n ├── dist\n ├── src\n └── [CustomAssetBundle].php \n └── twig\n └── variables\n └── [CustomVariable.php]\n")])])]),s("div",{pre:!0},[s("p",[t._v("All asset bundles are managed in the "),s("code",[t._v("src/web/assets")]),t._v(" folder and all things Twig (variables, filters, nodes, etc.) are managed in the "),s("code",[t._v("src/web/twig")]),t._v(" folder.")])]),s("h3",{attrs:{id:"components-and-integrations"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#components-and-integrations"}},[t._v("#")]),t._v(" Components and Integrations")]),t._v(" "),s("div",{staticClass:"language- extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[t._v("└── src\n └── base\n └── [BaseCustomComponentType].php\n └── [customcomponenttype]\n ├── [CustomComponentType1].php\n └── [CustomComponentType2].php\n └── fields\n ├── [CustomField1].php\n └── [CustomField2].php\n └── integrations\n └── [pluginname]\n └── [integrationcustomcomponenttype]\n ├── [IntegrationCustomComponentType1].php\n └── [IntegrationCustomComponentType2].php\n └── templates \n └── _components\n └── [customcomponenttype]\n ├── [customcomponenttype1]\n └── [customcomponenttype2]\n └── fields\n ├── [customfield1]\n └── [customfield2]\n └── _integrations\n └── [pluginname]\n └── [integrationcustomcomponenttype]\n ├── [integrationcustomcomponenttype1]\n └── [integrationcustomcomponenttype2]\n")])])]),s("p",[t._v("We manage various types of components within our plugins. The structure above illustrates how we organize three classes of components. We use the example of a Custom Field as how we would organize extending Craft component within our plugins.")]),t._v(" "),s("div",{pre:!0},[s("div",{pre:!0,attrs:{class:"table"}},[s("table",[s("thead",[s("tr",[s("th",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Component Type")]),t._v(" "),s("th",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Name")]),t._v(" "),s("th",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Notes")])])]),t._v(" "),s("tbody",[s("tr",[s("td",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Craft Components")]),t._v(" "),s("td",{pre:!0,attrs:{style:"text-align:left"}},[s("code",[t._v("fields")])]),t._v(" "),s("td",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Craft component classes get placed in a folder named after the component type in the "),s("code",[t._v("src")]),t._v(" folder")])]),t._v(" "),s("tr",[s("td",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Custom Components")]),t._v(" "),s("td",{pre:!0,attrs:{style:"text-align:left"}},[s("code",[t._v("[customcomponenttype]")])]),t._v(" "),s("td",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Custom Component classes get placed in a folder named after the component type in the "),s("code",[t._v("src")]),t._v(" folder")])]),t._v(" "),s("tr",[s("td",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Integration Components")]),t._v(" "),s("td",{pre:!0,attrs:{style:"text-align:left"}},[s("code",[t._v("[integrationcustomcomponenttype]")])]),t._v(" "),s("td",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Integration Component classes get placed in a folder named after the component type in the "),s("code",[t._v("integrations/pluginname")]),t._v(" folder")])])])])])]),s("h3",{attrs:{id:"github-community-templates"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#github-community-templates"}},[t._v("#")]),t._v(" Github community templates")]),t._v(" "),s("div",{staticClass:"language- extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[t._v("└── .github\n ├── CODE_OF_CONDUCT.md\n ├── CONTRIBUTING.md\n └── ISSUE_TEMPLATE\n bug-report.md\n feature-request.md\n ├── SECURITY.md\n └── SUPPORT.md\n")])])]),s("p",[t._v("Community templates should link to our pages in our documentation with more comprehensive information wherever possible.")]),t._v(" "),s("h3",{attrs:{id:"changelog-template"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#changelog-template"}},[t._v("#")]),t._v(" Changelog Template")]),t._v(" "),s("h4",[t._v("Plugin CHANGELOG")]),t._v(" "),s("div",{staticClass:"language- extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[t._v("# Changelog\n\n## X.Y.Z - YYYY-MM-DD\n\n**Note|Tip|Warning**\n> Short summary of key release details\n\n### Updated\n- Requires `barrelstrength/craft-sprout:vX.Y.Z`\n- See Forms Module [release notes]([PERMALINK])\n- See Data Studio Module [release notes]([PERMALINK])\n")])])]),s("h4",[t._v("Sprout Module CHANGELOG")]),t._v(" "),s("div",{staticClass:"language- extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[t._v("# Changelog\n\n## 2.x - UNRELEASED\n\n### Added\n- Added...\n\n### Changed\n- Updated/Improved/Removed...\n\n### Fixed\n- Fixed...\n")])])]),s("h2",{attrs:{id:"common-modules"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#common-modules"}},[t._v("#")]),t._v(" Common Modules")]),t._v(" "),s("p",[t._v("Many Sprout plugins share functionality and this code is managed in shared Yii Modules.")]),t._v(" "),s("div",{staticClass:"table"},[s("table",[s("thead",[s("tr",[s("th",{staticStyle:{"text-align":"left"}},[t._v("Module")]),t._v(" "),s("th",{staticStyle:{"text-align":"left"}},[t._v("Description")])])]),t._v(" "),s("tbody",[s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("barrelstrength/sprout-base")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("Common settings and UI components")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("barrelstrength/sprout-base-email")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("Common email functionality")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("barrelstrength/sprout-base-fields")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("Common field functionality")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("barrelstrength/sprout-base-reports")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("Common reporting functionality")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("barrelstrength/sprout-base-redirects")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("Common sitemap functionality")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("barrelstrength/sprout-base-sent-email")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("Common sent email functionality")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("barrelstrength/sprout-base-sitemaps")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("Common redirects functionality")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("barrelstrength/sprout-base-uris")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("Common URL-enabled Section functionality")])])])])]),t._v(" "),s("h2",{attrs:{id:"sprout-settings"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#sprout-settings"}},[t._v("#")]),t._v(" Sprout Settings")]),t._v(" "),s("p",[t._v("Sprout plugins have a custom settings API to manage settings pages. This assists in managing shared settings between plugins as well as managing the UI in the control panel for more advanced settings pages.")]),t._v(" "),s("div",{pre:!0},[s("p",[t._v("Additionally, Sprout Plugins that use the API should disable the default Craft settings behavior so their icon does not appear in the Craft settings listing and instead register their "),s("code",[t._v("SproutSettings")]),t._v(" class to display in the 'Sprout Settings' section of the Settings are.")])]),s("p",[t._v("There are two types of settings")]),t._v(" "),s("div",{pre:!0},[s("ul",[s("li",[t._v("Simple settings - They use our standard shares settings pages, provide simple fields to be saved as settings, save those settings to the "),s("code",[t._v("sprout-settings")]),t._v(" key in the Project Config, and allow the overriding of those settings via the "),s("code",[t._v("config/sprout-settings.php")]),t._v(" file.")])])]),s("p",[t._v("As Sprout plugins share several core modules, we use a custom settings API")]),t._v(" "),s("div",{pre:!0},[s("p",[t._v("Extend the base "),s("code",[t._v("barrelstrength/sproutbase/base/SproutSettings")]),t._v(" class")])]),s("p",[t._v("Register all settings and shared settings SproutSettings types in the plugin that uses them. If more than one plugin uses the same settings, they will only get registered once.")]),t._v(" "),s("div",{staticClass:"language-php extra-class"},[s("pre",{pre:!0,attrs:{class:"language-php"}},[s("code",[s("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("Event")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("on")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("Settings")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("Settings")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("EVENT_REGISTER_SPROUT_SETTINGS")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name type-declaration"}},[t._v("RegisterComponentTypesEvent")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$event")]),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 variable"}},[t._v("$event")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),s("span",{pre:!0,attrs:{class:"token property"}},[t._v("types")]),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(" "),s("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("FormsSettings")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$event")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),s("span",{pre:!0,attrs:{class:"token property"}},[t._v("types")]),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(" "),s("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("NotificationsSettings")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$event")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),s("span",{pre:!0,attrs:{class:"token property"}},[t._v("types")]),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(" "),s("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("ReportsSettings")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),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(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h2",{attrs:{id:"uninstall-migrations"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#uninstall-migrations"}},[t._v("#")]),t._v(" Uninstall Migrations")]),t._v(" "),s("div",{pre:!0},[s("p",[t._v("As the Sprout Plugins depend on several shared modules, we need to make sure no shared data is removed when uninstalling a plugin. To do this, plugins using shared modules should implement "),s("code",[t._v("SproutDependencyInterface")]),t._v(" and "),s("code",[t._v("SproutDependencyTrait")]),t._v(".")])]),s("div",{staticClass:"language-php extra-class"},[s("pre",{pre:!0,attrs:{class:"language-php"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token package"}},[t._v("barrelstrength"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("sproutbase"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("base"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("SproutDependencyInterface")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token package"}},[t._v("barrelstrength"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("sproutbase"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("base"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("SproutDependencyTrait")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name-definition class-name"}},[t._v("SproutForms")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Plugin")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("implements")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SproutDependencyInterface")]),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("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token package"}},[t._v("SproutDependencyTrait")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("getSproutDependencies")]),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 keyword return-type"}},[t._v("array")]),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("return")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("SproutDependencyInterface")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("SPROUT_BASE")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("SproutDependencyInterface")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("SPROUT_BASE_REPORTS")]),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 punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("And then check for any shared dependencies before performing uninstall actions.")]),t._v(" "),s("div",{staticClass:"language-php extra-class"},[s("pre",{pre:!0,attrs:{class:"language-php"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token package"}},[t._v("barrelstrength"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("sproutbase"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("base"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("SproutDependencyInterface")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token package"}},[t._v("barrelstrength"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("sproutbasereports"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("migrations"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("Install")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" SproutBaseReportsInstall"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token package"}},[t._v("barrelstrength"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("sproutreports"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("SproutReports")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token package"}},[t._v("craft"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("db"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("Migration")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name-definition class-name"}},[t._v("Install")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Migration")]),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("public")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("safeDown")]),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 keyword return-type"}},[t._v("bool")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$sproutBaseReportsInUse")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("SproutReports")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getInstance")]),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 operator"}},[t._v("->")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("dependencyInUse")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("SproutDependencyInterface")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("SPROUT_BASE_REPORTS")]),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 keyword"}},[t._v("if")]),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 variable"}},[t._v("$sproutBaseReportsInUse")]),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 variable"}},[t._v("$migration")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SproutBaseReportsInstall")]),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\n "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("ob_start")]),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 variable"}},[t._v("$migration")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("safeDown")]),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 function"}},[t._v("ob_end_clean")]),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\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant boolean"}},[t._v("true")]),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("h2",{attrs:{id:"translations"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#translations"}},[t._v("#")]),t._v(" Translations")]),t._v(" "),s("p",[t._v("Use the default Craft conventions for translations. This allows us to benefit from the Yii Inspections that allow us to bulk add and remove translations.")]),t._v(" "),s("div",{pre:!0},[s("div",{pre:!0,attrs:{class:"table"}},[s("table",[s("thead",[s("tr",[s("th",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Context")]),t._v(" "),s("th",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Translation Convention")])])]),t._v(" "),s("tbody",[s("tr",[s("td",{pre:!0,attrs:{style:"text-align:left"}},[t._v("PHP")]),t._v(" "),s("td",{pre:!0,attrs:{style:"text-align:left"}},[s("code",[t._v("Craft::t('sprout-forms', 'Message');")])])]),t._v(" "),s("tr",[s("td",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Twig")]),t._v(" "),s("td",{pre:!0,attrs:{style:"text-align:left"}},[s("code",[t._v("{{ \"Message\"|t('sprout-forms') }}")])])]),t._v(" "),s("tr",[s("td",{pre:!0,attrs:{style:"text-align:left"}},[t._v("CP Javascript")]),t._v(" "),s("td",{pre:!0,attrs:{style:"text-align:left"}},[s("code",[t._v("Craft:t('sprout-forms');")])])])])])])]),s("p",[t._v("Each plugin or module maintains it's own translation file. As some plugins depend on multiple modules for their functionality, this may mean that someone translating a plugin will also have to translate translation files in other modules. For example, to completely translate Sprout Forms one would need to translate the files in Sprout Forms, Sprout Base Fields, and Sprout Base.")]),t._v(" "),s("h3",{attrs:{id:"exceptions"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#exceptions"}},[t._v("#")]),t._v(" Exceptions")]),t._v(" "),s("p",[t._v("Exceptions are for developers, not for users. Exception messages should not be translated:")]),t._v(" "),s("div",{staticClass:"language- extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[t._v("BAD:\nthrow new Exception(Craft::t('sprout-forms, 'Something happened'));\n\nGOOD:\nthrow new Exception('Something happened');\n")])])]),s("h2",{attrs:{id:"migrations"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#migrations"}},[t._v("#")]),t._v(" Migrations")]),t._v(" "),s("p",[t._v("Due to our application structure using shared modules, in some cases migrations may need to be run by multiple plugins and we cannot know which order they will get run in. To address this, we use the following conventions:")]),t._v(" "),s("ul",[s("li",[s("p",[t._v("Make sure every migration can be run twice, without throwing errors if it has already been run once.")])]),t._v(" "),s("li",[s("p",[t._v("All migrations that affect a plugin with a shared module should be placed in the base module and instances of those migrations should be created in each respective plugin where they are needed.")]),t._v(" "),s("ul",[s("li",[t._v("Docs: 'Call to Craft or Sprout service layer' inspection")]),t._v(" "),s("li",[t._v("Database Audit Utility notes...")])])])]),t._v(" "),s("h3",{attrs:{id:"naming-migrations"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#naming-migrations"}},[t._v("#")]),t._v(" Naming migrations")]),t._v(" "),s("h4",[t._v("Order")]),t._v(" "),s("p",[t._v("Migration naming will use the date in the first segment and the second segment will just represent the order that they should be run in for a particular release. The following migrations are all be part of a release on the same day, and are ordered 1, 2, 3 in the order they should run:")]),t._v(" "),s("div",{staticClass:"language- extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[t._v("m190101_000001_migration_description.php\nm190101_000002_migration_description.php\nm190101_000003_migration_description.php\n")])])]),s("h4",[t._v("Migrations used by multiple plugins")]),t._v(" "),s("p",[t._v("Any migration instance that is just running a migration in base module should use the same name as the base migration and append the plugin name that it is being run from.")]),t._v(" "),s("div",{staticClass:"language- extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[t._v("m190101_000001_migration_description.php // Sprout Base Email\nm190101_000001_migration_description_sproutemail.php // Sprout Email\nm190101_000001_migration_description_sproutforms.php // Sprout Forms\n")])])]),s("h3",{attrs:{id:"testing-prior-to-release"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#testing-prior-to-release"}},[t._v("#")]),t._v(" Testing Prior to Release")]),t._v(" "),s("p",[t._v("To test one or more plugins and modules under development on real websites before releases, changes can be pushed to a development branch and pulled into any appropriate project for testing.")]),t._v(" "),s("div",{pre:!0},[s("p",[t._v("In this example, we grab the latest on the "),s("code",[t._v("develop")]),t._v(" branch for the Sprout SEO plugin and the Sprout Base Redirects module. To ensure composer things it's working with the release numbers we're using in our "),s("code",[t._v("composer.json")]),t._v(" we can tell composer what version number to use for the code we are testing:")])]),s("div",{staticClass:"language- extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[t._v('composer require barrelstrength/sprout-seo:"dev-develop as 4.2.0" barrelstrength/sprout-base-redirects:"dev-develop as 1.1.1"\n')])])]),s("div",{pre:!0},[s("p",[t._v("Requiring "),s("code",[t._v("dev-develop")]),t._v(" should pull in the latest commit on the "),s("code",[t._v("develop")]),t._v(" branch. For more specific tests, you can also target a specific commit hash:")])]),s("div",{staticClass:"language- extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[t._v('composer require barrelstrength/sprout-seo:"dev-develop as 4.2.0" barrelstrength/sprout-base-redirects:"dev-develop#dfae1a922cdb5dd32fd8a813839fddc26ff412b0 as 1.1.1"\n')])])]),s("p",[t._v("For additional troubleshooting, consider some of the following steps:")]),t._v(" "),s("div",{staticClass:"language- extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[t._v("rm composer.lock # Remove the composer.lock file\ncomposer clear-cache # Clear composers cache\ncomposer remove ... # Try removing the package you are testing before installing it\nrm -r ./vendor # Remove the entire ./vendor directory and rebuild it with `composer update`\n")])])])])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/37.33acc68b.js b/docs/.vuepress/dist/assets/js/37.33acc68b.js new file mode 100644 index 00000000..5ca5c26c --- /dev/null +++ b/docs/.vuepress/dist/assets/js/37.33acc68b.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[37],{496:function(t,a,e){"use strict";e.r(a);var r=e(34),s=Object(r.a)({},(function(){var t=this,a=t.$createElement,e=t._self._c||a;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",[t._v("Requirements")]),t._v(" "),e("div",{pre:!0},[e("ul",[e("li",[t._v("Craft CMS "),e("code",[t._v("4.0.0")]),t._v(" and all "),e("a",{pre:!0,attrs:{href:"https://craftcms.com/docs/4.x/requirements.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("requirements for running Craft 4"),e("OutboundLink",{pre:!0})],1)]),t._v(" "),e("li",[t._v("Sprout Framework "),e("code",[t._v("4.44.444")]),t._v(" (included with all Sprout plugins)")])])]),e("div",{staticClass:"custom-block tip"},[e("p",{staticClass:"custom-block-title"},[t._v("4.44.444")]),t._v(" "),e("p",[t._v("To align Sprout plugins with Craft major releases, all Sprout Marketing Suite plugins added Craft 4 support at version "),e("code",[t._v("4.44.444")]),t._v(" and will add Craft 5 support at "),e("code",[t._v("5.0.0")])])]),t._v(" "),e("h2",{attrs:{id:"installation-via-plugin-store"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#installation-via-plugin-store"}},[t._v("#")]),t._v(" Installation via Plugin Store")]),t._v(" "),e("ol",[e("li",[t._v("Find one or more Sprout plugin from the "),e("em",[t._v("Craft Plugin Store")]),t._v(" and select “Install”")]),t._v(" "),e("li",[t._v("Go to "),e("em",[t._v("Settings → Plugins")]),t._v(" in your Craft Control Panel and select “Install”")])]),t._v(" "),e("h2",{attrs:{id:"installation-via-composer"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#installation-via-composer"}},[t._v("#")]),t._v(" Installation via Composer")]),t._v(" "),e("ol",[e("li",[t._v("Open your terminal and go to your Craft project.")])]),t._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[t._v("cd /path/to/project\n")])])]),e("ol",{attrs:{start:"2"}},[e("li",[t._v("Run Composer to retrieve the plugin")])]),t._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[t._v("composer require barrelstrength/sprout-forms\n")])])]),e("ol",{attrs:{start:"3"}},[e("li",[t._v("In the Control Panel, go to "),e("em",[t._v("Settings → Plugins")]),t._v(" and select “Install”")])]),t._v(" "),e("h2",{attrs:{id:"upgrading-to-craft-4"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#upgrading-to-craft-4"}},[t._v("#")]),t._v(" Upgrading to Craft 4")]),t._v(" "),e("div",{staticClass:"custom-block danger"},[e("p",{staticClass:"custom-block-title"},[t._v("BEFORE YOU UPDATE!")]),t._v(" "),e("p",[t._v("Make sure you have updated to the latest version of all Sprout Plugins on Craft 3.x before updating your plugins to Craft 4.x. View the "),e("RouterLink",{attrs:{to:"/configuration/updates.html"}},[t._v("Update Guides")]),t._v(" for more details.")],1)])])}),[],!1,null,null,null);a.default=s.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/38.4eb4829f.js b/docs/.vuepress/dist/assets/js/38.4eb4829f.js new file mode 100644 index 00000000..ddd911ee --- /dev/null +++ b/docs/.vuepress/dist/assets/js/38.4eb4829f.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[38],{498:function(e,t,o){"use strict";o.r(t);var i=o(34),n=Object(i.a)({},(function(){var e=this,t=e.$createElement,o=e._self._c||t;return o("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[o("h1",[e._v("Config Settings")]),e._v(" "),o("p",[e._v("Sprout settings are configured on a per-module basis and documented in the Control Panel and the "),o("a",{attrs:{href:"https://github.com/barrelstrength/craft-sprout/tree/v4/configs",target:"_blank",rel:"noopener noreferrer"}},[e._v("example config files"),o("OutboundLink")],1),e._v(" in the root of the repository.")]),e._v(" "),o("p",[e._v("Configuration settings are managed across five areas:")]),e._v(" "),o("div",{pre:!0},[o("ol",[o("li",[o("strong",[e._v("Environment Variables")]),o("br"),e._v(" "),o("ul",[o("li",[e._v("The "),o("code",[e._v(".env")]),e._v(" file can include variables prefixed with the Sprout module name")]),e._v(" "),o("li",[e._v("Example: "),o("code",[e._v("SPROUT_MODULE_FORMS_NAME_OF_SETTING=123")])])])]),e._v(" "),o("li",[o("strong",[e._v("File-based Config Overrides")]),o("br"),e._v(" "),o("ul",[o("li",[e._v("File-based configs can be added in the config folder")]),e._v(" "),o("li",[e._v("Example: "),o("code",[e._v("config/sprout-module-forms.php")])])])]),e._v(" "),o("li",[o("strong",[e._v("Control Panel")]),o("br"),e._v(" "),o("ul",[o("li",[e._v("Mange Control Panel settings by navigating to "),o("code",[e._v("Settings -> Sprout")])]),e._v(" "),o("li",[e._v("Most Control Panel settings store their data in the Project Config")]),e._v(" "),o("li",[e._v("Example: "),o("code",[e._v("config/project/project.yaml")]),e._v(" or "),o("code",[e._v("config/project/sprout/*")])])])]),e._v(" "),o("li",[o("strong",[e._v("Database Tables")]),o("br"),e._v(" "),o("ul",[o("li",[e._v("Some Control Panel settings store their data in the database")]),e._v(" "),o("li",[e._v("Data is stored in the db when user workflows need to update settings in the live environment")])])]),e._v(" "),o("li",[o("strong",[e._v("API Requests")]),o("br"),e._v(" "),o("ul",[o("li",[e._v("Some actions via Twig or PHP can sometimes override all of the above")]),e._v(" "),o("li",[e._v("Some actions can explicitly define a setting at the time of the request")])])])])]),o("div",{staticClass:"custom-block tip"},[o("p",{staticClass:"custom-block-title"},[e._v("Settings at the Source")]),e._v(" "),o("p",[e._v("While you might see settings referenced here as an example or feature description, the most accurate settings documentation exists within the Craft docs and the plugin UI or codebase.")]),e._v(" "),o("p",[e._v("We initially tried to list the settings in the online docs but, most of the time, we were just copying and pasting the instruction text or example code comments and it was tedious to always update that text in multiple places to keep things in sync.")]),e._v(" "),o("p",[e._v("Pointing you towards the source helps us reduce the chance we have inconsistent settings documentation in multiple places and, we hope, will help you understand where the answers already exist in your workflow. Reach out if you want additional "),o("RouterLink",{attrs:{to:"/support/training.html"}},[e._v("training or support")]),e._v(".")],1)])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/39.9c9be849.js b/docs/.vuepress/dist/assets/js/39.9c9be849.js new file mode 100644 index 00000000..a5e9eafb --- /dev/null +++ b/docs/.vuepress/dist/assets/js/39.9c9be849.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[39],{495:function(t,e,r){"use strict";r.r(e);var a=r(34),o=Object(a.a)({},(function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[r("h1",[t._v("Update Guides")]),t._v(" "),r("p",[t._v("The "),r("a",{attrs:{href:"https://github.com/barrelstrength/craft-sprout#changelog",target:"_blank",rel:"noopener noreferrer"}},[t._v("Sprout Framework Changelog"),r("OutboundLink")],1),t._v(" reflects the most recent updates to all of our plugins and can be found at the top level in the Github repo.")]),t._v(" "),r("p",[t._v("The guides below provide details for noteworthy upgrades such as breaking changes, new things to be aware of, or planned deprecation notices. For the best experience while upgrading, please review the relevant upgrade guides "),r("em",[t._v("before")]),t._v(" you upgrade.")]),t._v(" "),r("h3",{attrs:{id:"craft-4"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#craft-4"}},[t._v("#")]),t._v(" Craft 4")]),t._v(" "),r("div",{staticClass:"table"},[r("table",[r("thead",[r("tr",[r("th",{staticStyle:{"text-align":"left"}},[t._v("Upgrading To")]),t._v(" "),r("th",{staticStyle:{"text-align":"left"}},[t._v("Notes")])])]),t._v(" "),r("tbody",[r("tr",[r("td",{staticStyle:{"text-align":"left"}},[r("RouterLink",{attrs:{to:"/updates/4.44.444.html"}},[t._v("4.44.444")]),t._v(" ⚠️")],1),t._v(" "),r("td",{staticStyle:{"text-align":"left"}},[t._v("Added Craft 4 Support. "),r("strong",[t._v("Major update!")])])])])])]),t._v(" "),r("h4",[t._v("Craft 3 Migration Path")]),t._v(" "),r("p",[t._v("Avoid incremental updates to older versions of Craft and Sprout.")]),t._v(" "),r("div",{staticClass:"custom-block warning"},[r("p",{staticClass:"custom-block-title"},[t._v("THERE IS A BETTER WAY")]),t._v(" "),r("p",[t._v("Sprout "),r("code",[t._v("4.44.444")]),t._v(" added Craft 4 support, introduced a new plugin architecture, and solved several migration issues that had arisen in the older architecture. Before upgrading to Craft 4 and Sprout "),r("code",[t._v("4.44.444")]),t._v(", upgrade your site to the latest version of Craft 3.x and the most recent Sprout releases on Craft 3 all in one go.")]),t._v(" "),r("p",[t._v("We recommend avoiding incremental upgrades (e.g. from "),r("code",[t._v("3.2")]),t._v(" to "),r("code",[t._v("3.3")]),t._v(" to "),r("code",[t._v("3.4")]),t._v(", etc.) as Craft 3 and Sprout did not play nicely together between Craft "),r("code",[t._v("3.2")]),t._v(" and "),r("code",[t._v("3.7")]),t._v(" and many of those issues are resolved if you can upgrade to the most recent version of Sprout on the latest version of Craft 3 with a single migration.")])]),t._v(" "),r("div",{pre:!0},[r("p",[t._v("To upgrade Craft and Sprout to a version earlier than Craft "),r("code",[t._v("3.7.x")]),t._v(" and Sprout "),r("code",[t._v("4.40.x")]),t._v(", please review the "),r("a",{pre:!0,attrs:{href:"https://sprout.barrelstrengthdesign.com/docs/v3/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Installing & Updating"),r("OutboundLink",{pre:!0})],1),t._v(" section in the Sprout v3 documentation for the specific plugins you are updating.")])])])}),[],!1,null,null,null);e.default=o.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/4.605d54ca.js b/docs/.vuepress/dist/assets/js/4.605d54ca.js new file mode 100644 index 00000000..c47302d2 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/4.605d54ca.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[4],{369:function(t,e){t.exports="\t\n\v\f\r                 \u2028\u2029\ufeff"},370:function(t,e,n){var r=n(4),i=n(30),a=n(17),s=n(369),o=r("".replace),u="["+s+"]",c=RegExp("^"+u+u+"*"),l=RegExp(u+u+"*$"),h=function(t){return function(e){var n=a(i(e));return 1&t&&(n=o(n,c,"")),2&t&&(n=o(n,l,"")),n}};t.exports={start:h(1),end:h(2),trim:h(3)}},371:function(t,e,n){"use strict";n.d(e,"a",(function(){return a})),n.d(e,"g",(function(){return s})),n.d(e,"d",(function(){return u})),n.d(e,"e",(function(){return c})),n.d(e,"f",(function(){return l})),n.d(e,"b",(function(){return h})),n.d(e,"c",(function(){return f})),n.d(e,"i",(function(){return p})),n.d(e,"h",(function(){return d}));n(20),n(44),n(375),n(120),n(207),n(209),n(94),n(123),n(12),n(124),n(45),n(126),n(205);var r=/#.*$/,i=/\.(md|html)$/,a=/\/$/,s=/^[a-z]+:/i;function o(t){return decodeURI(t).replace(r,"").replace(i,"")}function u(t){return s.test(t)}function c(t){return/^mailto:/.test(t)}function l(t){return/^tel:/.test(t)}function h(t){if(u(t))return t;var e=t.match(r),n=e?e[0]:"",i=o(t);return a.test(i)?t:i+".html"+n}function f(t,e){var n=decodeURIComponent(t.hash),i=function(t){var e=t.match(r);if(e)return e[0]}(e);return(!i||n===i)&&o(t.path)===o(e)}function p(t,e,n){if(u(e))return{type:"external",path:e};n&&(e=function(t,e,n){var r=t.charAt(0);if("/"===r)return t;if("?"===r||"#"===r)return e+t;var i=e.split("/");n&&i[i.length-1]||i.pop();for(var a=t.replace(/^\//,"").split("/"),s=0;s0?arguments[0]:void 0;R(this,new ut(t))},lt=ct.prototype;if(l(lt,{append:function(t,e){$(arguments.length,2);var n=I(this);F(n.entries,{key:x(t),value:x(e)}),n.updateURL()},delete:function(t){$(arguments.length,1);for(var e=I(this),n=e.entries,r=x(t),i=0;ie.key?1:-1})),t.updateURL()},forEach:function(t){for(var e,n=I(this).entries,r=m(t,arguments.length>1?arguments[1]:void 0),i=0;i1?pt(arguments[1]):{})}}),g(H)){var dt=function(t){return d(this,N),new H(t,arguments.length>1?pt(arguments[1]):{})};N.constructor=dt,dt.prototype=N,r({global:!0,forced:!0,noTargetGet:!0},{Request:dt})}}t.exports={URLSearchParams:ct,getState:I}},381:function(t,e,n){},382:function(t,e,n){"use strict";var r=n(1),i=n(370).trim;r({target:"String",proto:!0,forced:n(429)("trim")},{trim:function(){return i(this)}})},383:function(t,e,n){var r=n(9),i=n(0),a=n(4),s=n(122),o=n(206),u=n(22),c=n(66).f,l=n(35),h=n(136),f=n(17),p=n(384),d=n(128),g=n(222),v=n(15),m=n(3),b=n(10),k=n(36).enforce,y=n(216),x=n(6),_=n(212),w=n(221),L=x("match"),C=i.RegExp,$=C.prototype,S=i.SyntaxError,O=a($.exec),P=a("".charAt),R=a("".replace),I=a("".indexOf),U=a("".slice),j=/^\?<[^\s\d!#%&*+<=>@^][^\s!#%&*+<=>@^]*>/,E=/a/g,A=/a/g,H=new C(E)!==E,T=d.MISSED_STICKY,N=d.UNSUPPORTED_Y,B=r&&(!H||T||_||w||m((function(){return A[L]=!1,C(E)!=E||C(A)==A||"/a/i"!=C(E,"i")})));if(s("RegExp",B)){for(var q=function(t,e){var n,r,i,a,s,c,d=l($,this),g=h(t),v=void 0===e,m=[],y=t;if(!d&&g&&v&&t.constructor===q)return t;if((g||l($,t))&&(t=t.source,v&&(e=p(y))),t=void 0===t?"":f(t),e=void 0===e?"":f(e),y=t,_&&"dotAll"in E&&(r=!!e&&I(e,"s")>-1)&&(e=R(e,/s/g,"")),n=e,T&&"sticky"in E&&(i=!!e&&I(e,"y")>-1)&&N&&(e=R(e,/y/g,"")),w&&(t=(a=function(t){for(var e,n=t.length,r=0,i="",a=[],s={},o=!1,u=!1,c=0,l="";r<=n;r++){if("\\"===(e=P(t,r)))e+=P(t,++r);else if("]"===e)o=!1;else if(!o)switch(!0){case"["===e:o=!0;break;case"("===e:O(j,U(t,r+1))&&(r+=2,u=!0),i+=e,c++;continue;case">"===e&&u:if(""===l||b(s,l))throw new S("Invalid capture group name");s[l]=!0,a[a.length]=[l,c],u=!1,l="";continue}u?l+=e:i+=e}return[i,a]}(t))[0],m=a[1]),s=o(C(t,e),d?this:$,q),(r||i||m.length)&&(c=k(s),r&&(c.dotAll=!0,c.raw=q(function(t){for(var e,n=t.length,r=0,i="",a=!1;r<=n;r++)"\\"!==(e=P(t,r))?a||"."!==e?("["===e?a=!0:"]"===e&&(a=!1),i+=e):i+="[\\s\\S]":i+=e+P(t,++r);return i}(t),n)),i&&(c.sticky=!0),m.length&&(c.groups=m)),t!==y)try{u(s,"source",""===y?"(?:)":y)}catch(t){}return s},D=c(C),z=0;D.length>z;)g(q,C,D[z++]);$.constructor=q,q.prototype=$,v(i,"RegExp",q)}y("RegExp")},384:function(t,e,n){var r=n(7),i=n(10),a=n(35),s=n(220),o=RegExp.prototype;t.exports=function(t){var e=t.flags;return void 0!==e||"flags"in o||i(t,"flags")||!a(o,t)?e:r(s,t)}},385:function(t,e,n){var r=n(0),i=n(9),a=n(212),s=n(26),o=n(376),u=n(36).get,c=RegExp.prototype,l=r.TypeError;i&&a&&o(c,"dotAll",{configurable:!0,get:function(){if(this!==c){if("RegExp"===s(this))return!!u(this).dotAll;throw l("Incompatible receiver, RegExp required")}}})},386:function(t,e,n){var r=n(0),i=n(9),a=n(128).MISSED_STICKY,s=n(26),o=n(376),u=n(36).get,c=RegExp.prototype,l=r.TypeError;i&&a&&o(c,"sticky",{configurable:!0,get:function(){if(this!==c){if("RegExp"===s(this))return!!u(this).sticky;throw l("Incompatible receiver, RegExp required")}}})},387:function(t,e,n){"use strict";var r=n(95).PROPER,i=n(15),a=n(11),s=n(17),o=n(3),u=n(384),c=RegExp.prototype.toString,l=o((function(){return"/a/b"!=c.call({source:"a",flags:"b"})})),h=r&&"toString"!=c.name;(l||h)&&i(RegExp.prototype,"toString",(function(){var t=a(this);return"/"+s(t.source)+"/"+s(u(t))}),{unsafe:!0})},388:function(t,e,n){},389:function(t,e,n){},390:function(t,e,n){},391:function(t,e,n){},392:function(t,e,n){},393:function(t,e,n){},394:function(t,e){t.exports=function(t){return null==t}},395:function(t,e,n){},396:function(t,e,n){},397:function(t,e,n){},398:function(t,e,n){},399:function(t,e,n){},400:function(t,e,n){"use strict";n.d(e,"b",(function(){return r})),n.d(e,"c",(function(){return l})),n.d(e,"d",(function(){return f})),n.d(e,"a",(function(){return p}));n(20),n(44),n(375),n(120),n(207),n(209),n(94),n(123),n(12),n(124),n(45),n(126),n(205);var r=/#.*$/,i=/\.(md|html)$/,a=/\/$/,s=/^[a-z]+:/i;function o(t){return decodeURI(t).replace(r,"").replace(i,"")}function u(t){return s.test(t)}function c(t){if(u(t))return t;var e=t.match(r),n=e?e[0]:"",i=o(t);return a.test(i)?t:i+".html"+n}function l(t,e){var n=decodeURIComponent(t.hash),i=function(t){var e=t.match(r);if(e)return e[0]}(e);return(!i||n===i)&&o(t.path)===o(e)}function h(t,e,n){if(u(e))return{type:"external",path:e};n&&(e=function(t,e,n){var r=t.charAt(0);if("/"===r)return t;if("?"===r||"#"===r)return e+t;var i=e.split("/");n&&i[i.length-1]||i.pop();for(var a=t.replace(/^\//,"").split("/"),s=0;s3&&void 0!==arguments[3]?arguments[3]:1;if("string"==typeof e)return h(n,e,r);if(Array.isArray(e))return Object.assign(h(n,e[0],r),{title:e[1]});i>3&&console.error("[vuepress] detected a too deep nested sidebar group.");var a=e.children||[];return 0===a.length&&e.path?Object.assign(h(n,e.path,r),{title:e.title}):{type:"group",path:e.path,title:e.title,sidebarDepth:e.sidebarDepth,children:a.map((function(e){return t(e,n,r,i+1)})),collapsable:!1!==e.collapsable}}(t,i,c)})):[]}return[]}function p(t){var e;return(t=t.map((function(t){return Object.assign({},t)}))).forEach((function(t){2===t.level?e=t:e&&(e.children||(e.children=[])).push(t)})),t.filter((function(t){return 2===t.level}))}},401:function(t,e,n){},402:function(t,e,n){},409:function(t,e,n){"use strict";n.r(e);n(121),n(12);var r=n(371),i={name:"SidebarGroup",components:{DropdownTransition:n(412).a},props:["item","open","collapsable","depth"],beforeCreate:function(){this.$options.components.SidebarLinks=n(409).default},methods:{isActive:r.c}},a=(n(442),n(34)),s=Object(a.a)(i,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("section",{staticClass:"sidebar-group",class:[{collapsable:t.collapsable,"is-sub-group":0!==t.depth},"depth-"+t.depth]},[t.item.path?n("RouterLink",{staticClass:"sidebar-heading clickable",class:{open:t.open,active:t.isActive(t.$route,t.item.path)},attrs:{to:t.item.path},nativeOn:{click:function(e){return t.$emit("toggle")}}},[n("span",[t._v(t._s(t.item.title))]),t._v(" "),t.collapsable?n("span",{staticClass:"arrow",class:t.open?"down":"right"}):t._e()]):n("p",{staticClass:"sidebar-heading",class:{open:t.open},on:{click:function(e){return t.$emit("toggle")}}},[n("span",[t._v(t._s(t.item.title))]),t._v(" "),t.collapsable?n("span",{staticClass:"arrow",class:t.open?"down":"right"}):t._e()]),t._v(" "),n("DropdownTransition",[t.open||!t.collapsable?n("SidebarLinks",{staticClass:"sidebar-group-items",attrs:{items:t.item.children,"sidebar-depth":t.item.sidebarDepth,"initial-open-group-index":t.item.initialOpenGroupIndex,depth:t.depth+1}}):t._e()],1)],1)}),[],!1,null,null,null).exports,o=(n(443),n(20),n(120),n(44),n(94),n(400));function u(t,e,n,r,i){n=n.replace(/[_`]/g,"");var a={props:{to:e,activeClass:"",exactActiveClass:""},class:{active:r,"sidebar-link":!0}};return i>2&&(a.style={"padding-left":i+"rem"}),t("RouterLink",a,n)}function c(t,e,n,r,i){var a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:1;return!e||a>i?null:t("ul",{class:"sidebar-sub-headers"},e.map((function(e){var s=Object(o.c)(r,n+"#"+e.slug);return t("li",{class:"sidebar-sub-header"},[u(t,n+"#"+e.slug,e.title,s,e.level-1),c(t,e.children,n,r,i,a+1)])})))}var l={functional:!0,props:["item","sidebarDepth"],render:function(t,e){var n=e.parent,r=n.$page,i=(n.$site,n.$route),a=n.$themeConfig,s=n.$themeLocaleConfig,l=e.props,h=l.item,f=l.sidebarDepth,p=Object(o.c)(i,h.path),d="auto"===h.type?p||h.children.some((function(t){return Object(o.c)(i,h.basePath+"#"+t.slug)})):p,g="external"===h.type?function(t,e,n){return t("a",{attrs:{href:e,target:"_blank",rel:"noopener noreferrer"},class:{"sidebar-link":!0}},[n,t("OutboundLink")])}(t,h.path,h.title||h.path):u(t,h.path,h.title||h.path,d),v=[r.frontmatter.sidebarDepth,f,s.sidebarDepth,a.sidebarDepth,1].find((function(t){return void 0!==t})),m=s.displayAllHeaders||a.displayAllHeaders;return"auto"===h.type?[g,c(t,h.children,h.basePath,i,v)]:(d||m)&&h.headers&&!o.b.test(h.path)?[g,c(t,Object(o.a)(h.headers),h.path,i,v)]:g}};n(444);function h(t,e){if("group"===e.type){var n=e.path&&Object(r.c)(t,e.path),i=e.children.some((function(e){return"group"===e.type?h(t,e):"page"===e.type&&Object(r.c)(t,e.path)}));return n||i}return!1}var f={name:"SidebarLinks",components:{SidebarGroup:s,SidebarLink:Object(a.a)(l,void 0,void 0,!1,null,null,null).exports},props:["items","depth","sidebarDepth","initialOpenGroupIndex"],data:function(){return{openGroupIndex:this.initialOpenGroupIndex||0}},watch:{$route:function(){this.refreshIndex()}},created:function(){this.refreshIndex()},methods:{refreshIndex:function(){var t=function(t,e){for(var n=0;n-1&&(this.openGroupIndex=t)},toggleGroup:function(t){this.openGroupIndex=t===this.openGroupIndex?-1:t},isActive:function(t){return Object(r.c)(this.$route,t.regularPath)}}},p=Object(a.a)(f,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return t.items.length?n("ul",{staticClass:"sidebar-links"},t._l(t.items,(function(e,r){return n("li",{key:r},["group"===e.type?n("SidebarGroup",{attrs:{item:e,open:r===t.openGroupIndex,collapsable:e.collapsable||e.collapsible,depth:t.depth},on:{toggle:function(e){return t.toggleGroup(r)}}}):n("SidebarLink",{attrs:{"sidebar-depth":t.sidebarDepth,item:e}})],1)})),0):t._e()}),[],!1,null,null,null);e.default=p.exports},412:function(t,e,n){"use strict";var r={name:"DropdownTransition",methods:{setHeight:function(t){t.style.height=t.scrollHeight+"px"},unsetHeight:function(t){t.style.height=""}}},i=(n(433),n(34)),a=Object(i.a)(r,(function(){var t=this.$createElement;return(this._self._c||t)("transition",{attrs:{name:"dropdown"},on:{enter:this.setHeight,"after-enter":this.unsetHeight,"before-leave":this.setHeight}},[this._t("default")],2)}),[],!1,null,null,null);e.a=a.exports},414:function(t,e,n){"use strict";var r=n(1),i=n(415);r({target:"String",proto:!0,forced:n(416)("link")},{link:function(t){return i(this,"a","href",t)}})},415:function(t,e,n){var r=n(4),i=n(30),a=n(17),s=/"/g,o=r("".replace);t.exports=function(t,e,n,r){var u=a(i(t)),c="<"+e;return""!==n&&(c+=" "+n+'="'+o(a(r),s,""")+'"'),c+">"+u+""}},416:function(t,e,n){var r=n(3);t.exports=function(t){return r((function(){var e=""[t]('"');return e!==e.toLowerCase()||e.split('"').length>3}))}},417:function(t,e,n){"use strict";n(378)},418:function(t,e,n){var r=n(1),i=n(419);r({global:!0,forced:parseInt!=i},{parseInt:i})},419:function(t,e,n){var r=n(0),i=n(3),a=n(4),s=n(17),o=n(370).trim,u=n(369),c=r.parseInt,l=r.Symbol,h=l&&l.iterator,f=/^[+-]?0x/i,p=a(f.exec),d=8!==c(u+"08")||22!==c(u+"0x16")||h&&!i((function(){c(Object(h))}));t.exports=d?function(t,e){var n=o(s(t));return c(n,e>>>0||(p(f,n)?16:10))}:c},420:function(t,e,n){var r=n(1),i=n(3),a=n(19),s=n(37).f,o=n(9),u=i((function(){s(1)}));r({target:"Object",stat:!0,forced:!o||u,sham:!o},{getOwnPropertyDescriptor:function(t,e){return s(a(t),e)}})},421:function(t,e,n){var r=n(1),i=n(9),a=n(132).f;r({target:"Object",stat:!0,forced:Object.defineProperties!==a,sham:!i},{defineProperties:a})},422:function(t,e,n){n(423)},423:function(t,e,n){"use strict";n(21);var r,i=n(1),a=n(9),s=n(379),o=n(0),u=n(47),c=n(4),l=n(15),h=n(376),f=n(210),p=n(10),d=n(217),g=n(219),v=n(127),m=n(134).codeAt,b=n(424),k=n(17),y=n(46),x=n(211),_=n(380),w=n(36),L=w.set,C=w.getterFor("URL"),$=_.URLSearchParams,S=_.getState,O=o.URL,P=o.TypeError,R=o.parseInt,I=Math.floor,U=Math.pow,j=c("".charAt),E=c(/./.exec),A=c([].join),H=c(1..toString),T=c([].pop),N=c([].push),B=c("".replace),q=c([].shift),D=c("".split),z=c("".slice),W=c("".toLowerCase),M=c([].unshift),G=/[a-z]/i,F=/[\d+-.a-z]/i,V=/\d/,Y=/^0x/i,J=/^[0-7]+$/,X=/^\d+$/,K=/^[\da-f]+$/i,Q=/[\0\t\n\r #%/:<>?@[\\\]^|]/,Z=/[\0\t\n\r #/:<>?@[\\\]^|]/,tt=/^[\u0000-\u0020]+|[\u0000-\u0020]+$/g,et=/[\t\n\r]/g,nt=function(t){var e,n,r,i;if("number"==typeof t){for(e=[],n=0;n<4;n++)M(e,t%256),t=I(t/256);return A(e,".")}if("object"==typeof t){for(e="",r=function(t){for(var e=null,n=1,r=null,i=0,a=0;a<8;a++)0!==t[a]?(i>n&&(e=r,n=i),r=null,i=0):(null===r&&(r=a),++i);return i>n&&(e=r,n=i),e}(t),n=0;n<8;n++)i&&0===t[n]||(i&&(i=!1),r===n?(e+=n?":":"::",i=!0):(e+=H(t[n],16),n<7&&(e+=":")));return"["+e+"]"}return t},rt={},it=d({},rt,{" ":1,'"':1,"<":1,">":1,"`":1}),at=d({},it,{"#":1,"?":1,"{":1,"}":1}),st=d({},at,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),ot=function(t,e){var n=m(t,0);return n>32&&n<127&&!p(e,t)?t:encodeURIComponent(t)},ut={ftp:21,file:null,http:80,https:443,ws:80,wss:443},ct=function(t,e){var n;return 2==t.length&&E(G,j(t,0))&&(":"==(n=j(t,1))||!e&&"|"==n)},lt=function(t){var e;return t.length>1&&ct(z(t,0,2))&&(2==t.length||"/"===(e=j(t,2))||"\\"===e||"?"===e||"#"===e)},ht=function(t){return"."===t||"%2e"===W(t)},ft={},pt={},dt={},gt={},vt={},mt={},bt={},kt={},yt={},xt={},_t={},wt={},Lt={},Ct={},$t={},St={},Ot={},Pt={},Rt={},It={},Ut={},jt=function(t,e,n){var r,i,a,s=k(t);if(e){if(i=this.parse(s))throw P(i);this.searchParams=null}else{if(void 0!==n&&(r=new jt(n,!0)),i=this.parse(s,null,r))throw P(i);(a=S(new $)).bindURL(this),this.searchParams=a}};jt.prototype={type:"URL",parse:function(t,e,n){var i,a,s,o,u,c=this,l=e||ft,h=0,f="",d=!1,m=!1,b=!1;for(t=k(t),e||(c.scheme="",c.username="",c.password="",c.host=null,c.port=null,c.path=[],c.query=null,c.fragment=null,c.cannotBeABaseURL=!1,t=B(t,tt,"")),t=B(t,et,""),i=g(t);h<=i.length;){switch(a=i[h],l){case ft:if(!a||!E(G,a)){if(e)return"Invalid scheme";l=dt;continue}f+=W(a),l=pt;break;case pt:if(a&&(E(F,a)||"+"==a||"-"==a||"."==a))f+=W(a);else{if(":"!=a){if(e)return"Invalid scheme";f="",l=dt,h=0;continue}if(e&&(c.isSpecial()!=p(ut,f)||"file"==f&&(c.includesCredentials()||null!==c.port)||"file"==c.scheme&&!c.host))return;if(c.scheme=f,e)return void(c.isSpecial()&&ut[c.scheme]==c.port&&(c.port=null));f="","file"==c.scheme?l=Ct:c.isSpecial()&&n&&n.scheme==c.scheme?l=gt:c.isSpecial()?l=kt:"/"==i[h+1]?(l=vt,h++):(c.cannotBeABaseURL=!0,N(c.path,""),l=Rt)}break;case dt:if(!n||n.cannotBeABaseURL&&"#"!=a)return"Invalid scheme";if(n.cannotBeABaseURL&&"#"==a){c.scheme=n.scheme,c.path=v(n.path),c.query=n.query,c.fragment="",c.cannotBeABaseURL=!0,l=Ut;break}l="file"==n.scheme?Ct:mt;continue;case gt:if("/"!=a||"/"!=i[h+1]){l=mt;continue}l=yt,h++;break;case vt:if("/"==a){l=xt;break}l=Pt;continue;case mt:if(c.scheme=n.scheme,a==r)c.username=n.username,c.password=n.password,c.host=n.host,c.port=n.port,c.path=v(n.path),c.query=n.query;else if("/"==a||"\\"==a&&c.isSpecial())l=bt;else if("?"==a)c.username=n.username,c.password=n.password,c.host=n.host,c.port=n.port,c.path=v(n.path),c.query="",l=It;else{if("#"!=a){c.username=n.username,c.password=n.password,c.host=n.host,c.port=n.port,c.path=v(n.path),c.path.length--,l=Pt;continue}c.username=n.username,c.password=n.password,c.host=n.host,c.port=n.port,c.path=v(n.path),c.query=n.query,c.fragment="",l=Ut}break;case bt:if(!c.isSpecial()||"/"!=a&&"\\"!=a){if("/"!=a){c.username=n.username,c.password=n.password,c.host=n.host,c.port=n.port,l=Pt;continue}l=xt}else l=yt;break;case kt:if(l=yt,"/"!=a||"/"!=j(f,h+1))continue;h++;break;case yt:if("/"!=a&&"\\"!=a){l=xt;continue}break;case xt:if("@"==a){d&&(f="%40"+f),d=!0,s=g(f);for(var y=0;y65535)return"Invalid port";c.port=c.isSpecial()&&w===ut[c.scheme]?null:w,f=""}if(e)return;l=Ot;continue}return"Invalid port"}f+=a;break;case Ct:if(c.scheme="file","/"==a||"\\"==a)l=$t;else{if(!n||"file"!=n.scheme){l=Pt;continue}if(a==r)c.host=n.host,c.path=v(n.path),c.query=n.query;else if("?"==a)c.host=n.host,c.path=v(n.path),c.query="",l=It;else{if("#"!=a){lt(A(v(i,h),""))||(c.host=n.host,c.path=v(n.path),c.shortenPath()),l=Pt;continue}c.host=n.host,c.path=v(n.path),c.query=n.query,c.fragment="",l=Ut}}break;case $t:if("/"==a||"\\"==a){l=St;break}n&&"file"==n.scheme&&!lt(A(v(i,h),""))&&(ct(n.path[0],!0)?N(c.path,n.path[0]):c.host=n.host),l=Pt;continue;case St:if(a==r||"/"==a||"\\"==a||"?"==a||"#"==a){if(!e&&ct(f))l=Pt;else if(""==f){if(c.host="",e)return;l=Ot}else{if(o=c.parseHost(f))return o;if("localhost"==c.host&&(c.host=""),e)return;f="",l=Ot}continue}f+=a;break;case Ot:if(c.isSpecial()){if(l=Pt,"/"!=a&&"\\"!=a)continue}else if(e||"?"!=a)if(e||"#"!=a){if(a!=r&&(l=Pt,"/"!=a))continue}else c.fragment="",l=Ut;else c.query="",l=It;break;case Pt:if(a==r||"/"==a||"\\"==a&&c.isSpecial()||!e&&("?"==a||"#"==a)){if(".."===(u=W(u=f))||"%2e."===u||".%2e"===u||"%2e%2e"===u?(c.shortenPath(),"/"==a||"\\"==a&&c.isSpecial()||N(c.path,"")):ht(f)?"/"==a||"\\"==a&&c.isSpecial()||N(c.path,""):("file"==c.scheme&&!c.path.length&&ct(f)&&(c.host&&(c.host=""),f=j(f,0)+":"),N(c.path,f)),f="","file"==c.scheme&&(a==r||"?"==a||"#"==a))for(;c.path.length>1&&""===c.path[0];)q(c.path);"?"==a?(c.query="",l=It):"#"==a&&(c.fragment="",l=Ut)}else f+=ot(a,at);break;case Rt:"?"==a?(c.query="",l=It):"#"==a?(c.fragment="",l=Ut):a!=r&&(c.path[0]+=ot(a,rt));break;case It:e||"#"!=a?a!=r&&("'"==a&&c.isSpecial()?c.query+="%27":c.query+="#"==a?"%23":ot(a,rt)):(c.fragment="",l=Ut);break;case Ut:a!=r&&(c.fragment+=ot(a,it))}h++}},parseHost:function(t){var e,n,r;if("["==j(t,0)){if("]"!=j(t,t.length-1))return"Invalid host";if(!(e=function(t){var e,n,r,i,a,s,o,u=[0,0,0,0,0,0,0,0],c=0,l=null,h=0,f=function(){return j(t,h)};if(":"==f()){if(":"!=j(t,1))return;h+=2,l=++c}for(;f();){if(8==c)return;if(":"!=f()){for(e=n=0;n<4&&E(K,f());)e=16*e+R(f(),16),h++,n++;if("."==f()){if(0==n)return;if(h-=n,c>6)return;for(r=0;f();){if(i=null,r>0){if(!("."==f()&&r<4))return;h++}if(!E(V,f()))return;for(;E(V,f());){if(a=R(f(),10),null===i)i=a;else{if(0==i)return;i=10*i+a}if(i>255)return;h++}u[c]=256*u[c]+i,2!=++r&&4!=r||c++}if(4!=r)return;break}if(":"==f()){if(h++,!f())return}else if(f())return;u[c++]=e}else{if(null!==l)return;h++,l=++c}}if(null!==l)for(s=c-l,c=7;0!=c&&s>0;)o=u[c],u[c--]=u[l+s-1],u[l+--s]=o;else if(8!=c)return;return u}(z(t,1,-1))))return"Invalid host";this.host=e}else if(this.isSpecial()){if(t=b(t),E(Q,t))return"Invalid host";if(null===(e=function(t){var e,n,r,i,a,s,o,u=D(t,".");if(u.length&&""==u[u.length-1]&&u.length--,(e=u.length)>4)return t;for(n=[],r=0;r1&&"0"==j(i,0)&&(a=E(Y,i)?16:8,i=z(i,8==a?1:2)),""===i)s=0;else{if(!E(10==a?X:8==a?J:K,i))return t;s=R(i,a)}N(n,s)}for(r=0;r=U(256,5-e))return null}else if(s>255)return null;for(o=T(n),r=0;r1?arguments[1]:void 0,r=L(e,new jt(t,!1,n));a||(e.href=r.serialize(),e.origin=r.getOrigin(),e.protocol=r.getProtocol(),e.username=r.getUsername(),e.password=r.getPassword(),e.host=r.getHost(),e.hostname=r.getHostname(),e.port=r.getPort(),e.pathname=r.getPathname(),e.search=r.getSearch(),e.searchParams=r.getSearchParams(),e.hash=r.getHash())},At=Et.prototype,Ht=function(t,e){return{get:function(){return C(this)[t]()},set:e&&function(t){return C(this)[e](t)},configurable:!0,enumerable:!0}};if(a&&(h(At,"href",Ht("serialize","setHref")),h(At,"origin",Ht("getOrigin")),h(At,"protocol",Ht("getProtocol","setProtocol")),h(At,"username",Ht("getUsername","setUsername")),h(At,"password",Ht("getPassword","setPassword")),h(At,"host",Ht("getHost","setHost")),h(At,"hostname",Ht("getHostname","setHostname")),h(At,"port",Ht("getPort","setPort")),h(At,"pathname",Ht("getPathname","setPathname")),h(At,"search",Ht("getSearch","setSearch")),h(At,"searchParams",Ht("getSearchParams")),h(At,"hash",Ht("getHash","setHash"))),l(At,"toJSON",(function(){return C(this).serialize()}),{enumerable:!0}),l(At,"toString",(function(){return C(this).serialize()}),{enumerable:!0}),O){var Tt=O.createObjectURL,Nt=O.revokeObjectURL;Tt&&l(Et,"createObjectURL",u(Tt,O)),Nt&&l(Et,"revokeObjectURL",u(Nt,O))}y(Et,"URL"),i({global:!0,forced:!s,sham:!a},{URL:Et})},424:function(t,e,n){"use strict";var r=n(0),i=n(4),a=/[^\0-\u007E]/,s=/[.\u3002\uFF0E\uFF61]/g,o="Overflow: input needs wider integers to process",u=r.RangeError,c=i(s.exec),l=Math.floor,h=String.fromCharCode,f=i("".charCodeAt),p=i([].join),d=i([].push),g=i("".replace),v=i("".split),m=i("".toLowerCase),b=function(t){return t+22+75*(t<26)},k=function(t,e,n){var r=0;for(t=n?l(t/700):t>>1,t+=l(t/e);t>455;)t=l(t/35),r+=36;return l(r+36*t/(t+38))},y=function(t){var e,n,r=[],i=(t=function(t){for(var e=[],n=0,r=t.length;n=55296&&i<=56319&&n=a&&nl((2147483647-s)/y))throw u(o);for(s+=(m-a)*y,a=m,e=0;e2147483647)throw u(o);if(n==a){for(var x=s,_=36;;){var w=_<=c?1:_>=c+26?26:_-c;if(x0;)t[r]=t[--r];r!==a++&&(t[r]=n)}return t},o=function(t,e,n,r){for(var i=e.length,a=n.length,s=0,o=0;s1?arguments[1]:void 0,r=e.length,i=void 0===n?r:g(o(n),r),a=u(t);return p?p(e,a,i):d(e,i-a.length,i)===a}})},431:function(t,e,n){"use strict";n(388)},432:function(t,e,n){"use strict";n(389)},433:function(t,e,n){"use strict";n(390)},434:function(t,e,n){"use strict";n(391)},435:function(t,e,n){"use strict";n(392)},436:function(t,e,n){"use strict";n(393)},437:function(t,e,n){"use strict";n(395)},438:function(t,e,n){var r=n(50),i=n(23),a=n(39);t.exports=function(t){return"string"==typeof t||!i(t)&&a(t)&&"[object String]"==r(t)}},439:function(t,e,n){"use strict";n(396)},440:function(t,e,n){"use strict";n(397)},441:function(t,e,n){"use strict";n(398)},442:function(t,e,n){"use strict";n(399)},443:function(t,e,n){"use strict";var r=n(1),i=n(49).find,a=n(131),s=!0;"find"in[]&&Array(1).find((function(){s=!1})),r({target:"Array",proto:!0,forced:s},{find:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),a("find")},444:function(t,e,n){"use strict";n(401)},445:function(t,e,n){"use strict";n(402)},482:function(t,e,n){"use strict";n.r(e);n(20),n(207),n(414),n(121),n(12),n(125);var r=n(371),i={name:"NavLink",props:{item:{required:!0}},computed:{link:function(){return Object(r.b)(this.item.link)},exact:function(){var t=this;return this.$site.locales?Object.keys(this.$site.locales).some((function(e){return e===t.link})):"/"===this.link},isNonHttpURI:function(){return Object(r.e)(this.link)||Object(r.f)(this.link)},isBlankTarget:function(){return"_blank"===this.target},isInternal:function(){return!Object(r.d)(this.link)&&!this.isBlankTarget},target:function(){return this.isNonHttpURI?null:this.item.target?this.item.target:Object(r.d)(this.link)?"_blank":""},rel:function(){return this.isNonHttpURI||!1===this.item.rel?null:this.item.rel?this.item.rel:this.isBlankTarget?"noopener noreferrer":null}},methods:{focusoutAction:function(){this.$emit("focusout")}}},a=n(34),s=Object(a.a)(i,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return t.isInternal?n("RouterLink",{staticClass:"nav-link",attrs:{to:t.link,exact:t.exact},nativeOn:{focusout:function(e){return t.focusoutAction.apply(null,arguments)}}},[t._v("\n "+t._s(t.item.text)+"\n")]):n("a",{staticClass:"nav-link external",attrs:{href:t.link,target:t.target,rel:t.rel},on:{focusout:t.focusoutAction}},[t._v("\n "+t._s(t.item.text)+"\n "),t.isBlankTarget?n("OutboundLink"):t._e()],1)}),[],!1,null,null,null).exports,o={name:"Home",components:{NavLink:s},computed:{data:function(){return this.$page.frontmatter},actionLink:function(){return{link:this.data.actionLink,text:this.data.actionText}}}},u=(n(417),Object(a.a)(o,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("main",{staticClass:"home",attrs:{"aria-labelledby":null!==t.data.heroText?"main-title":null}},[n("header",{staticClass:"hero"},[t.data.heroImage?n("img",{attrs:{src:t.$withBase(t.data.heroImage),alt:t.data.heroAlt||"hero"}}):t._e(),t._v(" "),null!==t.data.heroText?n("h1",{attrs:{id:"main-title"}},[t._v("\n "+t._s(t.data.heroText||t.$title||"Hello")+"\n ")]):t._e(),t._v(" "),null!==t.data.tagline?n("p",{staticClass:"description"},[t._v("\n "+t._s(t.data.tagline||t.$description||"Welcome to your VuePress site")+"\n ")]):t._e(),t._v(" "),t.data.actionText&&t.data.actionLink?n("p",{staticClass:"action"},[n("NavLink",{staticClass:"action-button",attrs:{item:t.actionLink}})],1):t._e()]),t._v(" "),t.data.features&&t.data.features.length?n("div",{staticClass:"features"},t._l(t.data.features,(function(e,r){return n("div",{key:r,staticClass:"feature"},[n("h2",[t._v(t._s(e.title))]),t._v(" "),n("p",[t._v(t._s(e.details))])])})),0):t._e(),t._v(" "),n("Content",{staticClass:"theme-default-content custom"}),t._v(" "),t.data.footer?n("div",{staticClass:"footer"},[t._v("\n "+t._s(t.data.footer)+"\n ")]):n("Content",{staticClass:"footer",attrs:{"slot-key":"footer"}})],1)}),[],!1,null,null,null).exports);n(418),n(70),n(45),n(420),n(123),n(124),n(218),n(421),n(129);function c(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function l(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function h(t){for(var e=1;e',this.initialize(t,e)}}}),d=(n(428),Object(a.a)(p,(function(){var t=this.$createElement,e=this._self._c||t;return e("form",{staticClass:"algolia-search-wrapper search-box",attrs:{id:"search-form",role:"search"}},[e("input",{staticClass:"search-query",attrs:{id:"algolia-search-input",placeholder:this.placeholder}})])}),[],!1,null,null,null).exports),g=(n(382),n(205),n(126),n(375),n(223),n(224),n(209),n(383),n(385),n(386),n(387),n(94),n(120),n(430),n(225)),v=n.n(g),m=function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,r=v()(e,"title","");return v()(e,"frontmatter.tags")&&(r+=" ".concat(e.frontmatter.tags.join(" "))),n&&(r+=" ".concat(n)),b(t,r)},b=function(t,e){var n=function(t){return t.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&")},r=new RegExp("[^\0-]"),i=t.split(/\s+/g).map((function(t){return t.trim()})).filter((function(t){return!!t}));if(r.test(t))return i.some((function(t){return e.toLowerCase().indexOf(t)>-1}));var a=t.endsWith(" ");return new RegExp(i.map((function(t,e){return i.length!==e+1||a?"(?=.*\\b".concat(n(t),"\\b)"):"(?=.*\\b".concat(n(t),")")})).join("")+".+","gi").test(e)},k={name:"SearchBox",data:function(){return{query:"",focused:!1,focusIndex:0,placeholder:void 0}},computed:{showSuggestions:function(){return this.focused&&this.suggestions&&this.suggestions.length},suggestions:function(){var t=this.query.trim().toLowerCase();if(t){for(var e=this.$site.pages,n=this.$site.themeConfig.searchMaxSuggestions||5,r=this.$localePath,i=[],a=0;a=n);a++){var s=e[a];if(this.getPageLocalePath(s)===r&&this.isSearchable(s))if(m(t,s))i.push(s);else if(s.headers)for(var o=0;o=n);o++){var u=s.headers[o];u.title&&m(t,s,u.title)&&i.push(Object.assign({},s,{path:s.path+"#"+u.slug,header:u}))}}return i}},alignRight:function(){return(this.$site.themeConfig.nav||[]).length+(this.$site.repo?1:0)<=2}},mounted:function(){this.placeholder=this.$site.themeConfig.searchPlaceholder||"",document.addEventListener("keydown",this.onHotkey)},beforeDestroy:function(){document.removeEventListener("keydown",this.onHotkey)},methods:{getPageLocalePath:function(t){for(var e in this.$site.locales||{})if("/"!==e&&0===t.path.indexOf(e))return e;return"/"},isSearchable:function(t){var e=null;return null===e||(e=Array.isArray(e)?e:new Array(e)).filter((function(e){return t.path.match(e)})).length>0},onHotkey:function(t){t.srcElement===document.body&&["s","/"].includes(t.key)&&(this.$refs.input.focus(),t.preventDefault())},onUp:function(){this.showSuggestions&&(this.focusIndex>0?this.focusIndex--:this.focusIndex=this.suggestions.length-1)},onDown:function(){this.showSuggestions&&(this.focusIndex "+t._s(e.header.title))]):t._e()])])})),0):t._e()])}),[],!1,null,null,null).exports),x=(n(432),Object(a.a)({},(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"sidebar-button",on:{click:function(e){return t.$emit("toggle-sidebar")}}},[n("svg",{staticClass:"icon",attrs:{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",role:"img",viewBox:"0 0 448 512"}},[n("path",{attrs:{fill:"currentColor",d:"M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"}})])])}),[],!1,null,null,null).exports),_=n(64),w=n(412),L=n(226),C=n.n(L),$={name:"DropdownLink",components:{NavLink:s,DropdownTransition:w.a},props:{item:{required:!0}},data:function(){return{open:!1}},computed:{dropdownAriaLabel:function(){return this.item.ariaLabel||this.item.text}},watch:{$route:function(){this.open=!1}},methods:{setOpen:function(t){this.open=t},isLastItemOfArray:function(t,e){return C()(e)===t},handleDropdown:function(){0===event.detail&&this.setOpen(!this.open)}}},S=(n(434),{name:"NavLinks",components:{NavLink:s,DropdownLink:Object(a.a)($,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"dropdown-wrapper",class:{open:t.open}},[n("button",{staticClass:"dropdown-title",attrs:{type:"button","aria-label":t.dropdownAriaLabel},on:{click:t.handleDropdown}},[n("span",{staticClass:"title"},[t._v(t._s(t.item.text))]),t._v(" "),n("span",{staticClass:"arrow down"})]),t._v(" "),n("button",{staticClass:"mobile-dropdown-title",attrs:{type:"button","aria-label":t.dropdownAriaLabel},on:{click:function(e){return t.setOpen(!t.open)}}},[n("span",{staticClass:"title"},[t._v(t._s(t.item.text))]),t._v(" "),n("span",{staticClass:"arrow",class:t.open?"down":"right"})]),t._v(" "),n("DropdownTransition",[n("ul",{directives:[{name:"show",rawName:"v-show",value:t.open,expression:"open"}],staticClass:"nav-dropdown"},t._l(t.item.items,(function(e,r){return n("li",{key:e.link||r,staticClass:"dropdown-item"},["links"===e.type?n("h4",[t._v("\n "+t._s(e.text)+"\n ")]):t._e(),t._v(" "),"links"===e.type?n("ul",{staticClass:"dropdown-subitem-wrapper"},t._l(e.items,(function(r){return n("li",{key:r.link,staticClass:"dropdown-subitem"},[n("NavLink",{attrs:{item:r},on:{focusout:function(n){t.isLastItemOfArray(r,e.items)&&t.isLastItemOfArray(e,t.item.items)&&t.setOpen(!1)}}})],1)})),0):n("NavLink",{attrs:{item:e},on:{focusout:function(n){t.isLastItemOfArray(e,t.item.items)&&t.setOpen(!1)}}})],1)})),0)])],1)}),[],!1,null,null,null).exports},computed:{userNav:function(){return this.$themeLocaleConfig.nav||this.$site.themeConfig.nav||[]},nav:function(){var t=this,e=this.$site.locales;if(e&&Object.keys(e).length>1){var n=this.$page.path,r=this.$router.options.routes,i=this.$site.themeConfig.locales||{},a={text:this.$themeLocaleConfig.selectText||"Languages",ariaLabel:this.$themeLocaleConfig.ariaLabel||"Select language",items:Object.keys(e).map((function(a){var s,o=e[a],u=i[a]&&i[a].label||o.lang;return o.lang===t.$lang?s=n:(s=n.replace(t.$localeConfig.path,a),r.some((function(t){return t.path===s}))||(s=a)),{text:u,link:s}}))};return[].concat(Object(_.a)(this.userNav),[a])}return this.userNav},userLinks:function(){return(this.nav||[]).map((function(t){return Object.assign(Object(r.h)(t),{items:(t.items||[]).map(r.h)})}))},repoLink:function(){var t=this.$site.themeConfig.repo;return t?/^https?:/.test(t)?t:"https://github.com/".concat(t):null},repoLabel:function(){if(this.repoLink){if(this.$site.themeConfig.repoLabel)return this.$site.themeConfig.repoLabel;for(var t=this.repoLink.match(/^https?:\/\/[^/]+/)[0],e=["GitHub","GitLab","Bitbucket"],n=0;nMath.abs(n)&&Math.abs(e)>40&&(e>0&&this.touchStart.x<=80?this.toggleSidebar(!0):this.toggleSidebar(!1))}}},Q=Object(a.a)(K,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"theme-container",class:t.pageClasses,on:{touchstart:t.onTouchStart,touchend:t.onTouchEnd}},[t.shouldShowNavbar?n("Navbar",{on:{"toggle-sidebar":t.toggleSidebar}}):t._e(),t._v(" "),n("div",{staticClass:"sidebar-mask",on:{click:function(e){return t.toggleSidebar(!1)}}}),t._v(" "),n("Sidebar",{attrs:{items:t.sidebarItems},on:{"toggle-sidebar":t.toggleSidebar},scopedSlots:t._u([{key:"top",fn:function(){return[t._t("sidebar-top")]},proxy:!0},{key:"bottom",fn:function(){return[t._t("sidebar-bottom")]},proxy:!0}],null,!0)}),t._v(" "),t.$page.frontmatter.layout?n("div",{staticClass:"custom-layout"},[n(t.$page.frontmatter.layout,{tag:"component"})],1):t.$page.frontmatter.home?n("Home"):n("Page",{attrs:{"sidebar-items":t.sidebarItems},scopedSlots:t._u([{key:"top",fn:function(){return[t._t("page-top")]},proxy:!0},{key:"bottom",fn:function(){return[t._t("page-bottom")]},proxy:!0}],null,!0)})],1)}),[],!1,null,null,null);e.default=Q.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/40.5c2510a8.js b/docs/.vuepress/dist/assets/js/40.5c2510a8.js new file mode 100644 index 00000000..d53ea06b --- /dev/null +++ b/docs/.vuepress/dist/assets/js/40.5c2510a8.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[40],{500:function(e,t,s){"use strict";s.r(t);var o=s(34),r=Object(o.a)({},(function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[s("h1",[e._v("Contributing")]),e._v(" "),s("p",[e._v("The following is a set of guidelines for contributing to Sprout Plugins and its first party integrations, which are hosted in the Barrel Strength organization on GitHub.")]),e._v(" "),s("h2",{attrs:{id:"security-disclosures"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#security-disclosures"}},[e._v("#")]),e._v(" Security Disclosures")]),e._v(" "),s("p",[e._v("Please report "),s("RouterLink",{attrs:{to:"/support/security.html"}},[e._v("security disclosures")]),e._v(" via the steps outlined on our Security page.")],1),e._v(" "),s("h2",{attrs:{id:"bug-reports-feature-requests"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#bug-reports-feature-requests"}},[e._v("#")]),e._v(" Bug Reports & Feature Requests")]),e._v(" "),s("p",[e._v("Before submitting "),s("RouterLink",{attrs:{to:"/support/support.html"}},[e._v("bug reports")]),e._v(" and "),s("RouterLink",{attrs:{to:"/support/feature-requests.html"}},[e._v("feature requests")]),e._v(", please search through open issues to see if yours has already been filed.")],1),e._v(" "),s("p",[e._v("If you do find a similar issue, upvote it by adding a 👍 reaction. Only leave a comment if you have relevant information to add.")]),e._v(" "),s("p",[e._v("Issues are labeled with the following tags:")]),e._v(" "),s("div",{pre:!0},[s("ul",[s("li",[s("code",[e._v("bug")]),e._v(" - issue does not work as expected")]),e._v(" "),s("li",[s("code",[e._v("c4")]),e._v(" - issue relates to a Craft 4 version of Sprout")]),e._v(" "),s("li",[s("code",[e._v("c3")]),e._v(" - issue relates to a Craft 3 version of Sprout")]),e._v(" "),s("li",[s("code",[e._v("cX")]),e._v(" - issue will be considered for a future version of Craft")]),e._v(" "),s("li",[s("code",[e._v("duplicate")]),e._v(" - issue is addressed by another issue")]),e._v(" "),s("li",[s("code",[e._v("expected behavior")]),e._v(" - issue described currently behaves as it is intended")]),e._v(" "),s("li",[s("code",[e._v("feature")]),e._v(" - a new feature that doesn't currently exist in Sprout")]),e._v(" "),s("li",[s("code",[e._v("invalid")]),e._v(" - issue appears to be a misunderstanding")]),e._v(" "),s("li",[s("code",[e._v("need more info")]),e._v(" - issue requires additional information before it gets a better label")]),e._v(" "),s("li",[s("code",[e._v("not planned")]),e._v(" - issue has been reviewed and will not be included in Sprout")]),e._v(" "),s("li",[s("code",[e._v("question")]),e._v(" - issue needs clarification")]),e._v(" "),s("li",[s("code",[e._v("waiting on")]),e._v(" - issue is waiting on a response before it can move forward")])])]),s("p",[e._v("If no one has filed the issue yet, submit a new one. Please include a clear description of the issue, and as much relevant information as possible, including a code sample demonstrating the the issue.")]),e._v(" "),s("h2",{attrs:{id:"documentation-edits"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#documentation-edits"}},[e._v("#")]),e._v(" Documentation Edits")]),e._v(" "),s("p",[e._v("Sprout's documentation for all plugins lives within the "),s("a",{attrs:{href:"https://github.com/barrelstrength/sprout-docs",target:"_blank",rel:"noopener noreferrer"}},[e._v("barrelstrength/sprout-docs"),s("OutboundLink")],1),e._v(" repo. Improvements or corrections to the docs can be submitted as a pull request.")]),e._v(" "),s("div",{pre:!0},[s("p",[e._v("Small edits can be made via the browser and Github's edit tools. To preview any significant documentation changes before committing them, you can review your changes locally. The documentation is powered by VuePress. Clone the documentation repository, go to the "),s("code",[e._v("docs/")]),e._v(" folder within your terminal, and run these commands:")])]),s("div",{staticClass:"language- extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[e._v("# Install npm dependencies\nnpm install\n\n# Build + run the VuePress dev server\nnpm run docs:dev\n")])])]),s("div",{pre:!0},[s("p",[e._v("Once the VuePress dev server is up and running, you’ll be able to view the docs at "),s("code",[e._v("http://localhost:8000/docs")]),e._v(". Changes you make to the .md files within "),s("code",[e._v("docs/")]),e._v(" will automatically trigger a live reload of the pages in the browser.")])]),s("h2",{attrs:{id:"core-enhancements"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#core-enhancements"}},[e._v("#")]),e._v(" Core Enhancements")]),e._v(" "),s("p",[e._v("If you would like to work on a new core feature or improvement, first create a Github issue for it if there’s not one already. As much as we appreciate community contributions, we are selective about which sorts of features should make it into Sprout itself rather than a plugin, so don’t take it the wrong way if we advise you to pursue the idea as a plugin instead.")]),e._v(" "),s("h2",{attrs:{id:"pull-requests"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#pull-requests"}},[e._v("#")]),e._v(" Pull Requests")]),e._v(" "),s("p",[e._v("Please ask first before embarking on any significant pull request (e.g. implementing features, refactoring code, porting to a different language), otherwise you risk spending a lot of time working on something that the project's developers might not want to merge into the project.")]),e._v(" "),s("p",[e._v("Pull requests should clearly describe the problem and solution and provide a step-by-step explanation of how to test, if possible. Include the relevant issue number if there is one.")]),e._v(" "),s("h2",{attrs:{id:"translations"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#translations"}},[e._v("#")]),e._v(" Translations")]),e._v(" "),s("p",[e._v("You can add a translation file to your project using "),s("a",{attrs:{href:"https://craftcms.com/docs/4.x/sites.html#static-message-translations",target:"_blank",rel:"noopener noreferrer"}},[e._v("Static Translations"),s("OutboundLink")],1),e._v(" and target Sprout Forms using the translation categories that it uses. Sprout plugins may rely on multiple modules in the underlying Sprout Framework if you want full a complete translation. For example, Sprout Forms relies on the Forms, Data Studio, Transactional Email, and Core modules which would all need to be translated to provide a full translation of Sprout Forms.")])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/41.37bc53ef.js b/docs/.vuepress/dist/assets/js/41.37bc53ef.js new file mode 100644 index 00000000..0a620c30 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/41.37bc53ef.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[41],{499:function(t,a,e){"use strict";e.r(a);var r=e(34),s=Object(r.a)({},(function(){var t=this,a=t.$createElement,e=t._self._c||a;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",[t._v("About Data Studio")]),t._v(" "),e("p",[t._v("Sprout Data Studio allows you to create interactive data sets from customizable data sources.")]),t._v(" "),e("p",[t._v("Data sets can be created from our default Data Sources or you can create your own. Multiple Data Sources are provided out of the box and additional Data Sources are available via custom plugins.")]),t._v(" "),e("h2",{attrs:{id:"data-sources"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#data-sources"}},[t._v("#")]),t._v(" Data Sources")]),t._v(" "),e("p",[t._v("A Data Source defines a set of data that can be queried by a Data Set and which settings are available be used when querying that data. A Data Source can define a subset of data that exists in your Craft database (such as Craft User data or Craft Commerce Product data) or from any source that you wish to query near or far. For example, a custom Data Source could query data from a third-party API and return the results to a Data Set to display.")]),t._v(" "),e("p",[t._v("Sprout Data Studio provides a few Data Sources out of the box:")]),t._v(" "),e("ul",[e("li",[e("strong",[t._v("Custom Query")]),t._v(" - Create data sets using custom database queries")]),t._v(" "),e("li",[e("strong",[t._v("Twig Template Query")]),t._v(" - Create data sets using custom queries in a Twig Template")]),t._v(" "),e("li",[e("strong",[t._v("Users")]),t._v(" - Create data sets with User and User Group data")]),t._v(" "),e("li",[e("strong",[t._v("Order History")]),t._v(" - Create data sets with Craft Commerce Order History data")]),t._v(" "),e("li",[e("strong",[t._v("Product Revenue")]),t._v(" - Create data sets with Craft Commerce Product Revenue data")])]),t._v(" "),e("h2",{attrs:{id:"data-sets"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#data-sets"}},[t._v("#")]),t._v(" Data Sets")]),t._v(" "),e("p",[t._v("Data Sets allow you to create queries into the data defined by a Data Source. You can create one or more Data Sets from a single Data Source and each Data Set can define unique query settings.")]),t._v(" "),e("p",[t._v("Data Sets can be organized into groups and customized so that you can conveniently interact with data set results in the Control Panel or export it as you need.")]),t._v(" "),e("h2",{attrs:{id:"settings"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#settings"}},[t._v("#")]),t._v(" Settings")]),t._v(" "),e("p",[t._v("Read the "),e("RouterLink",{attrs:{to:"/configuration/sprout-config.html"}},[t._v("Config Settings")]),t._v(" documentation to explore and customize settings.")],1)])}),[],!1,null,null,null);a.default=s.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/42.00352610.js b/docs/.vuepress/dist/assets/js/42.00352610.js new file mode 100644 index 00000000..2d93aa1f --- /dev/null +++ b/docs/.vuepress/dist/assets/js/42.00352610.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[42],{501:function(t,a,s){"use strict";s.r(a);var e=s(34),r=Object(e.a)({},(function(){var t=this,a=t.$createElement,s=t._self._c||a;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",[t._v("Data Sources")]),t._v(" "),s("p",[t._v("Custom Data Sources can be created by plugins. You can create as many Data Sources as you'd like.")]),t._v(" "),s("p",[t._v("Please see the Sprout Reports codebase for examples on how to create your own datasource. Sprout Reports' native Data Sources are written in the same way that you would write a custom Data Source.")]),t._v(" "),s("p",[t._v("Explore the default data sources in the plugin folder:")]),t._v(" "),s("div",{pre:!0},[s("ul",[s("li",[s("code",[t._v("vendor/barrelstrength/sprout/src/datastudio/components/datasources")])])])]),s("p",[t._v("To create a Data Source you will need to:")]),t._v(" "),s("ol",[s("li",[t._v("Create a class for your Data Source(s)")])]),t._v(" "),s("div",{pre:!0},[s("p",[t._v("Data Sources extend the "),s("code",[t._v("DataSource")]),t._v(" class:")])]),s("div",{staticClass:"language-php extra-class"},[s("pre",{pre:!0,attrs:{class:"language-php"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name-definition class-name"}},[t._v("MyCustomDataSource")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DataSource")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("ol",{attrs:{start:"2"}},[s("li",[t._v("Install your Data Source (optional)")])]),t._v(" "),s("div",{pre:!0},[s("p",[t._v('You can install your Data Source via an install script or migration or just let users hit the "Install" button on the Data Sources tab. To install a Data Source from your plugin or module, in your primary plugin, run Sprout Base Report\'s '),s("code",[t._v("installDataSources")]),t._v(" method after installation:")])]),s("div",{staticClass:"language-php extra-class"},[s("pre",{pre:!0,attrs:{class:"language-php"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("protected")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("afterInstall")]),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 "),s("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$dataSourceTypes")]),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 class-name static-context"}},[t._v("MyCustomDataSource")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),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\n "),s("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("SproutBaseReports")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$app")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),s("span",{pre:!0,attrs:{class:"token property"}},[t._v("dataSources")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("installDataSources")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$dataSourceTypes")]),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")])])])])}),[],!1,null,null,null);a.default=r.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/43.cc05f94d.js b/docs/.vuepress/dist/assets/js/43.cc05f94d.js new file mode 100644 index 00000000..331d7281 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/43.cc05f94d.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[43],{502:function(t,a,e){"use strict";e.r(a);var s=e(34),r=Object(s.a)({},(function(){var t=this,a=t.$createElement,e=t._self._c||a;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",[t._v("Custom Query")]),t._v(" "),e("p",[t._v("The "),e("strong",[t._v("Custom Query")]),t._v(" Data Source allows you to create Reports in the Craft Control Panel using a Custom MySQL Query.")]),t._v(" "),e("h3",{attrs:{id:"query-all-data-in-the-users-table"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#query-all-data-in-the-users-table"}},[t._v("#")]),t._v(" Query all data in the Users table")]),t._v(" "),e("div",{staticClass:"language-sql extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sql"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("SELECT")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("FROM")]),t._v(" users"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),e("p",[e("em",[t._v("Example assumes you setup Craft with the default database table naming conventions.")])])])}),[],!1,null,null,null);a.default=r.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/44.8ddeb19a.js b/docs/.vuepress/dist/assets/js/44.8ddeb19a.js new file mode 100644 index 00000000..0be6470b --- /dev/null +++ b/docs/.vuepress/dist/assets/js/44.8ddeb19a.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[44],{504:function(t,a,s){"use strict";s.r(a);var e=s(34),n=Object(e.a)({},(function(){var t=this,a=t.$createElement,s=t._self._c||a;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",[t._v("Twig Template Query")]),t._v(" "),s("div",{pre:!0},[s("p",[t._v("The "),s("strong",[t._v("Twig Template")]),t._v(" Data Source allows you to create reports in the Craft Control Panel using Twig Templates in your "),s("code",[t._v("craft/templates")]),t._v(" folder.")])]),s("iframe",{attrs:{src:"https://player.vimeo.com/video/248062317",width:"640",height:"360",frameborder:"0",webkitallowfullscreen:"",mozallowfullscreen:"",allowfullscreen:""}}),t._v(" "),s("p",[t._v("Setting up a Custom Twig Template report requires a couple of steps.")]),t._v(" "),s("div",{pre:!0},[s("ol",[s("li",[t._v("Create a new Custom Twig Template Report")]),t._v(" "),s("li",[t._v("Add your Template Settings")]),t._v(" "),s("li",[t._v("Customize your Report's "),s("code",[t._v("Results Template")]),t._v(" and "),s("code",[t._v("Options Template")]),t._v(" settings")])])]),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),s("p",[t._v("See the Sprout Reports "),s("code",[t._v("examples/templates")]),t._v(" folders for commented example files of Twig Template Reports and Settings Templates. Copy those files to your "),s("code",[t._v("craft/template")]),t._v(" folder and setup a Twig Template report to use them as described below.")])]),t._v(" "),s("h2",{attrs:{id:"template-settings"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#template-settings"}},[t._v("#")]),t._v(" Template Settings")]),t._v(" "),s("p",[t._v("To setup a Twig Template report you need to build a Results Template. Identifying your Results Template is the one required component of your Custom Twig Template report. The report template settings behave just like the Craft Sections 'Entry Template' setting.")]),t._v(" "),s("div",{pre:!0},[s("ul",[s("li",[s("strong",[t._v("Results Template")]),t._v(" (required) - "),s("code",[t._v("_reports/reportname/results")])]),t._v(" "),s("li",[s("strong",[t._v("Settings Template")]),t._v(" - "),s("code",[t._v("_reports/reportname/settings")])])])]),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),s("p",[t._v("Sprout Reports will look for your templates in your front-end "),s("code",[t._v("craft/templates")]),t._v(" folder so it's a good idea to use a hidden folder that can't be accessed directly from the web.")])]),t._v(" "),s("h2",{attrs:{id:"results-template"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#results-template"}},[t._v("#")]),t._v(" Results Template")]),t._v(" "),s("p",[t._v("Your Results Template is where you will build your report. A report consists of any number of rows. Rows must each have an equal number of columns.")]),t._v(" "),s("p",[t._v("The Twig Template Report has three helper tags to use when building reports:")]),t._v(" "),s("div",{staticClass:"table"},[s("table",[s("thead",[s("tr",[s("th",{staticStyle:{"text-align":"left"}},[t._v("Tag")]),t._v(" "),s("th",{staticStyle:{"text-align":"left"}},[t._v("Description")])])]),t._v(" "),s("tbody",[s("tr",[s("td",{staticStyle:{"text-align":"left"}},[s("strong",[t._v("sprout.twigDataSet.addHeaderRow()")])]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("Define the columns in the first row of your report")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[s("strong",[t._v("sprout.twigDataSet.addRow()")])]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("Add a single row of data to your report")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[s("strong",[t._v("sprout.twigDataSet.addRows()")])]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("Add an array of multiple rows of data to your report")])])])])]),t._v(" "),s("div",{pre:!0},[s("p",[t._v("You can use "),s("code",[t._v("addHeaderRow")]),t._v(" anywhere in your template to define the first row in your report that will be used as the column headers. The "),s("code",[t._v("addRow")]),t._v(" and "),s("code",[t._v("addRows")]),t._v(" actions add rows to your report in the order that they are used in your template.")])]),s("p",[t._v("The Twig Template Report also makes two variables available to your templates:")]),t._v(" "),s("div",{pre:!0},[s("div",{pre:!0,attrs:{class:"table"}},[s("table",[s("thead",[s("tr",[s("th",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Variable")]),t._v(" "),s("th",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Description")])])]),t._v(" "),s("tbody",[s("tr",[s("td",{pre:!0,attrs:{style:"text-align:left"}},[s("strong",[t._v("settings")])]),t._v(" "),s("td",{pre:!0,attrs:{style:"text-align:left"}},[t._v("The values for all of your reports settings (e.g "),s("code",[t._v("settings.mySetting")]),t._v(")")])]),t._v(" "),s("tr",[s("td",{pre:!0,attrs:{style:"text-align:left"}},[s("strong",[t._v("isExport")])]),t._v(" "),s("td",{pre:!0,attrs:{style:"text-align:left"}},[t._v("The "),s("code",[t._v("isExport")]),t._v(" variable will be set to true when your report is being processed as an export. One use for this is if you'd like to display a link in HTML in your report in the Control Panel, but want a text value when the report is exported.")])])])])])]),s("p",[t._v("Here is a simple, hard-coded example of each tag in use for a two-column report:")]),t._v(" "),s("h3",{attrs:{id:"craft-templates-reports-reportname-results-html"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#craft-templates-reports-reportname-results-html"}},[t._v("#")]),t._v(" craft/templates/_reports/reportname/results.html")]),t._v(" "),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# addHeaderRow accepts a single array with a comma-separated list of values #}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("do")]),t._v(" sprout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("twigDataSet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("addHeaderRow"),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"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("Region"),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"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("Trip 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(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# addRow, also accepts a single array with a comma-separated list of values. The array is defined by the opening and closing square brackets. #}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("do")]),t._v(" sprout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("twigDataSet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("addRow"),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"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("Europe"),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"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("Camino de Santiago"),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(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# addRows, accepts an array of arrays, where each array includes a comma-separated list of values. Note that there are two levels of opening and closing square brackets. #}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("do")]),t._v(" sprout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("twigDataSet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("addRows"),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"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("North America"),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"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("John Muir Trail"),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("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("Asia"),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"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("Langtang Trek"),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 punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n")])])]),s("h2",{attrs:{id:"settings-template"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#settings-template"}},[t._v("#")]),t._v(" Settings Template")]),t._v(" "),s("p",[t._v("If you want to give your user control over some Settings when they generate a Report, you can do so by defining an Settings Template.")]),t._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),s("p",[t._v("Use the Form Macros supported by the Craft CP to keep consistent with the Craft UI. Sprout Reports will import the Craft CP Form Macros. Your Settings Template can look like this where the imported "),s("code",[t._v("forms")]),t._v(" variable includes all Craft form macros defined in "),s("code",[t._v("craft/app/templates/_includes/forms.html")]),t._v(". :")])]),t._v(" "),s("h3",{attrs:{id:"craft-templates-reports-reportname-settings-html"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#craft-templates-reports-reportname-settings-html"}},[t._v("#")]),t._v(" craft/templates/_reports/reportname/settings.html")]),t._v(" "),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Number Setting #}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" forms"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("textField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n label"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Limit"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n name"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("limit"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n size"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n value"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" settings"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("quantity "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("is")]),t._v(" defined "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" settings"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("quantity "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("null")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n first"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),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(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Pre-defined Dropdown #}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" forms"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("selectField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n label"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Region"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n name"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("region"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n options"),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"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("africa"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Africa"),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"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("antartica"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Antartica"),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"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("asia"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Asia"),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"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("australia"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Australia"),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"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("europe"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Europe"),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"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("northAmerica"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("North America"),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"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("southAmerica"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("South America"),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 value"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" settings"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("region "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("is")]),t._v(" defined "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" settings"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("region "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Antartica"),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(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Dynamic Dropdown #}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" categoryGroup "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" craft"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("categories"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("group"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("exampleCategoryGroup"),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 delimiter punctuation"}},[t._v("%}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" categories "),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(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("for")]),t._v(" category "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("in")]),t._v(" categoryGroup "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" categories "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" categories"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("merge"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n label"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" category"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("id"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n value"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" category"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("title\n "),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 delimiter punctuation"}},[t._v("%}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endfor")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" forms"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("selectField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n label"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Example Category Element Dropdown Field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n name"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("exampleCategoryDropdownField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n options"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" categories"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n value"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),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(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n")])])]),s("div",{pre:!0},[s("p",[t._v("All Settings are available to you via the "),s("code",[t._v("settings")]),t._v(" variable. Be sure to test if they exist. See an example Settings Template with several common fields in the Sprout Reports "),s("code",[t._v("examples/templates")]),t._v(" folder.")])]),s("ul",[s("li",[t._v("Text")]),t._v(" "),s("li",[t._v("Textarea")]),t._v(" "),s("li",[t._v("Dropdown")]),t._v(" "),s("li",[t._v("Radio Buttons")]),t._v(" "),s("li",[t._v("Checkboxes")]),t._v(" "),s("li",[t._v("Lightswitch")]),t._v(" "),s("li",[t._v("DateTime (requires that you start the field name with \"datetime\", i.e. 'datetimeStartDate')")])]),t._v(" "),s("p",[t._v("Examples also include how to toggle the display of conditional fields and how to use DateTime fields which require some additional steps. Additional field types can be used, but some fields with advanced validation may require that you create a "),s("RouterLink",{attrs:{to:"/data-studio/custom-data-sources.html"}},[t._v("Custom Data Source")]),t._v(". The only field Twig Template Reports support with advanced validation requirements is the DateTime field.")],1),t._v(" "),s("h2",{attrs:{id:"using-settings-in-results"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#using-settings-in-results"}},[t._v("#")]),t._v(" Using Settings in Results")]),t._v(" "),s("p",[t._v("When a user runs a report, all Settings will be passed to the Results Template and can be used in your Settings Template Twig code to help query and display data how you wish:")]),t._v(" "),s("h3",{attrs:{id:"reports-reportname-results-html"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#reports-reportname-results-html"}},[t._v("#")]),t._v(" reports/reportname/results.html")]),t._v(" "),s("p",[t._v("In this example we use our settings to retrieve a CategoryModel and then use that CategoryModel to retrieve all Trips that relate to that Category. We limit the results by the number provided by the user in the Limit setting.")]),t._v(" "),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" region "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" craft"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("categories"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("group"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("settings"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("region"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" trips "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" craft"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("entries"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("section"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("trips"),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("relatedTo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("region"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("limit"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("settings"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("limit"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Create a Header Row #}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("do")]),t._v(" sprout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("twigDataSet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("addHeaderRow"),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"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("Region"),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"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("Trip 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(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Loop through our trips and output the Region and Trip Name for each result #}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("for")]),t._v(" trip "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("in")]),t._v(" trips "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("do")]),t._v(" sprout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("twigDataSet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("addRow"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n trip"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("relatedCategory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("first"),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("title"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" \n trip"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("title\n "),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 delimiter punctuation"}},[t._v("%}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endfor")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n")])])])])}),[],!1,null,null,null);a.default=n.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/45.b7beba77.js b/docs/.vuepress/dist/assets/js/45.b7beba77.js new file mode 100644 index 00000000..1e72de4f --- /dev/null +++ b/docs/.vuepress/dist/assets/js/45.b7beba77.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[45],{503:function(t,s,a){"use strict";a.r(s);var n=a(34),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",[t._v("HTML vs CSV")]),t._v(" "),a("div",{pre:!0},[a("p",[t._v("Reports exist in two forms. They display in web browser when viewed in the Control Panel and as CSV files when exported. If you wish to treat your data differently in these two contexts you can use the "),a("code",[t._v("isExport")]),t._v(" variable.")])]),a("h2",{attrs:{id:"twig-template-example"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#twig-template-example"}},[t._v("#")]),t._v(" Twig Template Example")]),t._v(" "),a("div",{pre:!0},[a("p",[t._v("In Twig Template Reports the "),a("code",[t._v("isExport")]),t._v(" variable is available in your results template.")])]),a("div",{staticClass:"language-twig extra-class"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-twig"}},[a("code",[a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("do")]),t._v(" sprout"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("twigDataSet"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("addHeaderRow"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("Row"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("do")]),t._v(" sprout"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("twigDataSet"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("addRow"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n isExport "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("Not Link"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v('Link'),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n")])])]),a("h2",{attrs:{id:"custom-data-source-example"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#custom-data-source-example"}},[t._v("#")]),t._v(" Custom Data Source Example")]),t._v(" "),a("div",{pre:!0},[a("p",[t._v("When building a custom data source, the context is defined as a property on the DataSource class. The 'isExport' property is set to "),a("code",[t._v("false")]),t._v(" by default and gets set to "),a("code",[t._v("true")]),t._v(" when running the export action.")])]),a("div",{staticClass:"language-php extra-class"},[a("div",{staticClass:"highlight-lines"},[a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("div",{staticClass:"highlighted"},[t._v(" ")]),a("br"),a("br"),a("br"),a("br"),a("br"),a("br"),a("br")]),a("pre",{pre:!0,attrs:{class:"language-php"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name-definition class-name"}},[t._v("MyCustomDataSource")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DataSource")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("getResults")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name type-declaration"}},[t._v("Report")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$report")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword type-hint"}},[t._v("array")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$settings")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword return-type"}},[t._v("array")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Results logic")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("Craft")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$app")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getView")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("renderTemplate")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'path/to/resultsTemplate'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'isExport'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$this")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("isExport")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'settings'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$settings")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/46.6ccdaefe.js b/docs/.vuepress/dist/assets/js/46.6ccdaefe.js new file mode 100644 index 00000000..325c263b --- /dev/null +++ b/docs/.vuepress/dist/assets/js/46.6ccdaefe.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[46],{506:function(t,e,a){"use strict";a.r(e);var s=a(34),r=Object(s.a)({},(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",[t._v("Craft 3")]),t._v(" "),a("p",[t._v("Sprout Reports installation and update instructions for Craft 3.")]),t._v(" "),a("h2",{attrs:{id:"requirements"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),a("ul",[a("li",[t._v("Craft CMS 3.0.0-RC1 or a more recent version of Craft")])]),t._v(" "),a("h2",{attrs:{id:"installation-via-plugin-store"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#installation-via-plugin-store"}},[t._v("#")]),t._v(" Installation via Plugin Store")]),t._v(" "),a("ol",[a("li",[t._v("Find the plugin in the Plugin Store in your Craft Control Panel")]),t._v(" "),a("li",[t._v("Go to "),a("em",[t._v("Settings → Plugins")]),t._v(" and select “Install”")])]),t._v(" "),a("h2",{attrs:{id:"installation-via-composer"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#installation-via-composer"}},[t._v("#")]),t._v(" Installation via Composer")]),t._v(" "),a("div",{pre:!0},[a("ol",[a("li",[t._v("Open your terminal and go to your Craft project:"),a("br"),a("code",[t._v("cd /path/to/project")])]),t._v(" "),a("li",[t._v("Then tell Composer to load the plugin:"),a("br"),a("code",[t._v("composer require barrelstrength/sprout-reports")])]),t._v(" "),a("li",[t._v("In the Control Panel, go to "),a("em",[t._v("Settings → Plugins")]),t._v(" and select “Install”")])])]),a("h2",{attrs:{id:"upgrading-to-v1-1-8"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#upgrading-to-v1-1-8"}},[t._v("#")]),t._v(" Upgrading to v1.1.8")]),t._v(" "),a("div",{pre:!0},[a("p",[t._v("Custom Data Sources will need to make a minor update when upgrading to Sprout Base Reports 1.2.0 (Sprout Reports v1.1.8). Data Sources will still display in the interface but may not have an ideal name until they are updated to use the "),a("code",[t._v("displayName()")]),t._v(" method.")])]),a("div",{staticClass:"language-php extra-class"},[a("pre",{pre:!0,attrs:{class:"language-php"}},[a("code",[a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("OLD")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("getName")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword return-type"}},[t._v("string")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("Craft")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("t")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'sprout-reports'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'Twig Template'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("NEW")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("displayName")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword return-type"}},[t._v("string")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("Craft")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("t")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'sprout-reports'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'Twig Template'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),a("h2",{attrs:{id:"upgrading-to-craft-3"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#upgrading-to-craft-3"}},[t._v("#")]),t._v(" Upgrading to Craft 3")]),t._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[t._v("BEFORE YOU UPDATE")]),t._v(" "),a("p",[t._v("Make sure you have updated to the latest version of Sprout Reports 0.x before updating to Sprout Reports 1.x for Craft 3")])]),t._v(" "),a("p",[t._v("There are a few changes to be aware of when upgrading to Sprout Reports for Craft 3. We have simplified the Sprout Reports plugin to only include two Data Sources out of the box. Additional Data Sources can be added as desired.")]),t._v(" "),a("p",[t._v("Here's an overview of the Data Sources we have supported and which plugins they can be found in between Craft 2 and Craft 3:")]),t._v(" "),a("div",{staticClass:"table"},[a("table",[a("thead",[a("tr",[a("th",[t._v("Data Sources")]),t._v(" "),a("th",[t._v("Craft 2 Plugin")]),t._v(" "),a("th",[t._v("Craft 3 Plugin")])])]),t._v(" "),a("tbody",[a("tr",[a("td",[t._v("Custom Query")]),t._v(" "),a("td",[t._v("Sprout Reports")]),t._v(" "),a("td",[t._v("Sprout Reports")])]),t._v(" "),a("tr",[a("td",[t._v("Twig Template")]),t._v(" "),a("td",[t._v("Sprout Reports")]),t._v(" "),a("td",[t._v("Sprout Reports")])]),t._v(" "),a("tr",[a("td",[t._v("Categories")]),t._v(" "),a("td",[t._v("Sprout Reports")]),t._v(" "),a("td",[t._v("Sprout Reports - Categories")])]),t._v(" "),a("tr",[a("td",[t._v("Users")]),t._v(" "),a("td",[t._v("Sprout Reports")]),t._v(" "),a("td",[t._v("Sprout Reports - Users")])]),t._v(" "),a("tr",[a("td",[t._v("Commerce")]),t._v(" "),a("td",[t._v("Sprout Reports for Craft Commerce")]),t._v(" "),a("td",[t._v("Sprout Reports - Craft Commerce")])]),t._v(" "),a("tr",[a("td",[t._v("Sprout Forms Entries")]),t._v(" "),a("td",[t._v("Sprout Forms")]),t._v(" "),a("td",[t._v("Sprout Forms")])]),t._v(" "),a("tr",[a("td",[t._v("Custom - Other")]),t._v(" "),a("td",[t._v("Custom")]),t._v(" "),a("td",[t._v("Custom")])])])])]),t._v(" "),a("h2",{attrs:{id:"upgrading-categories-and-users"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#upgrading-categories-and-users"}},[t._v("#")]),t._v(" Upgrading Categories and Users")]),t._v(" "),a("div",{pre:!0},[a("p",[t._v("If you have any Categories or Users reports in Craft 2, you'll want to download and install the "),a("code",[t._v("Sprout Reports - Categories")]),t._v(" and "),a("code",[t._v("Sprout Reports - Users")]),t._v(" plugins in Craft 3 after you get upgraded. Your existing Categories and Users reports will not display until you add those plugins.")])]),a("h2",{attrs:{id:"upgrading-sprout-forms"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#upgrading-sprout-forms"}},[t._v("#")]),t._v(" Upgrading Sprout Forms")]),t._v(" "),a("p",[t._v("If you use Reports for Sprout Forms, they will get migrated over when you upgrade Sprout Forms. If you only need Reports for Sprout Forms, you don't have to upgrade Sprout Reports. Sprout Forms for Craft 3 will give you full functionality for Sprout Forms Reports without ever having to install Sprout Reports.")]),t._v(" "),a("h2",{attrs:{id:"upgrading-commerce-reports"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#upgrading-commerce-reports"}},[t._v("#")]),t._v(" Upgrading Commerce Reports")]),t._v(" "),a("div",{pre:!0},[a("p",[t._v("Until Craft Commerce 2 is released and we get around to updating the "),a("code",[t._v("Sprout Reports for Craft Commerce")]),t._v(" any Commerce Reports will be disabled. Your data will remain in the database and once we have the Commerce Reports plugin available your reports will become available again when that plugin is installed.")])]),a("h2",{attrs:{id:"custom-reports"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#custom-reports"}},[t._v("#")]),t._v(" Custom Reports")]),t._v(" "),a("div",{pre:!0},[a("p",[t._v("If you have any custom reports, you'll need to write a migration to get them updated to Craft 3. Please refer to the "),a("code",[t._v("Sprout Reports - Categories")]),t._v(" and "),a("code",[t._v("Sprout Reports - Users")]),t._v(" plugins Install migrations for examples.")])]),a("h2",{attrs:{id:"upgrading-to-reports-v1-3-0"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#upgrading-to-reports-v1-3-0"}},[t._v("#")]),t._v(" Upgrading to Reports v1.3.0")]),t._v(" "),a("p",[t._v("If you have the Users Data Source for Sprout Reports installed, when you update to Sprout Reports v1.3.0 your existing Users Reports will be migrated and you can safely uninstall and remove the Users Data Source plugin after the upgrade is complete.")]),t._v(" "),a("h2",{attrs:{id:"upgrading-to-reports-2-0-0-unreleased"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#upgrading-to-reports-2-0-0-unreleased"}},[t._v("#")]),t._v(" Upgrading to Reports 2.0.0 - UNRELEASED")]),t._v(" "),a("div",{pre:!0},[a("p",[t._v("Sprout Reports 2 is a major release the includes an update to the underlying architecture. The Sprout Reports user experience will remain familiar but several conventions have changed. Most notably, the core codebase for "),a("code",[t._v("barrelstrength/sprout-reports")]),t._v(" has been moved to the "),a("code",[t._v("barrelstrength/sprout-base")]),t._v(" package so any custom code, translations, or direct links to the Sprout Reports Control Panel will need to be updated to target the new naming conventions. Plugin-specific Control Panel settings have also moved to the Craft settings area.")])]),a("h3",{attrs:{id:"breaking-change"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#breaking-change"}},[t._v("#")]),t._v(" BREAKING CHANGE")]),t._v(" "),a("div",{pre:!0},[a("p",[t._v("Removed Report Element "),a("code",[t._v("hasNameFormat")]),t._v(" attribute")])]),a("h3",{attrs:{id:"editions"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#editions"}},[t._v("#")]),t._v(" Editions")]),t._v(" "),a("p",[t._v("Sprout Reports 2.0.0 introduces Lite and Pro Editions. Existing users will be upgraded to a Pro licenses with no recurring yearly fees.")]),t._v(" "),a("p",[t._v("Pro users will enjoy unlimited reports, visualizations, and mailing list integrations. Lite users can take advantage of unlimited Custom Query Reports.")]),t._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",[a("code",[t._v("UPDATE LIST OF FEATURES ****\n- Unlimited Custom Query Report available in Lite \n- Pro Visualizations (we can still insert manual visualizations at top of Entries in Forms via APi)\n Limit to just line chart viz? No widgets? Or only line chart as widget?\n- Pro: Mailing List Integrations (don't display in sources, show pro callout on Edit page, make sure 'reports' is pro to display Email sidebar modal setting)\n- Reports now have editions: Restrict Reports Lite to only custom query reports, vs. 1 of each. Still restrict viz and stuff which will also be a draw to upgrade.\n")])])]),a("h3",{attrs:{id:"architectural-changes"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#architectural-changes"}},[t._v("#")]),t._v(" Architectural Changes")]),t._v(" "),a("div",{pre:!0},[a("div",{pre:!0,attrs:{class:"table"}},[a("table",[a("thead",[a("tr",[a("th",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Feature")]),t._v(" "),a("th",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Old Name")]),t._v(" "),a("th",{pre:!0,attrs:{style:"text-align:left"}},[t._v("New Name")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{pre:!0,attrs:{style:"text-align:left"}},[t._v("CP URL")]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("admin/sprout-reports")])]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("admin/sprout/lists")])])]),t._v(" "),a("tr",[a("td",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Template Variables")]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("craft.sproutReports")])]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("sprout.reports")])])]),t._v(" "),a("tr",[a("td",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Translation Category")]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("sprout-reports")])]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("sprout")])])]),t._v(" "),a("tr",[a("td",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Controller Namespace")]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("barrelstrength/sproutreports/controllers")])]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("barrelstrength/sproutbase/app/reports/controllers")])])]),t._v(" "),a("tr",[a("td",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Service Namespace")]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("barrelstrength/sproutreports/services")])]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("barrelstrength/sproutbase/app/reports/services")])])])])])])]),a("h3",{attrs:{id:"custom-data-source-updates"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#custom-data-source-updates"}},[t._v("#")]),t._v(" Custom Data Source Updates")]),t._v(" "),a("div",{pre:!0},[a("p",[t._v("Custom Data Sources have been updated to clean up how settings are handled. You should now access Report settings within your Custom Data Source using the "),a("code",[t._v("$report->getSettings()")]),t._v(" method. The "),a("code",[t._v("$settings")]),t._v(" attribute has been removed from the method signatures:")])]),a("div",{staticClass:"language-php extra-class"},[a("pre",{pre:!0,attrs:{class:"language-php"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// OLD")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("getResults")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name type-declaration"}},[t._v("Report")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$report")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword type-hint"}},[t._v("array")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$settings")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword return-type"}},[t._v("array")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("getDefaultLabels")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name type-declaration"}},[t._v("Report")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$report")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword type-hint"}},[t._v("array")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$settings")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword return-type"}},[t._v("array")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// NEW")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("getResults")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name type-declaration"}},[t._v("Report")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$report")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword return-type"}},[t._v("array")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("getDefaultLabels")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name type-declaration"}},[t._v("Report")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$report")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword return-type"}},[t._v("array")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("h3",{attrs:{id:"notes"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#notes"}},[t._v("#")]),t._v(" NOTES>...")]),t._v(" "),a("p",[t._v("Custom Reports in Sprout Reports will need to manually update dataSourceId\nWe used to store it as sproutreports.users string but then we changed that to an int column\nSo migrations will fail unless they get manually updated prior to the migration that converts\nthat column to an int.\nBefore you upgrade you'll want to manually visit the Reports->Data Sources tab. Change the toggle the allowNew setting on and off again. This will add a record of this report to the database (at one point we only stored this in the db if a setting changed and otherwise it did not get stored in the db).\nThen, during the migration, the migration will try to update that dataSourceID column and be able to match the Data Source name to the new ID before it triggers that migration.")])])}),[],!1,null,null,null);e.default=r.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/47.40b1b14c.js b/docs/.vuepress/dist/assets/js/47.40b1b14c.js new file mode 100644 index 00000000..fdb34e9a --- /dev/null +++ b/docs/.vuepress/dist/assets/js/47.40b1b14c.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[47],{505:function(e,t,r){"use strict";r.r(t);var o=r(34),a=Object(o.a)({},(function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[r("h1",[e._v("Large Data Sets")]),e._v(" "),r("p",[e._v("Sometimes you need to run reports that query a lot of data, or complex data structures. If you have a report that is too large and never finishes running, below are a few options you may want to consider.")]),e._v(" "),r("p",[e._v("These solutions will require some level of technical understanding and could depend on several variables unrelated to the Sprout Reports plugin in your hosting environment or code, including your web server, PHP installation, and Craft configuration.")]),e._v(" "),r("div",{staticClass:"custom-block tip"},[r("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),r("p",[e._v("If you would like help evaluating your resource requirements, we are available to help out in a consulting relationship to help you meet your projects reporting needs.")]),e._v(" "),r("p",[e._v("Contact us: "),r("a",{attrs:{href:"mailto:sprout@barrelstrengthdesign.com"}},[e._v("sprout@barrelstrengthdesign.com")])])]),e._v(" "),r("h2",{attrs:{id:"query-optimization"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#query-optimization"}},[e._v("#")]),e._v(" Query Optimization")]),e._v(" "),r("p",[r("strong",[e._v("Can you optimize your Report's queries?")]),e._v(" In the case you have Custom Query Reports or a custom Data Source, consider reviewing your code and make sure it's as efficient as it can be.")]),e._v(" "),r("h2",{attrs:{id:"php-settings"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#php-settings"}},[e._v("#")]),e._v(" PHP Settings")]),e._v(" "),r("div",{pre:!0},[r("p",[r("strong",[e._v("Can you increase PHP's "),r("code",[e._v("max_execution_time")]),e._v(" or "),r("code",[e._v("memory_limit")]),e._v(" settings?")]),e._v(" These settings can give you a bit more headroom for an extra large report.")])]),r("h2",{attrs:{id:"server-settings"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#server-settings"}},[e._v("#")]),e._v(" Server Settings")]),e._v(" "),r("p",[r("strong",[e._v("Can you increase your servers resources?")]),e._v(" Upgrading to a more powerful server can provide more resources for memory-intensive tasks.")]),e._v(" "),r("h2",{attrs:{id:"local-environment"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#local-environment"}},[e._v("#")]),e._v(" Local Environment")]),e._v(" "),r("p",[r("strong",[e._v("Can you download your database and run the report locally?")]),e._v(" In some cases, if you don't have the means to improve your hosting environment, you might be able to find a temporary workaround by working locally?")])])}),[],!1,null,null,null);t.default=a.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/48.baae46c7.js b/docs/.vuepress/dist/assets/js/48.baae46c7.js new file mode 100644 index 00000000..3f3947d2 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/48.baae46c7.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[48],{508:function(e,t,i){"use strict";i.r(t);var s=i(34),a=Object(s.a)({},(function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[i("h1",[e._v("Mailing Lists")]),e._v(" "),i("div",{pre:!0},[i("p",[e._v("A Report becomes a Mailing List when the "),i("code",[e._v("Email Column")]),e._v(" setting is defined. The Email Column should reference a column that is returned by the report that provides a valid email address.")])]),i("p",[e._v("One or more Mailing Lists can be selected as Recipients for Notification Emails in Sprout Forms and Sprout Email. If the value returned by the Email Column does not validate as an email, it will be ignored.")]),e._v(" "),i("div",{staticClass:"custom-block tip"},[i("p",{staticClass:"custom-block-title"},[e._v("Large Mailing Lists")]),e._v(" "),i("p",[e._v("The Mailing Lists feature is not yet designed to send to a large numbers of recipients. The max list size will vary depending on your list size and server resources. Be sure to test for your particular situation.")]),e._v(" "),i("p",[e._v("We do have plans to support large Mailing Lists. Please get in touch if you would like discuss a custom development project to get this feature prioritized: "),i("a",{attrs:{href:"mailto:sprout@barrelstrengthdesign.com",target:"_blank"}},[e._v("sprout@barrelstrengthdesign.com")])])])])}),[],!1,null,null,null);t.default=a.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/49.fba21233.js b/docs/.vuepress/dist/assets/js/49.fba21233.js new file mode 100644 index 00000000..9b7097cb --- /dev/null +++ b/docs/.vuepress/dist/assets/js/49.fba21233.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[49],{507:function(t,e,a){"use strict";a.r(e);var n=a(34),o=Object(n.a)({},(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",[t._v("Name Format")]),t._v(" "),a("p",[t._v("Give your Data Set a dynamic name using the Name Format setting.")]),t._v(" "),a("p",[t._v("To indicate details about the selected Data Set settings in the Data Set Name, use the "),a("em",[t._v("Name Format")]),t._v(" setting. The "),a("em",[t._v("Name Format")]),t._v(" field let's you dynamically output any value from your Report settings in the name of your Data Set using Craft Object Syntax.")])])}),[],!1,null,null,null);e.default=o.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/5.05e86079.js b/docs/.vuepress/dist/assets/js/5.05e86079.js new file mode 100644 index 00000000..82de8599 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/5.05e86079.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[5,7,11],{369:function(t,e){t.exports="\t\n\v\f\r                 \u2028\u2029\ufeff"},370:function(t,e,r){var n=r(4),a=r(30),i=r(17),o=r(369),s=n("".replace),c="["+o+"]",u=RegExp("^"+c+c+"*"),l=RegExp(c+c+"*$"),f=function(t){return function(e){var r=i(a(e));return 1&t&&(r=s(r,u,"")),2&t&&(r=s(r,l,"")),r}};t.exports={start:f(1),end:f(2),trim:f(3)}},372:function(t,e,r){"use strict";var n=r(9),a=r(0),i=r(4),o=r(122),s=r(15),c=r(10),u=r(206),l=r(35),f=r(67),h=r(208),d=r(3),p=r(66).f,v=r(37).f,m=r(13).f,b=r(373),g=r(370).trim,_=a.Number,N=_.prototype,y=a.TypeError,C=i("".slice),w=i("".charCodeAt),E=function(t){var e=h(t,"number");return"bigint"==typeof e?e:I(e)},I=function(t){var e,r,n,a,i,o,s,c,u=h(t,"number");if(f(u))throw y("Cannot convert a Symbol value to a number");if("string"==typeof u&&u.length>2)if(u=g(u),43===(e=w(u,0))||45===e){if(88===(r=w(u,2))||120===r)return NaN}else if(48===e){switch(w(u,1)){case 66:case 98:n=2,a=49;break;case 79:case 111:n=8,a=55;break;default:return+u}for(o=(i=C(u,2)).length,s=0;sa)return NaN;return parseInt(i,n)}return+u};if(o("Number",!_(" 0o1")||!_("0b1")||_("+0x1"))){for(var O,S=function(t){var e=arguments.length<1?0:_(E(t)),r=this;return l(N,r)&&d((function(){b(r)}))?u(Object(e),r,S):e},x=n?p(_):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,isFinite,isInteger,isNaN,isSafeInteger,parseFloat,parseInt,fromString,range".split(","),k=0;x.length>k;k++)c(_,O=x[k])&&!c(S,O)&&m(S,O,v(_,O));S.prototype=N,N.constructor=S,s(a,"Number",S)}},373:function(t,e,r){var n=r(4);t.exports=n(1..valueOf)},374:function(t,e,r){},377:function(t,e,r){"use strict";r(374)},403:function(t,e,r){},410:function(t,e,r){"use strict";r.r(e);r(372);var n={props:{label:{type:String,required:!1},width:{type:Number,default:18},height:{type:Number,default:18}}},a=r(34),i=Object(a.a)(n,(function(){var t=this.$createElement,e=this._self._c||t;return e("svg",{attrs:{"aria-hidden":!this.label,"aria-label":this.label,width:this.width,height:this.height,viewBox:"0 0 512 512",fill:"#27AB83"}},[e("path",{attrs:{d:"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"}})])}),[],!1,null,null,null);e.default=i.exports},411:function(t,e,r){"use strict";r.r(e);var n=r(2),a=r(413);n.a.use(a.a),a.a.options.autoHide=!1;var i={},o=(r(377),r(34)),s=Object(o.a)(i,(function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"info-hud"},[e("v-popover",{attrs:{placement:"right"}},[e("svg",{staticClass:"info-circle",attrs:{viewBox:"0 0 512 512"}},[e("path",{attrs:{d:"M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z"}})]),this._v(" "),e("template",{slot:"popover"},[this._t("default")],2)],2)],1)}),[],!1,null,null,null);e.default=s.exports},474:function(t,e,r){"use strict";r(403)},483:function(t,e,r){"use strict";r.r(e);r(12);var n=r(410),a=r(411);function i(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function o(t){for(var e=1;e2&&void 0!==arguments[2]?arguments[2]:null;Object.defineProperty(t,e,{configurable:!0,writable:!0,value:r})},u={abstract:!0,name:"Fragment",props:{name:{type:String,default:function(){return Math.floor(Date.now()*Math.random()).toString(16)}}},mounted:function(){var t=this.$el,e=t.parentNode,r=document.createComment("fragment#".concat(this.name,"#head")),n=document.createComment("fragment#".concat(this.name,"#tail"));e.insertBefore(r,t),e.insertBefore(n,t),t.appendChild=function(r){e.insertBefore(r,n),s(r,"parentNode",t)},t.insertBefore=function(r,n){e.insertBefore(r,n),s(r,"parentNode",t)},t.removeChild=function(t){e.removeChild(t),c(t,"parentNode")},Array.from(t.childNodes).forEach((function(e){return t.appendChild(e)})),e.removeChild(t),s(t,"parentNode",e),s(t,"nextSibling",n.nextSibling);var a=e.insertBefore;e.insertBefore=function(n,i){a.call(e,n,i!==t?i:r)};var i=e.removeChild;e.removeChild=function(o){if(o===t){for(;r.nextSibling!==n;)t.removeChild(r.nextSibling);e.removeChild(r),e.removeChild(n),c(t,"parentNode"),e.insertBefore=a,e.removeChild=i}else i.call(e,o)}},render:function(t){var e=this,r=this.$slots.default;return r&&r.length&&r.forEach((function(t){return t.data=o({},t.data,{attrs:o({fragment:e.name},(t.data||{}).attrs)})})),t("div",{attrs:{fragment:this.name}},r)}};var l={components:{Fragment:u,CheckMark:n.default,InfoHud:a.default},props:{featureList:{type:String,required:!1}},data:function(){return{features:[]}},mounted:function(){var t=this;fetch(t.featureList).then((function(t){return t.json()})).then((function(e){return t.features=e}))}},f=(r(474),r(34)),h=Object(f.a)(l,(function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("table",{staticClass:"multiple-header-rows"},[r("tbody",t._l(t.features,(function(e,n){return r("fragment",{key:n},[e.category?r("tr",{staticClass:"category"},[r("th",{staticClass:"feature"},[t._v(t._s(e.category))]),t._v(" "),r("th",{staticClass:"edition"},[t._v("Lite")]),t._v(" "),r("th",{staticClass:"edition"},[t._v("Pro")])]):t._e(),t._v(" "),t._l(e.items,(function(e,n){return e.hide?t._e():r("tr",{key:n,class:{shade:n%2==0}},[r("td",[r("span",[t._v(t._s(e.name))]),t._v(" "),e.info?r("info-hud",{staticClass:"info"},[r("span",{staticClass:"smaller"},[t._v(t._s(e.info))])]):t._e()],1),t._v(" "),r("td",{staticClass:"support"},[e.lite?r("check-mark",{attrs:{label:"supported in Lite"}}):t._e()],1),t._v(" "),r("td",{staticClass:"support"},[e.pro?r("check-mark",{attrs:{label:"supported in Pro"}}):t._e()],1)])}))],2)})),1)])}),[],!1,null,null,null);e.default=h.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/50.6fdc4b9e.js b/docs/.vuepress/dist/assets/js/50.6fdc4b9e.js new file mode 100644 index 00000000..a8b31093 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/50.6fdc4b9e.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[50],{509:function(t,e,s){"use strict";s.r(e);var a=s(34),n=Object(a.a)({},(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",[t._v("Custom SQL Queries")]),t._v(" "),s("p",[t._v("One reason Craft is powerful is because it allows users to build complex relational content from a very user-friendly UI. While that is nice for users, it can make certain queries very complex when retrieving your data. Sprout Reports is designed to help make it easy for clients to run queries and get back the data they need. It is not designed to write those queries for you.")]),t._v(" "),s("p",[t._v("The examples below are not meant to be comprehensive or accurate for every situation. They are meant to be used as a starting point and the responsibility is on you to update the queries to meet your needs or find someone who can.")]),t._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),s("p",[t._v("If you need help building a specific query, feel free to reach out. We're happy to consider adding another example for common use cases or help out in a consulting relationship to help you meet your projects reporting needs.")]),t._v(" "),s("p",[t._v("Contact us: "),s("a",{attrs:{href:"mailto:sprout@barrelstrengthdesign.com"}},[t._v("sprout@barrelstrengthdesign.com")])])]),t._v(" "),s("h2",{attrs:{id:"relations-fields"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#relations-fields"}},[t._v("#")]),t._v(" Relations Fields")]),t._v(" "),s("p",[t._v("Relation Fields (Entries, Categories, Users, Assets, and Tag fields) store their data via a related ID. This means a basic query will not return any information about the Relations Fields in an Entry.")]),t._v(" "),s("div",{pre:!0},[s("p",[t._v("In this example, we create two queries: the first returning the data about our content from a particular section without the relation data and the second returning the data about all of the content related to our section. We then use a "),s("code",[t._v("UNION")]),t._v(" to combine the results of our two queries.")])]),s("div",{staticClass:"language-sql extra-class"},[s("pre",{pre:!0,attrs:{class:"language-sql"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("SELECT")]),t._v(" content"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("id"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" \n content"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("title"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("null")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Related IDs (comma-separated)"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("null")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Related Titles (comma-separated)"')]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("FROM")]),t._v(" content "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("AS")]),t._v(" content\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("JOIN")]),t._v(" entries "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("AS")]),t._v(" entries\n\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("ON")]),t._v(" entries"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("id "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" content"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("elementId\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("JOIN")]),t._v(" relations "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("AS")]),t._v(" relations\n\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("ON")]),t._v(" entries"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("id "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" relations"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("sourceId\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("WHERE")]),t._v(" entries"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("sectionId "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("UNION")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("SELECT")]),t._v(" relations"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("targetId "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("AS")]),t._v(" relatedElementId"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t content"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("title "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("AS")]),t._v(" relatedContentTitle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t GROUP_CONCAT"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("content"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("elementId separator "),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 keyword"}},[t._v("AS")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Related IDs (comma-separated)"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t GROUP_CONCAT"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("content"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("title separator "),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 keyword"}},[t._v("AS")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Related Titles (comma-separated)"')]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("FROM")]),t._v(" relations "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("AS")]),t._v(" relations\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("JOIN")]),t._v(" entries "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("AS")]),t._v(" entries\n\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("ON")]),t._v(" entries"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("id "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" relations"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("sourceId\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("JOIN")]),t._v(" content "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("AS")]),t._v(" content\n\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("ON")]),t._v(" relations"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("targetId "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" content"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("elementId\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("WHERE")]),t._v(" relations"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("sourceId "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" entries"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("id\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("AND")]),t._v(" entries"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("sectionId "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("GROUP")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("BY")]),t._v(" relations"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("sourceId\n")])])])])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/51.81640b70.js b/docs/.vuepress/dist/assets/js/51.81640b70.js new file mode 100644 index 00000000..8eafeb13 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/51.81640b70.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[51],{510:function(t,e,a){"use strict";a.r(e);var l=a(34),i=Object(l.a)({},(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",[t._v("About Sprout Email")]),t._v(" "),a("p",[t._v("Sprout Email adds a centralized way to manage transactional email in Craft along with the ability to log and resend Sent Email. Notification Emails support several Notification Event Integrations, customizable Email Templates, and the ability to send to dynamic Mailing Lists using Sprout Reports for list management.")]),t._v(" "),a("ul",[a("li",[t._v("See "),a("RouterLink",{attrs:{to:"/sent-email/"}},[t._v("Sprout Sent Email")]),t._v(" for documentation of the Sent Email features")],1),t._v(" "),a("li",[t._v("See "),a("RouterLink",{attrs:{to:"/data-studio/mailing-lists.html"}},[t._v("Sprout Reports")]),t._v(" for documentation on creating custom Mailing Lists and Segments")],1)]),t._v(" "),a("h2",{attrs:{id:"email-overview"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#email-overview"}},[t._v("#")]),t._v(" Email Overview")]),t._v(" "),a("ul",[a("li",[a("strong",[t._v("The Goods (Payload Concerns)")]),t._v(" - The email Subject, Content, Templates, Field Layout,")]),t._v(" "),a("li",[a("strong",[t._v("The Carrier (Delivery Concerns)")]),t._v(" - The Mailer Adapter, API endpoints, validation rules")]),t._v(" "),a("li",[a("strong",[t._v("The Package (Goods + Carrier)")]),t._v(" - The instructions on how the carrier should deliver the goods")])]),t._v(" "),a("h3",{attrs:{id:"email-element-types"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#email-element-types"}},[t._v("#")]),t._v(" Email Element Types")]),t._v(" "),a("p",[t._v("Emails are where you define your content and presentation. In the lifecycle of an Email the Email Element begins as standalone content, exists as relational content when defining your Package, and a static instance of an email content is saved as a Sent Email for every recipient to which it is sent.")]),t._v(" "),a("div",{staticClass:"table"},[a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("Email Types")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("Delivery Type")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("Created From")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("Transactional")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Transactional")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Transactional Tab")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("Broadcast")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Broadcast")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Broadcast Tab")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("Resend")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Broadcast")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Sent Email Tab")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("Test")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Broadcast")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Test Modal")])])])])]),t._v(" "),a("p",[t._v("validation requ")]),t._v(" "),a("h3",{attrs:{id:"package-element-types"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#package-element-types"}},[t._v("#")]),t._v(" Package Element Types")]),t._v(" "),a("p",[t._v("Packages are where you define where and how to send your email content.")]),t._v(" "),a("div",{staticClass:"table"},[a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("Package Types")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("Email Types")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("Layout Options")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("Broadcast")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Broadcast")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Send Now vs Scheduled")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("Transactional")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Transactional")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Event, Recurring, Cron")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("Drip Campaign")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Broadcast/Transactional")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Condition Builder")])])])])]),t._v(" "),a("p",[t._v("Packages can be sent to one or more recipients.")]),t._v(" "),a("div",{staticClass:"table"},[a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("Email Types")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("To")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("CC")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("BCC")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("Lists")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("On The Fly")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("Transactional")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("√")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("√")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("√")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("√")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("–")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("Broadcast")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("√")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("√")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("√")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("√")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("–")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("Message")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("√")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("√")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("√")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("√")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("–")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("Resend")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("√")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("√")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("√")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("√")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("–")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("Test")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("–")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("–")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("–")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("–")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("√")])])])])]),t._v(" "),a("h3",{attrs:{id:"workflow"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#workflow"}},[t._v("#")]),t._v(" Workflow")]),t._v(" "),a("h4",[t._v("Prepare The Goods")]),t._v(" "),a("ul",[a("li",[t._v("Create a reusable "),a("strong",[t._v("Email Theme")]),t._v(" (Templates + Field Layout)")]),t._v(" "),a("li",[t._v("Sprout provides a Default Email Theme with a single Textarea field and basic templates")]),t._v(" "),a("li",[t._v("Email Themes can be restricted to "),a("strong",[t._v("Email Elements")]),t._v(" with certain "),a("strong",[t._v("Package Types")]),t._v(" (Broadcast vs Transactional vs Message)")]),t._v(" "),a("li",[t._v("Resent and Test emails will use whatever Email Theme was defined for the Email they act on")]),t._v(" "),a("li",[t._v("Create a new Email based on available Email Theme")])]),t._v(" "),a("h4",[t._v("Prepare The Carrier")]),t._v(" "),a("ul",[a("li",[t._v("Update Craft's Email settings to use the "),a("strong",[t._v("Mailer Adapter")]),t._v(" that will be used to send your email")]),t._v(" "),a("li",[t._v("In the future, you may be able to override Craft's settings when defining a new Package")])]),t._v(" "),a("h4",[t._v("Prepare The Package")]),t._v(" "),a("ul",[a("li",[t._v("Create a new "),a("strong",[t._v("Package Element")]),t._v(" with a chosen "),a("strong",[t._v("Delivery Type")]),t._v(" (Broadcast vs Transactional vs Message)")])])])}),[],!1,null,null,null);e.default=i.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/52.dd570f9a.js b/docs/.vuepress/dist/assets/js/52.dd570f9a.js new file mode 100644 index 00000000..7f8a2c34 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/52.dd570f9a.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[52],{511:function(t,a,s){"use strict";s.r(a);var e=s(34),n=Object(e.a)({},(function(){var t=this,a=t.$createElement,s=t._self._c||a;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",[t._v("Craft Globals")]),t._v(" "),s("div",{pre:!0},[s("p",[t._v("To use globals in Sprout Email you will need to use the "),s("code",[t._v("craft.globals.getSetByHandle")]),t._v(" tag.")])]),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" globalSet "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" craft"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("globals"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getSetByHandle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("globalSetHandle"),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 delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" globalSet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("yourGlobal "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n")])])])])}),[],!1,null,null,null);a.default=n.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/53.041b77d4.js b/docs/.vuepress/dist/assets/js/53.041b77d4.js new file mode 100644 index 00000000..c6caeac6 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/53.041b77d4.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[53],{514:function(t,s,a){"use strict";a.r(s);var n=a(34),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",[t._v("Email Templates")]),t._v(" "),a("p",[t._v("Email Templates enable you to manage "),a("RouterLink",{attrs:{to:"/email/template-overrides.html"}},[t._v("Template Overrides")]),t._v(" as a plugin to easily reuse across projects or share in the Plugin Store.")],1),t._v(" "),a("h2",{attrs:{id:"email-template-class"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#email-template-class"}},[t._v("#")]),t._v(" Email Template Class")]),t._v(" "),a("p",[t._v("An Email Template class is quite simple and only requires that you define the name of your Email Template and the path where you store your "),a("RouterLink",{attrs:{to:"/email/template-overrides.html"}},[t._v("Template Overrides")]),t._v(".")],1),t._v(" "),a("div",{staticClass:"language-php extra-class"},[a("pre",{pre:!0,attrs:{class:"language-php"}},[a("code",[a("span",{pre:!0,attrs:{class:"token php language-php"}},[a("span",{pre:!0,attrs:{class:"token delimiter important"}},[t._v("")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("types")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("MyEmailTemplates")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("Email Templates are available in Sprout Email for Craft 3. Upgrade to Craft 3 and enjoy the power and flexibility of Email Templates!")])])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/54.f2a7791e.js b/docs/.vuepress/dist/assets/js/54.f2a7791e.js new file mode 100644 index 00000000..faad7081 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/54.f2a7791e.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[54],{512:function(t,s,a){"use strict";a.r(s);var n=a(34),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",[t._v("Mailers")]),t._v(" "),a("p",[t._v("Mailers enable you to manage your Campaign Emails within Craft and send Campaign Emails via your favorite email service.")]),t._v(" "),a("p",[t._v("Adding a custom Mailer involves:")]),t._v(" "),a("ol",[a("li",[t._v("Extending Sprout Email's Mailer class")]),t._v(" "),a("li",[t._v("Registering your Mailer")])]),t._v(" "),a("p",[t._v("See the codebase for working examples.")]),t._v(" "),a("h2",{attrs:{id:"mailer-class"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#mailer-class"}},[t._v("#")]),t._v(" Mailer Class")]),t._v(" "),a("div",{staticClass:"language-php extra-class"},[a("pre",{pre:!0,attrs:{class:"language-php"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("namespace")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token package"}},[t._v("mycompany"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("myplugin"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("integrations"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("sproutemail"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("mailers")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token package"}},[t._v("barrelstrength"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("sproutbase"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("contracts"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("sproutemail"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("BaseMailer")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token package"}},[t._v("barrelstrength"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("sproutbase"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("contracts"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("sproutemail"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("CampaignEmailSenderInterface")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name-definition class-name"}},[t._v("MyMailer")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("BaseMailer")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("implements")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CampaignEmailSenderInterface")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),a("h2",{attrs:{id:"register-event"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#register-event"}},[t._v("#")]),t._v(" Register Event")]),t._v(" "),a("div",{staticClass:"language-php extra-class"},[a("pre",{pre:!0,attrs:{class:"language-php"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("namespace")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token package"}},[t._v("mycompany"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("myplugin")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token package"}},[t._v("mycompany"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("myplugin"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("integrations"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("sproutemail"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("mailers"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("MyMailer")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token package"}},[t._v("barrelstrength"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("sproutbase"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("services"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("sproutemail"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("Mailers")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token package"}},[t._v("barrelstrength"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("sproutbase"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("events"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("RegisterMailersEvent")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token package"}},[t._v("yii"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("base"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("Event")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name-definition class-name"}},[t._v("MyPlugin")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Plugin")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("init")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword static-context"}},[t._v("parent")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("Event")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("on")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("Mailers")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("Mailers")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("EVENT_REGISTER_MAILERS")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name type-declaration"}},[t._v("RegisterMailersEvent")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$event")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$event")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("mailers")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyMailer")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/55.6de5b668.js b/docs/.vuepress/dist/assets/js/55.6de5b668.js new file mode 100644 index 00000000..5511bdce --- /dev/null +++ b/docs/.vuepress/dist/assets/js/55.6de5b668.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[55],{513:function(t,s,a){"use strict";a.r(s);var n=a(34),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",[t._v("Notification Events")]),t._v(" "),a("p",[t._v("You can trigger Notification Emails via custom Notification Events in your own plugins. A Notification Event tells Sprout Email to watch for a particular Event (in Craft or another plugin) and provides validation rules that will be checked to determine when a Notification Email should be triggered.")]),t._v(" "),a("p",[t._v("Adding custom events involves:")]),t._v(" "),a("ol",[a("li",[t._v("Extending Sprout Email's Notification Event class")]),t._v(" "),a("li",[t._v("Registering your Notification Event")])]),t._v(" "),a("h2",{attrs:{id:"notification-event-class"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#notification-event-class"}},[t._v("#")]),t._v(" Notification Event Class")]),t._v(" "),a("div",{staticClass:"language-php extra-class"},[a("pre",{pre:!0,attrs:{class:"language-php"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("namespace")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token package"}},[t._v("company"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("plugin"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("folder")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token package"}},[t._v("barrelstrength"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("sproutbaseemail"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("base"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("NotificationEvent")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name-definition class-name"}},[t._v("EntriesSave")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("NotificationEvent")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("...")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),a("p",[t._v("See the base NotificationEvent Class for documentation on usage:")]),t._v(" "),a("ul",[a("li",[a("a",{attrs:{href:"./https://github.com/barrelstrength/craft-sprout-base/blob/v2/src/app/email/base/NotificationEvent.php"}},[t._v("sprout-base/src/app/email/base/NotificationEvent.php")])])]),t._v(" "),a("p",[t._v("Examples can be found in:")]),t._v(" "),a("ul",[a("li",[a("a",{attrs:{href:"https://github.com/barrelstrength/craft-sprout-email/tree/develop/src/events/notificationevents",target:"_blank",rel:"noopener noreferrer"}},[t._v("sprout-email/src/events/notificationevents/"),a("OutboundLink")],1)])]),t._v(" "),a("h2",{attrs:{id:"register-event"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#register-event"}},[t._v("#")]),t._v(" Register Event")]),t._v(" "),a("p",[t._v("To tell Sprout Email that your event exists you need to register it in your plugin's Primary Class file.")]),t._v(" "),a("div",{staticClass:"language-php extra-class"},[a("pre",{pre:!0,attrs:{class:"language-php"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("namespace")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token package"}},[t._v("mycompany"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("myplugin")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token package"}},[t._v("mycompany"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("myplugin"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("integrations"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("sproutemail"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("events"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("notificationevents"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("MyNotificationEvent")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token package"}},[t._v("barrelstrength"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("sproutbaseemail"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("services"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("NotificationEmailEvents")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token package"}},[t._v("barrelstrength"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("sproutbaseemail"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("events"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("NotificationEmailEvent")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token package"}},[t._v("yii"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("base"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("Event")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name-definition class-name"}},[t._v("MyPlugin")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Plugin")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("init")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword static-context"}},[t._v("parent")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("Event")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("on")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("NotificationEmailEvents")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("NotificationEmailEvents")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("EVENT_REGISTER_EMAIL_EVENT_TYPES")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name type-declaration"}},[t._v("NotificationEmailEvent")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$event")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$event")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("events")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("MyNotificationEvent")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/56.f0837089.js b/docs/.vuepress/dist/assets/js/56.f0837089.js new file mode 100644 index 00000000..1e07b91c --- /dev/null +++ b/docs/.vuepress/dist/assets/js/56.f0837089.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[56],{517:function(t,e,a){"use strict";a.r(e);var s=a(34),l=Object(s.a)({},(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",[t._v("Default Email Templates")]),t._v(" "),a("p",[t._v("Sprout Email comes with one default Email Template. We keep the default as simple and un-opinionated as we can. You can style the default templates as you see fit or update the templates for your particular project. Notification Emails are fully customizable using "),a("RouterLink",{attrs:{to:"/email/template-overrides.html"}},[t._v("Template Overrides")]),t._v(".")],1),t._v(" "),a("h2",{attrs:{id:"email-templates"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#email-templates"}},[t._v("#")]),t._v(" Email Templates")]),t._v(" "),a("h3",{attrs:{id:"basic-templates"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#basic-templates"}},[t._v("#")]),t._v(" Basic Templates")]),t._v(" "),a("p",[t._v("The Basic Email Templates are enabled by default. They work with the default Notification Email which has a single body field.")]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("If you want to customize your Email Templates, the Basic Templates that come with Sprout Email may be a good starting point.")])])])}),[],!1,null,null,null);e.default=l.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/57.a1992c1b.js b/docs/.vuepress/dist/assets/js/57.a1992c1b.js new file mode 100644 index 00000000..f780de64 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/57.a1992c1b.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[57],{515:function(t,e,a){"use strict";a.r(e);var s=a(34),n=Object(s.a)({},(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",[t._v("Craft 3")]),t._v(" "),a("p",[t._v("Sprout Email installation and update instructions for Craft 3.")]),t._v(" "),a("h2",{attrs:{id:"requirements"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),a("ul",[a("li",[t._v("Craft CMS 3.0.0 or a more recent version of Craft")])]),t._v(" "),a("h2",{attrs:{id:"installation-via-plugin-store"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#installation-via-plugin-store"}},[t._v("#")]),t._v(" Installation via Plugin Store")]),t._v(" "),a("ol",[a("li",[t._v("Find the plugin in the Plugin Store in your Craft Control Panel")]),t._v(" "),a("li",[t._v("Go to "),a("em",[t._v("Settings → Plugins")]),t._v(" and select “Install”")])]),t._v(" "),a("h2",{attrs:{id:"installation-via-composer"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#installation-via-composer"}},[t._v("#")]),t._v(" Installation via Composer")]),t._v(" "),a("div",{pre:!0},[a("ol",[a("li",[t._v("Open your terminal and go to your Craft project:"),a("br"),a("code",[t._v("cd /path/to/project")])]),t._v(" "),a("li",[t._v("Then tell Composer to load the plugin:"),a("br"),a("code",[t._v("composer require barrelstrength/sprout-email")])]),t._v(" "),a("li",[t._v("In the Control Panel, go to "),a("em",[t._v("Settings → Plugins")]),t._v(" and select “Install”")])])]),a("h2",{attrs:{id:"upgrading-to-craft-3"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#upgrading-to-craft-3"}},[t._v("#")]),t._v(" Upgrading to Craft 3")]),t._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[t._v("BEFORE YOU UPDATE")]),t._v(" "),a("p",[t._v("Make sure you have updated to the latest version of Sprout Email 3.x before updating to Sprout Email 4.x for Craft 3")])]),t._v(" "),a("h2",{attrs:{id:"upgrading-to-email-v4-1-1"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#upgrading-to-email-v4-1-1"}},[t._v("#")]),t._v(" Upgrading to Email v4.1.1")]),t._v(" "),a("p",[t._v("Sprout Email v4.1.1 updates the Recipients settings. The behavior you see when sending emails should not change, but the way you see this information presented to you in the user interface will.")]),t._v(" "),a("p",[t._v('Previously, the default send method was as a "List" and you had the option to toggle a lightswitch field to send a "Single Email". In 4.1.1 you will see a dropdown with the options "List" and "Single Email" and when you have the "List" setting selected you will no longer see the CC and BCC fields. Any email addresses you previously had in the CC and BCC fields when sending to emails as a List will now be appended to the values in the "To" field. The behavior of how the emails are sent is the same.')]),t._v(" "),a("h2",{attrs:{id:"upgrading-to-email-v4-2-0"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#upgrading-to-email-v4-2-0"}},[t._v("#")]),t._v(" Upgrading to Email v4.2.0")]),t._v(" "),a("p",[t._v("Sprout Email 4.2.0 is a recommended upgrade and fixes a vulnerability that could occur in some scenarios with custom Email Templates.")]),t._v(" "),a("div",{pre:!0},[a("p",[t._v("To better support extending Twig layouts and organizing your templates more flexibly throughout the top-level templates folder as you wish, "),a("RouterLink",{pre:!0,attrs:{to:"/email/custom-email-templates.html"}},[t._v("Email Templates Integrations")]),t._v(" have been updated to require a new "),a("code",[t._v("getTemplateRoot()")]),t._v(" method and change the behavior of the existing "),a("code",[t._v("getPath()")]),t._v(" method")],1)]),a("h4",[t._v("Personalized Email Templates")]),t._v(" "),a("p",[t._v("For improved security, Custom Email Templates no longer render objects in custom fields outside of the "),a("em",[t._v("Subject")]),t._v(" or "),a("em",[t._v("Default Body")]),t._v(" fields. Please let us know if you have additional use cases for this and we can consider them on a case by case basis.")]),t._v(" "),a("h4",[t._v("Custom Email Templates")]),t._v(" "),a("div",{pre:!0},[a("p",[t._v("Previously, the custom Email Templates setting identified an Email Folder and the only templates available were those templates within that folder. In the latest update, we now treat the "),a("code",[t._v("templates/")]),t._v(" folder as the root folder and your Email Template is just a folder somewhere within that.")])]),a("div",{pre:!0},[a("p",[t._v("If you happen to be using any "),a("code",[t._v("include")]),t._v(", "),a("code",[t._v("extends")]),t._v(", or "),a("code",[t._v("import")]),t._v(" tags in custom Email Templates, you may want to check if they are resolving correctly after the latest update.")])]),a("p",[t._v("For example, say you have this folder structure:")]),t._v(" "),a("div",{staticClass:"language-plaintext extra-class"},[a("pre",{pre:!0,attrs:{class:"language-plaintext"}},[a("code",[t._v("templates/_emails/newsletter/_layout.twig\ntemplates/_emails/newsletter/email.twig\n")])])]),a("div",{pre:!0},[a("p",[t._v("If you previously had an email in a "),a("code",[t._v("templates/_emails/newsletter")]),t._v(" folder that extended a layout within that folder you would treat the email folder as the root. However, after the recent updates the templates folder is treated as the root so you'd need to extend the file as it exists within the template folder.")])]),a("div",{staticClass:"language-twig extra-class"},[a("pre",{pre:!0,attrs:{class:"language-twig"}},[a("code",[a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# OLD #}")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("extends")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("_layout"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# NEW #}")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("extends")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("_emails/newsletter/_layout"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n")])])]),a("h4",[t._v("Email Templates Integrations")]),t._v(" "),a("h5",[t._v("OLD")]),t._v(" "),a("div",{staticClass:"language-php extra-class"},[a("pre",{pre:!0,attrs:{class:"language-php"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("getPath")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword return-type"}},[t._v("string")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("Craft")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getAlias")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'@sproutbaseemail/templates/_components/emailtemplates/basic'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),a("h5",[t._v("NEW")]),t._v(" "),a("div",{staticClass:"language-php extra-class"},[a("pre",{pre:!0,attrs:{class:"language-php"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("getTemplateRoot")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword return-type"}},[t._v("string")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("Craft")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getAlias")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'@sproutbaseemail/templates'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("getPath")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword return-type"}},[t._v("string")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'_components/emailtemplates/basic'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/58.df4c12a3.js b/docs/.vuepress/dist/assets/js/58.df4c12a3.js new file mode 100644 index 00000000..afe95036 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/58.df4c12a3.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[58],{516:function(t,e,a){"use strict";a.r(e);var i=a(34),s=Object(i.a)({},(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",[t._v("Notification Emails")]),t._v(" "),a("p",[t._v("Notifications Email Elements give you the power to manage your email notifications in a central location alongside your content in Craft CMS.")]),t._v(" "),a("h2",{attrs:{id:"default-setup"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#default-setup"}},[t._v("#")]),t._v(" Default Setup")]),t._v(" "),a("p",[t._v("Notification Emails are created with a simple Body field and can immediately used to send triggered emails using the "),a("RouterLink",{attrs:{to:"/email/default-email-templates.html"}},[t._v("Default Email Template")]),t._v(".")],1),t._v(" "),a("p",[t._v("To add a custom Field Layout, select 'Edit Field Layout' from the Save button dropdown.")]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("Adding custom fields to your Email will require that you also create "),a("RouterLink",{attrs:{to:"/email/default-email-templates.html"}},[t._v("Email Templates")]),t._v(" that work with those fields.")],1)]),t._v(" "),a("h4",[t._v("Define the Notification Email")]),t._v(" "),a("p",[a("strong",[t._v("Notification Name")]),a("br"),t._v("\nWhat you want to call the Notification internally.")]),t._v(" "),a("p",[a("strong",[t._v("Entry Template")]),a("br"),t._v("\nFor each email, you will want to create an HTML and a Text template. Both your html and text templates will be determined from the template name you add here. Do not include a filetype in your name, just the name of the file.")]),t._v(" "),a("p",[t._v("For example, if your Notification Entry Template name is:")]),t._v(" "),a("div",{staticClass:"language-html extra-class"},[a("pre",{pre:!0,attrs:{class:"language-html"}},[a("code",[t._v("_emails/notification\n")])])]),a("div",{pre:!0},[a("p",[t._v("Sprout Email will look for the following two templates in your templates folder. Your email template files must be named "),a("code",[t._v("email")]),t._v(".:")])]),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("_emails/notification/email.twig (.html, etc.)\n_emails/notification/email.txt\n")])])]),a("h2",{attrs:{id:"email-settings"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#email-settings"}},[t._v("#")]),t._v(" Email Settings")]),t._v(" "),a("p",[t._v("Notification Emails have several required settings:")]),t._v(" "),a("h3",{attrs:{id:"sender"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#sender"}},[t._v("#")]),t._v(" Sender")]),t._v(" "),a("p",[t._v("Set the From Name, From Email, and Reply To Email.")]),t._v(" "),a("h3",{attrs:{id:"recipients"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#recipients"}},[t._v("#")]),t._v(" Recipients")]),t._v(" "),a("p",[t._v("Add a comma-separated lists of recipients who you'd like to receive the email. See the Dynamic Notifications doc page for more information on sending notifications to dynamic recipients like the person who submitted an Entry or completed a Form.")]),t._v(" "),a("p",[t._v("Additionally, you can create a "),a("RouterLink",{attrs:{to:"/data-studio/mailing-lists.html"}},[t._v("Mailing List")]),t._v(" and send to a list of people. Mailing Lists are a feature provided by Sprout Reports.")],1),t._v(" "),a("h3",{attrs:{id:"events"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#events"}},[t._v("#")]),t._v(" Events")]),t._v(" "),a("p",[t._v("Events allow you to choose what Notification Event will trigger a Notification Email and customize the Notification Event settings.")]),t._v(" "),a("p",[t._v("Each time your selected Event happens and your Notification Event settings pass validation, a Notification Email will be sent out to the defined Recipients.")]),t._v(" "),a("h3",{attrs:{id:"file-attachments"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#file-attachments"}},[t._v("#")]),t._v(" File Attachments")]),t._v(" "),a("p",[t._v("File Attachments can be enabled in the Notification Email's Event settings. When File Attachments are enabled, Sprout Email will attach any files that are submitted to the Notification using the Craft Assets field or Sprout Forms File Upload field.")]),t._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),a("p",[t._v("Large file attachments may cause Email Notifications to end up in spam filters or not be sent at all. Alternatively, consider sending Notification Emails with a link to the assets you wish to share.")])])])}),[],!1,null,null,null);e.default=s.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/59.a3a06a5a.js b/docs/.vuepress/dist/assets/js/59.a3a06a5a.js new file mode 100644 index 00000000..227545b5 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/59.a3a06a5a.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[59],{518:function(t,e,a){"use strict";a.r(e);var s=a(34),n=Object(s.a)({},(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",[t._v("Notification Events")]),t._v(" "),a("p",[t._v("Sprout Email supports several common Notification Events. For more specific scenarios, developers can add support for "),a("RouterLink",{attrs:{to:"/email/custom-notification-events.html"}},[t._v("Custom Notification Events")]),t._v(".")],1),t._v(" "),a("h2",{attrs:{id:"settings"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#settings"}},[t._v("#")]),t._v(" Settings")]),t._v(" "),a("p",[t._v("Each Notification Events has unique settings for admins to configure how emails get triggered.")]),t._v(" "),a("h3",{attrs:{id:"send-rule"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#send-rule"}},[t._v("#")]),t._v(" Send Rule")]),t._v(" "),a("p",[t._v("All Notification Events have a Send Rule setting that defaults to "),a("em",[t._v("Always")]),t._v(", meaning that by default the event will always trigger an email when the conditions defined in the Notification Event settings are met.")]),t._v(" "),a("p",[t._v("The Send Rule can be configured to a custom pattern. For example, the 'When a new entry is saved' Event allows you to trigger an email when an Entry is saved in a given Section. However, the default settings do not allow you to be more specific if, say, you only want to trigger an email when a specific Entry Type is saved. The Send Rule setting can help you further configure the 'When a new entry is saved' event to only send an email when a specific Entry Type is saved using the Send Rule custom pattern:")]),t._v(" "),a("div",{staticClass:"language-twig extra-class"},[a("pre",{pre:!0,attrs:{class:"language-twig"}},[a("code",[a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" object"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getType"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("handle "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("entryTypeHandle"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n")])])]),a("div",{pre:!0},[a("p",[t._v("In this case, "),a("code",[t._v("object")]),t._v(" refers to the Entry that is being saved. And we have added a rule that says only trigger the email if the Entry Type matches a specific Entry Type.")])]),a("p",[t._v("Here is an example of a Send Rule that will only trigger an email if a particular checkbox is selected:")]),t._v(" "),a("div",{staticClass:"language-twig extra-class"},[a("pre",{pre:!0,attrs:{class:"language-twig"}},[a("code",[a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" object"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("checkboxFieldHandle"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getOptions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("selected "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n")])])]),a("p",[t._v("If you've got lots of logic, you can set the Send Rule to a Twig Template and use all the space you need in your template. Just be sure to make the full template resolve to '1', 'true', 'on', or 'yes'. If none of those conditions are met, the Event will not get triggered.")]),t._v(" "),a("div",{staticClass:"language-twig extra-class"},[a("pre",{pre:!0,attrs:{class:"language-twig"}},[a("code",[a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("include")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("_email/send-rule-logic"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n")])])]),a("h2",{attrs:{id:""}},[a("a",{staticClass:"header-anchor",attrs:{href:"#"}},[t._v("#")])]),t._v(" "),a("h3",{attrs:{id:"craft"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#craft"}},[t._v("#")]),t._v(" Craft")]),t._v(" "),a("div",{staticClass:"table"},[a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("Event")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("Event Object")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("When a new entry is created")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Entry")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("When an existing entry is updated")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Entry")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("When a new user is created")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("User")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("When a existing user is updated")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("User")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("When a user is activated")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("User")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("When a user is deleted")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("User")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("When a user logs in")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("User")])])])])]),t._v(" "),a("h3",{attrs:{id:"craft-commerce"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#craft-commerce"}},[t._v("#")]),t._v(" Craft Commerce")]),t._v(" "),a("div",{staticClass:"table"},[a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("Event")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("Event Object")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("When a Craft Commerce order is completed")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Commerce Order")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("When a Craft Commerce order status is changed")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Commerce Order, Commerce OrderHistory")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("When a Craft Commerce transaction is saved")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Commerce Transaction")])])])])]),t._v(" "),a("h3",{attrs:{id:"sprout-plugins"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#sprout-plugins"}},[t._v("#")]),t._v(" Sprout Plugins")]),t._v(" "),a("div",{staticClass:"table"},[a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("Event")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("Event Object")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("When a Sprout Form Entry is submitted")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Form Entry")])])])])]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("If you need a Custom Notification Event, we are available for hire.")]),t._v(" "),a("p",[t._v("Contact us: "),a("a",{attrs:{href:"mailto:sprout@barrelstrengthdesign.com"}},[t._v("sprout@barrelstrengthdesign.com")])])])])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/6.6b61758b.js b/docs/.vuepress/dist/assets/js/6.6b61758b.js new file mode 100644 index 00000000..d0fecf43 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/6.6b61758b.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[6],{369:function(t,e){t.exports="\t\n\v\f\r                 \u2028\u2029\ufeff"},370:function(t,e,r){var n=r(4),a=r(30),i=r(17),s=r(369),o=n("".replace),u="["+s+"]",l=RegExp("^"+u+u+"*"),c=RegExp(u+u+"*$"),p=function(t){return function(e){var r=i(a(e));return 1&t&&(r=o(r,l,"")),2&t&&(r=o(r,c,"")),r}};t.exports={start:p(1),end:p(2),trim:p(3)}},372:function(t,e,r){"use strict";var n=r(9),a=r(0),i=r(4),s=r(122),o=r(15),u=r(10),l=r(206),c=r(35),p=r(67),f=r(208),g=r(3),d=r(66).f,h=r(37).f,v=r(13).f,b=r(373),N=r(370).trim,m=a.Number,_=m.prototype,I=a.TypeError,E=i("".slice),y=i("".charCodeAt),w=function(t){var e=f(t,"number");return"bigint"==typeof e?e:x(e)},x=function(t){var e,r,n,a,i,s,o,u,l=f(t,"number");if(p(l))throw I("Cannot convert a Symbol value to a number");if("string"==typeof l&&l.length>2)if(l=N(l),43===(e=y(l,0))||45===e){if(88===(r=y(l,2))||120===r)return NaN}else if(48===e){switch(y(l,1)){case 66:case 98:n=2,a=49;break;case 79:case 111:n=8,a=55;break;default:return+l}for(s=(i=E(l,2)).length,o=0;oa)return NaN;return parseInt(i,n)}return+l};if(s("Number",!m(" 0o1")||!m("0b1")||m("+0x1"))){for(var C,S=function(t){var e=arguments.length<1?0:m(w(t)),r=this;return c(_,r)&&g((function(){b(r)}))?l(Object(e),r,S):e},k=n?d(m):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,isFinite,isInteger,isNaN,isSafeInteger,parseFloat,parseInt,fromString,range".split(","),A=0;k.length>A;A++)u(m,C=k[A])&&!u(S,C)&&v(S,C,h(m,C));S.prototype=_,_.constructor=S,o(a,"Number",S)}},373:function(t,e,r){var n=r(4);t.exports=n(1..valueOf)},404:function(t,e,r){},475:function(t,e,r){"use strict";r(404)},485:function(t,e,r){"use strict";r.r(e);r(372),r(20),r(44);var n={props:{url:{type:String,required:!0,default:""},link:{type:Boolean,required:!1},cleanUrl:{type:Boolean,require:!1,default:!0},caption:{type:String,required:!1,default:""},maxHeight:{type:Number,required:!1}},methods:{getDisplayUrl:function(t){return this.cleanUrl?t.replace("https://","").replace("http://","").replace(/\/$/,""):t}}},a=(r(475),r(34)),i=Object(a.a)(n,(function(){var t=this,e=t.$createElement,r=t._self._c||e;return r(t.link?"a":"div",{tag:"component",staticClass:"browser-shot",attrs:{href:t.link?t.url:"",target:"_blank",rel:"noopener"}},[r("figure",{staticClass:"browser-shot-wrapper"},[r("div",{staticClass:"browser-shot-content"},[r("div",{staticClass:"browser-top"}),t._v(" "),r("div",{staticClass:"address-bar"},[r("div",{staticClass:"address"},[t._v(t._s(t.getDisplayUrl(t.url)))])]),t._v(" "),r("div",{staticClass:"image",class:{"limit-height":t.maxHeight},style:{maxHeight:t.maxHeight?t.maxHeight+"px":null}},[t._t("default")],2)]),t._v(" "),t.caption?r("figcaption",{staticClass:"caption"},[t._v(t._s(t.caption))]):t._e()])])}),[],!1,null,null,null);e.default=i.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/60.4bcd436b.js b/docs/.vuepress/dist/assets/js/60.4bcd436b.js new file mode 100644 index 00000000..907f1ae0 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/60.4bcd436b.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[60],{520:function(t,e,a){"use strict";a.r(e);var s=a(34),n=Object(s.a)({},(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",[t._v("Object Syntax")]),t._v(" "),a("p",[t._v("In several places within Craft and Sprout plugins, you are able to customize a setting with a dynamic value. For lack of a better term, we refer to this as "),a("strong",[t._v("Object Syntax")]),t._v(" and this documentation page aims to serve as a general guide.")]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("You'll run into Object Syntax in Sprout Email as you "),a("RouterLink",{attrs:{to:"/email/personalization.html"}},[t._v("Personalize")]),t._v(" your "),a("RouterLink",{attrs:{to:"/email/custom-email-templates.html"}},[t._v("Email Templates")]),t._v(".")],1)]),t._v(" "),a("p",[t._v("In Craft you can use Object Syntax in the Entry URI Format field of your Section's Site Settings and the Title Format setting of your Entry Types.")]),t._v(" "),a("div",{pre:!0},[a("p",[t._v("In each of these scenarios we can think of the settings field as a mini Twig template. Settings that allow for Object Syntax will be parsed like a Twig template and, just like a Twig template, they may have some variables available to them for you to use (like an individual Entry page has the "),a("code",[t._v("entry")]),t._v(" variable available).")])]),a("p",[t._v("Below we'll look at a comparison of how Craft processes templates and settings that support Object Syntax.")]),t._v(" "),a("h2",{attrs:{id:"entry-pages"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#entry-pages"}},[t._v("#")]),t._v(" Entry Pages")]),t._v(" "),a("div",{pre:!0},[a("p",[t._v("When you setup a Section with URLs, Craft makes an "),a("code",[t._v("entry")]),t._v(" variable available to the Entry Template you define in the settings (such as "),a("code",[t._v("news/_entry")]),t._v("). In this case, you can then access your "),a("code",[t._v("entry")]),t._v(" object and all of it's available properties in your entry template:")])]),a("h3",{attrs:{id:"news-entry-twig"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#news-entry-twig"}},[t._v("#")]),t._v(" news/_entry.twig")]),t._v(" "),a("div",{staticClass:"language-twig extra-class"},[a("pre",{pre:!0,attrs:{class:"language-twig"}},[a("code",[a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" entry"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("title "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" entry"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("slug "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n")])])]),a("p",[t._v("In this example, our Template and Variables are processed and create our page.")]),t._v(" "),a("div",{staticClass:"table"},[a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("Template")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("Variables")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("Output")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("news/_entry.twig")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("entry")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("news/my-page")])])])])]),t._v(" "),a("h2",{attrs:{id:"title-format"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#title-format"}},[t._v("#")]),t._v(" Title Format")]),t._v(" "),a("p",[t._v("When you setup an Entry Type, you can choose to not display the Title Field and generate your Title using the "),a("strong",[t._v("Title Format")]),t._v(" setting.")]),t._v(" "),a("div",{pre:!0},[a("p",[t._v("While this is a setting in the Control Panel, a very similar thing is happening as we have seen in the templates. Rather than a file being used as the Twig template ("),a("code",[t._v("news/_entry.twig")]),t._v("), the value of the Title Format setting is being used as the template.")])]),a("div",{pre:!0},[a("p",[t._v("When an Entry Element is saved, Craft makes the Entry Element available to that setting to allow the Title Format setting to use any property on the Entry Object when the Title is saved. While Craft gives you access to an Entry Element in the Title Format Setting, the variable is not named "),a("code",[t._v("entry")]),t._v(" – it is named "),a("code",[t._v("object")]),t._v(".")])]),a("div",{staticClass:"language-twig extra-class"},[a("pre",{pre:!0,attrs:{class:"language-twig"}},[a("code",[a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" object"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("title "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" object"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("slug "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n")])])]),a("p",[t._v("In this example, our Template and Variables are processed and create our Title.")]),t._v(" "),a("div",{staticClass:"table"},[a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("Template")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("Variables")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("Output")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("Title Format Setting")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("object")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Entry Title")])])])])]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[a("strong",[t._v("Why does Craft name the variable "),a("code",[t._v("object")]),t._v(" instead of something more appropriate like "),a("code",[t._v("entry")]),t._v("?")])]),t._v(" "),a("p",[t._v("Object Syntax is supported by many different Elements and Settings within Craft and within plugins. As all of these features use the same code behind the scenes, Craft named the variable that gets created something generic so that it could apply to many scenarios.")])]),t._v(" "),a("h2",{attrs:{id:"shorthand-syntax"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#shorthand-syntax"}},[t._v("#")]),t._v(" Shorthand Syntax")]),t._v(" "),a("p",[t._v("If you have a simple scenario, Object Syntax allows you to use a Shorthand Syntax as well.")]),t._v(" "),a("div",{pre:!0},[a("div",{pre:!0,attrs:{class:"table"}},[a("table",[a("thead",[a("tr",[a("th",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Object Syntax")]),t._v(" "),a("th",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Shorthand Syntax")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("{{ object.title }}")])]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("{title}")])])]),t._v(" "),a("tr",[a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("{{ object.customField }}")])]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("{customField}")])])]),t._v(" "),a("tr",[a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("{% if object.customField is not empty %}{{ object.title }}{% endif %}")])]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("{% if object.customField is not empty %}{title}{% endif %}")])])])])])])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("Use Object Syntax in conditional logic like an if statement.")])])])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/61.045510a8.js b/docs/.vuepress/dist/assets/js/61.045510a8.js new file mode 100644 index 00000000..a46d9c13 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/61.045510a8.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[61],{522:function(t,e,a){"use strict";a.r(e);var s=a(34),n=Object(s.a)({},(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",[t._v("Personalization")]),t._v(" "),a("p",[t._v("In many cases, when you trigger an event there may be some custom data you want to use in your notification. For example, when an Entry is saved you might want to know who the author was and where you can view the entry, when a form is submitted you may want to include the data from the Form submission in your notification, and when a product is purchased you might want to know which product and by whom.")]),t._v(" "),a("p",[t._v("Sprout Email allows you to personalize your email in several places including:")]),t._v(" "),a("ul",[a("li",[t._v("Subject line")]),t._v(" "),a("li",[t._v("From Name")]),t._v(" "),a("li",[t._v("From Email (you probably don't want to use this)")]),t._v(" "),a("li",[t._v("Reply To Email")]),t._v(" "),a("li",[t._v("Recipients")]),t._v(" "),a("li",[t._v("Default Body Field")]),t._v(" "),a("li",[t._v("Templates (HTML and Text)")])]),t._v(" "),a("div",{pre:!0},[a("p",[t._v("You can personalize your Notification Email with data from an event's "),a("code",[t._v("object")]),t._v(" variable which is uniquely defined by each Notification Event.")])]),a("h2",{attrs:{id:"the-object-variable"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#the-object-variable"}},[t._v("#")]),t._v(" The Object Variable")]),t._v(" "),a("p",[t._v("To understand what values are available to use for personalization you will need to understand which Object variable is available when a Notification Email is triggered. The available Object variable will depend on the Notification Event, however, it will always be accessed in a similar way.")]),t._v(" "),a("div",{pre:!0},[a("p",[t._v("We use the variable name "),a("code",[t._v("object")]),t._v(" because we want a single variable name for all Notification Events, even though it may refer to many different types of data. When an Entry Notification Event is triggered, the "),a("code",[t._v("object")]),t._v(" variable may refer to the Entry Element. When a Commerce Product Notification Event is triggered, the "),a("code",[t._v("object")]),t._v(" variable may refer to the Product Element.")])]),a("div",{pre:!0},[a("p",[t._v("As we use the "),a("code",[t._v("object")]),t._v(" variable in our settings, we can think of each of our settings like a mini Twig template that only has our "),a("code",[t._v("object")]),t._v(" variable available to it.")])]),a("div",{staticClass:"table"},[a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("Template")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("Variables")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("Output")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("Subject Line (Notification Email)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("object")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Subject Line (Message)")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("From Name (Notification Email)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("object")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("From Name (Message)")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("From Email (Notification Email)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("object")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("From Email (Message)")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("Reply To (Notification Email)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("object")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Reply To Email (Message)")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("Recipients (Notification Email)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("object")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Recipients (Message)")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("Default Body Field (Notification Email)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("object")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Default Body Field (Message Body)")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("Email Templates (Email Templates)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("email, object")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Email HTML & Text (Message Body)")])])])])]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("If the idea of an "),a("code",[t._v("object")]),t._v(" variable doesn't make sense yet, read more about "),a("RouterLink",{attrs:{to:"/email/object-syntax.html"}},[t._v("Object Syntax")]),t._v(".")],1)]),t._v(" "),a("h2",{attrs:{id:"object-variables"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#object-variables"}},[t._v("#")]),t._v(" Object Variables")]),t._v(" "),a("div",{pre:!0},[a("p",[t._v("The table below outlines the default Notification Events and the value you can expect when interacting with the Notification Event's "),a("code",[t._v("object")]),t._v(" variable.")])]),a("div",{staticClass:"table"},[a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("Event")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("Model")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("When a new entry is created")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Entry")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("When an existing entry is updated")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Entry")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("When a new user is created")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("User")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("When a existing user is updated")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("User")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("When a user is activated")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("User")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("When a user is deleted")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("User")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("When a user logs in")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("User")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("When a Craft Commerce order is completed")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("–")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("When a Craft Commerce transaction is saved")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("–")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("When a Craft Commerce order status is changed")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("–")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("When a Sprout Form Entry is submitted")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Form")])])])])]),t._v(" "),a("h3",{attrs:{id:"craft-commerce-order-status-event"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#craft-commerce-order-status-event"}},[t._v("#")]),t._v(" Craft Commerce Order Status Event")]),t._v(" "),a("p",[t._v("The "),a("em",[t._v("When a Craft Commerce order status is changed")]),t._v(" event provides two objects, so the syntax is slightly different.")]),t._v(" "),a("h4",[t._v("Example variable syntax for the Commerce_OrderModel")]),t._v(" "),a("div",{pre:!0},[a("ul",[a("li",[a("code",[t._v("{order.number}")])]),t._v(" "),a("li",[a("code",[t._v("{{ object.order.number }}")])])])]),a("h4",[t._v("Example variable syntax for the Commerce_OrderHistoryModel")]),t._v(" "),a("div",{pre:!0},[a("ul",[a("li",[a("code",[t._v("{orderHistory.newStatus.name}")])]),t._v(" "),a("li",[a("code",[t._v("{orderHistory.prevStatus.name}")])]),t._v(" "),a("li",[a("code",[t._v("{{ object.orderHistory.newStatus.name }}")])]),t._v(" "),a("li",[a("code",[t._v("{{ object.orderHistory.prevStatus.name }}")])])])]),a("h2",{attrs:{id:"templating"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#templating"}},[t._v("#")]),t._v(" Templating")]),t._v(" "),a("div",{pre:!0},[a("p",[t._v("In your notification templates you can use any Twig code that you would use elsewhere in your templates. Additionally, Sprout Email Notifications give you access to the Notification Email Element ("),a("code",[t._v("email")]),t._v(") and any Notification Event Object variable ("),a("code",[t._v("object")]),t._v("):")])]),a("div",{staticClass:"language-twig extra-class"},[a("pre",{pre:!0,attrs:{class:"language-twig"}},[a("code",[a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Notification Default Fields #}")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" email"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("subjectLine "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("br")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" email"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("slug "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("br")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" email"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("status "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("br")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" email"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("fromName "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("br")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" email"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("fromEmail "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("br")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" email"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("replyTo "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("br")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Notification Custom Fields \n These examples may not work in your project. You will need to\n update these examples to reference custom fields you are using.\n------------------------------------------------------------ #}")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" email"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("emailBody "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" email"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("emailBanner"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("first"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getUrl"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" email"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("emailFooter "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Dynamic Data\n These examples may not work in your project. The available dynamic\n values depend on the event you have triggered.\n------------------------------------------------------------ #}")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" object"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("title "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" object"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("applicantEmail "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n")])])])])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/62.991d28bc.js b/docs/.vuepress/dist/assets/js/62.991d28bc.js new file mode 100644 index 00000000..0df40959 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/62.991d28bc.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[62],{519:function(t,a,e){"use strict";e.r(a);var s=e(34),n=Object(s.a)({},(function(){var t=this,a=t.$createElement,e=t._self._c||a;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",[t._v("Settings")]),t._v(" "),e("div",{pre:!0},[e("p",[t._v("Settings can be managed in the Control Panel "),e("em",[t._v("Sprout Email → Settings")]),t._v(" or via a config file in "),e("code",[t._v("config/sprout-email.php")])])]),e("h2",{attrs:{id:"notification-email"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#notification-email"}},[t._v("#")]),t._v(" Notification Email")]),t._v(" "),e("div",{staticClass:"language-php extra-class"},[e("pre",{pre:!0,attrs:{class:"language-php"}},[e("code",[e("span",{pre:!0,attrs:{class:"token php language-php"}},[e("span",{pre:!0,attrs:{class:"token delimiter important"}},[t._v("")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'Sprout Email'")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Enable Notification Emails for sending and management within the")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Control Panel")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'enableNotificationEmails'")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant boolean"}},[t._v("true")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// The templates that will be used to display your Notification Emails")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Email Template Class:")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// barrelstrength\\sproutbaseemail\\emailtemplates\\BasicTemplates")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Custom Templates Folder:")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// _emails/notification")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'emailTemplateId'")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'barrelstrength\\sproutbaseemail\\emailtemplates\\BasicTemplates'")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Allow admins to (optionally) choose custom Email Templates for each")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// email created")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'enablePerEmailEmailTemplateIdOverride'")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token constant boolean"}},[t._v("false")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])]),e("h2",{attrs:{id:"sent-email"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#sent-email"}},[t._v("#")]),t._v(" Sent Email")]),t._v(" "),e("ul",[e("li",[t._v("See "),e("RouterLink",{attrs:{to:"/sent-email/plugin-settings.html"}},[t._v("Sprout Sent Email")]),t._v(" for documentation of the Sent Email settings")],1)])])}),[],!1,null,null,null);a.default=n.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/63.13f8d4da.js b/docs/.vuepress/dist/assets/js/63.13f8d4da.js new file mode 100644 index 00000000..c18badce --- /dev/null +++ b/docs/.vuepress/dist/assets/js/63.13f8d4da.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[63],{521:function(t,e,a){"use strict";a.r(e);var s=a(34),l=Object(s.a)({},(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",[t._v("Template Overrides")]),t._v(" "),a("p",[t._v("Sprout Email gives you 100% control over your email templates using the Template Overrides. If you wish to reuse your Template Overrides on multiple projects, you can create "),a("RouterLink",{attrs:{to:"/email/custom-email-templates.html"}},[t._v("Custom Email Templates")]),t._v(".")],1),t._v(" "),a("h2",{attrs:{id:"customizing-templates"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#customizing-templates"}},[t._v("#")]),t._v(" Customizing Templates")]),t._v(" "),a("p",[t._v("Once you have enabled Template Overrides, you can override two email files. "),a("strong",[t._v("Both files must be named 'email'. Files named something else will not be found")]),t._v(":")]),t._v(" "),a("div",{staticClass:"table"},[a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("File")]),t._v(" "),a("th",{staticStyle:{"text-align":"center"}})])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("email.twig (or email.html)")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("required")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("email.txt")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("optional")])])])])]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("If you don't provide a template for the Text version of your email, Sprout Email will convert your HTML email to Markdown and use that for the Text version of your email.")])]),t._v(" "),a("h3",{attrs:{id:"personalization"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#personalization"}},[t._v("#")]),t._v(" Personalization")]),t._v(" "),a("p",[t._v("See the documentation on "),a("RouterLink",{attrs:{to:"/email/personalization.html"}},[t._v("Personalization")]),t._v(" to learn more about available variables and how to customize your email templates.")],1),t._v(" "),a("h3",{attrs:{id:"getting-started"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#getting-started"}},[t._v("#")]),t._v(" Getting Started")]),t._v(" "),a("p",[t._v("To get started, copy the default Sprout Email templates to your Custom Template Overrides folder. You can find the templates in Sprout Email here:")]),t._v(" "),a("div",{staticClass:"language-html extra-class"},[a("pre",{pre:!0,attrs:{class:"language-html"}},[a("code",[t._v("vendor/barrelstrength/sprout/templates/email\n")])])]),a("h2",{attrs:{id:"settings"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#settings"}},[t._v("#")]),t._v(" Settings")]),t._v(" "),a("h3",{attrs:{id:"global-settings"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#global-settings"}},[t._v("#")]),t._v(" Global settings")]),t._v(" "),a("p",[t._v("Setup a Global Email Template override in the Sprout Email settings and add the path to the template folder where you wish to place your overrides:")]),t._v(" "),a("div",{staticClass:"language-html extra-class"},[a("pre",{pre:!0,attrs:{class:"language-html"}},[a("code",[t._v("Sprout Email → Settings → Default Email Templates → Add Custom\n")])])]),a("p",[t._v(":::")]),t._v(" "),a("p",[t._v("If you wish to customize Form Templates on a per-form basis, enable the setting:")]),t._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("Enable custom Email Templates on a per-email basis\n")])])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("Setting the Custom Template Folder value to "),a("code",[t._v("_emails")]),t._v(" would allow you to place your override templates in the "),a("code",[t._v("craft/templates/_emails")]),t._v(" folder.")])]),t._v(" "),a("h3",{attrs:{id:"per-form-settings"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#per-form-settings"}},[t._v("#")]),t._v(" Per-form settings")]),t._v(" "),a("p",[t._v("When you "),a("em",[t._v("Enable custom Email Templates on a per-email basis")]),t._v(", you'll have to add the override folder in your Email Element settings.")]),t._v(" "),a("p",[t._v("When creating a new Email, in the Email Settings sidebar, select the Email Template or add the Email Template folder you wish to use for your overrides.")])])}),[],!1,null,null,null);e.default=l.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/64.d0088307.js b/docs/.vuepress/dist/assets/js/64.d0088307.js new file mode 100644 index 00000000..0bdb1459 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/64.d0088307.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[64],{524:function(e,t,a){"use strict";a.r(t);var i=a(34),r=Object(i.a)({},(function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",[e._v("Troubleshooting FAQ")]),e._v(" "),a("p",[e._v("Sending an email can touch several different services so it can be tricky to diagnose just where something is going wrong. To get more familiar with the topic, see Craft's article "),a("a",{attrs:{href:"https://craftcms.com/guides/troubleshooting-email-errors",target:"_blank",rel:"noopener noreferrer"}},[e._v("Troubleshooting Email Errors"),a("OutboundLink")],1),e._v(" or hear a discussion of several common issues in this Straight Up Craft hangout "),a("a",{attrs:{href:"https://straightupcraft.com/events/troubleshooting-email-errors",target:"_blank",rel:"noopener noreferrer"}},[e._v("Troubleshooting Email Errors Hangout"),a("OutboundLink")],1),e._v(".")]),e._v(" "),a("p",[e._v("To diagnose an email issue, consider each step in the email process. Simplify your tests to try to rule out other issues and confirm each step is working as expected until you can confirm what is going wrong. Email configuration for a custom Craft CMS website can include:")]),e._v(" "),a("ul",[a("li",[e._v("Server configuration")]),e._v(" "),a("li",[e._v("Email Service Provider")]),e._v(" "),a("li",[e._v("DNS settings")]),e._v(" "),a("li",[e._v("Craft CMS")]),e._v(" "),a("li",[e._v("Sprout Email")]),e._v(" "),a("li",[e._v("Email Content")]),e._v(" "),a("li",[e._v("Email Template")]),e._v(" "),a("li",[e._v("Recipient Firewall")]),e._v(" "),a("li",[e._v("Recipient Email Client")])]),e._v(" "),a("p",[a("em",[e._v("Below is not meant to be a comprehensive list of steps to diagnose an email issue but a list of things you may want to consider, ask, or explore along the way.")])]),e._v(" "),a("h2",{attrs:{id:"server-configuration"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#server-configuration"}},[e._v("#")]),e._v(" Server configuration")]),e._v(" "),a("p",[e._v("Is the web server capable of sending emails? If so, which protocol does it use? PHP Mail and Sendmail are notoriously unreliable so you probably want to configure a third party service and proper SMTP server to send email to improve your changes at troubleshooting this level.")]),e._v(" "),a("h2",{attrs:{id:"email-service-provider"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#email-service-provider"}},[e._v("#")]),e._v(" Email Service Provider")]),e._v(" "),a("p",[e._v("Many Email Service Providers have a free tier that is sufficient for most small websites. Mailgun and Sparkpost are reasonable places to start and there are many others. If you are on AWS, SES is an easy option.")]),e._v(" "),a("p",[e._v("Has your Email Service Provider been configured correctly? Often these services have tools that can confirm if your DNS appears to be configured correctly.")]),e._v(" "),a("h2",{attrs:{id:"dns-settings"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#dns-settings"}},[e._v("#")]),e._v(" DNS settings")]),e._v(" "),a("p",[e._v("Are the DNS settings for the domain the email is being sent configured correctly? This includes getting DKIM and SPF records setup that help your email get recognized as legitimate and avoid the spam bin.")]),e._v(" "),a("h2",{attrs:{id:"craft-cms"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#craft-cms"}},[e._v("#")]),e._v(" Craft CMS")]),e._v(" "),a("p",[e._v("Are the Email settings in Craft configured correctly? Double check you have the right info. Send a Test email to yourself from Craft's Email settings page to confirm that is working.")]),e._v(" "),a("h2",{attrs:{id:"craft-plugins"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#craft-plugins"}},[e._v("#")]),e._v(" Craft Plugins")]),e._v(" "),a("p",[e._v("Are there any additional settings that need to be set? This might include settings that integrate with a third-party API like Mailchimp or Sendgrid or the default From Address that will be used to send your emails.")]),e._v(" "),a("p",[e._v("Make sure the From Address being used when sending your email matches the website domain that you are sending from. In some cases, if the From Address is different than the sending domain an email will be considered a higher risk and may trigger more spam filters.")]),e._v(" "),a("h2",{attrs:{id:"email-content"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#email-content"}},[e._v("#")]),e._v(" Email Content")]),e._v(" "),a("p",[e._v('Make sure your content is respectable. Salesy titles may trigger spam filters so make sure you are sending all caps or using trigger words in your titles: "FREE CASH $$$!!!". If your email includes images, consider how large they are. If your email is really long, some email clients might truncate it after a certain number of HTML characters if you are using tons of tables for layouts.')]),e._v(" "),a("p",[e._v("If your content uses dynamic variables or logic they may cause the template to render incorrectly. Consider simplifying them to plain text, sending a test, and then adding them back one by one to diagnose which one may be causing the issue.")]),e._v(" "),a("h2",{attrs:{id:"email-template"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#email-template"}},[e._v("#")]),e._v(" Email Template")]),e._v(" "),a("p",[e._v("Are the email templates rendering correctly? If you are using Sprout Email's default setup, the default Email Template is quite simple and template issues would more likely be caused by the content discussed above. If you are using custom Email Templates, simplify the Email Templates to just include a simple word or two in plain text and send a test. If that works, add back your more complex template logic part by part until you diagnose what part of the template may be causing the issue.")]),e._v(" "),a("p",[e._v("Take a look in your Craft logs files. They may reveal more about what is going on.")]),e._v(" "),a("h2",{attrs:{id:"recipient-firewall"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#recipient-firewall"}},[e._v("#")]),e._v(" Recipient Firewall")]),e._v(" "),a("p",[e._v("Sprout Email's Sent Email feature reports if an email was sent from Craft successfully. While a Sent Email Element can indicate success, that doesn't mean your email got delivered, it just means your email successfully got handed off by Craft to the next service. Email Service Providers often provide additional metrics on if an email was successfully routed. And, even though an Email Service Provider may report that your email has been sent successfully through its service, it does not mean your email made it to it's destination.")]),e._v(" "),a("p",[e._v("Who is receiving the email? Does their organization have any business rules in their firewall or email configuration that may be filtering the email or labeling it as spam? Larger companies are more likely to have stricter rules in place in their firewall that may affect deliverability. Your behavior when testing emails can look suspicious but an IT department should be able to help you get whitelisted when needed.")]),e._v(" "),a("h2",{attrs:{id:"recipient-email-client"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#recipient-email-client"}},[e._v("#")]),e._v(" Recipient Email Client")]),e._v(" "),a("p",[e._v("What program is the recipient using to receive the email? Do they have any settings in place that may affect receiving the email? The last place to lose an email is in the recipients inbox itself. Some emails get filtered as spam, other people are just busy and archive an email before they realize it was your test email. If you've made it this far, follow up with your recipients and see what you can learn. Consider sending a test to a personal address instead of a business address to help diagnose where the issue may be arising.")])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/65.0e6884a3.js b/docs/.vuepress/dist/assets/js/65.0e6884a3.js new file mode 100644 index 00000000..a2bbcc24 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/65.0e6884a3.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[65],{525:function(e,t,a){"use strict";a.r(t);var s=a(34),n=Object(s.a)({},(function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",[e._v("Welcome Emails")]),e._v(" "),a("p",[e._v("Create a Notification with two custom fields:")]),e._v(" "),a("ol",[a("li",[a("strong",[e._v("htmlBody")]),e._v(" (rich text)")]),e._v(" "),a("li",[a("strong",[e._v("textBody")]),e._v(" (plain text)")])]),e._v(" "),a("p",[e._v("Sets up a template for the HTML and Text versions of the notification email:")]),e._v(" "),a("p",[a("strong",[e._v("_emails/email.twig")])]),e._v(" "),a("div",{staticClass:"language-twig extra-class"},[a("pre",{pre:!0,attrs:{class:"language-twig"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("<")]),e._v("body")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(">")])]),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[e._v("{{")]),e._v(" email"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(".")]),e._v("htmlBody "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[e._v("}}")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("")])]),e._v("\n")])])]),a("p",[a("strong",[e._v("_emails/email.txt")])]),e._v(" "),a("div",{staticClass:"language-twig extra-class"},[a("pre",{pre:!0,attrs:{class:"language-twig"}},[a("code",[a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[e._v("{{")]),e._v(" email"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(".")]),e._v("textBody "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[e._v("}}")])]),e._v("\n")])])]),a("p",[e._v('Create the new notification and add the appropriate sender info. The notification Rules will be setup to trigger "When a new user is created".')]),e._v(" "),a("div",{pre:!0},[a("p",[e._v("In the "),a("em",[e._v("Recipients")]),e._v(" field we'll send the email to the new users email address. When the notification is triggered, the User Model is provided as the dynamic notification object and we can reference the email address using the field name "),a("code",[e._v("{email}")]),e._v(".")])]),a("div",{pre:!0},[a("p",[e._v("In the "),a("code",[e._v("htmlBody")]),e._v(" and "),a("code",[e._v("textBody")]),e._v(" fields, we can also refer to the user. This time we will use the "),a("code",[e._v("firstName")]),e._v(" field (and should be sure to require the First Name field when a user is filling out their account info).")])]),a("div",{staticClass:"language-twig extra-class"},[a("pre",{pre:!0,attrs:{class:"language-twig"}},[a("code",[e._v("Hello {firstName},\n\nWe are so happy that you created an account. \n\nCarpe diem!\n")])])]),a("p",[e._v("When a new user named George is created, the notification will be sent to his email address and the notification email will be customized with his name:")]),e._v(" "),a("div",{staticClass:"language-twig extra-class"},[a("pre",{pre:!0,attrs:{class:"language-twig"}},[a("code",[e._v("Hello George,\n\nWe are so happy that you created an account. \n\nCarpe diem!\n")])])])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/66.582513d5.js b/docs/.vuepress/dist/assets/js/66.582513d5.js new file mode 100644 index 00000000..3656abc6 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/66.582513d5.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[66],{523:function(t,e,o){"use strict";o.r(e);var a=o(34),r=Object(a.a)({},(function(){var t=this,e=t.$createElement,o=t._self._c||e;return o("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[o("h1",[t._v("Lite vs Pro")]),t._v(" "),o("p",[o("strong",[t._v("Sprout Lite")]),t._v(" is designed to pair with Craft Solo and provide a solid baseline for digital marketing best practices on simple projects. "),o("strong",[t._v("Sprout Pro")]),t._v(" enables unlimited usage of all features and\nopens the door for advanced customization and CRM workflow integrations.")]),t._v(" "),o("p",[t._v("The Sprout Marketing Suite ships with a "),o("RouterLink",{attrs:{to:"/#modular-architecture"}},[t._v("modular architecture")]),t._v(" of over 10 specialized modules to power custom website and digital marketing needs.")],1),t._v(" "),o("h2",{attrs:{id:"data-studio-module"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#data-studio-module"}},[t._v("#")]),t._v(" Data Studio Module")]),t._v(" "),o("p",[o("em",[t._v("Available in: Sprout Data Studio, Sprout Forms.")])]),t._v(" "),o("EditionComparison",{attrs:{"feature-list":"./editions/data-studio.json"}}),t._v(" "),o("div",{staticClass:"custom-block tip"},[o("p",{staticClass:"custom-block-title"},[t._v("Craft 4 Support")]),t._v(" "),o("p",[t._v("Sprout Marketing Suite plugins are coming to Craft 4. See our "),o("RouterLink",{attrs:{to:"/support/road-map.html"}},[t._v("Road Map")]),t._v(" for more details.")],1)]),t._v(" "),o("h2",{attrs:{id:"redirects-module"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#redirects-module"}},[t._v("#")]),t._v(" Redirects Module")]),t._v(" "),o("p",[o("em",[t._v("Available in: Sprout Redirects, Sprout SEO.")])]),t._v(" "),o("EditionComparison",{attrs:{"feature-list":"./editions/redirects.json"}})],1)}),[],!1,null,null,null);e.default=r.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/67.83b72278.js b/docs/.vuepress/dist/assets/js/67.83b72278.js new file mode 100644 index 00000000..cfec0b16 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/67.83b72278.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[67],{527:function(e,i,l){"use strict";l.r(i);var t=l(34),s=Object(t.a)({},(function(){var e=this,i=e.$createElement,l=e._self._c||i;return l("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[l("h1",[e._v("About Sprout Fields")]),e._v(" "),l("p",[e._v("Sprout Fields adds several common field types to Craft CMS with the goal of providing a comprehensive suite of common field types necessary for managing business websites in an international community.")]),e._v(" "),l("p",[e._v("All Sprout Fields are designed to blend right in and provide your users a Craft-friendly user experience.")]),e._v(" "),l("h2",{attrs:{id:"custom-fields"}},[l("a",{staticClass:"header-anchor",attrs:{href:"#custom-fields"}},[e._v("#")]),e._v(" Custom Fields")]),e._v(" "),l("ul",[l("li",[e._v("Address Field (International)")]),e._v(" "),l("li",[e._v("Email Field")]),e._v(" "),l("li",[e._v("Gender Field (Inclusive)")]),e._v(" "),l("li",[e._v("Name Field (Customizable)")]),e._v(" "),l("li",[e._v("Notes Field")]),e._v(" "),l("li",[e._v("Phone Field (International)")]),e._v(" "),l("li",[e._v("Predefined Field")]),e._v(" "),l("li",[e._v("Regular Expression Field (Exclusive)")]),e._v(" "),l("li",[e._v("URL Field")])])])}),[],!1,null,null,null);i.default=s.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/68.4b2cbd76.js b/docs/.vuepress/dist/assets/js/68.4b2cbd76.js new file mode 100644 index 00000000..5bd4e053 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/68.4b2cbd76.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[68],{530:function(e,t,a){"use strict";a.r(t);var i=a(34),o=Object(i.a)({},(function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",[e._v("Craft 3")]),e._v(" "),a("p",[e._v("Sprout Fields installation and update instructions for Craft 3.")]),e._v(" "),a("h2",{attrs:{id:"requirements"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[e._v("#")]),e._v(" Requirements")]),e._v(" "),a("ul",[a("li",[e._v("Craft CMS 3.0.0-RC1 or a more recent version of Craft")])]),e._v(" "),a("h2",{attrs:{id:"installation-via-plugin-store"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#installation-via-plugin-store"}},[e._v("#")]),e._v(" Installation via Plugin Store")]),e._v(" "),a("ol",[a("li",[e._v("Find the plugin in the Plugin Store in your Craft Control Panel")]),e._v(" "),a("li",[e._v("Go to "),a("em",[e._v("Settings → Plugins")]),e._v(" and select “Install”")])]),e._v(" "),a("h2",{attrs:{id:"installation-via-composer"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#installation-via-composer"}},[e._v("#")]),e._v(" Installation via Composer")]),e._v(" "),a("div",{pre:!0},[a("ol",[a("li",[e._v("Open your terminal and go to your Craft project:"),a("br"),a("code",[e._v("cd /path/to/project")])]),e._v(" "),a("li",[e._v("Then tell Composer to load the plugin:"),a("br"),a("code",[e._v("composer require barrelstrength/sprout-fields")])]),e._v(" "),a("li",[e._v("In the Control Panel, go to "),a("em",[e._v("Settings → Plugins")]),e._v(" and select “Install”")])])]),a("h2",{attrs:{id:"upgrading-to-craft-3"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#upgrading-to-craft-3"}},[e._v("#")]),e._v(" Upgrading to Craft 3")]),e._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[e._v("BEFORE YOU UPDATE")]),e._v(" "),a("p",[e._v("Make sure you have updated to the latest version of Sprout Fields 2.x before updating to Sprout Fields 3.x for Craft 3")])]),e._v(" "),a("p",[e._v("Several things have changed between Sprout Fields 2 for Craft 2 and Sprout Fields 3 for Craft 3. In Craft 2 Sprout Fields provided fields for both the Craft CP and for Sprout Forms. Sprout Forms for Craft 3 now has it's own Field API so your Sprout Fields will be migrated different depending on whether you are using them as fields in Craft or in Sprout Forms.")]),e._v(" "),a("p",[e._v("When you update Craft please consider the following changes and learn about how your data will be migrated below:")]),e._v(" "),a("div",{staticClass:"table"},[a("table",[a("thead",[a("tr",[a("th",[e._v("Craft 2"),a("br"),e._v("Sprout Forms 3")]),e._v(" "),a("th",[e._v("Craft 3")]),e._v(" "),a("th",[e._v("Sprout Forms 4")])])]),e._v(" "),a("tbody",[a("tr",[a("td",[e._v("–")]),e._v(" "),a("td",[e._v("Address (New)")]),e._v(" "),a("td",[e._v("Address (New)")])]),e._v(" "),a("tr",[a("td",[e._v("Email")]),e._v(" "),a("td",[e._v("Email")]),e._v(" "),a("td",[e._v("Email")])]),e._v(" "),a("tr",[a("td",[e._v("Email Select")]),e._v(" "),a("td",[e._v("–")]),e._v(" "),a("td",[e._v("Email Dropdown")])]),e._v(" "),a("tr",[a("td",[e._v("–")]),e._v(" "),a("td",[e._v("Gender (New)")]),e._v(" "),a("td",[e._v("Gender (New)")])]),e._v(" "),a("tr",[a("td",[e._v("Hidden")]),e._v(" "),a("td",[e._v("Predefined")]),e._v(" "),a("td",[e._v("Hidden")])]),e._v(" "),a("tr",[a("td",[e._v("Invisible")]),e._v(" "),a("td",[e._v("Predefined")]),e._v(" "),a("td",[e._v("Invisible")])]),e._v(" "),a("tr",[a("td",[e._v("Link")]),e._v(" "),a("td",[e._v("URL (Renamed)")]),e._v(" "),a("td",[e._v("URL (Renamed)")])]),e._v(" "),a("tr",[a("td",[e._v("–")]),e._v(" "),a("td",[e._v("Name (New)")]),e._v(" "),a("td",[e._v("Name (New)")])]),e._v(" "),a("tr",[a("td",[e._v("Notes")]),e._v(" "),a("td",[e._v("Notes")]),e._v(" "),a("td",[e._v("Section Heading / Custom HTML")])]),e._v(" "),a("tr",[a("td",[e._v("Phone")]),e._v(" "),a("td",[e._v("Phone (Changed)")]),e._v(" "),a("td",[e._v("Phone (Changed)")])]),e._v(" "),a("tr",[a("td",[e._v("Regex")]),e._v(" "),a("td",[e._v("Regex")]),e._v(" "),a("td",[e._v("Regex")])])])])]),e._v(" "),a("h3",{attrs:{id:"changed-fields-breaking-changes"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#changed-fields-breaking-changes"}},[e._v("#")]),e._v(" Changed Fields (Breaking Changes)")]),e._v(" "),a("div",{pre:!0},[a("ul",[a("li",[a("p",[a("strong",[e._v("Phone Field")]),e._v(" - We've introduced a new International Phone Field in Craft 3. There is no easy way to predict which format the existing Phone field is storing data so we will be migrating all existing Phone fields to a default Plain Text Field in Craft 3. If you'd like to use the new International Phone Field a separate migration will be necessary.")])]),e._v(" "),a("li",[a("p",[a("strong",[e._v("Notes Field")]),e._v(" - The Notes field now uses a file-based CSS method to customize Notes field styles, similar to how Redactor Toolbars work. You will no longer find the custom style settings in the Craft admin, or be limited to our pre-defined style naming conventions. You now have complete flexibility to add as many Style configurations as you'd like. Styles must be added to the "),a("code",[e._v("config/sproutnotes")]),e._v(" folder and use a new naming convention. Existing styles will need to be manually migrated and updated to these CSS files so be sure to copy your existing custom styles before updating and review the docs for how to customize new styles. Previous dynamic "),a("code",[e._v("{{ name }}")]),e._v(" references will need to be updated to use the new "),a("code",[e._v("FIELDHANDLE")]),e._v(" convention. See the Notes Field docs on "),a("a",{pre:!0,attrs:{href:"https://sprout.barrelstrengthdesign.com/craft-plugins/fields/docs/overview/notes-field#custom-styles",target:"_blank",rel:"noopener noreferrer"}},[e._v("Custom Styles"),a("OutboundLink",{pre:!0})],1),e._v(" for more info.")])])])]),a("h3",{attrs:{id:"renamed-fields"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#renamed-fields"}},[e._v("#")]),e._v(" Renamed Fields")]),e._v(" "),a("p",[e._v("As Craft has now added a simple URL Field, we have chosen to update the Link field to be consistent and use the same name.")]),e._v(" "),a("ul",[a("li",[a("strong",[e._v("Link Field")]),e._v(" => URL (Sprout)")])]),e._v(" "),a("h3",{attrs:{id:"removed-fields"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#removed-fields"}},[e._v("#")]),e._v(" Removed Fields")]),e._v(" "),a("p",[e._v("Sprout Forms no longer relies on existing Craft Field Types so we can now deprecate several fields that don't really have many Control Panel use cases but were there to work with Sprout Forms. Any data that you have stored in these fields will be migrated to a default Craft field type during the upgrade. The following fields will be removed in Craft 3:")]),e._v(" "),a("ul",[a("li",[a("strong",[e._v("Email Select Field")]),e._v(" (will be migrated to use a Table Field)")]),e._v(" "),a("li",[a("strong",[e._v("Hidden Field")]),e._v(" (will be migrated to use a Plain Text Field)")]),e._v(" "),a("li",[a("strong",[e._v("Invisible Field")]),e._v(" (will be migrated to use a Plain Text Field)")])]),e._v(" "),a("h3",{attrs:{id:"upgrading-to-fields-4-0-unreleased"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#upgrading-to-fields-4-0-unreleased"}},[e._v("#")]),e._v(" Upgrading to Fields 4.0??? - UNRELEASED")]),e._v(" "),a("p",[e._v("OnSaveAddressEvent removes 'model' property\nUpdates 'source' => 'element'\nCommit: 78cd228838f3ac5efabd8d536e738b26511bebd2")]),e._v(" "),a("ul",[a("li",[e._v("Removed Email field. Data has been migrated to native Craft Email field.")]),e._v(" "),a("li",[e._v("Removed Url field. Data has been migrated to native Craft URL field.")]),e._v(" "),a("li",[e._v("Removed Notes field. See upgrade notes to manually update Notes to new Craft Field UI Elements. Notes Field data will be saved in upgrade migrations to storage/runtime/sprout/sprout-notes-field-data-export.txt")])])])}),[],!1,null,null,null);t.default=o.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/69.7d8017ef.js b/docs/.vuepress/dist/assets/js/69.7d8017ef.js new file mode 100644 index 00000000..4d5f1335 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/69.7d8017ef.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[69],{534:function(e,t,a){"use strict";a.r(t);var i=a(34),s=Object(i.a)({},(function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",[e._v("Predefined Date Field")]),e._v(" "),a("p",[e._v("The Predefined Date Field allows you parse Twig and define the value of a date ahead of time. This can be useful to help optimize queries or prepare data for a specific use case before it is needed.")]),e._v(" "),a("p",[e._v("While similar to the "),a("RouterLink",{attrs:{to:"/fields/predefined-field.html"}},[e._v("Predefined Field")]),e._v(", the Predefined Date Field stores it's value as a Date data type which can be useful when it is necessary to query results by date.")],1),e._v(" "),a("p",[e._v("The Predefined Field is not editable.")]),e._v(" "),a("h2",{attrs:{id:"settings"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#settings"}},[e._v("#")]),e._v(" Settings")]),e._v(" "),a("ul",[a("li",[a("strong",[e._v("Field Format")]),e._v(" - The value you want to prepare when the Predefined Field is saved.")]),e._v(" "),a("li",[a("strong",[e._v("Show Field")]),e._v(" - Enable to display the value you saved in the Field Layout")])]),e._v(" "),a("h3",{attrs:{id:"field-format"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#field-format"}},[e._v("#")]),e._v(" Field Format")]),e._v(" "),a("p",[e._v("The Field Format value must resolve to a proper date format:")]),e._v(" "),a("div",{staticClass:"language-twig extra-class"},[a("pre",{pre:!0,attrs:{class:"language-twig"}},[a("code",[e._v("{matrixField.one().startDateField|date('Y-m-d h:m:s')}\n")])])]),a("p",[e._v("See "),a("RouterLink",{attrs:{to:"/fields/predefined-field.html"}},[e._v("Predefined Field")]),e._v(" for general usage.")],1),e._v(" "),a("h3",{attrs:{id:"matrix-field-usage"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#matrix-field-usage"}},[e._v("#")]),e._v(" Matrix Field Usage")]),e._v(" "),a("p",[e._v("See "),a("RouterLink",{attrs:{to:"/fields/predefined-field.html"}},[e._v("Predefined Field")]),e._v(" for usage.")],1),e._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),a("p",[e._v("If you update the Field Format you will need to resave the Field Layout in your Craft Settings to ensure all Entries get re-saved and recalculate the value of your Predefined Field.")])])])}),[],!1,null,null,null);t.default=s.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/7.f42f1870.js b/docs/.vuepress/dist/assets/js/7.f42f1870.js new file mode 100644 index 00000000..64f15b3c --- /dev/null +++ b/docs/.vuepress/dist/assets/js/7.f42f1870.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[7],{369:function(t,e){t.exports="\t\n\v\f\r                 \u2028\u2029\ufeff"},370:function(t,e,r){var n=r(4),i=r(30),a=r(17),u=r(369),o=n("".replace),s="["+u+"]",f=RegExp("^"+s+s+"*"),l=RegExp(s+s+"*$"),c=function(t){return function(e){var r=a(i(e));return 1&t&&(r=o(r,f,"")),2&t&&(r=o(r,l,"")),r}};t.exports={start:c(1),end:c(2),trim:c(3)}},372:function(t,e,r){"use strict";var n=r(9),i=r(0),a=r(4),u=r(122),o=r(15),s=r(10),f=r(206),l=r(35),c=r(67),p=r(208),h=r(3),N=r(66).f,b=r(37).f,I=r(13).f,g=r(373),v=r(370).trim,E=i.Number,d=E.prototype,m=i.TypeError,w=a("".slice),_=a("".charCodeAt),y=function(t){var e=p(t,"number");return"bigint"==typeof e?e:A(e)},A=function(t){var e,r,n,i,a,u,o,s,f=p(t,"number");if(c(f))throw m("Cannot convert a Symbol value to a number");if("string"==typeof f&&f.length>2)if(f=v(f),43===(e=_(f,0))||45===e){if(88===(r=_(f,2))||120===r)return NaN}else if(48===e){switch(_(f,1)){case 66:case 98:n=2,i=49;break;case 79:case 111:n=8,i=55;break;default:return+f}for(u=(a=w(f,2)).length,o=0;oi)return NaN;return parseInt(a,n)}return+f};if(u("Number",!E(" 0o1")||!E("0b1")||E("+0x1"))){for(var x,S=function(t){var e=arguments.length<1?0:E(y(t)),r=this;return l(d,r)&&h((function(){g(r)}))?f(Object(e),r,S):e},T=n?N(E):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,isFinite,isInteger,isNaN,isSafeInteger,parseFloat,parseInt,fromString,range".split(","),F=0;T.length>F;F++)s(E,x=T[F])&&!s(S,x)&&I(S,x,b(E,x));S.prototype=d,d.constructor=S,o(i,"Number",S)}},373:function(t,e,r){var n=r(4);t.exports=n(1..valueOf)},410:function(t,e,r){"use strict";r.r(e);r(372);var n={props:{label:{type:String,required:!1},width:{type:Number,default:18},height:{type:Number,default:18}}},i=r(34),a=Object(i.a)(n,(function(){var t=this.$createElement,e=this._self._c||t;return e("svg",{attrs:{"aria-hidden":!this.label,"aria-label":this.label,width:this.width,height:this.height,viewBox:"0 0 512 512",fill:"#27AB83"}},[e("path",{attrs:{d:"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"}})])}),[],!1,null,null,null);e.default=a.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/70.cf50e4ed.js b/docs/.vuepress/dist/assets/js/70.cf50e4ed.js new file mode 100644 index 00000000..000c384b --- /dev/null +++ b/docs/.vuepress/dist/assets/js/70.cf50e4ed.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[70],{549:function(e,t,a){"use strict";a.r(t);var s=a(34),o=Object(s.a)({},(function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",[e._v("Regular Expression Field")]),e._v(" "),a("p",[e._v("The Regular Expression field allows you to validate input for a text field with a Regular Expression pattern.")]),e._v(" "),a("p",[e._v("You will need knowledge of Regular Expressions to create the validation pattern. The Regular Expression validation pattern can be added in your field settings.")]),e._v(" "),a("h2",{attrs:{id:"considerations"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#considerations"}},[e._v("#")]),e._v(" Considerations")]),e._v(" "),a("p",[e._v("If you have a more common data type consider a field type that is dedicated specifically to that data type. It will likely lead to a better user experience and less complexity in your project. Sprout Fields provides fields for validating Email Addresses, Links, and Phone Numbers which may be more appropriate for general use and have additional features to improve the usability of those fields for non-technical users.")]),e._v(" "),a("h2",{attrs:{id:"examples"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#examples"}},[e._v("#")]),e._v(" Examples")]),e._v(" "),a("p",[e._v("Google Analytics documentation has a "),a("a",{attrs:{href:"https://support.google.com/analytics/answer/1034324",target:"_blank",rel:"noopener noreferrer"}},[e._v("good overview of Regular Expressions"),a("OutboundLink")],1),e._v(" and several doc pages with examples of common patterns.")]),e._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[e._v("TIP")]),e._v(" "),a("p",[e._v("The Regular Expression field handles the delimiters of your Regular Expression for you, so you only need to add the expression itself in the Validation Pattern setting.")])])])}),[],!1,null,null,null);t.default=o.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/71.b1630d34.js b/docs/.vuepress/dist/assets/js/71.b1630d34.js new file mode 100644 index 00000000..9b32c3e9 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/71.b1630d34.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[71],{536:function(t,e,a){"use strict";a.r(e);var s=a(34),l=Object(s.a)({},(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",[t._v("Template Field")]),t._v(" "),a("p",[t._v("The Template Address field allows a user to select a template in your Craft templates folder using an Auto-suggest Field or Dropdown field.")]),t._v(" "),a("p",[t._v("This field should be used sparingly but can be useful for scenarios where independent content or a component may not be managed within Craft but needs to exist on a page within content managed by Craft.")]),t._v(" "),a("h2",{attrs:{id:"templates"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#templates"}},[t._v("#")]),t._v(" Templates")]),t._v(" "),a("div",{pre:!0},[a("p",[t._v("The Template field will store a templates path as it relates to the "),a("code",[t._v("/templates")]),t._v(" folder in your Craft application. For example, the template "),a("code",[t._v("/templates/_components/interactive-map")]),t._v(" would be stored as "),a("code",[t._v("_components/interactive-map")]),t._v(" in the Template field.")])]),a("div",{staticClass:"language-twig extra-class"},[a("pre",{pre:!0,attrs:{class:"language-twig"}},[a("code",[a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" entry"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("templateField "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n")])])]),a("p",[t._v("Or, more likely:")]),t._v(" "),a("div",{staticClass:"language-twig extra-class"},[a("pre",{pre:!0,attrs:{class:"language-twig"}},[a("code",[a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("include")]),t._v(" entry"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("templateField "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n")])])]),a("h2",{attrs:{id:"settings"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#settings"}},[t._v("#")]),t._v(" Settings")]),t._v(" "),a("h3",{attrs:{id:"input-style"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#input-style"}},[t._v("#")]),t._v(" Input Style")]),t._v(" "),a("p",[t._v("The field type that will displayed in the field layout to content authors. The Auto-suggest Field displays an open-ended input with search and template hints while a user types. The Dropdown Field displays all available options as a list.")]),t._v(" "),a("h3",{attrs:{id:"suggested-templates"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#suggested-templates"}},[t._v("#")]),t._v(" Suggested Templates")]),t._v(" "),a("p",[t._v("The templates a user will see as hints using the Auto-suggest Field or as options using the Dropdown Field.")]),t._v(" "),a("ul",[a("li",[t._v("All Templates")]),t._v(" "),a("li",[t._v("Templates within a specific folder")])]),t._v(" "),a("h3",{attrs:{id:"limit-suggestions-to-template-folder"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#limit-suggestions-to-template-folder"}},[t._v("#")]),t._v(" limit suggestions to template folder")]),t._v(" "),a("p",[t._v("Limits the Suggested Templates shown to the templates within this folder.")])])}),[],!1,null,null,null);e.default=l.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/72.172dc558.js b/docs/.vuepress/dist/assets/js/72.172dc558.js new file mode 100644 index 00000000..e50befd0 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/72.172dc558.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[72],{547:function(t,e,a){"use strict";a.r(e);var s=a(34),n=Object(s.a)({},(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",[t._v("Caching & CSRF Tokens")]),t._v(" "),a("p",[t._v("Many websites take steps to improve performance by caching web pages. However, be mindful when caching pages with Forms. Forms depend on a CSRF token for security. This CSRF token is required to be unique each time a form is submitted so you do not want to cache it.")]),t._v(" "),a("p",[t._v("You can avoid this issue by dynamically loading the CSRF token or excluding the pages on your website with forms from being cached.")]),t._v(" "),a("h2",{attrs:{id:"blitz-plugin"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#blitz-plugin"}},[t._v("#")]),t._v(" Blitz Plugin")]),t._v(" "),a("p",[t._v("If using Blitz for static caching, you will need to update your Form Templates to dynamically load the CSRF token. Blitz provides a tag for you to do this:")]),t._v(" "),a("div",{staticClass:"language-twig extra-class"},[a("pre",{pre:!0,attrs:{class:"language-twig"}},[a("code",[a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" craft"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("blitz"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("csrfInput"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n")])])])])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/73.eb46d3e7.js b/docs/.vuepress/dist/assets/js/73.eb46d3e7.js new file mode 100644 index 00000000..c46af008 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/73.eb46d3e7.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[73],{539:function(e,o,i){"use strict";i.r(o);var t=i(34),n=Object(t.a)({},(function(){var e=this,o=e.$createElement,i=e._self._c||o;return i("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[i("h1",[e._v("Rules")]),e._v(" "),i("p",[e._v("Rules give you control over conditional logic in your Forms.")]),e._v(" "),i("h2",{attrs:{id:"field-rules"}},[i("a",{staticClass:"header-anchor",attrs:{href:"#field-rules"}},[e._v("#")]),e._v(" Field Rules")]),e._v(" "),i("p",[e._v("Field Rules allow you to hide or show fields based on certain criteria. Field Rules can be created on the Rules tab in a given Form's settings area. Field Rules consist of:")]),e._v(" "),i("ul",[i("li",[i("strong",[e._v("Form Field")]),e._v(" - The target field in which the condition will be applied.")]),e._v(" "),i("li",[i("strong",[e._v("Condition")]),e._v(" - The condition to use when checking a field")]),e._v(" "),i("li",[i("strong",[e._v("Value")]),e._v(" - The value to check for to determine if the condition is met.")])]),e._v(" "),i("div",{pre:!0},[i("p",[e._v("Field Rule conditions can contain multiple "),i("code",[e._v("AND")]),e._v(" and/or "),i("code",[e._v("OR")]),e._v(" conditions.")])]),i("h3",{attrs:{id:"conditions"}},[i("a",{staticClass:"header-anchor",attrs:{href:"#conditions"}},[e._v("#")]),e._v(" Conditions")]),e._v(" "),i("p",[e._v("Each Form Field can define which conditions it supports so conditions may vary from field to field. The combination of the Form Field and the Condition will determine the options you have for the Value field.")]),e._v(" "),i("div",{pre:!0},[i("ul",[i("li",[i("code",[e._v("Is")]),e._v(" and "),i("code",[e._v("IsNot")])]),e._v(" "),i("li",[i("code",[e._v("Contains")]),e._v(" and "),i("code",[e._v("DoesNotContain")])]),e._v(" "),i("li",[i("code",[e._v("StartsWith")]),e._v(" and "),i("code",[e._v("DoesNotStartWith")])]),e._v(" "),i("li",[i("code",[e._v("EndsWith")]),e._v(" and "),i("code",[e._v("DoesNotEndWith")])]),e._v(" "),i("li",[i("code",[e._v("IsProvided")]),e._v(" and "),i("code",[e._v("IsNotProvided")])]),e._v(" "),i("li",[i("code",[e._v("IsChecked")]),e._v(" and "),i("code",[e._v("IsNotChecked")])]),e._v(" "),i("li",[i("code",[e._v("IsGreaterThan")]),e._v(" and "),i("code",[e._v("IsLessThan")])]),e._v(" "),i("li",[i("code",[e._v("IsGreaterThanOrEqualTo")]),e._v(" and "),i("code",[e._v("IsLessThanOrEqualTo")])])])]),i("h3",{attrs:{id:"conflicts"}},[i("a",{staticClass:"header-anchor",attrs:{href:"#conflicts"}},[e._v("#")]),e._v(" Conflicts")]),e._v(" "),i("p",[e._v("The rule builder is a flexible tool and it is possible to create a rule that conflicts with another rule. It is the users responsibility to configure rules that play nicely with one another.")])])}),[],!1,null,null,null);o.default=n.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/74.bc1d2c93.js b/docs/.vuepress/dist/assets/js/74.bc1d2c93.js new file mode 100644 index 00000000..43a5bf4f --- /dev/null +++ b/docs/.vuepress/dist/assets/js/74.bc1d2c93.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[74],{541:function(t,a,s){"use strict";s.r(a);var n=s(34),e=Object(n.a)({},(function(){var t=this,a=t.$createElement,s=t._self._c||a;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",[t._v("Captchas")]),t._v(" "),s("p",[t._v("Captchas enable you to add additional methods to protect your form from Spam.")]),t._v(" "),s("h2",{attrs:{id:"captcha-class"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#captcha-class"}},[t._v("#")]),t._v(" Captcha Class")]),t._v(" "),s("p",[t._v("See examples of how to build your Captcha Class from the default Captchas in Sprout Forms:")]),t._v(" "),s("ul",[s("li",[s("a",{attrs:{href:"https://github.com/barrelstrength/craft-sprout-forms/blob/v3/src/captchas/DuplicateCaptcha.php",target:"_blank",rel:"noopener noreferrer"}},[t._v("Duplicate Submission Captcha"),s("OutboundLink")],1)]),t._v(" "),s("li",[s("a",{attrs:{href:"https://github.com/barrelstrength/craft-sprout-forms/blob/v3/src/captchas/JavascriptCaptcha.php",target:"_blank",rel:"noopener noreferrer"}},[t._v("Javascript Captcha"),s("OutboundLink")],1)]),t._v(" "),s("li",[s("a",{attrs:{href:"https://github.com/barrelstrength/craft-sprout-forms/blob/v3/src/captchas/HoneypotCaptcha.php",target:"_blank",rel:"noopener noreferrer"}},[t._v("Honeypot Captcha"),s("OutboundLink")],1)]),t._v(" "),s("li",[s("a",{attrs:{href:"https://github.com/barrelstrength/craft-sprout-forms-google-recaptcha",target:"_blank",rel:"noopener noreferrer"}},[t._v("Google Recaptcha for Sprout Forms"),s("OutboundLink")],1)])]),t._v(" "),s("h2",{attrs:{id:"register-event"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#register-event"}},[t._v("#")]),t._v(" Register Event")]),t._v(" "),s("p",[t._v("Once you have created your Custom Captcha, register your Captcha class with Sprout Forms to display your Captcha in the Spam Protection settings and enable it for your forms.")]),t._v(" "),s("div",{staticClass:"language-php extra-class"},[s("pre",{pre:!0,attrs:{class:"language-php"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("namespace")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token package"}},[t._v("mycompany"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("mycaptchaplugin")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token package"}},[t._v("mycompany"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("myplugin"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("integrations"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("sproutforms"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("captchas"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("MyCaptcha")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token package"}},[t._v("barrelstrength"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("sproutforms"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("services"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("Forms")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token package"}},[t._v("yii"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("base"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("Event")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name-definition class-name"}},[t._v("MyCaptchaPlugin")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Plugin")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("init")]),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 "),s("span",{pre:!0,attrs:{class:"token keyword static-context"}},[t._v("parent")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),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 \n "),s("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("Event")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("on")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("Forms")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("Forms")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("EVENT_REGISTER_CAPTCHAS")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name type-declaration"}},[t._v("Event")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$event")]),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 variable"}},[t._v("$event")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),s("span",{pre:!0,attrs:{class:"token property"}},[t._v("types")]),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(" "),s("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("MyCaptcha")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),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(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \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")])])])])}),[],!1,null,null,null);a.default=e.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/75.54ebd6db.js b/docs/.vuepress/dist/assets/js/75.54ebd6db.js new file mode 100644 index 00000000..839b7e83 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/75.54ebd6db.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[75],{540:function(t,s,a){"use strict";a.r(s);var e=a(34),n=Object(e.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",[t._v("Form Fields")]),t._v(" "),a("p",[t._v("Form Fields enable you to add new Fields to the Form Builder and manage its field settings and front-end output.")]),t._v(" "),a("p",[t._v("See the following plugins for examples:")]),t._v(" "),a("ul",[a("li",[a("a",{attrs:{href:"https://github.com/barrelstrength/craft-sprout-forms-range-slider",target:"_blank",rel:"noopener noreferrer"}},[t._v("Range Slider Field for Sprout Forms"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"https://github.com/barrelstrength/craft-sprout-forms-us-states",target:"_blank",rel:"noopener noreferrer"}},[t._v("US States Field for Sprout Forms"),a("OutboundLink")],1)])]),t._v(" "),a("h3",{attrs:{id:"register-event"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#register-event"}},[t._v("#")]),t._v(" Register Event")]),t._v(" "),a("p",[t._v("Once you have created your Custom Form Field, register your Form Field class with Sprout Forms to display your Form Field in the Form Builder.")]),t._v(" "),a("div",{staticClass:"language-php extra-class"},[a("pre",{pre:!0,attrs:{class:"language-php"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("namespace")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token package"}},[t._v("barrelstrength"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("sproutformsrangeslider")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token package"}},[t._v("barrelstrength"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("sproutforms"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("services"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("Fields")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token package"}},[t._v("barrelstrength"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("sproutforms"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("events"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("RegisterFieldsEvent")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token package"}},[t._v("barrelstrength"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("sproutformsrangeslider"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("integrations"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("sproutforms"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("fields"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("RangeSlider")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token package"}},[t._v("Craft")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token package"}},[t._v("craft"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("base"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("Plugin")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token package"}},[t._v("yii"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("base"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("Event")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name-definition class-name"}},[t._v("SproutFormsRangeSlider")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Plugin")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("init")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("Event")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("on")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("Fields")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("Fields")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("EVENT_REGISTER_FIELDS")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name type-declaration"}},[t._v("RegisterFieldsEvent")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$event")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$event")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("fields")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("RangeSlider")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),a("h3",{attrs:{id:"custom-front-end-fields"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#custom-front-end-fields"}},[t._v("#")]),t._v(" Custom Front-End Fields")]),t._v(" "),a("p",[t._v("To create a field that extends the Sprout Forms Front-end Field API, you'll need to do the following:")]),t._v(" "),a("div",{pre:!0},[a("ol",[a("li",[t._v("Create a "),a("strong",[t._v("field class")]),t._v(" that extends "),a("code",[t._v("SproutFormsBaseField")])]),t._v(" "),a("li",[t._v("Add the "),a("code",[t._v("getInputHtml()")]),t._v(" method to your "),a("strong",[t._v("field class")])]),t._v(" "),a("li",[t._v("Add the "),a("code",[t._v("registerSproutFormsFields()")]),t._v(" in your "),a("strong",[t._v("plugin class")])])])]),a("h3",{attrs:{id:"field-class"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#field-class"}},[t._v("#")]),t._v(" Field Class")]),t._v(" "),a("div",{staticClass:"split"},[a("div",{staticClass:"left"},[a("div",{pre:!0},[a("p",[t._v("The "),a("em",[t._v("field")]),t._v(" class naming convention we recommend is: "),a("code",[t._v("{PluginHandle}{FieldType}{Field}")]),t._v(".")])]),a("h4",[t._v("getInputHtml()")]),t._v(" "),a("p",[t._v("Like a back-end "),a("em",[t._v("field type")]),t._v(", your front end "),a("em",[t._v("field")]),t._v(" gets to decide what "),a("strong",[t._v("html")]),t._v(" to render to capture user input.")]),t._v(" "),a("h4",[t._v("Signature")]),t._v(" "),a("div",{staticClass:"language-php extra-class"},[a("pre",{pre:!0,attrs:{class:"language-php"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("getInputHtml")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$field")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$value")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$settings")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword type-hint"}},[t._v("array")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$renderingOptions")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("$field > The FieldModel we're providing front end rending for\n$value > The value associated with that field type\n$settings > The settings associated with that field type\n$renderingOptions > Options available to displayForm(), displayTab(), displayField() tags\n")])])]),a("div",{pre:!0},[a("p",[t._v("In addition to the arguments, you should make sure to return a "),a("code",[t._v("\\Twig_Markup")]),t._v(" object from this method so that your HTML is not escaped.")])]),a("h4",[t._v("beginRendering()")]),t._v(" "),a("div",{pre:!0},[a("p",[t._v("This method should be called just before your render your front end field template inside of "),a("code",[t._v("getInputHtml()")])])]),a("div",{pre:!0},[a("p",[t._v("This is due to how we're allowing the user to override "),a("code",[t._v("form")]),t._v(", "),a("code",[t._v("tab")]),t._v(", and "),a("code",[t._v("field")]),t._v(" templates for style customization.")])]),a("div",{pre:!0},[a("p",[t._v("Not calling "),a("code",[t._v("beginRendering()")]),t._v(" could cause your template to not be found.")])]),a("h4",[t._v("endRendering()")]),t._v(" "),a("p",[t._v("This method should be called just after you finish rendering your front end field template.")]),t._v(" "),a("div",{pre:!0},[a("p",[t._v("Not calling "),a("code",[t._v("endRendering()")]),t._v(" could cause your template or Sprout Forms' own templates to not be found.")])]),a("h4",[t._v("getTemplatesPath()")]),t._v(" "),a("div",{pre:!0},[a("p",[t._v("Because Sprout Forms allows the user to customize/override the default templates ("),a("code",[t._v("form.html")]),t._v(", "),a("code",[t._v("tab.html")]),t._v(", "),a("code",[t._v("field.html")]),t._v(", "),a("code",[t._v("errors.html")]),t._v("), we need to switch the template path a few times during rendering of all fields.")])]),a("p",[t._v("This method is your chance to make sure your templates are found when your field is rendered.")]),t._v(" "),a("div",{pre:!0},[a("p",[t._v("From this method, you should return the absolute path to your templates folder so that we can switch to it if you're rendering a template via "),a("code",[t._v("getInputHtml()")])])])]),t._v(" "),a("div",{staticClass:"right"},[a("div",{pre:!0},[a("p",[t._v("If we follow the instructions above, our "),a("code",[t._v("getInputHtml()")]),t._v(" and "),a("code",[t._v("getTemplatesPath()")]),t._v(" might look something like this:")])]),a("div",{staticClass:"language-php extra-class"},[a("pre",{pre:!0,attrs:{class:"language-php"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("getInputHtml")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$field")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$value")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$settings")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword type-hint"}},[t._v("array")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$renderingOptions")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$this")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("beginRendering")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$rendered")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("craft")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("templates")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("render")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'plaintext/input'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("array")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'name'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$field")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("handle")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'value'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$value")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'field'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$field")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'settings'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$settings")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'renderingOptions'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$renderingOptions")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$this")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("endRendering")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("TemplateHelper")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getRaw")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$rendered")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("getTemplatesPath")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("dirname")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("__FILE__")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'/myplugin/templates/'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])])]),t._v(" "),a("h3",{attrs:{id:"accessing-variables-in-templates"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#accessing-variables-in-templates"}},[t._v("#")]),t._v(" Accessing variables in templates")]),t._v(" "),a("div",{pre:!0},[a("p",[t._v("If your field to be able to access variables within the template where your field is being rendered, a user can use the "),a("code",[t._v("sprout.forms.addFieldVariables()")]),t._v(" method to make those variables available to your field.")])]),a("h3",{attrs:{id:"examples"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#examples"}},[t._v("#")]),t._v(" Examples")]),t._v(" "),a("div",{pre:!0},[a("p",[t._v("If you'd like to take a peek at how we're using this API, you can look in the "),a("code",[t._v("craft/plugins/sproutforms/integrations")]),t._v(" folder.")])]),a("p",[t._v("All the default fields that we provide front end rendering for, are using this very API!")])])}),[],!1,null,null,null);s.default=n.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/76.06486367.js b/docs/.vuepress/dist/assets/js/76.06486367.js new file mode 100644 index 00000000..3fe89c06 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/76.06486367.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[76],{542:function(t,s,a){"use strict";a.r(s);var n=a(34),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",[t._v("Form Templates")]),t._v(" "),a("p",[t._v("Form Templates enable you to manage "),a("RouterLink",{attrs:{to:"/forms/template-overrides.html"}},[t._v("Template Overrides")]),t._v(" as a plugin to easily reuse across projects or share in the Plugin Store.")],1),t._v(" "),a("h2",{attrs:{id:"form-template-class"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#form-template-class"}},[t._v("#")]),t._v(" Form Template Class")]),t._v(" "),a("p",[t._v("A Form Template class is quite simple and only requires that you define the name of your Form Template and the path where you store your "),a("RouterLink",{attrs:{to:"/forms/template-overrides.html"}},[t._v("Template Overrides")]),t._v(".")],1),t._v(" "),a("div",{staticClass:"language-php extra-class"},[a("pre",{pre:!0,attrs:{class:"language-php"}},[a("code",[a("span",{pre:!0,attrs:{class:"token php language-php"}},[a("span",{pre:!0,attrs:{class:"token delimiter important"}},[t._v("")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("types")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("MyFormTemplates")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("Form Templates are available in Sprout Forms for Craft 3. Upgrade to Craft 3 and enjoy the power and flexibility of Form Templates!")])])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/77.0f117506.js b/docs/.vuepress/dist/assets/js/77.0f117506.js new file mode 100644 index 00000000..9d806d57 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/77.0f117506.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[77],{543:function(t,a,s){"use strict";s.r(a);var n=s(34),e=Object(n.a)({},(function(){var t=this,a=t.$createElement,s=t._self._c||a;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",[t._v("Custom HTML")]),t._v(" "),s("h2",{attrs:{id:"working-with-a-custom-html-form"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#working-with-a-custom-html-form"}},[t._v("#")]),t._v(" Working with a Custom HTML Form")]),t._v(" "),s("p",[t._v("Sprout Forms gives you 100% control over your form templates.")]),t._v(" "),s("div",{staticClass:"custom-block warning"},[s("p",{staticClass:"custom-block-title"},[t._v("PROCEED WITH CAUTION")]),t._v(" "),s("p",[t._v("Custom HTML should be considered a last resort. If you feel you have no other options and need to use Custom HTML, reach out and "),s("a",{attrs:{href:"mailto:sprout@barrelstrengthdesign.com"}},[t._v("let us know")]),t._v(". We'd love to understand your use case so we can improve Sprout Forms and make it less likely you need to use the Custom HTML in the future.")]),t._v(" "),s("p",[t._v("If you need to customize your form, "),s("RouterLink",{attrs:{to:"/forms/template-overrides.html"}},[t._v("Template Overrides")]),t._v(" and the "),s("RouterLink",{attrs:{to:"/forms/custom-form-fields.html"}},[t._v("Form Field API")]),t._v(" are good places to start. They address the majority of what you need to have control over the markup and styles in your templates, specialized fields, and custom validation.")],1),t._v(" "),s("p",[t._v("Building your forms in Custom HTML makes forms harder to maintain, introduces the possibility for several potential details that must be maintained manually, and may also require more testing when updating.")])]),t._v(" "),s("p",[t._v("When building a custom HTML form, you will need to manage several states in your templates.")]),t._v(" "),s("ol",[s("li",[t._v("The form (your form and field settings)")]),t._v(" "),s("li",[t._v("The form entry (your form submission with any retained values or errors)")])]),t._v(" "),s("p",[t._v("The "),s("RouterLink",{attrs:{to:"/forms/forms.html"}},[t._v("form tag")]),t._v(" and the "),s("RouterLink",{attrs:{to:"/forms/entries.html"}},[t._v("getEntry tag")]),t._v(" must be used together to manage all of the different states of a form. Below are some examples of how to dynamically access the different values you will need in your templates.")],1),t._v(" "),s("h2",{attrs:{id:"loop-through-all-fields-dynamically"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#loop-through-all-fields-dynamically"}},[t._v("#")]),t._v(" Loop through all fields dynamically")]),t._v(" "),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" form "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" sprout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("forms"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("form"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("contact"),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 delimiter punctuation"}},[t._v("%}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" entry "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" sprout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("forms"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getEntry"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("form"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("for")]),t._v(" tab "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("in")]),t._v(" form"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getFieldLayout"),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("getTabs"),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 delimiter punctuation"}},[t._v("%}")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" layoutFields "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" tab"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getFields"),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 delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("section")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("tab"),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 twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" form"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("displaySectionTitles "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("-%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("h3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" tab"),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("t "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("for")]),t._v(" field "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("in")]),t._v(" layoutFields "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("-%}")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("do")]),t._v(" sprout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("forms"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("addFieldVariables"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("_context"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("-%}")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" label "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("name "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("null")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" instructions "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("instructions "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("null")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),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(".")]),t._v("handle "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("null")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),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(".")]),t._v("required "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("is")]),t._v(" defined "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("and")]),t._v(" field"),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(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" renderingOptions "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" attribute"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("renderingOptions"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("fields"),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 operator"}},[t._v("is")]),t._v(" defined "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" renderingOptions"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("fields"),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 punctuation"}},[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(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" id "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" renderingOptions"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("id "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" name "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" class "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" renderingOptions"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("class "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" name "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("~")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[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(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" value "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" entry "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("is")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("not")]),t._v(" empty "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" entry"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getFieldValue"),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 punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("null")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" errors "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" entry "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("is")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("not")]),t._v(" empty "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" entry"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getErrors"),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 punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("null")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" errorClass "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" renderingOptions"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("errorClass "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("errors"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" fieldCssClasses "),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"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("cssClasses"),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("is")]),t._v(" defined "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("and")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("not")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("null")]),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(".")]),t._v("cssClasses "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[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 delimiter punctuation"}},[t._v("%}")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("namespace")]),t._v(" field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getNamespace"),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 delimiter punctuation"}},[t._v("-%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("isPlainInput"),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 delimiter punctuation"}},[t._v("-%}")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" input"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("raw "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("else")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" fieldHtmlTag "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("hasMultipleLabels"),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(" "),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("fieldset"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("div"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("-%}")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" fieldHtmlTag "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" id "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" id "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("-field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token attr-name"}},[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("field "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getFieldInputFolder"),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 delimiter punctuation"}},[t._v("}}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" class "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" class "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("-%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" fieldCssClasses "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" fieldCssClasses "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("-%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" errors "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" errorClass "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("-%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" required "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v(" required"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter 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 twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("label "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("or")]),t._v(" instructions"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("and")]),t._v(" field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("displayLabel"),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 delimiter punctuation"}},[t._v("-%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("heading"),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 twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" label "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("-%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("hasMultipleLabels"),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 delimiter punctuation"}},[t._v("-%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("legend")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{-")]),t._v(" label"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("raw"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("site"),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 delimiter punctuation"}},[t._v("-}}")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("else")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("-%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("label"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" name "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("for")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" name "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token attr-name"}},[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{-")]),t._v(" label"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("raw"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("site"),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 delimiter punctuation"}},[t._v("-}}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("-%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("-%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" instructions "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" id "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("-instructions"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("instructions"),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 twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" instructions"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("site"),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 operator"}},[t._v("|")]),t._v("raw "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("-%}")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("input"),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 twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("name "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("handle "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("instructions "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("id "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getFieldInputFolder"),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 delimiter punctuation"}},[t._v("}}")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# See all field options\n {{ dump(field) }}\n #}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v('{# Display your errors\n {% include "errors" with {\n errors: errors,\n name: name\n } %}\n #}')])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("-%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endnamespace")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("-%}")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endfor")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n \n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endfor")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("-%}")])]),t._v("\n")])])]),s("h2",{attrs:{id:"example-code-to-manually-manage-all-default-fields-in-your-templates"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#example-code-to-manually-manage-all-default-fields-in-your-templates"}},[t._v("#")]),t._v(" Example code to manually manage all default Fields in your templates")]),t._v(" "),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Prepare our error macro #}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("macro")]),t._v(" errorList"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("errors"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# To display errors, you want to make sure errors exist, \n and then you can loop through and display them #}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" errors "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("ul")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("errors"),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 twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("for")]),t._v(" error "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("in")]),t._v(" errors "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("li")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" error "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endfor")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endmacro")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("from")]),t._v(" _self import errorList "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Get our Form data #}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" form "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" sprout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("forms"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("form"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("contact"),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 delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Get our Form Entry data to manage error states and re-populating field values #}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" submittedEntry "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" sprout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("forms"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getEntry"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("form"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("form")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("method")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),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(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("accept-charset")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("UTF-8"),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 twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" csrfInput"),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 delimiter punctuation"}},[t._v("}}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("action"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sprout-forms/entries/save-entry"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("handle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" form"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("handle "),s("span",{pre:!0,attrs:{class:"token delimiter 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 twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" redirectInput"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("form"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("redirectUri"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("fields"),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 twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" textField "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" form"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("plainText"),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 delimiter punctuation"}},[t._v("%}")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" textField "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("is")]),t._v(" defined "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),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(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("fields-"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" textField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("handle "),s("span",{pre:!0,attrs:{class:"token delimiter 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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("heading"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("label")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("required"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("for")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("fields-"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" textField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("handle "),s("span",{pre:!0,attrs:{class:"token delimiter 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 twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" textField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("name "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("input"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),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(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("fields["),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" textField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("handle "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("]"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" attribute"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("submittedEntry"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" textField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("handle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter 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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" submittedEntry "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("is")]),t._v(" defined "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("error"),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 twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" errorList"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("submittedEntry"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getErrors"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("textField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("handle"),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 delimiter punctuation"}},[t._v("}}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n \n \n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" dropdownField "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" form"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("dropdown"),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 delimiter punctuation"}},[t._v("%}")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# We use the Twig attribute tag to dynamically access our \n field value on the submitted Form Entry #}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" submittedDropdownValue "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" attribute"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("submittedEntry"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" dropdownField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("handle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" dropdownField "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("is")]),t._v(" defined "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),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(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("fields-"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" dropdownField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("handle "),s("span",{pre:!0,attrs:{class:"token delimiter 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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("heading"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("label")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("required"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("for")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("fields-"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" dropdownField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("handle "),s("span",{pre:!0,attrs:{class:"token delimiter 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 twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" dropdownField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("name "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("input"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("select"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("select")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("fields["),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" dropdownField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("handle "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("option")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[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("Select..."),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("for")]),t._v(" option "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("in")]),t._v(" dropdownField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("settings"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("options "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" defaultValue "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" option"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("default "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" option"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("value "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("null")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" selectedDropdownValue "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" submittedDropdownValue "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[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(" submittedDropdownValue "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" defaultValue "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("option")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" option"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("value "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" selectedDropdownValue "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" option"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("value "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("selected")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("selected"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token attr-name"}},[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" option"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("label "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endfor")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" submittedEntry "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("is")]),t._v(" defined "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("error"),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 twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" errorList"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("submittedEntry"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getErrors"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("dropdownField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("handle"),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 delimiter punctuation"}},[t._v("}}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n \n \n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" numberField "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" form"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("number"),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 delimiter punctuation"}},[t._v("%}")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" numberField "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("is")]),t._v(" defined "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),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(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("fields-"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" numberField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("handle "),s("span",{pre:!0,attrs:{class:"token delimiter 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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("heading"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("label")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("for")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("fields-"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" numberField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("handle "),s("span",{pre:!0,attrs:{class:"token delimiter 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 Number Field\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("input"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),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(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("size")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("5"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("fields["),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" numberField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("handle "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("]"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" attribute"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("submittedEntry"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" numberField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("handle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter 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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" submittedEntry "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("is")]),t._v(" defined "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("error"),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 twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" errorList"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("submittedEntry"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getErrors"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("numberField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("handle"),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 delimiter punctuation"}},[t._v("}}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n \n \n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" radioButtonsField "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" form"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("radioButtons"),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 delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" submittedRadioValue "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" attribute"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("submittedEntry"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" radioButtonsField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("handle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" radioButtonsField "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("is")]),t._v(" defined "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),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(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("fields-"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" radioButtonsField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("handle "),s("span",{pre:!0,attrs:{class:"token delimiter 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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("heading"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("label")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("for")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("fields-"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" radioButtonsField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("handle "),s("span",{pre:!0,attrs:{class:"token delimiter 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 Radio Buttons Field\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("input"),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 twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("for")]),t._v(" option "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("in")]),t._v(" radioButtonsField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("settings"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("options "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" defaultValue "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" option"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("default "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" option"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("value "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("null")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" selectedRadioValue "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" submittedRadioValue "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[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(" submittedRadioValue "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" defaultValue "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("label")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("radio"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" option"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("value "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("fields["),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" radioButtonsField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("handle "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("]"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" selectedRadioValue "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" option"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("value "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("checked")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("checked"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token attr-name"}},[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("-%}")])])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" option"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("label "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endfor")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" submittedEntry "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("is")]),t._v(" defined "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("error"),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 twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" errorList"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("submittedEntry"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getErrors"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("radioButtonsField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("handle"),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 delimiter punctuation"}},[t._v("}}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n \n \n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" checkboxesField "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" form"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("checkboxes"),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 delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" submittedCheckboxValues "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" attribute"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("submittedEntry"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" checkboxesField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("handle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" checkboxesField "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("is")]),t._v(" defined "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),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(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("fields-"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" checkboxesField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("handle "),s("span",{pre:!0,attrs:{class:"token delimiter 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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("heading"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("label")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("for")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("fields-"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" checkboxesField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("handle "),s("span",{pre:!0,attrs:{class:"token delimiter 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 twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" checkboxesField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("name "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("input"),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 twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("for")]),t._v(" key"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" option "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("in")]),t._v(" checkboxesField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("settings"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("options "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" defaultValue "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("option"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("default "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("and")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("not")]),t._v(" submittedEntry"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getErrors"),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 operator"}},[t._v("|")]),t._v("length"),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(".")]),t._v("value "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("null")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" submittedCheckbox "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" submittedCheckboxValues"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("options"),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(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" selectedCheckboxValue "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" submittedCheckbox"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("selected "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" submittedCheckbox"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("value "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" defaultValue "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("label")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("checkbox"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" option"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("value "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("checkbox"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("fields["),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" checkboxesField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("handle "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("][]"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" selectedCheckboxValue "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" option"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("value "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("checked")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("checked"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token attr-name"}},[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("-%}")])])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token entity named-entity",title:" "}},[t._v(" ")]),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" option"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("label "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endfor")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" submittedEntry "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("is")]),t._v(" defined "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("error"),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 twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" errorList"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("submittedEntry"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getErrors"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("checkboxesField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("handle"),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 delimiter punctuation"}},[t._v("}}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n \n \n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" multiSelectField "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" form"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("multiSelect"),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 delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" multiSelectValues "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" attribute"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("submittedEntry"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" multiSelectField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("handle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" multiSelectField "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("is")]),t._v(" defined "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),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(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("fields-"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" multiSelectField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("handle "),s("span",{pre:!0,attrs:{class:"token delimiter 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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("heading"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("label")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("for")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("fields-"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" multiSelectField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("handle "),s("span",{pre:!0,attrs:{class:"token delimiter 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 twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" multiSelectField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("name "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("input"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("select")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("multiple")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[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 attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("fields["),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" multiSelectField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("handle "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[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 twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("for")]),t._v(" key"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" option "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("in")]),t._v(" multiSelectField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("settings"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("options "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" defaultValue "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("option"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("default "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("and")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("not")]),t._v(" submittedEntry"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getErrors"),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 operator"}},[t._v("|")]),t._v("length"),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(".")]),t._v("value "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("null")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" submittedMultiSelect "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" multiSelectValues"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("options"),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(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" selectedultiSelectValue "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" submittedMultiSelect"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("selected "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" submittedMultiSelect"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("value "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" defaultValue "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("option")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" option"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("value "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" selectedultiSelectValue "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" option"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("value "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("selected")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("selected"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token attr-name"}},[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("-%}")])])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" option"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("label "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endfor")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" submittedEntry "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("is")]),t._v(" defined "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("error"),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 twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" errorList"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("submittedEntry"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getErrors"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("multiSelectField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("handle"),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 delimiter punctuation"}},[t._v("}}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n \n \n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" textareaField "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" form"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("textarea"),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 delimiter punctuation"}},[t._v("%}")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" textareaField "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("is")]),t._v(" defined "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),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(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("fields-"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" textareaField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("handle "),s("span",{pre:!0,attrs:{class:"token delimiter 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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("heading"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("label")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("for")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("fields-"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" textareaField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("handle "),s("span",{pre:!0,attrs:{class:"token delimiter 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 twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" textareaField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("name "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("input"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("textarea")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("rows")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("4"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("cols")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("50"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("fields["),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" textareaField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("handle "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[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 twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{-")]),t._v(" attribute"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("submittedEntry"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" textareaField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("handle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("-}}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" submittedEntry "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("is")]),t._v(" defined "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("error"),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 twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" errorList"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("submittedEntry"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getErrors"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("textareaField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("handle"),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 delimiter punctuation"}},[t._v("}}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Make sure you add the modifyForm hook to keep Captchas working #}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("hook")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("sproutForms.modifyForm"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("submit"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("submit"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" form"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("submitButtonText "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("is")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("not")]),t._v(" empty "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" form"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("submitButtonText "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("Submit"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("t"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("site"),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 delimiter 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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])])])}),[],!1,null,null,null);a.default=e.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/78.a5b3a563.js b/docs/.vuepress/dist/assets/js/78.a5b3a563.js new file mode 100644 index 00000000..30e7050b --- /dev/null +++ b/docs/.vuepress/dist/assets/js/78.a5b3a563.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[78],{545:function(t,s,a){"use strict";a.r(s);var n=a(34),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",[t._v("Integrations")]),t._v(" "),a("p",[t._v("The Integrations API enables you to provide additional "),a("RouterLink",{attrs:{to:"/forms/integrations.html"}},[t._v("Integrations")]),t._v(" for users to select and configure when creating Forms.")],1),t._v(" "),a("h2",{attrs:{id:"integration-class"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#integration-class"}},[t._v("#")]),t._v(" Integration Class")]),t._v(" "),a("div",{pre:!0},[a("p",[t._v("Building a custom Integration class requires extending "),a("code",[t._v("barrelstrength\\sproutforms\\base\\Integration")]),t._v(".")])]),a("div",{staticClass:"language-php extra-class"},[a("pre",{pre:!0,attrs:{class:"language-php"}},[a("code",[a("span",{pre:!0,attrs:{class:"token php language-php"}},[a("span",{pre:!0,attrs:{class:"token delimiter important"}},[t._v("")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("types")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("CustomIntegration")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("Integrations are available in Sprout Forms for Craft 3.")])])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/79.1b433fc5.js b/docs/.vuepress/dist/assets/js/79.1b433fc5.js new file mode 100644 index 00000000..1434b9dd --- /dev/null +++ b/docs/.vuepress/dist/assets/js/79.1b433fc5.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[79],{544:function(t,e,a){"use strict";a.r(e);var s=a(34),i=Object(s.a)({},(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",[t._v("Default Form Templates")]),t._v(" "),a("p",[t._v("Sprout Forms comes with two Form Templates and one Email Template. We keep the defaults as simple and un-opinionated as we can. You can style the default templates as you see fit or update the templates for your particular project. Forms and Notification Emails are fully customizable.")]),t._v(" "),a("h2",{attrs:{id:"form-templates"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#form-templates"}},[t._v("#")]),t._v(" Form Templates")]),t._v(" "),a("h3",{attrs:{id:"accessible-templates"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#accessible-templates"}},[t._v("#")]),t._v(" Accessible Templates")]),t._v(" "),a("p",[t._v("The Accessible Form Templates are enabled by default. They cover all form output and error states for the default Form Fields and implement several accessibility best practices.")]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("If you want to customize your Form Templates, the Accessible Form Templates may be a good starting point.")])]),t._v(" "),a("h3",{attrs:{id:"basic-templates-legacy"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#basic-templates-legacy"}},[t._v("#")]),t._v(" Basic Templates (Legacy)")]),t._v(" "),a("p",[t._v("The Basic Templates are available for those who may be updating Sprout Forms. When you update, Sprout Forms maintains your existing Form Template settings.")]),t._v(" "),a("p",[t._v("The Basic Templates handle all form output and error states for the default Form Fields.")]),t._v(" "),a("h2",{attrs:{id:"email-templates"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#email-templates"}},[t._v("#")]),t._v(" Email Templates")]),t._v(" "),a("h3",{attrs:{id:"basic-notification"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#basic-notification"}},[t._v("#")]),t._v(" Basic Notification")]),t._v(" "),a("p",[t._v("The Basic Notification Email Templates is designed to loop through all submitted Form Fields and output a simple representation of the submitted data.")]),t._v(" "),a("p",[t._v("This Email Template will be used by default when you create a new Notification Email from the Sprout Forms Notifications tab.")]),t._v(" "),a("h3",{attrs:{id:"custom-templates"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#custom-templates"}},[t._v("#")]),t._v(" Custom Templates")]),t._v(" "),a("p",[t._v("See the "),a("RouterLink",{attrs:{to:"/email/template-overrides.html"}},[t._v("Template Overrides")]),t._v(" docs for additional details.")],1)])}),[],!1,null,null,null);e.default=i.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/8.05ef2363.js b/docs/.vuepress/dist/assets/js/8.05ef2363.js new file mode 100644 index 00000000..1a467723 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/8.05ef2363.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[8],{453:function(t,e,a){t.exports=a.p+"assets/img/sprout-name-single.308cde1b.png"},454:function(t,e,a){t.exports=a.p+"assets/img/sprout-name-multiple.18d4a7d7.png"},455:function(t,e,a){t.exports=a.p+"assets/img/sprout-name-field-settings.0dabba9c.png"},532:function(t,e,a){"use strict";a.r(e);var s=a(34),n=Object(s.a)({},(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",[t._v("Name Field")]),t._v(" "),s("p",[t._v("The Name Field gives you a way to capture your users name with a single input field or manage names in multiple name fields: Prefix, First, Middle, Last, and Suffix.")]),t._v(" "),s("h2",{attrs:{id:"single-field"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#single-field"}},[t._v("#")]),t._v(" Single Field")]),t._v(" "),s("p",[t._v("The Name Field defaults to display a single, international-friendly, field. While only a single field displays, the Name field captures the data from this single field into two fields behind the scenes.")]),t._v(" "),s("p",[s("img",{attrs:{src:a(453),alt:"Name Field - Short Version"}})]),t._v(" "),s("p",[t._v("Everything before the first space is considered the "),s("em",[t._v("First Name")]),t._v(" and everything that comes after the first space is considered the "),s("em",[t._v("Last Name")]),t._v(".")]),t._v(" "),s("h2",{attrs:{id:"multiple-fields"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#multiple-fields"}},[t._v("#")]),t._v(" Multiple Fields")]),t._v(" "),s("p",[t._v("If you have stricter data requirements and are willing to take on the challenge of capturing an international range of name requirements in more structured fields, you can enable the Name Field to display 2 or more fields.")]),t._v(" "),s("p",[s("img",{attrs:{src:a(454),alt:"Name Field - Long Version"}})]),t._v(" "),s("h2",{attrs:{id:"templates"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#templates"}},[t._v("#")]),t._v(" Templates")]),t._v(" "),s("p",[t._v("The Name field returns a Name Model to your Twig template.")]),t._v(" "),s("div",{pre:!0},[s("p",[t._v("For consistency, the "),s("code",[t._v("getFriendlyName()")]),t._v(" and "),s("code",[t._v("getFullName()")]),t._v(" methods return the same as they would if you used them on a Craft User Model.")])]),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Result: First Name #}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" entry"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("nameField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getFriendlyName"),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 delimiter punctuation"}},[t._v("}}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Result: First Name + Last Name #}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" entry"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("nameField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getFullName"),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 delimiter punctuation"}},[t._v("}}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Result: Prefix + First Name + Middle Name + Last Name + Suffix #}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" entry"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("nameField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getFullNameExtended"),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 delimiter punctuation"}},[t._v("}}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Access Name Fields Individually #}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" entry"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("nameField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("prefix "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" entry"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("nameField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("firstName "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" entry"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("nameField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("middleName "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" entry"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("nameField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("lastName "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" entry"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("nameField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("suffix "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n")])])]),s("h2",{attrs:{id:"settings"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#settings"}},[t._v("#")]),t._v(" Settings")]),t._v(" "),s("p",[t._v("Select which combination of fields you wish to display in your settings:")]),t._v(" "),s("p",[s("img",{attrs:{src:a(455),alt:"Name Field - Settings"}})])])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/80.60a44718.js b/docs/.vuepress/dist/assets/js/80.60a44718.js new file mode 100644 index 00000000..b8bca5e4 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/80.60a44718.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[80],{546:function(t,a,s){"use strict";s.r(a);var e=s(34),r=Object(e.a)({},(function(){var t=this,a=t.$createElement,s=t._self._c||a;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",[t._v("Display Errors at top of page")]),t._v(" "),s("div",{pre:!0},[s("p",[t._v("If you would like to display errors at the top of your page, you can access those errors in the "),s("code",[t._v("form.getErrors()")]),t._v(" method.")])]),s("div",{pre:!0},[s("p",[t._v("If your form submission does not validate, your page will reload with a variable that uses the same name as your form handle. If you form handle is "),s("code",[t._v("contact")]),t._v(" your errors will be available to you via "),s("code",[t._v("contact.getErrors()")]),t._v(".")])]),s("p",[t._v("You can display error messaging at the top of your page in several ways.")]),t._v(" "),s("h2",{attrs:{id:"display-a-global-error-message"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#display-a-global-error-message"}},[t._v("#")]),t._v(" Display a global error message")]),t._v(" "),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" contact "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("is")]),t._v(" defined "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("and")]),t._v(" contact"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getErrors"),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 operator"}},[t._v("|")]),t._v("length "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n Oh no! Errors.\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n")])])]),s("div",{pre:!0},[s("p",[t._v("Your FormModel will only be defined if your form submission fails, so you'll need to ensure your FormModel is available before you check for errors by checking "),s("code",[t._v("if contact is defined")]),t._v(". If the FormModel exists, you can then test if there are any errors by checking to see if the errors array has any items: "),s("code",[t._v("contact.getErrors()|length")]),t._v(".")])]),s("h2",{attrs:{id:"loop-through-all-error-messages-at-the-top-of-your-form"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#loop-through-all-error-messages-at-the-top-of-your-form"}},[t._v("#")]),t._v(" Loop through all error messages at the top of your form")]),t._v(" "),s("p",[t._v("To display all errors at the top of your form, you'll need to loop through your error object. Your error object is two levels deep. At the top level, is an array of the fields that have errors and within each field in the array is a list of errors associated with that field.")]),t._v(" "),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" contact "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("is")]),t._v(" defined "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("and")]),t._v(" contact"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getErrors"),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(" length "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("for")]),t._v(" errors "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("in")]),t._v(" contact"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getErrors"),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 delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("ul")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("errors"),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 twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("for")]),t._v(" error "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("in")]),t._v(" errors "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("li")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" error "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endfor")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endfor")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n")])])]),s("h2",{attrs:{id:"access-errors-with-dynamic-form-handles"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#access-errors-with-dynamic-form-handles"}},[t._v("#")]),t._v(" Access errors with dynamic form handles")]),t._v(" "),s("p",[t._v("If you are dynamically displaying a form on the page (perhaps via a Forms Relations field), you may not know the name of the form variable to use in the template. To access the error you will need to pass your entire FormModel to Twig's "),s("a",{attrs:{href:"http://twig.sensiolabs.org/doc/functions/attribute.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("attribute"),s("OutboundLink")],1),t._v(" tag along with the method that you want")]),t._v(" "),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Identify your SproutForms_FormModel #}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" form "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" entry"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("formFieldHandle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("first"),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 delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Use the `attribute` tag to access the `getErrors()` method #}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" form "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("is")]),t._v(" defined "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("and")]),t._v(" attribute"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("form"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("getErrors"),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 operator"}},[t._v("|")]),t._v("length "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n Errors!\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n")])])])])}),[],!1,null,null,null);a.default=r.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/81.a36e5dc2.js b/docs/.vuepress/dist/assets/js/81.a36e5dc2.js new file mode 100644 index 00000000..48f1f459 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/81.a36e5dc2.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[81],{553:function(t,s,a){"use strict";a.r(s);var n=a(34),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",[t._v("Element API")]),t._v(" "),a("p",[t._v("Sprout Forms can be used in headless mode using Craft's "),a("a",{attrs:{href:"https://plugins.craftcms.com/element-api",target:"_blank",rel:"noopener noreferrer"}},[t._v("Element API"),a("OutboundLink")],1),t._v(" plugin.")]),t._v(" "),a("p",[t._v("You will need to:")]),t._v(" "),a("div",{pre:!0},[a("ul",[a("li",[t._v("Install the Element API plugin")]),t._v(" "),a("li",[t._v("Add a "),a("code",[t._v("config/element-api.php")]),t._v(" file to your project's config folder")]),t._v(" "),a("li",[t._v("Build your API")])])]),a("p",[t._v("The following example creates two endpoints.")]),t._v(" "),a("p",[t._v("The first returns a Form Element that can be used by your front-end framework to output the form. You can use the Default Form Templates as an example of how the HTML needs to be built for submission and remember to submit the form using a CSRF token. This example returns the field data and the field folder name which can be used as a unique identifier when determining which field template to display on the front-end.")]),t._v(" "),a("p",[t._v("The second returns a list of unread Form Entry Elements. You can customize the query however you'd like, just like any Element Query.")]),t._v(" "),a("div",{staticClass:"language-php extra-class"},[a("pre",{pre:!0,attrs:{class:"language-php"}},[a("code",[a("span",{pre:!0,attrs:{class:"token php language-php"}},[a("span",{pre:!0,attrs:{class:"token delimiter important"}},[t._v("")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'api/sproutforms/.json'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$formId")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'elementType'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("Form")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'criteria'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'id'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$formId")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'one'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'transformer'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name type-declaration"}},[t._v("Form")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$form")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("foreach")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$form")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getFieldLayout")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getTabs")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$tab")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("foreach")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$tab")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getFields")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$field")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$fields")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'field'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$field")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'folder'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$field")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getFieldInputFolder")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$tabs")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'title'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$tab")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("name")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'fields'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$fields")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'handle'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$form")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("handle")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'tabs'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$tabs")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'api/sproutforms//entries.json'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$formId")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'elementType'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("Entry")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'criteria'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'formId'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$formId")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'status'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'unread'")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'paginate'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'transformer'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name type-declaration"}},[t._v("Entry")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$entry")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'id'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$entry")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'dateCreated'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$entry")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("dateCreated")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'title'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$entry")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("title")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'customField'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$entry")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("customField")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/82.bb0b5758.js b/docs/.vuepress/dist/assets/js/82.bb0b5758.js new file mode 100644 index 00000000..677c582c --- /dev/null +++ b/docs/.vuepress/dist/assets/js/82.bb0b5758.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[82],{551:function(t,a,s){"use strict";s.r(a);var n=s(34),e=Object(n.a)({},(function(){var t=this,a=t.$createElement,s=t._self._c||a;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",[t._v("Entries")]),t._v(" "),s("p",[t._v("An Entry Element is created when a form is submitted. If validation fails, the Entry Element will be returned to the template with errors. If validation succeeds, the Entry Element will be saved to the database and the Form submission will redirect to the Redirect URL.")]),t._v(" "),s("h2",{attrs:{id:"entry-title"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#entry-title"}},[t._v("#")]),t._v(" Entry Title")]),t._v(" "),s("p",[t._v("The Entry Title can be defined in a Form's "),s("strong",[t._v("Title Format")]),t._v(" setting.")]),t._v(" "),s("p",[t._v("All information contained in the Title will also be searchable. You may use the same syntax here as you would with the Title Format setting in your Sections. For example:")]),t._v(" "),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[t._v("{dateCreated|date('Ymd')} {fullName}\n")])])]),s("h2",{attrs:{id:"editing-entries"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#editing-entries"}},[t._v("#")]),t._v(" Editing Entries")]),t._v(" "),s("p",[t._v("Users can edit Form Entries in front-end templates. To allow users to edit Form Entries you will need to:")]),t._v(" "),s("ol",[s("li",[t._v("Enable Settings → General → Allow Forms to be edited in front-end templates")]),t._v(" "),s("li",[t._v("Track the ID (or some other representative information) of the User who you want to allow to edit the form and confirm the person editing the form is the person you think it is.")]),t._v(" "),s("li",[t._v("Populate the Entry Form using the setEntry tag")])]),t._v(" "),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Get an instance of the your Form #}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" form "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" sprout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("forms"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getForm"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("application"),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 delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Get an instance of the Entry you'll be allowing a user to edit #}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" entry "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" sprout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("forms"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getEntryById"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("123")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Set the `entry` variable so your Form Templates know how to populate the fields with existing values #}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("do")]),t._v(" sprout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("forms"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("setEntry"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("form"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" entry"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Output your form as usual #}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" sprout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("forms"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("displayForm"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("application"),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 delimiter punctuation"}},[t._v("}}")])]),t._v("\n")])])]),s("h2",{attrs:{id:"templating"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#templating"}},[t._v("#")]),t._v(" Templating")]),t._v(" "),s("p",[t._v("You can fetch form Entries using the "),s("a",{attrs:{href:"http://buildwithcraft.com/docs/templating/elementcriteriamodel",target:"_blank",rel:"noopener noreferrer"}},[t._v("same options you have for all Elements"),s("OutboundLink")],1),t._v(" as described in the Craft documentation.")]),t._v(" "),s("h3",{attrs:{id:"entries"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#entries"}},[t._v("#")]),t._v(" entries")]),t._v(" "),s("div",{pre:!0},[s("p",[t._v("The "),s("code",[t._v("entries")]),t._v(" tag will let you get all entries for a specific form.")])]),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Get all entries for a specific form #}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("for")]),t._v(" formEntry "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("in")]),t._v(" sprout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("forms"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("entries\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("formHandle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("contact"),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("all"),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 delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" formEntry"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("title "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endfor")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Limit the results to the first 3 entries #}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("for")]),t._v(" formEntry "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("in")]),t._v(" sprout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("forms"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("entries"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("formHandle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("contact"),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("limit"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),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("order"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("elements.dateCreated asc"),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("all"),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 delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" formEntry"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("title "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endfor")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Get the oldest Form Entry from the Contact Form #}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" formEntry "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" sprout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("forms"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("entries\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("formHandle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("contact"),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("inReverse"),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("one"),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 delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" formEntry"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("title "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Output the total number of Form Entries from the Contact Form #}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" sprout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("forms"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("entries"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("formHandle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("contact"),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("count"),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 delimiter punctuation"}},[t._v("}}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Output Entries with a specific status by Status ID or by Status Handle #}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("for")]),t._v(" formEntry "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("in")]),t._v(" sprout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("forms"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("entries\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("formHandle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("contact"),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("statusId"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),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("all"),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 delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" formEntry"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("title "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endfor")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("for")]),t._v(" formEntry "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("in")]),t._v(" sprout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("forms"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("entries\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("formHandle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("contact"),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("status"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("pending"),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("all"),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 delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" formEntry"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("title "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endfor")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n")])])]),s("h3",{attrs:{id:"lastentry"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#lastentry"}},[t._v("#")]),t._v(" lastEntry")]),t._v(" "),s("div",{pre:!0},[s("p",[t._v("When a form has been submitted successfully, the user will be redirected to wherever the Redirect URL setting points to. To display content from the submitted form after the form has been submitted, you can use the "),s("code",[t._v("lastEntry()")]),t._v(" tag.")])]),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Check for the last entry submitted #}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" lastEntry "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" sprout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("forms"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("lastEntry"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("form"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("id"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" lastEntry "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# If the last entry exists, we can output any of the variables\n that were present in the form submission. #}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("Thanks "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("strong")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" lastEntry"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("fullName "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("! We'll be in touch soon! Did you know you can display any of the values that were submitted in the form? Here's a list of all the values in the last form submission:"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n Full Name: "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("em")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" lastEntry"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("fullName "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("br")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n Email: "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("em")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" lastEntry"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("email "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("br")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n Message: "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("em")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" lastEntry"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("message "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("br")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n")])])]),s("h3",{attrs:{id:"getentry"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getentry"}},[t._v("#")]),t._v(" getEntry")]),t._v(" "),s("div",{pre:!0},[s("p",[t._v("The "),s("code",[t._v("getEntry")]),t._v(" tag retrieves the Entry Element of the active submission. If an active Form Entry doesn't exist, it returns an empty Entry Element.")])]),s("div",{pre:!0},[s("p",[t._v("The "),s("code",[t._v("getEntry")]),t._v(" method is useful if you need to setup your template to manage your Form submission values and errors but you don't know the handle of your Form. This scenario can arise when you are using the Sprout Forms Relations field to dynamically output a form in your template.")])]),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" submittedEntry "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" sprout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("forms"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getEntry"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("form"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" submittedEntry"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getErrors"),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 operator"}},[t._v("|")]),t._v("length "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Display All Errors at the top of your page (assumes you have an errorList macro) #}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("for")]),t._v(" errors "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("in")]),t._v(" submittedEntry"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getErrors"),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 delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" errorList"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("errors"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endfor")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n")])])]),s("h3",{attrs:{id:"setentry"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#setentry"}},[t._v("#")]),t._v(" setEntry")]),t._v(" "),s("div",{pre:!0},[s("p",[t._v("The "),s("code",[t._v("setEntry")]),t._v(" method populates the Entry Model that is used by the "),s("code",[t._v("displayForm")]),t._v(" tag.")])]),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("do")]),t._v(" sprout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("forms"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("setEntry"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("form"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" entry"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" sprout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("forms"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("displayForm"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("application"),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 delimiter punctuation"}},[t._v("}}")])]),t._v("\n")])])]),s("h2",{attrs:{id:"entry-relations-field"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#entry-relations-field"}},[t._v("#")]),t._v(" Entry Relations Field")]),t._v(" "),s("p",[t._v("Sprout Forms adds an Entry Relations Field to Craft CMS:")]),t._v(" "),s("ul",[s("li",[s("strong",[t._v("Entry (Sprout Forms)")])])])])}),[],!1,null,null,null);a.default=e.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/83.46fbf1b4.js b/docs/.vuepress/dist/assets/js/83.46fbf1b4.js new file mode 100644 index 00000000..581045e7 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/83.46fbf1b4.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[83],{550:function(t,s,a){"use strict";a.r(s);var n=a(34),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",[t._v("Events & Hooks")]),t._v(" "),a("p",[t._v("Sprout Forms can be extended using the following Events and Hooks.")]),t._v(" "),a("h2",{attrs:{id:"events"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#events"}},[t._v("#")]),t._v(" Events")]),t._v(" "),a("h3",{attrs:{id:"before-a-form-entry-is-saved"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#before-a-form-entry-is-saved"}},[t._v("#")]),t._v(" Before a Form Entry is saved")]),t._v(" "),a("p",[t._v("Raised before an entry is saved.")]),t._v(" "),a("div",{staticClass:"language-php extra-class"},[a("pre",{pre:!0,attrs:{class:"language-php"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token package"}},[t._v("barrelstrength"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("sproutforms"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("services"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("Entries")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token package"}},[t._v("barrelstrength"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("sproutforms"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("elements"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("Entry")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token package"}},[t._v("barrelstrength"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("sproutforms"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("events"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("OnBeforeSaveEntryEvent")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("init")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword static-context"}},[t._v("parent")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("Event")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("on")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("Entries")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("Entry")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("EVENT_BEFORE_SAVE")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name type-declaration"}},[t._v("OnBeforeSaveEntryEvent")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$event")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("Craft")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$app")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("request")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("isSiteRequest")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// A Form Entry Element has been saved from a Front-end Form Submission")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Access the Form Entry Element via: $event->sender")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("Craft")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$app")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("request")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("isCpRequest")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// A Form Entry Element has been updated from the Control Panel")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Access the Form Entry Element via: $event->sender")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),a("h4",[t._v("Params")]),t._v(" "),a("ul",[a("li",[a("em",[t._v("entry")]),t._v(" – The submitted SproutForms_EntryModel")]),t._v(" "),a("li",[a("em",[t._v("isNewEntry")]),t._v(" - A boolean indicating whether this is a brand new form entry")])]),t._v(" "),a("h3",{attrs:{id:"after-a-form-entry-is-saved"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#after-a-form-entry-is-saved"}},[t._v("#")]),t._v(" After a Form Entry is Saved")]),t._v(" "),a("p",[t._v("Raised just after an entry is saved")]),t._v(" "),a("div",{staticClass:"language-php extra-class"},[a("pre",{pre:!0,attrs:{class:"language-php"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token package"}},[t._v("barrelstrength"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("sproutforms"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("elements"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("Entry")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token package"}},[t._v("yii"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("base"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("Event")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token package"}},[t._v("Craft")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("init")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword static-context"}},[t._v("parent")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("Event")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("on")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("Entry")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("Entry")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("EVENT_AFTER_SAVE")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name type-declaration"}},[t._v("Event")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$event")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("Craft")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$app")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("request")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("isSiteRequest")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// The Form Entry Element is available via the $event->sender attribute ")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$formEntryElement")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$event")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("sender")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("Craft")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$app")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("request")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("isCpRequest")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$formEntryElement")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$event")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("sender")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),a("h4",[t._v("Params")]),t._v(" "),a("ul",[a("li",[a("em",[t._v("entry")]),t._v(" – The submitted SproutForms_EntryModel")]),t._v(" "),a("li",[a("em",[t._v("isNewEntry")]),t._v(" - A boolean indicating whether this is a brand new form entry")])]),t._v(" "),a("h2",{attrs:{id:"hooks"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#hooks"}},[t._v("#")]),t._v(" Hooks")]),t._v(" "),a("h3",{attrs:{id:"template-hook"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#template-hook"}},[t._v("#")]),t._v(" Template Hook")]),t._v(" "),a("div",{pre:!0},[a("p",[t._v("The "),a("code",[t._v("sproutForms.modifyForm")]),t._v(" Template Hook gives plugins a chance to dynamically add content to a form template. The hook will output content between the "),a("code",[t._v("")]),t._v(" tags when using the "),a("code",[t._v("displayForm")]),t._v(" tag.")])]),a("div",{staticClass:"language-php extra-class"},[a("pre",{pre:!0,attrs:{class:"language-php"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("init")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword static-context"}},[t._v("parent")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("init")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("Craft")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$app")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("view")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("hook")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'sproutForms.modifyForm'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$context")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Prepare HTML for your template")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$html")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/84.390cbdec.js b/docs/.vuepress/dist/assets/js/84.390cbdec.js new file mode 100644 index 00000000..56144a18 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/84.390cbdec.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[84],{557:function(e,t,a){"use strict";a.r(t);var o=a(34),r=Object(o.a)({},(function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",[e._v("FAQ")]),e._v(" "),a("p",[e._v("Frequently asked questions about Sprout Forms.")]),e._v(" "),a("h2",{attrs:{id:"i-am-using-the-available-captchas-but-i-am-still-getting-spam"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#i-am-using-the-available-captchas-but-i-am-still-getting-spam"}},[e._v("#")]),e._v(" I am using the available Captchas but I am still getting SPAM!")]),e._v(" "),a("p",[e._v("Spam strategies are always evolving and sometimes the conventions you use on your website will also need to evolve. The default options provided don't depend on third-party services however, often, third-party services have a larger network of data to work with to provide effective spam prevention measures.")]),e._v(" "),a("ul",[a("li",[a("a",{attrs:{href:"https://plugins.craftcms.com/sprout-forms-google-recaptcha",target:"_blank",rel:"noopener noreferrer"}},[e._v("Google ReCAPTCHA for Sprout Forms"),a("OutboundLink")],1),e._v(". If you continue to see spam after implementing ReCAPTCHA with the default settings, there is a setting to increase the security level.")]),e._v(" "),a("li",[e._v("Cloudflare offers several "),a("a",{attrs:{href:"https://support.cloudflare.com/hc/en-us/articles/115002059131-Understanding-your-Site-Protection-Options",target:"_blank",rel:"noopener noreferrer"}},[e._v("Site Protection Options"),a("OutboundLink")],1),e._v(", some of which are free, if you route your DNS through Cloudflare")])]),e._v(" "),a("p",[e._v("To better understand your spam traffic, you can enable Spam tracking and Sprout Forms will log all Failed Captcha error messages as well as capture meta information about each submission such as Remote IP Address, Referrer URL, and User Agent. The Spam Log report provides an overview of all of this information that can be used to analyze the data and detect trends.")]),e._v(" "),a("h2",{attrs:{id:"how-do-i-validate-an-email-address-phone-number-or-url"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#how-do-i-validate-an-email-address-phone-number-or-url"}},[e._v("#")]),e._v(" How do I validate an Email Address, Phone Number, or URL?")]),e._v(" "),a("p",[e._v("Use the Sprout Forms Email, Phone, and URL fields.")]),e._v(" "),a("h2",{attrs:{id:"how-do-i-export-my-form-entries-to-csv"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#how-do-i-export-my-form-entries-to-csv"}},[e._v("#")]),e._v(" How do I export my form Entries to CSV?")]),e._v(" "),a("div",{pre:!0},[a("p",[e._v("Sprout Forms for Craft 3 includes a native Sprout Reports integration to create and export reports for Sprout Forms Data Sources without ever needing to install Sprout Reports. Visit the "),a("code",[e._v("Sprout Forms -> Reports")]),e._v(" tab in Sprout Forms to create reports and export CSVs.")])]),a("h2",{attrs:{id:"my-form-submissions-are-not-working-my-submitted-form-entries-never-appear-in-my-database-what-is-broken"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#my-form-submissions-are-not-working-my-submitted-form-entries-never-appear-in-my-database-what-is-broken"}},[e._v("#")]),e._v(" My form submissions are not working. My submitted form entries never appear in my database. What is broken?")]),e._v(" "),a("p",[e._v("When form submissions never make it to the database, usually something else is blocking them.")]),e._v(" "),a("p",[e._v("Do you have any spam plugins installed? Try disabling them or making their settings less strict.")]),e._v(" "),a("p",[e._v("Are your forms triggering any other events that may be causing errors? Spam filters or email notifications that are failing could affect your form entries from reaching the database.")]),e._v(" "),a("p",[e._v("Check your logs and see if there are any errors:")]),e._v(" "),a("p",[e._v("In your files:")]),e._v(" "),a("ul",[a("li",[e._v("storage/runtime/logs/web.log")])]),e._v(" "),a("p",[e._v("Or in your Control Panel:")]),e._v(" "),a("ul",[a("li",[e._v("/admin/utils/logs")])]),e._v(" "),a("h2",{attrs:{id:"my-form-notification-emails-are-not-being-sent-or-my-form-notification-emails-are-sometimes-being-sent-but-behaving-erratically"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#my-form-notification-emails-are-not-being-sent-or-my-form-notification-emails-are-sometimes-being-sent-but-behaving-erratically"}},[e._v("#")]),e._v(" My form notification emails are not being sent. Or, my form notification emails are sometimes being sent but behaving erratically.")]),e._v(" "),a("p",[e._v("The most frequent issue that causes notification emails to not be sent or behave erratically is the selected Email Protocol. By default, this is usually set to PHP Mail. PHP Mail and Sendmail are often misconfigured on local computers and may be configured in a variety of different ways by hosting providers. They also do not provide much information to help troubleshoot what might be going wrong.")]),e._v(" "),a("p",[e._v("The first step necessary to better troubleshoot why notifications are not behaving as expected is to update your settings to a proper SMTP Protocol. "),a("a",{attrs:{href:"https://mandrill.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Mandrill"),a("OutboundLink")],1),e._v(" or "),a("a",{attrs:{href:"https://www.mailgun.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("MailGun"),a("OutboundLink")],1),e._v(" are good options and MailGun has a free plan which allows you to send up to 10,000 emails a month, if cost is a concern. Once you are sending email via Mandrill and MailGun, they also can provide more information on what is happening to your email after it is being sent.")]),e._v(" "),a("p",[e._v("Another decent option to troubleshoot with is Gmail. While Gmail doesn't provide as much information on how emails are behaving after they are sent, and can sometimes behave in unintuitive ways if you are sending and receiving from the same Gmail address, it is more reliable than PHP Mail and Sendmail and most people have a Gmail account.")])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/85.d47567d5.js b/docs/.vuepress/dist/assets/js/85.d47567d5.js new file mode 100644 index 00000000..1396b234 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/85.d47567d5.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[85],{552:function(t,e,l){"use strict";l.r(e);var i=l(34),a=Object(i.a)({},(function(){var t=this,e=t.$createElement,l=t._self._c||e;return l("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[l("h1",[t._v("Form Fields")]),t._v(" "),l("p",[t._v("Sprout Forms includes over 20 Form Fields and can be extended to add additional "),l("RouterLink",{attrs:{to:"/forms/custom-form-fields.html"}},[t._v("Custom Form Fields")]),t._v(". Available Form Fields appear in the sidebar while editing a Form and one or more instances of a Form Field can be dragged to the Field Layout.")],1),t._v(" "),l("p",[t._v("Below is a list of each default Form Field. Some fields are exclusive to Sprout Forms as Front-end Form Fields and other Fields are both Front-end Form Fields and can also be used via Sprout Fields as custom Fields within Craft field layouts as well. For this reason, usage of some of these fields is documented here in the Sprout Forms documentation and other fields may be documented in the Sprout Fields documentation.")]),t._v(" "),l("h2",{attrs:{id:"default-fields"}},[l("a",{staticClass:"header-anchor",attrs:{href:"#default-fields"}},[t._v("#")]),t._v(" Default Fields")]),t._v(" "),l("h3",{attrs:{id:"standard-fields"}},[l("a",{staticClass:"header-anchor",attrs:{href:"#standard-fields"}},[t._v("#")]),t._v(" Standard Fields")]),t._v(" "),l("div",{staticClass:"table"},[l("table",[l("thead",[l("tr",[l("th",{staticStyle:{"text-align":"left"}},[t._v("Sprout Forms")]),t._v(" "),l("th",{staticStyle:{"text-align":"left"}},[t._v("Sprout Fields")]),t._v(" "),l("th",{staticStyle:{"text-align":"left"}},[t._v("Craft CMS")])])]),t._v(" "),l("tbody",[l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Single Line")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("–")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("Plain Text")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Paragraph")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("–")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("Plain Text")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Multiple Choice")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("–")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("Radio Buttons")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Dropdown")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("–")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("Dropdown")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Checkboxes")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("–")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("Checkboxes")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Number")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("–")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("Number")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("File Upload")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("–")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("Assets")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Section Heading")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("–")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("–")])])])])]),t._v(" "),l("h3",{attrs:{id:"special-fields"}},[l("a",{staticClass:"header-anchor",attrs:{href:"#special-fields"}},[t._v("#")]),t._v(" Special Fields")]),t._v(" "),l("div",{staticClass:"table"},[l("table",[l("thead",[l("tr",[l("th",{staticStyle:{"text-align":"left"}},[t._v("Sprout Forms")]),t._v(" "),l("th",{staticStyle:{"text-align":"left"}},[t._v("Sprout Fields")]),t._v(" "),l("th",{staticStyle:{"text-align":"left"}},[t._v("Craft CMS")])])]),t._v(" "),l("tbody",[l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Name")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[l("RouterLink",{attrs:{to:"/fields/name-field.html"}},[t._v("Name")])],1),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("–")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[l("RouterLink",{attrs:{to:"/forms/opt-in-field.html"}},[t._v("Opt-in")])],1),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("–")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("–")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Email")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[l("RouterLink",{attrs:{to:"/fields/email-field.html"}},[t._v("Email")])],1),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("Email")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[l("RouterLink",{attrs:{to:"/forms/email-dropdown-field.html"}},[t._v("Email Dropdown")])],1),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("–")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("–")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("URL")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[l("RouterLink",{attrs:{to:"/fields/url-field.html"}},[t._v("URL")])],1),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("URL")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Phone")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[l("RouterLink",{attrs:{to:"/fields/phone-field.html"}},[t._v("Phone")])],1),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("Phone")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Address")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[l("RouterLink",{attrs:{to:"/fields/address-field.html"}},[t._v("Address")])],1),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("–")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Date/Time")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("–")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("Date/Time")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("–")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[l("RouterLink",{attrs:{to:"/fields/gender-field.html"}},[t._v("Gender")])],1),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("–")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Custom HTML")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[l("RouterLink",{attrs:{to:"/fields/notes-field.html"}},[t._v("Notes")])],1),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("–")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Private Notes")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("–")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("–")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Multi-Select")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("–")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("Multi-select")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Regex")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[l("RouterLink",{attrs:{to:"/fields/regular-expression-field.html"}},[t._v("Regular Expression")])],1),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("–")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[l("RouterLink",{attrs:{to:"/forms/hidden-field.html"}},[t._v("Hidden")])],1),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[l("RouterLink",{attrs:{to:"/fields/predefined-field.html"}},[t._v("Predefined")])],1),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("–")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[l("RouterLink",{attrs:{to:"/forms/invisible-field.html"}},[t._v("Invisible")])],1),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[l("RouterLink",{attrs:{to:"/fields/predefined-field.html"}},[t._v("Predefined")])],1),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("–")])])])])]),t._v(" "),l("h3",{attrs:{id:"relations-fields"}},[l("a",{staticClass:"header-anchor",attrs:{href:"#relations-fields"}},[t._v("#")]),t._v(" Relations Fields")]),t._v(" "),l("div",{staticClass:"table"},[l("table",[l("thead",[l("tr",[l("th",{staticStyle:{"text-align":"left"}},[t._v("Sprout Forms")]),t._v(" "),l("th",{staticStyle:{"text-align":"left"}},[t._v("Sprout Fields")]),t._v(" "),l("th",{staticStyle:{"text-align":"left"}},[t._v("Craft CMS")])])]),t._v(" "),l("tbody",[l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Categories")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("–")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("Categories")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Entries")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("–")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("Entries")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Tags")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("–")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("Tags")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("Users")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("–")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("Users")])])])])]),t._v(" "),l("h2",{attrs:{id:"field-settings"}},[l("a",{staticClass:"header-anchor",attrs:{href:"#field-settings"}},[t._v("#")]),t._v(" Field Settings")]),t._v(" "),l("p",[t._v("Each individual Form Field can provide settings that are unique to that Form Field to manage the field's output and validation. Some Field Settings are standardized by Sprout Forms and available to each field. These include the settings:")]),t._v(" "),l("ul",[l("li",[t._v("Required")]),t._v(" "),l("li",[t._v("Name")]),t._v(" "),l("li",[t._v("Handle")]),t._v(" "),l("li",[t._v("Instructions")]),t._v(" "),l("li",[t._v("CSS Classes")]),t._v(" "),l("li",[t._v("Section")])]),t._v(" "),l("h3",{attrs:{id:"required-fields"}},[l("a",{staticClass:"header-anchor",attrs:{href:"#required-fields"}},[t._v("#")]),t._v(" Required Fields")]),t._v(" "),l("div",{pre:!0},[l("p",[l("strong",[t._v("Front-end Validation")]),t._v(": Fields that are marked as required will output the "),l("code",[t._v("required")]),t._v(" attribute on their respective input fields. Browsers that support constraint validation will prevent the web form from being submitted if a required field doesn't have a value.")])]),l("p",[l("strong",[t._v("Server-side Validation")]),t._v(": Required fields that are submitted without a value will cause form submission to fail and return a user to the form. An error will be added to the active Form Element for each field that fails to validate.")])])}),[],!1,null,null,null);e.default=a.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/86.b4f4b4f6.js b/docs/.vuepress/dist/assets/js/86.b4f4b4f6.js new file mode 100644 index 00000000..ca5c228f --- /dev/null +++ b/docs/.vuepress/dist/assets/js/86.b4f4b4f6.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[86],{554:function(t,a,s){"use strict";s.r(a);var e=s(34),n=Object(e.a)({},(function(){var t=this,a=t.$createElement,s=t._self._c||a;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",[t._v("Forms")]),t._v(" "),s("p",[t._v("Form Elements allow users to create and manage single and multi-page online forms within Craft CMS. Forms can be submit via AJAX or via a standard page request. Content authors can add "),s("RouterLink",{attrs:{to:"/forms/form-fields.html"}},[t._v("Form Fields")]),t._v(", tabs, and customize a form's settings such as a custom Title Format, Success and Error messages, Redirect behavior, and Submit Button text.")],1),t._v(" "),s("p",[t._v("When forms are submitted, a form "),s("RouterLink",{attrs:{to:"/forms/entries.html"}},[t._v("Entry")]),t._v(" will be created in your Craft database. Send "),s("RouterLink",{attrs:{to:"/forms/notifications.html"}},[t._v("Notification Emails")]),t._v(" to confirm receipt with the user or notify admins that a new Entry is ready for review. Run and export "),s("RouterLink",{attrs:{to:"/forms/reports.html"}},[t._v("Reports")]),t._v(" to learn more.")],1),t._v(" "),s("h2",{attrs:{id:"form-templates"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#form-templates"}},[t._v("#")]),t._v(" Form Templates")]),t._v(" "),s("p",[t._v("Forms are displayed on your website using Form Templates. Sprout Forms comes with two "),s("RouterLink",{attrs:{to:"/forms/default-form-templates.html"}},[t._v("Default Form Templates")]),t._v(" and your web team can customize and style those templates using "),s("RouterLink",{attrs:{to:"/forms/template-overrides.html"}},[t._v("Template Overrides")]),t._v(" or by building a "),s("RouterLink",{attrs:{to:"/forms/custom-form-templates.html"}},[t._v("Custom Form Template")]),t._v(" integration.")],1),t._v(" "),s("p",[t._v("Front-end validation, error states, accessibility, and submitting your form data will be managed from your Form Templates.")]),t._v(" "),s("p",[t._v("Form Templates can be set globally or customized on a per-form basis. You can switch between Form Templates via the Form Templates dropdown field in the global settings or (if enabled) on an individual form's settings.")]),t._v(" "),s("h2",{attrs:{id:"templating"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#templating"}},[t._v("#")]),t._v(" Templating")]),t._v(" "),s("p",[t._v("To make a form available to your users, you will need to display it in your templates. This can be done for a specific form or, for scenarios such as landing pages, you can let your content authors select or build a custom form for a specific page.")]),t._v(" "),s("h3",{attrs:{id:"a-specific-form"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#a-specific-form"}},[t._v("#")]),t._v(" A specific form")]),t._v(" "),s("p",[t._v("Display a specific form on a specific page in your templates like so:")]),t._v(" "),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" sprout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("forms"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("displayForm"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("contactForm"),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 delimiter punctuation"}},[t._v("}}")])]),t._v("\n")])])]),s("h3",{attrs:{id:"a-chosen-form"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#a-chosen-form"}},[t._v("#")]),t._v(" A chosen form")]),t._v(" "),s("p",[t._v("Add a Form Relations Field to a Field Layout to allow a content author to select any available Form to display on a particular page.")]),t._v(" "),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" formHandle "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" entry"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("formFieldHandle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("one"),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("handle "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" sprout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("forms"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("displayForm"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v(" formHandle "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n")])])]),s("h3",{attrs:{id:"template-tags"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#template-tags"}},[t._v("#")]),t._v(" Template Tags")]),t._v(" "),s("div",{pre:!0},[s("p",[t._v("While the primary tag you will use in your templates is the "),s("code",[t._v("displayForm")]),t._v(" tag, there are several tags to be aware of if you begin using "),s("RouterLink",{pre:!0,attrs:{to:"/forms/template-overrides.html"}},[t._v("Template Overrides")]),t._v(" or get into more advanced use cases.")],1)]),s("h4",[t._v("form")]),t._v(" "),s("div",{pre:!0},[s("p",[t._v("You can access your Form Element directly using the "),s("code",[t._v("form")]),t._v(" tag.")])]),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Returns a barrelstrength\\sproutforms\\elements\\Form #}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" form "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" sprout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("forms"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("form"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("contact"),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 delimiter punctuation"}},[t._v("%}")])]),t._v("\n")])])]),s("h4",[t._v("displayForm")]),t._v(" "),s("div",{pre:!0},[s("p",[t._v("The "),s("code",[t._v("displayForm")]),t._v(" tag renders the HTML for all files defined in your Form Templates.")])]),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" sprout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("forms"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("displayForm"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("contactForm"),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 delimiter punctuation"}},[t._v("}}")])]),t._v("\n")])])]),s("h4",[t._v("displayTab")]),t._v(" "),s("div",{pre:!0},[s("p",[t._v("The "),s("code",[t._v("displayTab")]),t._v(" tag is called within the "),s("code",[t._v("displayForm")]),t._v(" tag and renders each individual tab defined in your form and all fields within it.")])]),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("for")]),t._v(" tab "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("in")]),t._v(" form"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getFieldLayout"),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("getTabs"),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 delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" sprout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("forms"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("displayTab"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("form"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" tab"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("id"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" renderingOptions"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endfor")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n")])])]),s("h4",[t._v("displayField")]),t._v(" "),s("div",{pre:!0},[s("p",[t._v("The "),s("code",[t._v("displayField")]),t._v(" tag is called within the "),s("code",[t._v("displayTab")]),t._v(" tag and renders each individual field defined in your Tab's Field Layout.")])]),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" layoutFields "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" tab"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getFields"),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 delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("for")]),t._v(" field "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("in")]),t._v(" layoutFields "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("-%}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" sprout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("forms"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("displayField"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("form"),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(" renderingOptions"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endfor")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n")])])]),s("h2",{attrs:{id:"form-relations-field"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#form-relations-field"}},[t._v("#")]),t._v(" Form Relations Field")]),t._v(" "),s("p",[t._v("Sprout Forms adds a Form Relations Field to Craft CMS:")]),t._v(" "),s("ul",[s("li",[s("strong",[t._v("Forms (Sprout Forms)")])])]),t._v(" "),s("h2",{attrs:{id:"settings"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#settings"}},[t._v("#")]),t._v(" Settings")]),t._v(" "),s("h3",{attrs:{id:"redirects"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#redirects"}},[t._v("#")]),t._v(" Redirects")]),t._v(" "),s("p",[t._v("Sprout Forms allows you to set a redirect for your Form in the Form Settings or in the template.")]),t._v(" "),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("form")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("method")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),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(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("action")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[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 attr-name"}},[t._v("accept-charset")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("UTF-8"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("action"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sprout-forms/entries/save-entry"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("handle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("contact"),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 twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" redirectInput"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("contact?message=thankyou"),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 delimiter punctuation"}},[t._v("}}")])]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# All of your fields here #}")])]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("submit"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Submit"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),s("div",{pre:!0},[s("p",[t._v("Your redirect value can be an absolute URL, relative URL, or use the dynamic "),s("code",[t._v("{siteUrl}")]),t._v(" variable:")])]),s("h4",[t._v("Example redirect values:")]),t._v(" "),s("ul",[s("li",[t._v("/thank-you")]),t._v(" "),s("li",[t._v("thank-you")]),t._v(" "),s("li",[t._v("?message=success")]),t._v(" "),s("li",[t._v("thank-you?message=success")]),t._v(" "),s("li",[t._v("{siteUrl}")]),t._v(" "),s("li",[t._v("https://website.com/thank-you")])])])}),[],!1,null,null,null);a.default=n.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/87.dda603b0.js b/docs/.vuepress/dist/assets/js/87.dda603b0.js new file mode 100644 index 00000000..0f0a2f29 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/87.dda603b0.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[87],{556:function(t,a,s){"use strict";s.r(a);var n=s(34),e=Object(n.a)({},(function(){var t=this,a=t.$createElement,s=t._self._c||a;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",[t._v("Front-end File Uploads")]),t._v(" "),s("div",{pre:!0},[s("p",[t._v("To allow a user to upload a file from the front-end, all you need to do is add an Assets field to your form. If you output your form using the "),s("code",[t._v("displayForm")]),t._v(" tag, validation and error handling will be setup for you.")])]),s("h2",{attrs:{id:"notifications"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#notifications"}},[t._v("#")]),t._v(" Notifications")]),t._v(" "),s("h3",{attrs:{id:"asset-urls"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#asset-urls"}},[t._v("#")]),t._v(" Asset URLs")]),t._v(" "),s("p",[t._v("When notifications are enabled, by default, Sprout Forms will send a notification that includes the file name that has been uploaded. To send notifications that include a direct link to your file, you can enable Template Overrides or use "),s("a",{attrs:{href:"../email"}},[t._v("Sprout Email")]),t._v(". Your Email Templates code might look something like this:")]),t._v(" "),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" resume "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" object"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("resumeAssetFieldHandle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("first"),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 delimiter punctuation"}},[t._v("%}")])]),t._v("\n\nResume: "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" resume"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getUrl"),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 delimiter punctuation"}},[t._v("}}")])]),t._v("\n")])])]),s("h3",{attrs:{id:"file-attachments"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#file-attachments"}},[t._v("#")]),t._v(" File Attachments")]),t._v(" "),s("div",{pre:!0},[s("p",[t._v("To send all submitted files as file attachments via a notification email you can "),s("code",[t._v("Enable File Attachments")]),t._v(" in your Form's Notification settings.")])]),s("h2",{attrs:{id:"template-overrides"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#template-overrides"}},[t._v("#")]),t._v(" Template Overrides")]),t._v(" "),s("div",{pre:!0},[s("p",[t._v("If you need to build a custom form with file-uploads, make sure your Form tag is set up to handle files using "),s("code",[t._v('enctype="multipart/form-data"')]),t._v(". Here is a very simple example of a form with a single file upload field:")])]),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("form")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("method")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),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(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("action")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[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 attr-name"}},[t._v("accept-charset")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("UTF-8"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("enctype")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("multipart/form-data"),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 twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" csrfInput"),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 delimiter punctuation"}},[t._v("}}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("action"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sprout-forms/entries/save-entry"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("handle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("contact"),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 twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" redirectInput"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("contact?message=thankyou"),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 delimiter punctuation"}},[t._v("}}")])]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("file"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("fields[assetFieldHandle]"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("submit"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])])])}),[],!1,null,null,null);a.default=e.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/88.e2083586.js b/docs/.vuepress/dist/assets/js/88.e2083586.js new file mode 100644 index 00000000..69fbc05c --- /dev/null +++ b/docs/.vuepress/dist/assets/js/88.e2083586.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[88],{555:function(t,a,e){"use strict";e.r(a);var s=e(34),n=Object(s.a)({},(function(){var t=this,a=t.$createElement,e=t._self._c||a;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",[t._v("Hidden Field")]),t._v(" "),e("p",[t._v("The Hidden Field allows you to define the value of a field on your form ahead of time without displaying that field to the user. This can be useful to help prepare information that will need to be associated with a form but doesn't necessarily need to be seen or filled out by the user.")]),t._v(" "),e("p",[t._v("The Hidden Field does display the value that you set in the templates so an enterprising user could view the code on your page and see the value you have prepared, and if they truly desire, even modify it directly in the code on the page. If you want to predefine a value that your user will never see and can never modify, see the "),e("RouterLink",{attrs:{to:"/forms/invisible-field.html"}},[t._v("Invisible Field")]),t._v(".")],1),t._v(" "),e("h2",{attrs:{id:"settings"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#settings"}},[t._v("#")]),t._v(" Settings")]),t._v(" "),e("h3",{attrs:{id:"hidden-field-value"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#hidden-field-value"}},[t._v("#")]),t._v(" Hidden Field Value")]),t._v(" "),e("div",{pre:!0},[e("p",[t._v("This setting let's you predefine the value you want to see in your Hidden Field. It can parse Twig and any values provided via the "),e("code",[t._v("addFieldVariables")]),t._v(" template tag. See the Field Variables section below for more info.")])]),e("h3",{attrs:{id:"allow-edits"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#allow-edits"}},[t._v("#")]),t._v(" Allow edits")]),t._v(" "),e("p",[t._v("Enable this setting if you wish to allow users in the Control Panel to edit this Hidden Field value. By default, the field will display the value but not allow any edits.")]),t._v(" "),e("h2",{attrs:{id:"field-variables"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#field-variables"}},[t._v("#")]),t._v(" Field Variables")]),t._v(" "),e("p",[t._v("When using the default Form Templates, the Hidden Field has access to several common variables that are also available as Craft Global Variables. The default variables include:")]),t._v(" "),e("ul",[e("li",[t._v("craft")]),t._v(" "),e("li",[t._v("currentSite")]),t._v(" "),e("li",[t._v("currentUser")]),t._v(" "),e("li",[t._v("now")]),t._v(" "),e("li",[t._v("siteName")]),t._v(" "),e("li",[t._v("siteUrl")]),t._v(" "),e("li",[t._v("systemName")])]),t._v(" "),e("div",{pre:!0},[e("p",[t._v("These default values can be customized when using "),e("RouterLink",{pre:!0,attrs:{to:"/forms/template-overrides.html"}},[t._v("Template Overrides")]),t._v(" and additional variables can be made available using the "),e("code",[t._v("addFieldVariables")]),t._v(" tag. To add additional variables, pass those variables to the "),e("code",[t._v("addFieldVariables")]),t._v(" tag in your templates before the "),e("code",[t._v("displayForm")]),t._v(" tag.")],1)]),e("div",{staticClass:"language-twig extra-class"},[e("pre",{pre:!0,attrs:{class:"language-twig"}},[e("code",[e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("do")]),t._v(" sprout"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("forms"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("addFieldVariables"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("entry"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" entry"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("category"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" category"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("hiddenEmail"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("email@website.com"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" sprout"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("forms"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("displayForm"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token string"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("application"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n")])])]),e("div",{pre:!0},[e("p",[t._v("The Hidden Field Value setting is processed like a Twig Template and you can target the available variables are all made available to the field using the "),e("code",[t._v("object")]),t._v(" variable. The variables can be accessed using standard Twig syntax or shorthand object syntax:")])]),e("div",{staticClass:"language-twig extra-class"},[e("pre",{pre:!0,attrs:{class:"language-twig"}},[e("code",[e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" object"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("craft"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("app"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getRequest"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getAbsoluteUrl"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" object"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("entry"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("title "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" object"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("entry"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("customField "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" object"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("entry"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("customField"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("first"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("id "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" object"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("hiddenEmail "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n")])])]),e("p",[t._v("And shorthand syntax:")]),t._v(" "),e("div",{staticClass:"language-twig extra-class"},[e("pre",{pre:!0,attrs:{class:"language-twig"}},[e("code",[t._v("{craft.app.getRequest().getAbsoluteUrl()}\n{entry.title}\n{entry.customField}\n{entry.customField.first().id}\n{hiddenEmail}\n")])])])])}),[],!1,null,null,null);a.default=n.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/89.fd1f8bf3.js b/docs/.vuepress/dist/assets/js/89.fd1f8bf3.js new file mode 100644 index 00000000..0b72dda2 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/89.fd1f8bf3.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[89],{559:function(t,s,a){"use strict";a.r(s);var n=a(34),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",[t._v("Importing Data")]),t._v(" "),a("p",[t._v("Sprout Forms adds support for importing and seeding data to the following Sprout Forms data types:")]),t._v(" "),a("ul",[a("li",[t._v("Form Elements")]),t._v(" "),a("li",[t._v("Form Entry Elements")]),t._v(" "),a("li",[t._v("Form Relations Fields")]),t._v(" "),a("li",[t._v("Form Entry Relations Fields")])]),t._v(" "),a("h2",{attrs:{id:"forms"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#forms"}},[t._v("#")]),t._v(" Forms")]),t._v(" "),a("p",[t._v("Define your forms as JSON and import them into any project you'd like. A basic example of the format is below and more advanced form examples are linked after the code example.")]),t._v(" "),a("code-toggle",{attrs:{languages:["slot0"],labels:{slot0:"Craft 3"}}},[a("template",{slot:"slot0"},[a("div",{staticClass:"language-json extra-class"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"@model"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"barrelstrength\\\\sproutforms\\\\integrations\\\\sproutimport\\\\elements\\\\Form"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"attributes"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"name"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Contact Form"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"handle"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"contact"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"titleFormat"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("\"{dateCreated|date('Y-m-d')} – {fullName} – {message|slice(0,22)}...\"")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"redirectUri"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"?message=thank-you"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"displaySectionTitles"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"settings"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"fieldLayout"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"Section 1"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"@model"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"barrelstrength\\\\sproutbaseimport\\\\importers\\\\settings\\\\Field"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"barrelstrength\\\\sproutforms\\\\fields\\\\formfields\\\\SectionHeading"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"name"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Section Heading"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"handle"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"sectionHeading"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"notes"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat."')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"hideLabel"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"default"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"output"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"richText"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"@model"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"barrelstrength\\\\sproutbaseimport\\\\importers\\\\settings\\\\Field"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"barrelstrength\\\\sproutforms\\\\fields\\\\formfields\\\\SingleLine"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"name"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Single Line"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"handle"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"singleLine"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"instructions"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Example instructions"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"placeholder"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Example placeholder"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"charLimit"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token null keyword"}},[t._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"required"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n\n")])])])])],2),t._v(" "),a("h3",{attrs:{id:"additional-examples"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#additional-examples"}},[t._v("#")]),t._v(" Additional Examples")]),t._v(" "),a("ul",[a("li",[a("a",{attrs:{href:"https://github.com/barrelstrength/sprout-docs/blob/master/docs/import/examples/sprout-plugins/settings/SproutForms-BasicFields.json",target:"_blank",rel:"noopener noreferrer"}},[t._v("Form Fields (Basic)"),a("OutboundLink")],1)])]),t._v(" "),a("h2",{attrs:{id:"form-entries"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#form-entries"}},[t._v("#")]),t._v(" Form Entries")]),t._v(" "),a("p",[t._v("Import real or test Form Entry Elements to Sprout Forms using Sprout Import.")]),t._v(" "),a("div",{staticClass:"language-json extra-class"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"@model"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"barrelstrength\\\\sproutforms\\\\integrations\\\\sproutimport\\\\elements\\\\Entry"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"attributes"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"formId"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("711")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"ipAddress"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"127.0.0.1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"userAgent"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"dateCreated"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"2015-08-21 01:08:38"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"dateUpdated"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"2015-10-09 03:10:03"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"content"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"title"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Form Entry Title"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"fields"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" ... "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n")])])]),a("h3",{attrs:{id:"seeding"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#seeding"}},[t._v("#")]),t._v(" Seeding")]),t._v(" "),a("h4",[t._v("Seed Tab")]),t._v(" "),a("p",[t._v("On the Sprout Import Seed tab, select "),a("strong",[t._v("Sprout Forms Entries")]),t._v(" as the "),a("em",[t._v("Type of Content")]),t._v(" to generate fake Form Entries.")]),t._v(" "),a("h4",[t._v("Generate custom seed data")]),t._v(" "),a("p",[t._v("If you prefer to have more control over how your fake entries are generated, generate a custom seed file to import manually.")]),t._v(" "),a("p",[t._v("In the example below, we generate 100 fake Form Entries with the help of faker, which is available as a variable when you have Sprout Import installed.")]),t._v(" "),a("div",{staticClass:"language-twig extra-class"},[a("pre",{pre:!0,attrs:{class:"language-twig"}},[a("code",[a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" faker "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" craft"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("sproutImport"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("faker "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("-%}")])]),t._v("\n[\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("for")]),t._v(" i "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("in")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v(".99")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v('\n {\n "@model": "barrelstrength\\\\sproutforms\\\\integrations\\\\sproutimport\\\\elements\\\\Entry",\n "attributes": {\n "formId": 42,\n "ipAddress": "'),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" random"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("faker"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ipv4"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("faker"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ipv6"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v('",\n "userAgent": "'),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" faker"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("userAgent "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v('",\n "dateCreated": "'),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" faker"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("dateTimeBetween"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("-2 years"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("now"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("date"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("Y-m-d h:m:s"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v('",\n "dateUpdated": "'),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" faker"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("dateTimeBetween"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("-2 years"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("now"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("date"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("Y-m-d h:m:s"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v('"\n },\n "content": {\n "title": "'),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" faker"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("text"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("42")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v('",\n "fields": {\n "fullName": "'),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" faker"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("text"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("42")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v('",\n "email": "'),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" faker"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("email "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v('",\n "message": "'),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" faker"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("text"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("42")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v('"\n }\n }\n }'),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("not")]),t._v(" loop"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("last "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v(","),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endfor")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("-%}")])]),t._v("\n]\n")])])])],1)}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/9.a4703730.js b/docs/.vuepress/dist/assets/js/9.a4703730.js new file mode 100644 index 00000000..43c63fe4 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/9.a4703730.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[9],{461:function(e,t,a){e.exports=a.p+"assets/img/email-dropdown-field-settings.aeb71d90.png"},462:function(e,t,a){e.exports=a.p+"assets/img/email-select-code.618f4ace.png"},463:function(e,t,a){e.exports=a.p+"assets/img/email-select-sprout-email.48bc0225.png"},548:function(e,t,a){"use strict";a.r(t);var i=a(34),s=Object(i.a)({},(function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[i("h1",[e._v("Email Dropdown Field")]),e._v(" "),i("p",[e._v("The Email Dropdown field allows a user to select a spam-protected Email Address from a dropdown list and trigger a notification to that email address.")]),e._v(" "),i("p",[i("img",{attrs:{src:a(461),alt:"Sprout Forms Email Dropdown Field"}})]),e._v(" "),i("p",[e._v("Setup your Email Dropdown Field just like you would setup up a Dropdown field. The only difference is in how the values of the Email Dropdown field gets output on the page. When Sprout Forms displays your Email Dropdown field in the browser, the Email Dropdown field will mask the email addresses in your settings so they cannot be harvested for spam or seen by the public.")]),e._v(" "),i("p",[i("img",{attrs:{src:a(462),alt:"Email Dropdown Field doesn't display email addresses in your template code"}})]),e._v(" "),i("p",[e._v("After the Email Dropdown field is submitted, the selected email will be unmasked and can be used to trigger dynamic Email Notifications.")]),e._v(" "),i("h2",{attrs:{id:"notification-emails"}},[i("a",{staticClass:"header-anchor",attrs:{href:"#notification-emails"}},[e._v("#")]),e._v(" Notification Emails")]),e._v(" "),i("div",{pre:!0},[i("p",[e._v("Once you have setup your Email Dropdown Field and assigned it to a Form, you can setup a Notification Email to be sent to the selected email address when your form is submitted. Add your Email Dropdown field handle "),i("code",[e._v("{emailDropdownFieldHandle}")]),e._v(" in the Recipients setting of a Notification Email and select the Event "),i("em",[e._v("When a Sprout Forms Entry is saved")]),e._v(" along with the appropriate settings to target your specific form.")])]),i("p",[i("img",{attrs:{src:a(463),alt:"Send dynamic emails with Email Dropdown Field and Sprout Forms"}})]),e._v(" "),i("h2",{attrs:{id:"multiple-email-addresses"}},[i("a",{staticClass:"header-anchor",attrs:{href:"#multiple-email-addresses"}},[e._v("#")]),e._v(" Multiple Email Addresses")]),e._v(" "),i("p",[e._v("If you would like to add multiple email addresses to an option, separate each email address with a comma:")]),e._v(" "),i("div",{staticClass:"language- extra-class"},[i("pre",{pre:!0,attrs:{class:"language-text"}},[i("code",[e._v("email1@website.com, email2.website.com\n")])])])])}),[],!1,null,null,null);t.default=s.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/90.12240281.js b/docs/.vuepress/dist/assets/js/90.12240281.js new file mode 100644 index 00000000..c0ab6b25 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/90.12240281.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[90],{560:function(t,s,a){"use strict";a.r(s);var e=a(34),n=Object(e.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",[t._v("Craft 3")]),t._v(" "),a("p",[t._v("Sprout Forms installation and update instructions for Craft 3.")]),t._v(" "),a("h2",{attrs:{id:"requirements"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#requirements"}},[t._v("#")]),t._v(" Requirements")]),t._v(" "),a("ul",[a("li",[t._v("Craft CMS 3.3.0 or a more recent version of Craft")])]),t._v(" "),a("h2",{attrs:{id:"installation-via-plugin-store"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#installation-via-plugin-store"}},[t._v("#")]),t._v(" Installation via Plugin Store")]),t._v(" "),a("ol",[a("li",[t._v("Find the plugin in the Plugin Store in your Craft Control Panel")]),t._v(" "),a("li",[t._v("Go to "),a("em",[t._v("Settings → Plugins")]),t._v(" and select “Install”")])]),t._v(" "),a("h2",{attrs:{id:"installation-via-composer"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#installation-via-composer"}},[t._v("#")]),t._v(" Installation via Composer")]),t._v(" "),a("div",{pre:!0},[a("ol",[a("li",[t._v("Open your terminal and go to your Craft project:"),a("br"),a("code",[t._v("cd /path/to/project")])]),t._v(" "),a("li",[t._v("Then tell Composer to load the plugin:"),a("br"),a("code",[t._v("composer require barrelstrength/sprout-forms")])]),t._v(" "),a("li",[t._v("In the Control Panel, go to "),a("em",[t._v("Settings → Plugins")]),t._v(" and select “Install”")])])]),a("h2",{attrs:{id:"upgrading-to-craft-3"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#upgrading-to-craft-3"}},[t._v("#")]),t._v(" Upgrading to Craft 3")]),t._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[t._v("BEFORE YOU UPDATE")]),t._v(" "),a("p",[t._v("Make sure you have updated to the latest version of Sprout Forms 2.x before updating to Sprout Forms 3.x for Craft 3")])]),t._v(" "),a("h3",{attrs:{id:"form-field-changes"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#form-field-changes"}},[t._v("#")]),t._v(" Form Field changes")]),t._v(" "),a("p",[t._v("In Craft 2, Sprout Forms extended the Craft Field Layout Editor and allowed you to add any field that Craft supported to a Form. While you could add any field on the back-end, Sprout only supported output the HTML for a subset of the fields on the front-end. In particular, more advanced fields like the Matrix had to supported manually in the templates.")]),t._v(" "),a("p",[t._v("In Craft 3, Sprout Forms added a new Form Field API that now requires Form Fields to have both front-end and back-end support. If you happen to be using a more advanced field type that was supported by Craft but not by Sprout Forms in Craft 2, you may need to develop a "),a("RouterLink",{attrs:{to:"/forms/custom-form-fields.html"}},[t._v("Custom Form Field")]),t._v(" to support that field in Craft 3.")],1),t._v(" "),a("h3",{attrs:{id:"template-changes"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#template-changes"}},[t._v("#")]),t._v(" Template Changes")]),t._v(" "),a("p",[t._v("Read over the "),a("a",{attrs:{href:"https://docs.craftcms.com/v3/changes-in-craft-3.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("Changes in Craft 3"),a("OutboundLink")],1),t._v(" for a general overview of things that have changed. These changes have affected Sprout Forms in several ways and if you have built any Forms with custom HTML you will likely need to update your code.")]),t._v(" "),a("h4",[t._v("The Action URL format and Redirect URL format")]),t._v(" "),a("code-toggle",{attrs:{languages:["slot0","slot3"],labels:{slot0:"Craft 3",slot3:"Craft 2"}}},[a("template",{slot:"slot0"},[a("div",{staticClass:"language-twig extra-class"},[a("pre",{pre:!0,attrs:{class:"language-twig"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("form")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("method")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("accept-charset")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("utf-8"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("enctype")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("multipart/form-data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" csrfInput"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("action"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sprout-forms/entries/save-entry"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" redirectInput"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("/contact?message=thankyou"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("handle"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("formHandle"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n \n ...\n \n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("submit"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Submit"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\t\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])])]),t._v(" "),a("template",{slot:"slot3"},[a("div",{staticClass:"language-twig extra-class"},[a("pre",{pre:!0,attrs:{class:"language-twig"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("form")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("method")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("accept-charset")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("utf-8"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("enctype")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("multipart/form-data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" getCsrfInput"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("action"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sproutForms/entries/saveEntry"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("redirect"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("/contact?message=thankyou"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("handle"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("formHandle"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n \n ...\n \n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("submit"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Submit"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\t\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])])])],2),t._v(" "),a("h4",[t._v("Retrieving a form")]),t._v(" "),a("div",{staticClass:"language-twig extra-class"},[a("pre",{pre:!0,attrs:{class:"language-twig"}},[a("code",[a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" form "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" sprout"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("forms"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("form"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("contact"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n")])])]),a("h4",[t._v("Identifying a field by type")]),t._v(" "),a("div",{pre:!0},[a("p",[t._v("Where "),a("code",[t._v("field")]),t._v(" is a Form Field model:")])]),a("code-toggle",{attrs:{languages:["slot0","slot3"],labels:{slot0:"Craft 3",slot3:"Craft 2"}}},[a("template",{slot:"slot0"},[a("div",{staticClass:"language-twig extra-class"},[a("pre",{pre:!0,attrs:{class:"language-twig"}},[a("code",[a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" field"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getFieldInputFolder"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("dropdown"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n ...\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n")])])])]),t._v(" "),a("template",{slot:"slot3"},[a("div",{staticClass:"language-twig extra-class"},[a("pre",{pre:!0,attrs:{class:"language-twig"}},[a("code",[a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" field"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("type"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("lower "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("dropdown"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n ...\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n")])])])])],2),t._v(" "),a("h4",[t._v("Displaying Tabs and Fields in Custom Templates")]),t._v(" "),a("div",{staticClass:"language-twig extra-class"},[a("pre",{pre:!0,attrs:{class:"language-twig"}},[a("code",[a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# form.html #}")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("for")]),t._v(" tab "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("in")]),t._v(" form"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getFieldLayout"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getTabs"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" sprout"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("forms"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("displayTab"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("form"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" tab"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" renderingOptions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endfor")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("-%}")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# tab.html #}")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("for")]),t._v(" field "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("in")]),t._v(" layoutFields "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("-%}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{-")]),t._v(" sprout"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("forms"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("displayField"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("form"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" field"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" renderingOptions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endfor")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n")])])]),a("h3",{attrs:{id:"notification-email-changes"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#notification-email-changes"}},[t._v("#")]),t._v(" Notification Email Changes")]),t._v(" "),a("p",[t._v("The default Notification Email will now exclude several fields that may include sensitive or irrelevant information for a Notification Email. These fields include:")]),t._v(" "),a("ul",[a("li",[t._v("Custom HTML")]),t._v(" "),a("li",[t._v("Hidden Field")]),t._v(" "),a("li",[t._v("Invisible Field")]),t._v(" "),a("li",[t._v("Private Notes Field")]),t._v(" "),a("li",[t._v("Section Heading Field")])]),t._v(" "),a("p",[t._v("If you require these fields to be displayed in a Notification Email or wish to update the logic around which of them that do, you will need to override the default template and customize it to your needs. See "),a("a",{attrs:{href:"https://craftcms.stackexchange.com/a/29650/115",target:"_blank",rel:"noopener noreferrer"}},[t._v("this response"),a("OutboundLink")],1),t._v(" on Stack Exchange for more info.")]),t._v(" "),a("h2",{attrs:{id:"upgrading-to-forms-3-4-1"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#upgrading-to-forms-3-4-1"}},[t._v("#")]),t._v(" Upgrading to Forms 3.4.1")]),t._v(" "),a("p",[t._v("Sprout Forms v3.4.1 introduces a handful of changes to make the Integrations API more flexible for custom Integrations. The general Integration architecture has stayed the same but several methods have been renamed. Please be sure to test any Custom Integrations while upgrading to 3.4.1 and consider the following changes:")]),t._v(" "),a("h3",{attrs:{id:"removed"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#removed"}},[t._v("#")]),t._v(" Removed")]),t._v(" "),a("div",{pre:!0},[a("ul",[a("li",[t._v("Removed base Integration "),a("code",[t._v("updateTargetFieldsAction")]),t._v(" and "),a("code",[t._v("updateSourceFieldsAction")]),t._v(" dependencies in favor of "),a("code",[t._v("updateTargetFieldsOnChange")]),t._v(" to allow Integrations to dynamically target fields to watch for changes")]),t._v(" "),a("li",[t._v("Removed "),a("code",[t._v("prepareFieldTypeSelection")]),t._v(" and "),a("code",[t._v("prepareIntegrationTypeSelection")]),t._v(" variables and methods and simplified how Integration Types field is populated in modal templates")])])]),a("h3",{attrs:{id:"moved"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#moved"}},[t._v("#")]),t._v(" Moved")]),t._v(" "),a("div",{pre:!0},[a("ul",[a("li",[t._v("Moved "),a("code",[t._v("getFieldsAsOptionsByRow")]),t._v(", "),a("code",[t._v("getCompatibleFields")]),t._v(", and "),a("code",[t._v("getTargetIntegrationFieldsAsMappingOptions")]),t._v(" from "),a("code",[t._v("IntegrationsController")]),t._v(" to "),a("code",[t._v("EntryElementIntegration")]),t._v(" class")])])]),a("h3",{attrs:{id:"renamed"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#renamed"}},[t._v("#")]),t._v(" Renamed")]),t._v(" "),a("div",{pre:!0},[a("ul",[a("li",[t._v("Renamed "),a("code",[t._v("getFormFieldsAsMappingOptions")]),t._v(" => "),a("code",[t._v("getSourceFormFieldsAsMappingOptions")])]),t._v(" "),a("li",[t._v("Renamed "),a("code",[t._v("actionGetElementEntryFields")]),t._v(" => "),a("code",[t._v("actionGetTargetIntegrationFields")]),t._v(" and updated it to instantiate and populate an Integration dynamically and trigger the "),a("code",[t._v("getTargetIntegrationFieldsAsMappingOptions")]),t._v(" on a given Integration")]),t._v(" "),a("li",[t._v("Renamed "),a("code",[t._v("prepareFieldMapping")]),t._v(" => "),a("code",[t._v("refreshFieldMapping")]),t._v(" and moved to base Integration class init method")]),t._v(" "),a("li",[t._v("Renamed "),a("code",[t._v("resolveFieldMapping")]),t._v(" => "),a("code",[t._v("getTargetIntegrationFieldValues")]),t._v(" and moved to base Base Integration class")]),t._v(" "),a("li",[t._v("Renamed IntegrationTrait property "),a("code",[t._v("entry")]),t._v(" => "),a("code",[t._v("formEntry")])])])]),a("h2",{attrs:{id:"upgrading-to-forms-v3-5-0"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#upgrading-to-forms-v3-5-0"}},[t._v("#")]),t._v(" Upgrading to Forms v3.5.0")]),t._v(" "),a("p",[t._v("Sprout Forms v3.5.0 adds support for Field Rules and includes updates to the Form Templates and Email Templates to support the new conditional behavior. In addition, Form Templates have been optimized to simplify the amount of javascript required in the templates. Form Templates and all javascript can still be customized however you need.")]),t._v(" "),a("p",[t._v("If your Forms use the Form Templates and Email Templates provided by Sprout Forms, no updates are needed. For Forms using custom Form Templates:")]),t._v(" "),a("h3",{attrs:{id:"form-templates"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#form-templates"}},[t._v("#")]),t._v(" Form Templates")]),t._v(" "),a("p",[t._v("Several updates have been made to the Form Templates to optimize the javascript used in the templates and add support for Field Rules.")]),t._v(" "),a("h4",[t._v("Added support for rules")]),t._v(" "),a("div",{staticClass:"language-twig extra-class"},[a("pre",{pre:!0,attrs:{class:"language-twig"}},[a("code",[t._v("ADDED RULES VARIABLE\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" rules "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" form"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getRules"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("-%}")])]),t._v("\n\nADDED RULES DATA ATTRIBUTE\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("form")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("method")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("accept-charset")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("utf-8"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("enctype")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("multipart/form-data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" id "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" id "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token attr-name"}},[a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("-%}")])])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" class "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" class "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("-}}")])]),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" errors "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" errorClass "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("-%}")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token attr-name"}},[a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("-%}")])])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("data-rules")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" rules"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("json_encode"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("raw"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("e"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("html"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n")])])]),a("h4",[t._v("Updated javascript")]),t._v(" "),a("p",[t._v("The latest form templates remove most JS from the templates and now include it via files. JS classes that require initialization have been simplified to only require the ID. The JS has also been updated to set the CSRF token name. The CSRF token value will be retrieved dynamically as necessary.")]),t._v(" "),a("div",{staticClass:"language-twig extra-class"},[a("pre",{pre:!0,attrs:{class:"language-twig"}},[a("code",[t._v("OLD\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token script"}},[a("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// ... Lots of JS")]),t._v("\n")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\nNEW\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" accessibilityJsUrl "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" view"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getAssetManager"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getPublishedUrl"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("@sproutforms/web/assets/formtemplates/dist/js/accessibility.js"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("-%}")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("do")]),t._v(" view"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("registerJsFile"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("accessibilityJsUrl"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n position"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("-%}")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" rulesJsUrl "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" view"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getAssetManager"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getPublishedUrl"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("@sproutforms/web/assets/formtemplates/dist/js/rules.js"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("-%}")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("do")]),t._v(" view"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("registerJsFile"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("rulesJsUrl"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("-%}")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" addressFieldJsUrl "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" view"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getAssetManager"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getPublishedUrl"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("@sproutforms/web/assets/formtemplates/dist/js/addressfield.js"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("-%}")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("do")]),t._v(" view"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("registerJsFile"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("addressFieldJsUrl"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("-%}")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("js")]),t._v(" at endBody "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v('\n (function() {\n window.csrfTokenName = "'),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" craft"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("app"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getConfig"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getGeneral"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("csrfTokenName"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("e"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("js"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\";\n new SproutFormsAddressField('"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" id "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("');\n new SproutFormsCheckableInputs('"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" id "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("');\n new SproutFormsRules('"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" id "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("');\n })();\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endjs")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("-%}")])]),t._v("\n")])])]),a("h3",{attrs:{id:"email-templates"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#email-templates"}},[t._v("#")]),t._v(" Email Templates")]),t._v(" "),a("p",[t._v("Email Templates can now check if a field is hidden by a field rule:")]),t._v(" "),a("div",{staticClass:"language-twig extra-class"},[a("pre",{pre:!0,attrs:{class:"language-twig"}},[a("code",[t._v("OLD\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("for")]),t._v(" field "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("in")]),t._v(" fields "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("not")]),t._v(" field"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("isPlainInput"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\nNEW\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("for")]),t._v(" field "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("in")]),t._v(" fields "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("not")]),t._v(" field"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("isPlainInput"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("and")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("not")]),t._v(" entry"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getIsFieldHiddenByRule"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("field"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("handle"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n")])])]),a("h3",{attrs:{id:"other-changes"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#other-changes"}},[t._v("#")]),t._v(" Other changes")]),t._v(" "),a("div",{pre:!0},[a("ul",[a("li",[t._v("Removed "),a("code",[t._v("barrelstrength\\sproutforms\\elements\\Form::deleteById()")]),t._v(". Use Elements Service "),a("code",[t._v("deleteElementById")]),t._v(" instead.")]),t._v(" "),a("li",[t._v("Removed "),a("code",[t._v("barrelstrength\\sproutforms\\web\\twig\\variables\\getIntegrationById()")]),t._v(". Use Integrations service via Template API instead.")])])]),a("p",[t._v("Custom integrations may also need to update how they initialize the target field column in the Field Mapping table:")]),t._v(" "),a("div",{staticClass:"language-twig extra-class"},[a("pre",{pre:!0,attrs:{class:"language-twig"}},[a("code",[t._v("// OLD\nnew sprout.forms.Integration({\n integrationType: '"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" className"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("integration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("e"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("js"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("'\n});\n\n// NEW\nnew SproutFormsIntegration({\n integrationType: '"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" className"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("integration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("e"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("js"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("'\n});\n")])])]),a("h3",{attrs:{id:"updating-to-forms-v3-6-0"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#updating-to-forms-v3-6-0"}},[t._v("#")]),t._v(" Updating to Forms v3.6.0")]),t._v(" "),a("p",[t._v("This release adds several improvements to Spam workflows and has touched on several areas of the Entry Submission workflow. Some breaking changes have been introduced so users with more custom form implementations will want to review what has changed to get things updated properly.")]),t._v(" "),a("h3",{attrs:{id:"form-templates-2"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#form-templates-2"}},[t._v("#")]),t._v(" Form Templates")]),t._v(" "),a("p",[t._v("Custom Form Templates will need to update the class name used in the default conditional logic to correctly hide fields used in conditional logic rules.")]),t._v(" "),a("div",{staticClass:"language-twig extra-class"},[a("pre",{pre:!0,attrs:{class:"language-twig"}},[a("code",[t._v("OLD\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("css")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n .hidden {\n display: none !important;\n }\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endcss")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\nNEW\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("css")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n .sprout-hidden {\n display: none !important;\n }\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endcss")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n")])])]),a("h3",{attrs:{id:"entry-queries-using-status-handles"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#entry-queries-using-status-handles"}},[t._v("#")]),t._v(" Entry Queries using Status Handles")]),t._v(" "),a("div",{pre:!0},[a("p",[t._v("The "),a("code",[t._v("statusHandle")]),t._v(" attribute has been removed as the same behavior is available via the Element "),a("code",[t._v("status")]),t._v(" attribute.")])]),a("div",{staticClass:"language-twig extra-class"},[a("pre",{pre:!0,attrs:{class:"language-twig"}},[a("code",[t._v("OLD\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("for")]),t._v(" formEntry "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("in")]),t._v(" sprout"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("forms"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("entries\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("formHandle"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("contact"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("statusHandle"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("pending"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("all"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" formEntry"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("title "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endfor")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\nNEW\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("for")]),t._v(" formEntry "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("in")]),t._v(" sprout"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("forms"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("entries\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("formHandle"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("contact"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("status"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("pending"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("all"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" formEntry"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("title "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endfor")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n")])])]),a("h3",{attrs:{id:"custom-captchas"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#custom-captchas"}},[t._v("#")]),t._v(" Custom Captchas")]),t._v(" "),a("p",[t._v("The Captcha API has been updated.")]),t._v(" "),a("div",{staticClass:"language-php extra-class"},[a("pre",{pre:!0,attrs:{class:"language-php"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("OLD")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("OnBeforeSaveEntryEvent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$event")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("isValid")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$event")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("fakeIt")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$event")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("entry")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("addError")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("Entry")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("CAPTCHA_ERRORS_KEY")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$errorMessage")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("NEW")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("OnBeforeValidateEntryEvent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// isValid is now handled by checking for Errors on the model")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// fakeIt is now handled via the 'Spam Redirect Behavior' setting in the CP")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$this")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("addError")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword static-context"}},[t._v("self")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("CAPTCHA_ERRORS_KEY")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$errorMessage")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("div",{pre:!0},[a("p",[t._v("Previously, captcha validation ran during the "),a("code",[t._v("OnBeforeSaveEntryEvent")]),t._v(" Event and used the "),a("code",[t._v("isValid")]),t._v(" and "),a("code",[t._v("fakeIt")]),t._v(" attributes on the event to control the flow of how the rest of the request got processed. Now, the active Captchas get processed on the "),a("code",[t._v("OnBeforeValidateEntryEvent")]),t._v(" Event, errors are added to the Captcha models, and the Captcha models are added to the "),a("code",[t._v("Entry::captchas")]),t._v(" attribute. This gives us a lot more flexibility on how to give the user control over this workflow in the CP and how we track errors when entries are flagged as Spam.")])]),a("h3",{attrs:{id:"events"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#events"}},[t._v("#")]),t._v(" Events")]),t._v(" "),a("h4",[t._v("OnBeforePopulateEntryEvent")]),t._v(" "),a("div",{pre:!0},[a("p",[t._v("The "),a("code",[t._v("isValid")]),t._v(" and "),a("code",[t._v("fakeIt")]),t._v(" attributes have been removed as they were never used in the validation workflow.")])]),a("div",{staticClass:"language-php extra-class"},[a("pre",{pre:!0,attrs:{class:"language-php"}},[a("code",[a("span",{pre:!0,attrs:{class:"token class-name type-declaration"}},[t._v("REMOVED")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$event")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),a("span",{pre:!0,attrs:{class:"token class-name type-declaration"}},[t._v("isValid")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$event")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("fakeIt")]),t._v("\n")])])]),a("h4",[t._v("OnBeforeValidateEntryEvent")]),t._v(" "),a("div",{pre:!0},[a("p",[t._v("The "),a("code",[t._v("isValid")]),t._v(" and "),a("code",[t._v("fakeIt")]),t._v(" attributes have been removed as they were never used in the validation workflow.")])]),a("div",{staticClass:"language-php extra-class"},[a("pre",{pre:!0,attrs:{class:"language-php"}},[a("code",[a("span",{pre:!0,attrs:{class:"token class-name type-declaration"}},[t._v("REMOVED")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$event")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),a("span",{pre:!0,attrs:{class:"token class-name type-declaration"}},[t._v("isValid")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$event")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("fakeIt")]),t._v("\n")])])]),a("h4",[t._v("OnBeforeSaveEntryEvent")]),t._v(" "),a("div",{pre:!0},[a("p",[t._v("The "),a("code",[t._v("fakeIt")]),t._v(" attribute has been removed as it is not longer used in the validation workflow. Use the 'Spam Redirect Behavior' setting instead. The "),a("code",[t._v("isValid")]),t._v(" and "),a("code",[t._v("errors")]),t._v(" attributes remain on this event and can be used by developers as a final opportunity to add custom validation behavior. However, it is recommended to create a Custom Captcha and add errors to the Captcha model when "),a("code",[t._v("verifySubmission")]),t._v(" is validated.")])]),a("div",{staticClass:"language-php extra-class"},[a("pre",{pre:!0,attrs:{class:"language-php"}},[a("code",[a("span",{pre:!0,attrs:{class:"token class-name type-declaration"}},[t._v("REMOVED")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$event")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("fakeIt")]),t._v("\n")])])]),a("h2",{attrs:{id:"upgrading-to-forms-v3-9-0"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#upgrading-to-forms-v3-9-0"}},[t._v("#")]),t._v(" Upgrading to Forms v3.9.0")]),t._v(" "),a("p",[t._v("Sprout Forms 3.9.0 is a recommended upgrade and fixes a vulnerability that could occur in some scenarios with custom Email Templates.")]),t._v(" "),a("p",[t._v("This release adds native support for AJAX submissions, global Success and Error Messages, and an improved Javascript submission event API. These features are provided out of the box if you are using our default Accessible Form Templates but will require manual updates to any custom template used in your project.")]),t._v(" "),a("p",[t._v("An updated Email Template API improves support for extending layouts from within your templates folder. If you have created any custom "),a("RouterLink",{attrs:{to:"/email/custom-email-templates.html"}},[t._v("Email Templates Integrations")]),t._v(", you will need to make a small change to the paths in your custom Email Templates Integration to support this behavior.")],1),t._v(" "),a("h3",{attrs:{id:"ajax-submissions"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#ajax-submissions"}},[t._v("#")]),t._v(" AJAX Submissions")]),t._v(" "),a("p",[t._v("If you currently have a custom AJAX implementation to submit your forms, consider checking out our new AJAX submission feature and new "),a("RouterLink",{attrs:{to:"/forms/javascript-events.html"}},[t._v("Javascript Events")]),t._v(". Let us know if it doesn't do something you need it to do. We'd love to help you have less code to manage!")],1),t._v(" "),a("p",[t._v("Custom Form Templates will need to add support for AJAX submissions. Several individual Form settings (Submission Method, Success Message, Error Message, Error Display Method) may not work as expected until these updates are made to the templates.")]),t._v(" "),a("h4",[t._v("Updates to form.twig")]),t._v(" "),a("div",{staticClass:"language-html extra-class"},[a("pre",{pre:!0,attrs:{class:"language-html"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!-- Add `data-submission-method` attribute to form tag --\x3e")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("form")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("method")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("post"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("accept-charset")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("utf-8"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("enctype")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("multipart/form-data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("data-submission-method")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("{{ form.submissionMethod }}"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n ...\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),a("h4",[t._v("Updates to form.twig")]),t._v(" "),a("div",{staticClass:"language-twig extra-class"},[a("pre",{pre:!0,attrs:{class:"language-twig"}},[a("code",[a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Register Submit Handler JS file #}")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" submitHandlerJsUrl "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" view"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getAssetManager"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getPublishedUrl"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("@sproutforms/web/assets/formtemplates/dist/js/submit-handler.js"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("-%}")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("do")]),t._v(" view"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("registerJsFile"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("submitHandlerJsUrl"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("-%}")])]),t._v("\n\n...\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Initialize SproutFormsSubmitHandler #}")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("js")]),t._v(" at endBody "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v('\n (function() {\n window.csrfTokenName = "'),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" craft"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("app"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getConfig"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getGeneral"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("csrfTokenName"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("e"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("js"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\";\n new SproutFormsAddressField('"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" id "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("');\n new SproutFormsCheckableInputs('"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" id "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("');\n new SproutFormsDisableSubmitButton('"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" id "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("');\n new SproutFormsRules('"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" id "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("');\n new SproutFormsSubmitHandler('"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" id "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("');\n })();\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endjs")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("-%}")])]),t._v("\n")])])]),a("h3",{attrs:{id:"global-success-and-error-messages"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#global-success-and-error-messages"}},[t._v("#")]),t._v(" Global Success and Error Messages")]),t._v(" "),a("p",[t._v("The default Accessible Templates have been updated to support global Success and Error messages when using AJAX submission or when a form is redirected back to the same page after submission. This code could also be used as a starting point for similar behavior if redirecting to a different page after the form is submitted.")]),t._v(" "),a("h4",[t._v("Updates to form.twig")]),t._v(" "),a("div",{staticClass:"language-twig extra-class"},[a("pre",{pre:!0,attrs:{class:"language-twig"}},[a("code",[a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Set these new variables at the top of the form.twig template #}")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" globalErrorsEnabled "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" form"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("errorDisplayMethod "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("in")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("global"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("both"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" lastEntry "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" sprout"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("forms"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("lastEntry"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("form"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Define globalErrorListHtml if it exists #}")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" globalErrorListHtml "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("-%}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" globalErrors "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("for")]),t._v(" errors "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("in")]),t._v(" entry"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getErrors"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("for")]),t._v(" error "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("in")]),t._v(" errors "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" globalErrors "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" globalErrors"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("merge"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("error"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endfor")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endfor")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("include")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("errors"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" with "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n errors"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" globalErrors\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endset")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("-%}")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Conditionally output the global Success and Error messages within the form.twig template #}")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" globalErrorsEnabled "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("and")]),t._v(" errors"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("length "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("and")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("form"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("errorMessage "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("or")]),t._v(" globalErrorListHtml"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" errorMessage "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" view"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("renderObjectTemplate"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("form"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("errorMessage"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" entry"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" id "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("-message-box"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sproutforms-message-errors"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" errorMessage"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("markdown "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" globalErrorListHtml "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" lastEntry "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("and")]),t._v(" form"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("id "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" lastEntry"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getForm"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("id "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("and")]),t._v(" form"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("successMessage "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" successMessageTemplate "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" form"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("successMessage "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" successMessage "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" view"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("renderObjectTemplate"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("successMessageTemplate"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" lastEntry"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" id "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("-message-box"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sproutforms-message-success"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" successMessage"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("markdown "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n")])])]),a("h4",[t._v("Updates to field.twig")]),t._v(" "),a("div",{staticClass:"language-twig extra-class"},[a("pre",{pre:!0,attrs:{class:"language-twig"}},[a("code",[a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Set this new variables at the top of the field.twig template #}")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" inlineErrorsEnabled "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" form"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("errorDisplayMethod "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("in")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("inline"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("both"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Update the field.twig template to only output the errors if `inlineErrorsEnabled` is true #}")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" inlineErrorsEnabled "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("include")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("errors"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" with "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n errors"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" errors"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" name\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n")])])]),a("h3",{attrs:{id:"javascript-events"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#javascript-events"}},[t._v("#")]),t._v(" Javascript Events")]),t._v(" "),a("div",{pre:!0},[a("p",[t._v("Anything previously watching the "),a("code",[t._v("submit")]),t._v(" event should probably be update to use the new "),a("code",[t._v("sproutFormsSubmit")]),t._v(" event. As Sprout Forms watches the "),a("code",[t._v("submit")]),t._v(" event issues can arise if third-party javascript also attempts to watch the same event. See the new "),a("RouterLink",{pre:!0,attrs:{to:"/forms/javascript-events.html"}},[t._v("Javascript Events")]),t._v(" documentation for additional options you have to customize the submission process via Javascript.")],1)]),a("div",{staticClass:"language-javascript extra-class"},[a("pre",{pre:!0,attrs:{class:"language-javascript"}},[a("code",[a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("OLD")]),t._v("\nform"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("addEventListener")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'submit'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("event")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// ...")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("NEW")]),t._v("\nform"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("addEventListener")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'onSproutFormsSubmit'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("event")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// ...")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("h3",{attrs:{id:"email-templates-api"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#email-templates-api"}},[t._v("#")]),t._v(" Email Templates API")]),t._v(" "),a("p",[t._v("Sprout Forms v3.9.0 uses the updated Email Templates Integrations API. See the Sprout Email upgrade notes for details: "),a("RouterLink",{attrs:{to:"/email/installing-and-updating-craft-3.html#upgrading-to-email-v4-2-0"}},[t._v("Upgrading to Email v4.2.0")]),t._v(".")],1),t._v(" "),a("h2",{attrs:{id:"upgrading-to-forms-v3-10-0"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#upgrading-to-forms-v3-10-0"}},[t._v("#")]),t._v(" Upgrading to Forms v3.10.0")]),t._v(" "),a("h4",[t._v("Captcha Config Overrides")]),t._v(" "),a("div",{pre:!0},[a("p",[t._v("While the file-based config "),a("code",[t._v("config/sprout-forms.php")]),t._v(" had not yet been documented, if you were using it to define Captcha settings these settings will need to be updated.")])]),a("div",{staticClass:"language-php extra-class"},[a("pre",{pre:!0,attrs:{class:"language-php"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// OLD")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'captchaSettings'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'sproutforms-duplicatecaptcha'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'enabled'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'sproutforms-javascriptcaptcha'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'enabled'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'sproutforms-honeypotcaptcha'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'enabled'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'honeypotFieldName'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'beesknees'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'honeypotScreenReaderMessage'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'Leave this field blank'")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// NEW")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'captchaSettings'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'barrelstrength\\sproutforms\\captchas\\DuplicateCaptcha'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'enabled'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'barrelstrength\\sproutforms\\captchas\\JavascriptCaptcha'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'enabled'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'barrelstrength\\sproutforms\\captchas\\HoneypotCaptcha'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'enabled'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'honeypotFieldName'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'beesknees'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'honeypotScreenReaderMessage'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'Leave this field blank'")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n")])])]),a("h2",{attrs:{id:"upgrading-to-forms-v3-12-0"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#upgrading-to-forms-v3-12-0"}},[t._v("#")]),t._v(" Upgrading to Forms v3.12.0")]),t._v(" "),a("div",{pre:!0},[a("p",[t._v("Sprout Forms v3.12.0 includes a small breaking change to the "),a("code",[t._v("getFrontEndInputHtml")]),t._v(" method in your Form Field classes. This was necessary to support more refined targeting for Rendering Options including the targeting of error classes on "),a("code",[t._v("input")]),t._v(" fields to better support using Rendering Options for front-end frameworks such as Bootstrap.")])]),a("h3",{attrs:{id:"custom-form-fields"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#custom-form-fields"}},[t._v("#")]),t._v(" Custom Form Fields")]),t._v(" "),a("div",{pre:!0},[a("p",[t._v("Custom Form fields will need to update the "),a("code",[t._v("getFrontEndInputHtml")]),t._v(" method signature to include a new second argument for the Form Entry Element and pass that "),a("code",[t._v("entry")]),t._v(" variable to your input template:")])]),a("div",{staticClass:"language-php extra-class"},[a("pre",{pre:!0,attrs:{class:"language-php"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// OLD")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("getFrontEndInputHtml")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$value")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword type-hint"}},[t._v("array")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$renderingOptions")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name return-type"}},[t._v("Markup")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$rendered")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("Craft")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$app")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getView")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("renderTemplate")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'dropdown/input'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'name'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$this")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("handle")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'value'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$value")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'field'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'renderingOptions'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$renderingOptions")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("TemplateHelper")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("raw")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$rendered")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// NEW")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token package"}},[t._v("barrelstrength"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("sproutforms"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("elements"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("Entry")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function-definition function"}},[t._v("getFrontEndInputHtml")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$value")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name type-declaration"}},[t._v("Entry")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$entry")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword type-hint"}},[t._v("array")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$renderingOptions")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name return-type"}},[t._v("Markup")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$rendered")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("Craft")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$app")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getView")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("renderTemplate")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'dropdown/input'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'name'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$this")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("handle")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'value'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$value")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'field'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'entry'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$entry")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'renderingOptions'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$renderingOptions")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("TemplateHelper")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("raw")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$rendered")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),a("h3",{attrs:{id:"rendering-options-error-classes"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#rendering-options-error-classes"}},[t._v("#")]),t._v(" Rendering Options Error Classes")]),t._v(" "),a("div",{pre:!0},[a("p",[t._v("Additionally, to support Rendering Options error classes in your custom Form Field input template, you will want to update the Form Field input template to check for errors and update the "),a("code",[t._v("class")]),t._v(" to include any error classes if they exist:")])]),a("div",{staticClass:"language-twig extra-class"},[a("pre",{pre:!0,attrs:{class:"language-twig"}},[a("code",[t._v("// OLD\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" class "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" renderingOptions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("class "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" name "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n// NEW\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" class "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" renderingOptions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("class "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" name "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" errors "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" entry "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("is")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("not")]),t._v(" empty "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" entry"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getErrors"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("null")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" errorClass "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" renderingOptions"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("errorClass "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("null")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" class "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" errors "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("and")]),t._v(" errorClass "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" class"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("~")]),a("span",{pre:!0,attrs:{class:"token string"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("~")]),t._v("errorClass "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" class "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n")])])]),a("h2",{attrs:{id:"upgrading-to-forms-4-0-0-unreleased"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#upgrading-to-forms-4-0-0-unreleased"}},[t._v("#")]),t._v(" Upgrading to Forms 4.0.0 - UNRELEASED")]),t._v(" "),a("p",[t._v("Upgrade to the latest before updating.\nPurge SPAM and delete old entries.")]),t._v(" "),a("p",[t._v("REMOVE Remove Basic Form templates. Link to old Repo if folks want to download them and use them as overrides.")]),t._v(" "),a("div",{pre:!0},[a("p",[t._v("Sprout Forms 4 is a major release the includes an update to the underlying architecture. The Sprout Forms user experience will remain familiar but several conventions have changed. Most notably, the core codebase for "),a("code",[t._v("barrelstrength/sprout-forms")]),t._v(" has been moved to the "),a("code",[t._v("barrelstrength/sprout-base")]),t._v(" package so any custom code, translations, or direct links to the Sprout Forms Control Panel will need to be updated to target the new naming conventions. Plugin-specific Control Panel settings have also moved to the Craft settings area.")])]),a("p",[t._v("Sidebar navigation has been updated to be independent of plugins and specific to the modules being used\nIf you had custom code adjusting the sidebar, you may need to revisit it.\nPlugin features now default to their module names in the sidebar.")]),t._v(" "),a("p",[t._v("If you'd have questions and would like support at any time during the upgrade process, please reach out to support or schedule a half-hour consultation.")]),t._v(" "),a("div",{pre:!0},[a("div",{pre:!0,attrs:{class:"table"}},[a("table",[a("thead",[a("tr",[a("th",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Feature")]),t._v(" "),a("th",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Old Name")]),t._v(" "),a("th",{pre:!0,attrs:{style:"text-align:left"}},[t._v("New Name")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{pre:!0,attrs:{style:"text-align:left"}},[t._v("CP URL")]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("admin/sprout-forms")])]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("admin/sprout/forms")])])]),t._v(" "),a("tr",[a("td",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Template Variables")]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("craft.sproutForms")])]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("sprout.forms")])])]),t._v(" "),a("tr",[a("td",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Translation Category")]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("sprout-forms")])]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("sprout")])])]),t._v(" "),a("tr",[a("td",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Controller Namespace")]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("barrelstrength/sproutforms/controllers")])]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("barrelstrength/sproutbase/app/forms/controllers")])])]),t._v(" "),a("tr",[a("td",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Service Namespace")]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("barrelstrength/sproutforms/services")])]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("barrelstrength/sproutbase/app/forms/services")])])])])])])]),a("h3",{attrs:{id:"front-end-form-overrides"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#front-end-form-overrides"}},[t._v("#")]),t._v(" Front-end Form Overrides")]),t._v(" "),a("p",[t._v("Front End Form Asset Resource paths changed:\nUpdate path of formtemplates resources into web/assets/public/dist folder.")]),t._v(" "),a("p",[t._v("You will need to update the Form submission action in any template overrides:")]),t._v(" "),a("div",{staticClass:"language-twig extra-class"},[a("pre",{pre:!0,attrs:{class:"language-twig"}},[a("code",[a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# OLD #}")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("aria-hidden")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("true"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("action"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sprout-forms/entries/save-entry"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# NEW #}")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("hidden"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("aria-hidden")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("true"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("action"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("value")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("sprout/form-entries/save-entry"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n")])])]),a("div",{pre:!0},[a("div",{pre:!0,attrs:{class:"table"}},[a("table",[a("thead",[a("tr",[a("th",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Old")]),t._v(" "),a("th",{pre:!0,attrs:{style:"text-align:left"}},[t._v("New")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("@sproutforms/web/assets/formtemplates/dist/js/submit-handler.js")])]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("@sproutbase/web/public/formtemplates/dist/js/SubmitHandler.js")])])]),t._v(" "),a("tr",[a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("@sproutforms/web/assets/formtemplates/dist/js/rules.js")])]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("@sproutbase/web/public/formtemplates/dist/js/Rules.js")])])]),t._v(" "),a("tr",[a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("@sproutforms/web/assets/formtemplates/dist/js/addressfield.js")])]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("@sproutbase/web/public/formtemplates/dist/js/AddressField.js")])])]),t._v(" "),a("tr",[a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("@sproutforms/web/assets/formtemplates/dist/js/accessibility.js")])]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("@sproutbase/web/public/formtemplates/dist/js/Accessibility.js")])])]),t._v(" "),a("tr",[a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("@sproutforms/web/assets/formtemplates/dist/js/disable-submit-button.js")])]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("@sproutbase/web/public/formtemplates/dist/js/DisableSubmitButton.js")])])])])])])]),a("h3",{attrs:{id:"removed-basic-form-templates"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#removed-basic-form-templates"}},[t._v("#")]),t._v(" Removed Basic Form Templates")]),t._v(" "),a("p",[t._v("Document way use can copy these over and use them as Custom Templates folder if they wish.")]),t._v(" "),a("h3",{attrs:{id:"form-templates-api"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#form-templates-api"}},[t._v("#")]),t._v(" Form Templates API")]),t._v(" "),a("p",[t._v("FormTemplates are using two methods instead of one to determine path:\nuse FormTemplates::getTemplateRoot and FormTemplates::getPath\nupdated FormTemplates::getPath to not refer to the full path...")]),t._v(" "),a("h3",{attrs:{id:"form-field-override-template"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#form-field-override-template"}},[t._v("#")]),t._v(" Form Field override template")]),t._v(" "),a("p",[t._v("The countries variable has been updated and may need updated if you have a phone form field template override:")]),t._v(" "),a("div",{staticClass:"language-twig extra-class"},[a("pre",{pre:!0,attrs:{class:"language-twig"}},[a("code",[a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# OLD #}")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("for")]),t._v(" key"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" option "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("in")]),t._v(" sprout"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("fields"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getCountries"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("-%}")])]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# NEW #}")])]),t._v(" \n"),a("span",{pre:!0,attrs:{class:"token twig language-twig"}},[a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%-")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("for")]),t._v(" key"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" option "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("in")]),t._v(" countries "),a("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("-%}")])]),t._v("\n")])])]),a("h3",{attrs:{id:"controllers"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#controllers"}},[t._v("#")]),t._v(" Controllers")]),t._v(" "),a("p",[t._v("Any forms you submit to controllers in your templates, will need to be updated to point to new controller endpoints:")]),t._v(" "),a("div",{pre:!0},[a("div",{pre:!0,attrs:{class:"table"}},[a("table",[a("thead",[a("tr",[a("th",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Old")]),t._v(" "),a("th",{pre:!0,attrs:{style:"text-align:left"}},[t._v("New")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("sprout-forms/entries/[action-id]")])]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("sprout/form-entries/[action-id]")])])]),t._v(" "),a("tr",[a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("sprout-forms/groups/[action-id]")])]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("sprout/form-groups/[action-id]")])])]),t._v(" "),a("tr",[a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("sprout-forms/entry-statuses/[action-id]")])]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("sprout/form-entry-statuses/[action-id]")])])])])])])]),a("p",[t._v("The class names that changed are:")]),t._v(" "),a("div",{pre:!0},[a("div",{pre:!0,attrs:{class:"table"}},[a("table",[a("thead",[a("tr",[a("th",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Old")]),t._v(" "),a("th",{pre:!0,attrs:{style:"text-align:left"}},[t._v("New")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("barrelstrength\\sproutforms\\controllers\\Entries")])]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("barrelstrength\\sproutbase\\app\\forms\\controllers\\FormEntries")])])]),t._v(" "),a("tr",[a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("barrelstrength\\sproutforms\\controllers\\Fields")])]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("barrelstrength\\sproutbase\\app\\forms\\controllers\\FormFields")])])]),t._v(" "),a("tr",[a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("barrelstrength\\sproutforms\\controllers\\Groups")])]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("barrelstrength\\sproutbase\\app\\forms\\controllers\\FormGroups")])])]),t._v(" "),a("tr",[a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("barrelstrength\\sproutforms\\controllers\\EntryStatuses")])]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("barrelstrength\\sproutbase\\app\\forms\\controllers\\FormEntryStatuses")])])]),t._v(" "),a("tr",[a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("barrelstrength\\sproutforms\\controllers\\Integrations")])]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("barrelstrength\\sproutbase\\app\\forms\\controllers\\FormIntegrations")])])])])])])]),a("h3",{attrs:{id:"services"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#services"}},[t._v("#")]),t._v(" Services")]),t._v(" "),a("div",{pre:!0},[a("div",{pre:!0,attrs:{class:"table"}},[a("table",[a("thead",[a("tr",[a("th",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Old")]),t._v(" "),a("th",{pre:!0,attrs:{style:"text-align:left"}},[t._v("New")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("SproutForms::$app->entries")])]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("SproutBase::$app->formEntries")])])]),t._v(" "),a("tr",[a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("SproutForms::$app->fields")])]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("SproutBase::$app->formFields")])])]),t._v(" "),a("tr",[a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("SproutForms::$app->groups")])]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("SproutBase::$app->formGroups")])])]),t._v(" "),a("tr",[a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("SproutForms::$app->entryStatuses")])]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("SproutBase::$app->formEntryStatuses")])])]),t._v(" "),a("tr",[a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("SproutForms::$app->integrations")])]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("SproutBase::$app->formIntegrations")])])]),t._v(" "),a("tr",[a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("SproutForms::$app->rules")])]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("SproutBase::$app->formRules")])])])])])])]),a("div",{pre:!0},[a("div",{pre:!0,attrs:{class:"table"}},[a("table",[a("thead",[a("tr",[a("th",{pre:!0,attrs:{style:"text-align:left"}},[t._v("Old")]),t._v(" "),a("th",{pre:!0,attrs:{style:"text-align:left"}},[t._v("New")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("barrelstrength\\sproutforms\\services\\Entries")])]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("barrelstrength\\sproutbase\\app\\forms\\services\\FormEntries")])])]),t._v(" "),a("tr",[a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("barrelstrength\\sproutforms\\services\\Fields")])]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("barrelstrength\\sproutbase\\app\\forms\\services\\FormFields")])])]),t._v(" "),a("tr",[a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("barrelstrength\\sproutforms\\services\\Groups")])]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("barrelstrength\\sproutbase\\app\\forms\\services\\FormGroups")])])]),t._v(" "),a("tr",[a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("barrelstrength\\sproutforms\\services\\EntryStatuses")])]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("barrelstrength\\sproutbase\\app\\forms\\services\\FormEntryStatuses")])])]),t._v(" "),a("tr",[a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("barrelstrength\\sproutforms\\services\\Integrations")])]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("barrelstrength\\sproutbase\\app\\forms\\services\\FormIntegrations")])])]),t._v(" "),a("tr",[a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("barrelstrength\\sproutforms\\services\\Rules")])]),t._v(" "),a("td",{pre:!0,attrs:{style:"text-align:left"}},[a("code",[t._v("barrelstrength\\sproutbase\\app\\forms\\services\\FormRules")])])])])])])]),a("h3",{attrs:{id:"event-updates"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#event-updates"}},[t._v("#")]),t._v(" Event Updates")]),t._v(" "),a("div",{pre:!0},[a("p",[t._v("The "),a("code",[t._v("EVENT_REGISTER_FORM_TEMPLATES")]),t._v(" has moved:")])]),a("div",{staticClass:"language-php extra-class"},[a("pre",{pre:!0,attrs:{class:"language-php"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// OLD")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token package"}},[t._v("barrelstrength")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("sproutforms"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("services"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("Forms"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("Event")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("on")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("Forms")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("Forms")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("EVENT_REGISTER_FORM_TEMPLATES")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name type-declaration"}},[t._v("RegisterComponentTypesEvent")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$event")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$event")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("types")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("CustomFormTemplates")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// NEW")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token package"}},[t._v("barrelstrength")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("sprout"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("app"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("forms"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("services"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("FormTemplates"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("Event")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("on")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("FormTemplates")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("FormTemplates")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("EVENT_REGISTER_FORM_TEMPLATES")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name type-declaration"}},[t._v("RegisterComponentTypesEvent")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$event")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$event")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("types")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("CustomFormTemplates")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("div",{pre:!0},[a("p",[t._v("The "),a("code",[t._v("EVENT_REGISTER_CAPTCHAS")]),t._v(" Event has moved:")])]),a("div",{staticClass:"language-php extra-class"},[a("pre",{pre:!0,attrs:{class:"language-php"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// OLD")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token package"}},[t._v("barrelstrength")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("sproutforms"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("services"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("Forms"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("Event")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("on")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("Forms")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("Forms")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("EVENT_REGISTER_CAPTCHAS")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name type-declaration"}},[t._v("RegisterComponentTypesEvent")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$event")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$event")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("types")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("GoogleRecaptcha")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// NEW")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("use")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token package"}},[t._v("barrelstrength")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("sprout"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("app"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("forms"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("services"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("FormCaptchas"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("Event")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("on")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("FormCaptchas")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("FormCaptchas")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token constant"}},[t._v("EVENT_REGISTER_CAPTCHAS")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name type-declaration"}},[t._v("RegisterComponentTypesEvent")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$event")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$event")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),a("span",{pre:!0,attrs:{class:"token property"}},[t._v("types")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name static-context"}},[t._v("GoogleRecaptcha")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])],1)}),[],!1,null,null,null);s.default=n.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/91.6379b0c1.js b/docs/.vuepress/dist/assets/js/91.6379b0c1.js new file mode 100644 index 00000000..6412be4a --- /dev/null +++ b/docs/.vuepress/dist/assets/js/91.6379b0c1.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[91],{562:function(t,e,a){"use strict";a.r(e);var n=a(34),i=Object(n.a)({},(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",[t._v("Integrations")]),t._v(" "),a("p",[t._v("Integrations allow you to submit your forms to custom, third-party endpoints and to create Elements within Craft CMS. Use Sprout Forms' powerful front-end form templating and validation and submit your data anywhere you'd like.")]),t._v(" "),a("div",{pre:!0},[a("p",[t._v("As Integrations may require additional configuration and training for content authors, the feature is disabled by default. Enable Integrations via "),a("code",[t._v("Settings->Advanced->Enable Integrations")]),t._v(".")])]),a("p",[t._v("The Form submission workflow is as follows:")]),t._v(" "),a("div",{pre:!0},[a("ul",[a("li",[t._v("Form Entry is submitted")]),t._v(" "),a("li",[t._v("Form Entry is validated\n"),a("ul",[a("li",[t._v("If invalid, errors are returned to template")]),t._v(" "),a("li",[t._v("If success, and 'Save data to the Craft database' is enabled, save Form Entry")])])]),t._v(" "),a("li",[t._v("Integrations get processed on the after save event: "),a("code",[t._v("barrelstrength\\sproutforms\\elements\\Entry::EVENT_AFTER_SAVE")])]),t._v(" "),a("li",[t._v("Integration success and failure responses are logged to the database")]),t._v(" "),a("li",[t._v("The Event "),a("code",[t._v("Integration::EVENT_AFTER_SAVE")]),t._v(" is raised and can be configured to send a Notification\n"),a("ul",[a("li",[t._v("If 'Save data to the Craft database' setting is enabled, responses will be visible in the sidebar of the submitted Entry")]),t._v(" "),a("li",[t._v("If 'Save data to the Craft database' setting is disabled, responses can be viewed via a report")])])])])]),a("h2",{attrs:{id:"default-integrations"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#default-integrations"}},[t._v("#")]),t._v(" Default Integrations")]),t._v(" "),a("p",[t._v("Two Integrations are included:")]),t._v(" "),a("div",{staticClass:"table"},[a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("Integration")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("Description")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("Entry Element")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Map your form data to an existing channel in Craft to create an Entry Element when a form is submitted")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("Custom Endpoint")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Submit your form data to a custom endpoint")])])])])]),t._v(" "),a("h3",{attrs:{id:"entry-element"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#entry-element"}},[t._v("#")]),t._v(" Entry Element")]),t._v(" "),a("p",[t._v("The Entry Element Integration allows you to map a Form's fields to an Entry Element and set it's author to a default author or the current logged in user.")]),t._v(" "),a("h3",{attrs:{id:"custom-endpoint"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#custom-endpoint"}},[t._v("#")]),t._v(" Custom Endpoint")]),t._v(" "),a("p",[t._v("The Custom Endpoint Integration allows you to map your Form Fields to the name of the field values that you want to send to your third-party endpoint.")]),t._v(" "),a("p",[t._v("The "),a("RouterLink",{attrs:{to:"/forms/hidden-field.html"}},[t._v("Hidden Field")]),t._v(" and "),a("RouterLink",{attrs:{to:"/forms/invisible-field.html"}},[t._v("Invisible Field")]),t._v(" allow you to setup form fields with pre-filled values such as API Keys, tracking data, and other information that you may want to capture but not want to be publicly visible in your form.")],1),t._v(" "),a("h2",{attrs:{id:"multiple-integrations"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#multiple-integrations"}},[t._v("#")]),t._v(" Multiple Integrations")]),t._v(" "),a("p",[t._v("Multiple integrations can be added to a Form. When one or more integrations are setup, they are processed after a valid Form Entry is submitted in the order they appear in the Form settings. Integrations can fail, and Sprout Forms provides a way for you to view the responses from each integration and receive notifications if any integrations don't behave as expected.")])])}),[],!1,null,null,null);e.default=i.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/92.e970cb5d.js b/docs/.vuepress/dist/assets/js/92.e970cb5d.js new file mode 100644 index 00000000..3086c8d2 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/92.e970cb5d.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[92],{558:function(t,a,e){"use strict";e.r(a);var s=e(34),n=Object(s.a)({},(function(){var t=this,a=t.$createElement,e=t._self._c||a;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",[t._v("Invisible Field")]),t._v(" "),e("p",[t._v("The Invisible Field allows you to define the value of a field on your form ahead of time without displaying that field to the user. This can be useful to help prepare information that will need to be associated with a form but doesn't necessarily need to be seen or filled out by the user.")]),t._v(" "),e("p",[t._v("The Invisible Field never shows the value of the field to the user on the front-end, not even in the code, so you can safely use this field for analytics, email addresses, or other data that you may not want to expose to the user but that you want associated with their form submission.")]),t._v(" "),e("h2",{attrs:{id:"settings"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#settings"}},[t._v("#")]),t._v(" Settings")]),t._v(" "),e("h3",{attrs:{id:"invisible-field-value"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#invisible-field-value"}},[t._v("#")]),t._v(" Invisible Field Value")]),t._v(" "),e("div",{pre:!0},[e("p",[t._v("This setting let's you predefine the value you want to see in your Invisible Field. It can parse Twig and any values provided via the "),e("code",[t._v("addFieldVariables")]),t._v(" template tag. See the Field Variables section below for more info.")])]),e("h3",{attrs:{id:"allow-edits"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#allow-edits"}},[t._v("#")]),t._v(" Allow edits")]),t._v(" "),e("p",[t._v("Enable this setting if you wish to allow users in the Control Panel to edit this Invisible Field value. By default, the field will display the value but not allow any edits.")]),t._v(" "),e("h2",{attrs:{id:"field-variables"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#field-variables"}},[t._v("#")]),t._v(" Field Variables")]),t._v(" "),e("p",[t._v("When using the default Form Templates, the Invisible Field has access to several common variables that are also available as Craft Global Variables. The default variables include:")]),t._v(" "),e("ul",[e("li",[t._v("craft")]),t._v(" "),e("li",[t._v("currentSite")]),t._v(" "),e("li",[t._v("currentUser")]),t._v(" "),e("li",[t._v("now")]),t._v(" "),e("li",[t._v("siteName")]),t._v(" "),e("li",[t._v("siteUrl")]),t._v(" "),e("li",[t._v("systemName")])]),t._v(" "),e("div",{pre:!0},[e("p",[t._v("These default values can be customized when using "),e("RouterLink",{pre:!0,attrs:{to:"/forms/template-overrides.html"}},[t._v("Template Overrides")]),t._v(" and additional variables can be made available using the "),e("code",[t._v("addFieldVariables")]),t._v(" tag. To add additional variables, pass those variables to the "),e("code",[t._v("addFieldVariables")]),t._v(" tag in your templates before the "),e("code",[t._v("displayForm")]),t._v(" tag.")],1)]),e("div",{staticClass:"language-twig extra-class"},[e("pre",{pre:!0,attrs:{class:"language-twig"}},[e("code",[e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("do")]),t._v(" sprout"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("forms"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("addFieldVariables"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("entry"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" entry"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("category"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" category"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token string"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("hiddenEmail"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("email@website.com"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" sprout"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("forms"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("displayForm"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token string"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("application"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n")])])]),e("div",{pre:!0},[e("p",[t._v("The Invisible Field Value setting is processed like a Twig Template and you can target the available variables are all made available to the field using the "),e("code",[t._v("object")]),t._v(" variable. The variables can be accessed using standard Twig syntax or shorthand object syntax:")])]),e("div",{staticClass:"language-twig extra-class"},[e("pre",{pre:!0,attrs:{class:"language-twig"}},[e("code",[e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" object"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("craft"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("app"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getRequest"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getAbsoluteUrl"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" object"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("entry"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("title "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" object"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("entry"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("customField "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" object"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("entry"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("customField"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("first"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("id "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token twig language-twig"}},[e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" object"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("hiddenEmail "),e("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n")])])]),e("p",[t._v("And shorthand syntax:")]),t._v(" "),e("div",{staticClass:"language-twig extra-class"},[e("pre",{pre:!0,attrs:{class:"language-twig"}},[e("code",[t._v("{craft.app.getRequest().getAbsoluteUrl()}\n{entry.title}\n{entry.customField}\n{entry.customField.first().id}\n{hiddenEmail}\n")])])])])}),[],!1,null,null,null);a.default=n.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/93.48127ffa.js b/docs/.vuepress/dist/assets/js/93.48127ffa.js new file mode 100644 index 00000000..2cac08a0 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/93.48127ffa.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[93],{563:function(t,s,a){"use strict";a.r(s);var n=a(34),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",[t._v("Javascript Events")]),t._v(" "),a("p",[t._v("The Sprout Forms AJAX Submission process can be extended using the following javascript events.")]),t._v(" "),a("div",{pre:!0},[a("p",[t._v("The following examples assume you have defined a "),a("code",[t._v("form")]),t._v(" variable in your javascript that references the given Sprout Form being submitted such as "),a("code",[t._v("let form = document.getElementById('{{ id }}')")]),t._v(". Custom events are dispatched on the form element.")])]),a("h2",{attrs:{id:"beforesproutformssubmit"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#beforesproutformssubmit"}},[t._v("#")]),t._v(" beforeSproutFormsSubmit")]),t._v(" "),a("p",[t._v("Gives third-party scripts a chance to take actions before the form is submitted.")]),t._v(" "),a("div",{staticClass:"language-javascript extra-class"},[a("pre",{pre:!0,attrs:{class:"language-javascript"}},[a("code",[t._v("form"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("addEventListener")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'beforeSproutFormsSubmit'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("event")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Retrieve a copy of the form element")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" targetForm "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" event"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("target"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Cancel the default form submission")]),t._v("\n event"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("preventDefault")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Add a promise to be evaluated ")]),t._v("\n event"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("detail"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("promises"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("push")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("yourPromise"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("div",{pre:!0},[a("p",[t._v("Promises added to the "),a("code",[t._v("event.detail.promises")]),t._v(" array should:")])]),a("div",{pre:!0},[a("ul",[a("li",[a("code",[t._v("resolve(true)")]),t._v(" to continue the form submission")]),t._v(" "),a("li",[a("code",[t._v("resolve(false)")]),t._v(" or "),a("code",[t._v("reject('whatever')")]),t._v(" to cancel the form submission")])])]),a("h2",{attrs:{id:"onsproutformssubmit"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#onsproutformssubmit"}},[t._v("#")]),t._v(" onSproutFormsSubmit")]),t._v(" "),a("p",[t._v("Gives third-party scripts a chance to take over the submit behavior.")]),t._v(" "),a("div",{staticClass:"language-javascript extra-class"},[a("pre",{pre:!0,attrs:{class:"language-javascript"}},[a("code",[t._v("form"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("addEventListener")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'onSproutFormsSubmit'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("event")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Retrieve a copy of the form element")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" targetForm "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" event"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("target"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Cancel the default form submission")]),t._v("\n event"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("preventDefault")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Let Sprout Forms complete the submit behavior using the existing form settings")]),t._v("\n event"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("detail"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("submitHandler"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("handleFormSubmit")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("h2",{attrs:{id:"aftersproutformssubmit"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#aftersproutformssubmit"}},[t._v("#")]),t._v(" afterSproutFormsSubmit")]),t._v(" "),a("p",[t._v("Gives third-party scripts a chance to do something after the submission is complete.")]),t._v(" "),a("div",{staticClass:"language-javascript extra-class"},[a("pre",{pre:!0,attrs:{class:"language-javascript"}},[a("code",[t._v("form"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("addEventListener")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'afterSproutFormsSubmit'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("event")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Retrieve a copy of the form element")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" targetForm "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" event"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("target"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),a("h2",{attrs:{id:"onsproutformssubmitcancelled"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#onsproutformssubmitcancelled"}},[t._v("#")]),t._v(" onSproutFormsSubmitCancelled")]),t._v(" "),a("p",[t._v("Gives third-party scripts a chance to do something if the submission was cancelled.")]),t._v(" "),a("div",{staticClass:"language-javascript extra-class"},[a("pre",{pre:!0,attrs:{class:"language-javascript"}},[a("code",[t._v("form"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("addEventListener")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'onSproutFormsSubmitCancelled'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token parameter"}},[t._v("event")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Retrieve a copy of the form element")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("let")]),t._v(" targetForm "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" event"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("target"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/94.51774253.js b/docs/.vuepress/dist/assets/js/94.51774253.js new file mode 100644 index 00000000..bd09bec5 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/94.51774253.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[94],{576:function(t,a,i){"use strict";i.r(a);var e=i(34),o=Object(e.a)({},(function(){var t=this,a=t.$createElement,i=t._self._c||a;return i("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[i("h1",[t._v("Notifications")]),t._v(" "),i("p",[t._v("Sprout Forms supports personalized Notification Emails. Notifications in Sprout Forms are powered by Sprout Email "),i("RouterLink",{attrs:{to:"/email/notification-emails.html"}},[t._v("Notification Emails")]),t._v(". You can setup and manage any number of Notifications on the Sprout Forms "),i("strong",[t._v("Notifications")]),t._v(" tab.")],1),t._v(" "),i("h2",{attrs:{id:"email-templates"}},[i("a",{staticClass:"header-anchor",attrs:{href:"#email-templates"}},[t._v("#")]),t._v(" Email Templates")]),t._v(" "),i("p",[t._v("Sprout Forms provides a "),i("strong",[t._v("Basic Notification")]),t._v(" Email Template that loops through and displays all default Form Fields.")]),t._v(" "),i("p",[t._v("Learn more about "),i("RouterLink",{attrs:{to:"/email/default-email-templates.html"}},[t._v("Email Templates")]),t._v(" and how to customize them.")],1),t._v(" "),i("h2",{attrs:{id:"notification-events"}},[i("a",{staticClass:"header-anchor",attrs:{href:"#notification-events"}},[t._v("#")]),t._v(" Notification Events")]),t._v(" "),i("p",[t._v("Notifications in Sprout Forms are limited to Sprout Forms "),i("RouterLink",{attrs:{to:"/email/custom-notification-events.html"}},[t._v("Notification Events")]),t._v(" which currently include:")],1),t._v(" "),i("ul",[i("li",[t._v("When a Sprout Forms Entry is saved")])]),t._v(" "),i("div",{staticClass:"custom-block tip"},[i("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),i("p",[t._v("Manage all of your Notification Emails in one place using Sprout Email. Sprout Forms Notifications will appear alongside Notification Emails for Craft, Craft Commerce, and any other Notification Emails you manage in Sprout Email.")])]),t._v(" "),i("h3",{attrs:{id:"personalization"}},[i("a",{staticClass:"header-anchor",attrs:{href:"#personalization"}},[t._v("#")]),t._v(" Personalization")]),t._v(" "),i("div",{pre:!0},[i("p",[t._v("Personalize your Notifications with information from your submitted form using Craft's object syntax. A "),i("code",[t._v("SproutForms_EntryModel")]),t._v(" is available to the fields in your Notification settings:")])]),i("ul",[i("li",[t._v("Email Recipients")]),t._v(" "),i("li",[t._v("Subject")]),t._v(" "),i("li",[t._v("Sender Name")]),t._v(" "),i("li",[t._v("Sender Email Address (you probably don't want to use this)")]),t._v(" "),i("li",[t._v("Reply To Email Address")])]),t._v(" "),i("div",{pre:!0},[i("p",[t._v("For example, if you want to send the notification to the person that submitted the form and had a field named "),i("code",[t._v("email")]),t._v(" in your form, you could set the _Email Recipients` dynamically using shorthand syntax:")])]),i("div",{staticClass:"language- extra-class"},[i("pre",{pre:!0,attrs:{class:"language-text"}},[i("code",[t._v("Recipients: {email}\n")])])]),i("p",[t._v("Or full object syntax:")]),t._v(" "),i("div",{staticClass:"language- extra-class"},[i("pre",{pre:!0,attrs:{class:"language-text"}},[i("code",[t._v("Recipients: {{ object.email }}\n")])])]),i("h3",{attrs:{id:"custom-notification-templates"}},[i("a",{staticClass:"header-anchor",attrs:{href:"#custom-notification-templates"}},[t._v("#")]),t._v(" Custom Notification Templates")]),t._v(" "),i("p",[t._v("To override the default HTML used for the Notification email, see the "),i("RouterLink",{attrs:{to:"/email/template-overrides.html"}},[t._v("Email Template Overrides")]),t._v(" documentation.")],1),t._v(" "),i("h3",{attrs:{id:"advanced-notifications"}},[i("a",{staticClass:"header-anchor",attrs:{href:"#advanced-notifications"}},[t._v("#")]),t._v(" Advanced Notifications")]),t._v(" "),i("p",[t._v("If you need to send multiple notifications or want additional control over what triggers your Notifications, consider using "),i("a",{attrs:{href:"./../email"}},[t._v("Sprout Email")]),t._v(" and Sprout Forms together.")])])}),[],!1,null,null,null);a.default=o.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/95.17b329bc.js b/docs/.vuepress/dist/assets/js/95.17b329bc.js new file mode 100644 index 00000000..6dfdf0e1 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/95.17b329bc.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[95],{561:function(e,t,s){"use strict";s.r(t);var a=s(34),i=Object(a.a)({},(function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[s("h1",[e._v("Opt-in Field")]),e._v(" "),s("p",[e._v("The Opt-in Field is a specialized checkbox field that presents the user a single checkbox and supporting message. Unlike most other fields, the Opt-in Field does not display its field label by default.")]),e._v(" "),s("p",[e._v("The Opt-in Field can link to supporting pages, such as a Privacy Policy or Terms of Service, and can be marked as required to ensure a user has given consent to help comply with Email Marketing best practices, GDPR, and other regulations.")]),e._v(" "),s("h2",{attrs:{id:"settings"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#settings"}},[e._v("#")]),e._v(" Settings")]),e._v(" "),s("h3",{attrs:{id:"opt-in-message"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#opt-in-message"}},[e._v("#")]),e._v(" Opt-in Message")]),e._v(" "),s("p",[e._v("A short message to indicate what a user is opting-in to.")]),e._v(" "),s("p",[e._v("The Opt-in Message setting supports Markdown so you can emphasize text, link to a supporting page, or even use HTML. Example message with a link using Markdown:")]),e._v(" "),s("div",{staticClass:"language-markdown extra-class"},[s("pre",{pre:!0,attrs:{class:"language-markdown"}},[s("code",[e._v("Agree to our "),s("span",{pre:!0,attrs:{class:"token url"}},[e._v("["),s("span",{pre:!0,attrs:{class:"token content"}},[e._v("Privacy Policy")]),e._v("]("),s("span",{pre:!0,attrs:{class:"token url"}},[e._v("https://example.com/privacy")]),e._v(")")]),e._v("\n")])])]),s("h3",{attrs:{id:"selected-by-default"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#selected-by-default"}},[e._v("#")]),e._v(" Selected by default")]),e._v(" "),s("div",{staticClass:"custom-block warning"},[s("p",{staticClass:"custom-block-title"},[e._v("WARNING")]),e._v(" "),s("p",[e._v("Enabling this setting effectively makes the opt-in field an 'opt-out' field. Be respectful to your users.")])]),e._v(" "),s("p",[e._v("This setting will display the Opt-in field as checked by default.")]),e._v(" "),s("h3",{attrs:{id:"value-when-selected-value-when-not-selected"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#value-when-selected-value-when-not-selected"}},[e._v("#")]),e._v(" Value When Selected / Value When Not Selected")]),e._v(" "),s("p",[e._v('By default, when the Opt-in Field is displayed in Notification Emails, the value of the field will be displayed as "Yes" for someone who has opted-in and "No" for someone who has not. Update these values using these settings.')]),e._v(" "),s("h3",{attrs:{id:"make-it-required"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#make-it-required"}},[e._v("#")]),e._v(" Make it Required")]),e._v(" "),s("p",[e._v("As all Form Fields, you can mark the Opt-in Field as required. Marking the Opt-in Field as required will ensure that the user checks the field before they can successfully submit a form.")])])}),[],!1,null,null,null);t.default=i.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/96.64aedb44.js b/docs/.vuepress/dist/assets/js/96.64aedb44.js new file mode 100644 index 00000000..1da35445 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/96.64aedb44.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[96],{565:function(t,s,n){"use strict";n.r(s);var a=n(34),e=Object(a.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("h1",[t._v("Settings")]),t._v(" "),n("div",{pre:!0},[n("p",[t._v("Settings can be managed in the Control Panel "),n("em",[t._v("Sprout Forms → Settings")]),t._v(" or via a config file in "),n("code",[t._v("config/sprout-forms.php")])])]),n("div",{staticClass:"language-php extra-class"},[n("pre",{pre:!0,attrs:{class:"language-php"}},[n("code",[n("span",{pre:!0,attrs:{class:"token php language-php"}},[n("span",{pre:!0,attrs:{class:"token delimiter important"}},[t._v("")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'Sprout Forms'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// The default templates that will be used to output your forms when using")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// the displayForm tag if no Form Templates are selected for a given form")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'formTemplateId'")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'barrelstrength\\sproutforms\\formtemplates\\AccessibleTemplates'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Disable this setting to stop Sprout Forms from saving all")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// form submission data to the Craft database")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'enableSaveData'")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token constant boolean"}},[t._v("true")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Whether to save Entries flagged as spam to the database")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'saveSpamToDatabase'")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token constant boolean"}},[t._v("false")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// The default behavior for saving data when a new Form is created")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'enableSaveDataDefaultValue'")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token constant boolean"}},[t._v("true")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Enable to capture the IP Address used when a Form Entry is saved")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'trackRemoteIp'")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token constant boolean"}},[t._v("false")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// The form section that will be selected by default in the")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// sidebar navigation ('forms' or 'entries')")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'defaultSection'")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'entries'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Enable this setting to allow users to edit existing form entries in")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// front-end templates. Enabling this feature may have some workflow or")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// security considerations as forms allow anonymous submissions.")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'enableEditFormEntryViaFrontEnd'")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token constant boolean"}},[t._v("false")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// The behavior your user will see if a submission is flagged as spam")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 'redirectAsNormal' - will simulate a successful submission and direct")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// the user to the Redirect Page.")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 'redirectBackToForm - will return the user to the form. All failed")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// captchas are logged on the Spam Entries saved in the database.")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'spamRedirectBehavior'")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'redirectAsNormal'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// The total number of Spam entries that will be stored in the database.")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// When the limit is reached, the least recently updated Spam entry will")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// be deleted from the database.")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'spamLimit'")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("500")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// The probability that the Spam cleanup task will run each time a")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Form Entry is saved. A lower probability will trigger a cleanup task")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// less often and the number of Spam Entries stored in the database may")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// be higher than the Spam Limit target until the cleanup task is triggered.")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 0 - None")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 100000 - 1 in 10")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 10000 - 1 in 100")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 1000 - selected>1 in 1,000")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 100 - 1 in 10,000")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 10 - 1 in 100,000")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 1 - 1 in 1,000,000")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'cleanupProbability'")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1000")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Individual captcha settings")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Additional Captchas can be found in the Plugin Store:")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// https://plugins.craftcms.com/sprout-forms-google-recaptcha")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Custom Captchas can be added via the Captcha API")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'captchaSettings'")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'barrelstrength\\sproutforms\\captchas\\DuplicateCaptcha'")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'enabled'")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token constant boolean"}},[t._v("true")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'barrelstrength\\sproutforms\\captchas\\JavascriptCaptcha'")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'enabled'")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token constant boolean"}},[t._v("true")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'barrelstrength\\sproutforms\\captchas\\HoneypotCaptcha'")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'enabled'")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token constant boolean"}},[t._v("true")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'honeypotFieldName'")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'beesknees'")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'honeypotScreenReaderMessage'")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'Leave this field blank'")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Show/Hide the Notifications tab in Sprout Forms")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'showNotificationsTab'")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token constant boolean"}},[t._v("true")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Show/Hide the Reports tab in Sprout Forms")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[t._v("'showReportsTab'")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token constant boolean"}},[t._v("true")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])]),n("div",{staticClass:"custom-block warning"},[n("p",{staticClass:"custom-block-title"},[t._v("Front-end Editing")]),t._v(" "),n("p",[t._v("Forms are submitted anonymously by users, so unlike Entries which have Authors, you will need to manage and authenticate any users who are editing your front-end Forms.")])]),t._v(" "),n("h2",{attrs:{id:"entry-statuses"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#entry-statuses"}},[t._v("#")]),t._v(" Entry Statuses")]),t._v(" "),n("p",[t._v("Entry Status settings can only be edited in the Control Panel.")]),t._v(" "),n("p",[t._v("By default, Form Entries default to an "),n("strong",[t._v("Unread")]),t._v(" status and can be updated and marked "),n("strong",[t._v("Read")]),t._v(". Entries that trigger Captcha errors will be given the "),n("strong",[t._v("Spam")]),t._v(" status. Rename the default statuses or customize additional Entry Statuses to fit your workflows in the settings.")])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/97.74521600.js b/docs/.vuepress/dist/assets/js/97.74521600.js new file mode 100644 index 00000000..49f9ec6c --- /dev/null +++ b/docs/.vuepress/dist/assets/js/97.74521600.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[97],{564:function(t,a,s){"use strict";s.r(a);var n=s(34),e=Object(n.a)({},(function(){var t=this,a=t.$createElement,s=t._self._c||a;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",[t._v("Pre-populating a Field")]),t._v(" "),s("p",[t._v("When you want to pre-populate a field with a known value you have a few options.")]),t._v(" "),s("p",[t._v("The Sprout Fields "),s("RouterLink",{attrs:{to:"/fields/hidden-field.html"}},[t._v("Hidden Field")]),t._v(" and "),s("RouterLink",{attrs:{to:"/fields/invisible-field.html"}},[t._v("Invisible Field")]),t._v(" help do this for scenarios where you do not need the user to see the value in the field being populated.")],1),t._v(" "),s("p",[t._v("When you want to populate a visible field from a known value, you can use Javascript. Here is an example of how to do that with a Text field.")]),t._v(" "),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Output your form #}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" sprout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("forms"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("displayForm"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("application"),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 delimiter punctuation"}},[t._v("}}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Check if the value you want to use to populate the field exists #}")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("if")]),t._v(" craft"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("request"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getParam"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("location"),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("is")]),t._v(" defined "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("script")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("text/javascript"),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 script"}},[s("span",{pre:!0,attrs:{class:"token language-javascript"}},[t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# Use javascript to select your field by ID and populate your field value. #}")])]),t._v("\n document"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("getElementById")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"fields-locationFieldHandle"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("value "),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 twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" craft"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("request"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getParam"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("location"),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 delimiter punctuation"}},[t._v("}}")])]),t._v('"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\t")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("endif")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n")])])])])}),[],!1,null,null,null);a.default=e.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/98.74f8b7c1.js b/docs/.vuepress/dist/assets/js/98.74f8b7c1.js new file mode 100644 index 00000000..12b721be --- /dev/null +++ b/docs/.vuepress/dist/assets/js/98.74f8b7c1.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[98],{567:function(t,a,s){"use strict";s.r(a);var n=s(34),e=Object(n.a)({},(function(){var t=this,a=t.$createElement,s=t._self._c||a;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",[t._v("Rendering Options")]),t._v(" "),s("div",{pre:!0},[s("p",[t._v("Rendering options allow you to customize form and field output without having to override the templates. Rendering options can be passed as a twig object to the "),s("code",[t._v("displayForm")]),t._v(", "),s("code",[t._v("displayTab")]),t._v(" or "),s("code",[t._v("displayField")]),t._v(" tags.")])]),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" options "),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 id"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("my-form"),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(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" sprout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("forms"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("displayForm"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("formHandle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" options"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n")])])]),s("p",[t._v("Rendering Options may be handy to solve a specific situation, however, can become harder to maintain or reuse across multiple forms.")]),t._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[t._v("Note")]),t._v(" "),s("p",[t._v("For 100% control over your Form Templates, see "),s("RouterLink",{attrs:{to:"/forms/template-overrides.html"}},[t._v("Template Overrides")]),t._v(".")],1)]),t._v(" "),s("h2",{attrs:{id:"options"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#options"}},[t._v("#")]),t._v(" Options")]),t._v(" "),s("p",[t._v("Sprout Forms supports the following rendering options.")]),t._v(" "),s("h3",{attrs:{id:"form-tag-options"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#form-tag-options"}},[t._v("#")]),t._v(" Form tag options")]),t._v(" "),s("div",{pre:!0},[s("p",[t._v("The following options will modify the "),s("code",[t._v("")]),t._v(" tag.")])]),s("div",{pre:!0},[s("div",{pre:!0,attrs:{class:"table"}},[s("table",[s("thead",[s("tr",[s("th",[t._v("Option")]),t._v(" "),s("th",[t._v("Type")]),t._v(" "),s("th",[t._v("Default")]),t._v(" "),s("th",[t._v("Description")])])]),t._v(" "),s("tbody",[s("tr",[s("td",[s("code",[t._v("id")])]),t._v(" "),s("td",[s("code",[t._v("string")])]),t._v(" "),s("td",[s("code",[t._v("formHandle-form")])]),t._v(" "),s("td",[t._v("The id to assign to the form tag")])]),t._v(" "),s("tr",[s("td",[s("code",[t._v("class")])]),t._v(" "),s("td",[s("code",[t._v("string")])]),t._v(" "),s("td",[s("code",[t._v("formHandle-form")])]),t._v(" "),s("td",[t._v("A space-separated list of classes to apply to the form tag")])]),t._v(" "),s("tr",[s("td",[s("code",[t._v("errorClass")])]),t._v(" "),s("td",[s("code",[t._v("string")])]),t._v(" "),s("td",[s("code",[t._v("errors")])]),t._v(" "),s("td",[t._v("A space separated list of classes to apply to the form tag when errors are found")])])])])])]),s("h3",{attrs:{id:"field-wrapper-and-input-tag-options"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#field-wrapper-and-input-tag-options"}},[t._v("#")]),t._v(" Field wrapper and input tag options")]),t._v(" "),s("div",{pre:!0},[s("p",[t._v("The following options will modify the "),s("code",[t._v("")]),t._v(" field and the wrapper "),s("code",[t._v("
")]),t._v(" and related tags that surround each "),s("code",[t._v("")]),t._v(' field. Field-specific options will override global options and be applied to a specific field. Target all fields using the "*" option. (See the example below.)')])]),s("div",{pre:!0},[s("div",{pre:!0,attrs:{class:"table"}},[s("table",[s("thead",[s("tr",[s("th",[t._v("Option")]),t._v(" "),s("th",[t._v("Type")]),t._v(" "),s("th",[t._v("Default")]),t._v(" "),s("th",[t._v("Description")])])]),t._v(" "),s("tbody",[s("tr",[s("td",[s("code",[t._v("id")])]),t._v(" "),s("td",[s("code",[t._v("string")])]),t._v(" "),s("td",[s("code",[t._v("fieldHandle-field")])]),t._v(" "),s("td",[t._v("The id to assign to the input tag. Not available as a global option.")])]),t._v(" "),s("tr",[s("td",[s("code",[t._v("class")])]),t._v(" "),s("td",[s("code",[t._v("string|array")])]),t._v(" "),s("td",[s("code",[t._v("fieldHandle-field")])]),t._v(" "),s("td",[t._v("A space separated list of classes to apply to the field container and input element. Optionally, you can pass an array with the keys "),s("code",[t._v("container")]),t._v(" or "),s("code",[t._v("input")]),t._v(" to target the field container and field input independently. See example below.")])]),t._v(" "),s("tr",[s("td",[s("code",[t._v("errorClass")])]),t._v(" "),s("td",[s("code",[t._v("string")])]),t._v(" "),s("td",[s("code",[t._v("errors")])]),t._v(" "),s("td",[t._v("A space separated list of classes to apply to the field container when errors are found. Optionally, you can pass an array with the keys "),s("code",[t._v("container")]),t._v(" or "),s("code",[t._v("input")]),t._v(" to target the field container and field input independently. See example below.")])]),t._v(" "),s("tr",[s("td",[s("code",[t._v("data")])]),t._v(" "),s("td",[s("code",[t._v("{}")])]),t._v(" "),s("td"),t._v(" "),s("td",[t._v("An object (associative array) of data attributes to set on the form or input tag")])])])])])]),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[t._v("Custom Fields")]),t._v(" "),s("p",[t._v("Custom Form Fields will need to add support for these options on their own. If you are using Rendering Options with a custom Form Field and they are not behaving as expected, you may need to reach out to the respective plugin developer.")])]),t._v(" "),s("h2",{attrs:{id:"examples"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#examples"}},[t._v("#")]),t._v(" Examples")]),t._v(" "),s("h3",{attrs:{id:"overriding-values-via-the-displayform-tag"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#overriding-values-via-the-displayform-tag"}},[t._v("#")]),t._v(" Overriding values via the displayForm tag")]),t._v(" "),s("div",{pre:!0},[s("p",[t._v("The "),s("code",[t._v("displayForm()")]),t._v(" accepts rendering options for the form tag and input fields. To provide rendering options for your fields, you must create a "),s("code",[t._v("fields")]),t._v(" object and use the field handle to identify the fields that the containing rendering options should be applied to.")])]),s("h4",[t._v("Override all fields")]),t._v(" "),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" options "),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 id"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("my-form"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n class"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("form-class form-class-customized"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n errorClass"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("form-has-error"),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 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"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[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(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n class"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("all-fields-class"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n errorClass"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("all-fields-error"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n data"),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 thing"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("all-fields-data-attribute"),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("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" sprout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("forms"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("displayForm"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("formHandle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" options"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n")])])]),s("h4",[t._v("Rendered HTML")]),t._v(" "),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("form")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("method")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),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(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("my-form"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("form-class form-class-customized form-has-error"),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 twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# The example assumes our field is a Single Line field #}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("fields-fieldHandle-field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("field singleline all-fields-class all-fields-error required"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("heading"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("label")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("for")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("fields-fieldHandle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("Single Line"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("input"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),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(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("fields[fieldHandle]"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("fields-fieldHandle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("all-fields-class"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("required")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[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 attr-name"}},[t._v("aria-required")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("true"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("data-thing")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("all-fields-data-attribute"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n")])])]),s("h4",[t._v("Target field wrapper and inputs separately")]),t._v(" "),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" options "),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 id"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("my-form"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n class"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("form-class form-class-customized"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n errorClass"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("form-has-error"),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 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"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[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(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n class"),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 container"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("field-container-class"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("field-input-class"),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 errorClass"),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 container"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("field-container-error-class"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("field-input-error-class"),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 data"),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 thing"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("all-fields-data-attribute"),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("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" sprout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("forms"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("displayForm"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("formHandle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" options"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n")])])]),s("h4",[t._v("Rendered HTML")]),t._v(" "),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("form")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("method")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),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(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("my-form"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("form-class form-class-customized form-has-error"),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 twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# The example assumes our field is a Single Line field #}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("fields-fieldHandle-field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("field singleline field-container-class field-container-error-class required"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("heading"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("label")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("for")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("fields-fieldHandle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("Single Line"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("input"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),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(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("fields[fieldHandle]"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("fields-fieldHandle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("field-input-class field-input-error-class"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("required")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[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 attr-name"}},[t._v("aria-required")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("true"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("data-thing")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("all-fields-data-attribute"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v(" \n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),s("h4",[t._v("Global and specific classes")]),t._v(" "),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token tag-name keyword"}},[t._v("set")]),t._v(" options "),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 id"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("my-form"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n class"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("form-class form-class-customized"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n errorClass"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("form-has-error"),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 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"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[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(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n class"),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 container"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("field-container-class"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("field-input-class"),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 errorClass"),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 container"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("field-container-error-class"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("field-input-error-class"),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 data"),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 thing"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("all-fields-data-attribute"),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("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n fieldHandle"),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 class"),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 container"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("specific-field-container-class"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("specific-field-input-class"),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 errorClass"),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 input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("'")]),t._v("specific-field-input-error-class"),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 data"),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 thing"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("specific-field-data-attribute"),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 "),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(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("%}")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("{{")]),t._v(" sprout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("forms"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("displayForm"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("formHandle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" options"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token delimiter punctuation"}},[t._v("}}")])]),t._v("\n")])])]),s("h4",[t._v("Rendered HTML")]),t._v(" "),s("div",{staticClass:"language-twig extra-class"},[s("pre",{pre:!0,attrs:{class:"language-twig"}},[s("code",[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("form")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("method")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),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(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("my-form"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("form-class form-class-customized form-has-error"),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 twig language-twig"}},[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("{# The example assumes our field is a Single Line field #}")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("fields-fieldHandle-field"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("field singleline field-container-class specific-field-container-class field-container-error-class required"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("heading"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("label")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("for")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("fields-fieldHandle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("Single Line"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("div")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("input"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("type")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),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(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("name")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("fields[fieldHandle]"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("id")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("fields-fieldHandle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("class")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("field-input-class specific-field-input-class field-input-error-class specific-field-input-error-class"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("required")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[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 attr-name"}},[t._v("aria-required")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("true"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),s("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("data-thing")]),s("span",{pre:!0,attrs:{class:"token attr-value"}},[s("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("specific-field-data-attribute"),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 tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),s("div",{staticClass:"custom-block warning"},[s("p",{staticClass:"custom-block-title"},[t._v("Field Prefixes")]),t._v(" "),s("p",[t._v("The ID you specific will be prefixed with "),s("code",[t._v("field-")]),t._v(". This prefix is added by the "),s("code",[t._v("{% namespace %}")]),t._v(" tag in the Form Templates "),s("code",[t._v("field.twig")]),t._v(" file and also adds the "),s("code",[t._v("fields")]),t._v(" namespace around the "),s("code",[t._v("fieldHandle")]),t._v(" on the Form Field input tags (i.e. "),s("code",[t._v('name="fields[fieldHandle]"')]),t._v(").")])])])}),[],!1,null,null,null);a.default=e.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/99.17735c44.js b/docs/.vuepress/dist/assets/js/99.17735c44.js new file mode 100644 index 00000000..3b768e91 --- /dev/null +++ b/docs/.vuepress/dist/assets/js/99.17735c44.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[99],{566:function(t,o,r){"use strict";r.r(o);var e=r(34),a=Object(e.a)({},(function(){var t=this,o=t.$createElement,r=t._self._c||o;return r("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[r("h1",[t._v("Reports")]),t._v(" "),r("p",[t._v("Visit the Reports tab in Sprout Forms to run Reports on submitted Entries. Reports can be run using date ranges and exported in CSV format. You can setup and manage any number of Reports on the Sprout Forms "),r("strong",[t._v("Reports")]),t._v(" tab.")]),t._v(" "),r("h2",{attrs:{id:"data-sources"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#data-sources"}},[t._v("#")]),t._v(" Data Sources")]),t._v(" "),r("p",[t._v("Reports in Sprout Forms are limited to Sprout Forms "),r("RouterLink",{attrs:{to:"/data-studio/custom-data-sources.html"}},[t._v("Data Sources")]),t._v(" which currently include:")],1),t._v(" "),r("ul",[r("li",[t._v("Form Entries Data Source")]),t._v(" "),r("li",[t._v("Integration Log Data Source")]),t._v(" "),r("li",[t._v("Spam Log Data Source")])]),t._v(" "),r("div",{staticClass:"custom-block tip"},[r("p",{staticClass:"custom-block-title"},[t._v("Sprout Reports")]),t._v(" "),r("p",[t._v("Manage all of your Reports in one place using Sprout Reports. Sprout Forms Reports will appear alongside Reports for Craft, Craft Commerce, and any other Data Sources you manage in Sprout Reports.")])])])}),[],!1,null,null,null);o.default=a.exports}}]); \ No newline at end of file diff --git a/docs/.vuepress/dist/assets/js/app.0fdbc275.js b/docs/.vuepress/dist/assets/js/app.0fdbc275.js new file mode 100644 index 00000000..36b000ce --- /dev/null +++ b/docs/.vuepress/dist/assets/js/app.0fdbc275.js @@ -0,0 +1,21 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[0],[]]);!function(t){function e(e){for(var r,a,s=e[0],l=e[1],c=e[2],p=0,m=[];p=0&&Math.floor(e)===e&&isFinite(t)}function d(t){return i(t)&&"function"==typeof t.then&&"function"==typeof t.catch}function g(t){return null==t?"":Array.isArray(t)||u(t)&&t.toString===c?JSON.stringify(t,null,2):String(t)}function f(t){var e=parseFloat(t);return isNaN(e)?t:e}function h(t,e){for(var n=Object.create(null),r=t.split(","),o=0;o-1)return t.splice(n,1)}}var b=Object.prototype.hasOwnProperty;function w(t,e){return b.call(t,e)}function S(t){var e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}var _=/-(\w)/g,T=S((function(t){return t.replace(_,(function(t,e){return e?e.toUpperCase():""}))})),P=S((function(t){return t.charAt(0).toUpperCase()+t.slice(1)})),x=/\B([A-Z])/g,E=S((function(t){return t.replace(x,"-$1").toLowerCase()}));var C=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 k(t,e){e=e||0;for(var n=t.length-e,r=new Array(n);n--;)r[n]=t[n+e];return r}function O(t,e){for(var n in e)t[n]=e[n];return t}function A(t){for(var e={},n=0;n0,K=W&&W.indexOf("edge/")>0,J=(W&&W.indexOf("android"),W&&/iphone|ipad|ipod|ios/.test(W)||"ios"===H),Y=(W&&/chrome\/\d+/.test(W),W&&/phantomjs/.test(W),W&&W.match(/firefox\/(\d+)/)),tt={}.watch,et=!1;if(G)try{var nt={};Object.defineProperty(nt,"passive",{get:function(){et=!0}}),window.addEventListener("test-passive",null,nt)}catch(t){}var rt=function(){return void 0===N&&(N=!G&&!V&&"undefined"!=typeof global&&(global.process&&"server"===global.process.env.VUE_ENV)),N},ot=G&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function it(t){return"function"==typeof t&&/native code/.test(t.toString())}var at,st="undefined"!=typeof Symbol&&it(Symbol)&&"undefined"!=typeof Reflect&&it(Reflect.ownKeys);at="undefined"!=typeof Set&&it(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=L,ct=0,ut=function(){this.id=ct++,this.subs=[]};ut.prototype.addSub=function(t){this.subs.push(t)},ut.prototype.removeSub=function(t){y(this.subs,t)},ut.prototype.depend=function(){ut.target&&ut.target.addDep(this)},ut.prototype.notify=function(){var t=this.subs.slice();for(var e=0,n=t.length;e-1)if(i&&!w(o,"default"))a=!1;else if(""===a||a===E(t)){var l=It(String,o.type);(l<0||s0&&(pe((l=t(l,(n||"")+"_"+r))[0])&&pe(u)&&(p[c]=vt(u.text+l[0].text),l.shift()),p.push.apply(p,l)):s(l)?pe(u)?p[c]=vt(u.text+l):""!==l&&p.push(vt(l)):pe(l)&&pe(u)?p[c]=vt(u.text+l.text):(a(e._isVList)&&i(l.tag)&&o(l.key)&&i(n)&&(l.key="__vlist"+n+"_"+r+"__"),p.push(l)));return p}(t):void 0}function pe(t){return i(t)&&i(t.text)&&!1===t.isComment}function me(t,e){if(t){for(var n=Object.create(null),r=st?Reflect.ownKeys(t):Object.keys(t),o=0;o0,a=t?!!t.$stable:!i,s=t&&t.$key;if(t){if(t._normalized)return t._normalized;if(a&&n&&n!==r&&s===n.$key&&!i&&!n.$hasNormal)return n;for(var l in o={},t)t[l]&&"$"!==l[0]&&(o[l]=ve(e,l,t[l]))}else o={};for(var c in e)c in o||(o[c]=ye(e,c));return t&&Object.isExtensible(t)&&(t._normalized=o),U(o,"$stable",a),U(o,"$key",s),U(o,"$hasNormal",i),o}function ve(t,e,n){var r=function(){var t=arguments.length?n.apply(null,arguments):n({}),e=(t=t&&"object"==typeof t&&!Array.isArray(t)?[t]:ue(t))&&t[0];return t&&(!e||1===t.length&&e.isComment&&!fe(e))?void 0:t};return n.proxy&&Object.defineProperty(t,e,{get:r,enumerable:!0,configurable:!0}),r}function ye(t,e){return function(){return t[e]}}function be(t,e){var n,r,o,a,s;if(Array.isArray(t)||"string"==typeof t)for(n=new Array(t.length),r=0,o=t.length;rdocument.createEvent("Event").timeStamp&&(cn=function(){return un.now()})}function pn(){var t,e;for(ln=cn(),an=!0,en.sort((function(t,e){return t.id-e.id})),sn=0;snsn&&en[n].id>t.id;)n--;en.splice(n+1,0,t)}else en.push(t);on||(on=!0,ne(pn))}}(this)},dn.prototype.run=function(){if(this.active){var t=this.get();if(t!==this.value||l(t)||this.deep){var e=this.value;if(this.value=t,this.user){var n='callback for watcher "'+this.expression+'"';qt(this.cb,this.vm,[t,e],this.vm,n)}else this.cb.call(this.vm,t,e)}}},dn.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},dn.prototype.depend=function(){for(var t=this.deps.length;t--;)this.deps[t].depend()},dn.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||y(this.vm._watchers,this);for(var t=this.deps.length;t--;)this.deps[t].removeSub(this);this.active=!1}};var gn={enumerable:!0,configurable:!0,get:L,set:L};function fn(t,e,n){gn.get=function(){return this[e][n]},gn.set=function(t){this[e][n]=t},Object.defineProperty(t,n,gn)}function hn(t){t._watchers=[];var e=t.$options;e.props&&function(t,e){var n=t.$options.propsData||{},r=t._props={},o=t.$options._propKeys=[];t.$parent&&Tt(!1);var i=function(i){o.push(i);var a=$t(i,e,n,t);Et(r,i,a),i in t||fn(t,"_props",i)};for(var a in e)i(a);Tt(!0)}(t,e.props),e.methods&&function(t,e){t.$options.props;for(var n in e)t[n]="function"!=typeof e[n]?L:C(e[n],t)}(t,e.methods),e.data?function(t){var e=t.$options.data;u(e=t._data="function"==typeof e?function(t,e){mt();try{return t.call(e,e)}catch(t){return Nt(t,e,"data()"),{}}finally{dt()}}(e,t):e||{})||(e={});var n=Object.keys(e),r=t.$options.props,o=(t.$options.methods,n.length);for(;o--;){var i=n[o];0,r&&w(r,i)||(a=void 0,36!==(a=(i+"").charCodeAt(0))&&95!==a&&fn(t,"_data",i))}var a;xt(e,!0)}(t):xt(t._data={},!0),e.computed&&function(t,e){var n=t._computedWatchers=Object.create(null),r=rt();for(var o in e){var i=e[o],a="function"==typeof i?i:i.get;0,r||(n[o]=new dn(t,a||L,L,vn)),o in t||yn(t,o,i)}}(t,e.computed),e.watch&&e.watch!==tt&&function(t,e){for(var n in e){var r=e[n];if(Array.isArray(r))for(var o=0;o-1:"string"==typeof t?t.split(",").indexOf(e)>-1:!!p(t)&&t.test(e)}function kn(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)&&On(n,i,r,o)}}}function On(t,e,n,r){var o=t[e];!o||r&&o.tag===r.tag||o.componentInstance.$destroy(),t[e]=null,y(n,e)}!function(t){t.prototype._init=function(t){var e=this;e._uid=_n++,e._isVue=!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=zt(Tn(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._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&&Qe(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=de(e._renderChildren,o),t.$scopedSlots=r,t._c=function(e,n,r,o){return Ue(t,e,n,r,o,!1)},t.$createElement=function(e,n,r,o){return Ue(t,e,n,r,o,!0)};var i=n&&n.data;Et(t,"$attrs",i&&i.attrs||r,null,!0),Et(t,"$listeners",e._parentListeners||r,null,!0)}(e),tn(e,"beforeCreate"),function(t){var e=me(t.$options.inject,t);e&&(Tt(!1),Object.keys(e).forEach((function(n){Et(t,n,e[n])})),Tt(!0))}(e),hn(e),function(t){var e=t.$options.provide;e&&(t._provided="function"==typeof e?e.call(t):e)}(e),tn(e,"created"),e.$options.el&&e.$mount(e.$options.el)}}(Pn),function(t){var e={get:function(){return this._data}},n={get:function(){return this._props}};Object.defineProperty(t.prototype,"$data",e),Object.defineProperty(t.prototype,"$props",n),t.prototype.$set=Ct,t.prototype.$delete=kt,t.prototype.$watch=function(t,e,n){if(u(e))return Sn(this,t,e,n);(n=n||{}).user=!0;var r=new dn(this,t,e,n);if(n.immediate){var o='callback for immediate watcher "'+r.expression+'"';mt(),qt(e,this,[r.value],this,o),dt()}return function(){r.teardown()}}}(Pn),function(t){var e=/^hook:/;t.prototype.$on=function(t,n){var r=this;if(Array.isArray(t))for(var o=0,i=t.length;o1?k(n):n;for(var r=k(arguments,1),o='event handler for "'+t+'"',i=0,a=n.length;iparseInt(this.max)&&On(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)On(this.cache,t,this.keys)},mounted:function(){var t=this;this.cacheVNode(),this.$watch("include",(function(e){kn(t,(function(t){return Cn(e,t)}))})),this.$watch("exclude",(function(e){kn(t,(function(t){return!Cn(e,t)}))}))},updated:function(){this.cacheVNode()},render:function(){var t=this.$slots.default,e=Ge(t),n=e&&e.componentOptions;if(n){var r=En(n),o=this.include,i=this.exclude;if(o&&(!r||!Cn(o,r))||i&&r&&Cn(i,r))return e;var a=this.cache,s=this.keys,l=null==e.key?n.Ctor.cid+(n.tag?"::"+n.tag:""):e.key;a[l]?(e.componentInstance=a[l].componentInstance,y(s,l),s.push(l)):(this.vnodeToCache=e,this.keyToCache=l),e.data.keepAlive=!0}return e||t&&t[0]}}};!function(t){var e={get:function(){return D}};Object.defineProperty(t,"config",e),t.util={warn:lt,extend:O,mergeOptions:zt,defineReactive:Et},t.set=Ct,t.delete=kt,t.nextTick=ne,t.observable=function(t){return xt(t),t},t.options=Object.create(null),Z.forEach((function(e){t.options[e+"s"]=Object.create(null)})),t.options._base=t,O(t.options.components,Ln),function(t){t.use=function(t){var e=this._installedPlugins||(this._installedPlugins=[]);if(e.indexOf(t)>-1)return this;var n=k(arguments,1);return n.unshift(this),"function"==typeof t.install?t.install.apply(t,n):"function"==typeof t&&t.apply(null,n),e.push(t),this}}(t),function(t){t.mixin=function(t){return this.options=zt(this.options,t),this}}(t),xn(t),function(t){Z.forEach((function(e){t[e]=function(t,n){return n?("component"===e&&u(n)&&(n.name=n.name||t,n=this.options._base.extend(n)),"directive"===e&&"function"==typeof n&&(n={bind:n,update:n}),this.options[e+"s"][t]=n,n):this.options[e+"s"][t]}}))}(t)}(Pn),Object.defineProperty(Pn.prototype,"$isServer",{get:rt}),Object.defineProperty(Pn.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(Pn,"FunctionalRenderContext",{value:Fe}),Pn.version="2.6.14";var Mn=h("style,class"),jn=h("input,textarea,option,select,progress"),Fn=h("contenteditable,draggable,spellcheck"),Rn=h("events,caret,typing,plaintext-only"),zn=h("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"),Zn="http://www.w3.org/1999/xlink",$n=function(t){return":"===t.charAt(5)&&"xlink"===t.slice(0,5)},Dn=function(t){return $n(t)?t.slice(6,t.length):""},Bn=function(t){return null==t||!1===t};function Un(t){for(var e=t.data,n=t,r=t;i(r.componentInstance);)(r=r.componentInstance._vnode)&&r.data&&(e=In(r.data,e));for(;i(n=n.parent);)n&&n.data&&(e=In(e,n.data));return function(t,e){if(i(t)||i(e))return Nn(t,qn(e));return""}(e.staticClass,e.class)}function In(t,e){return{staticClass:Nn(t.staticClass,e.staticClass),class:i(t.class)?[t.class,e.class]:e.class}}function Nn(t,e){return t?e?t+" "+e:t:e||""}function qn(t){return Array.isArray(t)?function(t){for(var e,n="",r=0,o=t.length;r-1?dr(t,e,n):zn(e)?Bn(n)?t.removeAttribute(e):(n="allowfullscreen"===e&&"EMBED"===t.tagName?"true":e,t.setAttribute(e,n)):Fn(e)?t.setAttribute(e,function(t,e){return Bn(e)||"false"===e?"false":"contenteditable"===t&&Rn(e)?e:"true"}(e,n)):$n(e)?Bn(n)?t.removeAttributeNS(Zn,Dn(e)):t.setAttributeNS(Zn,e,n):dr(t,e,n)}function dr(t,e,n){if(Bn(n))t.removeAttribute(e);else{if(Q&&!X&&"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 gr={create:pr,update:pr};function fr(t,e){var n=e.elm,r=e.data,a=t.data;if(!(o(r.staticClass)&&o(r.class)&&(o(a)||o(a.staticClass)&&o(a.class)))){var s=Un(e),l=n._transitionClasses;i(l)&&(s=Nn(s,qn(l))),s!==n._prevClass&&(n.setAttribute("class",s),n._prevClass=s)}}var hr,vr={create:fr,update:fr};function yr(t,e,n){var r=hr;return function o(){var i=e.apply(null,arguments);null!==i&&Sr(t,o,n,r)}}var br=Wt&&!(Y&&Number(Y[1])<=53);function wr(t,e,n,r){if(br){var o=ln,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)}}hr.addEventListener(t,e,et?{capture:n,passive:r}:n)}function Sr(t,e,n,r){(r||hr).removeEventListener(t,e._wrapper||e,n)}function _r(t,e){if(!o(t.data.on)||!o(e.data.on)){var n=e.data.on||{},r=t.data.on||{};hr=e.elm,function(t){if(i(t.__r)){var e=Q?"change":"input";t[e]=[].concat(t.__r,t[e]||[]),delete t.__r}i(t.__c)&&(t.change=[].concat(t.__c,t.change||[]),delete t.__c)}(n),se(n,r,wr,Sr,yr,e.context),hr=void 0}}var Tr,Pr={create:_r,update:_r};function xr(t,e){if(!o(t.data.domProps)||!o(e.data.domProps)){var n,r,a=e.elm,s=t.data.domProps||{},l=e.data.domProps||{};for(n in i(l.__ob__)&&(l=e.data.domProps=O({},l)),s)n in l||(a[n]="");for(n in l){if(r=l[n],"textContent"===n||"innerHTML"===n){if(e.children&&(e.children.length=0),r===s[n])continue;1===a.childNodes.length&&a.removeChild(a.childNodes[0])}if("value"===n&&"PROGRESS"!==a.tagName){a._value=r;var c=o(r)?"":String(r);Er(a,c)&&(a.value=c)}else if("innerHTML"===n&&Hn(a.tagName)&&o(a.innerHTML)){(Tr=Tr||document.createElement("div")).innerHTML=""+r+"";for(var u=Tr.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;u.firstChild;)a.appendChild(u.firstChild)}else if(r!==s[n])try{a[n]=r}catch(t){}}}}function Er(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(i(r)){if(r.number)return f(n)!==f(e);if(r.trim)return n.trim()!==e.trim()}return n!==e}(t,e))}var Cr={create:xr,update:xr},kr=S((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 Or(t){var e=Ar(t.style);return t.staticStyle?O(t.staticStyle,e):e}function Ar(t){return Array.isArray(t)?A(t):"string"==typeof t?kr(t):t}var Lr,Mr=/^--/,jr=/\s*!important$/,Fr=function(t,e,n){if(Mr.test(e))t.style.setProperty(e,n);else if(jr.test(n))t.style.setProperty(E(e),n.replace(jr,""),"important");else{var r=zr(e);if(Array.isArray(n))for(var o=0,i=n.length;o-1?e.split(Dr).forEach((function(e){return t.classList.add(e)})):t.classList.add(e);else{var n=" "+(t.getAttribute("class")||"")+" ";n.indexOf(" "+e+" ")<0&&t.setAttribute("class",(n+e).trim())}}function Ur(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(Dr).forEach((function(e){return t.classList.remove(e)})):t.classList.remove(e),t.classList.length||t.removeAttribute("class");else{for(var n=" "+(t.getAttribute("class")||"")+" ",r=" "+e+" ";n.indexOf(r)>=0;)n=n.replace(r," ");(n=n.trim())?t.setAttribute("class",n):t.removeAttribute("class")}}function Ir(t){if(t){if("object"==typeof t){var e={};return!1!==t.css&&O(e,Nr(t.name||"v")),O(e,t),e}return"string"==typeof t?Nr(t):void 0}}var Nr=S((function(t){return{enterClass:t+"-enter",enterToClass:t+"-enter-to",enterActiveClass:t+"-enter-active",leaveClass:t+"-leave",leaveToClass:t+"-leave-to",leaveActiveClass:t+"-leave-active"}})),qr=G&&!X,Gr="transition",Vr="transitionend",Hr="animation",Wr="animationend";qr&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(Gr="WebkitTransition",Vr="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(Hr="WebkitAnimation",Wr="webkitAnimationEnd"));var Qr=G?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(t){return t()};function Xr(t){Qr((function(){Qr(t)}))}function Kr(t,e){var n=t._transitionClasses||(t._transitionClasses=[]);n.indexOf(e)<0&&(n.push(e),Br(t,e))}function Jr(t,e){t._transitionClasses&&y(t._transitionClasses,e),Ur(t,e)}function Yr(t,e,n){var r=eo(t,e),o=r.type,i=r.timeout,a=r.propCount;if(!o)return n();var s="transition"===o?Vr:Wr,l=0,c=function(){t.removeEventListener(s,u),n()},u=function(e){e.target===t&&++l>=a&&c()};setTimeout((function(){l0&&(n="transition",u=a,p=i.length):"animation"===e?c>0&&(n="animation",u=c,p=l.length):p=(n=(u=Math.max(a,c))>0?a>c?"transition":"animation":null)?"transition"===n?i.length:l.length:0,{type:n,timeout:u,propCount:p,hasTransform:"transition"===n&&to.test(r[Gr+"Property"])}}function no(t,e){for(;t.length1}function lo(t,e){!0!==e.data.show&&oo(e)}var co=function(t){var e,n,r={},l=t.modules,c=t.nodeOps;for(e=0;eg?b(t,o(n[v+1])?null:n[v+1].elm,n,d,v,r):d>v&&S(e,m,g)}(m,h,v,n,u):i(v)?(i(t.text)&&c.setTextContent(m,""),b(m,null,v,0,v.length-1,n)):i(h)?S(h,0,h.length-1):i(t.text)&&c.setTextContent(m,""):t.text!==e.text&&c.setTextContent(m,e.text),i(g)&&i(d=g.hook)&&i(d=d.postpatch)&&d(t,e)}}}function x(t,e,n){if(a(n)&&i(t.parent))t.parent.data.pendingInsert=e;else for(var r=0;r-1,a.selected!==i&&(a.selected=i);else if(F(fo(a),r))return void(t.selectedIndex!==s&&(t.selectedIndex=s));o||(t.selectedIndex=-1)}}function go(t,e){return e.every((function(e){return!F(e,t)}))}function fo(t){return"_value"in t?t._value:t.value}function ho(t){t.target.composing=!0}function vo(t){t.target.composing&&(t.target.composing=!1,yo(t.target,"input"))}function yo(t,e){var n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!0),t.dispatchEvent(n)}function bo(t){return!t.componentInstance||t.data&&t.data.transition?t:bo(t.componentInstance._vnode)}var wo={model:uo,show:{bind:function(t,e,n){var r=e.value,o=(n=bo(n)).data&&n.data.transition,i=t.__vOriginalDisplay="none"===t.style.display?"":t.style.display;r&&o?(n.data.show=!0,oo(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=bo(n)).data&&n.data.transition?(n.data.show=!0,r?oo(n,(function(){t.style.display=t.__vOriginalDisplay})):io(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)}}},So={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 _o(t){var e=t&&t.componentOptions;return e&&e.Ctor.options.abstract?_o(Ge(e.children)):t}function To(t){var e={},n=t.$options;for(var r in n.propsData)e[r]=t[r];var o=n._parentListeners;for(var i in o)e[T(i)]=o[i];return e}function Po(t,e){if(/\d-keep-alive$/.test(e.tag))return t("keep-alive",{props:e.componentOptions.propsData})}var xo=function(t){return t.tag||fe(t)},Eo=function(t){return"show"===t.name},Co={name:"transition",props:So,abstract:!0,render:function(t){var e=this,n=this.$slots.default;if(n&&(n=n.filter(xo)).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=_o(o);if(!i)return o;if(this._leaving)return Po(t,o);var a="__transition-"+this._uid+"-";i.key=null==i.key?i.isComment?a+"comment":a+i.tag:s(i.key)?0===String(i.key).indexOf(a)?i.key:a+i.key:i.key;var l=(i.data||(i.data={})).transition=To(this),c=this._vnode,u=_o(c);if(i.data.directives&&i.data.directives.some(Eo)&&(i.data.show=!0),u&&u.data&&!function(t,e){return e.key===t.key&&e.tag===t.tag}(i,u)&&!fe(u)&&(!u.componentInstance||!u.componentInstance._vnode.isComment)){var p=u.data.transition=O({},l);if("out-in"===r)return this._leaving=!0,le(p,"afterLeave",(function(){e._leaving=!1,e.$forceUpdate()})),Po(t,o);if("in-out"===r){if(fe(i))return c;var m,d=function(){m()};le(l,"afterEnter",d),le(l,"enterCancelled",d),le(p,"delayLeave",(function(t){m=t}))}}return o}}},ko=O({tag:String,moveClass:String},So);function Oo(t){t.elm._moveCb&&t.elm._moveCb(),t.elm._enterCb&&t.elm._enterCb()}function Ao(t){t.data.newPos=t.elm.getBoundingClientRect()}function Lo(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("+r+"px,"+o+"px)",i.transitionDuration="0s"}}delete ko.mode;var Mo={Transition:Co,TransitionGroup:{props:ko,beforeMount:function(){var t=this,e=this._update;this._update=function(n,r){var o=Ke(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=To(this),s=0;s-1?Qn[t]=e.constructor===window.HTMLUnknownElement||e.constructor===window.HTMLElement:Qn[t]=/HTMLUnknownElement/.test(e.toString())},O(Pn.options.directives,wo),O(Pn.options.components,Mo),Pn.prototype.__patch__=G?co:L,Pn.prototype.$mount=function(t,e){return function(t,e,n){var r;return t.$el=e,t.$options.render||(t.$options.render=ht),tn(t,"beforeMount"),r=function(){t._update(t._render(),n)},new dn(t,r,L,{before:function(){t._isMounted&&!t._isDestroyed&&tn(t,"beforeUpdate")}},!0),n=!1,null==t.$vnode&&(t._isMounted=!0,tn(t,"mounted")),t}(this,t=t&&G?function(t){if("string"==typeof t){var e=document.querySelector(t);return e||document.createElement("div")}return t}(t):void 0,e)},G&&setTimeout((function(){D.devtools&&ot&&ot.emit("init",Pn)}),0),e.a=Pn},function(t,e){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,e,n){var r=n(52),o=Function.prototype,i=o.bind,a=o.call,s=r&&i.bind(a,a);t.exports=r?function(t){return t&&s(t)}:function(t){return t&&function(){return a.apply(t,arguments)}}},function(t,e){t.exports=function(t){return"function"==typeof t}},function(t,e,n){var r=n(0),o=n(40),i=n(10),a=n(71),s=n(41),l=n(141),c=o("wks"),u=r.Symbol,p=u&&u.for,m=l?u:u&&u.withoutSetter||a;t.exports=function(t){if(!i(c,t)||!s&&"string"!=typeof c[t]){var e="Symbol."+t;s&&i(u,t)?c[t]=u[t]:c[t]=l&&p?p(e):m(e)}return c[t]}},function(t,e,n){var r=n(52),o=Function.prototype.call;t.exports=r?o.bind(o):function(){return o.apply(o,arguments)}},function(t,e,n){var r=n(5);t.exports=function(t){return"object"==typeof t?null!==t:r(t)}},function(t,e,n){var r=n(3);t.exports=!r((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},function(t,e,n){var r=n(4),o=n(18),i=r({}.hasOwnProperty);t.exports=Object.hasOwn||function(t,e){return i(o(t),e)}},function(t,e,n){var r=n(0),o=n(8),i=r.String,a=r.TypeError;t.exports=function(t){if(o(t))return t;throw a(i(t)+" is not an object")}},function(t,e,n){var r=n(106),o=n(15),i=n(246);r||o(Object.prototype,"toString",i,{unsafe:!0})},function(t,e,n){var r=n(0),o=n(9),i=n(143),a=n(142),s=n(11),l=n(74),c=r.TypeError,u=Object.defineProperty,p=Object.getOwnPropertyDescriptor;e.f=o?a?function(t,e,n){if(s(t),e=l(e),s(n),"function"==typeof t&&"prototype"===e&&"value"in n&&"writable"in n&&!n.writable){var r=p(t,e);r&&r.writable&&(t[e]=n.value,n={configurable:"configurable"in n?n.configurable:r.configurable,enumerable:"enumerable"in n?n.enumerable:r.enumerable,writable:!1})}return u(t,e,n)}:u:function(t,e,n){if(s(t),e=l(e),s(n),i)try{return u(t,e,n)}catch(t){}if("get"in n||"set"in n)throw c("Accessors not supported");return"value"in n&&(t[e]=n.value),t}},function(t,e,n){var r=n(0),o=n(5),i=function(t){return o(t)?t:void 0};t.exports=function(t,e){return arguments.length<2?i(r[t]):r[t]&&r[t][e]}},function(t,e,n){var r=n(0),o=n(5),i=n(22),a=n(214),s=n(98);t.exports=function(t,e,n,l){var c=!!l&&!!l.unsafe,u=!!l&&!!l.enumerable,p=!!l&&!!l.noTargetGet,m=l&&void 0!==l.name?l.name:e;return o(n)&&a(n,m,l),t===r?(u?t[e]=n:s(e,n),t):(c?!p&&t[e]&&(u=!0):delete t[e],u?t[e]=n:i(t,e,n),t)}},function(t,e){t.exports=!1},function(t,e,n){var r=n(0),o=n(69),i=r.String;t.exports=function(t){if("Symbol"===o(t))throw TypeError("Cannot convert a Symbol value to a string");return i(t)}},function(t,e,n){var r=n(0),o=n(30),i=r.Object;t.exports=function(t){return i(o(t))}},function(t,e,n){var r=n(51),o=n(30);t.exports=function(t){return r(o(t))}},function(t,e,n){"use strict";var r=n(1),o=n(86);r({target:"RegExp",proto:!0,forced:/./.exec!==o},{exec:o})},function(t,e,n){"use strict";var r=n(134).charAt,o=n(17),i=n(36),a=n(146),s=i.set,l=i.getterFor("String Iterator");a(String,"String",(function(t){s(this,{type:"String Iterator",string:o(t),index:0})}),(function(){var t,e=l(this),n=e.string,o=e.index;return o>=n.length?{value:void 0,done:!0}:(t=r(n,o),e.index+=t.length,{value:t,done:!1})}))},function(t,e,n){var r=n(9),o=n(13),i=n(38);t.exports=r?function(t,e,n){return o.f(t,e,i(1,n))}:function(t,e,n){return t[e]=n,t}},function(t,e){var n=Array.isArray;t.exports=n},function(t,e,n){var r=n(0),o=n(5),i=n(54),a=r.TypeError;t.exports=function(t){if(o(t))return t;throw a(i(t)+" is not a function")}},function(t,e,n){var r=n(175),o="object"==typeof self&&self&&self.Object===Object&&self,i=r||o||Function("return this")();t.exports=i},function(t,e,n){var r=n(4),o=r({}.toString),i=r("".slice);t.exports=function(t){return i(o(t),8,-1)}},function(t,e,n){var r,o=n(11),i=n(132),a=n(101),s=n(55),l=n(145),c=n(73),u=n(77),p=u("IE_PROTO"),m=function(){},d=function(t){return" + + diff --git a/docs/.vuepress/dist/configuration/requirements.html b/docs/.vuepress/dist/configuration/requirements.html new file mode 100644 index 00000000..6227d862 --- /dev/null +++ b/docs/.vuepress/dist/configuration/requirements.html @@ -0,0 +1,63 @@ + + + + + + Requirements | Sprout Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Requirements

4.44.444

To align Sprout plugins with Craft major releases, all Sprout Marketing Suite plugins added Craft 4 support at version 4.44.444 and will add Craft 5 support at 5.0.0

# Installation via Plugin Store

  1. Find one or more Sprout plugin from the Craft Plugin Store and select “Install”
  2. Go to Settings → Plugins in your Craft Control Panel and select “Install”

# Installation via Composer

  1. Open your terminal and go to your Craft project.
cd /path/to/project
+
  1. Run Composer to retrieve the plugin
composer require barrelstrength/sprout-forms
+
  1. In the Control Panel, go to Settings → Plugins and select “Install”

# Upgrading to Craft 4

BEFORE YOU UPDATE!

Make sure you have updated to the latest version of all Sprout Plugins on Craft 3.x before updating your plugins to Craft 4.x. View the Update Guides for more details.

+ + + diff --git a/docs/.vuepress/dist/configuration/sprout-config.html b/docs/.vuepress/dist/configuration/sprout-config.html new file mode 100644 index 00000000..c9d7ec34 --- /dev/null +++ b/docs/.vuepress/dist/configuration/sprout-config.html @@ -0,0 +1,61 @@ + + + + + + Config Settings | Sprout Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Config Settings

Sprout settings are configured on a per-module basis and documented in the Control Panel and the example config files (opens new window) in the root of the repository.

Configuration settings are managed across five areas:

  1. Environment Variables
    • The .env file can include variables prefixed with the Sprout module name
    • Example: SPROUT_MODULE_FORMS_NAME_OF_SETTING=123
  2. File-based Config Overrides
    • File-based configs can be added in the config folder
    • Example: config/sprout-module-forms.php
  3. Control Panel
    • Mange Control Panel settings by navigating to Settings -> Sprout
    • Most Control Panel settings store their data in the Project Config
    • Example: config/project/project.yaml or config/project/sprout/*
  4. Database Tables
    • Some Control Panel settings store their data in the database
    • Data is stored in the db when user workflows need to update settings in the live environment
  5. API Requests
    • Some actions via Twig or PHP can sometimes override all of the above
    • Some actions can explicitly define a setting at the time of the request

Settings at the Source

While you might see settings referenced here as an example or feature description, the most accurate settings documentation exists within the Craft docs and the plugin UI or codebase.

We initially tried to list the settings in the online docs but, most of the time, we were just copying and pasting the instruction text or example code comments and it was tedious to always update that text in multiple places to keep things in sync.

Pointing you towards the source helps us reduce the chance we have inconsistent settings documentation in multiple places and, we hope, will help you understand where the answers already exist in your workflow. Reach out if you want additional training or support.

+ + + diff --git a/docs/.vuepress/dist/configuration/updates.html b/docs/.vuepress/dist/configuration/updates.html new file mode 100644 index 00000000..56b04016 --- /dev/null +++ b/docs/.vuepress/dist/configuration/updates.html @@ -0,0 +1,61 @@ + + + + + + Update Guides | Sprout Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Update Guides

The Sprout Framework Changelog (opens new window) reflects the most recent updates to all of our plugins and can be found at the top level in the Github repo.

The guides below provide details for noteworthy upgrades such as breaking changes, new things to be aware of, or planned deprecation notices. For the best experience while upgrading, please review the relevant upgrade guides before you upgrade.

# Craft 4

Upgrading To Notes
4.44.444 ⚠️ Added Craft 4 Support. Major update!

Craft 3 Migration Path

Avoid incremental updates to older versions of Craft and Sprout.

THERE IS A BETTER WAY

Sprout 4.44.444 added Craft 4 support, introduced a new plugin architecture, and solved several migration issues that had arisen in the older architecture. Before upgrading to Craft 4 and Sprout 4.44.444, upgrade your site to the latest version of Craft 3.x and the most recent Sprout releases on Craft 3 all in one go.

We recommend avoiding incremental upgrades (e.g. from 3.2 to 3.3 to 3.4, etc.) as Craft 3 and Sprout did not play nicely together between Craft 3.2 and 3.7 and many of those issues are resolved if you can upgrade to the most recent version of Sprout on the latest version of Craft 3 with a single migration.

To upgrade Craft and Sprout to a version earlier than Craft 3.7.x and Sprout 4.40.x, please review the Installing & Updating section in the Sprout v3 documentation for the specific plugins you are updating.

Last Updated: 2/19/2023, 10:46:19 PM
+ + + diff --git a/docs/.vuepress/dist/data-studio/custom-data-sources.html b/docs/.vuepress/dist/data-studio/custom-data-sources.html new file mode 100644 index 00000000..a3038343 --- /dev/null +++ b/docs/.vuepress/dist/data-studio/custom-data-sources.html @@ -0,0 +1,69 @@ + + + + + + Data Sources | Sprout Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Data Sources

Custom Data Sources can be created by plugins. You can create as many Data Sources as you'd like.

Please see the Sprout Reports codebase for examples on how to create your own datasource. Sprout Reports' native Data Sources are written in the same way that you would write a custom Data Source.

Explore the default data sources in the plugin folder:

  • vendor/barrelstrength/sprout/src/datastudio/components/datasources

To create a Data Source you will need to:

  1. Create a class for your Data Source(s)

Data Sources extend the DataSource class:

class MyCustomDataSource extends DataSource
+{
+  ...
+}
+
  1. Install your Data Source (optional)

You can install your Data Source via an install script or migration or just let users hit the "Install" button on the Data Sources tab. To install a Data Source from your plugin or module, in your primary plugin, run Sprout Base Report's installDataSources method after installation:

protected function afterInstall()
+{
+    $dataSourceTypes = [
+        MyCustomDataSource::class
+    ];
+
+    SproutBaseReports::$app->dataSources->installDataSources($dataSourceTypes);
+}
+
+ + + diff --git a/docs/.vuepress/dist/data-studio/custom-query-report.html b/docs/.vuepress/dist/data-studio/custom-query-report.html new file mode 100644 index 00000000..714400df --- /dev/null +++ b/docs/.vuepress/dist/data-studio/custom-query-report.html @@ -0,0 +1,63 @@ + + + + + + Custom Query | Sprout Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Custom Query

The Custom Query Data Source allows you to create Reports in the Craft Control Panel using a Custom MySQL Query.

# Query all data in the Users table

SELECT *
+FROM users;
+

Example assumes you setup Craft with the default database table naming conventions.

+ + + diff --git a/docs/.vuepress/dist/data-studio/custom-twig-template-report.html b/docs/.vuepress/dist/data-studio/custom-twig-template-report.html new file mode 100644 index 00000000..21da0fb6 --- /dev/null +++ b/docs/.vuepress/dist/data-studio/custom-twig-template-report.html @@ -0,0 +1,129 @@ + + + + + + Twig Template Query | Sprout Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Twig Template Query

The Twig Template Data Source allows you to create reports in the Craft Control Panel using Twig Templates in your craft/templates folder.

Setting up a Custom Twig Template report requires a couple of steps.

  1. Create a new Custom Twig Template Report
  2. Add your Template Settings
  3. Customize your Report's Results Template and Options Template settings

TIP

See the Sprout Reports examples/templates folders for commented example files of Twig Template Reports and Settings Templates. Copy those files to your craft/template folder and setup a Twig Template report to use them as described below.

# Template Settings

To setup a Twig Template report you need to build a Results Template. Identifying your Results Template is the one required component of your Custom Twig Template report. The report template settings behave just like the Craft Sections 'Entry Template' setting.

  • Results Template (required) - _reports/reportname/results
  • Settings Template - _reports/reportname/settings

TIP

Sprout Reports will look for your templates in your front-end craft/templates folder so it's a good idea to use a hidden folder that can't be accessed directly from the web.

# Results Template

Your Results Template is where you will build your report. A report consists of any number of rows. Rows must each have an equal number of columns.

The Twig Template Report has three helper tags to use when building reports:

Tag Description
sprout.twigDataSet.addHeaderRow() Define the columns in the first row of your report
sprout.twigDataSet.addRow() Add a single row of data to your report
sprout.twigDataSet.addRows() Add an array of multiple rows of data to your report

You can use addHeaderRow anywhere in your template to define the first row in your report that will be used as the column headers. The addRow and addRows actions add rows to your report in the order that they are used in your template.

The Twig Template Report also makes two variables available to your templates:

Variable Description
settings The values for all of your reports settings (e.g settings.mySetting)
isExport The isExport variable will be set to true when your report is being processed as an export. One use for this is if you'd like to display a link in HTML in your report in the Control Panel, but want a text value when the report is exported.

Here is a simple, hard-coded example of each tag in use for a two-column report:

# craft/templates/_reports/reportname/results.html

{# addHeaderRow accepts a single array with a comma-separated list of values #}
+{% do sprout.twigDataSet.addHeaderRow(['Region', 'Trip Name']) %}
+
+{# addRow, also accepts a single array with a comma-separated list of values. The array is defined by the opening and closing square brackets. #}
+{% do sprout.twigDataSet.addRow([
+  'Europe', 
+  'Camino de Santiago'
+]) %}
+
+{# addRows, accepts an array of arrays, where each array includes a comma-separated list of values. Note that there are two levels of opening and closing square brackets. #}
+{% do sprout.twigDataSet.addRows([
+    ['North America', 'John Muir Trail'],
+    ['Asia', 'Langtang Trek']
+]) %}
+

# Settings Template

If you want to give your user control over some Settings when they generate a Report, you can do so by defining an Settings Template.

TIP

Use the Form Macros supported by the Craft CP to keep consistent with the Craft UI. Sprout Reports will import the Craft CP Form Macros. Your Settings Template can look like this where the imported forms variable includes all Craft form macros defined in craft/app/templates/_includes/forms.html. :

# craft/templates/_reports/reportname/settings.html

{# Number Setting #}
+{{ forms.textField({
+    label: "Limit"|t,
+    name: "limit",
+    size: 10,
+    value: settings.quantity is defined ? settings.quantity : null,
+    first: true
+}) }}
+
+{# Pre-defined Dropdown #}
+{{ forms.selectField({
+    label: "Region"|t,
+    name: "region",
+    options: {
+        "africa" : "Africa",
+        "antartica" : "Antartica",
+        "asia" : "Asia",
+        "australia" : "Australia",
+        "europe" : "Europe",
+        "northAmerica" : "North America",
+        "southAmerica" : "South America"
+    },
+    value: settings.region is defined ? settings.region : "Antartica"
+}) }}
+
+{# Dynamic Dropdown #}
+{% set categoryGroup = craft.categories.group('exampleCategoryGroup') %}
+{% set categories = [] %}
+{% for category in categoryGroup %}
+    {% set categories = categories|merge({
+        label: category.id,
+        value: category.title
+    }) %}
+{% endfor %}
+
+{{ forms.selectField({
+    label: "Example Category Element Dropdown Field"|t,
+    name: "exampleCategoryDropdownField",
+    options: categories,
+    value: 1
+}) }}
+

All Settings are available to you via the settings variable. Be sure to test if they exist. See an example Settings Template with several common fields in the Sprout Reports examples/templates folder.

  • Text
  • Textarea
  • Dropdown
  • Radio Buttons
  • Checkboxes
  • Lightswitch
  • DateTime (requires that you start the field name with "datetime", i.e. 'datetimeStartDate')

Examples also include how to toggle the display of conditional fields and how to use DateTime fields which require some additional steps. Additional field types can be used, but some fields with advanced validation may require that you create a Custom Data Source. The only field Twig Template Reports support with advanced validation requirements is the DateTime field.

# Using Settings in Results

When a user runs a report, all Settings will be passed to the Results Template and can be used in your Settings Template Twig code to help query and display data how you wish:

# reports/reportname/results.html

In this example we use our settings to retrieve a CategoryModel and then use that CategoryModel to retrieve all Trips that relate to that Category. We limit the results by the number provided by the user in the Limit setting.

{% set region = craft.categories.group(settings.region) %}
+{% set trips = craft.entries.section('trips').relatedTo(region).limit(settings.limit) %}
+
+{# Create a Header Row #}
+{% do sprout.twigDataSet.addHeaderRow(['Region', 'Trip Name']) %}
+
+{# Loop through our trips and output the Region and Trip Name for each result #}
+{% for trip in trips %}
+    {% do sprout.twigDataSet.addRow([
+        trip.relatedCategory.first().title, 
+        trip.title
+    ]) %}
+{% endfor %}
+
+ + + diff --git a/docs/.vuepress/dist/data-studio/html-vs-csv.html b/docs/.vuepress/dist/data-studio/html-vs-csv.html new file mode 100644 index 00000000..5ac5d405 --- /dev/null +++ b/docs/.vuepress/dist/data-studio/html-vs-csv.html @@ -0,0 +1,82 @@ + + + + + + HTML vs CSV | Sprout Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

HTML vs CSV

Reports exist in two forms. They display in web browser when viewed in the Control Panel and as CSV files when exported. If you wish to treat your data differently in these two contexts you can use the isExport variable.

# Twig Template Example

In Twig Template Reports the isExport variable is available in your results template.




 


{% do sprout.twigDataSet.addHeaderRow(['Row']) %}
+
+{% do sprout.twigDataSet.addRow([
+    isExport ? 'Not Link' : '<a href="">Link</a>'
+]) %}
+

# Custom Data Source Example

When building a custom data source, the context is defined as a property on the DataSource class. The 'isExport' property is set to false by default and gets set to true when running the export action.










 







class MyCustomDataSource extends DataSource
+{
+    ...
+
+    public function getResults(Report $report, array $settings = []): array
+    {
+        // Results logic
+
+        Craft::$app->getView()->renderTemplate('path/to/resultsTemplate', [
+            'isExport' => $this->isExport,
+            'settings' => $settings
+        ]);
+    }
+
+    ...
+}
+
+ + + diff --git a/docs/.vuepress/dist/data-studio/index.html b/docs/.vuepress/dist/data-studio/index.html new file mode 100644 index 00000000..da94fbc2 --- /dev/null +++ b/docs/.vuepress/dist/data-studio/index.html @@ -0,0 +1,61 @@ + + + + + + About Data Studio | Sprout Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

About Data Studio

Sprout Data Studio allows you to create interactive data sets from customizable data sources.

Data sets can be created from our default Data Sources or you can create your own. Multiple Data Sources are provided out of the box and additional Data Sources are available via custom plugins.

# Data Sources

A Data Source defines a set of data that can be queried by a Data Set and which settings are available be used when querying that data. A Data Source can define a subset of data that exists in your Craft database (such as Craft User data or Craft Commerce Product data) or from any source that you wish to query near or far. For example, a custom Data Source could query data from a third-party API and return the results to a Data Set to display.

Sprout Data Studio provides a few Data Sources out of the box:

  • Custom Query - Create data sets using custom database queries
  • Twig Template Query - Create data sets using custom queries in a Twig Template
  • Users - Create data sets with User and User Group data
  • Order History - Create data sets with Craft Commerce Order History data
  • Product Revenue - Create data sets with Craft Commerce Product Revenue data

# Data Sets

Data Sets allow you to create queries into the data defined by a Data Source. You can create one or more Data Sets from a single Data Source and each Data Set can define unique query settings.

Data Sets can be organized into groups and customized so that you can conveniently interact with data set results in the Control Panel or export it as you need.

# Settings

Read the Config Settings documentation to explore and customize settings.

+ + + diff --git a/docs/.vuepress/dist/data-studio/installing-and-updating-craft-3.html b/docs/.vuepress/dist/data-studio/installing-and-updating-craft-3.html new file mode 100644 index 00000000..6386c03c --- /dev/null +++ b/docs/.vuepress/dist/data-studio/installing-and-updating-craft-3.html @@ -0,0 +1,82 @@ + + + + + + Craft 3 | Sprout Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Craft 3

Sprout Reports installation and update instructions for Craft 3.

# Requirements

  • Craft CMS 3.0.0-RC1 or a more recent version of Craft

# Installation via Plugin Store

  1. Find the plugin in the Plugin Store in your Craft Control Panel
  2. Go to Settings → Plugins and select “Install”

# Installation via Composer

  1. Open your terminal and go to your Craft project:
    cd /path/to/project
  2. Then tell Composer to load the plugin:
    composer require barrelstrength/sprout-reports
  3. In the Control Panel, go to Settings → Plugins and select “Install”

# Upgrading to v1.1.8

Custom Data Sources will need to make a minor update when upgrading to Sprout Base Reports 1.2.0 (Sprout Reports v1.1.8). Data Sources will still display in the interface but may not have an ideal name until they are updated to use the displayName() method.

OLD:
+public function getName(): string
+{
+    return Craft::t('sprout-reports', 'Twig Template');
+}
+
+NEW:
+public static function displayName(): string
+{
+    return Craft::t('sprout-reports', 'Twig Template');
+}
+

# Upgrading to Craft 3

BEFORE YOU UPDATE

Make sure you have updated to the latest version of Sprout Reports 0.x before updating to Sprout Reports 1.x for Craft 3

There are a few changes to be aware of when upgrading to Sprout Reports for Craft 3. We have simplified the Sprout Reports plugin to only include two Data Sources out of the box. Additional Data Sources can be added as desired.

Here's an overview of the Data Sources we have supported and which plugins they can be found in between Craft 2 and Craft 3:

Data Sources Craft 2 Plugin Craft 3 Plugin
Custom Query Sprout Reports Sprout Reports
Twig Template Sprout Reports Sprout Reports
Categories Sprout Reports Sprout Reports - Categories
Users Sprout Reports Sprout Reports - Users
Commerce Sprout Reports for Craft Commerce Sprout Reports - Craft Commerce
Sprout Forms Entries Sprout Forms Sprout Forms
Custom - Other Custom Custom

# Upgrading Categories and Users

If you have any Categories or Users reports in Craft 2, you'll want to download and install the Sprout Reports - Categories and Sprout Reports - Users plugins in Craft 3 after you get upgraded. Your existing Categories and Users reports will not display until you add those plugins.

# Upgrading Sprout Forms

If you use Reports for Sprout Forms, they will get migrated over when you upgrade Sprout Forms. If you only need Reports for Sprout Forms, you don't have to upgrade Sprout Reports. Sprout Forms for Craft 3 will give you full functionality for Sprout Forms Reports without ever having to install Sprout Reports.

# Upgrading Commerce Reports

Until Craft Commerce 2 is released and we get around to updating the Sprout Reports for Craft Commerce any Commerce Reports will be disabled. Your data will remain in the database and once we have the Commerce Reports plugin available your reports will become available again when that plugin is installed.

# Custom Reports

If you have any custom reports, you'll need to write a migration to get them updated to Craft 3. Please refer to the Sprout Reports - Categories and Sprout Reports - Users plugins Install migrations for examples.

# Upgrading to Reports v1.3.0

If you have the Users Data Source for Sprout Reports installed, when you update to Sprout Reports v1.3.0 your existing Users Reports will be migrated and you can safely uninstall and remove the Users Data Source plugin after the upgrade is complete.

# Upgrading to Reports 2.0.0 - UNRELEASED

Sprout Reports 2 is a major release the includes an update to the underlying architecture. The Sprout Reports user experience will remain familiar but several conventions have changed. Most notably, the core codebase for barrelstrength/sprout-reports has been moved to the barrelstrength/sprout-base package so any custom code, translations, or direct links to the Sprout Reports Control Panel will need to be updated to target the new naming conventions. Plugin-specific Control Panel settings have also moved to the Craft settings area.

# BREAKING CHANGE

Removed Report Element hasNameFormat attribute

# Editions

Sprout Reports 2.0.0 introduces Lite and Pro Editions. Existing users will be upgraded to a Pro licenses with no recurring yearly fees.

Pro users will enjoy unlimited reports, visualizations, and mailing list integrations. Lite users can take advantage of unlimited Custom Query Reports.

UPDATE LIST OF FEATURES ****
+- Unlimited Custom Query Report available in Lite 
+- Pro Visualizations (we can still insert manual visualizations at top of Entries in Forms via APi)
+    Limit to just line chart viz? No widgets? Or only line chart as widget?
+- Pro: Mailing List Integrations (don't display in sources, show pro callout on Edit page, make sure 'reports' is pro to display Email sidebar modal setting)
+- Reports now have editions: Restrict Reports Lite to only custom query reports, vs. 1 of each. Still restrict viz and stuff which will also be a draw to upgrade.
+

# Architectural Changes

Feature Old Name New Name
CP URL admin/sprout-reports admin/sprout/lists
Template Variables craft.sproutReports sprout.reports
Translation Category sprout-reports sprout
Controller Namespace barrelstrength/sproutreports/controllers barrelstrength/sproutbase/app/reports/controllers
Service Namespace barrelstrength/sproutreports/services barrelstrength/sproutbase/app/reports/services

# Custom Data Source Updates

Custom Data Sources have been updated to clean up how settings are handled. You should now access Report settings within your Custom Data Source using the $report->getSettings() method. The $settings attribute has been removed from the method signatures:

// OLD
+public function getResults(Report $report, array $settings = []): array;
+public function getDefaultLabels(Report $report, array $settings = []): array
+
+// NEW
+public function getResults(Report $report): array;
+public function getDefaultLabels(Report $report): array;
+

# NOTES>...

Custom Reports in Sprout Reports will need to manually update dataSourceId +We used to store it as sproutreports.users string but then we changed that to an int column +So migrations will fail unless they get manually updated prior to the migration that converts +that column to an int. +Before you upgrade you'll want to manually visit the Reports->Data Sources tab. Change the toggle the allowNew setting on and off again. This will add a record of this report to the database (at one point we only stored this in the db if a setting changed and otherwise it did not get stored in the db). +Then, during the migration, the migration will try to update that dataSourceID column and be able to match the Data Source name to the new ID before it triggers that migration.

+ + + diff --git a/docs/.vuepress/dist/data-studio/large-data-sets.html b/docs/.vuepress/dist/data-studio/large-data-sets.html new file mode 100644 index 00000000..7aa83990 --- /dev/null +++ b/docs/.vuepress/dist/data-studio/large-data-sets.html @@ -0,0 +1,61 @@ + + + + + + Large Data Sets | Sprout Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Large Data Sets

Sometimes you need to run reports that query a lot of data, or complex data structures. If you have a report that is too large and never finishes running, below are a few options you may want to consider.

These solutions will require some level of technical understanding and could depend on several variables unrelated to the Sprout Reports plugin in your hosting environment or code, including your web server, PHP installation, and Craft configuration.

TIP

If you would like help evaluating your resource requirements, we are available to help out in a consulting relationship to help you meet your projects reporting needs.

Contact us: sprout@barrelstrengthdesign.com

# Query Optimization

Can you optimize your Report's queries? In the case you have Custom Query Reports or a custom Data Source, consider reviewing your code and make sure it's as efficient as it can be.

# PHP Settings

Can you increase PHP's max_execution_time or memory_limit settings? These settings can give you a bit more headroom for an extra large report.

# Server Settings

Can you increase your servers resources? Upgrading to a more powerful server can provide more resources for memory-intensive tasks.

# Local Environment

Can you download your database and run the report locally? In some cases, if you don't have the means to improve your hosting environment, you might be able to find a temporary workaround by working locally?

+ + + diff --git a/docs/.vuepress/dist/data-studio/mailing-lists.html b/docs/.vuepress/dist/data-studio/mailing-lists.html new file mode 100644 index 00000000..3512b0f1 --- /dev/null +++ b/docs/.vuepress/dist/data-studio/mailing-lists.html @@ -0,0 +1,53 @@ + + + + + + Mailing Lists | Sprout Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Mailing Lists

A Report becomes a Mailing List when the Email Column setting is defined. The Email Column should reference a column that is returned by the report that provides a valid email address.

One or more Mailing Lists can be selected as Recipients for Notification Emails in Sprout Forms and Sprout Email. If the value returned by the Email Column does not validate as an email, it will be ignored.

Large Mailing Lists

The Mailing Lists feature is not yet designed to send to a large numbers of recipients. The max list size will vary depending on your list size and server resources. Be sure to test for your particular situation.

We do have plans to support large Mailing Lists. Please get in touch if you would like discuss a custom development project to get this feature prioritized: sprout@barrelstrengthdesign.com

+ + + diff --git a/docs/.vuepress/dist/data-studio/name-format.html b/docs/.vuepress/dist/data-studio/name-format.html new file mode 100644 index 00000000..d2cf6206 --- /dev/null +++ b/docs/.vuepress/dist/data-studio/name-format.html @@ -0,0 +1,61 @@ + + + + + + Name Format | Sprout Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Name Format

Give your Data Set a dynamic name using the Name Format setting.

To indicate details about the selected Data Set settings in the Data Set Name, use the Name Format setting. The Name Format field let's you dynamically output any value from your Report settings in the name of your Data Set using Craft Object Syntax.

+ + + diff --git a/docs/.vuepress/dist/data-studio/sql-queries.html b/docs/.vuepress/dist/data-studio/sql-queries.html new file mode 100644 index 00000000..40a50113 --- /dev/null +++ b/docs/.vuepress/dist/data-studio/sql-queries.html @@ -0,0 +1,84 @@ + + + + + + Custom SQL Queries | Sprout Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Custom SQL Queries

One reason Craft is powerful is because it allows users to build complex relational content from a very user-friendly UI. While that is nice for users, it can make certain queries very complex when retrieving your data. Sprout Reports is designed to help make it easy for clients to run queries and get back the data they need. It is not designed to write those queries for you.

The examples below are not meant to be comprehensive or accurate for every situation. They are meant to be used as a starting point and the responsibility is on you to update the queries to meet your needs or find someone who can.

TIP

If you need help building a specific query, feel free to reach out. We're happy to consider adding another example for common use cases or help out in a consulting relationship to help you meet your projects reporting needs.

Contact us: sprout@barrelstrengthdesign.com

# Relations Fields

Relation Fields (Entries, Categories, Users, Assets, and Tag fields) store their data via a related ID. This means a basic query will not return any information about the Relations Fields in an Entry.

In this example, we create two queries: the first returning the data about our content from a particular section without the relation data and the second returning the data about all of the content related to our section. We then use a UNION to combine the results of our two queries.

SELECT content.id, 
+       content.title,
+       null as "Related IDs (comma-separated)",
+       null as "Related Titles (comma-separated)"
+FROM content AS content
+JOIN entries AS entries
+	ON entries.id = content.elementId
+JOIN relations AS relations
+	ON entries.id = relations.sourceId
+WHERE entries.sectionId = 2
+UNION
+SELECT relations.targetId AS relatedElementId,
+	   content.title AS relatedContentTitle,
+	   GROUP_CONCAT(content.elementId separator ',') AS "Related IDs (comma-separated)",
+	   GROUP_CONCAT(content.title separator ',') AS "Related Titles (comma-separated)"
+FROM relations AS relations
+JOIN entries AS entries
+	ON entries.id = relations.sourceId
+JOIN content AS content
+	ON relations.targetId = content.elementId
+WHERE relations.sourceId = entries.id
+AND entries.sectionId = 2
+GROUP BY relations.sourceId
+
+ + + diff --git a/docs/.vuepress/dist/editions/campaigns.json b/docs/.vuepress/dist/editions/campaigns.json new file mode 100644 index 00000000..644b064b --- /dev/null +++ b/docs/.vuepress/dist/editions/campaigns.json @@ -0,0 +1,43 @@ +[ + { + "category": "Email Campaigns", + "items": [ + { + "name": "Campaign Email Element", + "info": "", + "lite": true, + "pro": true + }, + { + "name": "Campaign Types", + "info": "Lite users can create a single Campaign Type", + "lite": true, + "pro": true + }, + { + "name": "Custom Email Templates", + "info": "", + "lite": true, + "pro": true + }, + { + "name": "Email Personalization", + "info": "", + "lite": true, + "pro": true + }, + { + "name": "Copy/Paste Mailer", + "info": "", + "lite": true, + "pro": true + }, + { + "name": "Custom Mailers", + "info": "", + "lite": false, + "pro": true + } + ] + } +] \ No newline at end of file diff --git a/docs/.vuepress/dist/editions/data-studio.json b/docs/.vuepress/dist/editions/data-studio.json new file mode 100644 index 00000000..b1cf025e --- /dev/null +++ b/docs/.vuepress/dist/editions/data-studio.json @@ -0,0 +1,90 @@ +[ + { + "category": "Custom Data Sets", + "items": [ + { + "name": "Unlimited data sets", + "info": "", + "lite": true, + "pro": true + }, + { + "name": "Custom Query data sets", + "info": "Custom queries can target any tables in the database.", + "lite": true, + "pro": true + }, + { + "name": "Twig Template Query data sets", + "info": "Twig queries can query any data available in your Twig templates.", + "lite": true, + "pro": true + }, + { + "name": "User data sets", + "info": "", + "lite": true, + "pro": true + }, + { + "name": "Craft Commerce data sets", + "info": "", + "lite": true, + "pro": true + }, + { + "name": "Data visualizations", + "info": "", + "lite": false, + "pro": true, + "hide": true + } + ] + }, + { + "category": "Custom Workflows", + "items": [ + { + "name": "Custom data set field layout", + "info": "Add custom fields to your data sets to manage grouping via custom sources or customize output.", + "lite": true, + "pro": true + }, + { + "name": "Customize data set behavior (dynamic title, sorting, etc.)", + "info": "", + "lite": true, + "pro": true + }, + { + "name": "Interact with data set results", + "info": "Enable HTML in data to output links, icons, or other garnishes", + "lite": true, + "pro": true + }, + { + "name": "Organize data sets in groups", + "info": "", + "lite": true, + "pro": true + }, + { + "name": "Export data sets", + "info": "", + "lite": false, + "pro": true + } + ] + }, + { + "category": "Developers", + "items": [ + { + "name": "Custom Data Sources API", + "info": "Provide data sets using a different database, third-party API, or whatever your heart can imagine.", + "lite": false, + "pro": true + } + ] + } +] diff --git a/docs/.vuepress/dist/editions/forms.json b/docs/.vuepress/dist/editions/forms.json new file mode 100644 index 00000000..525abb21 --- /dev/null +++ b/docs/.vuepress/dist/editions/forms.json @@ -0,0 +1,108 @@ +[ + { + "category": "Form Builder", + "items": [ + { + "name": "Unlimited Forms", + "info": "", + "lite": false, + "pro": true + }, + { + "name": "Unlimited Fields", + "info": "", + "lite": true, + "pro": true + }, + { + "name": "Unlimited Rules", + "info": "", + "lite": true, + "pro": true + }, + { + "name": "Drag & Drop UI", + "info": "Easy to use, Craft-friendly UI for Content Editors", + "lite": true, + "pro": true + }, + { + "name": "Fields, Fields!", + "info": "22 default fields and, if that's not enough, a Custom Field API", + "lite": true, + "pro": true + }, + { + "name": "Custom Form Templates", + "info": "Developers can customize every detail of Form HTML", + "lite": true, + "pro": true + }, + { + "name": "Accessible Form Templates", + "info": "Default Form Templates follow many WCAG 2.0 best practices", + "lite": true, + "pro": true + }, + { + "name": "Element Integrations", + "info": "Submit data to Sprout Forms, Craft Elements, or custom API Integrations", + "lite": true, + "pro": true + }, + { + "name": "API Integrations", + "info": "Submit data to Sprout Forms, Craft Elements, or custom API Integrations", + "lite": true, + "pro": true + }, + { + "name": "Conditional Logic", + "info": "Present your users just the fields they need. Show and hide fields with conditional rules.", + "lite": true, + "pro": true + }, + { + "name": "Spam Protection", + "info": "Protect your forms from evil robots", + "lite": true, + "pro": true + }, + { + "name": "Sprout Data Studio Reports", + "info": "", + "lite": true, + "pro": true + } + ] + }, + { + "category": "Developers", + "items": [ + { + "name": "Form Field API", + "info": "", + "lite": true, + "pro": true + }, + { + "name": "Form Templates API", + "info": "", + "lite": true, + "pro": true + }, + { + "name": "Spam Protection API", + "info": "", + "lite": true, + "pro": true + }, + { + "name": "Integrations API", + "info": "", + "lite": true, + "pro": true + } + ] + } +] diff --git a/docs/.vuepress/dist/editions/mailer.json b/docs/.vuepress/dist/editions/mailer.json new file mode 100644 index 00000000..9f92bb9c --- /dev/null +++ b/docs/.vuepress/dist/editions/mailer.json @@ -0,0 +1,53 @@ +[ + { + "category": "Mailing Lists", + "items": [ + { + "name": "Mailing Lists & Segments", + "info": "Create Mailing Lists from report queries to send to lists and segments via Sprout Email and other Sprout plugins.", + "lite": false, + "pro": true + } + ] + }, + { + "category": "Email Preview", + "items": [ + { + "name": "Live Preview", + "info": "", + "lite": true, + "pro": true + }, + { + "name": "Test Emails with Live Data", + "info": "", + "lite": true, + "pro": true + }, + { + "name": "Preview HTML & Text Emails", + "info": "", + "lite": true, + "pro": true + }, + { + "name": "Share Unpublished Emails for Review", + "info": "", + "lite": true, + "pro": true + } + ] + }, + { + "category": "Developers", + "items": [ + { + "name": "Email Templates API", + "info": "", + "lite": true, + "pro": true + } + ] + } +] diff --git a/docs/.vuepress/dist/editions/notifications.json b/docs/.vuepress/dist/editions/notifications.json new file mode 100644 index 00000000..6543baac --- /dev/null +++ b/docs/.vuepress/dist/editions/notifications.json @@ -0,0 +1,58 @@ +[ + { + "category": "Overview", + "items": [ + { + "name": "Unlimited Notifications", + "lite": true, + "pro": true + }, + { + "name": "Unlimited Notification Events", + "info": "", + "lite": false, + "pro": true + }, + { + "name": "Custom Email Templates", + "info": "", + "lite": true, + "pro": true + }, + { + "name": "Email Personalization", + "info": "", + "lite": true, + "pro": true + } + ] + }, + { + "category": "Developers", + "items": [ + { + "name": "Custom Notification Event API", + "info": "", + "lite": false, + "pro": true + } + ] + }, + { + "category": "Sprout Modules", + "items": [ + { + "name": "All features in the Mailing List Module", + "info": "", + "lite": false, + "pro": true + }, + { + "name": "All features in the Sent Email Module", + "info": "", + "lite": false, + "pro": true + } + ] + } +] diff --git a/docs/.vuepress/dist/editions/redirects.json b/docs/.vuepress/dist/editions/redirects.json new file mode 100644 index 00000000..88bca0e2 --- /dev/null +++ b/docs/.vuepress/dist/editions/redirects.json @@ -0,0 +1,114 @@ +[ + { + "category": "Redirect Manager", + "items": [ + { + "name": "Manage Unlimited Redirects", + "info": "", + "lite": true, + "pro": true + }, + { + "name": "301 & 302 Redirects", + "info": "Manage permanent and temporary redirects", + "lite": true, + "pro": true + }, + { + "name": "Short Links (Brand / Vanity URLs)", + "info": "Use Sprout Redirects along with Craft multi-site to manage a brand URL, vanity URL, or short links for a custom domain.", + "lite": true, + "pro": true + }, + { + "name": "Multi-Site Redirects", + "info": "", + "lite": true, + "pro": true + }, + { + "name": "Custom Match Strategy", + "info": "Fine-tune how URLs are defined and how redirects are matched with query strings", + "lite": true, + "pro": true + }, + { + "name": "URL Pattern Matching", + "info": "Match redirects using an exact match strategy or using a regular expression pattern", + "lite": true, + "pro": true + }, + { + "name": "Reorder Redirects", + "info": "Update the priority of where a Redirect gets processed", + "lite": true, + "pro": true + }, + { + "name": "Redirect Statistics", + "info": "Track and organize Redirects by hits and last used dates to find the ones that should receive attention first", + "lite": true, + "pro": true + }, + { + "name": "Sensitive Data", + "info": "Customize how sensitive data like Remote IP addresses are tracked to comply with regulatory obligations.", + "lite": true, + "pro": true + }, + { + "name": "Status Actions", + "info": "Enable, disable, or delete one or more redirects at a time using Redirect Element Actions", + "lite": true, + "pro": true + }, + { + "name": "Method Actions", + "info": "Convert Redirects from 301s to 302s or vice versa using Redirect Element Actions", + "lite": false, + "pro": true + } + ] + }, + { + "category": "404 Tracking", + "items": [ + { + "name": "404 Tracking", + "info": "Monitor 404s on your website to be sure visitors are finding the pages they are looking for", + "lite": true, + "pro": true + }, + { + "name": "404 Redirect Log", + "info": "Capture 404 Requests to review and convert them to proper redirects so users find what they are looking for.", + "lite": true, + "pro": true + }, + { + "name": "Automatic Purging", + "info": "Automatically cleanup and remove old 404s", + "lite": true, + "pro": true + }, + { + "name": "Globally Excluded URL Patterns", + "info": "Ignore patterns you don't want to process across all of your Craft sites.", + "lite": true, + "pro": true + }, + { + "name": "Site-specific Excluded URL Patterns", + "info": "Ignore patterns you don't want to process for specific sites.", + "lite": false, + "pro": true + }, + { + "name": "Exclusion Actions", + "info": "Add a group of Redirects to the Excluded URL Patterns list using Redirect Element Actions", + "lite": false, + "pro": true + } + ] + } +] diff --git a/docs/.vuepress/dist/editions/sent-email.json b/docs/.vuepress/dist/editions/sent-email.json new file mode 100644 index 00000000..d58528da --- /dev/null +++ b/docs/.vuepress/dist/editions/sent-email.json @@ -0,0 +1,25 @@ +[ + { + "category": "Features", + "items": [ + { + "name": "Sent Email Tracking", + "info": "Capture a log of emails sent by Craft that can be viewed in the Control Panel and help with customer relationship workflows or debugging.", + "lite": true, + "pro": true + }, + { + "name": "Sent Email Preview", + "info": "View details about Sent Emails such as who they were sent to, when they were sent, and snapshot of the Sent Email HTML", + "lite": true, + "pro": true + }, + { + "name": "Resend Sent Emails", + "info": "Resend a copy of captured emails to the same user or a new email address", + "lite": false, + "pro": true + } + ] + } +] \ No newline at end of file diff --git a/docs/.vuepress/dist/editions/seo.json b/docs/.vuepress/dist/editions/seo.json new file mode 100644 index 00000000..16bf66f4 --- /dev/null +++ b/docs/.vuepress/dist/editions/seo.json @@ -0,0 +1,78 @@ +[ + { + "category": "Global Metadata", + "items": [ + { + "name": "Website Identity Metadata", + "info": "", + "lite": true, + "pro": true + }, + { + "name": "Contacts and Social Profile Metadata", + "info": "", + "lite": true, + "pro": true + }, + { + "name": "Verify Ownership", + "info": "", + "lite": true, + "pro": true + }, + { + "name": "Robots Metadata", + "info": "", + "lite": true, + "pro": true + } + ] + }, + { + "category": "Content Metadata", + "items": [ + { + "name": "Search Metadata", + "info": "", + "lite": true, + "pro": true + }, + { + "name": "Social Sharing Metadata", + "info": "", + "lite": true, + "pro": true + }, + { + "name": "Structured Data", + "info": "", + "lite": true, + "pro": true + }, + { + "name": "Unlimited Metadata Fields", + "info": "", + "lite": false, + "pro": true + }, + { + "name": "Custom Metadata Patterns", + "info": "", + "lite": false, + "pro": true + }, + { + "name": "Custom Metadata Overrides", + "info": "", + "lite": false, + "pro": true + }, + { + "name": "Template Metadata", + "info": "", + "lite": false, + "pro": true + } + ] + } +] \ No newline at end of file diff --git a/docs/.vuepress/dist/editions/sitemaps.json b/docs/.vuepress/dist/editions/sitemaps.json new file mode 100644 index 00000000..e12be9f9 --- /dev/null +++ b/docs/.vuepress/dist/editions/sitemaps.json @@ -0,0 +1,55 @@ +[ + { + "category": "XML Sitemaps", + "items": [ + { + "name": "Sitemap Generator", + "info": "", + "lite": false, + "pro": true + }, + { + "name": "Multi-lingual and multi-regional sitemaps", + "info": "", + "lite": false, + "pro": true + }, + { + "name": "Entry Element support", + "info": "", + "lite": false, + "pro": true + }, + { + "name": "Category Element support", + "info": "", + "lite": false, + "pro": true + }, + { + "name": "Craft Commerce Product Element support", + "info": "", + "lite": false, + "pro": true + }, + { + "name": "Large Sitemap Support", + "info": "", + "lite": false, + "pro": true + }, + { + "name": "Custom Sitemap pages", + "info": "", + "lite": false, + "pro": true + }, + { + "name": "No template updates required", + "info": "", + "lite": false, + "pro": true + } + ] + } +] \ No newline at end of file diff --git a/docs/.vuepress/dist/email/installing-and-updating-craft-3.html b/docs/.vuepress/dist/email/installing-and-updating-craft-3.html new file mode 100644 index 00000000..bda71f76 --- /dev/null +++ b/docs/.vuepress/dist/email/installing-and-updating-craft-3.html @@ -0,0 +1,73 @@ + + + + + + Craft 3 | Sprout Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Craft 3

Sprout Email installation and update instructions for Craft 3.

# Requirements

  • Craft CMS 3.0.0 or a more recent version of Craft

# Installation via Plugin Store

  1. Find the plugin in the Plugin Store in your Craft Control Panel
  2. Go to Settings → Plugins and select “Install”

# Installation via Composer

  1. Open your terminal and go to your Craft project:
    cd /path/to/project
  2. Then tell Composer to load the plugin:
    composer require barrelstrength/sprout-email
  3. In the Control Panel, go to Settings → Plugins and select “Install”

# Upgrading to Craft 3

BEFORE YOU UPDATE

Make sure you have updated to the latest version of Sprout Email 3.x before updating to Sprout Email 4.x for Craft 3

# Upgrading to Email v4.1.1

Sprout Email v4.1.1 updates the Recipients settings. The behavior you see when sending emails should not change, but the way you see this information presented to you in the user interface will.

Previously, the default send method was as a "List" and you had the option to toggle a lightswitch field to send a "Single Email". In 4.1.1 you will see a dropdown with the options "List" and "Single Email" and when you have the "List" setting selected you will no longer see the CC and BCC fields. Any email addresses you previously had in the CC and BCC fields when sending to emails as a List will now be appended to the values in the "To" field. The behavior of how the emails are sent is the same.

# Upgrading to Email v4.2.0

Sprout Email 4.2.0 is a recommended upgrade and fixes a vulnerability that could occur in some scenarios with custom Email Templates.

To better support extending Twig layouts and organizing your templates more flexibly throughout the top-level templates folder as you wish, Email Templates Integrations have been updated to require a new getTemplateRoot() method and change the behavior of the existing getPath() method

Personalized Email Templates

For improved security, Custom Email Templates no longer render objects in custom fields outside of the Subject or Default Body fields. Please let us know if you have additional use cases for this and we can consider them on a case by case basis.

Custom Email Templates

Previously, the custom Email Templates setting identified an Email Folder and the only templates available were those templates within that folder. In the latest update, we now treat the templates/ folder as the root folder and your Email Template is just a folder somewhere within that.

If you happen to be using any include, extends, or import tags in custom Email Templates, you may want to check if they are resolving correctly after the latest update.

For example, say you have this folder structure:

templates/_emails/newsletter/_layout.twig
+templates/_emails/newsletter/email.twig
+

If you previously had an email in a templates/_emails/newsletter folder that extended a layout within that folder you would treat the email folder as the root. However, after the recent updates the templates folder is treated as the root so you'd need to extend the file as it exists within the template folder.

{# OLD #}
+{% extends "_layout" %}
+
+{# NEW #}
+{% extends "_emails/newsletter/_layout" %}
+

Email Templates Integrations

OLD
public function getPath(): string
+{
+    return Craft::getAlias('@sproutbaseemail/templates/_components/emailtemplates/basic');
+}
+
NEW
public function getTemplateRoot(): string
+{
+    return Craft::getAlias('@sproutbaseemail/templates');
+}
+
+public function getPath(): string
+{
+    return '_components/emailtemplates/basic';
+}
+
+ + + diff --git a/docs/.vuepress/dist/features.html b/docs/.vuepress/dist/features.html new file mode 100644 index 00000000..c742353e --- /dev/null +++ b/docs/.vuepress/dist/features.html @@ -0,0 +1,62 @@ + + + + + + Lite vs Pro | Sprout Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Lite vs Pro

Sprout Lite is designed to pair with Craft Solo and provide a solid baseline for digital marketing best practices on simple projects. Sprout Pro enables unlimited usage of all features and +opens the door for advanced customization and CRM workflow integrations.

The Sprout Marketing Suite ships with a modular architecture of over 10 specialized modules to power custom website and digital marketing needs.

# Data Studio Module

Available in: Sprout Data Studio, Sprout Forms.

Craft 4 Support

Sprout Marketing Suite plugins are coming to Craft 4. See our Road Map for more details.

# Redirects Module

Available in: Sprout Redirects, Sprout SEO.

+ + + diff --git a/docs/.vuepress/dist/fields/address-field.html b/docs/.vuepress/dist/fields/address-field.html new file mode 100644 index 00000000..f6dd3c29 --- /dev/null +++ b/docs/.vuepress/dist/fields/address-field.html @@ -0,0 +1,66 @@ + + + + + + Address Field | Sprout Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Address Field

The Address Field is an international field type which let's you capture and display address data using a Craft-style Address modal. The Address Field supports addresses for 200 countries from Google's Address Data Service.

Address Field Modal

The Address Field uses Craft's Relations field and modal edit UI to stay consistent with the Craft User experience, simplifies often-complex multi-column address layouts to a single column, and works with Craft's Matrix field.

# Templates

You can access your Address Field in your templates via it's field handle.

{{ entry.addressField.countryCode }}
+{{ entry.addressField.countryThreeLetterCode }}
+{{ entry.addressField.currencyCode }}
+{{ entry.addressField.locale }}
+{{ entry.addressField.administrativeArea }}
+{{ entry.addressField.administrativeAreaCode }}
+{{ entry.addressField.locality }}
+{{ entry.addressField.dependentLocality }}
+{{ entry.addressField.postalCode }}
+{{ entry.addressField.sortingCode }}
+{{ entry.addressField.address1 }}
+{{ entry.addressField.address2 }}
+{{ entry.addressField.country }}
+

# Settings

Addresses are validated based on the country that is selected. Validation is handled by Google's Address Data Service (via the commerceguys/addressing library).

By default, the Address Field is setup for international addresses from all countries but can be limited to a single country as well.

+ + + diff --git a/docs/.vuepress/dist/fields/gender-field.html b/docs/.vuepress/dist/fields/gender-field.html new file mode 100644 index 00000000..5b8435c5 --- /dev/null +++ b/docs/.vuepress/dist/fields/gender-field.html @@ -0,0 +1,54 @@ + + + + + + Gender Field | Sprout Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Gender Field

The Gender Field is a gender neutral field type for Craft CMS. Allow your users to choose a gender, decline the question, or provide a custom value.

Gender Neutral Field

Gender Neutral Field

# Templates

You can access your Gender Field in your templates via it's field handle.

{{ entry.genderField }}
+
+ + + diff --git a/docs/.vuepress/dist/fields/installing-and-updating-craft-3.html b/docs/.vuepress/dist/fields/installing-and-updating-craft-3.html new file mode 100644 index 00000000..843efe11 --- /dev/null +++ b/docs/.vuepress/dist/fields/installing-and-updating-craft-3.html @@ -0,0 +1,55 @@ + + + + + + Craft 3 | Sprout Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Craft 3

Sprout Fields installation and update instructions for Craft 3.

# Requirements

  • Craft CMS 3.0.0-RC1 or a more recent version of Craft

# Installation via Plugin Store

  1. Find the plugin in the Plugin Store in your Craft Control Panel
  2. Go to Settings → Plugins and select “Install”

# Installation via Composer

  1. Open your terminal and go to your Craft project:
    cd /path/to/project
  2. Then tell Composer to load the plugin:
    composer require barrelstrength/sprout-fields
  3. In the Control Panel, go to Settings → Plugins and select “Install”

# Upgrading to Craft 3

BEFORE YOU UPDATE

Make sure you have updated to the latest version of Sprout Fields 2.x before updating to Sprout Fields 3.x for Craft 3

Several things have changed between Sprout Fields 2 for Craft 2 and Sprout Fields 3 for Craft 3. In Craft 2 Sprout Fields provided fields for both the Craft CP and for Sprout Forms. Sprout Forms for Craft 3 now has it's own Field API so your Sprout Fields will be migrated different depending on whether you are using them as fields in Craft or in Sprout Forms.

When you update Craft please consider the following changes and learn about how your data will be migrated below:

Craft 2
Sprout Forms 3
Craft 3 Sprout Forms 4
Address (New) Address (New)
Email Email Email
Email Select Email Dropdown
Gender (New) Gender (New)
Hidden Predefined Hidden
Invisible Predefined Invisible
Link URL (Renamed) URL (Renamed)
Name (New) Name (New)
Notes Notes Section Heading / Custom HTML
Phone Phone (Changed) Phone (Changed)
Regex Regex Regex

# Changed Fields (Breaking Changes)

  • Phone Field - We've introduced a new International Phone Field in Craft 3. There is no easy way to predict which format the existing Phone field is storing data so we will be migrating all existing Phone fields to a default Plain Text Field in Craft 3. If you'd like to use the new International Phone Field a separate migration will be necessary.

  • Notes Field - The Notes field now uses a file-based CSS method to customize Notes field styles, similar to how Redactor Toolbars work. You will no longer find the custom style settings in the Craft admin, or be limited to our pre-defined style naming conventions. You now have complete flexibility to add as many Style configurations as you'd like. Styles must be added to the config/sproutnotes folder and use a new naming convention. Existing styles will need to be manually migrated and updated to these CSS files so be sure to copy your existing custom styles before updating and review the docs for how to customize new styles. Previous dynamic {{ name }} references will need to be updated to use the new FIELDHANDLE convention. See the Notes Field docs on Custom Styles for more info.

# Renamed Fields

As Craft has now added a simple URL Field, we have chosen to update the Link field to be consistent and use the same name.

  • Link Field => URL (Sprout)

# Removed Fields

Sprout Forms no longer relies on existing Craft Field Types so we can now deprecate several fields that don't really have many Control Panel use cases but were there to work with Sprout Forms. Any data that you have stored in these fields will be migrated to a default Craft field type during the upgrade. The following fields will be removed in Craft 3:

  • Email Select Field (will be migrated to use a Table Field)
  • Hidden Field (will be migrated to use a Plain Text Field)
  • Invisible Field (will be migrated to use a Plain Text Field)

# Upgrading to Fields 4.0??? - UNRELEASED

OnSaveAddressEvent removes 'model' property +Updates 'source' => 'element' +Commit: 78cd228838f3ac5efabd8d536e738b26511bebd2

  • Removed Email field. Data has been migrated to native Craft Email field.
  • Removed Url field. Data has been migrated to native Craft URL field.
  • Removed Notes field. See upgrade notes to manually update Notes to new Craft Field UI Elements. Notes Field data will be saved in upgrade migrations to storage/runtime/sprout/sprout-notes-field-data-export.txt
+ + + diff --git a/docs/.vuepress/dist/fields/name-field.html b/docs/.vuepress/dist/fields/name-field.html new file mode 100644 index 00000000..60773522 --- /dev/null +++ b/docs/.vuepress/dist/fields/name-field.html @@ -0,0 +1,68 @@ + + + + + + Name Field | Sprout Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Name Field

The Name Field gives you a way to capture your users name with a single input field or manage names in multiple name fields: Prefix, First, Middle, Last, and Suffix.

# Single Field

The Name Field defaults to display a single, international-friendly, field. While only a single field displays, the Name field captures the data from this single field into two fields behind the scenes.

Name Field - Short Version

Everything before the first space is considered the First Name and everything that comes after the first space is considered the Last Name.

# Multiple Fields

If you have stricter data requirements and are willing to take on the challenge of capturing an international range of name requirements in more structured fields, you can enable the Name Field to display 2 or more fields.

Name Field - Long Version

# Templates

The Name field returns a Name Model to your Twig template.

For consistency, the getFriendlyName() and getFullName() methods return the same as they would if you used them on a Craft User Model.

{# Result: First Name #}
+{{ entry.nameField.getFriendlyName() }}
+
+{# Result: First Name + Last Name #}
+{{ entry.nameField.getFullName() }}
+
+{# Result: Prefix + First Name + Middle Name + Last Name + Suffix #}
+{{ entry.nameField.getFullNameExtended() }}
+
+{# Access Name Fields Individually #}
+{{ entry.nameField.prefix }}
+{{ entry.nameField.firstName }}
+{{ entry.nameField.middleName }}
+{{ entry.nameField.lastName }}
+{{ entry.nameField.suffix }}
+

# Settings

Select which combination of fields you wish to display in your settings:

Name Field - Settings

+ + + diff --git a/docs/.vuepress/dist/fields/predefined-date-field.html b/docs/.vuepress/dist/fields/predefined-date-field.html new file mode 100644 index 00000000..a11fc653 --- /dev/null +++ b/docs/.vuepress/dist/fields/predefined-date-field.html @@ -0,0 +1,54 @@ + + + + + + Predefined Date Field | Sprout Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Predefined Date Field

The Predefined Date Field allows you parse Twig and define the value of a date ahead of time. This can be useful to help optimize queries or prepare data for a specific use case before it is needed.

While similar to the Predefined Field, the Predefined Date Field stores it's value as a Date data type which can be useful when it is necessary to query results by date.

The Predefined Field is not editable.

# Settings

  • Field Format - The value you want to prepare when the Predefined Field is saved.
  • Show Field - Enable to display the value you saved in the Field Layout

# Field Format

The Field Format value must resolve to a proper date format:

{matrixField.one().startDateField|date('Y-m-d h:m:s')}
+

See Predefined Field for general usage.

# Matrix Field Usage

See Predefined Field for usage.

WARNING

If you update the Field Format you will need to resave the Field Layout in your Craft Settings to ensure all Entries get re-saved and recalculate the value of your Predefined Field.

+ + + diff --git a/docs/.vuepress/dist/fields/predefined-field.html b/docs/.vuepress/dist/fields/predefined-field.html new file mode 100644 index 00000000..33bebde5 --- /dev/null +++ b/docs/.vuepress/dist/fields/predefined-field.html @@ -0,0 +1,83 @@ + + + + + + Predefined Field | Sprout Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Predefined Field

The Predefined Field allows you parse Twig and define the value of your field ahead of time. This can be useful to help optimize queries or prepare data for a specific use case before it is needed.

The Predefined Field is not editable.

# Settings

  • Field Format - The value you want to prepare when the Predefined Field is saved.
  • Show Field - Enable to display the value you saved in the Field Layout
  • Output Format - The output method to use when displaying the value: Input, Textarea, or HTML
  • Render dynamically in field layout - Enable to process the value of the field when the page is loaded in the Control Panel

Link Name (opens new window)

# Field Format

Define the value you want using the Field Format setting when you create your field. The Field Format setting can parse Twig and process values from the element being saved.

The Field Format setting accepts Craft object syntax using the object variable to reference the current Element being saved:

{{ object.title }}
+{{ object.customField }}
+{{ object.customField.first().id }}
+

And shorthand syntax:

{title}
+{customField}
+{customField.first().id}
+

# Matrix Field Usage

Matrix Blocks are Elements too. If you use a Predefined Field within a matrix block, the object available to the Predefined Field is a MatrixBlockModel and any custom fields available in the Matrix Block:

{{ object.type }}
+{type}
+

To reference the parent Element of the Matrix Block, you can use the owner property:

{{ object.owner.title }}
+{{ object.owner.customField }}
+{{ object.owner.customField.first().id }}
+

Or shorthand:

{owner.title}
+{owner.customField}
+{owner.customField.first().id}
+

# Custom HTML

The Predefined Field can output any HTML that you want to show content authors. This allows for a lot of flexibility and should also be approached carefully as it also allows for a lot of abuse.

One use case for this configuration can be to show reverse relationships (the elements related to the one you are editing but that are created via the Field Layout of the other element). When displaying reverse relationships it's possible that the value that the Predefined field stored in the database when your element was saved is inaccurate, as the related values can change without updating your Predefined field value. In this case, you can enable the Render dynamically in field layout setting to re-process the value of the Predefined field when it is loaded in the Control Panel.

In the example below, the Predefined field shows the Users that are related to a given Entry and outputs a list of those related Users with links to their respective Entries in the Control Panel and on the front-end:

Dynamic HTML Output

Predefined Field Example HTML Reverse Relation Field

Dynamic HTML Settings

Predefined Field Example HTML Settings

Example HTML Table

The following table code can be used as an example to create a Craft-styled table:

<table class="data fullwidth">
+    <thead>
+        <th>Name</th>
+        <th>Position</th>
+        <th>Nationality</th>
+        <td class="thin"></td>
+    </thead>
+    {% for user in craft.users.group('teamMembers').orderBy('position').relatedTo(object.id).all() %}
+    <tr>
+        <td><span class="status {{ user.getStatus() }}"></span> <a href="{{ user.getCpEditUrl() }}">{{ user.getFullName() }}</a></td>
+        <td>{{ user.position }}</td>
+        <td>🇩🇪</td>
+        <td><a href="{{ user.getUrl() }}" target="_blank" data-icon="world" title="Visit webpage"></a></td>
+    </tr>
+    {% endfor %}
+</table>
+
+ + + diff --git a/docs/.vuepress/dist/forms/custom-captchas.html b/docs/.vuepress/dist/forms/custom-captchas.html new file mode 100644 index 00000000..bf533a6f --- /dev/null +++ b/docs/.vuepress/dist/forms/custom-captchas.html @@ -0,0 +1,80 @@ + + + + + + Captchas | Sprout Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Captchas

Captchas enable you to add additional methods to protect your form from Spam.

# Captcha Class

See examples of how to build your Captcha Class from the default Captchas in Sprout Forms:

# Register Event

Once you have created your Custom Captcha, register your Captcha class with Sprout Forms to display your Captcha in the Spam Protection settings and enable it for your forms.

namespace mycompany\mycaptchaplugin;
+
+use mycompany\myplugin\integrations\sproutforms\captchas\MyCaptcha;
+use barrelstrength\sproutforms\services\Forms;
+use yii\base\Event;
+
+class MyCaptchaPlugin extends Plugin
+{
+
+  public function init()
+  {
+    parent::init();
+    
+    Event::on(Forms::class, Forms::EVENT_REGISTER_CAPTCHAS, function(Event $event) {
+        $event->types[] = MyCaptcha::class;
+    });
+  
+  }
+}
+
+ + + diff --git a/docs/.vuepress/dist/forms/custom-form-templates.html b/docs/.vuepress/dist/forms/custom-form-templates.html new file mode 100644 index 00000000..18e8dcdf --- /dev/null +++ b/docs/.vuepress/dist/forms/custom-form-templates.html @@ -0,0 +1,100 @@ + + + + + + Form Templates | Sprout Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Form Templates

Form Templates enable you to manage Template Overrides as a plugin to easily reuse across projects or share in the Plugin Store.

# Form Template Class

A Form Template class is quite simple and only requires that you define the name of your Form Template and the path where you store your Template Overrides.

<?php
+
+namespace mycompany\myplugin\integrations\sproutforms\formtemplates;
+
+use barrelstrength\sproutforms\base\FormTemplates;
+use Craft;
+
+class MyFormTemplates extends FormTemplates
+{
+    public function getName()
+    {
+        return Craft::t('my-plugin', 'My Custom Form Templates');
+    }
+
+    public function getPath()
+    {
+        return Craft::getAlias('@mycompany/myplugin/templates/_integrations/sproutforms/formtemplates/');
+    }
+}
+

# Register Event

Once you have created your Custom Form Templates, register you Form Template class with Sprout Forms to display your Form Templates in the Form Template dropdown.

namespace mycompany\myplugin;
+
+use mycompany\myplugin\integrations\sproutforms\formtemplates\MyFormTemplates;
+use barrelstrength\sproutforms\services\Forms;
+use craft\events\RegisterComponentTypesEvent;
+use yii\base\Event;
+
+class MyPlugin extends Plugin
+{
+
+  public function init()
+  {
+    parent::init();
+    
+    Event::on(Forms::class, Forms::EVENT_REGISTER_FORM_TEMPLATES, function(RegisterComponentTypesEvent $event) {
+      $event->types[] = MyFormTemplates::class;
+    });
+  
+  }
+}
+

TIP

Form Templates are available in Sprout Forms for Craft 3. Upgrade to Craft 3 and enjoy the power and flexibility of Form Templates!

+ + + diff --git a/docs/.vuepress/dist/forms/custom-integrations.html b/docs/.vuepress/dist/forms/custom-integrations.html new file mode 100644 index 00000000..f4d4e905 --- /dev/null +++ b/docs/.vuepress/dist/forms/custom-integrations.html @@ -0,0 +1,93 @@ + + + + + + Integrations | Sprout Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Integrations

The Integrations API enables you to provide additional Integrations for users to select and configure when creating Forms.

# Integration Class

Building a custom Integration class requires extending barrelstrength\sproutforms\base\Integration.

<?php
+
+namespace mycompany\myplugin\integrations\sproutforms\integrationtypes;
+
+use barrelstrength\sproutforms\base\Integration;
+
+class CustomEndpoint extends Integration
+{
+    public static function displayName(): string { ... }
+    public function getSettingsHtml() { ... }
+    public function submit(): bool { ... }
+    public function getTargetIntegrationFieldsAsMappingOptions() { ... }
+}
+

# Register Event

Once you have created your Custom Integration, register you Integration class with Sprout Forms to display your Integration in the Integration dropdown.

namespace mycompany\myplugin;
+
+use mycompany\myplugin\integrations\sproutforms\integrationtypes\CustomIntegration;
+use barrelstrength\sproutforms\services\Integrations;
+use craft\events\RegisterComponentTypesEvent;
+use yii\base\Event;
+
+class MyPlugin extends Plugin
+{
+  public function init()
+  {
+    parent::init();
+    
+    Event::on(Integrations::class, Integrations::EVENT_REGISTER_INTEGRATIONS, function(RegisterComponentTypesEvent $event) {
+        $event->types[] = CustomIntegration::class;
+    });
+  
+  }
+}
+

TIP

Integrations are available in Sprout Forms for Craft 3.

+ + + diff --git a/docs/.vuepress/dist/forms/default-form-templates.html b/docs/.vuepress/dist/forms/default-form-templates.html new file mode 100644 index 00000000..b0fc1bea --- /dev/null +++ b/docs/.vuepress/dist/forms/default-form-templates.html @@ -0,0 +1,61 @@ + + + + + + Default Form Templates | Sprout Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Default Form Templates

Sprout Forms comes with two Form Templates and one Email Template. We keep the defaults as simple and un-opinionated as we can. You can style the default templates as you see fit or update the templates for your particular project. Forms and Notification Emails are fully customizable.

# Form Templates

# Accessible Templates

The Accessible Form Templates are enabled by default. They cover all form output and error states for the default Form Fields and implement several accessibility best practices.

TIP

If you want to customize your Form Templates, the Accessible Form Templates may be a good starting point.

# Basic Templates (Legacy)

The Basic Templates are available for those who may be updating Sprout Forms. When you update, Sprout Forms maintains your existing Form Template settings.

The Basic Templates handle all form output and error states for the default Form Fields.

# Email Templates

# Basic Notification

The Basic Notification Email Templates is designed to loop through all submitted Form Fields and output a simple representation of the submitted data.

This Email Template will be used by default when you create a new Notification Email from the Sprout Forms Notifications tab.

# Custom Templates

See the Template Overrides docs for additional details.

+ + + diff --git a/docs/.vuepress/dist/forms/element-api.html b/docs/.vuepress/dist/forms/element-api.html new file mode 100644 index 00000000..916851bc --- /dev/null +++ b/docs/.vuepress/dist/forms/element-api.html @@ -0,0 +1,115 @@ + + + + + + Element API | Sprout Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Element API

Sprout Forms can be used in headless mode using Craft's Element API (opens new window) plugin.

You will need to:

  • Install the Element API plugin
  • Add a config/element-api.php file to your project's config folder
  • Build your API

The following example creates two endpoints.

The first returns a Form Element that can be used by your front-end framework to output the form. You can use the Default Form Templates as an example of how the HTML needs to be built for submission and remember to submit the form using a CSRF token. This example returns the field data and the field folder name which can be used as a unique identifier when determining which field template to display on the front-end.

The second returns a list of unread Form Entry Elements. You can customize the query however you'd like, just like any Element Query.

<?php
+
+use barrelstrength\sproutforms\elements\Form;
+use barrelstrength\sproutforms\elements\Entry;
+
+return [
+    'endpoints' => [
+        'api/sproutforms/<formId:\d+>.json' => function($formId) {
+            return [
+                'elementType' => Form::class,
+                'criteria' => ['id' => $formId],
+                'one' => true,
+                'transformer' => function(Form $form) {
+                    foreach ($form->getFieldLayout()->getTabs() as $tab) {
+                        foreach ($tab->getFields() as $field) {
+                            $fields[] = [
+                                'field' => $field,
+                                'folder' => $field->getFieldInputFolder()
+                            ];
+                        }
+
+                        $tabs[] = [
+                            'title' => $tab->name,
+                            'fields' => $fields
+                        ];
+                    }
+
+                    return [
+                        'handle' => $form->handle,
+                        'tabs' => $tabs
+                    ];
+                },
+            ];
+        },
+        'api/sproutforms/<formId:\d+>/entries.json' => function($formId) {
+            return [
+                'elementType' => Entry::class,
+                'criteria' => [
+                    'formId' => $formId,
+                    'status' => 'unread'
+                ],
+                'paginate' => true,
+                'transformer' => function(Entry $entry) {
+                    return [
+                        'id' => $entry->id,
+                        'dateCreated' => $entry->dateCreated,
+                        'title' => $entry->title,
+                        'customField' => $entry->customField,
+                    ];
+                },
+            ];
+        }
+    ]
+];
+
+ + + diff --git a/docs/.vuepress/dist/forms/installing-and-updating-craft-3.html b/docs/.vuepress/dist/forms/installing-and-updating-craft-3.html new file mode 100644 index 00000000..9879b67d --- /dev/null +++ b/docs/.vuepress/dist/forms/installing-and-updating-craft-3.html @@ -0,0 +1,356 @@ + + + + + + Craft 3 | Sprout Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Craft 3

Sprout Forms installation and update instructions for Craft 3.

# Requirements

  • Craft CMS 3.3.0 or a more recent version of Craft

# Installation via Plugin Store

  1. Find the plugin in the Plugin Store in your Craft Control Panel
  2. Go to Settings → Plugins and select “Install”

# Installation via Composer

  1. Open your terminal and go to your Craft project:
    cd /path/to/project
  2. Then tell Composer to load the plugin:
    composer require barrelstrength/sprout-forms
  3. In the Control Panel, go to Settings → Plugins and select “Install”

# Upgrading to Craft 3

BEFORE YOU UPDATE

Make sure you have updated to the latest version of Sprout Forms 2.x before updating to Sprout Forms 3.x for Craft 3

# Form Field changes

In Craft 2, Sprout Forms extended the Craft Field Layout Editor and allowed you to add any field that Craft supported to a Form. While you could add any field on the back-end, Sprout only supported output the HTML for a subset of the fields on the front-end. In particular, more advanced fields like the Matrix had to supported manually in the templates.

In Craft 3, Sprout Forms added a new Form Field API that now requires Form Fields to have both front-end and back-end support. If you happen to be using a more advanced field type that was supported by Craft but not by Sprout Forms in Craft 2, you may need to develop a Custom Form Field to support that field in Craft 3.

# Template Changes

Read over the Changes in Craft 3 (opens new window) for a general overview of things that have changed. These changes have affected Sprout Forms in several ways and if you have built any Forms with custom HTML you will likely need to update your code.

The Action URL format and Redirect URL format

<form method="post" accept-charset="utf-8" enctype="multipart/form-data">
+    {{ csrfInput() }}
+    <input type="hidden" name="action" value="sprout-forms/entries/save-entry">
+    {{ redirectInput("/contact?message=thankyou") }}
+    <input type="hidden" name="handle" value="formHandle">
+    
+    ...
+    
+    <input type="submit" value="Submit">	
+</form>
+

Retrieving a form

{% set form = sprout.forms.form('contact') %}
+

Identifying a field by type

Where field is a Form Field model:

{% if field.getFieldInputFolder() == 'dropdown' %}
+    ...
+{% endif %}
+

Displaying Tabs and Fields in Custom Templates

{# form.html #}
+{%- for tab in form.getFieldLayout().getTabs() %}
+    {{ sprout.forms.displayTab(form, tab.id, renderingOptions) }}
+{% endfor -%}
+
+{# tab.html #}
+{% for field in layoutFields -%}
+    {{- sprout.forms.displayField(form, field, renderingOptions) }}
+{%- endfor %}
+

# Notification Email Changes

The default Notification Email will now exclude several fields that may include sensitive or irrelevant information for a Notification Email. These fields include:

  • Custom HTML
  • Hidden Field
  • Invisible Field
  • Private Notes Field
  • Section Heading Field

If you require these fields to be displayed in a Notification Email or wish to update the logic around which of them that do, you will need to override the default template and customize it to your needs. See this response (opens new window) on Stack Exchange for more info.

# Upgrading to Forms 3.4.1

Sprout Forms v3.4.1 introduces a handful of changes to make the Integrations API more flexible for custom Integrations. The general Integration architecture has stayed the same but several methods have been renamed. Please be sure to test any Custom Integrations while upgrading to 3.4.1 and consider the following changes:

# Removed

  • Removed base Integration updateTargetFieldsAction and updateSourceFieldsAction dependencies in favor of updateTargetFieldsOnChange to allow Integrations to dynamically target fields to watch for changes
  • Removed prepareFieldTypeSelection and prepareIntegrationTypeSelection variables and methods and simplified how Integration Types field is populated in modal templates

# Moved

  • Moved getFieldsAsOptionsByRow, getCompatibleFields, and getTargetIntegrationFieldsAsMappingOptions from IntegrationsController to EntryElementIntegration class

# Renamed

  • Renamed getFormFieldsAsMappingOptions => getSourceFormFieldsAsMappingOptions
  • Renamed actionGetElementEntryFields => actionGetTargetIntegrationFields and updated it to instantiate and populate an Integration dynamically and trigger the getTargetIntegrationFieldsAsMappingOptions on a given Integration
  • Renamed prepareFieldMapping => refreshFieldMapping and moved to base Integration class init method
  • Renamed resolveFieldMapping => getTargetIntegrationFieldValues and moved to base Base Integration class
  • Renamed IntegrationTrait property entry => formEntry

# Upgrading to Forms v3.5.0

Sprout Forms v3.5.0 adds support for Field Rules and includes updates to the Form Templates and Email Templates to support the new conditional behavior. In addition, Form Templates have been optimized to simplify the amount of javascript required in the templates. Form Templates and all javascript can still be customized however you need.

If your Forms use the Form Templates and Email Templates provided by Sprout Forms, no updates are needed. For Forms using custom Form Templates:

# Form Templates

Several updates have been made to the Form Templates to optimize the javascript used in the templates and add support for Field Rules.

Added support for rules

ADDED RULES VARIABLE
+{%- set rules = form.getRules() -%}
+
+ADDED RULES DATA ATTRIBUTE
+<form method="post" accept-charset="utf-8" enctype="multipart/form-data"
+    {%- if id %} id="{{ id }}"{% endif -%}
+    {%- if class %} class="{{ class -}}{%- if errors %} {{ errorClass }}{% endif -%}"{% endif -%}
+    data-rules="{{ rules|json_encode|raw|e('html') }}"
+>
+

Updated javascript

The latest form templates remove most JS from the templates and now include it via files. JS classes that require initialization have been simplified to only require the ID. The JS has also been updated to set the CSRF token name. The CSRF token value will be retrieved dynamically as necessary.

OLD
+<script>
+// ... Lots of JS
+</script>
+
+NEW
+{%- set accessibilityJsUrl = view.getAssetManager().getPublishedUrl(
+    '@sproutforms/web/assets/formtemplates/dist/js/accessibility.js',
+    true) -%}
+{%- do view.registerJsFile(accessibilityJsUrl, {
+    position: 3
+}) -%}
+
+{%- set rulesJsUrl = view.getAssetManager().getPublishedUrl(
+    '@sproutforms/web/assets/formtemplates/dist/js/rules.js',
+    true) -%}
+{%- do view.registerJsFile(rulesJsUrl) -%}
+
+{%- set addressFieldJsUrl = view.getAssetManager().getPublishedUrl(
+    '@sproutforms/web/assets/formtemplates/dist/js/addressfield.js',
+    true) -%}
+{%- do view.registerJsFile(addressFieldJsUrl) -%}
+
+{% js at endBody %}
+    (function() {
+    window.csrfTokenName = "{{ craft.app.getConfig().getGeneral().csrfTokenName|e('js') }}";
+    new SproutFormsAddressField('{{ id }}');
+    new SproutFormsCheckableInputs('{{ id }}');
+    new SproutFormsRules('{{ id }}');
+    })();
+{% endjs -%}
+

# Email Templates

Email Templates can now check if a field is hidden by a field rule:

OLD
+{% for field in fields if not field.isPlainInput() %}
+
+NEW
+{% for field in fields if not field.isPlainInput() and not entry.getIsFieldHiddenByRule(field.handle) %}
+

# Other changes

  • Removed barrelstrength\sproutforms\elements\Form::deleteById(). Use Elements Service deleteElementById instead.
  • Removed barrelstrength\sproutforms\web\twig\variables\getIntegrationById(). Use Integrations service via Template API instead.

Custom integrations may also need to update how they initialize the target field column in the Field Mapping table:

// OLD
+new sprout.forms.Integration({
+  integrationType: '{{ className(integration)|e('js') }}'
+});
+
+// NEW
+new SproutFormsIntegration({
+  integrationType: '{{ className(integration)|e('js') }}'
+});
+

# Updating to Forms v3.6.0

This release adds several improvements to Spam workflows and has touched on several areas of the Entry Submission workflow. Some breaking changes have been introduced so users with more custom form implementations will want to review what has changed to get things updated properly.

# Form Templates

Custom Form Templates will need to update the class name used in the default conditional logic to correctly hide fields used in conditional logic rules.

OLD
+{% css %}
+    .hidden {
+    display: none !important;
+    }
+{% endcss %}
+
+NEW
+{% css %}
+    .sprout-hidden {
+    display: none !important;
+    }
+{% endcss %}
+

# Entry Queries using Status Handles

The statusHandle attribute has been removed as the same behavior is available via the Element status attribute.

OLD
+{% for formEntry in sprout.forms.entries
+  .formHandle('contact')
+  .statusHandle('pending')
+  .all() %}
+  {{ formEntry.title }}
+{% endfor %}
+
+NEW
+{% for formEntry in sprout.forms.entries
+  .formHandle('contact')
+  .status('pending')
+  .all() %}
+  {{ formEntry.title }}
+{% endfor %}
+

# Custom Captchas

The Captcha API has been updated.

OLD (OnBeforeSaveEntryEvent)
+$event->isValid = true;
+$event->fakeIt = true;
+$event->entry->addError(Entry::CAPTCHA_ERRORS_KEY, $errorMessage);
+
+NEW (OnBeforeValidateEntryEvent)
+// isValid is now handled by checking for Errors on the model
+// fakeIt is now handled via the 'Spam Redirect Behavior' setting in the CP
+$this->addError(self::CAPTCHA_ERRORS_KEY, $errorMessage);
+

Previously, captcha validation ran during the OnBeforeSaveEntryEvent Event and used the isValid and fakeIt attributes on the event to control the flow of how the rest of the request got processed. Now, the active Captchas get processed on the OnBeforeValidateEntryEvent Event, errors are added to the Captcha models, and the Captcha models are added to the Entry::captchas attribute. This gives us a lot more flexibility on how to give the user control over this workflow in the CP and how we track errors when entries are flagged as Spam.

# Events

OnBeforePopulateEntryEvent

The isValid and fakeIt attributes have been removed as they were never used in the validation workflow.

REMOVED
+$event->isValid
+$event->fakeIt
+

OnBeforeValidateEntryEvent

The isValid and fakeIt attributes have been removed as they were never used in the validation workflow.

REMOVED
+$event->isValid
+$event->fakeIt
+

OnBeforeSaveEntryEvent

The fakeIt attribute has been removed as it is not longer used in the validation workflow. Use the 'Spam Redirect Behavior' setting instead. The isValid and errors attributes remain on this event and can be used by developers as a final opportunity to add custom validation behavior. However, it is recommended to create a Custom Captcha and add errors to the Captcha model when verifySubmission is validated.

REMOVED
+$event->fakeIt
+

# Upgrading to Forms v3.9.0

Sprout Forms 3.9.0 is a recommended upgrade and fixes a vulnerability that could occur in some scenarios with custom Email Templates.

This release adds native support for AJAX submissions, global Success and Error Messages, and an improved Javascript submission event API. These features are provided out of the box if you are using our default Accessible Form Templates but will require manual updates to any custom template used in your project.

An updated Email Template API improves support for extending layouts from within your templates folder. If you have created any custom Email Templates Integrations, you will need to make a small change to the paths in your custom Email Templates Integration to support this behavior.

# AJAX Submissions

If you currently have a custom AJAX implementation to submit your forms, consider checking out our new AJAX submission feature and new Javascript Events. Let us know if it doesn't do something you need it to do. We'd love to help you have less code to manage!

Custom Form Templates will need to add support for AJAX submissions. Several individual Form settings (Submission Method, Success Message, Error Message, Error Display Method) may not work as expected until these updates are made to the templates.

Updates to form.twig

<!-- Add `data-submission-method` attribute to form tag -->
+<form method="post" accept-charset="utf-8" enctype="multipart/form-data" data-submission-method="{{ form.submissionMethod }}">
+    ...
+</form>
+

Updates to form.twig

{# Register Submit Handler JS file #}
+{%- set submitHandlerJsUrl = view.getAssetManager().getPublishedUrl(
+    '@sproutforms/web/assets/formtemplates/dist/js/submit-handler.js',
+    true) -%}
+{%- do view.registerJsFile(submitHandlerJsUrl) -%}
+
+...
+{# Initialize SproutFormsSubmitHandler #}
+{% js at endBody %}
+    (function() {
+    window.csrfTokenName = "{{ craft.app.getConfig().getGeneral().csrfTokenName|e('js') }}";
+    new SproutFormsAddressField('{{ id }}');
+    new SproutFormsCheckableInputs('{{ id }}');
+    new SproutFormsDisableSubmitButton('{{ id }}');
+    new SproutFormsRules('{{ id }}');
+    new SproutFormsSubmitHandler('{{ id }}');
+    })();
+{% endjs -%}
+

# Global Success and Error Messages

The default Accessible Templates have been updated to support global Success and Error messages when using AJAX submission or when a form is redirected back to the same page after submission. This code could also be used as a starting point for similar behavior if redirecting to a different page after the form is submitted.

Updates to form.twig

{# Set these new variables at the top of the form.twig template #}
+{% set globalErrorsEnabled = form.errorDisplayMethod in ['global', 'both'] ? true : false %}
+{% set lastEntry = sprout.forms.lastEntry(form.id) %}
+
+{# Define globalErrorListHtml if it exists #}
+{%- set globalErrorListHtml -%}
+    {% set globalErrors = [] %}
+    {% for errors in entry.getErrors() %}
+        {% for error in errors %}
+            {% set globalErrors = globalErrors|merge([error]) %}
+        {% endfor %}
+    {% endfor %}
+    {% include "errors" with {
+        errors: globalErrors
+    } %}
+{%- endset -%}
+
+{# Conditionally output the global Success and Error messages within the form.twig template #}
+{% if globalErrorsEnabled and errors|length and (form.errorMessage or globalErrorListHtml) %}
+    {% set errorMessage = view.renderObjectTemplate(form.errorMessage, entry) %}
+    <div id="{{ id }}-message-box" class="sproutforms-message-errors">
+        {{ errorMessage|markdown }}
+        {{ globalErrorListHtml }}
+    </div>
+{% endif %}
+
+{% if lastEntry and form.id == lastEntry.getForm().id and form.successMessage %}
+    {% set successMessageTemplate = form.successMessage ?? '' %}
+    {% set successMessage = view.renderObjectTemplate(successMessageTemplate, lastEntry) %}
+    <div id="{{ id }}-message-box" class="sproutforms-message-success">{{ successMessage|markdown }}</div>
+{% endif %}
+

Updates to field.twig

{# Set this new variables at the top of the field.twig template #}
+{% set inlineErrorsEnabled = form.errorDisplayMethod in ['inline', 'both'] ? true : false %}
+
+{# Update the field.twig template to only output the errors if `inlineErrorsEnabled` is true #}
+{% if inlineErrorsEnabled %}
+    {% include "errors" with {
+        errors: errors,
+        name: name
+    } %}
+{% endif %}
+

# Javascript Events

Anything previously watching the submit event should probably be update to use the new sproutFormsSubmit event. As Sprout Forms watches the submit event issues can arise if third-party javascript also attempts to watch the same event. See the new Javascript Events documentation for additional options you have to customize the submission process via Javascript.

OLD
+form.addEventListener('submit', function(event) {
+    // ...
+}, false);
+
+NEW
+form.addEventListener('onSproutFormsSubmit', function(event) {
+    // ...
+}, false);
+

# Email Templates API

Sprout Forms v3.9.0 uses the updated Email Templates Integrations API. See the Sprout Email upgrade notes for details: Upgrading to Email v4.2.0.

# Upgrading to Forms v3.10.0

Captcha Config Overrides

While the file-based config config/sprout-forms.php had not yet been documented, if you were using it to define Captcha settings these settings will need to be updated.

// OLD
+'captchaSettings' => [
+    'sproutforms-duplicatecaptcha' => [
+        'enabled' => true,
+    ],
+    'sproutforms-javascriptcaptcha' => [
+        'enabled' => true,
+    ],
+    'sproutforms-honeypotcaptcha' => [
+        'enabled' => true,
+        'honeypotFieldName' => 'beesknees',
+        'honeypotScreenReaderMessage' => 'Leave this field blank'
+    ],
+],
+
+// NEW
+'captchaSettings' => [
+    'barrelstrength\sproutforms\captchas\DuplicateCaptcha' => [
+        'enabled' => true,
+    ],
+    'barrelstrength\sproutforms\captchas\JavascriptCaptcha' => [
+        'enabled' => true,
+    ],
+    'barrelstrength\sproutforms\captchas\HoneypotCaptcha' => [
+        'enabled' => true,
+        'honeypotFieldName' => 'beesknees',
+        'honeypotScreenReaderMessage' => 'Leave this field blank'
+    ],
+],
+

# Upgrading to Forms v3.12.0

Sprout Forms v3.12.0 includes a small breaking change to the getFrontEndInputHtml method in your Form Field classes. This was necessary to support more refined targeting for Rendering Options including the targeting of error classes on input fields to better support using Rendering Options for front-end frameworks such as Bootstrap.

# Custom Form Fields

Custom Form fields will need to update the getFrontEndInputHtml method signature to include a new second argument for the Form Entry Element and pass that entry variable to your input template:

// OLD
+public function getFrontEndInputHtml($value, array $renderingOptions = null): Markup
+{
+    $rendered = Craft::$app->getView()->renderTemplate('dropdown/input', [
+            'name' => $this->handle,
+            'value' => $value,
+            'field' => $this,
+            'renderingOptions' => $renderingOptions
+        ]
+    );
+
+    return TemplateHelper::raw($rendered);
+}
+
+// NEW
+use barrelstrength\sproutforms\elements\Entry;
+
+public function getFrontEndInputHtml($value, Entry $entry, array $renderingOptions = null): Markup
+{
+    $rendered = Craft::$app->getView()->renderTemplate('dropdown/input', [
+            'name' => $this->handle,
+            'value' => $value,
+            'field' => $this,
+            'entry' => $entry,
+            'renderingOptions' => $renderingOptions
+        ]
+    );
+
+    return TemplateHelper::raw($rendered);
+}
+

# Rendering Options Error Classes

Additionally, to support Rendering Options error classes in your custom Form Field input template, you will want to update the Form Field input template to check for errors and update the class to include any error classes if they exist:

// OLD
+{%- set class = renderingOptions.class ?? name %}
+
+// NEW
+{%- set class = renderingOptions.class ?? name %}
+{%- set errors = entry is not empty ? entry.getErrors(name) : null %}
+{%- set errorClass = renderingOptions.errorClass ?? null %}
+{%- set class = errors and errorClass ? class~' '~errorClass : class %}
+

# Upgrading to Forms 4.0.0 - UNRELEASED

Upgrade to the latest before updating. +Purge SPAM and delete old entries.

REMOVE Remove Basic Form templates. Link to old Repo if folks want to download them and use them as overrides.

Sprout Forms 4 is a major release the includes an update to the underlying architecture. The Sprout Forms user experience will remain familiar but several conventions have changed. Most notably, the core codebase for barrelstrength/sprout-forms has been moved to the barrelstrength/sprout-base package so any custom code, translations, or direct links to the Sprout Forms Control Panel will need to be updated to target the new naming conventions. Plugin-specific Control Panel settings have also moved to the Craft settings area.

Sidebar navigation has been updated to be independent of plugins and specific to the modules being used +If you had custom code adjusting the sidebar, you may need to revisit it. +Plugin features now default to their module names in the sidebar.

If you'd have questions and would like support at any time during the upgrade process, please reach out to support or schedule a half-hour consultation.

Feature Old Name New Name
CP URL admin/sprout-forms admin/sprout/forms
Template Variables craft.sproutForms sprout.forms
Translation Category sprout-forms sprout
Controller Namespace barrelstrength/sproutforms/controllers barrelstrength/sproutbase/app/forms/controllers
Service Namespace barrelstrength/sproutforms/services barrelstrength/sproutbase/app/forms/services

# Front-end Form Overrides

Front End Form Asset Resource paths changed: +Update path of formtemplates resources into web/assets/public/dist folder.

You will need to update the Form submission action in any template overrides:

{# OLD #}
+<input type="hidden" aria-hidden="true" name="action" value="sprout-forms/entries/save-entry">
+
+{# NEW #}
+<input type="hidden" aria-hidden="true" name="action" value="sprout/form-entries/save-entry">
+
Old New
@sproutforms/web/assets/formtemplates/dist/js/submit-handler.js @sproutbase/web/public/formtemplates/dist/js/SubmitHandler.js
@sproutforms/web/assets/formtemplates/dist/js/rules.js @sproutbase/web/public/formtemplates/dist/js/Rules.js
@sproutforms/web/assets/formtemplates/dist/js/addressfield.js @sproutbase/web/public/formtemplates/dist/js/AddressField.js
@sproutforms/web/assets/formtemplates/dist/js/accessibility.js @sproutbase/web/public/formtemplates/dist/js/Accessibility.js
@sproutforms/web/assets/formtemplates/dist/js/disable-submit-button.js @sproutbase/web/public/formtemplates/dist/js/DisableSubmitButton.js

# Removed Basic Form Templates

Document way use can copy these over and use them as Custom Templates folder if they wish.

# Form Templates API

FormTemplates are using two methods instead of one to determine path: +use FormTemplates::getTemplateRoot and FormTemplates::getPath +updated FormTemplates::getPath to not refer to the full path...

# Form Field override template

The countries variable has been updated and may need updated if you have a phone form field template override:

{# OLD #}
+{%- for key, option in sprout.fields.getCountries() -%}
+
+{# NEW #} 
+{%- for key, option in countries -%}
+

# Controllers

Any forms you submit to controllers in your templates, will need to be updated to point to new controller endpoints:

Old New
sprout-forms/entries/[action-id] sprout/form-entries/[action-id]
sprout-forms/groups/[action-id] sprout/form-groups/[action-id]
sprout-forms/entry-statuses/[action-id] sprout/form-entry-statuses/[action-id]

The class names that changed are:

Old New
barrelstrength\sproutforms\controllers\Entries barrelstrength\sproutbase\app\forms\controllers\FormEntries
barrelstrength\sproutforms\controllers\Fields barrelstrength\sproutbase\app\forms\controllers\FormFields
barrelstrength\sproutforms\controllers\Groups barrelstrength\sproutbase\app\forms\controllers\FormGroups
barrelstrength\sproutforms\controllers\EntryStatuses barrelstrength\sproutbase\app\forms\controllers\FormEntryStatuses
barrelstrength\sproutforms\controllers\Integrations barrelstrength\sproutbase\app\forms\controllers\FormIntegrations

# Services

Old New
SproutForms::$app->entries SproutBase::$app->formEntries
SproutForms::$app->fields SproutBase::$app->formFields
SproutForms::$app->groups SproutBase::$app->formGroups
SproutForms::$app->entryStatuses SproutBase::$app->formEntryStatuses
SproutForms::$app->integrations SproutBase::$app->formIntegrations
SproutForms::$app->rules SproutBase::$app->formRules
Old New
barrelstrength\sproutforms\services\Entries barrelstrength\sproutbase\app\forms\services\FormEntries
barrelstrength\sproutforms\services\Fields barrelstrength\sproutbase\app\forms\services\FormFields
barrelstrength\sproutforms\services\Groups barrelstrength\sproutbase\app\forms\services\FormGroups
barrelstrength\sproutforms\services\EntryStatuses barrelstrength\sproutbase\app\forms\services\FormEntryStatuses
barrelstrength\sproutforms\services\Integrations barrelstrength\sproutbase\app\forms\services\FormIntegrations
barrelstrength\sproutforms\services\Rules barrelstrength\sproutbase\app\forms\services\FormRules

# Event Updates

The EVENT_REGISTER_FORM_TEMPLATES has moved:

// OLD
+use barrelstrength/sproutforms/services/Forms;
+
+Event::on(Forms::class, Forms::EVENT_REGISTER_FORM_TEMPLATES, static function(RegisterComponentTypesEvent $event) {
+    $event->types[] = CustomFormTemplates::class;
+});
+
+// NEW
+use barrelstrength/sprout/app/forms/services/FormTemplates;
+
+Event::on(FormTemplates::class, FormTemplates::EVENT_REGISTER_FORM_TEMPLATES, static function(RegisterComponentTypesEvent $event) {
+    $event->types[] = CustomFormTemplates::class;
+});
+

The EVENT_REGISTER_CAPTCHAS Event has moved:

// OLD
+use barrelstrength/sproutforms/services/Forms;
+
+Event::on(Forms::class, Forms::EVENT_REGISTER_CAPTCHAS, static function(RegisterComponentTypesEvent $event) {
+    $event->types[] = GoogleRecaptcha::class;
+});
+
+// NEW
+use barrelstrength/sprout/app/forms/services/FormCaptchas;
+
+Event::on(FormCaptchas::class, FormCaptchas::EVENT_REGISTER_CAPTCHAS, static function(RegisterComponentTypesEvent $event) {
+    $event->types[] = GoogleRecaptcha::class;
+});
+
+ + + diff --git a/docs/.vuepress/dist/forms/javascript-events.html b/docs/.vuepress/dist/forms/javascript-events.html new file mode 100644 index 00000000..59aafa3a --- /dev/null +++ b/docs/.vuepress/dist/forms/javascript-events.html @@ -0,0 +1,93 @@ + + + + + + Javascript Events | Sprout Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Javascript Events

The Sprout Forms AJAX Submission process can be extended using the following javascript events.

The following examples assume you have defined a form variable in your javascript that references the given Sprout Form being submitted such as let form = document.getElementById('{{ id }}'). Custom events are dispatched on the form element.

# beforeSproutFormsSubmit

Gives third-party scripts a chance to take actions before the form is submitted.

form.addEventListener('beforeSproutFormsSubmit', function(event) {
+  
+    // Retrieve a copy of the form element
+    let targetForm = event.target;
+  
+    // Cancel the default form submission
+    event.preventDefault();
+
+    // Add a promise to be evaluated   
+    event.detail.promises.push(yourPromise);
+
+}, false);
+

Promises added to the event.detail.promises array should:

  • resolve(true) to continue the form submission
  • resolve(false) or reject('whatever') to cancel the form submission

# onSproutFormsSubmit

Gives third-party scripts a chance to take over the submit behavior.

form.addEventListener('onSproutFormsSubmit', function(event) {
+
+    // Retrieve a copy of the form element
+    let targetForm = event.target;
+  
+    // Cancel the default form submission
+    event.preventDefault();
+
+    // Let Sprout Forms complete the submit behavior using the existing form settings
+    event.detail.submitHandler.handleFormSubmit()
+
+}, false);
+

# afterSproutFormsSubmit

Gives third-party scripts a chance to do something after the submission is complete.

form.addEventListener('afterSproutFormsSubmit', function(event) {
+  
+    // Retrieve a copy of the form element
+    let targetForm = event.target;
+
+}, false);
+

# onSproutFormsSubmitCancelled

Gives third-party scripts a chance to do something if the submission was cancelled.

form.addEventListener('onSproutFormsSubmitCancelled', function(event) {
+  
+    // Retrieve a copy of the form element
+    let targetForm = event.target;
+
+}, false);
+
+ + + diff --git a/docs/.vuepress/dist/forms/plugin-settings.html b/docs/.vuepress/dist/forms/plugin-settings.html new file mode 100644 index 00000000..c611fd10 --- /dev/null +++ b/docs/.vuepress/dist/forms/plugin-settings.html @@ -0,0 +1,145 @@ + + + + + + Settings | Sprout Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Settings

Settings can be managed in the Control Panel Sprout Forms → Settings or via a config file in config/sprout-forms.php

<?php
+
+return [
+    // The name to display in the control panel in place of the plugin name
+    'pluginNameOverride' => 'Sprout Forms',
+
+    // The default templates that will be used to output your forms when using
+    // the displayForm tag if no Form Templates are selected for a given form
+    'formTemplateId' => 'barrelstrength\sproutforms\formtemplates\AccessibleTemplates',
+
+    // Disable this setting to stop Sprout Forms from saving all
+    // form submission data to the Craft database
+    'enableSaveData' => true,
+
+    // Whether to save Entries flagged as spam to the database
+    'saveSpamToDatabase' => false,
+
+    // The default behavior for saving data when a new Form is created
+    'enableSaveDataDefaultValue' => true,
+
+    // Enable to capture the IP Address used when a Form Entry is saved
+    'trackRemoteIp' => false,
+
+    // The form section that will be selected by default in the
+    // sidebar navigation ('forms' or 'entries')
+    'defaultSection' => 'entries',
+
+    // Enable this setting to allow users to edit existing form entries in
+    // front-end templates. Enabling this feature may have some workflow or
+    // security considerations as forms allow anonymous submissions.
+    'enableEditFormEntryViaFrontEnd' => false,
+
+    // The behavior your user will see if a submission is flagged as spam
+    // 'redirectAsNormal' - will simulate a successful submission and direct
+    //   the user to the Redirect Page.
+    // 'redirectBackToForm - will return the user to the form. All failed
+    //   captchas are logged on the Spam Entries saved in the database.
+    'spamRedirectBehavior' => 'redirectAsNormal',
+
+    // The total number of Spam entries that will be stored in the database.
+    // When the limit is reached, the least recently updated Spam entry will
+    // be deleted from the database.
+    'spamLimit' => 500,
+
+    // The probability that the Spam cleanup task will run each time a
+    // Form Entry is saved. A lower probability will trigger a cleanup task
+    // less often and the number of Spam Entries stored in the database may
+    // be higher than the Spam Limit target until the cleanup task is triggered.
+    //
+    // 0 - None
+    // 100000 - 1 in 10
+    // 10000 - 1 in 100
+    // 1000 - selected>1 in 1,000
+    // 100 - 1 in 10,000
+    // 10 - 1 in 100,000
+    // 1 - 1 in 1,000,000
+    'cleanupProbability' => 1000,
+
+    // Individual captcha settings
+    //
+    // Additional Captchas can be found in the Plugin Store:
+    // https://plugins.craftcms.com/sprout-forms-google-recaptcha
+    //
+    // Custom Captchas can be added via the Captcha API
+    'captchaSettings' => [
+        'barrelstrength\sproutforms\captchas\DuplicateCaptcha' => [
+            'enabled' => true,
+        ],
+        'barrelstrength\sproutforms\captchas\JavascriptCaptcha' => [
+            'enabled' => true,
+        ],
+        'barrelstrength\sproutforms\captchas\HoneypotCaptcha' => [
+            'enabled' => true,
+            'honeypotFieldName' => 'beesknees',
+            'honeypotScreenReaderMessage' => 'Leave this field blank'
+        ],
+    ],
+
+    // Show/Hide the Notifications tab in Sprout Forms
+    'showNotificationsTab' => true,
+
+    // Show/Hide the Reports tab in Sprout Forms
+    'showReportsTab' => true,
+];
+

Front-end Editing

Forms are submitted anonymously by users, so unlike Entries which have Authors, you will need to manage and authenticate any users who are editing your front-end Forms.

# Entry Statuses

Entry Status settings can only be edited in the Control Panel.

By default, Form Entries default to an Unread status and can be updated and marked Read. Entries that trigger Captcha errors will be given the Spam status. Rename the default statuses or customize additional Entry Statuses to fit your workflows in the settings.

+ + + diff --git a/docs/.vuepress/dist/forms/spam-protection.html b/docs/.vuepress/dist/forms/spam-protection.html new file mode 100644 index 00000000..ea430bb8 --- /dev/null +++ b/docs/.vuepress/dist/forms/spam-protection.html @@ -0,0 +1,61 @@ + + + + + + Spam Protection | Sprout Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Spam Protection

Sprout Forms provides several methods to manage Spam. The Spam Protection settings give admins tools to configure how to redirect users, save spam entries in the database, generate spam reports, and configure and create custom Captchas to provide additional layers of validation.

# How it works

  1. If field validation errors exist on a submitted entry, it will be redirected back to the form. Spam redirect rules are only processed if no field validation errors exist.
  2. If no field validation errors exist and an enabled Captcha flags an entry as Spam, the Entry will be assigned the 'Spam' status.
  3. If Saving Spam Entries to the database is enabled, it is saved to the database along with any Failed Captcha error messages.
  4. The user will be redirected as normal to the thank you page or be sent back to the form based on the 'Spam Redirect Behavior' setting

# Spam Status

When submitted Entries are marked as Spam, they will be saved to the database with the Spam status. The Entries listing page does not display Spam Entries when viewing the All Entries and Form-specific Entries sources.

To view Spam Entries you can select the Spam source in the sidebar or generate a Spam Log Report on the Reports tab. Spam Entries will list the Failed Captcha methods that caused an Entry to be marked as spam and the Spam Log Report can give a broad overview of what types of Captchas are being triggered the most.

To update one or more Entries to be marked as Spam or vice versa use the Element Actions:

  • Mark as Spam - Marks one or more entries with the Spam status
  • Mark as Default Status - Marks one or more entries with the Default Status defined in the Entry Statuses settings

# Captchas

Captchas can be enabled in the global settings to establish criteria that form submitters are required to meet. Captchas are enabled by default for individual forms but there is a setting to enable or disable Captchas on any particular form. While several Captchas can be enabled on the Global level, Forms only have a single setting to toggle whether those Captchas are used on a given Form.

Failed Captcha error messages will be logged to the DB and appear in the sidebar when editing an individual Spam Entry. Captcha error messages are not treated as field validation errors and will not display by default in your templates. If you wish to display the Captcha errors in your templates you can create custom Form Templates retrieve them via the formHandle.getCaptchaErrors() method.

+ + + diff --git a/docs/.vuepress/dist/icons/apple-touch-icon.png b/docs/.vuepress/dist/icons/apple-touch-icon.png new file mode 100644 index 00000000..51eea851 Binary files /dev/null and b/docs/.vuepress/dist/icons/apple-touch-icon.png differ diff --git a/docs/.vuepress/dist/icons/browserconfig.xml b/docs/.vuepress/dist/icons/browserconfig.xml new file mode 100644 index 00000000..f4203cdc --- /dev/null +++ b/docs/.vuepress/dist/icons/browserconfig.xml @@ -0,0 +1,9 @@ + + + + + + #484539 + + + diff --git a/docs/.vuepress/dist/icons/favicon-16x16.png b/docs/.vuepress/dist/icons/favicon-16x16.png new file mode 100644 index 00000000..1fb77e84 Binary files /dev/null and b/docs/.vuepress/dist/icons/favicon-16x16.png differ diff --git a/docs/.vuepress/dist/icons/favicon-32x32.png b/docs/.vuepress/dist/icons/favicon-32x32.png new file mode 100644 index 00000000..61574420 Binary files /dev/null and b/docs/.vuepress/dist/icons/favicon-32x32.png differ diff --git a/docs/.vuepress/dist/icons/favicon.ico b/docs/.vuepress/dist/icons/favicon.ico new file mode 100644 index 00000000..71666503 Binary files /dev/null and b/docs/.vuepress/dist/icons/favicon.ico differ diff --git a/docs/.vuepress/dist/icons/logo.svg b/docs/.vuepress/dist/icons/logo.svg new file mode 100644 index 00000000..e5b1f1ff --- /dev/null +++ b/docs/.vuepress/dist/icons/logo.svg @@ -0,0 +1,8 @@ + + + + + + Sprout Notes + + diff --git a/docs/.vuepress/dist/icons/mstile-144x144.png b/docs/.vuepress/dist/icons/mstile-144x144.png new file mode 100644 index 00000000..fe6a8bd7 Binary files /dev/null and b/docs/.vuepress/dist/icons/mstile-144x144.png differ diff --git a/docs/.vuepress/dist/icons/mstile-150x150.png b/docs/.vuepress/dist/icons/mstile-150x150.png new file mode 100644 index 00000000..e6c53df9 Binary files /dev/null and b/docs/.vuepress/dist/icons/mstile-150x150.png differ diff --git a/docs/.vuepress/dist/icons/mstile-310x150.png b/docs/.vuepress/dist/icons/mstile-310x150.png new file mode 100644 index 00000000..46c16f1e Binary files /dev/null and b/docs/.vuepress/dist/icons/mstile-310x150.png differ diff --git a/docs/.vuepress/dist/icons/mstile-310x310.png b/docs/.vuepress/dist/icons/mstile-310x310.png new file mode 100644 index 00000000..b69fe576 Binary files /dev/null and b/docs/.vuepress/dist/icons/mstile-310x310.png differ diff --git a/docs/.vuepress/dist/icons/mstile-70x70.png b/docs/.vuepress/dist/icons/mstile-70x70.png new file mode 100644 index 00000000..3a750626 Binary files /dev/null and b/docs/.vuepress/dist/icons/mstile-70x70.png differ diff --git a/docs/.vuepress/dist/icons/safari-pinned-tab.svg b/docs/.vuepress/dist/icons/safari-pinned-tab.svg new file mode 100644 index 00000000..46bc5f72 --- /dev/null +++ b/docs/.vuepress/dist/icons/safari-pinned-tab.svg @@ -0,0 +1,46 @@ + + + + +Created by potrace 1.11, written by Peter Selinger 2001-2013 + + + + + diff --git a/docs/.vuepress/dist/lists/installing-and-updating-craft-3.html b/docs/.vuepress/dist/lists/installing-and-updating-craft-3.html new file mode 100644 index 00000000..b252f779 --- /dev/null +++ b/docs/.vuepress/dist/lists/installing-and-updating-craft-3.html @@ -0,0 +1,126 @@ + + + + + + Craft 3 | Sprout Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Craft 3

Sprout Lists installation and update instructions for Craft 3.

# Requirements

  • Craft CMS 3.0.0 or a more recent version of Craft

# Installation via Plugin Store

  1. Find the plugin in the Plugin Store in your Craft Control Panel
  2. Go to Settings → Plugins and select “Install”

# Installation via Composer

  1. Open your terminal and go to your Craft project:
    cd /path/to/project
  2. Then tell Composer to load the plugin:
    composer require barrelstrength/sprout-lists
  3. In the Control Panel, go to Settings → Plugins and select “Install”

# Upgrading

# Upgrading to v2.x

Sprout Lists v2 includes several updates that will require template changes from earlier versions. These updates include a complete refactoring of how Lists are submitted and managed in templates. Please see the updated Core Concept pages for complete examples.

Some general updates include:

  • Adding and removing Subscribers now require the Users email to identify the Subscriber
  • A Lists Element ID and Handle now must be unique
  • Previous template tags have been removed in favor of the general sprout.lists.lists and sprout.lists.subscribers tags and improved handling of related queries on List and Subscriber models.

# Checking if a Subscriber is on a list

New:
+{# Retrieve a list #}
+{% set list = sprout.lists.lists
+    .id(123)
+    .one() %}
+
+{# Define the subscription you wish to add or remove from a list #}
+{% set subscription = {
+    email: currentUser.email
+} %}
+
+{# Check if the subscription already exists on a list #}
+{% if list.isSubscribed(subscription) %}
+...
+
+Old:
+{% set params = {
+  listHandle: 'listHandle',
+  userId: currentUser.id,
+  elementId: entry.id,
+} %}
+
+{% if sprout.lists.isSubscribed(params) %}
+...
+

Adding a Subscriber to a List

New:
+<form method="post" accept-charset="utf-8">
+    {{ csrfInput() }}
+    <input type="hidden" name="action" value="sprout-lists/lists/add">
+    <input type="hidden" name="list[type]" value="barrelstrength\sproutbaselists\listtypes\MailingList">
+    <input type="hidden" name="list[id]" value="123">
+    <input type="text" name="subscription[email]" value="{{ currentUser.email }}">
+    <input type="submit" value="Add to List">
+</form>
+
+Old:
+<form method="post" accept-charset="utf-8">
+    {{ csrfInput() }}
+    <input type="hidden" name="action" value="sprout-lists/lists/subscribe">
+    <input type="hidden" name="listHandle" value="listHandle">
+    <input type="hidden" name="elementId" value="{{ entry.id }}">
+    <input type="hidden" name="userId" value="{{ currentUser.id }}">
+    <input type="submit" value="Add to List">
+</form>
+

Removing a Subscriber from a List

New:
+<form method="post" accept-charset="utf-8">
+    {{ csrfInput() }}
+    <input type="hidden" name="action" value="sprout-lists/lists/remove">
+    <input type="hidden" name="list[type]" value="barrelstrength\sproutbaselists\listtypes\MailingList">
+    <input type="hidden" name="list[id]" value="123">
+    <input type="text" name="subscription[email]" value="{{ currentUser.email }}">
+    <input type="submit" value="Remove from List">
+</form>
+
+Old:
+<form method="post" accept-charset="utf-8">
+    {{ csrfInput() }}
+    <input type="hidden" name="action" value="sprout-lists/lists/unsubscribe">
+    <input type="hidden" name="listHandle" value="listHandle">
+    <input type="hidden" name="elementId" value="{{ entry.id }}">
+    <input type="hidden" name="userId" value="{{ currentUser.id }}">
+    <input type="submit" value="Remove from List">
+</form>
+

# Displaying Total Subscribers on a List

New:
+{% set list = sprout.lists.lists.id(123).one() %}
+
+{{ list.count }}
+
+Old:
+{% set totalSubscribers = sprout.lists.subscriberCount({ 
+  listHandle: 'listHandle' 
+}) %}
+
+{{ totalSubscribers }}
+

# Upgrading to Lists v4.44.444 - UNRELEASED

Sprout Lists 4 is a major release the includes an update to the underlying architecture. The Sprout Lists user experience will remain familiar but several conventions have changed. Most notably, the core codebase for barrelstrength/sprout-lists has been moved to the barrelstrength/sprout-base package so any custom code, translations, or direct links to the Sprout Lists Control Panel will need to be updated to target the new naming conventions. Plugin-specific Control Panel settings have also moved to the Craft settings area.

Feature Old Name New Name
CP URL admin/sprout-lists admin/sprout/lists
Template Variables craft.sproutLists sprout.lists
Translation Category sprout-lists sprout
Controller Namespace barrelstrength/sproutlists/controllers barrelstrength/sproutbase/app/lists/controllers
Service Namespace barrelstrength/sproutlists/services barrelstrength/sproutbase/app/lists/services
+ + + diff --git a/docs/.vuepress/dist/lists/plugin-settings.html b/docs/.vuepress/dist/lists/plugin-settings.html new file mode 100644 index 00000000..09e3f7b6 --- /dev/null +++ b/docs/.vuepress/dist/lists/plugin-settings.html @@ -0,0 +1,67 @@ + + + + + + Settings | Sprout Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

# Settings

Settings can be managed in the Control Panel Sprout Lists → Settings or via a config file in config/sprout-lists.php

<?php
+
+return [
+    // The name to display in the control panel in place of the plugin name
+    'pluginNameOverride' => 'Sprout Lists',
+
+    // Create a relationship between a Sprout Subscriber and a matching
+    // Craft User, based on the email address
+    'enableUserSync' => false,
+
+    // Subscriber Lists will be automatically created when a subscribe form
+    // is submitted and no matching List is found.
+    'enableAutoList' => false
+];
+

# Enable User Sync

When an email address is added to a Subscriber List, if the email address matches the address of a known User ID in Craft, Sprout Lists can create a link between the two. Enable this behavior the the Sprout Lists settings.

User Sync will behave as follows when enabled:

  • When a new user is created in Sprout Lists, Sprout Lists will check if any Craft Users with a matching email address also exist. If so, Sprout Lists will create a link between the two.
  • When a new user is created and saved in Craft, if there are any matching Subscribers in Sprout Lists, their Sprout Lists Subscriber Records will be linked to the Craft User account.
  • When any updates are made to the Email, First Name, and Last Name fields of a Sprout Lists Subscriber or Craft User, those updates will be reflected in both places

WARNING

With User Sync enabled, if you submit a blank value for the First Name or Last Name fields (in Sprout List or Craft), the field will also be updated with a blank value in the other location. You will need to enforce First Name and Last Name fields as required if necessary.

+ + + diff --git a/docs/.vuepress/dist/redirects/index.html b/docs/.vuepress/dist/redirects/index.html new file mode 100644 index 00000000..39ab7971 --- /dev/null +++ b/docs/.vuepress/dist/redirects/index.html @@ -0,0 +1,61 @@ + + + + + + About Sprout Redirects | Sprout Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

About Sprout Redirects

Sprout Redirects enables content managers to manage Redirects and Short URLs, track 404s, and ensure all content is findable.

Sprout SEO Redirects - Element Index Page

+ + + diff --git a/docs/.vuepress/dist/redirects/installing-and-updating-craft-3.html b/docs/.vuepress/dist/redirects/installing-and-updating-craft-3.html new file mode 100644 index 00000000..ad7beaa4 --- /dev/null +++ b/docs/.vuepress/dist/redirects/installing-and-updating-craft-3.html @@ -0,0 +1,54 @@ + + + + + + Craft 3 | Sprout Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Craft 3

Sprout SEO installation and update instructions for Craft 3.

# Requirements

  • Craft CMS 3.0.0 or a more recent version of Craft

# Installation via Plugin Store

  1. Find the plugin in the Plugin Store in your Craft Control Panel
  2. Go to Settings → Plugins and select “Install”

# Installation via Composer

  1. Open your terminal and go to your Craft project:
    cd /path/to/project
  2. Then tell Composer to load the plugin:
    composer require barrelstrength/sprout-seo
  3. In the Control Panel, go to Settings → Plugins and select “Install”

# Upgrading to Craft 3

BEFORE YOU UPDATE

Make sure you have updated to the latest version of Sprout SEO 3.x before updating to Sprout Import 4.x for Craft 3

# Upgrading to Redirects 2.0 - UNRELEASED

Upgrade to the latest before updating. +Purge 404 redirects

+ + + diff --git a/docs/.vuepress/dist/redirects/plugin-settings.html b/docs/.vuepress/dist/redirects/plugin-settings.html new file mode 100644 index 00000000..467237bd --- /dev/null +++ b/docs/.vuepress/dist/redirects/plugin-settings.html @@ -0,0 +1,111 @@ + + + + + + Settings | Sprout Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Settings

Settings can be managed in the Control Panel Sprout Redirects → Settings or via a config file in config/sprout-redirects.php

<?php
+
+return [
+    // The name to display in the control panel in place of the plugin name
+    'pluginNameOverride' => 'Sprout Redirects',
+
+    // Process Redirect rules and log 404 requests.
+    'enableRedirects' => true,
+
+    // Log 'Page Not Found' errors as 404 Redirects
+    'enable404RedirectLog' => false,
+
+    // How to match 404 requests with Redirect records already captured in
+    //the database.
+    // urlWithQueryStrings: match the entire URL including query strings
+    // urlWithoutQueryStrings: remove all parameters from the request URL
+    //   before searching for a match
+    'redirectMatchStrategy' => 'urlWithoutQueryStrings',
+
+    // How to treat query strings after processing a redirect
+    // removeQueryStrings - remove the query string from the incoming
+    //   URL entirely
+    // appendQueryStrings - add any query string from the incoming URL to
+    //   the New Url
+    'queryStringStrategy' => 'removeQueryStrings',
+
+    // Enable to capture the IP Address used when a 404 request is saved
+    'trackRemoteIp' => false,
+
+    // The target number of 404 Redirects that will be stored in the database
+    // per-site, after the cleanup task runs.
+    'total404Redirects' => 250,
+
+    // The probability that the 404 Redirect cleanup task will run each
+    // web request
+    //
+    // 0 - None
+    // 100000 - 1 in 10
+    // 10000 - 1 in 100
+    // 1000 - selected>1 in 1,000
+    // 100 - 1 in 10,000
+    // 10 - 1 in 100,000
+    // 1 - 1 in 1,000,000
+    'cleanupProbability' => 1000,
+
+    // Add any regular expression patterns you wish to exclude from the
+    // Redirect log. Overriding this setting will override any updates made by
+    // the "Add to Excluded URLs" action.
+    // 'excludedUrlPatterns' => ''
+];
+
+ + + diff --git a/docs/.vuepress/dist/redirects/query-strings-in-redirects.html b/docs/.vuepress/dist/redirects/query-strings-in-redirects.html new file mode 100644 index 00000000..e978cf1c --- /dev/null +++ b/docs/.vuepress/dist/redirects/query-strings-in-redirects.html @@ -0,0 +1,57 @@ + + + + + + Query Strings in Redirects | Sprout Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Query Strings in Redirects

Control the behavior around query strings in your Redirects using the Redirect Match Strategy and Query String Strategy settings. Below we'll take a look at examples of how these settings can be used.

# Redirect Match Strategy

The Redirect Match Strategy setting determines how to match 404 requests with Redirect records already captured in the database. Once the incoming Request URL is received, depending on this setting, the query string value may be retained or removed before searching the database for a matching value.

URL (with query strings) Example

Request URL www.website.com/blog?p=123
Old URL Search Value blog?p=123
Old URL Match blog?p=123

URL (without query strings) Example

Request URL www.website.com/blog?p=123
Old URL Search Value blog
Old URL Match blog

# Query String Strategy

The Query String Strategy setting determines how to treat query strings after processing a redirect.

Remove Query Strings Example

Request URL www.website.com/blog?p=123
New URL Match blog/slug-name
New URL Redirect Location blog/slug-name

Append Query Strings Example

Request URL www.website.com/blog?p=123
New URL Match blog/slug-name
New URL Redirect Location blog/slug-name?p=123

# Combining Strategies

Together the Redirect Match Strategy and Query String Strategy settings allow redirects to be configured in several ways

URL (with query strings) + Remove Query Strings

Request URL www.website.com/blog?p=123
Old URL Search Value blog?p=123
Old URL Match blog?p=123
New URL Match blog/slug-name
New URL Redirect Location blog/slug-name

URL (with query strings) + Append Query Strings

Request URL www.website.com/blog?p=123
Old URL Search Value blog?p=123
Old URL Match blog?p=123
New URL Match blog/slug-name
New URL Redirect Location blog/slug-name?p=123

URL (without query strings) + Remove Query Strings

Request URL www.website.com/blog?p=123
Old URL Search Value blog
Old URL Match blog
New URL Match blog/slug-name
New URL Redirect Location blog/slug-name

URL (without query strings) + Append Query Strings

Request URL www.website.com/blog?p=123
Old URL Search Value blog
Old URL Match blog
New URL Match blog/slug-name
New URL Redirect Location blog/slug-name?p=123
+ + + diff --git a/docs/.vuepress/dist/redirects/redirects.html b/docs/.vuepress/dist/redirects/redirects.html new file mode 100644 index 00000000..26cb8846 --- /dev/null +++ b/docs/.vuepress/dist/redirects/redirects.html @@ -0,0 +1,65 @@ + + + + + + Redirects | Sprout Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Redirects

Redirects allow you to forward users and search engines to the appropriate content on your site. Redirects can be managed on a per-site basis directly in the Control Panel.

Sprout SEO supports 3 types of Redirects:

Type Description
301 Redirect content that has permanently moved to a new location
302 Redirect content that has temporarily moved to a new location
404 Captures a 404 request and allows you to manually convert the URL that is 404ing into a 301 or 302 redirect.

# Redirect Settings

Each Redirect has 4 settings, tracks the count of how many times it was used, and can be enabled or disabled.

Sprout SEO Redirects - Edit Page

Setting Description
Old URL The URL where your content used to live
New URL The URL where your content will live in the future
Method Indicate to search engines whether the redirect behavior is permanent or temporary
Match Patterns (optional) Enables additional checks to process more advanced patter matching in the redirects using regular expressions

# Bulk Actions

Redirects can be updated via bulk actions by selecting the checkboxes next to each Redirect on the Redirect listing page. Currently supported bulk actions include:

Bulk Action Description
Update Status to Enabled Updates a Redirect status to 'Enabled'
Update Status to Disabled Updates a Redirect status to 'Disabled'
Update Method to 301 Updates a Redirect Method to a 301 Redirect
Update Method to 302 Updates a Redirect Method to a 302 Redirect
Add to Excluded URLs Adds an Old URL to the Settings->Redirects->Excluded URL Patterns setting.

This action only appears when 404 Redirects are selected.
Edit Opens a Redirect's Edit page in the Control Panel.

This action only appears when a single Redirect is selected.
Delete Deletes a Redirect.

# Regular Expressions

Redirect multiple URLs with a similar pattern by selecting the Match Patterns option. When the Match Patterns option is selected, you can then use Regular Expressions in the Old URL field and reference Capture Groups in the New Url field.

Old Url - Regular Expressions New Url - Capture Groups
/old-location/(.*) new-location/$1
/old-location/(\d{4})/(\d{2}) new-location/$1/$2

# Order of Redirects

Redirects can be re-ordered via drag and drop when ordered by the Structure option on the Redirect listing page.

Redirects are processed from top to bottom as they are seen in the Structure view. If two or more redirects match a URL, the highest on the list will be the one that takes priority in how a particular URL is redirected.

Redirects are not processed until Craft tries all other Routing options. When a page is about to 404, Sprout SEO will then check to see if a URL matches a Redirect rule and route things accordingly. This takes place between step 5 and 6 of Craft's Routing (opens new window) rules. Waiting until the last moment allows you to optimize your website experience and page speed for the majority of your users while still helping redirect any people attempting to access old URLs to the right place.

# 404 Redirects

To monitor and capture 404 Redirects, you will need to enable them in your Sprout SEO settings: Settings->General->Log 404 Redirects.

Log 404 Redirects

404 Redirects will get created with a disabled status and a default redirect location to your home page.

404 Redirects will need to be reviewed and manually updated to choose a redirect method (301 or 302), a redirect location, and be enabled.

You can view all 404 Redirects on the Redirects tab using the filter in the sidebar for '404 - Page Not Found'.

# Importing Redirects

Sprout Import provides a Sprout SEO Redirect import utility that can help you convert a spreadsheet of Redirects into a JSON format that can be imported with Sprout Import.

To use this feature:

  1. Create a spreadsheet of your redirects with 5 columns:
  • oldUrl (relative url)
  • newUrl (relative url)
  • method (301, 302, 404)
  • regex (1 or 0)
  • count (0)
  1. Create a sixth column to combine all of your Redirect values into a comma-separated list:
oldUrl, newUrl, method, regex, count
+
  1. Copy and paste your list of comma-separated redirects into the Sprout Import SEO Helper utility
/old-url, /new-url, 301, 0, 0
+/another-old-url, /another-new-url, 302, 0, 0
+/retired-section(.*), /new-section, 301, 1, 0
+
  1. Select "Generate JSON" and copy the output to the Sprout Import->Import tab Import via Copy/Paste field.

# Additional Notes

# 301 vs 302 Redirects

When you create a Redirect for the first time, it's often best to create it as a 302 redirect, test it, and then update it to be a 301 Redirect.

A 301 Redirect gets cached in a visitors browser. The only way to clear the cache of a visitors browser is to ask them to go into their browser and clear their cache. In the case that you publish an incorrect 301 redirect, you could run into a scenario where 100s of visitors to your site get the wrong URL cached in their browser. Even if you correct the redirect, each one of those users will need to clear their browser cache before the old URL they are trying to access will see your updated Redirect. By testing your Redirects as 302 Redirects first, you reduce the risk that your users will get incorrect URLs cached in their browsers.

Sprout SEO provides a bulk Element Action where you can update a group of Redirects from 302 Redirects to 301 Redirects after testing.

# Redirects not handled by Sprout SEO

Sprout SEO allows you to manage redirects for any page that could result in a 404. In a few edge cases, there can be a scenario where Craft processes a request and does not throw a 404 for a URI that you wish to Redirect. In these scenarios, we currently recommend handling these types of Redirects outside of Sprout SEO using .htaccess, the {% redirect %} tag, or some other method.

+ + + diff --git a/docs/.vuepress/dist/sent-email/index.html b/docs/.vuepress/dist/sent-email/index.html new file mode 100644 index 00000000..1e83b119 --- /dev/null +++ b/docs/.vuepress/dist/sent-email/index.html @@ -0,0 +1,61 @@ + + + + + + Sprout Sent Email | Sprout Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Sprout Sent Email

Sent Email Elements capture instances of emails that are sent by Craft. Sent Emails can be used to review Sent Emails, troubleshoot customer support and deliverability issues, and re-send email to your users.

A Sent Email is created when:

  1. Craft sends a system email
  2. Sprout Email sends a Notification Email
  3. Sprout Email sends a Campaign Email

While Sent Emails may indicate an email has been successfully sent by Craft, this status does no indicate anything about the deliverability of the Sent Emails. To get additional information on whether an email was delivered or bounced, consider using an email service provider such as Mailgun, Sparkpost or other similar services.

TIP

Our goal is to capture all emails sent by Craft, including emails that failed to send. If you run into a scenario that is not being captured by Sprout Email, let us know.

# Tracking Info

Sent Emails capture the following info:

  • Date Sent
  • Subject
  • Sender Name
  • Sender Email
  • Recipient (or List)
  • A copy of the HTML Email
  • A copy of the Text Email
  • Email Type
  • Test Email (Y/N)
  • Source (i.e. Sprout Email, Craft)
  • Source Version (i.e. Sprout Email 1.2.3)
  • Craft Version
  • IP Address
  • User Agent
  • Protocol
  • Host Name
  • Port
  • SMTP Secure Transport Type
  • Timeout

Info may vary based on the type of email being captured

# View Content

Select the "View Content" link to display the HTML and Text versions of the email sent.

Sent Emails can be searched by:

  • Recipient
  • Subject
+ + + diff --git a/docs/.vuepress/dist/sent-email/installing-and-updating-craft-3.html b/docs/.vuepress/dist/sent-email/installing-and-updating-craft-3.html new file mode 100644 index 00000000..00d6686b --- /dev/null +++ b/docs/.vuepress/dist/sent-email/installing-and-updating-craft-3.html @@ -0,0 +1,59 @@ + + + + + + Craft 3 | Sprout Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Craft 3

Sprout Sent Email installation and update instructions for Craft 3.

# Requirements

  • Craft CMS 3.4.0 or a more recent version of Craft

# Installation via Plugin Store

  1. Find the plugin in the Plugin Store in your Craft Control Panel
  2. Go to Settings → Plugins and select “Install”

# Installation via Composer

  1. Open your terminal and go to your Craft project:
    cd /path/to/project
  2. Then tell Composer to load the plugin:
    composer require barrelstrength/sprout-sent-email
  3. In the Control Panel, go to Settings → Plugins and select “Install”

# Migrating from Sprout Email

If you've been using Sprout Email only for the Sent Email feature, you may be able to upgrade and just use this more focused plugin now. To do so, and preserve your data you will want to:

  1. Backup your database
  2. Upgrade to Sprout Email v4.3.0 (to make sure you trigger all the necessary migrations that make Sprout Sent Email an independent module)
  3. Install Sprout Sent Email and enable it
  4. Uninstall Sprout Email

# Upgrading to Sent Email 2.0.0 - UNRELEASED

Upgrade to the latest before updating. +Purge old SENT EMAIL before updating.

Any custom integrations implementing Sent Email tracking will need to update the following method:

// OLD
+public function createInfoTableModel($pluginHandle, array $values = [])
+
+NEW
+public function createInfoTableModel($sourceName, $sourceVersion = '', array $values = [])
+
+ + + diff --git a/docs/.vuepress/dist/sent-email/plugin-settings.html b/docs/.vuepress/dist/sent-email/plugin-settings.html new file mode 100644 index 00000000..0c99dda4 --- /dev/null +++ b/docs/.vuepress/dist/sent-email/plugin-settings.html @@ -0,0 +1,74 @@ + + + + + + Settings | Sprout Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Settings

Settings can be managed in the Control Panel Sprout Sent Email → Settings or via a config file in config/sprout-sent-email.php

<?php
+
+return [
+    // The name to display in the control panel in place of the plugin name
+    'pluginNameOverride' => 'Sprout Sent Email',
+
+    // Enable Sent Email tracking
+    'enableSentEmails' => false,
+
+    // The total number of Sent Emails that will be stored
+    // in the database per-site
+    'sentEmailsLimit' => 5000,
+
+    // The probability that the Sent Emails cleanup task will run
+    // each time a Sent Email is tracked
+    'cleanupProbability' => 1000
+];
+
+ + + diff --git a/docs/.vuepress/dist/seo/installing-and-updating-craft-3.html b/docs/.vuepress/dist/seo/installing-and-updating-craft-3.html new file mode 100644 index 00000000..6b9b8102 --- /dev/null +++ b/docs/.vuepress/dist/seo/installing-and-updating-craft-3.html @@ -0,0 +1,86 @@ + + + + + + Craft 3 | Sprout Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Craft 3

Sprout SEO installation and update instructions for Craft 3.

# Requirements

  • Craft CMS 3.0.0 or a more recent version of Craft

# Installation via Plugin Store

  1. Find the plugin in the Plugin Store in your Craft Control Panel
  2. Go to Settings → Plugins and select “Install”

# Installation via Composer

  1. Open your terminal and go to your Craft project:
    cd /path/to/project
  2. Then tell Composer to load the plugin:
    composer require barrelstrength/sprout-seo
  3. In the Control Panel, go to Settings → Plugins and select “Install”

# Upgrading to Sprout SEO 4

Upgrading to Sprout SEO 4 requires upgrading to Craft 3.

BEFORE YOU UPDATE

Make sure you have updated to the latest version of Sprout SEO 3.x before updating to Sprout SEO 4.x for Craft 3. The update from Sprout SEO 2 to 3 on Craft 2 was a larger update than the update from Sprout SEO 3 to 4 when migrating from Craft 2 to Craft 3. See the Sprout SEO 3 upgrade documentation for more details.

# Breaking changes

Sections

Sprout SEO 4 removes Section Metadata as it was largely not necessary and can be easily created within an existing site architecture using Singles, Channels, and the provided Metadata field. Any Section Metadata will need to be manually moved to an appropriate section and Element Metadata field.

# Upgrading to Sprout SEO 4.4

Sprout SEO 4.4 updates how metadata is normalized and processed. For most users, these changes will not be noticed as metadata is generated and output in the same way. For users with custom implementations, please read below.

# Breaking changes

Metadata Model

Retrieving metadata from the Metadata model is no longer done directly on the model. Metadata is now stored in Meta Type classes on the Metadata Model's $metaTypes attribute. Values on the model represent the raw data necessary to calculate the final values. The raw data can be retrieved by calling the getRawData() method. The calculated values can be retrieved by calling the getMetaTagData() method.

$metadata = new barrelstrength\sproutseo\models\Metadata();
+
+// Get all the static values stored that will be used to calculate the final metadata
+$metadata->getRawData()
+
+// Get a multi-dimensional array metadata by Meta Type with key value arrays of all calculated metadata
+$metadata->getMetaTagData()
+

Previously you could access meta attributes directly on the model. Using the updated Metadata model you will need to retrieve the calculated value by getting the metadata by type and calling the getter for the value you want to retrieve. See all Meta Types in the sprout-seo/src/meta folder of the plugin.

# OLD
+$prioritizedMetadataModel->title
+
+# NEW
+$searchMetaType = $prioritizedMetadataModel->getMetaTypes('search');
+$searchMetaType->getTitle();
+

Custom Schema

Several values in Custom Schema are often determined by grabbing those metadata values from the Globals or Metadata models. As the Globals and Metadata models have changed, you will want to revisit any Custom Schema and ensure your data is being retrieved and processed properly.

Optimized metadata values should now be retrieved using their getters:

$metadata = $this->prioritizedMetadataModel;
+
+# OLD
+$title = $metadata->optimizedTitle;
+$description = $metadata->optimizedDescription;
+$image = $metadata->optimizedImage;
+$keywords = $metadata->optimizedKeywords;
+
+# NEW
+$title = $metadata->getOptimizedTitle();
+$description = $metadata->getOptimizedDescription();
+$image = $metadata->getOptimizedImage();
+$keywords = $metadata->getOptimizedKeywords();
+

Previously image IDs were stored as arrays. They are now stored as the image ID as a string.

$schema = $this->globals['identity'];
+
+# OLD
+$imageId = $schema['image'][0] ?? null;
+
+# NEW
+$imageId = $schema['image'] ?? null;
+

Globals meta column

The sproutseo_globals.meta column has been removed and Global Metadata is now calculated at the time it is needed. If you referenced the Globals::$meta column in any custom implementations, you can now just call the getter for the metadata you want from the final Metadata model.

# Upgrading to SEO 5.0.0 - UNRELEASED

Sprout SEO 5 is a major release the includes an update to the underlying architecture. The Sprout SEO user experience will remain familiar but several conventions have changed. Most notably, the core codebase for barrelstrength/sprout-seo has been moved to the barrelstrength/sprout-base package so any custom code, translations, or direct links to the Sprout SEO Control Panel will need to be updated to target the new naming conventions. Plugin-specific Control Panel settings have also moved to the Craft settings area.

Feature Old Name New Name
CP URL admin/sprout-seo admin/sprout/seo
Template Variables craft.sproutSeo sprout.seo
Translation Category sprout-seo sprout
Controller Namespace barrelstrength/sproutseo/controllers barrelstrength/sproutbase/app/seo/controllers
Service Namespace barrelstrength/sproutseo/services barrelstrength/sproutbase/app/seo/services
Optimize Service SproutSeo::$app->optimize SproutBase::$app->optimizeMetadata
Optimize Service SproutSeo::$app->schema SproutBase::$app->schemaMetadata
+ + + diff --git a/docs/.vuepress/dist/sitemaps/custom-pages.html b/docs/.vuepress/dist/sitemaps/custom-pages.html new file mode 100644 index 00000000..a4e93e41 --- /dev/null +++ b/docs/.vuepress/dist/sitemaps/custom-pages.html @@ -0,0 +1,62 @@ + + + + + + Custom Sections | Sprout Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Custom Sections

Custom Sections allow you to add arbitrary page URLs to your XML Sitemap and manage metadata for pages that may not be otherwise supported using the URL-Enabled Sections or Element Metadata field.

DANGER

Custom Sections have been deprecated in Sprout SEO 4.

We strongly recommend using the Element Metadata Field instead. The same functionality can be achieved with the right configuration and upgrading to the latest version of Sprout SEO will be easier if you do. Custom Pages are now handled entirely in the Sitemaps section.

Consider a User Profile section where all User data is managed in the Users section, however no specific page exists for the listing page of all the User Profiles on the front-end. In this case, you may want to create a Custom Section for your User Profile listing page.

Custom Sections probably only need to be used for more advanced situations. Managing metadata and XML sitemaps via the default URL-Enabled Settings will likely require less overhead to get setup and be easier for the average user to understand.

Custom Sections can be enabled in Sprout SEO's Advanced settings and will require additional, manual updates to your template to add to the metadata cascade.

To indicate that you want a specific Custom Section added to the metadata processed in a template, use the Sprout SEO meta tag and set the section attribute to the handle of your Custom Section. All custom section handles should be prefixed with sproutseo_section:

{% do sprout.seo.meta({
+  section: 'sproutseo_section:customSectionHandle'
+}) %}
+

By default, the value you use in the Custom Sections URL setting will be used for the URL. This URL is not monitored in any way dynamically, only output in your metadata when you specifically tell it to be output with the code above.

As you can only define one URL in a Custom Section, if you plans to use the Custom Section as fallback metadata in more than one template, you can further customize your meta override tag to output a unique URL on each page where the override exists:

{% do sprout.seo.meta({
+  section: 'sproutseo_section:customSectionHandle',
+  canonical: craft.request.url,
+  ogUrl: craft.request.url,
+  twitterUrl: craft.request.url
+}) %}
+
+ + + diff --git a/docs/.vuepress/dist/sitemaps/custom-url-enabled-sections.html b/docs/.vuepress/dist/sitemaps/custom-url-enabled-sections.html new file mode 100644 index 00000000..f57d91f1 --- /dev/null +++ b/docs/.vuepress/dist/sitemaps/custom-url-enabled-sections.html @@ -0,0 +1,57 @@ + + + + + + URL-Enabled Sections | Sprout Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

URL-Enabled Sections

Sprout SEO does not just help you manage extensive metadata for Entries. It can also help you manage metadata for all URL-Enabled Element Types. This includes:

  • Entries
  • Categories
  • Craft Commerce Products

Support can be added for additional Element Types using the URL-Enabled Section Type API.

URL-Enabled Section Types are an advanced and powerful integration that helps us standardize differences across Element Types, so Sprout SEO can treat all of your Elements like you do – as content. This enables users to easily manage metadata in the same way across all element types and easily add any URL-Enabled content to an XML sitemap.

You can create your own URL-Enabled Section Type by:

  1. Extending UrlEnabledSectionType with your Custom URL-Enabled Section Type
  2. Register your Custom URL-Enabled Section Type using the registerSproutSeoUrlEnabledSectionTypes() hook

The best place to get started with building your own URL Enabled Section Type is by looking at the existing integrations withing Sprout SEO (sproutseo/integrations/sproutseo/sectiontypes)

+ + + diff --git a/docs/.vuepress/dist/sitemaps/index.html b/docs/.vuepress/dist/sitemaps/index.html new file mode 100644 index 00000000..8e398cd6 --- /dev/null +++ b/docs/.vuepress/dist/sitemaps/index.html @@ -0,0 +1,61 @@ + + + + + + About Sprout Sitemaps | Sprout Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

About Sprout Sitemaps

Sprout Sitemaps gives you fine-grained control over your XML Sitemaps for standalone, multi-lingual, and multi-regional sites. Sitemaps are managed directly within Craft (no template updates required).

Sitemap Management

+ + + diff --git a/docs/.vuepress/dist/sitemaps/plugin-settings.html b/docs/.vuepress/dist/sitemaps/plugin-settings.html new file mode 100644 index 00000000..081a95c3 --- /dev/null +++ b/docs/.vuepress/dist/sitemaps/plugin-settings.html @@ -0,0 +1,80 @@ + + + + + + Settings | Sprout Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Settings

Settings can be managed in the Control Panel Sprout Sitemaps → Settings or via a config file in config/sprout-sitemaps.php

<?php
+
+return [
+    // The name to display in the control panel in place of the plugin name
+    'pluginNameOverride' => 'Sprout Sitemaps',
+
+    // Output a dynamic XML sitemap of all pages in your URL-Enabled Sections.
+    'enableDynamicSitemaps' => true,
+
+    // The number of items that display on each page of your sitemap.
+    'totalElementsPerSitemap' => 500,
+
+    // Generate a single, multilingual sitemap.xml file for each Site Group.
+    'enableMultilingualSitemaps' => false,
+
+    // Add a section on the Sitemaps tab to manage Custom Pages that exist
+    // outside of any URL-Enabled Sections.
+    'enableCustomSections' => false
+];
+
+ + + diff --git a/docs/.vuepress/dist/sitemaps/sitemaps.html b/docs/.vuepress/dist/sitemaps/sitemaps.html new file mode 100644 index 00000000..0a792f85 --- /dev/null +++ b/docs/.vuepress/dist/sitemaps/sitemaps.html @@ -0,0 +1,120 @@ + + + + + + Sitemaps | Sprout Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Sitemaps

Generate sitemaps for all of your URL-enabled content for one or more languages.

Sitemaps currently support the following types of content:

  1. Entries
  2. Categories
  3. Craft Commerce Products
  4. Custom Page URLs

TIP

Plugins can add XML Sitemap support for Custom Elements. See the developer documentation for URL-Enabled Sections.

# Section Settings

All of your URL-enabled content types will appear on the Sitemap Settings page with the following settings:

Setting Description
Enabled Enable it or disable it in your sitemap
Priority Update the Priority of the items in the Section relative to the other items in your Sitemap
Change Frequency Update the Change Frequency of the items in the Section relative to other items in your Sitemap

# Sitemap XML

Your sitemap will consist of two or more XML Sitemap files. This will include a Sitemap Index file that lists all relevant sitemaps for your website and individual XML Sitemap files for each respective section. Individual Sitemap files will be broken into multiple files when the number of entries is more than the Total Elements Per Sitemap setting value.

# Sitemap Index

Your Sitemap Index will be output when you visit the URL: /sitemap.xml

<?xml version="1.0" encoding="UTF-8"?>
+<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
+    <sitemap>
+        <loc>{{ siteUrl }}sitemap-singles.xml</loc>
+        <lastmod>{{ now|date('Y-m-d') }}</lastmod>
+    </sitemap>
+    <sitemap>
+        <loc>{{ siteUrl }}sitemap-G76D5Oizt4fH-1.xml</loc>
+        <lastmod>{{ now|date('Y-m-d') }}</lastmod>
+    </sitemap>
+    <sitemap>
+        <loc>{{ siteUrl }}sitemap-9O2U0q1gdvPM-1.xml</loc>
+        <lastmod>{{ now|date('Y-m-d') }}</lastmod>
+    </sitemap>
+    <sitemap>
+        <loc>{{ siteUrl }}sitemap-1TGQYAvdWwEU-1.xml</loc>
+        <lastmod>{{ now|date('Y-m-d') }}</lastmod>
+    </sitemap>
+    <sitemap>
+        <loc>{{ siteUrl }}sitemap-custom-pages.xml</loc>
+        <lastmod>{{ now|date('Y-m-d') }}</lastmod>
+    </sitemap>
+</sitemapindex>
+

Note

Individual XML Sitemap URLs will use a unique string of characters to hide the internal naming convention of your Craft content architecture. When devMode is enabled, a query string will be appended to Sitemap URLs so that you can more easily confirm what sections are appearing in the sitemap.

# Section-specific Sitemaps (Single Language)

Each individual sitemap will list the URLs for the content in your URL-Enabled Sections.

<?xml version="1.0" encoding="UTF-8"?>
+<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml">
+    <url>
+        <loc>http://website.com/example-url</loc>
+        <lastmod>2017-08-08T03:08:03Z</lastmod>
+        <changefreq>weekly</changefreq>
+        <priority>0.5</priority>   
+    </url>
+        <url>
+        <loc>http://website.com/example-url2</loc>
+        <lastmod>2017-08-08T03:08:03Z</lastmod>
+        <changefreq>weekly</changefreq>
+        <priority>0.5</priority>   
+    </url>
+</urlset>
+

# Section-specific Sitemaps (Multi-language)

If you have a multi-language site, your sitemap will adjust to reference URLs for all related content across languages.

<?xml version="1.0" encoding="UTF-8"?>
+<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml">
+    <url>
+        <loc>http://website.com/example-url</loc>
+        <lastmod>2017-08-08T03:08:03Z</lastmod>
+        <changefreq>weekly</changefreq>
+        <priority>0.5</priority>
+        <xhtml:link rel="alternate" hreflang="en_us" href="http://website.com/example-url" />
+        <xhtml:link rel="alternate" hreflang="de" href="http://website.com/de/example-url" />
+        <xhtml:link rel="alternate" hreflang="es" href="http://website.com/es/example-url" />     
+    </url>
+        <url>
+        <loc>http://website.com/example-url2</loc>
+        <lastmod>2017-08-08T03:08:03Z</lastmod>
+        <changefreq>weekly</changefreq>
+        <priority>0.5</priority>
+        <xhtml:link rel="alternate" hreflang="en_us" href="http://website.com/example-url2" />
+        <xhtml:link rel="alternate" hreflang="de" href="http://website.com/de/example-url2" />
+        <xhtml:link rel="alternate" hreflang="es" href="http://website.com/es/example-url2" />     
+    </url>
+</urlset>
+

# Custom Pages

If you have more advanced Sitemap needs, Sprout SEO's Sitemap tool allows you to add any number of Custom Pages that will also be output in your Sitemap. Custom Pages can be managed in Multi-Site sitemaps on a per-site basis.

Enable Custom Pages management features in the Plugin Settings.

+ + + diff --git a/docs/.vuepress/dist/support/road-map.html b/docs/.vuepress/dist/support/road-map.html new file mode 100644 index 00000000..04f21ce3 --- /dev/null +++ b/docs/.vuepress/dist/support/road-map.html @@ -0,0 +1,61 @@ + + + + + + Road Map | Sprout Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Road Map

The Sprout Plugins are in the process of being updated for Craft 4 and integrating many of the new features that Craft 4 makes available to custom Elements. We are taking the opportunity during this major release to simplify our codebase, migration process, and our non-core plugins.

We unfortunately can't provide any release dates, estimates, or guesses until we are ready to release and any comments we make to this end may be subject to change but have ordered the plugins below in the order we expect them to be released.

Please subscribe to the linked Craft 4 support issue below for any plugins that you wish to receive an update on once we release. If you have a time-sensitive need, you may have to roll your own update for now. We imagine this uncertainty will be frustrating to some, and hope the wait will be worth it for those who are able.

# Sprout Marketing Suite

Plugin Upgrade Status Follow for Updates
Sprout Data Studio Released Docs
Sprout Redirects Released Docs
Sprout Email In progress Github Issue (opens new window)
Sprout Forms In progress Github Issue (opens new window)
Sprout Sitemaps In progress Github Issue (opens new window)
Sprout SEO In progress Github Issue (opens new window)

If you do not see a plugin listed here, we probably have no plans to migrate it to Craft 4. Check the Github repository for the plugin you are curious about for more details.

Last Updated: 2/19/2023, 10:46:19 PM
+ + + diff --git a/docs/.vuepress/dist/updates/4.44.444.html b/docs/.vuepress/dist/updates/4.44.444.html new file mode 100644 index 00000000..e188f5db --- /dev/null +++ b/docs/.vuepress/dist/updates/4.44.444.html @@ -0,0 +1,53 @@ + + + + + + Upgrading to v4.44.444 | Sprout Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Upgrading to v4.44.444

Sprout 4.44.444 provides a familiar author experience, introduces a simplified plugin architecture with the Sprout Framework module, and removes the need for a number of dependencies that were causing several permission and migration issues on Craft 3 websites. Designers and developers will want to read through these upgrade notes carefully - several things have changed.

# Prepare to upgrade

  1. Review all upgrade guides for Craft and Sprout to prepare for your upgrade
  2. Review the 'Breaking Changes' section of the Sprout Module changelogs
  3. Confirm that all of the Sprout plugins that you want to upgrade are available on Craft 4. See the Road Map.
  4. Confirm that you have a migration path for any plugins that will not be available on Craft 4. See the Road Map.

# Upgrade

  1. Update to the latest version of Craft 3
  2. Update all installed Sprout plugins to the most recent version on Craft 3
  3. Upgrade to Craft 4 (This step will trigger Sprout migrations for plugins with the same name)
  4. Install any Sprout plugins with new names to trigger their respective migrations

# Breaking Changes

# All Sprout modules

  • See the Sprout Framework Core Changelog for a full list of changes
  • All Twig variables now use the sprout variable
  • All Default templates sets can now be included from the site template root _sprout
  • All Example templates can now be included from the site template root _sprout/examples
  • All plugin settings are now managed in their respective modules
  • Plugins no longer support an Alternate Name setting
  • Any references to Sprout Project Config settings keys will need to be updated
  • All custom APIs have new routes and namespaces

# Reports => Data Studio

WARNING

Due to this plugins name change (Reports => Data Studio) you will need to manually install it after upgrading to Craft 4 to trigger its migrations. If you have any Report-related dashboard widgets you may see an error when you first login to your Craft 4 control panel. Navigate directly to the plugins page /admin/settings/plugins to install the plugin.

  • See the Sprout Data Studio Changelog for a full list of changes
  • Sprout Reports has been renamed to Sprout Data Studio
  • Sprout Data Studio now has a Lite and Pro Edition
  • Existing Sprout Reports license holders will be upgraded to a Sprout Data Studio Pro license
  • Updated variable craft.sproutReports => sprout.twigDataSet
  • Twig Template Data Sources that use a Craft DateTime picker in their templates will need to update the date syntax to use Twig the date function
  • Twig Template Data Sources should update {%- includejs %} => {%- js %}
  • Any references to the Project Config settings key should be updated sprout-reports => sprout-module-data-studio
  • Custom DataSources should use BarrelStrength\Sprout\datastudio\datasources\DataSource (See vendor/barrelstrength/sprout/src/datastudio/components/datasources for examples)
  • Access Data Source permissions have been removed in favor of Craft User permissions. Confirm any permissions that were previously assigned to Data Sources are now assigned to the User Groups appropriately.
  • Date Sources used as email lists will need to be migrated manually to Audience Types (once the email module is released)

# Redirects

  • Lite Edition now allows managing unlimited Redirects
  • Global Excluded URLs (available in the Lite edition) can now be managed in Project Config
  • Site-specific Excluded URLs and are now a Pro feature
  • Exclude URL Element Actions are now a Pro feature
  • Status Update Element Actions are now a Pro feature
Last Updated: 2/19/2023, 10:46:19 PM
+ + +