diff -r 7be550fb337b -r 7937cf60f2ce web/facet.py --- a/web/facet.py Fri Sep 23 14:56:13 2011 +0200 +++ b/web/facet.py Fri Sep 23 15:05:09 2011 +0200 @@ -1336,6 +1336,24 @@ ## html widets ################################################################ +_DEFAULT_CONSTANT_VOCAB_WIDGET_HEIGHT = 9 + +@cached +def _css_height_to_line_count(vreg): + cssprop = vreg.config.uiprops['facet_overflowedHeight'].lower().strip() + # let's talk a bit ... + # we try to deduce a number of displayed lines from a css property + # there is a linear (rough empiric coefficient == 0.73) relation between + # css _em_ value and line qty + # if we get another unit we're out of luck and resort to one constant + # hence, it is strongly advised not to specify but ems for this css prop + if cssprop.endswith('em'): + try: + return int(cssprop[:-2]) * .73 + except Exception: + vreg.warning('css property facet_overflowedHeight looks malformed (%r)', + cssprop) + return _DEFAULT_CONSTANT_VOCAB_WIDGET_HEIGHT class FacetVocabularyWidget(htmlwidgets.HTMLWidget): @@ -1343,8 +1361,10 @@ self.facet = facet self.items = [] + @cached def height(self): - return len(self.items) + 1 + maxheight = _css_height_to_line_count(self.facet._cw.vreg) + return 1 + min(len(self.items), maxheight) + int(self.facet._support_and_compat()) def append(self, item): self.items.append(item)