Folder management with datasheet list
authorcavaliet
Wed, 18 Jun 2014 13:26:02 +0200
changeset 276 f473bed524cd
parent 275 b2eb3e9e6956
child 277 503a52030854
Folder management with datasheet list
src/hdabo/static/hdabo/css/style.css
src/hdabo/static/hdabo/js/folders.js
src/hdabo/templates/add_or_update_folder.html
src/hdabo/templates/folders.html
src/hdabo/templates/partial/search_datasheet_for_folders.html
src/hdabo/urls.py
src/hdabo/views.py
--- a/src/hdabo/static/hdabo/css/style.css	Tue Jun 17 16:07:40 2014 +0200
+++ b/src/hdabo/static/hdabo/css/style.css	Wed Jun 18 13:26:02 2014 +0200
@@ -423,4 +423,11 @@
 }
 textarea.folder-input{
     height: 120px;
+}
+.remove-ds-from-folder{
+	font-weight: bold;
+	color: #50a4a3;
+}
+.remove-ds-from-folder:hover{
+    color: #4F5155;
 }
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/static/hdabo/js/folders.js	Wed Jun 18 13:26:02 2014 +0200
@@ -0,0 +1,56 @@
+// -*- coding: utf-8 -*-
+$(document).ready(function(){
+    
+    $("form").bind("keypress", function (e) {
+        if (e.keyCode == 13) {
+            return false;
+        }
+    });
+    
+    $(".remove-ds-from-folder").live( "click", function(e) {
+        var li = e.target.parentNode;
+        var dsid = li.getAttribute("data-dsid");
+        var list = $("#ds_ids").val().split(",");
+        var index = list.indexOf(dsid);
+        if (index > -1) {
+            list.splice(index, 1);
+            li.parentNode.removeChild(li);
+        }
+        $("#ds_ids").val( list.join(",") );
+    });
+    
+    function loadDatasheets(url, data){
+        $.ajax({
+            url: url,
+            type: 'GET',
+            data: data,
+            // bug with jquery >= 1.5, "json" adds a callback so we don't specify dataType
+            //dataType: 'json',
+            success: function(msg, textStatus, XMLHttpRequest) {
+                $('#ds-search-list').html(msg);
+                $(".ajax-link").click(function(e){
+                    e.preventDefault();
+                    loadDatasheets(e.target.getAttribute("href"));
+                });
+                $(".result_link").click(function(e){
+                    var dsid = e.target.getAttribute("data-dsid");
+                    // add datasheet id to the folder's list
+                    $("#ds_ids").val( $("#ds_ids").val() + (($("#ds_ids").val()=="") ? "" : ",") + dsid );
+                    // add datasheet id to the folder's list
+                    var newds = $("#ds-list").append('<li data-dsid="' + dsid + '">' + e.target.innerHTML + ' <span class="remove-ds-from-folder hand_cursor">X</span></li>');
+                });
+            },
+            error: function(jqXHR, textStatus, errorThrown) {
+                resp = $.parseJSON(jqXHR.responseText);
+                alert(resp.message);
+            }
+        });
+    }
+    
+    $("#ok_search").click(function(){
+        if($("#ds-search").val()!=""){
+            loadDatasheets(search_url, { q:$('#ds-search').val() });
+        }
+    });
+    
+});
--- a/src/hdabo/templates/add_or_update_folder.html	Tue Jun 17 16:07:40 2014 +0200
+++ b/src/hdabo/templates/add_or_update_folder.html	Wed Jun 18 13:26:02 2014 +0200
@@ -1,14 +1,43 @@
 {% extends "hdabo_base.html" %}
 {% block title %}HDA - BO : Créer ou modifier un dossier{% endblock %}
-    
+
+{% block js_import %}
+{{block.super}}
+<script type="text/javascript" src="{{STATIC_URL}}hdabo/js/folders.js"></script>
+{% endblock %}
+
+{% block js_declaration %}
+    {{block.super}}
+    <script type="text/javascript">
+    var global_csrf_token = "{{ csrf_token }}";
+    var static_url = "{{STATIC_URL}}";
+    var search_url = "{% url 'searchajax' %}";
+    </script>
+{% endblock %}
+
 {% block content %}
 {{block.super}}
-<form method="POST" action="{% url 'add_or_update_folder' %}">
+<form class="folder-form" method="POST" action="{% url 'add_or_update_folder' %}" autocomplete="off">
 {% csrf_token %}
-<input type="hidden" name="pk" value="{% if folder %}{{folder.pk}}{% endif %}" />
-<p>Url (adresse de la page sur le portail Histoire de Arts)&nbsp;:<br/><input class="folder-input" type="text" name="url" value="{% if folder %}{{folder.url}}{% endif %}"/></p>
+{% if folder %}<input type="hidden" name="pk" value="{{folder.pk}}" />{% endif %}
+<p>Url (adresse de la page sur le portail Histoire de Arts)&nbsp;:<br/>
+  <input class="folder-input" type="text" name="url" value="{% if folder %}{{folder.url}}{% endif %}" required="required"/>
+</p>
 <p>Titre&nbsp;:<br/><input class="folder-input" type="text" name="title" value="{% if folder %}{{folder.title}}{% endif %}"/></p>
 <p>Description&nbsp;:<br/><textarea class="folder-input" name="description">{% if folder %}{{folder.description}}{% endif %}</textarea></p>
+<p>&nbsp;</p>
+<p>Liste des fiches associées au dossier&nbsp;:</p>
+<input type="hidden" name="ds_ids" id="ds_ids" value="{% if folder %}{% for d in folder.datasheets.all %}{{ d.pk }},{% endfor %}{% endif %}" />
+<ul id="ds-list">
+  {% if folder %}{% for d in folder.datasheets.all %}
+    <li data-dsid="{{ d.pk }}">{{ d.title }} <span class="remove-ds-from-folder hand_cursor">X</span></li>
+  {% endfor %}{% endif %}
+</ul>
+<p>Rechercher dans les fiches existantes (cliquez sur un résultat pour l'ajouter)&nbsp;:</p>
+<p><input type="text" id="ds-search" value=""/> <span id="ok_search" class="hand_cursor"><b>OK</b></span>
+<div id="ds-search-list"></div>
+<p>&nbsp;</p>
+<p>&nbsp;</p>
 <button type="submit">Envoyer</button>
 </form>
 {% endblock %}
--- a/src/hdabo/templates/folders.html	Tue Jun 17 16:07:40 2014 +0200
+++ b/src/hdabo/templates/folders.html	Wed Jun 18 13:26:02 2014 +0200
@@ -19,13 +19,7 @@
         <td><a href="{{f.url}}" title="{{f.url}}" target="_blank">{{f.url|short_url}}</a></td>
         <td>{{f.title}}</td>
         <td>{{f.description}}</td>
-        <td>
-            <ul>
-            {% for d in f.datasheets.all %}
-                <li></li>
-            {% endfor %}
-            </ul>
-        </td>
+        <td><ul>{% for d in f.datasheets.all %}<li>{{ d.title }}</li>{% endfor %}</ul></td>
         <td class="text_centered"><a href="{% url 'add_or_update_folder' folder_pk=f.pk %}"><img src="{{STATIC_URL}}hdabo/img/pen.png"/></a></td>
         <td class="text_centered"><a href="#"><img src="{{STATIC_URL}}hdabo/img/tag_remove.png"/></a></td>
     </tr>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdabo/templates/partial/search_datasheet_for_folders.html	Wed Jun 18 13:26:02 2014 +0200
@@ -0,0 +1,21 @@
+{% if query %}
+  <p>Page {{page.number}}/{{paginator.num_pages}}</p>
+  <ul>
+  {% for result in page.object_list %}
+    <li><a class="result_link hand_cursor" data-dsid="{{ result.object.pk }}">{{ result.object.title }}</a></li>
+  {% endfor %}
+  </ul>
+  {% if page.has_previous or page.has_next %}
+  <div id="search_prev_next">                    
+    {% if page.has_previous %}
+      <a class="ajax-link" href="{% url 'searchajax' %}?q={{ query }}&amp;page={{ page.previous_page_number }}">{% endif %}&laquo; Prec.{% if page.has_previous %}</a>
+    {% endif %}
+    |
+    {% if page.has_next %}
+      <a class="ajax-link" href="{% url 'searchajax' %}?q={{ query }}&amp;page={{ page.next_page_number }}">{% endif %}Suiv. &raquo;{% if page.has_next %}</a>
+    {% endif %}
+  </div>
+  {% endif %}
+{% else %}
+  <p>Aucun résultat.</p>
+{% endif %}
--- a/src/hdabo/urls.py	Tue Jun 17 16:07:40 2014 +0200
+++ b/src/hdabo/urls.py	Wed Jun 18 13:26:02 2014 +0200
@@ -1,7 +1,7 @@
 from django.conf.urls import patterns, include, url
 from django.contrib import admin
 from django.contrib.auth import urls as auth_url
-from .views import AddOrUpdateFolder, Folders
+from .views import AddOrUpdateFolder, Folders, SearchDatasheet
 
 
 # Uncomment the next two lines to enable the admin:
@@ -49,4 +49,5 @@
     url(r'^folders/$', Folders.as_view(), name='folders'),
     url(r'^folder/$', AddOrUpdateFolder.as_view(), name='add_or_update_folder'),
     url(r'^folder/(?P<folder_pk>[\w-]+)$', AddOrUpdateFolder.as_view(), name='add_or_update_folder'),
+    url(r'^searchajax/$', SearchDatasheet(), name='searchajax'),
 )
--- a/src/hdabo/views.py	Tue Jun 17 16:07:40 2014 +0200
+++ b/src/hdabo/views.py	Wed Jun 18 13:26:02 2014 +0200
@@ -18,6 +18,7 @@
 import django.utils.simplejson as json
 import re
 from django.views.generic.base import TemplateView, View
+from haystack.views import SearchView
 
 
 @login_required
@@ -613,10 +614,22 @@
         folder.url = request.POST["url"]
         folder.title = request.POST["title"]
         folder.description = request.POST["description"]
+        
+        if "ds_ids" in request.POST and request.POST["ds_ids"]!="":
+            ds_ids = request.POST["ds_ids"].split(",")
+            ds_ids = filter(None, ds_ids) # fastest
+            folder.datasheets = Datasheet.objects.filter(pk__in=ds_ids)
+        
         folder.save()
         
         return redirect('folders')
 
 
 
+class SearchDatasheet(SearchView):
+    
+    template = "partial/search_datasheet_for_folders.html"
 
+
+
+