Add support for "new-style grids" and "model master views".
Finally, an API that makes some sense... We don't yet have feature parity with the old-style grids and CRUD views, but this is already a significant improvement to the design. Still needs a lot of docs though...
This commit is contained in:
parent
62b7194c21
commit
585eb09bec
26 changed files with 2296 additions and 94 deletions
|
@ -131,6 +131,7 @@
|
|||
${h.javascript_link('https://code.jquery.com/ui/1.11.4/jquery-ui.min.js')}
|
||||
${h.javascript_link(request.static_url('tailbone:static/js/lib/jquery.ui.menubar.js'))}
|
||||
${h.javascript_link(request.static_url('tailbone:static/js/lib/jquery.loadmask.min.js'))}
|
||||
${h.javascript_link(request.static_url('tailbone:static/js/jquery.ui.tailbone.js'))}
|
||||
${h.javascript_link(request.static_url('tailbone:static/js/tailbone.js'))}
|
||||
</%def>
|
||||
|
||||
|
@ -145,6 +146,7 @@
|
|||
${h.stylesheet_link(request.static_url('tailbone:static/css/grids.css'))}
|
||||
${h.stylesheet_link(request.static_url('tailbone:static/css/filters.css'))}
|
||||
${h.stylesheet_link(request.static_url('tailbone:static/css/forms.css'))}
|
||||
${h.stylesheet_link(request.static_url('tailbone:static/css/newgrids.css'))}
|
||||
</%def>
|
||||
|
||||
<%def name="head_tags()"></%def>
|
||||
|
|
16
tailbone/templates/master/create.mako
Normal file
16
tailbone/templates/master/create.mako
Normal file
|
@ -0,0 +1,16 @@
|
|||
## -*- coding: utf-8 -*-
|
||||
<%inherit file="/base.mako" />
|
||||
|
||||
<%def name="title()">New ${model_title}</%def>
|
||||
|
||||
<%def name="context_menu_items()">
|
||||
<li>${h.link_to("Back to {0}".format(model_title_plural), index_url)}</li>
|
||||
</%def>
|
||||
|
||||
<ul id="context-menu">
|
||||
${self.context_menu_items()}
|
||||
</ul>
|
||||
|
||||
<div class="form-wrapper">
|
||||
${form.render()|n}
|
||||
</div><!-- form-wrapper -->
|
19
tailbone/templates/master/edit.mako
Normal file
19
tailbone/templates/master/edit.mako
Normal file
|
@ -0,0 +1,19 @@
|
|||
## -*- coding: utf-8 -*-
|
||||
<%inherit file="/base.mako" />
|
||||
|
||||
<%def name="title()">${model_title}: ${unicode(instance)}</%def>
|
||||
|
||||
<%def name="context_menu_items()">
|
||||
<li>${h.link_to("Back to {0}".format(model_title_plural), url(route_prefix))}</li>
|
||||
% if request.has_perm('{0}.view'.format(permission_prefix)):
|
||||
<li>${h.link_to("View this {0}".format(model_title), action_url('view', instance))}</li>
|
||||
% endif
|
||||
</%def>
|
||||
|
||||
<ul id="context-menu">
|
||||
${self.context_menu_items()}
|
||||
</ul>
|
||||
|
||||
<div class="form-wrapper">
|
||||
${form.render()|n}
|
||||
</div><!-- form-wrapper -->
|
22
tailbone/templates/master/index.mako
Normal file
22
tailbone/templates/master/index.mako
Normal file
|
@ -0,0 +1,22 @@
|
|||
## -*- coding: utf-8 -*-
|
||||
## ##############################################################################
|
||||
##
|
||||
## Default master 'index' template. Features a prominent data table and
|
||||
## exposes a way to filter and sort the data, etc.
|
||||
##
|
||||
## ##############################################################################
|
||||
<%inherit file="/base.mako" />
|
||||
|
||||
<%def name="title()">${grid.model_title_plural}</%def>
|
||||
|
||||
<%def name="context_menu_items()">
|
||||
% if request.has_perm('{0}.create'.format(grid.permission_prefix)):
|
||||
<li>${h.link_to("Create a new {0}".format(grid.model_title), url('{0}.create'.format(grid.route_prefix)))}</li>
|
||||
% endif
|
||||
</%def>
|
||||
|
||||
<ul id="context-menu">
|
||||
${self.context_menu_items()}
|
||||
</ul>
|
||||
|
||||
${grid.render_complete()|n}
|
19
tailbone/templates/master/view.mako
Normal file
19
tailbone/templates/master/view.mako
Normal file
|
@ -0,0 +1,19 @@
|
|||
## -*- coding: utf-8 -*-
|
||||
<%inherit file="/base.mako" />
|
||||
|
||||
<%def name="title()">${model_title}: ${unicode(instance)}</%def>
|
||||
|
||||
<%def name="context_menu_items()">
|
||||
<li>${h.link_to("Back to {0}".format(model_title_plural), url(route_prefix))}</li>
|
||||
% if request.has_perm('{0}.edit'.format(permission_prefix)):
|
||||
<li>${h.link_to("Edit this {0}".format(model_title), action_url('edit', instance))}</li>
|
||||
% endif
|
||||
</%def>
|
||||
|
||||
<ul id="context-menu">
|
||||
${self.context_menu_items()}
|
||||
</ul>
|
||||
|
||||
<div class="form-wrapper">
|
||||
${form.render()|n}
|
||||
</div><!-- form-wrapper -->
|
7
tailbone/templates/newgrids/complete.mako
Normal file
7
tailbone/templates/newgrids/complete.mako
Normal file
|
@ -0,0 +1,7 @@
|
|||
## -*- coding: utf-8 -*-
|
||||
<div class="newgrid-wrapper">
|
||||
% if grid.filterable:
|
||||
${grid.render_filters()|n}
|
||||
% endif
|
||||
${grid.render_grid()|n}
|
||||
</div><!-- newgrid-wrapper -->
|
31
tailbone/templates/newgrids/filters.mako
Normal file
31
tailbone/templates/newgrids/filters.mako
Normal file
|
@ -0,0 +1,31 @@
|
|||
## -*- coding: utf-8 -*-
|
||||
<div class="newfilters">
|
||||
|
||||
${form.begin(method='get')}
|
||||
|
||||
<fieldset>
|
||||
<legend>Filters</legend>
|
||||
% for filtr in form.iter_filters():
|
||||
<div class="filter" id="filter-${filtr.key}" data-key="${filtr.key}"${' style="display: none;"' if not filtr.active else ''|n}>
|
||||
${form.checkbox('{0}-active'.format(filtr.key), class_='active', id='filter-active-{0}'.format(filtr.key), checked=filtr.active)}
|
||||
<label for="filter-active-${filtr.key}">${filtr.label}</label>
|
||||
<div class="inputs">
|
||||
${form.filter_verb(filtr)}
|
||||
${form.filter_value(filtr)}
|
||||
</div>
|
||||
</div>
|
||||
% endfor
|
||||
</fieldset>
|
||||
|
||||
<div class="buttons">
|
||||
${form.tag('button', type='submit', id='apply-filters', c="Apply Filters")}
|
||||
<select id="add-filter">
|
||||
<option value="">Add a Filter</option>
|
||||
% for filtr in form.iter_filters():
|
||||
<option value="${filtr.key}"${' disabled="disabled"' if filtr.active else ''|n}>${filtr.label}</option>
|
||||
% endfor
|
||||
</select>
|
||||
</div>
|
||||
|
||||
${form.end()}
|
||||
</div><!-- newfilters -->
|
50
tailbone/templates/newgrids/grid.mako
Normal file
50
tailbone/templates/newgrids/grid.mako
Normal file
|
@ -0,0 +1,50 @@
|
|||
## -*- coding: utf-8 -*-
|
||||
<div ${format_attrs(**grid.get_div_attrs())}>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
## % if grid.checkboxes:
|
||||
## <th class="checkbox">${h.checkbox('check-all')}</th>
|
||||
## % endif
|
||||
% for column in grid.iter_visible_columns():
|
||||
${grid.column_header(column)}
|
||||
% endfor
|
||||
% if grid.show_actions_column:
|
||||
<th class="actions">Actions</th>
|
||||
% endif
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
% for i, row in enumerate(grid.iter_rows(), 1):
|
||||
<tr ${format_attrs(**grid.get_row_attrs(row, i))}>
|
||||
## % if grid.checkboxes:
|
||||
## <td class="checkbox">${grid.checkbox(row)}</td>
|
||||
## % endif
|
||||
% for column in grid.iter_visible_columns():
|
||||
<td ${format_attrs(**grid.get_cell_attrs(row, column))}>${grid.render_cell(row, column)}</td>
|
||||
% endfor
|
||||
% if grid.show_actions_column:
|
||||
<td class="actions">
|
||||
${grid.render_actions(row)}
|
||||
</td>
|
||||
% endif
|
||||
</tr>
|
||||
% endfor
|
||||
</tbody>
|
||||
</table>
|
||||
% if grid.pageable:
|
||||
<div class="pager">
|
||||
<p class="showing">
|
||||
showing ${grid.pager.first_item} thru ${grid.pager.last_item} of ${grid.pager.item_count}
|
||||
% if grid.pager.page_count > 1:
|
||||
(page ${grid.pager.page} of ${grid.pager.page_count})
|
||||
% endif
|
||||
</p>
|
||||
<p class="page-links">
|
||||
${h.select('pagesize', grid.pager.items_per_page, grid.get_pagesize_options())}
|
||||
per page
|
||||
${grid.pager.pager('$link_first $link_previous ~1~ $link_next $link_last', symbol_next='next', symbol_previous='prev', partial=1)}
|
||||
</p>
|
||||
</div>
|
||||
% endif
|
||||
</div>
|
|
@ -1,12 +0,0 @@
|
|||
## -*- coding: utf-8 -*-
|
||||
<%inherit file="/grid.mako" />
|
||||
|
||||
<%def name="title()">Settings</%def>
|
||||
|
||||
<%def name="context_menu_items()">
|
||||
% if request.has_perm('settings.create'):
|
||||
<li>${h.link_to("Create a new Setting", url('settings.create'))}</li>
|
||||
% endif
|
||||
</%def>
|
||||
|
||||
${parent.body()}
|
Loading…
Add table
Add a link
Reference in a new issue