[Debtags-commits] [svn] r1980 - in web/trunk: . js

Enrico Zini enrico at costa.debian.org
Mon Oct 2 19:39:33 UTC 2006


Author: enrico
Date: Mon Oct  2 19:39:32 2006
New Revision: 1980

Modified:
   web/trunk/edit.html
   web/trunk/js/debtags.js
   web/trunk/js/test.html
   web/trunk/main.css
Log:
Implemented the relevant tags panel

Modified: web/trunk/edit.html
==============================================================================
--- web/trunk/edit.html	(original)
+++ web/trunk/edit.html	Mon Oct  2 19:39:32 2006
@@ -13,11 +13,12 @@
   <script type="text/javascript">
   <!--
 var origtags = new Tagset();
-var tags = new Tagset();
+// FIXME: this is for testing
+origtags.addAll(["use::editing", "implemented-in::c++"]);
+var tags = origtags.copy();
 var voc = new Vocabulary(fdata, tdata);
-var relevant = new Tagset();
+var relevant = new Array();
 var atcurfacet = "use";
-var curtagpanel = "all";
 
 function addTag(tag)
 {
@@ -95,163 +96,53 @@
 {
 	var b = "<ul>\n";
 	var count = 0;
-	relevant.each(function(tag){
-		if (tags.has(tag)) return;
-		if (++count > 10) return;
+	for (var i in relevant) {
+		var tag = relevant[i];
+		if (tags.has(tag)) continue;
+		if (++count > 10) break;
 		td = voc.tagData(tag);
+		if (td == null) continue;
 		b += "<li><p><span class='tag' onClick='addTag(\""+tag+"\")'>"+tag+": "+td[0]+"</span></p>"+td[1]+"</li>\n";
-	});
+	};
 	b += "</ul>\n";
 	render("reltagsList", b);
 }
 
 function updateVisibility()
 {
+	var sel = document.selTagPanel.selTagPanel;
+  var curtagpanel = sel.options[sel.selectedIndex].value;
   setVisible("alltags", curtagpanel == "all");
   setVisible("suggtags", curtagpanel == "sugg");
   setVisible("reltags", curtagpanel == "rel");
   setVisible("disctags", curtagpanel == "disc");
 }
 
-function onSelTagPanelChanged(sel)
-{
-  curtagpanel = sel.options[sel.selectedIndex].value;
-  updateVisibility();
-}
-
 function onSelACF(facet)
 {
 	atcurfacet = facet;
 	updateAvailable();
 }
 
-/*
-  function CurTags()
-  {
-  }
-  CurTags.prototype.name = function()
-  {
-	return "curtags";
-  }
-  CurTags.prototype.contentSignature = function ()
-  {
-	var a = new Array();
-	for (var f in voc.facets)
-		for (var i in voc.facets[f].tags)
-		{
-			var t = voc.facets[f].tags[i];
-			if (tags.has(t.name))
-				a.push(t.name);
-		}
-  	return a.join(',');
-  }
-  CurTags.prototype.render = function()
-  {
-  	var res = "";
-	res += "  <p><b>Currently attached tags:</b>\n";
-        res += "  <ul id='curtags-list'>\n";
-	if (tags.count() > 0)
-	{
-		for (f in voc.facets)
-			for (i in voc.facets[f].tags)
-			{
-				var t = voc.facets[f].tags[i];
-				if (tags.has(t.name))
-					res += "    <li>"+t.sdesc+" <span class='button' onClick='ctl.remTag(\""+t.name+"\")'>[remove]</a></li>\n";
-			}
-	} else {
-		res += "    <li>(no tags are currently attached to this package)</li>\n";
-	}
-    	res += "  </ul>\n";
-	res += "  </p>\n";
-	res += "  <div id='curtags-buttons'>\n";
-	if (tags.hasChanges())
-	{
-		res += "    <span class='button' onClick='ctl.commitChanges()'>[submit]</span>\n";
-		res += "    <span class='button' onClick='ctl.revertChanges()'>[undo all changes]</span>\n";
-	}
-	res += "  </div>\n";
-
-//	node = document.getElementById("curpatch")
-//	var patch = mkPatch();
-//	if (patch.length > 0)
-//		node.innerHTML = "Changes: " + mkPatch();
-//	else
-//		node.innerHTML = "";
-
-	return res;
-  }
-  CurTags.prototype.updateView = function()
-  {
-	node = document.getElementById(this.name())
-	node.innerHTML = this.render();
-  }
-
-  function CurPatch()
-  {
-  }
-  CurPatch.prototype.name = function()
-  {
-	return "curpatch";
-  }
-  CurPatch.prototype.contentSignature = function ()
-  {
-  	return tags.mkPatch();
-  }
-  CurPatch.prototype.render = function()
-  {
-	var patch = tags.mkPatch();
-	if (patch.length > 0)
-		return "Changes: " + patch;
-	else
-		return "";
-  }
-  CurTags.prototype.updateView = function()
-  {
-	node = document.getElementById(this.name())
-	node.innerHTML = this.render();
-  }
-
-
-  // Controller (custom parts)
-
-  Controller.prototype.addTag = function(tagName)
-  {
-	tags.add(tagName);
-	this.get("editbox-"+extractFacet(tagName)).updateView();
-	this.get("curtags").updateView();
-  }
-  Controller.prototype.remTag = function(tagName)
-  {
-	tags.del(tagName);
-	this.get("editbox-"+extractFacet(tagName)).updateView();
-	this.get("curtags").updateView();
-  }
-  Controller.prototype.remFacet = function(facetName)
-  {
-	var f = voc.get(facetName);
-	for (i in f.tags)
-	{
-		var t = f.tags[i]
-		if (tags.has(t.name))
-			tags.del(t.name);
-	}
-	this.get("editbox-"+facetName).close();
-	this.get("curtags").updateView();
-  }
-  Controller.prototype.revertChanges = function()
-  {
-	tags.revert();
-	this.updateAll();
-  }
-  Controller.prototype.commitChanges = function()
-  {
-	document.patch.patch.value = tags.mkPatch();
-	document.patch.submit();
-  }
-
-  var ctl = new Controller();
-*/
+function onRelSearch(keyField)
+{
+	document.relsearch.keys.disabled = true;
+	document.relsearch.submit.disabled = true;
+	fireSTAGSQuery(keyField.value, function(tags){
+		//render("reltagslist", "Loading tag list... ("+tags.length+")");
+		relevant = new Array();
+		for (i in tags)
+			relevant.push(tags[i][0]);
+		updateRelevant();
+	}, function(tags){
+		relevant = new Array();
+		for (i in tags)
+			relevant.push(tags[i][0]);
+		updateRelevant();
+		document.relsearch.keys.disabled = false;
+		document.relsearch.submit.disabled = false;
+	}, true);
+}
   //-->
   </script>
 </head>
@@ -289,12 +180,14 @@
   <div style="clear: both"></div>
 
   <p>Current tag view: 
-  <select name="selTagPanel" onChange="onSelTagPanelChanged(this)">
-    <option value="all" selected="true">All tags</option>
-    <option value="sugg">Suggested tags</option>
-    <option value="rel">Relevant tags</option>
-    <option value="disc">Discriminant tags</option>
-  </select></p>
+	<form name="selTagPanel">
+		<select name="selTagPanel" onChange="updateVisibility()">
+			<option value="all" selected="true">All tags</option>
+			<option value="sugg">Suggested tags</option>
+			<option value="rel">Relevant tags</option>
+			<option value="disc">Discriminant tags</option>
+		</select></p>
+	</form>
 
   <div id="taglists">
 	  <div id="alltags">
@@ -308,8 +201,11 @@
 		  tag suggesting method the server is implementing.
 	  </div>
 	  <div id="reltags">
-		  <form name="rtags">
-		  Serch tags: <input type="text" name="keys">
+		  <form name="relsearch" onSubmit="return false;">
+			<div id="relsearch">
+				Search: <input type="text" name="keys" value='' onChange="onRelSearch(this)" />
+				<input type="button" name="submit" value="Search" onClick="onRelSearch(this.form.keys)" />
+			</div>
 		  </form>
 		  <div id="reltagsList">
 		  </div>

Modified: web/trunk/js/debtags.js
==============================================================================
--- web/trunk/js/debtags.js	(original)
+++ web/trunk/js/debtags.js	Mon Oct  2 19:39:32 2006
@@ -216,6 +216,10 @@
 		var tmp=this;
 		tset.each(function(i){tmp.add(i)});
 	},
+	subtract: function(tset) {
+		var tmp=this;
+		tset.each(function(i){tmp.del(i)});
+	},
 	contains: function(tset) {
 		for (var i in tset._items)
 			if (!this.has(i))
@@ -238,6 +242,16 @@
 		this.each(function(i){res.add(i);});
 		return res;
 	},
+	mkpatch: function(ts) {
+		var added = ts.copy();
+		added.subtract(this);
+		var removed = this.copy();
+		removed.subtract(ts);
+		var res = new Tagset();
+		added.each(function(tag){res.add("+"+tag);});
+		removed.each(function(tag){res.add("-"+tag);});
+		return res;
+	},
 	/*
 	filtervoc: function(voc) {
 		var voc1 = new Vocabulary();

Modified: web/trunk/js/test.html
==============================================================================
--- web/trunk/js/test.html	(original)
+++ web/trunk/js/test.html	Mon Oct  2 19:39:32 2006
@@ -81,10 +81,20 @@
   ensure("19 should have foo", t.has("foo"));
   ensure("20 should have bar", t.has("bar"));
   ensure("21 should have baz", t.has("baz"));
+t.subtract(t1);
+  ensure_equals("22 size should be 1", t.size(), 1);
+  ensure("23 should not have foo", !t.has("foo"));
+  ensure("24 should not have bar", !t.has("bar"));
+  ensure("25 should have baz", t.has("baz"));
+var p = t.mkpatch(t1);
+  ensure_equals("26 patch size should be 3", p.size(), 3);
+  ensure("27 should have +foo", p.has("+foo"));
+  ensure("28 should have +bar", p.has("+bar"));
+  ensure("29 should have -baz", p.has("-baz"));
 t.clear();
-  ensure("22 should not have foo", !t.has("foo"));
-  ensure("23 should be empty", t.empty());
-  ensure_equals("24 size should be 0", t.size(), 0);
+  ensure("30 should not have foo", !t.has("foo"));
+  ensure("31 should be empty", t.empty());
+  ensure_equals("32 size should be 0", t.size(), 0);
 
 beginTest("Collection");
 var t = new Collection();

Modified: web/trunk/main.css
==============================================================================
--- web/trunk/main.css	(original)
+++ web/trunk/main.css	Mon Oct  2 19:39:32 2006
@@ -113,3 +113,7 @@
 	margin: 0;
 	padding: 0;
 }
+#reltagsList li p {
+	margin: 0;
+	padding: 0;
+}



More information about the Debtags-commits mailing list