예제 #1
0
        /// <summary>
        /// Build the ng string for the div data element
        /// </summary>
        /// <param name="ng"></param>
        /// <returns></returns>
        private static string BuildNg2Div(Nanogallery ng)
        {
            var start = $"{{ ";
            var end   = $"}}";
            var body  = $"";

            foreach (var prop in ng.GetType().GetProperties())
            {
                var val = prop.GetValue(ng, null);
                if (prop.GetCustomAttributes(typeof(RenderAttribute), false).Length > 0 && val != null)
                {
                    if (IsSpecialProperty(prop))
                    {
                        body += RenderSpecial(val, prop.Name);
                    }
                    else if (val.GetType() == typeof(bool))
                    {
                        // bools are uppercase first late strings, so for JS convert to lower case string
                        body += $"\"{GetDescription(prop)}\": \"{val.ToString().ToLower()}\",";
                    }
                    else if (val.GetType() == typeof(int))
                    {
                        body += $"\"{GetDescription(prop)}\": {val},";
                    }
                    else
                    {
                        if (Int32.TryParse((string)val, out var num))
                        {
                            body += $"\"{GetDescription(prop)}\": {val},";
                        }
                        else
                        {
                            body += $"\"{GetDescription(prop)}\": \"{val}\",";
                        }
                    }
                }
            }
            var str = (start + body.Substring(0, body.Length - 1) + end);

            return(str);
        }
예제 #2
0
        /// <summary>
        /// Render a nanogallery from a list of images
        /// </summary>
        /// <param name="htmlHelper"></param>
        /// <param name="list"></param>
        /// <param name="ng"></param>
        /// <param name="albumId"></param>
        /// <returns></returns>
        public static IHtmlString Nanogallery(this HtmlHelper htmlHelper, IEnumerable list, Nanogallery ng = null, string albumId = null)
        {
            var urlHelper = new UrlHelper(htmlHelper.ViewContext.RequestContext);
            var div       = new TagBuilder("div");

            div.Attributes.Add("data-nanogallery2", BuildNg2Div(ng ?? new Nanogallery()));
            div.Attributes.Add("id", "nanogallery" + $"-{albumId}");
            var refs = BuildListGallery(urlHelper, list);

            foreach (var aref in refs)
            {
                div.InnerHtml += aref.ToString(TagRenderMode.Normal);
            }
            var writer = new HelperResult(x =>
            {
                // it's encoded here, so need to decode...
                x.Write(div.ToString().Replace("&#39;", "\'"));
            });

            return(writer);
        }