populate title pages [json/py]

ezn
E.zn 4 years ago
parent dcafc5e625
commit a69159e337

@ -14,6 +14,8 @@
* [jinja2](https://jinja.palletsprojects.com/en/2.11.x/) Python library
* Install:
* `pip3 install jinja2`
* [Pillow](https://pillow.readthedocs.io/en/stable/) Python library for image processing
* `pip3 install Pillow`
* [pandoc](https://pandoc.org/)
* Install:
* Debian/Ubuntu: `sudo apt install pandoc`
@ -97,3 +99,4 @@ It is
to convert pdfs to jpgs:
convert -quality 100 -density 300 [name-of-pdf] %02d.jpg

@ -1,7 +1,9 @@
import os
from mwclient import Site
from pprint import pprint
from functions import update_json
from PIL import Image
from functions import update_json, remove_nonwords
site = Site(host='hub.xpub.nl/sandbox', path='/itchwiki/')
wd = os.path.dirname(os.path.abspath(__file__)) # working directory
@ -11,6 +13,7 @@ os.makedirs(imgdir, exist_ok=True) # create images/ dir
imgsjson_fn = os.path.join(wd, 'images.json')
thumbnail_size = 1200 # largest px dimension of img thumbnails
with open(os.path.join(wd, 'login.txt'), 'r') as login: # read login user & pwd
@ -26,7 +29,7 @@ for img in site.allimages():
# important img info to dictionary
img_dict = {
'name': img.name,
'filename': img.page_title,
'filename': remove_nonwords(img.page_title),
'timestamp': img.imageinfo['timestamp'],
'url': img.imageinfo['url'],
'urldesc': img.imageinfo['descriptionshorturl'],
@ -35,6 +38,7 @@ for img in site.allimages():
# location of image storage
img_fn = os.path.join(imgdir, img_dict['filename'])
print(img_fn)
# function updates images.json and returns whether the img needs to be downloaded or not
download = update_json(imgsjson_fn, img_dict, img_fn)
@ -43,4 +47,20 @@ for img in site.allimages():
print('DOWNLOADING:', img_fn)
with open(img_fn, 'wb') as img_file:
img.download(destination=img_file)
# resize image
fn, ext = os.path.splitext(img_fn)
if ext.lower() in ['.jpg', '.jpeg', '.gif', '.png']: # only img format
pilimg = Image.open(img_fn)
pilimg_dim = list(pilimg._size)
pilimg_dim_sort = sorted(pilimg_dim) # smallest dimension 1st
img_ratio = pilimg_dim_sort[0] / pilimg_dim_sort[1]
if pilimg_dim == pilimg_dim_sort:
# if height was largest
new_dim = [(thumbnail_size * img_ratio), thumbnail_size]
else:
# if with was largest
new_dim = [thumbnail_size,(thumbnail_size * img_ratio)]
pilimg.thumbnail(new_dim)
pilimg.save(img_fn)
print('\n')

@ -0,0 +1,63 @@
# https://www.mediawiki.org/wiki/API:Main_page
# https://mwclient.readthedocs.io/en/latest/
import mwclient
from mwclient import Site
from secrets import BOTPASSWORD
import json
site = Site("hub.xpub.nl", path="/sandbox/itchwiki/")
site.login("Bot", BOTPASSWORD)
for i in site.allimages():
# Use imageinfo to request/create a thumbnail
# NB: uses i.name as "titles" (the api call can take a list of titles)
# but here it just uses one.
# NB: iiurlwidth specifies a max width for the resulting thumbnail
# check out the API doc for all the options
# https://www.mediawiki.org/wiki/API:Imageinfo
r = site.api("query", prop="imageinfo", titles=i.name, iiprop="url", iiurlwidth="80", formatversion=2)
iinfo = r['query']['pages'][0]['imageinfo'][0]
thumburl = iinfo['thumburl']
fullsizeurl = iinfo['url']
filepageurl = iinfo['descriptionurl']
print ("""
<a href="{0}"><img src="{1}"></a>
""".format(filepageurl, thumburl))
# print (i.name, thumburl, fullsizeurl, filepageurl)
# NOW do an "ASK" api call to get semantic meta data from the same image
# This query is the "code" that you get from the "Semantic Ask" page
# Except you need to remove the {{#ask: and the }} at the end.
ask_query = """[[{0}]]
|?Title
|?Date
|?Creator
|?Format
|?Organization
|?Part
|?Partof
|?Event
|?Topic
|?Language
|format=json
|limit=50
|offset=0
|link=all
|sort=
|order=asc
""".format(i.name)
# print ("Made an ASK query", ask_query)
ask_result = r = site.api("ask", query=ask_query)
# print (json.dumps(ask_result, indent=2))
image_metadata = ask_result['query']['results'][i.name]["printouts"]
print (json.dumps(image_metadata, indent=2))
# Calling the api to make/give a thumbnail of a particular image
# https://hub.xpub.nl/sandbox/itchwiki/api.php?action=query&format=json&prop=imageinfo&iiprop=url&iiurlwidth=320&titles=File:VF250Commitment-18.jpg
# site.api()
# Magic URL to generate and get the URL of a thumbnail of an image
# https://hub.xpub.nl/sandbox/itchwiki/api.php?action=query&format=json&prop=imageinfo&iiprop=url&iiurlwidth=640&titles=File:VF250Commitment-18.jpg

@ -0,0 +1,350 @@
<p>
<h3>1970-02-26 (1/1970/2/26)</h3>
<h2>The Philippine Collegian, Part 1 of 2</h2>
<a href="http://hub.xpub.nl/sandbox/itchwiki/index.php/File:Oil_Imperialism-0.jpg"><img src="http://hub.xpub.nl/sandbox/itchwiki/images/thumb/5/5b/Oil_Imperialism-0.jpg/80px-Oil_Imperialism-0.jpg"></a>
</p>
<p>
<h3>1972-05-20 (1/1972/5/20)</h3>
<h2>Sambayanan, Part 1 of 8</h2>
<a href="http://hub.xpub.nl/sandbox/itchwiki/index.php/File:Sambayanan-01.jpg"><img src="http://hub.xpub.nl/sandbox/itchwiki/images/thumb/b/b9/Sambayanan-01.jpg/80px-Sambayanan-01.jpg"></a>
</p>
<p>
<h3>1972-05-20 (1/1972/5/20)</h3>
<h2>Sambayanan, Part 2 of 8</h2>
<a href="http://hub.xpub.nl/sandbox/itchwiki/index.php/File:Sambayanan-02.jpg"><img src="http://hub.xpub.nl/sandbox/itchwiki/images/thumb/3/3f/Sambayanan-02.jpg/80px-Sambayanan-02.jpg"></a>
</p>
<p>
<h3>1972-05-20 (1/1972/5/20)</h3>
<h2>Sambayanan, Part 3 of 8</h2>
<a href="http://hub.xpub.nl/sandbox/itchwiki/index.php/File:Sambayanan-03.jpg"><img src="http://hub.xpub.nl/sandbox/itchwiki/images/thumb/7/7c/Sambayanan-03.jpg/80px-Sambayanan-03.jpg"></a>
</p>
<p>
<h3>1972-05-20 (1/1972/5/20)</h3>
<h2>Sambayanan, Part 4 of 8</h2>
<a href="http://hub.xpub.nl/sandbox/itchwiki/index.php/File:Sambayanan-04.jpg"><img src="http://hub.xpub.nl/sandbox/itchwiki/images/thumb/5/5c/Sambayanan-04.jpg/80px-Sambayanan-04.jpg"></a>
</p>
<p>
<h3>1972-05-20 (1/1972/5/20)</h3>
<h2>Sambayanan, Part 5 of 8</h2>
<a href="http://hub.xpub.nl/sandbox/itchwiki/index.php/File:Sambayanan-05.jpg"><img src="http://hub.xpub.nl/sandbox/itchwiki/images/thumb/7/77/Sambayanan-05.jpg/80px-Sambayanan-05.jpg"></a>
</p>
<p>
<h3>1972-05-20 (1/1972/5/20)</h3>
<h2>Sambayanan, Part 6 of 8</h2>
<a href="http://hub.xpub.nl/sandbox/itchwiki/index.php/File:Sambayanan-06.jpg"><img src="http://hub.xpub.nl/sandbox/itchwiki/images/thumb/3/35/Sambayanan-06.jpg/80px-Sambayanan-06.jpg"></a>
</p>
<p>
<h3>1972-05-20 (1/1972/5/20)</h3>
<h2>Sambayanan, Part 7 of 8</h2>
<a href="http://hub.xpub.nl/sandbox/itchwiki/index.php/File:Sambayanan-07.jpg"><img src="http://hub.xpub.nl/sandbox/itchwiki/images/thumb/2/28/Sambayanan-07.jpg/80px-Sambayanan-07.jpg"></a>
</p>
<p>
<h3>1972-05-20 (1/1972/5/20)</h3>
<h2>Sambayanan, Part 8 of 8</h2>
<a href="http://hub.xpub.nl/sandbox/itchwiki/index.php/File:Sambayanan-08.jpg"><img src="http://hub.xpub.nl/sandbox/itchwiki/images/thumb/a/ae/Sambayanan-08.jpg/80px-Sambayanan-08.jpg"></a>
</p>
<p>
<h3>1972-09-21 (1/1972/9/21)</h3>
<h2>The Lessons of Martial Law, Part 1 of 4</h2>
<a href="http://hub.xpub.nl/sandbox/itchwiki/index.php/File:VF436_The_lessons_of_martial_law-00.jpg"><img src="http://hub.xpub.nl/sandbox/itchwiki/images/thumb/e/e1/VF436_The_lessons_of_martial_law-00.jpg/80px-VF436_The_lessons_of_martial_law-00.jpg"></a>
</p>
<p>
<h3>1972-09-21 (1/1972/9/21)</h3>
<h2>The Lessons of Martial Law, Part 2 of 4</h2>
<a href="http://hub.xpub.nl/sandbox/itchwiki/index.php/File:VF436_The_lessons_of_martial_law-01.jpg"><img src="http://hub.xpub.nl/sandbox/itchwiki/images/thumb/a/a6/VF436_The_lessons_of_martial_law-01.jpg/80px-VF436_The_lessons_of_martial_law-01.jpg"></a>
</p>
<p>
<h3>1972-09-21 (1/1972/9/21)</h3>
<h2>The Lessons of Martial Law, Part 3 of 4</h2>
<a href="http://hub.xpub.nl/sandbox/itchwiki/index.php/File:VF436_The_lessons_of_martial_law-02.jpg"><img src="http://hub.xpub.nl/sandbox/itchwiki/images/thumb/4/4d/VF436_The_lessons_of_martial_law-02.jpg/80px-VF436_The_lessons_of_martial_law-02.jpg"></a>
</p>
<p>
<h3>1972-09-21 (1/1972/9/21)</h3>
<h2>The Lessons of Martial Law, Part 4 of 4</h2>
<a href="http://hub.xpub.nl/sandbox/itchwiki/index.php/File:VF436_The_lessons_of_martial_law-03.jpg"><img src="http://hub.xpub.nl/sandbox/itchwiki/images/thumb/e/e0/VF436_The_lessons_of_martial_law-03.jpg/80px-VF436_The_lessons_of_martial_law-03.jpg"></a>
</p>
<p>
<h3>1977-01-01 (1/1977/1/1)</h3>
<h2>The Logistics of Repression, Part 1 of 86</h2>
<a href="http://hub.xpub.nl/sandbox/itchwiki/index.php/File:VF481_The_logistics_of_repression-00.jpg"><img src="http://hub.xpub.nl/sandbox/itchwiki/images/thumb/8/8c/VF481_The_logistics_of_repression-00.jpg/80px-VF481_The_logistics_of_repression-00.jpg"></a>
</p>
<p>
<h3>1977-01-01 (1/1977/1/1)</h3>
<h2>The Logistics of Repression, Part 2 of 86</h2>
<a href="http://hub.xpub.nl/sandbox/itchwiki/index.php/File:VF481_The_logistics_of_repression-01.jpg"><img src="http://hub.xpub.nl/sandbox/itchwiki/images/thumb/9/9c/VF481_The_logistics_of_repression-01.jpg/80px-VF481_The_logistics_of_repression-01.jpg"></a>
</p>
<p>
<h3>1977-01-01 (1/1977/1/1)</h3>
<h2>The Logistics of Repression, Part 3 of 86</h2>
<a href="http://hub.xpub.nl/sandbox/itchwiki/index.php/File:VF481_The_logistics_of_repression-02.jpg"><img src="http://hub.xpub.nl/sandbox/itchwiki/images/thumb/a/ac/VF481_The_logistics_of_repression-02.jpg/80px-VF481_The_logistics_of_repression-02.jpg"></a>
</p>
<p>
<h3>1977-01-01 (1/1977/1/1)</h3>
<h2>The Logistics of Repression, Part 4 of 86</h2>
<a href="http://hub.xpub.nl/sandbox/itchwiki/index.php/File:VF481_The_logistics_of_repression-03.jpg"><img src="http://hub.xpub.nl/sandbox/itchwiki/images/thumb/1/1f/VF481_The_logistics_of_repression-03.jpg/80px-VF481_The_logistics_of_repression-03.jpg"></a>
</p>
<p>
<h3>1977-01-01 (1/1977/1/1)</h3>
<h2>The Logistics of Repression, Part 5 of 86</h2>
<a href="http://hub.xpub.nl/sandbox/itchwiki/index.php/File:VF481_The_logistics_of_repression-04.jpg"><img src="http://hub.xpub.nl/sandbox/itchwiki/images/thumb/9/95/VF481_The_logistics_of_repression-04.jpg/80px-VF481_The_logistics_of_repression-04.jpg"></a>
</p>
<p>
<h3>1977-01-01 (1/1977/1/1)</h3>
<h2>The Logistics of Repression, Part 6 of 86</h2>
<a href="http://hub.xpub.nl/sandbox/itchwiki/index.php/File:VF481_The_logistics_of_repression-05.jpg"><img src="http://hub.xpub.nl/sandbox/itchwiki/images/thumb/6/6e/VF481_The_logistics_of_repression-05.jpg/80px-VF481_The_logistics_of_repression-05.jpg"></a>
</p>
<p>
<h3>1977-01-01 (1/1977/1/1)</h3>
<h2>The Logistics of Repression, Part 7 of 86</h2>
<a href="http://hub.xpub.nl/sandbox/itchwiki/index.php/File:VF481_The_logistics_of_repression-06.jpg"><img src="http://hub.xpub.nl/sandbox/itchwiki/images/thumb/d/da/VF481_The_logistics_of_repression-06.jpg/80px-VF481_The_logistics_of_repression-06.jpg"></a>
</p>
<p>
<h3>1977-01-01 (1/1977/1/1)</h3>
<h2>The Logistics of Repression, Part 8 of 86</h2>
<a href="http://hub.xpub.nl/sandbox/itchwiki/index.php/File:VF481_The_logistics_of_repression-07.jpg"><img src="http://hub.xpub.nl/sandbox/itchwiki/images/thumb/f/fb/VF481_The_logistics_of_repression-07.jpg/80px-VF481_The_logistics_of_repression-07.jpg"></a>
</p>
<p>
<h3>1977-01-01 (1/1977/1/1)</h3>
<h2>The Logistics of Repression, Part 9 of 86</h2>
<a href="http://hub.xpub.nl/sandbox/itchwiki/index.php/File:VF481_The_logistics_of_repression-08.jpg"><img src="http://hub.xpub.nl/sandbox/itchwiki/images/thumb/2/21/VF481_The_logistics_of_repression-08.jpg/80px-VF481_The_logistics_of_repression-08.jpg"></a>
</p>
<p>
<h3>1977-01-01 (1/1977/1/1)</h3>
<h2>The Logistics of Repression, Part 10 of 86</h2>
<a href="http://hub.xpub.nl/sandbox/itchwiki/index.php/File:VF481_The_logistics_of_repression-09.jpg"><img src="http://hub.xpub.nl/sandbox/itchwiki/images/thumb/3/3e/VF481_The_logistics_of_repression-09.jpg/80px-VF481_The_logistics_of_repression-09.jpg"></a>
</p>
<p>
<h3>1977-01-01 (1/1977/1/1)</h3>
<h2>The Logistics of Repression, Part 11 of 86</h2>
<a href="http://hub.xpub.nl/sandbox/itchwiki/index.php/File:VF481_The_logistics_of_repression-10.jpg"><img src="http://hub.xpub.nl/sandbox/itchwiki/images/thumb/2/2f/VF481_The_logistics_of_repression-10.jpg/80px-VF481_The_logistics_of_repression-10.jpg"></a>
</p>
<p>
<h3>1977-01-01 (1/1977/1/1)</h3>
<h2>The Logistics of Repression, Part 12 of 86</h2>
<a href="http://hub.xpub.nl/sandbox/itchwiki/index.php/File:VF481_The_logistics_of_repression-11.jpg"><img src="http://hub.xpub.nl/sandbox/itchwiki/images/thumb/4/42/VF481_The_logistics_of_repression-11.jpg/80px-VF481_The_logistics_of_repression-11.jpg"></a>
</p>
<p>
<h3>1977-01-01 (1/1977/1/1)</h3>
<h2>The Logistics of Repression, Part 13 of 86</h2>
<a href="http://hub.xpub.nl/sandbox/itchwiki/index.php/File:VF481_The_logistics_of_repression-12.jpg"><img src="http://hub.xpub.nl/sandbox/itchwiki/images/thumb/0/04/VF481_The_logistics_of_repression-12.jpg/80px-VF481_The_logistics_of_repression-12.jpg"></a>
</p>
<p>
<h3>1977-01-01 (1/1977/1/1)</h3>
<h2>The Logistics of Repression, Part 14 of 86</h2>
<a href="http://hub.xpub.nl/sandbox/itchwiki/index.php/File:VF481_The_logistics_of_repression-13.jpg"><img src="http://hub.xpub.nl/sandbox/itchwiki/images/thumb/8/8e/VF481_The_logistics_of_repression-13.jpg/80px-VF481_The_logistics_of_repression-13.jpg"></a>
</p>
<p>
<h3>1977-01-01 (1/1977/1/1)</h3>
<h2>The Logistics of Repression, Part 15 of 86</h2>
<a href="http://hub.xpub.nl/sandbox/itchwiki/index.php/File:VF481_The_logistics_of_repression-14.jpg"><img src="http://hub.xpub.nl/sandbox/itchwiki/images/thumb/6/6f/VF481_The_logistics_of_repression-14.jpg/80px-VF481_The_logistics_of_repression-14.jpg"></a>
</p>
<p>
<h3>1977-01-01 (1/1977/1/1)</h3>
<h2>The Logistics of Repression, Part 16 of 86</h2>
<a href="http://hub.xpub.nl/sandbox/itchwiki/index.php/File:VF481_The_logistics_of_repression-15.jpg"><img src="http://hub.xpub.nl/sandbox/itchwiki/images/thumb/f/f6/VF481_The_logistics_of_repression-15.jpg/80px-VF481_The_logistics_of_repression-15.jpg"></a>
</p>
<p>
<h3>1977-01-01 (1/1977/1/1)</h3>
<h2>The Logistics of Repression, Part 17 of 86</h2>
<a href="http://hub.xpub.nl/sandbox/itchwiki/index.php/File:VF481_The_logistics_of_repression-16.jpg"><img src="http://hub.xpub.nl/sandbox/itchwiki/images/thumb/1/17/VF481_The_logistics_of_repression-16.jpg/80px-VF481_The_logistics_of_repression-16.jpg"></a>
</p>
<p>
<h3>1977-01-01 (1/1977/1/1)</h3>
<h2>The Logistics of Repression, Part 18 of 86</h2>
<a href="http://hub.xpub.nl/sandbox/itchwiki/index.php/File:VF481_The_logistics_of_repression-17.jpg"><img src="http://hub.xpub.nl/sandbox/itchwiki/images/thumb/f/f0/VF481_The_logistics_of_repression-17.jpg/80px-VF481_The_logistics_of_repression-17.jpg"></a>
</p>
<p>
<h3>1977-01-01 (1/1977/1/1)</h3>
<h2>The Logistics of Repression, Part 19 of 86</h2>
<a href="http://hub.xpub.nl/sandbox/itchwiki/index.php/File:VF481_The_logistics_of_repression-18.jpg"><img src="http://hub.xpub.nl/sandbox/itchwiki/images/thumb/3/3d/VF481_The_logistics_of_repression-18.jpg/80px-VF481_The_logistics_of_repression-18.jpg"></a>
</p>
<p>
<h3>1977-01-01 (1/1977/1/1)</h3>
<h2>The Logistics of Repression, Part 20 of 86</h2>
<a href="http://hub.xpub.nl/sandbox/itchwiki/index.php/File:VF481_The_logistics_of_repression-19.jpg"><img src="http://hub.xpub.nl/sandbox/itchwiki/images/thumb/6/69/VF481_The_logistics_of_repression-19.jpg/80px-VF481_The_logistics_of_repression-19.jpg"></a>
</p>
<p>
<h3>1977-01-01 (1/1977/1/1)</h3>
<h2>The Logistics of Repression, Part 21 of 86</h2>
<a href="http://hub.xpub.nl/sandbox/itchwiki/index.php/File:VF481_The_logistics_of_repression-20.jpg"><img src="http://hub.xpub.nl/sandbox/itchwiki/images/thumb/f/fb/VF481_The_logistics_of_repression-20.jpg/80px-VF481_The_logistics_of_repression-20.jpg"></a>
</p>
<p>
<h3>1977-01-01 (1/1977/1/1)</h3>
<h2>The Logistics of Repression, Part 22 of 86</h2>
<a href="http://hub.xpub.nl/sandbox/itchwiki/index.php/File:VF481_The_logistics_of_repression-21.jpg"><img src="http://hub.xpub.nl/sandbox/itchwiki/images/thumb/9/98/VF481_The_logistics_of_repression-21.jpg/80px-VF481_The_logistics_of_repression-21.jpg"></a>
</p>
<p>
<h3>1977-01-01 (1/1977/1/1)</h3>
<h2>The Logistics of Repression, Part 23 of 86</h2>
<a href="http://hub.xpub.nl/sandbox/itchwiki/index.php/File:VF481_The_logistics_of_repression-22.jpg"><img src="http://hub.xpub.nl/sandbox/itchwiki/images/thumb/a/aa/VF481_The_logistics_of_repression-22.jpg/80px-VF481_The_logistics_of_repression-22.jpg"></a>
</p>
<p>
<h3>1977-01-01 (1/1977/1/1)</h3>
<h2>The Logistics of Repression, Part 24 of 86</h2>
<a href="http://hub.xpub.nl/sandbox/itchwiki/index.php/File:VF481_The_logistics_of_repression-23.jpg"><img src="http://hub.xpub.nl/sandbox/itchwiki/images/thumb/a/a6/VF481_The_logistics_of_repression-23.jpg/80px-VF481_The_logistics_of_repression-23.jpg"></a>
</p>
<p>
<h3>1977-01-01 (1/1977/1/1)</h3>
<h2>The Logistics of Repression, Part 25 of 86</h2>
<a href="http://hub.xpub.nl/sandbox/itchwiki/index.php/File:VF481_The_logistics_of_repression-24.jpg"><img src="http://hub.xpub.nl/sandbox/itchwiki/images/thumb/e/ed/VF481_The_logistics_of_repression-24.jpg/80px-VF481_The_logistics_of_repression-24.jpg"></a>
</p>
<p>
<h3>1977-01-01 (1/1977/1/1)</h3>
<h2>The Logistics of Repression, Part 26 of 86</h2>
<a href="http://hub.xpub.nl/sandbox/itchwiki/index.php/File:VF481_The_logistics_of_repression-25.jpg"><img src="http://hub.xpub.nl/sandbox/itchwiki/images/thumb/3/3e/VF481_The_logistics_of_repression-25.jpg/80px-VF481_The_logistics_of_repression-25.jpg"></a>
</p>
<p>
<h3>1977-01-01 (1/1977/1/1)</h3>
<h2>The Logistics of Repression, Part 27 of 86</h2>
<a href="http://hub.xpub.nl/sandbox/itchwiki/index.php/File:VF481_The_logistics_of_repression-26.jpg"><img src="http://hub.xpub.nl/sandbox/itchwiki/images/thumb/c/c7/VF481_The_logistics_of_repression-26.jpg/80px-VF481_The_logistics_of_repression-26.jpg"></a>
</p>
<p>
<h3>1977-01-01 (1/1977/1/1)</h3>
<h2>The Logistics of Repression, Part 28 of 86</h2>
<a href="http://hub.xpub.nl/sandbox/itchwiki/index.php/File:VF481_The_logistics_of_repression-27.jpg"><img src="http://hub.xpub.nl/sandbox/itchwiki/images/thumb/c/c3/VF481_The_logistics_of_repression-27.jpg/80px-VF481_The_logistics_of_repression-27.jpg"></a>
</p>
<p>
<h3>1977-01-01 (1/1977/1/1)</h3>
<h2>The Logistics of Repression, Part 29 of 86</h2>
<a href="http://hub.xpub.nl/sandbox/itchwiki/index.php/File:VF481_The_logistics_of_repression-28.jpg"><img src="http://hub.xpub.nl/sandbox/itchwiki/images/thumb/4/46/VF481_The_logistics_of_repression-28.jpg/80px-VF481_The_logistics_of_repression-28.jpg"></a>
</p>
<p>
<h3>1977-01-01 (1/1977/1/1)</h3>
<h2>The Logistics of Repression, Part 30 of 86</h2>
<a href="http://hub.xpub.nl/sandbox/itchwiki/index.php/File:VF481_The_logistics_of_repression-29.jpg"><img src="http://hub.xpub.nl/sandbox/itchwiki/images/thumb/e/e3/VF481_The_logistics_of_repression-29.jpg/80px-VF481_The_logistics_of_repression-29.jpg"></a>
</p>
<p>
<h3>1977-01-01 (1/1977/1/1)</h3>
<h2>The Logistics of Repression, Part 31 of 86</h2>
<a href="http://hub.xpub.nl/sandbox/itchwiki/index.php/File:VF481_The_logistics_of_repression-30.jpg"><img src="http://hub.xpub.nl/sandbox/itchwiki/images/thumb/3/32/VF481_The_logistics_of_repression-30.jpg/80px-VF481_The_logistics_of_repression-30.jpg"></a>
</p>
<p>
<h3>1977-01-01 (1/1977/1/1)</h3>
<h2>The Logistics of Repression, Part 32 of 86</h2>
<a href="http://hub.xpub.nl/sandbox/itchwiki/index.php/File:VF481_The_logistics_of_repression-31.jpg"><img src="http://hub.xpub.nl/sandbox/itchwiki/images/thumb/f/fb/VF481_The_logistics_of_repression-31.jpg/80px-VF481_The_logistics_of_repression-31.jpg"></a>
</p>
<p>
<h3>1977-01-01 (1/1977/1/1)</h3>
<h2>The Logistics of Repression, Part 33 of 86</h2>
<a href="http://hub.xpub.nl/sandbox/itchwiki/index.php/File:VF481_The_logistics_of_repression-32.jpg"><img src="http://hub.xpub.nl/sandbox/itchwiki/images/thumb/2/2c/VF481_The_logistics_of_repression-32.jpg/80px-VF481_The_logistics_of_repression-32.jpg"></a>
</p>
<p>
<h3>1977-01-01 (1/1977/1/1)</h3>
<h2>The Logistics of Repression, Part 34 of 86</h2>
<a href="http://hub.xpub.nl/sandbox/itchwiki/index.php/File:VF481_The_logistics_of_repression-33.jpg"><img src="http://hub.xpub.nl/sandbox/itchwiki/images/thumb/5/56/VF481_The_logistics_of_repression-33.jpg/80px-VF481_The_logistics_of_repression-33.jpg"></a>
</p>
<p>
<h3>1977-01-01 (1/1977/1/1)</h3>
<h2>The Logistics of Repression, Part 35 of 86</h2>
<a href="http://hub.xpub.nl/sandbox/itchwiki/index.php/File:VF481_The_logistics_of_repression-34.jpg"><img src="http://hub.xpub.nl/sandbox/itchwiki/images/thumb/2/2b/VF481_The_logistics_of_repression-34.jpg/80px-VF481_The_logistics_of_repression-34.jpg"></a>
</p>
<p>
<h3>1977-01-01 (1/1977/1/1)</h3>
<h2>The Logistics of Repression, Part 36 of 86</h2>
<a href="http://hub.xpub.nl/sandbox/itchwiki/index.php/File:VF481_The_logistics_of_repression-35.jpg"><img src="http://hub.xpub.nl/sandbox/itchwiki/images/thumb/8/88/VF481_The_logistics_of_repression-35.jpg/80px-VF481_The_logistics_of_repression-35.jpg"></a>
</p>
<p>
<h3>1977-01-01 (1/1977/1/1)</h3>
<h2>The Logistics of Repression, Part 37 of 86</h2>
<a href="http://hub.xpub.nl/sandbox/itchwiki/index.php/File:VF481_The_logistics_of_repression-36.jpg"><img src="http://hub.xpub.nl/sandbox/itchwiki/images/thumb/2/24/VF481_The_logistics_of_repression-36.jpg/80px-VF481_The_logistics_of_repression-36.jpg"></a>
</p>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

@ -0,0 +1,93 @@
"""
Let's say you're interested in documents related to the topic "US Foreign Policy"
You can start with an "ask" (first just from the "Semantic Ask" interface) and use the condition:
[[Topic::US Foreign Policy]]
Press "Find results" and you get a lot of pages as result.
Then you would add the info you're interested in the "printout selection" box, and also make sure to sort the results with the part number to make sure document pages are in order.
Finally, click on the "Code" view and copy paste the code -- but
be careful NOT to copy the "{{#ask:" and the "}}" at the end.
This you can then paste into the API Sandbox to test it if you want...
OR just paste it into the code below as the "ask_query" variable.
https://hub.xpub.nl/sandbox/itchwiki/index.php/Special:ApiSandbox#action=ask
"""
# https://www.mediawiki.org/wiki/API:Main_page
# https://mwclient.readthedocs.io/en/latest/
import datetime
import json
import mwclient
from mwclient import Site
from secrets import BOTPASSWORD
site = Site("hub.xpub.nl", path="/sandbox/itchwiki/")
site.login("Bot", BOTPASSWORD)
ask_query = """
[[Topic::US Foreign Policy]]
|?Date
|?Part
|?Partof
|?Title
|format=broadtable
|limit=50
|offset=0
|link=all
|sort=Date,Title,Part
|order=asc,asc,asc
|headers=show
|searchlabel=... further results
|class=sortable wikitable smwtable
"""
# Tested in the APISandbox
# See: https://hub.xpub.nl/sandbox/itchwiki/index.php/Special:ApiSandbox#action=ask&format=json&query=%5B%5BTopic%3A%3AUS%20Foreign%20Policy%5D%5D%20%20%7C%3FPart%20%20%7C%3FPartof%20%20%7C%3FTitle%20%20%7C%3FDate%20%20%7Cformat%3Dbroadtable%20%20%7Climit%3D50%20%20%7Coffset%3D0%20%20%7Clink%3Dall%20%20%7Csort%3D%20%20%7Corder%3Dasc%20%20%7Cheaders%3Dshow%20%20%7Csearchlabel%3D...%20further%20results%20%20%7Cclass%3Dsortable%20wikitable%20smwtable&formatversion=2
# copy/paste the URL above and press "Make request" to see the results
response = site.api("ask", query=ask_query, format="json")
results = response['query']['results']
# Results is a dictionary where the keys are wiki names like "File:KSP Kilusan Vol 2 Nos 2 and 3-26.jpg"
# results[wikiname] is then another dictionary with all the results specific to that item
for wikiname in results:
item = results[wikiname]
# FOR DEBUGGING uncomment the print
# print (wikiname, json.dumps(item, indent=2))
date = datetime.date.fromtimestamp(int(item["printouts"]["Date"][0]['timestamp']))
date_raw = item["printouts"]["Date"][0]['raw']
title = item["printouts"]["Title"][0]["fulltext"]
part = int(item["printouts"]["Part"][0])
partof = int(item["printouts"]["Partof"][0])
r = site.api("query", prop="imageinfo", \
titles=wikiname, \
iiprop="url", \
iiurlwidth="80", \
formatversion=2)
iinfo = r['query']['pages'][0]['imageinfo'][0]
thumburl = iinfo['thumburl']
fullsizeurl = iinfo['url']
filepageurl = iinfo['descriptionurl']
# nb: the code lines *need* to be indented
# to stay INSIDE the loop
# the output text between the """ can break this rule
print ("""
<p>
<h3>{} ({})</h3>
<h2>{}, Part {} of {}</h2>
<a href="{}"><img src="{}"></a>
</p>
""".format(date, date_raw, title, part, partof, filepageurl, thumburl))

Binary file not shown.

After

Width:  |  Height:  |  Size: 157 KiB

@ -3,12 +3,18 @@ import subprocess
from datetime import datetime
def remove_nonwords(imgname):
filename, ext = os.path.splitext(imgname) # split into filename & extension
filename = re.sub(r'\W', '', filename) # remove nonwoders from filename
return f'{filename}{ext}' # join filename & ext'
def pandoc(pwd, content, format_in, format_out):
# print('HTML content file:', wiki_content_f.name)
# tmp files
mw_tmp_fn = os.path.join(pwd, '.mediawiki_content')
html_tmp_fn = os.path.join(pwd, '.html_content') # TODO: join with pw
html_tmp_fn = os.path.join(pwd, '.html_content')
for fn in [mw_tmp_fn, html_tmp_fn ]:
if os.path.isfile(fn) is False:
os.mknod(fn) # create them if not in dir
@ -37,23 +43,24 @@ def unpack_response(response):
printouts = response['printouts']
page = response['fulltext']
fullurl = response['fullurl']
d['page'] = page
for prop in printouts:
p_item = response['printouts'][prop]
for prop_val in p_item:
if isinstance(prop_val, dict) is False:
d[prop] = prop_val
else:
# if len(prop_val) > 0:
props = list(prop_val.keys())
if 'fulltext' in props:
val = prop_val.get('fulltext')
elif 'timestamp' in props:
val = datetime.fromtimestamp(int(prop_val.get('timestamp')))
else:
val = list(prop_val.values())[0]
d[prop] = val
return page, d, fullurl
# convert OrderDict to Dict json.dumps json.loads
printouts_dumps = json.dumps(printouts)
printouts_loads = json.loads(printouts_dumps)
printouts_loads['page'] = page
simplified_printouts = {}
for k, v in printouts_loads.items():
if k == 'Date':
simplified_printouts[k] = datetime.fromtimestamp(
int(v[0]['timestamp']))
# elif k == 'Title':
# simplified_printouts[k] = v[0]['fulltext']
elif k in ['Part', 'Partof', 'page']: # only 1 value for each
simplified_printouts[k] = v
else: # Possibly more than 1 value for the rest of properties
simplified_printouts[k] = []
for listitem in v:
simplified_printouts[k].append(listitem['fulltext'])
return page, simplified_printouts, fullurl
def update_json(imgsjson_fn, img_dict, img_fn):
@ -95,6 +102,7 @@ def clean_dir(dirfullpath):
os.remove(f)
def print_colormsg(msg, level):
color_cmd = ''
if level == 'fail':
color_cmd = Colors.FAIL
elif level == 'warning':

@ -0,0 +1,28 @@
import os, argparse, sys, re, json
from mwclient import (Site,
errors)
# API CALL
# https://hub.xpub.nl/sandbox/itchwiki/api.php?action=smwbrowse&browse=pvalue&params={ "limit": 1500, "offset": 0, "property" : "Title", "search": "" }&format=json
# generated orgs.json
# login
site = Site(host='hub.xpub.nl/sandbox', path='/itchwiki/')
wd =os.path.dirname(os.path.abspath(__file__)) # parent working directory
with open(os.path.join(wd, 'login.txt'), 'r') as login: # read login user & pwd
loginlines = login.read()
user, pwd = loginlines.split('\n')
site.login(username=user, password=pwd) # login to wiki
with open('titles.json', 'r') as f:
titles = json.load(f)
for pagename in titles['query']:
if pagename != 'A Primer on the Tribal Filipinos in Agusan and Surigao':
# print(pagename)
page = site.pages[pagename]
print(page)
# text = page.text()
page.save('{{Publication}}\n[[Category:Title]]')

@ -2,7 +2,7 @@ import os, json, sys, urllib
from mwclient import Site
from pprint import pprint
from jinja2 import Template
from functions import pandoc, page_props, unpack_response, clean_dir
from functions import pandoc, unpack_response, clean_dir, remove_nonwords
from functions import Colors
import argparse
@ -15,7 +15,7 @@ p.add_argument("--conditions", "-c", metavar='',
default='[[File:+]][[Title::+]][[Part::+]][[Date::+]]',
help='The query conditions')
p.add_argument("--printouts", "-p", metavar='',
default='?Title|?Date|?Part|?Partof|?Creator',
default='?Title|?Date|?Part|?Partof|?Creator|?Organization|?Format|?Event|?Topic|?Language',
help='Selection of properties to printout')
p.add_argument("--sort", "-s", metavar='',
default='Date,Title,Part',
@ -23,6 +23,9 @@ p.add_argument("--sort", "-s", metavar='',
p.add_argument("--order", "-o", metavar='',
default='asc,asc,asc',
help='Order of sorting conditions. Should same amount as the --sort properties')
p.add_argument('--limit', '-l', help='(optional) Limit the number of returned '
'items')
# TODO: GET limit to work.Perhaps with a site.raw_api method
p.add_argument('--dry', '-d', action='store_true',
help='dry-run: will only show the query but not run it')
@ -33,8 +36,10 @@ if len(args.sort.split(',')) != len(args.order.split(',')):
Colors.WARNING, '--sort and --order do not have the same amount of elements', Colors.ENDC)
print('Script exiting now')
sys.exit()
query = f'{args.conditions}|{args.printouts}|sort={args.sort}|order={args.order}'
if args.limit:
limit_str = f'|limit={args.limit}'
query += limit_str
print('query:', Colors.GREEN, query, Colors.ENDC)
query_unquoted = urllib.parse.quote(query)
query_url = f'https://{args.host}{args.path}api.php?action=ask&query={query_unquoted}&format=json'
@ -75,7 +80,7 @@ with open(os.path.join(wd, 'templates/document_part.html')) as document_html:
all_document_parts = '' # to append all content
documentslist = []
for answer in site.ask(query):
publication_title = ''
# publication_title = ''
# print(answer, answer.keys())
page, printout_dict, fullurl = unpack_response(answer)
print(page)
@ -85,11 +90,17 @@ for answer in site.ask(query):
print(Colors.WARNING, f"{printout_dict['page']} is not is missing from the local downloaded images")
print(Colors.GREEN, 'run python3 download_imgs.py to fix the issue', Colors.ENDC)
sys.exit()
page = site.pages[[printout_dict['page']]] # request that page from wiki
pagetext = page.text()
pagetext_html = pandoc(pwd=wd, content=pagetext, format_in='mediawiki', format_out='html')
img_local = os.path.join(imgdir, img_info.get('filename'))
# Todo: Create list of all images from document
# TODO: join document_part + document
# TODO: look into the template structure of images : columns and rows
# RENDER document part
document_part_html = document_part_template.render(
printout_dict=printout_dict,
@ -101,16 +112,18 @@ for answer in site.ask(query):
if printout_dict['Part'] == printout_dict['Partof']:
# RENDER DOCUMENT
# by passing all_document_parts html to document_template content
document_html = document_template.render(title=printout_dict.get('Title'),
date=printout_dict.get('Date'),
content=all_document_parts) # render document template
htmlpage_fn = "{}.html".format(printout_dict.get('Title').replace(" ", ""))
document_html = document_template.render(
title=printout_dict.get('Title'),
date=printout_dict.get('Date'),
content=all_document_parts) # render document template
htmlpage_fn = "{}.html".format(
remove_nonwords(printout_dict.get('Title')[0])
)
with open(os.path.join(static_html, htmlpage_fn), 'w') as htmlfile:
htmlfile.write(document_html)
all_document_parts = '' # Reset all_document_parts
# add info to documentslist for index creation
# TODO: possibly needs to be a SortedDict
documentslist.append({'file': htmlpage_fn,
'title': printout_dict.get('Title'),
'date': printout_dict.get('Date'),

@ -0,0 +1,15 @@
import os
from jinja2 import Template
wd = os.path.dirname(os.path.abspath(__file__)) # working directory
# read template files
with open(os.path.join(wd, '../templates/scatch.html')) as document_html:
template = Template(document_html.read())
imgs_list = ['images/01.jpg', 'images/02.jpg', 'images/03.jpg']
template_render = template.render(title=':) Hello Sandra',
imgs=imgs_list
)
print(template_render)

@ -0,0 +1,137 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="style.css" />
<title>Liberation: Vol. 14 No. 4</title>
</head>
<body>
<h1>Liberation: Vol. 14 No. 4 &#8629;</h1>
<h2>1986.6.1</h2>
<!-- Header -->
<div class="header" id="myHeader">
<button class="btn active" onclick="four()">Overview</button>
<button class="btn" onclick="one()">100%</button>
</div>
<!-- metadata dropdown -->
<div id="rightnav" class="rightnav">
<a href="index.html" id="title">Title</a>
<a href="#" id="view">View</a>
</div>
<div id="leftnav" class="leftnav">
<a href="#" id="date">Date</a>
<a href="https://www.google.com/" id="creator">Creator</a>
</div>
<div class="metadata_Creator"><a href>National Democratic Front (NDF)</a>
</div>
<button class="orgbtn" onclick="myFunction()">Organizations</button>
<div class="square"></div>
<div id="myDIV">
<ul><a href="index.html">New People's Army (NPA)</a></ul>, National Democratic Front (NDF), Armed Forces of the Philippines (AFP), International Monetary Fund (IMF), Katipunan ng mga Gurong Makabayan (KAGUMA), Philippine Conference for Human Rights (PCHR), World Bank (WB), Kilusang Mayo Uno - May First Movement (KMU), Kabataang Makabayan - Patriotic Youth (KM), National Press Club (NPC), Ministry of National Defense (MND), National Intelligence Security Authority (NISA), Federation of Free Farmers (FFF), Integrated National Police (INP), Military Security Unit (MSU), Communist Party of the Philippines (CPP), Civilian Home Defense Force (CHDF), Communist Party of the Philppines & New Peoples Army (CPP-NPA), Kilusan ng Magbubukid ng Pilipinas (KMP), Trade Union Congress of the Philippines (TUCP), Military Intelligence Service (MIS), Movement of Concerned Citizens for Civil Liberties (MCCCL), Executive Committee of the Central Committee (of the CPP) (EC-CC), National Economic Protectionism Association (NEPA), Pambansang Lakas ng Kilusang Mamamalakaya ng Pilipinas (PAMALAKAYA-Pilipinas), Reform the AFP Movement (RAM), Presidential Security Command (PSC), Metrocom Intelligence and Security Group (MISG), Civilian Armed Geographical Unit (CAFGU), Katipunan Dagiti Mannalon ti Isabela (KAMI-KMP)
</div>
<div class="row">
<div class="column">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/LiberationVol14No401.jpg" style="width:100%">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/LiberationVol14No405.jpg" style="width:100%">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/LiberationVol14No409.jpg" style="width:100%">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/LiberationVol14No413.jpg" style="width:100%">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/LiberationVol14No418.jpg" style="width:100%">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/LiberationVol14No422.jpg" style="width:100%">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/LiberationVol14No426.jpg" style="width:100%">
</div>
<div class="column">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/LiberationVol14No402.jpg" style="width:100%">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/LiberationVol14No406.jpg" style="width:100%">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/LiberationVol14No410.jpg" style="width:100%">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/LiberationVol14No414.jpg" style="width:100%">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/LiberationVol14No419.jpg" style="width:100%">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/LiberationVol14No423.jpg" style="width:100%">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/LiberationVol14No427.jpg" style="width:100%">
</div>
<div class="column">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/LiberationVol14No403.jpg" style="width:100%">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/LiberationVol14No407.jpg" style="width:100%">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/LiberationVol14No411.jpg" style="width:100%">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/LiberationVol14No415.jpg" style="width:100%">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/LiberationVol14No420.jpg" style="width:100%">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/LiberationVol14No424.jpg" style="width:100%">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/LiberationVol14No428.jpg" style="width:100%">
</div>
<div class="column">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/LiberationVol14No404.jpg" style="width:100%">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/LiberationVol14No408.jpg" style="width:100%">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/LiberationVol14No412.jpg" style="width:100%">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/LiberationVol14No416.jpg" style="width:100%">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/LiberationVol14No421.jpg" style="width:100%">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/LiberationVol14No425.jpg" style="width:100%">
</div>
</div>
<script>
// Get the elements with class="column"
var elements = document.getElementsByClassName("column");
// Declare a loop variable
var i;
// Four images side by side
function four() {
for (i = 0; i < elements.length; i++) {
elements[i].style.msFlex = "25%"; // IE10
elements[i].style.flex = "25%";
}
}
// Full-width images
function one() {
for (i = 0; i < elements.length; i++) {
elements[i].style.msFlex = "80%"; // IE10
elements[i].style.flex = "80%";
}
}
// // Two images side by side
// function two() {
// for (i = 0; i < elements.length; i++) {
// elements[i].style.msFlex = "50%"; // IE10
// elements[i].style.flex = "50%";
// }
// }
// Add active class to the current button (highlight it)
var header = document.getElementById("myHeader");
var btns = header.getElementsByClassName("btn");
for (var i = 0; i < btns.length; i++) {
btns[i].addEventListener("click", function() {
var current = document.getElementsByClassName("active");
current[0].className = current[0].className.replace(" active", "");
this.className += " active";
});
}
// toggle text
function myFunction() {
var x = document.getElementById("myDIV");
if (x.style.display === "block") {
x.style.display = "none";
} else {
x.style.display = "block";
}
}
</script>
</body>
</html>

@ -0,0 +1,122 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="style.css" />
<title>Nineteen Eighty Sick: Year of the Lupus</title>
</head>
<body>
<h1>Nineteen Eighty Sick: Year of the Lupus &#8629;</h1>
<h2>1986.1.1</h2>
<!-- Header -->
<div class="header" id="myHeader">
<button class="btn active" onclick="four()">Overview</button>
<button class="btn" onclick="one()">100%</button>
</div>
<!-- metadata dropdown -->
<div id="rightnav" class="rightnav">
<a href="index.html" id="title">Title</a>
<a href="#" id="view">View</a>
</div>
<div id="leftnav" class="leftnav">
<a href="#" id="date">Date</a>
<a href="https://www.google.com/" id="creator">Creator</a>
</div>
<div class="metadata_Creator"><a href>Manuel Pamaran, Paki A. Lamero</a>
</div>
<button class="orgbtn" onclick="myFunction()">Organizations</button>
<div class="square"></div>
<div id="myDIV">
<ul><a href="index.html">Kabataang Makabayan - Patriotic Youth (KM)</a></ul>
<ul><a href="index.html">Civilian Home Defense Force (CHDF)</a></ul>
</div>
<div class="row">
<div class="column">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/NineteenEightySickYearofLupus01.jpg" style="width:100%">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/NineteenEightySickYearofLupus05.jpg" style="width:100%">
</div>
<div class="column">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/NineteenEightySickYearofLupus02.jpg" style="width:100%">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/NineteenEightySickYearofLupus06.jpg" style="width:100%">
</div>
<div class="column">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/NineteenEightySickYearofLupus03.jpg" style="width:100%">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/NineteenEightySickYearofLupus07.jpg" style="width:100%">
</div>
<div class="column">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/NineteenEightySickYearofLupus04.jpg" style="width:100%">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/NineteenEightySickYearofLupus08.jpg" style="width:100%">
</div>
</div>
<script>
// Get the elements with class="column"
var elements = document.getElementsByClassName("column");
// Declare a loop variable
var i;
// Four images side by side
function four() {
for (i = 0; i < elements.length; i++) {
elements[i].style.msFlex = "25%"; // IE10
elements[i].style.flex = "25%";
}
}
// Full-width images
function one() {
for (i = 0; i < elements.length; i++) {
elements[i].style.msFlex = "80%"; // IE10
elements[i].style.flex = "80%";
}
}
// // Two images side by side
// function two() {
// for (i = 0; i < elements.length; i++) {
// elements[i].style.msFlex = "50%"; // IE10
// elements[i].style.flex = "50%";
// }
// }
// Add active class to the current button (highlight it)
var header = document.getElementById("myHeader");
var btns = header.getElementsByClassName("btn");
for (var i = 0; i < btns.length; i++) {
btns[i].addEventListener("click", function() {
var current = document.getElementsByClassName("active");
current[0].className = current[0].className.replace(" active", "");
this.className += " active";
});
}
// toggle text
function myFunction() {
var x = document.getElementById("myDIV");
if (x.style.display === "block") {
x.style.display = "none";
} else {
x.style.display = "block";
}
}
</script>
</body>
</html>

@ -0,0 +1,110 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="style.css" />
<title>Free all political prisoners: our solidarity will set them free</title>
</head>
<body>
<h1>Free all political prisoners: our solidarity will set them free &#8629;</h1>
<h2>1984.12.4</h2>
<!-- Header -->
<div class="header" id="myHeader">
<button class="btn active" onclick="four()">Overview</button>
<button class="btn" onclick="one()">100%</button>
</div>
<!-- metadata dropdown -->
<div id="rightnav" class="rightnav">
<a href="index.html" id="title">Title</a>
<a href="#" id="view">View</a>
</div>
<div id="leftnav" class="leftnav">
<a href="#" id="date">Date</a>
<a href="https://www.google.com/" id="creator">Creator</a>
</div>
<button class="orgbtn" onclick="myFunction()">Organizations</button>
<div class="square"></div>
<div id="myDIV">
<ul><a href="index.html">Task Force Detainees of the Philippines (TFDP)</a></ul>, Nationalist Alliance for Justice, Freedom and Democracy (NAJFD), Kapisanan para sa Pagpapalaya at Amnestiya ng mga Detenido sa Pilipinas - Association for the Release and Amnesty of Detainees in the Philippines (KAPATID)
</div>
<div class="row">
<div class="column">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/VF269Freeallpoliticalprisoners01.jpg" style="width:100%">
</div>
<div class="column">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/VF269Freeallpoliticalprisoners02.jpg" style="width:100%">
</div>
<div class="column">
</div>
<div class="column">
</div>
</div>
<script>
// Get the elements with class="column"
var elements = document.getElementsByClassName("column");
// Declare a loop variable
var i;
// Four images side by side
function four() {
for (i = 0; i < elements.length; i++) {
elements[i].style.msFlex = "25%"; // IE10
elements[i].style.flex = "25%";
}
}
// Full-width images
function one() {
for (i = 0; i < elements.length; i++) {
elements[i].style.msFlex = "80%"; // IE10
elements[i].style.flex = "80%";
}
}
// // Two images side by side
// function two() {
// for (i = 0; i < elements.length; i++) {
// elements[i].style.msFlex = "50%"; // IE10
// elements[i].style.flex = "50%";
// }
// }
// Add active class to the current button (highlight it)
var header = document.getElementById("myHeader");
var btns = header.getElementsByClassName("btn");
for (var i = 0; i < btns.length; i++) {
btns[i].addEventListener("click", function() {
var current = document.getElementsByClassName("active");
current[0].className = current[0].className.replace(" active", "");
this.className += " active";
});
}
// toggle text
function myFunction() {
var x = document.getElementById("myDIV");
if (x.style.display === "block") {
x.style.display = "none";
} else {
x.style.display = "block";
}
}
</script>
</body>
</html>

@ -0,0 +1,113 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="style.css" />
<title>Hamok: Isulong Ang Pambansang Demokratikong Rebolusyon</title>
</head>
<body>
<h1>Hamok: Isulong Ang Pambansang Demokratikong Rebolusyon &#8629;</h1>
<h2>1977.6.12</h2>
<!-- Header -->
<div class="header" id="myHeader">
<button class="btn active" onclick="four()">Overview</button>
<button class="btn" onclick="one()">100%</button>
</div>
<!-- metadata dropdown -->
<div id="rightnav" class="rightnav">
<a href="index.html" id="title">Title</a>
<a href="#" id="view">View</a>
</div>
<div id="leftnav" class="leftnav">
<a href="#" id="date">Date</a>
<a href="https://www.google.com/" id="creator">Creator</a>
</div>
<button class="orgbtn" onclick="myFunction()">Organizations</button>
<div class="square"></div>
<div id="myDIV">
<ul><a href="index.html">All Organizations</a></ul>
</div>
<div class="row">
<div class="column">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/VF383Hamok00.jpg" style="width:100%">
</div>
<div class="column">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/VF383Hamok01.jpg" style="width:100%">
</div>
<div class="column">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/VF383Hamok02.jpg" style="width:100%">
</div>
<div class="column">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/VF383Hamok03.jpg" style="width:100%">
</div>
</div>
<script>
// Get the elements with class="column"
var elements = document.getElementsByClassName("column");
// Declare a loop variable
var i;
// Four images side by side
function four() {
for (i = 0; i < elements.length; i++) {
elements[i].style.msFlex = "25%"; // IE10
elements[i].style.flex = "25%";
}
}
// Full-width images
function one() {
for (i = 0; i < elements.length; i++) {
elements[i].style.msFlex = "80%"; // IE10
elements[i].style.flex = "80%";
}
}
// // Two images side by side
// function two() {
// for (i = 0; i < elements.length; i++) {
// elements[i].style.msFlex = "50%"; // IE10
// elements[i].style.flex = "50%";
// }
// }
// Add active class to the current button (highlight it)
var header = document.getElementById("myHeader");
var btns = header.getElementsByClassName("btn");
for (var i = 0; i < btns.length; i++) {
btns[i].addEventListener("click", function() {
var current = document.getElementsByClassName("active");
current[0].className = current[0].className.replace(" active", "");
this.className += " active";
});
}
// toggle text
function myFunction() {
var x = document.getElementById("myDIV");
if (x.style.display === "block") {
x.style.display = "none";
} else {
x.style.display = "block";
}
}
</script>
</body>
</html>

@ -0,0 +1,127 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="style.css" />
<title>Martsa ng Bayan</title>
</head>
<body>
<h1>Martsa ng Bayan &#8629;</h1>
<h2>1974.1.7</h2>
<!-- Header -->
<div class="header" id="myHeader">
<button class="btn active" onclick="four()">Overview</button>
<button class="btn" onclick="one()">100%</button>
</div>
<!-- metadata dropdown -->
<div id="rightnav" class="rightnav">
<a href="index.html" id="title">Title</a>
<a href="#" id="view">View</a>
</div>
<div id="leftnav" class="leftnav">
<a href="#" id="date">Date</a>
<a href="https://www.google.com/" id="creator">Creator</a>
</div>
<div class="metadata_Creator"><a href>Philippine Conference for Human Rights (PCHR)</a>
</div>
<button class="orgbtn" onclick="myFunction()">Organizations</button>
<div class="square"></div>
<div id="myDIV">
<ul><a href="index.html">All Organizations</a></ul>
</div>
<div class="row">
<div class="column">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/MartsangBayanJanuary7197401.jpg" style="width:100%">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/MartsangBayanJanuary7197405.jpg" style="width:100%">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/MartsangBayanJanuary7197409.jpg" style="width:100%">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/MartsangBayanJanuary7197413.jpg" style="width:100%">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/MartsangBayanJanuary7197417.jpg" style="width:100%">
</div>
<div class="column">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/MartsangBayanJanuary7197402.jpg" style="width:100%">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/MartsangBayanJanuary7197406.jpg" style="width:100%">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/MartsangBayanJanuary7197410.jpg" style="width:100%">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/MartsangBayanJanuary7197414.jpg" style="width:100%">
</div>
<div class="column">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/MartsangBayanJanuary7197403.jpg" style="width:100%">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/MartsangBayanJanuary7197407.jpg" style="width:100%">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/MartsangBayanJanuary7197411.jpg" style="width:100%">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/MartsangBayanJanuary7197415.jpg" style="width:100%">
</div>
<div class="column">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/MartsangBayanJanuary7197404.jpg" style="width:100%">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/MartsangBayanJanuary7197408.jpg" style="width:100%">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/MartsangBayanJanuary7197412.jpg" style="width:100%">
<img src="/Users/sandra/Desktop/XPUB/GIT/special-issue-11-wiki2html/images/MartsangBayanJanuary7197416.jpg" style="width:100%">
</div>
</div>
<script>
// Get the elements with class="column"
var elements = document.getElementsByClassName("column");
// Declare a loop variable
var i;
// Four images side by side
function four() {
for (i = 0; i < elements.length; i++) {
elements[i].style.msFlex = "25%"; // IE10
elements[i].style.flex = "25%";
}
}
// Full-width images
function one() {
for (i = 0; i < elements.length; i++) {
elements[i].style.msFlex = "80%"; // IE10
elements[i].style.flex = "80%";
}
}
// // Two images side by side
// function two() {
// for (i = 0; i < elements.length; i++) {
// elements[i].style.msFlex = "50%"; // IE10
// elements[i].style.flex = "50%";
// }
// }
// Add active class to the current button (highlight it)
var header = document.getElementById("myHeader");
var btns = header.getElementsByClassName("btn");
for (var i = 0; i < btns.length; i++) {
btns[i].addEventListener("click", function() {
var current = document.getElementsByClassName("active");
current[0].className = current[0].className.replace(" active", "");
this.className += " active";
});
}
// toggle text
function myFunction() {
var x = document.getElementById("myDIV");
if (x.style.display === "block") {
x.style.display = "none";
} else {
x.style.display = "block";
}
}
</script>
</body>
</html>

@ -0,0 +1,39 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="style.css" />
<title></title>
</head>
<body>
<h3>Results from query:<br/><code>[[Format::Song]]</code></h3>
<ul class="indexlist">
<li><a href="./MartsangBayan.html">Martsa ng Bayan</a>
1974.1.7
Philippine Conference for Human Rights (PCHR)
</li>
<li><a href="./HamokIsulongAngPambansangDemokratikongRebolusyon.html">Hamok: Isulong Ang Pambansang Demokratikong Rebolusyon</a>
1977.6.12
</li>
<li><a href="./Freeallpoliticalprisonersoursolidaritywillsetthemfree.html">Free all political prisoners: our solidarity will set them free</a>
1984.12.4
</li>
<li><a href="./2NineteenEightySickYearoftheLupus.html">Nineteen Eighty Sick: Year of the Lupus</a>
1986.1.1
Manuel Pamaran, Paki A. Lamero
</li>
<li><a href="./1LiberationVol14No. 4.html">Liberation: Vol. 14 No. 4</a>
1986.6.1
National Democratic Front (NDF)
</li>
</ul>
</body>
</html>

@ -0,0 +1,337 @@
* {
box-sizing: border-box;
}
body {
margin: 0;
font-family: Arial, Helvetica, sans-serif;
background-color: #aaa4a0;
}
/*index page links*/
li a:hover {
text-decoration: none;
color: blue;
}
a:link {
text-decoration: none;
color: black;
}
a:visited {
text-decoration: none;
color: black;
}
h1 {
position: fixed;
/*height: 50px;
width: auto;*/
right:0%;
text-align: right;
background-color: grey;
padding: 3px 30px 3px 10px;
}
h2, h3{
position: fixed;
left: 0%;
top: 5%;
text-align: left;
background-color: grey;
padding: 3px 3px 3px 30px;
}
.indexlist {
position: absolute;
top:20%;
}
.header {
/*display: inline-block;*/
position: absolute;
text-align: center;
padding: 32px;
top: 15%;
right: 0%;
z-index: -1;
}
.row {
display: -ms-flexbox; /* IE 10 */
display: flex;
position: absolute;
-ms-flex-wrap: wrap; /* IE 10 */
flex-wrap: wrap;
padding: 0 4px;
top: 35%;
z-index: -1;
}
/* Create two equal columns that sits next to each other */
.column {
-ms-flex: 25%; /* IE 10 */
flex: 25%;
padding: 0 4px;
}
.column img {
margin-top: 8px;
vertical-align: middle;
}
/* Style the buttons */
.btn {
position: relative;
border: none;
outline: none;
width: 110px;
text-align: center;
padding: 12px 0px;
background-color: grey;
cursor: pointer;
font-size: 18px;
margin-right: 5px;
}
.btn:hover {
background-color: black;
color: white;
}
.active {
background-color: black;
color: white;
}
/*metadata dropup*/
.dropbtn {
background-color: black;
color: white;
padding: 16px;
font-size: 16px;
border: none;
width: 200px;
}
.dropup {
position: absolute;
display: inline-block;
}
.dropup-content {
display: none;
position: absolute;
background-color: black;
opacity: 0.8;
min-width: 160px;
bottom: 50px;
z-index: 1;
width: 300px;
color: grey;
}
.dropup-content a {
color: grey;
padding: 12px 16px;
text-decoration: none;
display: block;
}
.dropup-content a:hover {color: white;}
.dropup:hover .dropup-content {
display: block;
}
.dropup:hover .dropbtn {
background-color: grey;
}
/*metadata dropdown*/
.dropbtn {
position: fixed;
background-color: #4CAF50;
color: white;
padding: 16px;
font-size: 16px;
border: none;
cursor: pointer;
bottom:30%;
}
.dropdown {
position: fixed;
display: inline-block;
bottom:30%;
width: 300px;
}
.dropdown-content {
display: none;
position: absolute;
right: 0;
background-color: #f9f9f9;
min-width: 160px;
box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
z-index: 1;
}
.dropdown-content a {
color: black;
padding: 12px 16px;
text-decoration: none;
display: block;
}
.dropdown-content a:hover {background-color: #f1f1f1;}
.dropdown:hover .dropdown-content {display: block;}
.dropdown:hover .dropbtn {background-color: #3e8e41;}
/*something*/
#rightnav a {
position: absolute;
right: -90px;
/*top:10%;*/
transition: 0.3s;
padding: 10px 50px 10px 30px;
width: 150px;
text-decoration: none;
font-size: 20px;
color: white;
border-radius: 0 5px 5px 0;
text-align: right;
font-size: 15px;
}
#rightnav a:hover {
right: 0;
background-color: black;
}
#title {
top: 10%;
background-color: black;
}
#view {
top: 27%;
background-color: black;
}
#leftnav a {
position: absolute;
left: -80px;
/*top:10%;*/
transition: 0.3s;
padding: 10px 50px 10px 20px;
width: 125px;
text-decoration: none;
font-size: 20px;
color: white;
border-radius: 5px 0 0 5px;
text-align: right;
font-size: 15px;
}
#leftnav a:hover {
left: 0;
background-color: black;
}
#date {
top: 14%;
background-color: black;
}
#creator {
top: 25%;
background-color: black;
}
.metadata_Creator{
position: absolute;
top:20%;
font-size: 18px;
background-color: grey;
padding: 3px 5px 3px 30px;
color: black;
}
.metadata_Creator a:hover{
color: blue;
text-decoration: none;
}
#myDIV {
display: none;
position: absolute;
width: 48%;
height: auto;
left:26%;
top:15%;
/*padding: 50px 0;*/
text-align: center;
background-color: grey;
margin-top: 20px;
z-index: 4;
opacity:0.8;
font-size: 15px;
}
#myDIV a:hover{
color: blue;
}
.orgbtn {
position: relative;
border: none;
outline: none;
width: 15%;
left:11%;
text-align: center;
padding-top: 12px;
padding-bottom: 12px;
background-color: grey;
color: grey;
cursor: pointer;
font-size: 18px;
/*margin-right: 5px;*/
}
.orgbtn:hover {
background-color: black;
color:white;
}
.square {
display: block;
position: absolute;
width: 50%;
height: 80%;
left:25%;
top:11%;
text-align: center;
background-color: transparent;
z-index: 2;
border-color: black;
border: solid 5px;
}

@ -3,10 +3,10 @@
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="../static/style.css" />
<title>{{title}}</title>
<title>{{ title[0] }}</title>
</head>
<body>
<h1>{{ title }}</h1>
<h1>{{ title[0] }}</h1>
<p><time datetime="{{date}}">{{ date.year }}.{{ date.month }}.{{ date.day }} </time></p>
<div id="content">
{{ content }}

@ -11,19 +11,21 @@
<div class="metadata">
<h3>Metadata</h3>
{% for key, value in printout_dict.items() %}
{% if key == 'Date' %}
<div class="metadata_{{key}}">
{% for key, valuelist in printout_dict.items() %}
<div class="metadata_{{key}}">
{% if key == 'Date' %}
<span class="key">{{key}}</span>
<span class="value">{{value.year}} {{value.month}} {{value.day}}</span>
</div>
{% else %}
<div class="metadata_{{key}}">
<span class="value">{{valuelist.year}} {{valuelist.month}} {{valuelist.day}}</span>
{% elif key == 'page' %}
<span class="key">{{key|upper}}</span>
<span class="value">{{value}}</span>
</div>
{% endif %}
<span class="value">{{valuelist}}</span>
{% else %}
{% if valuelist|length > 0 %}
<span class="key">{{key|upper}}</span>
<span class="value">{{valuelist | join(", ")}}</span>
{% endif %}
{% endif %}
</div>
{% endfor %}
</div>
</div>

@ -5,12 +5,12 @@
<title>{{title}}</title>
</head>
<body>
<h3>Results from query:<br/><code>{{query}}</code></h3>
<h3>Resultsss from query:<br/><code>{{query}}</code></h3>
<ul>
{% for doc in documentslist %}
<li><a href="./{{ doc['file'] }}">{{ doc['title'] }}</a>
<li><a href="./{{ doc['file'] }}">{{ doc['title'][0] }}</a>
{{ doc['date'].year }}.{{ doc['date'].month }}.{{ doc['date'].day }}
{{doc['creator']}}
{{doc['creator'] | join(", ")}}
</li>
{% endfor %}
</ul>

@ -0,0 +1,13 @@
<h1>{{ title|upper }}</h1>
<div class="row">
<div class="column">
{% for img in imgs %}
<img src="{{img}}" style="width:100%">
{% endfor %}
</div>
</div>
{{imgs}}

@ -10,4 +10,3 @@
|Topic={{ topic }}
|Language={{ language }}
{{ '}}' }}
[[Template:ImageMetadata]]

File diff suppressed because one or more lines are too long
Loading…
Cancel
Save