# HG changeset patch # User cavaliet # Date 1337960840 -7200 # Node ID 94429061bbfa255210a8bd1fa1f58a120afbb8e4 # Parent 49e6b1148a7abf83b79ac21a392af284b607bbb4 First step of pagination for contents and projet in workspace home. diff -r 49e6b1148a7a -r 94429061bbfa src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/contentslist.html --- a/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/contentslist.html Wed May 23 17:32:08 2012 +0200 +++ b/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/contentslist.html Fri May 25 17:47:20 2012 +0200 @@ -1,5 +1,22 @@ {% load i18n %} {% load thumbnail %} +{% load front_tags %} + +{% if nb_ct_pages %} +

+ {% if 0 < current_content_page %}<<  {% endif %} + {% for i in nb_ct_pages|get_range %} + {% if i == current_content_page %} + {{i|add:'1'}} + {% else %} + {{i|add:'1'}} + {% endif %} +    + {% endfor %} + {% if current_content_page|add:'1' < nb_ct_pages %}>>{% endif %} + +

+{% endif %}
{% trans "name" %}
diff -r 49e6b1148a7a -r 94429061bbfa src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/projectslist.html --- a/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/projectslist.html Wed May 23 17:32:08 2012 +0200 +++ b/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/projectslist.html Fri May 25 17:47:20 2012 +0200 @@ -1,5 +1,22 @@ {% load i18n %} {% load thumbnail %} +{% load front_tags %} + +{% if nb_pj_pages %} +

+ {% if 0 < current_project_page %}<<  {% endif %} + {% for i in nb_pj_pages|get_range %} + {% if i == current_project_page %} + {{i|add:'1'}} + {% else %} + {{i|add:'1'}} + {% endif %} +    + {% endfor %} + {% if current_project_page|add:'1' < nb_pj_pages %}>>{% endif %} + +

+{% endif %}
{% trans "name" %}
diff -r 49e6b1148a7a -r 94429061bbfa src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/workspace_base.html --- a/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/workspace_base.html Wed May 23 17:32:08 2012 +0200 +++ b/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/workspace_base.html Fri May 25 17:47:20 2012 +0200 @@ -16,11 +16,12 @@ var project_filter_url = "{% url ldt.ldt_utils.views.project.projects_filter filter='__FILTER__' is_owner='true' status='0' %}"; var publish_project_url = "{% url ldt.ldt_utils.views.project.publish '__PROJECT_ID__' %}"; var unpublish_project_url = "{% url ldt.ldt_utils.views.project.unpublish '__PROJECT_ID__' %}"; - +var contents_page_url = "{% url ldt.ldt_utils.views.content.contents_page %}"; +var projects_page_url = "{% url ldt.ldt_utils.views.project.projects_page %}"; +var remember_projects_page = false; function init_events(base_node) { - - init_events_all(base_node, "{% url ldt.ldt_utils.views.workspace.popup_embed %}", content_filter_url, project_filter_url, publish_project_url, unpublish_project_url); + init_events_all(base_node, "{% url ldt.ldt_utils.views.workspace.popup_embed %}", content_filter_url, project_filter_url, publish_project_url, unpublish_project_url, contents_page_url, projects_page_url); } @@ -34,7 +35,7 @@ ]; searchFieldInit(input_list_init); - + init_events(document); }); diff -r 49e6b1148a7a -r 94429061bbfa src/ldt/ldt/ldt_utils/urls.py --- a/src/ldt/ldt/ldt_utils/urls.py Wed May 23 17:32:08 2012 +0200 +++ b/src/ldt/ldt/ldt_utils/urls.py Fri May 25 17:47:20 2012 +0200 @@ -28,6 +28,8 @@ url(r'cljson/idcutting/(?P.*)/(?P.*)$', 'views.json.project_json_cutting_id'), url(r'^rdf/id/(?P.*)$', 'views.rdf.project_annotations_rdf'), url(r'^workspace/?$', "views.workspace.home", name="root-view"), + url(r'^contentspage/$', 'views.content.contents_page'), + url(r'^projectspage/$', 'views.project.projects_page'), url(r'^filterprojects/_(?P[\w\%\_\-\+]*?)/(?Ptrue|false)/(?P\d)$', "views.project.projects_filter",), url(r'^filterprojects/_(?P[\w\%\_\-\+]*?)/(?Ptrue|false)/(?P\d)/(?P.*)$', "views.project.projects_filter",), url(r'^filtercontents/_(?P[\w\%\_\-\+]*?)/$', "views.content.contents_filter",), diff -r 49e6b1148a7a -r 94429061bbfa src/ldt/ldt/ldt_utils/views/content.py --- a/src/ldt/ldt/ldt_utils/views/content.py Wed May 23 17:32:08 2012 +0200 +++ b/src/ldt/ldt/ldt_utils/views/content.py Fri May 25 17:47:20 2012 +0200 @@ -23,6 +23,7 @@ import subprocess import re import datetime +import math def write_content_base(request, iri_id=None): @@ -390,11 +391,33 @@ if filter: content_list = Content.safe_objects.filter(title__icontains=filter) #@UndefinedVariable + content_list = add_change_attr(request.user, content_list) + return render_to_response("ldt/ldt_utils/partial/contentslist.html", + {'contents': content_list, 'nb_ct_pages': None}, + context_instance=RequestContext(request)) else: - content_list = Content.safe_objects.all() #@UndefinedVariable + return contents_page(request) - content_list = add_change_attr(request.user, content_list) + + +@login_required +def contents_page(request): + num_page = 0 + if request.POST.has_key('num_page'): + num_page = int(request.POST["num_page"]) + content_nb, nb_ct_pages, content_list = get_contents_page(num_page, request.user) + + is_gecko = ((request.META['HTTP_USER_AGENT'].lower().find("firefox")) > -1); return render_to_response("ldt/ldt_utils/partial/contentslist.html", - {'contents': content_list}, - context_instance=RequestContext(request)) \ No newline at end of file + {'contents': content_list, 'nb_ct_pages': nb_ct_pages, 'content_nb': content_nb, 'current_content_page':float(num_page), + 'is_gecko': is_gecko + }, + context_instance=RequestContext(request)) + + +def get_contents_page(num_page, user): + content_nb = float(Content.safe_objects.count()) #@UndefinedVariable + nb_ct_pages = int(math.ceil(content_nb / settings.LDT_MAX_CONTENTS_PER_PAGE)) + content_list = add_change_attr(user, Content.safe_objects.all()[(num_page*settings.LDT_MAX_CONTENTS_PER_PAGE):((num_page+1)*settings.LDT_MAX_CONTENTS_PER_PAGE)]) #@UndefinedVariable + return content_nb, nb_ct_pages, content_list diff -r 49e6b1148a7a -r 94429061bbfa src/ldt/ldt/ldt_utils/views/project.py --- a/src/ldt/ldt/ldt_utils/views/project.py Wed May 23 17:32:08 2012 +0200 +++ b/src/ldt/ldt/ldt_utils/views/project.py Fri May 25 17:47:20 2012 +0200 @@ -16,6 +16,7 @@ get_userlist_model) from ldt.user.forms import PictureForm import lxml.etree +import math @login_required def create_ldt_view(request): @@ -219,7 +220,10 @@ if status == 2: url_templ = "ldt/ldt_utils/partial/publishedprojectslist.html" else: - url_templ = "ldt/ldt_utils/partial/projectslist.html" + if filter: + url_templ = "ldt/ldt_utils/partial/projectslist.html" + else: + return projects_page(request) return render_to_response(url_templ, {'projects': project_list, 'show_username':show_username, @@ -238,7 +242,27 @@ ldt.unpublish() return HttpResponse(simplejson.dumps({'res':True, 'ldt': {'id': ldt.id, 'state':ldt.state, 'ldt_id': ldt.ldt_id}}, ensure_ascii=False), mimetype='application/json') - def created_ldt(request): return render_to_response('ldt/ldt_utils/save_done.html', context_instance=RequestContext(request)) + +@login_required +def projects_page(request): + num_page = 0 + if request.POST.has_key('num_page'): + num_page = int(request.POST["num_page"]) + project_nb, nb_pj_pages, project_list = get_projects_page(num_page, request.user) + + is_gecko = ((request.META['HTTP_USER_AGENT'].lower().find("firefox")) > -1); + return render_to_response("ldt/ldt_utils/partial/projectslist.html", + {'projects': project_list, 'nb_pj_pages': nb_pj_pages, 'content_nb': project_nb, 'current_project_page':float(num_page), + 'is_gecko': is_gecko + }, + context_instance=RequestContext(request)) + + +def get_projects_page(num_page, user): + project_nb = float(Project.safe_objects.filter(owner=user).count()) #@UndefinedVariable + nb_pj_pages = int(math.ceil(project_nb / settings.LDT_MAX_PROJECTS_PER_PAGE)) + project_list = add_change_attr(user, Project.safe_objects.filter(owner=user)[(num_page*settings.LDT_MAX_PROJECTS_PER_PAGE):((num_page+1)*settings.LDT_MAX_PROJECTS_PER_PAGE)]) #@UndefinedVariable + return project_nb, nb_pj_pages, project_list diff -r 49e6b1148a7a -r 94429061bbfa src/ldt/ldt/ldt_utils/views/workspace.py --- a/src/ldt/ldt/ldt_utils/views/workspace.py Wed May 23 17:32:08 2012 +0200 +++ b/src/ldt/ldt/ldt_utils/views/workspace.py Fri May 25 17:47:20 2012 +0200 @@ -13,9 +13,11 @@ from ldt.ldt_utils.forms import SearchForm from ldt.ldt_utils.models import Content, Project, Segment from ldt.ldt_utils.utils import boolean_convert +from ldt.ldt_utils.projectserializer import ProjectSerializer +from ldt.ldt_utils.views.content import get_contents_page +from ldt.ldt_utils.views.project import get_projects_page from ldt.security.utils import add_change_attr, get_userlist from lxml.html import fragment_fromstring -from ldt.ldt_utils.projectserializer import ProjectSerializer from operator import itemgetter from itertools import groupby import base64 @@ -27,11 +29,12 @@ @login_required def home(request): - # list of contents - content_list = add_change_attr(request.user, Content.safe_objects.all()) #@UndefinedVariable - + num_page = 0 + # Prepare contents pagination + content_nb, nb_ct_pages, content_list = get_contents_page(num_page, request.user) # get list of projects owned by the current user - project_list = add_change_attr(request.user, Project.safe_objects.filter(owner=request.user)) #@UndefinedVariable + project_nb, nb_pj_pages, project_list = get_projects_page(num_page, request.user) + #project_list = add_change_attr(request.user, Project.safe_objects.filter(owner=request.user)[:settings.LDT_MAX_PROJECTS_PER_PAGE]) #@UndefinedVariable is_gecko = ((request.META['HTTP_USER_AGENT'].lower().find("firefox")) > -1); @@ -44,12 +47,15 @@ # render list return render_to_response("ldt/ldt_utils/workspace.html", - {'contents': content_list, 'projects': project_list, + {'contents': content_list, 'nb_ct_pages': nb_ct_pages, 'content_nb': content_nb, 'current_content_page':float(num_page), + 'projects': project_list, 'nb_pj_pages': nb_pj_pages, 'project_nb': project_nb, 'current_project_page':float(num_page), 'is_gecko': is_gecko, #'project_api_url':"match.url_name", #'project_api_view':match.url_name,'project_api_args':"project_api_args",'project_api_kwargs':"project_api_kwargs" }, context_instance=RequestContext(request)) + + @login_required def groups(request): @@ -245,5 +251,6 @@ def loading(request): return render_to_response('ldt/ldt_utils/loading.html', context_instance=RequestContext(request)) + diff -r 49e6b1148a7a -r 94429061bbfa src/ldt/ldt/settings.py --- a/src/ldt/ldt/settings.py Wed May 23 17:32:08 2012 +0200 +++ b/src/ldt/ldt/settings.py Fri May 25 17:47:20 2012 +0200 @@ -81,6 +81,8 @@ LDT_MAX_FRAGMENT_PER_SEARCH = 3 LDT_RESULTS_PER_PAGE = 1 LDT_JSON_DEFAULT_INDENT = 2 +LDT_MAX_CONTENTS_PER_PAGE = 10 +LDT_MAX_PROJECTS_PER_PAGE = 10 AUTO_INDEX_AFTER_SAVE = getattr(settings, 'AUTO_INDEX_AFTER_SAVE', True) diff -r 49e6b1148a7a -r 94429061bbfa src/ldt/ldt/static/ldt/css/style.css --- a/src/ldt/ldt/static/ldt/css/style.css Wed May 23 17:32:08 2012 +0200 +++ b/src/ldt/ldt/static/ldt/css/style.css Fri May 25 17:47:20 2012 +0200 @@ -168,7 +168,7 @@ #inner_content { min-height: 600px; - padding: 40px 0px 50px 0px; + padding: 30px 0px 50px 0px; } .projectscontentstitle { diff -r 49e6b1148a7a -r 94429061bbfa src/ldt/ldt/static/ldt/css/workspace.css --- a/src/ldt/ldt/static/ldt/css/workspace.css Wed May 23 17:32:08 2012 +0200 +++ b/src/ldt/ldt/static/ldt/css/workspace.css Fri May 25 17:47:20 2012 +0200 @@ -1,7 +1,7 @@ @charset "UTF-8"; .titlediv { - margin: 0px 0px 25px 0px; + margin: 0px 0px 5px 0px; min-height: 40px; vertical-align: middle; } @@ -230,3 +230,12 @@ .clickable { cursor: pointer; } + +.prev_next_cont_proj { + margin: 0 0 5px; + float: right; +} +.prev_next_cont_proj a, .prev_next_cont_proj a:visited{ + color: #0063DC; + text-decoration: none; +} \ No newline at end of file diff -r 49e6b1148a7a -r 94429061bbfa src/ldt/ldt/static/ldt/js/projectscontents.js --- a/src/ldt/ldt/static/ldt/js/projectscontents.js Wed May 23 17:32:08 2012 +0200 +++ b/src/ldt/ldt/static/ldt/js/projectscontents.js Fri May 25 17:47:20 2012 +0200 @@ -151,28 +151,83 @@ var filterVal = "_" + encodeURIComponent(target.realVal()); url = url.replace('__FILTER__',filterVal); url = url.replace('__ID_GROUP__',$('#id_group').val()); - $.ajax({ - url: url, - cache: false, - success: function(data, status, request) { - $(container_selector).html(data); - target.next(".searchajaxloader").hide(); - if(target.realVal().length > 0) { - target.nextAll(".searchclear").show(); - } - init_events($(container_selector)); - target.removeAttr('timer'); - } - }); + if(remember_projects_page){ + remember_projects_page = false; + v = parseInt($("#current_project_page").val()); + $.ajax({ + url: url, + cache: false, + type: 'POST', + data: {csrfmiddlewaretoken:global_csrf_token, + num_page:num_page + }, + success: function(data, status, request) { + $(container_selector).html(data); + target.next(".searchajaxloader").hide(); + if(target.realVal().length > 0) { + target.nextAll(".searchclear").show(); + } + init_events($(container_selector)); + target.removeAttr('timer'); + }, + error: function(jqXHR, textStatus, errorThrown) { + resp = $.parseJSON(jqXHR.responseText); + alert(resp.message); + } + }); + } + else{ + $.ajax({ + url: url, + cache: false, + success: function(data, status, request) { + $(container_selector).html(data); + target.next(".searchajaxloader").hide(); + if(target.realVal().length > 0) { + target.nextAll(".searchclear").show(); + } + init_events($(container_selector)); + target.removeAttr('timer'); + } + }); + } }, 300) ); } -function init_events_contents(base_node, embed_url, content_filter_url, project_filter_url) { +function init_events_contents(base_node, embed_url, content_filter_url, project_filter_url, contents_page_url) { init_events_base(base_node, embed_url); + // Content pagination in workspace home + $('.contents_page').click(function(e){ + num_page = $(this).attr('alt'); + if(num_page=="prev"){ + num_page = parseInt($('#current_content_page').val()) - 1; + } + else if(num_page=="next"){ + num_page = parseInt($('#current_content_page').val()) + 1; + } + $.ajax({ + url: contents_page_url, + type: 'POST', + data: {csrfmiddlewaretoken:global_csrf_token, + num_page:num_page + }, + // bug with jquery >= 1.5, "json" adds a callback so we don't specify dataType + //dataType: 'json', + success: function(msg, textStatus, XMLHttpRequest) { + $('#contentslistcontainer').html(msg); + init_events($('#contentslistcontainer')); + }, + error: function(jqXHR, textStatus, errorThrown) { + resp = $.parseJSON(jqXHR.responseText); + alert(resp.message); + } + }); + }); + $('.content_link_create').each(function(i){ $(this).attr("target","_blank"); }); @@ -286,12 +341,40 @@ }); } -function init_events_base_projects(base_node, embed_url, searchprojectfilterurl, publishprojecturl, unpublishprojecturl) { +function init_events_base_projects(base_node, embed_url, searchprojectfilterurl, publishprojecturl, unpublishprojecturl, projects_page_url) { init_modal_window ('.ldt_link_open_ldt', 1035, 670, 1025, 660, base_node, searchprojectfilterurl); init_modal_window ('.ldt_link_create_project', 760, 400, 750, 390, base_node, searchprojectfilterurl); init_modal_window ('.ldt_link_copy_project', 500, 150, 500, 150, base_node, searchprojectfilterurl); + // Project pagination in workspace home + $('.projects_page').click(function(e){ + num_page = $(this).attr('alt'); + if(num_page=="prev"){ + num_page = parseInt($('#current_project_page').val()) - 1; + } + else if(num_page=="next"){ + num_page = parseInt($('#current_project_page').val()) + 1; + } + $.ajax({ + url: projects_page_url, + type: 'POST', + data: {csrfmiddlewaretoken:global_csrf_token, + num_page:num_page + }, + // bug with jquery >= 1.5, "json" adds a callback so we don't specify dataType + //dataType: 'json', + success: function(msg, textStatus, XMLHttpRequest) { + $('#projectslistcontainer').html(msg); + init_events($('#projectslistcontainer')); + }, + error: function(jqXHR, textStatus, errorThrown) { + resp = $.parseJSON(jqXHR.responseText); + alert(resp.message); + } + }); + }); + $('.publishedproject', base_node).click(function(e) { e.preventDefault(); display_loading_icon($(this)); @@ -306,7 +389,9 @@ //dataType: 'json', success: function(json, textStatus, XMLHttpRequest) { if(json.res) { - searchCallback($('#searchprojectsinput'), "#projectslistcontainer", searchprojectfilterurl, 0); + console.log("1 remember_projects_page = " + remember_projects_page); + remember_projects_page = true; + searchCallback($('#searchprojectsinput'), "#projectslistcontainer", searchprojectfilterurl, 0); } } }); @@ -326,6 +411,8 @@ //dataType: 'json', success: function(json, textStatus, XMLHttpRequest) { if(json.res) { + console.log("2 remember_projects_page = " + remember_projects_page); + remember_projects_page = true; searchCallback($('#searchprojectsinput'), "#projectslistcontainer", searchprojectfilterurl, 0); } } @@ -417,9 +504,9 @@ init_events_base_projects(base_node, embed_url, searchprojectfilterurl, publishprojecturl, unpublishprojecturl); } -function init_events_all(base_node, embed_url, searchcontentfilterurl, searchprojectfilterurl, publishprojecturl, unpublishprojecturl) { - init_events_contents(base_node, embed_url, searchcontentfilterurl, searchprojectfilterurl); - init_events_base_projects(base_node, embed_url, searchprojectfilterurl, publishprojecturl, unpublishprojecturl); +function init_events_all(base_node, embed_url, searchcontentfilterurl, searchprojectfilterurl, publishprojecturl, unpublishprojecturl, contents_page_url, projects_page_url) { + init_events_contents(base_node, embed_url, searchcontentfilterurl, searchprojectfilterurl, contents_page_url); + init_events_base_projects(base_node, embed_url, searchprojectfilterurl, publishprojecturl, unpublishprojecturl, projects_page_url); } diff -r 49e6b1148a7a -r 94429061bbfa web/ldtplatform/config.py.tmpl --- a/web/ldtplatform/config.py.tmpl Wed May 23 17:32:08 2012 +0200 +++ b/web/ldtplatform/config.py.tmpl Fri May 25 17:47:20 2012 +0200 @@ -87,6 +87,8 @@ LDT_MAX_FRAGMENT_PER_SEARCH = 3 LDT_RESULTS_PER_PAGE = 1 LDT_JSON_DEFAULT_INDENT = 0 +LDT_MAX_CONTENTS_PER_PAGE = 5 +LDT_MAX_PROJECTS_PER_PAGE = 5 EMPTY_MEDIA_EXTERNALID = None diff -r 49e6b1148a7a -r 94429061bbfa web/ldtplatform/settings.py --- a/web/ldtplatform/settings.py Wed May 23 17:32:08 2012 +0200 +++ b/web/ldtplatform/settings.py Fri May 25 17:47:20 2012 +0200 @@ -181,6 +181,8 @@ LDT_JSON_DEFAULT_INDENT = 0 LDT_MAX_FRAGMENT_PER_SEARCH = 3 LDT_RESULTS_PER_PAGE = 10 +LDT_MAX_CONTENTS_PER_PAGE = 10 +LDT_MAX_PROJECTS_PER_PAGE = 10 OAUTH_PROVIDER_KEY_SIZE = 32 OAUTH_PROVIDER_SECRET_SIZE = 32