'
comparison_html += f'{escape_html(version_a_str)} > {escape_html(version_b_str)}'
elif version_a < version_b:
comparison_html += 'lesser">'
comparison_html += f'{escape_html(version_a_str)} < {escape_html(version_b_str)}'
else:
comparison_html += 'equal">'
comparison_html += f'{escape_html(version_a_str)} = {escape_html(version_b_str)}'
comparison_html += '
'
document.querySelector("#comparison-result").innerHTML = comparison_html
# Additional comparison details
details = f"Detailed Comparison:\n"
details += f" • {version_a_str} > {version_b_str}: {safe_compare(version_a, version_b, '>')}\n"
details += f" • {version_a_str} < {version_b_str}: {safe_compare(version_a, version_b, '<')}\n"
details += f" • {version_a_str} == {version_b_str}: {safe_compare(version_a, version_b, '==')}\n"
details += f" • {version_a_str} >= {version_b_str}: {safe_compare(version_a, version_b, '>=')}\n"
details += f" • {version_a_str} <= {version_b_str}: {safe_compare(version_a, version_b, '<=')}\n\n"
details += "Differences:\n"
details += f" • Major: {info_a['major']} vs {info_b['major']} ({'✓' if info_a['major'] == info_b['major'] else '✗'})\n"
details += f" • Minor: {info_a['minor']} vs {info_b['minor']} ({'✓' if info_a['minor'] == info_b['minor'] else '✗'})\n"
details += f" • Patch: {info_a['patch']} vs {info_b['patch']} ({'✓' if info_a['patch'] == info_b['patch'] else '✗'})\n"
details += f" • Strategy: {info_a['strategy']} vs {info_b['strategy']} ({'✓' if info_a['strategy'] == info_b['strategy'] else '✗'})\n"
document.querySelector("#comparison-details").innerText = details
except Exception as e:
document.querySelector("#comparison-result").innerHTML = f'Comparison Error: {escape_html(str(e))}
'
document.querySelector("#comparison-details").innerText = ""
else:
document.querySelector("#comparison-result").innerHTML = 'Cannot compare invalid versions
'
document.querySelector("#comparison-details").innerText = ""
except Exception as e:
document.querySelector("#comparison-result").innerHTML = f'Script Error: {escape_html(str(e))}
'
document.querySelector("#comparison-details").innerText = ""
def load_example(version_a, version_b):
try:
document.querySelector("#version-input-a").value = version_a
document.querySelector("#version-input-b").value = version_b
compare_versions()
except Exception as e:
print(f"Error loading example: {e}")
def analyze_single_version(*args, **kwargs):
try:
version_str = document.querySelector("#single-version-input").value.strip()
if not version_str:
document.querySelector("#single-version-output").innerText = ""
document.querySelector("#single-version-json").innerText = ""
return
info = get_version_info(version_str)
# Display formatted info
document.querySelector("#single-version-output").innerText = format_version_info(info)
# Display raw JSON
if "error" not in info:
json_output = json.dumps(info, indent=2, sort_keys=True)
else:
json_output = json.dumps(info, indent=2)
document.querySelector("#single-version-json").innerText = json_output
except Exception as e:
document.querySelector("#single-version-output").innerText = f"Error: {str(e)}"
document.querySelector("#single-version-json").innerText = f'{{"error": "{str(e)}"}}'
# Make functions available globally for onclick handlers
import js
js.load_example = load_example
js.analyze_single_version = analyze_single_version
js.compare_versions = compare_versions
# Display AwesomeVersion version in footer
try:
from importlib.metadata import version
version_info = f"v{version('awesomeversion')}"
document.querySelector("#awesomeversion-version").innerText = version_info
except Exception as e:
document.querySelector("#awesomeversion-version").innerText = "v?"
# Hide loader and show main content
document.querySelector("#loader-overlay").style.display = "none"
document.querySelector("#main-content").classList.add("loaded")
AwesomeVersion Demo
Compare version strings and explore version formats with this interactive tool