chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
#!/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 '}'
|
||||
Reference in New Issue
Block a user