Esempio n. 1
0
        private static void WriteIndexOf(MethodTranslationContext context)
        {
            context.Translator.Translate(context.Expression.Object, context);

            var isCaseInsensitive = ArgumentIs(context, 1, true) || GetIsCaseInsensitive(context.Expression);

            if (isCaseInsensitive)
            {
                context.Writer.Write(".toLowerCase()");
            }

            context.Writer.Write(".indexOf(");
            context.Translator.Translate(context.Expression.Arguments[0], context);
            if (isCaseInsensitive)
            {
                context.Writer.Write(".toLowerCase()");
            }

            context.Writer.Write(")");
        }
Esempio n. 2
0
        protected static void DefaultIfEmpty(MethodTranslationContext context)
        {
            var array = context.Expression.Arguments.First();
            var defaultValueExpression = context.Expression.Arguments.Skip(1).FirstOrDefault();

            context.Writer.Write("(function(arr){ return arr.length ? arr : [");
            if (defaultValueExpression != null)
            {
                context.Translator.Translate(defaultValueExpression, context);
            }
            else
            {
                var enumType     = array.GetExpressionType();
                var defaultValue = (enumType.GetGenericArguments().FirstOrDefault() ?? typeof(object)).GetDefaultValue();
                context.Writer.Write(context.Translator.TranslateValue(defaultValue));
            }
            context.Writer.Write("];})(");
            context.Writer.Write("(");
            context.Translator.Translate(array, context);
            context.Writer.Write(")) ");
        }
Esempio n. 3
0
        private static void EndsWith(MethodTranslationContext context)
        {
            /*
             * √ public bool EndsWith(String value);
             * √ public bool EndsWith(String value, bool ignoreCase, CultureInfo culture);
             * √ public bool EndsWith(String value, StringComparison comparisonType);
             * √ public bool EndsWith(char value);
             */
            context.Writer.Write("(");
            WriteIndexOf(context);

            context.Writer.Write(context.Negated ? "< 0 || " : ">= 0 && ");

            WriteIndexOf(context);

            context.Writer.Write(context.Negated ? " !== (" : " === (");
            context.Translator.Translate(context.Expression.Object, context);
            context.Writer.Write(".length - ");
            context.Translator.Translate(context.Expression.Arguments[0], context);
            context.Writer.Write(".length)");
            context.Writer.Write(")");
        }
Esempio n. 4
0
        private static void Equals(MethodTranslationContext context)
        {
            /*
             * √ public static bool Equals(String a, String b, StringComparison comparisonType);
             * √ public static bool Equals(String a, String b);
             * √ public bool Equals(String b, StringComparison comparisonType);
             * √ public bool Equals(String b);
             */
            Expression value1;
            Expression value2;

            if (context.Expression.Method.IsStatic)
            {
                value1 = context.Expression.Arguments.First();
                value2 = context.Expression.Arguments.Skip(1).First();
            }
            else
            {
                value1 = context.Expression.Object;
                value2 = context.Expression.Arguments.First();
            }

            context.Translator.Translate(value1, context);
            var isCaseInsensitive = GetIsCaseInsensitive(context.Expression);

            if (isCaseInsensitive)
            {
                context.Writer.Write(".toLowerCase()");
            }

            context.Writer.Write(context.Negated ? "!==" : " === ");


            WriteArguments(context.Translator, new[] { value2 }, context);
            if (isCaseInsensitive)
            {
                context.Writer.Write(".toLowerCase()");
            }
        }
Esempio n. 5
0
        private static void Contains(MethodTranslationContext context)
        {
            /*
             * √ public bool Contains(String value)
             */
            context.Translator.Translate(context.Expression.Object, context);

            var isCaseInsensitive = GetIsCaseInsensitive(context.Expression);

            if (isCaseInsensitive)
            {
                context.Writer.Write(".toLowerCase()");
            }

            context.Writer.Write(".indexOf(");
            WriteArguments(context.Translator, context.Expression.Arguments, context);
            if (isCaseInsensitive)
            {
                context.Writer.Write(".toLowerCase()");
            }

            context.Writer.Write(context.Negated ? ") < 0" : ") >= 0");
        }
Esempio n. 6
0
        private static void Compare(MethodTranslationContext context)
        {
            /*
             * Х public static int Compare(String strA, int indexA, String strB, int indexB, int length, bool ignoreCase);
             * Х public static int Compare(String strA, int indexA, String strB, int indexB, int length, StringComparison comparisonType);
             * √ public static int Compare(String strA, String strB);
             * √ public static int Compare(String strA, String strB, bool ignoreCase);
             * √! public static int Compare(String strA, String strB, bool ignoreCase, CultureInfo culture);
             * √ public static int Compare(String strA, String strB, CultureInfo culture, CompareOptions options);
             * Х public static int Compare(String strA, int indexA, String strB, int indexB, int length, bool ignoreCase, CultureInfo culture);
             * Х public static int Compare(String strA, int indexA, String strB, int indexB, int length, CultureInfo culture, CompareOptions context);
             * √ public static int Compare(String strA, String strB, StringComparison comparisonType);
             * Х public static int Compare(String strA, int indexA, String strB, int indexB, int length);
             */
            if (context.Expression.Method.GetParameters().Any(p => p.ParameterType == typeof(int)))
            {
                throw new MethodNotSupportedException(context.Expression, "Only override without any indexes can be translated to JavaScript");
            }
            var arguments = context.Expression.Arguments;

            context.Translator.Translate(arguments.FirstOrDefault(), context);
            var isCaseInsensitive = ArgumentIs(context, 2, true) || GetIsCaseInsensitive(context.Expression);

            if (isCaseInsensitive)
            {
                context.Writer.Write(".toLowerCase()");
            }

            context.Writer.Write(".localeCompare(");
            context.Translator.Translate(arguments[1], context);
            if (isCaseInsensitive)
            {
                context.Writer.Write(".toLowerCase()");
            }

            context.Writer.Write(")");
        }
Esempio n. 7
0
        private static void IndexOf(MethodTranslationContext context)
        {
            /*
             * √ public int IndexOf(char value);
             * Х public int IndexOf(char value, int startIndex);
             * Х public int IndexOf(char value, int startIndex, int count);
             * √ public int IndexOf(String value);
             * Х public int IndexOf(String value, int startIndex, int count);
             * Х public int IndexOf(String value, int startIndex, int count, StringComparison comparisonType);
             * Х public int IndexOf(String value, int startIndex, StringComparison comparisonType);
             * √ public int IndexOf(String value, StringComparison comparisonType);
             * Х public int IndexOf(String value, int startIndex);
             */
            if (context.Expression.Method.GetParameters().Any(p => p.ParameterType == typeof(int)))
            {
                throw new MethodNotSupportedException(context.Expression, "Only override without any indexes can be translated to JavaScript");
            }

            var arguments = context.Expression.Arguments;

            context.Translator.Translate(context.Expression.Object, context);
            var isCaseInsensitive = GetIsCaseInsensitive(context.Expression);

            if (isCaseInsensitive)
            {
                context.Writer.Write(".toLowerCase()");
            }

            context.Writer.Write(".indexOf(");
            context.Translator.Translate(arguments[1], context);
            if (isCaseInsensitive)
            {
                context.Writer.Write(".toLowerCase()");
            }

            context.Writer.Write(")");
        }
Esempio n. 8
0
        private static void TranslateAnyMethod(MethodTranslationContext context)
        {
            context.Writer.Write("Dryvue.validateAsync('");
            context.Writer.Write(context.Expression.Method.Name);
            context.Writer.Write("', {");

            var sep              = string.Empty;
            var method           = context.Expression.Method;
            var methodParameters = method.GetParameters();
            var i = 0;

            foreach (var argument in context.Expression.Arguments)
            {
                var parameter = methodParameters[i++];
                context.Writer.Write(sep);
                context.Writer.Write(parameter.Name);
                context.Writer.Write(": ");

                context.Translator.Translate(argument, context);
                sep = ",\n";
            }

            context.Writer.Write("})");
        }
Esempio n. 9
0
 protected static void Sum(MethodTranslationContext context)
 {
     Reduce(context, "return a+b");
 }
Esempio n. 10
0
 private static void Error(MethodTranslationContext context)
 {
     context.Writer.Write("{ type:'error', message:");
     context.Translator.Translate(context.Expression.Arguments.First(), context);
     context.Writer.Write(" }");
 }
Esempio n. 11
0
 protected static void Count(MethodTranslationContext context)
 {
     TranslateSelect(context, "return arr.length;");
 }
Esempio n. 12
0
 protected static void Last(MethodTranslationContext context)
 {
     TranslateSelect(context, "return arr[arr.length - 1];");
 }
Esempio n. 13
0
 protected static void Any(MethodTranslationContext context)
 {
     Translate(context, "some");
 }
Esempio n. 14
0
 protected static void Average(MethodTranslationContext context)
 {
     context.Writer.Write("(function(){var _c = 0; return ");
     Reduce(context, "++_c; return a + b");
     context.Writer.Write(" / (_c > 0 ? _c + 1 : 0);})()");
 }
Esempio n. 15
0
 protected static void LastOrDefault(MethodTranslationContext context)
 {
     TranslateSelect(context, "return arr.length ? arr[arr.length - 1] : null;");
 }
Esempio n. 16
0
 protected static void All(MethodTranslationContext context)
 {
     Translate(context, "every");
 }
Esempio n. 17
0
 private static void Success(MethodTranslationContext context)
 {
     context.Writer.Write("null");
 }
Esempio n. 18
0
 protected static void SingleOrDefault(MethodTranslationContext context)
 {
     TranslateSelect(context, "return arr.length == 1 ? arr[0] : null;");
 }
Esempio n. 19
0
 protected static void Single(MethodTranslationContext context)
 {
     TranslateSelect(context, "return arr[0];");
 }
Esempio n. 20
0
 protected static void Select(MethodTranslationContext context)
 {
     Translate(context, "map");
 }
Esempio n. 21
0
 protected static void Min(MethodTranslationContext context)
 {
     Reduce(context, "return a > b ? b : a");
 }
Esempio n. 22
0
 private static void Warning(MethodTranslationContext context)
 {
     context.Writer.Write("{ type:\"warning\", message:");
     context.Translator.Translate(context.Expression.Arguments.First(), context);
     context.Writer.Write(" }");
 }
Esempio n. 23
0
 protected static void Where(MethodTranslationContext context)
 {
     Translate(context, "filter");
 }