[svn r1608] Correct the keywords bugs and some other in folder view, plus mutual xbelweb
authorfabien
Sun, 26 Oct 2003 22:26:03 -0500
branchxbelweb
changeset 51 7015d65beb3d
parent 50 5275135955c0
child 52 fe0d02f344cb
[svn r1608] Correct the keywords bugs and some other in folder view, plus mutual exclusion of selected keywords in dynamic view.
BUGS
ChangeLog
dynamic.tmpl
folders.tmpl
lib/dynamic.py
lib/folders.py
lib/keywords.py
lib/templates.py
lib/webutils.py
--- a/BUGS	Fri Oct 24 17:55:22 2003 -0400
+++ b/BUGS	Sun Oct 26 22:26:03 2003 -0500
@@ -1,2 +1,1 @@
-* There is a problem on keywords count for the add subfolder drop box
-  in folder view.
+No known bugs.
--- a/ChangeLog	Fri Oct 24 17:55:22 2003 -0400
+++ b/ChangeLog	Sun Oct 26 22:26:03 2003 -0500
@@ -4,9 +4,10 @@
   * Add folders view with Add.
   * Add a default view between folders and dynamic view.
   * Add a "remove keyword?" to the merge command.
+  * Mutual exclusion of selected keywords in dynamic view.
   * Move things around so the code is a bit (really a bit) cleaner.
 
- -- Fabien Ninoles <fabien@tzone.org>  Fri, 24 Oct 2003 17:54:14 -0400
+ -- Fabien Ninoles <fabien@tzone.org>  Sun, 26 Oct 2003 22:23:14 -0500
 
 xbelweb (0.1-4) unstable; urgency=low
 
--- a/dynamic.tmpl	Fri Oct 24 17:55:22 2003 -0400
+++ b/dynamic.tmpl	Sun Oct 26 22:26:03 2003 -0500
@@ -13,17 +13,21 @@
 	<select multiple name="sel" onchange="submit()"
 	        size="<TMPL_VAR kw_size>">
 	<TMPL_LOOP Keywords>
+	<TMPL_UNLESS excluded>
 	  <option value="<TMPL_VAR id>"
 	    <TMPL_IF selected>selected</TMPL_IF>
 	    ><TMPL_VAR keyword> (<TMPL_VAR count>)</option>
+	</TMPL_UNLESS>
 	</TMPL_LOOP></select>
 	<label>Exclude:
 	<select multiple name="exc" onchange="submit()"
 	        size="<TMPL_VAR kw_size>">
 	<TMPL_LOOP Keywords>
+	<TMPL_UNLESS selected>
 	  <option value="<TMPL_VAR id>"
 	    <TMPL_IF excluded>selected</TMPL_IF>
 	    ><TMPL_VAR keyword> (<TMPL_VAR count>)</option>
+	</TMPL_UNLESS>
 	</TMPL_LOOP></select>
 	</p>
 	<button>Lookup</button>
--- a/folders.tmpl	Fri Oct 24 17:55:22 2003 -0400
+++ b/folders.tmpl	Sun Oct 26 22:26:03 2003 -0500
@@ -3,14 +3,15 @@
   <TMPL_INCLUDE NAME="headers.tmpl">
   <body>
     <h1><TMPL_VAR remote_user>'s XBelWeb</h1>
-    <TMPL_UNLESS folder>
-      <p><TMPL_LOOP Parents><a href="?view=folder;folder=<TMPL_VAR id>"><TMPL_VAR name></a>
-        : </TMPL_LOOP></p>
-    </TMPL_UNLESS>
     <h2><TMPL_IF folder><TMPL_VAR name><TMPL_ELSE>Main Folder</TMPL_IF>
     (<TMPL_VAR total>)</h2>
+    <TMPL_IF folder>
+      <p>Parents: 
+        <TMPL_LOOP Parents><a href="?view=folder;folder=<TMPL_VAR id>"><TMPL_VAR name></a>
+        : </TMPL_LOOP></p>
+    </TMPL_IF>
     <DIV class="subfolders">
-    <form action="index.py" method="post" name="edit_folders">
+    <form action="index.py?view=folder;folder=<TMPL_VAR folder>" method="post" name="edit_folders">
     <input type="hidden" name="folder" value="<TMPL_VAR folder>"/>
     <input type="hidden" name="view" value="folder"/>
     <input type="hidden" name="action" value="delete"/>
@@ -23,10 +24,10 @@
     </ul>
     </form>
     </div>
-    <form action="index.py" method="post" name="add_folder">
+    <form action="index.py?view=folder;folder=<TMPL_VAR folder>" method="post" name="add_folder">
+      <label>Add subfolder with keyword:
       <input type="hidden" name="folder" value="<TMPL_VAR folder>"/>
       <input type="hidden" name="view" value="folder"/>
-      <label>Add subfolder with keyword:
 	<select name="sel" size="1">
 	<TMPL_LOOP Keywords>
 	  <option value="<TMPL_VAR id>"
--- a/lib/dynamic.py	Fri Oct 24 17:55:22 2003 -0400
+++ b/lib/dynamic.py	Sun Oct 26 22:26:03 2003 -0500
@@ -1,6 +1,6 @@
 #!/usr/bin/python
 
-from keywords import get_keywords, sort_keywords
+from keywords import get_keywords, sort_keywords, set_selection
 from templates import Template
 
 def process_index(bk, kw, pref):
@@ -9,7 +9,6 @@
     tmpl.set("Bookmarks", bk)
     kw = sort_keywords(kw, pref)
     tmpl.set("Keywords", kw)
-    tmpl.set("curl", get_curl())
     tmpl.set("total", len(bk))
     print tmpl.process()
 
--- a/lib/folders.py	Fri Oct 24 17:55:22 2003 -0400
+++ b/lib/folders.py	Sun Oct 26 22:26:03 2003 -0500
@@ -40,20 +40,23 @@
 		do_folder_action(db, form, folder)
     parents = db.get_folder_parents_and_self(folder)
     children = db.get_subfolders(folder)
-    parents.reverse()
     selection = map(lambda e: e['keyword'], parents)
     exclusion = map(lambda e: e['keyword'], children)
-    bookmarks = db.select_bookmarks(selection, exclusion)
+    parents.reverse()
+    folder = parents.pop()
+    bookmarks = db.select_bookmarks(selection)
     selected_keywords = set_selection(db,
 		map(lambda e: e[0], bookmarks),
-		selection, exclusion)
+		selection)
     keywords = []
+    folders_keywords = selection +exclusion
     for keyword in selected_keywords:
-    	if not keyword['id'] in exclusion:
+    	if keyword['id'] not in folders_keywords:
 		keywords.append(keyword)
     for child in children:
     	child['count'] = len(db.select_bookmarks(selection + [child['keyword']]))
+    bookmarks = db.select_bookmarks(selection, exclusion)
     if len(bookmarks) <> 0:
    	bookmarks = db.get_bookmarks(map(lambda bk: bk[0], bookmarks))
     	bookmarks = map(lambda bk: bk.dict(), bookmarks)
-    output(prefs, parents.pop(), parents, children, bookmarks, keywords)
+    output(prefs, folder, parents, children, bookmarks, keywords)
--- a/lib/keywords.py	Fri Oct 24 17:55:22 2003 -0400
+++ b/lib/keywords.py	Sun Oct 26 22:26:03 2003 -0500
@@ -1,4 +1,5 @@
 def get_keywords(form, name):
+	"""extract keywords associate with field name 'name'."""
 	kws = form.getvalue(name)
 	if not isinstance(kws, type([])):
 		if kws:
@@ -8,6 +9,7 @@
 	return map(int, kws)
 
 def set_selection(db, bk, sel, exc = []):
+	"""select keywords selected in the bookmarks list."""
 	if len(bk) > 0:
 		ids, names = map(list,apply(zip,db.get_keywords(bk)))
 		for key in exc:
--- a/lib/templates.py	Fri Oct 24 17:55:22 2003 -0400
+++ b/lib/templates.py	Sun Oct 26 22:26:03 2003 -0500
@@ -1,4 +1,9 @@
 from htmltmpl import TemplateManager, TemplateProcessor
+from urlparse import urljoin
+from os import environ
+
+def get_curl():
+	return urljoin( 'http://' + environ["HTTP_HOST"] + environ["REQUEST_URI"], 'add.py')
 
 class Template:
 	def __init__(self, template, prefs):
@@ -8,6 +13,7 @@
     		self.tproc.set("kw_size", prefs['keywords_box'])
     		self.tproc.set("kw_sort", prefs['keywords_sort'])
     		self.tproc.set("kw_reverse", prefs['keywords_reverse'])
+    		self.tproc.set("curl", get_curl())
 	def set(self, name, variable):
 		self.tproc.set(name, variable)
 	def process(self):
--- a/lib/webutils.py	Fri Oct 24 17:55:22 2003 -0400
+++ b/lib/webutils.py	Sun Oct 26 22:26:03 2003 -0500
@@ -1,13 +1,8 @@
 #!/usr/bin/python
 
-from os import environ
-from urlparse import urljoin
 from dynamic import do_dynamic
 from folders import do_folders
 
-def get_curl():
-	return urljoin( 'http://' + environ["HTTP_HOST"] + environ["REQUEST_URI"], 'add.py')
-
 def load_index(db, prefs, form = None):
     if form:
     	if form.has_key('view'):