Пример #1
0
        /// <inheritdoc />
        public string Between(string fromSize, string toSize, string minScreen = "320px", string maxScreen = "1200px")
        {
            ValueAndUnit fromSizeValueAndUnit  = _helpers.GetValueAndUnit(fromSize);
            ValueAndUnit toSizeValueAndUnit    = _helpers.GetValueAndUnit(toSize);
            ValueAndUnit minScreenValueAndUnit = _helpers.GetValueAndUnit(minScreen);
            ValueAndUnit maxScreenValueAndUnit = _helpers.GetValueAndUnit(maxScreen);

            if (!double.TryParse(fromSizeValueAndUnit.Value, out double fromSizeNum) ||
                !double.TryParse(toSizeValueAndUnit.Value, out double toSizeNum) ||
                string.IsNullOrWhiteSpace(fromSizeValueAndUnit.Unit) ||
                string.IsNullOrWhiteSpace(toSizeValueAndUnit.Unit) ||
                fromSizeValueAndUnit.Unit != toSizeValueAndUnit.Unit)
            {
                throw PolishedException.GetPolishedException(47);
            }

            if (!double.TryParse(minScreenValueAndUnit.Value, out double minScreenNum) ||
                !double.TryParse(maxScreenValueAndUnit.Value, out double maxScreenNum) ||
                string.IsNullOrWhiteSpace(minScreenValueAndUnit.Unit) ||
                string.IsNullOrWhiteSpace(maxScreenValueAndUnit.Unit) ||
                minScreenValueAndUnit.Unit != maxScreenValueAndUnit.Unit)
            {
                throw PolishedException.GetPolishedException(48);
            }

            double slope   = (fromSizeNum - toSizeNum) / (minScreenNum - maxScreenNum);
            double baseNum = toSizeNum - slope * maxScreenNum;

            return($"calc({Math.Round(baseNum, 2)}{fromSizeValueAndUnit.Unit} + {Math.Round(100 * slope, 2)}vw)");
        }