summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fatcat/api.py30
-rw-r--r--fatcat/routes.py14
-rw-r--r--fatcat/templates/container_add.html168
-rw-r--r--fatcat/templates/container_view.html8
4 files changed, 206 insertions, 14 deletions
diff --git a/fatcat/api.py b/fatcat/api.py
index 9cbb1939..eaf45d77 100644
--- a/fatcat/api.py
+++ b/fatcat/api.py
@@ -32,9 +32,10 @@ def api_work_get(ident):
return work_schema.jsonify(entity)
@app.route('/v0/work', methods=['POST'])
-def api_work_create():
+def api_work_create(params=None):
# TODO: Special-case to pull out primary and create that?
- params = request.get_json()
+ if params == None:
+ params = request.get_json()
editgroup = get_or_create_editgroup(params.get('editgroup'))
rev = WorkRev(
title=params.get('title', None),
@@ -60,8 +61,9 @@ def api_release_get(ident):
return release_schema.jsonify(entity)
@app.route('/v0/release', methods=['POST'])
-def api_release_create():
- params = request.get_json()
+def api_release_create(params=None):
+ if params == None:
+ params = request.get_json()
editgroup = get_or_create_editgroup(params.get('editgroup'))
creators = params.get('creators', [])
creators = [CreatorIdent.query.get_or_404(c) for c in creators]
@@ -127,8 +129,9 @@ def api_creator_get(ident):
return creator_schema.jsonify(entity)
@app.route('/v0/creator', methods=['POST'])
-def api_creator_create():
- params = request.get_json()
+def api_creator_create(params=None):
+ if params == None:
+ params = request.get_json()
editgroup = get_or_create_editgroup(params.get('editgroup'))
rev = CreatorRev(
name=params.get('name', None),
@@ -162,8 +165,9 @@ def api_container_get(ident):
return container_schema.jsonify(entity)
@app.route('/v0/container', methods=['POST'])
-def api_container_create():
- params = request.get_json()
+def api_container_create(params=None):
+ if params == None:
+ params = request.get_json()
editgroup = get_or_create_editgroup(params.get('editgroup'))
rev = ContainerRev(
name=params.get('name', None),
@@ -198,8 +202,9 @@ def api_file_get(ident):
return file_schema.jsonify(entity)
@app.route('/v0/file', methods=['POST'])
-def api_file_create():
- params = request.get_json()
+def api_file_create(params=None):
+ if params == None:
+ params = request.get_json()
editgroup = get_or_create_editgroup(params.get('editgroup'))
releases = params.get('releases', [])
releases = [ReleaseIdent.query.get_or_404(r) for r in releases]
@@ -230,8 +235,9 @@ def api_editgroup_get(ident):
return editgroup_schema.jsonify(entity)
@app.route('/v0/editgroup', methods=['POST'])
-def api_editgroup_create():
- params = request.get_json()
+def api_editgroup_create(params=None):
+ if params == None:
+ params = request.get_json()
eg = EditGroup(
editor_id=1,
description=params.get('description', None),
diff --git a/fatcat/routes.py b/fatcat/routes.py
index bc7d2821..0c86bd78 100644
--- a/fatcat/routes.py
+++ b/fatcat/routes.py
@@ -45,6 +45,20 @@ def release_random():
ident = rv.location.split('/')[-1]
return redirect("/release/{}".format(ident))
+@app.route('/container/create', methods=['GET'])
+def container_create_view():
+ return render_template('container_add.html')
+
+@app.route('/container/create', methods=['POST'])
+def container_create():
+ params = dict()
+ for k in request.form:
+ if k.startswith('container_'):
+ params[k[10:]] = request.form[k]
+ rv = api.api_container_create(params=params)
+ container = json.loads(rv.data.decode('utf-8'))
+ return redirect("/container/{}".format(container['id']))
+
@app.route('/creator/<int:ident>', methods=['GET'])
def creator_view(ident):
rv = api.api_creator_get(ident)
diff --git a/fatcat/templates/container_add.html b/fatcat/templates/container_add.html
new file mode 100644
index 00000000..15288142
--- /dev/null
+++ b/fatcat/templates/container_add.html
@@ -0,0 +1,168 @@
+{% extends "base.html" %}
+{% block body %}
+<div class="ui segment">
+<h1 class="ui header">Adding a New Container</h1>
+
+<p>A "container" is a anything that groups publications together. For example,
+a journal (eg, "New England Journal of Medicine"), conference proceedings, a
+book series, or a blog.
+
+<p>Not all publications are in a container.
+
+<form class="ui form" id="add_container_form" method="post" action="/container/create">
+
+ <h3 class="ui dividing header">The Basics</h3>
+
+ <div class="ui huge field required">
+ <label>Name or Title</label>
+ <input name="container_name" type="text" placeholder="Title of Container (in English)">
+ </div>
+
+ <div class="ui field required">
+ <label>Type of Container</label>
+ <select class="ui dropdown" id="container_type">
+ <option value="">Primary Type</option>
+ <option value="journal">Journal</option>
+ <option value="book-series">Book Series</option>
+ <option value="conference">Conference Proceedings</option>
+ <option value="blog">Blog</option>
+ <option value="other">Other</option>
+ </select>
+ </div>
+
+ <!-- Publisher -->
+ <div class="ui huge field required">
+ <label>Name of Publisher</label>
+ <input name="container_publisher" type="text" placeholder="Name of Publisher">
+ </div>
+
+ <!-- Identifier -->
+ <div class="ui huge field required">
+ <label>ISSN Number</label>
+ <input name="container_issn" type="text" placeholder="eg, 1234-567X">
+ </div>
+
+ <!-- Primary/Original Language -->
+ <div class="field">
+ <label>Primary Language</label>
+ <select class="ui search select dropdown" id="language-select">
+ <option value="">Select if Appropriate</option>
+ <option value="en">English</option>
+ <option value="es">Spanish</option>
+ <option value="">Russian</option>
+ <option value="">Thai</option>
+ <option value="">Indonesian</option>
+ <option value="">Chinese</option>
+ </select>
+ </div>
+
+ <!-- Subject / Categorization / Tags -->
+ <div class="field">
+ <label>Subject</label>
+ <select multiple="" class="ui dropdown" id="subjects">
+ <option value="">Select Subject/Tags</option>
+ <option value="AF">Natural Sciences</option>
+ <option value="AX">Humanities</option>
+ <option value="AL">Arts</option>
+ <option value="AL">Engineering</option>
+ <option value="AL">Other</option>
+ </select>
+ </div>
+
+ <!-- Date -->
+ <!-- Container / Part-Of -->
+ <!-- Region -->
+
+ <!-- Anything Else? -->
+ <h3 class="ui dividing header">Anything Else?</h3>
+
+<div class="ui submit button">Create container</div>
+
+<p><i>Entity will be created as part of the current edit group, which needs to be
+submited and approved before the entity will formally be included in the
+catalog.</i>
+
+</form>
+
+</div>
+{% endblock %}
+
+{% block postscript %}
+<script>
+<!-- Form validation code -->
+$(document).ready(function() {
+
+ $('#add_container_form')
+ .form({
+ fields: {
+ name: {
+ identifier: 'name',
+ rules: [
+ {
+ type : 'empty',
+ prompt : 'Please enter your name'
+ }
+ ]
+ },
+ skills: {
+ identifier: 'skills',
+ rules: [
+ {
+ type : 'minCount[2]',
+ prompt : 'Please select at least two skills'
+ }
+ ]
+ },
+ gender: {
+ identifier: 'gender',
+ rules: [
+ {
+ type : 'empty',
+ prompt : 'Please select a gender'
+ }
+ ]
+ },
+ username: {
+ identifier: 'username',
+ rules: [
+ {
+ type : 'empty',
+ prompt : 'Please enter a username'
+ }
+ ]
+ },
+ password: {
+ identifier: 'password',
+ rules: [
+ {
+ type : 'empty',
+ prompt : 'Please enter a password'
+ },
+ {
+ type : 'minLength[6]',
+ prompt : 'Your password must be at least {ruleValue} characters'
+ }
+ ]
+ },
+ terms: {
+ identifier: 'terms',
+ rules: [
+ {
+ type : 'checked',
+ prompt : 'You must agree to the terms and conditions'
+ }
+ ]
+ }
+ }
+ })
+ ;
+
+ $('#container_type').dropdown();
+ $('#subjects').dropdown();
+ $('#language-select').dropdown();
+
+ console.log("Page loaded");
+
+});
+</script>
+{% endblock %}
diff --git a/fatcat/templates/container_view.html b/fatcat/templates/container_view.html
index d842f7e1..483886b5 100644
--- a/fatcat/templates/container_view.html
+++ b/fatcat/templates/container_view.html
@@ -1,9 +1,13 @@
{% extends "base.html" %}
{% block body %}
-<h1>Container: {{ container.id }}</h1>
+<h1>Container: {{ container.name }}</h1>
-TODO:
+<p>ID: {{ container.id }}
+<p>ISSN: {{ container.issn }}
+<p>Publisher: {{ container.publisher }}
+
+<p>TODO:
<pre>{{ container }}</pre>