Beispiel #1
0
        public ActionResult Designer(int id)
        {
            var widget = dataContext.Widgets.Find(id);
            var widgetHelper = new WidgetHelper(widget);
            var designerView = widget.WidgetDescriptor.ResolveFileName(Server.MapPath("~/content/widgets"), "_designer.cshtml");
            if (System.IO.File.Exists(designerView))
                designerView = widget.WidgetDescriptor.ResolveUri("_designer.cshtml");
            else
                designerView = "Designer";

            return PartialView(designerView, widgetHelper);
        }
Beispiel #2
0
        private void RenderPropertyControl(HtmlTextWriter writer, WidgetHelper helper, PropertyDescriptor descriptor)
        {
            //var ajax = new AjaxHelper(ViewContext, ViewDataContainer);
            string fieldID = helper.GenerateFieldID(descriptor.Name);
            writer.WriteBeginTag("div");
            writer.WriteAttribute("class", "d-field");
            writer.Write(Html32TextWriter.TagRightChar);

            if (descriptor.PropertyControl != ControlTypes.Checkbox && descriptor.PropertyControl != ControlTypes.Radiobox)
            {
                writer.WriteBeginTag("label");
                writer.WriteAttribute("for", fieldID);
                writer.Write(Html32TextWriter.TagRightChar);
                writer.WriteEncodedText(string.IsNullOrEmpty(descriptor.DisplayName) ? descriptor.Name : descriptor.DisplayName);
                writer.WriteEndTag("label");
            }

            switch (descriptor.PropertyControl)
            {
                case ControlTypes.TextArea:
                    writer.WriteBeginTag("textarea");
                    writer.WriteAttribute("id", fieldID);
                    writer.WriteAttribute("name", descriptor.Name);
                    writer.Write(Html32TextWriter.TagRightChar);
                    writer.WriteEncodedText(descriptor.Value.ToString());
                    writer.WriteEndTag("textarea");
                    break;
                case ControlTypes.Checkbox:
                    writer.WriteBeginTag("input");
                    writer.WriteAttribute("type", "checkbox");
                    writer.WriteAttribute("name", descriptor.Name);
                    writer.WriteAttribute("id", fieldID);
                    writer.WriteAttribute("data-label", string.IsNullOrEmpty(descriptor.DisplayName) ? descriptor.Name : descriptor.DisplayName);
                    writer.WriteAttribute("value", descriptor.Value.ToString());
                    writer.Write(Html32TextWriter.SelfClosingTagEnd);
                    break;
                case ControlTypes.DateTimePicker:
                    writer.WriteBeginTag("input");
                    writer.WriteAttribute("type", "datetime");
                    writer.WriteAttribute("name", descriptor.Name);
                    writer.WriteAttribute("id", fieldID);
                    writer.WriteAttribute("value", descriptor.Value.ToString());
                    writer.Write(Html32TextWriter.SelfClosingTagEnd);
                    break;
                case ControlTypes.Number:
                    writer.WriteBeginTag("input");
                    writer.WriteAttribute("type", "number");
                    writer.WriteAttribute("name", descriptor.Name);
                    writer.WriteAttribute("id", fieldID);
                    writer.WriteAttribute("value", descriptor.Value.ToString());
                    writer.Write(Html32TextWriter.SelfClosingTagEnd);
                    break;
                case ControlTypes.Slider:
                    //writer.Write(ajax.Dna().Slider(fieldID)
                    //.Value((int)descriptor.Value)
                    //.GetHtml());
                    break;
                case ControlTypes.Radiobox:
                    writer.WriteBeginTag("input");
                    writer.WriteAttribute("type", "radio");
                    writer.WriteAttribute("name", descriptor.Name);
                    writer.WriteAttribute("data-label", string.IsNullOrEmpty(descriptor.DisplayName) ? descriptor.Name : descriptor.DisplayName);
                    writer.WriteAttribute("id", fieldID);
                    writer.WriteAttribute("value", descriptor.Value.ToString());
                    writer.Write(Html32TextWriter.SelfClosingTagEnd);
                    break;
                case ControlTypes.Richtext:
                    //writer.Write(ajax.Dna().RichTextBox(fieldID)
                    // .Value(descriptor.Value.ToString())
                    //.Resizable()
                    //.GetHtml());
                    break;
                default:
                    writer.WriteBeginTag("input");
                    writer.WriteAttribute("type", "text");
                    writer.WriteAttribute("name", descriptor.Name);
                    writer.WriteAttribute("id", fieldID);
                    writer.WriteAttribute("value", descriptor.Value.ToString());
                    writer.Write(Html32TextWriter.SelfClosingTagEnd);
                    //writer.Write(ajax.Dna().TextBox(fieldID)
                    // .Value(descriptor.Value == null ? "" : descriptor.Value.ToString())
                    //.GetHtml());
                    break;
            }
            writer.WriteEndTag("div");
        }
Beispiel #3
0
        /// <summary>
        /// Render the widget to current response output.
        /// </summary>
        /// <param name="writer"></param>
        public override void Render(HtmlTextWriter writer)
        {
            var locale = App.Get().Context.Locale;
            if (!string.IsNullOrEmpty(locale))
                App.Get().SetCulture(locale);

            bool isPreviewMode = false;
            Dictionary<string, PropertyDescriptor> propertyDescriptors = null;
            Dictionary<string, object> userdata = new Dictionary<string, object>();

            var bag = Html.ViewContext.Controller.ViewBag;
            if (bag != null)
            {
                if (bag.PropertyDescriptors != null)
                {
                    propertyDescriptors = bag.PropertyDescriptors as Dictionary<string, PropertyDescriptor>;
                    if (propertyDescriptors != null)
                    {
                        foreach (var key in propertyDescriptors.Keys)
                            userdata.Add(key, propertyDescriptors[key].Value);
                    }
                }

                if (bag.IsPreview != null)
                    isPreviewMode = bag.IsPreview;

                Model = bag.WidgetInstance;
            }

            var widgetHelper = new WidgetHelper()
            {
                Model = Model,
                UserPreferences = userdata,
                PropertyDescriptors = propertyDescriptors
            };

            if (isPreviewMode)
            {
                if (!PreviewTemplate.IsEmpty)
                    PreviewTemplate.WriteTo(widgetHelper, writer);
                else
                {
                    if (!ContentTemplate.IsEmpty)
                        ContentTemplate.WriteTo(widgetHelper, writer);
                }
            }
            else
            {
                if (IsDesignMode)
                {
                    if (userdata.Count > 0 && this.Model.WidgetDescriptor.WidgetType==1)
                    {
                        var urlhelper = new UrlHelper(Request.RequestContext);

                        writer.WriteBeginTag("form");
                        writer.WriteAttribute("class", "d-widget-prefs d-tran-fast d-form");
                        writer.WriteAttribute("data-ajax", "true");
                        writer.WriteAttribute("data-ajax-url", urlhelper.Content("~/api/" + AppModel.Get().Context.Website + "/widgets/apply"));
                        writer.WriteAttribute("data-ajax-method", "post");
                        //writer.WriteAttribute("data-ajax-begin", "$.loading()");
                        writer.WriteAttribute("data-ajax-success", "$('#widget_" + this.Model.ID.ToString() + "').widget('refresh');" + (AutoSave ? "" : "$.closePanels();"));
                        if (this.HideUserPreferences)
                            writer.WriteAttribute("data-hidden", "true");

                        if (this.AutoSave)
                        {
                            writer.WriteAttribute("data-auto-save", "true");
                            writer.WriteAttribute("onchange", "$(this).submit();");
                        }

                        //    writer.WriteAttribute("data-allow-pop", "false");

                        writer.Write(HtmlTextWriter.TagRightChar);

                        writer.WriteBeginTag("input");
                        writer.WriteAttribute("type", "hidden");
                        writer.WriteAttribute("name", "id");
                        writer.WriteAttribute("value", Model.ID.ToString());
                        writer.Write(HtmlTextWriter.SelfClosingTagEnd);

                        if (!UserPreferencesTemplate.IsEmpty)
                        {
                            UserPreferencesTemplate.WriteTo(widgetHelper, writer);
                        }
                        else
                        {
                            foreach (var key in propertyDescriptors.Keys)
                            {
                                if (!propertyDescriptors[key].IsReadonly)
                                    RenderPropertyControl(writer, widgetHelper, propertyDescriptors[key]);
                            }
                        }

                        writer.WriteEndTag("form");

                    }

                    if (!DesignTemplate.IsEmpty)
                        DesignTemplate.WriteTo(widgetHelper, writer);
                    else
                        if (!ContentTemplate.IsEmpty)
                            ContentTemplate.WriteTo(widgetHelper, writer);
                    writer.Write("<script type=\"text/javascript\">$(function(){ $('#widget_" + this.Model.ID.ToString() + "').taoUI(); });</script>");
                    //writer.Write("<script type=\"text/javascript\">$(function(){ $('#widget_" + this.Model.ID.ToString() + "').unobtrusive_ajax().taoUI(); });</script>");
                }
                else
                {
                    if (Model.Cached)
                    {
                        //Render cachable widget eg:Html widget
                        var cachedHtml = "";
                        var cachedKey = "widget" + Model.ID.ToString() + "_caching_html";
                        if (Context.Cache[cachedKey] != null)
                        {
                            cachedHtml = Context.Cache[cachedKey].ToString();
                        }
                        else
                        {
                            var cachedBuilder = new StringBuilder();
                            using (var cachedTextWriter = new System.IO.StringWriter(cachedBuilder))
                            {
                                using (var cachedWriter = new Html32TextWriter(cachedTextWriter))
                                {
                                    if (!ContentTemplate.IsEmpty)
                                        ContentTemplate.WriteTo(widgetHelper, cachedWriter);
                                    if (!HeaderTemplate.IsEmpty && Model.ShowHeader)
                                    {
                                        cachedWriter.Write("<div id=\"widget_" + this.Model.ID.ToString() + "_header_holder\" style=\"display:none;\">");
                                        HeaderTemplate.WriteTo(widgetHelper, cachedWriter);
                                        cachedWriter.Write("</div>");
                                        cachedWriter.Write("<script type=\"text/javascript\">$(function(){ if ($('#widget_" + this.Model.ID.ToString() + "').find('.d-widget-header').length) { $('#widget_" + this.Model.ID.ToString() + "').find('.d-widget-header').empty().append($('#widget_" + this.Model.ID.ToString() + "_header_holder').children());$('#widget_" + this.Model.ID.ToString() + "_header_holder').remove(); }  });</script>");
                                    }
                                }
                            }
                            cachedHtml = cachedBuilder.ToString();
                            Context.Cache.Add(cachedKey, cachedHtml, null, DateTime.Now.AddMinutes(5), System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.Default, null);
                        }
                        writer.Write(cachedHtml);
                    }
                    else
                    {
                        if (!ContentTemplate.IsEmpty)
                            ContentTemplate.WriteTo(widgetHelper, writer);

                        if (!HeaderTemplate.IsEmpty && Model.ShowHeader)
                        {
                            writer.Write("<div id=\"widget_" + this.Model.ID.ToString() + "_header_holder\" style=\"display:none;\">");
                            HeaderTemplate.WriteTo(widgetHelper, writer);
                            writer.Write("</div>");
                            writer.Write("<script type=\"text/javascript\">$(function(){ if ($('#widget_" + this.Model.ID.ToString() + "').find('.d-widget-header').length) { $('#widget_" + this.Model.ID.ToString() + "').find('.d-widget-header').empty().append($('#widget_" + this.Model.ID.ToString() + "_header_holder').children());$('#widget_" + this.Model.ID.ToString() + "_header_holder').remove(); }  });</script>");
                        }
                    }
                }
            }
            //writer.Write(System.Web.Optimization.Scripts.Render("~/bundles/jqueryval"));
            //writer.Write(html.StartupScripts().ToString());
        }
 private static Type GetTypeByName(ControllerContext controllerContext)
 {
     return(WidgetHelper.GetTypeByName(GetValueFromContext(controllerContext, "WidgetType")));
 }
Beispiel #5
0
        protected void Page_Load(object sender, EventArgs e)
        {
            //Todo:Store this in database.
            Collection <WidgetModel> models = new Collection <WidgetModel>
            {
                new WidgetModel
                {
                    RowNumber    = 1,
                    ColumnNumber = 1,
                    WidgetSource = "~/Modules/Sales/Widgets/SalesByGeographyWidget.ascx"
                },
                new WidgetModel
                {
                    RowNumber    = 2,
                    ColumnNumber = 1,
                    WidgetSource = "~/Modules/Sales/Widgets/SalesByOfficeWidget.ascx"
                },
                new WidgetModel
                {
                    RowNumber    = 2,
                    ColumnNumber = 2,
                    WidgetSource = "~/Modules/Sales/Widgets/CurrentOfficeSalesByMonthWidget.ascx"
                },
                new WidgetModel
                {
                    RowNumber    = 3,
                    ColumnNumber = 4,
                    WidgetSource = "~/UserControls/Widgets/WorkflowWidget.ascx"
                },
                new WidgetModel
                {
                    RowNumber    = 3,
                    ColumnNumber = 1,
                    WidgetSource = "~/UserControls/Widgets/OfficeInformationWidget.ascx"
                },
                new WidgetModel
                {
                    RowNumber    = 3,
                    ColumnNumber = 3,
                    WidgetSource = "~/UserControls/Widgets/AlertsWidget.ascx"
                },
                new WidgetModel
                {
                    RowNumber    = 3,
                    ColumnNumber = 2,
                    WidgetSource = "~/UserControls/Widgets/LinksWidget.ascx"
                },
                new WidgetModel
                {
                    RowNumber    = 4,
                    ColumnNumber = 1,
                    WidgetSource = "~/Modules/Sales/Widgets/TopSellingProductOfAllTimeWidget.ascx"
                },
                new WidgetModel
                {
                    RowNumber    = 4,
                    ColumnNumber = 2,
                    WidgetSource = "~/Modules/Sales/Widgets/TopSellingProductOfAllTimeCurrentWidget.ascx"
                }
            };

            WidgetHelper.LoadWidgets(models, this.WidgetPlaceholder, this.Page);
        }