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>  | 
