public override void run_the_task() { infrastructure.logging.Log.bound_to(this).log_a_warning_event_containing( "Looking for template files starting in \"{0}\" and building to directory \"{1}\".", templates_directory, destination_directory); TemplateBuilder builder = new TemplateBuilder(Container.get_an_instance_of<IFileSystemAccess>()); try { builder.build_template_files(settings_files_directory, templates_directory, destination_directory, template_extension, keep_extension, use_environment_subdirectory); } catch (Exception exception) { infrastructure.logging.Log.bound_to(this).log_an_error_event_containing( "{0} encountered an error:{1}{2}", "TemplateBuilder", Environment.NewLine, exception); throw; } }
public void Can_Clear_Tag_Relations() { var provider = ScopeProvider; using (ScopeProvider.CreateScope()) { // create data to relate to // We have to create and save a template, otherwise we get an FK violation on contentType. var template = TemplateBuilder.CreateTextPageTemplate(); FileService.SaveTemplate(template); var contentType = ContentTypeBuilder.CreateSimpleContentType("test", "Test", defaultTemplateId: template.Id); ContentTypeRepository.Save(contentType); var content = ContentBuilder.CreateSimpleContent(contentType); DocumentRepository.Save(content); var repository = CreateRepository(provider); Tag[] tags = { new Tag { Text = "tag1", Group = "test" }, new Tag { Text = "tag2", Group = "test" } }; repository.Assign( content.Id, contentType.PropertyTypes.First().Id, tags, false); repository.Assign( content.Id, contentType.PropertyTypes.First().Id, Enumerable.Empty <ITag>()); var result = repository.GetTagsForEntity(content.Id); Assert.AreEqual(0, result.Count()); } }
public void Does_Not_Create_Tag_Data_For_Non_Published_Version() { var template = TemplateBuilder.CreateTextPageTemplate(); FileService.SaveTemplate(template); // create content type with a tag property var contentType = ContentTypeBuilder.CreateSimpleContentType("umbMandatory", "Mandatory Doc Type", mandatoryProperties: true, defaultTemplateId: template.Id); CreateAndAddTagsPropertyType(contentType); ContentTypeService.Save(contentType); // create a content with tags and publish var content = ContentBuilder.CreateSimpleContent(contentType, "Tagged content"); content.AssignTags(PropertyEditorCollection, DataTypeService, Serializer, "tags", new[] { "hello", "world", "some", "tags" }); ContentService.SaveAndPublish(content); // edit tags and save content.AssignTags(PropertyEditorCollection, DataTypeService, Serializer, "tags", new[] { "another", "world" }, true); ContentService.Save(content); // the (edit) property does contain all tags Assert.AreEqual(5, content.Properties["tags"].GetValue().ToString().Split(',').Distinct().Count()); // but the database still contains the initial two tags var propertyTypeId = contentType.PropertyTypes.Single(x => x.Alias == "tags").Id; using (var scope = ScopeProvider.CreateScope()) { Assert.AreEqual(4, ScopeAccessor.AmbientScope.Database.ExecuteScalar <int>( "SELECT COUNT(*) FROM cmsTagRelationship WHERE nodeId=@nodeId AND propertyTypeId=@propTypeId", new { nodeId = content.Id, propTypeId = propertyTypeId })); scope.Complete(); } }
public void CreateTestData() { var fileService = GetRequiredService <IFileService>(); var template = TemplateBuilder.CreateTextPageTemplate(); fileService.SaveTemplate(template); // else, FK violation on contentType! var contentService = GetRequiredService <IContentService>(); var contentTypeService = GetRequiredService <IContentTypeService>(); // Create and Save ContentType "umbTextpage" -> (NodeDto.NodeIdSeed) var contentType = ContentTypeBuilder.CreateSimpleContentType("umbTextpage", "Textpage", defaultTemplateId: template.Id); contentType.Key = Guid.NewGuid(); contentTypeService.Save(contentType); // Create and Save Content "Homepage" based on "umbTextpage" -> (NodeDto.NodeIdSeed + 1) _textpage = ContentBuilder.CreateSimpleContent(contentType); _textpage.Key = Guid.NewGuid(); contentService.Save(_textpage); // Create and Save Content "Text Page 1" based on "umbTextpage" -> (NodeDto.NodeIdSeed + 2) _subpage = ContentBuilder.CreateSimpleContent(contentType, "Text Page 1", _textpage.Id); _subpage.Key = Guid.NewGuid(); contentService.Save(_subpage); // Create and Save Content "Text Page 1" based on "umbTextpage" -> (NodeDto.NodeIdSeed + 3) _otherpage = ContentBuilder.CreateSimpleContent(contentType, "Text Page 2", _textpage.Id); _otherpage.Key = Guid.NewGuid(); contentService.Save(_otherpage); // Create and Save Content "Text Page Deleted" based on "umbTextpage" -> (NodeDto.NodeIdSeed + 4) _trashed = ContentBuilder.CreateSimpleContent(contentType, "Text Page Deleted", -20); _trashed.Key = Guid.NewGuid(); ((Content)_trashed).Trashed = true; contentService.Save(_trashed); }
public void TagsCanBeInvariant() { Template template = TemplateBuilder.CreateTextPageTemplate(); FileService.SaveTemplate(template); ContentType contentType = ContentTypeBuilder.CreateSimpleContentType("umbMandatory", "Mandatory Doc Type", mandatoryProperties: true, defaultTemplateId: template.Id); CreateAndAddTagsPropertyType(contentType); ContentTypeService.Save(contentType); IContent content1 = ContentBuilder.CreateSimpleContent(contentType, "Tagged content 1", -1); content1.AssignTags(PropertyEditorCollection, DataTypeService, Serializer, "tags", new[] { "hello", "world", "another", "one" }); ContentService.SaveAndPublish(content1); content1 = ContentService.GetById(content1.Id); string[] enTags = content1.Properties["tags"].GetTagsValue(PropertyEditorCollection, DataTypeService, Serializer).ToArray(); Assert.AreEqual(4, enTags.Length); Assert.Contains("one", enTags); Assert.AreEqual(-1, enTags.IndexOf("plus")); IEnumerable <IGrouping <int?, ITag> > tagGroups = TagService.GetAllTags().GroupBy(x => x.LanguageId); foreach (ITag tag in TagService.GetAllTags()) { Console.WriteLine($"{tag.Group}:{tag.Text} {tag.LanguageId}"); } Assert.AreEqual(1, tagGroups.Count()); IGrouping <int?, ITag> enTagGroup = tagGroups.FirstOrDefault(x => x.Key == null); Assert.IsNotNull(enTagGroup); Assert.AreEqual(4, enTagGroup.Count()); Assert.IsTrue(enTagGroup.Any(x => x.Text == "one")); Assert.IsFalse(enTagGroup.Any(x => x.Text == "plus")); }
public void Add_TwoModels_DataCombined() { // Arrange _template = TemplateBuilder .FromString("{Name} {EMail}") .Build(); var model = new TestModel { Name = "Test", EMail = "*****@*****.**" }; var model2 = new TestModel { Name = "Foo", EMail = "*****@*****.**" }; // Act _template.Model(model).Add(); _template.Model(model2).Add(); // Assert Assert.AreEqual("TestFoo [email protected]@test.com", _template.Get()); }
public virtual void CreateTestData() { // NOTE Maybe not the best way to create/save test data as we are using the services, which are being tested. var template = TemplateBuilder.CreateTextPageTemplate(); FileService.SaveTemplate(template); // Create and Save ContentType "umbTextpage" -> 1051 (template), 1052 (content type) ContentType = ContentTypeBuilder.CreateSimpleContentType("umbTextpage", "Textpage", defaultTemplateId: template.Id); ContentType.Key = new Guid("1D3A8E6E-2EA9-4CC1-B229-1AEE19821522"); ContentTypeService.Save(ContentType); // Create and Save Content "Homepage" based on "umbTextpage" -> 1053 Textpage = ContentBuilder.CreateSimpleContent(ContentType); Textpage.Key = new Guid("B58B3AD4-62C2-4E27-B1BE-837BD7C533E0"); ContentService.Save(Textpage, 0); // Create and Save Content "Text Page 1" based on "umbTextpage" -> 1054 Subpage = ContentBuilder.CreateSimpleContent(ContentType, "Text Page 1", Textpage.Id); var contentSchedule = ContentScheduleCollection.CreateWithEntry(DateTime.Now.AddMinutes(-5), null); ContentService.Save(Subpage, 0, contentSchedule); // Create and Save Content "Text Page 1" based on "umbTextpage" -> 1055 Subpage2 = ContentBuilder.CreateSimpleContent(ContentType, "Text Page 2", Textpage.Id); ContentService.Save(Subpage2, 0); Subpage3 = ContentBuilder.CreateSimpleContent(ContentType, "Text Page 3", Textpage.Id); ContentService.Save(Subpage3, 0); // Create and Save Content "Text Page Deleted" based on "umbTextpage" -> 1056 Trashed = ContentBuilder.CreateSimpleContent(ContentType, "Text Page Deleted", -20); Trashed.Trashed = true; ContentService.Save(Trashed, 0); }
public void AddParameters_ValidInputParameters_SetsExpectedTemplateParameters( ArmTemplateExpression expression, List <ArmTemplateParameter> inputParameters ) { var actual = new TemplateBuilder() .AddParameters(expression, inputParameters) .Template["parameters"]; Assert.IsType <JObject>(actual); foreach (var p in inputParameters) { if (p.Type == "object") { Assert.Equal(p.Type, actual[p.Name]["type"].ToString()); foreach (var property in p.Value.GetType().GetProperties()) { var actualValueString = actual[p.Name]["defaultValue"][property.Name].ToString(); Assert.Equal(property.GetValue(p.Value).ToString(), actualValueString); } } else if (p.Type == "array") { Assert.Equal(p.Type, actual[p.Name]["type"]); var valueArray = (Array)p.Value; foreach (var i in valueArray) { Assert.Contains($"{i.ToString()}", actual[p.Name]["defaultValue"].ToString()); } } else { Assert.Equal(p.Type, actual[p.Name]["type"]); Assert.Equal(p.Value.ToString(), actual[p.Name]["defaultValue"].ToString()); } } }
public void TagsCanBecomeInvariantByPropertyTypeAndBackToVariant() { var language = new LanguageBuilder() .WithCultureInfo("fr-FR") .Build(); LocalizationService.Save(language); // en-US is already there var template = TemplateBuilder.CreateTextPageTemplate(); FileService.SaveTemplate(template); var contentType = ContentTypeBuilder.CreateSimpleContentType("umbMandatory", "Mandatory Doc Type", mandatoryProperties: true, defaultTemplateId: template.Id); var propertyType = CreateAndAddTagsPropertyType(contentType, ContentVariation.Culture); ContentTypeService.Save(contentType); IContent content1 = ContentBuilder.CreateSimpleContent(contentType, "Tagged content 1"); content1.SetCultureName("name-fr", "fr-FR"); content1.SetCultureName("name-en", "en-US"); content1.AssignTags(PropertyEditorCollection, DataTypeService, Serializer, "tags", new[] { "hello", "world", "some", "tags", "plus" }, culture: "fr-FR"); content1.AssignTags(PropertyEditorCollection, DataTypeService, Serializer, "tags", new[] { "hello", "world", "another", "one" }, culture: "en-US"); ContentService.SaveAndPublish(content1); propertyType.Variations = ContentVariation.Nothing; ContentTypeService.Save(contentType); // FIXME: This throws due to index violations propertyType.Variations = ContentVariation.Culture; ContentTypeService.Save(contentType); // TODO: Assert results }
public void DeleteVersions_Always_DeletesSpecifiedVersions() { var template = TemplateBuilder.CreateTextPageTemplate(); FileService.SaveTemplate(template); var contentType = ContentTypeBuilder.CreateSimpleContentType("umbTextpage", "Textpage", defaultTemplateId: template.Id); ContentTypeService.Save(contentType); var content = ContentBuilder.CreateSimpleContent(contentType); ContentService.SaveAndPublish(content); ContentService.SaveAndPublish(content); ContentService.SaveAndPublish(content); ContentService.SaveAndPublish(content); using (var scope = ScopeProvider.CreateScope()) { var query = ScopeAccessor.AmbientScope.SqlContext.Sql(); query.Select <ContentVersionDto>() .From <ContentVersionDto>(); var sut = new DocumentVersionRepository(ScopeAccessor); sut.DeleteVersions(new[] { 1, 2, 3 }); var after = ScopeAccessor.AmbientScope.Database.Fetch <ContentVersionDto>(query); Assert.Multiple(() => { Assert.AreEqual(2, after.Count); Assert.True(after.All(x => x.Id > 3)); }); } }
public void TagsAreUpdatedWhenContentIsUnpublishedAndRePublished() { Template template = TemplateBuilder.CreateTextPageTemplate(); FileService.SaveTemplate(template); ContentType contentType = ContentTypeBuilder.CreateSimpleContentType("umbMandatory", "Mandatory Doc Type", mandatoryProperties: true, defaultTemplateId: template.Id); CreateAndAddTagsPropertyType(contentType); ContentTypeService.Save(contentType); Content content1 = ContentBuilder.CreateSimpleContent(contentType, "Tagged content 1", -1); content1.AssignTags(PropertyEditorCollection, DataTypeService, Serializer, "tags", new[] { "hello", "world", "some", "tags", "bam" }); ContentService.SaveAndPublish(content1); Content content2 = ContentBuilder.CreateSimpleContent(contentType, "Tagged content 2", -1); content2.AssignTags(PropertyEditorCollection, DataTypeService, Serializer, "tags", new[] { "hello", "world", "some", "tags" }); ContentService.SaveAndPublish(content2); ContentService.Unpublish(content1); ContentService.Unpublish(content2); }
private void MenuTemplatesSave_Click(object sender, EventArgs e) { string itemname = txtName.Text; if (cmbType.SelectedIndex == 2) // Lapis name { itemname = ((cmbLapi.SelectedItem as ImageComboItem).Tag as Lapi).Name; } else if (cmbType.SelectedIndex == 3) // Lapisa name { itemname = ((ELapisa)cmbLapisa.SelectedIndex).ToString(); } if (itemname == "") { MessageBox.Show("Dein Item muss einen Namen haben um das Template zu speichern!", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } ITemplate tpl = BuildTemplate(); TemplateBuilder.SaveTemplate(tpl, (EItemType)cmbType.SelectedIndex); LoadTemplates(); // refresh }
public AddDataLabelForm(LabelContainer lblContainer, LabelEditMode editMode, DataLabel newPriorLabel = null) { InitializeComponent(); labelContainer = lblContainer; editingMode = editMode; editedLabel = newPriorLabel; dataTypeBox.SelectedIndex = 0; if (editMode == LabelEditMode.Edit) { Text = "Edit Data Section"; if (editedLabel != null) { nameBox.Text = editedLabel.Name; offsetBox.Text = editedLabel.Offset.ToString("X"); lengthBox.Text = editedLabel.Length.ToString("X"); dataTypeBox.SelectedIndex = (int)editedLabel.DSectionType; if (!String.IsNullOrEmpty(editedLabel.Comment)) { commentBox.Text = editedLabel.Comment; } dataTemplateBox.Text = TemplateBuilder.TemplateToString(editedLabel.PrintTemplate); } } }
public void Can_Append_Tag_Data_To_Published_Content() { var template = TemplateBuilder.CreateTextPageTemplate(); FileService.SaveTemplate(template); // Arrange var contentType = ContentTypeBuilder.CreateSimpleContentType("umbMandatory", "Mandatory Doc Type", mandatoryProperties: true, defaultTemplateId: template.Id); CreateAndAddTagsPropertyType(contentType); ContentTypeService.Save(contentType); var content = ContentBuilder.CreateSimpleContent(contentType, "Tagged content"); content.AssignTags(PropertyEditorCollection, DataTypeService, Serializer, "tags", new[] { "hello", "world", "some", "tags" }); ContentService.SaveAndPublish(content); // Act content.AssignTags(PropertyEditorCollection, DataTypeService, Serializer, "tags", new[] { "another", "world" }, true); ContentService.SaveAndPublish(content); // Assert Assert.AreEqual(5, content.Properties["tags"].GetValue().ToString().Split(',').Distinct().Count()); var propertyTypeId = contentType.PropertyTypes.Single(x => x.Alias == "tags").Id; using (var scope = ScopeProvider.CreateScope()) { Assert.AreEqual(5, ScopeAccessor.AmbientScope.Database.ExecuteScalar <int>( "SELECT COUNT(*) FROM cmsTagRelationship WHERE nodeId=@nodeId AND propertyTypeId=@propTypeId", new { nodeId = content.Id, propTypeId = propertyTypeId })); scope.Complete(); } }
public override Control GetPreviewControl(Control runtimeControl) { Control previewControl = base.GetPreviewControl(runtimeControl); if (previewControl != null) { IDesignerHost service = (IDesignerHost)runtimeControl.Site.GetService(typeof(IDesignerHost)); FormView view = previewControl as FormView; if ((view == null) || (service == null)) { return(previewControl); } TemplateBuilder itemTemplate = view.ItemTemplate as TemplateBuilder; if (((itemTemplate != null) && (itemTemplate.Text.Length == 0)) || (view.ItemTemplate == null)) { string templateText = "#### ####<br/>#### ####<br/>#### ####<br/>#### ####"; view.ItemTemplate = ControlParser.ParseTemplate(service, templateText); view.RowStyle.HorizontalAlign = HorizontalAlign.Center; } view.HorizontalAlign = HorizontalAlign.Center; view.Width = new Unit(80.0, UnitType.Percentage); } return(previewControl); }
public override Control GetPreviewControl(Control runtimeControl) { Control previewControl = base.GetPreviewControl(runtimeControl); if (previewControl != null) { IDesignerHost service = (IDesignerHost)runtimeControl.Site.GetService(typeof(IDesignerHost)); DataList list = previewControl as DataList; if ((list == null) || (service == null)) { return(previewControl); } TemplateBuilder itemTemplate = list.ItemTemplate as TemplateBuilder; if (((itemTemplate != null) && (itemTemplate.Text.Length == 0)) || (list.ItemTemplate == null)) { string templateText = "####"; list.ItemTemplate = ControlParser.ParseTemplate(service, templateText); list.ItemStyle.HorizontalAlign = HorizontalAlign.Center; } list.HorizontalAlign = HorizontalAlign.Center; list.Width = new Unit(80.0, UnitType.Percentage); } return(previewControl); }
public TemplateBuilder Extract(byte[,] invertedImage, int dpi) { TemplateBuilder template = null; DpiAdjuster.Adjust(this, dpi, delegate() { byte[,] image = ImageInverter.GetInverted(invertedImage); //图片反色,黑《--》白 //var watch = Stopwatch.StartNew(); //watch.Start(); BlockMap blocks = new BlockMap(new Size(image.GetLength(1), image.GetLength(0)), BlockSize); //将图片数组转换为blockmap,对图片进行分块,方便进行并行计算 Logger.Log("BlockMap", blocks); //可能是用于调试时的log输出 //watch.Start(); short[, ,] histogram = Histogram.Analyze(blocks, image); //watch.Stop(); //Console.WriteLine("---------------------------histogram实例化时间:{0}",watch.ElapsedMilliseconds); //watch.Start(); short[, ,] smoothHistogram = Histogram.SmoothAroundCorners(blocks, histogram); BinaryMap mask = Mask.ComputeMask(blocks, histogram); float[,] equalized = Equalizer.Equalize(blocks, image, smoothHistogram, mask); //watch.Stop(); //Console.WriteLine("----------------------------equalized实例化时间:{0}",watch.ElapsedMilliseconds); byte[,] orientation = Orientation.Detect(equalized, mask, blocks); equalizedMap = GdiIO.GetBitmap(ShowImage.floatToByte(equalized)); float[,] smoothed = RidgeSmoother.Smooth(equalized, orientation, mask, blocks); float[,] orthogonal = OrthogonalSmoother.Smooth(smoothed, orientation, mask, blocks); BinaryMap binary = Binarizer.Binarize(smoothed, orthogonal, mask, blocks); binary.AndNot(BinarySmoother.Filter(binary.GetInverted())); binary.Or(BinarySmoother.Filter(binary)); Logger.Log("BinarySmoothingResult", binary); CrossRemover.Remove(binary); BinaryMap pixelMask = mask.FillBlocks(blocks); BinaryMap innerMask = InnerMask.Compute(pixelMask); BinaryMap inverted = binary.GetInverted(); inverted.And(pixelMask); SkeletonBuilder ridges = null; SkeletonBuilder valleys = null; Parallel.Invoke( () => { ridges = ProcessSkeleton("Ridges", binary); }, () => { valleys = ProcessSkeleton("Valleys", inverted); }); template = new TemplateBuilder(); template.OriginalDpi = dpi; template.OriginalWidth = invertedImage.GetLength(1); template.OriginalHeight = invertedImage.GetLength(0); MinutiaCollector.Collect(ridges, TemplateBuilder.MinutiaType.Ending, template); MinutiaCollector.Collect(valleys, TemplateBuilder.MinutiaType.Bifurcation, template); MinutiaMask.Filter(template, innerMask); StandardDpiScaling.Scale(template); MinutiaCloudRemover.Filter(template); UniqueMinutiaSorter.Filter(template); MinutiaSorter.Shuffle(template); Logger.Log("FinalTemplate", template); //watch.Stop(); //Console.WriteLine("---------------------------Template实例化时间:{0}",watch.ElapsedMilliseconds); }); return(template); }
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 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 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 void Retrieving_All_Content_In_Site() { // NOTE: Doing this the old 1 by 1 way and based on the results of the ContentServicePerformanceTest.Retrieving_All_Content_In_Site // the old way takes 143795ms, the new above way takes: // 14249ms // // ... NOPE, made some new changes, it is now.... // 5290ms !!!!!! // // that is a 96% savings of processing and sql calls! // // ... NOPE, made even more nice changes, it is now... // 4452ms !!!!!!! Template template = TemplateBuilder.CreateTextPageTemplate(); FileService.SaveTemplate(template); ContentType contentType1 = ContentTypeBuilder.CreateTextPageContentType("test1", "test1", defaultTemplateId: template.Id); ContentType contentType2 = ContentTypeBuilder.CreateTextPageContentType("test2", "test2", defaultTemplateId: template.Id); ContentType contentType3 = ContentTypeBuilder.CreateTextPageContentType("test3", "test3", defaultTemplateId: template.Id); ContentTypeService.Save(new[] { contentType1, contentType2, contentType3 }); contentType1.AllowedContentTypes = new[] { new ContentTypeSort(new Lazy <int>(() => contentType2.Id), 0, contentType2.Alias), new ContentTypeSort(new Lazy <int>(() => contentType3.Id), 1, contentType3.Alias) }; contentType2.AllowedContentTypes = new[] { new ContentTypeSort(new Lazy <int>(() => contentType1.Id), 0, contentType1.Alias), new ContentTypeSort(new Lazy <int>(() => contentType3.Id), 1, contentType3.Alias) }; contentType3.AllowedContentTypes = new[] { new ContentTypeSort(new Lazy <int>(() => contentType1.Id), 0, contentType1.Alias), new ContentTypeSort(new Lazy <int>(() => contentType2.Id), 1, contentType2.Alias) }; ContentTypeService.Save(new[] { contentType1, contentType2, contentType3 }); IEnumerable <Content> roots = ContentBuilder.CreateTextpageContent(contentType1, -1, 10); ContentService.Save(roots); foreach (Content root in roots) { IEnumerable <Content> item1 = ContentBuilder.CreateTextpageContent(contentType1, root.Id, 10); IEnumerable <Content> item2 = ContentBuilder.CreateTextpageContent(contentType2, root.Id, 10); IEnumerable <Content> item3 = ContentBuilder.CreateTextpageContent(contentType3, root.Id, 10); ContentService.Save(item1.Concat(item2).Concat(item3)); } var total = new List <IContent>(); using (GetTestProfilingLogger().TraceDuration <ContentServicePerformanceTest>("Getting all content in site")) { TestProfiler.Enable(); total.AddRange(ContentService.GetRootContent()); foreach (IContent content in total.ToArray()) { total.AddRange(ContentService.GetPagedDescendants(content.Id, 0, int.MaxValue, out long _)); } TestProfiler.Disable(); StaticApplicationLogging.Logger.LogInformation("Returned {Total} items", total.Count); } }
public TemplateBuilderTest() { builder = new TemplateBuilder <TemplateBase>(); }
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 void Initialize() { _template = TemplateBuilder .FromString("{ID} {Name} {EMail} {CreationTime}") .Build(); }
public void SetUp() { sut = new TemplateBuilder(); }
protected void SearchAction() { string sType = Request.QueryString["pType"]; gvData.DataSource = null; gvData.DataBind(); if (!string.IsNullOrEmpty(sType)) { Session[Constants.SES_CONFIG_UNAPPROVE_DATA] = new DataTable(); Config oConfig = (Config)Session[Constants.SES_USER_CONFIG]; #region Receive if (sType.Equals(Convert.ToString((int)Constants.PAGEINDEX_TRANS.RECEIVE).PadLeft(5, '0'))) { lgText.InnerHtml = "SP Receive Approval Queue List"; ReceiveDAL oReceiveDAL = new ReceiveDAL(); TemplateBuilder tbGvData = new TemplateBuilder(); tbGvData.AppendLiteralString("No 'Receive' record found"); gvData.EmptyDataTemplate = tbGvData; Result oResult = oReceiveDAL.LoadUnapprovedList(null, true, oConfig.DivisionID, oConfig.BankCodeID); DataTable dtTmpList = (DataTable)oResult.Return; if (dtTmpList != null) { if (dtTmpList.Rows.Count > 0) { gvData.DataSource = dtTmpList; gvData.DataBind(); Session[Constants.SES_CONFIG_UNAPPROVE_DATA] = dtTmpList; } } } #endregion Receive #region Issue else if (sType.Equals(Convert.ToString((int)Constants.PAGEINDEX_TRANS.SP_ISSUE).PadLeft(5, '0'))) { lgText.InnerHtml = "SP Issue Approval Queue List"; IssueDAL oIssueDAL = new IssueDAL(); TemplateBuilder tbGvData = new TemplateBuilder(); tbGvData.AppendLiteralString("No 'Issue' record found"); gvData.EmptyDataTemplate = tbGvData; Result oResult = oIssueDAL.LoadUnapprovedList(null, true, oConfig.DivisionID, oConfig.BankCodeID); DataTable dtTmpCurrencyList = (DataTable)oResult.Return; if (dtTmpCurrencyList != null) { gvData.DataSource = dtTmpCurrencyList; gvData.DataBind(); Session[Constants.SES_CONFIG_UNAPPROVE_DATA] = dtTmpCurrencyList; } } else if (sType.Equals(Convert.ToString((int)Constants.PAGEINDEX_TRANS.SP_ISSUE_UPDATE).PadLeft(5, '0'))) { lgText.InnerHtml = "SP Issue Update Approval Queue List"; IssueDAL oIssueDAL = new IssueDAL(); TemplateBuilder tbGvData = new TemplateBuilder(); tbGvData.AppendLiteralString("No 'Issue Update' record found"); gvData.EmptyDataTemplate = tbGvData; Result oResult = oIssueDAL.LoadTmpIssueUpdateDataTableList(null, true, oConfig.DivisionID, oConfig.BankCodeID); DataTable dtTmpIssueUpdateList = (DataTable)oResult.Return; if (dtTmpIssueUpdateList != null) { gvData.DataSource = dtTmpIssueUpdateList; gvData.DataBind(); Session[Constants.SES_CONFIG_UNAPPROVE_DATA] = dtTmpIssueUpdateList; } } else if (sType.Equals(Convert.ToString((int)Constants.PAGEINDEX_TRANS.SP_ISSUE_OLD).PadLeft(5, '0'))) { lgText.InnerHtml = "SP Old Customer Issue Approval Queue List"; IssueDAL oIssueDAL = new IssueDAL(); TemplateBuilder tbGvData = new TemplateBuilder(); tbGvData.AppendLiteralString("No 'Old Customer Issue' record found"); gvData.EmptyDataTemplate = tbGvData; Result oResult = oIssueDAL.LoadUnapprovedOldCustomerIssueList(null, true, oConfig.DivisionID, oConfig.BankCodeID); DataTable dtTmpIssueUpdateList = (DataTable)oResult.Return; if (dtTmpIssueUpdateList != null) { gvData.DataSource = dtTmpIssueUpdateList; gvData.DataBind(); Session[Constants.SES_CONFIG_UNAPPROVE_DATA] = dtTmpIssueUpdateList; } } else if (sType.Equals(Convert.ToString((int)Constants.PAGEINDEX_TRANS.SP_ISSUE_ONL).PadLeft(5, '0'))) { lgText.InnerHtml = "SP Online Issue Approval Queue List"; IssueDAL oIssueDAL = new IssueDAL(); TemplateBuilder tbGvData = new TemplateBuilder(); tbGvData.AppendLiteralString("No 'SP Online Issue' record found"); gvData.EmptyDataTemplate = tbGvData; Result oResult = oIssueDAL.LoadUnapprovedOnlineIssueList(null, true, oConfig.DivisionID, oConfig.BankCodeID); DataTable dtTmpIssueUpdateList = (DataTable)oResult.Return; if (dtTmpIssueUpdateList != null) { gvData.DataSource = dtTmpIssueUpdateList; gvData.DataBind(); Session[Constants.SES_CONFIG_UNAPPROVE_DATA] = dtTmpIssueUpdateList; } } #endregion Issue #region interst payment else if (sType.Equals(Convert.ToString((int)Constants.PAGEINDEX_TRANS.INTEREST_PAYMENT).PadLeft(5, '0'))) { lgText.InnerHtml = "Interst Payment Approval Queue List"; InterestPaymentDAL oIntPayDAL = new InterestPaymentDAL(); TemplateBuilder tbGvData = new TemplateBuilder(); tbGvData.AppendLiteralString("No 'Interst Payment' record found"); gvData.EmptyDataTemplate = tbGvData; Result oResult = oIntPayDAL.LoadUnapprovedList(null, true, oConfig.DivisionID, oConfig.BankCodeID); DataTable dtTmpIntPayList = (DataTable)oResult.Return; if (dtTmpIntPayList != null) { gvData.DataSource = dtTmpIntPayList; gvData.DataBind(); Session[Constants.SES_CONFIG_UNAPPROVE_DATA] = dtTmpIntPayList; } } #endregion interst payment #region Encashment else if (sType.Equals(Convert.ToString((int)Constants.PAGEINDEX_TRANS.ENCASHED).PadLeft(5, '0'))) { lgText.InnerHtml = "Encashment Approval Queue List"; EncashmentDAL oEncashDAL = new EncashmentDAL(); TemplateBuilder tbGvData = new TemplateBuilder(); tbGvData.AppendLiteralString("No 'Encashment' record found"); gvData.EmptyDataTemplate = tbGvData; Result oResult = oEncashDAL.LoadUnapprovedList(null, true, oConfig.DivisionID, oConfig.BankCodeID); DataTable dtTmpIntPayList = (DataTable)oResult.Return; if (dtTmpIntPayList != null) { gvData.DataSource = dtTmpIntPayList; gvData.DataBind(); Session[Constants.SES_CONFIG_UNAPPROVE_DATA] = dtTmpIntPayList; } } #endregion Encashment #region Stop Payment else if (sType.Equals(Convert.ToString((int)Constants.PAGEINDEX_TRANS.STOP_PAYMENT_MARK).PadLeft(5, '0'))) { lgText.InnerHtml = "Payment Mark Approval Queue List"; StopPaymentDAL oStopPayDAL = new StopPaymentDAL(); TemplateBuilder tbGvData = new TemplateBuilder(); tbGvData.AppendLiteralString("No 'Payment Mark' record found"); gvData.EmptyDataTemplate = tbGvData; Result oResult = oStopPayDAL.LoadUnapprovedPaymentMarkList(null, true, oConfig.DivisionID, oConfig.BankCodeID); DataTable dtList = (DataTable)oResult.Return; if (dtList != null) { gvData.DataSource = dtList; gvData.DataBind(); Session[Constants.SES_CONFIG_UNAPPROVE_DATA] = dtList; } } else if (sType.Equals(Convert.ToString((int)Constants.PAGEINDEX_TRANS.STOP_PAYMENT_REMOVE_MARK).PadLeft(5, '0'))) { lgText.InnerHtml = "Payment Remove Mark Approval Queue List"; StopPaymentDAL oStopPayDAL = new StopPaymentDAL(); TemplateBuilder tbGvData = new TemplateBuilder(); tbGvData.AppendLiteralString("No 'Payment Remove Marks' record found"); gvData.EmptyDataTemplate = tbGvData; Result oResult = oStopPayDAL.LoadUnapprovedPaymentRemoveMarkList(null, true, oConfig.DivisionID, oConfig.BankCodeID); DataTable dtList = (DataTable)oResult.Return; if (dtList != null) { gvData.DataSource = dtList; gvData.DataBind(); Session[Constants.SES_CONFIG_UNAPPROVE_DATA] = dtList; } } else if (sType.Equals(Convert.ToString((int)Constants.PAGEINDEX_TRANS.DUPLICATE_ISSUE).PadLeft(5, '0'))) { lgText.InnerHtml = "Duplicate Issues Approval Queue List"; DuplicateIssueDAL oDIDAL = new DuplicateIssueDAL(); TemplateBuilder tbGvData = new TemplateBuilder(); tbGvData.AppendLiteralString("No 'Duplicate Issues' record found"); gvData.EmptyDataTemplate = tbGvData; Result oResult = oDIDAL.LoadUnapprovedList(null, true, oConfig.DivisionID, oConfig.BankCodeID); DataTable dtList = (DataTable)oResult.Return; if (dtList != null) { gvData.DataSource = dtList; gvData.DataBind(); Session[Constants.SES_CONFIG_UNAPPROVE_DATA] = dtList; } } #endregion Stop Payment #region Lien else if (sType.Equals(Convert.ToString((int)Constants.PAGEINDEX_TRANS.LIEN_MARK).PadLeft(5, '0'))) { lgText.InnerHtml = "Lien Mark Approval Queue List"; LienDAL oLienDAL = new LienDAL(); TemplateBuilder tbGvData = new TemplateBuilder(); tbGvData.AppendLiteralString("No 'Lien Mark' record found"); gvData.EmptyDataTemplate = tbGvData; Result oResult = oLienDAL.LoadUnapprovedLienMarkList(null, true, oConfig.DivisionID, oConfig.BankCodeID); DataTable dtList = (DataTable)oResult.Return; if (dtList != null) { gvData.DataSource = dtList; gvData.DataBind(); Session[Constants.SES_CONFIG_UNAPPROVE_DATA] = dtList; } } else if (sType.Equals(Convert.ToString((int)Constants.PAGEINDEX_TRANS.LIEN_MARK_REMOVE).PadLeft(5, '0'))) { lgText.InnerHtml = "Lien Mark Remove Approval Queue List"; LienDAL oLienDAL = new LienDAL(); TemplateBuilder tbGvData = new TemplateBuilder(); tbGvData.AppendLiteralString("No 'Lien Mark Remove' record found"); gvData.EmptyDataTemplate = tbGvData; Result oResult = oLienDAL.LoadUnapprovedLienRemoveMarkList(null, true, oConfig.DivisionID, oConfig.BankCodeID); DataTable dtList = (DataTable)oResult.Return; if (dtList != null) { gvData.DataSource = dtList; gvData.DataBind(); Session[Constants.SES_CONFIG_UNAPPROVE_DATA] = dtList; } } #endregion Lien #region Reinvestment else if (sType.Equals(Convert.ToString((int)Constants.PAGEINDEX_TRANS.REINVESTMENT).PadLeft(5, '0'))) { lgText.InnerHtml = "Reinvestment Approval Queue List"; ReinvestmentDAL oRiDAL = new ReinvestmentDAL(); TemplateBuilder tbGvData = new TemplateBuilder(); tbGvData.AppendLiteralString("No 'Reinvestment' record found"); gvData.EmptyDataTemplate = tbGvData; Result oResult = oRiDAL.LoadUnapprovedList(null, true, oConfig.DivisionID, oConfig.BankCodeID); DataTable dtList = (DataTable)oResult.Return; if (dtList != null) { gvData.DataSource = dtList; gvData.DataBind(); Session[Constants.SES_CONFIG_UNAPPROVE_DATA] = dtList; } } #endregion Reinvestment #region ACE Register else if (sType.Equals(Convert.ToString((int)Constants.PAGEINDEX_TRANS.ACE_MANAGER).PadLeft(5, '0'))) { lgText.InnerHtml = "ACE Registration Queue List"; IssueDAL oIssueDAL = new IssueDAL(); TemplateBuilder tbGvData = new TemplateBuilder(); tbGvData.AppendLiteralString("No record found"); gvData.EmptyDataTemplate = tbGvData; Result oResult = oIssueDAL.LoadUnapprovedACERegisterList(null, true, oConfig.DivisionID, oConfig.BankCodeID); DataTable dtList = (DataTable)oResult.Return; if (dtList != null) { gvData.DataSource = dtList; gvData.DataBind(); Session[Constants.SES_CONFIG_UNAPPROVE_DATA] = dtList; } } #endregion ACE Register //Make Filter By User //Config oConfig = Session[Constants.SES_USER_CONFIG] as Config; if (!string.IsNullOrEmpty(oConfig.FilterMakerID)) { DDListUtil.Assign(ddlUserName, oConfig.FilterMakerID.Trim()); FilterData(oConfig.FilterMakerID.Trim()); } } }
public void Can_Perform_Delete_When_Assigned_To_Doc() { // Arrange var provider = ScopeProvider; var scopeAccessor = (IScopeAccessor)provider; var dataTypeService = GetRequiredService <IDataTypeService>(); var fileService = GetRequiredService <IFileService>(); using (provider.CreateScope()) { var templateRepository = CreateRepository(provider); var globalSettings = new GlobalSettings(); var serializer = new JsonNetSerializer(); var tagRepository = new TagRepository(scopeAccessor, AppCaches.Disabled, LoggerFactory.CreateLogger <TagRepository>()); var commonRepository = new ContentTypeCommonRepository(scopeAccessor, templateRepository, AppCaches, ShortStringHelper); var languageRepository = new LanguageRepository(scopeAccessor, AppCaches.Disabled, LoggerFactory.CreateLogger <LanguageRepository>()); var contentTypeRepository = new ContentTypeRepository(scopeAccessor, AppCaches.Disabled, LoggerFactory.CreateLogger <ContentTypeRepository>(), commonRepository, languageRepository, ShortStringHelper); var relationTypeRepository = new RelationTypeRepository(scopeAccessor, AppCaches.Disabled, LoggerFactory.CreateLogger <RelationTypeRepository>()); var entityRepository = new EntityRepository(scopeAccessor, AppCaches.Disabled); var relationRepository = new RelationRepository(scopeAccessor, LoggerFactory.CreateLogger <RelationRepository>(), relationTypeRepository, entityRepository); var propertyEditors = new PropertyEditorCollection(new DataEditorCollection(() => Enumerable.Empty <IDataEditor>())); var dataValueReferences = new DataValueReferenceFactoryCollection(() => Enumerable.Empty <IDataValueReferenceFactory>()); var contentRepo = new DocumentRepository( scopeAccessor, AppCaches.Disabled, LoggerFactory.CreateLogger <DocumentRepository>(), LoggerFactory, contentTypeRepository, templateRepository, tagRepository, languageRepository, relationRepository, relationTypeRepository, propertyEditors, dataValueReferences, dataTypeService, serializer, Mock.Of <IEventAggregator>()); var template = TemplateBuilder.CreateTextPageTemplate(); fileService.SaveTemplate(template); // else, FK violation on contentType! var contentType = ContentTypeBuilder.CreateSimpleContentType("umbTextpage2", "Textpage", defaultTemplateId: template.Id); contentTypeRepository.Save(contentType); var textpage = ContentBuilder.CreateSimpleContent(contentType); contentRepo.Save(textpage); textpage.TemplateId = template.Id; contentRepo.Save(textpage); // Act var templates = templateRepository.Get("textPage"); templateRepository.Delete(templates); // Assert Assert.IsNull(templateRepository.Get("textPage")); } }
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; }
/// <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 void Initialize() { // Arrange _tpl = TemplateBuilder.FromString("{" + VariableName + "}") .Build(); }
/// <summary> /// Builds the error page. /// </summary> /// <param name="exceptionText">The exception text.</param> /// <returns></returns> public static string Build(string?exceptionText = null) => TemplateBuilder.FromCurrentAssembly("Diagnostics.Templates.Http500MinimalErrorPage.html") .Build() .Set("ExceptionText", exceptionText) .Get();
public void UnpublishedNameChanges() { var urlSegmentProvider = new DefaultUrlSegmentProvider(ShortStringHelper); Template template = TemplateBuilder.CreateTextPageTemplate(); FileService.SaveTemplate(template); ContentType contentType = ContentTypeBuilder.CreateTextPageContentType(defaultTemplateId: template.Id); ContentTypeService.Save(contentType); Content content = ContentBuilder.CreateTextpageContent(contentType, "hello", Constants.System.Root); ContentService.SaveAndPublish(content); IContent cachedContent = ContentService.GetById(content.Id); var segment = urlSegmentProvider.GetUrlSegment(cachedContent); // Does a new node work? Assert.AreEqual("hello", segment); content.Name = "goodbye"; cachedContent = ContentService.GetById(content.Id); segment = urlSegmentProvider.GetUrlSegment(cachedContent); // We didn't save anything, so all should still be the same Assert.AreEqual("hello", segment); ContentService.Save(content); cachedContent = ContentService.GetById(content.Id); segment = urlSegmentProvider.GetUrlSegment(cachedContent); // At this point we have saved the new name, but not published. The url should still be the previous name Assert.AreEqual("hello", segment); PublishedSnapshotService.Rebuild(); cachedContent = ContentService.GetById(content.Id); segment = urlSegmentProvider.GetUrlSegment(cachedContent); // After a rebuild, the unpublished name should still not be the url. // This was previously incorrect, per #11074 Assert.AreEqual("hello", segment); ContentService.SaveAndPublish(content); cachedContent = ContentService.GetById(content.Id); segment = urlSegmentProvider.GetUrlSegment(cachedContent); // The page has now been published, so we should see the new url segment Assert.AreEqual("goodbye", segment); PublishedSnapshotService.Rebuild(); cachedContent = ContentService.GetById(content.Id); segment = urlSegmentProvider.GetUrlSegment(cachedContent); // Just double checking that things remain after a rebuild Assert.AreEqual("goodbye", segment); }
/// <summary> /// 初始化按钮包装器渲染器 /// </summary> /// <param name="config">配置</param> public ButtonWrapperRender(IConfig config) : base(config) { _config = config; _templateBuilder = new TemplateBuilder(); }
/// <summary> /// 初始化菜单生成器 /// </summary> public MenuBuilder() : base("mat-menu") { _templateBuilder = new TemplateBuilder(); _templateBuilder.AddAttribute("matMenuContent", "", false); SetContent(_templateBuilder); }
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; } }
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { if (context == null) { throw new ArgumentNullException(nameof(context)); } if (output == null) { throw new ArgumentNullException(nameof(output)); } if (output.TagName == "cms-display") { output.TagName = null; } ModelExplorer fieldEditor = null; ModelExplorer expression = null; var viewData = ViewContext.ViewData; DisableEditing = DisableEditing || !ViewContext.HttpContext.IsInCmsMode(); if (For != null) { if (!DisableEditing) { var memExpression = For.Body as MemberExpression; if (memExpression != null) { var target = Expression.Lambda(memExpression.Expression).Compile().DynamicInvoke(); if (target != null) { viewData = new ViewDataDictionary(_modelMetadataProvider, new ModelStateDictionary()) { Model = target }; fieldEditor = DisableEditing ? null : ExpressionMetadataProvider.FromStringExpression("FieldEditors", viewData, _modelMetadataProvider); if (fieldEditor?.Model != null) { viewData = new ViewDataDictionary(_modelMetadataProvider, new ModelStateDictionary()) { Model = fieldEditor.Model }; expression = ExpressionMetadataProvider.FromStringExpression(memExpression.Member.Name, viewData, _modelMetadataProvider); } if (expression?.Model != null) { expression = ExpressionMetadataProvider.FromStringExpression(memExpression.Member.Name, viewData, _modelMetadataProvider); } } } } if (expression?.Model != null) { AsHtml = true; } else { expression = ExpressionMetadataProvider.FromLambdaExpression <object, object>(For, new ViewDataDictionary <object>(ViewContext.ViewData), _modelMetadataProvider); viewData = ViewContext.ViewData; } } else { fieldEditor = DisableEditing ? null : ExpressionMetadataProvider.FromStringExpression("FieldEditors", viewData, _modelMetadataProvider); if (fieldEditor != null && fieldEditor.Model != null) { viewData = new ViewDataDictionary(_modelMetadataProvider, new ModelStateDictionary()) { Model = fieldEditor.Model }; expression = ExpressionMetadataProvider.FromStringExpression(ForPropertyName, viewData, _modelMetadataProvider); } if (expression?.Model != null) { AsHtml = true; } else { expression = ExpressionMetadataProvider.FromStringExpression(ForPropertyName, ViewContext.ViewData, _modelMetadataProvider); viewData = ViewContext.ViewData; } } IHtmlContent content = null; if (expression != null && expression.Model != null) { content = new TemplateBuilder( _viewEngine, _viewBufferScope, this.ViewContext, viewData, expression, null, //ForPropertyName ?? ExpressionHelper.GetExpressionText((LambdaExpression)For), null, true, null).Build(); if (content is ViewBuffer) //displaytemplate { AsHtml = true; } } if (content == null && output.TagName != null) { var childContent = await output.GetChildContentAsync(); if (string.IsNullOrEmpty(childContent?.GetContent())) { output.TagName = null; output.SuppressOutput(); } return; } output.TagMode = TagMode.StartTagAndEndTag; if (content == null) { return; } if (AsHtml) { output.PreContent.SetHtmlContent(content); } else { using (var writer = new System.IO.StringWriter()) { content.WriteTo(writer, HtmlEncoder.Default); output.PreContent.SetContent(writer.ToString()); } } }