view WebContent/found.js @ 2:ab6c05b4d8dd default tip

bugs
author dwinter
date Wed, 26 Jan 2011 16:36:51 +0100
parents 47f3c44eff7d
children
line wrap: on
line source

//  found.js
// Author: dwinter
//copyright: Max Planck Institute for the History of Science
// license: has to be decided
// version: 0.5	

var server = 'http://127.0.0.1:8180/fulltextSearchServer/';
//var server = 'http://xserve07.mpiwg-berlin.mpg.de:58080/vlpFullTextSearch/';

//var languages = new Array();
var langNew = new Array();
var documentHits=0;
var from = {};
var to = {};
var all = {};
var viewNumber=5;
var searchString ="";
var searchMetaData ="";
var createdTags = new Array();

//function formatLanguage(responseText2,textStatus2,XMLHttpRequest2){
//};

function resetSearch(){ // setze alle zwischenergebnisse der suche zurueck
    $('#ticket').html();

    $('#results').html();

    $('#language_results').html();

    $('#base_url_ticket').html();
    $('#error').html();
    
    
}

function showResults(object,url){
    
    var langs = $(object).find('div.ticketLang a');	
	//var langs = getLanguages();
   
    var langsLen=langs.length;

    for ( var i=0;  i<langsLen; ++i ){ // now fill it with the languages
	
	if ($('#language_results_'+$(langs[i]).text()).length==0){
	    $('#language_results').append('<div class="language_results_header">'+$(langs[i]).text()+'</div>');
	    $('#language_results').append('<div id="all_'+$(langs[i]).text()+'"></div>');
	    $('#language_results').append('<div id="show_next_'+$(langs[i]).text()+'"></div>');
	    $('#language_results').append('<div id="language_results_'+$(langs[i]).text()+'"></div>');
	    langNew.push(true);
	}
    }
  
    for ( var i=0;  i<langsLen; ++i ){ // gehe durch alle Sprachen
	var lang = $(langs[i]).text();
	
	//console.log("show_results_lang2:"+lang);	
	if (lang != '') {
	    if (langNew[i]) {
		//console.log(server + url + '/' + lang);
		langNew[i] = false;
	

		
		//$('#all_'+lang).load(server + url + '/' + lang+'/resultInfo resultInfo hits', function() {
		//	all[lang]=$(this).find("hits").text();
		//	//console.log("all:"+all[lang]);
		//	//console.log("all_lang:"+lang);
		//	$('#show_next_'+lang).html(createNavString(lang));
		//});
		
		$('#all_'+lang.replace(":","\\:")).load(server + url + '/' + lang+'/resultInfo resultInfo', function() {
			var lang=$(this).find("lang").text();
		
			all[lang]=$(this).find("hits").text();
			
			//console.log("all:"+all[lang]);
			//console.log("all_this:"+this);
			//console.log("all_lang_new:"+lang);
			$('#show_next_'+lang.replace(":","\\:")).html(createNavString(lang));
		});
		
		$('#language_results_'+lang.replace(":","\\:")).load(
		    server + url + '/' + lang+'?from='+from[lang]+'&to='+to[lang],
		    function() {
			//console.log('after results');
			var lang = $(this).find('div.resultLang').text();
			//console.log('after results:'+lang);
			$(this).find('tr.documentHit').each(
			//$('tr.documentHit').each(
			    function(index) {
				
				var newId = $(this).attr('id')
				    + '_content';
				//console.log("created:");
				//console.log(newId);
				//console.log(createdTags);
				//console.log(jQuery.inArray(newId,createdTags));

				if (jQuery.inArray(newId,createdTags)<0){
				    createdTags.push(newId);
				//if ($('#'+newId).length==0) {
				    $(this).after(
					'<tr><td colspan="5" class="resultLinksToPages" id="'
					    + newId
					    + '"></tr>');
				}

				var ref = $(this).find('td.resultTextId').text();
				
				//console.log('xxx:'+url + '/' + lang + '/' + ref);
				
				var href = $(this).find('td.resultLink a.resultHits').attr('href');
				if (href!=''){
				    href="showhits.html?url="+href;
				    href+="&textId="+ref;
				    
				    var linknode = $(this).find('td.resultLink a.searchHits'); 
				    if (linknode.length>0){
					linknode.attr('href',href)
				    } else {
					$(this).find('td.resultLink a.resultHits').after('<a class="searchHits" href ="'+href+'"> show</a>');
					
				    }
				}
				var urlStr =  server + url + '/' + lang+ '/' + ref;
				newId = newId.replace(/(:|\.)/g,'\\$1'); // quote dots in ids
				$('#' + newId).load(urlStr,
				    showPages);
			    });
		    });
	    } else {
		//console.log('second');
		
		$('#language_results_'+lang.replace(":","\\:")+' tr.documentHit').each(
		    function(index) {
			//var lang = $(this).find('div.resultLang').text();
			var newId = $(this).attr('id') + '_content';
			//console.log(newId);
			var ref = $(this).find('td.resultTextId').text();
			var href = $(this).find('td.resultLink a.resultHits').attr('href');
			
			if (href!=''){
			    href="showhits.html?url="+href;
			    href+="&textId="+ref;
			    
			    var linknode = $(this).find('td.resultLink a.searchHits'); 
			    if (linknode.length>0){
				linknode.attr('href',href)
			    } else {
				$(this).find('td.resultLink a.resultHits').after('<a class="searchHits" href ="'+href+'"> show</a>');
				
			    }
			}
			
			
			var urlstring = server+url + '/' + lang + '/' + ref;
			//var ele= $(this).find('#' + newId);
			
			newId = newId.replace(/(:|\.)/g,'\\$1'); // quote dots in ids
			$('#' + newId).load(urlstring,
			    showPages);
		    });
	    } // end else langNew
	} // lang nicht leer
    } // end for durch die Sprachen
}

function showPages(responseText2, textStatus2, XMLHttpRequest2) {
    $('#error').html('');
    //console.log('showpage'+this)
    switch (XMLHttpRequest2.status) {
    case 0:
    case 202:
	//$('#openSearches').html('true')
	$(this).html('search pages');
	break;
    case 404:
	$(this).html('file not found!');
	break;
	
    case 500:
	$(this).html('Server error');
	break;
    default:
	//$(this).html('done');
	//console.log("showpage0");
	//console.log(this);


	var pages=$(this).find('div.foundPageXlink'); // suche alle seiten mit treffern
	var pagesLen=pages.length;
	
	for ( var i=0;  i<pagesLen; ++i ){
	    $(this).parent().addClass('foundPages');
	    var ref = $(pages[i]).find('a').attr('href');
	   
	    $(pages[i]).load(server+ref+'/generic', function(){
		//console.log("showpage");
		//console.log($(this).parent());
		//console.log(this);
		$(this).attr('class','foundPageHref');	    
	    }); // lade die treffer in der Seite
	    
	}
	
	//var openSearches = $('#openSearches').text();
	break;
    }
}

function loadTicket(responseText2, textStatus2, XMLHttpRequest2) {

    $('#error').html('');
    switch (XMLHttpRequest2.status) {
    case 0:
	$('#error').html('Search server is not answering!');
    case 201: // created gesamt such dokument ist erzeugt, aber suche ueber Zeilen eventuell noch nicht abgeschlossen
	//$('#results').html(responseText2 + "   DONE!");

	var url = $('#base_url_ticket').html();
	showResults(this,url);
	//console.log('xxx:'+$('#openSearches').html());
	
	
	var foundPages=$('.foundPages').length;
	documentHits=$('tr.documentHit').length;
	//console.log(documentHits);
	//console.log(foundPages);
	
	if (documentHits>foundPages){ // es gibt noch offene suchen dann weiter
	    //console.log("done, but searching");
	    $('#results').html(responseText2 + "   not yet!");
	    setTimeout(function() {
//console.log("done, but searching");
		$('#results').load(server + url, loadTicket)
	    }, 4000);
	    //showResults(this,url);
	} // ende else falls noch offene suchen ecistieren
	
	
	break;
    case 202: // still working
	var url = $('#base_url_ticket').html();
	//console.log("202 -start:"+url);
	
	setTimeout(function() {
	    $('#results').load(server + url, loadTicket)
	}, 4000);
	showResults(this,url);
	//console.log("202 -end");
	break;
    default:
	$('#results').html(XMLHttpRequest2.status + ': '
			   + XMLHttpRequest2.statusText
			   + '. unknow server error.');
	break;
    }
};

function getLanguages(){ // baue language parameter fuer die suche
    var langs=[]
    
    if ($(document).getUrlParam("supportedLanguage") != null) {
	langs = $(document).getUrlParam("supportedLanguage");
    }
    //console.log("supl:"+langs)
    
    var langsLen=langs.length;
    //console.log("supl:"+langs.length)
    var found=false;
    //var ret="";
    var ret = new Array();
    if (langs instanceof Array) {
	for ( var i=0;  i<langsLen; ++i ){
	    //ret+=$(langs[i]).text()+"_";
	    ret.push(langs[i].replace("%3A",":"));
	}
    } else  {
        ret.push(langs.replace("%3A",":"));
    }
    return ret;
    
}
 
    $(document).ready(function(){
	
	resetSearch();

	//langNew = true;
	
	
	
	var languages = getLanguages();
	//console.log('languages');
	//console.log(languages);
	
	
	if ($(document).getUrlParam("searchString") != null) {
	    searchString = $(document).getUrlParam("searchString");
	}
        $('#searchString').html(searchString);
	//console.log("searchstring:"+searchString)
	
	if ($(document).getUrlParam("searchMetaData") != null) {
	    searchMetaData = $(document).getUrlParam("searchMetaData");
	}
	//console.log("langs:"+languages);
	if (!(languages instanceof Array)){
		var tmp = langs;
		languages = new Array();
		languages.push(tmp.replace("%3A",":"));
	}
	//console.log("langs2:"+languages);
	//hole begin end fuer die sprachen setze generisch auf 20
	for( var i=0;  i<languages.length; ++i ){
		var lg = languages[i];
		//console.log("lg:"+lg);
		if ($(document).getUrlParam("from_"+lg) != null) {
		    from[lg] = $(document).getUrlParam("from_"+lg);
		}
		else {
			from[lg]="0";
		}
			
		if ($(document).getUrlParam("to_"+lg) != null) {
			    to[lg] = $(document).getUrlParam("to_"+lg);
		}
		else {
			to[lg]=viewNumber;
		}
	}
	
	

	//console.log("metadata:"+searchMetaData)    
	$('#ticket')
	    .load(
		server+'tickets a',
		{
		    searchString : searchString,
		    languages: languages.join("_"),
		    searchMetaData: searchMetaData
		},
		function() {
		    //console.log("after ticket")
		    //console.log(this);
		    
		    var ticketUrl = $(this).find(
			'a').attr('href');
		    $('#base_url_ticket').html(
			ticketUrl);
		    $('#results').load(
			server + ticketUrl,
			loadTicket);
		}

	    );
	
    });

function toggleLang(obj){
    var val = $(obj).attr("value");
    
    
    var langs=$('#selectedLanguages').find('div.lang'); // suche alle sprachen
    var langsLen=langs.length;
    
    var found=false;
    for ( var i=0;  i<langsLen; ++i ){
	if ($(langs[i]).text()==val)
	{
	    $(langs[i]).remove();
	    found=true;
	}
    }
    if (!found){
	$('#selectedLanguages').append('<div class="lang">'+val+'</div>');
    }
    
}

function createNavString(selectedLanguage){
	var retStr = new Array();
	var ret=""
	var lang = getLanguages();
	var fromNew;
	var toNew;
	retStr.push("searchString="+searchString);
	retStr.push("searchMetaData="+searchMetaData);
	for(i=0;i<lang.length;i++){
		var lg = lang[i];
		retStr.push("supportedLanguage="+lg);
		if(lg==selectedLanguage){
			toNew=Math.max(0,parseInt(from[lg]));
			fromNew=Math.max(0,parseInt(from[lg])-viewNumber);
			//toNew=Math.max(0,parseInt(to[lg])-viewNumber);
			
			retStr.push("from_"+escape(lg)+"="+fromNew);
			retStr.push("to_"+escape(lg)+"="+toNew);
		} else {
			retStr.push("from_"+escape(lg)+"="+from[lg]);
			retStr.push("to_"+escape(lg)+"="+to[lg]);
		}
	
	
	}

	if (fromNew!=toNew)
		ret+='<a href=?'+retStr.join('&')+'>prev</a>';

	
	//var allStr = $('#all_'+selectedLanguage+' hits').text();
	
	var maxPageNum = parseInt(all[selectedLanguage]);
	//console.log("sel_lang:"+selectedLanguage);
	//console.log("sel_lang:"+all[selectedLanguage]);
	
	ret+=from[selectedLanguage]+"-"+to[selectedLanguage]+"  of  "+maxPageNum;
	
	
	
	retStr = new Array();
	retStr.push("searchString="+searchString);
	retStr.push("searchMetaData="+searchMetaData);
	for(i=0;i<lang.length;i++){
		var lg = lang[i];
		retStr.push("supportedLanguage="+lg);
		if(lg==selectedLanguage){
			fromNew=Math.min(maxPageNum,parseInt(to[lg]));
			toNew=Math.min(maxPageNum,parseInt(to[lg])+viewNumber);
			retStr.push("from_"+escape(lg)+"="+fromNew);
			retStr.push("to_"+escape(lg)+"="+toNew);
		} else {
			retStr.push("from_"+escape(lg)+"="+from[lg]);
			retStr.push("to_"+escape(lg)+"="+to[lg]);
		}
	
	}
	
	if (fromNew!=toNew)
		ret+='<a href=?'+retStr.join('&')+'>next</a>';
	
	

	
	
	return ret;
}