PageSourceSearch

https://hub.farthinghalearms.com/help/about

html farthinghalearms.com collected 2026-10-07 21:29:12 UTC 47,128 bytes, 1,080 lines download raw bytes

1<!DOCTYPE html >
2<html prefix="og: http://ogp.me/ns#" data-bs-theme="light">
3<head>
4  <title>Help: About</title>
5  
5<script>var baseurl="https://hub.farthinghalearms.com";</script>
5
6  <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
7<base href="https://hub.farthinghalearms.com/" />
8<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=0" />
9
10<meta name="application-name" content="hubzilla" />
11<meta name="generator" content="hubzilla" />
12<meta name="theme-color" content="rgb(248, 249, 250)" />
13
14<link rel="stylesheet" href="https://hub.farthinghalearms.com/library/jRange/jquery.range.css?v=11.4.1" type="text/css" media="screen">
15<link rel="stylesheet" href="https://hub.farthinghalearms.com/view/css/conversation.css?v=11.4.1" type="text/css" media="screen">
16<link rel="stylesheet" href="https://hub.farthinghalearms.com/view/css/widgets.css?v=11.4.1" type="text/css" media="screen">
17<link rel="stylesheet" href="https://hub.farthinghalearms.com/view/css/colorbox.css?v=11.4.1" type="text/css" media="screen">
18<link rel="stylesheet" href="https://hub.farthinghalearms.com/library/justifiedGallery/justifiedGallery.min.css?v=11.4.1" type="text/css" media="screen">
19<link rel="stylesheet" href="https://hub.farthinghalearms.com/library/datetimepicker/jquery.datetimepicker.css?v=11.4.1" type="text/css" media="screen">
20<link rel="stylesheet" href="https://hub.farthinghalearms.com/vendor/twbs/bootstrap-icons/font/bootstrap-icons.min.css?v=11.4.1" type="text/css" media="screen">
21<link rel="stylesheet" href="https://hub.farthinghalearms.com/library/bootstrap-tagsinput/bootstrap-tagsinput.css?v=11.4.1" type="text/css" media="screen">
22<link rel="stylesheet" href="https://hub.farthinghalearms.com/library/bootstrap-colorpicker/dist/css/bootstrap-colorpicker.min.css?v=11.4.1" type="text/css" media="screen">
23<link rel="stylesheet" href="https://hub.farthinghalearms.com/view/css/default.css?v=11.4.1" type="text/css" media="screen">
24<link rel="stylesheet" href="https://hub.farthinghalearms.com/view/css/mod_help.css?v=11.4.1" type="text/css" media="screen">
25<link rel="stylesheet" href="https://hub.farthinghalearms.com/view/theme/redbasic/php/style.css?v=11.4.1" type="text/css" media="screen">
26
27<script>
28
29	var aStr = {
30
31		'delitem'     : "Delete this item?",
32		'itemdel'     : "Item deleted",
33		'comment'     : "Comment",
34		'divgrowmore' : "expand",
35		'divgrowless' : "collapse",
36		'pwshort'     : "Password too short",
37		'pwnomatch'   : "Passwords do not match",
38		'everybody'   : "everybody",
39		'passphrase'  : "Secret Passphrase",
40		'passhint'    : "Passphrase hint",
41		'permschange' : "Notice: Permissions have changed but have not yet been submitted.",
42		'closeAll'    : "close all",
43		'nothingnew'  : "Nothing new here",
44		'rating_desc' : "Rate This Channel (this is public)",
45		'rating_val'  : "Rating",
46		'rating_text' : "Describe (optional)",
47		'submit'      : "Submit",
48		'linkurl'     : "Please enter a link URL",
49		'leavethispage' : "Unsaved changes. Are you sure you wish to leave this page?",
50		'location'    : "Location",
51		'lovely'      : "lovely",
52		'wonderful'   : "wonderful",
53		'fantastic'   : "fantastic",
54		'great'       : "great",
55		'nick_invld1' : "Your chosen nickname was either already taken or not valid. Please use our suggestion (",
56		'nick_invld2' : ") or enter a new one.",
57		'nick_valid'  : "Thank you, this nickname is valid.",
58		'name_empty'  : "A channel name is required.",
59		'name_ok1'    : "This is a ",
60		'name_ok2'    : " channel name",
61		'to_reply'    : "Back to reply",
62		'pinned'      : "Pinned",
63		'pin_item'    : "Pin to the top",
64		'unpin_item'  : "Unpin from the top",
65		'dblclick_to_exit_zoom'  : "Double click to exit zoom",
66
67		'monthNames' : [ "January","February","March","April","May","June","July","August","September","October","November","December" ],
68		'monthNamesShort' : [ "Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec" ],
69		'dayNames' : ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],
70		'dayNamesShort' : ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],
71		'today' : "today",
72		'month' : "month",
73		'week' : "week",
74		'day' : "day",
75		'allday' : "All day",
76
77		// mod cloud
78		'download_info' : "Please stand by while your download is being prepared.",
79
80		// mod register
81		'email_not_valid' : "Email address not valid",
82		'email_required' : "Required"
83
84	};
85
86</script>
86
87
88
89<script src="https://hub.farthinghalearms.com/view/js/jquery.js?v=11.4.1"></script>
vendor: 2 bytes, line 89
89
90<script src="https://hub.farthinghalearms.com/library/datetimepicker/jquery.datetimepicker.js?v=11.4.1"></script>
vendor: 2 bytes, line 90
90
91<script src="https://hub.farthinghalearms.com/library/justifiedGallery/jquery.justifiedGallery.min.js?v=11.4.1"></script>
vendor: 2 bytes, line 91
91
92<script src="https://hub.farthinghalearms.com/library/textcomplete/textcomplete.min.js?v=11.4.1"></script>
vendor: 2 bytes, line 92
92
93<script src="https://hub.farthinghalearms.com/view/js/autocomplete.js?v=11.4.1"></script>
vendor: 2 bytes, line 93
93
94<script src="https://hub.farthinghalearms.com/library/readmore.js/readmore.js?v=11.4.1"></script>
vendor: 2 bytes, line 94
94
95<script src="https://hub.farthinghalearms.com/library/libsodium/browsers/sodium.js?v=11.4.1"></script>
vendor: 2 bytes, line 95
95
96<script src="https://hub.farthinghalearms.com/view/js/acl.js?v=11.4.1"></script>
vendor: 2 bytes, line 96
96
97<script src="https://hub.farthinghalearms.com/view/js/webtoolkit.base64.js?v=11.4.1"></script>
vendor: 2 bytes, line 97
97
98<script src="https://hub.farthinghalearms.com/view/js/crypto.js?v=11.4.1"></script>
vendor: 2 bytes, line 98
98
99<script src="https://hub.farthinghalearms.com/library/jRange/jquery.range.js?v=11.4.1"></script>
vendor: 2 bytes, line 99
99
100<script src="https://hub.farthinghalearms.com/library/colorbox/jquery.colorbox-min.js?v=11.4.1"></script>
vendor: 2 bytes, line 100
100
101<script src="https://hub.farthinghalearms.com/library/jquery.AreYouSure/jquery.are-you-sure.js?v=11.4.1"></script>
vendor: 2 bytes, line 101
101
102<script src="https://hub.farthinghalearms.com/library/tableofcontents/jquery.toc.js?v=11.4.1"></script>
vendor: 2 bytes, line 102
102
103<script src="https://hub.farthinghalearms.com/library/Sortable/Sortable.min.js?v=11.4.1"></script>
vendor: 2 bytes, line 103
103
104<script src="https://hub.farthinghalearms.com/vendor/twbs/bootstrap/dist/js/bootstrap.bundle.min.js?v=11.4.1"></script>
vendor: 2 bytes, line 104
104
105<script src="https://hub.farthinghalearms.com/library/bootstrap-tagsinput/bootstrap-tagsinput.js?v=11.4.1"></script>
vendor: 2 bytes, line 105
105
106<script src="https://hub.farthinghalearms.com/library/bootstrap-colorpicker/dist/js/bootstrap-colorpicker.js?v=11.4.1"></script>
vendor: 2 bytes, line 106
106
107<script src="https://hub.farthinghalearms.com/view/theme/redbasic/js/redbasic.js?v=11.4.1"></script>
vendor: 2 bytes, line 107
107
108<script src="https://hub.farthinghalearms.com/view/js/mod_help.js?v=11.4.1"></script>
108
109
110<link rel="manifest" href="/manifest.json" />
111<link rel="shortcut icon" href="https://hub.farthinghalearms.com/images/hubzilla.svg" />
112<link rel="apple-touch-icon" href="/images/app/hz-192.png" />
113
114
115<script>
116	var lang = 'en';
117	var updateInterval = 80000;
118	var sse_enabled = 0;
119	var localUser = false;
120	var zid = null;
121	var justifiedGalleryActive = false;
122		var channelId = false;	var auto_save_draft = false;
123	var module = 'help';</script>
123
124
125
126
127<script>$(document).ready(function() { $("#nav-search-text").search_autocomplete('https://hub.farthinghalearms.com/acl');});</script>
127<script type="text/javascript" src="https://hub.farthinghalearms.com/addon/openstreetmap/openstreetmap.js"></script>
vendor: 2 bytes, line 127
127
128<script src="https://hub.farthinghalearms.com/view/js/main.js?v=11.4.1"></script>
128
129</head>
130<body  >
131		<header><div id="toast-container" class="vstack gap-3 m-3 position-fixed top-0 end-0"></div>
132</header>
133	<nav id="navbar-top" class="navbar navbar-expand-lg sticky-top bg-body-tertiary mb-4" >
134	<div class="container-fluid flex-nowrap">
135				<div class="navbar-text d-lg-none navbar-banner">Farthinghale Arms</div>
136				<div class="navbar-toggler-right">
137						<button id="expand-aside" type="button" class="d-lg-none navbar-toggler border-0">
138				<i class="bi bi-arrow-right-circle generic-icons" id="expand-aside-icon"></i>
139			</button>
140						<button id="menu-btn" class="navbar-toggler border-0" type="button" data-bs-toggle="offcanvas" data-bs-target="#app-bin">
141				<i class="bi bi-three-dots-vertical generic-icons"></i>
142			</button>
143		</div>
144		<div class="collapse navbar-collapse justify-content-between" id="navbar-collapse-1">
145			<ul class="navbar-nav">
146								<li class="nav-item d-lg-flex">
147										<a class="nav-link" href="#" title="Sign in" data-bs-toggle="modal" data-bs-target="#nav-login">
148					Login
149					</a>
150									</li>
151															</ul>
152
153			<div class="navbar-text navbar-banner">Farthinghale Arms</div>
154
155			<ul id="nav-right" class="navbar-nav">
156				<li class="nav-item collapse clearfix" id="nav-search" data-bs-theme="light">
157					<form class="form-inline" method="get" action="search" role="search">
158						<input class="form-control form-control-sm mt-1 me-2" id="nav-search-text" type="text" value="" placeholder="@name, #tag, ?doc, content" name="search" title="Search site @name, !forum, #tag, ?docs, content" onclick="this.submit();" onblur="closeMenu('nav-search'); openMenu('nav-search-btn');"/>
159					</form>
160					<div id="nav-search-spinner" class="spinner-wrapper">
161						<div class="spinner s"></div>
162					</div>
163				</li>
164				<li class="nav-item" id="nav-search-btn">
165					<a class="nav-link" href="#nav-search" title="Search site @name, !forum, #tag, ?docs, content" onclick="openMenu('nav-search'); closeMenu('nav-search-btn'); $('#nav-search-text').focus(); return false;"><i class="bi bi-search generic-icons"></i></a>
166				</li>
167																<li class="nav-item dropdown" id="app-menu">
168					<a class="nav-link" href="#" data-bs-toggle="offcanvas" data-bs-target="#app-bin" aria-controls="app-bin"><i class="bi bi-three-dots-vertical generic-icons"></i></a>
169				</li>
170			</ul>
171		</div>
172			</div>
173</nav>
174<div class="offcanvas offcanvas-end" tabindex="-1" id="app-bin" aria-labelledby="app-bin-label">
175	<div class="offcanvas-header">
176
177				<div class="hstack gap-1 d-lg-none pt-1 pb-1">
178						<a class="btn btn-primary btn-sm text-white" href="#" title="Sign in" data-bs-toggle="modal" data-bs-target="#nav-login">
179				Login
180			</a>
181						
182		</div>
183		<div class="nav d-lg-flex w-100"></div>
184				<div class="hstack gap-1">
185						<button id="theme-switch" type="button" class="btn btn-outline-secondary border-0"><i id="theme-switch-icon" class="bi bi-moon"></i></button>
186						<button type="button" class="btn-close text-reset" data-bs-dismiss="offcanvas" aria-label="Close"></button>
187		</div>
188
189	</div>
190	<div class="offcanvas-body">
191								<div class="text-uppercase text-muted nav-link">
192			System Apps
193		</div>
194		<div class="nav nav-pills flex-column">
195							<a class="nav-link" href="https://hub.farthinghalearms.com/directory" data-papp="eyJ2ZXJzaW9uIjoiNCIsInVybCI6IiRiYXNldXJsXC9kaXJlY3RvcnksICRiYXNldXJsXC9z
196ZXR0aW5nc1wvZGlyZWN0b3J5IiwibmFtZSI6IkRpcmVjdG9yeSIsInBob3RvIjoiaWNvbjpk
197aWFncmFtLTMiLCJjYXRlZ29yaWVzIjoibmF2X2ZlYXR1cmVkX2FwcCwgTmV0d29ya2luZyIs
198ImRlc2MiOiJNZW1iZXJzIGRpcmVjdG9yeSBvZiB0aGUgWm90IG5ldHdvcmsuIiwidHlwZSI6
199InN5c3RlbSIsInBsdWdpbiI6IiJ9
200" data-icon="diagram-3" data-url="https://hub.farthinghalearms.com/directory" data-name="Directory"><i class="generic-icons-nav bi bi-diagram-3"></i>Directory</a>
201
202							<a class="nav-link active" href="https://hub.farthinghalearms.com/help" data-papp="eyJ2ZXJzaW9uIjoiNCIsInVybCI6IiRiYXNldXJsXC9oZWxwIiwibmFtZSI6IkhlbHAiLCJw
203aG90byI6Imljb246cXVlc3Rpb24tbGciLCJjYXRlZ29yaWVzIjoibmF2X2ZlYXR1cmVkX2Fw
204cCwgU3lzdGVtIiwiZGVzYyI6IlRoZSBIdWJ6aWxsYSBoZWxwIHBhZ2VzLiIsInR5cGUiOiJz
205eXN0ZW0iLCJwbHVnaW4iOiIiLCJhY3RpdmUiOnRydWV9
206" data-icon="question-lg" data-url="https://hub.farthinghalearms.com/help" data-name="Help"><i class="generic-icons-nav bi bi-question-lg"></i>Help</a>
207
208							<a class="nav-link" href="https://hub.farthinghalearms.com/lang" data-papp="eyJ2ZXJzaW9uIjoiNCIsInVybCI6IiRiYXNldXJsXC9sYW5nIiwibmFtZSI6Ikxhbmd1YWdl
209IiwicGhvdG8iOiJpY29uOnRyYW5zbGF0ZSIsImNhdGVnb3JpZXMiOiJTeXN0ZW0iLCJkZXNj
210IjoiQSBzaW1wbGUgbGFuZ3VhZ2Ugc2VsZWN0b3IuIiwidHlwZSI6InN5c3RlbSIsInBsdWdp
211biI6IiJ9
212" data-icon="translate" data-url="https://hub.farthinghalearms.com/lang" data-name="Language"><i class="generic-icons-nav bi bi-translate"></i>Language</a>
213
214							<a class="nav-link" href="https://hub.farthinghalearms.com/randprof" data-papp="eyJ2ZXJzaW9uIjoiNCIsInVybCI6IiRiYXNldXJsXC9yYW5kcHJvZiIsIm5hbWUiOiJSYW5k
215b20gQ2hhbm5lbCIsInRhcmdldCI6InJhbmRwcm9mIiwicGhvdG8iOiJpY29uOnNodWZmbGUi
216LCJjYXRlZ29yaWVzIjoiTmV0d29ya2luZyIsImRlc2MiOiJWaXNpdCBhIHJhbmRvbSBjaGFu
217bmVsIGluIHRoZSBuZXR3b3JrLiIsInR5cGUiOiJzeXN0ZW0iLCJwbHVnaW4iOiIifQ==
218" data-icon="shuffle" data-url="https://hub.farthinghalearms.com/randprof" data-name="Random Channel"><i class="generic-icons-nav bi bi-shuffle"></i>Random Channel</a>
219
220							<a class="nav-link" href="https://framagit.org/hubzilla/core/issues" data-papp="eyJ2ZXJzaW9uIjoiMyIsInVybCI6Imh0dHBzOlwvXC9mcmFtYWdpdC5vcmdcL2h1YnppbGxh
221XC9jb3JlXC9pc3N1ZXMiLCJuYW1lIjoiUmVwb3J0IEJ1ZyIsInBob3RvIjoiaWNvbjpidWci
222LCJjYXRlZ29yaWVzIjoiU3lzdGVtIiwiZGVzYyI6IlByb3ZpZGVzIGEgbGluayB0byB0aGUg
223SHViemlsbGEgYnVnIHRyYWNrZXIuIiwidHlwZSI6InN5c3RlbSIsInBsdWdpbiI6IiJ9
224" data-icon="bug" data-url="https://framagit.org/hubzilla/core/issues" data-name="Report Bug"><i class="generic-icons-nav bi bi-bug"></i>Report Bug</a>
225
226							<a class="nav-link" href="https://hub.farthinghalearms.com/search" data-papp="eyJ2ZXJzaW9uIjoiMyIsInVybCI6IiRiYXNldXJsXC9zZWFyY2giLCJuYW1lIjoiU2VhcmNo
227IiwicGhvdG8iOiJpY29uOnNlYXJjaCIsImRlc2MiOiJBIHNlcGFyYXRlIHNlYXJjaCBhcHAg
228dG8gbG9vayB1cCBjb250ZW50LCBjaGFubmVscywgdGFncywgZG9jdW1lbnRhdGlvbiBvciBy
229ZW1vdGUgY29udGVudCBkZXBlbmRpbmcgb24gdGhlIHNlYXJjaCBzdHJpbmcgcHJlZml4LiIs
230InR5cGUiOiJzeXN0ZW0iLCJwbHVnaW4iOiIifQ==
231" data-icon="search" data-url="https://hub.farthinghalearms.com/search" data-name="Search"><i class="generic-icons-nav bi bi-search"></i>Search</a>
232
233					</div>
234			</div>
235</div>
236	<main>
237		<div class="content">
238			<div class="columns">
239				<aside id="region_1" class="d-none d-lg-block"><div class="aside_spacer_top_left"></div><div class="aside_spacer_left"><div id="left_aside_wrapper" class="aside_wrapper">
240<div class="accordion" id="accordion-helpindex">
241        <div class="accordion-item">
242    <h2 class="accordion-header">
243      <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#Members"
244        aria-expanded="false" aria-controls="Members">
245        Members
246      </button>
247    </h2>
248    <div id="Members" class="accordion-collapse collapse" data-bs-parent="#accordion-helpindex">
249      <div class="accordion-body list-group list-group-flush p-2">
250                <li class="list-group-item"><a href="/help/member/overview">Overview</a></li>
251                <li class="list-group-item"><a href="/help/member/registration">Login/Registration</a></li>
252                <li class="list-group-item"><a href="/help/member/accounts_profiles_channels_basics">Accounts, Profiles and Channels</a></li>
253                <li class="list-group-item"><a href="/help/member/posting">Posting</a></li>
254                <li class="list-group-item"><a href="/help/member/the_grid">The Grid</a></li>
255                <li class="list-group-item"><a href="/help/member/the_stream">The Stream</a></li>
256                <li class="list-group-item"><a href="/help/member/apps">Apps</a></li>
257                <li class="list-group-item"><a href="/help/member/connections">Connections</a></li>
258                <li class="list-group-item"><a href="/help/member/directory">The Directory</a></li>
259                <li class="list-group-item"><a href="/help/member/blocking_channels">Blocking Channels</a></li>
260                <li class="list-group-item"><a href="/help/member/permissions">Permissions</a></li>
261                <li class="list-group-item"><a href="/help/member/direct_messages">Direct Messages</a></li>
262                <li class="list-group-item"><a href="/help/member/mentions">Mentions</a></li>
263                <li class="list-group-item"><a href="/help/member/tags">Tags</a></li>
264                <li class="list-group-item"><a href="/help/member/bookmarks">Bookmarks</a></li>
265                <li class="list-group-item"><a href="/help/member/search">Search</a></li>
266                <li class="list-group-item"><a href="/help/member/article">Article</a></li>
267                <li class="list-group-item"><a href="/help/member/files">Files</a></li>
268                <li class="list-group-item"><a href="/help/member/chat_rooms">Chat Rooms</a></li>
269                <li class="list-group-item"><a href="/help/member/guest_access">Guest Access</a></li>
270                <li class="list-group-item"><a href="/help/member/privacy_groups">Privacy Groups</a></li>
271                <li class="list-group-item"><a href="/help/member/calendar">Calendar</a></li>
272                <li class="list-group-item"><a href="/help/member/addressbook">Address Book</a></li>
273                <li class="list-group-item"><a href="/help/member/wikis">Wikis</a></li>
274                <li class="list-group-item"><a href="/help/member/NSFW">Content Warning/NSFW</a></li>
275                <li class="list-group-item"><a href="/help/member/clone">Clone</a></li>
276                <li class="list-group-item"><a href="/help/member/websites">Websites</a></li>
277                <li class="list-group-item"><a href="/help/member/comanche">Comanche Page Description Language</a></li>
278                <li class="list-group-item"><a href="/help/member/encryption">Encryption</a></li>
279                <li class="list-group-item"><a href="/help/member/protection_of_privacy">Tips for Protecting Your Privacy</a></li>
280                <li class="list-group-item"><a href="/help/member/deleting_channel">Deleting a Channel</a></li>
281                <li class="list-group-item"><a href="/help/member/delete_account">Deleting your account</a></li>
282                <li class="list-group-item"><a href="/help/bugs">Reporting bugs</a></li>
283                <li class="list-group-item"><a href="/help/member/member_faq">FAQ</a></li>
284              </div>
285    </div>
286  </div>
287      <div class="accordion-item">
288    <h2 class="accordion-header">
289      <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#Tutorials"
290        aria-expanded="false" aria-controls="Tutorials">
291        Tutorials
292      </button>
293    </h2>
294    <div id="Tutorials" class="accordion-collapse collapse" data-bs-parent="#accordion-helpindex">
295      <div class="accordion-body list-group list-group-flush p-2">
296                <li class="list-group-item"><a href="/help/tutorials/step_with_hubzilla">Step by step into the Fediverse with Hubzilla</a></li>
297                <li class="list-group-item"><a href="/help/tutorials/customise_look">Customise the look of Hubzilla</a></li>
298              </div>
299    </div>
300  </div>
301      <div class="accordion-item">
302    <h2 class="accordion-header">
303      <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#Administrators"
304        aria-expanded="false" aria-controls="Administrators">
305        Administrators
306      </button>
307    </h2>
308    <div id="Administrators" class="accordion-collapse collapse" data-bs-parent="#accordion-helpindex">
309      <div class="accordion-body list-group list-group-flush p-2">
310                <li class="list-group-item"><a href="/help/adminmanual/manual_for_administrators">Guide</a></li>
311              </div>
312    </div>
313  </div>
314      <div class="accordion-item">
315    <h2 class="accordion-header">
316      <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#Developers"
317        aria-expanded="false" aria-controls="Developers">
318        Developers
319      </button>
320    </h2>
321    <div id="Developers" class="accordion-collapse collapse" data-bs-parent="#accordion-helpindex">
322      <div class="accordion-body list-group list-group-flush p-2">
323                <li class="list-group-item"><a href="/help/developer/developers_guide">Guide</a></li>
324                <li class="list-group-item"><a href="/help/tutorials/derived_theme">Tutorial: Creating a derived theme</a></li>
325              </div>
326    </div>
327  </div>
328      <div class="accordion-item">
329    <h2 class="accordion-header">
330      <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#About"
331        aria-expanded="false" aria-controls="About">
332        About
333      </button>
334    </h2>
335    <div id="About" class="accordion-collapse collapse" data-bs-parent="#accordion-helpindex">
336      <div class="accordion-body list-group list-group-flush p-2">
337                <li class="list-group-item"><a href="/help/about">About Hubzilla</a></li>
338                <li class="list-group-item"><a href="/help/functions">Functions</a></li>
339                <li class="list-group-item"><a href="/help/glossary">Glossary</a></li>
340                <li class="list-group-item"><a href="/help/ui">User interface</a></li>
341                <li class="list-group-item"><a href="/help/the_hubzilla_project">Project</a></li>
342                <li class="list-group-item"><a href="/help/credits">Credits</a></li>
343                <li class="list-group-item"><a href="/help/placeholder">About this hub</a></li>
344              </div>
345    </div>
346  </div>
347      
348</div>
349
350</div></div></aside>
351				<section id="region_2">
352<div id="help-content" class="generic-content-wrapper">
353	<div class="clearfix section-title-wrapper">
354		<h2>Hubzilla Documentation: About</h2>
355	</div>
356		<div class="section-content-wrapper">
357		<details id="doco-top-toc-wrapper">
358			<summary id="doco-top-toc-heading">Contents</summary>
359			<ul id="doco-top-toc"></ul>
360		</details>
361		<div id="doco-content">
362			<h1>What is Hubzilla?</h1>
363
364<p>Hubzilla is a decentralised communication network with the aim of providing communication options that circumvent censorship, respect privacy and are therefore free from the restrictions imposed by today's commercial communication giants. These primarily provide spy networks for paying customers of all kinds and monopolise and centralise the entire Internet - which was not originally among the revolutionary goals that led to the World Wide Web.</p>
365
366<p>Hubzilla is free, open source and free of charge. It was developed to run on a Raspberry Pi as well as on the largest AMD and Intel Xeon multiprocessor servers. It can be used for communication between a few individuals or connect many thousands of people and more.</p>
367
368<p>Another goal is to be independent of skills and resources. Hubzilla is as easy to use for the ordinary computer user as it is for system administrators and developers.</p>
369
370<p>How you use it depends on how you <em>want to</em> use it.</p>
371
372<p>Hubzilla is written in PHP, making it easy to install on any of today's hosting platforms, including self-hosting at home, on shared servers or on virtual and dedicated servers.</p>
373
374<p>In other words, Hubzilla can run on any platform that has a web server, a MySQL-compatible database and PHP.</p>
375
376<p>Hubzilla offers some unique goodies:</p>
377
378<p><strong>One-click identification:</strong> you can access other servers in the Hubzilla network by simply clicking on a link to them. Authentication is easily done automatically behind the scenes. Forget all the different usernames for different sites and passwords - Hubzilla does it all for you.</p>
379
380<p><strong>Clone:</strong> You can clone your online identity (or, as we say, a channel). It is no longer tied to a specific server, domain or IP address. Simply import it to another Hubzilla server (or Hubzilla hub, as we call it) - directly online or using a previously generated export. If your primary hub is suddenly no longer online, no problem, your contacts, posts* and messages* are still automatically available and accessible under your cloned identity. <em>(&#42;: only posts and messages created after the moment of cloning)</em></p>
381
382<p><strong>Privacy:</strong> Hubzilla identities (Nomad IDs) can be deleted, backed up/downloaded and cloned. You have full control over your data. If you decide to delete all your data and your Nomad ID, all you have to do is click on a link and it will be deleted from the server immediately. No questions asked, no fuss.</p>
383
384<hr />
385
386<h2>Hubzilla Features</h2>
387
388<h3>Built-in Social</h3>
389
390<p>When you post announcements on your website, they are automatically broadcast to your followers on the Fediverse, Mastodon, and more. You can also interact with them via your website.</p>
391
392<h3>Groups &amp; Forums</h3>
393
394<p>Building a community is important for your business or nonprofit organization. You can add public, private, and moderated discussion groups &amp; forums. These work across nearly all fediverse platforms.</p>
395
396<h3>Cloud Storage</h3>
397
398<p>You can store documents directly on your website, and share them with others. Public, private, or restricted access. With the files being stored on your domain name, they will know it comes from you.</p>
399
400<h3>Federated Single Sign On</h3>
401
402<p>You can use your Hubzilla online identity to log into other websites that support Magic Signon (OpenWebAuth). That way you don't have to create a new account on every website, forum, membership site, or app.</p>
403
404<h3>Nomadic Identity</h3>
405
406<p>Clone your online identity and content to multiple sites using the Nomad protocol and mirror any changes in near real time. All your friends and all your content are available on any of your cloned instances - at any time.</p>
407
408		</div>
409	</div>
410</div>
411<div id="nav-login" class="modal" tabindex="-1" role="dialog">
412	<div class="modal-dialog" role="document">
413		<div class="modal-content">
414			<div class="modal-header">
415				<h4 class="modal-title">Login</h4>
416				<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
417			</div>
418			<div class="modal-body">
419				<div class="mb-3">
420					<form action="https://hub.farthinghalearms.com/help/about" id="modal_login" method="post" >
421	<input type="hidden" name="auth-params" value="login" />
422	<div>
423			<div id="id_modal_login_username_wrapper" class="mb-3">
424		<label for="id_modal_login_username" id="label_modal_login_username">
425			Nickname		</label>
426		<input
427			class="form-control"
428			name="modal_login_username"
429			id="id_modal_login_username"
430			type="text"
431			value=""
432						>
433		<small id="help_modal_login_username" class="form-text text-muted">
434			
435		</small>
436	</div>
437			<div class="mb-3">
438		<label for="id_modal_login_password">Password</label>
439		<input class="form-control" type="password" name="modal_login_password" id="id_modal_login_password" value="">		<small id="help_modal_login_password" class="form-text text-muted"></small>
440	</div>
441			<div id="modal_login_remember_container" class="clearfix onoffswitch checkbox mb-3">
442		<label for="id_modal_login_remember">Remember me</label>
443		<div class="float-end"><input type="checkbox" name="modal_login_remember" id="id_modal_login_remember" value="1"   ><label class="switchlabel" for='id_modal_login_remember'> <span class="onoffswitch-inner" data-on='Yes' data-off='No'></span><span class="onoffswitch-switch"></span></label></div>
444		<small class="form-text text-muted"></small>
445	</div>
446		<button type="submit" name="submit" class="btn btn-primary">Login</button>
447				<hr>
448		<a href="rmagic" class="btn btn-outline-success">Remote Authentication</a>
449		<a href="https://hub.farthinghalearms.com/pubsites" title="Create an account to access services and applications" class="register-link float-end">Register</a>
450	</div>
451		<input type="hidden" name="0" value="" />
452	</form>
453
454				</div>
455			</div>
456		</div>
457	</div>
458</div>
459
460					<div id="page-footer"></div>
461					<div id="pause"></div>
462				</section>
463				<aside id="region_3" class="d-none d-xl-block"><div class="aside_spacer_top_right"></div><div class="aside_spacer_right"><div id="right_aside_wrapper" class="aside_wrapper">
464<script>
465	var sse_bs_active = false;
466	var sse_offset = 0;
467	var sse_type;
468	var sse_partial_result = false;
469	var sse_rmids = [];
470	var sse_fallback_interval;
471	var sse_sys_only = 0;
472
473	document.addEventListener("DOMContentLoaded", function() {
474		let notificationsWrapper = document.getElementById('notifications_wrapper');
475		let notificationsParent = notificationsWrapper ? notificationsWrapper.parentElement.id : null;
476		let notificationsBtn = document.querySelectorAll('.notifications-btn');
477
478		// Event listener for notifications button
479		if (notificationsBtn) {
480			notificationsBtn.forEach(function (element) {
481				element.addEventListener('click', function(e) {
482					e.preventDefault();
483					e.stopPropagation();
484
485					// Remove the 'd-none' class to show the notifications wrapper
486					notificationsWrapper.classList.remove('d-none');
487
488					// Check if the notifications wrapper has the 'fs' class
489					if (notificationsWrapper.classList.contains('fs')) {
490						// Prepend the notifications wrapper back to its original parent and hide it
491						document.getElementById(notificationsParent).appendChild(notificationsWrapper);
492						notificationsWrapper.classList.add('d-none');
493					} else {
494						// Otherwise, prepend the notifications wrapper to 'main'
495						document.querySelector('main').prepend(notificationsWrapper);
496					}
497
498					// Toggle the 'fs' class
499					notificationsWrapper.classList.toggle('fs');
500				});
501			});
502		}
503
504		// Event listener for clicking a notification
505		document.addEventListener('click', function(event) {
506			if (event.target.closest('a') && event.target.closest('a').classList.contains('notification')) {
507				if (notificationsWrapper.classList.contains('fs')) {
508					// Move notifications wrapper back to its original parent and hide it
509					notificationsWrapper.classList.remove('fs');
510					notificationsWrapper.classList.add('d-none');
511					document.getElementById(notificationsParent).appendChild(notificationsWrapper);
512
513				}
514			}
515		});
516
517		if(sse_enabled) {
518			if(typeof(window.SharedWorker) === 'undefined') {
519				// notifications with multiple tabs open will not work very well in this scenario
520				let evtSource = new EventSource('/sse');
521
522				evtSource.addEventListener('notifications', function(e) {
523					let obj = JSON.parse(e.data);
524					sse_handleNotifications(obj, false, false);
525				}, false);
526
527				document.addEventListener('visibilitychange', function() {
528					if (!document.hidden) {
529						sse_offset = 0;
530						sse_bs_init();
531					}
532				}, false);
533
534			}
535			else {
536				let myWorker = new SharedWorker('/view/js/sse_worker.js', localUser);
537
538				myWorker.port.onmessage = function(e) {
539					obj = e.data;
540					console.log(obj);
541					sse_handleNotifications(obj, false, false);
542				}
543
544				myWorker.onerror = function(e) {
545					myWorker.port.close();
546				}
547
548				myWorker.port.start();
549			}
550		}
551		else {
552			if (!document.hidden) {
553				sse_fallback();
554				sse_fallback_interval = setInterval(sse_fallback, updateInterval);
555			}
556
557			document.addEventListener('visibilitychange', function() {
558				if (document.hidden) {
559					clearInterval(sse_fallback_interval);
560				}
561				else {
562					sse_offset = 0;
563					sse_bs_init();
564					sse_fallback_interval = setInterval(sse_fallback, updateInterval);
565				}
566
567			}, false);
568		}
569
570		document.querySelectorAll('.notification-link').forEach(function (element) {
571			element.addEventListener('click', function (element) {
572				sse_bs_notifications(element, true, false);
573			});
574		});
575
576		document.querySelectorAll('.notification-filter').forEach(function (element) {
577			element.addEventListener('keypress', function(e) {
578				if (e.which == 13) { // Enter key
579					this.blur();
580					sse_offset = 0;
581
582					// Clear the content of the menu
583					document.getElementById("nav-" + sse_type + "-menu").innerHTML = '';
584
585					// Show the loading element
586					document.getElementById("nav-" + sse_type + "-loading").style.display = 'block';
587
588					// Get the value from the input element
589					var cn_val = document.getElementById('cn-' + sse_type + '-input') ? document.getElementById('cn-' + sse_type + '-input').value.toString().toLowerCase() : '';
590
591					// Send a GET request using the Fetch API
592					fetch('/sse_bs/' + sse_type + '/' + sse_offset + '?nquery=' + encodeURIComponent(cn_val))
593						.then(response => response.json())
594						.then(obj => {
595							console.log('sse: bootstraping ' + sse_type);
596							console.log(obj);
597
598							sse_bs_active = false;
599							sse_partial_result = true;
600							sse_offset = obj[sse_type].offset;
601
602							if (sse_offset < 0) {
603								document.getElementById("nav-" + sse_type + "-loading").style.display = 'none';
604							}
605
606							sse_handleNotifications(obj, true, false);
607						})
608						.catch(error => {
609							console.error('Error fetching data:', error);
610						});
611				}
612			});
613		});
614
615		document.querySelectorAll('.notifications-textinput-clear').forEach(function (element) {
616			element.addEventListener('click', function(e) {
617				if (!sse_partial_result) return;
618
619				// Clear the content of the menu
620				document.getElementById("nav-" + sse_type + "-menu").innerHTML = '';
621
622				// Show the loading element
623				document.getElementById("nav-" + sse_type + "-loading").style.display = 'block';
624
625				// Send a GET request using the Fetch API
626				fetch('/sse_bs/' + sse_type)
627					.then(response => response.json())
628					.then(obj => {
629						console.log('sse: bootstraping ' + sse_type);
630						console.log(obj);
631
632						sse_bs_active = false;
633						sse_partial_result = false;
634						sse_offset = obj[sse_type].offset;
635						if (sse_offset < 0) {
636							document.getElementById("nav-" + sse_type + "-loading").style.display = 'none';
637						}
638
639						sse_handleNotifications(obj, true, false);
640					})
641					.catch(error => {
642						console.error('Error fetching data:', error);
643					});
644			});
645		});
646
647		document.querySelectorAll('.notification-content').forEach(function(element) {
648			element.addEventListener('scroll', function() {
649				if (this.scrollTop > this.scrollHeight - this.clientHeight - (this.scrollHeight / 7)) {
650					sse_bs_notifications(sse_type, false, true);
651				}
652			});
653		});
654
655		
656	});
657
658	document.addEventListener('hz:sse_setNotificationsStatus', function(e) {
659		sse_setNotificationsStatus(e.detail);
660	});
661
662	document.addEventListener('hz:sse_bs_init', function() {
663		sse_bs_init();
664	});
665
666	document.addEventListener('hz:sse_bs_counts', function() {
667		sse_bs_counts();
668	});
669
670
671	function sse_bs_init() {
672		// Check if 'notification_open' exists in sessionStorage or if sse_type is defined
673		if (sessionStorage.getItem('notification_open') !== null || typeof sse_type !== 'undefined') {
674			if (typeof sse_type === 'undefined') {
675				sse_type = sessionStorage.getItem('notification_open');
676			}
677
678			// Add the 'show' class to the appropriate element
679			let subNav = document.getElementById("nav-" + sse_type + "-sub");
680			if (subNav) {
681				subNav.classList.add('show');
682			}
683
684			// Call the sse_bs_notifications function
685			sse_bs_notifications(sse_type, true, false);
686		} else {
687			// Call the sse_bs_counts function if conditions are not met
688			sse_bs_counts();
689		}
690	}
691
692	function sse_bs_counts() {
693		if (sse_bs_active || sse_sys_only) {
694			return;
695		}
696
697		sse_bs_active = true;
698
699		// Use the fetch API to send the POST request with the data
700		fetch('/sse_bs', {
701			method: 'POST',
702			body: new URLSearchParams({sse_rmids: sse_rmids})
703		})
704		.then(response => response.json())  // Parse the JSON response
705		.then(obj => {
706			console.log(obj);
707			sse_bs_active = false;
708			sse_rmids = [];
709			sse_handleNotifications(obj, true, false);
710		})
711		.catch(error => {
712			console.error('Error:', error);
713			sse_bs_active = false;
714		});
715	}
716
717	function sse_bs_notifications(e, replace, followup) {
718		if (sse_bs_active || sse_sys_only) {
719			return;
720		}
721
722		let manual = false;
723
724		if (typeof replace === 'undefined') {
725			replace = e.data.replace;
726		}
727
728		if (typeof followup === 'undefined') {
729			followup = e.data.followup;
730		}
731
732		if (typeof e === 'string') {
733			sse_type = e;
734		} else {
735			manual = true;
736			sse_offset = 0;
737			sse_type = e.target.dataset.sse_type;
738		}
739
740		if (typeof sse_type === 'undefined') {
741			return;
742		}
743
744		if (followup || !manual || !document.getElementById('notification-link-' + sse_type).classList.contains('collapsed')) {
745
746			if (sse_offset >= 0) {
747				document.getElementById("nav-" + sse_type + "-loading").style.display = 'block';
748			}
749
750			sessionStorage.setItem('notification_open', sse_type);
751
752			if (sse_offset !== -1 || replace) {
753				let cn_val = (document.getElementById('cn-' + sse_type + '-input') && sse_partial_result)
754					? document.getElementById('cn-' + sse_type + '-input').value.toString().toLowerCase()
755					: '';
756
757				document.getElementById("nav-" + sse_type + "-loading").style.display = 'block';
758
759				sse_bs_active = true;
760
761				// Send POST request using fetch API
762				fetch('/sse_bs/' + sse_type + '/' + sse_offset, {
763					method: 'POST',
764					body: new URLSearchParams({
765						sse_rmids: sse_rmids,
766						nquery: encodeURIComponent(cn_val)
767					})
768				})
769				.then(response => response.json())  // Parse the JSON response
770				.then(obj => {
771					console.log('sse: bootstraping ' + sse_type);
772					console.log(obj);
773					sse_bs_active = false;
774					sse_rmids = [];
775					document.getElementById("nav-" + sse_type + "-loading").style.display = 'none';
776
777					if (typeof obj[sse_type] !== 'undefined') {
778						sse_offset = obj[sse_type].offset;
779					}
780
781					sse_handleNotifications(obj, replace, followup);
782				})
783				.catch(error => {
784					console.error('Error:', error);
785					sse_bs_active = false;
786				});
787			} else {
788				document.getElementById("nav-" + sse_type + "-loading").style.display = 'none';
789			}
790		} else {
791			sessionStorage.removeItem('notification_open');
792		}
793	}
794
795	function sse_handleNotifications(obj, replace, followup) {
796
797		// Notice and info notifications
798		if (obj.notice) {
799			obj.notice.notifications.forEach(notification => {
800				toast(notification, 'danger');
801			});
802		}
803
804		if (obj.info) {
805			obj.info.notifications.forEach(notification => {
806				toast(notification, 'info');
807			});
808		}
809
810		if (sse_sys_only) {
811			return;
812		}
813
814		let	all_notifications = Object.keys(obj);
815
816		all_notifications.forEach(type => {
817			if (typeof obj[type] === 'undefined') {
818				return;
819			}
820
821			let count = Number(obj[type].count);
822
823			// Show notifications and update count
824			let updateElement = document.querySelector('.' + type + '-update');
825			let buttonElement = document.querySelector('.' + type + '-button');
826			let subElement = document.getElementById('nav-' + type + '-sub');
827
828			if (count) {
829				if (buttonElement) buttonElement.style.display = 'block';  // Fade-in effect replaced by display block
830				if (replace || followup) {
831					updateElement.textContent = count >= 100 ? '99+' : count;
832				} else {
833					count = count + Number(updateElement.textContent.replace(/\++$/, ''));
834					updateElement.textContent = count >= 100 ? '99+' : count;
835				}
836			} else {
837				if (updateElement) updateElement.textContent = '0';
838				if (subElement) subElement.classList.remove('show');
839				if (buttonElement) {
840					buttonElement.style.display = 'none'; // Fade-out effect replaced by display none
841					sse_setNotificationsStatus(null);
842				}
843			}
844
845			if (obj[type].notifications.length) {
846				sse_handleNotificationsItems(type, obj[type].notifications, replace, followup);
847			}
848		});
849
850		sse_setNotificationsStatus(null);
851
852		if (typeof obj[sse_type] !== 'undefined') {
853			// Load more notifications if visible notifications count becomes low
854			if (sse_type && sse_offset !== -1) {
855				let menu = document.getElementById('nav-' + sse_type + '-menu');
856				if (menu && menu.querySelectorAll('.notification:not(.tt-filter-active):not(.cn-filter-active)').length < 15) {
857					sse_bs_notifications(sse_type, false, true);
858				}
859			}
860		}
861	}
862
863	function sse_handleNotificationsItems(notifyType, data, replace, followup) {
864		let notifications_tpl = decodeURIComponent(document.querySelector("#nav-notifications-template[rel=template]").innerHTML.replace('data-src', 'src'));
865		let notify_menu = document.getElementById("nav-" + notifyType + "-menu");
866		let notify_loading = document.getElementById("nav-" + notifyType + "-loading");
867		let notify_count = document.getElementsByClassName(notifyType + "-update");
868
869		if (notify_menu === null) {
870			return;
871		}
872
873		
874		if (replace && !followup) {
875			notify_menu.innerHTML = '';  // Clear menu
876			notify_loading.style.display = 'none';  // Hide loading
877		}
878
879		data.forEach(notification => {
880			// Special handling for network notifications
881			if (!replace && !followup && notification.thread_top && notifyType === 'network') {
882				document.dispatchEvent(new CustomEvent('hz:handleNetworkNotificationsItems', { detail: notification }));
883			}
884
885			// Prepare HTML using the template
886			let html = notifications_tpl.format(
887				notification.notify_link,
888				notification.photo,
889				notification.name,
890				notification.addr,
891				notification.message,
892				notification.when,
893				notification.hclass,
894				notification.b64mid,
895				notification.notify_id,
896				notification.thread_top,
897				notification.unseen,
898				notification.private_forum,
899				encodeURIComponent(notification.mids),
900				notification.body
901			);
902
903			// Append the new notification HTML to the menu
904			notify_menu.insertAdjacentHTML('beforeend', html);
905		});
906
907		// Sort notifications by date
908		if (!replace && !followup) {
909			let notifications = Array.from(notify_menu.getElementsByClassName('notification'));
910
911			notifications.sort((a, b) => {
912				let dateA = new Date(a.dataset.when).getTime();
913				let dateB = new Date(b.dataset.when).getTime();
914
915								return dateB - dateA; // Sort in descending order
916							});
917
918			notifications.forEach(notification => notify_menu.appendChild(notification));
919		}
920
921
922		// Filter thread_top notifications if the filter is active
923		let filterThreadTop = document.getElementById('tt-' + notifyType + '-only');
924		if (filterThreadTop && filterThreadTop.classList.contains('active')) {
925			let notifications = notify_menu.querySelectorAll('[data-thread_top="false"]');
926			notifications.forEach(notification => notification.classList.add('tt-filter-active'));
927		}
928
929		// Filter notifications based on the input field
930		let filterInput = document.getElementById('cn-' + notifyType + '-input');
931		if (filterInput) {
932			let filter = filterInput.value.toString().toLowerCase();
933			if (filter) {
934				if (filter.indexOf('%') === 0) filter = filter.substring(1);  // Remove the percent if it exists
935				let notifications = notify_menu.querySelectorAll('.notification');
936				notifications.forEach(notification => {
937					let cn = notification.dataset.contact_name.toString().toLowerCase();
938					let ca = notification.dataset.contact_addr.toString().toLowerCase();
939					if (cn.indexOf(filter) === -1 && ca.indexOf(filter) === -1) {
940						notification.classList.add('cn-filter-active');
941					} else {
942						notification.classList.remove('cn-filter-active');
943					}
944				});
945			}
946		}
947
948		// Update relative time for notifications
949		updateRelativeTime('.autotime-narrow');
950	}
951
952
953	function sse_updateNotifications(mid) {
954		// Find the notification elements based on its 'data-b64mid' or href attribute.
955		// The latter will match reactions where b64mid will contain the uuid of its thread parent (reacted on) instead of its own.
956		let notifications = document.querySelectorAll(`.notification[data-b64mid='${mid}'], .notification[href*='display/${mid}']`);
957
958		notifications.forEach(notification => {
959			let type = notification.parentElement.id.split('-')[1];
960
961			// Skip processing if the type is 'notify' and the conditions don't match
962			if (type === 'notify' && (mid !== bParam_mid || sse_type !== 'notify')) {
963				return true;
964			}
965
966			notification.remove();
967		});
968	}
969
970
971	function sse_setNotificationsStatus(data) {
972		let primary_notifications = ['dm', 'home', 'intros', 'register', 'notify', 'files'];
973		let nlinks = document.getElementById('notifications').querySelectorAll('.notification-link');
974		let primary_available = false;
975		let any_available = false;
976
977		// Loop through all notifications and check their visibility
978		nlinks.forEach(nlink => {
979			let type = nlink.dataset.sse_type;
980			let button = document.querySelector(`.${type}-button`);
981			if (button && getComputedStyle(button).display === 'block') {
982				any_available = true;
983				if (primary_notifications.indexOf(type) > -1) {
984					primary_available = true;
985				}
986			}
987		});
988
989		// Update notification button icons based on the primary notification availability
990		let notificationIcons = document.querySelectorAll('.notifications-btn-icon');
991
992		if (notificationIcons) {
993			let iconClass = primary_available ? 'bi-exclamation-triangle' : 'bi-exclamation-circle';
994			let iconToRemove = primary_available ? 'bi-exclamation-circle' : 'bi-exclamation-triangle';
995
996			notificationIcons.forEach(notificationIcon => {
997				notificationIcon.classList.replace(iconToRemove, iconClass);
998			});
999		}
1000
1001		// Update visibility of notification button and sections
1002		let notificationsBtn = document.querySelectorAll('.notifications-btn');
1003		let noNotifications = document.querySelector('#no_notifications');
1004		let notifications = document.querySelector('#notifications');
1005		let navbarCollapse = document.querySelector('#navbar-collapse-1');
1006
1007		if (any_available) {
1008			notificationsBtn.forEach(btn => {
1009				btn.style.opacity = 1;
1010			});
1011			noNotifications.style.display = 'none';
1012			notifications.style.display = 'block';
1013		} else {
1014			if (notificationsBtn) {
1015				notificationsBtn.forEach(btn => {
1016					btn.style.opacity = 0.5;
1017				});
1018			}
1019			if (navbarCollapse) navbarCollapse.classList.remove('show');
1020			noNotifications.style.display = 'block';
1021			notifications.style.display = 'none';
1022		}
1023
1024		// Handle specific notifications if 'data' is provided
1025		if (data) {
1026			data.forEach(function (nmid) {
1027				sse_rmids.push(nmid);
1028				sse_updateNotifications(nmid);
1029			});
1030		}
1031	}
1032
1033	function sse_fallback() {
1034		fetch('/sse')
1035			.then(response => response.json())
1036			.then(obj => {
1037				if (!obj) return;
1038
1039				console.log('sse fallback');
1040				console.log(obj);
1041
1042				sse_handleNotifications(obj, false, false);
1043			})
1044			.catch(error => {
1045				console.error('Error fetching SSE data:', error);
1046			});
1047	}
1048
1049</script>
1049
1050
1051<div id="notifications_wrapper" class="mb-4">
1052	<div id="no_notifications" class="d-xl-none">
1053		Sorry, you have got no notifications at the moment<span class="jumping-dots"><span class="dot-1">.</span><span class="dot-2">.</span><span class="dot-3">.</span></span>
1054	</div>
1055	<div id="nav-notifications-template" rel="template" class="d-none">
1056		<a class="list-group-item list-group-item-action notification {6}" href="{0}" title="{13}" data-b64mid="{7}" data-notify_id="{8}" data-thread_top="{9}" data-contact_name="{2}" data-contact_addr="{3}" data-when="{5}">
1057			<img data-src="{1}" loading="lazy" class="rounded float-start me-2 menu-img-2">
1058			<div class="text-nowrap">
1059				<div class="d-flex justify-content-between align-items-center lh-sm">
1060					<div class="text-truncate pe-1">
1061						<strong title="{2} - {3}">{2}</strong>
1062					</div>
1063					<small class="autotime-narrow text-body-secondary" title="{5}"></small>
1064				</div>
1065				<div class="text-truncate">{4}</div>
1066			</div>
1067		</a>
1068	</div>
1069	<div id="notifications" class="border border-top-0 rounded navbar-nav collapse">
1070			</div>
1071</div>
1072
1073
1074</div></div></aside>
1075			</div>
1076		</div>
1077	</main>
1078	<footer></footer>
1079</body>
1080</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.