-<html>
+<?xml version="1.0">
+<html
+ xmlns="http://www.w3.org/TR/html4/"
+ xmlns:empathy="http://live.gnome.org/Empathy">
<head>
<style type="text/css">
html, body, div, p {
float: right;
color: gray;
}
+
+img.icon {
+ vertical-align: middle;
+ padding-right: 1px;
+}
</style>
<script type="text/javascript">
+var EMPATHY_NS='http://live.gnome.org/Empathy';
+
function filterNodes (node, tagName)
{
var out = new Array();
return filterNodes(node, 'SPAN')[0];
}
-function toggleExpander(node, open)
+function setExpander(node, open)
{
var toggle = getToggle(node);
var display;
for (var i = 0; i < nodes.length; i++)
{
- toggleExpander(nodes[i], true);
+ setExpander(nodes[i], true);
expandAllRecurse(nodes[i]);
}
expandAllRecurse(treeview);
}
-function insertRow (path, text, date_)
+function setContent (contents, text, icon, date_)
+{
+ contents.innerHTML = "";
+
+ if (icon != "")
+ {
+ contents.innerHTML += '<img class="icon" src="' + icon + '"/>';
+ }
+
+ contents.innerHTML += text;
+ contents.innerHTML += '<span class="date">' + date_ + '</span>';
+}
+
+function insertRow (path, text, icon, date_)
{
var treeview = document.getElementById('treeview');
var parentnode = treeview;
// insert the new node into the tree
var nodes = getNodes(parentnode);
- // console.log("path = " + path);
- // console.log("i = " + i + ", path[i] = " + path[i] + ", nodes.length = " +
- // nodes.length);
-
if (path[i] >= nodes.length)
parentnode.appendChild(newnode);
else
parentnode.insertBefore(newnode, nodes[path[i]]);
+ // set the path
+ newnode.setAttributeNS(EMPATHY_NS, 'path', path.join(':'));
+
// add an expander
var toggle = document.createElement('span');
newnode.appendChild(toggle);
toggle.setAttribute('class', 'closed');
toggle.style.display = 'none';
- toggle.onclick = function (e)
+ var contents = document.createElement('p');
+ newnode.appendChild(contents);
+ setContent(contents, text, icon, date_);
+
+ function toggleExpander (e)
{
if (toggle.getAttribute('class') == 'closed')
- toggleExpander(newnode, true);
+ setExpander(newnode, true);
else
- toggleExpander(newnode, false);
+ setExpander(newnode, false);
};
-
- var contents = document.createElement('p');
- newnode.appendChild(contents);
- contents.innerHTML = text + '<span class="date">' + date_ + '</span>';
+
+ toggle.onclick = toggleExpander;
+ contents.ondblclick = toggleExpander;
// if the node is not a top-level node, hide it
if (parentnode != treeview)
newnode.style.display = 'none';
}
-function changeRow (path, text, date_)
+function changeRow (path, text, icon, date_)
{
var treeview = document.getElementById('treeview');
var node = treeview;
- // console.log("path = " + path + ", text = '" + text + "'");
-
// walk the tree
for (var i = 0; i < path.length; i++)
node = getNodes(node)[path[i]];
// set the contents
var contents = getContent(node);
- contents.innerHTML = text + '<span class="date">' + date_ + '</span>';
+ setContent(contents, text, icon, date_);
}
function deleteRow (path)
// For reference: new_order[new_pos] = old_pos
for (var i = 0; i < nodes.length; i++)
node.appendChild(nodes[new_order[i]]);
+
+ // recursively update the path
+ function updatePaths(path, node)
+ {
+ var nodes = getNodes(node);
+
+ for (var i = 0; i < nodes.length; i++)
+ {
+ var newpath = path.concat([i]);
+
+ nodes[i].setAttributeNS(EMPATHY_NS, 'path', newpath.join(':'));
+ updatePaths(newpath, nodes[i]);
+ }
+ }
+
+ updatePaths(path, node);
}
function hasChildRows (path, has_children)
else
toggle.style.display = 'none';
}
+
+function getOffset (node)
+{
+ var y = 0;
+
+ while (node != null && !isNaN(node.offsetTop))
+ {
+ y += node.offsetTop - node.scrollTop;
+ node = node.offsetParent;
+ }
+
+ return y;
+}
+
+function scrollToRow (path)
+{
+ var treeview = document.getElementById('treeview');
+ var node = treeview;
+
+ // walk the tree
+ for (var i = 0; i < path.length; i++)
+ node = getNodes(node)[path[i]];
+
+ window.scrollTo(0, getOffset(node));
+}
</script>
</head>