1<!DOCTYPE html> 2<html lang="en"> 3 4<head> 5 <meta charset="utf-8"> 6 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 7 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 8 <meta name="twitter:card" content="summary"> 9 10 <meta name="twitter:title" content="Search"> 11 <meta property="og:title" content="Search"> 12 13 14 <meta name="twitter:description" content=""> 15 <meta name="og:description" content=""> 16 <meta name="description" content=" 17 18 19 20 21 22 Loading posts... 23 24 25"> 26 27 28 <title>Search | Catholic Husband</title> 29 <link rel="canonical" href="https://catholichusband.com/search/"> 30 31 <link rel="stylesheet" href="/css/main.css?1790876197"> 32 33 34 <link rel="stylesheet" href="/css/all.min.css?1790876197"> 35 36 37 <link rel="alternate" href="https://catholichusband.com/feed.xml" type="application/rss+xml" title="Catholic Husband"> 38 <link rel="alternate" href="https://catholichusband.com/feed.json" type="application/json" title="Catholic Husband"> 39 40 41 42 43<link rel="me" href="https://micro.blog/chet"> 44 45 46 47 48 49 50 51<link rel="shortcut icon" href="https://micro.blog/chet/favicon.png" type="image/x-icon"> 52<link rel="EditURI" type="application/rsd+xml" href="https://catholichusband.com/rsd.xml"> 53<link rel="authorization_endpoint" href="https://micro.blog/indieauth/auth"> 54<link rel="token_endpoint" href="https://micro.blog/indieauth/token"> 55<link rel="subscribe" href="https://micro.blog/users/follow"> 56<link rel="webmention" href="https://micro.blog/webmention"> 57<link rel="micropub" href="https://micro.blog/micropub"> 58<link rel="microsub" href="https://micro.blog/microsub"> 59 60 61 62 63 64<link rel="stylesheet" href="/custom.css?1790876197"> 65 66 67 <link rel="stylesheet" href="/archive_months.css?v=8"> 68 69 70 71 <link rel="stylesheet" href="/css/barefoot.min.css">
72<script src="/js/barefoot.min.js"></script>
vendor: 1 bytes, line 72
72
73<script> 74 document.addEventListener("DOMContentLoaded", (event) => { 75 var barefoot = new BareFoot(); 76 barefoot.init(); 77 }); 78</script>
78 79 80 81
81<script src="https://tinylytics.app/embed/uGuqsqW8MJx3tyXds1aB.js?hits&kudos=%f0%9f%91%8d&uptime&webring=avatars&countries&publicstats" defer></script>
81 82 83 84 85 86 87<link rel=âshortcut iconâ href=âhttps://catholichusband.com/uploads/2025/ch-favicon.pngâ type=âimage/x-iconâ /> 88 89<link rel="apple-touch-icon" sizes="180x180" href="https://catholichusband.com/uploads/2025/ch-favicon.png" /> 90<link rel="apple-touch-icon" sizes="167x167" href="https://catholichusband.com/uploads/2025/ch-favicon.png" /> 91<link rel="apple-touch-icon" sizes="152x152" href="https://catholichusband.com/uploads/2025/ch-favicon.png" /> 92<link rel="icon" type="image/png" href="https://catholichusband.com/uploads/2025/ch-favicon.png" sizes="64x64" /> 93<link rel="icon" type="image/png" href="https://catholichusband.com/uploads/2025/ch-favicon.png" sizes="32x32" /> 94<link rel="icon" type="image/png" href="https://catholichusband.com/uploads/2025/ch-favicon.png" sizes="16x16" /> 95
96<script src="https://kit.fontawesome.com/195ca702f0.js" crossorigin="anonymous"></script>
96 97<link rel="stylesheet" type="text/css" href="https://chetcomm.com/fonts/fontkit/stylesheet.css" /> 98 99<link rel="preload" as="image" href="/uploads/2025/catholic-husband-logo.png" fetchpriority="high"> 100 101 102</head> 103 104 105<body> 106 <header class="site-header"> 107 108 109<a href="/" class="site-logo-link" aria-label="Catholic Husband home"> 110 <img 111 src="/uploads/2026/catholic-husband-logo.svg" 112 alt="Catholic Husband" 113 class="site-logo" 114 width="300" 115 height="151" 116 fetchpriority="high"> 117</a> 118 119 120 <h1><a class="site-title p-name u-url" href="/">Catholic Husband</a></h1> 121 122 123 124 Essays to strengthen husbands, fathers, and families in faith. 125 126 127 128 <nav class="site-nav"> 129 <ul> 130 131 132 133 <li><a class="page-link About" href="/about/">About</a></li> 134 135 136 137 <li><a class="page-link Archive" href="/archive/">Archive</a></li> 138 139 140 141 <li><a class="page-link Subscribe" href="/subscribe/">Subscribe</a></li> 142 143 144 145 <li><a class="page-link Search" href="/search/">Search</a></li> 146 147 148 149 </ul> 150 </nav> 151 152 153</header> 154 155 <div class="page-content"> 156 <div class="wrapper"> 157 158<div class="page"> 159 160 161 162 163 <h2 class="p-name">Search</h2> 164 165 166 167 168 <article class="post-content"> 169
169<script language="javascript"> 170 171var archive_results = {}; 172 173function runSearch(q) { 174 let results_node = document.getElementById("list_results"); 175 results_node.innerHTML = ""; 176 if (q.length > 0) { 177 // split query into lowercase words 178 let keywords = q.toLowerCase().trim().split(/\s+/); 179 180 for (let i = 0; i < archive_results.items.length; i++) { 181 let item = archive_results.items[i]; 182 let title_lower = item.title.toLowerCase(); 183 let text_lower = item.content_text.toLowerCase(); 184 185 // combine title and text into one searchable string 186 let full_text = title_lower + " " + text_lower; 187 188 // check if every keyword exists 189 let match = keywords.every(function(k) { 190 return full_text.includes(k); 191 }); 192 193 if (match) { 194 let p_node = document.createElement("p"); 195 let link_node = document.createElement("a"); 196 let d = Date.parse(item.date_published); 197 let date_s = new Date(d).toISOString().substr(0, 10); 198 let date_node = document.createTextNode(date_s); 199 link_node.appendChild(date_node); 200 link_node.href = item.url; 201 let title_node = null; 202 if (item.title.length > 0) { 203 title_node = document.createElement("span"); 204 title_node.innerHTML = ": <b>" + item.title + "</b>" 205 } 206 let s = item.content_text; 207 if (s.length > 200) { 208 s = s.substr(0, 200) + "..."; 209 } 210 let text_node = document.createElement("span"); 211 text_node.innerHTML = ": " + s 212 p_node.appendChild(link_node); 213 if (title_node != null) { 214 p_node.appendChild(title_node); 215 } 216 p_node.appendChild(text_node); 217 results_node.appendChild(p_node); 218 } 219 } 220 } 221} 222 223function submitSearch(q) { 224 runSearch(q); 225 226 // push query into URL 227 const url = new URL(window.location.href); 228 url.searchParams.set("q", q); 229 history.pushState({}, "", url); 230} 231 232document.addEventListener("DOMContentLoaded", function() { 233 let loading_timer = setTimeout(function() { 234 // show status text if archive doesn't load very quickly 235 document.getElementById("list_loading").style.display = "flex"; 236 }, 1500); 237 238 fetch("/archive/index.json").then(response => response.json()).then(data => { 239 archive_results = data; 240 241 clearTimeout(loading_timer); 242 document.getElementById("list_loading").style.display = "none"; 243 244 // restore from search args 245 const url = window.location.href; 246 const params = new URLSearchParams(new URL(url).search); 247 const q = params.get("q"); 248 if (q && (q.length > 0)) { 249 document.getElementById("input_search").value = q; 250 runSearch(q); 251 } 252 }); 253}); 254 255</script>
255 256<style> 257 258#search { 259 display: none; 260} 261 262form { 263 display: flex; 264 justify-content: center; 265} 266 267#list_loading { 268 display: none; 269 font-size: 14px; 270 justify-content: center; 271} 272 273.field { 274 width: 270px; 275 height: 34px; 276 font-size: 13px; 277 font-weight: 400; 278 padding-left: 12px; 279 border: 2px solid #eee; 280 margin-top: 20px; 281 margin-bottom: 20px; 282 border-radius: 17px; 283 -webkit-appearance: none; 284} 285 286</style> 287<form onSubmit="return false;"> 288 <input class="field" type="text" name="q" id="input_search" placeholder="Search" onChange="submitSearch(this.value.toLowerCase());"> 289</form> 290<div id="list_loading"> 291 Loading posts... 292</div> 293<div id="list_results"> 294</div> 295 296 </article> 297 298 299 300</div> 301 302 </div> 303 304 </div> 305 <footer class="site-footer"> 306 307 <div class="wrapper"> 308 309 <p class="custom_footer"><a href="https://chetjcollins.com"><i class="fa-brands fa-microblog fa-2xl" style="color: #1565c0;"></i></a> 310<a href="https://chetcollins.com"><i class="fa-solid fa-books fa-xl" style="color: #1565c0;"></i></a> 311<a href="/subscribe"><i class="fa-solid fa-paper-plane fa-xl" style="color: #1565c0;"></i></a> 312<a href="https://catholichusband.com/feed.xml"><i class="fa-solid fa-rss fa-xl" style="color: #1565c0;"></i></a> 313<br> 314© <span>2026</span> ChetComm, LLC</p> 315 316 </div> 317 318</footer> 319 320 321 322 323 324</body> 325 326</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.