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); }
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"); }
/// <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"))); }
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); }