# # # patch "www/admin-resources.js" # from [dc9e1b0a799f0c4a8930df2588b4a551f032d248] # to [de96b33ae298c6bba164631c769e420b658fbcda] # # patch "www/admin-resources.php" # from [09655eae399ed384eccdd0a3ef9b27c3590a5863] # to [cc9f71016f146498bc68832f99a8bbb8c88fe426] # # patch "www/common-resource.php" # from [b3df71de591444a05083859d8b5113fd75f50f8c] # to [0d25e63b6c4d0ef94dd338a62f91f0e9fc576170] # # patch "www/common.php" # from [bccf61037f60c547d1dc39bb1f51fa2df032aa59] # to [4dfe605e35ec8b2f139630192a65b7c5fe7a4a17] # # patch "www/sidebar.php" # from [2cef1e1ba9df4797a7609bd19f02dc61a0517167] # to [18af9f4ba2b6922b1fc1b8e4445e06624c783be0] # ============================================================ --- www/admin-resources.js dc9e1b0a799f0c4a8930df2588b4a551f032d248 +++ www/admin-resources.js de96b33ae298c6bba164631c769e420b658fbcda @@ -1,54 +1,148 @@ ctrl = '../../admin-resources_backend.php'; -row_display = function (row) { - return TR(null, map(partial(TD, null), row)); +var make_item_ = {}; +var i = 0; + +close = function (which) { + var lst = getElement("rsclist").childNodes; + for(var i = 0; i < lst.length; ++i) { + var num = getNodeAttribute(lst[i],"name"); + if (num == "rsc_num_" + which) { + var closetxt = lst[i].firstChild.firstChild.nodeValue; + if (closetxt == "[Delete]") { + swapDOM(lst[i], P({}, "Deleted item")); + } else { + removeElement(lst[i]); + } + return; + } + } } -make_row = function (row) { - return TR({"class":"resourcerow"}, - TD(null, INPUT({"type": "text", "size": 30, "name": "rscname[]", "value": row.name})), - TD(null, INPUT({"type": "text", "size": 40, "name": "rscurl[]", "value": row.url})) + +make_item_.link = function (row) { + var closer = "[Delete]"; + if (isNull(row.name)) { + closer = "[Cancel]"; + row.name = ""; + } + if (isNull(row.data)) { + row.data = ""; + } + ++i; + return DIV({"type":"link","class":"record","name":"rsc_num_"+i}, + SPAN({"class":"jslink","onclick":"close("+i+");","style":"float: right"}, closer), + "Type: link", BR(), + "Name: ", + INPUT({"type":"text","size":30,"name":"name","value":row.name}), BR(), + "URL: ", + INPUT({"type":"text","size":40,"name":"url","value":row.data}) ); } -addrow = function() { - appendChildNodes("rtblbody", TR({"class":"resourcerow"}, - TD(null, INPUT({"type": "text", "size": 30, "name": "rscname[]"})), - TD(null, INPUT({"type": "text", "size": 40, "name": "rscurl[]"})) - )); + +make_item_.irc = function (row) { + var data = {}; + if (!isNull(row.data)) { + data = evalJSON(row.data); + } + var closer = "[Delete]"; + if (isNull(row.name)) { + closer = "[Cancel]"; + row.name = ""; + } + if (isNull(data.host)) { + data.host = ""; + } + if (isNull(data.channel)) { + data.channel = ""; + } + if (isNull(data.logurl)) { + data.logurl = ""; + } + ++i; + return DIV({"type":"irc","class":"record","name":"rsc_num_"+i}, + SPAN({"class":"jslink","onclick":"close("+i+");","style":"float: right"}, closer), + "Type: IRC", BR(), + "Name: ", + INPUT({"type":"text","size":30,"name":"name","value":row.name}), BR(), + "Server: ", + INPUT({"type":"text","size":30,"name":"server","value":data.host}), BR(), + "Channel: ", + INPUT({"type":"text","size":30,"name":"channel","value":data.channel}), BR(), + "Log URL: ", + INPUT({"type":"text","size":40,"name":"logurl","value":data.logurl}) + ); } + + +make_item = function (row) { + if (row.type == "unknown") { + return P({}, "Unknown item"); + } + try { + return make_item_[row.type](row); + } catch (e) { + return P({}, "Error: could not display item of type '" + row.type + "': " + e); + } +} + +addrow = function (type) { + appendChildNodes("rsclist", make_item_[type]({})); +} + set_display = function(data) { var labels = []; - replaceChildNodes("resourcediv", TABLE({"id":"rtbl","class":"hilighttable"}, - THEAD(null, row_display(["Name", "URL"])), - TFOOT(null, row_display(["",""])), - TBODY({"id":"rtblbody"}, map(make_row, data))) + replaceChildNodes("resourcediv", + DIV({"id":"rsclist"}, map(make_item, data)) ); - addrow(); } -read_line = function(row) { - var out = {}; + +var read_line_ = {}; + +read_line_.link = function (row) { + var out = {"type":"link"}; for(var i = 0; i < row.childNodes.length; ++i) { - var cur = row.childNodes[i].firstChild; + var cur = row.childNodes[i]; var nm = getNodeAttribute(cur,"name"); - nm = nm.replace(/rsc(.*)\[\]/, "$1"); - out[nm] = cur.value; + if (nm == "name") {out.name = cur.value;} + if (nm == "url") {out.data = cur.value;} } return out; } +read_line_.irc = function (row) { + var out = {"type":"irc"}; + var data = {}; + for(var i = 0; i < row.childNodes.length; ++i) { + var cur = row.childNodes[i]; + var nm = getNodeAttribute(cur,"name"); + if (nm == "name") {out.name = cur.value;} + if (nm == "server") {data.host = cur.value;} + if (nm == "channel") {data.channel = cur.value;} + if (nm == "logurl") {data.logurl = cur.value;} + } + out.data = serializeJSON(data); + return out; +} +read_line = function(row) { + var type = getNodeAttribute(row,"type"); + if (isNull(type) || type == "unknown") { return null; } + return read_line_[type](row); +} + update = function () { status("Updating..."); var args = {'project':project}; args.action = "chresources"; - var lst = getElement("rtblbody").childNodes; - var maints = []; + var lst = getElement("rsclist").childNodes; + var resources = []; for(var i = 0; i < lst.length; ++i) { var line = read_line(lst[i]); - if (line.username != "") { - maints.push(line); + if (!isNull(line)) { + resources.push(line); } } - args.newmaint = maints; + args.newresources = resources; call_server(ctrl, args, "chresources", function (data) { set_display(data.resources); clearstatus(); ============================================================ --- www/admin-resources.php 09655eae399ed384eccdd0a3ef9b27c3590a5863 +++ www/admin-resources.php cc9f71016f146498bc68832f99a8bbb8c88fe426 @@ -1,6 +1,7 @@
-Project resources:
+Project resources: (no changes will be saved until you click update)

- + +
============================================================ --- www/common-resource.php b3df71de591444a05083859d8b5113fd75f50f8c +++ www/common-resource.php 0d25e63b6c4d0ef94dd338a62f91f0e9fc576170 @@ -26,17 +26,17 @@ function get_linkstr($res) { global $json; - $linkpat = "$s"; + $linkpat = "%s"; if ($res['type'] == "link") { return sprintf($linkpat, $res['data'], $res['name']); } elseif ($res['type'] == "irc") { $dat = $json->decode($res['data']); - $url = "irc://" + $dat.host + "/" + $dat.channel; + $url = sprintf("irc://%s/%s", $dat->host, $dat->channel); $link1 = sprintf($linkpat, $url, $res['name']); - $link2 = sprintf($linkpat, $data.logurl, logs); - print "$link1 ($link2)"; + $link2 = sprintf($linkpat, $dat->logurl, logs); + return "$link1 ($link2)"; } elseif ($res['type'] == "unknown") { - print $res['name'] + ": " + $res['data']; + return $res['name'] + ": " + $res['data']; } } ?> ============================================================ --- www/common.php bccf61037f60c547d1dc39bb1f51fa2df032aa59 +++ www/common.php 4dfe605e35ec8b2f139630192a65b7c5fe7a4a17 @@ -48,7 +48,7 @@ } reset($splitconf); -include("JSON.php"); +include_once("JSON.php"); $json = new Services_JSON(); function mktok($username, $shapass, $t) { ============================================================ --- www/sidebar.php 2cef1e1ba9df4797a7609bd19f02dc61a0517167 +++ www/sidebar.php 18af9f4ba2b6922b1fc1b8e4445e06624c783be0 @@ -44,7 +44,7 @@ print "
Project resources:\n\n"; }