From f96347928e460494c0f90de3a43262cbc0c0c799 Mon Sep 17 00:00:00 2001
From: "J.-S. Caux" <J.S.Caux@uva.nl>
Date: Wed, 13 Apr 2016 09:39:55 +0200
Subject: [PATCH] Add jQuery-enabled tabs in personal page; add Team and Node
 objects (requires django-mptt)

---
 SciPost_v1/settings.py                       |   1 +
 scipost/models.py                            |  40 +++++++
 scipost/static/scipost/SciPost.css           |  23 +++++
 scipost/templates/scipost/personal_page.html | 103 ++++++++++++++-----
 4 files changed, 140 insertions(+), 27 deletions(-)

diff --git a/SciPost_v1/settings.py b/SciPost_v1/settings.py
index 663a26490..2cd8bb171 100644
--- a/SciPost_v1/settings.py
+++ b/SciPost_v1/settings.py
@@ -60,6 +60,7 @@ INSTALLED_APPS = (
     'django_mathjax',
     'captcha',
     'crispy_forms',
+    'mptt',
     'commentaries',
     'comments',
     'journals',
diff --git a/scipost/models.py b/scipost/models.py
index fe9ffb812..eda478fd7 100644
--- a/scipost/models.py
+++ b/scipost/models.py
@@ -6,6 +6,8 @@ from django.template import Template, Context
 
 from django_countries.fields import CountryField
 
+from mptt.models import MPTTModel, TreeForeignKey
+
 from .models import *
 
 SCIPOST_DISCIPLINES = (
@@ -252,3 +254,41 @@ class AuthorshipClaim(models.Model):
 #    nr_significance_ratings = models.IntegerField(default=0)
 #    significance_rating = models.DecimalField(default=0, max_digits=3, decimal_places=0)
 
+
+
+#########
+# Teams #
+#########
+
+class Team(models.Model):
+    """
+    Team of Contributors, to enable private collaborations.
+    """
+    leader = models.ForeignKey(Contributor)
+    members = models.ManyToManyField (Contributor, blank=True, related_name='team_members')
+    name = models.CharField(max_length=20)
+
+    def __str__(self):
+        return name + ' (led by ' + leader.user.first_name + ' ' + leader.user.last_name + ')'
+    
+
+#########
+# Lists #
+#########
+
+class Node(MPTTModel):
+    """
+    Node of a list (tree of submissions, commentaries, thesislinks). 
+    Requires django-mptt.
+    """
+    owner = models.ForeignKey(Team)
+    name = models.CharField(max_length=100)
+    private = models.BooleanField(default=True)
+    parent = TreeForeignKey('self', blank=True, null=True, related_name='children', db_index=True)
+    description = models.TextField(blank=True, null=True)
+    submissions = models.ManyToManyField('submissions.Submission', blank=True, related_name='node_submissions')
+    commentaries = models.ManyToManyField('commentaries.Commentary', blank=True, related_name='node_commentaries')
+    thesislinks = models.ManyToManyField('theses.ThesisLink', blank=True, related_name='node_thesislinks')
+    annotation = models.TextField(blank=True, null=True)
+
+    
diff --git a/scipost/static/scipost/SciPost.css b/scipost/static/scipost/SciPost.css
index 570c43d1d..650ee5342 100644
--- a/scipost/static/scipost/SciPost.css
+++ b/scipost/static/scipost/SciPost.css
@@ -49,6 +49,29 @@ hr.hr12 {
     box-shadow: inset 0 12px 12px -12px rgba(0, 0, 0, 0.5);
 }
 
+ul.personalTabMenu {
+  background-color: #dddddd;
+  display: inline-block;
+  padding: 0px;
+}
+ul.personalTabMenu li {
+  display: inline-block;
+  margin: 0px;
+  padding: 10px;
+}
+ul.personalTabMenu li a {
+  padding: 5px;
+}
+ul.personalTabMenu li a.active {
+  background-color: #eeeeee;
+  border: 1px solid black;
+  padding: 5px;
+}
+ul.personalTabMenu li a.inactive {
+  background-color: #dddddd;
+  border: none;
+}
+
 .commentcategorychoices {
   list-style-type: none; 
 }
diff --git a/scipost/templates/scipost/personal_page.html b/scipost/templates/scipost/personal_page.html
index 770d7163a..a5a3ecf9c 100644
--- a/scipost/templates/scipost/personal_page.html
+++ b/scipost/templates/scipost/personal_page.html
@@ -8,21 +8,58 @@
 
 <script>
   $(document).ready(function(){
-  $("#mysubmissionsbutton").click(function(){
-  $("#mysubmissionslist").toggle();
-  });
-  $("#mycommentariesbutton").click(function(){
-  $("#mycommentarieslist").toggle();
-  });
-  $("#mythesesbutton").click(function(){
-  $("#mytheseslist").toggle();
-  });
-  $("#mycommentsbutton").click(function(){
-  $("#mycommentslist").toggle();
-  });
-  $("#myauthorrepliesbutton").click(function(){
-  $("#myauthorreplieslist").toggle();
-  });
+   $(".TabSection").hide();
+   $(".TabItem").attr("class", "TabItem inactive");
+   $("#AccountTab").attr("class", "TabItem active");
+   $("#Account").show();
+   $("#AccountTab").click(function(){
+    $(".TabItem").attr("class", "TabItem inactive");
+    $("#AccountTab").attr("class", "TabItem active");
+    $(".TabSection").hide();
+    $("#Account").show();
+   });
+   $("#EdActionTab").click(function(){
+    $(".TabItem").attr("class", "TabItem inactive");
+    $("#EdActionTab").attr("class", "TabItem active");
+    $(".TabSection").hide();
+    $("#EdActions").show();
+   });
+   $("#RefereeingTab").click(function(){
+    $(".TabItem").attr("class", "TabItem inactive");
+    $("#RefereeingTab").attr("class", "TabItem active");
+    $(".TabSection").hide();
+    $("#Refereeing").show();
+   });
+   $("#SubmissionsTab").click(function(){
+    $(".TabItem").attr("class", "TabItem inactive");
+    $("#SubmissionsTab").attr("class", "TabItem active");
+    $(".TabSection").hide();
+    $("#Submissions").show();
+   });
+   $("#CommentariesTab").click(function(){
+    $(".TabItem").attr("class", "TabItem inactive");
+    $("#CommentariesTab").attr("class", "TabItem active");
+    $(".TabSection").hide();
+    $("#Commentaries").show();
+   });
+   $("#ThesesTab").click(function(){
+    $(".TabItem").attr("class", "TabItem inactive");
+    $("#ThesesTab").attr("class", "TabItem active");
+    $(".TabSection").hide();
+    $("#Theses").show();
+   });
+   $("#CommentsTab").click(function(){
+    $(".TabItem").attr("class", "TabItem inactive");
+    $("#CommentsTab").attr("class", "TabItem active");
+    $(".TabSection").hide();
+    $("#Comments").show();
+   });
+   $("#AuthorRepliesTab").click(function(){
+    $(".TabItem").attr("class", "TabItem inactive");
+    $("#AuthorRepliesTab").attr("class", "TabItem active");
+    $(".TabSection").hide();
+    $("#AuthorReplies").show();
+   });
   });
 </script>
 
@@ -44,6 +81,19 @@
     <h1>Welcome to your SciPost Personal Page, {{ user.username }} </h1>
   </div>
 
+  <ul class="personalTabMenu">
+    <li><a class="TabItem" id="AccountTab">Account</a></li>
+    <li><a class="TabItem" id="EdActionTab">Editorial Actions</a></li>
+    <li><a class="TabItem" id="RefereeingTab">Refereeing</a></li>
+    <li><a class="TabItem" id="SubmissionsTab">Submissions</a></li>
+    <li><a class="TabItem" id="CommentariesTab">Commentaries</a></li>
+    <li><a class="TabItem" id="ThesesTab">Theses</a></li>
+    <li><a class="TabItem" id="CommentsTab">Comments</a></li>
+    <li><a class="TabItem" id="AuthorRepliesTab">Author Replies</a></li>
+  </ul>
+</section>
+
+<section class="TabSection" id="Account">
   <hr class="hr12">
   <div class="flex-greybox">
     <h1>Your Account</h1>
@@ -79,8 +129,9 @@
   </div>
 </section>
 
+
 {% if request.user|is_in_group:'SciPost Administrators' or request.user|is_in_group:'Editorial College' or request.user|is_in_group:'Vetting Editors' %}
-<section>
+<section class="TabSection" id="EdActions">
   <hr class="hr12">
   <div class="flex-greybox">
     <h1>Pending Editorial Actions</h1>
@@ -148,8 +199,9 @@
 </section>
 {% endif %}
 
+
 {% if perms.scipost.can_referee %}
-<section>
+<section class="TabSection" id="Refereeing">
   <hr class="hr12">
   <div class="flex-greybox">
     <h1>Refereeing Tasks</h1>
@@ -171,11 +223,10 @@
 </section>
 {% endif %}
 
-<section>
+<section class="TabSection" id="Submissions">
   <hr class="hr12">
   <div class="flex-greybox">
     <h1>Submissions</h1>
-    <button id="mysubmissionsbutton">View/hide your submissions</button>
     <ul>
       {% if nr_submission_authorships_to_claim > 0 %}
       <li><a href="{% url 'scipost:claim_authorships' %}">Potential authorships to claim (auto-detected: {{ nr_submission_authorships_to_claim}})</a></li>
@@ -195,11 +246,11 @@
   </div>
 </section>
 
-<section>
+
+<section class="TabSection" id="Commentaries">
   <hr class="hr12">
   <div class="flex-greybox">
     <h1>Commentaries</h1>
-    <button id="mycommentariesbutton">View/hide commentaries on your papers</button>
     <ul>
       {% if nr_commentary_authorships_to_claim > 0 %}
       <li><a href="{% url 'scipost:claim_authorships' %}">Potential authorships to claim (auto-detected: {{ nr_commentary_authorships_to_claim}})</a></li>
@@ -219,11 +270,11 @@
   </div>
 </section>
 
-<section>
+
+<section class="TabSection" id="Theses">
   <hr class="hr12">
   <div class="flex-greybox">
     <h1>Theses</h1>
-    <button id="mythesesbutton">View/hide your theses</button>
     <ul>
       {% if nr_thesis_authorships_to_claim > 0 %}
       <li><a href="{% url 'scipost:claim_authorships' %}">Potential authorships to claim (auto-detected: {{ nr_thesis_authorships_to_claim}})</a></li>
@@ -244,11 +295,10 @@
 </section>
 
 {% if own_comments %}
-<section>
+<section class="TabSection" id="Comments">
   <hr class="hr12">
   <div class="flex-greybox">
     <h1>Your Comments</h1>
-    <button id="mycommentsbutton">View/hide your comments</button>
   </div>
   <div id="mycommentslist">
     <ul>
@@ -261,11 +311,10 @@
 {% endif %}
 
 {% if own_authorreplies %}
-<section>
+<section class="TabSection" id="AuthorReplies">
   <hr class="hr12">
   <div class="flex-greybox">
     <h1>Your Author Replies</h1>
-    <button id="myauthorrepliesbutton">View/hide your author replies</button>
   </div>
   <div id="myauthorreplieslist">
     <ul>
-- 
GitLab