Exemplo n.º 1
0
        public Task <string> SerializeImageAsync(JToken input, SanityOptions options)
        {
            var asset    = input["asset"];
            var imageRef = asset?["_ref"]?.ToString();

            if (asset == null || imageRef == null)
            {
                return(Task.FromResult(""));
            }

            var parameters = new StringBuilder();

            if (input["query"] != null)
            {
                parameters.Append($"?{(string)input["query"]}");
            }

            //build url
            var imageParts = imageRef.Split('-');
            var url        = new StringBuilder();

            url.Append("https://cdn.sanity.io/");
            url.Append(imageParts[0] + "s/");                    // images/
            url.Append(options.ProjectId + "/");                 // projectid/
            url.Append(options.Dataset + "/");                   // dataset/
            url.Append(imageParts[1] + "-");                     // asset id-
            url.Append(imageParts[2] + ".");                     // dimensions.
            url.Append(imageParts[3]);                           // file extension
            url.Append(parameters.ToString());                   // ?crop etc..

            return(Task.FromResult($"<figure><img src=\"{url}\"/></figure>"));
        }
Exemplo n.º 2
0
 public SanityHtmlBuilder(SanityOptions options,
                          Dictionary <string, Func <JToken, SanityOptions, Task <string> > > customSerializers = null,
                          JsonSerializerSettings serializerSettings   = null,
                          SanityHtmlBuilderOptions htmlBuilderOptions = null)
 {
     _options           = options;
     SerializerSettings = serializerSettings ?? new JsonSerializerSettings
     {
         ContractResolver  = new CamelCasePropertyNamesContractResolver(),
         NullValueHandling = NullValueHandling.Ignore,
         Converters        = new List <JsonConverter> {
             new SanityReferenceTypeConverter()
         }
     };
     if (customSerializers != null)
     {
         InitSerializers(customSerializers);
     }
     else
     {
         InitSerializers();
     }
     if (htmlBuilderOptions != null)
     {
         _htmlBuilderOptions = htmlBuilderOptions;
     }
     else
     {
         _htmlBuilderOptions = new SanityHtmlBuilderOptions();
     }
 }
Exemplo n.º 3
0
        public Task <string> SerializeTableAsync(JToken input, SanityOptions options)
        {
            var html = "";



            return(Task.FromResult(html));
        }
Exemplo n.º 4
0
        public static string GetImageURL(SanityImage source, SanityOptions options)
        {
            if (source == null || source.Asset == null)
            {
                return(null);
            }

            //build url
            var imageParts = source.Asset.Ref.Split('-');
            var url        = new StringBuilder();

            url.Append("https://cdn.sanity.io/");
            url.Append(imageParts[0] + "s/");            // images/
            url.Append(options.ProjectId + "/");         // projectid/
            url.Append(options.Dataset + "/");           // dataset/
            url.Append(imageParts[1] + "-");             // asset id-
            url.Append(imageParts[2] + ".");             // dimensions.
            url.Append(imageParts[3]);                   // file extension

            return(url.ToString());
        }
Exemplo n.º 5
0
        // Sanity Default Serializers
        public Task <string> SerializeDefaultBlockAsync(JToken input, SanityOptions sanity)
        {
            var text          = new StringBuilder();
            var listStart     = new StringBuilder();
            var listEnd       = new StringBuilder();
            var listItemStart = new StringBuilder();
            var listItemEnd   = new StringBuilder();

            var text2 = new StringBuilder();


            // get style
            var tag = "";

            if (input["style"]?.ToString() == "normal")
            {
                tag = "p";
            }
            else
            {
                //default to span
                tag = input["style"]?.ToString() ?? "span";
            }

            // get markdefs
            var markDefs = input["markDefs"];

            var isList = input["listItem"]?.ToString();

            if (input["listItem"]?.ToString() == "bullet")
            {
                listItemEnd.Append("</li>");
                // unordered <ul>
                for (var i = 0; i < ((int?)input["level"]).GetValueOrDefault(0) - 1; i++)
                {
                    listItemStart.Append("<ul>");
                    listItemEnd.Append("</ul>");
                }
                listItemStart.Append("<li>");

                //check if first or last in list
                if (input["firstItem"] != null)
                {
                    if ((bool)input["firstItem"] == true)
                    {
                        listStart.Append("<ul>");
                    }
                }
                if (input["lastItem"] != null)
                {
                    if ((bool)input["lastItem"] == true)
                    {
                        listEnd.Append("</ul>");
                    }
                }
            }

            if (input["listItem"]?.ToString() == "number")
            {
                listItemEnd.Append("</li>");
                // ordered <ol>
                for (var i = 0; i < ((int?)input["level"]).GetValueOrDefault(0) - 1; i++)
                {
                    listItemStart.Append("<ol>");
                    listItemEnd.Append("</ol>");
                }
                listItemStart.Append("<li>");

                //check if first or last in list
                if (((bool?)input["firstItem"]) == true)
                {
                    listStart.Append("<ol>");
                }
                if (((bool?)input["lastItem"]) == true)
                {
                    listEnd.Append("</ol>");
                }
            }

            // iterate through children and apply marks and add to text
            foreach (var child in input["children"])
            {
                var start = new StringBuilder();
                var end   = new StringBuilder();

                if (child["marks"] != null && child["marks"].HasValues)
                {
                    foreach (var mark in child["marks"])
                    {
                        var sMark   = mark?.ToString();
                        var markDef = markDefs?.FirstOrDefault(m => m["_key"]?.ToString() == sMark);
                        if (markDef != null)
                        {
                            if (markDef["_type"]?.ToString() == "link")
                            {
                                start.Append($"<a target=\"_blank\" href=\"{markDef["href"]?.ToString()}\">");
                                end.Append("</a>");
                            }
                            else
                            {
                                // Mark not supported....
                            }
                        }
                        else
                        {
                            // Default
                            start.Append($"<{mark}>");
                            end.Append($"</{mark}>");
                        }
                    }
                }

                text.Append(start.ToString() + child["text"] + end.ToString());
            }

            return(Task.FromResult($"{listStart}{listItemStart}<{tag}>{text}</{tag}>{listItemEnd}{listEnd}"));

            //return listStart + listItemStart + "<" + tag + ">" + text + "</" + tag + ">" + listItemEnd + listEnd;
        }
 public SanityRouteValueTransformer(IOptions <SanityOptions> options, ISanityTemplateResolver templateResolver)
 {
     _options          = options.Value;
     _templateResolver = templateResolver;
 }
Exemplo n.º 7
0
 internal SanityBlockSerializer(SanityOptions options, IImageService imgservice)
 {
     _imgService = imgservice;
     _opts       = options;
 }
Exemplo n.º 8
0
        public static SanityDataContext UseSanityBlockSerializer(this SanityDataContext sanity, SanityOptions options, IImageService imageSvc)
        {
            var serializer = new SanityBlockSerializer(options, imageSvc);

            serializer.Initialize(sanity);
            return(sanity);
        }