Jupyter Notebook
parent
696931eb1d
commit
ca1e96d213
@ -0,0 +1,397 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# Glossary Making Tool"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"This is a Work-in-progress experiment tool to make living glossaries Webpages using simple Python, Javascript, and CSS from an markdown file written in a Etherpad instance.\n",
|
||||
"\n",
|
||||
"**What makes it living?** \n",
|
||||
"\n",
|
||||
"* The glossary structure uses the idea of 'gloss' that means annottation and layer. It makes the glossary a layering of anotations rather than a list of definitions. The pad template uses each word as a card with multiple annotations. See the example.\n",
|
||||
"\n",
|
||||
"* This tool also offers the option of add properties to each word in order to find connections and multiple types of organization. \n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"tags": []
|
||||
},
|
||||
"source": [
|
||||
"## Words\n",
|
||||
"Communicating via **API** with the glossary **Pad** and translating the text written in **Markdown** format using **Pandoc** library."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 11,
|
||||
"metadata": {
|
||||
"tags": []
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import json, pypandoc\n",
|
||||
"from urllib.request import urlopen\n",
|
||||
"from urllib.parse import urlencode\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"with open(\"/opt/etherpad/APIKEY.txt\") as f:\n",
|
||||
" api_key = f.read().strip()\n",
|
||||
"\n",
|
||||
"api_url = \"https://hub.xpub.nl/soupboat/pad/api/1.2.15/\"\n",
|
||||
"\n",
|
||||
"# wrap in a convenient function (APICALL)\n",
|
||||
"def ep (api_fn, api_url, api_key, **data):\n",
|
||||
" data['apikey'] = api_key\n",
|
||||
" return json.load(urlopen(f\"{api_url}{api_fn}\", data=urlencode(data).encode()))\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"glossary = ep(\"getText\", api_url, api_key, padID=\"binding_glossary\")\n",
|
||||
"\n",
|
||||
"text = glossary[\"data\"][\"text\"]\n",
|
||||
"\n",
|
||||
"words = pypandoc.convert_text(text, 'html', format='md')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"From a local markdown text file"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 12,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import pypandoc\n",
|
||||
"\n",
|
||||
"text = open('glossary.txt', 'r')\n",
|
||||
"\n",
|
||||
"with text as f:\n",
|
||||
" text = f.read()\n",
|
||||
" \n",
|
||||
"words = pypandoc.convert_text(text, 'html', format='md')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"tags": []
|
||||
},
|
||||
"source": [
|
||||
"## Properties"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"The following is a word property dictionary "
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 13,
|
||||
"metadata": {
|
||||
"tags": []
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"properties = [\n",
|
||||
"\t{\n",
|
||||
"\t\t'title':'fact',\n",
|
||||
"\t\t'symbol':'A',\n",
|
||||
" 'color': 'green'\n",
|
||||
"\t},\n",
|
||||
"\t{\n",
|
||||
"\t\t'title':'process',\n",
|
||||
"\t\t'symbol':'S',\n",
|
||||
"\t\t'color': 'aqua'\n",
|
||||
"\t},\n",
|
||||
"\t{\n",
|
||||
"\t\t'title':'love',\n",
|
||||
"\t\t'symbol':'L',\n",
|
||||
"\t\t'color': 'orange'\n",
|
||||
"\t},\n",
|
||||
" \t{\n",
|
||||
"\t\t'title':'tool',\n",
|
||||
"\t\t'symbol':'T',\n",
|
||||
"\t\t'color': 'blue'\n",
|
||||
"\t}\n",
|
||||
"]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Writing the Website"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Write properties legend"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 14,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"description = ''\n",
|
||||
"\n",
|
||||
"i = 0\n",
|
||||
"\n",
|
||||
"for title, symbol, color in properties:\n",
|
||||
" title = properties[i]['title']\n",
|
||||
" description += (f''' {title}s,''')\n",
|
||||
" i += 1"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 15,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"legend = ''\n",
|
||||
"\n",
|
||||
"i = 0\n",
|
||||
"\n",
|
||||
"for title, symbol, color in properties:\n",
|
||||
" title = properties[i]['title']\n",
|
||||
" legend += f'''<button id=\"{title}\" class=\"btn {title}-s\" onclick=\"filterSelection('{title}')\">{title}</button>\\n'''\n",
|
||||
" i += 1"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Write Script that will add properties to each word"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 16,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"script = ''\n",
|
||||
"\n",
|
||||
"i = 0 \n",
|
||||
"\n",
|
||||
"for title, symbol, color in properties:\n",
|
||||
" title = properties[i]['title']\n",
|
||||
" symbol = properties[i]['symbol']\n",
|
||||
" script += (f\"\"\"const {title} = document.getElementsByClassName(\"{title}\");\n",
|
||||
" for (let i = 0; i < {title}.length; i++)\"\"\"'{\\n' \n",
|
||||
" f\"\"\"{title}[i].innerHTML += \"<span class='symbol {title}-s'>{symbol}</span>\";\"\"\" \n",
|
||||
" '\\n}\\n\\n')\n",
|
||||
" i += 1"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Assign a different color for each property "
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 17,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"style = ''\n",
|
||||
"\n",
|
||||
"i = 0 \n",
|
||||
"\n",
|
||||
"for title, symbol, color in properties:\n",
|
||||
" title = properties[i]['title']\n",
|
||||
" color = properties[i]['color']\n",
|
||||
" style += f'''.{title}-s''' + '{' + f'''color:{color};''''}'\n",
|
||||
" i += 1"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"tags": []
|
||||
},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 18,
|
||||
"metadata": {
|
||||
"tags": []
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"body = f'''<!DOCTYPE html>\n",
|
||||
" <html>\n",
|
||||
" <head>\n",
|
||||
" <meta charset=\"utf-8\">\n",
|
||||
" <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n",
|
||||
" <link rel=\"stylesheet\" href=\"style.css\"> \n",
|
||||
" <title>Binding GLossary</title>\n",
|
||||
" </head>\n",
|
||||
" <style> {style} </style>\n",
|
||||
" <body id=\"glo_body\">\n",
|
||||
"\n",
|
||||
" <div class=\"head\">\n",
|
||||
" <h1> Glossary for a Diffractive Publishing Practice </h1>\n",
|
||||
" </div>\n",
|
||||
" <hr>\n",
|
||||
" <div class=\"description\">\n",
|
||||
" <p>This glossary gathers words around bookbiding. It was made as an example to use the tool living-glossary.</p> \n",
|
||||
" <p>{description} are the properties that organize and make connections between words.</p>\n",
|
||||
" </div>\n",
|
||||
" <div id=\"legend\" class=\"legend\"> \n",
|
||||
" <button class=\"btn active\" onclick=\"filterSelection('all')\">properties</button> {legend}\n",
|
||||
" </div>\n",
|
||||
" <hr>\n",
|
||||
" <div class=\"words\">\n",
|
||||
" {words} \n",
|
||||
" </div>\n",
|
||||
" </body>\n",
|
||||
" <script>\n",
|
||||
" {script}\n",
|
||||
" </script>\n",
|
||||
" <script src=\"main.js\"></script>\n",
|
||||
" </html>'''\n",
|
||||
"\n",
|
||||
"website = open('index.html','w')\n",
|
||||
"\n",
|
||||
"website.write(body)\n",
|
||||
"website.close()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"print(words)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"tags": []
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"from time import sleep\n",
|
||||
"\n",
|
||||
"while True:\n",
|
||||
" print('hey')\n",
|
||||
" sleep(5)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 3
|
||||
},
|
||||
"file_extension": ".py",
|
||||
"mimetype": "text/x-python",
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.7.3"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
Loading…
Reference in New Issue