Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @model IQueryable<MmoPortal.Models.PostItem>
- @{
- Layout = "~/Views/Shared/Item/_PageLayout.cshtml";
- ViewBag.PageTitle = ViewBag.CategoryTitle + " → " + ViewBag.TopicTitle;
- int ajaxLastUpdate = 0; // forum last post date
- int topicId = 0; // id to ajax request
- }
- @section PageContent {
- @*<script type="text/javascript">
- $(document).ready(function () {
- if (window.location.hash.match(/#goto/))
- ReloadAnchor('load');
- $("#post-item").click(ReloadAnchor);
- });
- function ReloadAnchor(isLocal) {
- elementClick = (isLocal == 'load') ? window.location.hash : '#p' + $(this).html();
- destination = $(elementClick).offset().top;
- $("html:not(:animated),body:not(:animated)").animate({ scrollTop: destination }, 900); // лагает в IE, и в FF, а в опере каждый раз прокрутка начинается сверху страницы
- $('.message').css("background", "none").css("border", "none"); // remove border and bg from all items
- $(elementClick).css("background", "#f1f1f1").css("border", "3px #d5d5d5 solid"); // add border and bg to selected item
- location.hash = elementClick; // add anchor to browser url (#gotoX)
- return false;
- }
- </script>
- *@
- <script src="@Url.Content("~/Scripts/jquery.linkify-1.0-min.js")" type="text/javascript"></script>
- <script type="text/javascript">
- $(document).ready(function () {
- // linkify all the links in posts
- $(".message").linkify();
- });
- </script>
- <div class="forum-items-container">
- @foreach (MmoPortal.Models.PostItem p in Model)
- {
- // ссылка на удаление сообщения/темы, для админа
- string moderatorLink = string.Empty;
- if (User.IsInRole("Admin"))
- {
- // если первое сообщение темы, то ссылку на удаление всей темы
- if (p.Id == p.TopicPostId)
- {
- moderatorLink = Html.ActionLink(
- "Удалить всю тему",
- "DeleteTopic",
- new { id = p.TopicId, returnUrl = @Url.Action("Category", new { id = ViewBag.CategoryId }), },
- new { onclick = Html.Raw("return confirm('Вы действительно хотите удалить тему со всеми её сообщениями?')") }
- ).ToString();
- }
- // иначе, только сообщение
- else
- {
- moderatorLink = Html.ActionLink(
- "Удалить",
- "DeletePost",
- new { id = p.Id, returnUrl = @Url.RouteUrl(ViewContext.RouteData.Values) },
- new { onclick = string.Format("return confirm('Вы действительно хотите сообщение #{0}?')", p.Id) }
- ).ToString();
- }
- moderatorLink = "" + moderatorLink;
- }
- @Html.Raw( @MmoPortal.Models.MyHelper.RenderItem(p, moderatorLink) )
- ajaxLastUpdate = p.Date;
- topicId = p.TopicId;
- }
- </div>
- <br />
- @if (Request.IsAuthenticated && !User.IsInRole("Banned"))
- {
- <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
- <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
- using (Html.BeginForm("AddPost", "Forum", FormMethod.Post, new { id="postForm" }))
- {
- @Html.ValidationSummary(true)
- <legend></legend>
- <div class="editor-label">
- Введите текст сообщения
- </div>
- @Html.Hidden("topicId", (int)ViewBag.TopicId)
- <div class="editor-field">
- <textarea cols="20" data-val="true" data-val-required="Введите текст сообщения" id="text" name="text" rows="2" style="width:100%; height: 200px;"></textarea>
- <span class="field-validation-valid" data-valmsg-for="text" data-valmsg-replace="true"></span>
- </div>
- <input type="submit" id="addPost" value="Добавить сообщение" />
- }
- }
- else if (User.IsInRole("Banned"))
- {
- <div>Администратор запретил вам оставлять сообщения</div>
- }
- else
- {
- // UNDONE: добавить returnUrl (почему-то не добавляется)
- string returnUrl = Url.Action("Topic", "Forum", new { id = ViewBag.TopicId });
- <div class="forum-new-item">Пожалуйста, <a href="@Url.Action("LogOn", "Account").ToString()?returnUrl=@returnUrl">войдите</a>, чтобы оставить сообщение</div>
- }
- <script src="@Url.Content("~/Scripts/jquery.form.js")" type="text/javascript"></script>
- <script type="text/javascript">
- var ajaxLastUpdate = @ajaxLastUpdate; // @ajaxLastUpdate
- var newColor = '#CCFFCC';
- $(document).ready(function () {
- // bind form to ajax send
- var options = {
- beforeSend: function() {
- if ($("#text").val() == "") return;
- $("#addPost").attr("disabled", "disabled"); // disable button
- $("#addPost").val("Подождите ..."); // change text
- $("#text").attr("disabled", "disabled"); // disable text
- },
- success: function() {
- $("#text").val(""); // clear text
- },
- error: function() {
- alert("Возникла ошибка");
- $("#addPost").attr("disabled", ""); // enable button
- $("#text").val("Добавить сообщение"); // change text
- $("#text").attr("disabled", ""); // enable text
- }
- };
- $('#postForm').ajaxForm(options);
- DynamicUpdate();
- // on mouse move remove background on item (set item as read)
- $(".new").live('mousemove', function(event) {
- $(this).css("background", "white");
- });
- });
- // запрашивать обновление постов в теме каждые 5 сек
- function DynamicUpdate(topicId) {
- $.ajax({
- url: '@Url.Action("GetNewPosts", new { id = topicId })/?dateFrom=' + ajaxLastUpdate,
- dataType: "json", // тип загружаемых данных
- success: function (data) { // вешаем свой обработчик на функцию success
- $.each(data, function (i, item) { // обрабатываем полученные данные
- // если пост уже существует
- if ( $("#post" + item.Id).is('*') )
- {
- $("#post" + item.Id).parent().parent().children(".message").html(item.Text).parent().addClass("new").css("background", newColor);
- }
- // иначе добавить новый пост
- else
- {
- $(".forum-items-container").append(item.Html)
- $(".forum-items-container .flagNew").hide(0).slideDown().removeClass("flagNew");
- $("#post" + item.Id).parent().parent().children(".message").parent().addClass("new").css("background", newColor);
- }
- // обновить дату последнего сообщения
- ajaxLastUpdate = item.Date;
- });
- },
- complete: function (data) {
- $("#addPost").attr("disabled", ""); // enable button
- $("#addPost").val("Добавить сообщение"); // change text
- $("#text").attr("disabled", ""); // enable text
- }
- });
- setTimeout("DynamicUpdate()", 5000);
- }
- </script>
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement