06d7be056190c14b85e71bc12523f18ea6815b5e
markd
  Mon Dec 7 00:50:29 2020 -0800
BLAT mmap index support merge with master

diff --git src/hg/js/subCfg.js src/hg/js/subCfg.js
index 790cf1a..755c23b 100644
--- src/hg/js/subCfg.js
+++ src/hg/js/subCfg.js
@@ -34,43 +34,53 @@
     viewTags: [],
 
     markChange: function (eventObj, obj)
     { // Marks a control as having been changed by the user.  Naming will send value to cart.
       // Note this is often called directly as the onchange event function
         if (!obj || $.type(obj) === "string")
             obj = this;
 
         $(obj).addClass('changed');
 
         // checkboxes have hidden boolshads which should be marked when unchecked
         if (obj.type === "checkbox") {
             var boolshad = normed($("input.cbShadow#boolshad\\."+obj.id));
             if (boolshad) {
                 $(boolshad).addClass('changed');
+	    } else {
+		boolshad = normed($("input.cbShadow[name='boolshad\\." + obj.name+"']"));
+		if (boolshad) {
+		    $(boolshad).addClass('changed');
+		}
             }
         }
     },
 
     clearChange: function (obj)
     { // Mark as unchanged
         $(obj).removeClass('changed');
 
         // checkboxes have hidden boolshads which should be cleared in tandem
         if (obj.type === "checkbox") {
             var boolshad = normed($("input.cbShadow#boolshad\\."+obj.id));
             if (boolshad) {
                 $(boolshad).removeClass('changed');
+	    } else {
+		boolshad = normed($("input.cbShadow[name='boolshad\\." + obj.name+"']"));
+		if (boolshad) {
+		    $(boolshad).removeClass('changed');
+		}
             }
         }
     },
 
     hasChanged: function (obj)
     { // Is this object updated (value changed by a user)?
         return $(obj).hasClass('changed');
     },
 
     compositeCfgFind: function ()
     { // returns the cfg container for the composite controls
         // TODO: write, create a composite cfg div!
     },
 
     compositeObjFind: function (suffix)