annotate pidgin/themes/Template.html @ 32438:f789627c4f0d

Update Template.html from Adium's hg repo.
author Elliott Sales de Andrade <qulogic@pidgin.im>
date Wed, 04 Jan 2012 00:44:36 +0000
parents 8fb1124b2794
children 1c0d9e817dcc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
32303
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
2 <html>
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
3 <head>
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
4 <meta http-equiv="content-type" content="text/html; charset=utf-8" />
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
5 <base href="%@">
32438
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
6 <script type="text/javascript" defer="defer">
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
7 // NOTE:
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
8 // Any percent signs in this file must be escaped!
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
9 // Use two escape signs (%%) to display it, this is passed through a format call!
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
10
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
11 function appendHTML(html) {
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
12 var node = document.getElementById("Chat");
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
13 var range = document.createRange();
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
14 range.selectNode(node);
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
15 var documentFragment = range.createContextualFragment(html);
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
16 node.appendChild(documentFragment);
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
17 }
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
18
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
19 // a coalesced HTML object buffers and outputs DOM objects en masse.
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
20 // saves A LOT of CSS recalculation time when loading many messages.
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
21 // (ex. a long twitter timeline)
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
22 function CoalescedHTML() {
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
23 var self = this;
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
24 this.fragment = document.createDocumentFragment();
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
25 this.timeoutID = 0;
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
26 this.coalesceRounds = 0;
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
27 this.isCoalescing = false;
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
28 this.isConsecutive = undefined;
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
29 this.shouldScroll = undefined;
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
30
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
31 var appendElement = function (elem) {
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
32 document.getElementById("Chat").appendChild(elem);
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
33 };
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
34
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
35 function outputHTML() {
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
36 var insert = document.getElementById("insert");
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
37 if(!!insert && self.isConsecutive) {
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
38 insert.parentNode.replaceChild(self.fragment, insert);
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
39 } else {
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
40 if(insert)
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
41 insert.parentNode.removeChild(insert);
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
42 // insert the documentFragment into the live DOM
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
43 appendElement(self.fragment);
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
44 }
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
45 alignChat(self.shouldScroll);
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
46
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
47 // reset state to empty/non-coalescing
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
48 self.shouldScroll = undefined;
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
49 self.isConsecutive = undefined;
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
50 self.isCoalescing = false;
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
51 self.coalesceRounds = 0;
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
52 }
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
53
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
54 // creates and returns a new documentFragment, containing all content nodes
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
55 // which can be inserted as a single node.
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
56 function createHTMLNode(html) {
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
57 var range = document.createRange();
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
58 range.selectNode(document.getElementById("Chat"));
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
59 return range.createContextualFragment(html);
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
60 }
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
61
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
62 // removes first insert node from the internal fragment.
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
63 function rmInsertNode() {
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
64 var insert = self.fragment.querySelector("#insert");
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
65 if(insert)
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
66 insert.parentNode.removeChild(insert);
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
67 }
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
68
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
69 function setShouldScroll(flag) {
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
70 if(flag && undefined === self.shouldScroll)
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
71 self.shouldScroll = flag;
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
72 }
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
73
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
74 // hook in a custom method to append new data
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
75 // to the chat.
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
76 this.setAppendElementMethod = function (func) {
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
77 if(typeof func === 'function')
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
78 appendElement = func;
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
79 }
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
80
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
81 // (re)start the coalescing timer.
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
82 // we wait 25ms for a new message to come in.
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
83 // If we get one, restart the timer and wait another 10ms.
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
84 // If not, run outputHTML()
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
85 // We do this a maximum of 400 times, for 10s max that can be spent
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
86 // coalescing input, since this will block display.
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
87 this.coalesce = function() {
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
88 window.clearTimeout(self.timeoutID);
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
89 self.timeoutID = window.setTimeout(outputHTML, 25);
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
90 self.isCoalescing = true;
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
91 self.coalesceRounds += 1;
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
92 if(400 < self.coalesceRounds)
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
93 self.cancel();
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
94 }
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
95
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
96 // if we need to append content into an insertion div,
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
97 // we need to clear the buffer and cancel the timeout.
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
98 this.cancel = function() {
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
99 if(self.isCoalescing) {
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
100 window.clearTimeout(self.timeoutID);
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
101 outputHTML();
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
102 }
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
103 }
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
104
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
105
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
106 // coalased analogs to the global functions
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
107
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
108 this.append = function(html, shouldScroll) {
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
109 // if we started this fragment with a consecuative message,
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
110 // cancel and output before we continue
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
111 if(self.isConsecutive) {
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
112 self.cancel();
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
113 }
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
114 self.isConsecutive = false;
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
115 rmInsertNode();
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
116 var node = createHTMLNode(html);
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
117 self.fragment.appendChild(node);
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
118
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
119 node = null;
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
120
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
121 setShouldScroll(shouldScroll);
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
122 self.coalesce();
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
123 }
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
124
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
125 this.appendNext = function(html, shouldScroll) {
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
126 if(undefined === self.isConsecutive)
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
127 self.isConsecutive = true;
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
128 var node = createHTMLNode(html);
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
129 var insert = self.fragment.querySelector("#insert");
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
130 if(insert) {
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
131 insert.parentNode.replaceChild(node, insert);
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
132 } else {
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
133 self.fragment.appendChild(node);
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
134 }
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
135 node = null;
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
136 setShouldScroll(shouldScroll);
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
137 self.coalesce();
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
138 }
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
139
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
140 this.replaceLast = function (html, shouldScroll) {
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
141 rmInsertNode();
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
142 var node = createHTMLNode(html);
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
143 var lastMessage = self.fragment.lastChild;
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
144 lastMessage.parentNode.replaceChild(node, lastMessage);
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
145 node = null;
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
146 setShouldScroll(shouldScroll);
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
147 }
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
148 }
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
149 var coalescedHTML;
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
150
32303
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
151 //Appending new content to the message view
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
152 function appendMessage(html) {
32438
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
153 var shouldScroll;
32303
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
154
32438
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
155 // Only call nearBottom() if should scroll is undefined.
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
156 if(undefined === coalescedHTML.shouldScroll) {
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
157 shouldScroll = nearBottom();
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
158 } else {
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
159 shouldScroll = coalescedHTML.shouldScroll;
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
160 }
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
161 appendMessageNoScroll(html, shouldScroll);
32303
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
162 }
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
163
32438
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
164 function appendMessageNoScroll(html, shouldScroll) {
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
165 shouldScroll = shouldScroll || false;
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
166 // always try to coalesce new, non-griuped, messages
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
167 coalescedHTML.append(html, shouldScroll)
32303
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
168 }
32438
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
169
32303
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
170 function appendNextMessage(html){
32438
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
171 var shouldScroll;
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
172 if(undefined === coalescedHTML.shouldScroll) {
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
173 shouldScroll = nearBottom();
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
174 } else {
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
175 shouldScroll = coalescedHTML.shouldScroll;
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
176 }
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
177 appendNextMessageNoScroll(html, shouldScroll);
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
178 }
32303
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
179
32438
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
180 function appendNextMessageNoScroll(html, shouldScroll){
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
181 shouldScroll = shouldScroll || false;
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
182 // only group next messages if we're already coalescing input
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
183 coalescedHTML.appendNext(html, shouldScroll);
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
184 }
32303
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
185
32438
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
186 function replaceLastMessage(html){
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
187 var shouldScroll;
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
188 // only replace messages if we're already coalescing
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
189 if(coalescedHTML.isCoalescing){
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
190 if(undefined === coalescedHTML.shouldScroll) {
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
191 shouldScroll = nearBottom();
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
192 } else {
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
193 shouldScroll = coalescedHTML.shouldScroll;
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
194 }
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
195 coalescedHTML.replaceLast(html, shouldScroll);
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
196 } else {
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
197 shouldScroll = nearBottom();
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
198 //Retrieve the current insertion point, then remove it
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
199 //This requires that there have been an insertion point... is there a better way to retrieve the last element? -evands
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
200 var insert = document.getElementById("insert");
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
201 if(insert){
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
202 var parentNode = insert.parentNode;
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
203 parentNode.removeChild(insert);
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
204 var lastMessage = document.getElementById("Chat").lastChild;
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
205 document.getElementById("Chat").removeChild(lastMessage);
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
206 }
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
207
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
208 //Now append the message itself
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
209 appendHTML(html);
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
210
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
211 alignChat(shouldScroll);
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
212 }
32303
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
213 }
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
214
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
215 //Auto-scroll to bottom. Use nearBottom to determine if a scrollToBottom is desired.
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
216 function nearBottom() {
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
217 return ( document.body.scrollTop >= ( document.body.offsetHeight - ( window.innerHeight * 1.2 ) ) );
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
218 }
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
219 function scrollToBottom() {
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
220 document.body.scrollTop = document.body.offsetHeight;
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
221 }
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
222
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
223 //Dynamically exchange the active stylesheet
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
224 function setStylesheet( id, url ) {
32438
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
225 var code = "<style id=\"" + id + "\" type=\"text/css\" media=\"screen,print\">";
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
226 if( url.length )
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
227 code += "@import url( \"" + url + "\" );";
32303
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
228 code += "</style>";
32438
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
229 var range = document.createRange();
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
230 var head = document.getElementsByTagName( "head" ).item(0);
32303
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
231 range.selectNode( head );
32438
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
232 var documentFragment = range.createContextualFragment( code );
32303
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
233 head.removeChild( document.getElementById( id ) );
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
234 head.appendChild( documentFragment );
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
235 }
32438
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
236
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
237 /* Converts emoticon images to textual emoticons; all emoticons in message if alt is held */
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
238 document.onclick = function imageCheck() {
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
239 var node = event.target;
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
240 if (node.tagName.toLowerCase() != 'img')
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
241 return;
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
242
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
243 imageSwap(node, false);
32303
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
244 }
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
245
32438
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
246 /* Converts textual emoticons to images if textToImagesFlag is true, otherwise vice versa */
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
247 function imageSwap(node, textToImagesFlag) {
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
248 var shouldScroll = nearBottom();
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
249
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
250 var images = [node];
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
251 if (event.altKey) {
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
252 while (node.id != "Chat" && node.parentNode.id != "Chat")
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
253 node = node.parentNode;
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
254 images = node.querySelectorAll(textToImagesFlag ? "a" : "img");
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
255 }
32303
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
256
32438
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
257 for (var i = 0; i < images.length; i++) {
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
258 textToImagesFlag ? textToImage(images[i]) : imageToText(images[i]);
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
259 }
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
260
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
261 alignChat(shouldScroll);
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
262 }
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
263
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
264 function textToImage(node) {
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
265 if (!node.getAttribute("isEmoticon"))
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
266 return;
32303
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
267 //Swap the image/text
32438
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
268 var img = document.createElement('img');
32303
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
269 img.setAttribute('src', node.getAttribute('src'));
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
270 img.setAttribute('alt', node.firstChild.nodeValue);
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
271 img.className = node.className;
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
272 node.parentNode.replaceChild(img, node);
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
273 }
32438
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
274
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
275 function imageToText(node)
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
276 {
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
277 if (client.zoomImage(node) || !node.alt)
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
278 return;
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
279 var a = document.createElement('a');
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
280 a.setAttribute('onclick', 'imageSwap(this, true)');
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
281 a.setAttribute('src', node.getAttribute('src'));
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
282 a.setAttribute('isEmoticon', true);
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
283 a.className = node.className;
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
284 var text = document.createTextNode(node.alt);
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
285 a.appendChild(text);
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
286 node.parentNode.replaceChild(a, node);
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
287 }
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
288
32303
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
289 //Align our chat to the bottom of the window. If true is passed, view will also be scrolled down
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
290 function alignChat(shouldScroll) {
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
291 var windowHeight = window.innerHeight;
32438
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
292
32303
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
293 if (windowHeight > 0) {
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
294 var contentElement = document.getElementById('Chat');
32438
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
295 var heightDifference = (windowHeight - contentElement.offsetHeight);
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
296 if (heightDifference > 0) {
32303
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
297 contentElement.style.position = 'relative';
32438
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
298 contentElement.style.top = heightDifference + 'px';
32303
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
299 } else {
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
300 contentElement.style.position = 'static';
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
301 }
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
302 }
32438
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
303
32303
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
304 if (shouldScroll) scrollToBottom();
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
305 }
32438
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
306
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
307 window.onresize = function windowDidResize(){
32303
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
308 alignChat(true/*nearBottom()*/); //nearBottom buggy with inactive tabs
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
309 }
32438
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
310
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
311 function initStyle() {
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
312 alignChat(true);
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
313 if(!coalescedHTML)
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
314 coalescedHTML = new CoalescedHTML();
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
315 }
32303
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
316 </script>
32438
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
317
32303
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
318 <style type="text/css">
32438
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
319 .actionMessageUserName { display:none; }
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
320 .actionMessageBody:before { content:"*"; }
32303
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
321 .actionMessageBody:after { content:"*"; }
32438
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
322 * { word-wrap:break-word; text-rendering: optimizelegibility; }
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
323 img.scaledToFitImage { height: auto; max-width: 100%%; }
32303
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
324 </style>
32438
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
325
32303
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
326 <!-- This style is shared by all variants. !-->
32438
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
327 <style id="baseStyle" type="text/css" media="screen,print">
32303
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
328 %@
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
329 </style>
32438
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
330
32303
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
331 <!-- Although we call this mainStyle for legacy reasons, it's actually the variant style !-->
32438
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
332 <style id="mainStyle" type="text/css" media="screen,print">
32303
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
333 @import url( "%@" );
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
334 </style>
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
335
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
336 </head>
32438
f789627c4f0d Update Template.html from Adium's hg repo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32303
diff changeset
337 <body onload="initStyle();" style="==bodyBackground==">
32303
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
338 %@
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
339 <div id="Chat">
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
340 </div>
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
341 %@
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
342 </body>
8fb1124b2794 Put conversation theme in its own directory.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
diff changeset
343 </html>