mirror of
https://github.com/webgefrickel/dotfiles
synced 2024-11-11 07:10:40 +00:00
149 lines
4.5 KiB
HTML
Executable File
149 lines
4.5 KiB
HTML
Executable File
<!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
|
|
document.onclick = imageCheck;
|
|
function imageCheck() {
|
|
node = event.target;
|
|
if(node.tagName == 'IMG' && node.alt) {
|
|
a = document.createElement('a');
|
|
a.setAttribute('onclick', 'imageSwap(this)');
|
|
a.setAttribute('src', node.src);
|
|
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.src);
|
|
img.setAttribute('alt', node.firstChild.nodeValue);
|
|
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');
|
|
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; }
|
|
</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==">
|
|
%@
|
|
<span id="Chat">
|
|
</span>
|
|
%@
|
|
</body>
|
|
</html> |