www.gusucode.com > Carbon Forum PHP轻论坛系统 v3.6.5源码程序 > Carbon-Forum-3.6.5/static/js/reply.function.js
/* global $ */ /* * Carbon-Forum * https://github.com/lincanbin/Carbon-Forum * * Copyright 2006-2015 Canbin Lin (lincanbin@hotmail.com) * http://www.94cb.com/ * * Licensed under the Apache License, Version 2.0: * http://www.apache.org/licenses/LICENSE-2.0 * * A high performance open-source forum software written in PHP. */ function RenderTopic(){ //强制所有链接在新窗口中打开 var AllPosts = document.getElementsByClassName("comment-content"); PostContentLists = {};//Global AllPosts[AllPosts.length]=document.getElementsByClassName("topic-content")[0]; if(document.getElementsByClassName("topic-content").length>0){ PostContentLists[document.getElementsByClassName("topic-content")[0].childNodes[1].id] = trim3(document.getElementsByClassName("topic-content")[0].childNodes[1].innerHTML); } //console.log(PostContentLists); for (var j=0; j<AllPosts.length; j++) { PostContentLists[document.getElementsByClassName("comment-content")[j].childNodes[5].id] = trim3(document.getElementsByClassName("comment-content")[j].childNodes[5].innerHTML); //console.log(PostContentLists); var AllLinks = AllPosts[j].getElementsByTagName("a"); for(var i=0; i<AllLinks.length; i++) { var a = AllLinks[i]; //console.log(a); if(a.host != location.host){ a.setAttribute("target","_blank"); } }; }; //样式渲染需最后进行 uParse('.topic-content',{ 'rootPath': WebsitePath + '/static/editor/', 'liiconpath':WebsitePath + '/static/editor/themes/ueditor-list/'//使用 '/' 开头的绝对路径 }); uParse('.comment-content',{ 'rootPath': WebsitePath + '/static/editor/', 'liiconpath':WebsitePath + '/static/editor/themes/ueditor-list/'//使用 '/' 开头的绝对路径 }); // 回帖内容鼠标提示 if (TopicID) { var postA = $('a[href*="#Post"]'); var posts = {}; var tip = $("#reply-mouse-tip"); var tipAuthor = tip.find("a.author"); var tipContent = tip.find("div.content"); var showTip = function (ele, data) { if (!data) { $("#reply-mouse-tip").hide(); return false; } tipAuthor.text(data.UserName); tipAuthor.attr("href", WebsitePath + "/u/" + data.UserName); tipContent.html(data.Content); }; var attach = function (ele, postId) { ele.hover(function () { var pos = ele.position(); pos.top += ele.height(); tip.css(pos).show(); tipAuthor.text(""); tipContent.text("Loading..."); if (postId in posts) { showTip(ele, posts[postId]); } else { $.post(WebsitePath + "/json/get_post", { PostId: postId }) .success(function (data) { posts[postId] = data; showTip(ele, data); }); } }, function () { $("#reply-mouse-tip").hide(); }); }; for (var index = 0; index < postA.length; index++) { var $element = $(postA[index]); var postId = $element.attr("href").match(/#Post([0-9]+)/) if (postId) { postId = postId[1]; attach($element, postId); } } } } function InitEditor(){ //Initialize editor UE.delEditor('editor'); window.UEDITOR_CONFIG['textarea'] = 'Content'; window.UEDITOR_CONFIG['elementPathEnabled'] = false; window.UEDITOR_CONFIG['toolbars'] = [['fullscreen', 'source', '|', 'bold', 'italic', 'underline', '|' , 'blockquote', 'insertcode', 'insertorderedlist', 'insertunorderedlist', '|', 'emotion', 'simpleupload', 'insertimage', 'scrawl', 'insertvideo', 'music', 'attachment', '|', 'removeformat', 'autotypeset']]; UE.getEditor('editor',{onready:function(){ if(window.localStorage){ SavePostDraftTimer = setInterval(function() {//Global SavePostDraft(); }, 1000); //每隔N秒保存一次 //Try to recover previous article from draft RecoverContents(); } //Press Ctrl + Enter to submit in editor var EditorIframe = document.getElementsByTagName("iframe"); //console.log(EditorIframe); for (var i = EditorIframe.length - 1; i >= 0; i--) { EditorIframe[i].contentWindow.document.body.onkeydown = function(Event){ CtrlAndEnter(Event); }; //console.log(EditorIframe[i].contentWindow.document); }; }}); //编辑器外Ctrl + Enter提交回复 document.body.onkeydown = function(Event){ CtrlAndEnter(Event); }; console.log('editor loaded.'); } //Ctrl + Enter操作接收函数 function CtrlAndEnter(Event) { //console.log("keydown"); if (Event.ctrlKey && Event.keyCode == 13) { document.getElementById("ReplyButton").click(); Event.preventDefault ? Event.preventDefault() : Event.returnValue = false;//阻止回车的默认操作 } } //可以去除tab的trim function trim3(str) { if(str){ str = str.replace(/^(\s|\u00A0)+/, ''); for (var i = str.length - 1; i >= 0; i--) { if (/\S/.test(str.charAt(i))) { str = str.substring(0, i + 1); break; } } } return str; } //标签编辑 function InitNewTagsEditor(){ $("#AlternativeTag").keydown(function(e) { var e = e || event; switch (e.keyCode) { case 13: if ($("#AlternativeTag").val().length != 0) { $.ajax({ url: WebsitePath + "/manage", data: { ID: TopicID, Type: 1, Action: 'AddTag', TagName: $("#AlternativeTag").val() }, cache: false, dataType: "json", type: "POST", success: function(Data){ if(Data.Status == 1){ $("#TagsElements").append('<a href="'+ WebsitePath + '/tag/' + $("#AlternativeTag").val() + '" id="Tag' + md5($("#AlternativeTag").val()) + '">' + $("#AlternativeTag").val() + '</a>'); $("#EditTagsElements").append('<a href="###" onclick="javascript:DeleteTag('+ TopicID +', this, \'' + $("#AlternativeTag").val() + '\');">' + $("#AlternativeTag").val() + ' ×</a>'); } $("#AlternativeTag").val(""); } }); } break; default: return true; } }); } //编辑标签 function EditTags() { $("#TagsList").hide(); $("#EditTags").show(); } //完成标签编辑 function CompletedEditingTags() { $("#EditTags").hide(); $("#TagsList").show(); } //管理函数的完成回调 function DeleteTagCallback(TargetTag, TagName) { this.Success = function(Json) { if (Json.Status == 1) { $(TargetTag).remove(); $("#Tag"+md5(TagName)).remove(); } else { $(TargetTag).text(TagName+" ×"); } } } //管理 function DeleteTag(TopicID, TargetTag, TagName) { $(TargetTag).text("Loading"); var CallbackObj = new DeleteTagCallback(TargetTag, TagName); $.ajax({ url: WebsitePath + "/manage", data: { ID: TopicID, Type: 1, Action: 'DeleteTag', TagName: TagName }, cache: false, dataType: "json", type: "POST", success: CallbackObj.Success }); } //编辑帖子 function EditPost(PostID) { //初始化编辑器 //document.getElementById('p' + PostID).style.visibility = "hidden"; //document.getElementById('p' + PostID).style.height = "0"; $("#p" + PostID).hide(); window.UEDITOR_CONFIG['textarea'] = 'PostContent' + PostID; UE.getEditor('edit' + PostID, { onready: function() { UE.getEditor('edit' + PostID).setContent(PostContentLists['p' + PostID]); //将帖子内容放到编辑器里 } }); $("#edit" + PostID).show(); if( $("#edit_button" + PostID) && $("#edit_button" + PostID).length == 0){ $("#edit" + PostID).append('<div id="edit_button'+ PostID +'"><p></p><p><input type="button" value=" ' + Lang['Edit'] + ' " class="textbtn" id="EditButton' + PostID + '" onclick="JavaScript:SubmitEdit(' + PostID + ');"> <input type="button" value=" ' + Lang['Cancel'] + ' " class="textbtn" onclick="JavaScript:DestoryEditor(' + PostID + ');"></p>'); } //document.getElementById('edit' + PostID).style.visibility = "visible"; } //取消编辑(销毁编辑器) function DestoryEditor(PostID) { UE.getEditor('edit' + PostID).destroy(); $("#p" + PostID).show(); //document.getElementById('p' + PostID).style.visibility = "visible"; //document.getElementById('p' + PostID).style.height = "auto"; $("#edit" + PostID).html(""); $("#edit" + PostID).hide(); //document.getElementById('edit' + PostID).style.height = "0"; //document.getElementById('edit' + PostID).style.padding = "0"; //document.getElementById('edit' + PostID).style.visibility = "hidden"; } //提交编辑修改 function SubmitEdit(PostID) { var EditCallbackObj = new EditPostCallback(PostID); $.ajax({ url: WebsitePath + "/manage", data: { ID: PostID, Type: 2, Action: 'Edit', Content: UE.getEditor('edit' + PostID).getContent() }, cache: false, dataType: "json", type: "POST", success: EditCallbackObj.Success }); } //编辑帖子的回调函数 function EditPostCallback(PostID) { this.Success = function(Json) { if (Json.Status == 1) { document.getElementById('p' + PostID).innerHTML = UE.getEditor('edit' + PostID).getContent(); PostContentLists['p' + PostID] = UE.getEditor('edit' + PostID).getContent(); DestoryEditor(PostID); RenderTopic(); } else { alert(Json.ErrorMessage); } }; } //回复帖子 function ReplyToTopic() { if (!UE.getEditor('editor').getContent().length) { alert(Lang['Content_Empty']); UE.getEditor('editor').focus(); } else { $("#ReplyButton").val(Lang['Replying']); UE.getEditor('editor').setDisabled('fullscreen'); $.ajax({ url: WebsitePath + '/reply', data: { FormHash: document.reply.FormHash.value, TopicID: document.reply.TopicID.value, Content: UE.getEditor('editor').getContent() }, type: 'post', cache: false, dataType: 'json', async: true, success: function(data) { if (data.Status == 1) { console.log(SavePostDraftTimer); $("#ReplyButton").val(Lang['Reply_Success']); if (window.localStorage) { //清空草稿箱 StopAutoSave(); } //清空编辑器 UE.getEditor('editor').execCommand('cleardoc'); console.log(SavePostDraftTimer); $.pjax({ url: WebsitePath + "/t/" + data.TopicID + (data.Page > 1 ? "-" + data.Page: "") + "?cache=" + Math.round(new Date().getTime() / 1000) + "#Post" + data.PostID, container: '#main', scrollTo: false }); //location.href = WebsitePath + "/t/" + data.TopicID + (data.Page > 1 ? "-" + data.Page: "") + "?cache=" + Math.round(new Date().getTime() / 1000) + "#Post" + data.PostID; } else { alert(data.ErrorMessage); UE.getEditor('editor').setEnabled(); } }, error: function() { alert(Lang['Submit_Failure']); UE.getEditor('editor').setEnabled(); $("#ReplyButton").val(Lang['Submit_Again']); } }); } return true; } //回复某人 function Reply(UserName, PostFloor, PostID) { UE.getEditor('editor').setContent('<p>' + Lang['Reply_To'] + '<a href="' + location.pathname + '#Post' + PostID + '">#' + PostFloor + '</a> @' + UserName + ' :<br /></p><p></p>', false); UE.getEditor('editor').focus(true); } //引用某人 function Quote(UserName, PostFloor, PostID) { UE.getEditor('editor').setContent('<p></p><blockquote><a href="' + location.pathname + '#Post' + PostID + '">#' + PostFloor + '</a> @' + UserName + ' :<br />'+PostContentLists['p' + PostID] + '<blockquote>'); UE.getEditor('editor').focus(false); } //Save Draft function SavePostDraft() { try{ if (UE.getEditor('editor').getContent().length >= 10) { localStorage.setItem(Prefix + "PostContent" + TopicID, UE.getEditor('editor').getContent()); } }catch(oException){ if(oException.name == 'QuotaExceededError'){ console.log('Draft Overflow! '); localStorage.clear();//Clear all draft SavePostDraft();//Save draft again } } } function StopAutoSave() { clearInterval(SavePostDraftTimer); //停止定时保存 localStorage.removeItem(Prefix + "PostContent" + TopicID); //清空内容 UE.getEditor('editor').execCommand("clearlocaldata"); //清空Ueditor草稿箱 } function RecoverContents() { var DraftContent = localStorage.getItem(Prefix + "PostContent" + TopicID); if (DraftContent) { UE.getEditor('editor').setContent(DraftContent); } }