Module: check_mk
Branch: master
Commit: ab3a54e7b64d4c9064cbcf64a1969a0f15dcee40
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=ab3a54e7b64d4c…
Author: Mathias Kettner <mk(a)mathias-kettner.de>
Date: Tue May 24 09:41:48 2011 +0200
Make Views snapin foldable
---
ChangeLog | 1 +
web/htdocs/check_mk.css | 12 ++++++++++++
web/htdocs/htmllib.py | 24 +++++++++++++++++++++++-
web/htdocs/index.py | 2 ++
web/htdocs/js/check_mk.js | 13 +++++++++++--
web/htdocs/weblib.py | 23 +++++++++--------------
web/plugins/sidebar/shipped.py | 8 +++++---
7 files changed, 63 insertions(+), 20 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index a8ee6ea..fb6366f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -11,6 +11,7 @@
Multisite:
* FIX: make non-Ascii characters in services names work again
* Introduced basic infrastructure for multilanguage support in Multisite
+ * Make 'Views' snapin foldable
WATO:
* Configration files can now be administered via the WEB UI
diff --git a/web/htdocs/check_mk.css b/web/htdocs/check_mk.css
index 5a703e5..029ea0d 100644
--- a/web/htdocs/check_mk.css
+++ b/web/htdocs/check_mk.css
@@ -45,6 +45,18 @@ div {
padding: 0;
}
+/* foldable trees */
+img.treeangle {
+ width: 14px;
+ height: 14px;
+ margin-right: 3px;
+ margin-top: 2px;
+}
+b.treeangle.title {
+ font-weight: bold;
+ color: #ffffff;
+}
+
/*
__ __ _
| \/ | __ _(_)_ __
diff --git a/web/htdocs/htmllib.py b/web/htdocs/htmllib.py
index ea26276..8b29899 100644
--- a/web/htdocs/htmllib.py
+++ b/web/htdocs/htmllib.py
@@ -24,7 +24,7 @@
# to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
# Boston, MA 02110-1301 USA.
-import time, cgi, config, os, defaults, pwd, urllib
+import time, cgi, config, os, defaults, pwd, urllib, weblib
from lib import *
# Python 2.3 does not have 'set' in normal namespace.
# But it can be imported from 'sets'
@@ -656,3 +656,25 @@ class html:
if omd_site == self.apache_user():
omd_mode = 'own'
return (omd_mode, omd_site)
+
+ def begin_foldable_container(self, treename, id, isopen, title):
+ # try to get persistet state of tree
+ tree_state = weblib.get_tree_states(treename)
+ if id in tree_state:
+ isopen = tree_state[id] == "on"
+
+ img_num = isopen and "90" or "00"
+ onclick = ' onclick="toggle_foldable_container(\'%s\',
\'%s\')"' % (treename, id)
+ onclick += ' onmouseover="this.style.cursor=\'pointer\';"
'
+ onclick += ' onmouseout="this.style.cursor=\'auto\';"
'
+
+ self.write('<img align=absbottom class="treeangle"
id="treeimg.%s.%s" '
+ 'src="images/tree_%s.png" %s>' %
+ (treename, id, img_num, onclick))
+ self.write('<b class="treeangle title" class=treeangle
%s>%s</b><br>' %
+ (onclick, title))
+ self.write('<ul class="treeangle" style="display: %s"
id="tree.%s.%s">' %
+ ((not isopen) and "none" or "", treename, id))
+
+ def end_foldable_container(self):
+ self.write("</ul>")
diff --git a/web/htdocs/index.py b/web/htdocs/index.py
index fba1c4d..5bfa3ff 100644
--- a/web/htdocs/index.py
+++ b/web/htdocs/index.py
@@ -149,6 +149,8 @@ def handler(req, profiling = True):
# helper functions for creating valid HTML. Parse URI and
# store results in the request object for later usage.
html = htmllib.html(req)
+ html.id = {} # create unique ID for this request
+ __builtin__.html = html
req.uriinfo = htmllib.uriinfo(req)
try:
diff --git a/web/htdocs/js/check_mk.js b/web/htdocs/js/check_mk.js
index 650ae44..547b4e8 100644
--- a/web/htdocs/js/check_mk.js
+++ b/web/htdocs/js/check_mk.js
@@ -496,7 +496,7 @@ var tree_anim_o = null;
function toggle_folding(oImg, state) {
tree_anim_o = oImg;
- if(state === 1) {
+ if (state) {
oImg.src = "images/tree_10.png";
setTimeout("set_tree_animation_step('20');", 10);
setTimeout("set_tree_animation_step('30');", 20);
@@ -507,7 +507,8 @@ function toggle_folding(oImg, state) {
setTimeout("set_tree_animation_step('80');", 180);
setTimeout("set_tree_animation_step('90');", 260);
- } else {
+ }
+ else {
oImg.src = "images/tree_80.png";
setTimeout("set_tree_animation_step('70');", 10);
setTimeout("set_tree_animation_step('60');", 20);
@@ -557,6 +558,14 @@ function set_tree_animation_step(num)
tree_anim_o.src = "images/tree_" + num + ".png";
}
+function toggle_foldable_container(treename, id) {
+ var oImg = document.getElementById('treeimg.' + treename + '.' +
id);
+ var oBox = document.getElementById('tree.' + treename + '.' + id);
+ toggle_tree_state(treename, id, oBox);
+ toggle_folding(oImg, oBox.style.display != "none");
+ oImg = null;
+ oBox = null;
+}
function toggle_assumption(oImg, site, host, service)
{
diff --git a/web/htdocs/weblib.py b/web/htdocs/weblib.py
index 3ec120e..b316091 100644
--- a/web/htdocs/weblib.py
+++ b/web/htdocs/weblib.py
@@ -28,40 +28,36 @@ import config
import lib
treestates = {}
+treestates_for_id = None
def load_tree_states():
global treestates
- treestates = config.load_user_file("treestates", {})
+ global treestates_for_id
+ if html.id is not treestates_for_id:
+ treestates = config.load_user_file("treestates", {})
+ treestates_for_id = html.id
def save_tree_states():
config.save_user_file("treestates", treestates)
def get_tree_states(tree):
- if not treestates:
- load_tree_states()
+ load_tree_states()
return treestates.get(tree, {})
def set_tree_state(tree, key, val):
- global treestates
-
- if not treestates:
- load_tree_states()
+ load_tree_states()
if tree not in treestates:
treestates[tree] = {}
treestates[tree][key] = val
-
def set_tree_states(tree, val):
- global treestates
- if not treestates:
- load_tree_states()
+ load_tree_states()
treestates[tree] = val
def ajax_tree_openclose(h):
- global html
- html = h
+ load_tree_states()
tree = html.var("tree")
name = html.var("name")
@@ -71,4 +67,3 @@ def ajax_tree_openclose(h):
set_tree_state(tree, name, html.var("state"))
save_tree_states()
-
diff --git a/web/plugins/sidebar/shipped.py b/web/plugins/sidebar/shipped.py
index 01d98ad..4d46540 100644
--- a/web/plugins/sidebar/shipped.py
+++ b/web/plugins/sidebar/shipped.py
@@ -104,12 +104,14 @@ def render_views():
continue
if t == topic:
if first:
- html.write("<h3>%s</h3>\n" % topic)
+ html.begin_foldable_container("views", topic, False,
topic)
+ # html.write("<h3>%s</h3>\n" % topic)
first = False
- html.write("<ul>")
+ # html.write("<ul>")
bulletlink(title, "view.py?view_name=%s" % name)
if not first: # at least one item rendered
- html.write("</ul>")
+ html.end_foldable_container()
+ # html.write("</ul>")
s = [ (view.get("topic", _("Other")), view["title"],
name) for name, view in html.available_views.items() if not view["hidden"] ]
s.sort()