PageSourceSearch

https://catholichusband.com/search/

html catholichusband.com collected 2026-10-06 15:03:27 UTC 8,126 bytes, 326 lines download raw bytes

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.