aboutsummaryrefslogtreecommitdiffstats
path: root/data
diff options
context:
space:
mode:
Diffstat (limited to 'data')
-rw-r--r--data/Template.html159
1 files changed, 159 insertions, 0 deletions
diff --git a/data/Template.html b/data/Template.html
new file mode 100644
index 000000000..708e85bdb
--- /dev/null
+++ b/data/Template.html
@@ -0,0 +1,159 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <base href="%@">
+ <script type="text/ecmascript" defer="defer">
+
+ //Appending new content to the message view
+ function appendMessage(html) {
+ shouldScroll = nearBottom();
+
+ //Remove any existing insertion point
+ insert = document.getElementById("insert");
+ if(insert) insert.parentNode.removeChild(insert);
+
+ //Append the new message to the bottom of our chat block
+ chat = document.getElementById("Chat");
+ range = document.createRange();
+ range.selectNode(chat);
+ documentFragment = range.createContextualFragment(html);
+ chat.appendChild(documentFragment);
+
+ alignChat(shouldScroll);
+ }
+ function appendMessageNoScroll(html) {
+ //Remove any existing insertion point
+ insert = document.getElementById("insert");
+ if(insert) insert.parentNode.removeChild(insert);
+
+ //Append the new message to the bottom of our chat block
+ chat = document.getElementById("Chat");
+ range = document.createRange();
+ range.selectNode(chat);
+ documentFragment = range.createContextualFragment(html);
+ chat.appendChild(documentFragment);
+ }
+ function appendNextMessage(html){
+ shouldScroll = nearBottom();
+
+ //Locate the insertion point
+ insert = document.getElementById("insert");
+
+ //make new node
+ range = document.createRange();
+ range.selectNode(insert.parentNode);
+ newNode = range.createContextualFragment(html);
+
+ //swap
+ insert.parentNode.replaceChild(newNode,insert);
+
+ alignChat(shouldScroll);
+ }
+ function appendNextMessageNoScroll(html){
+ //Locate the insertion point
+ insert = document.getElementById("insert");
+
+ //make new node
+ range = document.createRange();
+ range.selectNode(insert.parentNode);
+ newNode = range.createContextualFragment(html);
+
+ //swap
+ insert.parentNode.replaceChild(newNode,insert);
+ }
+
+ //Auto-scroll to bottom. Use nearBottom to determine if a scrollToBottom is desired.
+ function nearBottom() {
+ return ( document.body.scrollTop >= ( document.body.offsetHeight - ( window.innerHeight * 1.2 ) ) );
+ }
+ function scrollToBottom() {
+ document.body.scrollTop = document.body.offsetHeight;
+ }
+
+ //Dynamically exchange the active stylesheet
+ function setStylesheet( id, url ) {
+ code = "<style id=\"" + id + "\" type=\"text/css\" media=\"screen,print\">";
+ if( url.length ) code += "@import url( \"" + url + "\" );";
+ code += "</style>";
+ range = document.createRange();
+ head = document.getElementsByTagName( "head" ).item(0);
+ range.selectNode( head );
+ documentFragment = range.createContextualFragment( code );
+ head.removeChild( document.getElementById( id ) );
+ head.appendChild( documentFragment );
+ }
+
+ //Swap an image with its alt-tag text on click, or expand/unexpand an attached image
+ document.onclick = imageCheck;
+ function imageCheck() {
+ node = event.target;
+ if(node.tagName == 'IMG' && !client.zoomImage(node) && node.alt) {
+ a = document.createElement('a');
+ a.setAttribute('onclick', 'imageSwap(this)');
+ a.setAttribute('src', node.getAttribute('src'));
+ a.className = node.className;
+ text = document.createTextNode(node.alt);
+ a.appendChild(text);
+ node.parentNode.replaceChild(a, node);
+ }
+ }
+
+ function imageSwap(node) {
+ shouldScroll = nearBottom();
+
+ //Swap the image/text
+ img = document.createElement('img');
+ img.setAttribute('src', node.getAttribute('src'));
+ img.setAttribute('alt', node.firstChild.nodeValue);
+ img.className = node.className;
+ node.parentNode.replaceChild(img, node);
+
+ alignChat(shouldScroll);
+ }
+
+ //Align our chat to the bottom of the window. If true is passed, view will also be scrolled down
+ function alignChat(shouldScroll) {
+ var windowHeight = window.innerHeight;
+
+ if (windowHeight > 0) {
+ var contentElement = document.getElementById('Chat');
+ var contentHeight = contentElement.offsetHeight;
+ if (windowHeight - contentHeight > 0) {
+ contentElement.style.position = 'relative';
+ contentElement.style.top = (windowHeight - contentHeight) + 'px';
+ } else {
+ contentElement.style.position = 'static';
+ }
+ }
+
+ if (shouldScroll) scrollToBottom();
+ }
+
+ function windowDidResize(){
+ alignChat(true/*nearBottom()*/); //nearBottom buggy with inactive tabs
+ }
+
+ window.onresize = windowDidResize;
+ </script>
+
+ <!-- This style is shared by all variants. !-->
+ <style id="baseStyle" type="text/css" media="screen,print">
+ %@
+ *{ word-wrap:break-word; }
+ img.scaledToFitImage { height:auto; width:100%; }
+ </style>
+
+ <!-- Although we call this mainStyle for legacy reasons, it's actually the variant style !-->
+ <style id="mainStyle" type="text/css" media="screen,print">
+ @import url( "%@" );
+ </style>
+
+</head>
+<body onload="alignChat(true);" style="==bodyBackground==">
+%@
+<div id="Chat">
+</div>
+%@
+</body>
+</html>