diff options
author | Xavier Claessens <xclaesse@gmail.com> | 2008-07-19 06:09:13 +0800 |
---|---|---|
committer | Xavier Claessens <xclaesse@gmail.com> | 2009-06-12 00:06:30 +0800 |
commit | 1095ede4e263939f5dd8457c083d0457e1fb30c7 (patch) | |
tree | 78a013cbf9ec8adf00d0e17d23b93b6141fe9806 /data | |
parent | 3f7f5c8eb5f93361e2d0723790f13f082263255a (diff) | |
download | gsoc2013-empathy-1095ede4e263939f5dd8457c083d0457e1fb30c7.tar.gz gsoc2013-empathy-1095ede4e263939f5dd8457c083d0457e1fb30c7.tar.zst gsoc2013-empathy-1095ede4e263939f5dd8457c083d0457e1fb30c7.zip |
Use a default Template.html if not provided by the theme.
Diffstat (limited to 'data')
-rw-r--r-- | data/Template.html | 159 |
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> |