From 19ef46e883334876d09f4c0fa2c34c218f7dec87 Mon Sep 17 00:00:00 2001
From: Mads Freek Petersen <freek@wayf.dk>
Date: Wed, 3 Mar 2010 14:27:52 +0000
Subject: [PATCH] git-svn-id:
 https://simplesamlphp.googlecode.com/svn/trunk@2195
 44740490-163a-0410-bde0-09ae8108e29a

---
 .../config-templates/module_discopower.php    |  7 ++++++
 modules/discopower/lib/PowerIdPDisco.php      |  1 +
 modules/discopower/templates/disco-tpl.php    |  8 +------
 modules/discopower/www/js/suggest.js          | 23 +++++++++++++++++++
 4 files changed, 32 insertions(+), 7 deletions(-)
 create mode 100644 modules/discopower/www/js/suggest.js

diff --git a/modules/discopower/config-templates/module_discopower.php b/modules/discopower/config-templates/module_discopower.php
index 50ca7aaba..073e70b13 100644
--- a/modules/discopower/config-templates/module_discopower.php
+++ b/modules/discopower/config-templates/module_discopower.php
@@ -20,6 +20,13 @@ $config = array (
 	 *
 	 * 'tabs' => array('norway', 'finland'),
 	 */
+	 
+	 /**
+	  * If you want to change the scoring algorithm to a more google suggest like one
+	  * (filters by start of words) uncomment this ... 
+	  *
+	  * 'score' => 'suggest',
+	  */
 
 );
 
diff --git a/modules/discopower/lib/PowerIdPDisco.php b/modules/discopower/lib/PowerIdPDisco.php
index dfe9b3f80..7ab43ff83 100644
--- a/modules/discopower/lib/PowerIdPDisco.php
+++ b/modules/discopower/lib/PowerIdPDisco.php
@@ -188,6 +188,7 @@ class sspmod_discopower_PowerIdPDisco extends SimpleSAML_XHTML_IdPDisco {
 		$t->data['rememberenabled'] = $this->config->getBoolean('idpdisco.enableremember', FALSE);
 		$t->data['rememberchecked'] = $this->config->getBoolean('idpdisco.rememberchecked', FALSE);
 		$t->data['defaulttab'] = $this->discoconfig->getValue('defaulttab', 0);
+		$t->data['score'] = $this->discoconfig->getValue('score', 'quicksilver');
 		$t->show();
 	}
 }
diff --git a/modules/discopower/templates/disco-tpl.php b/modules/discopower/templates/disco-tpl.php
index 9791f79e0..f3ead884e 100644
--- a/modules/discopower/templates/disco-tpl.php
+++ b/modules/discopower/templates/disco-tpl.php
@@ -21,7 +21,7 @@ $this->data['jquery'] = array('version' => '1.6', 'core' => TRUE, 'ui' => TRUE,
 $this->data['head'] = '<link rel="stylesheet" media="screen" type="text/css" href="' . SimpleSAML_Module::getModuleUrl('discopower/style.css')  . '" />';
 
 $this->data['head'] .= '<script type="text/javascript" src="' . SimpleSAML_Module::getModuleUrl('discopower/js/jquery.livesearch.js')  . '"></script>';
-$this->data['head'] .= '<script type="text/javascript" src="' . SimpleSAML_Module::getModuleUrl('discopower/js/quicksilver.js')  . '"></script>';
+$this->data['head'] .= '<script type="text/javascript" src="' . SimpleSAML_Module::getModuleUrl('discopower/js/' . $this->data['score'] . '.js')  . '"></script>';
 
 $this->data['head'] .= '<script type="text/javascript">
 
@@ -108,12 +108,6 @@ function getTranslatedName($t, $metadata) {
 		} else {
 			return $metadata['name'];
 		}
-	} elseif (array_key_exists('OrganizationDisplayName', $metadata)) {
-		if (is_array($metadata['OrganizationDisplayName'])) {
-			return $t->getTranslation($metadata['OrganizationDisplayName']);
-		} else {
-			return $metadata['OrganizationDisplayName'];
-		}
 	}
 	return $metadata['entityid'];
 }
diff --git a/modules/discopower/www/js/suggest.js b/modules/discopower/www/js/suggest.js
new file mode 100644
index 000000000..770260ac3
--- /dev/null
+++ b/modules/discopower/www/js/suggest.js
@@ -0,0 +1,23 @@
+var suggest_cache = new Array;
+
+String.prototype.score = function(abbreviation,offset) {
+	if (suggest_cache['abv'] != abbreviation) {
+		suggest_cache['abv'] = abbreviation;
+		var words = abbreviation.split(/\s/);
+		suggest_cache['len'] = words.length;
+		suggest_cache.re = new Array;
+
+		//words.each();
+		for ( var i=0; i<suggest_cache['len']; ++i ){
+			suggest_cache['re'][i] = new Array();
+			// /\b<x>/ doesn't work when <x> i a non-ascii - oddly enough \s does ...
+			suggest_cache['re'][i]['initialword'] = new RegExp("^"+words[i], "i");
+			suggest_cache['re'][i]['word'] = new RegExp("\\s"+words[i], "i");
+		}
+	}
+
+	for ( var i=0; i<suggest_cache['len']; ++i ){
+		if (!(this.match(suggest_cache['re'][i]['initialword']) || this.match(suggest_cache['re'][i]['word']))) return 0;
+	}
+	return 1;
+}
\ No newline at end of file
-- 
GitLab