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

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

//  search.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;
	//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){
		//$('#openSearches').html('not decided'); // setze offene suchen auf falsch
		//var lang = $(object).find('lang').text();
		
		
		//console.log("langnew:"+langNew);
		
		//console.log("this:"+object);
		
		var langs = $(object).find('div.ticketLang a');	
		var langsLen=langs.length;
		//langNew = new Array();
		//console.log(langs);
		
		//$('#language_results').html(''); // empty the diff
		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="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_lang:"+lang);	
			if (lang != '') {
				if (langNew[i]) {
					//console.log(server + url + '/' + lang);
					langNew[i] = false;
					$('#language_results_'+lang).load(
							server + url + '/' + lang,
							function() {
								//console.log('after results');
								var lang = $(this).find('div.resultLang').text();
								//console.log('after results:'+lang);
								$('tr.documentHit').each(
										function(index) {
											
											var newId = $(this).attr('id')
													+ '_content';
											////console.log(newId);
											$(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>');
															
												}
												}
											
											$('#' + newId).load(
													server + url + '/' + lang
															+ '/' + ref,
													showPages);
										});
							});
				} else {
					//console.log('second');
					
					$('#language_results_'+lang+' 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>');
											
								}
								}
								
								//console.log('yyy:'+url + '/' + lang + '/' + ref);
								$('#' + newId).load(
										server + url + '/' + lang + '/' + ref,
										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');
			var pages=$(this).find('div.foundPage'); // 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');
				////console.log('ref:'+ref);
		  		$(pages[i]).load(server+ref+'/digilib') // 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() {
						$('#results').load(server + url, loadTicket)
					}, 4000);
					//showResults(this,url);
				} else {
				
					//console.log("done, really!");
					//console.log($('#openSearches').html());
					//var url = $('#base_url_ticket').html();
					
					//setTimeout(function() {
					//	$('#results').load(server + url, loadTicket)
					//}, 4000);
					
					
	/*				var langs = $(this).find('xml lang');	
					
					
					//console.log(this);
					//console.log(langs);
					var langsLen=langs.length;
					//langNew = new Array();
					//console.log(langsLen);
					//$('#language_results').html(''); // empty the diff
					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 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();
						
						if (lang != '') {
			
							//console.log(server + url + '/' + lang);
							//console.log(langNew);
							if (langNew[i]) {
								langNew[i] = false;
								$('#language_results_'+lang).load(
										server + url + '/' + lang,
										function() {
											////console.log('after results');
											$('tr.documentHit').each(
													function(index) {
														var newId = $(this).attr('id')
																+ '_content';
														////console.log(newId);
														$(this).after(
																'<td colspan="5" class="resultLinksToPages" id="'
																		+ newId
																		+ '"></tr>');
														var ref = $(this).find('td a')
																.attr('href');
														$('#' + newId).load(
																server + url + '/' + lang
																		+ '/' + ref,
																showPages);
													});
										});
							}
						}
					} // ende schleife durch sprachen */
				} // 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=$('#selectedLanguages').find('div.lang'); // suche alle sprachen
		var langsLen=langs.length;
		
		var found=false;
		//var ret="";
		var ret = new Array();
		for ( var i=0;  i<langsLen; ++i ){
			//ret+=$(langs[i]).text()+"_";
			ret.push($(langs[i]).text());
		}
		return ret;
		
	}

		
	$(document).ready(function(){
		$('#supportedLanguages').load(server+'serverInfo/supportedLanguages',function(){
			$('div.supportedLanguage').each(function(i){$(this).html('<input type="checkbox" onclick="toggleLang(this);" name="supportedLanguage" value="'+$(this).html()+'"/>'+$(this).html());});
		});
	});
	
	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>');
		}
		
	}