/// <summary> /// コメントへのリンクを取得します。 /// </summary> protected XmlNode CommentLink(AbsPath path, string title){ XmlNode result = Html.Create("ul", "comment-link"); XmlElement resultLi = Html.Create("li"); Response.AddDataSource(Bbs); BbsThread bt = Bbs.GetCommentToThread(path); AbsPath commentPath = path.Combine(CommentPath); XmlElement commentA = Html.A(commentPath); if(bt == null || bt.Articles.Length == 0){ commentA.InnerText = string.Format("「{0}」に{1}を書く", title, CommentName); } else { commentA.InnerText = string.Format("「{0}」への{1} ({2}件)", title, CommentName, bt.Count); } resultLi.AppendChild(commentA); result.AppendChild(resultLi); return result; }
/// <summary> /// ページナビゲーションを取得します。 /// </summary> public XmlNode GetPageNav(Xhtml html, AbsPath uriPrefix){ int startPos = CurrentPage - myNavPrevItems; if(startPos > LastPage - myNavPrevItems - myNavNextItems) startPos = LastPage - myNavPrevItems - myNavNextItems; if(startPos < 3) startPos = 1; int endPos = CurrentPage + myNavNextItems; if(endPos < myNavPrevItems + myNavNextItems) endPos = myNavPrevItems + myNavNextItems; if(endPos > LastPage - 2) endPos = LastPage; XmlDocumentFragment result = html.CreateDocumentFragment(); XmlElement pageNav = html.P("pageNav"); if(CurrentPage > 1){ XmlElement prevLink = html.A(uriPrefix.Combine((CurrentPage-1).ToString())); prevLink.InnerText = "前のページ"; prevLink.SetAttribute("rel", "prev"); pageNav.AppendChild(prevLink); pageNav.AppendChild(html.Text(" ")); } if(startPos > 1){ pageNav.AppendChild(html.GetPageLink(uriPrefix, 1)); pageNav.AppendChild(html.Span("omitted", "...")); } for(int i = startPos; i <= endPos; i++){ if(i > startPos){ pageNav.AppendChild(html.Span("separate", "/")); } pageNav.AppendChild(html.GetPageLink(uriPrefix, i)); } if(endPos < LastPage){ pageNav.AppendChild(html.Span("omitted", "...")); pageNav.AppendChild(html.GetPageLink(uriPrefix, LastPage)); } if(CurrentPage < LastPage){ XmlElement nextLink = html.A(uriPrefix.Combine((CurrentPage+1).ToString())); nextLink.InnerText = "次のページ"; nextLink.SetAttribute("rel", "next"); pageNav.AppendChild(html.Text(" ")); pageNav.AppendChild(nextLink); } result.AppendChild(pageNav); return result; }
// コンストラクタ /// <summary> /// コメントを見るアクションのインスタンスを開始します。 /// </summary> public ViewComment(HatomaruXml model, AbsPath path, AbsPath commentToPath) : base(model, path){ myCommentToPath = commentToPath; myPath = myCommentToPath.Combine(CommentPath); }
/// <summary> /// AbsPath と番号を指定して、ページナビゲーション用の a要素を作成します。 /// </summary> public XmlElement GetPageLink(AbsPath uriPrefix, int pageNum){ XmlElement pageNavA = A(uriPrefix.Combine(pageNum.ToString())); pageNavA.InnerText = pageNum.ToString(); return pageNavA; }