예제 #1
0
        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);
        }
예제 #2
0
        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());
        }
예제 #3
0
        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());
        }
예제 #4
0
        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());
        }