diff options
-rw-r--r-- | fatcat/api.py | 30 | ||||
-rw-r--r-- | fatcat/routes.py | 14 | ||||
-rw-r--r-- | fatcat/templates/container_add.html | 168 | ||||
-rw-r--r-- | fatcat/templates/container_view.html | 8 |
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> |