Beispiel #1
0
        public void SetValue(string name, FluidValue value)
        {
            _properties ??= new Dictionary <string, FluidValue>();

            _properties[name] = value;
        }
Beispiel #2
0
 public ValueTask <FluidValue> ProcessAsync(FluidValue input, FilterArguments arguments, LiquidTemplateContext ctx)
 {
     return(new ValueTask <FluidValue>(new StringValue(_markdownService.ToHtml(input.ToStringValue()))));
 }
Beispiel #3
0
        public static FluidValue Sort(FluidValue input, FilterArguments arguments, TemplateContext context)
        {
            var member = arguments.At(0).ToStringValue();

            return(new ArrayValue(input.Enumerate().OrderBy(x => x.GetValue(member, context).ToObjectValue()).ToArray()));
        }
Beispiel #4
0
 public static FluidValue Prepend(FluidValue input, FilterArguments arguments, TemplateContext context)
 {
     return(new StringValue(arguments.At(0).ToStringValue() + input.ToStringValue()));
 }
Beispiel #5
0
 public TemplateContext SetValue(string name, FluidValue value)
 {
     LocalScope.SetValue(name, value);
     return(this);
 }
Beispiel #6
0
 static async ValueTask <FluidValue> Awaited(Task <IShape> task)
 {
     return(FluidValue.Create(await task));
 }
Beispiel #7
0
 public static FluidValue RStrip(FluidValue input, FilterArguments arguments, TemplateContext context)
 {
     return(new StringValue(input.ToStringValue().TrimEnd()));
 }
Beispiel #8
0
        public static ValueTask <FluidValue> Slice(FluidValue input, FilterArguments arguments, TemplateContext context)
        {
            var firstArgument  = arguments.At(0);
            var secondArgument = arguments.At(1);

            if (!firstArgument.IsInteger())
            {
                throw new ArgumentException("Slice: offset argument is an invalid number");
            }

            if (arguments.Count > 1 && !secondArgument.IsInteger())
            {
                throw new ArgumentException("Slice: length argument is not a number");
            }

            var requestedStartIndex = Convert.ToInt32(firstArgument.ToNumberValue());
            var requestedLength     = Convert.ToInt32(secondArgument.Or(NumberValue.Create(1)).ToNumberValue());

            if (input.Type == FluidValues.Array)
            {
                if (requestedLength <= 0)
                {
                    return(ArrayValue.Empty);
                }

                var sourceArray = ((ArrayValue)input).Values;

                var sourceLength = sourceArray.Length;

                if (requestedStartIndex < 0 && Math.Abs(requestedStartIndex) > sourceLength)
                {
                    return(ArrayValue.Empty);
                }

                var startIndex = requestedStartIndex < 0 ? Math.Max(sourceLength + requestedStartIndex, 0) : Math.Min(requestedStartIndex, sourceLength);
                var length     = requestedLength > sourceLength ? sourceLength : requestedLength;
                length = startIndex > 0 && length + startIndex > sourceLength ? length - startIndex : length;

                var result = new FluidValue[length];

                Array.Copy(sourceArray, startIndex, result, 0, length);

                return(new ArrayValue(result));
            }
            else
            {
                if (requestedLength <= 0)
                {
                    return(BlankValue.Instance);
                }

                var sourceString = input.ToStringValue();

                var sourceStringLength = sourceString.Length;

                if (requestedStartIndex < 0 && Math.Abs(requestedStartIndex) > sourceStringLength)
                {
                    return(BlankValue.Instance);
                }

                var startIndex = requestedStartIndex < 0 ? Math.Max(sourceStringLength + requestedStartIndex, 0) : Math.Min(requestedStartIndex, sourceStringLength);
                var length     = requestedLength > sourceStringLength ? sourceStringLength : requestedLength;
                length = startIndex > 0 && length + startIndex > sourceStringLength ? length - startIndex : length;

                return(new StringValue(sourceString.Substring(startIndex, length)));
            }
        }
Beispiel #9
0
 public static ValueTask <FluidValue> Upcase(FluidValue input, FilterArguments arguments, TemplateContext context)
 {
     return(new StringValue(input.ToStringValue().ToUpper()));
 }
Beispiel #10
0
        public async ValueTask <FluidValue> ProcessAsync(FluidValue input, FilterArguments arguments, LiquidTemplateContext ctx)
        {
            var content = await _liquidTemplateManager.RenderStringAsync(input.ToStringValue(), _htmlEncoder, arguments.At(0));

            return(new StringValue(content, false));
        }
Beispiel #11
0
 public static ValueTask <FluidValue> Replace(FluidValue input, FilterArguments arguments, TemplateContext context)
 {
     return(new StringValue(input.ToStringValue().Replace(arguments.At(0).ToStringValue(), arguments.At(1).ToStringValue())));
 }
Beispiel #12
0
        public ValueTask <FluidValue> ProcessAsync(FluidValue input, FilterArguments arguments, LiquidTemplateContext context)
        {
            var urlHelper = _urlHelperFactory.GetUrlHelper(context.ViewContext);

            return(new ValueTask <FluidValue>(new StringValue((urlHelper).Content(input.ToStringValue()))));
        }
Beispiel #13
0
 internal override FluidValue Evaluate(FluidValue leftValue, FluidValue rightValue)
 {
     return(leftValue is NumberValue && rightValue is NumberValue
         ? NumberValue.Create(leftValue.ToNumberValue() - rightValue.ToNumberValue())
         : NilValue.Instance);
 }
Beispiel #14
0
 public FluidValue GetIndex(FluidValue index)
 {
     return(GetValue(index.ToString()));
 }
Beispiel #15
0
 public static FluidValue Times(FluidValue input, FilterArguments arguments, TemplateContext context)
 {
     return(new NumberValue(input.ToNumberValue() * arguments.At(0).ToNumberValue()));
 }
Beispiel #16
0
 public static ValueTask <FluidValue> Append(FluidValue input, FilterArguments arguments, TemplateContext context)
 {
     return(new StringValue(input.ToStringValue() + arguments.At(0).ToStringValue()));
 }
Beispiel #17
0
 public ValueTask <FluidValue> ProcessAsync(FluidValue input, FilterArguments arguments, TemplateContext ctx)
 {
Beispiel #18
0
 public static ValueTask <FluidValue> LStrip(FluidValue input, FilterArguments arguments, TemplateContext context)
 {
     return(new StringValue(input.ToStringValue().TrimStart()));
 }
Beispiel #19
0
 public static FluidValue Downcase(FluidValue input, FilterArguments arguments, TemplateContext context)
 {
     return(new StringValue(input.ToStringValue().ToLower()));
 }
Beispiel #20
0
 public override bool Equals(FluidValue other)
 {
     return(false);
 }
Beispiel #21
0
 public static FluidValue NewLineToBr(FluidValue input, FilterArguments arguments, TemplateContext context)
 {
     return(new StringValue(input.ToStringValue().Replace("\r\n", "<br />").Replace("\n", "<br />")));
 }
Beispiel #22
0
 public static FluidValue DividedBy(FluidValue input, FilterArguments arguments, TemplateContext context)
 {
     return(new NumberValue((int)input.ToNumberValue() / Convert.ToInt32(arguments.At(0).ToNumberValue())));
 }
Beispiel #23
0
 public static FluidValue Remove(FluidValue input, FilterArguments arguments, TemplateContext context)
 {
     return(new StringValue(input.ToStringValue().Replace(arguments.At(0).ToStringValue(), "")));
 }
Beispiel #24
0
 public static FluidValue Floor(FluidValue input, FilterArguments arguments, TemplateContext context)
 {
     return(new NumberValue(Math.Floor(input.ToNumberValue())));
 }
Beispiel #25
0
 public TemplateContext SetValue(string name, object value)
 {
     return(SetValue(name, FluidValue.Create(value)));
 }
Beispiel #26
0
 public static FluidValue Modulo(FluidValue input, FilterArguments arguments, TemplateContext context)
 {
     return(new NumberValue(Convert.ToInt32(input.ToNumberValue()) % Convert.ToInt32(arguments.At(0).ToNumberValue())));
 }
Beispiel #27
0
        public ValueTask <FluidValue> ProcessAsync(FluidValue input, FilterArguments arguments, TemplateContext ctx)
        {
            var text = input.ToStringValue();

            return(new ValueTask <FluidValue>(new StringValue(_slugService.Slugify(text))));
        }
Beispiel #28
0
        public static FluidValue Round(FluidValue input, FilterArguments arguments, TemplateContext context)
        {
            var digits = Convert.ToInt32(arguments.At(0).Or(new NumberValue(0)).ToNumberValue());

            return(new NumberValue(Math.Round(input.ToNumberValue(), digits)));
        }
Beispiel #29
0
 public static FluidValue Uniq(FluidValue input, FilterArguments arguments, TemplateContext context)
 {
     return(new ArrayValue(input.Enumerate().Distinct().ToArray()));
 }
Beispiel #30
0
 public static TemplateContext SetValue(this TemplateContext context, string name, object value)
 {
     return(context.SetValue(name, FluidValue.Create(value, context.Options)));
 }