mirror of
https://github.com/simonmichael/hledger.git
synced 2024-09-20 02:37:12 +03:00
ec51d28839
- the web UI has been streamlined; edit form, raw & entries views dropped - we now remember whether sidebar is open or closed - better help dialog - keyboard shortcuts are now available - better add form - more bootstrap styling - static file cleanups - report filtering fixes - upgrade jquery to 2.1.1, bootstrap to 3.1.1, drop select2, add typeahead, cookie, hotkeys - clarify debug helpers a little - refactoring
154 lines
5.1 KiB
JavaScript
154 lines
5.1 KiB
JavaScript
/* hledger web ui javascript */
|
|
/* depends on jquery etc. */
|
|
|
|
// /* show/hide things based on locally-saved state */
|
|
// happens too late with large main content in chrome, visible glitch
|
|
// if (localStorage.getItem('sidebarVisible') == "false")
|
|
// $('#sidebar').hide();
|
|
// /* or request parameters */
|
|
// if ($.url.param('sidebar')=='' || $.url.param('sidebar')=='0')
|
|
// $('#sidebar').hide();
|
|
// else if ($.url.param('sidebar')=='1')
|
|
// $('#sidebar').show();
|
|
|
|
if ($.url.param('add')) {
|
|
$('#addform').collapse('show');
|
|
$('#addform input[name=description]').focus();
|
|
}
|
|
|
|
$(document).ready(function() {
|
|
|
|
/* sidebar account hover handlers */
|
|
$('#sidebar td a').mouseenter(function(){ $(this).parent().addClass('mouseover'); });
|
|
$('#sidebar td').mouseleave(function(){ $(this).removeClass('mouseover'); });
|
|
|
|
/* keyboard shortcuts */
|
|
$(document).bind('keydown', 'shift+/', function(){ $('#searchhelpmodal').modal('toggle'); return false; });
|
|
$(document).bind('keydown', 'h', function(){ $('#searchhelpmodal').modal('toggle'); return false; });
|
|
$(document).bind('keydown', 'j', function(){ location.href = '/journal'; return false; });
|
|
$(document).bind('keydown', 's', function(){ sidebarToggle(); return false; });
|
|
$(document).bind('keydown', 'a', function(){ addformFocus(); return false; });
|
|
$('#addform input,#addform button,#addformlink').bind('keydown', 'esc', addformCancel);
|
|
$(document).bind('keydown', '/', function(){ $('#searchform input').focus(); return false; });
|
|
$('#addform input,#addform button,#addformlink').bind('keydown', 'ctrl+shift+=', addformAddPosting);
|
|
$('#addform input,#addform button,#addformlink').bind('keydown', 'ctrl+=', addformAddPosting);
|
|
$('#addform input,#addform button,#addformlink').bind('keydown', 'ctrl+-', addformDeletePosting);
|
|
|
|
});
|
|
|
|
function sidebarToggle() {
|
|
console.log('sidebarToggle');
|
|
var visible = $('#sidebar').is(':visible');
|
|
console.log('sidebar visibility was',visible);
|
|
// if opening sidebar, start an ajax fetch of its content
|
|
if (!visible) {
|
|
//console.log('getting sidebar content');
|
|
$.get("sidebar"
|
|
,null
|
|
,function(data) {
|
|
//console.log( "success" );
|
|
$("#sidebar-body" ).html(data);
|
|
})
|
|
.done(function() {
|
|
//console.log( "success 2" );
|
|
})
|
|
.fail(function() {
|
|
//console.log( "error" );
|
|
});
|
|
}
|
|
// localStorage.setItem('sidebarVisible', !visible);
|
|
// set a cookie to communicate the new sidebar state to the server
|
|
$.cookie('showsidebar', visible ? '0' : '1');
|
|
// horizontally slide the sidebar in or out
|
|
// how to make it smooth, without delayed content pop-in ?
|
|
//$('#sidebar').animate({'width': 'toggle'});
|
|
//$('#sidebar').animate({'width': visible ? 'hide' : '+=20m'});
|
|
//$('#sidebar-spacer').width(200);
|
|
$('#sidebar').animate({'width': visible ? 'hide' : 'show'});
|
|
}
|
|
|
|
function addformToggle() {
|
|
if (location.pathname != '/journal') {
|
|
location.href = '/journal?add=1';
|
|
}
|
|
else {
|
|
$('#addform').collapse('toggle');
|
|
$('#addform input[name=description]').focus();
|
|
}
|
|
}
|
|
|
|
function addformFocus() {
|
|
if (location.pathname != '/journal') {
|
|
location.href = '/journal?add=1';
|
|
}
|
|
else {
|
|
$('#addform').collapse('show');
|
|
$('#addform input[name=description]').focus();
|
|
}
|
|
}
|
|
|
|
function addformCancel() {
|
|
$('#addform input[type=text]').typeahead('val','');
|
|
$('#addform')
|
|
.each( function(){ this.reset();} )
|
|
.collapse('hide');
|
|
// try to keep keybindings working in safari
|
|
//$('#addformlink').focus();
|
|
}
|
|
|
|
function addformAddPosting() {
|
|
var rownum = $('#addform tr.posting').length + 1;
|
|
// XXX duplicates markup in Common.hs
|
|
// duplicate last row
|
|
$('#addform > table').append($('#addform > table tr:last').clone());
|
|
// fix up second-last row
|
|
$('#addform > table > tr.lastrow:first > td:last').html('');
|
|
$('#addform > table > tr.lastrow:first').removeClass('lastrow');
|
|
|
|
// fix up last row
|
|
$('#addform table').append($('#addform table tr:last').clone());
|
|
// '<tr class="posting">' +
|
|
// '<td style="padding-left:2em;">' +
|
|
// '<input id="account'+rownum+'" class="form-control input-lg" style="width:100%;" type="text"' +
|
|
// ' name=account'+rownum+'" placeholder="Account '+rownum+'">'
|
|
// );
|
|
|
|
// $('#addbtncell').appendTo($('#addform table tr:last'))
|
|
// );
|
|
}
|
|
|
|
function addformDeletePosting() {
|
|
}
|
|
|
|
function editformJournalSelect(ev) {
|
|
var textareas = $('textarea', $('form#editform'));
|
|
for (i=0; i<textareas.length; i++) {
|
|
textareas[i].style.display = 'none';
|
|
textareas[i].disabled = true;
|
|
}
|
|
var targ = getTarget(ev);
|
|
if (targ.value) {
|
|
var journalid = targ.value+'_textarea';
|
|
var textarea = document.getElementById(journalid);
|
|
}
|
|
else {
|
|
var textarea = textareas[0];
|
|
}
|
|
textarea.style.display = 'block';
|
|
textarea.disabled = false;
|
|
return true;
|
|
}
|
|
|
|
/*
|
|
// Get the current event's target in a robust way.
|
|
// http://www.quirksmode.org/js/events_properties.html
|
|
function getTarget(ev) {
|
|
var targ;
|
|
if (!ev) var ev = window.event;
|
|
if (ev.target) targ = ev.target;
|
|
else if (ev.srcElement) targ = ev.srcElement;
|
|
if (targ.nodeType == 3) targ = targ.parentNode;
|
|
return targ;
|
|
}
|
|
*/
|