public TemplateItem BuildProductTemplateFromDefinition(ProductDefinition definition) { var builder = new TemplateBuilder(); ID templateId = definition.SitecoreVariantTemplateId(); builder.CreateTemplate(definition.Name + " Variant", templateId, definition.Name + " Variant", definition.GetSitecoreBaseVariantTemplateIds()); _productDefinitionIdToTemplateIdMap[definition.ProductDefinitionId] = templateId; var combinedFields = definition.ProductDefinitionFields.Where(x => x.IsVariantProperty && !x.Deleted && !x.DataType.Deleted).ToList(); if (combinedFields.Any()) { ID sectionId = definition.SitecoreTemplateSectionDynamicDefinitionsForVariant(templateId); var resourceManager = ObjectFactory.Instance.Resolve <IResourceManager>(); var userService = ObjectFactory.Instance.Resolve <IUserService>(); builder.CreateSection(resourceManager.GetLocalizedText(userService.GetCurrentUserCulture(), "Tabs", "DynamicFields"), sectionId, 150); int sortOrder = 10; foreach (var definitionField in combinedFields.Where(x => x.RenderInEditor)) { CreateDynamicItemField(builder, definitionField, sortOrder, sectionId); sortOrder += 10; } } var template = builder.Build(); template.AddToFieldList(FieldIDs.Icon, SitecoreConstants.UCommerceIconFolder + "/ui/map.png"); template.SetRevision(definition.Guid.Derived(definition.ModifiedOn)); return(template); }
public TemplateItem BuildProductTemplateFromDefinition(ProductDefinition definition) { var builder = new TemplateBuilder(); ID templateId = definition.SitecoreTemplateId(); builder.CreateTemplate(definition.Name, templateId, definition.Name, definition.GetSitecoreBaseTemplateIds()); _productDefinitionIdToTemplateIdMap[definition.ProductDefinitionId] = templateId; var definitionFields = definition.ProductDefinitionFields.Where(x => x.RenderInEditor && !x.Deleted && !x.IsVariantProperty).ToList(); if (definitionFields.Any()) { ID sectionId = definition.SitecoreTemplateSectionDynamicDefinitions(templateId); var resourceManager = ObjectFactory.Instance.Resolve <IResourceManager>(); var userService = ObjectFactory.Instance.Resolve <IUserService>(); builder.CreateSection(resourceManager.GetLocalizedText(userService.GetCurrentUserCulture(), "Tabs", "DynamicFields"), sectionId, 150); int sortOrder = 10; foreach (var definitionField in definitionFields) { CreateDynamicItemField(builder, definitionField, sortOrder, sectionId); sortOrder += 10; } } var templateItem = builder.Build(); templateItem.AddToFieldList(FieldIDs.Icon, _iconFolder + "/ui/map.png"); return(templateItem); }
public static IHtmlContent EditorFor(this IHtmlHelper htmlHelper, ModelMetadata metadata, string templateName, string htmlFieldName, object additionalViewData) { Guard.ArgumentNotNull(htmlHelper, nameof(htmlHelper)); Guard.ArgumentNotNull(metadata, nameof(metadata)); Guard.ArgumentNotNullOrEmpty(htmlFieldName, nameof(htmlFieldName)); var viewEngine = DependencyResolver.Current.GetRequiredService <ICompositeViewEngine>(); var bufferScope = DependencyResolver.Current.GetRequiredService <IViewBufferScope>(); var metadataProvider = DependencyResolver.Current.GetRequiredService <IModelMetadataProvider>(); var modelExplorer = new ModelExplorer(metadataProvider, metadata, null); var templateBuilder = new TemplateBuilder( viewEngine, bufferScope, htmlHelper.ViewContext, htmlHelper.ViewData, modelExplorer, htmlFieldName, templateName, readOnly: false, additionalViewData: additionalViewData); return(templateBuilder.Build()); }
public void TestRazorTemplate() { var builder = new TemplateBuilder(); Assert.AreEqual(builder.Build("Hello {{Name}}", new Model { Name = "Earth" }), "Hello Earth"); }
public override void Process(TagHelperContext context, TagHelperOutput output) { if (context == null) { throw new ArgumentNullException(nameof(context)); } if (output == null) { throw new ArgumentNullException(nameof(output)); } output.SuppressOutput(); Dictionary <string, object> htmlAttributes = new Dictionary <string, object>(); if (IsDisabled) { htmlAttributes.Add("disabled", "disabled"); } if (IsRequired) { output.PreElement.SetHtmlContent("<div class='input-group input-group-required'>"); output.PostElement.SetHtmlContent("<div class=\"input-group-btn\"><span class=\"required\">*</span></div></div>"); } IViewContextAware viewContextAware = _htmlHelper as IViewContextAware; viewContextAware?.Contextualize(ViewContext); bool.TryParse(RenderFormControlClass, out bool renderFormControlClass); if ((string.IsNullOrEmpty(RenderFormControlClass) && For.Metadata.ModelType.Name.Equals("String")) || renderFormControlClass) { htmlAttributes.Add("class", "form-control"); } IViewEngine viewEngine = CoreUtility.GetPrivateFieldValue(_htmlHelper, "_viewEngine") as IViewEngine; IViewBufferScope bufferScope = CoreUtility.GetPrivateFieldValue(_htmlHelper, "_bufferScope") as IViewBufferScope; TemplateBuilder templateBuilder = new TemplateBuilder( viewEngine, bufferScope, _htmlHelper.ViewContext, _htmlHelper.ViewData, For.ModelExplorer, For.Name, Template, readOnly: false, additionalViewData: new { htmlAttributes, postfix = Postfix }); IHtmlContent htmlOutput = templateBuilder.Build(); output.Content.SetHtmlContent(htmlOutput.ToHtmlString()); }
public TemplateItem BuildBaseStoreTemplate() { var builder = new TemplateBuilder(); builder.CreateTemplate("ProductCatalogGroupBaseTemplate", ProductCatalogGroupBaseTemplateId, "Product Catalog Group Base Template", TemplateIDs.StandardTemplate); BuildCommonSection(builder, 100); var template = builder.Build(); template.AddToFieldList(FieldIDs.Icon, SitecoreConstants.UCommerceIconFolder + "/ui/map.png"); return(template); }
protected virtual IHtmlContent GenerateDisplay(ModelExplorer modelExplorer, string htmlFieldName, string templateName, object additionalViewData) { var templateBuilder = new TemplateBuilder(_viewEngine, ViewContext, ViewData, modelExplorer, htmlFieldName, templateName, readOnly: true, additionalViewData: additionalViewData); return(templateBuilder.Build()); }
public TemplateItem BuildBaseProductTemplate() { var builder = new TemplateBuilder(); _priceGroupFields = new Dictionary <int, PriceGroupFieldData>(); builder.CreateTemplate("VariantBaseTemplate", VariantBaseTemplateId, "Variant Base Template", TemplateIDs.StandardTemplate); BuildCommonSection(builder, 100); BuildPriceGroupSections(builder, 300); var template = builder.Build(); template.AddToFieldList(FieldIDs.Icon, SitecoreConstants.UCommerceIconFolder + "/ui/map.png"); return(template); }
public override void Process(TagHelperContext context, TagHelperOutput output) { if (output == null) { throw new ArgumentNullException(nameof(output)); } var builder = new TemplateBuilder(_viewEngine, _bufferScope, ViewContext, ViewContext.ViewData, For.ModelExplorer, For.Name, templateName: null, readOnly: true, additionalViewData: null); output.PreContent.SetHtmlContent(builder.Build()); if (output.TagName == "text") { output.TagName = null; } }
static void Main(string[] args) { var notesBuilderConfiguration = new NotesBuilderConfiguration(); var templateBuilderConfiguration = new TemplateBuilderConfiguration(); var options = new OptionSet { { "gn:", "GitHub User Name", (o) => notesBuilderConfiguration.GithubOwnerName = o }, { "gt:", "GitHub Access Token", o => notesBuilderConfiguration.GithubAccessToken = o }, { "jn:", "Jira User Name", o => notesBuilderConfiguration.JiraUsername = o }, { "jp:", "Jira Password", o => notesBuilderConfiguration.JiraPassword = o }, { "rn:", "Repository Name", o => templateBuilderConfiguration.RepositoryName = o }, { "bn:", "Branch Name", o => templateBuilderConfiguration.BranchName = o }, { "tn:", "Tag Name", o => templateBuilderConfiguration.TagName = o }, { "tp:", "Task Prefixes", o => templateBuilderConfiguration.TaskPrefixes = ParseTaskPrefixes(o) }, { "tpn:", "Template Name", o => templateBuilderConfiguration.TemplateName = o } }; try { options.Parse(args); var notesBuilder = new NotesBuilder(notesBuilderConfiguration); var templateBuilder = new TemplateBuilder(notesBuilder); string documentBody = templateBuilder.Build(templateBuilderConfiguration.RepositoryName, templateBuilderConfiguration.BranchName, templateBuilderConfiguration.TagName, templateBuilderConfiguration.TaskPrefixes, templateBuilderConfiguration.TemplateName); Console.WriteLine(documentBody); Console.ReadKey(); } catch (OptionException e) { Console.WriteLine(e.Message); Console.WriteLine("Try `--help' for more information."); } }
public static IHtmlContent CollectionTemplate(IHtmlHelper htmlHelper) { var viewData = htmlHelper.ViewData; var model = viewData.Model; if (model == null) { return HtmlString.Empty; } var collection = model as IEnumerable; if (collection == null) { // Only way we could reach here is if user passed templateName: "Collection" to an Editor() overload. throw new InvalidOperationException(Resources.FormatTemplates_TypeMustImplementIEnumerable( "Collection", model.GetType().FullName, typeof(IEnumerable).FullName)); } var elementMetadata = htmlHelper.ViewData.ModelMetadata.ElementMetadata; Debug.Assert(elementMetadata != null); var typeInCollectionIsNullableValueType = elementMetadata.IsNullableValueType; var serviceProvider = htmlHelper.ViewContext.HttpContext.RequestServices; var metadataProvider = serviceProvider.GetRequiredService<IModelMetadataProvider>(); // Use typeof(string) instead of typeof(object) for IEnumerable collections. Neither type is Nullable<T>. if (elementMetadata.ModelType == typeof(object)) { elementMetadata = metadataProvider.GetMetadataForType(typeof(string)); } var oldPrefix = viewData.TemplateInfo.HtmlFieldPrefix; try { viewData.TemplateInfo.HtmlFieldPrefix = string.Empty; var fieldNameBase = oldPrefix; var result = new HtmlContentBuilder(); var viewEngine = serviceProvider.GetRequiredService<ICompositeViewEngine>(); var viewBufferScope = serviceProvider.GetRequiredService<IViewBufferScope>(); var index = 0; foreach (var item in collection) { var itemMetadata = elementMetadata; if (item != null && !typeInCollectionIsNullableValueType) { itemMetadata = metadataProvider.GetMetadataForType(item.GetType()); } var modelExplorer = new ModelExplorer( metadataProvider, container: htmlHelper.ViewData.ModelExplorer, metadata: itemMetadata, model: item); var fieldName = string.Format(CultureInfo.InvariantCulture, "{0}[{1}]", fieldNameBase, index++); var templateBuilder = new TemplateBuilder( viewEngine, viewBufferScope, htmlHelper.ViewContext, htmlHelper.ViewData, modelExplorer, htmlFieldName: fieldName, templateName: null, readOnly: false, additionalViewData: null); result.AppendHtml(templateBuilder.Build()); } return result; } finally { viewData.TemplateInfo.HtmlFieldPrefix = oldPrefix; } }
/// <summary> /// Process /// </summary> /// <param name="context">Context</param> /// <param name="output">Output</param> public override void Process(TagHelperContext context, TagHelperOutput output) { if (context == null) { throw new ArgumentNullException(nameof(context)); } if (output == null) { throw new ArgumentNullException(nameof(output)); } //clear the output output.SuppressOutput(); //container for additional attributes Dictionary <string, object> htmlAttributes = new Dictionary <string, object>(); //disabled attribute bool.TryParse(IsDisabled, out bool disabled); if (disabled) { htmlAttributes.Add("disabled", "disabled"); } //required asterisk bool.TryParse(IsRequired, out bool required); if (required) { output.PreElement.SetHtmlContent("<div class='input-group input-group-required'>"); output.PostElement.SetHtmlContent("<div class=\"input-group-btn\"><span class=\"required\">*</span></div></div>"); } //contextualize IHtmlHelper IViewContextAware viewContextAware = _htmlHelper as IViewContextAware; viewContextAware?.Contextualize(ViewContext); //add form-control class bool.TryParse(RenderFormControlClass, out bool renderFormControlClass); if (string.IsNullOrEmpty(RenderFormControlClass) && For.Metadata.ModelType.Name.Equals("String") || renderFormControlClass) { htmlAttributes.Add("class", "form-control"); } //generate editor //we have to invoke strong typed "EditorFor" method of HtmlHelper<TModel> //but we cannot do it because we don't have access to Expression<Func<TModel, TValue>> //more info at https://github.com/aspnet/Mvc/blob/dev/src/Microsoft.AspNetCore.Mvc.ViewFeatures/ViewFeatures/HtmlHelperOfT.cs //so we manually invoke implementation of "GenerateEditor" method of HtmlHelper //more info at https://github.com/aspnet/Mvc/blob/dev/src/Microsoft.AspNetCore.Mvc.ViewFeatures/ViewFeatures/HtmlHelper.cs //little workaround here. we need to access private properties of HtmlHelper //just ensure that they are not renamed by asp.net core team in future versions IViewEngine viewEngine = CommonHelper.GetPrivateFieldValue(_htmlHelper, "_viewEngine") as IViewEngine; IViewBufferScope bufferScope = CommonHelper.GetPrivateFieldValue(_htmlHelper, "_bufferScope") as IViewBufferScope; TemplateBuilder templateBuilder = new TemplateBuilder( viewEngine, bufferScope, _htmlHelper.ViewContext, _htmlHelper.ViewData, For.ModelExplorer, For.Name, Template, readOnly: false, additionalViewData: new { htmlAttributes, postfix = this.Postfix }); Microsoft.AspNetCore.Html.IHtmlContent htmlOutput = templateBuilder.Build(); output.Content.SetHtmlContent(htmlOutput.RenderHtmlContent()); }
public static IHtmlContent ObjectTemplate(IHtmlHelper htmlHelper) { var viewData = htmlHelper.ViewData; var templateInfo = viewData.TemplateInfo; var modelExplorer = viewData.ModelExplorer; if (templateInfo.TemplateDepth > 1) { if (modelExplorer.Model == null) { return new HtmlString(modelExplorer.Metadata.NullDisplayText); } var text = modelExplorer.GetSimpleDisplayText(); if (modelExplorer.Metadata.HtmlEncode) { return new StringHtmlContent(text); } return new HtmlString(text); } var serviceProvider = htmlHelper.ViewContext.HttpContext.RequestServices; var viewEngine = serviceProvider.GetRequiredService<ICompositeViewEngine>(); var viewBufferScope = serviceProvider.GetRequiredService<IViewBufferScope>(); var content = new HtmlContentBuilder(); foreach (var propertyExplorer in modelExplorer.Properties) { var propertyMetadata = propertyExplorer.Metadata; if (!ShouldShow(propertyExplorer, templateInfo)) { continue; } var templateBuilder = new TemplateBuilder( viewEngine, viewBufferScope, htmlHelper.ViewContext, htmlHelper.ViewData, propertyExplorer, htmlFieldName: propertyMetadata.PropertyName, templateName: null, readOnly: false, additionalViewData: null); var templateBuilderResult = templateBuilder.Build(); if (!propertyMetadata.HideSurroundingHtml) { var label = htmlHelper.Label(propertyMetadata.PropertyName, labelText: null, htmlAttributes: null); if (!string.IsNullOrEmpty(label.ToString())) { var labelTag = new TagBuilder("div"); labelTag.AddCssClass("editor-label"); labelTag.InnerHtml.SetContent(label); content.AppendLine(labelTag); } var valueDivTag = new TagBuilder("div"); valueDivTag.AddCssClass("editor-field"); valueDivTag.InnerHtml.AppendHtml(templateBuilderResult); valueDivTag.InnerHtml.AppendHtml(" "); valueDivTag.InnerHtml.AppendHtml(htmlHelper.ValidationMessage( propertyMetadata.PropertyName, message: null, htmlAttributes: null, tag: null)); content.AppendLine(valueDivTag); } else { content.AppendHtml(templateBuilderResult); } } return content; }
public static IHtmlContent CollectionTemplate(IHtmlHelper htmlHelper) { var model = htmlHelper.ViewData.Model; if (model == null) { return(HtmlString.Empty); } var collection = model as IEnumerable; if (collection == null) { // Only way we could reach here is if user passed templateName: "Collection" to a Display() overload. throw new InvalidOperationException(Resources.FormatTemplates_TypeMustImplementIEnumerable( "Collection", model.GetType().FullName, typeof(IEnumerable).FullName)); } var elementMetadata = htmlHelper.ViewData.ModelMetadata.ElementMetadata; Debug.Assert(elementMetadata != null); var typeInCollectionIsNullableValueType = elementMetadata.IsNullableValueType; var serviceProvider = htmlHelper.ViewContext.HttpContext.RequestServices; var metadataProvider = serviceProvider.GetRequiredService <IModelMetadataProvider>(); // Use typeof(string) instead of typeof(object) for IEnumerable collections. Neither type is Nullable<T>. if (elementMetadata.ModelType == typeof(object)) { elementMetadata = metadataProvider.GetMetadataForType(typeof(string)); } var oldPrefix = htmlHelper.ViewData.TemplateInfo.HtmlFieldPrefix; try { htmlHelper.ViewData.TemplateInfo.HtmlFieldPrefix = string.Empty; var fieldNameBase = oldPrefix; var result = new BufferedHtmlContent(); var viewEngine = serviceProvider.GetRequiredService <ICompositeViewEngine>(); var index = 0; foreach (var item in collection) { var itemMetadata = elementMetadata; if (item != null && !typeInCollectionIsNullableValueType) { itemMetadata = metadataProvider.GetMetadataForType(item.GetType()); } var modelExplorer = new ModelExplorer( metadataProvider, container: htmlHelper.ViewData.ModelExplorer, metadata: itemMetadata, model: item); var fieldName = string.Format(CultureInfo.InvariantCulture, "{0}[{1}]", fieldNameBase, index++); var templateBuilder = new TemplateBuilder( viewEngine, htmlHelper.ViewContext, htmlHelper.ViewData, modelExplorer, htmlFieldName: fieldName, templateName: null, readOnly: true, additionalViewData: null); result.Append(templateBuilder.Build()); } return(result); } finally { htmlHelper.ViewData.TemplateInfo.HtmlFieldPrefix = oldPrefix; } }
public static string ObjectTemplate(IHtmlHelper htmlHelper) { var viewData = htmlHelper.ViewData; var templateInfo = viewData.TemplateInfo; var modelExplorer = viewData.ModelExplorer; var builder = new StringBuilder(); if (modelExplorer.Model == null) { return modelExplorer.Metadata.NullDisplayText; } if (templateInfo.TemplateDepth > 1) { var text = modelExplorer.GetSimpleDisplayText(); if (modelExplorer.Metadata.HtmlEncode) { text = htmlHelper.Encode(text); } return text; } var serviceProvider = htmlHelper.ViewContext.HttpContext.RequestServices; var viewEngine = serviceProvider.GetRequiredService<ICompositeViewEngine>(); foreach (var propertyExplorer in modelExplorer.Properties) { var propertyMetadata = propertyExplorer.Metadata; if (!ShouldShow(propertyExplorer, templateInfo)) { continue; } var divTag = new TagBuilder("div", htmlHelper.HtmlEncoder); if (!propertyMetadata.HideSurroundingHtml) { var label = propertyMetadata.GetDisplayName(); if (!string.IsNullOrEmpty(label)) { divTag.SetInnerText(label); divTag.AddCssClass("display-label"); builder.AppendLine(divTag.ToString(TagRenderMode.Normal)); // Reset divTag for reuse. divTag.Attributes.Clear(); } divTag.AddCssClass("display-field"); builder.Append(divTag.ToString(TagRenderMode.StartTag)); } var templateBuilder = new TemplateBuilder( viewEngine, htmlHelper.ViewContext, htmlHelper.ViewData, propertyExplorer, htmlFieldName: propertyMetadata.PropertyName, templateName: null, readOnly: true, additionalViewData: null); builder.Append(templateBuilder.Build()); if (!propertyMetadata.HideSurroundingHtml) { builder.AppendLine(divTag.ToString(TagRenderMode.EndTag)); } } return builder.ToString(); }
public static string CollectionTemplate(IHtmlHelper htmlHelper) { var viewData = htmlHelper.ViewData; var model = viewData.Model; if (model == null) { return string.Empty; } var collection = model as IEnumerable; if (collection == null) { // Only way we could reach here is if user passed templateName: "Collection" to an Editor() overload. throw new InvalidOperationException(Resources.FormatTemplates_TypeMustImplementIEnumerable( "Collection", model.GetType().FullName, typeof(IEnumerable).FullName)); } var typeInCollection = typeof(string); var genericEnumerableType = ClosedGenericMatcher.ExtractGenericInterface( collection.GetType(), typeof(IEnumerable<>)); if (genericEnumerableType != null) { typeInCollection = genericEnumerableType.GenericTypeArguments[0]; } var typeInCollectionIsNullableValueType = TypeHelper.IsNullableValueType(typeInCollection); var oldPrefix = viewData.TemplateInfo.HtmlFieldPrefix; try { viewData.TemplateInfo.HtmlFieldPrefix = string.Empty; var fieldNameBase = oldPrefix; var result = new StringBuilder(); var serviceProvider = htmlHelper.ViewContext.HttpContext.RequestServices; var metadataProvider = serviceProvider.GetRequiredService<IModelMetadataProvider>(); var viewEngine = serviceProvider.GetRequiredService<ICompositeViewEngine>(); var index = 0; foreach (var item in collection) { var itemType = typeInCollection; if (item != null && !typeInCollectionIsNullableValueType) { itemType = item.GetType(); } var modelExplorer = metadataProvider.GetModelExplorerForType(itemType, item); var fieldName = string.Format(CultureInfo.InvariantCulture, "{0}[{1}]", fieldNameBase, index++); var templateBuilder = new TemplateBuilder( viewEngine, htmlHelper.ViewContext, htmlHelper.ViewData, modelExplorer, htmlFieldName: fieldName, templateName: null, readOnly: false, additionalViewData: null); var output = templateBuilder.Build(); result.Append(output); } return result.ToString(); } finally { viewData.TemplateInfo.HtmlFieldPrefix = oldPrefix; } }
public static IHtmlContent ObjectTemplate(IHtmlHelper htmlHelper) { var viewData = htmlHelper.ViewData; var templateInfo = viewData.TemplateInfo; var modelExplorer = viewData.ModelExplorer; if (modelExplorer.Model == null) { return(new HtmlString(modelExplorer.Metadata.NullDisplayText)); } if (templateInfo.TemplateDepth > 1) { var text = modelExplorer.GetSimpleDisplayText(); if (modelExplorer.Metadata.HtmlEncode) { text = htmlHelper.Encode(text); } return(new HtmlString(text)); } var serviceProvider = htmlHelper.ViewContext.HttpContext.RequestServices; var viewEngine = serviceProvider.GetRequiredService <ICompositeViewEngine>(); var content = new BufferedHtmlContent(); foreach (var propertyExplorer in modelExplorer.Properties) { var propertyMetadata = propertyExplorer.Metadata; if (!ShouldShow(propertyExplorer, templateInfo)) { continue; } var templateBuilder = new TemplateBuilder( viewEngine, htmlHelper.ViewContext, htmlHelper.ViewData, propertyExplorer, htmlFieldName: propertyMetadata.PropertyName, templateName: null, readOnly: true, additionalViewData: null); var templateBuilderResult = templateBuilder.Build(); if (!propertyMetadata.HideSurroundingHtml) { var label = propertyMetadata.GetDisplayName(); if (!string.IsNullOrEmpty(label)) { var labelTag = new TagBuilder("div"); labelTag.InnerHtml.SetContent(label); labelTag.AddCssClass("display-label"); content.AppendLine(labelTag); } var valueDivTag = new TagBuilder("div"); valueDivTag.AddCssClass("display-field"); valueDivTag.InnerHtml.SetContent(templateBuilderResult); content.AppendLine(valueDivTag); } else { content.Append(templateBuilderResult); } } return(content); }
public static IHtmlContent ObjectTemplate(IHtmlHelper htmlHelper) { var viewData = htmlHelper.ViewData; var templateInfo = viewData.TemplateInfo; var modelExplorer = viewData.ModelExplorer; if (templateInfo.TemplateDepth > 1) { if (modelExplorer.Model == null) { return(new HtmlString(modelExplorer.Metadata.NullDisplayText)); } var text = modelExplorer.GetSimpleDisplayText(); if (modelExplorer.Metadata.HtmlEncode) { return(new StringHtmlContent(text)); } return(new HtmlString(text)); } var serviceProvider = htmlHelper.ViewContext.HttpContext.RequestServices; var viewEngine = serviceProvider.GetRequiredService <ICompositeViewEngine>(); var viewBufferScope = serviceProvider.GetRequiredService <IViewBufferScope>(); var content = new HtmlContentBuilder(modelExplorer.Metadata.Properties.Count); foreach (var propertyExplorer in modelExplorer.PropertiesInternal) { var propertyMetadata = propertyExplorer.Metadata; if (!ShouldShow(propertyExplorer, templateInfo)) { continue; } var templateBuilder = new TemplateBuilder( viewEngine, viewBufferScope, htmlHelper.ViewContext, htmlHelper.ViewData, propertyExplorer, htmlFieldName: propertyMetadata.PropertyName, templateName: null, readOnly: false, additionalViewData: null); var templateBuilderResult = templateBuilder.Build(); if (!propertyMetadata.HideSurroundingHtml) { var label = htmlHelper.Label(propertyMetadata.PropertyName, labelText: null, htmlAttributes: null); using (var writer = new HasContentTextWriter()) { label.WriteTo(writer, PassThroughHtmlEncoder.Default); if (writer.HasContent) { var labelTag = new TagBuilder("div"); labelTag.AddCssClass("editor-label"); labelTag.InnerHtml.SetHtmlContent(label); content.AppendLine(labelTag); } } var valueDivTag = new TagBuilder("div"); valueDivTag.AddCssClass("editor-field"); valueDivTag.InnerHtml.AppendHtml(templateBuilderResult); valueDivTag.InnerHtml.AppendHtml(" "); valueDivTag.InnerHtml.AppendHtml(htmlHelper.ValidationMessage( propertyMetadata.PropertyName, message: null, htmlAttributes: null, tag: null)); content.AppendLine(valueDivTag); } else { content.AppendHtml(templateBuilderResult); } } return(content); }
public override void Process(TagHelperContext context, TagHelperOutput output) { if (context == null) { throw new ArgumentNullException(nameof(context)); } if (output == null) { throw new ArgumentNullException(nameof(output)); } //clear the output output.SuppressOutput(); //container for additional attributes var htmlAttributes = new Dictionary <string, object>(); //disabled attribute bool.TryParse(IsDisabled, out bool disabled); if (disabled) { htmlAttributes.Add("disabled", "disabled"); } //readonly attribute bool.TryParse(IsReadOnly, out bool @readonly); if (@readonly) { htmlAttributes.Add("readonly", "readonly"); } //required asterisk bool.TryParse(IsRequired, out bool required); if (required) { output.PreElement.SetHtmlContent("<div class='input-group input-group-required'>"); output.PostElement.SetHtmlContent("<div class=\"input-group-btn\"><span class=\"required\">*</span></div></div>"); } var viewContextAware = _htmlHelper as IViewContextAware; viewContextAware?.Contextualize(ViewContext); //add form-control class bool.TryParse(RenderFormControlClass, out bool renderFormControlClass); if (string.IsNullOrEmpty(RenderFormControlClass) && For.Metadata.ModelType.Name.Equals("String") || renderFormControlClass) { htmlAttributes.Add("class", "form-control"); } var viewEngine = CommonHelper.GetPrivateFieldValue(_htmlHelper, "_viewEngine") as IViewEngine; var bufferScope = CommonHelper.GetPrivateFieldValue(_htmlHelper, "_bufferScope") as IViewBufferScope; var templateBuilder = new TemplateBuilder( viewEngine, bufferScope, _htmlHelper.ViewContext, _htmlHelper.ViewData, For.ModelExplorer, For.Name, Template, readOnly: false, additionalViewData: new { htmlAttributes, postfix = this.Postfix }); var htmlOutput = templateBuilder.Build(); output.Content.SetHtmlContent(htmlOutput.RenderHtmlContent()); }
public void ReturnsUnchangedSampleWhenItDoesntMatchAnyWords() { var result = sut.Build("abc", new[] { "1", "2", "3" }); Assert.AreEqual("abc", result); }
public static IHtmlContent ObjectTemplate(IHtmlHelper htmlHelper) { if (htmlHelper == null) { throw new ArgumentNullException(nameof(htmlHelper)); } var viewData = htmlHelper.ViewData; var templateInfo = viewData.TemplateInfo; var modelExplorer = viewData.ModelExplorer; if (templateInfo.TemplateDepth > 1) { if (modelExplorer.Model == null) { return(new HtmlString(modelExplorer.Metadata.NullDisplayText)); } var text = modelExplorer.GetSimpleDisplayText(); if (modelExplorer.Metadata.HtmlEncode) { return(new StringHtmlContent(text)); } return(new HtmlString(text)); } var serviceProvider = htmlHelper.ViewContext.HttpContext.RequestServices; var viewEngine = serviceProvider.GetRequiredService <ICompositeViewEngine>(); var viewBufferScope = serviceProvider.GetRequiredService <IViewBufferScope>(); var content = new HtmlContentBuilder(modelExplorer.Metadata.Properties.Count); foreach (var propertyExplorer in modelExplorer.Properties) { var propertyMetadata = propertyExplorer.Metadata; if (!ShouldShow(propertyExplorer, templateInfo)) { continue; } var templateBuilder = new TemplateBuilder( viewEngine, viewBufferScope, htmlHelper.ViewContext, htmlHelper.ViewData, propertyExplorer, htmlFieldName: propertyMetadata.PropertyName, templateName: null, readOnly: false, additionalViewData: null); var templateBuilderResult = templateBuilder.Build(); if (!propertyMetadata.HideSurroundingHtml) { var groupTag = new TagBuilder("div"); var isBooleanProperty = propertyMetadata.ModelType == typeof(bool) || propertyMetadata.ModelType == typeof(bool?); if (!isBooleanProperty) { groupTag.AddCssClass("form-group"); var label = htmlHelper.Label(propertyMetadata.PropertyName, labelText: null, htmlAttributes: null); using (var writer = new HasContentTextWriter()) { label.WriteTo(writer, PassThroughHtmlEncoder.Default); if (writer.HasContent) { groupTag.InnerHtml.AppendHtml(label); } } } groupTag.InnerHtml.AppendHtml(templateBuilderResult); if (isBooleanProperty) { groupTag.AddCssClass("form-check"); var label = htmlHelper.Label(propertyMetadata.PropertyName, labelText: null, htmlAttributes: new { @class = "form-check-label" }); using (var writer = new HasContentTextWriter()) { label.WriteTo(writer, PassThroughHtmlEncoder.Default); if (writer.HasContent) { groupTag.InnerHtml.AppendHtml(label); } } } content.AppendLine(groupTag); } else { content.AppendHtml(templateBuilderResult); } } return(content); }
/// <summary> /// Process /// </summary> /// <param name="context">Context</param> /// <param name="output">Output</param> public override void Process(TagHelperContext context, TagHelperOutput output) { if (context == null) { throw new ArgumentNullException(nameof(context)); } if (output == null) { throw new ArgumentNullException(nameof(output)); } //clear the output output.SuppressOutput(); //disabled attribute bool.TryParse(IsDisabled, out bool disabled); if (disabled) { var d = new TagHelperAttribute("disabled", "disabled"); output.Attributes.Add(d); } //required asterisk bool.TryParse(IsRequired, out bool required); if (required) { output.PreElement.SetHtmlContent("<div class='input-group input-group-required'>"); output.PostElement.SetHtmlContent("<div class=\"input-group-btn\"><span class=\"required\">*</span></div></div>"); } //contextualize IHtmlHelper var viewContextAware = _htmlHelper as IViewContextAware; viewContextAware?.Contextualize(ViewContext); //add form-control class bool.TryParse(RenderFormControlClass, out bool renderFormControlClass); object htmlAttributes = null; if (string.IsNullOrEmpty(RenderFormControlClass) && For.Metadata.ModelType.Name.Equals("String") || renderFormControlClass) { htmlAttributes = new { @class = "form-control k-input" } } ; var viewEngine = GetPrivateFieldValue(_htmlHelper, "_viewEngine") as IViewEngine; var bufferScope = GetPrivateFieldValue(_htmlHelper, "_bufferScope") as IViewBufferScope; if (SelectItems != null) { if (SelectItems.Any()) { if (_htmlHelper.ViewData.ContainsKey("SelectList")) { _htmlHelper.ViewData["SelectList"] = SelectItems; } else { _htmlHelper.ViewData.Add("SelectList", SelectItems); } } else { if (_htmlHelper.ViewData.ContainsKey("SelectList")) { _htmlHelper.ViewData["SelectList"] = new List <SelectListItem>(); } else { _htmlHelper.ViewData.Add("SelectList", new List <SelectListItem>()); } } } var templateBuilder = new TemplateBuilder( viewEngine, bufferScope, _htmlHelper.ViewContext, _htmlHelper.ViewData, For.ModelExplorer, For.Name, Template, readOnly: false, additionalViewData: new { htmlAttributes, postfix = this.Postfix }); var htmlOutput = templateBuilder.Build(); output.Content.SetHtmlContent(htmlOutput.RenderHtmlContent()); }