private TagBuilder GetToolbarBuilder(string title, FormEditorRenderingOptions renderingOptions) { var toolbarBuilder = new TagBuilder("div"); var toolbarHeaderBuilder = new TagBuilder("div"); var toolbarTitleBuilder = new TagBuilder("h1"); toolbarBuilder.AddCssClass("grid_toolbar row"); toolbarBuilder.AddCssClass(Utilities.ReflectionHelpers.GetDescription(renderingOptions.Theme)); toolbarHeaderBuilder.AddCssClass("grid_toolbar_header"); toolbarTitleBuilder.InnerHtml = title; toolbarHeaderBuilder.InnerHtml = toolbarTitleBuilder.ToString(); toolbarBuilder.InnerHtml = toolbarHeaderBuilder.ToString(); return(toolbarBuilder); }
private string RenderFormTab(FormEditorRenderingOptions renderingOptions) { var formContainerBuilder = new TagBuilder("div"); var toolbarBuilder = GetToolbarBuilder("Form", renderingOptions); var formWrapperBuilder = new TagBuilder("div"); var formBuilder = new TagBuilder("form"); var formInnerContainerBuilder = new TagBuilder("div"); formWrapperBuilder.AddCssClass("form_builder-formContainer"); formInnerContainerBuilder.AddCssClass("form_container row " + Utilities.ReflectionHelpers.GetDescription(renderingOptions.Theme)); formBuilder.AddCssClass("form_builder-form"); formBuilder.InnerHtml = formInnerContainerBuilder.ToString(); formWrapperBuilder.InnerHtml = formBuilder.ToString(); formContainerBuilder.AddCssClass("form_builder-tab form_builder-form col-lg-6 col-md-6 col-sm-6"); formContainerBuilder.InnerHtml = toolbarBuilder.ToString() + formWrapperBuilder.ToString(); return(formContainerBuilder.ToString()); }
private string RenderControlsTab(FormEditorRenderingOptions renderingOptions) { var controlsContainerBuilder = new TagBuilder("div"); var toolbarBuilder = GetToolbarBuilder("Controls", renderingOptions); controlsContainerBuilder.AddCssClass("form_builder-tab form_builder-controls col-lg-3 col-md-3 col-sm-3"); controlsContainerBuilder.InnerHtml = toolbarBuilder.ToString(); var controls = this.Builder.GetAvailableControls(); var groupedControls = controls.GroupBy(x => x.TabId, (key, group) => new { TabId = key, Controls = group.ToList() }); if (controls != null && controls.Any()) { controls = controls.OrderBy(x => x.Order).ToList(); var controlOptions = new List <object>(); foreach (var control in controls) { controlOptions.Add(control); } this.Builder.options.Add("controls", controlOptions); } var controlsWrapper = new TagBuilder("div"); controlsWrapper.AddCssClass("form_builder-controlsWrapper"); var tabs = this.Builder.GetTabs(); if (tabs.Any(x => !x.IsDefaultTab)) { tabs.Remove(tabs.FirstOrDefault(x => x.IsDefaultTab)); } if (tabs.Any() && tabs.Any(x => !x.IsDefaultTab)) { if (!tabs.Any(x => x.IsOpen && !x.IsDefaultTab)) { tabs.FirstOrDefault(x => !x.IsDefaultTab).IsOpen = true; } var controlTabsBuilder = GetControlTabsBuilder(tabs); controlsWrapper.InnerHtml = controlTabsBuilder.ToString(); } if (tabs.Count(x => x.IsOpen) > 1) { var firstOpenTab = tabs.FirstOrDefault(x => x.IsOpen); tabs.ForEach(x => { x.IsOpen = false; }); firstOpenTab.IsOpen = true; } foreach (var tab in tabs) { var controlsListBuilder = new TagBuilder("ul"); controlsListBuilder.AddCssClass("form_builder-controlsList list-group"); controlsListBuilder.Attributes.Add("data-tabid", tab.Id.ToString()); if (!tab.IsOpen) { controlsListBuilder.Attributes.Add("style", "display:none;"); } controlsWrapper.InnerHtml += controlsListBuilder.ToString(); } controlsContainerBuilder.InnerHtml += controlsWrapper.ToString(); return(controlsContainerBuilder.ToString()); }
private string RenderPropertiesTab(FormEditorRenderingOptions renderingOptions) { var propertiesContainerBuilder = new TagBuilder("div"); var toolbarBuilder = GetToolbarBuilder("Properties", renderingOptions); var settingsContainerBuilder = new TagBuilder("div"); settingsContainerBuilder.AddCssClass("form_builder-settingsContainer row"); var controls = this.Builder.GetControlsMetadata(); foreach (var control in controls) { var metadataBuilder = new TagBuilder("div"); metadataBuilder.AddCssClass("col-lg-12 col-md-12 col-sm-12"); var propertiesTabs = from prop in control.GetType().GetProperties() let propertiesAttributes = prop.GetCustomAttributes(typeof(FormBuilderPropertiesTab), true) let displayAttributes = prop.GetCustomAttributes(typeof(DisplayAttribute), true) where propertiesAttributes.Length == 1 select new { PropertiesAttribute = propertiesAttributes.FirstOrDefault() as FormBuilderPropertiesTab, DisplayAttribute = displayAttributes.Select(x => x as DisplayAttribute).FirstOrDefault(), PropertyInfo = prop }; propertiesTabs = propertiesTabs.OrderBy(x => x.PropertiesAttribute.Order); foreach (var propertiesTab in propertiesTabs) { var title = propertiesTab.DisplayAttribute.GetName(); var titleBuilder = new TagBuilder("h3"); var titleGlyphiconBuilder = new TagBuilder("span"); var arrowGlyphiconBuilder = new TagBuilder("span"); titleGlyphiconBuilder.AddCssClass("glyphicon " + propertiesTab.PropertiesAttribute.Glyphicon.GetDescription()); arrowGlyphiconBuilder.AddCssClass("pull-right glyphicon " + Glyphicon.ChevronUp.GetDescription()); titleBuilder.InnerHtml = titleGlyphiconBuilder.ToString() + " " + title + arrowGlyphiconBuilder.ToString(); var formModel = propertiesTab.PropertyInfo.GetValue(control); if (formModel != null) { var propertiesFormString = FormHtmlRenderer.RenderForm(formModel, renderingOptions.Theme, true, propertiesTab.PropertyInfo.Name); metadataBuilder.InnerHtml += titleBuilder.ToString() + propertiesFormString; } } metadataBuilder.MergeAttribute("data-properties-for", ((int)control.Type).ToString()); metadataBuilder.MergeAttribute("style", "display:none;"); settingsContainerBuilder.InnerHtml += metadataBuilder.ToString(); } var panelBuilder = new BsPanelHtmlBuilder(this.Builder.GetViewContext()); var panelRenderer = new BsPanelLightRenderer(panelBuilder); panelBuilder.InitialEditable().Id("").Name("Settings").Glyphicon(Glyphicon.Cog); propertiesContainerBuilder.AddCssClass("form_builder-tab form_builder-properties col-lg-3 col-md-3 col-sm-3"); propertiesContainerBuilder.InnerHtml = toolbarBuilder.ToString() + settingsContainerBuilder.ToString(); return(propertiesContainerBuilder.ToString()); }