diff --git a/src/Icons/tree/I.gif b/src/Icons/tree/I.gif
new file mode 100644
index 000000000..1a259eea0
Binary files /dev/null and b/src/Icons/tree/I.gif differ
diff --git a/src/Icons/tree/L.gif b/src/Icons/tree/L.gif
new file mode 100644
index 000000000..48b81c80a
Binary files /dev/null and b/src/Icons/tree/L.gif differ
diff --git a/src/Icons/tree/Lminus.gif b/src/Icons/tree/Lminus.gif
new file mode 100644
index 000000000..26c2b3449
Binary files /dev/null and b/src/Icons/tree/Lminus.gif differ
diff --git a/src/Icons/tree/Lplus.gif b/src/Icons/tree/Lplus.gif
new file mode 100644
index 000000000..775619d32
Binary files /dev/null and b/src/Icons/tree/Lplus.gif differ
diff --git a/src/Icons/tree/Rminus.gif b/src/Icons/tree/Rminus.gif
new file mode 100644
index 000000000..e62222abd
Binary files /dev/null and b/src/Icons/tree/Rminus.gif differ
diff --git a/src/Icons/tree/Rplus.gif b/src/Icons/tree/Rplus.gif
new file mode 100644
index 000000000..1c40a78dc
Binary files /dev/null and b/src/Icons/tree/Rplus.gif differ
diff --git a/src/Icons/tree/T.gif b/src/Icons/tree/T.gif
new file mode 100644
index 000000000..34dd47610
Binary files /dev/null and b/src/Icons/tree/T.gif differ
diff --git a/src/Icons/tree/Tminus.gif b/src/Icons/tree/Tminus.gif
new file mode 100644
index 000000000..025840f4f
Binary files /dev/null and b/src/Icons/tree/Tminus.gif differ
diff --git a/src/Icons/tree/Tplus.gif b/src/Icons/tree/Tplus.gif
new file mode 100644
index 000000000..4659651e0
Binary files /dev/null and b/src/Icons/tree/Tplus.gif differ
diff --git a/src/Icons/tree/_closed.gif b/src/Icons/tree/_closed.gif
new file mode 100644
index 000000000..c2d3b329c
Binary files /dev/null and b/src/Icons/tree/_closed.gif differ
diff --git a/src/Icons/tree/_doc.gif b/src/Icons/tree/_doc.gif
new file mode 100644
index 000000000..155a63244
Binary files /dev/null and b/src/Icons/tree/_doc.gif differ
diff --git a/src/Icons/tree/_open.gif b/src/Icons/tree/_open.gif
new file mode 100644
index 000000000..7064a3038
Binary files /dev/null and b/src/Icons/tree/_open.gif differ
diff --git a/src/Icons/tree/minus.gif b/src/Icons/tree/minus.gif
new file mode 100644
index 000000000..1647fea2c
Binary files /dev/null and b/src/Icons/tree/minus.gif differ
diff --git a/src/Icons/tree/plus.gif b/src/Icons/tree/plus.gif
new file mode 100644
index 000000000..3fe85900f
Binary files /dev/null and b/src/Icons/tree/plus.gif differ
diff --git a/src/icons.qrc b/src/icons.qrc
index 67d239c0b..7149a3dac 100644
--- a/src/icons.qrc
+++ b/src/icons.qrc
@@ -114,6 +114,20 @@
Icons/flags/japan.png
Icons/flags/malaysia.png
Icons/flags/philippines.png
+ Icons/tree/Lplus.gif
+ Icons/tree/Tminus.gif
+ Icons/tree/Tplus.gif
+ Icons/tree/_open.gif
+ Icons/tree/plus.gif
+ Icons/tree/Rminus.gif
+ Icons/tree/Lminus.gif
+ Icons/tree/T.gif
+ Icons/tree/_closed.gif
+ Icons/tree/L.gif
+ Icons/tree/_doc.gif
+ Icons/tree/I.gif
+ Icons/tree/minus.gif
+ Icons/tree/Rplus.gif
Icons/oxygen/mail-queue.png
Icons/oxygen/view-refresh.png
Icons/oxygen/file.png
diff --git a/src/webui.qrc b/src/webui.qrc
index fb1c22824..dbbd2f305 100644
--- a/src/webui.qrc
+++ b/src/webui.qrc
@@ -18,6 +18,7 @@
webui/scripts/excanvas-compressed.js
webui/scripts/mocha.js
webui/scripts/mocha-init.js
+ webui/scripts/tree.js
webui/scripts/mootools-1.2-core-yc.js
webui/scripts/mootools-1.2-more.js
webui/scripts/dynamicTable.js
diff --git a/src/webui/css/mocha.css b/src/webui/css/mocha.css
index bc9793fbc..7a2e999ac 100644
--- a/src/webui/css/mocha.css
+++ b/src/webui/css/mocha.css
@@ -892,36 +892,36 @@ div.mochaToolbarWrapper.bottom {
padding-bottom: 5px;
}
-/* Folder Tree */
-
-.tree {
- font-size: 11px;
- line-height: 15px;
- margin: 0;
-}
-
-.tree ul {
- margin: 0;
-}
-
-.tree li {
- list-style-type: none;
- white-space: nowrap;
-}
-
-.tree li a {
- color: #3f3f3f;
-}
-
-.tree li img {
- vertical-align: middle;
- width: 18px;
- height: 18px;
- overflow: hidden;
-}
-
-.tree li span {
- padding-left: 2px;
+/* Folder Tree */
+
+.tree {
+ font-size: 11px;
+ line-height: 15px;
+ margin: 0;
+}
+
+.tree ul {
+ margin: 0;
+}
+
+.tree li {
+ list-style-type: none;
+ white-space: nowrap;
+}
+
+.tree li a {
+ color: #3f3f3f;
+}
+
+.tree li img {
+ vertical-align: middle;
+ width: 18px;
+ height: 18px;
+ overflow: hidden;
+}
+
+.tree li span {
+ padding-left: 2px;
}
/* View Toggle */
diff --git a/src/webui/index.html b/src/webui/index.html
index 2b9935dec..72135b99f 100644
--- a/src/webui/index.html
+++ b/src/webui/index.html
@@ -16,6 +16,7 @@
+
diff --git a/src/webui/prop-files.html b/src/webui/prop-files.html
index 33840068c..151353cc6 100644
--- a/src/webui/prop-files.html
+++ b/src/webui/prop-files.html
@@ -1 +1,12 @@
-CONTENT
\ No newline at end of file
+
+
+
\ No newline at end of file
diff --git a/src/webui/scripts/tree.js b/src/webui/scripts/tree.js
new file mode 100644
index 000000000..8c25a9541
--- /dev/null
+++ b/src/webui/scripts/tree.js
@@ -0,0 +1,124 @@
+/*
+
+Script: Tree.js
+ Create folder trees.
+
+Copyright:
+ Copyright (c) 2007-2008 Greg Houston,
.
+
+License:
+ MIT-style license.
+
+*/
+
+function buildTree(treeID){
+
+ $$('#'+treeID+' li.folder').each(function(folder){
+ var folderContents = folder.getChildren('ul');
+ var folderImage = new Element('img', {
+ 'src': '../images/tree/_open.gif',
+ 'width': 18,
+ 'height': 18
+ }).inject(folder, 'top');
+
+ // Determine which open and close graphic each folder gets
+
+ if (folder.hasClass('root')) {
+ folder.minus = '../images/tree/Rminus.gif'
+ folder.plus = '../images/tree/Rplus.gif'
+ }
+ else
+ if (folder.getNext()) {
+ folder.minus = '../images/tree/Tminus.gif'
+ folder.plus = '../images/tree/Tplus.gif'
+ }
+ else {
+ folder.minus = '../images/tree/Lminus.gif'
+ folder.plus = '../images/tree/Lplus.gif'
+ }
+
+ var image = new Element('img', {
+ 'src': folder.minus,
+ 'width': 18,
+ 'height': 18
+ }).addEvent('click', function(){
+ if (folder.hasClass('f-open')) {
+ image.setProperty('src', folder.plus);
+ folderImage.setProperty('src', '../images/tree/_closed.gif');
+ folderContents.each(function(el){
+ el.setStyle('display', 'none');
+ });
+ folder.removeClass('f-open');
+ }
+ else {
+ image.setProperty('src', folder.minus);
+ folderImage.setProperty('src', '../images/tree/_open.gif');
+ folderContents.each(function(el){
+ el.setStyle('display', 'block');
+ });
+ folder.addClass('f-open');
+ }
+ }).inject(folder, 'top');
+
+ if (!folder.hasClass('f-open')) {
+ image.setProperty('src', folder.plus);
+ folderContents.each(function(el){
+ el.setStyle('display', 'none');
+ });
+ folder.removeClass('f-open');
+ }
+
+ // Add connecting branches to each file node
+
+ folderContents.each(function(element){
+ var docs = element.getChildren('li.doc');
+ docs.each(function(el){
+ if (el == docs.getLast() && !el.getNext()) {
+ new Element('img', {
+ 'src': '../images/tree/L.gif',
+ 'width': 18,
+ 'height': 18
+ }).inject(el.getElement('span'), 'before');
+ }
+ else {
+ new Element('img', {
+ 'src': '../images/tree/T.gif',
+ 'width': 18,
+ 'height': 18
+ }).inject(el.getElement('span'), 'before');
+ }
+ });
+ });
+
+ });
+
+ // Add connecting branches to each node
+
+ $$('#'+treeID+' li').each(function(node){
+ node.getParents('li').each(function(parent){
+ if (parent.getNext()) {
+ new Element('img', {
+ 'src': '../images/tree/I.gif',
+ 'width': 18,
+ 'height': 18
+ }).inject(node, 'top');
+ }
+ else {
+ new Element('img', {
+ 'src': 'images/spacer.gif',
+ 'width': 18,
+ 'height': 18
+ }).inject(node, 'top');
+ }
+ });
+ });
+
+ $$('#'+treeID+' li.doc').each(function(el){
+ new Element('img', {
+ 'src': '../images/tree/_doc.gif',
+ 'width': 18,
+ 'height': 18
+ }).inject(el.getElement('span'), 'before');
+ });
+
+}