From acd4cdef0883dd86e2850f745c666af18667fc27 Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Mon, 1 Dec 2014 23:04:52 -0800 Subject: [PATCH] Maintaining EmailField state after postback and adding default value field. --- .../Drivers/EmailFieldDriver.cs | 29 +++++++++++++++++-- .../Drivers/TextFieldDriver.cs | 1 + .../Views/Element-Form-EmailField.cshtml | 1 + 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/EmailFieldDriver.cs b/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/EmailFieldDriver.cs index 5260ccc78..b3b1f4f3f 100644 --- a/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/EmailFieldDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/EmailFieldDriver.cs @@ -1,20 +1,41 @@ using Orchard.DynamicForms.Elements; using Orchard.Forms.Services; +using Orchard.Layouts.Framework.Display; using Orchard.Layouts.Framework.Drivers; +using Orchard.Tokens; using DescribeContext = Orchard.Forms.Services.DescribeContext; namespace Orchard.DynamicForms.Drivers { public class EmailFieldDriver : FormsElementDriver{ - public EmailFieldDriver(IFormManager formManager) : base(formManager) {} + private readonly ITokenizer _tokenizer; + + public EmailFieldDriver(IFormManager formManager, ITokenizer tokenizer) : base(formManager) { + _tokenizer = tokenizer; + } protected override EditorResult OnBuildEditor(EmailField element, ElementEditorContext context) { var autoLabelEditor = BuildForm(context, "AutoLabel"); + var emailFieldEditor = BuildForm(context, "EmailField"); var emailFieldValidation = BuildForm(context, "EmailFieldValidation", "Validation:10"); - return Editor(context, autoLabelEditor, emailFieldValidation); + return Editor(context, autoLabelEditor, emailFieldEditor, emailFieldValidation); } protected override void DescribeForm(DescribeContext context) { + context.Form("EmailField", factory => { + var shape = (dynamic)factory; + var form = shape.Fieldset( + Id: "EmailField", + _Value: shape.Textbox( + Id: "Value", + Name: "Value", + Title: "Value", + Classes: new[] { "text", "medium", "tokenized" }, + Description: T("The value of this email field."))); + + return form; + }); + context.Form("EmailFieldValidation", factory => { var shape = (dynamic)factory; var form = shape.Fieldset( @@ -53,5 +74,9 @@ namespace Orchard.DynamicForms.Drivers { return form; }); } + + protected override void OnDisplaying(EmailField element, ElementDisplayContext context) { + context.ElementShape.TokenizedValue = _tokenizer.Replace(element.RuntimeValue, null); + } } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/TextFieldDriver.cs b/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/TextFieldDriver.cs index ac2536182..5a0585ead 100644 --- a/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/TextFieldDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.DynamicForms/Drivers/TextFieldDriver.cs @@ -8,6 +8,7 @@ using DescribeContext = Orchard.Forms.Services.DescribeContext; namespace Orchard.DynamicForms.Drivers { public class TextFieldDriver : FormsElementDriver{ private readonly ITokenizer _tokenizer; + public TextFieldDriver(IFormManager formManager, ITokenizer tokenizer) : base(formManager) { _tokenizer = tokenizer; } diff --git a/src/Orchard.Web/Modules/Orchard.DynamicForms/Views/Element-Form-EmailField.cshtml b/src/Orchard.Web/Modules/Orchard.DynamicForms/Views/Element-Form-EmailField.cshtml index 9dbe36166..26c8ff604 100644 --- a/src/Orchard.Web/Modules/Orchard.DynamicForms/Views/Element-Form-EmailField.cshtml +++ b/src/Orchard.Web/Modules/Orchard.DynamicForms/Views/Element-Form-EmailField.cshtml @@ -9,6 +9,7 @@ tagBuilder.AddCssClass("text"); tagBuilder.Attributes["type"] = "email"; + tagBuilder.Attributes["value"] = Model.TokenizedValue; tagBuilder.Attributes["name"] = element.Name; tagBuilder.AddClientValidationAttributes((IDictionary)Model.ClientValidationAttributes);