--- 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) :<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) :<br/>
+ <input class="folder-input" type="text" name="url" value="{% if folder %}{{folder.url}}{% endif %}" required="required"/>
+</p>
<p>Titre :<br/><input class="folder-input" type="text" name="title" value="{% if folder %}{{folder.title}}{% endif %}"/></p>
<p>Description :<br/><textarea class="folder-input" name="description">{% if folder %}{{folder.description}}{% endif %}</textarea></p>
+<p> </p>
+<p>Liste des fiches associées au dossier :</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) :</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> </p>
+<p> </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 }}&page={{ page.previous_page_number }}">{% endif %}« Prec.{% if page.has_previous %}</a>
+ {% endif %}
+ |
+ {% if page.has_next %}
+ <a class="ajax-link" href="{% url 'searchajax' %}?q={{ query }}&page={{ page.next_page_number }}">{% endif %}Suiv. »{% 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"
+
+
+