Example #1
0
def test_assets_render_from_style():
    register_style(
        'my_style',
        Style(
            test,
            assets__an_asset=Asset.css(attrs__href='http://foo.bar/baz'),
        ))

    class MyPage(Page):
        class Meta:
            iommi_style = 'my_style'

    expected = prettify('''
        <!DOCTYPE html>
        <html>
            <head>
                <title/>
                <link href='http://foo.bar/baz' rel="stylesheet"/>
            </head>
            <body/>
        </html>
    ''')
    actual = prettify(
        MyPage().bind(request=req('get')).render_to_response().content)
    assert actual == expected

    unregister_style('my_style')
Example #2
0
def test_deprecated_assets_style(settings, capsys):
    settings.DEBUG = True
    with register_style(
        'my_style',
        Style(
            test,
            assets__an_asset=Asset.css(attrs__href='http://foo.bar/baz'),
        ),
    ):
        captured = capsys.readouterr()
        assert 'Warning: The preferred way to add top level assets config' in captured.out

        settings.DEBUG = False

        expected = prettify(
            '''
            <!DOCTYPE html>
            <html>
                <head>
                    <title/>
                    <link href='http://foo.bar/baz' rel="stylesheet"/>
                </head>
                <body/>
            </html>
        '''
        )
        actual = prettify(Page(iommi_style='my_style').bind(request=req('get')).render_to_response().content)
        assert actual == expected
Example #3
0
def test_assets_render_any_fragment_from_style():
    register_style(
        'my_style',
        Style(
            test,
            assets__an_asset=Fragment('This is a fragment!'),
        ))

    class MyPage(Page):
        class Meta:
            iommi_style = 'my_style'

    expected = prettify('''
        <!DOCTYPE html>
        <html>
            <head>
                <title/>
                This is a fragment!
            </head>
            <body/>
        </html>
    ''')
    actual = prettify(
        MyPage().bind(request=req('get')).render_to_response().content)
    assert actual == expected

    unregister_style('my_style')
Example #4
0
def test_error_message_for_invalid_style():
    class Foo:
        pass

    style = Style(
        ClassThatDoesNotExist__foo='',
        ClassThatDoesNotExist2__foo='',
        Foo__shortcuts__does_not_exist__foo='',
        Foo__shortcuts__does_not_exist2__foo='',
    )

    with pytest.raises(InvalidStyleConfigurationException) as e:
        validate_styles(additional_classes=[Foo],
                        default_classes=[],
                        styles=dict(foo=style))

    assert str(e.value) == '''
Invalid class names:
    Style: foo - class: ClassThatDoesNotExist
    Style: foo - class: ClassThatDoesNotExist2

Invalid shortcut names:
    Style: foo - class: Foo - shortcut: does_not_exist
    Style: foo - class: Foo - shortcut: does_not_exist2
'''.strip()
Example #5
0
 def ready(self):
     register_style(
         'forum',
         Style(
             base,
             base_template='iommi/base_forum.html',
             Form__attrs__class__form=True,
             Field__attrs__class__field=True,
         )
     )
Example #6
0
def test_style():
    class A(RefinableObject):
        foo = Refinable()
        bar = Refinable()

        @classmethod
        @class_shortcut
        def shortcut1(cls, call_target, **kwargs):
            return call_target(**kwargs)

        def items(self):
            return dict(foo=self.foo, bar=self.bar)

    class B(A):
        @classmethod
        @class_shortcut(call_target__attribute='shortcut1')
        def shortcut2(cls, call_target, **kwargs):
            return call_target(**kwargs)

    base = Style(A=dict(foo=1, ), )

    overrides = Style(
        base,
        A=dict(
            shortcuts=dict(shortcut1__foo=4, ),
            foo=5,
            bar=6,
        ),
        B=dict(bar=7, ),
    )

    # First the unstyled case
    assert items(B()) == dict(foo=None, bar=None)
    assert items(B.shortcut1()) == dict(foo=None, bar=None)
    assert items(B.shortcut2()) == dict(foo=None, bar=None)

    # Now let's add the style
    b = B()
    apply_style_recursively(style_data=overrides.component(b), obj=b)
    assert items(b) == dict(foo=5, bar=7)

    b = B.shortcut1()
    assert overrides.component(b) == dict(foo=4, bar=7)
    assert b.__tri_declarative_shortcut_stack == ['shortcut1']
    apply_style_recursively(style_data=overrides.component(b), obj=b)
    assert items(b) == dict(foo=4, bar=7)

    b = B.shortcut2()
    assert b.__tri_declarative_shortcut_stack == ['shortcut2', 'shortcut1']
    assert overrides.component(b) == dict(foo=4, bar=7)
    apply_style_recursively(style_data=overrides.component(b), obj=b)
    assert items(b) == dict(foo=4, bar=7)
Example #7
0
def test_context_processor_is_called_on_render_root():
    style_name = 'test_context_processor_is_called_on_render_root'
    style = Style(
        base,
        base_template='test_context_processor_is_called_on_render_root.html',
    )
    register_style(style_name, style)

    part = Page(
        context__root_part_context_variable='root_part_context_variable',
        iommi_style=style_name,
    )

    t = render_root(
        part=part.bind(request=req('get')),
        context=dict(my_context_variable='my_context_variable'),
    )
    assert t == 'context_processor_is_called\nroot_part_context_variable\nmy_context_variable\n'
Example #8
0
def test_style_bulk_form_broken_on_no_form():
    from iommi import Table
    from tests.models import Foo

    with register_style(
        'my_style',
        Style(
            base,
            Table__bulk__attrs__class__foo=True,
        ),
    ):
        class MyTable(Table):
            class Meta:
                iommi_style = 'my_style'
                model = Foo

        table = MyTable()
        table = table.bind(request=None)

        assert table.bulk is None
Example #9
0
def test_style_bulk_form():
    from iommi import Column, Table
    from tests.models import Foo

    with register_style(
            'my_style',
            Style(
                base,
                Table__bulk__attrs__class__foo=True,
            ),
    ):
        class MyTable(Table):
            class Meta:
                iommi_style = 'my_style'
                model = Foo

            bar = Column(bulk__include=True)

        table = MyTable()
        table = table.bind(request=None)

        assert 'foo' in render_attrs(table.bulk.attrs)
Example #10
0
    def ready(self):
        from django.contrib.auth.models import (
            User,
            Permission,
        )
        register_search_fields(model=User, search_fields=['username'])
        register_search_fields(model=Permission, search_fields=['codename'])

        from iommi import register_style
        from iommi.style_test_base import test
        from iommi.style_base import base
        from iommi.style_bootstrap import (
            bootstrap,
            bootstrap_horizontal,
        )
        from iommi.style_semantic_ui import semantic_ui
        from iommi.style_foundation import foundation
        register_style('base', base)
        register_style('test', test)
        register_style('bootstrap', bootstrap)
        register_style('bootstrap_horizontal', bootstrap_horizontal)
        register_style('semantic_ui', semantic_ui)
        register_style('water', Style(base))
        register_style('foundation', foundation)
Example #11
0
foundation_base = Style(
    base,
    font_awesome_4,
    sub_styles__horizontal=dict(
        Form__attrs__class={},
        Field=dict(
            shortcuts=dict(
                boolean__attrs__class={
                    'medium-2': True,
                    'medium-4': False
                },
                boolean_tristate__attrs__class={
                    'medium-2': True,
                    'medium-4': False
                },
            ),
            attrs__class={
                'medium-4': True,
                'cell': True,
            },
        ),
    ),
    root__assets=dict(
        css=Asset.css(attrs=dict(
            href=
            'https://cdn.jsdelivr.net/npm/[email protected]/dist/css/foundation.min.css',
            integrity='sha256-ogmFxjqiTMnZhxCqVmcqTvjfe1Y/ec4WaRj/aQPvn+I=',
            crossorigin='anonymous',
        ), ),
        js=Asset.
        js(attrs__src=
           'https://cdn.jsdelivr.net/npm/[email protected]/dist/js/foundation.min.js'
           ),
    ),
    Container=dict(
        tag='div',
        attrs__class={
            'grid-container': True,
        },
    ),
    Action=dict(shortcuts=dict(
        button__attrs__class__button=True,
        button__attrs__class__secondary=True,
        primary__attrs__class__primary=True,
        primary__attrs__class__secondary=False,
        delete__attrs__class__alert=True,
        delete__attrs__class__secondary=False,
    ), ),
    Menu=dict(
        tag='nav',
        items_container__attrs__class={'menu': True},
        items_container__tag='ul',
        attrs__class={'top-bar': True},
    ),
    MenuItem=dict(tag='li', ),
    Column=dict(shortcuts=dict(delete__cell__link__attrs__class=dict(
        alert=True,
        button=True,
    )), ),
    Query=dict(
        form__iommi_style='horizontal',
        form_container=dict(
            tag='span',
            attrs__class={
                'grid-x': True,
                'grid-padding-x': True,
            },
        ),
    ),
    Paginator=dict(
        template='iommi/table/bootstrap/paginator.html',
        container__attrs__class__pagination=True,
        active_item__attrs__class={'current': True},
    ),
    Errors=dict(attrs__class=dict(callout=True, alert=True), ),
)
Example #12
0
base = Style(
    internal=True,
    base_template='iommi/base.html',
    content_block='content',
    root=dict(
        endpoints__debug_tree=dict(
            include=lambda endpoint, **_: iommi_debug_on(),
            func=endpoint__debug_tree,
        ),
        assets=dict(
            jquery=Asset.js(
                attrs=dict(
                    src='https://code.jquery.com/jquery-3.4.1.js',
                    integrity=
                    'sha256-WpOohJOqMqqyKL9FccASB9O0KwACQJpFTUBLTYOVvVU=',
                    crossorigin='anonymous',
                ),
                after=-1,
            ),
            axios=Asset.js(
                attrs=dict(
                    src=
                    'https://cdn.jsdelivr.net/npm/[email protected]/dist/axios.min.js',
                    integrity=
                    'sha256-OPn1YfcEh9W2pwF1iSS+yDk099tYj+plSrCS6Esa9NA=',
                    crossorigin='anonymous',
                ),
                after=-1,
            ),
        ),
    ),
    Form=dict(
        template='iommi/form/form.html',
        actions_template='iommi/form/actions.html',
    ),
    Field=dict(
        shortcuts=dict(
            boolean=dict(
                input__attrs__type='checkbox',
                template='iommi/form/row_checkbox.html',
            ),
            choice=dict(
                input__template='iommi/form/choice.html',
                input__attrs__value=None,
                input__attrs__type=None,
            ),
            multi_choice=dict(
                input__template='iommi/form/choice_select2.html',
                assets=select2_assets,
            ),
            choice_queryset=dict(
                input__template='iommi/form/choice_select2.html',
                assets=select2_assets,
            ),
            date__input__attrs__type='date',
            radio=dict(input__template='iommi/form/radio.html', ),
            heading=dict(template='iommi/form/heading.html', ),
        ),
        tag='div',
        input__attrs__type='text',
        input__tag='input',
        label__tag='label',
        non_editable_input__tag='span',
        help__attrs__class__helptext=True,
        help__tag='div',
    ),
    Column=dict(
        shortcuts=dict(select=dict(header__attrs__title='Select all', ), )),
    Paginator=dict(
        show_always=False,
        template='iommi/table/paginator.html',
    ),
    Query=dict(
        template='iommi/query/form.html',
        advanced__template='iommi/query/advanced.html',
        assets__ajax_enhance__template='iommi/query/ajax_enhance.html',
        form__attrs__class__iommi_filter=True,
    ),
    Actions=dict(
        tag='div',
        attrs__class__links=True,
    ),
    MenuItem=dict(
        a__tag='a',
        active_class='active',
    ),
    DebugMenu=dict(
        tag='nav',
        items_container__tag='ul',
        items_container__attrs__style={
            'list-style': 'none',
        },
        attrs__style={
            'position': 'fixed',
            'bottom': '-1px',
            'right': '-1px',
            'background': 'white',
            'border': '1px solid black',
            'z-index': '100',
        },
        attrs__class={
            'flex-column': False,
        },
    ),
    LiveEditPage__iommi_style='bootstrap',
)
Example #13
0
from iommi.style import Style
from iommi.style_base import base
from iommi.style_font_awesome_4 import font_awesome_4

test = Style(
    base,
    font_awesome_4,
    Field=dict(shortcuts=dict(), ),
    Table=dict(attrs__class__table=True, ),
    Column=dict(shortcuts__number__cell__attrs__class__rj=True, ),
    Paginator=dict(template='iommi/table/bootstrap/paginator.html', ),
    Menu=dict(tag='nav', items_container__tag='ul'),
    MenuItem=dict(
        tag='li',
        a__attrs__class={'link': True},
    ),
)
Example #14
0
bootstrap_base = Style(
    base,
    assets=dict(
        css=Asset.css(
            attrs=dict(
                href='https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css',
                integrity='sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh',
                crossorigin='anonymous',
            ),
        ),
        popper_js=Asset.js(
            attrs=dict(
                src='https://cdn.jsdelivr.net/npm/[email protected]/dist/umd/popper.min.js',
                integrity='sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo',
                crossorigin='anonymous',
            )
        ),
        js=Asset.js(
            attrs=dict(
                src='https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js',
                integrity='sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6',
                crossorigin='anonymous',
            )
        ),
    ),
    Container=dict(
        tag='div',
        attrs__class={
            'container': True,
            'mt-5': True,
            'pt-5': True,
        },
    ),
    Field=dict(
        shortcuts=dict(
            boolean=dict(
                input__attrs__class={'form-check-input': True, 'form-control': False},
                attrs__class={'form-check': True},
                label__attrs__class={'form-check-label': True},
                template='iommi/form/bootstrap/row_checkbox.html',
            ),
            radio=dict(
                attrs__class={
                    'form-group': False,
                    'form-check': True,
                },
                input__attrs__class={
                    'form-check-input': True,
                    'form-control': False,
                },
            ),
        ),
        attrs__class={
            'form-group': True,
        },
        input__attrs__class={
            'form-control': True,
            'is-invalid': lambda field, **_: bool(field.errors),
        },
        errors__attrs__class={'invalid-feedback': True},
        help__attrs__class={
            'form-text': True,
            'text-muted': True,
        },
    ),
    Action=dict(
        shortcuts=dict(
            # In bootstrap one must choose a button style (secondary, success, ...)
            # otherwise the styling is roughly identical to text.
            button__attrs__class={
                'btn': True,
                'btn-secondary': True,
            },
            primary__attrs__class={
                'btn-primary': True,
                'btn-secondary': False,
            },
            delete__attrs__class={
                'btn-danger': True,
                'btn-secondary': False,
            },
        ),
    ),
    Table=dict(
        attrs__class__table=True,
        attrs__class={'table-sm': True},
    ),
    Column=dict(
        header__attrs__class={'text-nowrap': True},
        shortcuts=dict(
            select=dict(
                header__attrs__title='Select all',
                header__attrs__class={'text-center': True},
                cell__attrs__class={'text-center': True},

            ),
            number=dict(
                cell__attrs__class={'text-right': True},
                header__attrs__class={'text-right': True},
            ),
            boolean__cell__attrs__class={'text-center': True},
            delete=dict(
                cell__link__attrs__class={'text-danger': True},
            ),
        )
    ),
    Query=dict(
        form__iommi_style='bootstrap_horizontal',
        form_container=dict(
            tag='span',
            attrs__class={
                'form-row': True,
                'align-items-center': True,
            },
        ),
    ),
    Menu=dict(
        tag='nav',
        attrs__class={
            'navbar': True,
            'navbar-expand-lg': True,
            'navbar-dark': True,
            'bg-primary': True,
        },
        items_container__attrs__class={'navbar-nav': True},
        items_container__tag='ul'
    ),
    MenuItem=dict(
        tag='li',
        a__attrs__class={'nav-link': True},
        attrs__class={'nav-item': True},
    ),
    Paginator=dict(
        template='iommi/table/bootstrap/paginator.html',
        container__attrs__class__pagination=True,
        active_item__attrs__class={'page-item': True, 'active': True},
        link__attrs__class={'page-link': True},
        item__attrs__class={'page-item': True},
    ),
    Errors=dict(
        attrs__class={'text-danger': True},
    ),
    DebugMenu=dict(
        attrs__class={
            'bg-primary': False,
            'navbar': False,
            'navbar-dark': False,
        }
    ),
    Admin=dict(
        parts__menu=dict(
            # tag='foo',   # TODO: This styling is ignored. We should be able to do this.
            attrs__class={
                'fixed-top': True,
            },
        ),
    ),
    Errors__attrs__class={'with-errors': True},
)
Example #15
0
bootstrap_base = Style(
    base,
    base_template='iommi/base_bootstrap.html',
    Container=dict(
        tag='div',
        attrs__class={
            'container': True,
            'mt-5': True,
            'pt-5': True,
        },
    ),
    Field=dict(
        shortcuts=dict(
            boolean=dict(
                input__attrs__class={
                    'form-check-input': True,
                    'form-control': False
                },
                attrs__class={'form-check': True},
                label__attrs__class={'form-check-label': True},
                template='iommi/form/bootstrap/row_checkbox.html',
            ),
            radio=dict(
                attrs__class={
                    'form-group': False,
                    'form-check': True,
                },
                input__attrs__class={
                    'form-check-input': True,
                    'form-control': False,
                },
            ),
        ),
        attrs__class={
            'form-group': True,
        },
        input__attrs__class={
            'form-control': True,
        },
        errors__attrs__class={'invalid-feedback': True},
        template='iommi/form/bootstrap/row.html',
        errors__template='iommi/form/bootstrap/errors.html',
        help__attrs__class={
            'form-text': True,
            'text-muted': True,
        },
    ),
    Action=dict(shortcuts=dict(
        button__attrs__class={
            'btn': True,
            'btn-primary': True,
        },
        delete__attrs__class={
            'btn-primary': False,
            'btn-danger': True,
        },
    ), ),
    Table=dict(
        attrs__class__table=True,
        attrs__class={'table-sm': True},
    ),
    Column=dict(header__attrs__class={'text-nowrap': True},
                shortcuts=dict(
                    select=dict(
                        header__attrs__title='Select all',
                        header__attrs__class={'text-center': True},
                        cell__attrs__class={'text-center': True},
                    ),
                    number=dict(
                        cell__attrs__class={'text-right': True},
                        header__attrs__class={'text-right': True},
                    ),
                    boolean__cell__attrs__class={'text-center': True},
                    delete=dict(cell__link__attrs__class={'text-danger':
                                                          True}, ),
                )),
    Query=dict(
        form__iommi_style='bootstrap_horizontal',
        form_container=dict(
            tag='span',
            attrs__class={
                'form-row': True,
                'align-items-center': True,
            },
        ),
    ),
    Menu=dict(tag='nav',
              attrs__class={
                  'navbar': True,
                  'navbar-expand-lg': True,
                  'navbar-dark': True,
                  'bg-primary': True,
              },
              items_container__attrs__class={'navbar-nav': True},
              items_container__tag='ul'),
    MenuItem=dict(
        tag='li',
        a__attrs__class={'nav-link': True},
        attrs__class={'nav-item': True},
    ),
    Paginator=dict(
        template='iommi/table/bootstrap/paginator.html',
        container__attrs__class__pagination=True,
        active_item__attrs__class={
            'page-item': True,
            'active': True
        },
        link__attrs__class={'page-link': True},
        item__attrs__class={'page-item': True},
    ),
    Errors=dict(attrs__class={'text-danger': True}, ),
    DebugMenu=dict(attrs__class={
        'bg-primary': False,
        'navbar': False,
        'navbar-dark': False,
    }),
    Admin=dict(
        parts__menu=dict(
            # tag='foo',   # TODO: This styling is ignored. We should be able to do this.
            attrs__class={
                'fixed-top': True,
            }, ), ),
)
Example #16
0
test = Style(
    base,
    font_awesome_4,
    internal=True,
    root__assets=dict(
        jquery=None,
        select2_js=None,
        select2_css=None,
        icons=None,
        axios=None,
    ),
    Field=dict(
        shortcuts=dict(
        ),
    ),
    Table=dict(
        attrs__class__table=True,
    ),
    Column=dict(
        shortcuts__number__cell__attrs__class__rj=True,
    ),
    Paginator=dict(
        template='iommi/table/bootstrap/paginator.html',
    ),
    Menu=dict(
        tag='nav',
        items_container__tag='ul'
    ),
    MenuItem=dict(
        tag='li',
        a__attrs__class={'link': True},
    ),
)
Example #17
0
base = Style(
    content_block='content',
    Form=dict(
        template='iommi/form/form.html',
        actions_template='iommi/form/actions.html',
    ),
    Field=dict(
        shortcuts=dict(
            boolean=dict(
                input__attrs__type='checkbox',
                template='iommi/form/row_checkbox.html',
            ),
            choice=dict(
                input__template='iommi/form/choice.html',
                input__attrs__value=None,
                input__attrs__type=None,
            ),
            multi_choice=dict(
                input__template='iommi/form/choice_select2.html',
            ),
            choice_queryset=dict(
                input__template='iommi/form/choice_select2.html',
            ),
            radio=dict(
                input__template='iommi/form/radio.html',
            ),
            heading=dict(
                template='iommi/form/heading.html',
            ),
        ),
        input__attrs__type='text',
        input__tag='input',
        label__tag='label',
        non_editable_input__tag='span',
        help__attrs__class__helptext=True,
        help__tag='div',
        template='iommi/form/row.html',
        errors__template='iommi/form/errors.html',
    ),
    Column=dict(
        shortcuts=dict(
            select=dict(
                header__attrs__title='Select all',
            ),
        )
    ),
    Paginator=dict(
        show_always=False,
        template='iommi/table/paginator.html',
    ),
    Query=dict(
        template='iommi/query/form.html',
    ),
    Actions=dict(
        tag='div',
        attrs__class__links=True,
    ),
    MenuItem=dict(
        a__tag='a',
        active_class='active',
    ),
    DebugMenu=dict(
        tag='nav',
        items_container__tag='ul',
        items_container__attrs__style={
            'list-style': 'none',
        },
        attrs__style={
            'position': 'fixed',
            'bottom': '-1px',
            'right': '-1px',
            'background': 'white',
            'border': '1px solid black',
            'z-index': '100',
        },
        attrs__class={
            'flex-column': False,
        },
    ),
)
Example #18
0
from iommi.style import Style

font_awesome_4 = Style(Column__shortcuts=dict(
    icon__extra=dict(
        icon_attrs__class={
            'fa': True,
            'fa-lg': True
        },
        icon_prefix='fa-',
    ),
    edit__extra__icon='pencil-square-o',
    delete__extra__icon='trash-o',
    download__extra__icon='download',
), )
Example #19
0
semantic_ui_base = Style(
    base,
    base_template='iommi/base_semantic_ui.html',
    Container=dict(
        tag='div',
        attrs__class={
            'ui': True,
            'main': True,
            'container': True,
        },
    ),
    Form=dict(
        attrs__class=dict(
            ui=True,
            form=True,
            error=True,  # semantic ui hides error messages otherwise
        ), ),
    Field=dict(shortcuts=dict(
        boolean=dict(template='iommi/form/semantic_ui/row_checkbox.html', ),
        radio=dict(
            input__template='iommi/form/semantic_ui/radio.html',
            attrs__class={'grouped fields': True},
        ),
    ),
               attrs__class__field=True,
               template='iommi/form/semantic_ui/row.html',
               errors__template='iommi/form/semantic_ui/errors.html',
               help__attrs__class=dict(
                   ui=True,
                   pointing=True,
                   label=True,
               )),
    Action=dict(shortcuts=dict(
        button__attrs__class={
            'ui': True,
            'button': True,
        },
        delete__attrs__class__negative=True,
    ), ),
    Table=dict(
        attrs__class__table=True,
        attrs__class__ui=True,
        attrs__class__celled=True,
        attrs__class__sortable=True,
    ),
    Column=dict(shortcuts=dict(
        select=dict(header__attrs__title='Select all', ),
        number=dict(
            cell__attrs__class={
                'ui': True,
                'container': True,
                'fluid': True,
                'right aligned': True,
            },
            header__attrs__class={
                'ui': True,
                'container': True,
                'fluid': True,
                'right aligned': True,
            },
        ),
    )),
    Query=dict(
        form__attrs__class__fields=True,
        form_container=dict(
            tag='span',
            attrs__class={
                'ui form': True,
                'fields': True,
            },
        ),
    ),
    Menu=dict(
        attrs__class=dict(
            ui=True,
            menu=True,
        ),
        tag='div',
    ),
    MenuItem__a__attrs__class__item=True,
    Paginator=dict(template='iommi/table/semantic_ui/paginator.html',
                   item__attrs__class__item=True,
                   attrs__class=dict(
                       ui=True,
                       pagination=True,
                       menu=True,
                   ),
                   active_item__attrs__class=dict(
                       item=True,
                       active=True,
                   )),
)
Example #20
0
semantic_ui_base = Style(
    base,
    root__assets=dict(
        css=html.link(attrs=dict(
            rel='stylesheet',
            href=
            'https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.4.1/semantic.min.css',
            integrity='sha256-9mbkOfVho3ZPXfM7W8sV2SndrGDuh7wuyLjtsWeTI1Q=',
            crossorigin='anonymous',
        ), ),
        js=html.script(attrs=dict(
            src=
            'https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.4.1/semantic.min.js',
            integrity='sha256-t8GepnyPmw9t+foMh3mKNvcorqNHamSKtKRxxpUEgFI=',
            crossorigin='anonymous',
        ), ),
    ),
    Container=dict(
        tag='div',
        attrs__class={
            'ui': True,
            'main': True,
            'container': True,
        },
    ),
    Form=dict(
        attrs__class=dict(
            ui=True,
            form=True,
            error=True,  # semantic ui hides error messages otherwise
        ), ),
    Field=dict(shortcuts=dict(
        boolean=dict(template='iommi/form/semantic_ui/row_checkbox.html', ),
        radio=dict(
            input__template='iommi/form/semantic_ui/radio.html',
            attrs__class={'grouped fields': True},
        ),
    ),
               attrs__class__field=True,
               help__attrs__class=dict(
                   ui=True,
                   pointing=True,
                   label=True,
               )),
    Action=dict(shortcuts=dict(
        button__attrs__class={
            'ui': True,
            'button': True,
        },
        primary__attrs__class__primary=True,
        delete__attrs__class__negative=True,
    ), ),
    Table=dict(
        attrs__class__table=True,
        attrs__class__ui=True,
        attrs__class__celled=True,
        attrs__class__sortable=True,
    ),
    Column=dict(shortcuts=dict(
        select=dict(header__attrs__title='Select all', ),
        number=dict(
            cell__attrs__class={
                'ui': True,
                'container': True,
                'fluid': True,
                'right aligned': True,
            },
            header__attrs__class={
                'ui': True,
                'container': True,
                'fluid': True,
                'right aligned': True,
            },
        ),
    )),
    Query=dict(
        form__attrs__class__fields=True,
        form_container=dict(
            tag='span',
            attrs__class={
                'ui form': True,
                'fields': True,
            },
        ),
    ),
    Menu=dict(
        attrs__class=dict(
            ui=True,
            menu=True,
        ),
        tag='div',
    ),
    MenuItem__a__attrs__class__item=True,
    Paginator=dict(template='iommi/table/semantic_ui/paginator.html',
                   item__attrs__class__item=True,
                   attrs__class=dict(
                       ui=True,
                       pagination=True,
                       menu=True,
                   ),
                   active_item__attrs__class=dict(
                       item=True,
                       active=True,
                   )),
    Errors__attrs__class=dict(
        ui=True,
        error=True,
        message=True,
    ),
)
Example #21
0
from iommi.style import Style
from iommi.style_base import base
from iommi.asset import Asset

water = Style(
    base,
    assets__css=Asset.css(
        attrs=dict(
            href='https://cdn.jsdelivr.net/gh/kognise/water.css@latest/dist/dark.min.css',
        ),
    ),
)
Example #22
0
bulma_base = Style(
    base,
    root__assets=dict(
        css=Asset.css(
            attrs__href=
            'https://cdn.jsdelivr.net/npm/[email protected]/css/bulma.min.css', ),
        navbar_burger_click_js=navbar_burger_click_js,
    ),
    sub_styles__horizontal=dict(Field=dict(
        attrs__class={
            'mr-4': True,
        },
        label__attrs__class={
            'mt-2': True,
            'mr-1': True,
        },
    ), ),
    Header__attrs__class={
        'title': True,
        'is-1': lambda fragment, **_: fragment.tag == 'h1',
        'is-2': lambda fragment, **_: fragment.tag == 'h2',
        'is-3': lambda fragment, **_: fragment.tag == 'h3',
        'is-4': lambda fragment, **_: fragment.tag == 'h4',
        'is-5': lambda fragment, **_: fragment.tag == 'h5',
        'is-6': lambda fragment, **_: fragment.tag == 'h6',
    },
    Container=dict(
        tag='div',
        attrs__class={
            'main': True,
            'container': True,
        },
    ),
    Field=dict(
        shortcuts=dict(
            boolean=dict(
                input__attrs__class__input=False,
                label__attrs__class__checkbox=True,
                label__attrs__class__label=False,
            ),
            textarea=dict(
                input__attrs__class__input=False,
                input__attrs__class__textarea=True,
            ),
            radio=dict(input__attrs__class__input=False, ),
        ),
        attrs__class__field=True,
        template='iommi/form/bulma/field.html',
        label__attrs__class__label=True,
        input__attrs__class__input=True,
        input__attrs__class={
            'is-danger': lambda field, **_: bool(field.errors),
        },
        errors__attrs__class={
            'is-danger': True,
            'help': True,
        },
        help__attrs__class=dict(help=True, ),
    ),
    Actions=dict(
        tag="div",
        attrs__class=dict(links=False, buttons=True),
    ),
    Action=dict(
        shortcuts=dict(
            # In bulma the most neutral button styling is button, which
            # gets you a button that's just an outline.
            button__attrs__class={
                'button': True,
            },
            delete__attrs__class={
                'is-danger': True,
            },
            primary__attrs__class={
                'is-primary': True,
            },
        ), ),
    Table={
        'attrs__class__table': True,
        'attrs__class__is-fullwidth': True,
        'attrs__class__is-hoverable': True,
    },
    Column=dict(shortcuts=dict(
        select=dict(header__attrs__title='Select all', ),
        number=dict(
            cell__attrs__class={
                'has-text-right': True,
            },
            header__attrs__class={
                'has-text-right': True,
            },
        ),
    ), ),
    Query__form_container=dict(
        tag='span',
        attrs__class={
            'is-horizontal': True,
            'field': True,
        },
    ),
    Menu=dict(
        attrs__class__navbar=True,
        tag='nav',
    ),
    MenuItem__a__attrs__class={'navbar-item': True},
    MenuItem__active_class='is-active',
    DebugMenu=dict(
        tag='aside',
        attrs__class={
            'navbar': False,
            'menu': True,
        },
    ),
    Paginator=dict(template='iommi/table/bulma/paginator.html', ),
    Errors__attrs__class={
        'help': True,
        'is-danger': True,
    },
)
Example #23
0
from iommi.style import (
    Style, )
from iommi.style_font_awesome_4 import font_awesome_4
from iommi.style_base import base

foundation = Style(
    base,
    font_awesome_4,
    Action=dict(shortcuts=dict(
        button__attrs__class__button=True,
        delete__attrs__class__alert=True,
    ), ),
    Menu=dict(tag='nav',
              items_container__attrs__class={'menu': True},
              items_container__tag='ul'),
    MenuItem=dict(tag='li', ),
)
Example #24
0
from iommi.style import (
    Style, )
from iommi.style_font_awesome_4 import font_awesome_4
from iommi.style_base import base

django_admin_base = Style(
    base,
    font_awesome_4,
    Container=dict(
        tag='div',
        attrs__class={
            'container': True,
        },
    ),
    base_template='iommi/base_django_admin.html',
    Table__attrs__id='changelist',
    Query__form__iommi_style='django_admin_horizontal',
)

django_admin = Style(
    django_admin_base,
    Field__attrs__class={'form-row': True},
    Form__attrs__class=dict(aligned=True, ),
    Form__attrs__id='content',
    Table__actions__attrs__class={'object-tools': True},
    Table__outer__tag='div',
    Table__outer__attrs__id='content',
    Table__bulk__attrs__id=None,
    Admin__parts__header__attrs__id='header',
)
Example #25
0
base = Style(
    base_template='iommi/base.html',
    content_block='content',
    assets=dict(
        jquery=Asset.js(
            attrs=dict(
                src='https://code.jquery.com/jquery-3.4.1.js',
                integrity='sha256-WpOohJOqMqqyKL9FccASB9O0KwACQJpFTUBLTYOVvVU=',
                crossorigin='anonymous',
            ),
            after=-1,
        ),
    ),
    Form=dict(
        template='iommi/form/form.html',
        actions_template='iommi/form/actions.html',
    ),
    Field=dict(
        shortcuts=dict(
            boolean=dict(
                input__attrs__type='checkbox',
                template='iommi/form/row_checkbox.html',
            ),
            choice=dict(
                input__template='iommi/form/choice.html',
                input__attrs__value=None,
                input__attrs__type=None,
            ),
            multi_choice=dict(
                input__template='iommi/form/choice_select2.html',
                assets=select2_assets,
            ),
            choice_queryset=dict(
                input__template='iommi/form/choice_select2.html',
                assets=select2_assets,
            ),
            date__input__attrs__type='date',
            radio=dict(
                input__template='iommi/form/radio.html',
            ),
            heading=dict(
                template='iommi/form/heading.html',
            ),
        ),
        tag='div',
        input__attrs__type='text',
        input__tag='input',
        label__tag='label',
        non_editable_input__tag='span',
        help__attrs__class__helptext=True,
        help__tag='div',
    ),
    Column=dict(
        shortcuts=dict(
            select=dict(
                header__attrs__title='Select all',
            ),
        )
    ),
    Paginator=dict(
        show_always=False,
        template='iommi/table/paginator.html',
    ),
    Query=dict(
        template='iommi/query/form.html',
    ),
    Actions=dict(
        tag='div',
        attrs__class__links=True,
    ),
    MenuItem=dict(
        a__tag='a',
        active_class='active',
    ),
    DebugMenu=dict(
        tag='nav',
        items_container__tag='ul',
        items_container__attrs__style={
            'list-style': 'none',
        },
        attrs__style={
            'position': 'fixed',
            'bottom': '-1px',
            'right': '-1px',
            'background': 'white',
            'border': '1px solid black',
            'z-index': '100',
        },
        attrs__class={
            'flex-column': False,
        },
    ),
)
Example #26
0
bulma_base = Style(
    base,
    base_template='iommi/base_bulma.html',
    Header__attrs__class={
        'title': True,
        'is-1': lambda fragment, **_: fragment.tag == 'h1',
        'is-2': lambda fragment, **_: fragment.tag == 'h2',
        'is-3': lambda fragment, **_: fragment.tag == 'h3',
        'is-4': lambda fragment, **_: fragment.tag == 'h4',
        'is-5': lambda fragment, **_: fragment.tag == 'h5',
        'is-6': lambda fragment, **_: fragment.tag == 'h6',
    },
    Container=dict(
        tag='div',
        attrs__class={
            'main': True,
            'container': True,
        },
    ),
    Field=dict(shortcuts=dict(
        boolean=dict(
            input__attrs__class__input=False,
            label__attrs__class__checkbox=True,
            label__attrs__class__label=False,
        ),
        textarea=dict(
            input__attrs__class__input=False,
            input__attrs__class__textarea=True,
        ),
        radio=dict(input__attrs__class__input=False, ),
    ),
               attrs__class__field=True,
               template='iommi/form/bulma/row.html',
               label__attrs__class__label=True,
               input__attrs__class__input=True,
               errors__template='iommi/form/bulma/errors.html',
               help__attrs__class=dict(help=True, )),
    Action=dict(shortcuts=dict(
        button__attrs__class={
            'button': True,
        },
        delete__attrs__class={
            'button': True,
            'is-danger': True,
        },
    ), ),
    Table={
        'attrs__class__table': True,
        'attrs__class__is-fullwidth': True,
        'attrs__class__is-hoverable': True,
    },
    Column=dict(shortcuts=dict(
        select=dict(header__attrs__title='Select all', ),
        number=dict(
            cell__attrs__class={
                'has-text-right': True,
            },
            header__attrs__class={
                'has-text-right': True,
            },
        ),
    ), ),
    Query__form=dict(
        iommi_style='bulma_horizontal',
        attrs__class__content=True,
    ),
    Query__form_container=dict(
        tag='span',
        attrs__class={
            'is-horizontal': True,
            'field': True,
        },
    ),
    Menu=dict(
        attrs__class__navbar=True,
        tag='nav',
    ),
    MenuItem__a__attrs__class={'navbar-item': True},
    MenuItem__active_class='is-active',
    DebugMenu=dict(
        tag='aside',
        attrs__class={
            'navbar': False,
            'menu': True,
        },
    ),
    Paginator=dict(template='iommi/table/bulma/paginator.html', ),
)
Example #27
0
django_admin_base = Style(
    base,
    font_awesome_4,
    root__assets=dict(
        css_base=html.link(attrs=dict(rel="stylesheet", type="text/css", href="/static/admin/css/base.css")),
        css_login=html.link(attrs=dict(rel="stylesheet", type="text/css", href="/static/admin/css/login.css")),
        css_forms=html.link(attrs=dict(rel="stylesheet", type="text/css", href="/static/admin/css/forms.css")),
        meta=html.meta(
            attrs=dict(
                name="viewport", content="user-scalable=no, width=device-width, initial-scale=1.0, maximum-scale=1.0"
            )
        ),
        css_responsive=html.link(
            attrs=dict(rel="stylesheet", type="text/css", href="/static/admin/css/responsive.css")
        ),
        css_extra=html.style(
            """
            .compact-form-row {
                display: inline-block;
            }

            .compact-form-row .helptext {
                display: none;
            }
        """
        ),
    ),
    Container=dict(
        tag='div',
        attrs__class={
            'container': True,
        },
    ),
    Table__attrs__id='changelist',
    Query__form__iommi_style='django_admin_horizontal',
)
Example #28
0
from iommi.style import Style
from iommi.fragment import html

font_awesome_4 = Style(
    root__assets__icons=html.link(
        attrs__rel="stylesheet",
        attrs__href=
        "https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css",
    ),
    Column__shortcuts=dict(
        icon__extra=dict(
            icon_attrs__class={
                'fa': True,
                'fa-lg': True
            },
            icon_prefix='fa-',
        ),
        edit__extra__icon='pencil-square-o',
        delete__extra__icon='trash-o',
        download__extra__icon='download',
    ),
)
Example #29
0
from iommi.style import Style
from iommi.style_base import base

water = Style(
    base,
    base_template='iommi/base_water.html',
)