aboutsummaryrefslogtreecommitdiffstats
path: root/webface
diff options
context:
space:
mode:
Diffstat (limited to 'webface')
-rw-r--r--webface/notes.txt8
-rw-r--r--webface/static/robots.txt1
-rw-r--r--webface/templates/base.html70
-rw-r--r--webface/templates/home.html32
-rw-r--r--webface/templates/work_add.html (renamed from webface/index.html)59
-rw-r--r--webface/templates/work_view.html37
-rwxr-xr-xwebface/webface.py87
7 files changed, 233 insertions, 61 deletions
diff --git a/webface/notes.txt b/webface/notes.txt
deleted file mode 100644
index 8ed47d0b..00000000
--- a/webface/notes.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-
-tachyons is nice for simple css-only stuff, but let's use "Semantic UI" because
-it has a bunch of javascript form stuff.
-
- <link rel="stylesheet" href="https://cdn.jsdelivr.net/semantic-ui/2.2.13/semantic.min.css">
- <script src="https://cdn.jsdelivr.net/semantic-ui/2.2.13/semantic.min.js"></script>
-
-
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()