@@ -0,0 +1,180 @@
var sbZhong = 0 ;
window . onhashchange = function ( ) {
if ( window . location . hash . length > 1 ) {
var param = window . location . hash . substr ( 1 ) ;
var query = param . substring ( param . indexOf ( "?q=" ) + 3 , param . indexOf ( "&cl=" ) ) ;
var clusterNumber = param . substring ( param . indexOf ( "&cl=" ) + 4 , param . indexOf ( "&page=" ) ) ;
var pageNumber = param . substring ( param . indexOf ( "&page=" ) + 6 ) ;
sendRequest ( query , pageNumber , clusterNumber ) ;
} else {
$ ( "#resultPanel" ) . slideUp ( "slow" ) ;
$ ( "#loading" ) . fadeOut ( "slow" ) ;
$ ( "#curtain" ) . slideDown ( "slow" ) ;
}
}
window . onload = function ( ) {
if ( window . location . hash . length > 1 ) {
$ ( "#curtain" ) . slideUp ( "slow" ) ;
window . onhashchange ( ) ;
}
}
function sendRequest ( query , pageNumber , clusterNumber ) {
$ ( "#resultPanel" ) . slideUp ( "slow" ) ;
$ ( "#loading" ) . fadeIn ( "slow" ) ;
var url = "http://localhost:1993/search?q=" + query + '&cl=' + clusterNumber + '&page=' + pageNumber ;
var xhttp = new XMLHttpRequest ( ) ;
xhttp . onreadystatechange = function ( ) {
if ( xhttp . readyState == 4 && xhttp . status == 200 ) {
showSearchResult ( xhttp . responseText ) ;
}
} ;
xhttp . open ( "GET" , url , true ) ;
xhttp . send ( ) ;
//maintain query string
var hash = transFormHash ( ) ;
var input = document . getElementById ( "input" ) ;
var query = document . getElementById ( "query" ) ;
query . innerText = hash ;
input . value = hash ;
}
function transFormQuery ( ) {
var oriQuery = document . getElementById ( "input" ) . value ;
return oriQuery . replace ( / / g, "%20" ) ;
}
function transFormHash ( ) {
var oriHash = window . location . hash ;
oriHash = oriHash . substring ( oriHash . indexOf ( "#q=" ) + 3 , oriHash . indexOf ( "&cl=" ) ) ;
return oriHash . replace ( / %20/ g, " " ) ;
}
function searchButtonClicked ( ) {
var oriQuery = document . getElementById ( "input" ) . value ;
if ( oriQuery == "" )
return ;
var hash = "q=" + transFormQuery ( ) + '&cl=' + 0 + '&page=' + 1 ;
window . location . hash = hash ;
$ ( "#curtain" ) . slideUp ( "slow" ) ;
}
function clusterSelected ( clusterNumber ) {
var oriQuery = document . getElementById ( "query" ) . innerText ;
if ( oriQuery == "" )
return ;
var queryString = oriQuery . replace ( / / g, "%20" ) ;
var hash = "q=" + queryString + '&cl=' + clusterNumber + '&page=' + 1 ;
window . location . hash = hash ;
}
function pageNumberSelected ( pageNumber ) {
var oriQuery = document . getElementById ( "query" ) . innerText ;
if ( oriQuery == "" )
return ;
var queryString = oriQuery . replace ( / / g, "%20" ) ;
var hash = "q=" + queryString + '&cl=' + sbZhong + '&page=' + pageNumber ;
window . location . hash = hash ;
}
function showSearchResult ( response ) {
var jsonObj = JSON . parse ( response ) ;
//update number of result
var newNumberOfResult = jsonObj . total_result ;
var numberOfResult = document . getElementById ( "numberOfResults" ) ;
numberOfResult . innerText = newNumberOfResult + " Results" ;
//update clusters
var clusterList = document . getElementById ( "clusterList" ) ;
while ( clusterList . childElementCount != 0 )
clusterList . removeChild ( clusterList . firstElementChild ) ;
var clusters = jsonObj . cluster ;
var type = jsonObj . type ;
var highLightClassName = "active" ;
var clusterString = "" ;
sbZhong = type ;
for ( var i = 1 ; i <= clusters . length ; i ++ ) {
if ( type != i )
clusterString += '<li><a style="cursor:pointer;" onclick="clusterSelected(' + i + ');">' + clusters [ i - 1 ] . toString ( ) + '</a></li>' ;
else
clusterString += '<li class = "' + highLightClassName + '"><a style="cursor:pointer;" onclick="clusterSelected(' + i + ');">' + clusters [ i - 1 ] . toString ( ) + '</a></li>' ;
}
clusterList . innerHTML = clusterString ;
var overviewTag = document . getElementById ( "overviewTag" ) ;
overviewTag . classList . remove ( highLightClassName ) ;
if ( type == 0 )
overviewTag . classList . add ( highLightClassName ) ;
//update main contents
var newresults = jsonObj . result ;
var results = document . getElementById ( "results" ) ;
while ( results . childElementCount != 0 )
results . removeChild ( results . firstElementChild ) ;
var resultString = "" ;
for ( var i = 0 ; i < newresults . length ; i ++ ) {
resultString += '<h3 style="margin-bottom:0px;"><a href="' + newresults [ i ] . url + '">' + newresults [ i ] . title + '</a></h3>' ;
resultString += '<span style="color:forestgreen;">' + newresults [ i ] . url + '</span>' ;
resultString += '<p style="margin-bottom:0px;"><span style="color:gray;">' + formalizeDate ( newresults [ i ] . date ) + '</span>' + newresults [ i ] . cotent + '</p>' ;
resultString += '<span><a href="http://localhost:1993/snapshot?id=' + newresults [ i ] . id + '">Cache Page</a></span>' ;
}
results . innerHTML = resultString ;
//update page number
var currentPage = jsonObj . page ;
var totalPage = jsonObj . total_page ;
var pageList = document . getElementById ( "pageList" ) ;
var pageToShow = 6 ;
var pageStartIndex = currentPage - pageToShow / 2 ;
var pageEndIndex = currentPage + pageToShow / 2 ;
if ( pageStartIndex < 1 ) {
pageStartIndex = 1 ;
pageEndIndex = pageStartIndex + pageToShow - 1 ;
}
if ( pageEndIndex > totalPage ) {
pageEndIndex = totalPage ;
pageStartIndex = pageEndIndex - pageToShow + 1 ;
}
if ( pageStartIndex < 1 )
pageStartIndex = 1 ;
var highLightClassName = "active" ;
var pageString = "" ;
for ( var i = pageStartIndex ; i <= pageEndIndex ; i ++ ) {
if ( currentPage != i )
pageString += '<li><a style="cursor:pointer;" onclick="pageNumberSelected(' + i + ');">' + i + '</a></li>' ;
else
pageString += '<li class = "' + highLightClassName + '"><a style="cursor:pointer;" onclick="pageNumberSelected(' + i + ');">' + i + '</a></li>' ;
}
if ( currentPage != pageEndIndex )
pageString += '<li><a style="cursor:pointer;" onclick="pageNumberSelected(' + ( currentPage + 1 ) + ');">Next</a></li>' ;
pageList . innerHTML = pageString ;
//show
$ ( "#loading" ) . slideUp ( "slow" ) ;
$ ( "#resultPanel" ) . slideDown ( "slow" ) ;
}
function formalizeDate ( date ) {
if ( date == "" )
return "" ;
return date . substr ( 0 , 4 ) + '/' + date . substr ( 4 , 2 ) + '/' + date . substr ( 6 , 2 ) + ' - ' ;
}
function DetectEnterPressed ( e ) {
var characterCode
if ( e && e . which ) { // NN4 specific code
e = e
characterCode = e . which
}
else {
e = event
characterCode = e . keyCode // IE specific code
}
if ( characterCode == 13 ) // Enter key is 13
searchButtonClicked ( ) ;
}