diff options
-rw-r--r-- | fatcat/schema.py | 68 | ||||
-rw-r--r-- | webface/index.html | 262 | ||||
-rw-r--r-- | webface/notes.txt | 8 |
3 files changed, 338 insertions, 0 deletions
diff --git a/fatcat/schema.py b/fatcat/schema.py new file mode 100644 index 00000000..cdc98ccf --- /dev/null +++ b/fatcat/schema.py @@ -0,0 +1,68 @@ + +from sqlalchemy import Table, Column, Integer, String, MetaData, ForeignKey + +metadata = MetaData() + +# TODO: http://docs.sqlalchemy.org/en/latest/orm/extensions/declarative/mixins.html + +work_id = Table('work_id', metadata, + Column('id', Integer, primary_key=True, autoincrement=False), + Column('revision', ForeignKey('work_revision.id')), + ) + +work_revision = Table('work_revision', metadata, + Column('id', Integer, primary_key=True, autoincrement=True), + Column('previous', ForeignKey('work_revision.id'), nullable=True), + Column('state', enum('normal', 'redirect', 'removed')), + Column('redirect_id', ForeignKey('work_id.id'), nullable=True)), + Column('edit_id'), ForeignKey('edit.id')), + + Column('title', String), + Column('work_type', ForeignKey()), + Column('date', String), + Column('journal', String), + Column('doi', String), + ) + +creator_id = Table('creator_id', metadata, + Column('id', Integer, primary_key=True, autoincrement=False), + Column('revision', ForeignKey('creator_revision.id')), + ) + +creator_revision = Table('creator_revision', metadata, + Column('id', Integer, primary_key=True, autoincrement=True), + Column('previous', ForeignKey('creator_revision.id'), optional=True), + Column('state', enum('normal', 'redirect', 'removed')), + Column('redirect_id', ForeignKey('creator_id.id'), optional=True)), + Column('edit_id'), ForeignKey('edit.id')), + + Column('name', String), + Column('sortname', String), + ) + +authorship = Table('authorship', metadata, + Column('id', Integer, primary_key=True, autoincrement=True), + Column('work_rev', ForeignKey('work_revision.id'), nullable=False), + Column('creator_id', ForeignKey('creator_id.id'), nullable=False), + ) + +edit = Table('edit', metadata, + Column('id', Integer, primary_key=True, autoincrement=True), + Column('edit_group', ForeignKey('edit_group.id')), + Column('editor', ForeignKey('editor.id')), + ) + +edit_group = Table('edit_group', metadata, + Column('id', Integer, primary_key=True, autoincrement=True), + ) + +editor = Table('editor', metadata, + Column('id', Integer, primary_key=True, autoincrement=True), + Column('username', String), + ) + +changelog = Table('changelog', metadata, + Column('id', Integer, primary_key=True, autoincrement=True), + Column('edit_id', ForeignKey('edit.id')), + Column('timestamp', Integer), + ) diff --git a/webface/index.html b/webface/index.html new file mode 100644 index 00000000..6e269e38 --- /dev/null +++ b/webface/index.html @@ -0,0 +1,262 @@ +<!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"> + +<div class="ui segment"> +<h1 class="ui header">Adding a New Thing</h1> + +<form class="ui form" id="add_work_form"> + + <h3 class="ui dividing header">The Basics</h3> + + <div class="ui huge field required"> + <label>Title</label> + <input name="work_title" type="text" placeholder="Title of Work (in English)"> + </div> + + <div class="ui field required"> + <label>Type of Work</label> + <select class="ui dropdown" id="work_type"> + <option value="">Primary Type</option> + <option value="journal-article">Journal Article</option> + <option value="book">Book</option> + <option value="book-chapter">Book Chapter</option> + <option value="dataset">Dataset</option> + <option value="dissertation">Thesis or Dissertation</option> + <option value="monograph">Monograph</option> + <option value="proceedings-article">Conference Proceeding</option> + <option value="report">Report</option> + <option value="other">Other</option> + </select> + </div> + + <!-- Primary Creators/Authors --> + <div class="ui field search" id="work_creators"> + <label>Primary Creator(s)</label> + <div class="ui icon input"> + <input class="prompt" type="text" placeholder="Search..."> + <i class="search icon"></i> + </div> + <div class="results"></div> + </div> + + <!-- Description (not an abstract) --> + <div class="ui field"> + <label>Description</label> + <div class="field"> + <label>Not an abstract...</label> + <textarea rows="2"></textarea> + </div> + </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> + </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">Afghanistan</option> + <option value="AX">Ă…land Islands</option> + <option value="AL">Albania</option> + <option value="DZ">Algeria</option> + <option value="AS">American Samoa</option> + <option value="AD">Andorra</option> + <option value="AO">Angola</option> + </select> + </div> + + + <h3 class="ui dividing header">Primary Release / Edition</h3> + + <!-- Contributors (and how) --> + <div class="ui field search" id="release_creators"> + <label>Primary Creator(s)</label> + <div class="ui icon input"> + <input class="prompt" type="text" placeholder="Search..."> + <i class="search icon"></i> + </div> + <div class="results"></div> + </div> + + <!-- Date --> + <!-- Container / Part-Of --> + <!-- Publisher --> + <!-- Identifier --> + <!-- Language --> + <!-- Type / Media --> + <!-- Issue / Volume / Pages / Chapter --> + + <!-- Anything Else? --> + <h3 class="ui dividing header">Anything Else?</h3> + + <!-- File / Copy / URL --> + <!-- Citations --> + +<div class="ui submit button">Create Work</div> +</form> + +</div> +</div> + +<!-- Form validation code --> +<script> +$(document).ready(function() { + + $('#add_work_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' + } + ] + } + } + }) + ; + + var example_authors = [ + { title: 'Andorra' }, + { title: 'United Arab Emirates' }, + { title: 'Afghanistan' }, + { title: 'Antigua' }, + { title: 'Anguilla' }, + { title: 'Albania' }, + { title: 'Armenia' }, + { title: 'Netherlands Antilles' }, + { title: 'Angola' }, + { title: 'Argentina' }, + { title: 'American Samoa' }, + { title: 'Austria' }, + { title: 'Australia' }, + { title: 'Aruba' }, + ]; + + $('#work_creators') + .search({ + source: example_authors + }) + ; + + $('#release_creators') + .search({ + source: example_authors + }) + ; + + $('#work_type').dropdown(); + $('#subjects').dropdown(); + $('#language-select').dropdown(); + + console.log("Page loaded"); + +}); +</script> + +</body> +</html> diff --git a/webface/notes.txt b/webface/notes.txt new file mode 100644 index 00000000..8ed47d0b --- /dev/null +++ b/webface/notes.txt @@ -0,0 +1,8 @@ + +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> + + |