Starting on the course detail page
authorCharles Connell <charles@connells.org>
Mon, 10 Mar 2014 02:19:09 +0000 (22:19 -0400)
committerCharles Connell <charles@connells.org>
Mon, 10 Mar 2014 02:19:19 +0000 (22:19 -0400)
karmaworld/apps/courses/views.py
karmaworld/apps/users/models.py
karmaworld/assets/css/note_course_pages.css
karmaworld/assets/js/add-course.js
karmaworld/assets/js/course-detail.js
karmaworld/assets/js/course.js
karmaworld/templates/courses/course_detail.html
karmaworld/templates/footer.html

index 211471ed07cb95fb7cedd68daea005a018958628..d7ecef62d90b17e7d366fd997599fe7d30a383d4 100644 (file)
@@ -208,6 +208,7 @@ def flag_course(request, pk):
     """Record that somebody has flagged a note."""
     return ajax_increment(Course, request, pk, FLAG_FIELD, USER_PROFILE_FLAGS_FIELD, process_course_flag_events)
 
+
 def edit_course(request, pk):
     """
     Saves the edited course content
index f4a329dff719fced9b5e792b0f47c9734be14299..7816b61047300856e7feb112d7185893860a8aab 100644 (file)
@@ -23,9 +23,9 @@ class UserProfileManager(models.Manager):
 
 class UserProfile(models.Model):
     user = models.OneToOneField(User)
-    thanked_notes = models.ManyToManyField('notes.Note', related_name='users_thanked')
-    flagged_notes = models.ManyToManyField('notes.Note', related_name='users_flagged')
-    flagged_courses = models.ManyToManyField('courses.Course', related_name='users_flagged')
+    thanked_notes = models.ManyToManyField('notes.Note', related_name='users_thanked', blank=True, null=True)
+    flagged_notes = models.ManyToManyField('notes.Note', related_name='users_flagged', blank=True, null=True)
+    flagged_courses = models.ManyToManyField('courses.Course', related_name='users_flagged', blank=True, null=True)
     school = models.ForeignKey(School, blank=True, null=True)
 
     def natural_key(self):
@@ -41,7 +41,10 @@ class UserProfile(models.Model):
         return sum
 
     def can_edit_items(self):
-        return (self.get_points() >= 20)
+        if self.user.is_staff:
+            return True
+        else:
+            return (self.get_points() >= 20)
 
     NO_BADGE = 0
     PROSPECT = 1
index c23bedd34d3041c440ab1baf54abebd872918d4a..8245fdc19345d2bb00e4709a01557cbbfc838278 100644 (file)
-/* NOTE PAGE */
 
-#note_header
+span.course-header-school
 {
-  padding-bottom: 20px;
-  margin-bottom: 20px;
+  font-weight: bold;
 }
 
-#note_back_to_course img
+#course-header-name
 {
-  margin-bottom: -1px;
-  margin-right: 3px;
+  font-size: 1.8em;
 }
 
-#note_status, #note_pedigree, #note_tags
+#course-header
 {
-  text-align: center;
-  padding-top: 10px;
-  padding-bottom: 10px;
+  line-height: 2em;
+  margin: 20px 0 0 0;
 }
 
-#note_author
+#end-header
 {
-  font-family: "MuseoSans-900";
-  font-size: 10px;
-  text-align: center;
-  text-transform: uppercase;
-}
-
-#note_author a, #note_author a:hover
-{
-  text-decoration: underline;
-  color: #555555;
-  font-family: "MuseoSlab-900";
-  font-size: 11px;
-}
-
-#note_actions
-{
-  padding-top: 22px;
-  padding-bottom: 17px;
-}
-
-#note_actions .column
-{
-  text-align: center;
-}
-
-#note_container
-{
-  padding-bottom: 45px;
-}
-
-#note-buttons {
-  padding-bottom: 10px;
-}
-
-#zoom-buttons {
-  margin-bottom: 20px;
-}
-
-.zoom-button {
-  cursor: pointer;
-  margin-right: 10px;
-}
-
-#thank-button-disabled,
-#flag-button-disabled
-{
-  cursor: default;
-}
-
-/* COURSES */
-
-#course_meta, #school_meta, #course_link
-{
-  text-align: center;
-}
-
-#course_actions, #school_actions
-{
-  padding-top: 15px;
-  padding-bottom: 17px;
-}
-
-#course_meta_action_gear, #school_meta_action_gear
-{
-  text-align: center;
-}
-
-.course_meta_action, .school_meta_action
-{
-  margin: 1px auto 0;
-}
-
-#course_description
-{
-  text-align: center;
-  font-family: "MuseoSlab-500";
-  font-size: 12px;
-  line-height: 150%;
-  padding-bottom: 15px;
-}
-
-#course_container, #school_container
-{
-  padding-top: 45px;
-}
-
-#course_header
-{
-  padding-bottom: 20px;
-  margin-bottom: 20px;
-}
-
-.tag-span:after
-{
-  content: ', ';
-}
-
-.tag-span:last-child:after
-{
-  content: '';
-}
-
-#note_tags_form
-{
-  text-align: center;
-}
-
-#note_tags_input
-{
-  margin-left: 25%;
-  width: 50%;
-}
+  margin-top: 20px;
+  border-bottom: 1px solid black;
+}
\ No newline at end of file
index 7be82b02920ac1366b1c07a600a2090467c25d74..25a4f3f3d662815a0d829fb88d3e9cfff294816c 100644 (file)
@@ -34,7 +34,7 @@ $(function() {
     autoOpen: false,
     modal: true,
     show: { effect: 'fade', duration: 500 },
-    width: 700
+    width: dialogWidth
   });
 
   if (jump_to_form) {
index d50fb2a36a5a18d03ccc19a7abddc8fca659aa9f..d119eb26d4f862b02818e9ce02c30603dd056b48 100644 (file)
@@ -20,8 +20,15 @@ $(function() {
     }
   });
 
+  $('#edit-course-form').dialog({
+    autoOpen: false,
+    modal: true,
+    show: { effect: 'fade', duration: 500 },
+    width: dialogWidth
+  });
+
   $('#edit-button').click(function(event) {
-    $('#edit-course-form').slideToggle();
+    $('#edit-course-form').dialog("open");
   });
 
   $('#edit-save-btn').click(function(event) {
index b0ddc762fc05c9feee7caf8120b46b68d9ac9661..26c43387702351d3a15f3cb0ad086eedb47fa708 100644 (file)
@@ -56,3 +56,10 @@ window.KARMAWORLD.Course = {
     $("#id_instructor_name").autocomplete(opts);
   }
 };
+
+var bodyWidth = $('body').width();
+if (bodyWidth < 700) {
+  var dialogWidth = bodyWidth;
+} else {
+  var dialogWidth = 700;
+}
\ No newline at end of file
index abb97875500dbb0208d389458c1472be0123ebe9..7fd63d3efc2f9376dc53219c89324fb09c055e88 100644 (file)
@@ -7,7 +7,6 @@
   <script src="{{ STATIC_URL }}js/setup-ajax.js"></script>
   <script src="{{ STATIC_URL }}js/course.js"></script>
   <script src="{{ STATIC_URL }}js/course-detail.js" ></script>
-  <script src="{{ STATIC_URL }}js/jquery.dataTables.min.js" ></script>
   <script>
     var json_school_course_list = "{% url 'json_school_course_list' %}";
     var json_school_course_instructor_list = "{% url 'json_school_course_instructor_list' %}";
@@ -19,8 +18,6 @@
 
 {% block pagestyle %}
   <link rel="stylesheet" type="text/css" media="all" href="{{ STATIC_URL }}css/note_course_pages.css">
-  <link rel="stylesheet" type="text/css" media="all" href="{{ STATIC_URL }}css/data_table_list.css">
-  <link rel="stylesheet" type="text/css" media="all" href="{{ STATIC_URL }}css/datatables-css/jquery.dataTables.css">
 {% endblock %}
 
 
 {% block content %}
   <section id="course_content">
 
-    <div id="course_header" class="hero_gradient_bar">
+    <div id="course-header">
       <div class="row">
-        <div id="course_name" class="small-12 columns header_title">
-          {{ course.name }}
-        </div><!-- /course_name -->
-      </div>
-
-      <div class="row">
-        <div id="course_meta" class="twelve columns">
-          <div class="activity_details_context">
-            <span id="course_instructor_name">{{ course.instructor_name }}</span>
-            <span id="course_department">{% if course.department %}// {{ course.department.name }}{% endif %}</span>
-          </div><!-- /activity_details_context -->
-        </div><!-- /course_meta -->
+        <div class="small-12 columns">
+          <span class="course-header-school">{{ course.school.name }}</span>&nbsp;&nbsp;&bull;&nbsp;&nbsp;
+          {% if course.department %}<span class="course-header-department">{{ course.department.name }}</span>&nbsp;&nbsp;&bull;&nbsp;&nbsp;{% endif %}
+          <span class="course-header-instructor">{{ course.instructor_name }}</span>
+        </div>
       </div>
 
       <div class="row">
-        <div id="course_meta" class="twelve columns">
-          <div class="activity_details_context">
-            {{ course.school.name }}
-          </div><!-- /activity_details_context -->
-        </div><!-- /course_meta -->
+        <div class="small-12 columns">
+          <span id="course-header-name">{{ course.name }}</span>
+
+          &nbsp;&nbsp;
+
+          {% if user.is_authenticated %}
+            {% if user.get_profile.can_edit_items %}
+              <i id="edit-button" class="fa fa-edit"></i>
+            {% endif %}
+
+            {% if already_flagged %}
+              <i class="fa fa-flag"></i> You have reported this course as inappropriate
+            {% else %}
+              <i class="fa fa-flag" id="flag-button"></i> Report course as inappropriate
+            {% endif %}
+          {% else %}
+            <i class="fa fa-flag"></i> Log in to flag a course as inappropraite
+          {% endif %}
+        </div>
       </div>
 
       <div class="row {% if not course.url %}hide{% endif %}">
-        <div id="course_link" class="twelve columns">
-          <div class="activity_details_context">
-            <a id="course_url" rel="nofollow" target="_blank" href="{{ course.url }}">
-              {{ course.url|slice:":50" }}
-              <i class="fa fa-external-link-square"></i>
-            </a>
-          </div><!-- /activity_details_context -->
-        </div><!-- /course_meta -->
+        <div id="course_link" class="small-12 columns">
+          <a id="course_url" rel="nofollow" target="_blank" href="{{ course.url }}">
+            {{ course.url|slice:":50" }}
+            <i class="fa fa-external-link-square"></i>
+          </a>
+        </div>
       </div>
 
-      <div class="row">
-        <div id="course_actions" class="large-3 medium-6 small-12 columns small-centered">
-          <div class="row">
-            <div class="small-12 column center">
-              {% if user.is_authenticated %}
-                {% if user.get_profile.can_edit_items %}
-                  <a href="#" id="edit-button"><img src="{{ STATIC_URL }}img/edit.png" alt="edit_flag" width="25" height="35"/></a>
-                {% endif %}
-
-                {% if already_flagged %}
-                  <img src="{{ STATIC_URL }}img/note_flag_disabled.png"
-                       alt="course_flag"
-                       width="25" height="35"
-                       data-ot="You've already flagged this course"
-                       {% include 'partial/opentip_settings.html' %}
-                       class="opentip" />
-                {% else %}
-                  <a href="#" id="flag-button">
-                    <img src="{{ STATIC_URL }}img/note_flag.png" alt="course_flag" width="25" height="35" />
-                  </a>
-                {% endif %}
-              {% else %}
-                <img src="{{ STATIC_URL }}img/note_flag_disabled.png"
-                     alt="course_flag"
-                     width="25" height="35"
-                     data-ot="You need to log in to flag a course"
-                     {% include 'partial/opentip_settings.html' %}
-                     class="opentip" />
-              {% endif %}
-              <a href="#" id="flag-button-disabled" class="hide">
-                <img src="{{ STATIC_URL }}img/note_flag_disabled.png" alt="course_flag" width="25" height="35" />
-              </a>
-            </div>
-          </div>
-        </div><!-- /course_actions -->
+      <div id="end-header" class="row">
       </div>
+
     </div><!-- /course_header -->
 
     {% if user.get_profile.can_edit_items %}
-      <section id="edit-course-form">
+      <section id="edit-course-form" class="hide">
         <form>
           {% csrf_token %}
 
 
           <div class="row hide">
             <div class="small-12 columns">
-              <legend>School</legend>
+              <label for="id_school">School</label>
               <div>
                 <input id="id_school" value="{{ course.school.id }}" name="school" type='hidden'/>
               </div>
 
           <div class="row">
             <div class="small-12 columns">
-              <legend>Course Name:</legend>
+              <label for="id_name">Course Name:</label>
               <input id="id_name" class="" type="text" name="name" maxlength="255" value="{{ course.name }}"/>
             </div>
           </div> <!-- .row -->
 
           <div class="row">
             <div class="small-12 columns large-6">
-              <legend>Instructor Name:</legend>
+              <label for="id_instructor_name">Instructor Name:</label>
               <input id="id_instructor_name" class="" type="text" name="instructor_name" maxlength="75" value="{{ course.instructor_name }}"/>
             </div>
 
             <div class="small-12 columns large-6">
-              <legend>Instructor Email:</legend>
+              <label for="id_instructor_email">Instructor Email:</label>
               <input id="id_instructor_email" class="" type="text" name="instructor_email" maxlength="75" value="{{ course.instructor_email }}"/>
             </div>
           </div> <!-- .row -->
 
           <div class="row">
             <div class="small-12 columns">
-              <legend>Course url:</legend>
+              <label for="id_url">Course url:</label>
               <input id="id_url" class="" type="text" name="url" maxlength="255" value="{{ course.url }}"/>
             </div>
           </div> <!-- .row -->
       </section>
     {% endif %}
 
+    <div id="course-search-bar" class="row">
+    <div class="small-12 columns">
+      <button id="add-course-btn" class="add-course">Add a Course</button>
+      <input class="search-courses" type="text" placeholder="Search Courses" />
+      <div id="course-sort-wrapper">
+        Sort By
+        <select class="course-sort">
+          <option value="0">Date</option>
+          <option value="1">Number of Notes</option>
+          <option value="2" selected>Popularity</option>
+        </select>
+      </div>
+    </div>
+  </div>
+
+
     <div class="row">
       <div class="small-10 columns small-offset-1"> <hr/> </div>
     </div>
index 572c55bf655b9310c8bf52007b9d2a415ddd631f..331cbf37d23501fa221562d479926ff657810f23 100644 (file)
@@ -2,17 +2,17 @@
 
 <footer id="global_footer">
   <div class="row">
-    <div id="footer-links-container" class="small-10 columns small-offset-1">
+    <div id="footer-links-container" class="small-12 columns">
       <a href="{% url 'about' %}">About</a>&nbsp;|&nbsp;<a href="{% url 'terms' %}">Terms</a>&nbsp;|&nbsp;<a href="https://github.com/FinalsClub/karmaworld">Code</a>&nbsp;|&nbsp;<a href="http://www.reddit.com/r/KarmaNotes/">Discussion</a>&nbsp;<!--|&nbsp;<a href="#">Donate</a>-->
     </div><!--/footer_links_container-->
   </div>
   
   <div class="row">
-    <div id="colophon" class="">
-      <div class="small-2 columns large-1 large-offset-1">
+    <div id="colophon">
+      <div class="small-2 columns large-1">
         <img src="{{ STATIC_URL }}img/global_footer_cc_logo.png" id="cc_logo" alt="global_footer_cc_logo" width="30" height="30" align="left"/>
       </div>
-      <div class="small-8 columns end">
+      <div class="small-10 columns end">
         Unless otherwise noted, all content on this site is licensed under a <a href="http://creativecommons.org/licenses/by-sa/3.0/us/">Creative Commons</a> Attribution-ShareAlike 3.0 Unported License.<br>
         <a href="/">KarmaNotes.org</a> is a non-profit project brought to you by the <a href="http://finalsclub.org">Finals Club Foundation</a>.
       </div>