3
3
window[chatServer.jsNamespace()].adapter = {
4
4
loadTheme : function() {
5
chatServer.setCaseInsensitiveFS();
5
6
var chat = window[chatServer.jsNamespace()];
6
7
//chat.console("DEBUG: loading " + chatServer.themeId());
7
8
var resources = ["Template.html", "FileTransferRequest.html",
8
9
"Footer.html", "Header.html", "Status.html", "Topic.html", "Content.html",
9
10
"Incoming/Content.html", "Incoming/NextContent.html",
10
"Incoming/Context.html", "Incoming/NextContext.html",
11
"Incoming/Context.html", "Incoming/NextContext.html",
11
12
"Outgoing/Content.html", "Outgoing/NextContent.html",
12
13
"Outgoing/Context.html", "Outgoing/NextContext.html"];
13
14
for (var i=0; i<resources.length; i++) {
14
var content = chatServer.getFileContents("Contents/Resources/" + resources[i]) ||
15
chatServer.getFileContents("Contents/Resources/" + resources[i].toLowerCase());
15
var content = chatServer.getFileContents("Contents/Resources/" + resources[i]);
16
16
if (content.length) {
17
17
chatServer.toCache(resources[i], content);
97
97
var chat = window[chatServer.jsNamespace()];
98
98
var server = window.chatServer;
99
99
var session = null;
100
var dateFormat = "hh:mm";
100
var dateFormat = "%H:%M";
102
102
var proxyEl = document.createElement("div");
104
104
function TemplateVar(name, param) {
105
105
this.name = name;
106
106
this.param = param
109
109
TemplateVar.prototype = {
110
110
toString : function() {
111
111
//chat.console("DEBUG: TemplateVar.prototype.toString " + session);
131
131
function TemplateTimeVar(name, param) {
132
132
this.name = name;
134
var i, r = {y:'yy',Y:'yyyy',m:'MM',d:'dd',H:'hh',M:'mm',S:'ss'};
135
var m = param.split(/%([a-zA-Z]+)/)
136
for (i=0; i<m.length; i++) {
137
m[i] = r[m[i]] || m[i];
139
this.format = m.join("");
141
this.format = dateFormat
133
this.param = param || dateFormat;
145
136
TemplateTimeVar.prototype.toString = function() {
146
//chat.console("DEBUG: TemplateTimeVar.prototype.toString");
147
137
return cdata[this.name] instanceof Date?
148
server.formatDate(cdata[this.name], this.format) :
149
(cdata[this.name] ? cdata[this.name] : "");
138
server.strftime(cdata[this.name], this.param) :
139
server.strftime(new Date(), this.param);
152
142
function Template(raw) {
153
var splitted = raw.split(/(%[\w]+(?:\{[\w:%]+\})?%)/), i;
143
//chat.console("parsing '"+raw+"'");
144
var splitted = raw.split(/(%[\w]+(?:\{[^\{]+\})?%)/), i;
156
147
for (i = 0; i < splitted.length; i++) {
157
var m = splitted[i].match(/%([\w]+)(?:\{([\w:%]+)\})?%/);
148
var m = splitted[i].match(/%([\w]+)(?:\{([^\{]+)\})?%/);
150
//chat.console("found var '"+m[1]+"'");
159
151
this.parts.push(m[1] in tvConstructors
160
152
? new tvConstructors[m[1]](m[1], m[2])
161
153
: new TemplateVar(m[1], m[2]));
174
166
//chat.console("prepare Template.prototype.toString2");
175
167
return proxyEl.innerHTML;
178
170
// Template variable constructors
179
171
var tvConstructors = {
180
172
time : TemplateTimeVar,
181
173
timeOpened : TemplateTimeVar
184
176
function psiOption(name) {
185
177
return eval("[" + server.psiOption(name) + "][0]")
189
181
getHtml : function() {
190
182
session = window.chatSession; // global session because Template needs it
192
184
//chat.console("prepare html");
193
185
var html = server.cache("html");
194
186
//chat.console("cached Template.html: " + html);
232
224
html = html.replace(/<head>/i, '<head><style type="text/css" media="screen,print">' +
233
225
"body { background-color:#"+ip.DefaultBackgroundColor+" }</style>");
237
229
if (ip.DefaultFontFamily) {
238
230
styles.push("font-family:"+ip.DefaultFontFamily);
240
232
if (ip.DefaultFontSize) {
241
233
styles.push("font-size:"+ip.DefaultFontSize+"pt");
244
236
html = html.replace("==bodyBackground==", styles.join(";"));
245
237
//chat.console("prepare html: " + html);
265
257
if (data.mtype != "message") {
266
258
prevGrouppingData = null;
260
data.messageClasses = cdata.local?"outgoing" : "incoming";
261
data.messageClasses += cdata.alert?" mention" : "";
262
data.messageClasses += cdata.spooled?" history" : "";
263
data.messageClasses += cdata.mtype == "system"?" event" : "";
264
// TODO consecutive, autoreply, focus, firstFocus, %status%
268
265
switch (data.mtype) {
267
data.messageClasses += " message";
270
268
data.nextOfGroup = groupping && !!(prevGrouppingData &&
271
269
(prevGrouppingData.type == cdata.type) &&
272
270
(prevGrouppingData.mtype == cdata.mtype) &&
273
271
(prevGrouppingData.userid == cdata.userid) &&
274
272
(prevGrouppingData.emote == cdata.emote) &&
275
273
(prevGrouppingData.local == cdata.local));
274
data.messageClasses += data.nextOfGroup? " consecutive" : "";
277
276
if (data.nextOfGroup) {
278
277
template = data.local?templates.outgoingNextContent:templates.incomingNextContent;
293
293
data["message"] = data["date"];
294
294
data["time"] = " "; //fixes some themes =)
295
295
template = templates.status;
296
data.messageClasses += " event date_separator";
297
298
case "subject": //its better to init with proper templates on start than do comparision like below
298
299
template = templates.status;
332
335
chat.util.showCriticalError("APPEND ERROR: " + e + " \nline: " + e.line)
337
340
var templates = {}
338
341
var tcList = ["Status.html", "Content.html",
339
342
"Incoming/Content.html", "Incoming/NextContent.html",
340
"Incoming/Context.html", "Incoming/NextContext.html",
343
"Incoming/Context.html", "Incoming/NextContext.html",
341
344
"Outgoing/Content.html", "Outgoing/NextContent.html",
342
345
"Outgoing/Context.html", "Outgoing/NextContext.html"];