From: skodak <skodak>
Date: Tue, 26 Aug 2008 06:41:37 +0000 (+0000)
Subject: MDL-16115 strict fixes for admin settings unmask field too
X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=633239f6196ba470f4bb06326156d96ae02edb38;p=moodle.git

MDL-16115 strict fixes for admin settings unmask field too
---

diff --git a/lib/adminlib.php b/lib/adminlib.php
index a83bddcfe0..c2f955719c 100644
--- a/lib/adminlib.php
+++ b/lib/adminlib.php
@@ -2161,12 +2161,36 @@ class admin_setting_configpasswordunmask extends admin_setting_configtext {
         $unmask = get_string('unmaskpassword', 'form');
         $unmaskjs = '<script type="text/javascript">
 //<![CDATA[
-document.write(\'<span class="unmask"><input id="'.$id.'unmask" value="1" type="checkbox" onclick="unmaskPassword(\\\''.$id.'\\\')"/><label for="'.$id.'unmask">'.addslashes_js($unmask).'<\/label><\/span>\');
-document.getElementById("'.$this->get_id().'").setAttribute("autocomplete", "off");
+var is_ie = (navigator.userAgent.toLowerCase().indexOf("msie") != -1);
+
+document.getElementById("'.$id.'").setAttribute("autocomplete", "off");
+
+var unmaskdiv = document.getElementById("'.$id.'unmaskdiv");
+
+var unmaskchb = document.createElement("input");
+unmaskchb.setAttribute("type", "checkbox");
+unmaskchb.setAttribute("id", "'.$id.'unmask");
+unmaskchb.onchange = function() {unmaskPassword("'.$id.'");};
+unmaskdiv.appendChild(unmaskchb);
+
+var unmasklbl = document.createElement("label");
+unmasklbl.innerHTML = "'.addslashes_js($unmask).'";
+if (is_ie) {
+  unmasklbl.setAttribute("htmlFor", "'.$id.'unmask");
+} else {
+  unmasklbl.setAttribute("for", "'.$id.'unmask");
+}
+unmaskdiv.appendChild(unmasklbl);
+
+if (is_ie) {
+  // ugly hack to work around the famous onchange IE bug
+  unmaskchb.onclick = function() {this.blur();};
+  unmaskdiv.onclick = function() {this.blur();};
+}
 //]]>
 </script>';
         return format_admin_setting($this, $this->visiblename,
-                '<div class="form-password"><input type="password" size="'.$this->size.'" id="'.$this->get_id().'" name="'.$this->get_full_name().'" value="'.s($data).'" />'.$unmaskjs.'</div>',
+                '<div class="form-password"><input type="password" size="'.$this->size.'" id="'.$id.'" name="'.$this->get_full_name().'" value="'.s($data).'" /><div class="unmask" id="'.$id.'unmaskdiv"></div>'.$unmaskjs.'</div>',
                 $this->description, true, '', NULL, $query);
     }
 }
diff --git a/theme/standard/styles_layout.css b/theme/standard/styles_layout.css
index 5a4cdf6dab..a7b90f58a0 100644
--- a/theme/standard/styles_layout.css
+++ b/theme/standard/styles_layout.css
@@ -1088,6 +1088,10 @@ body#admin-modules table.generaltable td.c0
   text-align: left;
 }
 
+#adminsettings div.form-password div.unmask {
+  display: inline;
+}
+
 #adminsettings fieldset {
   margin-top: 1em;
   padding: 1em 0.5em;