From d4d021e09385be83410351a4cc6ccff612497cb9 Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Mon, 7 Oct 2024 13:51:28 +0200 Subject: [PATCH 01/18] Release notes and additional documentation for Forms 13.3 and 14.1. --- .../developer/configuration/README.md | 38 +++++++++- 13/umbraco-forms/developer/themes.md | 71 ++++++++++++++++++ .../editor/creating-a-form/form-settings.md | 18 +++++ .../images/multi-page-forms.png | Bin 0 -> 26003 bytes 13/umbraco-forms/release-notes.md | 10 +++ 14/umbraco-forms/SUMMARY.md | 1 + .../developer/configuration/README.md | 38 +++++++++- .../developer/images/form-picker-config.png | Bin 0 -> 28752 bytes .../developer/images/form-pickers.png | Bin 0 -> 4564 bytes .../developer/property-editors.md | 39 ++++++++++ 14/umbraco-forms/developer/themes.md | 71 ++++++++++++++++++ .../editor/creating-a-form/form-settings.md | 18 +++++ 14/umbraco-forms/release-notes.md | 16 ++++ 15/umbraco-forms/SUMMARY.md | 1 + .../developer/configuration/README.md | 36 ++++++++- .../developer/property-editors.md | 39 ++++++++++ 15/umbraco-forms/developer/themes.md | 71 ++++++++++++++++++ .../editor/creating-a-form/form-settings.md | 18 +++++ 18 files changed, 479 insertions(+), 6 deletions(-) create mode 100644 13/umbraco-forms/editor/creating-a-form/images/multi-page-forms.png create mode 100644 14/umbraco-forms/developer/images/form-picker-config.png create mode 100644 14/umbraco-forms/developer/images/form-pickers.png create mode 100644 14/umbraco-forms/developer/property-editors.md create mode 100644 15/umbraco-forms/developer/property-editors.md diff --git a/13/umbraco-forms/developer/configuration/README.md b/13/umbraco-forms/developer/configuration/README.md index ff3afc71e46..f202261ceec 100644 --- a/13/umbraco-forms/developer/configuration/README.md +++ b/13/umbraco-forms/developer/configuration/README.md @@ -57,7 +57,12 @@ For illustration purposes, the following structure represents the full set of op "AutocompleteAttribute": "", "DaysToRetainSubmittedRecordsFor": 0, "DaysToRetainApprovedRecordsFor": 0, - "DaysToRetainRejectedRecordsFor": 0 + "DaysToRetainRejectedRecordsFor": 0, + "ShowPagingOnMultiPageForms": "None", + "PagingDetailsFormat": "Page {0} of {1}", + "PageCaptionFormat": "Page {0}", + "ShowSummaryPageOnMultiPageForms": false, + "SummaryLabel": "Summary of Entry" }, "RemoveProvidedEmailTemplate": false, "RemoveProvidedFormTemplates": false, @@ -88,7 +93,8 @@ For illustration purposes, the following structure represents the full set of op "UseSemanticFieldsetRendering": false, "DisableClientSideValidationDependencyCheck": false, "DisableRelationTracking": false, - "TrackRenderedFormsStorageMethod": "TempData" + "TrackRenderedFormsStorageMethod": "TempData", + "EnableMultiPageFormSettings": false }, "Security": { "DisallowedFileUploadExtensions": "config,exe,dll,asp,aspx", @@ -305,6 +311,26 @@ Applies as per `DaysToRetainSubmittedRecordsFor` but for records in the 'approve Applies as per `DaysToRetainSubmittedRecordsFor` but for records in the 'rejected' state. +### ShowPagingOnMultiPageForms + +Defines whether and where paging details are displayed for new multi-page forms. + +### PagingDetailsFormat + +Defines the paging details format for new multi-page forms. + +### PageCaptionFormat + +Defines the page caption format for new multi-page forms. + +### ShowSummaryPageOnMultiPageForms + +Defines whether summary pages are on by default for new multi-page forms. + +### SummaryLabel + +Defines the default summary label for new multi-page forms. + ## Package options configuration ### IgnoreWorkFlowsOnEdit @@ -420,6 +446,14 @@ To switch to this storage mechanism change the value of this setting from the de We expect `HttpContextItems` to be the default option from Forms 14 onwards. +## EnableMultiPageFormSettings + +This setting determines whether [multi-page form settings](../../editor/creating-a-form/form-settings.md#multi-page-forms) are available to editors. + +By default the value is `false`. This ensures that, in an upgrade scenario, before the feature is used the necessary styling and/or theme updates can be prepared. + +To make the feature available to editors set the value to `true`. + ## Security configuration ### DisallowedFileUploadExtensions diff --git a/13/umbraco-forms/developer/themes.md b/13/umbraco-forms/developer/themes.md index 6f4caf62e8f..7eb845f06e5 100644 --- a/13/umbraco-forms/developer/themes.md +++ b/13/umbraco-forms/developer/themes.md @@ -41,6 +41,77 @@ Umbraco Forms conditional JavaScript logic depends on some CSS classes currently If adding or amending client-side scripts, you need to copy the `Script.cshtml` file from the `default` themes folder. In your copy, amend the `.js` references to reference your own script files. +### Shipping Themes in a Razor Class Library + +Umbraco Forms provides it's built-in themes as part of a Razor Class Library for ease of distribution. This can be useful for custom themes, particularly those used in multiple solutions or released as an Umbraco package. + +From Forms 13.3 it's possible to do this for custom themes. + +Firstly you'll create a new Razor Class Library project to hold the theme. You then create the necessary partial views for your theme as usual within `Views\Partials\Forms\Themes\`. + +You then need to provide the names of the files in your theme via an implementation of `ITheme`. For example, if just overriding a single file, your class would look like this: + +```csharp +using Umbraco.Forms.Core.Interfaces; + +public class MyCustomTheme : ITheme +{ + private const string FilePathFormat = "{0}/{1}/{2}.cshtml"; + + public virtual string Name => "my-custom-theme"; + + public virtual IEnumerable Files => + [ + string.Format(FilePathFormat, Core.Constants.System.ThemesPath, Name, "FieldTypes/FieldType.Textfield"), + ]; +} +``` + +In your project that consumes the theme, you register the ones you want to use via a composer: + +```csharp +public class MyComposer : IComposer +{ + public void Compose(IUmbracoBuilder builder) + { + builder.Themes() + .Add(); + } +} +``` + +With that in place your theme will be picked up for selection in the theme picker. And the partial view files included will be used when rendering forms. + +#### Email Templates + +Email templates provided for the send email workflow can be provided in a Razor Class Library in a similar way. + +The partial view will be created in `Views\Partials\Forms\Emails`. + +It's made available via an implementation of `IEmailTemplate`: + +```csharp +using Umbraco.Forms.Core.Interfaces; + +public class MyCustomEmailTemplate : IEmailTemplate +{ + public virtual string FileName => "My-Custom-Email-Template.cshtml"; +} +``` + +And registered with: + +```csharp +public class MyComposer : IComposer +{ + public void Compose(IUmbracoBuilder builder) + { + builder.EmailTemplates() + .Add(); + } +} +``` + ## Using a Theme To use a theme with a Form use the "Insert Form" macro where you will be presented with the options of the form you wish to insert along with an option to pick a theme. This displays the list of theme folders found at `Views/Partials/Forms/Themes`. diff --git a/13/umbraco-forms/editor/creating-a-form/form-settings.md b/13/umbraco-forms/editor/creating-a-form/form-settings.md index 912820fcda1..11b62c35322 100644 --- a/13/umbraco-forms/editor/creating-a-form/form-settings.md +++ b/13/umbraco-forms/editor/creating-a-form/form-settings.md @@ -57,6 +57,24 @@ The autocomplete setting for the overall form can be changed from the default of

Form Settings Autocomplete

+### Multi-page forms + +The settings available in this section allow you to customize how multi-page forms are presented to site visitors. + +

Multi-Page Form Settings

+ +| Option | Description | +| -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **Paging display** | Select whether paging information is displayed at the top and/or bottom of the form. | +| **Paging display format** | Provide a format string for the paging details. By default `Page {0} of {1}` is used which will be replaced as, for example, `Page 1 of 4`. | +| **Page caption format** | Provide a format string for rendering the page captions. By default `Page {0}` is used which will be replaced as, for example, `Page 1`. If a caption for the page has been provided, it will be used instead. | +| **Show summary page** | Select whether a summary page is displayed at the end of multi-page forms, where a user can review their entry before submitting. | +| **Summary heading** | Provide the heading for the summary page. | + +{% hint style="info" %} +These options will only be available if [the feature is configured for display](../../developer/configuration/README.md#enablemultipageformsettings). +{% endhint %} + ### Moderation Enabling this feature allows the moderator to manage the approval status of a form. This can be used in a number of scenarios. For example, if the form submission will be publicly shown, you can control which are published. diff --git a/13/umbraco-forms/editor/creating-a-form/images/multi-page-forms.png b/13/umbraco-forms/editor/creating-a-form/images/multi-page-forms.png new file mode 100644 index 0000000000000000000000000000000000000000..83c3a49d10cb30a45abeac5308571dd14391d750 GIT binary patch literal 26003 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 U3xc!Yhg2@8D{I5cZ{Lsl7lH6n$p8QV literal 0 HcmV?d00001 diff --git a/13/umbraco-forms/release-notes.md b/13/umbraco-forms/release-notes.md index 967ea98aaea..0be8c94afd9 100644 --- a/13/umbraco-forms/release-notes.md +++ b/13/umbraco-forms/release-notes.md @@ -17,6 +17,16 @@ If you are upgrading to a new major version, you can find information about the This section contains the release notes for Umbraco Forms 13 including all changes for this version. +#### [**13.3.0-rc1**](https://github.com/umbraco/Umbraco.Forms.Issues/issues?q=is%3Aissue+is%3Aclosed+label%3Arelease%2F13.3.0) **TBC** + +The 13.3 release of Forms contains features that can improve the user experience of completing multi-page forms. + +We've added the option for [editors to choose to display paging details on the forms](./editor/creating-a-form/form-settings.md#multi-page-forms)). This will allow those completing forms to get a better understanding of progress as well as see details of the pages still to complete. [#281](https://github.com/umbraco/Umbraco.Forms.Issues/issues/281) [#648](https://github.com/umbraco/Umbraco.Forms.Issues/issues/648). + +These can be options are enabled and configured on a per-form basis by editors in the form settings section. We also provide a [configuration based toggle for the feature as a whole](./developer/configuration/README.md#enablemultipageformsettings). In this way editors can be given access to use the feature only once the styling or theme is prepared. + +Forms for several versions now has shipped it's themes and email templates as part of a razor class library for ease of distribution. With this release we make that feature [available to your own custom themes and templates](./developer/themes.md#shipping-themes-in-a-razor-class-library) (or those created by package developers) [#795](https://github.com/umbraco/Umbraco.Forms.Issues/issues/795). + #### [**13.2.5**](https://github.com/umbraco/Umbraco.Forms.Issues/issues?q=is%3Aissue+is%3Aclosed+label%3Arelease%2F13.2.5) **(October 3rd 2024)** * Handled "chunked" authentication cookie in protection of file uploads saved in the media file system [#11](https://github.com/umbraco/Umbraco.Forms.Issues/issues/11#issuecomment-2376788751). diff --git a/14/umbraco-forms/SUMMARY.md b/14/umbraco-forms/SUMMARY.md index 0667960b549..ec400c6ca2f 100644 --- a/14/umbraco-forms/SUMMARY.md +++ b/14/umbraco-forms/SUMMARY.md @@ -34,6 +34,7 @@ ## Developer +* [Property Editors](developer/property-editors.md) * [Preparing Your Frontend](developer/prepping-frontend.md) * [Rendering Forms](developer/rendering-forms.md) * [Rendering Forms Scripts](developer/rendering-scripts.md) diff --git a/14/umbraco-forms/developer/configuration/README.md b/14/umbraco-forms/developer/configuration/README.md index 643a99d8315..6c56ce1183f 100644 --- a/14/umbraco-forms/developer/configuration/README.md +++ b/14/umbraco-forms/developer/configuration/README.md @@ -57,7 +57,12 @@ For illustration purposes, the following structure represents the full set of op "AutocompleteAttribute": "", "DaysToRetainSubmittedRecordsFor": 0, "DaysToRetainApprovedRecordsFor": 0, - "DaysToRetainRejectedRecordsFor": 0 + "DaysToRetainRejectedRecordsFor": 0, + "ShowPagingOnMultiPageForms": "None", + "PagingDetailsFormat": "Page {0} of {1}", + "PageCaptionFormat": "Page {0}", + "ShowSummaryPageOnMultiPageForms": false, + "SummaryLabel": "Summary of Entry" }, "RemoveProvidedEmailTemplate": false, "RemoveProvidedFormTemplates": false, @@ -88,7 +93,8 @@ For illustration purposes, the following structure represents the full set of op "UseSemanticFieldsetRendering": false, "DisableClientSideValidationDependencyCheck": false, "DisableRelationTracking": false, - "TrackRenderedFormsStorageMethod": "HttpContextItems" + "TrackRenderedFormsStorageMethod": "HttpContextItems", + "EnableMultiPageFormSettings": false }, "Security": { "DisallowedFileUploadExtensions": "config,exe,dll,asp,aspx", @@ -305,6 +311,26 @@ Applies as per `DaysToRetainSubmittedRecordsFor` but for records in the 'approve Applies as per `DaysToRetainSubmittedRecordsFor` but for records in the 'rejected' state. +### ShowPagingOnMultiPageForms + +Defines whether and where paging details are displayed for new multi-page forms. + +### PagingDetailsFormat + +Defines the paging details format for new multi-page forms. + +### PageCaptionFormat + +Defines the page caption format for new multi-page forms. + +### ShowSummaryPageOnMultiPageForms + +Defines whether summary pages are on by default for new multi-page forms. + +### SummaryLabel + +Defines the default summary label for new multi-page forms. + ## Package options configuration ### IgnoreWorkFlowsOnEdit @@ -417,6 +443,14 @@ By default, `HttpContext.Items` is used as the storage mechanism for this tracki You can optionally revert to the legacy behavior of using `TempData` by changing this setting from the default of `HttpContextItems` to `TempData`. +## EnableMultiPageFormSettings + +This setting determines whether [multi-page form settings](../../editor/creating-a-form/form-settings.md#multi-page-forms) are available to editors. + +By default the value is `false`. This ensures that, in an upgrade scenario, before the feature is used the necessary styling and/or theme updates can be prepared. + +To make the feature available to editors set the value to `true`. + ## Security configuration ### DisallowedFileUploadExtensions diff --git a/14/umbraco-forms/developer/images/form-picker-config.png b/14/umbraco-forms/developer/images/form-picker-config.png new file mode 100644 index 0000000000000000000000000000000000000000..d7c600b894ee9333bde36232455dab07d11860a2 GIT binary patch literal 28752 zcmeFZX*^qN`v$6WRk3$f?NW54A9p zX=x2H#uP*-L68_S5RtR&_kYg$osVbwa(?FnOCoD!t!F*YeP8!=UH5wXz|4sMgy;z# z9v*(Qn^83eTZ(iH^=}&gO2I#28hB7)j{D zhu$4LbeIoy%j;swaVvR{jMw?&M&UPiIPYv5tuBOqkDL$w%SX8Ca^A~Qr^ZL0tu9m_ ze0YBHbC;{~FQ;EuUorg<80LL9DWzn-=R!0(M7y}R0^^RTXa1n&r1nj3a}NV2_Dv+l zZ+|2Ge|jT+2{M}dkaL9U4eUQ7ntBnE`|!6(vNCG{*RrDf)3!{VN*G439WV`;-RZy*-l zQ7*UX6%JlK!_xI$&!qVsgYv5rX#6}pFR5>Skl250r-sUsE5(`(>py8j42@(G(;rV; zTnTU68t`>O&GCe`Wt#i3i@chxFb{ptUjIo_;?-HzJO-y}gv8bJeb0 z5|o!|u9 z;^iX~i(rdNGCRnkgi<+_{Z6Q`WSZ_$8>OdX7ipZP z8)nyMer_cN@gs&BPxYU0ZfD+^daA#Jv`Np4GM09fe9Bm=z`>#lwWRKk&dt>Xy$&-a z^NLMbvvywSfXQFzdAw6%^&8dSaSV#@x#DXSL5jsUIhRI~h@e*!Y&1P*XC2DWzw^%g z@BQ-={Osr-wguJ+kLMqj8q*XMigWi}?|P8vF)l8}Q(`pgne{E_>20cuUEs88hX3^M zxaGwfA*38?rSOh<7RpSK)SO)GhgrmbX%3o&Y3fuY1p5zl(u3JJTCkF@VC~e0fC1G| zf@EZKWo-TaT6wAWIo{74nrC5W!?|^-Dg8Y7HtV&wchEI^p-30Kl0TPs7YD{;wwfpZ zf;N&Of{oSfvvk}X{U+i(4d_=K;7{gLerzdmG$juw$_M0fpSKc9rXn#*eUXpTX%&xB zvOn6LJOq4;{gd7}>YI1uDN$ds;&MzTZ8xp%=ZLM59-}E}lxWLR?MpgME-zUnJo!Ye zSRqypko+!+hpP}@<2R3n;P;HoR>S9lf#b~FyL$@TR|>H!+9qC=QYShc^y}D+xbGiq za^JbzY!>28BFKd`&c`~y5#R;+Ya(V|_)zwQqV47r6TeUU6Ca{=Dvp|Lz)b%Z4$~}| zLX_bQK3S?vet`vI?Y!^v2vA)V0$0>L%TyCNtal^{F! z>a7iIn@HC)zDsu2*WZBT%8qX8M^$J^L>TjB3m#4KcCL(gy4X%>?cX+k)M0;hVq0Xb z!^vWh07(bfg zfj8+}T9233R9RAJ4S2lEZvy-`Fwn-8wI7=+4gXKawf~ztaEWD>2i9l4zdj}?p&d$_ z`94R8s@ecz77r_CKXm>7oBta_PbWZH7%YA8GDw)a5ZX5XU$*D-s>~`Oop*2EykAzWvnE;?^F*K}iSdmzXtGZU%xi zqJDeRQ*;q#Za}h-4qO^EMu?6Z!z!~74r#ND&8&=3x*MqdQKZ|#e0^*fp|W|csUbdt z`O|H|q4wUTO0`b)fV5LV2~yXzMqP%Cs(lH*^G>m4FlmQx zI-q-80cBq>ja|!T{&=^QT3XS*6;@}FD&31Z6GKfopfQk*h#_hDP97!^Gz8dh)_OFK zf!Z4{!9U2j8aL?eFNN@H?aWU$N3;B4h@xW(OMl>he?nertjVB33$Hrr_`Q)?Z&<%2 zhtNivsK~0c@zNt&K873mX?uVOOHaWS^l)S-D8ntcEQ^x8p4gIul*}TNu#sDov^wd< z)rc*y>9Tt#12x6EMCKAsVUtcvXVgypBZ*DICWlWdT?yA@$NgeZG~K)vwI~m2SwX ze1v4qa0XLC1w0X89dL7>#Q%D;2##kJiiBIaZpISguIV^S+GR6 zi4`Ta>c{ZYhyz;IEVH^^arg8`=aOKxQ&GXj_N+?PxwzIuiP1U@Xau_hSw)Di?OI!< z9DYunXSAfX-Y|aMJhmAMv)rhWT7C_TH&3PS+jg{#^WZfmsbNOlI%F(-@z{vE>>%kn z>?)+$^-{IUtP!Yo{`}c+)Fi6WRZdM?)xq*UApnJlESJFS9o5POjdG_-IyVOCEIbm^l#fq?^K1$G#d;{C0lQg7lw-Y7R&SCoqE{dJZ+=qmMD<_Fh z>6(_+{bCeOhrb{Yc*$sgD<%hH%W$Ei09O~U3@+|vTwvEApy=zEf`F7;ot!9gytY?$qseO$yyIUKGuOB7>=sR9Bl$N&*0+XrLrFKCby0-q*o^R3-52$4IJtk&Sd|bt&%VuAY8{`5 z{9-GY$*ttFlDPg@0bpd(eVdk~=u1OJ!`m$ zwsx2Wkv+|B^F;F;i-As?M zPU5|?<7#^{w><>2N;#4D1wao8vS~gmUsS;@P$#@fPjp`CJa5+<{_uB$t<`CX1He$oDVy*m`L*;Sod&RM$JQ!SSc;#Mm74KLAs z3&-7-+?nQgxhOki#Qnoq_0a=IZ*y5WzKW#nfadkKhjNk}C})Q2^B|A(SqzI*yAb;8 zKf>Vgd>zKc-cn2d7rjv2;}An+z7d;DF`L0+oiJvSj!O_|`^;_5YT?&Op-Vrz6(43R9_kHA1-ym_eJ*3`ldBD@~GY!*~m|Ql%Ra96@ zdIcVSTH7jyb=SD1P5KnyZMNr9iyOx;tJ9-6u)Uuj=h>zSX~@@!Pj+K4R&@=QX4}1Z_{%Z$Pb(+=)8Z9uw?_4jt2>m3SwXik!}JV{l$c zuqll(L3rPB<99SLS?R}zscR-m+%uz{8k@JigFcM^j-eFrH$9%KjF#pj2AMrj3kaiT zpZXKZ!*g-}nkrmk{b~^`T@Hom+n+ANEru(YmG0Ja3%KAmhWPsyK9PcU=1-;YOT@}| zWUmoN!KGUB=>erM?y@~($w$wz(mj#^b;wn@g>AkWQzNMa3f4sU5w7Id=hbLo|Zy>~0I;dpeXV*|K1`?Dvq5lGs``+xc;k;qy1mjZG(g&}Zmt$vMS)_^|5AVx7fln!!oURnTePRT)`PL(3fg@wg ziHx-kJPFdHr?rp)6eDiAK@%UV3@f;SFQ6nW`$}MrY8Sdnj+SqST2_WlHI>rZP2|SZ zQa^eH+hjaWz3osh$i#B6avA-gUKhFgEw!FGara!Xo?U|Y(@sDQAgd47ap%i-)JgXiq#Rx(ug~O%w1pr zL`p*qz}tBt&fyK_9LGy)gMXsGA0|1xSLR}z_}WY(V*Lnx=d26wwKS76uiHrozaywY zY~+8BzR5edRy|+yl3dp{7a71C@Wmke45t3YosH;oO)a1v z{NjL3pFDX|PFSW;V5n9uhYI#(&%74A2qyRC`UTiIz}T{Vf_l4Ec(5aso;rkzV6Htv z!?Z$ho`hO=^DIJFcef?#$m_LyQxk%WjEn^erW2v+NidRxrqrx8S9;rMiVQ2pZx7ut)ypQMk^f?!7TP+&%Rgqj9Mk2k-cCxlbTcq-P(MF%f34i3=jw@ z;9Mx8m2f|F_hA<%O{D(JMXFp1=5+z z+L{)}CZw(?n?+sgNYYCx!a&vmQzI6=JACU;ZsWLn{mSZb3D zB6Gt0(2GeZTQI$pAD>Wty~?Gs3rEbIn^5I_=mnuYF?OH63zLvBw;u05MJoyF~^{3wBU6V z80WBmK?O|H?Y9>;7w8Mxg?c3$?@Q{pe{0j%8C1QQ3t;t$Q2WGhZl;vcD;6@t7|Lsz z8{ZjqyqvSK<@HZ%BJR&kE9Vv~Sb4h?wi57K&{BygLL@w(xu)|**!S}A*){EeoEyWk zeq{`C2juTYjp?xZO&v)s>_hqltSj9if0LA$i0Gf1s;&2MoP!6>x4jbGTfPt=vGTl$ zI+|{;WX9rX{#lKvc`VcucJ&0(LyKsFz5{z5QD3@S!N!&>lSQA}L@9t;7IlCXE}p77f^Rg$o%=H=oR;_`xfehpVRy!9TRv%$Wmnpy9tD>3;%`mnPKYNkn8 z@F6Fl9GuGgJynn-S6HJl{%JLMZAs{n8bf&U>o~^^zSRQtZGV=zqkXD=YD6z7^htbM zpZ?d&<;{%xYFT1%Mb25N|D58E;7L!ank?>2IN>KBS=%p0&u%T(bc6EL12hQEj8+A2Z zi7w>u+OSpuLyThxyddD4_$gcG|l1=;0 z-=mKxNoB_$3dkO#iT8K#I#|)%e9qo89e|oOpf4!wQ&CyfkuGfk!#L75sO5Bj=5q%X z)wOfD0Nhjcl!c#=tJSiB~h_OCx-*ix(?>?npi zCO;fW4l*Ufb&4G~BVjcJmo_wPvo|xBHrstzg*d!ygldgt7m)o;Eu zbwhcFNmZ?U*9p)cE(@OQ@dQRO%Ls=lxb!g zwV@rh8Mnh8yRZb7F=Y-a+Xw}h9j_Gib4G`m6yeQVPA!Nj-x~d)QK=Ke;CU^^>lit? zB{&Hw5y)uHrXjivcIMxV)?w83USL-!ofR?<2O4PbhSVALtS8&@yWb#F&wf!2StuI| z%ix1N-|%uzfi>@>@@I`~ZM%wB8(tgj;`J153C$IP_`EUggB4hme4Ow&4u9cY=9MkX zSfqh%ZUv-(oV?RkRWDf~Y7lJGVI?m$Pg}#p6YcfCigVwgQOz86QbZhz;Os>GV!xh! z-8FkWMJ24Xs7~kgh@P@4zr7!7lSx^OJ`SG?c2U{@#M#vVjsJ@qS z#HT!r*xk`A<(0-$u%NZz&le$LUl0Av)RD1VIuz&S@2JF$J|bhBmt=)Gu1wtrV5UJ)LTC6B5}``Oh|%LH9(1c1!CiyjQfO3}uPhEQ1u9?W zj|e40xOtpLq!M}hQtrkYYh&v1_ChqE!DwQ;k=tf9%PU!b0{n(QLo0=isV@%l&`cIr zG++sPgwuwlZpdJ$=m&>I9vW=OSH%8cLrufXsfIRDY=2IX(pJ_7?9M26+)gdMvzN>M zTW&1;9>3J{WA7yKg1MFbqx^+_Jiq_OzA6Vo!#Ck!|J#%f&h4{}O4cpp6da+ZH4bUb zA<3AEVed-9y!)@Usl7aN9&*Tr7hoCYv!|{*=(UtRAmEg*juSHyK-}*ZoB@Tgx z%7qNQ7e7X*6xvAgZ}*As>_&@>is3wogGPZS9aj??=0H;u&^(F9RpySdY#;TnA(E2i zc01GFs3a@m8grTHCoy^i`9`}cEYZ+iU<65RFlt>3h?lC+UGOc}g5z5`sga+cNrop? zIgE^Adc4Ae2m$*G`#P0;H;6N8zT?>u;aGNIyar8*p%PBiujcam(h#!vWWBSM2ExQ& z3zS;FzF~8!BLe<0#JyN^h^i1(xkT|Yee;DO*JRXK+qD(;%cNJuZ|PH=;xwfft42iH zFq)v_!v4(2a?s|_@|tB)94QCXyvJ4;6}a^ z%MMtedSh2E1A%pSg5aZ$Y~-5aAuer9^I|Wsz0@*NflSXAE2u{QnvXpO8>yk_*?s50Mw9Oo~uXFDvM=_+sIA? zq;=U^d!IjjA(gr zn#bmxtMoUOXg>K@vcH<~Gu)n>vix*A{>lNN*O3MDxsZZngR(ZX%_fupNrkTAopYxU z?tYxc1>d0VCqBJQb4f@+wbbsIsPOJ(M_GX}CvXRRM|(r*e4T5eP34Q~^&t8*<+ij{ z&AcV7WZ`fFKsEsUWqh21)yAMpSNCGMWN6g05@vrVeS`R!^9jbXNJa*gvd$)8Jzx5A z!YcP{kjJ*zsmH8E1b#D;SS?#`e7BjeM0YoR=*v1!_=0l+cOETz^uQkY_GT2B8nv7f z-fY@Pldul%dnNiJqB1;;W4M-o@SDwk!TtS6+RbC9b~Lx4O|7P%nzMNtZ2xC%0?Iol zlb`t2>A`ma?lrAaxWhcW@tw_~=wtV+*TIrEOKpXl;ip%AZ6hueI>DGhTE``>Dv|5= zG8<-d0fp>l=P08lInE11C)}t1J_~>Po|zuCg<&L~uhNq*{o)NmLxgiZ=D?|$TjbVv zVGh<+3&ZG$9P=~fdF*qkAv5p&W%fdA!`-w?bikP|cU2;s_3R;kV50(%UveEs(g3L# z0u~^C4=ILs{-J9^zk4sc6KH9k@`7`5k*T=sB{wPY7Qd$|-63STvjD z`MW&?K1xs&^6{QhzLyxCM~VvI5#PiYCrP za)nGU;3*Ynvf~RgDTEU~{fDWnHb2)umRS(UGG|i&m|h2X8g>A=LD*#H8itUtJdKa& z3DOU(a?a>*bM>OpzKW{ONYN#lt=O$EToU;yOR)wM*EKA4db~SYJ=<1(Ulcx>T`>P% za`5_Q=HAlTaOchE)-CE5`WrxUA&TK6HZ-jx$|GNntLugegM1& z%diUt1!p^pWrA5)^G&X{Q9(ej_h!woEJq$ux^erlL+XfjMv3mB7BE!WOTT_O6Z~3n68qs(-NI8|1Cp!cYr+FVh*kGRa-@uhwMDS(4ID6$9l@xm*o_43KZWi zobKc$A}fYwkG)Wy)UZ+W9NX1Nko`7&?&#Q!^X>v97Y~_0r`Y1D%(A_ObA;#YB!|3> zS~qiPh+gr$thCn~n59`<6Ir`x)iIQ#eAv4BKM?ITb`WP zEMv1O04PEm@Gyc?Kn{pSgG6tB91WEa2xAr`2tC#^)9FNvT+8~>3z42wH8Oa1RsSgn= zWm2!{SI$IB{lt`$6-Kq@dDcK(>*G|u+SI*aRTzKT%;9oj|3}7$CaSCLZy|N+T#9cT z1+aL@B{5B*zNPNNhsHmqgJ^JpFiAHnm)9=_z4XFxWh=YH;8#AlSf^05E*z~W}5Ik0ZYlkgo z{LxnCB?e;&ZS(5Yo8Y$b)}^kHI1S{nzA(9kmV`xJgDk8vS;gvW7<#^x_PWCbzB6=n z3bXt;{y&!cz^#A1-frC32^I#b0+keSSCQ8S$9yg8#tR?2b30Kgar)i7M5&Vo2Ve95 zW|lQ*?rP`FK6g-_=EdS|Rp9UAdO#)mC6;N{mj#H=Rfx@GcxS^!CE_A)*et3@fXL8) z#d-NLv`96MAI%7b{c+QGAJU-Tzfn@GLcE1hQ<-#QFPBI^`cfKbQ`VK;*`4X5J9awi z48GMGpxbWbFcv>Du$J-F{hhbKZ!8 zK|H$Y-7$`z4=Gqcfi?{TAClr3*Zvo@%KXIjO%(!cJDh(2pzX#o{p>`1 z$u0|SWPm|OuiKQq;?^<8`K-zBnPgI0&A@eVwUjz?2ciBsehW%Vn< z4!NEsv{h8Xlc4))IG{3H+po+3{rS@ORbk7+goQRV|A4QP?;juZ(_w~<4Fc9(>~;T< z2wjwx_XX+`Rq)hiqIvn#eDmzWBY;aKSa$Lg-HA{u9iyIs9cDor8fsbse7Az5EnrON6|SOVV1;Tz_~t*q2wb3hVxf?{`0pI&;P{_y9K%`X*@ z&Ug!1tM%x(Ke&fWBGYHYd z0Ozv24J@3btbiG$65Yf-mQ$f>z6$>>CfaT995hLTmc95C8AiChO3721UO)KirADVs zr#--XIU_2zaSxw16cY~r0eFjhxel`xr$CV`fwBevZ{BL(gDHXZ^qOlHY2v+c^FU=b zSj2aMx+VftK+mGwUG7?|j%i6=p2TD^M9NM!wrmjd(dnonmGgAVzIti>qql;JhEQkz$6+Cxh3`NdN2-k99VWj-FPN&d*| zr{6TLW%n#JU}J& zmbFQmvVO+8BPZifa=UqX<#OXlJT1W@j>&n2f|5Zk=vzXbmB_t(HT((%`V3bmWITnTsL8&#A0I zbv<@dhG?=YD9xR^^SNkUAvIL;GUOz20cyKR>s=mLHKcb%m|aJ^kI*ND+F3&d=Kmy$7lm4F(g9>{|T2^8k*n3z0#kZcnD{UT>7TdcD5>qzzbWwBSDLzOaaif4mOaD&e3}1WwQ2*aN`Dmu}Oh{<5h0SC7(8ZE~8#8n=Z6 zI(}u1{-`Frmb147--yh<-1+%GkoX?#_dAl;TOw_>ksi2nb^+Sg81;k#vU_exx@Gsdy zKkd#e?@fLc{j$%*>(krf>At@-pA<&>3aZ2{|Ci~99!-bF3tDpzFufjbKdJQt2;cES z>3{$$54PuVkIt4)qB9t`s%`EzX%91sfNX~G_bukHE%lXYP;3JoRa&xn3b2EWo{98Td=$_Yt4`X{Du;10Odtj0Op%Teea z-%;GahJm0b>v*l4j((D#ZsmrEk=HL+u$dY>WEcYWfT6;(&ggwCAfb?39U39)@G zRf9*^P!&Va47p#AIxGo+y33IGdu}o=!`_-K(_x=OSt_e!1|-gro5$PbmdJl=hzea! z4rg7uj_f##Ovd( zpl)8|RDTe6!rO{fspJ^{8a;mMaWZl%`l8UO)ks7CW;gfV2N}tOlk4pJAaUMLWmfXP z2lCwSiFP6t52#!+de3Y=&=W`9s(34-nW?_g5kviWHo|F68v)l#7*4mA>dA`xmdFo3 z9&WeXldV*Pd4B(w7~UWW%PA6*NSNs`US2vp{xL%z6?Z!P)|4gyGw0PN}&#^Q|qR+J6re^c@*oi5f@Ipg(h5ktDdD*m+ z!!#Sgj>>#MO<|okU?s|m@B-+^e+Doy&4&-fv~Ke%0Ls8*N$UKS%qVxzuvg&CpL0!% zdm=>ZrAmubjU>9vxq+WCQiLR^Lk@5H+no<-p}RF24$29`n+wqvQiL& z=whx;u`o3)bn`}%jZ~RY-}f!;QwO3)(|&ibFXxqY>S;o81^bMw{jRlt<+&0J29Xhyh;(Ds^` zZ3`KKwy&Uk5_0M3hD>qz&v_F556AXK)q9C265`jVjI6<|Am7}#;R&gsj$#cF=?^?N zb1Z{v76R{||8NEXm~gM8zXR$>oUt$iUxR-t1`}N^Rf1z|PJNCnSO^Ck`by9H2Cmq} zIqR1@91!pw`7baPUW6G%YsKDK6^rm~feOV@$9S?eA3L zf?0FZSO0$7DG>D!Z$QU&GSezr?R;oxJZO6gYG(Ywa(bA4cD4F-(Q%@8M}*6rAd$yf zIPrEYYOsf^+8iBe`*UuU*>C+-uWH2urL9BE7vVF#Pt4s9vGCQjBNWGHbU!9bOdl1E*OyyfQ}0_h@q^6bP2eRK0sUhmMOSn5%s$roV$Aa(VukB=?k;*3xq+N!EP zpq-Z$ei3gnQB`v6(;Ubx7|LN@9GBni5pp_7?4*P=GXo-TKlR0G{# zwtty1{9CtlXi7dp^i-e21EINW{ajZ6|0SygABxVUbl2%0Rm= zVY7dc(Ti7R1#odAtW0Xm>{=MOJ0{YTT6Kzd`jw6-l{p9;6=iY?`x<^PP+Gt~XrGiEm{7ZM`oVl9=R}M*3#eWC zr3bg+WmVLrD^v{ttYZ1W$BFZqqlot>^ja>9;bj(r9`1X2QZA$M z6Zv?YQ2lSAB^0)GE~fNbFo7cV!6L;&W-9xrgXPhnho^-(6~A*NuV z_&YAoj<^ZO<_hob5`hmlK)MWO{?ZK*mLC4nX9 ze)&i$J)DatFjMx2nFhXBvmxG}i0%^JdSs!mP?&H%$O4k7UtSw1e=cJ$=yECY}w20G`s&TT2V|MFS+& zrj;L&oZ8O1S&l{O>V^dJ{=1j}EhGtf?p>x0U>R7>zfe26)W0-bBw-5J157$LtLK&Y zrK*DaMrJu6TEgHTy5an1A7pQK>l$b4N7t#;I5LLfYKrPyMYtK60MI}&h@MzBP56FK z*KokSggz2eDauZBc}R|{5dtQn-erE`_jW@4ZV0o{l{f6kGQM8CjVY>@(y>BWnLDz! zNQ0GPwcv6roE7~aMI*8Nb~H2;eX(v+=5c^#aK+8Wk)Ccq3GJk#Jm6qg5=jz6qoB-&ziN^M`~?qw@`--dGAeQmeORGmgN3DflFKNx6Z}*l%YmVHqEo5q_=UxrpvJqe zeXiY)t`U?4)cJp@FE{xkl-Yyzvg=*w43n+LUsp512iLk}6b>61pT>4C1mg34vU?yt z8m0iNJGm9~R#^<&o}ajsB0i_8Wte|`-y~ApH(RR9yT3}YcmKh{gqKTDM$55>?A*N` zXvO%U7qpCGi$JS&ydPWxYEpHZe~8O!0#%HP)+IQu>8q``RAB}UJHg*$CLWyG!7W

U)kfL>=i~ShiWvfw5nSVf7>4(`Pd| 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 aJ@QxtEzd<&69ey_?Y55LjneB6pZ^CGsOVh) literal 0 HcmV?d00001 diff --git a/14/umbraco-forms/developer/images/form-pickers.png b/14/umbraco-forms/developer/images/form-pickers.png new file mode 100644 index 0000000000000000000000000000000000000000..037e25fabe091d741d54a31a356f64e06557a11f GIT binary patch literal 4564 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 bv8!1udxQDZ^Y5m|P7IAc`Z`pp;~f1zzE6?g literal 0 HcmV?d00001 diff --git a/14/umbraco-forms/developer/property-editors.md b/14/umbraco-forms/developer/property-editors.md new file mode 100644 index 00000000000..50a9d956d72 --- /dev/null +++ b/14/umbraco-forms/developer/property-editors.md @@ -0,0 +1,39 @@ +# Property Editors + +When forms are created, editors will want to add them to pages in Umbraco. To do this they need a document type with a property that uses a datatype based on a form picker property editor. + +Umbraco Forms provides three variations of a form picker. + +

Form Pickers

+ +Most commonly used is **Form Picker (single)**. This will allow the editor to select a single form for display on page. + +Rarely but feasibly, you'll have a requirement to present multiple forms on a page. Should this be appropriate, you can use **Form Picker (multiple)**. + +{% hint style="info" %} +Internally this is used for presenting the list of "Allowed forms" you can select when setting up a form picker datatype. +{% endhint %} + +Finally you can provide further flexibility for the editor to select not just a form, but also the theme and redirect as well. For this you'll use the **Form Details Picker**. + +## Configuring the Data Type + +Each property editor allows you to restrict the forms that can be chosen with the datatype. You do this by setting either or both of the list of "Allowed folders" or "Allowed forms". + +

Form Picker DataType Configuration

+ +THe "Form Details Picker" also allow you to select whether theme or redirect selection is available. + +## Property Value Conversion + +The type of a property based on the form picker presented in a Razor class library is as followes: + +| Option | Description | +| -------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | +| **Form Picker (single)** | Single GUID representing the form's identifier. | +| **Form Picker (multiple)** | Collection of GUIDs representing the form identifiers. | +| **Form Details Picker** | Instance of the `Umbraco.Forms.Core.PropertyEditors.Models.FormDetails` object, which has properties for the form, theme and redirect. | + +## Content Delivery API Expansion + +Each reference to a form supports expansion via the Umbraco Content Delivery API, as described [here](./ajaxforms.md#working-with-the-cms-content-delivery-api). diff --git a/14/umbraco-forms/developer/themes.md b/14/umbraco-forms/developer/themes.md index 130c00e5ebe..2ff0d9a578e 100644 --- a/14/umbraco-forms/developer/themes.md +++ b/14/umbraco-forms/developer/themes.md @@ -42,6 +42,77 @@ Umbraco Forms conditional JavaScript logic depends on some CSS classes currently If adding or amending client-side scripts, you need to copy the `Script.cshtml` file from the `default` themes folder. In your copy, amend the `.js` references to reference your own script files. +### Shipping Themes in a Razor Class Library + +Umbraco Forms provides it's built-in themes as part of a Razor Class Library for ease of distribution. This can be useful for custom themes, particularly those used in multiple solutions or released as an Umbraco package. + +From Forms 14.2 it's possible to do this for custom themes. + +Firstly you'll create a new Razor Class Library project to hold the theme. You then create the necessary partial views for your theme as usual within `Views\Partials\Forms\Themes\`. + +You then need to provide the names of the files in your theme via an implementation of `ITheme`. For example, if just overriding a single file, your class would look like this: + +```csharp +using Umbraco.Forms.Core.Interfaces; + +public class MyCustomTheme : ITheme +{ + private const string FilePathFormat = "{0}/{1}/{2}.cshtml"; + + public virtual string Name => "my-custom-theme"; + + public virtual IEnumerable Files => + [ + string.Format(FilePathFormat, Core.Constants.System.ThemesPath, Name, "FieldTypes/FieldType.Textfield"), + ]; +} +``` + +In your project that consumes the theme, you register the ones you want to use via a composer: + +```csharp +public class MyComposer : IComposer +{ + public void Compose(IUmbracoBuilder builder) + { + builder.Themes() + .Add(); + } +} +``` + +With that in place your theme will be picked up for selection in the theme picker. And the partial view files included will be used when rendering forms. + +#### Email Templates + +Email templates provided for the send email workflow can be provided in a Razor Class Library in a similar way. + +The partial view will be created in `Views\Partials\Forms\Emails`. + +It's made available via an implementation of `IEmailTemplate`: + +```csharp +using Umbraco.Forms.Core.Interfaces; + +public class MyCustomEmailTemplate : IEmailTemplate +{ + public virtual string FileName => "My-Custom-Email-Template.cshtml"; +} +``` + +And registered with: + +```csharp +public class MyComposer : IComposer +{ + public void Compose(IUmbracoBuilder builder) + { + builder.EmailTemplates() + .Add(); + } +} +``` + ## Using a Theme When rendering a form in a view file, you can specify which theme to use with the form. diff --git a/14/umbraco-forms/editor/creating-a-form/form-settings.md b/14/umbraco-forms/editor/creating-a-form/form-settings.md index 00860f33ad8..2139b30efed 100644 --- a/14/umbraco-forms/editor/creating-a-form/form-settings.md +++ b/14/umbraco-forms/editor/creating-a-form/form-settings.md @@ -57,6 +57,24 @@ The autocomplete setting for the overall form can be changed from the default of ![Form Settings Autocomplete](images/FormSettingsAutocomplete-V14.png) +### Multi-page forms + +The settings available in this section allow you to customize how multi-page forms are presented to site visitors. + +

Multi-Page Form Settings

+ +| Option | Description | +| -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **Paging display** | Select whether paging information is displayed at the top and/or bottom of the form. | +| **Paging display format** | Provide a format string for the paging details. By default `Page {0} of {1}` is used which will be replaced as, for example, `Page 1 of 4`. | +| **Page caption format** | Provide a format string for rendering the page captions. By default `Page {0}` is used which will be replaced as, for example, `Page 1`. If a caption for the page has been provided, it will be used instead. | +| **Show summary page** | Select whether a summary page is displayed at the end of multi-page forms, where a user can review their entry before submitting. | +| **Summary heading** | Provide the heading for the summary page. | + +{% hint style="info" %} +These options will only be available if [the feature is configured for display](../../developer/configuration/README.md#enablemultipageformsettings). +{% endhint %} + ### Moderation Enabling this feature allows the moderator to manage the approval status of a form. This can be used in a number of scenarios. For example, if the form submission will be publicly shown, you can control which are published. diff --git a/14/umbraco-forms/release-notes.md b/14/umbraco-forms/release-notes.md index 4b378849f82..d0f12152885 100644 --- a/14/umbraco-forms/release-notes.md +++ b/14/umbraco-forms/release-notes.md @@ -18,6 +18,22 @@ If you are upgrading to a new major version, you can find information about the This section contains the release notes for Umbraco Forms 14 including all changes for this version. +#### [**14.2.0-rc1**](https://github.com/umbraco/Umbraco.Forms.Issues/issues?q=is%3Aissue+is%3Aclosed+label%3Arelease%2F14.2.0) **TBC** + +The 14.2 release of Forms contains features that can improve the user experience of completing multi-page forms. + +We've added the option for [editors to choose to display paging details on the forms](./editor/creating-a-form/form-settings.md#multi-page-forms)). This will allow those completing forms to get a better understanding of progress as well as see details of the pages still to complete. [#281](https://github.com/umbraco/Umbraco.Forms.Issues/issues/281) [#648](https://github.com/umbraco/Umbraco.Forms.Issues/issues/648). + +These can be options are enabled and configured on a per-form basis by editors in the form settings section. We also provide a [configuration based toggle for the feature as a whole](./developer/configuration/README.md#enablemultipageformsettings). In this way editors can be given access to use the feature only once the styling or theme is prepared. + +Another improvement if found in the [form picker property editors](./developer/property-editors.md). We now support restriction of which forms can be selected by folder rather than just by individual forms. + +A second "form details picker" is also available, allowing editors the option of selecting the form, theme and redirect via a single property editor. + +Forms for several versions now has shipped it's themes and email templates as part of a razor class library for ease of distribution. With this release we make that feature [available to your own custom themes and templates](./developer/themes.md#shipping-themes-in-a-razor-class-library) (or those created by package developers) [#795](https://github.com/umbraco/Umbraco.Forms.Issues/issues/795). + +Finally thanks to a kind contribution from [Erik-Jan Westendorp](https://github.com/erikjanwestendorp) the backoffice is now translated into Dutch [#1264](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1264). + #### [**14.1.5**](https://github.com/umbraco/Umbraco.Forms.Issues/issues?q=is%3Aissue+is%3Aclosed+label%3Arelease%2F14.1.5) **(October 3rd 2024)** * Handled "chunked" authentication cookie in protection of file uploads saved in the media file system [#11](https://github.com/umbraco/Umbraco.Forms.Issues/issues/11#issuecomment-2376788751). diff --git a/15/umbraco-forms/SUMMARY.md b/15/umbraco-forms/SUMMARY.md index 8ebc2710844..bc49db69108 100644 --- a/15/umbraco-forms/SUMMARY.md +++ b/15/umbraco-forms/SUMMARY.md @@ -20,6 +20,7 @@ ## Developer +* [Property Editors](developer/property-editors.md) * [Preparing Your Frontend](developer/prepping-frontend.md) * [Configuration](developer/configuration/README.md) diff --git a/15/umbraco-forms/developer/configuration/README.md b/15/umbraco-forms/developer/configuration/README.md index 514ba3edde7..d5076443570 100644 --- a/15/umbraco-forms/developer/configuration/README.md +++ b/15/umbraco-forms/developer/configuration/README.md @@ -57,7 +57,12 @@ For illustration purposes, the following structure represents the full set of op "AutocompleteAttribute": "", "DaysToRetainSubmittedRecordsFor": 0, "DaysToRetainApprovedRecordsFor": 0, - "DaysToRetainRejectedRecordsFor": 0 + "DaysToRetainRejectedRecordsFor": 0, + "ShowPagingOnMultiPageForms": "None", + "PagingDetailsFormat": "Page {0} of {1}", + "PageCaptionFormat": "Page {0}", + "ShowSummaryPageOnMultiPageForms": false, + "SummaryLabel": "Summary of Entry" }, "RemoveProvidedEmailTemplate": false, "RemoveProvidedFormTemplates": false, @@ -88,7 +93,8 @@ For illustration purposes, the following structure represents the full set of op "UseSemanticFieldsetRendering": false, "DisableClientSideValidationDependencyCheck": false, "DisableRelationTracking": false, - "TrackRenderedFormsStorageMethod": "HttpContextItems" + "TrackRenderedFormsStorageMethod": "HttpContextItems", + "EnableMultiPageFormSettings": true }, "Security": { "DisallowedFileUploadExtensions": "config,exe,dll,asp,aspx", @@ -305,6 +311,26 @@ Applies as per `DaysToRetainSubmittedRecordsFor` but for records in the 'approve Applies as per `DaysToRetainSubmittedRecordsFor` but for records in the 'rejected' state. +### ShowPagingOnMultiPageForms + +Defines whether and where paging details are displayed for new multi-page forms. + +### PagingDetailsFormat + +Defines the paging details format for new multi-page forms. + +### PageCaptionFormat + +Defines the page caption format for new multi-page forms. + +### ShowSummaryPageOnMultiPageForms + +Defines whether summary pages are on by default for new multi-page forms. + +### SummaryLabel + +Defines the default summary label for new multi-page forms. + ## Package options configuration ### IgnoreWorkFlowsOnEdit @@ -417,6 +443,12 @@ By default, `HttpContext.Items` is used as the storage mechanism for this tracki You can optionally revert to the legacy behavior of using `TempData` by changing this setting from the default of `HttpContextItems` to `TempData`. +## EnableMultiPageFormSettings + +This setting determines whether [multi-page form settings](../../editor/creating-a-form/form-settings.md#multi-page-forms) are available to editors. + +By default the value is `true`. To disable the feature, set the value to `false`. + ## Security configuration ### DisallowedFileUploadExtensions diff --git a/15/umbraco-forms/developer/property-editors.md b/15/umbraco-forms/developer/property-editors.md new file mode 100644 index 00000000000..0efcd11239b --- /dev/null +++ b/15/umbraco-forms/developer/property-editors.md @@ -0,0 +1,39 @@ +# Property Editors + +When forms are created, editors will want to add them to pages in Umbraco. To do this they need a document type with a property that uses a datatype based on a form picker property editor. + +Umbraco Forms provides three variations of a form picker. + +

Form Pickers

+ +Most commonly used is **Form Picker (single)**. This will allow the editor to select a single form for display on page. + +Rarely but feasibly, you'll have a requirement to present multiple forms on a page. Should this be appropriate, you can use **Form Picker (multiple)**. + +{% hint style="info" %} +Internally this is used for presenting the list of "Allowed forms" you can select when setting up a form picker datatype. +{% endhint %} + +Finally you can provide further flexibility for the editor to select not just a form, but also the theme and redirect as well. For this you'll use the **Form Details Picker**. + +## Configuring the Data Type + +Each property editor allows you to restrict the forms that can be chosen with the datatype. You do this by setting either or both of the list of "Allowed folders" or "Allowed forms". + +

Form Picker DataType Configuration

+ +THe "Form Details Picker" also allow you to select whether theme or redirect selection is available. + +## Property Value Conversion + +The type of a property based on the form picker presented in a Razor class library is as followes: + +| Option | Description | +| -------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | +| **Form Picker (single)** | Single GUID representing the form's identifier. | +| **Form Picker (multiple)** | Collection of GUIDs representing the form identifiers. | +| **Form Details Picker** | Instance of the `Umbraco.Forms.Core.PropertyEditors.Models.FormDetails` object, which has properties for the form, theme and redirect. | + +## Content Delivery API Expansion + +Each reference to a form supports expansion via the Umbraco Content Delivery API, as described [here](./ajaxforms.md#working-with-the-cms-content-delivery-api). diff --git a/15/umbraco-forms/developer/themes.md b/15/umbraco-forms/developer/themes.md index 130c00e5ebe..efecde21f5a 100644 --- a/15/umbraco-forms/developer/themes.md +++ b/15/umbraco-forms/developer/themes.md @@ -42,6 +42,77 @@ Umbraco Forms conditional JavaScript logic depends on some CSS classes currently If adding or amending client-side scripts, you need to copy the `Script.cshtml` file from the `default` themes folder. In your copy, amend the `.js` references to reference your own script files. +### Shipping Themes in a Razor Class Library + +Umbraco Forms provides it's built-in themes as part of a Razor Class Library for ease of distribution. This can be useful for custom themes, particularly those used in multiple solutions or released as an Umbraco package. + +It's also possible to do this for custom themes. + +Firstly you'll create a new Razor Class Library project to hold the theme. You then create the necessary partial views for your theme as usual within `Views\Partials\Forms\Themes\`. + +You then need to provide the names of the files in your theme via an implementation of `ITheme`. For example, if just overriding a single file, your class would look like this: + +```csharp +using Umbraco.Forms.Core.Interfaces; + +public class MyCustomTheme : ITheme +{ + private const string FilePathFormat = "{0}/{1}/{2}.cshtml"; + + public virtual string Name => "my-custom-theme"; + + public virtual IEnumerable Files => + [ + string.Format(FilePathFormat, Core.Constants.System.ThemesPath, Name, "FieldTypes/FieldType.Textfield"), + ]; +} +``` + +In your project that consumes the theme, you register the ones you want to use via a composer: + +```csharp +public class MyComposer : IComposer +{ + public void Compose(IUmbracoBuilder builder) + { + builder.Themes() + .Add(); + } +} +``` + +With that in place your theme will be picked up for selection in the theme picker. And the partial view files included will be used when rendering forms. + +#### Email Templates + +Email templates provided for the send email workflow can be provided in a Razor Class Library in a similar way. + +The partial view will be created in `Views\Partials\Forms\Emails`. + +It's made available via an implementation of `IEmailTemplate`: + +```csharp +using Umbraco.Forms.Core.Interfaces; + +public class MyCustomEmailTemplate : IEmailTemplate +{ + public virtual string FileName => "My-Custom-Email-Template.cshtml"; +} +``` + +And registered with: + +```csharp +public class MyComposer : IComposer +{ + public void Compose(IUmbracoBuilder builder) + { + builder.EmailTemplates() + .Add(); + } +} +``` + ## Using a Theme When rendering a form in a view file, you can specify which theme to use with the form. diff --git a/15/umbraco-forms/editor/creating-a-form/form-settings.md b/15/umbraco-forms/editor/creating-a-form/form-settings.md index 00860f33ad8..2139b30efed 100644 --- a/15/umbraco-forms/editor/creating-a-form/form-settings.md +++ b/15/umbraco-forms/editor/creating-a-form/form-settings.md @@ -57,6 +57,24 @@ The autocomplete setting for the overall form can be changed from the default of ![Form Settings Autocomplete](images/FormSettingsAutocomplete-V14.png) +### Multi-page forms + +The settings available in this section allow you to customize how multi-page forms are presented to site visitors. + +

Multi-Page Form Settings

+ +| Option | Description | +| -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **Paging display** | Select whether paging information is displayed at the top and/or bottom of the form. | +| **Paging display format** | Provide a format string for the paging details. By default `Page {0} of {1}` is used which will be replaced as, for example, `Page 1 of 4`. | +| **Page caption format** | Provide a format string for rendering the page captions. By default `Page {0}` is used which will be replaced as, for example, `Page 1`. If a caption for the page has been provided, it will be used instead. | +| **Show summary page** | Select whether a summary page is displayed at the end of multi-page forms, where a user can review their entry before submitting. | +| **Summary heading** | Provide the heading for the summary page. | + +{% hint style="info" %} +These options will only be available if [the feature is configured for display](../../developer/configuration/README.md#enablemultipageformsettings). +{% endhint %} + ### Moderation Enabling this feature allows the moderator to manage the approval status of a form. This can be used in a number of scenarios. For example, if the form submission will be publicly shown, you can control which are published. From 6f8939b2550c588e80deb3f4adfe070a3ab0cea0 Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Mon, 7 Oct 2024 13:56:01 +0200 Subject: [PATCH 02/18] Updated release notes for 14. --- 14/umbraco-forms/release-notes.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/14/umbraco-forms/release-notes.md b/14/umbraco-forms/release-notes.md index d0f12152885..e6c80878d51 100644 --- a/14/umbraco-forms/release-notes.md +++ b/14/umbraco-forms/release-notes.md @@ -34,6 +34,11 @@ Forms for several versions now has shipped it's themes and email templates as pa Finally thanks to a kind contribution from [Erik-Jan Westendorp](https://github.com/erikjanwestendorp) the backoffice is now translated into Dutch [#1264](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1264). +Other bug fixes included in the release: + +* Reverted entry list to display most recent first. +* Fixed issue on restoring values of checkbox and radio lists when navigating backward on multi-page forms. + #### [**14.1.5**](https://github.com/umbraco/Umbraco.Forms.Issues/issues?q=is%3Aissue+is%3Aclosed+label%3Arelease%2F14.1.5) **(October 3rd 2024)** * Handled "chunked" authentication cookie in protection of file uploads saved in the media file system [#11](https://github.com/umbraco/Umbraco.Forms.Issues/issues/11#issuecomment-2376788751). From 2d0b00f4fdec4793d2c3351c278d022fa889b668 Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Mon, 7 Oct 2024 14:01:08 +0200 Subject: [PATCH 03/18] Linting. --- 13/umbraco-forms/developer/themes.md | 2 +- 13/umbraco-forms/release-notes.md | 4 ++-- 14/umbraco-forms/developer/property-editors.md | 2 +- 14/umbraco-forms/developer/themes.md | 2 +- 14/umbraco-forms/release-notes.md | 4 ++-- 15/umbraco-forms/developer/property-editors.md | 2 +- 15/umbraco-forms/developer/themes.md | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/13/umbraco-forms/developer/themes.md b/13/umbraco-forms/developer/themes.md index 7eb845f06e5..b6b3aa680da 100644 --- a/13/umbraco-forms/developer/themes.md +++ b/13/umbraco-forms/developer/themes.md @@ -49,7 +49,7 @@ From Forms 13.3 it's possible to do this for custom themes. Firstly you'll create a new Razor Class Library project to hold the theme. You then create the necessary partial views for your theme as usual within `Views\Partials\Forms\Themes\`. -You then need to provide the names of the files in your theme via an implementation of `ITheme`. For example, if just overriding a single file, your class would look like this: +You then need to provide the names of the files in your theme via an implementation of `ITheme`. For example, if only overriding a single file, your class would look like this: ```csharp using Umbraco.Forms.Core.Interfaces; diff --git a/13/umbraco-forms/release-notes.md b/13/umbraco-forms/release-notes.md index 0be8c94afd9..b1d10e4227b 100644 --- a/13/umbraco-forms/release-notes.md +++ b/13/umbraco-forms/release-notes.md @@ -21,11 +21,11 @@ This section contains the release notes for Umbraco Forms 13 including all chang The 13.3 release of Forms contains features that can improve the user experience of completing multi-page forms. -We've added the option for [editors to choose to display paging details on the forms](./editor/creating-a-form/form-settings.md#multi-page-forms)). This will allow those completing forms to get a better understanding of progress as well as see details of the pages still to complete. [#281](https://github.com/umbraco/Umbraco.Forms.Issues/issues/281) [#648](https://github.com/umbraco/Umbraco.Forms.Issues/issues/648). +We've added the option for [editors to choose to display paging details on the forms](./editor/creating-a-form/form-settings.md#multi-page-forms). This will allow those completing forms to get a better understanding of progress as well as see details of the pages still to complete. [#281](https://github.com/umbraco/Umbraco.Forms.Issues/issues/281) [#648](https://github.com/umbraco/Umbraco.Forms.Issues/issues/648). These can be options are enabled and configured on a per-form basis by editors in the form settings section. We also provide a [configuration based toggle for the feature as a whole](./developer/configuration/README.md#enablemultipageformsettings). In this way editors can be given access to use the feature only once the styling or theme is prepared. -Forms for several versions now has shipped it's themes and email templates as part of a razor class library for ease of distribution. With this release we make that feature [available to your own custom themes and templates](./developer/themes.md#shipping-themes-in-a-razor-class-library) (or those created by package developers) [#795](https://github.com/umbraco/Umbraco.Forms.Issues/issues/795). +Forms ships it's themes and email templates as part of a razor class library for ease of distribution. With this release we make that feature [available to your own custom themes and templates](./developer/themes.md#shipping-themes-in-a-razor-class-library) (or those created by package developers) [#795](https://github.com/umbraco/Umbraco.Forms.Issues/issues/795). #### [**13.2.5**](https://github.com/umbraco/Umbraco.Forms.Issues/issues?q=is%3Aissue+is%3Aclosed+label%3Arelease%2F13.2.5) **(October 3rd 2024)** diff --git a/14/umbraco-forms/developer/property-editors.md b/14/umbraco-forms/developer/property-editors.md index 50a9d956d72..11417140ab2 100644 --- a/14/umbraco-forms/developer/property-editors.md +++ b/14/umbraco-forms/developer/property-editors.md @@ -1,6 +1,6 @@ # Property Editors -When forms are created, editors will want to add them to pages in Umbraco. To do this they need a document type with a property that uses a datatype based on a form picker property editor. +When forms are created, editors will want to add them to pages in Umbraco. To do this they need a Document Type with a property that uses a datatype based on a form picker property editor. Umbraco Forms provides three variations of a form picker. diff --git a/14/umbraco-forms/developer/themes.md b/14/umbraco-forms/developer/themes.md index 2ff0d9a578e..c1191c0dd1f 100644 --- a/14/umbraco-forms/developer/themes.md +++ b/14/umbraco-forms/developer/themes.md @@ -50,7 +50,7 @@ From Forms 14.2 it's possible to do this for custom themes. Firstly you'll create a new Razor Class Library project to hold the theme. You then create the necessary partial views for your theme as usual within `Views\Partials\Forms\Themes\`. -You then need to provide the names of the files in your theme via an implementation of `ITheme`. For example, if just overriding a single file, your class would look like this: +You then need to provide the names of the files in your theme via an implementation of `ITheme`. For example, if only overriding a single file, your class would look like this: ```csharp using Umbraco.Forms.Core.Interfaces; diff --git a/14/umbraco-forms/release-notes.md b/14/umbraco-forms/release-notes.md index e6c80878d51..89ce4b56908 100644 --- a/14/umbraco-forms/release-notes.md +++ b/14/umbraco-forms/release-notes.md @@ -22,7 +22,7 @@ This section contains the release notes for Umbraco Forms 14 including all chang The 14.2 release of Forms contains features that can improve the user experience of completing multi-page forms. -We've added the option for [editors to choose to display paging details on the forms](./editor/creating-a-form/form-settings.md#multi-page-forms)). This will allow those completing forms to get a better understanding of progress as well as see details of the pages still to complete. [#281](https://github.com/umbraco/Umbraco.Forms.Issues/issues/281) [#648](https://github.com/umbraco/Umbraco.Forms.Issues/issues/648). +We've added the option for [editors to choose to display paging details on the forms](./editor/creating-a-form/form-settings.md#multi-page-forms). This will allow those completing forms to get a better understanding of progress as well as see details of the pages still to complete. [#281](https://github.com/umbraco/Umbraco.Forms.Issues/issues/281) [#648](https://github.com/umbraco/Umbraco.Forms.Issues/issues/648). These can be options are enabled and configured on a per-form basis by editors in the form settings section. We also provide a [configuration based toggle for the feature as a whole](./developer/configuration/README.md#enablemultipageformsettings). In this way editors can be given access to use the feature only once the styling or theme is prepared. @@ -30,7 +30,7 @@ Another improvement if found in the [form picker property editors](./developer/p A second "form details picker" is also available, allowing editors the option of selecting the form, theme and redirect via a single property editor. -Forms for several versions now has shipped it's themes and email templates as part of a razor class library for ease of distribution. With this release we make that feature [available to your own custom themes and templates](./developer/themes.md#shipping-themes-in-a-razor-class-library) (or those created by package developers) [#795](https://github.com/umbraco/Umbraco.Forms.Issues/issues/795). +Forms ships it's themes and email templates as part of a razor class library for ease of distribution. With this release we make that feature [available to your own custom themes and templates](./developer/themes.md#shipping-themes-in-a-razor-class-library) (or those created by package developers) [#795](https://github.com/umbraco/Umbraco.Forms.Issues/issues/795). Finally thanks to a kind contribution from [Erik-Jan Westendorp](https://github.com/erikjanwestendorp) the backoffice is now translated into Dutch [#1264](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1264). diff --git a/15/umbraco-forms/developer/property-editors.md b/15/umbraco-forms/developer/property-editors.md index 0efcd11239b..b4a33933929 100644 --- a/15/umbraco-forms/developer/property-editors.md +++ b/15/umbraco-forms/developer/property-editors.md @@ -1,6 +1,6 @@ # Property Editors -When forms are created, editors will want to add them to pages in Umbraco. To do this they need a document type with a property that uses a datatype based on a form picker property editor. +When forms are created, editors will want to add them to pages in Umbraco. To do this they need a Document Type with a property that uses a datatype based on a form picker property editor. Umbraco Forms provides three variations of a form picker. diff --git a/15/umbraco-forms/developer/themes.md b/15/umbraco-forms/developer/themes.md index efecde21f5a..0b1778e1f47 100644 --- a/15/umbraco-forms/developer/themes.md +++ b/15/umbraco-forms/developer/themes.md @@ -50,7 +50,7 @@ It's also possible to do this for custom themes. Firstly you'll create a new Razor Class Library project to hold the theme. You then create the necessary partial views for your theme as usual within `Views\Partials\Forms\Themes\`. -You then need to provide the names of the files in your theme via an implementation of `ITheme`. For example, if just overriding a single file, your class would look like this: +You then need to provide the names of the files in your theme via an implementation of `ITheme`. For example, if only overriding a single file, your class would look like this: ```csharp using Umbraco.Forms.Core.Interfaces; From bead152ab7a1ac4e74a5e0fd61db8bf9f524dfb2 Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Mon, 7 Oct 2024 14:06:02 +0200 Subject: [PATCH 04/18] Linting. --- 14/umbraco-forms/developer/property-editors.md | 2 +- 14/umbraco-forms/release-notes.md | 2 +- 15/umbraco-forms/developer/property-editors.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/14/umbraco-forms/developer/property-editors.md b/14/umbraco-forms/developer/property-editors.md index 11417140ab2..84dff55f0fb 100644 --- a/14/umbraco-forms/developer/property-editors.md +++ b/14/umbraco-forms/developer/property-editors.md @@ -14,7 +14,7 @@ Rarely but feasibly, you'll have a requirement to present multiple forms on a pa Internally this is used for presenting the list of "Allowed forms" you can select when setting up a form picker datatype. {% endhint %} -Finally you can provide further flexibility for the editor to select not just a form, but also the theme and redirect as well. For this you'll use the **Form Details Picker**. +Finally you can provide further flexibility for the editor to select not only a form, but also the theme and redirect as well. For this you'll use the **Form Details Picker**. ## Configuring the Data Type diff --git a/14/umbraco-forms/release-notes.md b/14/umbraco-forms/release-notes.md index 89ce4b56908..1de584a4a54 100644 --- a/14/umbraco-forms/release-notes.md +++ b/14/umbraco-forms/release-notes.md @@ -26,7 +26,7 @@ We've added the option for [editors to choose to display paging details on the f These can be options are enabled and configured on a per-form basis by editors in the form settings section. We also provide a [configuration based toggle for the feature as a whole](./developer/configuration/README.md#enablemultipageformsettings). In this way editors can be given access to use the feature only once the styling or theme is prepared. -Another improvement if found in the [form picker property editors](./developer/property-editors.md). We now support restriction of which forms can be selected by folder rather than just by individual forms. +Another improvement if found in the [form picker property editors](./developer/property-editors.md). We now support restriction of which forms can be selected by folder rather than only by individual forms. A second "form details picker" is also available, allowing editors the option of selecting the form, theme and redirect via a single property editor. diff --git a/15/umbraco-forms/developer/property-editors.md b/15/umbraco-forms/developer/property-editors.md index b4a33933929..69cb9bf0fcd 100644 --- a/15/umbraco-forms/developer/property-editors.md +++ b/15/umbraco-forms/developer/property-editors.md @@ -14,7 +14,7 @@ Rarely but feasibly, you'll have a requirement to present multiple forms on a pa Internally this is used for presenting the list of "Allowed forms" you can select when setting up a form picker datatype. {% endhint %} -Finally you can provide further flexibility for the editor to select not just a form, but also the theme and redirect as well. For this you'll use the **Form Details Picker**. +Finally you can provide further flexibility for the editor to select not only a form, but also the theme and redirect as well. For this you'll use the **Form Details Picker**. ## Configuring the Data Type From 19a83572f4b3ef24b329267873626a6d64a9b67a Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Tue, 8 Oct 2024 17:55:42 +0200 Subject: [PATCH 05/18] Added details of delete entry permission. --- 13/umbraco-forms/developer/security.md | 1 + 13/umbraco-forms/release-notes.md | 2 ++ 14/umbraco-forms/developer/security.md | 1 + 14/umbraco-forms/release-notes.md | 2 ++ 15/umbraco-forms/developer/security.md | 1 + 5 files changed, 7 insertions(+) diff --git a/13/umbraco-forms/developer/security.md b/13/umbraco-forms/developer/security.md index bae23477dcc..d8d3855c914 100644 --- a/13/umbraco-forms/developer/security.md +++ b/13/umbraco-forms/developer/security.md @@ -13,6 +13,7 @@ Within the _Form Security_ tree, each user with a backoffice account is listed. * _Manage forms_ - user can create and edit form definitions * _View entries_ - user can view the submitted entries * _Edit entries_ - user can edit the submitted entries +* _Delete entries_ - user can delete the submitted entries * _Manage datasources_ - user can create and edit datasource definitions * _Manage prevalue sources_ - user can create and edit prevalue source definitions diff --git a/13/umbraco-forms/release-notes.md b/13/umbraco-forms/release-notes.md index b1d10e4227b..270f61aa47d 100644 --- a/13/umbraco-forms/release-notes.md +++ b/13/umbraco-forms/release-notes.md @@ -27,6 +27,8 @@ These can be options are enabled and configured on a per-form basis by editors i Forms ships it's themes and email templates as part of a razor class library for ease of distribution. With this release we make that feature [available to your own custom themes and templates](./developer/themes.md#shipping-themes-in-a-razor-class-library) (or those created by package developers) [#795](https://github.com/umbraco/Umbraco.Forms.Issues/issues/795). +To allow finer control over editor permissions, we've introduced a "delete entries" setting available on users and user groups. Thus you can now give editors explicit permissions to view, edit or delete entries [#1303](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1303). + #### [**13.2.5**](https://github.com/umbraco/Umbraco.Forms.Issues/issues?q=is%3Aissue+is%3Aclosed+label%3Arelease%2F13.2.5) **(October 3rd 2024)** * Handled "chunked" authentication cookie in protection of file uploads saved in the media file system [#11](https://github.com/umbraco/Umbraco.Forms.Issues/issues/11#issuecomment-2376788751). diff --git a/14/umbraco-forms/developer/security.md b/14/umbraco-forms/developer/security.md index c7648747f57..df6ea219a39 100644 --- a/14/umbraco-forms/developer/security.md +++ b/14/umbraco-forms/developer/security.md @@ -13,6 +13,7 @@ Within the _Forms_ > _Security_ tree, each user with a backoffice account is lis * Manage Forms - user can create and edit form definitions * View Entries - user can view the submitted entries * Edit Entries - user can edit the submitted entries +* Delete entries - user can delete the submitted entries * Manage Workflows - user can create and edit workflow items * Manage Datasources - user can create and edit datasource definitions * Manage Prevalue Sources - user can create and edit prevalue source definitions diff --git a/14/umbraco-forms/release-notes.md b/14/umbraco-forms/release-notes.md index 1de584a4a54..6ba58623c71 100644 --- a/14/umbraco-forms/release-notes.md +++ b/14/umbraco-forms/release-notes.md @@ -32,6 +32,8 @@ A second "form details picker" is also available, allowing editors the option of Forms ships it's themes and email templates as part of a razor class library for ease of distribution. With this release we make that feature [available to your own custom themes and templates](./developer/themes.md#shipping-themes-in-a-razor-class-library) (or those created by package developers) [#795](https://github.com/umbraco/Umbraco.Forms.Issues/issues/795). +To allow finer control over editor permissions, we've introduced a "delete entries" setting available on users and user groups. Thus you can now give editors explicit permissions to view, edit or delete entries [#1303](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1303). + Finally thanks to a kind contribution from [Erik-Jan Westendorp](https://github.com/erikjanwestendorp) the backoffice is now translated into Dutch [#1264](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1264). Other bug fixes included in the release: diff --git a/15/umbraco-forms/developer/security.md b/15/umbraco-forms/developer/security.md index 124dc163afb..0de32d3b399 100644 --- a/15/umbraco-forms/developer/security.md +++ b/15/umbraco-forms/developer/security.md @@ -13,6 +13,7 @@ Within the _Forms_ > _Security_ tree, each user with a backoffice account is lis * Manage Forms - user can create and edit form definitions * View Entries - user can view the submitted entries * Edit Entries - user can edit the submitted entries +* Delete entries - user can delete the submitted entries * Manage Workflows - user can create and edit workflow items * Manage Datasources - user can create and edit datasource definitions * Manage Prevalue Sources - user can create and edit prevalue source definitions From 0d674b68e6747125b22da346bedee29ed673e23f Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Tue, 8 Oct 2024 17:57:50 +0200 Subject: [PATCH 06/18] Linting. --- 13/umbraco-forms/release-notes.md | 2 +- 14/umbraco-forms/release-notes.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/13/umbraco-forms/release-notes.md b/13/umbraco-forms/release-notes.md index 270f61aa47d..4d1ee6b3fc6 100644 --- a/13/umbraco-forms/release-notes.md +++ b/13/umbraco-forms/release-notes.md @@ -17,7 +17,7 @@ If you are upgrading to a new major version, you can find information about the This section contains the release notes for Umbraco Forms 13 including all changes for this version. -#### [**13.3.0-rc1**](https://github.com/umbraco/Umbraco.Forms.Issues/issues?q=is%3Aissue+is%3Aclosed+label%3Arelease%2F13.3.0) **TBC** +#### [**13.3.0-rc1**](https://github.com/umbraco/Umbraco.Forms.Issues/issues?q=is%3Aissue+is%3Aclosed+label%3Arelease%2F13.3.0) **To Be Confirmed** The 13.3 release of Forms contains features that can improve the user experience of completing multi-page forms. diff --git a/14/umbraco-forms/release-notes.md b/14/umbraco-forms/release-notes.md index 6ba58623c71..91a98879e94 100644 --- a/14/umbraco-forms/release-notes.md +++ b/14/umbraco-forms/release-notes.md @@ -18,7 +18,7 @@ If you are upgrading to a new major version, you can find information about the This section contains the release notes for Umbraco Forms 14 including all changes for this version. -#### [**14.2.0-rc1**](https://github.com/umbraco/Umbraco.Forms.Issues/issues?q=is%3Aissue+is%3Aclosed+label%3Arelease%2F14.2.0) **TBC** +#### [**14.2.0-rc1**](https://github.com/umbraco/Umbraco.Forms.Issues/issues?q=is%3Aissue+is%3Aclosed+label%3Arelease%2F14.2.0) **To Be Confirmed** The 14.2 release of Forms contains features that can improve the user experience of completing multi-page forms. From 49a0485d7eb82c7edf4f50e5d954ac644aaab464 Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Wed, 9 Oct 2024 15:54:04 +0200 Subject: [PATCH 07/18] Updated release notes. --- 13/umbraco-forms/release-notes.md | 4 ++++ 14/umbraco-forms/release-notes.md | 1 + 2 files changed, 5 insertions(+) diff --git a/13/umbraco-forms/release-notes.md b/13/umbraco-forms/release-notes.md index 4d1ee6b3fc6..ca3e689d6a1 100644 --- a/13/umbraco-forms/release-notes.md +++ b/13/umbraco-forms/release-notes.md @@ -29,6 +29,10 @@ Forms ships it's themes and email templates as part of a razor class library for To allow finer control over editor permissions, we've introduced a "delete entries" setting available on users and user groups. Thus you can now give editors explicit permissions to view, edit or delete entries [#1303](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1303). +Other bug fixes included in the release: + +* Fix issue with single checkbox triggering a condition on a field on a subsequent page [#1304](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1304). + #### [**13.2.5**](https://github.com/umbraco/Umbraco.Forms.Issues/issues?q=is%3Aissue+is%3Aclosed+label%3Arelease%2F13.2.5) **(October 3rd 2024)** * Handled "chunked" authentication cookie in protection of file uploads saved in the media file system [#11](https://github.com/umbraco/Umbraco.Forms.Issues/issues/11#issuecomment-2376788751). diff --git a/14/umbraco-forms/release-notes.md b/14/umbraco-forms/release-notes.md index 91a98879e94..ed414381556 100644 --- a/14/umbraco-forms/release-notes.md +++ b/14/umbraco-forms/release-notes.md @@ -40,6 +40,7 @@ Other bug fixes included in the release: * Reverted entry list to display most recent first. * Fixed issue on restoring values of checkbox and radio lists when navigating backward on multi-page forms. +* Fix issue with single checkbox triggering a condition on a field on a subsequent page [#1304](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1304). #### [**14.1.5**](https://github.com/umbraco/Umbraco.Forms.Issues/issues?q=is%3Aissue+is%3Aclosed+label%3Arelease%2F14.1.5) **(October 3rd 2024)** From 0dfdfc2236900650555eeef3803590dc5e4f14c2 Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Tue, 15 Oct 2024 08:16:12 +0200 Subject: [PATCH 08/18] Added details of cross-platform check for Excel exports --- 13/umbraco-forms/release-notes.md | 1 + 14/umbraco-forms/release-notes.md | 1 + 2 files changed, 2 insertions(+) diff --git a/13/umbraco-forms/release-notes.md b/13/umbraco-forms/release-notes.md index ca3e689d6a1..bef9b147c0c 100644 --- a/13/umbraco-forms/release-notes.md +++ b/13/umbraco-forms/release-notes.md @@ -32,6 +32,7 @@ To allow finer control over editor permissions, we've introduced a "delete entri Other bug fixes included in the release: * Fix issue with single checkbox triggering a condition on a field on a subsequent page [#1304](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1304). +* Improve cross-platform check when exporting to Excel. #### [**13.2.5**](https://github.com/umbraco/Umbraco.Forms.Issues/issues?q=is%3Aissue+is%3Aclosed+label%3Arelease%2F13.2.5) **(October 3rd 2024)** diff --git a/14/umbraco-forms/release-notes.md b/14/umbraco-forms/release-notes.md index ed414381556..769d7c3bcd6 100644 --- a/14/umbraco-forms/release-notes.md +++ b/14/umbraco-forms/release-notes.md @@ -41,6 +41,7 @@ Other bug fixes included in the release: * Reverted entry list to display most recent first. * Fixed issue on restoring values of checkbox and radio lists when navigating backward on multi-page forms. * Fix issue with single checkbox triggering a condition on a field on a subsequent page [#1304](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1304). +* Improve cross-platform check when exporting to Excel. #### [**14.1.5**](https://github.com/umbraco/Umbraco.Forms.Issues/issues?q=is%3Aissue+is%3Aclosed+label%3Arelease%2F14.1.5) **(October 3rd 2024)** From 8142ba4744e0b76137c986c2902b8a06b6e9d7e9 Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Thu, 17 Oct 2024 08:00:40 +0200 Subject: [PATCH 09/18] Added details of date format configuration. --- 13/umbraco-forms/developer/configuration/README.md | 12 +++++++++++- 13/umbraco-forms/release-notes.md | 2 ++ 14/umbraco-forms/developer/configuration/README.md | 12 +++++++++++- 14/umbraco-forms/release-notes.md | 2 ++ 15/umbraco-forms/developer/configuration/README.md | 12 +++++++++++- 5 files changed, 37 insertions(+), 3 deletions(-) diff --git a/13/umbraco-forms/developer/configuration/README.md b/13/umbraco-forms/developer/configuration/README.md index f202261ceec..aa3771648d4 100644 --- a/13/umbraco-forms/developer/configuration/README.md +++ b/13/umbraco-forms/developer/configuration/README.md @@ -110,7 +110,9 @@ For illustration purposes, the following structure represents the full set of op }, "FieldTypes": { "DatePicker": { - "DatePickerYearRange": 10 + "DatePickerYearRange": 10, + "DatePickerFormat": "LL", + "DatePickerFormatForValidation": "" }, "Recaptcha2": { "PublicKey": "", @@ -518,6 +520,14 @@ For more information, see the [Headless/AJAX Forms](../ajaxforms.md) article. This setting is used to configure the Date Picker form field range of years that is available in the date picker. By default this is a small range of 10 years. +#### DatePickerFormat + +A custom date format can be provided in [momentjs format](https://momentjscom.readthedocs.io/en/latest/moment/01-parsing/03-string-format/) if you want to override the default. + +#### DatePickerFormatForValidation + +If a custom date format is provided it will be used on the client-side. A matching string in [C# date format](https://learn.microsoft.com/en-us/dotnet/standard/base-types/custom-date-and-time-format-strings) should be provided, in order that server-side validation will match the expected format of the entry. + ### reCAPTCHA v2 field type configuration #### PublicKey & PrivateKey diff --git a/13/umbraco-forms/release-notes.md b/13/umbraco-forms/release-notes.md index bef9b147c0c..a3738e5a5aa 100644 --- a/13/umbraco-forms/release-notes.md +++ b/13/umbraco-forms/release-notes.md @@ -27,6 +27,8 @@ These can be options are enabled and configured on a per-form basis by editors i Forms ships it's themes and email templates as part of a razor class library for ease of distribution. With this release we make that feature [available to your own custom themes and templates](./developer/themes.md#shipping-themes-in-a-razor-class-library) (or those created by package developers) [#795](https://github.com/umbraco/Umbraco.Forms.Issues/issues/795). +The format for the date field can now be provided in configuration [#1276](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1276). + To allow finer control over editor permissions, we've introduced a "delete entries" setting available on users and user groups. Thus you can now give editors explicit permissions to view, edit or delete entries [#1303](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1303). Other bug fixes included in the release: diff --git a/14/umbraco-forms/developer/configuration/README.md b/14/umbraco-forms/developer/configuration/README.md index 6c56ce1183f..34b8e69b4b6 100644 --- a/14/umbraco-forms/developer/configuration/README.md +++ b/14/umbraco-forms/developer/configuration/README.md @@ -110,7 +110,9 @@ For illustration purposes, the following structure represents the full set of op }, "FieldTypes": { "DatePicker": { - "DatePickerYearRange": 10 + "DatePickerYearRange": 10, + "DatePickerFormat": "LL", + "DatePickerFormatForValidation": "" }, "Recaptcha2": { "PublicKey": "", @@ -515,6 +517,14 @@ For more information, see the [Headless/AJAX Forms](../ajaxforms.md) article. This setting is used to configure the Date Picker form field range of years that is available in the date picker. By default this is a small range of 10 years. +#### DatePickerFormat + +A custom date format can be provided in [momentjs format](https://momentjscom.readthedocs.io/en/latest/moment/01-parsing/03-string-format/) if you want to override the default. + +#### DatePickerFormatForValidation + +If a custom date format is provided it will be used on the client-side. A matching string in [C# date format](https://learn.microsoft.com/en-us/dotnet/standard/base-types/custom-date-and-time-format-strings) should be provided, in order that server-side validation will match the expected format of the entry. + ### reCAPTCHA v2 field type configuration #### PublicKey & PrivateKey diff --git a/14/umbraco-forms/release-notes.md b/14/umbraco-forms/release-notes.md index 769d7c3bcd6..d4e0de57ece 100644 --- a/14/umbraco-forms/release-notes.md +++ b/14/umbraco-forms/release-notes.md @@ -32,6 +32,8 @@ A second "form details picker" is also available, allowing editors the option of Forms ships it's themes and email templates as part of a razor class library for ease of distribution. With this release we make that feature [available to your own custom themes and templates](./developer/themes.md#shipping-themes-in-a-razor-class-library) (or those created by package developers) [#795](https://github.com/umbraco/Umbraco.Forms.Issues/issues/795). +The format for the date field can now be provided in configuration [#1276](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1276). + To allow finer control over editor permissions, we've introduced a "delete entries" setting available on users and user groups. Thus you can now give editors explicit permissions to view, edit or delete entries [#1303](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1303). Finally thanks to a kind contribution from [Erik-Jan Westendorp](https://github.com/erikjanwestendorp) the backoffice is now translated into Dutch [#1264](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1264). diff --git a/15/umbraco-forms/developer/configuration/README.md b/15/umbraco-forms/developer/configuration/README.md index d5076443570..0c2ddc22b06 100644 --- a/15/umbraco-forms/developer/configuration/README.md +++ b/15/umbraco-forms/developer/configuration/README.md @@ -110,7 +110,9 @@ For illustration purposes, the following structure represents the full set of op }, "FieldTypes": { "DatePicker": { - "DatePickerYearRange": 10 + "DatePickerYearRange": 10, + "DatePickerFormat": "LL", + "DatePickerFormatForValidation": "" }, "Recaptcha2": { "PublicKey": "", @@ -513,6 +515,14 @@ For more information, see the [Headless/AJAX Forms](../ajaxforms.md) article. This setting is used to configure the Date Picker form field range of years that is available in the date picker. By default this is a small range of 10 years. +#### DatePickerFormat + +A custom date format can be provided in [momentjs format](https://momentjscom.readthedocs.io/en/latest/moment/01-parsing/03-string-format/) if you want to override the default. + +#### DatePickerFormatForValidation + +If a custom date format is provided it will be used on the client-side. A matching string in [C# date format](https://learn.microsoft.com/en-us/dotnet/standard/base-types/custom-date-and-time-format-strings) should be provided, in order that server-side validation will match the expected format of the entry. + ### reCAPTCHA v2 field type configuration #### PublicKey & PrivateKey From aa7cb21c76db458332bb3474820b68bd6fdb321b Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Thu, 17 Oct 2024 08:56:36 +0200 Subject: [PATCH 10/18] Added further to release notes. --- 14/umbraco-forms/release-notes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/14/umbraco-forms/release-notes.md b/14/umbraco-forms/release-notes.md index d4e0de57ece..1ad9d4d5bc8 100644 --- a/14/umbraco-forms/release-notes.md +++ b/14/umbraco-forms/release-notes.md @@ -41,6 +41,7 @@ Finally thanks to a kind contribution from [Erik-Jan Westendorp](https://github. Other bug fixes included in the release: * Reverted entry list to display most recent first. +* Fixed issue with display of prevalue captions in the entry list. * Fixed issue on restoring values of checkbox and radio lists when navigating backward on multi-page forms. * Fix issue with single checkbox triggering a condition on a field on a subsequent page [#1304](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1304). * Improve cross-platform check when exporting to Excel. From 1cfdd3c7ecad2f02a1b949da1f4295c28ad66716 Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Fri, 18 Oct 2024 11:16:38 +0200 Subject: [PATCH 11/18] Added further bug fix to release notes. --- 13/umbraco-forms/release-notes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/13/umbraco-forms/release-notes.md b/13/umbraco-forms/release-notes.md index a3738e5a5aa..760a5e3f6a7 100644 --- a/13/umbraco-forms/release-notes.md +++ b/13/umbraco-forms/release-notes.md @@ -35,6 +35,7 @@ Other bug fixes included in the release: * Fix issue with single checkbox triggering a condition on a field on a subsequent page [#1304](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1304). * Improve cross-platform check when exporting to Excel. +* Fixed issue where sensitive data flag on a field could not be set for new fields added to a form [#1309](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1309). #### [**13.2.5**](https://github.com/umbraco/Umbraco.Forms.Issues/issues?q=is%3Aissue+is%3Aclosed+label%3Arelease%2F13.2.5) **(October 3rd 2024)** From 8fe0e54711d030be7a010bd1abb3efe9c80863ff Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Fri, 18 Oct 2024 15:00:17 +0200 Subject: [PATCH 12/18] Added details of aria label for date picker --- 13/umbraco-forms/developer/configuration/type-details.md | 2 ++ 13/umbraco-forms/release-notes.md | 2 +- 14/umbraco-forms/developer/configuration/type-details.md | 2 ++ 14/umbraco-forms/release-notes.md | 2 +- 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/13/umbraco-forms/developer/configuration/type-details.md b/13/umbraco-forms/developer/configuration/type-details.md index 723648393c3..631551c8340 100644 --- a/13/umbraco-forms/developer/configuration/type-details.md +++ b/13/umbraco-forms/developer/configuration/type-details.md @@ -52,6 +52,8 @@ The intention is to be able to make available details such as IDs, aliases and p **Settings:** * `Placeholder` +* `ShowLabel` +* `AriaLabel` diff --git a/13/umbraco-forms/release-notes.md b/13/umbraco-forms/release-notes.md index 760a5e3f6a7..cb8854f9138 100644 --- a/13/umbraco-forms/release-notes.md +++ b/13/umbraco-forms/release-notes.md @@ -27,7 +27,7 @@ These can be options are enabled and configured on a per-form basis by editors i Forms ships it's themes and email templates as part of a razor class library for ease of distribution. With this release we make that feature [available to your own custom themes and templates](./developer/themes.md#shipping-themes-in-a-razor-class-library) (or those created by package developers) [#795](https://github.com/umbraco/Umbraco.Forms.Issues/issues/795). -The format for the date field can now be provided in configuration [#1276](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1276). +We've also made a couple of updates to the date picker field type. The format for the field can now be provided in configuration [#1276](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1276). And you can now override and localize the aria label provided for assistive technologies such as screen readers [https://github.com/umbraco/Umbraco.Forms.Issues/issues/1082](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1082). To allow finer control over editor permissions, we've introduced a "delete entries" setting available on users and user groups. Thus you can now give editors explicit permissions to view, edit or delete entries [#1303](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1303). diff --git a/14/umbraco-forms/developer/configuration/type-details.md b/14/umbraco-forms/developer/configuration/type-details.md index 723648393c3..631551c8340 100644 --- a/14/umbraco-forms/developer/configuration/type-details.md +++ b/14/umbraco-forms/developer/configuration/type-details.md @@ -52,6 +52,8 @@ The intention is to be able to make available details such as IDs, aliases and p **Settings:** * `Placeholder` +* `ShowLabel` +* `AriaLabel` diff --git a/14/umbraco-forms/release-notes.md b/14/umbraco-forms/release-notes.md index 1ad9d4d5bc8..6c3f0f99f76 100644 --- a/14/umbraco-forms/release-notes.md +++ b/14/umbraco-forms/release-notes.md @@ -32,7 +32,7 @@ A second "form details picker" is also available, allowing editors the option of Forms ships it's themes and email templates as part of a razor class library for ease of distribution. With this release we make that feature [available to your own custom themes and templates](./developer/themes.md#shipping-themes-in-a-razor-class-library) (or those created by package developers) [#795](https://github.com/umbraco/Umbraco.Forms.Issues/issues/795). -The format for the date field can now be provided in configuration [#1276](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1276). +We've also made a couple of updates to the date picker field type. The format for the field can now be provided in configuration [#1276](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1276). And you can now override and localize the aria label provided for assistive technologies such as screen readers [https://github.com/umbraco/Umbraco.Forms.Issues/issues/1082](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1082). To allow finer control over editor permissions, we've introduced a "delete entries" setting available on users and user groups. Thus you can now give editors explicit permissions to view, edit or delete entries [#1303](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1303). From 2d6b5c3b3450c189fba2803360dc2608ee6ff948 Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Tue, 22 Oct 2024 06:38:01 +0200 Subject: [PATCH 13/18] Updated release notes --- .../developer/configuration/type-details.md | 1 + .../editor/creating-a-form/fieldtypes/date.md | 19 +++---------------- 13/umbraco-forms/release-notes.md | 10 ++++++++++ .../developer/configuration/type-details.md | 1 + .../developer/extending/setting-types.md | 5 +++-- .../editor/creating-a-form/fieldtypes/date.md | 19 +++---------------- 14/umbraco-forms/release-notes.md | 18 ++++++++++++++++++ .../developer/configuration/type-details.md | 1 + .../developer/extending/setting-types.md | 5 +++-- .../editor/creating-a-form/fieldtypes/date.md | 19 +++---------------- 10 files changed, 46 insertions(+), 52 deletions(-) diff --git a/13/umbraco-forms/developer/configuration/type-details.md b/13/umbraco-forms/developer/configuration/type-details.md index 631551c8340..3ea7f40e003 100644 --- a/13/umbraco-forms/developer/configuration/type-details.md +++ b/13/umbraco-forms/developer/configuration/type-details.md @@ -504,6 +504,7 @@ The intention is to be able to make available details such as IDs, aliases and p * `UseCurrentPage` * `DocType` * `ValueField` +* `CaptionField` * `ListGrandChildren` * `OrderBy` diff --git a/13/umbraco-forms/editor/creating-a-form/fieldtypes/date.md b/13/umbraco-forms/editor/creating-a-form/fieldtypes/date.md index 45f523966fb..8f53ace41b3 100644 --- a/13/umbraco-forms/editor/creating-a-form/fieldtypes/date.md +++ b/13/umbraco-forms/editor/creating-a-form/fieldtypes/date.md @@ -4,7 +4,7 @@ The date picker uses a front-end library called [Pikaday](https://github.com/dbu ![Date picker on frontend](images/date-picker.png) -Pikaday date picker can be localised based on the page the Form is rendered on. +Pikaday date picker can be localized based on the page the Form is rendered on. The date picker displays the picked date in the required locale. Using JavaScript, a hidden field is updated with a standard date format to send to the server for storing record submissions. This avoids the locale mixing up the dates. @@ -12,20 +12,7 @@ To achieve localized date, a Razor partial view is included at `/Views/Partials/ The **DatePicker.cshtml** includes the `moment-with-locales.min.js` library to help with the date locale formatting and the appropriate changes to Pikaday to support the locales. If you wish to use a different DatePicker component, edit the **DatePicker.cshtml** file as per your needs. -## Configure the Year range +## Configure the date picker -The Date picker has a configuration setting to control the number of years shown in the picker. The default value is 10 years. +The Date picker has [configuration settings](../../../developer/configuration/README.md#date-picker-field-type-configuration) to control the number of years shown in the picker and the date format. -You can configure the settings in the `appSettings.json` file: - -```json - "Forms": { - "FieldTypes": { - "DatePicker": { - "DatePickerYearRange": 10 - } - } - } -``` - -Update `DatePickerYearRange` to a higher number (for example: 100) to increase the numbers of years available in the Date picker. diff --git a/13/umbraco-forms/release-notes.md b/13/umbraco-forms/release-notes.md index cb8854f9138..08ccd80e4f0 100644 --- a/13/umbraco-forms/release-notes.md +++ b/13/umbraco-forms/release-notes.md @@ -19,18 +19,28 @@ This section contains the release notes for Umbraco Forms 13 including all chang #### [**13.3.0-rc1**](https://github.com/umbraco/Umbraco.Forms.Issues/issues?q=is%3Aissue+is%3Aclosed+label%3Arelease%2F13.3.0) **To Be Confirmed** +##### Multi-step forms + The 13.3 release of Forms contains features that can improve the user experience of completing multi-page forms. We've added the option for [editors to choose to display paging details on the forms](./editor/creating-a-form/form-settings.md#multi-page-forms). This will allow those completing forms to get a better understanding of progress as well as see details of the pages still to complete. [#281](https://github.com/umbraco/Umbraco.Forms.Issues/issues/281) [#648](https://github.com/umbraco/Umbraco.Forms.Issues/issues/648). These can be options are enabled and configured on a per-form basis by editors in the form settings section. We also provide a [configuration based toggle for the feature as a whole](./developer/configuration/README.md#enablemultipageformsettings). In this way editors can be given access to use the feature only once the styling or theme is prepared. +##### Ship themes in Razor Class Libraries + Forms ships it's themes and email templates as part of a razor class library for ease of distribution. With this release we make that feature [available to your own custom themes and templates](./developer/themes.md#shipping-themes-in-a-razor-class-library) (or those created by package developers) [#795](https://github.com/umbraco/Umbraco.Forms.Issues/issues/795). +##### Date picker field type + We've also made a couple of updates to the date picker field type. The format for the field can now be provided in configuration [#1276](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1276). And you can now override and localize the aria label provided for assistive technologies such as screen readers [https://github.com/umbraco/Umbraco.Forms.Issues/issues/1082](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1082). +##### Finer grained entries permissions + To allow finer control over editor permissions, we've introduced a "delete entries" setting available on users and user groups. Thus you can now give editors explicit permissions to view, edit or delete entries [#1303](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1303). +##### Other + Other bug fixes included in the release: * Fix issue with single checkbox triggering a condition on a field on a subsequent page [#1304](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1304). diff --git a/14/umbraco-forms/developer/configuration/type-details.md b/14/umbraco-forms/developer/configuration/type-details.md index 631551c8340..3ea7f40e003 100644 --- a/14/umbraco-forms/developer/configuration/type-details.md +++ b/14/umbraco-forms/developer/configuration/type-details.md @@ -504,6 +504,7 @@ The intention is to be able to make available details such as IDs, aliases and p * `UseCurrentPage` * `DocType` * `ValueField` +* `CaptionField` * `ListGrandChildren` * `OrderBy` diff --git a/14/umbraco-forms/developer/extending/setting-types.md b/14/umbraco-forms/developer/extending/setting-types.md index 1fc97022da6..515d43f7ad0 100644 --- a/14/umbraco-forms/developer/extending/setting-types.md +++ b/14/umbraco-forms/developer/extending/setting-types.md @@ -37,8 +37,9 @@ Some are defined with the Umbraco CMS and some ship with the Forms package. | Umb.PropertyEditorUi.Toggle | CMS | Uses a single checkbox for entry | | | Umb.PropertyEditorUi.UploadField | CMS | Used for selection of a file | The "Text file" prevalue source | | Forms.PropertyEditorUi.DataTypePicker | Forms | Uses a datatype picker | The "Umbraco prevalues" prevalue source | -| Forms.PropertyEditorUi.DocumentTypePicker | Forms | Uses a document picker | The "Umbraco nodes" prevalue source | -| Forms.PropertyEditorUi.DocumentMapper | Forms | Used for selection of a documenttype | The "Save as Umbraco node" workflow | +| Forms.PropertyEditorUi.DocumentTypePicker | Forms | Uses a documenttype picker | The "Umbraco nodes" prevalue source | +| Forms.PropertyEditorUi.DocumentTypeFieldPicker | Forms | Uses to select fields from a docummenttype | The "Umbraco nodes" prevalue source | +| Forms.PropertyEditorUi.DocumentMapper | Forms | Used for mapping of fields from a document type | The "Save as Umbraco node" workflow | | Forms.PropertyEditorUi.EmailTemplatePicker | Forms | Used for selection of an email template | The "Send email with Razor template" workflow | | Forms.PropertyEditorUi.FieldMapper | Forms | Used to map fields from a form to required aliases | The "Send to URL" workflow | | Forms.PropertyEditorUi.Password | Forms | Uses password text box for entry | | diff --git a/14/umbraco-forms/editor/creating-a-form/fieldtypes/date.md b/14/umbraco-forms/editor/creating-a-form/fieldtypes/date.md index 4bcd31c31dc..73f841dc893 100644 --- a/14/umbraco-forms/editor/creating-a-form/fieldtypes/date.md +++ b/14/umbraco-forms/editor/creating-a-form/fieldtypes/date.md @@ -4,7 +4,7 @@ The date picker uses a front-end library called [Pikaday](https://github.com/dbu ![Date picker on frontend](images/date-v14.png) -Pikaday date picker can be localised based on the page the Form is rendered on. +Pikaday date picker can be localized based on the page the Form is rendered on. The date picker displays the picked date in the required locale. Using JavaScript, a hidden field is updated with a standard date format to send to the server for storing record submissions. This avoids the locale mixing up the dates. @@ -12,20 +12,7 @@ To achieve localized date, a Razor partial view is included at `/Views/Partials/ The **DatePicker.cshtml** includes the `moment-with-locales.min.js` library to help with the date locale formatting and the appropriate changes to Pikaday to support the locales. If you wish to use a different DatePicker component, edit the **DatePicker.cshtml** file as per your needs. -## Configure the Year range +## Configure the date picker -The Date picker has a configuration setting to control the number of years shown in the picker. The default value is 10 years. +The Date picker has [configuration settings](../../../developer/configuration/README.md#date-picker-field-type-configuration) to control the number of years shown in the picker and the date format. -You can configure the settings in the `appSettings.json` file: - -```json - "Forms": { - "FieldTypes": { - "DatePicker": { - "DatePickerYearRange": 10 - } - } - } -``` - -Update `DatePickerYearRange` to a higher number (for example: 100) to increase the numbers of years available in the Date picker. diff --git a/14/umbraco-forms/release-notes.md b/14/umbraco-forms/release-notes.md index 6c3f0f99f76..2f38f4b52db 100644 --- a/14/umbraco-forms/release-notes.md +++ b/14/umbraco-forms/release-notes.md @@ -20,24 +20,42 @@ This section contains the release notes for Umbraco Forms 14 including all chang #### [**14.2.0-rc1**](https://github.com/umbraco/Umbraco.Forms.Issues/issues?q=is%3Aissue+is%3Aclosed+label%3Arelease%2F14.2.0) **To Be Confirmed** +##### Multi-step forms + The 14.2 release of Forms contains features that can improve the user experience of completing multi-page forms. We've added the option for [editors to choose to display paging details on the forms](./editor/creating-a-form/form-settings.md#multi-page-forms). This will allow those completing forms to get a better understanding of progress as well as see details of the pages still to complete. [#281](https://github.com/umbraco/Umbraco.Forms.Issues/issues/281) [#648](https://github.com/umbraco/Umbraco.Forms.Issues/issues/648). These can be options are enabled and configured on a per-form basis by editors in the form settings section. We also provide a [configuration based toggle for the feature as a whole](./developer/configuration/README.md#enablemultipageformsettings). In this way editors can be given access to use the feature only once the styling or theme is prepared. +##### Form picker enhancements + Another improvement if found in the [form picker property editors](./developer/property-editors.md). We now support restriction of which forms can be selected by folder rather than only by individual forms. A second "form details picker" is also available, allowing editors the option of selecting the form, theme and redirect via a single property editor. +##### Ship themes in Razor Class Libraries + Forms ships it's themes and email templates as part of a razor class library for ease of distribution. With this release we make that feature [available to your own custom themes and templates](./developer/themes.md#shipping-themes-in-a-razor-class-library) (or those created by package developers) [#795](https://github.com/umbraco/Umbraco.Forms.Issues/issues/795). +##### Date picker field type + We've also made a couple of updates to the date picker field type. The format for the field can now be provided in configuration [#1276](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1276). And you can now override and localize the aria label provided for assistive technologies such as screen readers [https://github.com/umbraco/Umbraco.Forms.Issues/issues/1082](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1082). +##### Umbraco documents prevalue source type + +When creating a prevalue source based on Umbraco documents, you can now select custom properties for the value or caption. Previously you had a choice of the content item's `Id`, `Key` or `Name`. We've extended this to allow the selection of any properties defined on the selected document type [#1195](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1195). + +##### Finer grained entries permissions + To allow finer control over editor permissions, we've introduced a "delete entries" setting available on users and user groups. Thus you can now give editors explicit permissions to view, edit or delete entries [#1303](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1303). +##### Backoffice localization + Finally thanks to a kind contribution from [Erik-Jan Westendorp](https://github.com/erikjanwestendorp) the backoffice is now translated into Dutch [#1264](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1264). +##### Other + Other bug fixes included in the release: * Reverted entry list to display most recent first. diff --git a/15/umbraco-forms/developer/configuration/type-details.md b/15/umbraco-forms/developer/configuration/type-details.md index 723648393c3..e8c869dfa58 100644 --- a/15/umbraco-forms/developer/configuration/type-details.md +++ b/15/umbraco-forms/developer/configuration/type-details.md @@ -502,6 +502,7 @@ The intention is to be able to make available details such as IDs, aliases and p * `UseCurrentPage` * `DocType` * `ValueField` +* `CaptionField` * `ListGrandChildren` * `OrderBy` diff --git a/15/umbraco-forms/developer/extending/setting-types.md b/15/umbraco-forms/developer/extending/setting-types.md index 1fc97022da6..515d43f7ad0 100644 --- a/15/umbraco-forms/developer/extending/setting-types.md +++ b/15/umbraco-forms/developer/extending/setting-types.md @@ -37,8 +37,9 @@ Some are defined with the Umbraco CMS and some ship with the Forms package. | Umb.PropertyEditorUi.Toggle | CMS | Uses a single checkbox for entry | | | Umb.PropertyEditorUi.UploadField | CMS | Used for selection of a file | The "Text file" prevalue source | | Forms.PropertyEditorUi.DataTypePicker | Forms | Uses a datatype picker | The "Umbraco prevalues" prevalue source | -| Forms.PropertyEditorUi.DocumentTypePicker | Forms | Uses a document picker | The "Umbraco nodes" prevalue source | -| Forms.PropertyEditorUi.DocumentMapper | Forms | Used for selection of a documenttype | The "Save as Umbraco node" workflow | +| Forms.PropertyEditorUi.DocumentTypePicker | Forms | Uses a documenttype picker | The "Umbraco nodes" prevalue source | +| Forms.PropertyEditorUi.DocumentTypeFieldPicker | Forms | Uses to select fields from a docummenttype | The "Umbraco nodes" prevalue source | +| Forms.PropertyEditorUi.DocumentMapper | Forms | Used for mapping of fields from a document type | The "Save as Umbraco node" workflow | | Forms.PropertyEditorUi.EmailTemplatePicker | Forms | Used for selection of an email template | The "Send email with Razor template" workflow | | Forms.PropertyEditorUi.FieldMapper | Forms | Used to map fields from a form to required aliases | The "Send to URL" workflow | | Forms.PropertyEditorUi.Password | Forms | Uses password text box for entry | | diff --git a/15/umbraco-forms/editor/creating-a-form/fieldtypes/date.md b/15/umbraco-forms/editor/creating-a-form/fieldtypes/date.md index 4bcd31c31dc..73f841dc893 100644 --- a/15/umbraco-forms/editor/creating-a-form/fieldtypes/date.md +++ b/15/umbraco-forms/editor/creating-a-form/fieldtypes/date.md @@ -4,7 +4,7 @@ The date picker uses a front-end library called [Pikaday](https://github.com/dbu ![Date picker on frontend](images/date-v14.png) -Pikaday date picker can be localised based on the page the Form is rendered on. +Pikaday date picker can be localized based on the page the Form is rendered on. The date picker displays the picked date in the required locale. Using JavaScript, a hidden field is updated with a standard date format to send to the server for storing record submissions. This avoids the locale mixing up the dates. @@ -12,20 +12,7 @@ To achieve localized date, a Razor partial view is included at `/Views/Partials/ The **DatePicker.cshtml** includes the `moment-with-locales.min.js` library to help with the date locale formatting and the appropriate changes to Pikaday to support the locales. If you wish to use a different DatePicker component, edit the **DatePicker.cshtml** file as per your needs. -## Configure the Year range +## Configure the date picker -The Date picker has a configuration setting to control the number of years shown in the picker. The default value is 10 years. +The Date picker has [configuration settings](../../../developer/configuration/README.md#date-picker-field-type-configuration) to control the number of years shown in the picker and the date format. -You can configure the settings in the `appSettings.json` file: - -```json - "Forms": { - "FieldTypes": { - "DatePicker": { - "DatePickerYearRange": 10 - } - } - } -``` - -Update `DatePickerYearRange` to a higher number (for example: 100) to increase the numbers of years available in the Date picker. From 97dbf50a6ab0dfba76b1c43c56e67d3323b0410f Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Tue, 22 Oct 2024 06:42:59 +0200 Subject: [PATCH 14/18] Dates and linting --- 13/umbraco-forms/release-notes.md | 2 +- 14/umbraco-forms/developer/extending/setting-types.md | 6 +++--- 14/umbraco-forms/release-notes.md | 4 ++-- 15/umbraco-forms/developer/extending/setting-types.md | 6 +++--- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/13/umbraco-forms/release-notes.md b/13/umbraco-forms/release-notes.md index 08ccd80e4f0..7222e9aa076 100644 --- a/13/umbraco-forms/release-notes.md +++ b/13/umbraco-forms/release-notes.md @@ -17,7 +17,7 @@ If you are upgrading to a new major version, you can find information about the This section contains the release notes for Umbraco Forms 13 including all changes for this version. -#### [**13.3.0-rc1**](https://github.com/umbraco/Umbraco.Forms.Issues/issues?q=is%3Aissue+is%3Aclosed+label%3Arelease%2F13.3.0) **To Be Confirmed** +#### [**13.3.0-rc1**](https://github.com/umbraco/Umbraco.Forms.Issues/issues?q=is%3Aissue+is%3Aclosed+label%3Arelease%2F13.3.0) **(October 25th 2024)** ##### Multi-step forms diff --git a/14/umbraco-forms/developer/extending/setting-types.md b/14/umbraco-forms/developer/extending/setting-types.md index 515d43f7ad0..fe1d84c4ba4 100644 --- a/14/umbraco-forms/developer/extending/setting-types.md +++ b/14/umbraco-forms/developer/extending/setting-types.md @@ -37,9 +37,9 @@ Some are defined with the Umbraco CMS and some ship with the Forms package. | Umb.PropertyEditorUi.Toggle | CMS | Uses a single checkbox for entry | | | Umb.PropertyEditorUi.UploadField | CMS | Used for selection of a file | The "Text file" prevalue source | | Forms.PropertyEditorUi.DataTypePicker | Forms | Uses a datatype picker | The "Umbraco prevalues" prevalue source | -| Forms.PropertyEditorUi.DocumentTypePicker | Forms | Uses a documenttype picker | The "Umbraco nodes" prevalue source | -| Forms.PropertyEditorUi.DocumentTypeFieldPicker | Forms | Uses to select fields from a docummenttype | The "Umbraco nodes" prevalue source | -| Forms.PropertyEditorUi.DocumentMapper | Forms | Used for mapping of fields from a document type | The "Save as Umbraco node" workflow | +| Forms.PropertyEditorUi.DocumentTypePicker | Forms | Uses a Document Type picker | The "Umbraco nodes" prevalue source | +| Forms.PropertyEditorUi.DocumentTypeFieldPicker | Forms | Uses to select fields from a Document Type | The "Umbraco nodes" prevalue source | +| Forms.PropertyEditorUi.DocumentMapper | Forms | Used for mapping of fields from a Document Type | The "Save as Umbraco node" workflow | | Forms.PropertyEditorUi.EmailTemplatePicker | Forms | Used for selection of an email template | The "Send email with Razor template" workflow | | Forms.PropertyEditorUi.FieldMapper | Forms | Used to map fields from a form to required aliases | The "Send to URL" workflow | | Forms.PropertyEditorUi.Password | Forms | Uses password text box for entry | | diff --git a/14/umbraco-forms/release-notes.md b/14/umbraco-forms/release-notes.md index 2f38f4b52db..9987847ef74 100644 --- a/14/umbraco-forms/release-notes.md +++ b/14/umbraco-forms/release-notes.md @@ -18,7 +18,7 @@ If you are upgrading to a new major version, you can find information about the This section contains the release notes for Umbraco Forms 14 including all changes for this version. -#### [**14.2.0-rc1**](https://github.com/umbraco/Umbraco.Forms.Issues/issues?q=is%3Aissue+is%3Aclosed+label%3Arelease%2F14.2.0) **To Be Confirmed** +#### [**14.2.0-rc1**](https://github.com/umbraco/Umbraco.Forms.Issues/issues?q=is%3Aissue+is%3Aclosed+label%3Arelease%2F14.2.0) **October 25th 2024** ##### Multi-step forms @@ -44,7 +44,7 @@ We've also made a couple of updates to the date picker field type. The format fo ##### Umbraco documents prevalue source type -When creating a prevalue source based on Umbraco documents, you can now select custom properties for the value or caption. Previously you had a choice of the content item's `Id`, `Key` or `Name`. We've extended this to allow the selection of any properties defined on the selected document type [#1195](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1195). +When creating a prevalue source based on Umbraco documents, you can now select custom properties for the value or caption. Previously you had a choice of the content item's `Id`, `Key` or `Name`. We've extended this to allow the selection of any properties defined on the selected Document Type [#1195](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1195). ##### Finer grained entries permissions diff --git a/15/umbraco-forms/developer/extending/setting-types.md b/15/umbraco-forms/developer/extending/setting-types.md index 515d43f7ad0..fe1d84c4ba4 100644 --- a/15/umbraco-forms/developer/extending/setting-types.md +++ b/15/umbraco-forms/developer/extending/setting-types.md @@ -37,9 +37,9 @@ Some are defined with the Umbraco CMS and some ship with the Forms package. | Umb.PropertyEditorUi.Toggle | CMS | Uses a single checkbox for entry | | | Umb.PropertyEditorUi.UploadField | CMS | Used for selection of a file | The "Text file" prevalue source | | Forms.PropertyEditorUi.DataTypePicker | Forms | Uses a datatype picker | The "Umbraco prevalues" prevalue source | -| Forms.PropertyEditorUi.DocumentTypePicker | Forms | Uses a documenttype picker | The "Umbraco nodes" prevalue source | -| Forms.PropertyEditorUi.DocumentTypeFieldPicker | Forms | Uses to select fields from a docummenttype | The "Umbraco nodes" prevalue source | -| Forms.PropertyEditorUi.DocumentMapper | Forms | Used for mapping of fields from a document type | The "Save as Umbraco node" workflow | +| Forms.PropertyEditorUi.DocumentTypePicker | Forms | Uses a Document Type picker | The "Umbraco nodes" prevalue source | +| Forms.PropertyEditorUi.DocumentTypeFieldPicker | Forms | Uses to select fields from a Document Type | The "Umbraco nodes" prevalue source | +| Forms.PropertyEditorUi.DocumentMapper | Forms | Used for mapping of fields from a Document Type | The "Save as Umbraco node" workflow | | Forms.PropertyEditorUi.EmailTemplatePicker | Forms | Used for selection of an email template | The "Send email with Razor template" workflow | | Forms.PropertyEditorUi.FieldMapper | Forms | Used to map fields from a form to required aliases | The "Send to URL" workflow | | Forms.PropertyEditorUi.Password | Forms | Uses password text box for entry | | From 00f1df7e2721f8b01adacd1c09986c12f9c10974 Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Tue, 22 Oct 2024 07:40:39 +0200 Subject: [PATCH 15/18] Added details of read-only partial views for field types. --- .../developer/extending/adding-a-fieldtype.md | 10 ++++++++++ .../developer/extending/adding-a-fieldtype.md | 10 ++++++++++ .../developer/extending/adding-a-fieldtype.md | 10 ++++++++++ 3 files changed, 30 insertions(+) diff --git a/13/umbraco-forms/developer/extending/adding-a-fieldtype.md b/13/umbraco-forms/developer/extending/adding-a-fieldtype.md index 04b710c8d27..ce860278077 100644 --- a/13/umbraco-forms/developer/extending/adding-a-fieldtype.md +++ b/13/umbraco-forms/developer/extending/adding-a-fieldtype.md @@ -106,6 +106,16 @@ If working with Umbraco 9 or earlier versions, you'll find the `Views\Partials\F For Umbraco 10 and above, we've moved to [distributing the theme as part of a Razor Class Library](../../upgrading/version-specific.md#views-and-client-side-files) so the folder won't exist. However, you can create it for your custom field type. If you would like to reference the partial views of the default theme, you can download them as mentioned in the [Themes](../themes.md) article. +### Read-only partial view + +When rendering a multi-page form, editors have the option to display a summary page where the entries can be viewed before submitting. + +To support this, a read-only view of the field is necessary. + +For most fields, nothing is required here, as the default read-only display defined in the built-in `ReadOnly.cshtml` file suffices. + +However, if you want to provide a custom read-only display for your field, you can do so by creating a second partial view named with a `.ReadOnly` suffix. For this example, we would create `FieldType.Slider.ReadOnly.cshtml`. + ## Umbraco backoffice view The final step involves building the HTML view which will be rendered in Umbraco as an example of how our end result will look: diff --git a/14/umbraco-forms/developer/extending/adding-a-fieldtype.md b/14/umbraco-forms/developer/extending/adding-a-fieldtype.md index eb82c021682..98d9bcd39a1 100644 --- a/14/umbraco-forms/developer/extending/adding-a-fieldtype.md +++ b/14/umbraco-forms/developer/extending/adding-a-fieldtype.md @@ -125,6 +125,16 @@ If working with Umbraco 9 or earlier versions, you'll find the `Views\Partials\F For Umbraco 10 and above, we've moved to [distributing the theme as part of a Razor Class Library](../../upgrading/version-specific.md#views-and-client-side-files) so the folder won't exist. However, you can create it for your custom field type. If you would like to reference the partial views of the default theme, you can download them as mentioned in the [Themes](../themes.md) article. +### Read-only partial view + +When rendering a multi-page form, editors have the option to display a summary page where the entries can be viewed before submitting. + +To support this, a read-only view of the field is necessary. + +For most fields, nothing is required here, as the default read-only display defined in the built-in `ReadOnly.cshtml` file suffices. + +However, if you want to provide a custom read-only display for your field, you can do so by creating a second partial view named with a `.ReadOnly` suffix. For this example, we would create `FieldType.Slider.ReadOnly.cshtml`. + ## Field Settings Field settings will be managed in the backoffice by editors who will create forms using the custom field type. These settings can be added to the C# class as properties with a `Setting` attribute: diff --git a/15/umbraco-forms/developer/extending/adding-a-fieldtype.md b/15/umbraco-forms/developer/extending/adding-a-fieldtype.md index df26c3bca9a..b49eed6f15d 100644 --- a/15/umbraco-forms/developer/extending/adding-a-fieldtype.md +++ b/15/umbraco-forms/developer/extending/adding-a-fieldtype.md @@ -125,6 +125,16 @@ If working with Umbraco 9 or earlier versions, you'll find the `Views\Partials\F For Umbraco 10 and above, we've moved to [distributing the theme as part of a Razor Class Library](../../upgrading/version-specific/#views-and-client-side-files) so the folder won't exist. However, you can create it for your custom field type. If you would like to reference the partial views of the default theme, you can download them as mentioned in the [Themes](../themes.md) article. +### Read-only partial view + +When rendering a multi-page form, editors have the option to display a summary page where the entries can be viewed before submitting. + +To support this, a read-only view of the field is necessary. + +For most fields, nothing is required here, as the default read-only display defined in the built-in `ReadOnly.cshtml` file suffices. + +However, if you want to provide a custom read-only display for your field, you can do so by creating a second partial view named with a `.ReadOnly` suffix. For this example, we would create `FieldType.Slider.ReadOnly.cshtml`. + ## Field Settings Field settings will be managed in the backoffice by editors who will create forms using the custom field type. These settings can be added to the C# class as properties with a `Setting` attribute: From 49e97f84a736fdd4795c8aeab30b8f9800a385d3 Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Tue, 22 Oct 2024 08:01:04 +0200 Subject: [PATCH 16/18] Linting --- 13/umbraco-forms/developer/extending/adding-a-fieldtype.md | 2 +- 14/umbraco-forms/developer/extending/adding-a-fieldtype.md | 2 +- 15/umbraco-forms/developer/extending/adding-a-fieldtype.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/13/umbraco-forms/developer/extending/adding-a-fieldtype.md b/13/umbraco-forms/developer/extending/adding-a-fieldtype.md index ce860278077..9f8f2027f04 100644 --- a/13/umbraco-forms/developer/extending/adding-a-fieldtype.md +++ b/13/umbraco-forms/developer/extending/adding-a-fieldtype.md @@ -114,7 +114,7 @@ To support this, a read-only view of the field is necessary. For most fields, nothing is required here, as the default read-only display defined in the built-in `ReadOnly.cshtml` file suffices. -However, if you want to provide a custom read-only display for your field, you can do so by creating a second partial view named with a `.ReadOnly` suffix. For this example, we would create `FieldType.Slider.ReadOnly.cshtml`. +However, if you want to provide a custom read-only display for your field, you can do so by creating a second partial view. This should be named with a `.ReadOnly` suffix. For this example, we would create `FieldType.Slider.ReadOnly.cshtml`. ## Umbraco backoffice view diff --git a/14/umbraco-forms/developer/extending/adding-a-fieldtype.md b/14/umbraco-forms/developer/extending/adding-a-fieldtype.md index 98d9bcd39a1..df2673e1151 100644 --- a/14/umbraco-forms/developer/extending/adding-a-fieldtype.md +++ b/14/umbraco-forms/developer/extending/adding-a-fieldtype.md @@ -133,7 +133,7 @@ To support this, a read-only view of the field is necessary. For most fields, nothing is required here, as the default read-only display defined in the built-in `ReadOnly.cshtml` file suffices. -However, if you want to provide a custom read-only display for your field, you can do so by creating a second partial view named with a `.ReadOnly` suffix. For this example, we would create `FieldType.Slider.ReadOnly.cshtml`. +However, if you want to provide a custom read-only display for your field, you can do so by creating a second partial view. This should be named with a `.ReadOnly` suffix. For this example, we would create `FieldType.Slider.ReadOnly.cshtml`. ## Field Settings diff --git a/15/umbraco-forms/developer/extending/adding-a-fieldtype.md b/15/umbraco-forms/developer/extending/adding-a-fieldtype.md index b49eed6f15d..c7c8c7bf998 100644 --- a/15/umbraco-forms/developer/extending/adding-a-fieldtype.md +++ b/15/umbraco-forms/developer/extending/adding-a-fieldtype.md @@ -133,7 +133,7 @@ To support this, a read-only view of the field is necessary. For most fields, nothing is required here, as the default read-only display defined in the built-in `ReadOnly.cshtml` file suffices. -However, if you want to provide a custom read-only display for your field, you can do so by creating a second partial view named with a `.ReadOnly` suffix. For this example, we would create `FieldType.Slider.ReadOnly.cshtml`. +However, if you want to provide a custom read-only display for your field, you can do so by creating a second partial view. This should be named with a `.ReadOnly` suffix. For this example, we would create `FieldType.Slider.ReadOnly.cshtml`. ## Field Settings From c57ba60237e9063055093e421cca41c75fee7090 Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Tue, 22 Oct 2024 14:20:47 +0200 Subject: [PATCH 17/18] Apply suggestions from code review Co-authored-by: sofietoft --- .../developer/configuration/README.md | 2 +- .../developer/extending/adding-a-fieldtype.md | 2 +- 13/umbraco-forms/developer/themes.md | 15 ++++++++------- 13/umbraco-forms/release-notes.md | 8 ++++---- .../developer/configuration/README.md | 2 +- .../developer/extending/adding-a-fieldtype.md | 2 +- 14/umbraco-forms/developer/property-editors.md | 14 +++++++------- 14/umbraco-forms/developer/themes.md | 15 ++++++++------- 14/umbraco-forms/release-notes.md | 6 +++--- .../developer/configuration/README.md | 2 +- .../developer/extending/adding-a-fieldtype.md | 2 +- 15/umbraco-forms/developer/property-editors.md | 12 ++++++------ 15/umbraco-forms/developer/themes.md | 15 ++++++++------- 13 files changed, 50 insertions(+), 47 deletions(-) diff --git a/13/umbraco-forms/developer/configuration/README.md b/13/umbraco-forms/developer/configuration/README.md index aa3771648d4..20e332f1c09 100644 --- a/13/umbraco-forms/developer/configuration/README.md +++ b/13/umbraco-forms/developer/configuration/README.md @@ -526,7 +526,7 @@ A custom date format can be provided in [momentjs format](https://momentjscom.re #### DatePickerFormatForValidation -If a custom date format is provided it will be used on the client-side. A matching string in [C# date format](https://learn.microsoft.com/en-us/dotnet/standard/base-types/custom-date-and-time-format-strings) should be provided, in order that server-side validation will match the expected format of the entry. +If a custom date format is provided it will be used on the client-side. A matching string in [C# date format](https://learn.microsoft.com/en-us/dotnet/standard/base-types/custom-date-and-time-format-strings) should be provided, so that server-side validation will match the expected format of the entry. ### reCAPTCHA v2 field type configuration diff --git a/13/umbraco-forms/developer/extending/adding-a-fieldtype.md b/13/umbraco-forms/developer/extending/adding-a-fieldtype.md index 9f8f2027f04..844487fb7c7 100644 --- a/13/umbraco-forms/developer/extending/adding-a-fieldtype.md +++ b/13/umbraco-forms/developer/extending/adding-a-fieldtype.md @@ -114,7 +114,7 @@ To support this, a read-only view of the field is necessary. For most fields, nothing is required here, as the default read-only display defined in the built-in `ReadOnly.cshtml` file suffices. -However, if you want to provide a custom read-only display for your field, you can do so by creating a second partial view. This should be named with a `.ReadOnly` suffix. For this example, we would create `FieldType.Slider.ReadOnly.cshtml`. +However, if you want to provide a custom read-only display for your field, you can do so by creating a second partial view. This should be named with a `.ReadOnly` suffix. For this example, you would create `FieldType.Slider.ReadOnly.cshtml`. ## Umbraco backoffice view diff --git a/13/umbraco-forms/developer/themes.md b/13/umbraco-forms/developer/themes.md index b6b3aa680da..a94283d8954 100644 --- a/13/umbraco-forms/developer/themes.md +++ b/13/umbraco-forms/developer/themes.md @@ -45,11 +45,12 @@ If adding or amending client-side scripts, you need to copy the `Script.cshtml` Umbraco Forms provides it's built-in themes as part of a Razor Class Library for ease of distribution. This can be useful for custom themes, particularly those used in multiple solutions or released as an Umbraco package. -From Forms 13.3 it's possible to do this for custom themes. +From Forms 13.3 it is possible to do this for custom themes. -Firstly you'll create a new Razor Class Library project to hold the theme. You then create the necessary partial views for your theme as usual within `Views\Partials\Forms\Themes\`. - -You then need to provide the names of the files in your theme via an implementation of `ITheme`. For example, if only overriding a single file, your class would look like this: +1. Create a new Razor Class Library project to hold the theme. +2. Create the necessary Partial Views for your theme within `Views\Partials\Forms\Themes\`. +3. Provide the names of the files in your theme via an implementation of `ITheme`. + * For example, if only overriding a single file, your class would look like the code snippet below: ```csharp using Umbraco.Forms.Core.Interfaces; @@ -67,7 +68,7 @@ public class MyCustomTheme : ITheme } ``` -In your project that consumes the theme, you register the ones you want to use via a composer: +4. Register the themes you want to use via a composer: ```csharp public class MyComposer : IComposer @@ -80,11 +81,11 @@ public class MyComposer : IComposer } ``` -With that in place your theme will be picked up for selection in the theme picker. And the partial view files included will be used when rendering forms. +Your theme will now be available in the Theme Picker and the partial view files will be used when rendering forms. #### Email Templates -Email templates provided for the send email workflow can be provided in a Razor Class Library in a similar way. +Email templates provided for the send email workflow can be provided in a Razor Class Library similar to the Theme files. The partial view will be created in `Views\Partials\Forms\Emails`. diff --git a/13/umbraco-forms/release-notes.md b/13/umbraco-forms/release-notes.md index 7222e9aa076..5fc40b291cd 100644 --- a/13/umbraco-forms/release-notes.md +++ b/13/umbraco-forms/release-notes.md @@ -23,9 +23,9 @@ This section contains the release notes for Umbraco Forms 13 including all chang The 13.3 release of Forms contains features that can improve the user experience of completing multi-page forms. -We've added the option for [editors to choose to display paging details on the forms](./editor/creating-a-form/form-settings.md#multi-page-forms). This will allow those completing forms to get a better understanding of progress as well as see details of the pages still to complete. [#281](https://github.com/umbraco/Umbraco.Forms.Issues/issues/281) [#648](https://github.com/umbraco/Umbraco.Forms.Issues/issues/648). +We have added the option for [editors to choose to display paging details on the forms](./editor/creating-a-form/form-settings.md#multi-page-forms). This will allow those completing forms to get a better understanding of progress as well as see details of the pages still to be completed. [#281](https://github.com/umbraco/Umbraco.Forms.Issues/issues/281) [#648](https://github.com/umbraco/Umbraco.Forms.Issues/issues/648). -These can be options are enabled and configured on a per-form basis by editors in the form settings section. We also provide a [configuration based toggle for the feature as a whole](./developer/configuration/README.md#enablemultipageformsettings). In this way editors can be given access to use the feature only once the styling or theme is prepared. +These options are enabled and configured by editors in the Forms settings section on a per-form basis. We also provide a [configuration-based toggle for the feature as a whole](./developer/configuration/README.md#enablemultipageformsettings). In this way, editors can be given access to use the feature only once the styling or theme is prepared. ##### Ship themes in Razor Class Libraries @@ -33,11 +33,11 @@ Forms ships it's themes and email templates as part of a razor class library for ##### Date picker field type -We've also made a couple of updates to the date picker field type. The format for the field can now be provided in configuration [#1276](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1276). And you can now override and localize the aria label provided for assistive technologies such as screen readers [https://github.com/umbraco/Umbraco.Forms.Issues/issues/1082](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1082). +We have made a couple of updates to the Date Picker field type. The format for the field can now be provided in configuration [#1276](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1276). And you can now override and localize the aria-label provided for assistive technologies such as screen readers [https://github.com/umbraco/Umbraco.Forms.Issues/issues/1082](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1082). ##### Finer grained entries permissions -To allow finer control over editor permissions, we've introduced a "delete entries" setting available on users and user groups. Thus you can now give editors explicit permissions to view, edit or delete entries [#1303](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1303). +To allow finer control over editor permissions, we have introduced a "delete entries" setting for users and user groups. Thus you can now give editors explicit permissions to view, edit, or delete entries [#1303](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1303). ##### Other diff --git a/14/umbraco-forms/developer/configuration/README.md b/14/umbraco-forms/developer/configuration/README.md index 34b8e69b4b6..0bdbc3fe61f 100644 --- a/14/umbraco-forms/developer/configuration/README.md +++ b/14/umbraco-forms/developer/configuration/README.md @@ -523,7 +523,7 @@ A custom date format can be provided in [momentjs format](https://momentjscom.re #### DatePickerFormatForValidation -If a custom date format is provided it will be used on the client-side. A matching string in [C# date format](https://learn.microsoft.com/en-us/dotnet/standard/base-types/custom-date-and-time-format-strings) should be provided, in order that server-side validation will match the expected format of the entry. +If a custom date format is provided it will be used on the client-side. A matching string in [C# date format](https://learn.microsoft.com/en-us/dotnet/standard/base-types/custom-date-and-time-format-strings) should be provided, so that server-side validation will match the expected format of the entry. ### reCAPTCHA v2 field type configuration diff --git a/14/umbraco-forms/developer/extending/adding-a-fieldtype.md b/14/umbraco-forms/developer/extending/adding-a-fieldtype.md index df2673e1151..4d09dc48899 100644 --- a/14/umbraco-forms/developer/extending/adding-a-fieldtype.md +++ b/14/umbraco-forms/developer/extending/adding-a-fieldtype.md @@ -133,7 +133,7 @@ To support this, a read-only view of the field is necessary. For most fields, nothing is required here, as the default read-only display defined in the built-in `ReadOnly.cshtml` file suffices. -However, if you want to provide a custom read-only display for your field, you can do so by creating a second partial view. This should be named with a `.ReadOnly` suffix. For this example, we would create `FieldType.Slider.ReadOnly.cshtml`. +However, if you want to provide a custom read-only display for your field, you can do so by creating a second partial view. This should be named with a `.ReadOnly` suffix. For this example, you would create `FieldType.Slider.ReadOnly.cshtml`. ## Field Settings diff --git a/14/umbraco-forms/developer/property-editors.md b/14/umbraco-forms/developer/property-editors.md index 84dff55f0fb..5789e0b4a17 100644 --- a/14/umbraco-forms/developer/property-editors.md +++ b/14/umbraco-forms/developer/property-editors.md @@ -1,6 +1,6 @@ # Property Editors -When forms are created, editors will want to add them to pages in Umbraco. To do this they need a Document Type with a property that uses a datatype based on a form picker property editor. +When forms are created, editors will want to add them to pages in Umbraco. To do this they need a Document Type with a property that uses a Data Type based on a Form Picker property editor. Umbraco Forms provides three variations of a form picker. @@ -8,25 +8,25 @@ Umbraco Forms provides three variations of a form picker. Most commonly used is **Form Picker (single)**. This will allow the editor to select a single form for display on page. -Rarely but feasibly, you'll have a requirement to present multiple forms on a page. Should this be appropriate, you can use **Form Picker (multiple)**. +Rarely but feasibly, you will have a requirement to present multiple forms on a page. Should this be appropriate, you can use **Form Picker (multiple)**. {% hint style="info" %} Internally this is used for presenting the list of "Allowed forms" you can select when setting up a form picker datatype. {% endhint %} -Finally you can provide further flexibility for the editor to select not only a form, but also the theme and redirect as well. For this you'll use the **Form Details Picker**. +Finally you can provide further flexibility for the editor to select not only a form, but also the theme and redirect as well. For this you will use the **Form Details Picker**. ## Configuring the Data Type -Each property editor allows you to restrict the forms that can be chosen with the datatype. You do this by setting either or both of the list of "Allowed folders" or "Allowed forms". +Each property editor allows you to restrict the forms that can be chosen with the Data Type. You do this by setting either or both of the list of "Allowed folders" or "Allowed forms".

Form Picker DataType Configuration

-THe "Form Details Picker" also allow you to select whether theme or redirect selection is available. +The "Form Details Picker" also allows you to select whether a theme or redirect selection is available. ## Property Value Conversion -The type of a property based on the form picker presented in a Razor class library is as followes: +The type of a property based on the Form Picker presented in a Razor class library is as follows: | Option | Description | | -------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | @@ -36,4 +36,4 @@ The type of a property based on the form picker presented in a Razor class libra ## Content Delivery API Expansion -Each reference to a form supports expansion via the Umbraco Content Delivery API, as described [here](./ajaxforms.md#working-with-the-cms-content-delivery-api). +Each reference to a form supports expansion via the Umbraco Content Delivery API, as described in the [Working with the CMS Content Delivery API](./ajaxforms.md#working-with-the-cms-content-delivery-api) article. diff --git a/14/umbraco-forms/developer/themes.md b/14/umbraco-forms/developer/themes.md index c1191c0dd1f..c13c783146a 100644 --- a/14/umbraco-forms/developer/themes.md +++ b/14/umbraco-forms/developer/themes.md @@ -46,11 +46,12 @@ If adding or amending client-side scripts, you need to copy the `Script.cshtml` Umbraco Forms provides it's built-in themes as part of a Razor Class Library for ease of distribution. This can be useful for custom themes, particularly those used in multiple solutions or released as an Umbraco package. -From Forms 14.2 it's possible to do this for custom themes. +From Forms 14.2 it is possible to do this for custom themes. -Firstly you'll create a new Razor Class Library project to hold the theme. You then create the necessary partial views for your theme as usual within `Views\Partials\Forms\Themes\`. - -You then need to provide the names of the files in your theme via an implementation of `ITheme`. For example, if only overriding a single file, your class would look like this: +1. Create a new Razor Class Library project to hold the theme. +2. Create the necessary Partial Views for your theme within `Views\Partials\Forms\Themes\`. +3. Provide the names of the files in your theme via an implementation of `ITheme`. + * For example, if only overriding a single file, your class would look like the code snippet below: ```csharp using Umbraco.Forms.Core.Interfaces; @@ -68,7 +69,7 @@ public class MyCustomTheme : ITheme } ``` -In your project that consumes the theme, you register the ones you want to use via a composer: +4. Register the themes you want to use via a composer: ```csharp public class MyComposer : IComposer @@ -81,11 +82,11 @@ public class MyComposer : IComposer } ``` -With that in place your theme will be picked up for selection in the theme picker. And the partial view files included will be used when rendering forms. +Your theme will now be available in the Theme Picker and the partial view files will be used when rendering forms. #### Email Templates -Email templates provided for the send email workflow can be provided in a Razor Class Library in a similar way. +Email templates provided for the send email workflow can be provided in a Razor Class Library similar to the Themes files. The partial view will be created in `Views\Partials\Forms\Emails`. diff --git a/14/umbraco-forms/release-notes.md b/14/umbraco-forms/release-notes.md index 9987847ef74..a0dcde5e368 100644 --- a/14/umbraco-forms/release-notes.md +++ b/14/umbraco-forms/release-notes.md @@ -24,9 +24,9 @@ This section contains the release notes for Umbraco Forms 14 including all chang The 14.2 release of Forms contains features that can improve the user experience of completing multi-page forms. -We've added the option for [editors to choose to display paging details on the forms](./editor/creating-a-form/form-settings.md#multi-page-forms). This will allow those completing forms to get a better understanding of progress as well as see details of the pages still to complete. [#281](https://github.com/umbraco/Umbraco.Forms.Issues/issues/281) [#648](https://github.com/umbraco/Umbraco.Forms.Issues/issues/648). +We have added the option for [editors to choose to display paging details on the forms](./editor/creating-a-form/form-settings.md#multi-page-forms). This will allow those completing forms to get a better understanding of progress as well as see details of the pages still to be completed. [#281](https://github.com/umbraco/Umbraco.Forms.Issues/issues/281) [#648](https://github.com/umbraco/Umbraco.Forms.Issues/issues/648). -These can be options are enabled and configured on a per-form basis by editors in the form settings section. We also provide a [configuration based toggle for the feature as a whole](./developer/configuration/README.md#enablemultipageformsettings). In this way editors can be given access to use the feature only once the styling or theme is prepared. +These options are enabled and configured by editors in the Forms settings section on a per-form basis. We also provide a [configuration-based toggle for the feature as a whole](./developer/configuration/README.md#enablemultipageformsettings). In this way, editors can be given access to use the feature only once the styling or theme is prepared. ##### Form picker enhancements @@ -48,7 +48,7 @@ When creating a prevalue source based on Umbraco documents, you can now select c ##### Finer grained entries permissions -To allow finer control over editor permissions, we've introduced a "delete entries" setting available on users and user groups. Thus you can now give editors explicit permissions to view, edit or delete entries [#1303](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1303). +To allow finer control over editor permissions, we have introduced a "delete entries" setting for users and user groups. Thus you can now give editors explicit permissions to view, edit, or delete entries [#1303](https://github.com/umbraco/Umbraco.Forms.Issues/issues/1303). ##### Backoffice localization diff --git a/15/umbraco-forms/developer/configuration/README.md b/15/umbraco-forms/developer/configuration/README.md index aa518142c39..2c14d6a7d17 100644 --- a/15/umbraco-forms/developer/configuration/README.md +++ b/15/umbraco-forms/developer/configuration/README.md @@ -516,7 +516,7 @@ A custom date format can be provided in [momentjs format](https://momentjscom.re #### DatePickerFormatForValidation -If a custom date format is provided it will be used on the client-side. A matching string in [C# date format](https://learn.microsoft.com/en-us/dotnet/standard/base-types/custom-date-and-time-format-strings) should be provided, in order that server-side validation will match the expected format of the entry. +If a custom date format is provided it will be used on the client side. A matching string in [C# date format](https://learn.microsoft.com/en-us/dotnet/standard/base-types/custom-date-and-time-format-strings) should be provided, so that server-side validation will match the expected format of the entry. ### reCAPTCHA v2 field type configuration diff --git a/15/umbraco-forms/developer/extending/adding-a-fieldtype.md b/15/umbraco-forms/developer/extending/adding-a-fieldtype.md index c7c8c7bf998..a14f7feca06 100644 --- a/15/umbraco-forms/developer/extending/adding-a-fieldtype.md +++ b/15/umbraco-forms/developer/extending/adding-a-fieldtype.md @@ -133,7 +133,7 @@ To support this, a read-only view of the field is necessary. For most fields, nothing is required here, as the default read-only display defined in the built-in `ReadOnly.cshtml` file suffices. -However, if you want to provide a custom read-only display for your field, you can do so by creating a second partial view. This should be named with a `.ReadOnly` suffix. For this example, we would create `FieldType.Slider.ReadOnly.cshtml`. +However, if you want to provide a custom read-only display for your field, you can do so by creating a second partial view. This should be named with a `.ReadOnly` suffix. For this example, you would create `FieldType.Slider.ReadOnly.cshtml`. ## Field Settings diff --git a/15/umbraco-forms/developer/property-editors.md b/15/umbraco-forms/developer/property-editors.md index 69cb9bf0fcd..6533d12e5be 100644 --- a/15/umbraco-forms/developer/property-editors.md +++ b/15/umbraco-forms/developer/property-editors.md @@ -1,6 +1,6 @@ # Property Editors -When forms are created, editors will want to add them to pages in Umbraco. To do this they need a Document Type with a property that uses a datatype based on a form picker property editor. +When forms are created, editors will want to add them to pages in Umbraco. To do this they need a Document Type with a property that uses a Data Type based on a Form Picker property editor. Umbraco Forms provides three variations of a form picker. @@ -8,25 +8,25 @@ Umbraco Forms provides three variations of a form picker. Most commonly used is **Form Picker (single)**. This will allow the editor to select a single form for display on page. -Rarely but feasibly, you'll have a requirement to present multiple forms on a page. Should this be appropriate, you can use **Form Picker (multiple)**. +Rarely but feasibly, you will have a requirement to present multiple forms on a page. Should this be appropriate, you can use **Form Picker (multiple)**. {% hint style="info" %} Internally this is used for presenting the list of "Allowed forms" you can select when setting up a form picker datatype. {% endhint %} -Finally you can provide further flexibility for the editor to select not only a form, but also the theme and redirect as well. For this you'll use the **Form Details Picker**. +Finally you can provide further flexibility for the editor to select not only a form but also the theme and redirect as well. For this you will use the **Form Details Picker**. ## Configuring the Data Type -Each property editor allows you to restrict the forms that can be chosen with the datatype. You do this by setting either or both of the list of "Allowed folders" or "Allowed forms". +Each property editor allows you to restrict the forms that can be chosen with the Data Type. You do this by setting either or both of the list of "Allowed folders" or "Allowed forms".

Form Picker DataType Configuration

-THe "Form Details Picker" also allow you to select whether theme or redirect selection is available. +The "Form Details Picker" also allows you to select whether a theme or redirect selection is available. ## Property Value Conversion -The type of a property based on the form picker presented in a Razor class library is as followes: +The type of a property based on the Form Picker presented in a Razor class library is as follows: | Option | Description | | -------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | diff --git a/15/umbraco-forms/developer/themes.md b/15/umbraco-forms/developer/themes.md index 0b1778e1f47..1afe0666b37 100644 --- a/15/umbraco-forms/developer/themes.md +++ b/15/umbraco-forms/developer/themes.md @@ -46,11 +46,12 @@ If adding or amending client-side scripts, you need to copy the `Script.cshtml` Umbraco Forms provides it's built-in themes as part of a Razor Class Library for ease of distribution. This can be useful for custom themes, particularly those used in multiple solutions or released as an Umbraco package. -It's also possible to do this for custom themes. +It is also possible to do this for custom themes. -Firstly you'll create a new Razor Class Library project to hold the theme. You then create the necessary partial views for your theme as usual within `Views\Partials\Forms\Themes\`. - -You then need to provide the names of the files in your theme via an implementation of `ITheme`. For example, if only overriding a single file, your class would look like this: +1. Create a new Razor Class Library project to hold the theme. +2. Create the necessary Partial Views for your theme within `Views\Partials\Forms\Themes\`. +3. Provide the names of the files in your theme via an implementation of `ITheme`. + * For example, if only overriding a single file, your class would look like the code snippet below: ```csharp using Umbraco.Forms.Core.Interfaces; @@ -68,7 +69,7 @@ public class MyCustomTheme : ITheme } ``` -In your project that consumes the theme, you register the ones you want to use via a composer: +4. Register the themes you want to use via a composer: ```csharp public class MyComposer : IComposer @@ -81,11 +82,11 @@ public class MyComposer : IComposer } ``` -With that in place your theme will be picked up for selection in the theme picker. And the partial view files included will be used when rendering forms. +Your theme will now be available in the Theme Picker and the partial view files will be used when rendering forms. #### Email Templates -Email templates provided for the send email workflow can be provided in a Razor Class Library in a similar way. +Email templates provided for the send email workflow can be provided in a Razor Class Library similar to the Theme files. The partial view will be created in `Views\Partials\Forms\Emails`. From aba18014260d8c6222a1bf5d04729bc25edadcf5 Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Tue, 22 Oct 2024 14:25:09 +0200 Subject: [PATCH 18/18] Removed "new". --- 13/umbraco-forms/developer/configuration/README.md | 10 +++++----- 14/umbraco-forms/developer/configuration/README.md | 10 +++++----- 15/umbraco-forms/developer/configuration/README.md | 10 +++++----- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/13/umbraco-forms/developer/configuration/README.md b/13/umbraco-forms/developer/configuration/README.md index aa3771648d4..2ca644b553c 100644 --- a/13/umbraco-forms/developer/configuration/README.md +++ b/13/umbraco-forms/developer/configuration/README.md @@ -315,23 +315,23 @@ Applies as per `DaysToRetainSubmittedRecordsFor` but for records in the 'rejecte ### ShowPagingOnMultiPageForms -Defines whether and where paging details are displayed for new multi-page forms. +Defines whether and where paging details are displayed for multi-page forms. ### PagingDetailsFormat -Defines the paging details format for new multi-page forms. +Defines the paging details format for multi-page forms. ### PageCaptionFormat -Defines the page caption format for new multi-page forms. +Defines the page caption format for multi-page forms. ### ShowSummaryPageOnMultiPageForms -Defines whether summary pages are on by default for new multi-page forms. +Defines whether summary pages are on by default for multi-page forms. ### SummaryLabel -Defines the default summary label for new multi-page forms. +Defines the default summary label for multi-page forms. ## Package options configuration diff --git a/14/umbraco-forms/developer/configuration/README.md b/14/umbraco-forms/developer/configuration/README.md index 34b8e69b4b6..a9664dba4da 100644 --- a/14/umbraco-forms/developer/configuration/README.md +++ b/14/umbraco-forms/developer/configuration/README.md @@ -315,23 +315,23 @@ Applies as per `DaysToRetainSubmittedRecordsFor` but for records in the 'rejecte ### ShowPagingOnMultiPageForms -Defines whether and where paging details are displayed for new multi-page forms. +Defines whether and where paging details are displayed for multi-page forms. ### PagingDetailsFormat -Defines the paging details format for new multi-page forms. +Defines the paging details format for multi-page forms. ### PageCaptionFormat -Defines the page caption format for new multi-page forms. +Defines the page caption format for multi-page forms. ### ShowSummaryPageOnMultiPageForms -Defines whether summary pages are on by default for new multi-page forms. +Defines whether summary pages are on by default for multi-page forms. ### SummaryLabel -Defines the default summary label for new multi-page forms. +Defines the default summary label for multi-page forms. ## Package options configuration diff --git a/15/umbraco-forms/developer/configuration/README.md b/15/umbraco-forms/developer/configuration/README.md index aa518142c39..b4f20d36cb2 100644 --- a/15/umbraco-forms/developer/configuration/README.md +++ b/15/umbraco-forms/developer/configuration/README.md @@ -310,23 +310,23 @@ Applies as per `DaysToRetainSubmittedRecordsFor` but for records in the 'rejecte ### ShowPagingOnMultiPageForms -Defines whether and where paging details are displayed for new multi-page forms. +Defines whether and where paging details are displayed for multi-page forms. ### PagingDetailsFormat -Defines the paging details format for new multi-page forms. +Defines the paging details format for multi-page forms. ### PageCaptionFormat -Defines the page caption format for new multi-page forms. +Defines the page caption format for multi-page forms. ### ShowSummaryPageOnMultiPageForms -Defines whether summary pages are on by default for new multi-page forms. +Defines whether summary pages are on by default for multi-page forms. ### SummaryLabel -Defines the default summary label for new multi-page forms. +Defines the default summary label for multi-page forms. ## Package options configuration