[customer login] [minor] commonified listing of orders, invoices, shipments, tickets and messages
diff --git a/website/templates/html/transactions.html b/website/templates/html/transactions.html
new file mode 100644
index 0000000..1e61124
--- /dev/null
+++ b/website/templates/html/transactions.html
@@ -0,0 +1,59 @@
+{% extends "app/website/templates/html/page.html" %}
+
+{% block content -%}
+<div class="col-md-12">
+    <ul class="breadcrumb">
+    	<li><a href="index">Home</a></li>
+    	<li><a href="account">My Account</a></li>
+    	<li class="active"><i class="{{ icon }} icon-fixed-width"></i> {{ title }}</li>
+    </ul>
+	<div class="list-group transaction-list">
+		<div class="progress progress-striped active">
+			<div class="progress-bar progress-bar-info" style="width: 100%;"></div>
+		</div>
+	</div>
+	<div class="text-center">
+		<button class="btn btn-default btn-show-more hide">More</button>
+	</div>
+</div>
+{%- endblock %}
+
+{% block javascript -%}
+$(document).ready(function() {
+	window.start = 0;
+	window.$list = $(".transaction-list");
+	window.$show_more = $(".btn-show-more").on("click", function() { get_transactions(this); })
+	
+	get_transactions();
+});
+
+var get_transactions = function(btn) {
+	wn.call({
+		method: "{{ method }}",
+		args: { start: start },
+		btn: btn,
+		callback: function(r) {
+			$list.find(".progress").remove();
+			$show_more.toggleClass("hide", !(r.message && r.message.length===20));
+		
+			if(!(r.message && r.message.length)) {
+				console.log("empty");
+				if(!$list.html().trim()) {
+					$list.html("<div class='alert alert-warning'>\
+						{{ empty_list_message }}</div>");
+				}
+				return;
+			}
+		
+			start += r.message.length;
+		
+			$.each(r.message, function(i, doc) {
+				render(doc);
+			});
+		}
+	})
+};
+
+// var render = function(doc) { };
+
+{% endblock %}
\ No newline at end of file