You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

144 lines
5.5 KiB

{% autoescape None %}
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="{{ Env.get('static_path') }}style/api.css" type="text/css">
<script type="text/javascript" src="{{ Env.get('static_path') }}scripts/combined.vendor.min.js"></script>
<script>
var api_base = '{{ Env.get('api_base') }}';
var createList = function(name, documents){
var list;
var el = new Element('div').adopt(
new Element('h2', {'text': name}),
list = new Element('table.documents').grab(
new Element('tr').adopt(
new Element('th.id', {'text': 'id'}),
new Element('th._rev', {'text': 'rev'}),
new Element('th._t', {'text': 'type'}),
new Element('th.form', {'text': 'document'}),
new Element('th.actions', {'text': ''})
)
)
);
documents.each(function(doc){
new Element('tr.document').adopt(
new Element('td.id', {'text': doc['_id']}),
new Element('td._rev', {'text': doc['_rev']}),
new Element('td._t', {'text': doc['_t']}),
new Element('td.form').grab(
new Element('form', {'action': '', 'method': 'post'}).adopt(
new Element('textarea.document', {'text': JSON.stringify(doc, null, 4)}),
new Element('input.submit', {'text': 'save', 'type': 'submit', 'value': 'save'})
)
),
new Element('td.actions').grab(
new Element('a.delete[href=#]', {'text': 'delete', 'data-id': doc['_id']})
)
).inject(list)
});
if(documents.length > 0)
return el;
}
$(window).addEvent('domready', function(){
var c = $('container');
// Delete
c.addEvents({
// Delete delegate
'click:relay(.delete)': function(e){
(e).stop();
if(!document.location.href.contains('no_confirm') && confirm('Are you sure?')){
var a = this;
new Request.JSON({
'url': api_base + 'database.document.delete',
'data': {
'id': a.get('data-id')
},
'onSuccess': function(){
a.getParent('tr').destroy();
}
}).send();
}
},
// Form submit
'submit:relay(form)': function(e){
(e).stop();
var form = this;
new Request.JSON({
'url': api_base + 'database.document.update',
'data': {
'document': form.getElement('textarea').get('value')
},
'onSuccess': function(response){
form.getElement('textarea').set('value', JSON.stringify(response.document, null, 4));
form.getParent('tr').getElement('._rev').set('text', response.document['_rev']);
}
}).send();
}
});
var show_split = document.location.search.split('show='),
show = show_split.length > 1 ? show_split[1] : null;
new Request.JSON({
'url': api_base + 'database.list_documents',
'data': show ? 'show='+show : null,
'method': 'get',
'onSuccess': function(data){
var nav = new Element('ul.nav').grab(
new Element('li').grab(
new Element('a', {
'href': './',
'text': 'All'
})
)
).inject(c, 'before');
Object.each(data, function(documents, name){
if(documents.length > 0)
new Element('li').grab(
new Element('a', {
'href': './?show=' + name,
'text': name
})
).inject(nav)
var list = createList(name, documents);
if(list)
list.inject(c);
})
},
'onFailure': function(){
alert('Something went wrong retrieving all documents')
}
}).send();
})
</script>
<title>Document Manager</title>
</head>
<body class="database">
<h1>Documents</h1>
<div id="container"></div>
</body>
</html>