# -*- coding: utf8 -*-

"""
This script build a HTML file containing bookmarklets from a list of proxies
"""

import configparser

__author__ = "Pierre Poulain"
__copyright__ = "Copyright 2017"
__license__ = "GPL"
__version__ = "1.0"
__maintainer__ = "Pierre Poulain"
__email__ = "pierre.poulain@cupnet.net"
__status__ = "Development"



PROXY_NAME = "biblioproxy.txt"
BIBLIOMARKLETS_NAME = "bibliomarklets.html"

HTML_HEADER = """<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
    <meta name="author" content="Pierre Poulain">
    <meta name="keywords" content="bibliomarklet,bookmarklet,proxy,bibliothèque,article">
    <meta name="description" content="Bibliomarklets : bookmarklets pour faciliter l'accès aux articles scientifiques payants">
    <title>Bibliomarklets : bookmarklets pour faciliter l'accès aux articles scientifiques payants</title>

<style type="text/css">
body {
    width: 1000px;
    margin: 0 auto;
    font-family: "Helvetica Neue","Helvetica",Helvetica,Arial,sans-serif;
}

.btn {
    display: inline-block;
    width: 150px;
    background: #e3e3e3;
    border: 1px solid #bbb;
    -webkit-border-radius: 3px;
    -moz-border-radius: 3px;
    border-radius: 3px;
    color: #333;
    font: bold 12px helvetica, arial, sans-serif;
    padding: 5px 5px 5px 5px;
    margin: 1px 2px 1px 2px;
    text-align: center;
    text-decoration: none;
}

.link {
    margin: 5px 1px;
}

@media (max-width: 1000px) {
    body {
        width: auto;
    }
}

@media print {
    body {
        width: auto;
    }
}
</style>
</head>
<body>
<h1>Bibliomarklets</h1>
"""

# need in order: alias, section, proxy, alias, and section
HTML_BOOKMARKLET = """
<p class="link">
<a class="btn" title="{alias} / {section}" href="javascript:(function(){{location.hostname=location.hostname+'{proxy}';}})();">{alias}</a>
accès via {section}
</p>
"""

HTML_FOOTER = """
<h2>Comment utiliser ces bibliomarklets ?</h2>
<p>
<ul>
    <li>Faites glisser le bouton qui vous intéresse (l'institution pour
    laquelle vous avez un compte d'accès biblio) dans la barre de favoris 
    (pour Chrome), la barre personnelle (pour Firefox) ou directement dans 
    les bookmarks de votre navigateur.</li>
    <li>Lorsque vous tombez sur un article payant, cliquez sur le bookmarklet 
    que vous avez précédemment enregistré. La page devrait se recharger 
    en vous proposant de vous authentifier (avec le compte de votre 
    institution). Si votre compte est valide et que votre institution est 
    abonnée à la revue dont provient l'article, vous y aurez accès.</li>
</ul>
</p>

<h2>Comment contribuer ?</h2>
<p>
Le code utilisé pour générer cette page est disponible <a href="https://github.com/pierrepo/bibliomarklets">ici</a>. N'hésitez pas à l'améliorer.
</p>
<p>
Si vous souhaitez ajouter votre institution, envoyez-moi un mail à pierre.poulain@cupnet.net (mais lisez <a href="https://github.com/pierrepo/bibliomarklets#pourquoi-il-ny-a-pas-de-bibliomarklet-pour-ma-fac--institution-">ceci</a> d'abord).
</p>
<p>
-- <br />
Pierre Poulain (<a href="http://cupnet.net">cupnet.net</a>, 2017)
</p>
</body>
</html>
"""


if __name__ == "__main__":
    proxies = configparser.SafeConfigParser()
    proxies.read(PROXY_NAME)

    f_out = open(BIBLIOMARKLETS_NAME, "w")
    f_out.write(HTML_HEADER)

    # Read the whole configuration file
    for section in proxies.sections():
        proxy_dic = {}
        for (key, value) in proxies.items(section):
            proxy_dic[key] = value
        f_out.write(HTML_BOOKMARKLET.format(alias=proxy_dic["alias"],
                                            section=section,
                                            proxy=proxy_dic["proxy"]))

    f_out.write(HTML_FOOTER)
    f_out.close()
    print("wrote {}".format(BIBLIOMARKLETS_NAME))