92 lines
2.0 KiB
Bash
92 lines
2.0 KiB
Bash
#!/bin/bash
|
|
set -e
|
|
|
|
# Web Quality Audit Script
|
|
# Analyzes HTML files for common quality issues
|
|
|
|
usage() {
|
|
echo "Usage: $0 <file_or_directory>" >&2
|
|
echo "Analyzes HTML files for web quality issues." >&2
|
|
exit 1
|
|
}
|
|
|
|
if [ -z "$1" ]; then
|
|
usage
|
|
fi
|
|
|
|
TARGET="$1"
|
|
ISSUES=()
|
|
WARNINGS=()
|
|
|
|
analyze_html() {
|
|
local file="$1"
|
|
echo "Analyzing: $file" >&2
|
|
|
|
# Check for doctype
|
|
if ! grep -qi "<!doctype html>" "$file"; then
|
|
ISSUES+=("$file: Missing HTML5 doctype")
|
|
fi
|
|
|
|
# Check for charset
|
|
if ! grep -qi 'charset.*utf-8' "$file"; then
|
|
WARNINGS+=("$file: Missing or non-UTF-8 charset declaration")
|
|
fi
|
|
|
|
# Check for viewport
|
|
if ! grep -qi 'name="viewport"' "$file"; then
|
|
ISSUES+=("$file: Missing viewport meta tag")
|
|
fi
|
|
|
|
# Check for lang attribute
|
|
if ! grep -qi '<html.*lang=' "$file"; then
|
|
ISSUES+=("$file: Missing lang attribute on <html>")
|
|
fi
|
|
|
|
# Check for images without alt
|
|
if grep -qE '<img[^>]*>' "$file" && grep -qE '<img(?![^>]*alt=)[^>]*>' "$file" 2>/dev/null; then
|
|
WARNINGS+=("$file: Possible images without alt text")
|
|
fi
|
|
|
|
# Check for title tag
|
|
if ! grep -qi '<title>' "$file"; then
|
|
ISSUES+=("$file: Missing <title> tag")
|
|
fi
|
|
|
|
# Check for HTTPS in links
|
|
if grep -qE 'http://' "$file"; then
|
|
WARNINGS+=("$file: Contains non-HTTPS URLs")
|
|
fi
|
|
}
|
|
|
|
# Process files
|
|
if [ -d "$TARGET" ]; then
|
|
find "$TARGET" -name "*.html" -o -name "*.htm" | while read -r file; do
|
|
analyze_html "$file"
|
|
done
|
|
elif [ -f "$TARGET" ]; then
|
|
analyze_html "$TARGET"
|
|
else
|
|
echo "Error: $TARGET is not a valid file or directory" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# Output results as JSON
|
|
echo '{'
|
|
echo ' "issues": ['
|
|
for i in "${!ISSUES[@]}"; do
|
|
if [ $i -gt 0 ]; then echo ','; fi
|
|
echo -n " \"${ISSUES[$i]}\""
|
|
done
|
|
echo ''
|
|
echo ' ],'
|
|
echo ' "warnings": ['
|
|
for i in "${!WARNINGS[@]}"; do
|
|
if [ $i -gt 0 ]; then echo ','; fi
|
|
echo -n " \"${WARNINGS[$i]}\""
|
|
done
|
|
echo ''
|
|
echo ' ],'
|
|
echo " \"issueCount\": ${#ISSUES[@]},"
|
|
echo " \"warningCount\": ${#WARNINGS[@]}"
|
|
echo '}'
|