1+ <!doctype html>
2+ < html lang ="en ">
3+ < head >
4+ < meta charset ="utf-8 " />
5+ < meta name ="viewport " content ="width=device-width, initial-scale=1 " />
6+ < meta name ="author " content ="Peter Hedlund " />
7+ < meta name ="generator " content ="Ignite v0.6.0 " />
8+ < title > CloudNews 3.8.2 released</ title >
9+ < link href ="/css/bootstrap.min.css " rel ="stylesheet " />
10+ < link href ="/css/bootstrap-icons.min.css " rel ="stylesheet " />
11+ < link href ="/css/ignite-core.min.css " rel ="stylesheet " />
12+ < link href ="https://pbh.dev/2019-02-22-CloudNews-3-8-2 " rel ="canonical " />
13+ < link href ="/favicon/favicon.ico " rel ="icon " />
14+ < script > ( function ( ) {
15+ function getThemePreference ( ) {
16+ return localStorage . getItem ( 'custom-theme' ) || 'auto' ;
17+ }
18+
19+ function applyTheme ( themeID ) {
20+ const prefersDark = window . matchMedia ( '(prefers-color-scheme: dark)' ) . matches ;
21+ const lightThemeID = document . documentElement . getAttribute ( 'data-light-theme' ) || 'light' ;
22+ const darkThemeID = document . documentElement . getAttribute ( 'data-dark-theme' ) || 'dark' ;
23+ const actualThemeID = themeID === 'auto' ? ( prefersDark ? darkThemeID : lightThemeID ) : themeID ;
24+
25+ document . documentElement . setAttribute ( 'data-bs-theme' , actualThemeID ) ;
26+ document . documentElement . setAttribute ( 'data-theme-state' , themeID ) ;
27+ }
28+
29+ function applySyntaxTheme ( ) {
30+ const syntaxTheme = getComputedStyle ( document . documentElement )
31+ . getPropertyValue ( '--syntax-highlight-theme' ) . trim ( ) . replace ( / " / g, '' ) ;
32+
33+ if ( ! syntaxTheme ) return ;
34+
35+ document . querySelectorAll ( 'link[data-highlight-theme]' ) . forEach ( link => {
36+ link . setAttribute ( 'disabled' , 'disabled' ) ;
37+ } ) ;
38+
39+ const themeLink = document . querySelector ( `link[data-highlight-theme="${ syntaxTheme } "]` ) ;
40+ if ( themeLink ) {
41+ themeLink . removeAttribute ( 'disabled' ) ;
42+ }
43+ }
44+
45+ window . matchMedia ( '(prefers-color-scheme: dark)' ) . addEventListener ( 'change' , e => {
46+ const currentTheme = getThemePreference ( ) ;
47+ if ( currentTheme === 'auto' ) {
48+ applyTheme ( 'auto' ) ;
49+ applySyntaxTheme ( ) ;
50+ }
51+ } ) ;
52+
53+ const savedTheme = getThemePreference ( ) ;
54+ applyTheme ( savedTheme ) ;
55+ applySyntaxTheme ( ) ;
56+ } ) ( ) ;
57+ </ script >
58+ < meta property ="og:site_name " content ="PBH.dev " />
59+ < meta property ="og:title " content ="CloudNews 3.8.2 released " />
60+ < meta name ="twitter:title " content ="CloudNews 3.8.2 released " />
61+ < meta property ="og:url " content ="https://pbh.dev/2019-02-22-CloudNews-3-8-2 " />
62+ < meta name ="twitter:domain " content ="pbh.dev " />
63+ < meta name ="twitter:card " content ="summary_large_image " />
64+ < meta name ="twitter:dnt " content ="on " />
65+ </ head >
66+ < body class ="container ">
67+ < div class ="fixed-top ">
68+ < header >
69+ < nav class ="navbar navbar-expand-md " style ="border-bottom: 1.0px solid rgb(211 211 211 / 100%); background-color: rgb(255 255 255 / 85%) ">
70+ < div class ="container flex-wrap flex-lg-nowrap ">
71+ < div class ="me-2 me-md-auto ">
72+ < a href ="/home " class ="d-inline-flex align-items-center navbar-brand " style ="font-weight: 700 "> PBH.dev</ a >
73+ </ div >
74+ < button type ="button " class ="navbar-toggler btn " data-bs-toggle ="collapse " data-bs-target ="#navbarCollapse " aria-controls ="navbarCollapse " aria-expanded ="false " aria-label ="Toggle navigation "> < span class ="navbar-toggler-icon "> </ span > </ button >
75+ < div id ="navbarCollapse " class ="collapse navbar-collapse ">
76+ < ul class ="navbar-nav mb-2 mb-md-0 col justify-content-end ">
77+ < li class ="nav-item "> < a href ="/home " class ="nav-link text-nowrap "> News</ a > </ li >
78+ < li class ="nav-item "> < a href ="/cloud-news " class ="nav-link text-nowrap "> CloudNews</ a > </ li >
79+ < li class ="nav-item "> < a href ="/cloud-notes " class ="nav-link text-nowrap "> CloudNotes</ a > </ li >
80+ < li class ="nav-item "> < a href ="/privacy " class ="nav-link text-nowrap "> Privacy</ a > </ li >
81+ < li class ="nav-item "> < a href ="/contact " class ="nav-link text-nowrap "> Contact</ a > </ li >
82+ </ ul >
83+ </ div >
84+ </ div >
85+ </ nav >
86+ </ header >
87+ </ div >
88+ < div class ="ig-main-content " style ="padding-top: 90px; padding-bottom: 180px ">
89+ < h1 class ="text-center "> CloudNews 3.8.2 released</ h1 >
90+ < p > </ p >
91+ </ div >
92+ < div class ="fixed-bottom ">
93+ < div class ="py-3 mt-5 vstack " style ="border-top: 1.0px solid rgb(211 211 211 / 100%); background-color: rgb(255 255 255 / 85%) ">
94+ < div class ="fs-2 mb-0 align-self-center hstack gap-3 ">
95+ < a target ="_blank " rel ="noopener noreferrer " href ="/feed.rss " class ="mb-0 align-self-center link-secondary "> < i class ="bi-rss "> </ i > </ a >
96+ < a target ="_blank " rel ="noopener noreferrer " href ="https://github.com/phedlund " class ="mb-0 align-self-center link-secondary "> < i class ="bi-github "> </ i > </ a >
97+ < a target ="_blank " rel ="noopener noreferrer " href ="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=AXQCA3ZJU6TNS " class ="mb-0 align-self-center link-secondary "> < i class ="bi-paypal "> </ i > </ a >
98+ </ div >
99+ < p class ="mb-0 align-self-center "> Copyright © 2025 Peter B Hedlund</ p >
100+ < p class ="mb-0 align-self-center "> Created in Swift with < a target ="_blank " rel ="noopener noreferrer " href ="https://github.com/twostraws/Ignite " class ="link-secondary "> Ignite</ a > </ p >
101+ </ div >
102+ </ div >
103+ < script src ="/js/bootstrap.bundle.min.js "> </ script >
104+ < script src ="/js/ignite-core.js "> </ script >
105+ </ body >
106+ </ html >
0 commit comments