diff options
Diffstat (limited to 'web/client.js')
-rw-r--r-- | web/client.js | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/web/client.js b/web/client.js new file mode 100644 index 0000000..f8b6f0f --- /dev/null +++ b/web/client.js @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2012-2013 Kaarle Ritvanen + * See LICENSE file for license details + */ + +$(function() { + $.ajax("/login", { + type: "POST", + data: JSON.stringify({username: "admin", password: "admin"}) + }).done(function(data, status, xhr) { + + var token = xhr.getResponseHeader("X-ACF-Auth-Token"); + + $(window).bind("hashchange", function() { + var path = $.param.fragment(); + + $.ajax("/config" + path, {headers: {"X-ACF-Auth-Token": token}}) + .done(function(data) { + var content = $("#content"); + content.html($("<h1>").text(path)); + + if (["collection", "model", "set"] + .indexOf(data.meta.type) == -1) { + content.append(JSON.stringify(data)); + return; + } + + var table = $("<table>"); + + function render(name, value, meta) { + var row = $("<tr>"); + if (name != null) row.append($("<td>").text(name)); + + var td = $("<td>"); + if (["collection", "model", "reference", "set"] + .indexOf(meta.type) > -1) { + + var link = $("<a>") + .attr({href: "javascript:void(0);"}) + .click(_.bind(function() { + $.bbq.pushState("#" + value); + }, value)); + link.text(value); + td.html(link); + } + else td.text(value); + row.append(td); + + row.append($("<td>").text(JSON.stringify(meta))); + + table.append(row); + } + + if (data.meta.type == "model") + _.each(data.meta.fields, function(field) { + render( + field["ui-name"], data.data[field.name], field + ); + }); + + else _.each(data.data, function(value) { + render(null, value, data.meta.members); + }); + + content.append(table); + }); + }); + + $.bbq.pushState("#/"); + }) +}) |