b56b616deec9a8b92b3abaf45b78e06d973a6517 max Mon Jan 13 10:24:56 2025 -0800 addressing various issues on the hgTrackUi config page that have to do with visibility interactions between composite parents and children, refs #4042 diff --git src/hg/js/subCfg.js src/hg/js/subCfg.js index 9682e54..1d6ab16 100644 --- src/hg/js/subCfg.js +++ src/hg/js/subCfg.js @@ -36,30 +36,42 @@ // There is one instance and these vars are page wide compositeName: undefined, canPack: true, // if composite vis is only hide,dense,full, then all children also restricted. visIndependent: false, 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'); + // if the user checked a child checkbox that used to be unchecked, and the parent composite is on hide, + // then set the parent composite to pack + var compEl = $("[name='"+this.compositeName+"'"); + if (compEl.length!==0 && obj.type==="checkbox" && obj.checked && compEl.val()==="hide") + compEl.val("pack"); + + // if the user unchecked a child checkbox that used to be checked, and the parent composite is on pack, + // and no more child is checked, then set the parent composite to hide. + var subCfgs = $(".subCB:checked"); + if (subCfgs.length===0) + compEl.val("hide"); + // 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) @@ -431,38 +443,51 @@ } else { // No view so, simple var visText = 'hide'; if (parentVis === 1) visText = 'dense'; else if (parentVis === 2) { if (subCfg.canPack) visText = 'squish'; else visText = 'full'; } else if (parentVis === 3) visText = 'pack'; else if (parentVis === 4) visText = 'full'; var children = subCfg.visChildrenFind(parentObj); + + var checkedCount = 0; $(children).each(function (i) { + // the checkbox is in the