File List
{% set ajax = TRUE %}
{% set fwutils = TRUE %}
{% set validate = TRUE %}
{% set usebootbox = FALSE %}
{% set breadcrumbs = [{link: base, text: 'Home'}, {link: base ~ '/admin/', text: 'Admin'}, {text: 'Beans'}] %}
{% extends '@content/page.twig' %}
{% import '@content/iconmacro.twig' as i %}
{% import '@util/formmacro.twig' as f %}
{% import '@util/modalmacro.twig' as m %}
{% block setup %}
function deltable(e)
{
fwdom.stop(e);
let tr = this.closest('[data-bean]');
let table = tr.getAttribute('data-bean');
framework.confirm('Are you sure you you want to delete the '+table+' bean type?', function(r){
if (r)
{ // user picked OK
framework.ajax(base+'/ajax/table/'+table, {
method: 'DELETE',
}).done(function(){
framework.fadetodel(tr);
}).fail(function(jx){
framework.alert('<h3>Delete failed</h3>'+jx.responseText);
});
}
});
}
{% endblock setup %}
{% block onload %}
fwdom.on('#nbform', 'submit', fwdom.nosubmit);
fwdom.mkjQ('#nbform').parsley();
fwdom.on('#addb', 'click', function(e){
fwdom.stop(e);
const btn = e.target;
const form = document.getElementById('nbform');
btn.disabled = true;
let name = document.getElementById('xbn').value;
let sp = null;
let error = false;
for (let x of document.querySelectorAll('[data-bean]'))
{
const t = x.getAttribute('data-bean');
if (t === name)
{
error = true;
break;
}
if (t > name)
{
sp = x;
break;
}
}
if (error)
{
framework.alert('That bean already exists');
this.disabled = false;
return;
}
let dt = {method: 'post'};
let data = {};
for (let v of ['field', 'sample'])
{
form.querySelectorAll('input[name="'+v+'[]"]').forEach(function(item, index){
data[v+'[' + index + ']'] = item.value;
});
}
dt['data'] = data;
const fn = function(data){
let newd = document.createElement('tr');
newd.setAttribute('data-id', data);
newd.innerHTML = '<td class="bname">'+name+'</td>'+
'<td><a href="'+base+'/admin/view/table/'+name+'/">{{i.view()}}</a></td>'+
'<td><a href="'+base+'/admin/edit/table/'+name+'/">{{i.edit()}}</a></td>'+
'<td>{{i.delete('delb')}}</td>';
fwdom.on('.delb', 'click', deltable, newd);
if (sp === null)
{
document.getElementById('btab').appendChild(newd);
}
else
{
document.getElementById('btab').insertBefore(newd, sp);
}
bootstrap.Modal.getOrCreateInstance(document.getElementById('nbean')).hide();
};
framework.ajax('{{base}}/ajax/table/' + name, dt).done(fn).fail(function(jx){
framework.alert('<h3>Failed to create new bean<h3>'+jx.responseText);
}).always(function() { btn.disabled = false; });
});
fwdom.on('#nbean', 'show.bs.modal', function(e){
document.getElementById('nbform').reset();
});
fwdom.on('.delb', 'click', deltable);
fwdom.on('#addm', 'click', function(e) { framework.addMore(e); });
{% endblock onload %}
{% if not page is defined %}
{% set page = 1 %}
{% set pagesize = 10 %}
{% endif %}
{% set extra = '' %}
{% if all is defined %}
{% if all %}
{% set extra = 'all=1' %}
{% endif %}
{% else %}
{% set all = FALSE %}
{% endif %}
{% set beans = siteinfo.tables(all, page, pagesize) %}
{% set pages = ((siteinfo.tablecount(all) + pagesize) / pagesize)|round(0, 'floor') %}
{% block headerbody %}
<h1>Beans</h1>
{% endblock headerbody %}
{% block main %}
<section class="row">
<article class="offset-md-1 col-md-9">
{% include '@util/message.twig' %}
{% include '@util/paginate.twig' with { page : page, pagesize: pagesize, pages: pages, extra: extra } %}
<table class="table table-responsive table-striped table-hover">
<thead class="thead-inverse">
<tr>
<th>Name</th>
<th colspan="3"> </th>
</tr>
</thead>
<tbody id="btab">
{% for nb in beans %}
<tr data-bean="{{nb.name}}">
<td class="bname">{{nb.name}}</td>
<td><a href="{{base}}/admin/view/table/{{nb.name}}">{{i.view('editb')}}</a></td>
<td><a href="{{base}}/admin/edit/table/{{nb.name}}">{{i.edit('editb')}}</a></td>
<td>{{i.delete('delb')}}</td>
</td>
{% else %}
<tr><td colspan="4">No beans defined</td></tr>
{% endfor %}
</tbody>
</table>
{% include '@util/paginate.twig' with { page : page, pagesize: pagesize, pages: pages, extra: extra } %}
<p>{{m.invoke('#nbean', 'Add Bean')}}</p>
</article>
</section>
{{m.open({id: 'nbean', title: 'New Bean'})}}
<div class="modal-body">
<form action="#" method="POST" id="nbform">
{{f.text({label: 'Bean Name', id: 'xbn', name: 'name', ph: 'Bean name - alphanumeric characters only', required: TRUE,
valid: { trigger: 'blur', pattern: '[A-Za-z][a-zA-Z0-9]*', 'remote-reverse': 'false', remote: base ~ '/ajax/tablecheck/{value}',
'remote-message': 'That bean already exists'} })}}
<fieldset id="example">
{{f.text({label: 'Field Name', name: 'field[]', ph: 'Field name - alphanumeric characters only', valid: { trigger: 'blur', pattern: '[A-Za-z][a-zA-Z0-9]*'} })}}
{{f.text({label: 'Sample Value', name: 'sample[]', ph: 'Field Sample Value'})}}
</fieldset>
<p id="mrow">
<button class="btn btn-sm btn-info" id="addm" type="button">More</button>
</p>
</form>
</div>
{{m.close({action: 'Add', id: 'addb'})}}
{% endblock main %}
{% block pagefooter %}
{# I don't want a footer #}
{% endblock pagefooter %}