App_Code.Controls.PostPager.PageList C# (CSharp) Method

PageList() private static method

The page list.
private static PageList ( int total, int current ) : IEnumerable
total int /// The total. ///
current int /// The current. ///
return IEnumerable
        private static IEnumerable<int> PageList(int total, int current)
        {
            var pages = new List<int>();
            var midStack = new List<int>();

            // should be more then 4
            const int MaxPages = 12;

            if (MaxPages > total)
            {
                for (var i = 1; i <= total; i++)
                {
                    pages.Add(i);
                }
            }
            else
            {
                const int Midle = (MaxPages - 4) / 2;

                // always show first two
                pages.Add(1);
                pages.Add(2);

                for (var i = current - Midle; i <= (current + Midle); i++)
                {
                    if (i > 2 && i < (total - 1))
                    {
                        midStack.Add(i);
                    }
                }

                // pad to the end if less than needed
                if (midStack.Count < (MaxPages - 2))
                {
                    var last = int.Parse(midStack[midStack.Count - 1].ToString());
                    for (var j = last + 1; j <= (MaxPages - 2); j++)
                    {
                        midStack.Add(j);
                    }
                }

                // pad in the beginning if needed
                if (midStack.Count < (MaxPages - 4))
                {
                    midStack.Clear();
                    for (var k = total - MaxPages + 3; k <= (total - 2); k++)
                    {
                        midStack.Add(k);
                    }
                }

                if (int.Parse(midStack[0].ToString()) > 3)
                {
                    pages.Add(0);
                }

                pages.AddRange(midStack.Select(p => int.Parse(p.ToString())));

                if (int.Parse(midStack[midStack.Count - 1].ToString()) < (total - 2))
                {
                    pages.Add(0);
                }

                // always show last two
                pages.Add(total - 1);
                pages.Add(total);
            }

            return pages;
        }