Ejemplo n.º 1
0
 /// <summary>
 ///  Converts the content list item display form virtual (relative) path to an application absolute path.
 /// </summary>
 /// <param name="helper">The url helper object.</param>
 /// <param name="item">The content query result item.</param>
 /// <returns>A string contains item display form absolute url. </returns>
 public static string Content(this UrlHelper helper, ContentQueryResultItem item)
 {
     if (item == null)
     {
         throw new ArgumentNullException("item");
     }
     return(helper.Content(item.Url));
 }
Ejemplo n.º 2
0
 /// <summary>
 ///  Converts the content list item display form virtual (relative) path to an application absolute path.
 /// </summary>
 /// <param name="helper">The url helper object.</param>
 /// <param name="item">The content query result item.</param>
 /// <returns>A string contains item display form absolute url. </returns>
 public static string Content(this UrlHelper helper, ContentQueryResultItem item)
 {
     if (item == null)
         throw new ArgumentNullException("item");
     return helper.Content(item.Url);
 }
Ejemplo n.º 3
0
 private static void RenderViewFieldTemplate(this HtmlHelper helper, ContentFieldRef field, string filePrefix, ContentQueryResultItem item)
 {
     var tmpl = field.Template;
     var list = field.Parent;
     var server = helper.ViewContext.RequestContext.HttpContext.Server;
     if (!string.IsNullOrEmpty(tmpl.Source))
     {
         var viewFileName = list.Package.ResolveUri(field.Template.Source);
         if (File.Exists(server.MapPath(viewFileName)))
             helper.RenderPartial(viewFileName, new ContentViewFieldValue(field, item));
         else
         {
             //Find template file in default path
             viewFileName = "~/content/types/base/fields/view/" + field.Template.Source;
             if (File.Exists(server.MapPath(viewFileName)))
                 helper.RenderPartial(viewFileName, new ContentViewFieldValue(field, item));
             else
                 helper.ViewContext.Writer.Write("<span>Field template file not found.</span>");
         }
     }
     else
     {
         if (!string.IsNullOrEmpty(tmpl.Text))
         {
             var viewFile = string.Format("_view_{0}_field_{1}_tmpl.cshtml", field.ParentView.Name.ToLower(), field.Name.ToLower());
             var viewUrl = TemplateHelper.SaveAsView(field.Parent, tmpl.Text, viewFile);
             helper.RenderPartial(viewUrl, new ContentViewFieldValue(field, item));
         }
     }
 }
Ejemplo n.º 4
0
        /// <summary>
        /// Render the field value to response output for View by specified field name and data item object.
        /// </summary>
        /// <param name="helper">The html helper object.</param>
        /// <param name="fieldName">The field name which defined in ViewFields</param>
        /// <param name="dataItem">The data item to display.</param>
        /// <param name="withLabel">Specified whether show the label on the left of the field value.</param>
        public static void ForView(this HtmlHelper helper, string fieldName, ContentQueryResultItem dataItem, bool? withLabel = null)
        {
            if (dataItem == null)
                return;

            var view = dataItem.View;
            var fieldRef = view.FieldRefs[fieldName];

            if (fieldRef == null)
            {
                //Render the error holder && view.Parent.Fields[fieldName] == null
                var title = fieldName;
                if (view.Parent.Fields[fieldName] != null)
                    title = view.Parent.Fields[fieldName].Title;
                helper.ViewContext.Writer.Write("<div class='d-state-error' style=\"padding:10px;\">Can not found the <strong>" + title + "</strong> field in this view</div>");
                return;
            }

            if (fieldRef.IsHidden)
            {
                helper.Hidden(fieldRef.Field, dataItem[fieldName]).WriteTo(helper.ViewContext.Writer);
                return;
            }

            var showLabel = fieldRef.ShowLabel;

            if (withLabel.HasValue)
                showLabel = withLabel.Value;

            if (showLabel && !dataItem.IsNull(fieldName))
            {
                var labelEl = new XElement("label", fieldRef.Title + ":");
                helper.ViewContext.Writer.Write(labelEl.OuterXml());
            }

            var tmpl = fieldRef.Template;

            if (!fieldRef.Template.IsEmpty)
            {
                if (tmpl.ContentType.Equals(TemplateContentTypes.Razor, StringComparison.OrdinalIgnoreCase))
                    helper.RenderViewFieldTemplate(fieldRef, "_viewitem", dataItem);

                if (tmpl.ContentType.Equals(TemplateContentTypes.Xslt, StringComparison.OrdinalIgnoreCase))
                {
                    throw new NotImplementedException();
                }

                if (tmpl.ContentType.Equals(TemplateContentTypes.Xml, StringComparison.OrdinalIgnoreCase))
                {
                    throw new NotImplementedException();
                }

                //When the view field has template definition exit this process
                return;
            }
            else
            {
                var field = fieldRef.Field;
                var server = helper.ViewContext.RequestContext.HttpContext.Server;
                var explicitTmpl = "~/content/types/base/fields/view/_" + field.FieldTypeString.ToLower() + ".cshtml";

                if (File.Exists(server.MapPath(explicitTmpl)))
                {
                    // render default field tmpl
                    helper.RenderPartial(explicitTmpl, new ContentViewFieldValue(fieldRef, dataItem));
                }
                else
                {
                    var linkToItem = field.IsLinkToItem;
                    var url = new UrlHelper(helper.ViewContext.RequestContext);
                    var writer = helper.ViewContext.Writer;
                    var linkFormat = "<a href=\"{0}\" class=\"d-link\">";
                    var fieldVal = field.Format(dataItem[field.Name]);
                    var link = url.Content(dataItem);

                    if (linkToItem)
                        writer.Write(string.Format(linkFormat, link));

                    if (field.FieldType == (int)ContentFieldTypes.Computed)
                    {
                        var f = field as ComputedField;
                        if (f != null)
                            f.RenderPattern(dataItem).WriteTo(writer);
                    }

                    writer.Write(fieldVal);

                    if (linkToItem)
                    {
                        writer.Write("</a>");
                    }
                }
            }
        }
Ejemplo n.º 5
0
        private static void RenderRowPattern(XElement rowElement, TextWriter writer, ContentQueryResultItem dataItem)
        {
            var urlHelper = DNA.Utility.UrlUtility.CreateUrlHelper();
            var elements = rowElement.Elements();
            //var nodes = row.ChildNodes;
            foreach (var element in elements)
            {
                if (element.Name.Equals("col"))
                {
                    if (element.HasElements)
                        RenderColPattern(element, writer, dataItem.List);
                    continue;
                }

                if (element.Name.Equals("url"))
                {
                    var rel = element.StrAttr("rel");
                    if (rel.Equals("disp"))
                        writer.Write(dataItem.UrlComponent);
                    else
                    {
                        if (rel.Equals("del"))
                            writer.Write(urlHelper.Action("Delete", "Contents", new { id = dataItem.ID, name = dataItem.List.Name }));
                        else
                            writer.Write(urlHelper.Content(dataItem.List.GetEditItemUrl(dataItem.Slug)));
                    }
                    continue;
                }

                if (element.Name.Equals("val"))
                {
                    var name = element.StrAttr("name");

                    if (!string.IsNullOrEmpty(name))
                    {
                        var field = dataItem.List.Fields[name];
                        if (field != null)
                        {
                            #region computed field
                            if (field.FieldType == (int)ContentFieldTypes.Computed)
                            {
                                var computedField = field as ComputedField;
                                if (computedField != null)
                                {
                                    var pattern = string.Format("<pattern>{0}</pattern>", computedField.DispPattern);
                                    var root = XElement.Parse(pattern);
                                    foreach (var fieldElement in root.Elements())
                                    {
                                        if (element.Name.Equals("html"))
                                            writer.Write(element.Value);

                                        if (element.Name.Equals("col") && element.HasAttributes)
                                        {
                                            var _name = element.StrAttr("name");
                                            var _output = element.StrAttr("output");
                                            if (string.IsNullOrEmpty(_output))
                                                _output = "formatted";

                                            if (!string.IsNullOrEmpty(_name))
                                            {
                                                var _val = dataItem[_name];
                                                if (_val != null)
                                                {
                                                    if (_output == "formatted")
                                                        writer.Write(field.Format(_val));
                                                    else
                                                        writer.Write(_val);
                                                }
                                                else
                                                {
                                                    writer.Write(dataItem[_name]);
                                                }
                                            }
                                        }
                                    }

                                    continue;
                                }
                            }
                            #endregion

                            var output = element.StrAttr("output");
                            var val = dataItem[name];
                            if (val != null)
                            {
                                if (output == "formatted")
                                    writer.Write(field.Format(val));
                                else
                                    writer.Write(val);
                            }
                        }
                        else //internal values
                        {
                            writer.Write(dataItem[name]);
                        }
                    }
                }

                if (element.Name == "html")
                {
                    writer.Write(element.Value);
                    continue;
                }
            }
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Render computed field display pattern html to response output.
        /// </summary>
        /// <param name="field">The computed field instance.</param>
        /// <param name="dataItem">The content query result item object.</param>
        /// <returns></returns>
        public static HelperResult RenderPattern(this ComputedField field, ContentQueryResultItem dataItem)
        {
            return new HelperResult(writer =>
            {
                //var pattern = string.Format("<pattern>{0}</pattern>", field.DispPattern);
                var root = XElement.Parse(field.DispPattern);
                var ns = root.GetDefaultNamespace();
                foreach (var element in root.Elements())
                {
                    if (element.Name.Equals(ns + "html"))
                        writer.Write(element.Value);

                    if (element.Name.Equals(ns + "col") && element.HasAttributes)
                    {
                        var name = element.StrAttr("name");
                        var output = element.StrAttr("output");
                        if (string.IsNullOrEmpty(output))
                            output = "formatted";
                        if (!string.IsNullOrEmpty(name))
                        {
                            var val = dataItem[name];
                            if (val != null)
                            {
                                if (output == "formatted")
                                    writer.Write(field.Format(val));
                                else
                                    writer.Write(val);
                            }
                            else
                            {
                                writer.Write(val);
                            }
                        }
                    }
                }
            });
        }
Ejemplo n.º 7
0
 /// <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);
 }
Ejemplo n.º 8
0
 /// <summary>
 /// Gets the css class name by specified content query result item. 
 /// </summary>
 /// <param name="dataItem">The content query result item.</param>
 /// <returns>A string contains css class names.</returns>
 public string GetCssClass(ContentQueryResultItem dataItem)
 {
     var cls = CssClass;
     if (this.FieldType == (int)ContentFieldTypes.Number || FieldType == (int)ContentFieldTypes.Integer || FieldType == (int)ContentFieldTypes.Currency)
     {
         if (dataItem[Name]==DBNull.Value || Convert.ToInt32(dataItem[Name]) == 0)
         {
             cls += " d-view-field-val-zero";
         }
     }
     return cls;
 }
Ejemplo n.º 9
0
 /// <summary>
 /// Initializes a new instance of the ContentViewFieldValue class with field and item.
 /// </summary>
 /// <param name="field">The view field object</param>
 /// <param name="item">The query result item.</param>
 public ContentViewFieldValue(ContentFieldRef field, ContentQueryResultItem item)
 {
     this.Item = item;
     Field = field;
 }