Ezio Melotti <ezio.melo...@gmail.com> added the comment:

FWIW I tried to replace the select/option with checkboxes, but the code was 
starting to get a bit too ugly so I gave up for now.

If I replace
 <td tal:content="structure 
python:context['keywords'].menu(height=5)">keywords</td>
with:
 <td><tal:block tal:repeat="key context/keywords">
     <input tal:attributes="value python:key._nodeid" name="keywords" 
type="checkbox">
     <tal:block tal:content="python:str(key._klass.get(key._nodeid, 'name'))" />
     </tal:block>
 </td>

I can get a check box for each /selected/ keyword, with its name next to it.
Using str(key._klass.get(key._nodeid, 'name')) to get to the name isn't too 
pretty already, and getting the list of all the keywords seems even worse.
In templating.py:MultilinkHTMLProperty.menu there's the code that creates the 
select/option, and IIUC to get the list of keywords names it does:
        for optionid in options:
            # get the option value, and if it's None use an empty string
            option = linkcl.get(optionid, k) or ''

where options is:
        options = [opt
            for opt in linkcl.filter(None, conditions, sort_on)
            if self._db.security.hasPermission("View", self._client.userid,
                linkcl.classname, itemid=opt)]

where linkcl is:
        linkcl = self._db.getclass(self._prop.classname)

maybe there's an easy way to do this, but if that's the case I didn't find it.  
Putting all this in an extension might avoid some clutter in the template 
though.

The current code has a <select name="keywords"> and several <option 
value="N">keyname</option>, where N is the id.  The post request contains all 
the selected options, e.g. &keywords=2&keywords=3, or if "no selection" is 
selected, the request should be &keywords=-2,-3 (where 2 and 3 are the ids of 
the selected keywords).
Having several <input name="keywords" value="N" type="checkbox"> seems to work 
without having to change the server side but it still won't solve the original 
problem.

IIUC when you remove the last keyword, no '&keywords=' is sent to the server 
and in this case, instead of removing all the keywords, it leaves them 
unchanged.  Therefore you need to select "no selection" in order to send a 
&keywords=-N that explicitly removes the last keyword.

----------
nosy: +eric.araujo, ezio.melotti

_______________________________________________________
PSF Meta Tracker <metatrac...@psf.upfronthosting.co.za>
<http://psf.upfronthosting.co.za/roundup/meta/issue384>
_______________________________________________________
_______________________________________________
Tracker-discuss mailing list
Tracker-discuss@python.org
http://mail.python.org/mailman/listinfo/tracker-discuss

Reply via email to