Created
August 26, 2022 07:18
-
-
Save Mitya88/ac1abe804b9ea331e855d13e8a4ea177 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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