/
githubmirror
/
cheat.sh
Обзор
Документация
Войти
/
githubmirror
/
cheat.sh
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
lib/frontend/html.py
150 строк
4 KB
Igor Chubin
Format python code using black
29 июл 2025, 21:07
29 июл 2025, 21:07
e82797a
Код
Авторство
О чём код?
""" Configuration parameters: path.internal.ansi2html """ import sys import os import re from subprocess import Popen, PIPE MYDIR = os.path.abspath(os.path.join(__file__, "..", "..")) sys.path.append("%s/lib/" % MYDIR) # pylint: disable=wrong-import-position from config import CONFIG from globals import error from buttons import TWITTER_BUTTON, GITHUB_BUTTON, GITHUB_BUTTON_FOOTER import frontend.ansi # temporary having it here, but actually we have the same data # in the adapter module GITHUB_REPOSITORY = { "late.nz": "chubin/late.nz", "cheat.sheets": "chubin/cheat.sheets", "cheat.sheets dir": "chubin/cheat.sheets", "tldr": "tldr-pages/tldr", "cheat": "chrisallenlane/cheat", "learnxiny": "adambard/learnxinyminutes-docs", "internal": "", "search": "", "unknown": "", } def visualize(answer_data, request_options): query = answer_data["query"] answers = answer_data["answers"] topics_list = answer_data["topics_list"] editable = len(answers) == 1 and answers[0]["topic_type"] == "cheat.sheets" repository_button = "" if len(answers) == 1: repository_button = _github_button(answers[0]["topic_type"]) result, found = frontend.ansi.visualize(answer_data, request_options) return ( _render_html( query, result, editable, repository_button, topics_list, request_options ), found, ) def _github_button(topic_type): full_name = GITHUB_REPOSITORY.get(topic_type, "") if not full_name: return "" short_name = full_name.split("/", 1)[1] # pylint: disable=unused-variable button = ( "<!-- Place this tag where you want the button to render. -->" '<a aria-label="Star %(full_name)s on GitHub"' ' data-count-aria-label="# stargazers on GitHub"' ' data-count-api="/repos/%(full_name)s#stargazers_count"' ' data-count-href="/%(full_name)s/stargazers"' ' data-icon="octicon-star"' ' href="https://github.com/%(full_name)s"' ' class="github-button">%(short_name)s</a>' ) % locals() return button def _render_html( query, result, editable, repository_button, topics_list, request_options ): def _html_wrapper(data): """ Convert ANSI text `data` to HTML """ cmd = [ "bash", CONFIG["path.internal.ansi2html"], "--palette=solarized", "--bg=dark", ] try: proc = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE) except FileNotFoundError: print("ERROR: %s" % cmd) raise data = data.encode("utf-8") stdout, stderr = proc.communicate(data) if proc.returncode != 0: error((stdout + stderr).decode("utf-8")) return stdout.decode("utf-8") result = result + "\n$" result = _html_wrapper(result) title = "<title>cheat.sh/%s</title>" % query submit_button = ( '<input type="submit" style="position: absolute;' ' left: -9999px; width: 1px; height: 1px;" tabindex="-1" />' ) topic_list = '<datalist id="topics">%s</datalist>' % ( "\n".join("<option value='%s'></option>" % x for x in topics_list) ) curl_line = "<span class='pre'>$ curl cheat.sh/</span>" if query == ":firstpage": query = "" form_html = ( '<form action="/" method="GET">' "%s%s" "<input" ' type="text" value="%s" name="topic"' ' list="topics" autofocus autocomplete="off"/>' "%s" "</form>" ) % (submit_button, curl_line, query, topic_list) edit_button = "" if editable: # It's possible that topic directory starts with omitted underscore if "/" in query: query = "_" + query edit_page_link = ( "https://github.com/chubin/cheat.sheets/edit/master/sheets/" + query ) edit_button = ( '<pre style="position:absolute;padding-left:40em;overflow:visible;height:0;">' '[<a href="%s" style="color:cyan">edit</a>]' "</pre>" ) % edit_page_link result = re.sub("<pre>", edit_button + form_html + "<pre>", result) result = re.sub("<head>", "<head>" + title, result) if not request_options.get("quiet"): result = result.replace( "</body>", TWITTER_BUTTON + GITHUB_BUTTON + repository_button + GITHUB_BUTTON_FOOTER + "</body>", ) return result