Add priorities and tags to web UI
|  | @ -381,7 +381,7 @@ | ||||||
| </div> | </div> | ||||||
| <div id="detail"{{if not .Topic}} style="display: none"{{end}}> | <div id="detail"{{if not .Topic}} style="display: none"{{end}}> | ||||||
|     <div id="detailMain"> |     <div id="detailMain"> | ||||||
|         <button id="detailCloseButton"><img src="static/img/close_black_24dp.svg"/></button> |         <button id="detailCloseButton"><img src="static/img/close.svg"/></button> | ||||||
|         <h1><span id="detailTitle"></span></h1> |         <h1><span id="detailTitle"></span></h1> | ||||||
|         <p class="smallMarginBottom"> |         <p class="smallMarginBottom"> | ||||||
|             <b>ntfy</b> is a simple HTTP-based pub-sub notification service. This is a ntfy topic. |             <b>ntfy</b> is a simple HTTP-based pub-sub notification service. This is a ntfy topic. | ||||||
|  |  | ||||||
|  | @ -377,18 +377,27 @@ li { | ||||||
|     display: none; |     display: none; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #detail .detailDate { | #detail .detailEntry { | ||||||
|  |     margin-bottom: 20px; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #detail .detailDate, #detail .detailTags { | ||||||
|     color: #888; |     color: #888; | ||||||
|     font-size: 0.9em; |     font-size: 0.9em; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | #detail .detailDate img { | ||||||
|  |     width: 20px; | ||||||
|  |     height: 20px; | ||||||
|  |     vertical-align: bottom; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| #detail .detailTitle { | #detail .detailTitle { | ||||||
|     font-weight: bold; |     font-weight: bold; | ||||||
|     font-size: 1.1em; |     font-size: 1.1em; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #detail .detailMessage { | #detail .detailMessage { | ||||||
|     margin-bottom: 20px; |  | ||||||
|     font-size: 1.1em; |     font-size: 1.1em; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
| Before Width: | Height: | Size: 268 B After Width: | Height: | Size: 268 B | 
							
								
								
									
										47
									
								
								server/static/img/priority-1.svg
									
										
									
									
									
										Normal file
									
								
							
							
						
						|  | @ -0,0 +1,47 @@ | ||||||
|  | <?xml version="1.0" encoding="UTF-8" standalone="no"?> | ||||||
|  | <svg | ||||||
|  |    height="24px" | ||||||
|  |    viewBox="0 0 24 24" | ||||||
|  |    width="24px" | ||||||
|  |    fill="#000000" | ||||||
|  |    version="1.1" | ||||||
|  |    id="svg1428" | ||||||
|  |    sodipodi:docname="priority_1_24dp.svg" | ||||||
|  |    inkscape:version="1.1.1 (3bf5ae0, 2021-09-20)" | ||||||
|  |    xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | ||||||
|  |    xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | ||||||
|  |    xmlns="http://www.w3.org/2000/svg" | ||||||
|  |    xmlns:svg="http://www.w3.org/2000/svg"> | ||||||
|  |   <defs | ||||||
|  |      id="defs1432" /> | ||||||
|  |   <sodipodi:namedview | ||||||
|  |      id="namedview1430" | ||||||
|  |      pagecolor="#505050" | ||||||
|  |      bordercolor="#eeeeee" | ||||||
|  |      borderopacity="1" | ||||||
|  |      inkscape:pageshadow="0" | ||||||
|  |      inkscape:pageopacity="0" | ||||||
|  |      inkscape:pagecheckerboard="0" | ||||||
|  |      showgrid="false" | ||||||
|  |      inkscape:zoom="20.517358" | ||||||
|  |      inkscape:cx="22.834324" | ||||||
|  |      inkscape:cy="15.742768" | ||||||
|  |      inkscape:window-width="1863" | ||||||
|  |      inkscape:window-height="1025" | ||||||
|  |      inkscape:window-x="57" | ||||||
|  |      inkscape:window-y="27" | ||||||
|  |      inkscape:window-maximized="1" | ||||||
|  |      inkscape:current-layer="svg1428" /> | ||||||
|  |   <path | ||||||
|  |      style="color:#000000;fill:#999999;fill-opacity:1;stroke-width:0.0919748;stroke-linecap:round;stroke-linejoin:round;-inkscape-stroke:none" | ||||||
|  |      d="m 12.195014,20.828316 a 1.2747098,1.2747098 0 0 0 0.661605,-0.185206 l 6.646593,-4.037178 a 1.2745823,1.2745823 0 0 0 0.427537,-1.751107 1.2745823,1.2745823 0 0 0 -1.750928,-0.427718 l -5.984807,3.635327 -5.9848086,-3.635327 a 1.2745823,1.2745823 0 0 0 -1.750927,0.427718 1.2745823,1.2745823 0 0 0 0.427536,1.751107 l 6.6464146,4.037178 a 1.2747098,1.2747098 0 0 0 0.661785,0.185206 z" | ||||||
|  |      id="rect3554" /> | ||||||
|  |   <path | ||||||
|  |      style="color:#000000;fill:#b3b3b3;fill-opacity:1;stroke:none;stroke-width:0.0919748;stroke-linecap:round;stroke-linejoin:round;-inkscape-stroke:none" | ||||||
|  |      d="m 12.195014,15.694014 a 1.2747098,1.2747098 0 0 0 0.661605,-0.185206 l 6.646593,-4.037176 A 1.2745823,1.2745823 0 0 0 19.930749,9.7205243 1.2745823,1.2745823 0 0 0 18.179821,9.2928073 L 12.195014,12.928134 6.2102054,9.2928073 a 1.2745823,1.2745823 0 0 0 -1.750927,0.427717 1.2745823,1.2745823 0 0 0 0.427536,1.7511077 l 6.6464146,4.037176 a 1.2747098,1.2747098 0 0 0 0.661785,0.185206 z" | ||||||
|  |      id="path9314" /> | ||||||
|  |   <path | ||||||
|  |      style="color:#000000;fill:#cccccc;fill-opacity:1;stroke:none;stroke-width:0.0919748;stroke-linecap:round;stroke-linejoin:round;-inkscape-stroke:none" | ||||||
|  |      d="m 12.116784,10.426777 a 1.2747098,1.2747098 0 0 0 0.661606,-0.185205 l 6.646593,-4.0371767 a 1.2745823,1.2745823 0 0 0 0.427537,-1.751108 1.2745823,1.2745823 0 0 0 -1.750928,-0.427718 l -5.984808,3.635327 -5.9848066,-3.635327 a 1.2745823,1.2745823 0 0 0 -1.750928,0.427718 1.2745823,1.2745823 0 0 0 0.427537,1.751108 L 11.455,10.241572 a 1.2747098,1.2747098 0 0 0 0.661784,0.185205 z" | ||||||
|  |      id="path9316" /> | ||||||
|  | </svg> | ||||||
| After Width: | Height: | Size: 2.7 KiB | 
							
								
								
									
										43
									
								
								server/static/img/priority-2.svg
									
										
									
									
									
										Normal file
									
								
							
							
						
						|  | @ -0,0 +1,43 @@ | ||||||
|  | <?xml version="1.0" encoding="UTF-8" standalone="no"?> | ||||||
|  | <svg | ||||||
|  |    height="24px" | ||||||
|  |    viewBox="0 0 24 24" | ||||||
|  |    width="24px" | ||||||
|  |    fill="#000000" | ||||||
|  |    version="1.1" | ||||||
|  |    id="svg1428" | ||||||
|  |    sodipodi:docname="priority_2_24dp.svg" | ||||||
|  |    inkscape:version="1.1.1 (3bf5ae0, 2021-09-20)" | ||||||
|  |    xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | ||||||
|  |    xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | ||||||
|  |    xmlns="http://www.w3.org/2000/svg" | ||||||
|  |    xmlns:svg="http://www.w3.org/2000/svg"> | ||||||
|  |   <defs | ||||||
|  |      id="defs1432" /> | ||||||
|  |   <sodipodi:namedview | ||||||
|  |      id="namedview1430" | ||||||
|  |      pagecolor="#505050" | ||||||
|  |      bordercolor="#eeeeee" | ||||||
|  |      borderopacity="1" | ||||||
|  |      inkscape:pageshadow="0" | ||||||
|  |      inkscape:pageopacity="0" | ||||||
|  |      inkscape:pagecheckerboard="0" | ||||||
|  |      showgrid="false" | ||||||
|  |      inkscape:zoom="20.517358" | ||||||
|  |      inkscape:cx="22.834324" | ||||||
|  |      inkscape:cy="15.742768" | ||||||
|  |      inkscape:window-width="1863" | ||||||
|  |      inkscape:window-height="1025" | ||||||
|  |      inkscape:window-x="57" | ||||||
|  |      inkscape:window-y="27" | ||||||
|  |      inkscape:window-maximized="1" | ||||||
|  |      inkscape:current-layer="svg1428" /> | ||||||
|  |   <path | ||||||
|  |      style="color:#000000;fill:#999999;fill-opacity:1;stroke-width:0.0919748;stroke-linecap:round;stroke-linejoin:round;-inkscape-stroke:none" | ||||||
|  |      d="m 12.172712,17.774352 a 1.2747098,1.2747098 0 0 0 0.661605,-0.185206 l 6.646593,-4.037178 a 1.2745823,1.2745823 0 0 0 0.427537,-1.751107 1.2745823,1.2745823 0 0 0 -1.750928,-0.427718 L 12.172712,15.00847 6.1879033,11.373143 a 1.2745823,1.2745823 0 0 0 -1.750927,0.427718 1.2745823,1.2745823 0 0 0 0.427536,1.751107 l 6.6464147,4.037178 a 1.2747098,1.2747098 0 0 0 0.661785,0.185206 z" | ||||||
|  |      id="rect3554" /> | ||||||
|  |   <path | ||||||
|  |      style="color:#000000;fill:#b3b3b3;fill-opacity:1;stroke:none;stroke-width:0.0919748;stroke-linecap:round;stroke-linejoin:round;-inkscape-stroke:none" | ||||||
|  |      d="m 12.172712,12.64005 a 1.2747098,1.2747098 0 0 0 0.661605,-0.185206 L 19.48091,8.4176679 A 1.2745823,1.2745823 0 0 0 19.908447,6.6665602 1.2745823,1.2745823 0 0 0 18.157519,6.2388432 L 12.172712,9.8741699 6.1879033,6.2388432 a 1.2745823,1.2745823 0 0 0 -1.750927,0.427717 1.2745823,1.2745823 0 0 0 0.427536,1.7511077 l 6.6464147,4.0371761 a 1.2747098,1.2747098 0 0 0 0.661785,0.185206 z" | ||||||
|  |      id="path9314" /> | ||||||
|  | </svg> | ||||||
| After Width: | Height: | Size: 2.1 KiB | 
							
								
								
									
										43
									
								
								server/static/img/priority-4.svg
									
										
									
									
									
										Normal file
									
								
							
							
						
						|  | @ -0,0 +1,43 @@ | ||||||
|  | <?xml version="1.0" encoding="UTF-8" standalone="no"?> | ||||||
|  | <svg | ||||||
|  |    height="24px" | ||||||
|  |    viewBox="0 0 24 24" | ||||||
|  |    width="24px" | ||||||
|  |    fill="#000000" | ||||||
|  |    version="1.1" | ||||||
|  |    id="svg1428" | ||||||
|  |    sodipodi:docname="priority_4_24dp.svg" | ||||||
|  |    inkscape:version="1.1.1 (3bf5ae0, 2021-09-20)" | ||||||
|  |    xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | ||||||
|  |    xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | ||||||
|  |    xmlns="http://www.w3.org/2000/svg" | ||||||
|  |    xmlns:svg="http://www.w3.org/2000/svg"> | ||||||
|  |   <defs | ||||||
|  |      id="defs1432" /> | ||||||
|  |   <sodipodi:namedview | ||||||
|  |      id="namedview1430" | ||||||
|  |      pagecolor="#505050" | ||||||
|  |      bordercolor="#eeeeee" | ||||||
|  |      borderopacity="1" | ||||||
|  |      inkscape:pageshadow="0" | ||||||
|  |      inkscape:pageopacity="0" | ||||||
|  |      inkscape:pagecheckerboard="0" | ||||||
|  |      showgrid="false" | ||||||
|  |      inkscape:zoom="20.517358" | ||||||
|  |      inkscape:cx="22.834324" | ||||||
|  |      inkscape:cy="15.742768" | ||||||
|  |      inkscape:window-width="1863" | ||||||
|  |      inkscape:window-height="1025" | ||||||
|  |      inkscape:window-x="57" | ||||||
|  |      inkscape:window-y="27" | ||||||
|  |      inkscape:window-maximized="1" | ||||||
|  |      inkscape:current-layer="svg1428" /> | ||||||
|  |   <path | ||||||
|  |      style="color:#000000;fill:#c60000;fill-opacity:1;stroke:none;stroke-width:0.0919748;stroke-linecap:round;stroke-linejoin:round;-inkscape-stroke:none" | ||||||
|  |      d="M 12.116784,6.5394415 A 1.2747098,1.2747098 0 0 0 11.455179,6.724648 l -6.6465926,4.037176 a 1.2745823,1.2745823 0 0 0 -0.427537,1.751108 1.2745823,1.2745823 0 0 0 1.7509281,0.427717 l 5.9848065,-3.635327 5.984809,3.635327 A 1.2745823,1.2745823 0 0 0 19.85252,12.512932 1.2745823,1.2745823 0 0 0 19.424984,10.761824 L 12.778569,6.724648 A 1.2747098,1.2747098 0 0 0 12.116784,6.5394415 Z" | ||||||
|  |      id="path9314" /> | ||||||
|  |   <path | ||||||
|  |      style="color:#000000;fill:#de0000;fill-opacity:1;stroke:none;stroke-width:0.0919748;stroke-linecap:round;stroke-linejoin:round;-inkscape-stroke:none" | ||||||
|  |      d="m 12.195014,11.806679 a 1.2747098,1.2747098 0 0 0 -0.661606,0.185205 l -6.6465924,4.037177 a 1.2745823,1.2745823 0 0 0 -0.427537,1.751108 1.2745823,1.2745823 0 0 0 1.750928,0.427718 l 5.9848074,-3.635327 5.984807,3.635327 a 1.2745823,1.2745823 0 0 0 1.750928,-0.427718 1.2745823,1.2745823 0 0 0 -0.427537,-1.751108 l -6.646414,-4.037177 a 1.2747098,1.2747098 0 0 0 -0.661784,-0.185205 z" | ||||||
|  |      id="path9316" /> | ||||||
|  | </svg> | ||||||
| After Width: | Height: | Size: 2.1 KiB | 
							
								
								
									
										47
									
								
								server/static/img/priority-5.svg
									
										
									
									
									
										Normal file
									
								
							
							
						
						|  | @ -0,0 +1,47 @@ | ||||||
|  | <?xml version="1.0" encoding="UTF-8" standalone="no"?> | ||||||
|  | <svg | ||||||
|  |    height="24px" | ||||||
|  |    viewBox="0 0 24 24" | ||||||
|  |    width="24px" | ||||||
|  |    fill="#000000" | ||||||
|  |    version="1.1" | ||||||
|  |    id="svg1428" | ||||||
|  |    sodipodi:docname="priority_5_24dp.svg" | ||||||
|  |    inkscape:version="1.1.1 (3bf5ae0, 2021-09-20)" | ||||||
|  |    xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | ||||||
|  |    xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | ||||||
|  |    xmlns="http://www.w3.org/2000/svg" | ||||||
|  |    xmlns:svg="http://www.w3.org/2000/svg"> | ||||||
|  |   <defs | ||||||
|  |      id="defs1432" /> | ||||||
|  |   <sodipodi:namedview | ||||||
|  |      id="namedview1430" | ||||||
|  |      pagecolor="#505050" | ||||||
|  |      bordercolor="#eeeeee" | ||||||
|  |      borderopacity="1" | ||||||
|  |      inkscape:pageshadow="0" | ||||||
|  |      inkscape:pageopacity="0" | ||||||
|  |      inkscape:pagecheckerboard="0" | ||||||
|  |      showgrid="false" | ||||||
|  |      inkscape:zoom="20.517358" | ||||||
|  |      inkscape:cx="22.834323" | ||||||
|  |      inkscape:cy="15.742767" | ||||||
|  |      inkscape:window-width="1863" | ||||||
|  |      inkscape:window-height="1025" | ||||||
|  |      inkscape:window-x="57" | ||||||
|  |      inkscape:window-y="27" | ||||||
|  |      inkscape:window-maximized="1" | ||||||
|  |      inkscape:current-layer="svg1428" /> | ||||||
|  |   <path | ||||||
|  |      style="color:#000000;fill:#aa0000;fill-opacity:1;stroke-width:0.0919748;stroke-linecap:round;stroke-linejoin:round;-inkscape-stroke:none" | ||||||
|  |      d="M 12.116784,3.40514 A 1.2747098,1.2747098 0 0 0 11.455179,3.5903463 L 4.8085864,7.6275238 A 1.2745823,1.2745823 0 0 0 4.3810494,9.3786313 1.2745823,1.2745823 0 0 0 6.1319775,9.8063489 L 12.116784,6.1710217 18.101593,9.8063489 A 1.2745823,1.2745823 0 0 0 19.85252,9.3786313 1.2745823,1.2745823 0 0 0 19.424984,7.6275238 L 12.778569,3.5903463 A 1.2747098,1.2747098 0 0 0 12.116784,3.40514 Z" | ||||||
|  |      id="rect3554" /> | ||||||
|  |   <path | ||||||
|  |      style="color:#000000;fill:#c60000;fill-opacity:1;stroke:none;stroke-width:0.0919748;stroke-linecap:round;stroke-linejoin:round;-inkscape-stroke:none" | ||||||
|  |      d="M 12.116784,8.5394415 A 1.2747098,1.2747098 0 0 0 11.455179,8.724648 l -6.6465926,4.037176 a 1.2745823,1.2745823 0 0 0 -0.427537,1.751108 1.2745823,1.2745823 0 0 0 1.7509281,0.427717 l 5.9848065,-3.635327 5.984809,3.635327 A 1.2745823,1.2745823 0 0 0 19.85252,14.512932 1.2745823,1.2745823 0 0 0 19.424984,12.761824 L 12.778569,8.724648 A 1.2747098,1.2747098 0 0 0 12.116784,8.5394415 Z" | ||||||
|  |      id="path9314" /> | ||||||
|  |   <path | ||||||
|  |      style="color:#000000;fill:#de0000;fill-opacity:1;stroke:none;stroke-width:0.0919748;stroke-linecap:round;stroke-linejoin:round;-inkscape-stroke:none" | ||||||
|  |      d="m 12.195014,13.806679 a 1.2747098,1.2747098 0 0 0 -0.661606,0.185205 l -6.6465924,4.037177 a 1.2745823,1.2745823 0 0 0 -0.427537,1.751108 1.2745823,1.2745823 0 0 0 1.750928,0.427718 l 5.9848074,-3.635327 5.984807,3.635327 a 1.2745823,1.2745823 0 0 0 1.750928,-0.427718 1.2745823,1.2745823 0 0 0 -0.427537,-1.751108 l -6.646414,-4.037177 a 1.2747098,1.2747098 0 0 0 -0.661784,-0.185205 z" | ||||||
|  |      id="path9316" /> | ||||||
|  | </svg> | ||||||
| After Width: | Height: | Size: 2.7 KiB | 
| Before Width: | Height: | Size: 195 B After Width: | Height: | Size: 195 B | 
| Before Width: | Height: | Size: 269 B After Width: | Height: | Size: 269 B | 
|  | @ -60,7 +60,7 @@ const subscribeInternal = (topic, persist, delaySec) => { | ||||||
|         if (!topicEntry) { |         if (!topicEntry) { | ||||||
|             topicEntry = document.createElement('li'); |             topicEntry = document.createElement('li'); | ||||||
|             topicEntry.id = `topic-${topic}`; |             topicEntry.id = `topic-${topic}`; | ||||||
|             topicEntry.innerHTML = `<a href="/${topic}" onclick="return showDetail('${topic}')">${topic}</a> <button onclick="test('${topic}'); return false;"> <img src="static/img/send_black_24dp.svg"> Test</button> <button onclick="unsubscribe('${topic}'); return false;"> <img src="static/img/clear_black_24dp.svg"> Unsubscribe</button>`; |             topicEntry.innerHTML = `<a href="/${topic}" onclick="return showDetail('${topic}')">${topic}</a> <button onclick="test('${topic}'); return false;"> <img src="static/img/send.svg"> Test</button> <button onclick="unsubscribe('${topic}'); return false;"> <img src="static/img/unsubscribe.svg"> Unsubscribe</button>`; | ||||||
|             topicsList.appendChild(topicEntry); |             topicsList.appendChild(topicEntry); | ||||||
|         } |         } | ||||||
|         topicsHeader.style.display = ''; |         topicsHeader.style.display = ''; | ||||||
|  | @ -68,7 +68,7 @@ const subscribeInternal = (topic, persist, delaySec) => { | ||||||
|         // Open event source
 |         // Open event source
 | ||||||
|         let eventSource = new EventSource(`${topic}/sse`); |         let eventSource = new EventSource(`${topic}/sse`); | ||||||
|         eventSource.onopen = () => { |         eventSource.onopen = () => { | ||||||
|             topicEntry.innerHTML = `<a href="/${topic}" onclick="return showDetail('${topic}')">${topic}</a> <button onclick="test('${topic}'); return false;"> <img src="static/img/send_black_24dp.svg"> Test</button> <button onclick="unsubscribe('${topic}'); return false;"> <img src="static/img/clear_black_24dp.svg"> Unsubscribe</button>`; |             topicEntry.innerHTML = `<a href="/${topic}" onclick="return showDetail('${topic}')">${topic}</a> <button onclick="test('${topic}'); return false;"> <img src="static/img/send.svg"> Test</button> <button onclick="unsubscribe('${topic}'); return false;"> <img src="static/img/unsubscribe.svg"> Unsubscribe</button>`; | ||||||
|             delaySec = 0; // Reset on successful connection
 |             delaySec = 0; // Reset on successful connection
 | ||||||
|         }; |         }; | ||||||
|         eventSource.onerror = (e) => { |         eventSource.onerror = (e) => { | ||||||
|  | @ -152,22 +152,35 @@ const rerenderDetailView = () => { | ||||||
|         detailEventsList.removeChild(detailEventsList.firstChild); |         detailEventsList.removeChild(detailEventsList.firstChild); | ||||||
|     } |     } | ||||||
|     topics[currentTopic]['messages'].forEach(m => { |     topics[currentTopic]['messages'].forEach(m => { | ||||||
|         let dateDiv = document.createElement('div'); |         const entryDiv = document.createElement('div'); | ||||||
|         let titleDiv = document.createElement('div'); |         const dateDiv = document.createElement('div'); | ||||||
|         let messageDiv = document.createElement('div'); |         const titleDiv = document.createElement('div'); | ||||||
|         let eventDiv = document.createElement('div'); |         const messageDiv = document.createElement('div'); | ||||||
|  |         const tagsDiv = document.createElement('div'); | ||||||
|  | 
 | ||||||
|  |         entryDiv.classList.add('detailEntry'); | ||||||
|         dateDiv.classList.add('detailDate'); |         dateDiv.classList.add('detailDate'); | ||||||
|         dateDiv.innerHTML = new Date(m.time * 1000).toLocaleString(); |         const dateStr = new Date(m.time * 1000).toLocaleString(); | ||||||
|  |         if (m.priority && [1,2,4,5].includes(m.priority)) { | ||||||
|  |             dateDiv.innerHTML = `${dateStr} <img src="static/img/priority-${m.priority}.svg"/>`; | ||||||
|  |         } else { | ||||||
|  |             dateDiv.innerHTML = `${dateStr}`; | ||||||
|  |         } | ||||||
|         messageDiv.classList.add('detailMessage'); |         messageDiv.classList.add('detailMessage'); | ||||||
|         messageDiv.innerText = m.message; |         messageDiv.innerText = m.message; | ||||||
|         eventDiv.appendChild(dateDiv); |         entryDiv.appendChild(dateDiv); | ||||||
|         if (m.title) { |         if (m.title) { | ||||||
|             titleDiv.classList.add('detailTitle'); |             titleDiv.classList.add('detailTitle'); | ||||||
|             titleDiv.innerText = m.title; |             titleDiv.innerText = m.title; | ||||||
|             eventDiv.appendChild(titleDiv) |             entryDiv.appendChild(titleDiv); | ||||||
|         } |         } | ||||||
|         eventDiv.appendChild(messageDiv); |         entryDiv.appendChild(messageDiv); | ||||||
|         detailEventsList.appendChild(eventDiv); |         if (m.tags) { | ||||||
|  |             tagsDiv.classList.add('detailTags'); | ||||||
|  |             tagsDiv.innerText = "Tags: " + m.tags.join(", "); | ||||||
|  |             entryDiv.appendChild(tagsDiv); | ||||||
|  |         } | ||||||
|  |         detailEventsList.appendChild(entryDiv); | ||||||
|     }) |     }) | ||||||
|     if (topics[currentTopic]['messages'].length === 0) { |     if (topics[currentTopic]['messages'].length === 0) { | ||||||
|         detailNoNotifications.style.display = ''; |         detailNoNotifications.style.display = ''; | ||||||
|  |  | ||||||