Skip to content

Instantly share code, notes, and snippets.

@Mitya88
Created August 26, 2022 07:18
Show Gist options
  • Save Mitya88/ac1abe804b9ea331e855d13e8a4ea177 to your computer and use it in GitHub Desktop.
Save Mitya88/ac1abe804b9ea331e855d13e8a4ea177 to your computer and use it in GitHub Desktop.
namespace Demo
{
using Scriban.Runtime;
using Sitecore.Abstractions;
using Sitecore.Data.Items;
using Sitecore.XA.Foundation.Abstractions;
using Sitecore.XA.Foundation.Scriban.Pipelines.GenerateScribanContext;
using System;
using System.IO;
using FieldRendererBase = Sitecore.XA.Foundation.Scriban.FieldRendererBase;
public class GetSVGFunction : FieldRendererBase, IGenerateScribanContextProcessor
{
protected readonly BaseMediaManager baseMediaManager;
protected readonly IPageMode pageMode;
private delegate string GenerateSVGContent(Item item, string field, bool fallback);
public GetSVGFunction(BaseMediaManager baseMediaManager, IPageMode pageMode)
{
this.baseMediaManager = baseMediaManager;
this.pageMode = pageMode;
}
public void Process(GenerateScribanContextPipelineArgs args)
{
RenderingWebEditingParams = args.RenderingWebEditingParams;
args.GlobalScriptObject.Import("sc_svg", new GenerateSVGContent(GetSVGContent));
}
private string GetSVGContent(Item item, string field, bool fallback)
{
if (string.IsNullOrEmpty(item[field.ToString()]))
{
return string.Empty;
}
var imageField = new Sitecore.Data.Fields.ImageField(item.Fields[field.ToString()]);
if (imageField == null || imageField.MediaItem == null)
{
return string.Empty;
}
var media = this.baseMediaManager.GetMedia(imageField.MediaItem);
if (media.Extension.Equals("svg", StringComparison.OrdinalIgnoreCase))
{
string svg = string.Empty;
using (var reader = new StreamReader(this.baseMediaManager.GetMedia(imageField.MediaItem).GetStream().Stream))
{
svg = reader.ReadToEnd();
}
return svg;
}
else
{
if (fallback)
{
return CreateFieldRenderer(item, field).Render();
}
else
{
return this.pageMode.IsExperienceEditor ? "<p>The selected image is not a SVG!</p>" : string.Empty;
}
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment