/// <summary> /// Generate a <see cref="PagerRenderingList" /> for a series of <see cref="PagerItem" />. /// </summary> /// <param name="items">The collection of <see cref="PagerItem" /> which are included in the list.</param> /// <param name="context">The generation context.</param> /// <returns>The generated <see cref="PagerRenderingList" /> instance.</returns> private PagerRenderingList GenerateRenderingListCore(IEnumerable<PagerItem> items, PagerGenerationContext context) { var optionsCache = new Dictionary<PagerItemType, PagerItemOptions>(); var renderingItemList = new List<PagerRenderingItem>(); // Owner var result = new PagerRenderingList { Settings = new Dictionary<string, string>(context.Options.AdditionalSettings) }; foreach (var item in items) { PagerItemOptions itemOptions; // Try to get cached options, or create a new option instance if (!optionsCache.TryGetValue(item.ItemType, out itemOptions)) { itemOptions = context.Options.ItemOptions.GetMergedOptionsFor(item); optionsCache[item.ItemType] = itemOptions; } // Generate item context var itemContext = new PagerItemGenerationContext(context, item, itemOptions); // Generate item and add to list var renderingItem = GenerateRenderingItem(result, itemContext); renderingItemList.Add(renderingItem); } // Result result.Items = new ReadOnlyCollection<PagerRenderingItem>(renderingItemList); return result; }
/// <summary> /// Generate a <see cref="PagerRenderingItem" /> for the current pager item. /// </summary> /// <param name="list">The ownner list of the new item.</param> /// <param name="context">The generation context.</param> /// <returns>The generated <see cref="PagerRenderingItem" /> instance.</returns> private PagerRenderingItem GenerateRenderingItem(PagerRenderingList list, PagerItemGenerationContext context) { return new PagerRenderingItem(list) { Content = context.PagerItemOptions.Content?.GenerateContent(context), Link = context.PagerItemOptions.Link?.GenerateLink(context), Settings = new Dictionary<string, string>(context.PagerItemOptions.AdditionalSettings), State = GetRenderingItemState(context) }; }