codepedia2/static/js/source.js

2192 lines
82 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

var flag = true;//左侧默认显示
var jstree_load_complete = false
function hideModal(){
$("#popupAll").remove();
}
function pop_box_new(value, Width, Height,close){
if($("#popupAll").length > 0){
$("#popupAll").remove();
}
w = ($(window).width() - Width)/2;
h = ($(window).height() - Height)/2;
var html="<div class=\"popupAll none\" id='popupAll'><div class=\"pr\"><div id=\"popupWrap\"></div></div></div>";
if(close){
value="<a href='javascript:void(0)' id='closeIcon'><i class='iconfont icon-shanchudiao'></i></a>" + value;
}
$(document.body).append(html);
$("#popupWrap").html(value);
$('#popupWrap').css({"top": h+"px","left": w+"px","padding":"0","border":"none","position":"fixed","z-index":"99999","background-color":"#fff","border-radius":"10px"});
if(close){
$('#closeIcon').css({"top": "-26px","left": Width +"px","z-index":"100000"});
}
$("#popupWrap").parent().parent().show();
$('#popupAll').find("#closeIcon").click(function(){
$("#popupAll").hide();
});
$('#popupAll').find("a[class*='pop_close']").click(function(){
$("#popupAll").hide();
});
//拖拽
function Drag(id) {
this.div = document.getElementById(id);
if (this.div) {
this.div.style.cursor = "move";
this.div.style.position = "fixed";
}
this.disX = 0;
this.disY = 0;
var _this = this;
this.div.onmousedown = function (evt) {
_this.getDistance(evt);
document.onmousemove = function (evt) {
_this.setPosition(evt);
};
_this.div.onmouseup = function () {
_this.clearEvent();
}
}
}
Drag.prototype.getDistance = function (evt) {
var oEvent = evt || event;
this.disX = oEvent.clientX - this.div.offsetLeft;
this.disY = oEvent.clientY - this.div.offsetTop;
};
Drag.prototype.setPosition = function (evt) {
var oEvent = evt || event;
var l = oEvent.clientX - this.disX;
var t = oEvent.clientY - this.disY;
if (l <= 0) {
l = 0;
}
else if (l >= document.documentElement.clientWidth - this.div.offsetWidth) {
l = document.documentElement.clientWidth - this.div.offsetWidth;
}
if (t <= 0) {
t = 0;
}
else if (t >= document.documentElement.clientHeight - this.div.offsetHeight) {
t = document.documentElement.clientHeight - this.div.offsetHeight;
}
this.div.style.left = l + "px";
this.div.style.top = t + "px";
};
Drag.prototype.clearEvent = function () {
this.div.onmouseup = null;
document.onmousemove = null;
};
new Drag("popupWrap");
$("#popupAll input, #popupAll textarea, #popupAll ul, #popupAll a,#shixun_search_form_div").mousedown(function(event){
event.stopPropagation();
new Drag("popupWrap");
});
}
//一个“知道了”按钮title和宽度都作为参数
function sure_confirm_box(title,width,height,str){
var htmlvalue = '<div class="task-popup" style="width:'+width+'px;"><div class="task-popup-title clearfix">'+title+'</div>'+
'<div class="task-popup-content">' + str + '</div><div class="mb30 edu-txt-center clearfix">'+
'<a href="javascript:void(0)" class="task-btn task-btn-orange use_btn" onclick="hideModal();">知道了</a></div></div>';
pop_box_new(htmlvalue, width, height);
}
function suofang(){
var html='<div><p class="mb20 font-16 edu-txt-center">可能会影响某些功能的正常使用</p><ul class="mb20 color-grey-6" style="width: 372px;margin:0px auto;">' +
'<li>1.请尝试调整浏览器缩放比例为<span class="color-orange mr5">100%</span>快捷键ctrl+0</li>' +
'<li>2.请尝试调整系统显示比例为<span class="color-orange mr5">100%</span>(控制面板/显示 设置)</li>' +
'</ul></div>';
sure_confirm_box("页面缩放比例不正确",600,310,html);
}
$(window).resize(function() {
suofang();
})
function setlocalStorage(id,value){
var newlocalStoragevaule=localStorage.setItem(id,value);
return newlocalStoragevaule;
}
function getlocalStorage(id){
var oldlocalStoragevaule=localStorage.getItem(id)
return oldlocalStoragevaule;
}
function deletelocalStorage(id){
localStorage.removeItem(id);
}
function getCookie(name) {
var cookieValue = null;
if (document.cookie && document.cookie !== '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = jQuery.trim(cookies[i]);
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) === (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
var csrftoken = getCookie('csrftoken');
function record_user_watch_behavior(file_id,line_num,view_type){
$.ajax({
cache: false,
type: "POST",
url: '/operations/record_user_watch_behavior/',
data: { 'file_id': file_id, 'line_num': line_num,'view_type':view_type },
dataType: 'json',
async: true,
beforeSend: function (xhr, settings) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
}
});
}
function show_annotation(file_id, line_num) {
// ev = window.event;
// if(ev==undefined){
// ev=arguments.callee.caller.arguments[0]||window.event;
// }
// var mousePos = mouseCoords(ev)
record_user_watch_behavior(file_id,line_num,"annotation")
$.ajax({
cache: false,
type: "POST",
url: '/operations/show_annotation/',
data: { 'file_id': file_id, 'line_num': line_num },
dataType: 'json',
async: true,
beforeSend: function (xhr, settings) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
},
success: function (data) {
if (data.status === "success") {
//console.log("linestatus_"+line_num);
//$("#loadCommentpanel").html(data.html_str);
//$("#commentPanel").css("top", mousePos.y);
//$("#commentPanel").css("left", mousePos.x+35);
//$("#loadCommentpanel").show();
//console.log(data.html_str);
$("#ItemcommentPanel").remove()
var reg=new RegExp("&lt;br/&gt;","g"); //创建正则RegExp对象
var newstr=data.html_str.replace(reg,"\n");
var html="<div id='ItemcommentPanel'>"+newstr+"</div>"
$("#linestatus_"+file_id+"_"+line_num).append(html);
$( "#ItemcommentPanel" ).draggable();
}else{
alert(data.msg)
}
},error:function(jqXHR, textStatus, errorThrown){
if(jqXHR.readyState===0&&jqXHR.status===0){
alert('网络故障,提交失败!请联网后重新提交');
}
}
});
}
function close_modify_anno(){
$("#modification").show();
$(".modify_anno_div").remove();
$("#modify_anno_textarea").attr("readonly","readonly")
ev = window.event;
if(ev==undefined){
ev=arguments.callee.caller.arguments[0]||window.event;
}
ev.stopPropagation();
}
//注入html代码
function inject_modifyAnno_html(item,file_id,linenum,anno_id) {
var modifyAnno_id= Number(getlocalStorage("modifyAnno_id"));
var modifyAnno_num=Number(getlocalStorage("modifyAnno_num"));
var modifyAnno_line=Number(getlocalStorage("modifyAnno_line"));
var modifyAnno_value=getlocalStorage("modifyAnno_value");
$("#modification").hide();
$(".modify_anno_div").remove();
$("#modify_anno_textarea").removeAttr("readonly");
$("#modify_anno_textarea").focus()
html_str = '<div class="modify_anno_div" style="display:block">'+
'<a href="javascript:void(0)" onclick="close_modify_anno()" class="btn fr mt10 mb10">取消</a>'+
'<a href="javascript:void(0)" onclick="modify_anno('+file_id+','+linenum+','+anno_id+')" class="btn btn-blue fr mt10 mb10 mr10">提交</a>'+
'</div>';
$(item).after(html_str)
ev = window.event;
if(ev==undefined){
ev=arguments.callee.caller.arguments[0]||window.event;
}
ev.stopPropagation();
if(file_id===modifyAnno_id&&linenum===modifyAnno_num&&anno_id===modifyAnno_line){
$("#modify_anno_textarea").val(modifyAnno_value);
}
}
// FIXME
function modify_anno(file_id,line_num,anno_id){
// 获取修改后的内容
function_name = "modify_anno("+file_id+","+line_num+","+anno_id+")"
make_button_disable($(".modify_anno_div a").last())
var content=$("#modify_anno_textarea").val();
//保留输入的换行符
var newcontent = content.replace(/\n|\r\n/g,"<br/>");
// var reg=new RegExp("<br>","g");
// var newstr=newcontent.replace(reg,"\n");
if (content == null || content == undefined || content.trim() == '') {
alert("内容不能为空");
make_button_able($(".modify_anno_div a").last(),function_name)
return;
}
$.ajax({
cache: false,
type: "POST",
url: '/operations/modify_anno/',
data: { 'file_id': file_id, 'line_num': line_num,'anno_id':anno_id,'content':newcontent },
dataType: 'json',
async: true,
beforeSend: function (xhr, settings) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
},
success: function (data) {
if (data.status === "success") {
alert(data.msg)
$("#ItemcommentPanel").remove()
// var reg=new RegExp("<br/>","g"); //创建正则RegExp对象
// var newstr=data.anno_content.replace(reg,"\n");
$("."+file_id+"_"+line_num).text(" ");
$("."+file_id+"_"+line_num).append("<div>"+data.anno_content+"</div>");
console.log(data.anno_content)
show_annotation(file_id,line_num);
deletelocalStorage("modifyAnno_id");
deletelocalStorage("modifyAnno_num")
deletelocalStorage("modifyAnno_line")
deletelocalStorage("modifyAnno_value")
}else{
alert(data.msg)
}
make_button_able($(".modify_anno_div a").last(),function_name)
},error:function(jqXHR, textStatus, errorThrown){
if(jqXHR.readyState===0&&jqXHR.status===0){
alert('网络故障,提交失败!请联网后重新提交');
}
make_button_able($(".modify_anno_div a").last(),function_name)
}
});
}
// FIXME
function show_issue_question(file_id, line_num, issue_ids) {
issueid_str=issue_ids.toString()
ev = window.event;
if(ev==undefined){
ev=arguments.callee.caller.arguments[0]||window.event;
}
var mousePos = mouseCoords(ev)
// record_user_watch_behavior(file_id,line_num,"issue_question")
//发送问题id返回问题内容
$.ajax({
cache: false,
type: "POST",
url: '/operations/show_issue_question/',
data: { 'file_id': file_id, 'line_num': line_num, 'issue_ids': issueid_str},
dataType: 'json',
async: true,
beforeSend: function (xhr, settings) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
},
success: function (data) {
if(data.status=='success'){
var reg=new RegExp("&lt;br/&gt;","g"); //创建正则RegExp对象
var newstr=data.html_str.replace(reg,"<br/>");
var html="<div id='ItemquestionPanel'>"+newstr+"</div>";
$("#linestatus_"+file_id+"_"+line_num).append(html);
// $("#loadQuestionpanel").html(data.html_str);
if (data.issueAnswers) {
//字符串转换成整型数组
var dataStrArr = issueid_str.substring(1, issueid_str.length - 1).split(",")
var issue_ids = dataStrArr.map(function (data) {
return +data;
});
//
issueAnswers = JSON.parse(data.issueAnswers);
issueStandardAnswers = JSON.parse(data.issueStandardAnswers);
let count = 0;
for (let i = 0; i < issue_ids.length; i++) {
issue_id = issue_ids[i]
if (issue_id == issueAnswers[count].fields.issue) {
var radios = document.getElementsByName("issue_" + issue_id)
user_answer = issueAnswers[0].fields.content;
standard_answer = issueStandardAnswers[0].fields.choice_position;
if (user_answer == standard_answer) {
radios[user_answer - 1].parentNode.style.color = "green";
} else {
radios[parseInt(user_answer) - 1].parentNode.style.color = "red";
radios[parseInt(standard_answer) - 1].parentNode.style.color = "green";
}
document.getElementById("submit_onechoice_" + issue_id).style.display = "None";
count = count + 1
}
}
}
//$("#questionPanel").css("top", mousePos.y);
//$("#questionPanel").css("left", mousePos.x - 400);
//$("#loadQuestionpanel").show();
$( "#ItemquestionPanel" ).draggable();
}else{
alert(data.msg)
}
},error:function(jqXHR, textStatus, errorThrown){
if(jqXHR.readyState===0&&jqXHR.status===0){
alert('网络故障,提交失败!请联网后重新提交');
}
}
});
}
function add_vote(type, id, num) {
// alert(1111)
}
function submit_onechoice_issue(issue_id) {
// 获取问题的内容
var content = $("input[name='issue_" + issue_id + "']:checked").val()
$.ajax({
cache: false,
type: "POST",
url: '/operations/add_issue_answer/',
data: { 'content': content, 'issue_id': issue_id },
dataType: 'json',
async: true,
beforeSend: function (xhr, settings) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
},
success: function (data) {
if (data.status === 'success') {
var radios = document.getElementsByName("issue_" + issue_id)
var choose = parseInt(content) - 1
if (content == data.standAnswer){
radios[choose].parentNode.style.color = "green";
}else{
radios[choose].parentNode.style.color = "red";
radios[parseInt(data.standAnswer)-1].parentNode.style.color = "green";
}
document.getElementById("submit_onechoice_"+issue_id).style.display="None";
} else {
alert(data.msg)
}
},error:function(jqXHR, textStatus, errorThrown){
if(jqXHR.readyState===0&&jqXHR.status===0){
alert('网络故障,提交失败!请联网后重新提交');
}
}
});
}
function add_comment_action(item, id, type) {
var content = $("#writetext_" + id).val();
// var newcontent = content.replace(/\n|\r\n/g,"<br/>");
// var reg=new RegExp("<br>","g");
// var newstr=newcontent.replace(reg,"\n");
if (content == "") {
confirm("请输入评论内容");
return;
}
//发送一个ajax请求
$.ajax({
cache: false,
type: "POST",
url: '/operations/add_comment/',
data: { 'object_id': id, 'type': type, "content": content },
dataType: 'json',
async: true,
beforeSend: function (xhr, settings) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
},
success: function (data) {
if (data.status === 'success') {
html_str = data.html_str
// var reg=new RegExp("&lt;br/&gt;","g"); //创建正则RegExp对象
// var newhtml_str=html_str.replace(reg,"<br/>");
show_new_comment(item, html_str);
deletelocalStorage("writetext_id");
deletelocalStorage("writetext_value");
} else {
alert(data.msg);
}
},error:function(jqXHR, textStatus, errorThrown){
if(jqXHR.readyState===0&&jqXHR.status===0){
alert('网络故障,提交失败!请联网后重新提交');
}
}
});
ev = window.event;
if(ev==undefined){
ev=arguments.callee.caller.arguments[0]||window.event;
}
ev.stopPropagation();
}
//添加评论
function show_new_comment(item, html_str) {
// onclick="add_annotation(this,199,18)"
$(item).parents(".parthalf_comment").after(html_str);
$(item).parents(".comment-btn").find(".comment-write").addClass("none");
$(item).parents(".comment-btn").find("#addcom").removeClass("none");
$(item).siblings(".writetext").val("");
}
function add_question_answer(item,question_id) {
// 获取回答的内容
var content = $("#responseInput_" + question_id).val();
if (content == "") {
confirm("请输入回答内容");
return;
}
$.ajax({
cache: false,
type: "POST",
url: '/operations/add_question_answer/',
data: { 'question_id': question_id,"content": content},
dataType: 'json',
async: true,
beforeSend: function (xhr, settings) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
},
success: function (data) {
if (data.status === 'success') {
var username = data.username;
show_new_question_answer(item, content, username);
} else {
alert(data.msg);
}
},error:function(jqXHR, textStatus, errorThrown){
if(jqXHR.readyState===0&&jqXHR.status===0){
alert('网络故障,提交失败!请联网后重新提交');
}
}
});
}
function show_new_question_answer(item, content, username) {
var html = '<div class="comments clearfix"><div class="fl"><img src="/static/image/users/default.png" width="45px" height="45px" class="radius" /></div>'
html += '<div class="fl comments-right">'
html += '<div class="question-comment">';
html += '<p><span class="comments-name">' + username+'</span><span class="font-12 color-grey-c">10分钟前</span></p>';
html += '<div class="comments-content">'+content+'</div>';
html += '</div></div></div>'
$(item).parents(".responsePanel").before(html);
$(item).parent().siblings(".responseInput").val("");
}
function delete_anno(file_id,line_num,anno_id){
$.ajax({
cache: false,
type: "POST",
url: '/operations/delete/',
data: {'object_id':anno_id,"object_type":"Annotation"},
dataType: 'json',
async: true,
beforeSend: function (xhr, settings) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
},
success: function (data) {
if (data.status == 'success') {
$("#ItemcommentPanel").remove()
$("."+file_id+"_"+line_num).remove()
if(data.remove_anno_icon){
$("#codeopration_anno_"+file_id+"_"+line_num).html("");
}
// show_annotation(file_id,line_num);
layer.msg(data.msg);
}else{
layer.msg(data.msg);
}
// newhide_currentLine(file_id,line_num)
setTimeout('newhide_currentLine('+file_id+','+line_num+')',500);
},error:function(jqXHR, textStatus, errorThrown){
if(jqXHR.readyState===0&&jqXHR.status===0){
alert('网络故障,提交失败!请联网后重新提交');
}
}
});
}
function add_annotation(item,file_id, line_num) {
// 获取当前是注释还是问题
function_name="add_annotation(this"+","+file_id+","+line_num+")"
// make_button_disable($(item))
var selectValue = $(item).siblings(".put-select").find(".active").html().trim();
var text_context = "#addno-text-" + file_id+"-"+line_num;
var content = $(text_context).val();
//保留输入的换行符
var newcontent = content.replace(/\n|\r\n/g,"<br/>");
var reg=new RegExp("<br>","g");
var newstr=newcontent.replace(reg,"\n");
if (content.trim().length == 0) {
alert("内容不能为空")
$(item).attr('disabled',false);
$(item).attr("onclick","add_annotation(this"+","+file_id+","+line_num+")")
return;
}
make_button_disable($("#issue-anno-submit"))
if (selectValue == "注释") {
// 向addAnnatation中发请求
submit_annotation(file_id, line_num, newstr);
deletelocalStorage("file_id");
deletelocalStorage("line_num");
deletelocalStorage("item_value");
deletelocalStorage("status_value");
} else {
submit_question(file_id, line_num, newstr);
deletelocalStorage("issuefile_id");
deletelocalStorage("issueline_num");
deletelocalStorage("issueitem_value");
deletelocalStorage("status_value");
}
make_button_able($("#issue-anno-submit"),'add_annotation(this,'+file_id+','+linenum+')')
}
function submit_annotation(file_id, line_num, content) {
// 因为可能注释或问题没有值的时候不会为该代码块添加html代码所以首先判断
// 然后将注释数+1
$.ajax({
cache: false,
type: "POST",
url: '/operations/add_annotation/',
data: { 'file_id': file_id, 'linenum': line_num, 'content': content },
dataType: 'json',
async: true,
beforeSend: function (xhr, settings) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
},
success: function (data) {
if (data.status != "fail") {
// var codeopration_anno_div = $("#codeopration_anno_"+file_id+"_" + line_num).html()
var str = '<span id="annonums_' + line_num + '" class="annonums" onclick="show_annotation(' + file_id + ',' + line_num + ')">';
str +='</span>';
$("#codeopration_anno_" + file_id + "_" + line_num).html(str);
$(".addno-panel").hide();
$(".source-addno-panel").remove();
// show_annotation(file_id,line_num);
//将注释添加到当前行的上一行
var contenthtml ='<div class="linenum"></div>'+'<div class="sourcecode">'+'<div class="mypre newaddmypre hljs-comment ' + file_id+"_"+line_num + '">'+data.anno_content+'</div>'+'</div>'+'<div class="linestatus"></div>';
var html = '<div class="newcodeline newcodelinebox">'+contenthtml+'</div>';
var id=file_id+'_'+"L"+line_num;
$("#"+id).before(html);
if(data.status == "success"){
if(data.rank){
layer.msg('提交成功,当前小组标注数量排名第:'+data.rank);
}
}else{
layer.msg(data.msg);
}
setTimeout('newhide_currentLine('+file_id+','+line_num+')',500);
}else{
layer.msg(data.msg);
}
},error:function(jqXHR, textStatus, errorThrown){
if(jqXHR.readyState===0&&jqXHR.status===0){
alert('网络故障,提交失败!请联网后重新提交');
}
}
});
}
function submit_question(file_id, line_num, content) {
$.ajax({
cache: false,
type: "POST",
url: '/operations/add_question/',
data: { 'file_id': file_id, 'linenum': line_num, 'content': content },
dataType: 'json',
async: true,
beforeSend: function (xhr, settings) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
},
success: function (data) {
if (data.status == 'success') {
var codeopration_anno_div = $("#codeopration_question_" + file_id + "_" + line_num).html()
if (codeopration_anno_div.trim().length == 0) {
var str = '<span id="questionums_' + line_num + '" class="questionnums" onclick="show_issue_question(' + file_id + ',' + line_num + ',[])">';
str += '</span>'
$("#codeopration_question_" + file_id + "_" + line_num).html(str);
}
$(".addno-panel").hide();
$(".source-addno-panel").remove();
show_issue_question(file_id,line_num,[]);
// else {
// var question_before = $("#questionums_" + line_num).text();
// $("#questionums_" + line_num).html(parseInt(question_before) + 1);
// }
}else{
alert(data.msg);
}
},error:function(jqXHR, textStatus, errorThrown){
if(jqXHR.readyState===0&&jqXHR.status===0){
alert('网络故障,提交失败!请联网后重新提交');
}
}
});
}
function closeX_search(){
$("#search_response").hide();
}
function search_symbol(args,line_num,function_name) {
// ev = window.event
ev = window.event;
if(ev==undefined){
ev=arguments.callee.caller.arguments[0]||window.event;
}
var mousePos = mouseCoords(ev)
$.ajax({
cache: true,
type: "POST",
url: '/operations/show_method_info/',
data: { 'args': args,"line_num":line_num,"function_name":function_name },
dataType: 'json',
async: true,
beforeSend: function (xhr, settings) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
},
success: function (data) {
if (data.status === 'success') {
// console.log(context);
$("#search_response").css("top", 400);
$("#search_response").css("left", mousePos.x);
$(".search-title").remove();
$(".resultform").remove();
$("#search_response").append(data.html_str);
$("#search_response").show();
$( "#search_response" ).draggable();
ev.stopPropagation();
}
},error:function(jqXHR, textStatus, errorThrown){
if(jqXHR.readyState===0&&jqXHR.status===0){
alert('网络故障,提交失败!请联网后重新提交');
}
}
});
}
function onClick_FeedbackButton(answer_type,file_id,path_and_lineno,line_num,function_name,This) {
$(This).hide()
// 获取到当前的答案
$.ajax({
cache: false,
type: "POST",
url: '/operations/submit_search_answer/',
data: {'file_id':file_id,"path_and_lineno":path_and_lineno,"answer_type":answer_type,"line_num":line_num,"function_name":function_name},
dataType: 'json',
async: true,
beforeSend: function (xhr, settings) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
},
success: function (data) {
// alert("Thanks for your support for the improvement of Accuracy of search results")
layer.msg('操作成功');
},error:function(jqXHR, textStatus, errorThrown){
if(jqXHR.readyState===0&&jqXHR.status===0){
alert('网络故障,提交失败!请联网后重新提交');
}
}
});
}
navigation_map = new Map()
function show_navigation() {
// 首先要获取当前打开的标签页,或者也可以获取当前的路径
// 获取当前的项目名称
var file_path=document.getElementsByClassName("filename")[0].innerHTML;
var project_path=$("#projectName").text()
if( navigation_map.has(project_path+file_path)){
content = navigation_map.get(project_path + file_path);
$("#structure-context").html(content)
// 加载navigation_tree
deal_for_navigation_tree()
return;
}
$.ajax({
cache: false,
type: "POST",
url: '/operations/show_navigation/',
data: { 'project_path': project_path, 'file_path': file_path },
dataType: 'json',
async: true,
beforeSend: function (xhr, settings) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
},
success: function (data) {
if (data.status === 'success') {
var content = "<div id='navigation_tree'>";
var obj = data.msg;
var file_id = data.file_id
for (let i = 0; i < obj.length; i++) {
var type = obj[i][0];
var str = '';
str += "<ul><li>";
str += type
var items = obj[i][1];
for (let j = 0; j < items.length; j++) {
var name = items[j][0];
var linenum = items[j][1];
str += "<ul><li data-jstree='{\"icon\":\"fa fa-file-code-o color-blue\"}'>"
str += "<a class='def' href='#"+file_id+"_L" + linenum + "'>" + name + "</a>";
str += "</li></ul>"
}
str += "</li></ul>"
content += str;
}
content += "</div>"
// document.getElementById("annotation").style.display="block";
navigation_map.set(project_path + file_path, content)
$("#structure-context").html(content);
// 加载navigation_tree
deal_for_navigation_tree()
}
else {
navigation_map.set(project_path + file_path, "")
$("#structure-context").html("")
}
},error:function(jqXHR, textStatus, errorThrown){
if(jqXHR.readyState===0&&jqXHR.status===0){
alert('网络故障,提交失败!请联网后重新提交');
}
}
});
}
function deal_for_navigation_tree(){
try{
$("#navigation_tree").jstree();
$("#navigation_tree").jstree().open_all();
$("#navigation_tree li").click(function(){
location.href = $(this).find("a").attr("href");
});
}catch(error){
console.log(error)
}
}
function show_currentLine(linenum) {
// document.getElementById("code_" + linenum).style.backgroundColor = '#f1efec';
document.getElementById("addanno_" + linenum).style.visibility="visible";
}
function hide_currentLine(linenum) {
// document.getElementById("code_" + linenum).style.backgroundColor = 'white';
document.getElementById("addanno_" + linenum).style.visibility="hidden";
}
$(function () {
$("#filelist-content .item").click(function () {
if ($(this).siblings(".sub-item").length > 0 && $(this).attr("show") == "0") {
$(this).siblings(".sub-item").show();
$(this).attr("show", "1");
} else if ($(this).attr("show") == "1") {
$(this).siblings(".sub-item").hide();
$(this).attr("show", "0");
}
})
$(".left-tab li").click(function () {
// alert("left-tab li")
$(".left-tab li").removeClass("active");
$(this).addClass("active");
$(".left-rightlist").hide();
$(".left-rightlist").eq($(this).index()).show();
if (flag == false) {
$("#right_code").css("width", "80%");
$(".left").animate({ "width": "20%" }, 1000);
}
})
/*隐藏左侧部分*/
$(".hideleft").click(function () {
var wid = $(".left").width();
$(".left").animate({ "width": "50px" }, 800);
$(".left-tab li").removeClass("active");
$("#right_code").width(parseInt($("#right_code").width()) + wid);
flag = false;
})
//滚动codepanel隐藏搜索结果
$("#right_code").scroll(function () {
$("#search_response").hide();
})
$(".addno-panel").click(function (event) {
ev = window.event;
if(ev==undefined){
ev=arguments.callee.caller.arguments[0]||window.event;
}
ev.stopPropagation();
})
$(".addanno").live("click",function (event) {
$(".addno-panel").hide();
$(this).siblings(".addno-panel").show();
$(".addanno").find("i").removeClass("color-dark-57").addClass("color-grey-c");
$(this).find("i").removeClass("color-grey-c").addClass("color-dark-57");
ev = window.event;
if(ev==undefined){
ev=arguments.callee.caller.arguments[0]||window.event;
}
ev.stopPropagation();
})
$("body").click(function (event) {
//隐藏添加注释或者问题的弹框
$(".addno-panel").hide();
$(".source-addno-panel").remove();
$(".addanno").find("i").removeClass("color-dark-57").addClass("color-grey-c");
//隐藏评论弹框
if($(event.target).parents("#ItemcommentPanel").length == 0){
$("#ItemcommentPanel").hide();
$("#ItemcommentPanel").remove();
}
//隐藏问题弹框
if($(event.target).parents("#ItemquestionPanel").length == 0){
$("#ItemquestionPanel").hide();
$("#ItemquestionPanel").remove();
}
})
$("body").on('click', '.addno-panel', function(e) {
e.stopPropagation();
});
$("#ItemcommentPanel").on('click', '#commentPanel', function (e) {
e.stopPropagation();
});
$("#loadQuestionpanel").on('click', '#questionPanel', function (e) {
e.stopPropagation();
});
//隐藏问题框
$("#loadQuestionpanel").click(function (event) {
$("#loadQuestionpanel").hide();
})
//点击问题框里的内容,阻止冒泡
$("#questionPanel").click(function (event) {
ev = window.event;
if(ev==undefined){
ev=arguments.callee.caller.arguments[0]||window.event;
}
ev.stopPropagation();
})
})
function addcomments(item,annopk) {
var annopkid= Number(getlocalStorage("writetext_id"));
var writetext_value= getlocalStorage("writetext_value")
$(item).siblings(".comment-write").removeClass("none");
$(item).addClass("none");
ev = window.event;
if(ev==undefined){
ev=arguments.callee.caller.arguments[0]||window.event;
}
ev.stopPropagation();
if(annopk===annopkid){
$("#writetext_"+annopkid).val(writetext_value);
}
}
function cancelcom(item) {
$(item).parents(".comment-write").siblings("#addcom").removeClass("none");
$(item).parents(".comment-write").addClass("none");
ev = window.event;
if(ev==undefined){
ev=arguments.callee.caller.arguments[0]||window.event;
}
ev.stopPropagation();
}
//隐藏右侧部分
function colserightpanel() {
if (flag) {
$(".codereading").css("width", "80%");
} else {
var rightwid = $(".right").width();
var codewid = $(".codereading").width();
$(".codereading").css("width", parseInt(codewid) + parseInt(rightwid));
}
$(".right").addClass("none");
}
function mouseCoords(ev) {
if (ev.pageX || ev.pageY) {
return {
x: ev.pageX,
y: ev.pageY
};
}
return {
x: ev.clientX + document.body.scrollLeft - document.body.clientLeft,
y: ev.clientY + document.body.scrollTop - document.body.clientTop
};
}
var tabSet = new Set();
// var issue_map = new Map();
var right_map = new Map();
var tree_nodes = new Map();
function path_predeal(path){
// path = path.replace('.', '');
// path = path.replace('/', '_');
path = path.split('.').join('');
path = path.split('/').join('_');
return path;
}
function url_deal(path,archor){
var projectName= $("#projectName").text();
var ip=window.location.host; //端口号
var newhtefpath = "/projects/"+projectName+path;
var stateObject = {};
if(path==""){
newhtefpath += "/";
}
//修改地址栏中的地址
history.pushState(stateObject, ip, newhtefpath);
if(archor!=null){
location.href=archor
// history.replaceState(null,null,location.href);
}
}
function deal_for_tab(project_id,normal_path,path_after){
// 关闭其他标签页
var tabcontent = document.getElementsByClassName("codereading");
for (var i = 0; i < tabcontent.length; i++) {
tabcontent[i].style.display = "none";
}
var tab_items = document.getElementsByClassName("tab_item");
for (var i = 0; i < tab_items.length; i++) {
// debugger;
tab_items[i].className = tab_items[i].className.replace(" active", "");
}
// 将当前标签页置为活跃
document.getElementById("code_" + path_after).style.display = "block";
document.getElementById("tab_" + path_after).style.display = "block";
document.getElementById("tab_" + path_after).className += " active";
// 如果当前的内容未加载,则加载当前的内容
get_codereading_content(project_id,normal_path,path_after)
}
function deal_for_right(project_id,normal_path,path_after){
if(path_after in right_map){
$("#right_panel").html(right_map[path_after]);
}else{
$.ajax({
cache: false,
type: "POST",
url: '/operations/right/',
data: { 'project_id': project_id, 'path': normal_path},
dataType: 'json',
async: true,
beforeSend: function (xhr, settings) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
},
success: function (data) {
if (data.status === 'success') {
right_map[path] = data.html_str;
$("#right_panel").html(right_map[path]);
}
else {
right_map[path] = ""
}
$("#right_panel").html(right_map[path_after]);
},error:function(jqXHR, textStatus, errorThrown){
if(jqXHR.readyState===0&&jqXHR.status===0){
alert('网络故障,提交失败!请联网后重新提交');
}
}
});
}
}
// 打开一个已经存在的标签页
// 注意这个还得将对应的路径更改了
function open_tab(normal_path,archor,project_id) {
try{
highlight_jstree_node(project_id,normal_path);
// console.log(window.location.pathname); 端口号后面的路径
var path_after = path_predeal(normal_path)
deal_for_tab(project_id,normal_path,path_after)
url_deal(normal_path,archor)
document.getElementsByClassName("filename")[0].innerHTML = normal_path;
deal_for_right(project_id,normal_path,path_after)
// if(!issue_map.has(path)){
// window.setTimeout(function () { $("#hotest_issue").html(issue_map[path]) }, 3000);
// }else{
// $("#hotest_issue").html(issue_map[path]);
// }
show_navigation();
}catch(error) {
console.log(error);
// expected output: SyntaxError: unterminated string literal
// Note - error messages will vary depending on browser
}
}
function generate_codereading_content(lines,self_annos,fileid,annos_count,issues_count,questions_count,issues,language){
var htmlstr = '<div class="code_file">'
for(linenum in lines){
line = lines[linenum]
// 如果当前行有注释,则先生成注释行
if(linenum in self_annos){
htmlstr += generate_codereading_anno_line(fileid,linenum,self_annos)
}
// 无论当前行是否有注释,都应该生成代码行
htmlstr += generate_codereading_line(fileid,linenum,annos_count,issues_count,questions_count,line,issues,language)
}
htmlstr += '</div>'
return htmlstr
}
function generate_codereading_anno_line(file_id,linenum,self_annos){
var htmlstr = ''
htmlstr += '<div class="newcodeline newcodelinebox">'
htmlstr += '<div class="sourcecode">'
htmlstr += '<div class="mypre mypre newmypre hljs-comment '+file_id+"_"+linenum+' ">'
htmlstr += self_annos[linenum]
htmlstr += '</div >'
htmlstr += '</div>'
htmlstr += '<div class="linestatus"></div>'
htmlstr += '</div>'
return htmlstr
}
function generate_codereading_line(fileid,linenum,annos_count,issues_count,questions_count,line,issues,language){
var htmlstr = '<div id="'+fileid+'_L'+linenum+'" class="codeline codelinebox" onmouseover="show_currentLine(\''+fileid+'_'+linenum+'\')" onmouseout="hide_currentLine(\''+fileid+'_'+linenum+'\')">'
htmlstr += generate_codereading_linenum_and_codeline(linenum,line,language,fileid)
htmlstr += generate_codereading_linestatus(fileid,linenum,annos_count,issues_count,questions_count,issues)
htmlstr += '</div>'
return htmlstr
}
function add_hrefTag_into_line(line,file_id,line_num){
var regex = /\w+\(/g
var strs = line.match(regex)
if(strs!=null){
for(var i=0;i<strs.length;i++){
function_name = strs[i].substring(0,strs[i].length-1)
var search_symbol_str = '<text onclick="search_symbol(\'file_id='+String(file_id)+"&defs="+String(function_name)+'\','+String(line_num)+',\''+String(function_name)+'\')">'+function_name+"</text>"
var replace_str = '<a href="javascript:void(0)">'+search_symbol_str+'</a>('
line=line.replace(strs[i],replace_str)
}
return line
}
return line
}
function generate_codereading_linenum_and_codeline(linenum,line,language,file_id){
var line= add_hrefTag_into_line(line,file_id,linenum)
var htmlstr = ''
htmlstr += '<div class="linenum">'
htmlstr += linenum.toString()
htmlstr += '</div>'
htmlstr += '<div class="sourcecode">'
htmlstr += '<pre class="mypre" style="">'
htmlstr += '<code class="'+language+' mypre">'
htmlstr += line
htmlstr += '</code>'
htmlstr += '</pre>'
htmlstr += '</div>'
return htmlstr
}
function newshow_currentLine(fileid,linenum){
$("#"+fileid+"_L"+linenum+">"+".sourcecode").css("background","#323438");
}
function newhide_currentLine(fileid,linenum){
$("#"+fileid+"_L"+linenum+">"+".sourcecode").css("background","#23241f");
}
function generate_codereading_linestatus(fileid,linenum,annos_count,issues_count,questions_count,issues){
var htmlstr = ''
htmlstr += '<div id="linestatus_'+fileid+'_'+linenum+'" class="linestatus" onmouseover="newshow_currentLine('+fileid+','+linenum+')" onmouseout="newhide_currentLine('+fileid+','+linenum+')">'
htmlstr += '<span class="codeopration" id="codeopration_anno_'+fileid+'_'+linenum+'">'
if(linenum in annos_count){
htmlstr += '<span class="annonums" onclick="show_annotation('+fileid+','+linenum+')"></span>'
}
htmlstr += '</span>'
htmlstr += '<span class="codeopration" id="codeopration_question_'+fileid+'_'+linenum+'">'
if(linenum in questions_count){
htmlstr += '<span class="questionnums" onclick="show_issue_question('+fileid+','+linenum+',\'[]\')"></span>'
}
else if(linenum in issues_count){
htmlstr += '<span class="questionnums" onclick="show_issue_question('+fileid+','+linenum+',\'['+issues[linenum]+']\')"></span>'
}
htmlstr += '</span>'
htmlstr += '<span id="addanno_'+fileid+'_'+linenum+'" class="addanno" onclick="inject_addnoPanel_html(this,'+fileid+','+linenum+')">'
htmlstr += '<img src="/static/image/newadd.png" class="mr3 rightimgcommentblue">'
htmlstr += '</span>'
htmlstr += '</div>'
return htmlstr
// onmouseover="show_currentLine(\''+fileid+'_'+linenum+'\')" onmouseout="hide_currentLine(\''+fileid+'_'+linenum+'\')"
}
// 添加一个新的标签页,
// 如果标签页不存在则创建一个新的标签页然后调用open_tab
// 如果标签页已经存在,则打开对应的标签页
// 并调用open_tab
function get_path_link_and_archor(path){
tmp_index = path.indexOf("#");
if(tmp_index != -1){
path_after = path.substring(0,tmp_index)
archor = path.substring(tmp_index)
return [path_after,archor]
}
return [path,null]
}
function correct_jstreeid(path_after){
var node_id = tree_nodes[path_after]
if($("#"+node_id).length==0){
tmp_node_id= node_id.replace("j1","j2")
$('#jstree').jstree("select_node",tmp_node_id);
return tmp_node_id
}else{
return node_id
}
}
function change_jstree_position(path_after){
try{
$('#jstree').jstree("deselect_all", true);
$('#jstree').jstree("select_node", tree_nodes[path_after]);
node_id=correct_jstreeid(path_after)
setTimeout(function timer() {
var offsettop=$("#"+tree_nodes[path_after]).position().top;
tree_nodes[path_after] = node_id
$("#filelist-content").scrollTop(offsettop);
},500)
}catch(error){
console.log("jstree hasnt load complete now!")
}
}
function get_codereading_content(project_id,normal_path,path_after){
div_codereading = document.getElementById("code_"+path_after)
if(div_codereading.innerHTML==""){
$.ajax({
cache: false,
type: "POST",
url: '/operations/get_codereading_content/',
data: { 'project_id': project_id, 'path': normal_path },
dataType: 'json',
async: true,
beforeSend: function (xhr, settings) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
},
success: function (data) {
if (data.status === 'success') {
// 获取code-reading的内容并填充到对应的code-reading的Element
if(data.is_dir=="0"){
var content = generate_codereading_content(data.lines,data.self_annos,data.fileid,data.annos_count,data.issues_count,data.questions_count,data.issues,data.language)
div_codereading.innerHTML = content;
hljs.configure({useBR: false});
// hljs.highlightBlock(div_codereading)
$('#code_'+path_after+' pre code').each(function(i, block) {
hljs.highlightBlock(block);
});
// .each(function(i, block) {
// hljs.highlightBlock(block);
// });
}else{
var content = data.html_str
div_codereading.innerHTML = content;
}
}
else {
div_codereading.innerHTML = "";
}
},error:function(jqXHR, textStatus, errorThrown){
if(jqXHR.readyState===0&&jqXHR.status===0){
alert('网络故障,提交失败!请联网后重新提交');
}
}
});
}
}
function add_tab(project_id,path,filename) {
// var tree_node = $("#jstree").jstree("get_selected");
var returnValue = get_path_link_and_archor(path)
// 正常应该得到的path为normal path
var normal_path = returnValue[0]
var archor = returnValue[1]
path = path_predeal(normal_path)
if (tabSet.has(path)) {
open_tab(normal_path,archor,project_id)
} else {
var tab_tag = document.getElementsByClassName("tab_head")[0];
//添加tab
/*<li class="tab_item" id="tab_src_net_micode_notes_widget_NoteWidgetProvider">
<a href="javascript:void(0)" onclick="open_tab('src_net_micode_notes_widget_NoteWidgetProvider')">NoteWidgetProvider.java</a>
<a href="javascript:void(0)" onclick="close_tab('src_net_micode_notes_widget_NoteWidgetProvider')">&times</a>
</li> */
var li_tab_item = document.createElement("li")
li_tab_item.className = "tab_item";
li_tab_item.id = "tab_" + path;
var tag_a1 = document.createElement("a");
tag_a1.href ="javascript:void(0)";
// filename也要进行判断
tmp_index = filename.indexOf("#");
if(tmp_index != -1){
filename = filename.substring(0,tmp_index)
}
tag_a1.textContent = filename
tag_a1.onclick = (function () {
return function () {
open_tab(normal_path,null,project_id);
}
})();
var tag_a2 = document.createElement("a")
tag_a2.href = "javascript:void(0)";
tag_a2.textContent = '×'
tag_a2.onclick = (function () {
return function () {
close_tab(normal_path);
}
})();
li_tab_item.appendChild(tag_a1)
li_tab_item.appendChild(tag_a2)
tab_tag.appendChild(li_tab_item)
// 添加对应的code-reading的Element
var div_code = document.getElementsByClassName("code_Area")[0]
var div_codereading = document.createElement("div")
div_codereading.id = "code_" + path;
div_codereading.className = "codereading";
// div_codereading.style.overflowY="auto";
div_code.appendChild(div_codereading)
open_tab(normal_path,archor,project_id);
// 现在Hotest Question 模块先不用了
// // 填充hotest_question
// $.ajax({
// cache: false,
// type: "POST",
// url: '/operations/get_hotest_issues/',
// data: { 'project_id': project_id, 'path': normal_path,"question_num":5 },
// dataType: 'json',
// async: true,
// beforeSend: function (xhr, settings) {
// xhr.setRequestHeader("X-CSRFToken", csrftoken);
// },
// success: function (data) {
// if (data.status === 'success') {
// issue_map[path] = data.html_str;
// }
// else {
// issue_map[path] = ""
// }
// }
// });
tabSet.add(path);
}
}
function highlight_jstree_node(project_id,normal_path){
path_after = path_predeal(normal_path)
if(path_after in tree_nodes){
change_jstree_position(path_after)
}else{
$.ajax({
cache: false,
type: "POST",
url: '/operations/get_jstree_id/',
data: { 'project_id': project_id, 'path': normal_path},
dataType: 'json',
async: true,
beforeSend: function (xhr, settings) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
},
success: function (data) {
if (data.status === 'success') {
var tree_node = data.jstree_id
tree_nodes[path_after]=tree_node
change_jstree_position(path_after)
}
},error:function(jqXHR, textStatus, errorThrown){
if(jqXHR.readyState===0&&jqXHR.status===0){
alert('网络故障,提交失败!请联网后重新提交');
}
}
});
}
}
// 这里也可以更改为item传入this
function close_tab(path) {
// 将当前的当前Element的父节点isplay:none
// 将对应的code-reading区域设置为display:none
path = path_predeal(path)
var element = document.getElementById("tab_" + path);
var previosuElement = element.previousElementSibling;
var nextElement = element.nextElementSibling;
document.getElementById("code_" + path).remove()
element.remove()
tabSet.delete(path)
// 如果该标签页有上一个标签,将此标签的上一个标签页打开
if (previosuElement != undefined) {
var path = previosuElement.id.substr(4);
open_tab(path,null,project_id)
return;
}
// 如果该标签页有下一个兄弟标签,将此标签的下一个标签页打开
if (nextElement != undefined) {
var path = nextElement.id.substr(4);
open_tab(path,null,project_id);
return;
}
}
// 对应目录级别的addnoPanel
function show_next_addnoPanel(file_id){
var oldfile_id= Number(getlocalStorage("rightannotationid"));
var olditem_value=getlocalStorage("rightannotationvalue");
$("#addno-panel-"+file_id).show();
ev = window.event;
if(ev==undefined){
ev=arguments.callee.caller.arguments[0]||window.event;
}
ev.stopPropagation()
if(file_id===oldfile_id){
$("#addno-text-"+file_id+"-0").val(olditem_value);
}
$("#addno-panel-"+file_id).draggable();
}
function Input_Content(item,file_id,line_num) {
var status_value= getlocalStorage("status_value");
if(status_value==="注释"||!status_value){
setlocalStorage("item_value",item.value);
setlocalStorage("file_id",file_id);
setlocalStorage("line_num",line_num);
}else if(status_value==="问题"){
setlocalStorage("issueitem_value",item.value);
setlocalStorage("issuefile_id",file_id);
setlocalStorage("issueline_num",line_num);
}
}
function Input_modifyAnno(item,file_id,line_num,row){
setlocalStorage("modifyAnno_value",item.value);
setlocalStorage("modifyAnno_id",file_id);
setlocalStorage("modifyAnno_num",line_num);
setlocalStorage("modifyAnno_line",row);
}
function Input_writetext(item,annopk){
setlocalStorage("writetext_value",item.value);
setlocalStorage("writetext_id",annopk);
}
function addannotation(id,num){
setlocalStorage("status_value","注释");
var oldfile_id= Number(getlocalStorage("file_id"));
var oldline_num=Number(getlocalStorage("line_num"));
var olditem_value=getlocalStorage("item_value");
$("#addno-text-"+id+"-"+num).val(" ");
if(oldfile_id!=null){
if(id===oldfile_id&&num===oldline_num){
$("#addno-text-"+oldfile_id+"-"+oldline_num).val(olditem_value);
}
}
}
function addissue(id,num) {
setlocalStorage("status_value","问题");
var oldline_num= Number(getlocalStorage("issueline_num"));
var oldfile_id=Number(getlocalStorage("issuefile_id"));
var olditem_value=getlocalStorage("issueitem_value");
$("#addno-text-"+id+"-"+num).val(" ");
if(oldfile_id!=null){
if(id===oldfile_id&&num===oldline_num){
$("#addno-text-"+oldfile_id+"-"+oldline_num).val(olditem_value);
}
}
}
function rightaddannotation(id,num){
setlocalStorage("rightstatus_value","注释");
var oldfile_id= Number(getlocalStorage("rightannotationid"));
var oldline_num=Number(getlocalStorage("rightannotationnum"));
var olditem_value=getlocalStorage("rightannotationvalue");
$("#addno-text-"+id+"-"+num).val(" ");
if(oldfile_id!=null){
if(id===oldfile_id&&num===oldline_num){
$("#addno-text-"+id+"-"+num).val(olditem_value);
}
}
}
function rightaddissue(id,num) {
setlocalStorage("rightstatus_value","问题");
var oldline_num= Number(getlocalStorage("righissuenum"));
var oldfile_id=Number(getlocalStorage("righissuevid"));
var olditem_value=getlocalStorage("righissuevalue");
$("#addno-text-"+id+"-"+num).val(" ");
if(oldfile_id!=null){
if(id===oldfile_id&&num===oldline_num){
$("#addno-text-"+id+"-"+num).val(olditem_value);
}
}
}
function Input_file(item,file_id,line_num){
var status_value= getlocalStorage("rightstatus_value");
if(status_value==="注释"||!status_value){
setlocalStorage("rightannotationvalue",item.value);
setlocalStorage("rightannotationid",file_id);
setlocalStorage("rightannotationnum",line_num);
}else if(status_value==="问题"){
setlocalStorage("righissuevalue",item.value);
setlocalStorage("righissuevid",file_id);
setlocalStorage("righissuenum",line_num);
}
}
//注入html代码
function inject_addnoPanel_html(item,file_id,linenum) {
$(".source-addno-panel").remove();
var status_value= getlocalStorage("status_value");
var oldfile_id= Number(getlocalStorage("file_id"));
var oldline_num=Number(getlocalStorage("line_num"));
var olditem_value=getlocalStorage("item_value");
$("#ItemcommentPanel").remove();
$("#ItemquestionPanel").remove();
html_str = '<div class="addno-panel source-addno-panel" id="addno-panelsource-addno-panel" style="display:block">'+
'<div class="trangle-op"></div>'+
'<div class="put-content">'+
'<div class="put-content newput-selectspanactive">为该行或该代码块添加注释或者提问:</div>'+
'<p class="put-select clearfix" id="addno-select-'+linenum+'">'+
'<span class="active put-selectspanactive" onclick=\'$(this).siblings("span").removeClass("active");$(this).addClass("active");addannotation('+file_id+','+linenum+');\'>注释</span>'+
'<span class="put-selectspanactive" onclick=\'$(this).siblings("span").removeClass("active"); $(this).addClass("active");addissue('+file_id+','+linenum+');\'>问题</span>'+
'</p>'+
'<textarea id="addno-text-'+file_id+'-'+linenum+'" oninput="Input_Content(this,'+file_id+','+linenum+')" class="put-text" placeholder="输入注释或者问题"> </textarea>'+
'<a href="javascript:void(0)" onclick="add_annotation(this,'+file_id+','+linenum+')" class="btn btn-blue submit fr" id="issue-anno-submit">提交</a>'+
'</div>'+
'</div>';
$(item).after(html_str)
ev = window.event;
if(ev==undefined){
ev=arguments.callee.caller.arguments[0]||window.event;
}
ev.stopPropagation();
if(file_id===oldfile_id&&linenum===oldline_num){
$("#addno-text-"+file_id+"-"+linenum).val(olditem_value);
}
$( "#addno-panelsource-addno-panel" ).draggable();
}
function add_dir_annotation(item, file_id, line_num){
// 获取当前是注释还是问题
var selectValue = $(item).siblings(".put-select").find(".active").html().trim();
var text_context = "#addno-text-" + file_id + "-" + line_num;
var content = $(text_context).val();
if (content.trim().length == 0) {
alert("内容不能为空")
return;
}
if (selectValue == "注释") {
// 向addAnnatation中发请求
submit_dir_annotation(file_id, line_num, content);
} else {
submit_dir_question(file_id, line_num, content);
}
}
function show_dir_annotation(file_id){
ev = window.event;
if(ev==undefined){
ev=arguments.callee.caller.arguments[0]||window.event;
}
var mousePos = mouseCoords(ev);
$.ajax({
cache: false,
type: "POST",
url: '/operations/show_annotation/',
data: { 'file_id': file_id, 'line_num': 0 },
dataType: 'json',
async: true,
beforeSend: function (xhr, settings) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
},
success: function (data) {
if (data.status === "success") {
//console.log("linestatus_"+line_num);
//$("#loadCommentpanel").html(data.html_str);
//$("#commentPanel").css("top", mousePos.y);
//$("#commentPanel").css("left", mousePos.x+35);
//$("#loadCommentpanel").show();
//console.log(data.html_str);
$("#ItemcommentPanel").remove()
var html="<div id='ItemcommentPanel' style='margin-top: 70px;'>"+data.html_str+"</div>"
$("#dir_anno_"+file_id).append(html);
}else{
alert(data.msg)
}
},error:function(jqXHR, textStatus, errorThrown){
if(jqXHR.readyState===0&&jqXHR.status===0){
alert('网络故障,提交失败!请联网后重新提交');
}
}
});
}
function show_dir_issue_question(file_id){
ev = window.event;
if(ev==undefined){
ev=arguments.callee.caller.arguments[0]||window.event;
}
var mousePos = mouseCoords(ev)
//发送问题id返回问题内容
$.ajax({
cache: false,
type: "POST",
url: '/operations/show_issue_question/',
data: { 'file_id': file_id, 'line_num': 0, 'issue_ids': "[]"},
dataType: 'json',
async: true,
beforeSend: function (xhr, settings) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
},
success: function (data) {
if(data.status=='success'){
var html="<div id='ItemquestionPanel' style='margin-top:70px;'>"+data.html_str+"</div>";
$("#dir_question_"+file_id).append(html);
// $("#loadQuestionpanel").html(data.html_str);
if (data.issueAnswers) {
//字符串转换成整型数组
var dataStrArr = issueid_str.substring(1, issueid_str.length - 1).split(",")
var issue_ids = dataStrArr.map(function (data) {
return +data;
});
//
issueAnswers = JSON.parse(data.issueAnswers);
issueStandardAnswers = JSON.parse(data.issueStandardAnswers);
let count = 0;
for (let i = 0; i < issue_ids.length; i++) {
issue_id = issue_ids[i]
if (issue_id == issueAnswers[count].fields.issue) {
var radios = document.getElementsByName("issue_" + issue_id)
user_answer = issueAnswers[0].fields.content;
standard_answer = issueStandardAnswers[0].fields.choice_position;
if (user_answer == standard_answer) {
radios[user_answer - 1].parentNode.style.color = "green";
} else {
radios[parseInt(user_answer) - 1].parentNode.style.color = "red";
radios[parseInt(standard_answer) - 1].parentNode.style.color = "green";
}
document.getElementById("submit_onechoice_" + issue_id).style.display = "None";
count = count + 1
}
}
}
//$("#questionPanel").css("top", mousePos.y);
//$("#questionPanel").css("left", mousePos.x - 400);
//$("#loadQuestionpanel").show();
}else{
alert(data.msg)
}
},error:function(jqXHR, textStatus, errorThrown){
if(jqXHR.readyState===0&&jqXHR.status===0){
alert('网络故障,提交失败!请联网后重新提交');
}
}
});
}
function submit_dir_annotation(file_id, line_num, content) {
$.ajax({
cache: false,
type: "POST",
url: '/operations/add_annotation/',
data: { 'file_id': file_id, 'linenum': line_num, 'content': content },
dataType: 'json',
async: true,
beforeSend: function (xhr, settings) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
},
success: function (data) {
if (data.status == 'success') {
var value = $("#dir_anno_" + file_id).html()
if (value.trim().length == 0) {
$("#dir_anno_" + +file_id).html(1);
}else{
$("#dir_anno_" + +file_id).html(parseInt(value) + 1);
}
}
$(".addno-panel").hide();
$(".source-addno-panel").remove();
show_dir_annotation(file_id);
},error:function(jqXHR, textStatus, errorThrown){
if(jqXHR.readyState===0&&jqXHR.status===0){
alert('网络故障,提交失败!请联网后重新提交');
}
}
});
}
function submit_dir_question(file_id, line_num, content) {
$.ajax({
cache: false,
type: "POST",
url: '/operations/add_question/',
data: { 'file_id': file_id, 'linenum': line_num, 'content': content },
dataType: 'json',
async: true,
beforeSend: function (xhr, settings) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
},
success: function (data) {
if (data.status == 'success') {
var value = $("#dir_question_" + file_id).html()
if (value.trim().length == 0) {
$("#dir_question_" + +file_id).html(1);
} else {
$("#dir_question_" + +file_id).html(parseInt(value) + 1);
}
}
$(".addno-panel").hide();
$(".source-addno-panel").remove();
show_dir_issue_question(file_id);
},error:function(jqXHR, textStatus, errorThrown){
if(jqXHR.readyState===0&&jqXHR.status===0){
alert('网络故障,提交失败!请联网后重新提交');
}
}
});
}
// 这下面5个函数与上面dir的区别就是
// 上面的针对文件夹margin-top是70px的
// 下面的针对文件margin-top是140px的仅此而已
function add_file_annotation(item, file_id, line_num){
// 获取当前是注释还是问题
var selectValue = $(item).siblings(".put-select").find(".active").html().trim();
var text_context = "#addno-text-" + file_id + "-" + line_num;
var content = $(text_context).val();
//保留输入的换行符
var newcontent = content.replace(/\n|\r\n/g,"<br/>");
var reg=new RegExp("<br>","g");
var newstr=newcontent.replace(reg,"\n");
if (content.trim().length == 0) {
alert("内容不能为空")
return;
}
if (selectValue == "注释") {
// 向addAnnatation中发请求
submit_file_annotation(file_id, line_num, newstr);
deletelocalStorage("rightannotationid");
deletelocalStorage("rightannotationnum");
deletelocalStorage("rightannotationvalue");
deletelocalStorage("rightstatus_value");
} else {
submit_file_question(file_id, line_num, newstr);
deletelocalStorage("righissuevid");
deletelocalStorage("righissuenum");
deletelocalStorage("righissuevalue");
deletelocalStorage("rightstatus_value");
}
}
function show_file_annotation(file_id){
ev = window.event;
if(ev==undefined){
ev=arguments.callee.caller.arguments[0]||window.event;
}
var mousePos = mouseCoords(ev);
$.ajax({
cache: false,
type: "POST",
url: '/operations/show_annotation/',
data: { 'file_id': file_id, 'line_num': 0 },
dataType: 'json',
async: true,
beforeSend: function (xhr, settings) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
},
success: function (data) {
if (data.status === "success") {
$("#ItemcommentPanel").remove()
var reg=new RegExp("&lt;br/&gt;","g"); //创建正则RegExp对象
var newstr=data.html_str.replace(reg,"\n");
var html="<div id='ItemcommentPanel' class='newItemcommentPanel' style='margin-top:275px; margin-right: 55px;'>"+newstr+"</div>"
$("#dir_anno_"+file_id).append(html);
$( "#ItemcommentPanel" ).draggable();
}else{
alert(data.msg)
}
},error:function(jqXHR, textStatus, errorThrown){
if(jqXHR.readyState===0&&jqXHR.status===0){
alert('网络故障,提交失败!请联网后重新提交');
}
}
});
}
function show_file_issue_question(file_id){
ev = window.event;
if(ev==undefined){
ev=arguments.callee.caller.arguments[0]||window.event;
}
var mousePos = mouseCoords(ev)
//发送问题id返回问题内容
$.ajax({
cache: false,
type: "POST",
url: '/operations/show_issue_question/',
data: { 'file_id': file_id, 'line_num': 0, 'issue_ids': "[]"},
dataType: 'json',
async: true,
beforeSend: function (xhr, settings) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
},
success: function (data) {
if(data.status=='success'){
var reg=new RegExp("&lt;br/&gt;","g"); //创建正则RegExp对象
var newstr=data.html_str.replace(reg,"<br/>");
var html="<div id='ItemquestionPanel' style='margin-top:276px;margin-right: 50px;'>"+newstr+"</div>";
$("#dir_question_"+file_id).append(html);
// $("#loadQuestionpanel").html(data.html_str);
if (data.issueAnswers) {
//字符串转换成整型数组
var dataStrArr = issueid_str.substring(1, issueid_str.length - 1).split(",")
var issue_ids = dataStrArr.map(function (data) {
return +data;
});
//
issueAnswers = JSON.parse(data.issueAnswers);
issueStandardAnswers = JSON.parse(data.issueStandardAnswers);
let count = 0;
for (let i = 0; i < issue_ids.length; i++) {
issue_id = issue_ids[i]
if (issue_id == issueAnswers[count].fields.issue) {
var radios = document.getElementsByName("issue_" + issue_id)
user_answer = issueAnswers[0].fields.content;
standard_answer = issueStandardAnswers[0].fields.choice_position;
if (user_answer == standard_answer) {
radios[user_answer - 1].parentNode.style.color = "green";
} else {
radios[parseInt(user_answer) - 1].parentNode.style.color = "red";
radios[parseInt(standard_answer) - 1].parentNode.style.color = "green";
}
document.getElementById("submit_onechoice_" + issue_id).style.display = "None";
count = count + 1
}
}
}
//$("#questionPanel").css("top", mousePos.y);
//$("#questionPanel").css("left", mousePos.x - 400);
//$("#loadQuestionpanel").show();
$( "#ItemquestionPanel" ).draggable();
}else{
alert(data.msg)
}
},error:function(jqXHR, textStatus, errorThrown){
if(jqXHR.readyState===0&&jqXHR.status===0){
alert('网络故障,提交失败!请联网后重新提交');
}
}
});
}
function submit_file_annotation(file_id, line_num, content) {
$.ajax({
cache: false,
type: "POST",
url: '/operations/add_annotation/',
data: { 'file_id': file_id, 'linenum': line_num, 'content': content },
dataType: 'json',
async: true,
beforeSend: function (xhr, settings) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
},
success: function (data) {
if (data.status == 'success') {
$(".addno-panel").hide();
$(".source-addno-panel").remove();
show_file_annotation(file_id);
}else{
alert(data.msg)
}
},error:function(jqXHR, textStatus, errorThrown){
if(jqXHR.readyState===0&&jqXHR.status===0){
alert('网络故障,提交失败!请联网后重新提交');
}
}
});
}
function submit_file_question(file_id, line_num, content) {
$.ajax({
cache: false,
type: "POST",
url: '/operations/add_question/',
data: { 'file_id': file_id, 'linenum': line_num, 'content': content },
dataType: 'json',
async: true,
beforeSend: function (xhr, settings) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
},
success: function (data) {
if (data.status == 'success') {
var value = $("#dir_question_" + file_id).html()
if (value.trim().length == 0) {
$("#dir_question_" + +file_id).html(1);
} else {
$("#dir_question_" + +file_id).html(parseInt(value) + 1);
}
}
$(".addno-panel").hide();
$(".source-addno-panel").remove();
show_file_issue_question(file_id);
},error:function(jqXHR, textStatus, errorThrown){
if(jqXHR.readyState===0&&jqXHR.status===0){
alert('网络故障,提交失败!请联网后重新提交');
}
}
});
}
function make_button_disable(item){
item.removeAttr("onclick");
item.attr('disabled',true);
}
function make_button_able(item,function_name){
item.attr('disabled',false);
item.attr("onclick",function_name);
}
function thumbsAnno(item,anno_id,vote_value) {
// 获取当前的vote
function_name = "thumbsAnno(this"+","+anno_id+","+vote_value+")"
make_button_disable($(item))
vote_tag = $("#annosum_"+anno_id)
vote_before = parseInt(vote_tag.text())
$.ajax({
cache: false,
type: "POST",
url: '/operations/add_vote/',
data: { 'vote_type': "annotation", 'object_id': anno_id, 'vote_value': vote_value },
dataType: 'json',
async: true,
beforeSend: function (xhr, settings) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
},
success: function (data) {
if (data.status == 'success') {
vote_now = vote_before + parseInt( data.value)
vote_tag.text(vote_now)
deal_votetag_color(vote_tag,data.msg,vote_value)
}else{
alert(data.msg);
}
make_button_able($(item),function_name)
},error:function(jqXHR, textStatus, errorThrown){
if(jqXHR.readyState===0&&jqXHR.status===0){
alert('网络故障,提交失败!请联网后重新提交');
}
}
});
// 更改当前的vote,默认+1
}
function thumbsComment(item,comment_id,vote_value) {
function_name = "thumbsComment(this"+","+comment_id+","+vote_value+")"
make_button_disable($(item))
// 获取当前的vote
vote_tag = $("#comment_"+comment_id)
vote_before = parseInt(vote_tag.text())
$.ajax({
cache: false,
type: "POST",
url: '/operations/add_vote/',
data: { 'vote_type': "annotation_comment", 'object_id': comment_id, 'vote_value': vote_value },
dataType: 'json',
async: true,
beforeSend: function (xhr, settings) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
},
success: function (data) {
if (data.status == 'success') {
vote_now = vote_before + parseInt( data.value)
vote_tag.text(vote_now)
deal_votetag_color(vote_tag,data.msg,vote_value)
// }
}else{
alert(data.msg);
}
make_button_able($(item),function_name)
},error:function(jqXHR, textStatus, errorThrown){
if(jqXHR.readyState===0&&jqXHR.status===0){
alert('网络故障,提交失败!请联网后重新提交');
}
}
});
// 更改当前的vote,默认+1
}
//
function deal_votetag_color(vote_tag,msg,vote_value){
if(msg=='cancel success'){
// 那么将颜色都变为正常
vote_tag.parent().prev().children().removeClass("thumbs_active")
vote_tag.parent().next().children().removeClass("thumbs_active")
}else{
//把一个变为正常,另一个变为红色
if(vote_value==1){
vote_tag.parent().prev().children().addClass("thumbs_active")
vote_tag.parent().next().children().removeClass("thumbs_active")
}else{
vote_tag.parent().prev().children().removeClass("thumbs_active")
vote_tag.parent().next().children().addClass("thumbs_active")
}
}
}
function get_addtab_paras(){
var url = window.location.href;
$.ajax({
cache: false,
type: "POST",
url: '/operations/get_addtab_paras/',
data: { 'url': url },
dataType: 'json',
async: true,
beforeSend: function (xhr, settings) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
},
success: function (data) {
if (data.status === 'success') {
// 展开当前标签对应的节点
project_id=data.project_id
path = data.path
filename = data.filename
url_deal(get_path_link_and_archor(path)[0],null)
add_tab(data.project_id, data.path, data.filename)
// 加载页面后再加载jstree
load_jstree(data.project_id,data.path)
}
},error:function(jqXHR, textStatus, errorThrown){
if(jqXHR.readyState===0&&jqXHR.status===0){
alert('网络故障,提交失败!请联网后重新提交');
}
}
});
}
function remove_jstree_content(){
for(var i=0;i<localStorage.length;i++){
var key =localStorage.key(i);
if(key.startsWith("jstree-")){
deletelocalStorage(key);
}
}
}
function load_jstree(project_id,path){
// display_loading();
var url = window.location.href;
var projectName= $("#projectName").text();
// 先从本地缓存中取,如果没有再向服务器请求
// var compressed_content = getlocalStorage("jstree-"+projectName)
// if(compressed_content !=null){
// jstree_content = LZString.decompress(compressed_content)
// init_jstree(project_id,path,jstree_content)
// }
// jstree_content = getlocalStorage("jstree-"+projectName)
// if(jstree_content != null){
// init_jstree(project_id,path,jstree_content)
// }
// else{
$.ajax({
cache: false,
type: "POST",
url: '/projects/get_project_jstree/',
data: { 'project_name': projectName },
dataType: 'json',
async: true,
beforeSend: function (xhr, settings) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
},
success: function (data) {
if (data.status === 'success') {
// try{
// // compressed_content = LZString.compress(data.jstree_content)
// // setlocalStorage("jstree-"+projectName,compressed_content)
// // remove_jstree_content()
// setlocalStorage("jstree-"+projectName,data.jstree_content)
// }catch(error){
// console.log(error)
// }finally{
init_jstree(project_id,path,data.jstree_content)
// }
}
},error:function(jqXHR, textStatus, errorThrown){
if(jqXHR.readyState===0&&jqXHR.status===0){
alert('网络故障,提交失败!请联网后重新提交');
}
}
});
}
// }
function init_jstree(project_id,path,content){
$("#filelist-content").html(content)
$(".spinner").after(content);
$('#jstree').jstree();
$(".spinner").remove();
$("#jstree").jstree("open_node", $("#j1_1"));
$("#jstree").css("visibility","visible");
jstree_load_complete = true
highlight_jstree_node(project_id,path)
}
$(function(){
get_addtab_paras()
})
// window.onload=function(){
// var a=$(".jstree-node").attr("aria-selected");
// var b=$(".jstree-anchor");
// for(var i = 0; i<b.length; i++){
// console.log(b[i])
// }
// // console.log(a)
// // console.log(b)
// };