Beispiel #1
0
        public IEnumerable <ProductCategoryObject> GetProductOrCategory(ArgumentObject args)
        {
            if (Debug)
            {
                Console.WriteLine(args.ToString());
            }
            foreach (var block in GetHtmlNode(args).SelectNodes(BlockExp))
            {
                yield return(new ProductCategoryObject(
                                 PropertiesCategory.ToDictionary(x => x.Key, x => x.Value(block, args)), isCategory: true));

                foreach (var reference in block._SelectNodes(block.XPath + RefProductExp))
                {
                    var arguments = new ArgumentObject(url: Url + reference.Attributes["href"].Value, args: args.Args);
                    if (Debug)
                    {
                        Console.WriteLine(arguments.ToString());
                    }
                    var node = GetHtmlNode(arguments);
                    //File.WriteAllText("tmp.html", node.InnerHtml);
                    yield return(new ProductCategoryObject(
                                     SinglePropertiesProduct.ToDictionary(x => x.Key, x => x.Value(node, arguments)),
                                     PluralPropertiesProduct.ToDictionary(x => x.Key, x => x.Value(node, arguments))));
                }
            }
        }
Beispiel #2
0
 /// <summary>
 /// Initializes a new instance of the <see cref="EntityPropertyAttribute"/> class.
 /// </summary>
 /// <param name="category">Категория свойства</param>
 /// <param name="orderIndex">Индекс для сортировки</param>
 /// <param name="displayNameLocalizationKey">Ключ локализации для отображаемого имени свойства</param>
 /// <param name="defaultValue">Значение по умолчанию</param>
 /// <param name="minimum">Минимальное значение. Для свойств типа int, double</param>
 /// <param name="maximum">Максимальное значение. Для свойств типа int, double</param>
 /// <param name="propertyScope">Область видимости свойства</param>
 /// <param name="name">Имя свойства</param>
 /// <param name="descLocalKey">Ключ локализации для описания свойства. Если не задан
 /// (string.Empty или null), то для описания будет браться значение <see cref="DisplayNameLocalizationKey"/></param>
 /// <param name="nameSymbol">Условное обозначение свойства на изображении в редакторе стилей.
 /// Условные обозначения всегда указываются латинскими буквами, а значит не требуют локализации</param>
 /// <param name="isReadOnly">Свойство только для чтения. Используется только в палитре свойств</param>
 public EntityPropertyAttribute(
     PropertiesCategory category,
     int orderIndex,
     string displayNameLocalizationKey,
     object defaultValue,
     object minimum = null,
     object maximum = null,
     PropertyScope propertyScope    = PropertyScope.PaletteAndStyleEditor,
     [CallerMemberName] string name = null,
     string descLocalKey            = null,
     string nameSymbol = null,
     bool isReadOnly   = false)
 {
     Category   = category;
     OrderIndex = orderIndex;
     Name       = name;
     DisplayNameLocalizationKey = displayNameLocalizationKey;
     DescriptionLocalizationKey = string.IsNullOrEmpty(descLocalKey)
         ? displayNameLocalizationKey
         : descLocalKey;
     DefaultValue  = defaultValue;
     Minimum       = minimum;
     Maximum       = maximum;
     PropertyScope = propertyScope;
     NameSymbol    = nameSymbol;
     IsReadOnly    = isReadOnly;
 }
        /// <summary>
        /// Получение локализованного имени категории свойств
        /// </summary>
        /// <param name="category">Категория</param>
        /// <returns>Локализованное значение или имя категории в случае неудачи</returns>
        public static string GetCategoryLocalizationName(PropertiesCategory category)
        {
            if (CategoryLocalizationNames.ContainsKey(category.ToString()))
            {
                return(CategoryLocalizationNames[category.ToString()]);
            }

            var type = category.GetType();

            foreach (var fieldInfo in type.GetFields()
                     .Where(f => f.GetCustomAttribute <EnumPropertyDisplayValueKeyAttribute>() != null))
            {
                if (fieldInfo.Name != category.ToString())
                {
                    continue;
                }

                var attribute = fieldInfo.GetCustomAttribute <EnumPropertyDisplayValueKeyAttribute>();
                if (attribute != null)
                {
                    try
                    {
                        var localName = ModPlusAPI.Language.GetItem(attribute.LocalizationKey);
                        if (!CategoryLocalizationNames.ContainsKey(category.ToString()))
                        {
                            CategoryLocalizationNames.Add(category.ToString(), localName);
                        }

                        return(localName);
                    }
                    catch
                    {
                        // ignore
                    }
                }
            }

            return(category.ToString());
        }