summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpixel <pixel>2008-01-15 16:11:27 +0000
committerpixel <pixel>2008-01-15 16:11:27 +0000
commit35b1e76b1684b877b34fdb2cb88378b299c9a515 (patch)
treec3a9c84ef6b1f8b01ac612ecff746cdf8c52370b
parentdc11516b21fedba11aebb5211fc53ad6ce783aaa (diff)
Adding ajaxlib.
-rw-r--r--lib/ajaxlib.lua134
1 files changed, 134 insertions, 0 deletions
diff --git a/lib/ajaxlib.lua b/lib/ajaxlib.lua
new file mode 100644
index 0000000..b03e71f
--- /dev/null
+++ b/lib/ajaxlib.lua
@@ -0,0 +1,134 @@
+--[[
+
+/*
+ * Baltisot
+ * Copyright (C) 1999-2008 Nicolas "Pixel" Noble
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/* $Id: ajaxlib.lua,v 1.1 2008-01-15 16:11:27 pixel Exp $ */
+
+]]--
+
+local ajaxlib_javascript
+
+local ajax_replacements = {
+ { "&", "&#38;" },
+ { "|", "&#124;" },
+ { "=", "&#61;" },
+}
+
+function ajax_escape(str)
+ return generic_escape(str, ajax_replacements)
+end
+
+function ajax_dump_table(t, out)
+ local k, v, vk, vv
+
+ if type(t) ~= "table" then
+ return
+ end
+
+ for k, v in pairs(t) do
+ out:write(k)
+ for vk, vv in pairs(v) do
+ out:write("|" .. ajax_escape(vk) .. "=" .. ajax_escape(vv))
+ end
+ out:write("\n")
+ end
+end
+
+function ajax_write_javascript(out)
+ out:write(ajaxlib_javascript)
+end
+
+ajaxlib_javascript = [[
+var loading = 0;
+
+function ajax_loading(v)
+{
+ var obj = getObjById("ajax_loader")
+
+ if (obj) {
+ obj.style.visibility = v ? "visible" : "hidden";
+ }
+}
+
+function ajax_unescape(str)
+{
+ return str.replace(/&#(\d+);/g, function() {
+ return String.fromCharCode(RegExp.$1);
+ });
+}
+
+function ajax_hub(ajax_request, callback)
+{
+ if (ajax_request.readyState != 4)
+ return;
+
+ var res = ajax_request.responseText;
+
+ ajax_request = null;
+ callback(res);
+ loading--;
+ ajax_loading(loading != 0);
+}
+
+function ajax_create(url, callback)
+{
+ var ajax_request;
+
+ loading++;
+ ajax_loading(true);
+
+ ajax_request = new XMLHttpRequest();
+ ajax_request.onreadystatechange = function() { ajax_hub(ajax_request, callback) };
+ ajax_request.open("GET", url, true);
+ ajax_request.send(null);
+}
+
+function ajax_do_get_data(res)
+{
+ var lines;
+ var t = new Array();
+ var c;
+ var pair;
+ var i, j, k, res;
+
+ lines = res.split('\n');
+
+ for (i = 0, c = 0; i < lines.length; i++) {
+ if (lines[i] == "")
+ continue;
+ if (lines[i][0] == "#")
+ continue;
+ t[c++] = lines[i].split('|');
+ }
+
+ res = {}
+
+ for (i = 0; i < t.length; i++) {
+ k = t[i][0];
+ res[k] = {};
+ for (j = 1; j < t[i].length; j++) {
+ pair = t[i][j].split("=");
+ res[k][ajax_unescape(pair[0])] = ajax_unescape(pair[1]);
+ }
+ }
+
+ return res;
+}
+]]