Field default value as a proposed value on first edition when creating.

This commit is contained in:
jtkech
2016-04-26 18:50:02 +02:00
committed by Sébastien Ros
parent b740bae395
commit 8c97c89414
38 changed files with 313 additions and 1394 deletions

View File

@@ -45,10 +45,13 @@ namespace Orchard.Core.Common.Drivers {
protected override DriverResult Editor(ContentPart part, TextField field, dynamic shapeHelper) {
return ContentShape("Fields_Common_Text_Edit", GetDifferentiator(field, part),
() => {
var settings = field.PartFieldDefinition.Settings.GetModel<TextFieldSettings>();
var text = part.IsNew() ? settings.DefaultValue : field.Value;
var viewModel = new TextFieldDriverViewModel {
Field = field,
Text = field.Value,
Settings = field.PartFieldDefinition.Settings.GetModel<TextFieldSettings>(),
Text = text,
Settings = settings,
ContentItem = part.ContentItem
};
@@ -65,10 +68,6 @@ namespace Orchard.Core.Common.Drivers {
field.Value = viewModel.Text;
if (String.IsNullOrWhiteSpace(field.Value) && !String.IsNullOrWhiteSpace(settings.DefaultValue)) {
field.Value = settings.DefaultValue;
}
if (settings.Required && String.IsNullOrWhiteSpace(field.Value)) {
updater.AddModelError("Text", T("The field {0} is mandatory", T(field.DisplayName)));
}

View File

@@ -1,8 +1,6 @@
@model Orchard.Core.Common.ViewModels.TextFieldSettingsEventsViewModel
@* This is a token-less default value editor that can be overridden from features that can depend on Orchard.Tokens. *@
<label for="@Html.FieldIdFor(m => m.Settings.DefaultValue)">@T("Default value")</label>
@Html.TextBoxFor(m => m.Settings.DefaultValue, new { @class = "text large" })
<span class="hint">@T("Default value for the field. If there is no value given for the actual field, this will be filled in. (optional)")</span>
<span class="hint">@T("The default value proposed when creating a content item. (optional)")</span>
@Html.ValidationMessageFor(m => m.Settings.DefaultValue)

View File

@@ -1,20 +1,15 @@
@model Orchard.Core.Common.ViewModels.TextFieldDriverViewModel
@{
var isRequired = Model.Settings.Required && String.IsNullOrWhiteSpace(Model.Settings.DefaultValue);
}
<fieldset>
<label for="@Html.FieldIdFor(m => m.Text)" @if(Model.Settings.Required) { <text>class="required"</text> }>@Model.Field.DisplayName</label>
@if (String.IsNullOrWhiteSpace(Model.Settings.Flavor)) {
@(isRequired ? Html.TextBoxFor(m => m.Text, new {@class = "text", required = "required"}) : Html.TextBoxFor(m => m.Text, new {@class = "text"}))
@(Model.Settings.Required ? Html.TextBoxFor(m => m.Text, new {@class = "text", required = "required"}) : Html.TextBoxFor(m => m.Text, new {@class = "text"}))
@Html.ValidationMessageFor(m => m.Text)
}
else {
@Display.Body_Editor(Text: Model.Text, EditorFlavor: Model.Settings.Flavor, Required: isRequired, ContentItem: Model.ContentItem)
@Display.Body_Editor(Text: Model.Text, EditorFlavor: Model.Settings.Flavor, Required: Model.Settings.Required, ContentItem: Model.ContentItem)
}
@if (HasText(Model.Settings.Hint)) {
<span class="hint">@Model.Settings.Hint</span>
}
@if (!String.IsNullOrWhiteSpace(Model.Settings.DefaultValue)) {
<span class="hint">@T("If the field is left empty then the default value will be used.")</span>
}
</fieldset>

View File

@@ -34,26 +34,22 @@ namespace Orchard.Fields.Drivers {
}
protected override DriverResult Editor(ContentPart part, BooleanField field, dynamic shapeHelper) {
// if the content item is new, assign the default value
if(!part.HasDraft() && !part.HasPublished()) {
var settings = field.PartFieldDefinition.Settings.GetModel<BooleanFieldSettings>();
field.Value = settings.DefaultValue;
}
return ContentShape("Fields_Boolean_Edit", GetDifferentiator(field, part),
() => shapeHelper.EditorTemplate(TemplateName: TemplateName, Model: field, Prefix: GetPrefix(field, part)));
() => {
if (part.IsNew()) {
var settings = field.PartFieldDefinition.Settings.GetModel<BooleanFieldSettings>();
field.Value = settings.DefaultValue;
}
return shapeHelper.EditorTemplate(TemplateName: TemplateName, Model: field, Prefix: GetPrefix(field, part));
});
}
protected override DriverResult Editor(ContentPart part, BooleanField field, IUpdateModel updater, dynamic shapeHelper) {
if (updater.TryUpdateModel(field, GetPrefix(field, part), null, null)) {
var settings = field.PartFieldDefinition.Settings.GetModel<BooleanFieldSettings>();
if (!settings.Optional && !field.Value.HasValue) {
if (settings.DefaultValue.HasValue) {
field.Value = settings.DefaultValue;
}
else {
updater.AddModelError(field.Name, T("The field {0} is mandatory.", T(field.DisplayName)));
}
updater.AddModelError(field.Name, T("The field {0} is mandatory.", T(field.DisplayName)));
}
}

View File

@@ -75,7 +75,7 @@ namespace Orchard.Fields.Drivers {
protected override DriverResult Editor(ContentPart part, DateTimeField field, dynamic shapeHelper) {
var settings = field.PartFieldDefinition.Settings.GetModel<DateTimeFieldSettings>();
var value = field.DateTime;
var value = part.IsNew() ? settings.DefaultValue : field.DateTime;
var options = new DateLocalizationOptions();
// Don't do any time zone conversion if field is semantically a date-only field, because that might mutate the date component.
@@ -96,7 +96,6 @@ namespace Orchard.Fields.Drivers {
Name = field.DisplayName,
Hint = settings.Hint,
IsRequired = settings.Required,
HasDefaultValue = settings.DefaultValue.HasValue,
Editor = new DateTimeEditor() {
Date = showDate ? DateLocalizationServices.ConvertToLocalizedDateString(value, options) : null,
Time = showTime ? DateLocalizationServices.ConvertToLocalizedTimeString(value, options) : null,
@@ -133,37 +132,26 @@ namespace Orchard.Fields.Drivers {
var showTime = settings.Display == DateTimeFieldDisplays.DateAndTime || settings.Display == DateTimeFieldDisplays.TimeOnly;
DateTime? value = null;
var IsParseError = false;
// If required and one field is missing, don't try to parse data.
if (settings.Required && ((showDate && String.IsNullOrWhiteSpace(viewModel.Editor.Date)) || (showTime && String.IsNullOrWhiteSpace(viewModel.Editor.Time)))) {
// And use the default value only if all required fields are empty.
if (!showDate || !showTime || (String.IsNullOrWhiteSpace(viewModel.Editor.Date) && String.IsNullOrWhiteSpace(viewModel.Editor.Time))) {
value = settings.DefaultValue;
}
}
else {
// Try to parse data if not required or if there are no missing fields.
if (!settings.Required || ((!showDate || !String.IsNullOrWhiteSpace(viewModel.Editor.Date)) && (!showTime || !String.IsNullOrWhiteSpace(viewModel.Editor.Time)))) {
try {
var utcDateTime = DateLocalizationServices.ConvertFromLocalizedString(viewModel.Editor.Date, viewModel.Editor.Time, options);
value = utcDateTime.HasValue ? utcDateTime : settings.DefaultValue;
value = DateLocalizationServices.ConvertFromLocalizedString(viewModel.Editor.Date, viewModel.Editor.Time, options);
}
catch {
IsParseError = true;
updater.AddModelError(GetPrefix(field, part), T("{0} could not be parsed as a valid date and time.", field.DisplayName));
}
}
if (!IsParseError) {
// Hackish workaround to make sure a time-only field with an entered time equivalent to
// 00:00 UTC doesn't get stored as a full DateTime.MinValue in the database, resulting
// in it being interpreted as an empty value when subsequently retrieved.
if (value.HasValue && settings.Display == DateTimeFieldDisplays.TimeOnly && value == DateTime.MinValue) {
value = value.Value.AddDays(1);
}
// Hackish workaround to make sure a time-only field with an entered time equivalent to
// 00:00 UTC doesn't get stored as a full DateTime.MinValue in the database, resulting
// in it being interpreted as an empty value when subsequently retrieved.
if (value.HasValue && settings.Display == DateTimeFieldDisplays.TimeOnly && value == DateTime.MinValue) {
value = value.Value.AddDays(1);
}
if (settings.Required && (!value.HasValue || (settings.Display != DateTimeFieldDisplays.TimeOnly && value.Value.Date == DateTime.MinValue))) {
updater.AddModelError(GetPrefix(field, part), T("{0} is required.", field.DisplayName));
}
if (settings.Required && (!value.HasValue || (settings.Display != DateTimeFieldDisplays.TimeOnly && value.Value.Date == DateTime.MinValue))) {
updater.AddModelError(GetPrefix(field, part), T("{0} is required.", field.DisplayName));
}
field.DateTime = value.HasValue ? value.Value : DateTime.MinValue;

View File

@@ -4,7 +4,6 @@ using Orchard.ContentManagement.Handlers;
using Orchard.Fields.Fields;
using Orchard.Fields.Settings;
using Orchard.Localization;
using Orchard.Tokens;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -13,11 +12,9 @@ namespace Orchard.Fields.Drivers {
public class EnumerationFieldDriver : ContentFieldDriver<EnumerationField> {
public IOrchardServices Services { get; set; }
private const string TemplateName = "Fields/Enumeration.Edit";
private readonly ITokenizer _tokenizer;
public EnumerationFieldDriver(IOrchardServices services, ITokenizer tokenizer) {
public EnumerationFieldDriver(IOrchardServices services) {
Services = services;
_tokenizer = tokenizer;
T = NullLocalizer.Instance;
}
@@ -39,13 +36,12 @@ namespace Orchard.Fields.Drivers {
protected override DriverResult Editor(ContentPart part, EnumerationField field, dynamic shapeHelper) {
return ContentShape("Fields_Enumeration_Edit", GetDifferentiator(field, part),
() => {
if (field.Value == null) {
if (part.IsNew()) {
var settings = field.PartFieldDefinition.Settings.GetModel<EnumerationFieldSettings>();
if (!String.IsNullOrWhiteSpace(settings.DefaultValue)) {
field.Value = _tokenizer.Replace(settings.DefaultValue, new Dictionary<string, object> { { "Content", part.ContentItem } });
field.Value = settings.DefaultValue;
}
}
return shapeHelper.EditorTemplate(TemplateName: TemplateName, Model: field, Prefix: GetPrefix(field, part));
});
}
@@ -54,15 +50,6 @@ namespace Orchard.Fields.Drivers {
if (updater.TryUpdateModel(field, GetPrefix(field, part), null, null)) {
var settings = field.PartFieldDefinition.Settings.GetModel<EnumerationFieldSettings>();
if (field.SelectedValues.Length == 0 && !String.IsNullOrWhiteSpace(settings.DefaultValue) && !String.IsNullOrWhiteSpace(settings.Options)) {
field.Value = _tokenizer.Replace(settings.DefaultValue, new Dictionary<string, object> { { "Content", part.ContentItem } });
string[] options = settings.Options.Split(new string[] { System.Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
var selectedValues = field.SelectedValues.ToList();
selectedValues.RemoveAll(value => !options.Any(value.Equals));
field.SelectedValues = selectedValues.ToArray();
}
if (settings.Required && field.SelectedValues.Length == 0) {
updater.AddModelError(field.Name, T("The field {0} is mandatory", T(field.DisplayName)));
}

View File

@@ -4,19 +4,15 @@ using Orchard.ContentManagement.Handlers;
using Orchard.Fields.Fields;
using Orchard.Fields.Settings;
using Orchard.Localization;
using Orchard.Tokens;
using System;
using System.Collections.Generic;
namespace Orchard.Fields.Drivers {
public class InputFieldDriver : ContentFieldDriver<InputField> {
public IOrchardServices Services { get; set; }
private const string TemplateName = "Fields/Input.Edit";
private readonly ITokenizer _tokenizer;
public InputFieldDriver(IOrchardServices services, ITokenizer tokenizer) {
public InputFieldDriver(IOrchardServices services) {
Services = services;
_tokenizer = tokenizer;
T = NullLocalizer.Instance;
}
@@ -39,17 +35,19 @@ namespace Orchard.Fields.Drivers {
protected override DriverResult Editor(ContentPart part, InputField field, dynamic shapeHelper) {
return ContentShape("Fields_Input_Edit", GetDifferentiator(field, part),
() => shapeHelper.EditorTemplate(TemplateName: TemplateName, Model: field, Prefix: GetPrefix(field, part)));
() => {
if (part.IsNew()) {
var settings = field.PartFieldDefinition.Settings.GetModel<InputFieldSettings>();
field.Value = settings.DefaultValue;
}
return shapeHelper.EditorTemplate(TemplateName: TemplateName, Model: field, Prefix: GetPrefix(field, part));
});
}
protected override DriverResult Editor(ContentPart part, InputField field, IUpdateModel updater, dynamic shapeHelper) {
if (updater.TryUpdateModel(field, GetPrefix(field, part), null, null)) {
var settings = field.PartFieldDefinition.Settings.GetModel<InputFieldSettings>();
if (String.IsNullOrWhiteSpace(field.Value) && !String.IsNullOrWhiteSpace(settings.DefaultValue)) {
field.Value = _tokenizer.Replace(settings.DefaultValue, new Dictionary<string, object> { { "Content", part.ContentItem } });
}
if (settings.Required && String.IsNullOrWhiteSpace(field.Value)) {
updater.AddModelError(GetPrefix(field, part), T("The field {0} is mandatory.", T(field.DisplayName)));
}

View File

@@ -4,7 +4,6 @@ using Orchard.ContentManagement.Handlers;
using Orchard.Fields.Fields;
using Orchard.Fields.Settings;
using Orchard.Localization;
using Orchard.Tokens;
using System;
using System.Collections.Generic;
@@ -12,11 +11,9 @@ namespace Orchard.Fields.Drivers {
public class LinkFieldDriver : ContentFieldDriver<LinkField> {
public IOrchardServices Services { get; set; }
private const string TemplateName = "Fields/Link.Edit";
private readonly ITokenizer _tokenizer;
public LinkFieldDriver(IOrchardServices services, ITokenizer tokenizer) {
public LinkFieldDriver(IOrchardServices services) {
Services = services;
_tokenizer = tokenizer;
T = NullLocalizer.Instance;
}
@@ -39,21 +36,20 @@ namespace Orchard.Fields.Drivers {
protected override DriverResult Editor(ContentPart part, LinkField field, dynamic shapeHelper) {
return ContentShape("Fields_Link_Edit", GetDifferentiator(field, part),
() => shapeHelper.EditorTemplate(TemplateName: TemplateName, Model: field, Prefix: GetPrefix(field, part)));
() => {
if (part.IsNew()) {
var settings = field.PartFieldDefinition.Settings.GetModel<LinkFieldSettings>();
field.Value = settings.DefaultValue;
field.Text = settings.TextDefaultValue;
}
return shapeHelper.EditorTemplate(TemplateName: TemplateName, Model: field, Prefix: GetPrefix(field, part));
});
}
protected override DriverResult Editor(ContentPart part, LinkField field, IUpdateModel updater, dynamic shapeHelper) {
if (updater.TryUpdateModel(field, GetPrefix(field, part), null, null)) {
var settings = field.PartFieldDefinition.Settings.GetModel<LinkFieldSettings>();
if (String.IsNullOrWhiteSpace(field.Value) && !String.IsNullOrWhiteSpace(settings.DefaultValue)) {
field.Value = _tokenizer.Replace(settings.DefaultValue, new Dictionary<string, object> { { "Content", part.ContentItem } });
}
if(!String.IsNullOrWhiteSpace(settings.TextDefaultValue) && String.IsNullOrWhiteSpace(field.Text)) {
field.Text = _tokenizer.Replace(settings.TextDefaultValue, new Dictionary<string, object> { { "Content", part.ContentItem } });
}
if (settings.Required && String.IsNullOrWhiteSpace(field.Value)) {
updater.AddModelError(GetPrefix(field, part), T("Url is required for {0}", field.DisplayName));
}

View File

@@ -5,7 +5,6 @@ using Orchard.Fields.Fields;
using Orchard.Fields.Settings;
using Orchard.Fields.ViewModels;
using Orchard.Localization;
using Orchard.Tokens;
using System;
using System.Collections.Generic;
using System.Globalization;
@@ -15,11 +14,9 @@ namespace Orchard.Fields.Drivers {
public IOrchardServices Services { get; set; }
private const string TemplateName = "Fields/Numeric.Edit";
private readonly Lazy<CultureInfo> _cultureInfo;
private readonly ITokenizer _tokenizer;
public NumericFieldDriver(IOrchardServices services, ITokenizer tokenizer) {
public NumericFieldDriver(IOrchardServices services) {
Services = services;
_tokenizer = tokenizer;
T = NullLocalizer.Instance;
_cultureInfo = new Lazy<CultureInfo>(() => CultureInfo.GetCultureInfo(Services.WorkContext.CurrentCulture));
@@ -46,10 +43,13 @@ namespace Orchard.Fields.Drivers {
protected override DriverResult Editor(ContentPart part, NumericField field, dynamic shapeHelper) {
return ContentShape("Fields_Numeric_Edit", GetDifferentiator(field, part),
() => {
var settings = field.PartFieldDefinition.Settings.GetModel<NumericFieldSettings>();
var value = part.IsNew() ? settings.DefaultValue : Convert.ToString(field.Value, _cultureInfo.Value);
var model = new NumericFieldViewModel {
Field = field,
Settings = field.PartFieldDefinition.Settings.GetModel<NumericFieldSettings>(),
Value = Convert.ToString(field.Value, _cultureInfo.Value)
Settings = settings,
Value = value
};
return shapeHelper.EditorTemplate(TemplateName: TemplateName, Model: model, Prefix: GetPrefix(field, part));
@@ -64,10 +64,6 @@ namespace Orchard.Fields.Drivers {
var settings = field.PartFieldDefinition.Settings.GetModel<NumericFieldSettings>();
if (String.IsNullOrWhiteSpace(viewModel.Value) && !String.IsNullOrWhiteSpace(settings.DefaultValue)) {
viewModel.Value = _tokenizer.Replace(settings.DefaultValue, new Dictionary<string, object> { { "Content", part.ContentItem } });
}
field.Value = null;
if (String.IsNullOrWhiteSpace(viewModel.Value)) {
@@ -76,7 +72,7 @@ namespace Orchard.Fields.Drivers {
}
}
else if (!Decimal.TryParse(viewModel.Value, NumberStyles.Any, _cultureInfo.Value, out value)) {
updater.AddModelError(GetPrefix(field, part), T("{0} or its default value is an invalid number", field.DisplayName));
updater.AddModelError(GetPrefix(field, part), T("{0} is an invalid number", field.DisplayName));
}
else {

View File

@@ -1,37 +0,0 @@
using Orchard.ContentManagement;
using Orchard.ContentManagement.Drivers;
using Orchard.Core.Common.Fields;
using Orchard.Core.Common.Settings;
using Orchard.Localization;
using Orchard.Tokens;
using System;
using System.Collections.Generic;
namespace Orchard.Fields.Drivers {
// The original driver of the TextField is in Orchard.Core, where tokenization can not be used.
// This driver was added so the default value of the TextField can be tokenized.
public class TextFieldDriver : ContentFieldDriver<TextField> {
private readonly ITokenizer _tokenizer;
public TextFieldDriver(ITokenizer tokenizer) {
_tokenizer = tokenizer;
T = NullLocalizer.Instance;
}
public Localizer T { get; set; }
protected override DriverResult Editor(ContentPart part, TextField field, IUpdateModel updater, dynamic shapeHelper) {
var settings = field.PartFieldDefinition.Settings.GetModel<TextFieldSettings>();
if (!String.IsNullOrWhiteSpace(settings.DefaultValue) && (String.IsNullOrWhiteSpace(field.Value) || field.Value.Equals(settings.DefaultValue))) {
field.Value = _tokenizer.Replace(settings.DefaultValue, new Dictionary<string, object> { { "Content", part.ContentItem } });
if (settings.Required && String.IsNullOrWhiteSpace(field.Value)) {
updater.AddModelError("Text", T("The field {0} is mandatory", T(field.DisplayName)));
}
}
return null;
}
}
}

View File

@@ -100,7 +100,6 @@
<Content Include="Styles\Images\move.gif" />
<Content Include="Web.config" />
<Content Include="Styles\Web.config" />
<Compile Include="Drivers\TextFieldDriver.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Content Include="Module.txt" />
</ItemGroup>
@@ -178,9 +177,6 @@
<ItemGroup>
<Content Include="Views\Fields\Input.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\DefinitionTemplates\TextFieldDefaultValueEditor.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="packages.config" />
</ItemGroup>

View File

@@ -6,6 +6,5 @@ namespace Orchard.Fields.ViewModels {
public string Hint { get; set; }
public bool IsRequired { get; set; }
public DateTimeEditor Editor { get; set; }
public bool HasDefaultValue { get; set; }
}
}

View File

@@ -32,7 +32,7 @@
<div>
<label for="@Html.FieldIdFor(m => m.Editor)">@T("Default value")</label>
@Html.EditorFor(m => m.Editor)
<span class="hint">@T("Pick a default date for the field. (optional)")</span>
<span class="hint">@T("Pick a default date to be proposed when creating a content item. (optional)")</span>
@Html.ValidationMessageFor(m => m.Editor)
</div>
</fieldset>

View File

@@ -31,8 +31,9 @@
<fieldset>
<div>
<label class="forpicker" for="@Html.FieldIdFor(m => m.DefaultValue)">@T("Default value")</label>
@Html.TextBoxFor(m => m.DefaultValue, new { @class = "text large tokenized ui-autocomplete-input" })
<span class="hint">@T("Enter a default option for the field. You can use tokens in this field. If there is no equivalent choice among Options, it will not be used. (optional)")</span>
@Html.TextBoxFor(m => m.DefaultValue, new { @class = "text large" })
<span class="hint">@T("The default option proposed when creating a content item. If there is no equivalent choice among Options, it will not be used. (optional)")</span>
<span class="hint">@T("When using the Listbox or Checkbox List mode, you can define multiple options separated by a semicolon.")</span>
@Html.ValidationMessageFor(m => m.DefaultValue)
</div>
</fieldset>

View File

@@ -1,5 +1,4 @@
@model Orchard.Fields.Settings.InputFieldSettings
@using Orchard.Fields.Settings;
<fieldset>
<div>
@@ -80,8 +79,8 @@
<fieldset>
<div>
<label for="@Html.FieldIdFor(m => m.DefaultValue)">@T("Default value")</label>
@Html.TextBoxFor(m => m.DefaultValue, new { @class = "text large tokenized ui-autocomplete-input" })
<span class="hint">@T("Default value for the field. You can use tokens in this field. If there is no value given for the actual field, this will be filled in. (optional)")</span>
@Html.TextBoxFor(m => m.DefaultValue, new { @class = "text large" })
<span class="hint">@T("The default value proposed when creating a content item. (optional)")</span>
@Html.ValidationMessageFor(m => m.DefaultValue)
</div>
</fieldset>

View File

@@ -47,16 +47,16 @@
<fieldset>
<div>
<label for="@Html.FieldIdFor(m => m.DefaultValue)">@T("Default value")</label>
@Html.TextBoxFor(m => m.DefaultValue, new { @class = "text large tokenized ui-autocomplete-input" })
<span class="hint">@T("A valid url as a default value, i.e. http://orchardproject.net, /content/file.pdf ... You can use tokens in this field. (optional)")</span>
@Html.TextBoxFor(m => m.DefaultValue, new { @class = "text large" })
<span class="hint">@T("A valid url proposed when creating a content item, i.e. http://orchardproject.net, /content/file.pdf, ... (optional)")</span>
@Html.ValidationMessageFor(m => m.DefaultValue)
</div>
</fieldset>
<fieldset>
<div>
<label for="@Html.FieldIdFor(m => m.TextDefaultValue)">@T("Link text default value")</label>
@Html.TextBoxFor(m => m.TextDefaultValue, new { @class = "text large tokenized ui-autocomplete-input" })
<span class="hint">@T("If the Link text is set to Optional or Required, a default value can be set for it. You can use tokens in this field. (optional)")</span>
@Html.TextBoxFor(m => m.TextDefaultValue, new { @class = "text large" })
<span class="hint">@T("The default link text proposed when creating a content item. (optional)")</span>
@Html.ValidationMessageFor(m => m.TextDefaultValue)
</div>
</fieldset>

View File

@@ -42,8 +42,8 @@
<fieldset>
<div class="editor-field">
<label class="forpicker" for="@Html.FieldIdFor(m => m.DefaultValue)">@T("Default value")</label>
@Html.TextBoxFor(m => m.DefaultValue, new { @class = "text large tokenized ui-autocomplete-input" })
<span class="hint">@T("The default value for the field. It must be a number, and if not it will not be shown. Make sure to set the Scale property if the value is not an integer. You can use tokens in this field. (optional)")</span>
@Html.TextBoxFor(m => m.DefaultValue, new { @class = "text large" })
<span class="hint">@T("A valid number proposed when creating a content item. Make sure to set the Scale property if the value is not an integer. (optional)")</span>
@Html.ValidationMessageFor(m => m.DefaultValue)
</div>
</fieldset>

View File

@@ -1,7 +0,0 @@
@model Orchard.Core.Common.ViewModels.TextFieldSettingsEventsViewModel
@* This override is here so that the token helper can be used on the default value's textbox, which can not be used in Orchard.Core. *@
<label for="@Html.FieldIdFor(m => m.Settings.DefaultValue)">@T("Default value")</label>
@Html.TextBoxFor(m => m.Settings.DefaultValue, new { @class = "text large tokenized ui-autocomplete-input" })
<span class="hint">@T("Default value for the field. You can use tokens in this field. If there is no value given for the actual field, this will be filled in. (optional)")</span>
@Html.ValidationMessageFor(m => m.Settings.DefaultValue)

View File

@@ -6,7 +6,4 @@
@if (HasText(Model.Hint)) {
<span class="hint">@Model.Hint</span>
}
@if (Model.HasDefaultValue) {
<span class="hint">@T("If the field is left empty then the default value will be used if one is configured.")</span>
}
</fieldset>

View File

@@ -3,27 +3,26 @@
@{
var settings = Model.PartFieldDefinition.Settings.GetModel<EnumerationFieldSettings>();
string[] options = (!String.IsNullOrWhiteSpace(settings.Options)) ? settings.Options.Split(new string[] { System.Environment.NewLine }, StringSplitOptions.None) : new string[] { T("Select an option").ToString() };
var isRequired = settings.Required && String.IsNullOrWhiteSpace(settings.DefaultValue);
}
<fieldset>
<label for="@Html.FieldIdFor(m => m.Value)" @if (settings.Required) { <text> class="required" </text> }>@Model.DisplayName</label>
@switch (settings.ListMode) {
case ListMode.Dropdown:
@Html.DropDownListFor(m => m.Value, new SelectList(options, Model.Value), isRequired ? new { required = "required" } : null)
@Html.DropDownListFor(m => m.Value, new SelectList(options, Model.Value), settings.Required ? new { required = "required" } : null)
break;
case ListMode.Radiobutton:
foreach (var option in options) {
if (string.IsNullOrWhiteSpace(option)) {
<label>@Html.RadioButton("Value", "", string.IsNullOrWhiteSpace(Model.Value), isRequired ? new { required = "required" } : null)<i>@T("unset")</i></label> }
<label>@Html.RadioButton("Value", "", string.IsNullOrWhiteSpace(Model.Value), settings.Required ? new { required = "required" } : null)<i>@T("unset")</i></label> }
else {
<label>@Html.RadioButton("Value", option, (option == Model.Value), isRequired ? new { required = "required" } : null)@option</label> }
<label>@Html.RadioButton("Value", option, (option == Model.Value), settings.Required ? new { required = "required" } : null)@option</label> }
}
break;
case ListMode.Listbox:
<input name="@Html.FieldNameFor(m => m.SelectedValues)" type="hidden" />
@Html.ListBoxFor(m => m.SelectedValues, new MultiSelectList(options, Model.SelectedValues), isRequired ? new { required = "required" } : null)
@Html.ListBoxFor(m => m.SelectedValues, new MultiSelectList(options, Model.SelectedValues), settings.Required ? new { required = "required" } : null)
break;
case ListMode.Checkbox:
@@ -45,7 +44,4 @@
@if (HasText(settings.Hint)) {
<span class="hint">@settings.Hint</span>
}
@if (!String.IsNullOrWhiteSpace(settings.DefaultValue)) {
<span class="hint">@T("If no option is selected then the default value will be used.")</span>
}
</fieldset>

View File

@@ -1,18 +1,13 @@
@model Orchard.Fields.Fields.InputField
@using Orchard.Utility.Extensions;
@model InputField
@using Orchard.Fields.Settings;
@{
var settings = Model.PartFieldDefinition.Settings.GetModel<InputFieldSettings>();
var isRequired = settings.Required && String.IsNullOrWhiteSpace(settings.DefaultValue);
}
<fieldset>
<label for="@Html.FieldIdFor(m => m.Value)" @if (settings.Required) { <text> class="required" </text> }>@Model.DisplayName</label>
<input type="@settings.Type.ToString().ToLower()" id="@Html.FieldIdFor(m => m.Value)" name="@Html.FieldNameFor(m => m.Value)" @if (!String.IsNullOrWhiteSpace(settings.Title)) { <text> title="@settings.Title" </text> } value="@Model.Value" @if (isRequired) { <text> required="required" </text> } @if (settings.AutoFocus) { <text> autofocus="autofocus" </text> } @if (settings.AutoComplete) { <text> autocomplete="on" </text> } @if (!String.IsNullOrWhiteSpace(settings.Placeholder)) { <text> placeholder="@settings.Placeholder" </text> } @if (!String.IsNullOrWhiteSpace(settings.Pattern)) { <text> pattern="@settings.Pattern" </text> } @if (!String.IsNullOrWhiteSpace(settings.EditorCssClass)) { <text> class="@settings.EditorCssClass" </text> } else { <text> class="text medium" </text> } @if (settings.MaxLength > 1) { <text> maxlength="@settings.MaxLength.ToString()" </text> } />
<input type="@settings.Type.ToString().ToLower()" id="@Html.FieldIdFor(m => m.Value)" name="@Html.FieldNameFor(m => m.Value)" @if (!String.IsNullOrWhiteSpace(settings.Title)) { <text> title="@settings.Title" </text> } value="@Model.Value" @if (settings.Required) { <text> required="required" </text> } @if (settings.AutoFocus) { <text> autofocus="autofocus" </text> } @if (settings.AutoComplete) { <text> autocomplete="on" </text> } @if (!String.IsNullOrWhiteSpace(settings.Placeholder)) { <text> placeholder="@settings.Placeholder" </text> } @if (!String.IsNullOrWhiteSpace(settings.Pattern)) { <text> pattern="@settings.Pattern" </text> } @if (!String.IsNullOrWhiteSpace(settings.EditorCssClass)) { <text> class="@settings.EditorCssClass" </text> } else { <text> class="text medium" </text> } @if (settings.MaxLength > 1) { <text> maxlength="@settings.MaxLength.ToString()" </text> } />
@Html.ValidationMessageFor(m => m.Value)
@if (HasText(settings.Hint)) {
<span class="hint">@settings.Hint</span>
}
@if (!String.IsNullOrWhiteSpace(settings.DefaultValue)) {
<span class="hint">@T("If the field is left empty then the default value will be used.")</span>
}
</fieldset>

View File

@@ -14,9 +14,6 @@
target = "_top";
break;
}
var isRequired = settings.Required && String.IsNullOrWhiteSpace(settings.DefaultValue);
var isTextRequired = settings.LinkTextMode == LinkTextMode.Required && String.IsNullOrWhiteSpace(settings.TextDefaultValue);
}
<fieldset>
<label for="@Html.FieldIdFor(m => m.Value)">@Model.DisplayName</label>
@@ -24,27 +21,19 @@
<span class="hint">@settings.Hint</span>
}
<div class="editor-label">
<label for="@Html.FieldIdFor(m => m.Value)" @if (settings.Required) { <text> class="required" </text> }>@T("Url")</label>
<label for="@Html.FieldIdFor(m => m.Value)" @if (settings.Required) { <text> class="required" </text> }>@T("Url")</label>
</div>
<div class="editor-field">
@(isRequired ? Html.TextBoxFor(m => m.Value, new { @class = "text large", required = "required" }) : Html.TextBoxFor(m => m.Value, new { @class = "text large" }))
@(settings.Required ? Html.TextBoxFor(m => m.Value, new { @class = "text large", required = "required" }) : Html.TextBoxFor(m => m.Value, new { @class = "text large" }))
<span class="hint">@T("A valid url, i.e. http://orchardproject.net, /content/file.pdf, ...")</span>
</div>
@if (!String.IsNullOrWhiteSpace(settings.DefaultValue)) {
<span class="hint">@T("If the field is left empty then the default value will be used.")</span>
}
@if (settings.LinkTextMode == LinkTextMode.Optional || settings.LinkTextMode == LinkTextMode.Required) {
<div class="editor-label">
<label for="@Html.FieldIdFor(m => m.Text)" @if (settings.LinkTextMode == LinkTextMode.Required) { <text> class="required" </text> }>@T("Text")</label>
<label for="@Html.FieldIdFor(m => m.Text)" @if (settings.LinkTextMode == LinkTextMode.Required) { <text> class="required" </text> }>@T("Text")</label>
</div>
<div class="editor-field">
@(isTextRequired ? Html.TextBoxFor(m => m.Text, new { @class = "text medium", required = "required" }) : Html.TextBoxFor(m => m.Text, new { @class = "text medium" }))
@if (!String.IsNullOrWhiteSpace(settings.TextDefaultValue)) {
<span class="hint">@T("If the field is left empty then the default value will be used.")</span>
}
else {
<span class="hint">@T("The text of the link. If left empty, the url will be used instead.")</span>
}
@(settings.LinkTextMode == LinkTextMode.Required ? Html.TextBoxFor(m => m.Text, new { @class = "text medium", required = "required" }) : Html.TextBoxFor(m => m.Text, new { @class = "text medium" }))
<span class="hint">@T("The text of the link. If left empty, the url will be used instead.")</span>
</div>
}

View File

@@ -3,20 +3,17 @@
@using Orchard.Fields.Settings;
@{
var isRequired = Model.Settings.Required && String.IsNullOrWhiteSpace(Model.Settings.DefaultValue);
var hasValue = !String.IsNullOrWhiteSpace(Model.Value);
var attributes = new Dictionary<string, object>();
attributes.Add("class", "text-small"); attributes.Add("type", "text");
attributes.Add("min", Model.Settings.Minimum.HasValue ? Model.Settings.Minimum.Value : 0);
attributes.Add("max", Model.Settings.Maximum.HasValue ? Model.Settings.Maximum.Value : 1000000);
attributes.Add("step", Math.Pow(10, 0 - Model.Settings.Scale).ToString(CultureInfo.InvariantCulture));
if (isRequired) {
if (Model.Settings.Required) {
attributes.Add("required", "required");
}
if (hasValue) {
if (!String.IsNullOrWhiteSpace(Model.Value)) {
attributes.Add("Value", Model.Value);
}
}
@@ -28,7 +25,4 @@
@if (HasText(Model.Settings.Hint)) {
<span class="hint">@Model.Settings.Hint</span>
}
@if (!String.IsNullOrWhiteSpace(Model.Settings.DefaultValue)) {
<span class="hint">@T("If the field is left empty then the default value will be used.")</span>
}
</fieldset>