Advertisement
Guest User

Untitled

a guest
Aug 19th, 2017
557
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.21 KB | None | 0 0
  1. @model IQueryable<MmoPortal.Models.PostItem>
  2. @{
  3. Layout = "~/Views/Shared/Item/_PageLayout.cshtml";
  4. ViewBag.PageTitle = ViewBag.CategoryTitle + " → " + ViewBag.TopicTitle;
  5.  
  6. int ajaxLastUpdate = 0; // forum last post date
  7. int topicId = 0; // id to ajax request
  8. }
  9.  
  10.  
  11. @section PageContent {
  12.  
  13.  
  14. @*<script type="text/javascript">
  15.  
  16. $(document).ready(function () {
  17. if (window.location.hash.match(/#goto/))
  18. ReloadAnchor('load');
  19.  
  20. $("#post-item").click(ReloadAnchor);
  21. });
  22.  
  23.  
  24.  
  25. function ReloadAnchor(isLocal) {
  26. elementClick = (isLocal == 'load') ? window.location.hash : '#p' + $(this).html();
  27.  
  28. destination = $(elementClick).offset().top;
  29. $("html:not(:animated),body:not(:animated)").animate({ scrollTop: destination }, 900); // лагает в IE, и в FF, а в опере каждый раз прокрутка начинается сверху страницы
  30.  
  31. $('.message').css("background", "none").css("border", "none"); // remove border and bg from all items
  32. $(elementClick).css("background", "#f1f1f1").css("border", "3px #d5d5d5 solid"); // add border and bg to selected item
  33. location.hash = elementClick; // add anchor to browser url (#gotoX)
  34. return false;
  35. }
  36. </script>
  37. *@
  38.  
  39. <script src="@Url.Content("~/Scripts/jquery.linkify-1.0-min.js")" type="text/javascript"></script>
  40. <script type="text/javascript">
  41. $(document).ready(function () {
  42. // linkify all the links in posts
  43. $(".message").linkify();
  44. });
  45. </script>
  46.  
  47.  
  48. <div class="forum-items-container">
  49. @foreach (MmoPortal.Models.PostItem p in Model)
  50. {
  51. // ссылка на удаление сообщения/темы, для админа
  52. string moderatorLink = string.Empty;
  53.  
  54. if (User.IsInRole("Admin"))
  55. {
  56. // если первое сообщение темы, то ссылку на удаление всей темы
  57. if (p.Id == p.TopicPostId)
  58. {
  59. moderatorLink = Html.ActionLink(
  60. "Удалить всю тему",
  61. "DeleteTopic",
  62. new { id = p.TopicId, returnUrl = @Url.Action("Category", new { id = ViewBag.CategoryId }), },
  63. new { onclick = Html.Raw("return confirm('Вы действительно хотите удалить тему со всеми её сообщениями?')") }
  64. ).ToString();
  65. }
  66. // иначе, только сообщение
  67. else
  68. {
  69. moderatorLink = Html.ActionLink(
  70. "Удалить",
  71. "DeletePost",
  72. new { id = p.Id, returnUrl = @Url.RouteUrl(ViewContext.RouteData.Values) },
  73. new { onclick = string.Format("return confirm('Вы действительно хотите сообщение #{0}?')", p.Id) }
  74. ).ToString();
  75. }
  76. moderatorLink = "" + moderatorLink;
  77. }
  78.  
  79. @Html.Raw( @MmoPortal.Models.MyHelper.RenderItem(p, moderatorLink) )
  80.  
  81.  
  82.  
  83. ajaxLastUpdate = p.Date;
  84. topicId = p.TopicId;
  85. }
  86. </div>
  87.  
  88.  
  89. <br />
  90.  
  91. @if (Request.IsAuthenticated && !User.IsInRole("Banned"))
  92. {
  93. <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
  94. <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
  95. using (Html.BeginForm("AddPost", "Forum", FormMethod.Post, new { id="postForm" }))
  96. {
  97. @Html.ValidationSummary(true)
  98.  
  99. <legend></legend>
  100. <div class="editor-label">
  101. Введите текст сообщения
  102. </div>
  103. @Html.Hidden("topicId", (int)ViewBag.TopicId)
  104.  
  105. <div class="editor-field">
  106. <textarea cols="20" data-val="true" data-val-required="Введите текст сообщения" id="text" name="text" rows="2" style="width:100%; height: 200px;"></textarea>
  107. <span class="field-validation-valid" data-valmsg-for="text" data-valmsg-replace="true"></span>
  108. </div>
  109.  
  110. <input type="submit" id="addPost" value="Добавить сообщение" />
  111. }
  112. }
  113. else if (User.IsInRole("Banned"))
  114. {
  115. <div>Администратор запретил вам оставлять сообщения</div>
  116. }
  117. else
  118. {
  119. // UNDONE: добавить returnUrl (почему-то не добавляется)
  120. string returnUrl = Url.Action("Topic", "Forum", new { id = ViewBag.TopicId });
  121. <div class="forum-new-item">Пожалуйста, <a href="@Url.Action("LogOn", "Account").ToString()?returnUrl=@returnUrl">войдите</a>, чтобы оставить сообщение</div>
  122. }
  123.  
  124.  
  125. <script src="@Url.Content("~/Scripts/jquery.form.js")" type="text/javascript"></script>
  126. <script type="text/javascript">
  127. var ajaxLastUpdate = @ajaxLastUpdate; // @ajaxLastUpdate
  128. var newColor = '#CCFFCC';
  129.  
  130. $(document).ready(function () {
  131.  
  132. // bind form to ajax send
  133. var options = {
  134. beforeSend: function() {
  135. if ($("#text").val() == "") return;
  136. $("#addPost").attr("disabled", "disabled"); // disable button
  137. $("#addPost").val("Подождите ..."); // change text
  138. $("#text").attr("disabled", "disabled"); // disable text
  139. },
  140. success: function() {
  141. $("#text").val(""); // clear text
  142. },
  143. error: function() {
  144. alert("Возникла ошибка");
  145. $("#addPost").attr("disabled", ""); // enable button
  146. $("#text").val("Добавить сообщение"); // change text
  147. $("#text").attr("disabled", ""); // enable text
  148. }
  149. };
  150. $('#postForm').ajaxForm(options);
  151.  
  152. DynamicUpdate();
  153.  
  154. // on mouse move remove background on item (set item as read)
  155. $(".new").live('mousemove', function(event) {
  156. $(this).css("background", "white");
  157. });
  158. });
  159.  
  160.  
  161. // запрашивать обновление постов в теме каждые 5 сек
  162. function DynamicUpdate(topicId) {
  163. $.ajax({
  164. url: '@Url.Action("GetNewPosts", new { id = topicId })/?dateFrom=' + ajaxLastUpdate,
  165. dataType: "json", // тип загружаемых данных
  166. success: function (data) { // вешаем свой обработчик на функцию success
  167.  
  168. $.each(data, function (i, item) { // обрабатываем полученные данные
  169. // если пост уже существует
  170. if ( $("#post" + item.Id).is('*') )
  171. {
  172. $("#post" + item.Id).parent().parent().children(".message").html(item.Text).parent().addClass("new").css("background", newColor);
  173. }
  174. // иначе добавить новый пост
  175. else
  176. {
  177. $(".forum-items-container").append(item.Html)
  178. $(".forum-items-container .flagNew").hide(0).slideDown().removeClass("flagNew");
  179. $("#post" + item.Id).parent().parent().children(".message").parent().addClass("new").css("background", newColor);
  180. }
  181. // обновить дату последнего сообщения
  182. ajaxLastUpdate = item.Date;
  183. });
  184. },
  185. complete: function (data) {
  186. $("#addPost").attr("disabled", ""); // enable button
  187. $("#addPost").val("Добавить сообщение"); // change text
  188. $("#text").attr("disabled", ""); // enable text
  189. }
  190. });
  191.  
  192. setTimeout("DynamicUpdate()", 5000);
  193. }
  194.  
  195.  
  196. </script>
  197.  
  198.  
  199. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement