From e6e852864bcd3740c6f283f9c841ceec1a8109d6 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 30 Sep 2026 02:34:28 +0000 Subject: [PATCH] [automated] update groups.io wiki --- ...tion-07b87eb5d00416f24d1d9fb6b4e4ed02.css} | 168 +++++++++++++----- groups.io/g/MTFHRT/wiki/29602.html | 43 +++-- groups.io/g/MTFHRT/wiki/29602/175562.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/175563.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/175671.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/175689.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/175730.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/175908.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/175930.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/175991.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/176625.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/176627.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/176633.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/176690.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/176779.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/176862.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/176863.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/176870.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/176939.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/177139.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/177140.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/178199.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/178236.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/178516.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/178517.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/178526.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/179227.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/179444.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/181040.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/181092.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/181266.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/181781.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/183064.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/184065.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/184355.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/184356.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/184675.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/184793.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/184817.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/185552.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/185742.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/185743.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/185980.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/186269.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/186348.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/186514.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/186633.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/186634.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/186944.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/186993.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/187032.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/187071.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/187072.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/187073.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/187215.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/187225.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/187258.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/187259.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/187324.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/187370.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/187371.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/187424.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/187581.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/187590.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/187593.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/187707.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/187775.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/187810.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/187811.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/187839.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/187840.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/187847.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/187896.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/188033.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/188034.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/188214.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/188232.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/188240.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/188243.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/188266.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/188385.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/188427.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/188484.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/189123.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/189321.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/189646.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/189647.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/189700.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/189952.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/190227.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/190628.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/190629.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/190846.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/190847.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/190872.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/190915.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/190942.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/191406.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/191417.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/191626.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/192624.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/193627.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/194218.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/194253.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/194629.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/194635.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/194867.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/194939.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/195405.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/195973.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/195986.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/196048.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/196085.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/196597.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/197239.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/197796.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/197814.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/197818.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/197828.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/197829.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/197830.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/197997.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/198070.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/198075.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/198774.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/199148.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/199960.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/201192.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/201237.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/202979.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/203230.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/204015.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/204333.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/204789.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/205726.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/205727.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/206073.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/206112.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/206269.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/206447.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/206859.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/206934.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/207510.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/207698.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/208509.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/208683.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/209338.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/210138.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/210140.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/211449.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/212040.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/212071.html | 39 ++-- groups.io/g/MTFHRT/wiki/29602/212420.html | 39 ++-- groups.io/g/MTFHRT/wiki/29602/212423.html | 39 ++-- groups.io/g/MTFHRT/wiki/29602/212665.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/212667.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/212673.html | 41 +++-- groups.io/g/MTFHRT/wiki/29602/212920.html | 43 +++-- groups.io/g/MTFHRT/wiki/29602/212983.html | 43 +++-- groups.io/g/MTFHRT/wiki/29602/213045.html | 43 +++-- groups.io/g/MTFHRT/wiki/29602/213069.html | 43 +++-- groups.io/g/MTFHRT/wiki/29602/213231.html | 43 +++-- groups.io/g/MTFHRT/wiki/29602/213254.html | 43 +++-- groups.io/g/MTFHRT/wiki/29602/213594.html | 43 +++-- groups.io/g/MTFHRT/wiki/29602/213963.html | 43 +++-- groups.io/g/MTFHRT/wiki/29602/214391.html | 43 +++-- groups.io/g/MTFHRT/wiki/29602/214906.html | 43 +++-- groups.io/g/MTFHRT/wiki/29602/215338.html | 43 +++-- groups.io/g/MTFHRT/wiki/29602/217609.html | 43 +++-- groups.io/g/MTFHRT/wiki/29602/217714.html | 43 +++-- groups.io/g/MTFHRT/wiki/29602/218600.html | 43 +++-- groups.io/g/MTFHRT/wiki/29602/218808.html | 43 +++-- groups.io/g/MTFHRT/wiki/29602/220530.html | 43 +++-- groups.io/g/MTFHRT/wiki/29602/220531.html | 43 +++-- groups.io/g/MTFHRT/wiki/29602/221157.html | 43 +++-- groups.io/g/MTFHRT/wiki/29602/221772.html | 43 +++-- groups.io/g/MTFHRT/wiki/29602/224051.html | 43 +++-- groups.io/g/MTFHRT/wiki/29602/224977.html | 43 +++-- groups.io/g/MTFHRT/wiki/29602/227041.html | 43 +++-- groups.io/g/MTFHRT/wiki/29602/227222.html | 43 +++-- groups.io/g/MTFHRT/wiki/29602/228866.html | 43 +++-- groups.io/g/MTFHRT/wiki/29602/228886.html | 43 +++-- groups.io/g/MTFHRT/wiki/29602/228916.html | 43 +++-- groups.io/g/MTFHRT/wiki/29602/229403.html | 43 +++-- groups.io/g/MTFHRT/wiki/29602/230288.html | 43 +++-- groups.io/g/MTFHRT/wiki/29602/230395.html | 43 +++-- groups.io/g/MTFHRT/wiki/29602/230537.html | 43 +++-- groups.io/g/MTFHRT/wiki/29602/232100.html | 43 +++-- groups.io/g/MTFHRT/wiki/29602/233886.html | 43 +++-- groups.io/g/MTFHRT/wiki/29602/234501.html | 43 +++-- groups.io/g/MTFHRT/wiki/29602/234703.html | 43 +++-- groups.io/g/MTFHRT/wiki/29602/234780.html | 43 +++-- groups.io/g/MTFHRT/wiki/29602/235962.html | 43 +++-- groups.io/g/MTFHRT/wiki/29602/236073.html | 43 +++-- groups.io/g/MTFHRT/wiki/29602/238382.html | 43 +++-- groups.io/g/MTFHRT/wiki/29602/238397.html | 43 +++-- groups.io/g/MTFHRT/wiki/29602/238439.html | 43 +++-- groups.io/g/MTFHRT/wiki/29602/240030.html | 43 +++-- groups.io/g/MTFHRT/wiki/29602/240116.html | 43 +++-- groups.io/g/MTFHRT/wiki/29602/241006.html | 43 +++-- groups.io/g/MTFHRT/wiki/29602/243726.html | 43 +++-- groups.io/g/MTFHRT/wiki/29602/244106.html | 43 +++-- groups.io/g/MTFHRT/wiki/29602/244553.html | 43 +++-- groups.io/g/MTFHRT/wiki/29602/248108.html | 43 +++-- groups.io/g/MTFHRT/wiki/29602/255224.html | 43 +++-- groups.io/g/MTFHRT/wiki/29602/256279.html | 43 +++-- groups.io/g/MTFHRT/wiki/29602/261026.html | 43 +++-- groups.io/g/MTFHRT/wiki/29602/265018.html | 43 +++-- groups.io/g/MTFHRT/wiki/29602/267409.html | 43 +++-- groups.io/g/MTFHRT/wiki/29602/history.html | 23 ++- groups.io/g/MTFHRT/wiki/30846.html | 33 ++-- groups.io/g/MTFHRT/wiki/30846/171373.html | 33 ++-- groups.io/g/MTFHRT/wiki/30846/175561.html | 33 ++-- groups.io/g/MTFHRT/wiki/30846/175575.html | 33 ++-- groups.io/g/MTFHRT/wiki/30846/175576.html | 33 ++-- groups.io/g/MTFHRT/wiki/30846/175577.html | 33 ++-- groups.io/g/MTFHRT/wiki/30846/209880.html | 33 ++-- groups.io/g/MTFHRT/wiki/30846/213984.html | 33 ++-- groups.io/g/MTFHRT/wiki/30846/247399.html | 33 ++-- groups.io/g/MTFHRT/wiki/30846/248115.html | 33 ++-- groups.io/g/MTFHRT/wiki/30846/history.html | 23 ++- groups.io/g/MTFHRT/wiki/32288.html | 33 ++-- groups.io/g/MTFHRT/wiki/32288/175560.html | 33 ++-- groups.io/g/MTFHRT/wiki/32288/230680.html | 33 ++-- groups.io/g/MTFHRT/wiki/32288/history.html | 23 ++- groups.io/g/MTFHRT/wiki/34293.html | 33 ++-- groups.io/g/MTFHRT/wiki/34293/189320.html | 33 ++-- groups.io/g/MTFHRT/wiki/34293/189648.html | 33 ++-- groups.io/g/MTFHRT/wiki/34293/201261.html | 33 ++-- groups.io/g/MTFHRT/wiki/34293/201262.html | 33 ++-- groups.io/g/MTFHRT/wiki/34293/201265.html | 33 ++-- groups.io/g/MTFHRT/wiki/34293/208713.html | 33 ++-- groups.io/g/MTFHRT/wiki/34293/212912.html | 33 ++-- groups.io/g/MTFHRT/wiki/34293/212913.html | 33 ++-- groups.io/g/MTFHRT/wiki/34293/223753.html | 33 ++-- groups.io/g/MTFHRT/wiki/34293/228978.html | 33 ++-- groups.io/g/MTFHRT/wiki/34293/history.html | 23 ++- groups.io/g/MTFHRT/wiki/37530.html | 33 ++-- groups.io/g/MTFHRT/wiki/37530/209879.html | 33 ++-- groups.io/g/MTFHRT/wiki/37530/history.html | 23 ++- groups.io/g/MTFHRT/wiki/index.html | 33 ++-- 241 files changed, 6502 insertions(+), 3300 deletions(-) rename groups.io/css/{application-ab47fef79b718ba05bf14c1f606f129f.css => application-07b87eb5d00416f24d1d9fb6b4e4ed02.css} (99%) diff --git a/groups.io/css/application-ab47fef79b718ba05bf14c1f606f129f.css b/groups.io/css/application-07b87eb5d00416f24d1d9fb6b4e4ed02.css similarity index 99% rename from groups.io/css/application-ab47fef79b718ba05bf14c1f606f129f.css rename to groups.io/css/application-07b87eb5d00416f24d1d9fb6b4e4ed02.css index 42e61ca05..1555e030b 100644 --- a/groups.io/css/application-ab47fef79b718ba05bf14c1f606f129f.css +++ b/groups.io/css/application-07b87eb5d00416f24d1d9fb6b4e4ed02.css @@ -3764,7 +3764,8 @@ table.table-fixed { } .hashtag-label-white { - background-color: #fff; + --hashtag-bg: #fff; + background-color: var(--hashtag-bg); border-color: #ccc; } @@ -3776,171 +3777,213 @@ table.table-fixed { } .hashtag-label-green-lantern { - background-color: #61b16c; + --hashtag-bg: #61b16c; + background-color: var(--hashtag-bg); } .hashtag-label-cucumber { - background-color: #91d09a; + --hashtag-bg: #91d09a; + background-color: var(--hashtag-bg); } .hashtag-label-cerulean-blue { - background-color: #4191d6; + --hashtag-bg: #4191d6; + background-color: var(--hashtag-bg); } .hashtag-label-bluejean { - background-color: #8ec2ee; + --hashtag-bg: #8ec2ee; + background-color: var(--hashtag-bg); } .hashtag-label-capri-blue { - background-color: #88ddf7; + --hashtag-bg: #88ddf7; + background-color: var(--hashtag-bg); } .hashtag-label-aquamute { - background-color: #60d2b8; + --hashtag-bg: #60d2b8; + background-color: var(--hashtag-bg); } .hashtag-label-emerald-green { - background-color: #11adb1; + --hashtag-bg: #11adb1; + background-color: var(--hashtag-bg); } .hashtag-label-apricot { - background-color: #fe904b; + --hashtag-bg: #fe904b; + background-color: var(--hashtag-bg); } .hashtag-label-orange { - background-color: #faa849; + --hashtag-bg: #faa849; + background-color: var(--hashtag-bg); } .hashtag-label-yellow { - background-color: #fecd0f; + --hashtag-bg: #fecd0f; + background-color: var(--hashtag-bg); } .hashtag-label-cherry-blossom { - background-color: #f96ab0; + --hashtag-bg: #f96ab0; + background-color: var(--hashtag-bg); } .hashtag-label-peony { - background-color: #fb9bc4; + --hashtag-bg: #fb9bc4; + background-color: var(--hashtag-bg); } .hashtag-label-tomato { - background-color: #f85347; + --hashtag-bg: #f85347; + background-color: var(--hashtag-bg); } .hashtag-label-melon { - background-color: #fa8287; + --hashtag-bg: #fa8287; + background-color: var(--hashtag-bg); } .hashtag-label-orchid { - background-color: #df6cca; + --hashtag-bg: #df6cca; + background-color: var(--hashtag-bg); } .hashtag-label-pink { - background-color: #f39de4; + --hashtag-bg: #f39de4; + background-color: var(--hashtag-bg); } .hashtag-label-lilac { - background-color: #9f8cd5; + --hashtag-bg: #9f8cd5; + background-color: var(--hashtag-bg); } .hashtag-label-purple { - background-color: #837fd5; + --hashtag-bg: #837fd5; + background-color: var(--hashtag-bg); } .hashtag-label-dark-grey { - background-color: #4c4c4c; + --hashtag-bg: #4c4c4c; + background-color: var(--hashtag-bg); } .hashtag-label-light-grey { - background-color: #8c8c8c; + --hashtag-bg: #8c8c8c; + background-color: var(--hashtag-bg); } .hashtag-label-military { - background-color: #938953; + --hashtag-bg: #938953; + background-color: var(--hashtag-bg); } .hashtag-label-light-brown { - background-color: #c4bd97; + --hashtag-bg: #c4bd97; + background-color: var(--hashtag-bg); } .hashtag-label-moss-green { - background-color: #93ad59; + --hashtag-bg: #93ad59; + background-color: var(--hashtag-bg); } .hashtag-label-grey-blue { - background-color: #83adb5; + --hashtag-bg: #83adb5; + background-color: var(--hashtag-bg); } .hashtag-label-green-sage { - background-color: #9fc4ac; + --hashtag-bg: #9fc4ac; + background-color: var(--hashtag-bg); } .hashtag-label-sage { - background-color: #89bfbd; + --hashtag-bg: #89bfbd; + background-color: var(--hashtag-bg); } .hashtag-label-blush { - background-color: #ee836f; + --hashtag-bg: #ee836f; + background-color: var(--hashtag-bg); } .hashtag-label-mustard { - background-color: #cb9228; + --hashtag-bg: #cb9228; + background-color: var(--hashtag-bg); } .hashtag-label-mulbery { - background-color: #d55d75; + --hashtag-bg: #d55d75; + background-color: var(--hashtag-bg); } .hashtag-label-dusty-mauve { - background-color: #655251; + --hashtag-bg: #655251; + background-color: var(--hashtag-bg); } .hashtag-label-dark-orange { - background-color: #e76239; + --hashtag-bg: #e76239; + background-color: var(--hashtag-bg); } .hashtag-label-burnt-yellow { - background-color: #dab71f; + --hashtag-bg: #dab71f; + background-color: var(--hashtag-bg); } .hashtag-label-antique-pink { - background-color: #e5b9b7; + --hashtag-bg: #e5b9b7; + background-color: var(--hashtag-bg); } .hashtag-label-lips { - background-color: #c97586; + --hashtag-bg: #c97586; + background-color: var(--hashtag-bg); } .hashtag-label-terracotta { - background-color: #a7605f; + --hashtag-bg: #a7605f; + background-color: var(--hashtag-bg); } .hashtag-label-cloudy-blue { - background-color: #6381b4; + --hashtag-bg: #6381b4; + background-color: var(--hashtag-bg); } .hashtag-label-purple-grey { - background-color: #8593ab; + --hashtag-bg: #8593ab; + background-color: var(--hashtag-bg); } .hashtag-label-light-lilac { - background-color: #ccc1d9; + --hashtag-bg: #ccc1d9; + background-color: var(--hashtag-bg); } .hashtag-label-grape { - background-color: #5e3c58; + --hashtag-bg: #5e3c58; + background-color: var(--hashtag-bg); } .hashtag-label-purple-blue { - background-color: #4853a1; + --hashtag-bg: #4853a1; + background-color: var(--hashtag-bg); } .hashtag-label-sky { - background-color: #9cc7df; + --hashtag-bg: #9cc7df; + background-color: var(--hashtag-bg); } .hashtag-label-beige { - background-color: #dcc39c; + --hashtag-bg: #dcc39c; + background-color: var(--hashtag-bg); } .hashtag-box-white { @@ -8145,6 +8188,9 @@ body.dark-mode .feed-section-title i { margin-left: 4px; margin-top: 2px; display: inline-block; + /* Match the topic list's pills; the badge's 0.75em would otherwise + scale down from the 12px meta column. */ + font-size: 12px; } /* /feed empty state shown when the user has no groups with recent @@ -8343,6 +8389,7 @@ body.dark-mode input[type="file"], body.dark-mode textarea, body.dark-mode input[type="password"] { background-color: var(--dark-mode-input-color); + color: var(--dark-mode-text-color); } body.dark-mode .Xmce-widget, @@ -9666,6 +9713,14 @@ body.dark-mode .empty-state-title { * is retuned instead. */ +/* BS5's reboot turns on smooth scrolling for the whole document; BS3 had + * none. With it on, the browser's scroll restoration on Back animates up the + * page being left while htmx fetches the history entry, so returning from an + * expanded topic crawls up the messages before the topic list appears. */ +:root { + scroll-behavior: auto; +} + /* BS3 navbars carry no vertical padding and declare min-height: 50px; * BS5's .5rem paddings make the bar 66px, sliding content (body * padding-top: 60px) underneath it. Zeroing the padding is what restores @@ -10495,6 +10550,33 @@ fieldset:disabled .btn:hover { line-height: 1; } +/* Hashtag pills keep their colours on hover, focus and while their menu is + * open. BS3's .btn:hover changed only the text colour; BS5's state rules + * repaint the background from --bs-btn-hover-bg (transparent on a bare .btn) + * and the text from the body colour, so the pill vanished into the page. The + * anchor pills (a.badge) likewise took BS5's link-hover colour where BS3's + * a.label:hover kept white text. */ +.btn.hashtag-btn:is(:hover, :focus-visible, :active, .show), +a.badge[class*="hashtag-label-"]:hover, +a.badge[class*="hashtag-label-"]:focus { + background-color: var(--hashtag-bg); + border-color: transparent; + color: #fff; +} + +.btn.hashtag-btn.hashtag-label-white:is(:hover, :focus-visible, :active, .show), +a.badge.hashtag-label-white:hover, +a.badge.hashtag-label-white:focus { + border-color: #ccc; + color: #333; +} + +body.dark-mode .btn.hashtag-btn:is(:hover, :focus-visible, :active, .show), +body.dark-mode a.badge[class*="hashtag-label-"]:hover, +body.dark-mode a.badge[class*="hashtag-label-"]:focus { + color: var(--dark-mode-reverse-text-color); +} + /* The app's btn-default is light grey (#ccc, dark text; groupsio.css:808); * converted pages emit btn-secondary, which BS5 paints dark slate. Repaint * it to the app palette via the button variables, light and dark mode. */ diff --git a/groups.io/g/MTFHRT/wiki/29602.html b/groups.io/g/MTFHRT/wiki/29602.html index 7af8f32dc..70ae8b66e 100644 --- a/groups.io/g/MTFHRT/wiki/29602.html +++ b/groups.io/g/MTFHRT/wiki/29602.html @@ -152,7 +152,7 @@ gioReport({ msg: "bundle-load-failure", url: src, - client_id: "web.app01-g2.1039741.1790128634955905443" + client_id: "web.app01-g2.1848399.1790735630893435672" }); }; if (window.__gioBundleErr) { @@ -173,7 +173,7 @@ console.log("stack:", errorObj.stack); stack = errorObj.stack; } - console.log("client_id:", "web.app01-g2.1039741.1790128634955905443"); + console.log("client_id:", "web.app01-g2.1848399.1790735630893435672"); console.log("last_error:", lastError); console.log("stack:", stack); } @@ -228,7 +228,7 @@ column: column, stack: stack, last_error: lastError, - client_id: "web.app01-g2.1039741.1790128634955905443" + client_id: "web.app01-g2.1848399.1790735630893435672" }); lastError = errorMessage; return true; @@ -239,7 +239,7 @@ - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -312,6 +312,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -328,7 +341,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -312,6 +312,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -328,7 +341,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -312,6 +312,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -328,7 +341,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -312,6 +312,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -328,7 +341,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -312,6 +312,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -328,7 +341,7 @@ }, true); - + - + MTFHRT@groups.io | Wiki @@ -313,6 +313,19 @@ if (bar) bar.classList.remove('active'); }); + // Bootstrap appends an open tooltip to , outside the content HTMX + // replaces, so clicking a boosted link while its tooltip shows would leave + // the tooltip stranded on the new page. Dispose of the open tooltips + // whose triggers are about to be swapped out. + document.addEventListener('htmx:beforeSwap', function(evt) { + var target = evt.detail && evt.detail.target; + if (!target || typeof bootstrap === 'undefined') return; + target.querySelectorAll('[aria-describedby^="tooltip"]').forEach(function(el) { + var tip = bootstrap.Tooltip.getInstance(el); + if (tip) tip.dispose(); + }); + }); + // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, @@ -329,7 +342,7 @@ }, true); - +