Module: check_mk
Branch: master
Commit: 515125c74afe488abcf81d4dfe91ee0bd7e018ed
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=515125c74afe48…
Author: Lars Michelsen <lm(a)mathias-kettner.de>
Date: Mon Apr 23 15:34:14 2012 +0200
Re-implemented move to code for folders in WATO
---
web/htdocs/images/button_move_hi.png | Bin 0 -> 6163 bytes
web/htdocs/images/button_move_lo.png | Bin 0 -> 6524 bytes
web/htdocs/js/wato.js | 89 +++++++++++++++++++++++++++++-----
web/htdocs/wato.css | 42 ++++++++++++++--
web/htdocs/wato.py | 52 +++++++++++++-------
5 files changed, 149 insertions(+), 34 deletions(-)
diff --git a/web/htdocs/images/button_move_hi.png b/web/htdocs/images/button_move_hi.png
new file mode 100644
index 0000000..19114eb
Binary files /dev/null and b/web/htdocs/images/button_move_hi.png differ
diff --git a/web/htdocs/images/button_move_lo.png b/web/htdocs/images/button_move_lo.png
new file mode 100644
index 0000000..a6445dc
Binary files /dev/null and b/web/htdocs/images/button_move_lo.png differ
diff --git a/web/htdocs/js/wato.js b/web/htdocs/js/wato.js
index dfa3d4f..16b082b 100644
--- a/web/htdocs/js/wato.js
+++ b/web/htdocs/js/wato.js
@@ -483,23 +483,88 @@ function wato_randomize_secret(id, len) {
// Folderlist
// ----------------------------------------------------------------------------
-function wato_toggle_folder(oDiv, on) {
+function wato_open_folder(event, link) {
+ if (!event)
+ event = window.event;
+ var target = getTarget(event);
+ if(target.tagName != 'DIV') {
+ // Skip this event on clicks on other elements than the pure div
+ return false;
+ }
+
+ location.href = link;
+}
+
+function wato_toggle_folder(event, oDiv, on) {
+ if (!event)
+ event = window.event;
+
+ // Skip mouseout event when moving mouse over a child element of the
+ // folder element
+ if (!on) {
+ var node = event.toElement || event.relatedTarget;
+ while (node) {
+ if (node == oDiv) {
+ return false;
+ }
+ node = node.parentNode;
+ }
+ }
+
var obj = oDiv.parentNode;
var id = obj.id.substr(7);
- var obj_edit = document.getElementById('edit_' + id);
- var obj_delete = document.getElementById('delete_' + id);
+
+ var elements = ['edit', 'move', 'delete'];
+ for(var num in elements) {
+ var elem = document.getElementById(elements[num] + '_' + id);
+ if(elem) {
+ if(on) {
+ elem.style.display = 'inline';
+ } else {
+ elem.style.display = 'none';
+ }
+ }
+ }
+
if(on) {
- obj_edit.style.display = 'inline';
- if(obj_delete)
- obj_delete.style.display = 'inline';
obj.style.backgroundImage = 'url("images/folder_open.png")';
-
} else {
- obj_edit.style.display = 'none';
- if(obj_delete)
- obj_delete.style.display = 'none';
obj.style.backgroundImage = 'url("images/folder_closed.png")';
+
+ // Hide the eventual open move dialog
+ var move_dialog = document.getElementById('move_dialog_' + id);
+ if(move_dialog) {
+ move_dialog.style.display = 'none';
+ move_dialog = null;
+ }
}
- obj_delete = null;
- obj_edit = null;
+ elem = null;
+ obj = null;
+}
+
+function wato_toggle_move_folder(event, oButton) {
+ if(!event)
+ event = window.event;
+
+ var id = oButton.id.substr(5);
+ var obj = document.getElementById('move_dialog_' + id);
+ if(obj) {
+ if(obj.style.display == 'none') {
+ obj.style.display = 'block';
+ } else {
+ obj.style.display = 'none';
+ }
+ obj = null;
+ }
+
+ if (event.stopPropagation)
+ event.stopPropagation();
+ event.cancelBubble = true;
+
+ // Disable the default events for all the different browsers
+ if (event.preventDefault)
+ event.preventDefault();
+ else
+ event.returnValue = false;
+ return false;
}
diff --git a/web/htdocs/wato.css b/web/htdocs/wato.css
index caacfa0..fe20dc6 100644
--- a/web/htdocs/wato.css
+++ b/web/htdocs/wato.css
@@ -315,19 +315,25 @@ table.validationerror img {
.wato div.floatfolder .autherr {
position: absolute;
top: 20px;
- right: 20px;
+ right: 62px;
}
.wato div.floatfolder .edit {
position: absolute;
top:20px;
- right:42px;
+ right:54px;
+}
+
+.wato div.floatfolder .move {
+ position: absolute;
+ top:20px;
+ right:32px;
}
.wato div.floatfolder .delete {
position: absolute;
top:20px;
- right:20px;
+ right:10px;
}
.wato div.floatfolder .infos {
@@ -356,7 +362,35 @@ table.validationerror img {
font-size: 14px;
text-decoration: none;
position: relative;
- top: -3px;
+ top: -2px;
+}
+
+.wato div.move_dialog {
+ padding:10px;
+ background-color: #45829D;
+
+ position: relative;
+ left:105px;
+ top:35px;
+ z-index: 200;
+ height: 190px;
+
+ width: -moz-max-content;
+ width: intrinsic;
+
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+ border: 1px solid #fff;
+}
+
+.wato div.move_dialog select[multiple] {
+ height: 170px;
+}
+
+.wato div.move_dialog span {
+ display: block;
+ margin-bottom: 2px;
}
.wato div.hoverarea {
diff --git a/web/htdocs/wato.py b/web/htdocs/wato.py
index 7483ec0..57a5725 100644
--- a/web/htdocs/wato.py
+++ b/web/htdocs/wato.py
@@ -1034,25 +1034,19 @@ def show_subfolders(folder):
# Am I authorized?
auth = check_folder_permissions(entry, "write", False)
- html.write('<div class=floatfolder id="folder_%s"
onclick="location.href = \'%s\'">' % (
+ html.write('<div class=floatfolder id="folder_%s"
onclick="wato_open_folder(event, \'%s\');">' % (
entry[".name"], enter_url))
# Only make folder openable when permitted to edit
if auth == True:
- html.write('<div class=hoverarea '
- 'onmouseover="wato_toggle_folder(this, true);" '
- 'onmouseout="wato_toggle_folder(this, false)">'
- '</div>')
+ html.write(
+ '<div class=hoverarea onmouseover="wato_toggle_folder(event,
this, true);" '
+ 'onmouseout="wato_toggle_folder(event, this,
false)">'
+ )
if auth != True:
html.write('<img class="icon autherr"
src="images/icon_autherr.png" title="%s">' % \
(htmllib.strip_tags(auth)))
- ## Move To
- #if may_move_folders:
- # html.write("<td>")
- # move_to_folder_combo("folder", entry, False)
- # html.write("</td>")
-
html.icon_button(
edit_url,
_("Edit the properties of this folder"),
@@ -1062,6 +1056,23 @@ def show_subfolders(folder):
style = 'display:none',
)
+ may_move_folders = config.may("wato.manage_folders") and \
+ check_folder_permissions(g_folder, "write", False)
+ if may_move_folders:
+ html.icon_button(
+ '', # url is replaced by onclick code
+ _("Move this folder to another place"),
+ "move",
+ id = 'move_' + entry['.name'],
+ cssclass = 'move',
+ style = 'display:none',
+ onclick = 'wato_toggle_move_folder(event, this);'
+ )
+ html.write('<div id="move_dialog_%s" class=move_dialog
style="display:none">' % entry['.name'])
+ html.write('<span>%s</span>' % _('Move this folder
to:'))
+ move_to_folder_combo("folder", entry, False, multiple = True)
+ html.write('</div>')
+
if config.may("wato.manage_folders"):
html.icon_button(
delete_url,
@@ -1072,11 +1083,12 @@ def show_subfolders(folder):
style = 'display:none',
)
+ # Close the eventuall hoverarea
+ if auth == True:
+ html.write('</div>')
+
html.write('<div class=infos>')
- html.write(
- 'Hosts: %d<br />'
- 'Folders: %d' % (num_hosts_in(entry, recurse=True),
len(entry[".folders"]))
- )
+ html.write('Hosts: %d' % num_hosts_in(entry, recurse=True))
html.write('</div>')
title = entry['title']
@@ -1288,12 +1300,16 @@ def show_hosts(folder):
return True
move_to_folder_combo_cache_id = None
-def move_to_folder_combo(what, thing = None, top = False):
+def move_to_folder_combo(what, thing = None, top = False, multiple = False):
global move_to_folder_combo_cache, move_to_folder_combo_cache_id
if move_to_folder_combo_cache_id != id(html):
move_to_folder_combo_cache = {}
move_to_folder_combo_cache_id = id(html)
+ select_attrs = {}
+ if multiple:
+ select_attrs = {'multiple': '10'}
+
# In case of a folder move combo, thing is the folder object
# we want to move
if what == "folder" or id(g_folder) not in move_to_folder_combo_cache:
@@ -1330,12 +1346,12 @@ def move_to_folder_combo(what, thing = None, top = False):
html.hidden_field("host", thing)
uri = html.makeactionuri([("host", thing)])
html.select("_host_move_%s" % thing, selections, "@",
- "location.href='%s' + '&_move_host_to=' +
this.value;" % uri);
+ "location.href='%s' + '&_move_host_to=' +
this.value;" % uri, attrs = select_attrs);
else: # what == "folder"
# html.hidden_field("what_folder", thing)
uri = html.makeactionuri([("what_folder",
thing[".path"])])
html.select("_folder_move_%s" % thing[".path"],
selections, "@",
- "location.href='%s' + '&_move_folder_to=' +
this.value;" % uri);
+ "location.href='%s' + '&_move_folder_to=' +
this.value;" % uri, attrs = select_attrs);