Module: check_mk
Branch: master
Commit: 7f1d654d9e2288abe5bcb365c7de8d0d58ceb0cc
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=7f1d654d9e2288…
Author: Lars Michelsen <lm(a)mathias-kettner.de>
Date: Fri Jun 30 09:26:10 2017 +0200
4925 Rule listing: Focussing rules after editing in list
When returning to the list of rules after editing a rule the
browser is told to focus this rule in the viewport again.
Change-Id: I8fb349cda37cd9ac90a38be920d4674f7f8e3ee6
---
.werks/4925 | 11 +++++++++++
web/htdocs/htmllib.py | 31 +++++++++++++++++++++++--------
web/htdocs/wato.py | 25 +++++++++++++++++++++++++
3 files changed, 59 insertions(+), 8 deletions(-)
diff --git a/.werks/4925 b/.werks/4925
new file mode 100644
index 0000000..af523ef
--- /dev/null
+++ b/.werks/4925
@@ -0,0 +1,11 @@
+Title: Rule listing: Focussing rules after editing in list
+Level: 1
+Component: wato
+Compatible: compat
+Edition: cre
+Version: 1.5.0i1
+Date: 1498807504
+Class: feature
+
+When returning to the list of rules after editing a rule the
+browser is told to focus this rule in the viewport again.
diff --git a/web/htdocs/htmllib.py b/web/htdocs/htmllib.py
index 3351d39..2d35c6f 100644
--- a/web/htdocs/htmllib.py
+++ b/web/htdocs/htmllib.py
@@ -1545,6 +1545,10 @@ class html(HTMLGenerator, RequestHandler):
self.focus_object = (self.form_name, varname)
+ def set_focus_by_id(self, dom_id):
+ self.focus_object = dom_id
+
+
def set_render_headfoot(self, render):
self.render_headfoot = render
@@ -1926,17 +1930,28 @@ class html(HTMLGenerator, RequestHandler):
def bottom_focuscode(self):
if self.focus_object:
- formname, varname = self.focus_object
- obj = formname + "." + varname
- js_code = "<!--\n"\
- "if (document.%s) {"\
- " document.%s.focus();\n"\
- " document.%s.select();\n"\
- "}\n"\
- "// -->\n" % (obj, obj, obj)
+ if type(self.focus_object) == tuple:
+ formname, varname = self.focus_object
+ obj_ident = formname + "." + varname
+ else:
+ obj_ident = "getElementById(\"%s\")" %
self.focus_object
+
+ js_code = "<!--\n" \
+ "var focus_obj = document.%s;\n" \
+ "if (focus_obj) {\n" \
+ " focus_obj.focus();\n" \
+ " if (focus_obj.select)\n" \
+ " focus_obj.select();\n" \
+ "}\n" \
+ "// -->\n" % obj_ident
self.javascript(js_code)
+ def focus_here(self):
+ self.a("", href="#focus_me", id_="focus_me")
+ self.set_focus_by_id("focus_me")
+
+
def body_end(self):
if self.have_help:
self.javascript("enable_help();")
diff --git a/web/htdocs/wato.py b/web/htdocs/wato.py
index d2c6df8..4666224 100644
--- a/web/htdocs/wato.py
+++ b/web/htdocs/wato.py
@@ -12541,6 +12541,28 @@ class ModeEditRuleset(WatoMode):
else:
self._hostname = None
+ self._just_edited_rule_from_vars()
+
+
+ # After actions like editing or moving a rule there is a rule that the user has been
+ # working before. Focus this rule row again to make multiple actions with a single
+ # rule easier to handle
+ def _just_edited_rule_from_vars(self):
+ if not html.has_var("rule_folder") or not
html.has_var("rulenr"):
+ self._just_edited_rule = None
+ return
+
+ rule_folder = Folder.folder(html.var("rule_folder"))
+ rulesets = FolderRulesets(rule_folder)
+ rulesets.load()
+ ruleset = rulesets.get(self._name)
+
+ try:
+ rulenr = int(html.var("rulenr")) # rule number relative to folder
+ self._just_edited_rule = ruleset.get_rule(rule_folder, rulenr)
+ except (IndexError, TypeError, ValueError, KeyError):
+ self._just_edited_rule = None
+
def title(self):
title = self._rulespec.title
@@ -12716,6 +12738,9 @@ class ModeEditRuleset(WatoMode):
table.row(css=" ".join(css) if css else None)
+ if self._just_edited_rule and self._just_edited_rule.folder == rule.folder
and self._just_edited_rule.index() == rulenr:
+ html.focus_here()
+
# Rule matching
if self._hostname:
table.cell(_("Ma."))