/// <summary> /// Initializes a new instance of ContentEditorField class. /// </summary> /// <param name="form">The form object.</param> /// <param name="field">The content field.</param> public ContentEditorField(ContentFormDecorator form, ContentField field) { this.ParentForm = form; this.Parent = form.Parent; field.CopyTo(this, "Parent"); Template = new ContentTemplate(); switch ((ContentFormTypes)form.FormType) { case ContentFormTypes.Display: if (field.HasDisplayTemlpate) Template.Source = field.DisplayTemplate; break; case ContentFormTypes.Activity: if (field.HasActivityTemplate) Template.Source = field.ActivityTemplate; break; case ContentFormTypes.Edit: if (field.HasEditTemlpate) Template.Source = field.EditTemplate; break; case ContentFormTypes.New: if (field.HasNewTemlpate) Template.Source = field.NewTemplate; break; } }
/// <summary> /// Initializes a new instance of ContentEditorField class. /// </summary> /// <param name="form">The form object.</param> /// <param name="field">The content field.</param> public ContentEditorField(ContentFormDecorator form, ContentField field) { this.ParentForm = form; this.Parent = form.Parent; field.CopyTo(this, "Parent"); Template = new ContentTemplate(); switch ((ContentFormTypes)form.FormType) { case ContentFormTypes.Display: if (field.HasDisplayTemlpate) { Template.Source = field.DisplayTemplate; } break; case ContentFormTypes.Activity: if (field.HasActivityTemplate) { Template.Source = field.ActivityTemplate; } break; case ContentFormTypes.Edit: if (field.HasEditTemlpate) { Template.Source = field.EditTemplate; } break; case ContentFormTypes.New: if (field.HasNewTemlpate) { Template.Source = field.NewTemplate; } break; } }
/// <summary> /// Converts the content form url virtual (relative) path to an application absolute path. /// </summary> /// <param name="helper">The url helper object.</param> /// <param name="form">The form object.</param> /// <param name="urlparams"></param> /// <returns>A absolute url of content form.</returns> public static string Content(this UrlHelper helper, ContentFormDecorator form, params object[] urlparams) { if (form == null) throw new ArgumentNullException("form"); var url = form.Url(urlparams); if (!string.IsNullOrEmpty(url)) return helper.Content(url); return "javascript:void(0);"; }
/// <summary> /// Renders the data item with form item template. /// </summary> /// <param name="html">The html helper object.</param> /// <param name="form">The form object.</param> /// <param name="dataItem">The data item object.</param> /// <returns></returns> public static HelperResult RenderFormTemplate(this HtmlHelper html, ContentFormDecorator form, ContentDataItemDecorator dataItem = null) { return new HelperResult(writer => { var body = form.Body; var _contentType = body.ContentType; #region razor template if (_contentType == TemplateContentTypes.Razor) { var viewFile = string.Format("_form_{0}_tmpl.cshtml", form.FormTypeString.ToLower()); var viewUrl = TemplateHelper.SaveAsView(form.Parent, body.Text, viewFile); html.RenderPartial(viewUrl, dataItem); return; } #endregion if (_contentType == TemplateContentTypes.Html) { throw new NotImplementedException(); } #region xml template if (_contentType == TemplateContentTypes.Xml) { var doc = XDocument.Parse(body.Text); foreach (var element in doc.Elements()) { if (element.Name == "label") { var nameAttr = element.StrAttr("name"); var field = form.Parent.Fields[nameAttr]; if (field != null) html.ViewContext.Writer.Write(html.Label(field)); continue; } if (element.Name == "notes") { var nameAttr = element.StrAttr("name"); var field = form.Parent.Fields[nameAttr]; if (field != null) html.ViewContext.Writer.Write(html.Notes(field)); continue; } if (element.Name.Equals("col")) { var nameAttr = element.StrAttr("name"); var field = form.Fields[nameAttr]; var hasLabel = element.BoolAttr("hasLabel"); var hasNotes = element.BoolAttr("hasNotes"); if (field != null) { switch ((ContentFormTypes)form.FormType) { case ContentFormTypes.Display: html.ForDisp(field, dataItem, hasLabel); break; case ContentFormTypes.Edit: html.ForEdit(field, dataItem, hasLabel, hasNotes); break; case ContentFormTypes.New: html.ForNew(field, hasLabel, hasNotes); break; } } } if (element.Name == "html") { writer.Write(element.InnerXml()); continue; } } } #endregion #region xslt template if (_contentType == TemplateContentTypes.Xslt) { throw new NotImplementedException(); } #endregion }); }
/// <summary> /// Render the form html to response output by specified the form object.This method will auto determine which mode to render. /// </summary> /// <param name="helper">The html helper object.</param> /// <param name="form">The content form object.</param> /// <param name="model">The data item for edit,display and activity form</param> /// <returns></returns> public static HelperResult RenderForm(this HtmlHelper helper, ContentFormDecorator form, ContentDataItemDecorator model = null) { return new HelperResult(writer => { var server = helper.ViewContext.HttpContext.Server; var list = form.Parent; var defaultViewFile = ""; var format = "~/content/types/base/forms/{0}.cshtml"; switch (form.FormType) { case (int)ContentFormTypes.New: defaultViewFile = string.Format(format, "_new"); break; case (int)ContentFormTypes.Edit: defaultViewFile = string.Format(format, "_edit"); break; case (int)ContentFormTypes.Activity: defaultViewFile = string.Format(format, "_activity"); break; default: defaultViewFile = string.Format(format, "_detail"); break; } var body = form.Body; if (form.HasTemplate) { //The form must be has template if (!string.IsNullOrEmpty(body.Source)) { #region file template var viewFile = list.Package.ResolveUri(form.Body.Source); if (!File.Exists(server.MapPath(viewFile))) { viewFile = defaultViewFile; } #endregion if (model != null) helper.RenderPartial(viewFile, model, helper.ViewData); else helper.RenderPartial(viewFile, helper.ViewData); } else { helper.RenderFormTemplate(form, model); } } else { //The form has no any template definition if (model != null) helper.RenderPartial(defaultViewFile, model, helper.ViewData); else helper.RenderPartial(defaultViewFile, helper.ViewData); } }); }
/// <summary> /// Render the form html to repsonse by specified the form object for query result item. /// </summary> /// <remarks> /// Supports for 3.0.3 /// </remarks> /// <param name="helper">The html helper object.</param> /// <param name="form">The content form object.</param> /// <param name="queryResultItem">The query result item.</param> /// <returns></returns> public static HelperResult RenderForm(this HtmlHelper helper, ContentFormDecorator form, ContentQueryResultItem queryResultItem) { return RenderForm(helper, form, queryResultItem.RawItem); }
/// <summary> /// Render fields elements to response output by specified form and item object. /// </summary> /// <param name="helper">The html helper object.</param> /// <param name="form">The form object.</param> /// <param name="item">The data item to render.</param> public static void RenderFields(this HtmlHelper helper, ContentFormDecorator form, ContentDataItemDecorator item = null) { foreach (var f in form.Fields) { switch ((ContentFormTypes)form.FormType) { case ContentFormTypes.New: helper.ForNew(f); break; case ContentFormTypes.Edit: helper.ForEdit(f, item); break; case ContentFormTypes.Activity: helper.ForAct(f, item, null); break; default: helper.ForDisp(f, item, null); break; } } }
/// <summary> /// Create a new web page by specified content form. /// </summary> /// <param name="form">The content form object.</param> /// <param name="parentId">The parent page id.</param> /// <param name="title">The page title</param> /// <param name="desc">The page description</param> /// <returns>A web page decorator object that wrapps the web page model.</returns> public WebPageDecorator CreatePage(ContentFormDecorator form, int parentId = 0, string title = "", string desc = "") { throw new NotImplementedException(); }
/// <summary> /// Initializes a new instance of the ContentEditorFieldCollection class. /// </summary> /// <param name="context">The data context.</param> /// <param name="parent">The content form object.</param> public ContentEditorFieldCollection(IDataContext context, ContentFormDecorator parent) { this.DataContext = context; this.Parent = parent; if (string.IsNullOrEmpty(this.Parent.Model.FieldsXml)) { var fields = parent.Parent.Fields; foreach (var f in fields) { this.Add(new ContentEditorField(parent, f)); } } else { var element = XElement.Parse(parent.Model.FieldsXml); foreach (var fieldElement in element.Elements()) { var ns = fieldElement.GetDefaultNamespace(); var _ref = parent.Parent.Fields[fieldElement.StrAttr("name")]; if (_ref == null) { continue; } var _editor = new ContentEditorField(parent, _ref); _editor.IsCaption = fieldElement.BoolAttr("caption"); _editor.ShowLabel = fieldElement.BoolAttr("showLabel"); if (fieldElement.HasAttributes && fieldElement.Attribute("hidden") != null) { _editor.IsHidden = fieldElement.BoolAttr("hidden"); } if (fieldElement.HasElements && fieldElement.Element(ns + "tmpl") != null) { _editor.Template = new ContentTemplate(fieldElement.Element(ns + "tmpl").OuterXml()); } else { switch ((ContentFormTypes)this.Parent.FormType) { case ContentFormTypes.Display: _editor.Template = new ContentTemplate() { Source = _editor.DisplayTemplate }; break; case ContentFormTypes.Activity: _editor.Template = new ContentTemplate() { Source = _editor.ActivityTemplate }; break; case ContentFormTypes.Edit: _editor.Template = new ContentTemplate() { Source = _editor.EditTemplate }; break; case ContentFormTypes.New: _editor.Template = new ContentTemplate() { Source = _editor.NewTemplate }; break; } } this.Add(_editor); } } }