Consists of functions to typically be used within templates, but also
available to Controllers. This module is available to both as 'h'.
"""
+from datetime import date
+from decimal import Decimal
+
+from pylons import request
from routes import url_for, redirect_to
from webhelpers.html import escape, literal, url_escape
from webhelpers.html.tags import *
from webhelpers.pylonslib import Flash as _Flash
-from decimal import Decimal
def currency(name, value, *args, **kwargs):
if 'class_' not in kwargs:
value = "%0.2f" % (int(value) / 100.)
return text(name, value, *args, **kwargs)
+
+def grab(obj, attr):
+ if obj:
+ return getattr(obj, attr)
+ else:
+ if attr == 'date':
+ return date.today()
+ elif attr in ('spender_id', 'creditor_id', 'debtor_id'):
+ return request.environ['user'].id
+ elif attr == 'amount':
+ return 0
+ else:
+ return ''
+
flash = _Flash()
div.tab {
display: none;
}
-#tab-status {
- display: block;
-}
console.log("ready()");
$('#tabs a').click(function() {
- $('div.tab').hide();
$('#tabs a').removeClass('selected');
$(this).addClass('selected');
- $('#tab-' + $(this).attr('id')).show();
+ $('div.tab').hide();
+
+ /* See if that tab has been rendered to the page. */
+ tabname = '#tab-' + $(this).attr('id');
+ tab = $(tabname);
+ if(tab.children().length < 1) {
+ /* If not, return true so that we actually reload. */
+ tab.load($(this).attr('href') + ' ' + tabname + '> *');
+ }
+ tab.show();
return false;
});
+ $('#tabs a.selected').click();
console.log("ready() done");
});
<link rel="apple-touch-icon" href="/icons/apple-touch.png">
</head>
<body>
+ % for message in h.flash.pop_messages():
+ <div class="flash">${message | n}</div>
+ % endfor
${next.body()}
${h.javascript_link('/js/jquery-1.3.2.js')}
${h.javascript_link('/js/mobile.js')}
</body>
</html>
+<%!
+ from datetime import date
+%>
+
<%def name="title()">BlueChips
% if c.title != '':
:: ${c.title}
${user.name}
% endif
</%def>
+
+<%def name="tabs(selected)">
+ <div id="tabs">
+ % for name in ('status', 'spend', 'transfer'):
+ <%
+ if name == selected:
+ klass = 'selected'
+ else:
+ klass = 'unselected'
+ %>
+ <a id="${name}" class="${klass}" href="${h.url_for(controller=name, action='index', id=None)}">
+ <img src="/icons/${name}.png" alt="">
+ <span>${name.capitalize()}</span>
+ </a>
+ % endfor
+ </div>
+</%def>
+
+<%def name="spendForm()">
+ <div id="tab-spend" class="tab">
+ <%
+ if c.id != '':
+ id = c.id
+ else:
+ id = None
+ %>
+ <form action="${h.url_for(controller='spend', action='update', id=id)}" method="post">
+ ${h.auth_token_hidden_field()}
+ <table class="form">
+ <tr>
+ <th><label for="spender_id">Spender</label></th>
+ <td>${h.select('spender_id', [h.grab(c.expenditure, 'spender_id')], c.users)}</td>
+ </tr>
+ <tr>
+ <th><label for="amount">Amount</label></th>
+ <td>${h.currency('amount', h.grab(c.expenditure, 'amount'), size=8)}</td>
+ </tr>
+ <tr>
+ <th><label for="date">Date</label></th>
+ <td>${h.text('date', h.grab(c.expenditure, 'date').strftime('%m/%d/%Y'), size=16)}</td>
+ </tr>
+ <tr>
+ <th><label for="description">Description</label></th>
+ <td>${h.text('description', h.grab(c.expenditure, 'description'))}</td>
+ </tr>
+ </table>
+
+ <p>Change how an expenditure is split up.</p>
+
+ <table class="form">
+ % for ii, user_row in enumerate(c.users):
+ <%
+ user_id, user = user_row
+ if user.resident:
+ percent = 1
+ else:
+ percent = 0
+ %>
+ <tr>
+ <th><label for="shares-${ii}amount">${user.name}</label></th>
+ <td>
+ ${h.text('shares-%d.amount' % ii, percent)}
+ ${h.hidden('shares-%d.user_id' % ii, user.id)}
+ </td>
+ </tr>
+ % endfor
+ <tr>
+ <td colspan="2">
+ ${h.submit(None, 'Submit', class_="submitbutton")}
+ </td>
+ </tr>
+ </table>
+ </form>
+ </div>
+</%def>
+
+<%def name="transferForm()">
+ <%
+ if c.id != '':
+ id = c.id
+ else:
+ id = None
+ %>
+ <div id="tab-transfer" class="tab">
+ <form action="${h.url_for(controller='transfer', action='update', id=id)}" method="post">
+ ${h.auth_token_hidden_field()}
+ <table class="form">
+ <tr>
+ <th><label for="debtor_id">From</label></th>
+ <td>${h.select('debtor_id', [h.grab(c.transfer, 'debtor_id')], c.users)}</td>
+ </tr>
+ <tr>
+ <th><label for="creditor_id">To</label></th>
+ <td>${h.select('creditor_id', [h.grab(c.transfer, 'creditor_id')], c.users)}</td>
+ </tr>
+ <tr>
+ <th><label for="amount">Amount</label></th>
+ <td>${h.currency('amount', h.grab(c.transfer, 'amount'), size=8)}</td>
+ </tr>
+ <tr>
+ <th><label for="date">Date</label></th>
+ <td>${h.text('date', h.grab(c.transfer, 'date').strftime('%m/%d/%Y'), size=16)}</td>
+ </tr>
+ <tr>
+ <th><label for="description">Description</label></th>
+ <td>${h.text('description', h.grab(c.transfer, 'description'))}</td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <input type="submit" value="Submit" />
+ </td>
+ </tr>
+ </table>
+ </form>
+ </div>
+</%def>
--- /dev/null
+<%inherit file="/mobile/base.mako"/>
+
+${self.tabs('spend')}
+${self.spendForm()}
+<div id="tab-status" class="tab"></div>
+<div id="tab-transfer" class="tab"></div>
<%inherit file="/mobile/base.mako"/>
-<%!
- from datetime import date
-%>
-
-<div id="tabs">
- <a id="status" class="selected" href="#">
- <img src="/icons/dashboard.png" alt="">
- <span>Dashboard</span>
- </a>
- <a id="spend" href="#">
- <img src="/icons/spend.png" alt="">
- <span>Expense</span>
- </a>
- <a id="transfer" href="#">
- <img src="/icons/transfer.png" alt="">
- <span>Transfer</span>
- </a>
-</div>
+${self.tabs('status')}
<div id="tab-status" class="tab">
- % for message in h.flash.pop_messages():
- <div class="flash">${message | n}</div>
- % endfor
-
% if len(c.settle) == 0:
<p>No need! The books are balanced!</p>
% else:
</table>
% endif
</div>
-
-<div id="tab-spend" class="tab">
- <form action="${h.url_for(controller='spend', action='update')}" method="post">
- ${h.auth_token_hidden_field()}
- <table class="form">
- <tr>
- <th><label for="spender_id">Spender</label></th>
- <td>${h.select('spender_id', [request.environ['user'].id], c.users)}</td>
- </tr>
- <tr>
- <th><label for="amount">Amount</label></th>
- <td>${h.currency('amount', 0, size=8)}</td>
- </tr>
- <tr>
- <th><label for="date">Date</label></th>
- <td>${h.text('date', date.today().strftime('%m/%d/%Y'), size=16)}</td>
- </tr>
- <tr>
- <th><label for="description">Description</label></th>
- <td>${h.text('description')}</td>
- </tr>
- </table>
-
- <p>Change how an expenditure is split up.</p>
-
- <table class="form">
- % for ii, user_row in enumerate(c.users):
- <%
- user_id, user = user_row
- if user.resident:
- percent = 1
- else:
- percent = 0
- %>
- <tr>
- <th><label for="shares-${ii}amount">${user.name}</label></th>
- <td>
- ${h.text('shares-%d.amount' % ii, percent)}
- ${h.hidden('shares-%d.user_id' % ii, user.id)}
- </td>
- </tr>
- % endfor
- <tr>
- <td colspan="2">
- ${h.submit(None, 'Submit', class_="submitbutton")}
- </td>
- </tr>
- </table>
- </form>
-</div>
-
-<div id="tab-transfer" class="tab">
- <form action="${h.url_for(controller='transfer', action='update')}" method="post">
- ${h.auth_token_hidden_field()}
- <table class="form">
- <tr>
- <th><label for="debtor_id">From</label></th>
- <td>${h.select('debtor_id', request.environ['user'].id, c.users)}</td>
- </tr>
- <tr>
- <th><label for="creditor_id">To</label></th>
- <td>${h.select('creditor_id', None, c.users)}</td>
- </tr>
- <tr>
- <th><label for="amount">Amount</label></th>
- <td>${h.currency('amount', 0, size=8)}</td>
- </tr>
- <tr>
- <th><label for="date">Date</label></th>
- <td>${h.text('date', date.today().strftime('%m/%d/%Y'), size=16)}</td>
- </tr>
- <tr>
- <th><label for="description">Description</label></th>
- <td>${h.text('description')}</td>
- </tr>
- <tr>
- <td colspan="2">
- <input type="submit" value="Submit" />
- </td>
- </tr>
- </table>
- </form>
-</div>
+${self.spendForm()}
+${self.transferForm()}
--- /dev/null
+<%inherit file="/mobile/base.mako"/>
+
+${self.tabs('transfer')}
+${self.transferForm()}
+<div id="tab-status" class="tab"></div>
+<div id="tab-spend" class="tab"></div>