]> git.0d.be Git - empathy.git/blobdiff - data/empathy-log-window.html
Run from the source directory without installing
[empathy.git] / data / empathy-log-window.html
index ef01df34bb911bf36fdb9b0219f06cf20beb8b9d..88159252082018df7f88c47483945413bd1b1ffb 100644 (file)
@@ -1,17 +1,51 @@
-<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 {
-  /* FIXME: how do we set the application font? */
   padding: 0;
-  margin: 0;
+  margin: 1px;
+}
+
+body {
+  margin-left: -1em;
 }
 
 div.row {
   margin-left: 1em;
+  clear: both;
+}
+
+div.row p {
+  display: inline;
+  white-space: pre-wrap;
+}
+
+span.open:after {
+  content: "\25BE";
+  margin-right: 2px;
+}
+
+span.closed:after {
+  content: "\25B8";
+  margin-right: 2px;
+}
+
+span.date {
+  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();
@@ -37,7 +71,67 @@ function getContent(node)
   return filterNodes(node, 'P')[0];
 }
 
-function insertRow (path, text)
+function getToggle(node)
+{
+  return filterNodes(node, 'SPAN')[0];
+}
+
+function setExpander(node, open)
+{
+  var toggle = getToggle(node);
+  var display;
+  var nodes;
+
+  if (open)
+    {
+      toggle.setAttribute('class', 'open');
+      display = 'block';
+    }
+  else
+    {
+      toggle.setAttribute('class', 'closed');
+      display = 'none';
+    }
+
+  nodes = getNodes(node);
+
+  for (var i = 0; i < nodes.length; i++)
+    nodes[i].style.display = display;
+}
+
+function expandAll()
+{
+  function expandAllRecurse(node)
+    {
+      var nodes = getNodes(node);
+
+      for (var i = 0; i < nodes.length; i++)
+        {
+          setExpander(nodes[i], true);
+
+          expandAllRecurse(nodes[i]);
+        }
+    }
+
+  var treeview = document.getElementById('treeview');
+
+  expandAllRecurse(treeview);
+}
+
+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;
@@ -54,34 +148,52 @@ function insertRow (path, text)
   // 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';
+
   var contents = document.createElement('p');
   newnode.appendChild(contents);
-  contents.innerHTML = text;
+  setContent(contents, text, icon, date_);
+
+  function toggleExpander (e)
+    {
+      if (toggle.getAttribute('class') == 'closed')
+        setExpander(newnode, true);
+      else
+        setExpander(newnode, false);
+    };
+
+  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)
+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;
+  setContent(contents, text, icon, date_);
 }
 
 function deleteRow (path)
@@ -115,6 +227,64 @@ function reorderRows (path, new_order)
   // 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)
+{
+  var treeview = document.getElementById('treeview');
+  var node = treeview;
+
+  // walk the tree
+  for (var i = 0; i < path.length; i++)
+    node = getNodes(node)[path[i]];
+
+  var toggle = getToggle(node);
+
+  if (has_children)
+    toggle.style.display = 'inline';
+  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>