diff options
-rw-r--r-- | notes/webface_notes.txt (renamed from webface/notes.txt) | 0 | ||||
-rw-r--r-- | webface/static/robots.txt | 1 | ||||
-rw-r--r-- | webface/templates/base.html | 70 | ||||
-rw-r--r-- | webface/templates/home.html | 32 | ||||
-rw-r--r-- | webface/templates/work_add.html (renamed from webface/index.html) | 59 | ||||
-rw-r--r-- | webface/templates/work_view.html | 37 | ||||
-rwxr-xr-x | webface/webface.py | 87 |
7 files changed, 233 insertions, 53 deletions
diff --git a/webface/notes.txt b/notes/webface_notes.txt index 8ed47d0b..8ed47d0b 100644 --- a/webface/notes.txt +++ b/notes/webface_notes.txt diff --git a/webface/static/robots.txt b/webface/static/robots.txt new file mode 100644 index 00000000..a168f11b --- /dev/null +++ b/webface/static/robots.txt @@ -0,0 +1 @@ +# Hello friends! diff --git a/webface/templates/base.html b/webface/templates/base.html new file mode 100644 index 00000000..4e9dcd4b --- /dev/null +++ b/webface/templates/base.html @@ -0,0 +1,70 @@ +<!DOCTYPE html> +<html lang="en" style="position: relative; min-height: 100%; height: auto;"> +<head> + <meta charset="utf-8" /> + <meta name="viewport" content="width=device-width"> + + <title>{% block title %}fatcat!{% endblock %}</title> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/semantic-ui@2.2.13/dist/semantic.min.css"> + <script + src="https://code.jquery.com/jquery-3.1.1.min.js" + integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8=" + crossorigin="anonymous"></script> + <script src="https://cdn.jsdelivr.net/npm/semantic-ui@2.2.13/dist/semantic.min.js"></script> + +</head> +<body style="margin-bottom: 100px; height: auto;"> + +<header class="ui fixed inverted menu"> + <div class="ui container"> + <a href="/" class="header item"> + <!-- <img class="logo" src="assets/images/logo.png"> --> + fatcat! + </a> + <a href="/about" class="item">About</a> + <a href="#" class="item">Guide</a> + <div class="right menu"> + <div class="item"> + <div class="ui transparent inverted icon input"> + <i class="search icon"></i> + <input type="text" placeholder="Search..."> + </div> + </div> + <div class="ui simple dropdown item"> + acidburn <i class="dropdown icon"></i> + <div class="menu"> + <a class="item" href="#">Open Submissions</a> + <a class="item" href="#">Edit History</a> + <div class="divider"></div> + <a class="item" href="/account">Account</a> + <a class="item" href="/logout">Logout</a> + </div> + </div> + + </div> + </div> +</header> + +<main class="ui main text container" style="margin-top: 4em; margin-bottom: 2em;"> +{% block body %}Nothing to see here.{% endblock %} +</main> + + +<footer class="ui inverted vertical footer segment" style="margin-top: 2em; padding-top: 2em; padding-bottom:2em; position: absolute; bottom: 0px; width: 100%;"> + <div class="ui center aligned container"> + <div class="ui horizontal inverted small divided link list"> + <span class="item">fatcat!</span> + <a class="item" href="/about">About</a> + <a class="item" href="/sources">Sources</a> + <a class="item" href="#">Status</a> + <a class="item" href="#">Datasets</a> + <a class="item" href="https://git.bnewbold.net/fatcat/">Source Code</a> + </div> + </div> +</footer> + +{% block postscript %}{% endblock %} + +</body> +</html> diff --git a/webface/templates/home.html b/webface/templates/home.html new file mode 100644 index 00000000..d9cc34a2 --- /dev/null +++ b/webface/templates/home.html @@ -0,0 +1,32 @@ +{% extends "base.html" %} +{% block body %} + +<h1>Salutations!</h1> + +Just mockups for now... + +<ul> + <li><b>Work:</b> + <a href="/work/create">Create</a>, + <a href="/work/random">Random</a> + <li><b><strike>Release:</strike></b> + <a href="/release/create">Create</a>, + <a href="/release/random">Random</a> + <li><b><strike>File:</strike></b> + <a href="/file/create">Create</a>, + <a href="/file/random">Random</a> + <li><b><strike>Contributor:</strike></b> + <a href="/contrib/create">Create</a>, + <a href="/contrib/random">Random</a> + <li><b><strike>Container:</strike></b> + <a href="/container/create">Create</a>, + <a href="/container/random">Random</a> + <li><b><strike>Publisher:</strike></b> + <a href="/publisher/create">Create</a>, + <a href="/publisher/random">Random</a> + <li>Edit groups... + <li>Changelog... + <li>Login/Signup... +</ul> + +{% endblock %} diff --git a/webface/index.html b/webface/templates/work_add.html index 6e269e38..ac8a8169 100644 --- a/webface/index.html +++ b/webface/templates/work_add.html @@ -1,51 +1,5 @@ -<!DOCTYPE html> -<html lang="en"> -<head> - <meta charset="utf-8" /> - <meta name="viewport" content="width=device-width"> - - <title> </title> - <meta name="viewport" content="width=device-width, initial-scale=1"> - <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/semantic-ui@2.2.13/dist/semantic.min.css"> - <script - src="https://code.jquery.com/jquery-3.1.1.min.js" - integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8=" - crossorigin="anonymous"></script> - <script src="https://cdn.jsdelivr.net/npm/semantic-ui@2.2.13/dist/semantic.min.js"></script> - -</head> -<body> - -<div class="ui fixed inverted menu"> - <div class="ui container"> - <a href="#" class="header item"> - <!-- <img class="logo" src="assets/images/logo.png"> --> - Project Name - </a> - <a href="#" class="item">Home</a> - <div class="ui simple dropdown item"> - Dropdown <i class="dropdown icon"></i> - <div class="menu"> - <a class="item" href="#">Link Item</a> - <a class="item" href="#">Link Item</a> - <div class="divider"></div> - <div class="header">Header Item</div> - <div class="item"> - <i class="dropdown icon"></i> - Sub Menu - <div class="menu"> - <a class="item" href="#">Link Item</a> - <a class="item" href="#">Link Item</a> - </div> - </div> - <a class="item" href="#">Link Item</a> - </div> - </div> - </div> -</div> - -<div class="ui main text container"> - +{% extends "base.html" %} +{% block body %} <div class="ui segment"> <h1 class="ui header">Adding a New Thing</h1> @@ -149,10 +103,11 @@ </form> </div> -</div> +{% endblock %} -<!-- Form validation code --> +{% block postscript %} <script> +<!-- Form validation code --> $(document).ready(function() { $('#add_work_form') @@ -257,6 +212,4 @@ $(document).ready(function() { }); </script> - -</body> -</html> +{% endblock %} diff --git a/webface/templates/work_view.html b/webface/templates/work_view.html new file mode 100644 index 00000000..8c5e955d --- /dev/null +++ b/webface/templates/work_view.html @@ -0,0 +1,37 @@ +{% extends "base.html" %} +{% block body %} + +<h1>{{ work.title }}</h1> + +<p>Work type: {{ work.type }} +<p><a href="/work/{{ work.id }}/history">History</a> +<p>Contributors: +{% for c in work.contributors %} {{ c.name }}; {% endfor %} + +{% if primary %} +<h2>Primary Release/Edition</h2> +<p>Title: {{ primary.title }} +<p>Date: {{ primary.date }} + +{% if primary.container %} +<p>Container: <a href="/container/{{ primary.container.id }}">{{ primary.container.title }}</a> +{% endif %} + +{% if primary.doi %} +<p>DOI: <a href="https://dx.doi.org/{{ primary.doi }}">{{ primary.doi }}</a> +{% endif %} + +{% else %} +<p>No primary release +{% endif %} + +{% if releases %} +<ul> +{% for r in releases %} + <ul><a href="/release/{{ r.id }}">{{ r.title }}</a> ({{ y.date }} - {{ y.release_type }}) +{% endfor %} +</ul> +{% else %} +{% endif %} + +{% endblock %} diff --git a/webface/webface.py b/webface/webface.py new file mode 100755 index 00000000..33833e25 --- /dev/null +++ b/webface/webface.py @@ -0,0 +1,87 @@ +#!/usr/bin/env python3 + +import os +import argparse +import requests +from flask import Flask, render_template, send_from_directory, request, \ + url_for, abort, g, redirect, jsonify + +app = Flask(__name__) +app.config.from_object(__name__) + + +### Views ################################################################### + +@app.route('/health', methods=['GET']) +def health(): + return jsonify({'ok': True}) + +@app.route('/work/create', methods=['GET']) +def work_create(): + return render_template('work_add.html') + +@app.route('/work/random', methods=['GET']) +def work_random(): + work = { + "title": "Structure and Interpretation", + "work_type": "book", + "date": None, + "contributors": [ + {"name": "Alyssa P. Hacker"}, + ], + "primary": { + "title": "Structure and Interpretation", + "release_type": "online", + "date": "2000-01-01", + "doi": "10.491/599.sdo14", + }, + "releases": [ + ] + } + return render_template('work_view.html', work=work, primary=work['primary']) + +@app.route('/work/<work_id>/random', methods=['GET']) +def work_view(work_id): + return render_template('work_view.html') + + +### Static Routes ########################################################### + +@app.route('/', methods=['GET']) +def homepage(): + return render_template('home.html') + +@app.route('/about', methods=['GET']) +def aboutpage(): + return render_template('about.html') + +@app.route('/robots.txt', methods=['GET']) +def robots(): + return send_from_directory(os.path.join(app.root_path, 'static'), + 'robots.txt', + mimetype='text/plain') + + +### Entry Point ############################################################# + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument('--debug', + action='store_true', + help="enable debugging interface") + parser.add_argument('--host', + default="127.0.0.1", + help="listen on this host/IP") + parser.add_argument('--port', + type=int, + default=5050, + help="listen on this port") + parser.add_argument('--backend-api', + default="localhost:6060", + help="backend API to connect to") + args = parser.parse_args() + + app.run(debug=args.debug, host=args.host, port=args.port) + +if __name__ == '__main__': + main() |