protected virtual HtmlGenericControl CreatePageNumberButton(IHtmlWriter writer, IDotvvmRequestContext context) { HtmlGenericControl li; var currentPageTextContext = DataContextStack.Create(typeof(int), NumberButtonsPlaceHolder.GetDataContextType()); var currentPageTextBinding = ValueBindingExpression.CreateBinding(bindingService.WithoutInitialization(), vm => ((int)vm[0] + 1).ToString(), currentPageTextJs, currentPageTextContext); if (!RenderLinkForCurrentPage) { writer.AddKnockoutDataBind("visible", "$data == $parent.PagingOptions().PageIndex()"); AddItemCssClass(writer, context); AddKnockoutActiveCssDataBind(writer, context, "$data == $parent.PagingOptions().PageIndex()"); li = new HtmlGenericControl("li"); var literal = new Literal(); literal.DataContext = 0; literal.SetDataContextType(currentPageTextContext); literal.SetBinding(Literal.TextProperty, currentPageTextBinding); li.Children.Add(literal); NumberButtonsPlaceHolder.Children.Add(li); li.Render(writer, context); writer.AddKnockoutDataBind("visible", "$data != $parent.PagingOptions().PageIndex()"); } AddItemCssClass(writer, context); AddKnockoutActiveCssDataBind(writer, context, "$data == $parent.PagingOptions().PageIndex()"); li = new HtmlGenericControl("li"); li.SetValue(Internal.PathFragmentProperty, "PagingOptions.NearPageIndexes[$index]"); var link = new LinkButton(); li.Children.Add(link); link.SetDataContextType(currentPageTextContext); link.SetBinding(ButtonBase.TextProperty, currentPageTextBinding); link.SetBinding(ButtonBase.ClickProperty, commonBindings.GoToThisPageCommand); object enabledValue = HasValueBinding(EnabledProperty) ? (object)ValueBindingExpression.CreateBinding(bindingService.WithoutInitialization(), h => GetValueBinding(EnabledProperty).Evaluate(this), new JsSymbolicParameter(JavascriptTranslator.KnockoutContextParameter).Member("$pagerEnabled")) : Enabled; if (!true.Equals(enabledValue)) { link.SetValue(LinkButton.EnabledProperty, enabledValue); } NumberButtonsPlaceHolder.Children.Add(li); return(li); }
protected override void RenderContents(IHtmlWriter writer, IDotvvmRequestContext context) { writer.AddKnockoutDataBind("css", "{ 'disabled': PagingOptions().IsFirstPage() }"); firstLi.Render(writer, context); writer.AddKnockoutDataBind("css", "{ 'disabled': PagingOptions().IsFirstPage() }"); previousLi.Render(writer, context); // render template writer.WriteKnockoutForeachComment("PagingOptions().NearPageIndexes"); // render page number numbersPlaceHolder.Children.Clear(); HtmlGenericControl li; var currentPageTextContext = DataContextStack.Create(typeof(int), numbersPlaceHolder.GetDataContextType()); var currentPageTextBinding = ValueBindingExpression.CreateBinding(bindingService.WithoutInitialization(), vm => ((int)vm[0] + 1).ToString(), currentPageTextJs, currentPageTextContext); if (!RenderLinkForCurrentPage) { writer.AddKnockoutDataBind("visible", "$data == $parent.PagingOptions().PageIndex()"); writer.AddKnockoutDataBind("css", "{'active': $data == $parent.PagingOptions().PageIndex()}"); li = new HtmlGenericControl("li"); var literal = new Literal(); literal.DataContext = 0; literal.SetDataContextType(currentPageTextContext); literal.SetBinding(Literal.TextProperty, currentPageTextBinding); li.Children.Add(literal); numbersPlaceHolder.Children.Add(li); li.Render(writer, context); writer.AddKnockoutDataBind("visible", "$data != $parent.PagingOptions().PageIndex()"); } writer.AddKnockoutDataBind("css", "{ 'active': $data == $parent.PagingOptions().PageIndex()}"); li = new HtmlGenericControl("li"); li.SetValue(Internal.PathFragmentProperty, "PagingOptions.NearPageIndexes[$index]"); var link = new LinkButton(); li.Children.Add(link); link.SetDataContextType(currentPageTextContext); link.SetBinding(ButtonBase.TextProperty, currentPageTextBinding); link.SetBinding(ButtonBase.ClickProperty, commonBindings.GoToThisPageCommand); object enabledValue = HasValueBinding(EnabledProperty) ? (object)ValueBindingExpression.CreateBinding(bindingService.WithoutInitialization(), h => GetValueBinding(EnabledProperty).Evaluate(this), new JsSymbolicParameter(JavascriptTranslator.KnockoutContextParameter).Member("$pagerEnabled")) : Enabled; if (!true.Equals(enabledValue)) { link.SetValue(LinkButton.EnabledProperty, enabledValue); } numbersPlaceHolder.Children.Add(li); li.Render(writer, context); writer.WriteKnockoutDataBindEndComment(); writer.AddKnockoutDataBind("css", "{ 'disabled': PagingOptions().IsLastPage() }"); nextLi.Render(writer, context); writer.AddKnockoutDataBind("css", "{ 'disabled': PagingOptions().IsLastPage() }"); lastLi.Render(writer, context); }