$(function() {
// home.jsp
$('#user_author_btn').click(getUserAuthor($('#user_author_btn').attr("user")));
$('#user_author_btn').remove();
$('#user_paper_btn').click(getUserPaper($('#user_paper_btn').attr("user")));
$('#user_paper_btn').remove();
// index.jsp
leftSide();
highlight(document.body, $("#skey").val());
$('#save_fail').hide();
$('#save_success').hide();
$('#register').on("click", function(e) {
$('#registerModal').modal('show');
});
$('#register_btn').on("click", function(e) {
var user = new UserModel();
user.username = $('#inputUsername').val();
user.password = $('#inputPassword').val();
user.name = $('#inputName').val();
user.email = $('#inputEmail').val();
user.weibo = $('#inputWeibo').val();
user.github = $('#inputGithub').val();
user.homepage = $('#inputHomepage').val();
user.interests = $('#inputInterests').val();
doRegister(user);
});
$(".author_tooltip").on("mouseover", function(e) {
$(this).tooltip('show');
});
$(".save_author").on("click", function(e) {
var user = $(this).attr("user");
if (user == "") {
$('#loginModal').modal('show');
} else {
saveAuthor("user="+user+"&author="+$(this).attr("author"));
}
});
$(".save_paper").on("click", function(e) {
var user = $(this).attr("user");
if (user == "") {
$('#loginModal').modal('show');
} else {
savePaper("user="+user+"&title="+$(this).attr("title")+"&key="+$(this).attr("key"));
}
});
//about.jsp
$('#myCarousel').carousel();
//researcher.jsp
$('#cloudword_btn').on("click", function(e) {
loading("load_three");
$('#cloudword_btn').fadeOut('slow');
showWordCloud();
});
$('#related_btn').click(rightSide());
$('#related_btn').remove();
$('#related_btn').on("click", function(e) {
rightSide();
});
$('#rankpaper_btn').on("click", function(e) {
loading("load_rank");
$('#rankpaper_btn').fadeOut('slow');
doPaperRank();
});
//discover.jsp
$('.coauthor_btn').on("click", function(e) {
showVisualization("coauthor", $("#dname").val());
});
$('.cofield_btn').on("click", function(e) {
showVisualization("cofield", $("#dfield").val());
});
$('.coplace_btn').on("click", function(e) {
showVisualization("coplace", $("#dplace").val());
});
$('.copaper_btn').on("click", function(e) {
showVisualization("copaper", $("#dpaper").val());
});
});
function doPaperRank() {
$.ajax({
type : 'POST',
url : "rankpaper?name="+$("#rname").val(),
dataType : 'json',
success : function(data) {
$('#unrank_papers').remove();
$('#load_rank').remove();
var list = data.ranklist;
for (var i = 0; i < list.length; i ++) {
if (list[i].view_url.length > 5 && list[i].conference.length > 5) {
$('#ranked_papers').append("
"+list[i].title+
"
"+
""+list[i].author+
" @"+list[i].conference+
"
");
} else if (list[i].view_url.length > 5) {
$('#ranked_papers').append(""+list[i].title+
"
"+
""+list[i].author+
"
");
} else if (list[i].conference.length > 5) {
$('#ranked_papers').append(""+list[i].title+
"
"+list[i].author+
" @"+list[i].conference+
"
");
} else {
$('#ranked_papers').append(""+list[i].title+
"
"+list[i].author+
"
");
}
}
},
error : function(XmlHttpRequest, textStatus, errorThrown) {
alert("doPaperRank ajax error!");
}
});
}
function UserModel() {
this.username = "";
this.password = "";
this.name = "";
this.email = "";
this.weibo = "";
this.github = "";
this.homepage = "";
this.interests = "";
}
function doRegister(user) {
$.ajax({
type : 'POST',
url : "register?username="+user.username+"&password="+user.password+"&name="+user.name
+"&email="+user.email+"&weibo="+user.weibo+"&github="+user.github+"&homepage="+
user.homepage+"&interests="+user.interests,
dataType : 'json',
success : function(data) {
$('#registerModal').modal('hide');
$('#loginModal').modal('show');
},
error : function(XmlHttpRequest, textStatus, errorThrown) {
alert("userAuthor ajax error!");
}
});
}
function getUserAuthor(name) {
$.ajax({
type : 'GET',
url : "userauthor?user="+name,
dataType : 'json',
success : function(data) {
var list = data.list;
for (var i = 0; i < list.length; i ++) {
$('#user_author').append(''+list[i].name+' '
+''+list[i].field+' '
+'Date '+list[i].date+'
');
}
},
error : function(XmlHttpRequest, textStatus, errorThrown) {
alert("userAuthor ajax error!");
}
});
}
function getUserPaper(name) {
$.ajax({
type : 'GET',
url : "userpaper?user="+name,
dataType : 'json',
success : function(data) {
var list = data.list;
for (var i = 0; i < list.length; i ++) {
$('#user_paper').append(''+list[i].title+' '
+''+list[i].author+' '
+'Date '+list[i].date+' Keyword '+list[i].sk+'
');
}
},
error : function(XmlHttpRequest, textStatus, errorThrown) {
alert("userPaper ajax error!");
}
});
}
function saveAuthor(params) {
$.ajax({
type : 'GET',
url : "saveauthor?"+params,
dataType : 'json',
success : function(data) {
var type = data.type;
if (type > 0) {
$('#save_success').fadeIn("slow").fadeOut(3000);
} else {
$('#save_fail').fadeIn("slow").fadeOut(3000);
}
},
error : function(XmlHttpRequest, textStatus, errorThrown) {
alert("saveAuthor ajax error!");
}
});
}
function savePaper(params) {
$.ajax({
type : 'GET',
url : "savepaper?"+params,
dataType : 'json',
success : function(data) {
var type = data.type;
if (type > 0) {
$('#save_success').fadeIn("slow").fadeOut(3000);
} else {
$('#save_fail').fadeIn("slow").fadeOut(3000);
}
},
error : function(XmlHttpRequest, textStatus, errorThrown) {
alert("savePaper ajax error!");
}
});
}
function showVisualization(action, val) {
$('#graph_one').remove();
$('#graph_two').remove();
$('#coauthorOne').append('
');
$('#coauthorTwo').append('
');
loading("load_one");
coauthorOne(action, val);
loading("load_two");
coauthorTwo(action, val);
}
function history(action) {
if (action == "coauthor") {
$('#history').append(''+action+' '+$("#dname").val()+
' success go '+
'del ');
} else if (action == "cofield") {
$('#history').append(''+action+' '+$("#dfield").val()+
' success go '+
'del ');
} else if (action == "coplace") {
$('#history').append(''+action+' '+$("#dplace").val()+
' success go '+
'del ');
} else if (action == "copaper") {
$('#history').append(''+action+' '+$("#dpaper").val()+
' success go '+
'del ');
}
}
function rightSide() {
var field = $("#rfield").val();
var place = $("#rplace").val();
var name = $("#rname").val();
if (field != null || place != null || name != null) {
var url = "http://localhost:8080/AcademicSearchEngine/related?field="+field+"&place="+place+"&name="+name;
$.ajax({
type : 'GET',
url : url,
dataType : 'json',
success : function(data) {
var list = data.researcherlist;
var len = list.length;
for ( var i = 0; i < len; i++) {
$("#related_author").append(""+list[i].name+"
");
}
$(".author_tooltip").on("mouseover", function(e) {
$(this).tooltip('show');
});
},
error : function(XmlHttpRequest, textStatus, errorThrown) {
alert("Related ajax error!");
}
});
}
}
function leftSide() {
if ($("#stype").val() == "core0") {
var name = $("#skey").val();
var core = $("#stype").val();
var field = $("#sfield").val();
var place = $("#splace").val();
showFieldsAndPlaces(name, core, field, place);
} else {
$("#stat_left").hide();
}
}
function showFieldsAndPlaces(name, core, field, place) {
if (name != "") {
var url = "";
if (field == "" && place == "") {
url = "http://localhost:8080/AcademicSearchEngine/fieldplace?name="+name;
} else if (place == "") {
url = "http://localhost:8080/AcademicSearchEngine/fieldplace?name="+name+"&field="+field;
} else {
url = "http://localhost:8080/AcademicSearchEngine/fieldplace?name="+name+"&field="+field+"&workplace="+place;
}
$.ajax({
type : 'GET',
url : url,
dataType : 'json',
success : function(data) {
var fieldlist = data.fields;
var len1 = fieldlist.length;
for ( var i = 0; i < len1; i++) {
if (place == "") {
$("#fieldBar").append('');
} else {
$("#fieldBar").append('');
}
}
var placelist = data.places;
var len2 = placelist.length;
for ( var j = 0; j < len2; j++) {
if (field == "") {
$("#placeBar").append('');
} else {
$("#placeBar").append('');
}
}
},
error : function(XmlHttpRequest, textStatus, errorThrown) {
alert("showFields ajax error!");
}
});
}
}
function showWordCloud() {
$.ajax({
type : 'GET',
url : "http://localhost:8080/AcademicSearchEngine/wordcloud?name="+$("#rname").val(),
dataType : 'json',
success : function(data) {
wordcloud(data.abs);
},
error : function(XmlHttpRequest, textStatus, errorThrown) {
alert("showWordCloud ajax error!");
}
});
}
function wordcloud(str) {
var WIDTH = 850;
var HEIGHT = 300;
var ANGLE = 30;
var fill = d3.scale.category20();
d3.layout.cloud().size([WIDTH, HEIGHT]).words(str.map(function(d) {
return {text: d, size: 20 + Math.random() * 50};
})).rotate(function() {
return ~~(Math.random() * 2) * ANGLE;
}).font("Impact").fontSize(function(d) {
return d.size;
}).on("end", draw).start();
$('#load_three').remove();
function draw(words) {
d3.select("#wordcloud").append("svg").attr("width", WIDTH).attr("height", HEIGHT)
.append("g").attr("transform", "translate(450,150)").selectAll("text").data(words)
.enter().append("text").style("font-size", function(d) { return d.size + "px"; })
.style("font-family", "Impact").style("fill", function(d, i) { return fill(i); })
.attr("text-anchor", "middle").attr("transform", function(d) {
return "translate(" + [d.x, d.y] + ")rotate(" + d.rotate + ")";
}).text(function(d) { return d.text; });
}
}
function loading(name) {
var opts = {
lines : 11, // The number of lines to draw
length : 9, // The length of each line
width : 4, // The line thickness
radius : 7, // The radius of the inner circle
rotate : 0, // The rotation offset
color : '#000', // #rgb or #rrggbb
speed : 1, // Rounds per second
trail : 45, // Afterglow percentage
shadow : false, // Whether to render a shadow
hwaccel : false, // Whether to use hardware acceleration
className : 'spinner', // The CSS class to assign to the spinner
zIndex : 2e9, // The z-index (defaults to 2000000000)
top : 'auto', // Top position relative to parent in px
left : 'auto' // Left position relative to parent in px
};
var target = document.getElementById(name);
new Spinner(opts).spin(target);
}
// coauther
function coauthorOne(action, val) {
var url;
if (action == ("coauthor")) {
url = "http://localhost:8080/AcademicSearchEngine/coauthor?name="+val;
} else if (action == ("cofield")) {
url = "http://localhost:8080/AcademicSearchEngine/cofield?field="+val;
} else if (action == ("coplace")) {
url = "http://localhost:8080/AcademicSearchEngine/coplace?place="+val;
} else if (action == ("copaper")) {
url = "http://localhost:8080/AcademicSearchEngine/copaper?text="+val;
}
var width = 400, height = 400;
var color = d3.scale.category20();
var fisheye = d3.fisheye.circular().radius(120);
var force = d3.layout.force().charge(-120).linkDistance(30).size([width, height]);
var svg = d3.select("#graph_one").append("svg").attr("width", width).attr("height", height);
d3.json(url, function(error, graph) {
$('#load_one').remove();
history(action);
graph = graph.json;
force.nodes(graph.nodes) .links(graph.links).start();
var link = svg.selectAll(".link").data(graph.links)
.enter().append("line").attr("class", "link")
.style("stroke-width", function(d) { return Math.sqrt(d.value); });
var node = svg.selectAll(".node").data(graph.nodes).enter().append("circle")
.attr("class", "node").attr("r", 5)
.style("fill", function(d) { return color(d.group); })
.call(force.drag);
node.append("title").text(function(d) { return d.name; });
force.on("tick", function() {
link.attr("x1", function(d) { return d.source.x; })
.attr("y1", function(d) { return d.source.y; })
.attr("x2", function(d) { return d.target.x; })
.attr("y2", function(d) { return d.target.y; });
node.attr("cx", function(d) { return d.x; })
.attr("cy", function(d) { return d.y; });
});
svg.on("mousemove", function() {
fisheye.focus(d3.mouse(this));
node.each(function(d) { d.fisheye = fisheye(d); })
.attr("cx", function(d) { return d.fisheye.x; })
.attr("cy", function(d) { return d.fisheye.y; })
.attr("r", function(d) { return d.fisheye.z * 4.5; });
link.attr("x1", function(d) { return d.source.fisheye.x; })
.attr("y1", function(d) { return d.source.fisheye.y; })
.attr("x2", function(d) { return d.target.fisheye.x; })
.attr("y2", function(d) { return d.target.fisheye.y; });
});
});
}
function coauthorTwo(action, val) {
var url;
if (action == ("coauthor")) {
url = "http://localhost:8080/AcademicSearchEngine/coauthor?name="+val;
} else if (action == ("cofield")) {
url = "http://localhost:8080/AcademicSearchEngine/cofield?field="+val;
} else if (action == ("coplace")) {
url = "http://localhost:8080/AcademicSearchEngine/coplace?place="+val;
} else if (action == ("copaper")) {
url = "http://localhost:8080/AcademicSearchEngine/copaper?text="+val;
}
var margin = {
top : 80,
right : 0,
bottom : 0,
left : 100
},
width = 400,
height = 400;
var x = d3.scale.ordinal().rangeBands([ 0, width ]),
z = d3.scale.linear().domain([ 0, 4 ]).clamp(true),
c = d3.scale.category10().domain(d3.range(10));
var svg = d3.select("#graph_two").append("svg")
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.style("margin-left", -margin.left + "px").append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
d3.json(url, function(miserables) {
$('#load_two').remove();
miserables = miserables.json;
var matrix = [], nodes = miserables.nodes, n = nodes.length;
// Compute index per node.
nodes.forEach(function(node, i) {
node.index = i;
node.count = 0;
matrix[i] = d3.range(n).map(function(j) {
return { x : j, y : i, z : 0};
});
});
// Convert links to matrix; count character occurrences.
miserables.links.forEach( function(link) {
matrix[link.source][link.target].z += link.value;
matrix[link.target][link.source].z += link.value;
matrix[link.source][link.source].z += link.value;
matrix[link.target][link.target].z += link.value;
nodes[link.source].count += link.value;
nodes[link.target].count += link.value;
});
// Precompute the orders.
var orders = {
name : d3.range(n).sort(function(a, b) {
return d3.ascending(nodes[a].name, nodes[b].name);
}),
count : d3.range(n).sort(function(a, b) {
return nodes[b].count - nodes[a].count;
}),
group : d3.range(n).sort(function(a, b) {
return nodes[b].group - nodes[a].group;
})
};
// The default sort order.
x.domain(orders.name);
svg.append("rect").attr("class", "background").attr("width", width).attr("height", height);
var row = svg.selectAll(".row").data(matrix).enter()
.append("g").attr("class", "row").attr("transform", function(d, i) {
return "translate(0," + x(i) + ")";
}).each(row);
row.append("line").attr("x2", width);
row.append("text").attr("x", -6).attr("y", x.rangeBand() / 2)
.attr("dy", ".32em").attr("text-anchor", "end").text(function(d, i) {
return nodes[i].name;
});
var column = svg.selectAll(".column").data(matrix).enter().append("g")
.attr("class", "column").attr( "transform", function(d, i) {
return "translate(" + x(i)+ ")rotate(-90)";
});
column.append("line").attr("x1", -width);
column.append("text").attr("x", 6)
.attr("y",x.rangeBand() / 2)
.attr("dy", ".32em")
.attr("text-anchor", "start")
.text(function(d, i) {
return nodes[i].name;
});
function row(row) {
var cell = d3.select(this).selectAll(".cell").data(row.filter(function(d) {
return d.z;
})).enter().append("rect").attr("class", "cell").attr("x", function(d) {
return x(d.x);
}).attr("width", x.rangeBand()).attr("height", x.rangeBand()).style("fill-opacity", function(d) {
return z(d.z);
}).style("fill", function(d) {
return nodes[d.x].group == nodes[d.y].group ? c(nodes[d.x].group): null;
}).on("mouseover", mouseover).on("mouseout", mouseout);
}
function mouseover(p) {
d3.selectAll(".row text").classed("active", function(d, i) {return i == p.y;});
d3.selectAll(".column text").classed("active",function(d, i) {return i == p.x;});
}
function mouseout() {
d3.selectAll("text").classed("active", false);
}
d3.select("#order").on("change", function() {
clearTimeout(timeout);
order(this.value);
});
function order(value) {
x.domain(orders[value]);
var t = svg.transition().duration(2500);
t.selectAll(".row").delay(function(d, i) {
return x(i) * 4;
}).attr("transform", function(d, i) {
return "translate(0," + x(i) + ")";
}).selectAll(".cell").delay(function(d) {
return x(d.x) * 4;
}).attr("x", function(d) {
return x(d.x);
});
t.selectAll(".column").delay(function(d, i) {
return x(i) * 4;
}).attr("transform", function(d, i) {
return "translate(" + x(i) + ")rotate(-90)";
});
}
var timeout = setTimeout(function() {
order("group");
d3.select("#order").property("selectedIndex", 2).node().focus();
}, 5000);
});
}
function highlight(n, k){
var cs = n.childNodes;
var i = 0, l = cs.length;
var t, c, pos, rest;
t = document.createElement('font');
t.color = 'red';
t.innerHTML = k;
for (; i < l; i++){
c = cs[i];
if (c.nodeType == 3){
t = t.cloneNode(true);
pos = c.nodeValue.indexOf(k);
if (pos != -1) {
rest = c.splitText(pos);
rest.replaceData(0, k.length, '');
n.insertBefore(t,rest);
}
} else {
highlight(cs[i],k);
}
}
}