folder management from hdalab : first step
authorcavaliet
Wed, 03 Sep 2014 16:43:52 +0200
changeset 327 3684db1579ff
parent 326 fc8961398609
child 328 7040f6533c42
folder management from hdalab : first step
.settings/org.eclipse.core.resources.prefs
src/hdabo/views.py
src/hdalab/settings.py
src/hdalab/static/hdalab/css/profile.css
src/hdalab/static/hdalab/js/folders.js
src/hdalab/templates/editorial/add_or_update_folder.html
src/hdalab/templates/editorial/folders.html
src/hdalab/urls.py
src/hdalab/views/editorial.py
--- a/.settings/org.eclipse.core.resources.prefs	Tue Sep 02 17:55:25 2014 +0200
+++ b/.settings/org.eclipse.core.resources.prefs	Wed Sep 03 16:43:52 2014 +0200
@@ -48,6 +48,7 @@
 encoding//src/hdalab/urls.py=utf-8
 encoding//src/hdalab/utils.py=utf-8
 encoding//src/hdalab/views/ajax.py=utf-8
+encoding//src/hdalab/views/editorial.py=utf-8
 encoding//src/hdalab/views/pages.py=utf-8
 encoding//src/hdalab/views/profile.py=utf-8
 encoding//web/hdalab/config.py=utf-8
--- a/src/hdabo/views.py	Tue Sep 02 17:55:25 2014 +0200
+++ b/src/hdabo/views.py	Wed Sep 03 16:43:52 2014 +0200
@@ -598,6 +598,7 @@
 class AddOrUpdateFolder(TemplateView):
     
     template_name = "add_or_update_folder.html"
+    redirect_view = 'folders'
     
     def get(self, request, folder_pk=None):
         folder = None
@@ -623,7 +624,7 @@
         
         folder.save()
         
-        return redirect('folders')
+        return redirect(self.redirect_view)
 
 
 
@@ -670,6 +671,7 @@
 
 
 class DeleteFolder(View):
+    redirect_view = 'folders'
     
     def get(self, request, folder_pk=None):
         folder = None
@@ -677,7 +679,7 @@
             folder = get_object_or_404(Folder, pk=folder_pk)
             folder.delete()
             
-        return redirect('folders')
+        return redirect(self.redirect_view)
 
 
 
--- a/src/hdalab/settings.py	Tue Sep 02 17:55:25 2014 +0200
+++ b/src/hdalab/settings.py	Wed Sep 03 16:43:52 2014 +0200
@@ -167,5 +167,5 @@
 if 'LOGIN_REDIRECT_URL' not in locals():
     LOGIN_REDIRECT_URL = BASE_URL + "hdabo"
 if 'LOGIN_URL' not in locals():
-    LOGIN_URL = BASE_URL + "hdabo/accounts/login"
+    LOGIN_URL = BASE_URL + "hdalab/hdabo/accounts/login"
 
--- a/src/hdalab/static/hdalab/css/profile.css	Tue Sep 02 17:55:25 2014 +0200
+++ b/src/hdalab/static/hdalab/css/profile.css	Wed Sep 03 16:43:52 2014 +0200
@@ -29,4 +29,26 @@
 }
 .headerSortDown{
     background-image:url('../img/desc.gif');
+}
+
+/* editorialisation part */
+.hand_cursor {
+    cursor: pointer;
+}
+
+.folder-input{
+    width: 500px;
+}
+textarea.folder-input{
+    height: 120px;
+}
+.remove-ds-from-folder{
+    font-weight: bold;
+    color: #50a4a3;
+}
+.remove-ds-from-folder:hover{
+    color: #4F5155;
+}
+td.list{
+    padding-left: 18px !important;
 }
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/static/hdalab/js/folders.js	Wed Sep 03 16:43:52 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").on( "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() });
+        }
+    });
+    
+});
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/templates/editorial/add_or_update_folder.html	Wed Sep 03 16:43:52 2014 +0200
@@ -0,0 +1,44 @@
+{% extends "base.html" %}
+{% load static %}
+{% block title %}Hdalab - Éditorialisation : Créer ou modifier un dossier{% endblock %}
+
+{% block css_import %}
+{{block.super}}
+<link rel="stylesheet" type="text/css" href="{% static 'hdalab/css/profile.css' %}" />
+{% endblock %}
+
+{% block js_import %}
+{{block.super}}
+<script type="text/javascript" src="{% static 'hdalab/js/folders.js' %}"></script>
+<script type="text/javascript">
+    var global_csrf_token = "{{ csrf_token }}";
+    var static_url = "{% static '' %}";
+    var search_url = "{% url 'searchajax' %}";
+</script>
+{% endblock %}
+
+{% block main_content %}
+<form class="folder-form" method="POST" action="{% url 'hdalab_add_or_update_folder' %}" autocomplete="off">
+{% csrf_token %}
+{% 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 %}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/templates/editorial/folders.html	Wed Sep 03 16:43:52 2014 +0200
@@ -0,0 +1,33 @@
+{% extends "base.html" %}
+{% load static %}
+{% load hdabo_tags %}
+{% block title %}HdaLab - Éditorialisation : Tous les dossiers{% endblock %}
+
+{% block css_import %}
+{{block.super}}
+<link rel="stylesheet" type="text/css" href="{% static 'hdalab/css/profile.css' %}" />
+{% endblock %}
+
+{% block main_content %}
+<p><a href="{% url 'add_or_update_folder' %}">Nouveau dossier</a></p>
+<table>
+    <tr class="border_bottom">
+	    <th>Url</th>
+	    <th>Titre</th>
+	    <th>Description</th>
+	    <th>Liste</th>
+	    <th>Éditer</th>
+	    <th>Effacer</th>
+    </tr>
+    {% for f in folders %}
+    <tr class="border_bottom">
+        <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 class="list"><ul>{% for d in f.datasheets.all %}<li>{{ d.title }}</li>{% endfor %}</ul></td>
+        <td class="text_centered"><a href="{% url 'hdalab_add_or_update_folder' folder_pk=f.pk %}"><img src="{% static 'hdabo/img/pen.png' %}"/></a></td>
+        <td class="text_centered"><a class="" href="{% url 'hdalab_delete_folder' folder_pk=f.pk %}" onclick="return confirm('Êtes-vous sûr(e) ? Cette action est définitive.')"><img src="{% static 'hdabo/img/tag_remove.png' %}"/></a></td>
+    </tr>
+    {% endfor %}
+</table>
+{% endblock %}
--- a/src/hdalab/urls.py	Tue Sep 02 17:55:25 2014 +0200
+++ b/src/hdalab/urls.py	Wed Sep 03 16:43:52 2014 +0200
@@ -4,6 +4,8 @@
 from hdalab.views.profile import ProfileHome, RenkanEdit, HdalabRenkanGetPut,\
     RenkanNew, RenkanPublicList, HdalabRenkanCopy, HdalabRenkanDelete
 from django.contrib.auth.decorators import login_required
+from hdalab.views.editorial import HdalabFolders, HdalabAddOrUpdateFolder,\
+    HdalabDeleteFolder
 
 # Uncomment the next two lines to enable the admin:
 # from django.contrib import admin
@@ -42,6 +44,10 @@
     url(r'^renkan/public/$', RenkanPublicList.as_view(), name='renkan_public_list'),
     url(r'^ajaxlogin/$', "hdalab.views.profile.ajax_login", name='ajax_login'),
     url(r'^ajaxloginok/$', TemplateView.as_view(template_name="ajax_identification/ajax_login_ok.html"), name='ajax_login_ok'),
+    url(r'^edito/folders/$', login_required(HdalabFolders.as_view()), name='hdalab_folders'),
+    url(r'^edito/folder/$', login_required(HdalabAddOrUpdateFolder.as_view()), name='hdalab_add_or_update_folder'),
+    url(r'^edito/folder/(?P<folder_pk>[\w-]+)$', login_required(HdalabAddOrUpdateFolder.as_view()), name='hdalab_add_or_update_folder'),
+    url(r'^edito/deletefolder/(?P<folder_pk>[\w-]+)$', login_required(HdalabDeleteFolder.as_view()), name='hdalab_delete_folder'),
 
 )
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hdalab/views/editorial.py	Wed Sep 03 16:43:52 2014 +0200
@@ -0,0 +1,33 @@
+# -*- coding: utf-8 -*-
+'''
+Created on Jul 01, 2014
+
+@author: tc
+'''
+
+#from datetime import datetime
+from django.conf import settings
+from django.shortcuts import get_object_or_404, redirect
+#from django.views.generic import TemplateView, View
+from hdabo.models import Folder
+from hdabo.views import Folders, AddOrUpdateFolder, SearchDatasheet,\
+    DeleteFolder
+
+
+import logging
+logger = logging.getLogger(__name__)
+
+
+class HdalabFolders(Folders):
+    template_name = "editorial/folders.html"
+
+
+
+class HdalabAddOrUpdateFolder(AddOrUpdateFolder):
+    template_name = "editorial/add_or_update_folder.html"
+    redirect_view = 'hdalab_folders'
+
+
+
+class HdalabDeleteFolder(DeleteFolder):
+    redirect_view = 'hdalab_folders'
\ No newline at end of file