Binary file web/data/black-uncheck.png has changed
--- a/web/data/cubicweb.formfilter.js Fri May 29 20:22:39 2009 +0200
+++ b/web/data/cubicweb.formfilter.js Fri May 29 21:34:09 2009 +0200
@@ -103,7 +103,7 @@
var SELECTED_IMG = baseuri()+"data/black-check.png";
var UNSELECTED_IMG = baseuri()+"data/no-check-no-border.png";
-var UNSELECTED_BORDER_IMG = baseuri()+"data/black-unchecked.png";
+var UNSELECTED_BORDER_IMG = baseuri()+"data/black-uncheck.png";
function initFacetBoxEvents(root) {
// facetargs : (divid, vid, paginate, extraargs)
@@ -133,7 +133,7 @@
this.setAttribute('src', UNSELECTED_BORDER_IMG);
}
else{
- this.setAttribute('src', UNSELECTED_IMG);
+ this.setAttribute('src', UNSELECTED_IMG);
}
});
var index = parseInt($this.attr('cubicweb:idx'));
@@ -143,7 +143,11 @@
}).length;
index += shift;
var parent = this.parentNode;
- jQuery(parent).find('.facetCheckBox:nth('+index+')').after(this);
+ var $insertAfter = jQuery(parent).find('.facetCheckBox:nth('+index+')');
+ if ( ! ($insertAfter.length == 1 && index == 0) ) {
+ // only rearrange element if necessary
+ $insertAfter.after(this);
+ }
} else {
var lastSelected = facet.find('.facetValueSelected:last');
if (lastSelected.length) {
--- a/web/facet.py Fri May 29 20:22:39 2009 +0200
+++ b/web/facet.py Fri May 29 21:34:09 2009 +0200
@@ -545,6 +545,34 @@
def formatvalue(self, value):
return '"%s"' % date.fromtimestamp(float(value) / 1000).strftime('%Y/%m/%d')
+class HasRelationFacet(AbstractFacet):
+ rtype = None # override me in subclass
+ role = 'subject' # role of filtered entity in the relation
+
+ @property
+ def title(self):
+ return display_name(self.req, self.rtype, self.role)
+
+ def support_and(self):
+ return False
+
+ def get_widget(self):
+ return CheckBoxFacetWidget(self.req, self,
+ '%s:%s' % (self.rtype, self),
+ self.req.form.get(self.id))
+
+ def add_rql_restrictions(self):
+ """add restriction for this facet into the rql syntax tree"""
+ self.rqlst.set_distinct(True) # XXX
+ value = self.req.form.get(self.id)
+ if not value: # no value sent for this facet
+ return
+ var = self.rqlst.make_variable()
+ if self.role == 'subject':
+ self.rqlst.add_relation(self.filtered_variable, self.rtype, var)
+ else:
+ self.rqlst.add_relation(var, self.rtype, self.filtered_variable)
+
## html widets ################################################################
class FacetVocabularyWidget(HTMLWidget):
@@ -705,6 +733,36 @@
self.w(u'<a href="javascript: {}">%s</a>' % html_escape(self.label))
self.w(u'</div>')
+class CheckBoxFacetWidget(HTMLWidget):
+ selected_img = "black-check.png"
+ unselected_img = "black-uncheck.png"
+
+ def __init__(self, req, facet, value, selected):
+ self.req = req
+ self.facet = facet
+ self.value = value
+ self.selected = selected
+
+ def _render(self):
+ title = html_escape(self.facet.title)
+ facetid = html_escape(self.facet.id)
+ self.w(u'<div id="%s" class="facet">\n' % facetid)
+ if self.selected:
+ cssclass = ' facetValueSelected'
+ imgsrc = self.req.datadir_url + self.selected_img
+ imgalt = self.req._('selected')
+ else:
+ cssclass = ''
+ imgsrc = self.req.datadir_url + self.unselected_img
+ imgalt = self.req._('not selected')
+ self.w(u'<div class="facetValue facetCheckBox%s" cubicweb:value="%s">\n'
+ % (cssclass, html_escape(unicode(self.value))))
+ self.w(u'<div class="facetCheckBoxWidget">')
+ self.w(u'<img src="%s" alt="%s" cubicweb:unselimg="true" /> ' % (imgsrc, imgalt))
+ self.w(u'<label class="facetTitle" cubicweb:facetName="%s"><a href="javascript: {}">%s</a></label>' % (facetid,title))
+ self.w(u'</div>\n')
+ self.w(u'</div>\n')
+ self.w(u'</div>\n')
class FacetSeparator(HTMLWidget):
def __init__(self, label=None):