class SortMenu(NavMenu): name = 'sort' hidden_options = [] button_cls = QueryButton # these are _ prefixed to avoid colliding with NavMenu attributes _default = 'hot' _options = ('hot', 'new', 'top', 'old', g.voting_upvote_path, g.voting_controversial_path) _type = 'lightdrop' _title = N_("sorted by") def __init__(self, default=None, title='', base_path='', separator='|', _id='', css_class=''): options = self.make_buttons() default = default or self._default base_path = base_path or request.path title = title or _(self._title) NavMenu.__init__(self, options, default=default, title=title, type=self._type, base_path=base_path, separator=separator, _id=_id, css_class=css_class) def make_buttons(self): buttons = [] for name in self._options: css_class = 'hidden' if name in self.hidden_options else '' button = self.button_cls(self.make_title(name), name, self.name, css_class=css_class) buttons.append(button) return buttons def make_title(self, attr): return menu[attr] _mapping = { "hot": operators.desc('_hot'), "new": operators.desc('_date'), "old": operators.asc('_date'), "top": operators.desc('_score'), g.voting_upvote_path: operators.desc('_upvotes'), g.voting_controversial_path: operators.desc('_controversy'), "confidence": operators.desc('_confidence'), "random": operators.shuffled('_confidence'), "qa": operators.desc('_qa'), } _reverse_mapping = {v: k for k, v in _mapping.iteritems()} @classmethod def operator(cls, sort): return cls._mapping.get(sort) @classmethod def sort(cls, operator): return cls._reverse_mapping.get(operator)
def operator(self, sort): if sort == 'hot': return operators.desc('_hot') elif sort == 'new': return operators.desc('_date') elif sort == 'old': return operators.asc('_date') elif sort == 'top': return operators.desc('_score') elif sort == 'controversial': return operators.desc('_controversy') elif sort == 'confidence': return operators.desc('_confidence') elif sort == 'random': return operators.shuffled('_confidence')
def operator(self, sort): if sort == 'hot': return operators.desc('_hot') elif sort == 'new': return operators.desc('_date') elif sort == 'old': return operators.asc('_date') elif sort == 'top': return operators.desc('_score') elif sort == 'controversial': return operators.desc('_controversy') elif sort == 'confidence': return operators.desc('_confidence') elif sort == 'random': return operators.shuffled('_confidence')