def render_collapsible(lst, item_role='collapsible-item', title=None, expanded=False, **kwargs): """ Renders a queryset or list of objects Args: lst: List or queryset of objects inside the collapsible list. item_role: Role assigned to each element in the list. Defaults to 'collapsible-item'. title (bool): Title in which the list of object is displayed. expanded (str): If true, start list in the "expanded" state. """ if title is None: if isinstance(lst, QuerySet): title = title.model._meta.verbose_name_plural else: raise TypeError('must provide an explicit title!') data = [render(x, item_role, **kwargs) for x in lst] random_id = str(uuid.uuid4()) display = 'block' if expanded else 'none' return div( class_='CollapsibleList' )[h2(onclick=f"$('#{random_id}').toggle()", children=[title, span(f'({len(data)})'), fa_icon('angle-down')]), html_list(data, style=f'display: {display}', id=random_id), ]
def render_collapsible(lst, item_role='collapsible-item', title=None, expanded=False, **kwargs): """ Renders a queryset or list of objects Args: lst: List or queryset of objects inside the collapsible list. item_role: Role assigned to each element in the list. Defaults to 'collapsible-item'. title (bool): Title in which the list of object is displayed. expanded (str): If true, start list in the "expanded" state. """ if title is None: if isinstance(lst, QuerySet): title = title.model._meta.verbose_name_plural else: raise TypeError('must provide an explicit title!') data = [html(x, item_role, **kwargs) for x in lst] return div(class_='CollapsibleList', is_component=True)[ h2([title, span(f'({len(data)})' ), fa_icon('angle-up')]), div(class_='CollapsibleList-data')[html_list(data), ]]
def twitter_button(request): provider = providers.registry.by_id('twitter', request) query = { 'next': '/conversations/', } url = provider.get_login_url(request, **query) return fa_icon('twitter', href=url, id='twitter-button')
def github_button(request): provider = providers.registry.by_id('github', request) query = { 'next': request.GET.get('next', '/conversations/'), } url = provider.get_login_url(request, **query) return fa_icon('github', href=url, id='github-button')
def icon_tag(self, classes=()): """ Render an icon tag for the given icon. >>> print(icon.icon_tag(classes=['header-icon'])) # doctest: +SKIP <i class="fa fa-icon header-icon"></i> """ return fa_icon(self.icon_name, class_=classes)
def google_button(request): provider = providers.registry.by_id('google', request) query = { 'next': '/conversations/', } url = provider.get_login_url(request, **query) return fa_icon('google', href=url, id='google-button', class_="fab fa-google icon-google rounded-icon")
def twitter_button(request): provider = providers.registry.by_id('twitter', request) query = { 'next': request.GET.get('next', '/conversations/'), } url = provider.get_login_url(request, **query) return fa_icon('twitter', href=url, id='twitter-button', aria_label="Twitter Icon", class_="fab fa-twitter icon-twitter rounded-icon")
def facebook_button(request): provider = providers.registry.by_id('facebook', request) query = { 'next': '/conversations/', 'method': 'js_sdk', } url = provider.get_login_url(request, **query) return fa_icon('facebook', href=url, id='facebook-button', class_='fab fa-facebook icon-facebook rounded-icon')
def facebook_button(request): provider = providers.registry.by_id('facebook', request) query = { 'next': request.GET.get('next', '/conversations/'), 'method': 'oauth2', } url = provider.get_login_url(request, **query) return fa_icon('facebook', href=url, id='facebook-button', aria_label="Facebook Icon", class_='fab fa-facebook icon-facebook rounded-icon')
def social_button(request): redirect_url = reverse("conversation:list") provider = providers.registry.by_id(provider_id, request) url = provider.get_login_url(request, next=request.GET.get("next", redirect_url), **(query or {})) return fa_icon( provider_id, href=url, id=f"{provider_id}-button", aria_label=_("Login using {}").format(provider_id.title()), class_=f"fab {fa_class} icon-{provider_id} rounded-icon", style="font-size: 2.5rem", )
def icon(name, href=None, **kwargs): """ Generic icon function. If name does not end with a file extension (e.g.: .svg, .png, etc), it creates a font-awesome icon inside a <i> element. Otherwise, it returns an <img> tag pointing to the correct icon. If href is given, it wraps content inside an <a> tag. """ if "." in name: raise NotImplementedError else: return components.fa_icon(name, href=href, **kwargs)
def collapsible(data, title=None, collapsed=False): """ Renders a collapsible content. """ angle = fa_icon("angle-up", class_="collapsible__handle") return div( class_="collapsible", is_component=True, is_collapsed=collapsed, children=[ h2([title, angle], class_="collapsible__title"), div(data, class_="collapsible__data"), ], )
def edit(request, conversation, slug, check=check_promoted): check(conversation, request) new_cluster_form = forms.ClusterFormNew(request=request) clusterization = getattr(conversation, "clusterization", None) # Handle POST requests for new clusters if request.method == "POST" and request.POST[ "action"] == "new" and new_cluster_form.is_valid(): clusterization = clusterization or conversation.get_clusterization() new_cluster_form.save(clusterization=clusterization) new_cluster_form = forms.ClusterFormNew() # Decorate clusters if clusterization is None: clusters = () else: clusters = clusterization.clusters.annotate_attr( form=lambda x: forms.ClusterForm(request=request, instance=x)) groups = [ (fa_icon("plus", alt=__("Create new group")), "#cluster-new"), # (_('New'), '#cluster-new'), *((cluster.name, f"#cluster-{cluster.id}") for cluster in clusters), ] # Handle POST requests for existing clusters if request.method == "POST" and request.POST["action"] != "new": cluster_map = {x.id: x for x in clusters} cluster = cluster_map[int(request.POST["action"])] if request.POST["submit"] == "delete": cluster.delete() return redirect(conversation.url("cluster:edit")) elif cluster.form.is_valid(): cluster.form.save() cluster.form = forms.ClusterForm(instance=cluster) return { "conversation": conversation, "groups": groups, "clusters": clusters, "new_cluster_form": new_cluster_form, }
def test_render_icon_with_link(self): assert str(fa_icon( 'user', href='#')) == '<a href="#"><i class="fa fa-user"></i></a>' assert str(fa_icon( 'github', href='#')) == '<a href="#"><i class="fab fa-github"></i></a>'
function. The function must receive a request and a second object (which can be None) pertaining to that section. Ex.: in a route that configures the user profile, that object can be the profile object for the request user. """ return lambda f: MENU_FUNCTIONS[section].append(f) or f # Storage MENU_FUNCTIONS = defaultdict(list) #: Accessibility menu page_menu.ACCESSIBILITY = thunk(lambda: menu_section( _("Accessibility"), [ a([fa_icon("text-height"), _("Toggle Font Size")], href="#", is_element="toggleFontSize"), a([fa_icon("adjust"), _("Toggle Contrast")], href="#", is_element="toggleContrast"), ], )) #: About menu page_menu._ABOUT = thunk(lambda: menu_section( _("About"), [ link(_("About"), href="about-us"), link(_("Frequently Asked Questions"), href="faq"),
"name": _("Name"), "participation": _("Participation ratio"), "pending": _("Pending"), "rejected": _("Rejected"), "skip": _("Skip"), "skipped": _("Skipped"), "text": _("Text"), "total": _("Total"), "user": _("User"), "votes": _("Votes"), } TABLE_COLUMN_NAMES = { **COLUMN_NAMES, "agree": fa_icon("check", title=_("Agree")), "convergence": fa_icon( "handshake", title= _("Agreement level\n0%: votes are evenly split\n100%: everyone has the same opinion" ), ), "disagree": fa_icon("times", title=_("Disagree")), "participation": fa_icon("users", title=_("Participation ratio")), "skip": fa_icon("arrow-right", title=_("Skip")), "skipped": fa_icon("arrow-right", title=_("Skipped")),
"missing": _("Missing"), "name": _("Name"), "participation": _("Participation ratio"), "pending": _("Pending"), "rejected": _("Rejected"), "skip": _("Skip"), "skipped": _("Skipped"), "text": _("Text"), "total": _("Total"), "user": _("User"), "votes": _("Votes"), } TABLE_COLUMN_NAMES = { **COLUMN_NAMES, "agree": fa_icon("check", title=_("Agree")), "divergence": fa_icon("not-equal", title=_("Divergence")), "disagree": fa_icon("times", title=_("Disagree")), "participation": fa_icon("users", title=_("Participation ratio")), "skip": fa_icon("arrow-right", title=_("Skip")), "skipped": fa_icon("arrow-right", title=_("Skipped")), } PC_COLUMNS = [ "missing", "skipped", "agree", "disagree", "average", "divergence", "entropy",
configures the user profile, that object can be the profile object for the request user. """ return lambda f: MENU_FUNCTIONS[section].append(f) or f # Storage MENU_FUNCTIONS = defaultdict(list) #: Accessibility menu page_menu.ACCESSIBILITY = thunk( lambda: menu_section( _("Accessibility"), [ a( [fa_icon("text-height"), _("Toggle Font Size")], href="#", is_element="toggleFontSize", ), a( [fa_icon("adjust"), _("Toggle Contrast")], href="#", is_element="toggleContrast", ), ], ) ) #: About menu page_menu.ABOUT = thunk( lambda: menu_section(
def test_render_font_awesome_icons(self): assert str(fa_icon('user')) == '<i class="fa fa-user"></i>' assert str(fa_icon('github')) == '<i class="fab fa-github"></i>' assert str(fa_icon( 'github', class_='cls')) == '<i class="fab fa-github cls"></i>'