j-Grid
- needed
bootstrapgrid system
Data-source needs to contain:
{
items: [{ name: 'Row 1' }, { name: 'Row 2' }, ...] // items
page: 1, // current pages
pages: 30, // count of pages
limit: 5, // items limit per page
count: 150 // count of items in DB
}Configuration:
filter{Boolean} shows a filter (optional, default:true)filterlabel{String} a default placeholder for all filters (optional)external{Boolean} is an external data-source (dynamic data loading) (optinal, default:false)pluralizepages{String} pluralization for pages (optional, default:# pages,# page,# pages,# pages)pluralizeitems{String} pluralization for items (optional, default:# items,# item,# items,# items)exec{String} a link tofunction(type, filter, sort, page), it's evaluated if the grid performs some operationspadding{Number} height padding (optional, default:0)autosize{Boolean} enables full-height auto-size (optional, defaulttrue)boolean{String} a values for filtering of boolean values (optional, default:true|on|yes)pagination{Boolean} shows pagination panel (optional, default:false)init{Function} an init function for e.g. custom columnschecked{Function} if rows will contain<input type="checkboxthen this function will be evaluated when the checkbox is checked
Column properties:
name{String} a name of field in the objecttext{String} a column labeltitle{String} a column tooltip (optional)size{Number} a column width:1small,2medium,3large,4very large (optional, default1)size{String} a column width in pixels, value needs to containspxe.g.20pxfilter{String/Boolean} a placeholder for the filter orbooleancan disable filter for this column (optional)format{String/Number} for formatting values (stringfor date,numberfor numbers)background{String} a background color (optional)align{String} can becenterorright(optional, default:left)template{String} can be a Tangular template and the model is the whole object of rowrender{String/Function(value, column, row)} a custom rendering,stringis evaluated as an arrow functionheader{String/Function(column)} a custom rendering of header,stringis evaluated as an arrow functionsort{Boolean} enables sorting (optional, default:true)class{String} additional classes for the column, e.g.hidden-xssearch{Boolean/String}truewill filter a value according to thetemplateresult orStringcan be a Tangular template which will be used as a value for search
Filtering:
numbers: (1)numbersearches an exact number, (2)number / numberis an interval between numbersstrings: (1)stringsearches an exact string, (2)string1, string2, string3is a multiple search criteriumdates: (1) year2017searches all dates in this year, (2)2017-02-12 / 2017-03-13is an interval between dates, (3)20.12 / 31.12an interval between dates in the current year
Use it with <ui-component name="grid">. When the component is not loaded yet, jComponent downloads it on first use from the address in DEF.fallback (the Componentator CDN by default). Author: Peter Širka. Source: the Componentator components repository, MIT license.
<style>
body{padding:50px;margin:0;background-color:#F0F0F0;font-family:Arial;height:100%;}
html{height:100%;}
</style>
<ui-component name="grid" path="griddata" config="exec:filtering">
<script type="text/plain">
[
{ name: 'name', text: 'Name', size: 2, render: 'n => n.toUpperCase()', filter: 'Search in name' },
{ name: 'price', text: 'Price', size: 1, format: 2, filter: 'Search in prices', align: 'right' },
{ name: 'description', text: 'Description', size: 3, filter: 'Search in description' },
{ name: 'created', text: 'Created', size: 1, filter: 'Search in dates', format: 'dd.MM.yyyy', align: 'center' }
]
</script>
</ui-component>
<script>
var griddata = { page: 1, count: 18, pages: 3, limit: 6, items: [] };
var items = griddata.items;
items.push({ name: '1 Lorem ipsum dolor.', description: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Consectetur, mollitia!', price: 233, created: new Date().add('-5 days') });
items.push({ name: '2 Lorem ipsum dolor.', description: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Consectetur, mollitia!', price: 122, created: new Date().add('-1 year') });
items.push({ name: '3 Lorem ipsum dolor.', description: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Consectetur, mollitia!', price: 119, created: new Date().add('-1 month') });
items.push({ name: '4 Lorem ipsum dolor.', description: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Consectetur, mollitia!', price: 35.34, created: new Date().add('-14 days') });
items.push({ name: '5 Lorem ipsum dolor.', description: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Consectetur, mollitia!', price: 439.33, created: new Date().add('-5 hours') });
items.push({ name: '6 Lorem ipsum dolor.', description: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Consectetur, mollitia!', price: 111.12, created: new Date().add('-349 minutes') });
// Auto-resize
$(window).on('resize', function() {
setTimeout2('resize', function() {
EMIT('resize');
}, 100);
});
function filtering(type, filter, sort, page) {
console.log(type, filter, sort, page);
}
</script>