@@ -30,9 +30,8 @@ media_kit() {
3030 ;;
3131 esac
3232}
33-
3433_html_page () {
35- cat << EOF
34+ cat << ' EOF '
3635<!DOCTYPE html>
3736<html>
3837<head>
@@ -58,6 +57,12 @@ _html_page() {
5857 grid-template-rows: auto auto;
5958 gap: 1em;
6059 }
60+ @media (max-width: 768px) {
61+ main {
62+ grid-template-columns: 1fr;
63+ grid-template-rows: auto;
64+ }
65+ }
6166 .section {
6267 padding: 1em;
6368 background: #f0f0f0;
@@ -66,12 +71,20 @@ _html_page() {
6671 .section h2 {
6772 margin-top: 0;
6873 }
69- img {
70- margin: 0.5em;
74+ img {
75+ margin: 0.5em;
76+ vertical-align: middle;
7177 }
7278 .legacy {
7379 opacity: 0.85; /* Slightly dim legacy sections */
7480 }
81+ ul {
82+ list-style-type: none;
83+ padding-left: 0;
84+ }
85+ ul li {
86+ margin: 0.2em 0;
87+ }
7588 </style>
7689</head>
7790<body>
@@ -99,7 +112,9 @@ _html_page() {
99112 </main>
100113
101114 <footer>
102- <p>For more information, see <a href="https://www.armbian.com/brand/" style="color: #fff;">Armbian Brand Guidelines</a>.</p>
115+ <p>For more information, see
116+ <a href="https://www.armbian.com/brand/" style="color: #fff;">Armbian Brand Guidelines</a>.
117+ </p>
103118 </footer>
104119
105120 <script>
@@ -117,15 +132,23 @@ _html_page() {
117132 }
118133 const container = document.getElementById(sectionId);
119134 if (!container) return;
135+
136+ // Adapt for PNG object format
137+ const pngList = logo.pngs.map(p => {
138+ if (typeof p === 'string') {
139+ return `<li><a href="${p}">${p.split('/').pop()}</a></li>`;
140+ } else {
141+ return `<li><a href="${p.path}">${p.size}</a> – ${p.kb} KB</li>`;
142+ }
143+ }).join('');
144+
120145 const div = document.createElement('div');
121- div.innerHTML = \ `
146+ div.innerHTML = `
122147 <hr>
123- <img src="\ $ {logo.svg}" alt="\ $ {logo.name}" width="64" height="64">
148+ <img src="${logo.svg}" alt="${logo.name}" width="64" height="64">
124149 <p>Download PNG:</p>
125- <ul>
126- \$ {logo.pngs.map(p => \` <li><a href="\$ {p}">\$ {p.split('/').pop()}</a></li>\` ).join('')}
127- </ul>
128- \` ;
150+ <ul>${pngList}</ul>
151+ `;
129152 container.appendChild(div);
130153 });
131154 });
@@ -135,7 +158,6 @@ _html_page() {
135158EOF
136159}
137160
138-
139161_html_page_v0.1 () {
140162 cat << EOF
141163<!DOCTYPE html>
@@ -178,35 +200,76 @@ EOF
178200}
179201
180202_html_server_index_json () {
181- # Directory containing SVGs
182- SVG_DIR=" ./images/scalable"
183- # Output JSON file
184- OUTPUT=" logos.json"
185-
186- echo " [" > " $OUTPUT "
187- first=1
188- local SIZES=(16 32 64 128 256 512)
189- for file in " $SVG_DIR " /* .svg; do
190- [[ -e " $file " ]] || continue
191- name=$( basename " $file " .svg)
192- [[ $first -eq 0 ]] && echo " ," >> " $OUTPUT "
193- first=0
194- echo " {" >> " $OUTPUT "
195- echo " \" name\" : \" $name \" ," >> " $OUTPUT "
196- echo " \" svg\" : \" $file \" ," >> " $OUTPUT "
197- echo " \" pngs\" : [" >> " $OUTPUT "
198- for i in " ${! SIZES[@]} " ; do
199- sz=" ${SIZES[$i]} "
200- echo -n " \" share/icons/hicolor/${sz} x${sz} /${name} .png\" " >> " $OUTPUT "
201- [[ $i -lt $(( ${# SIZES[@]} - 1 )) ]] && echo " ," >> " $OUTPUT "
202- done
203- echo " " >> " $OUTPUT "
204- echo " ]" >> " $OUTPUT "
205- echo -n " }" >> " $OUTPUT "
206- done
207- echo " " >> " $OUTPUT "
208- echo " ]" >> " $OUTPUT "
209- echo " JSON file created: $OUTPUT "
203+ SVG_DIR=" ./brand_src"
204+ OUTPUT=" logos.json"
205+ SIZES=(16 32 512)
206+
207+ mapfile -t svg_files < <( find " $SVG_DIR " -type f -name " *.svg" | sort -u)
208+
209+ echo " [" > " $OUTPUT "
210+ first=1
211+
212+ for file in " ${svg_files[@]} " ; do
213+ [[ -e " $file " ]] || continue
214+ name=$( basename " $file " .svg)
215+
216+ # Determine category
217+ case " $file " in
218+ * " /legacy/" * )
219+ if [[ " $name " == armbian_* ]]; then category=" armbian-legacy"
220+ elif [[ " $name " == configng_* ]]; then category=" configng-legacy"
221+ else category=" other-legacy" ; fi
222+ ;;
223+ * )
224+ if [[ " $name " == armbian_* ]]; then category=" armbian"
225+ elif [[ " $name " == configng_* ]]; then category=" configng"
226+ else category=" other" ; fi
227+ ;;
228+ esac
229+
230+ # Safely extract SVG metadata
231+ svg_width=$( grep -oP ' width="[^"]+"' " $file " | head -n1 | cut -d' "' -f2 || echo " " )
232+ svg_height=$( grep -oP ' height="[^"]+"' " $file " | head -n1 | cut -d' "' -f2 || echo " " )
233+ svg_viewbox=$( grep -oP ' viewBox="[^"]+"' " $file " | head -n1 | cut -d' "' -f2 || echo " " )
234+ svg_title=$( grep -oP ' <title>(.*?)</title>' " $file " | head -n1 || echo " " )
235+ svg_desc=$( grep -oP ' <desc>(.*?)</desc>' " $file " | head -n1 || echo " " )
236+
237+ [[ $first -eq 0 ]] && echo " ," >> " $OUTPUT "
238+ first=0
239+ echo " {" >> " $OUTPUT "
240+ echo " \" name\" : \" $name \" ," >> " $OUTPUT "
241+ echo " \" category\" : \" $category \" ," >> " $OUTPUT "
242+ echo " \" svg\" : \" $file \" ," >> " $OUTPUT "
243+ echo " \" svg_meta\" : {" >> " $OUTPUT "
244+ echo " \" width\" : \" $svg_width \" ," >> " $OUTPUT "
245+ echo " \" height\" : \" $svg_height \" ," >> " $OUTPUT "
246+ echo " \" viewBox\" : \" $svg_viewbox \" ," >> " $OUTPUT "
247+ echo " \" title\" : \" $svg_title \" ," >> " $OUTPUT "
248+ echo " \" desc\" : \" $svg_desc \" " >> " $OUTPUT "
249+ echo " }," >> " $OUTPUT "
250+ echo " \" pngs\" : [" >> " $OUTPUT "
251+
252+ for i in " ${! SIZES[@]} " ; do
253+ sz=" ${SIZES[$i]} "
254+ png_path=" images/${sz} x${sz} /${name} .png"
255+ if [[ -f " $png_path " ]]; then
256+ kb=$( du -k " $png_path " 2> /dev/null | cut -f1 || echo 0)
257+ else
258+ kb=0
259+ fi
260+ kb_decimal=$( printf " %.2f" " $kb " )
261+ echo -n " { \" path\" : \" $png_path \" , \" size\" : \" ${sz} x${sz} \" , \" kb\" : ${kb_decimal} }" >> " $OUTPUT "
262+ [[ $i -lt $(( ${# SIZES[@]} - 1 )) ]] && echo " ," >> " $OUTPUT "
263+ done
264+
265+ echo " " >> " $OUTPUT "
266+ echo " ]" >> " $OUTPUT "
267+ echo -n " }" >> " $OUTPUT "
268+ done
269+
270+ echo " " >> " $OUTPUT "
271+ echo " ]" >> " $OUTPUT "
272+ echo " JSON file created: $OUTPUT "
210273}
211274
212275
@@ -240,7 +303,83 @@ _html_server_main() {
240303 echo " Test complete"
241304}
242305
306+
243307_icon_set_from_svg () {
308+ SRC_DIR=" ./brand_src"
309+ SIZES=(16 48 512)
310+
311+ # Name of the base SVG (without extension) to use for favicon
312+ FAVICON_BASE=" configng-mascot_v2.0" # change this to whatever your main icon is
313+
314+ # Check for ImageMagick's convert command
315+ if ! command -v convert & > /dev/null; then
316+ echo " Error: ImageMagick 'convert' command not found."
317+ read -p " Would you like to install ImageMagick using 'sudo apt install imagemagick'? [Y/n] " yn
318+ case " $yn " in
319+ [Yy]* | " " )
320+ echo " Installing ImageMagick..."
321+ sudo apt update && sudo apt install imagemagick
322+ if ! command -v convert & > /dev/null; then
323+ echo " Installation failed or 'convert' still not found. Exiting."
324+ exit 1
325+ fi
326+ ;;
327+ * )
328+ echo " Cannot proceed without ImageMagick. Exiting."
329+ exit 1
330+ ;;
331+ esac
332+ fi
333+
334+ if [ ! -d " $SRC_DIR " ]; then
335+ echo " Error: Source directory '$SRC_DIR ' does not exist."
336+ exit 1
337+ fi
338+
339+ shopt -s nullglob
340+ svg_files=(" $SRC_DIR " /* .svg)
341+ if [ ${# svg_files[@]} -eq 0 ]; then
342+ echo " Error: No SVG files found in '$SRC_DIR '."
343+ exit 1
344+ fi
345+ shopt -u nullglob
346+
347+ for svg in " ${svg_files[@]} " ; do
348+ base=$( basename " $svg " .svg)
349+ for size in " ${SIZES[@]} " ; do
350+ OUT_DIR=" images/${size} x${size} "
351+ mkdir -p " $OUT_DIR "
352+ OUT_FILE=" ${OUT_DIR} /${base} .png"
353+ if [[ ! -f " $OUT_FILE " || " $svg " -nt " $OUT_FILE " ]]; then
354+ convert -background none -resize ${size} x${size} " $svg " " $OUT_FILE "
355+ if [ $? -eq 0 ]; then
356+ echo " Generated $OUT_FILE "
357+ else
358+ echo " Failed to convert $svg to $OUT_FILE "
359+ fi
360+ fi
361+ done
362+ done
363+
364+ cp -r " $SRC_DIR " " images/scalable"
365+
366+ # Generate multi-resolution favicon.ico from chosen SVG
367+ FAVICON_SVG=" $SRC_DIR /${FAVICON_BASE} .svg"
368+ if [[ -f " $FAVICON_SVG " ]]; then
369+ echo " Creating favicon.ico from $FAVICON_SVG "
370+ convert -background none " $FAVICON_SVG " -resize 16x16 favicon-16.png
371+ convert -background none " $FAVICON_SVG " -resize 32x32 favicon-32.png
372+ convert -background none " $FAVICON_SVG " -resize 48x48 favicon-48.png
373+ convert favicon-16.png favicon-32.png favicon-48.png favicon.ico
374+ rm favicon-16.png favicon-32.png favicon-48.png
375+ echo " Multi-resolution favicon.ico created."
376+ else
377+ echo " Could not create favicon.ico (SVG not found: $FAVICON_SVG )"
378+ fi
379+ }
380+
381+
382+ _icon_set_from_svg_v1.0 () {
244383 SRC_DIR=" ./brand_src"
245384 SIZES=(16 32 64 128 256 512)
246385 # Check for ImageMagick's convert command
0 commit comments