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)))); } } }
/// <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()); }