为了账号安全,请及时绑定邮箱和手机立即绑定

如何从要点脚本创建语言选择包装器?

如何从要点脚本创建语言选择包装器?

繁星点点滴滴 2023-12-14 14:12:03
我有一个用不同语言编写的要点文件,它们都做同样的事情。因此,我想创建一个类似于Google docs 文档的语言选择选项。是否可以创建这样一个接受 Gist 脚本标签并如上所示显示的包装类?与嵌入单个文件一样,我尝试了不同的查询命令,例如 <script src="https://gist.github.com/gistid.js?language=python">,但它们都不起作用。
查看完整描述

1 回答

?
杨__羊羊

TA贡献1943条经验 获得超7个赞

这是我最终得到的处理代码。


使用一些 CSS + javascript 隐藏和切换逻辑,它会像 google docs 文档一样工作。


如果有人用 css 或 js 更新这个答案,我将不胜感激。


import requests

from bs4 import BeautifulSoup


def render_gist_by_file(gist_id):

    result = requests.get(f'https://gist.github.com/{gist_id}.js', headers=git_credential)

    if result.text.startswith("<!DOCTYPE html>"):

      return None


    result = result.text

    result = result.replace("\\/", "/").replace("\\&", "&").replace("\\$", "$").replace("\\<", "<").replace("\\`", "`").replace("\\n", "\n").replace('\\"', '"')

    result = html.unescape(result)

    result = result.split("document.write('")[-1][:-3]


    bs = BeautifulSoup(result, "html.parser")


    for tag in bs.find_all(class_="gist"):

      file_box = tag.find(class_="file-box")

      root = tag.find(class_="file-box")

      toggle_div = bs.new_tag('div', attrs={"class": "gist-meta"})


      for i, d in enumerate(tag.find_all(class_="file")):

        d["class"] = f"file gist-toggle gist-id-{gist_id}"

        if i != 0:

          file_box.append(d)  # combine to first table


      for d in tag.find_all(class_="gist-meta"):

        siblings = list(d.next_elements)

        file_id, file_name = siblings[4].attrs["href"].split("#")[-1], siblings[5]

        gist.file_names.append(file_name)

        toggle_a = bs.new_tag('a', attrs={"id": file_id, "class": f"gist-toggle gist-id-{gist_id}", "onclick": f"toggle('gist-id-{gist_id}', '{file_id}')", "style": "padding: 0 18px"})

        toggle_a.append(file_name)

        toggle_div.append(toggle_a)

        d.extract()  # remove bottom nav


      root.insert(0, toggle_div)

      for d in islice(tag.find_all(class_="gist-file"), 1, None):

        d.extract()  # remove except first

    gist.html = str(bs)

    return gist


查看完整回答
反对 回复 2023-12-14
  • 1 回答
  • 0 关注
  • 89 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信