Annotate

mod_webpresence/mod_webpresence.lua @ 1054:432dc4056114

mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
author Vadim Misbakh-Soloviov <mva@mva.name>
date Fri, 07 Jun 2013 06:42:50 +0700
parent 847:1c9a3454eb43
child 1495:9a1b3f0d0939
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
643
28b0a8cd950a mod_webpresence: Update to timber, remove squish hack (icons are now loaded relative to the module file)
Matthew Wild <mwild1@gmail.com>
parents: 4
diff changeset
1 module:depends("http");
28b0a8cd950a mod_webpresence: Update to timber, remove squish hack (icons are now loaded relative to the module file)
Matthew Wild <mwild1@gmail.com>
parents: 4
diff changeset
2
4
63080b8973ee mod_webpresence: Initial commit
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3 local jid_split = require "util.jid".prepped_split;
782
2d83708ea901 mod_webpresence: fixed text notation, added html, added status message output
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 779
diff changeset
4 local b64 = require "util.encodings".base64.encode;
2d83708ea901 mod_webpresence: fixed text notation, added html, added status message output
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 779
diff changeset
5 local sha1 = require "util.hashes".sha1;
1054
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
6 local stanza = require "util.stanza".stanza;
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
7 local json = require "util.json".encode_ordered;
4
63080b8973ee mod_webpresence: Initial commit
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8
779
36044b77b6c2 mod_webpresence: Added possibility to get status as text
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 643
diff changeset
9 local function require_resource(name)
1054
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
10 local icon_path = module:get_option_string("presence_icons", "icons");
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
11 local f, err = module:load_resource(icon_path.."/"..name);
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
12 if f then
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
13 return f:read("*a");
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
14 end
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
15 module:log("warn", "Failed to open image file %s", icon_path..name);
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
16 return "";
4
63080b8973ee mod_webpresence: Initial commit
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
17 end
63080b8973ee mod_webpresence: Initial commit
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
18
779
36044b77b6c2 mod_webpresence: Added possibility to get status as text
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 643
diff changeset
19 local statuses = { online = {}, away = {}, xa = {}, dnd = {}, chat = {}, offline = {} };
4
63080b8973ee mod_webpresence: Initial commit
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
20
643
28b0a8cd950a mod_webpresence: Update to timber, remove squish hack (icons are now loaded relative to the module file)
Matthew Wild <mwild1@gmail.com>
parents: 4
diff changeset
21 local function handle_request(event, path)
1054
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
22 local status, message;
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
23 local jid, type = path:match("([^/]+)/?(.*)$");
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
24 if jid then
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
25 local user, host = jid_split(jid);
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
26 if host and not user then
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
27 user, host = host, event.request.headers.host;
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
28 if host then host = host:gsub(":%d+$", ""); end
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
29 end
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
30 if user and host then
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
31 local user_sessions = hosts[host] and hosts[host].sessions[user];
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
32 if user_sessions then
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
33 status = user_sessions.top_resources[1];
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
34 if status and status.presence then
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
35 message = status.presence:child_with_name("status");
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
36 status = status.presence:child_with_name("show");
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
37 if not status then
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
38 status = "online";
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
39 else
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
40 status = status:get_text();
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
41 end
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
42 if message then
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
43 message = message:get_text();
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
44 end
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
45 end
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
46 end
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
47 end
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
48 end
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
49 status = status or "offline";
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
50 if type == "" then type = "image" end;
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
51
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
52 statuses[status].image = function()
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
53 return { status_code = 200, headers = { content_type = "image/png" },
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
54 body = require_resource("status_"..status..".png")
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
55 };
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
56 end;
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
57 statuses[status].html = function()
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
58 local jid_hash = sha1(jid, true);
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
59 return { status_code = 200, headers = { content_type = "text/html" },
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
60 body = [[<!DOCTYPE html>]]..
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
61 tostring(
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
62 stanza("html")
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
63 :tag("head")
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
64 :tag("title"):text("XMPP Status Page for "..jid):up():up()
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
65 :tag("body")
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
66 :tag("div", { id = jid_hash.."_status", class = "xmpp_status" })
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
67 :tag("img", { id = jid_hash.."_img", class = "xmpp_status_image xmpp_status_"..status,
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
68 src = "data:image/png;base64,"..b64(require_resource("status_"..status..".png")) }):up()
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
69 :tag("span", { id = jid_hash.."_status_name", class = "xmpp_status_name" })
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
70 :text("\194\160"..status):up()
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
71 :tag("span", { id = jid_hash.."_status_message", class = "xmpp_status_message" })
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
72 :text(message and "\194\160"..message.."" or "")
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
73 )
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
74 };
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
75 end;
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
76 statuses[status].text = function()
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
77 return { status_code = 200, headers = { content_type = "text/plain" },
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
78 body = status
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
79 };
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
80 end;
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
81 statuses[status].message = function()
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
82 return { status_code = 200, headers = { content_type = "text/plain" },
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
83 body = (message and message or "")
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
84 };
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
85 end;
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
86 statuses[status].json = function()
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
87 return { status_code = 200, headers = { content_type = "application/json" },
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
88 body = json({
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
89 jid = jid,
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
90 show = status,
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
91 status = (message and message or "null")
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
92 })
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
93 };
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
94 end;
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
95 statuses[status].xml = function()
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
96 return { status_code = 200, headers = { content_type = "application/xml" },
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
97 body = [[<?xml version="1.0" encoding="utf-8"?>]]..
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
98 tostring(
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
99 stanza("result")
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
100 :tag("jid"):text(jid):up()
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
101 :tag("show"):text(status):up()
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
102 :tag("status"):text(message)
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
103 )
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
104 };
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
105 end
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
106 return statuses[status][type]();
4
63080b8973ee mod_webpresence: Initial commit
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
107 end
63080b8973ee mod_webpresence: Initial commit
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
108
643
28b0a8cd950a mod_webpresence: Update to timber, remove squish hack (icons are now loaded relative to the module file)
Matthew Wild <mwild1@gmail.com>
parents: 4
diff changeset
109 module:provides("http", {
1054
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
110 default_path = "/status";
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
111 route = {
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
112 ["GET /*"] = handle_request;
432dc4056114 mod_webpresence: added /xml and /json; Rewritten /html; A bit of refactoring;
Vadim Misbakh-Soloviov <mva@mva.name>
parents: 847
diff changeset
113 };
643
28b0a8cd950a mod_webpresence: Update to timber, remove squish hack (icons are now loaded relative to the module file)
Matthew Wild <mwild1@gmail.com>
parents: 4
diff changeset
114 });