# HG changeset patch # User cavaliet # Date 1338376096 -7200 # Node ID 97f5db87d71c295a9c48fa7d4af255e8c4251020 # Parent 5af755809dd186b6daf5f582de548449705f5315 Enhance pagination with public project and quick search. diff -r 5af755809dd1 -r 97f5db87d71c src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/publishedprojectslist.html --- a/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/publishedprojectslist.html Fri May 25 17:50:54 2012 +0200 +++ b/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/publishedprojectslist.html Wed May 30 13:08:16 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 5af755809dd1 -r 97f5db87d71c 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 Fri May 25 17:50:54 2012 +0200 +++ b/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/workspace_base.html Wed May 30 13:08:16 2012 +0200 @@ -16,12 +16,9 @@ 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, contents_page_url, projects_page_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); } diff -r 5af755809dd1 -r 97f5db87d71c src/ldt/ldt/ldt_utils/urls.py --- a/src/ldt/ldt/ldt_utils/urls.py Fri May 25 17:50:54 2012 +0200 +++ b/src/ldt/ldt/ldt_utils/urls.py Wed May 30 13:08:16 2012 +0200 @@ -28,8 +28,6 @@ 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 5af755809dd1 -r 97f5db87d71c src/ldt/ldt/ldt_utils/views/content.py --- a/src/ldt/ldt/ldt_utils/views/content.py Fri May 25 17:50:54 2012 +0200 +++ b/src/ldt/ldt/ldt_utils/views/content.py Wed May 30 13:08:16 2012 +0200 @@ -388,25 +388,20 @@ def contents_filter(request, filter): if filter and len(filter) > 0 and filter[0] == '_': filter = filter[1:] - + + num_page = 0 + if request.GET.has_key('num_page'): + num_page = int(request.GET["num_page"]) + + # We paginate the content list, in case of filter or not 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)) + content_nb = Content.safe_objects.filter(title__icontains=filter).count() + nb_ct_pages = int(math.ceil(content_nb / settings.LDT_MAX_CONTENTS_PER_PAGE)) + content_list = Content.safe_objects.filter(title__icontains=filter)[(num_page*settings.LDT_MAX_CONTENTS_PER_PAGE):((num_page+1)*settings.LDT_MAX_CONTENTS_PER_PAGE)] #@UndefinedVariable else: - return contents_page(request) - - - - -@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) + content_nb, nb_ct_pages, content_list = get_contents_page(num_page, request.user) + #Change attributes with object permissions + content_list = add_change_attr(request.user, content_list) is_gecko = ((request.META['HTTP_USER_AGENT'].lower().find("firefox")) > -1); return render_to_response("ldt/ldt_utils/partial/contentslist.html", diff -r 5af755809dd1 -r 97f5db87d71c src/ldt/ldt/ldt_utils/views/project.py --- a/src/ldt/ldt/ldt_utils/views/project.py Fri May 25 17:50:54 2012 +0200 +++ b/src/ldt/ldt/ldt_utils/views/project.py Wed May 30 13:08:16 2012 +0200 @@ -206,13 +206,26 @@ is_gecko = ((request.META['HTTP_USER_AGENT'].lower().find("firefox")) > -1); show_username = True + project_nb = None + nb_pj_pages = None + num_page = 0 + if request.GET.has_key('num_page'): + num_page = int(request.GET["num_page"]) + if id_group > 0: # Search inside a group grp = Group.objects.get(id=id_group) project_list = get_objects_for_group(grp, 'ldt_utils.view_project').filter(query) elif id_group == -1:# Search inside projects shared with a specific user project_list = get_objects_for_user(request.user, 'ldt_utils.view_project', use_groups=False).exclude(owner=request.user) else: - project_list = Project.safe_objects.filter(query) + # We paginate in these cases : user's project or published + if status==2: + project_list = Project.safe_objects.filter(query).exclude(title__startswith='front') + else: + project_list = Project.safe_objects.filter(query) + project_nb = float(project_list.count()) #@UndefinedVariable + nb_pj_pages = int(math.ceil(project_nb / settings.LDT_MAX_PROJECTS_PER_PAGE)) + project_list = project_list[(num_page*settings.LDT_MAX_PROJECTS_PER_PAGE):((num_page+1)*settings.LDT_MAX_PROJECTS_PER_PAGE)] #@UndefinedVariable show_username = False project_list = add_change_attr(request.user, project_list) @@ -220,14 +233,12 @@ if status == 2: url_templ = "ldt/ldt_utils/partial/publishedprojectslist.html" else: - if filter: - url_templ = "ldt/ldt_utils/partial/projectslist.html" - else: - return projects_page(request) - + url_templ = "ldt/ldt_utils/partial/projectslist.html" + return render_to_response(url_templ, - {'projects': project_list, 'show_username':show_username, - 'is_gecko': is_gecko, 'group_id':id_group}, + {'projects': project_list, 'nb_pj_pages': nb_pj_pages, 'project_nb': project_nb, 'current_project_page':float(num_page), + 'show_username':show_username, 'group_id':id_group, 'is_gecko': is_gecko + }, context_instance=RequestContext(request)) @login_required @@ -246,23 +257,16 @@ 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 + + +def get_published_projects_page(num_page): + project_nb = float(Project.safe_objects.filter(state=2).exclude(title__startswith='front').count()) #@UndefinedVariable + nb_pj_pages = int(math.ceil(project_nb / settings.LDT_MAX_PROJECTS_PER_PAGE)) + project_list = Project.safe_objects.filter(state=2).exclude(title__startswith='front')[(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 5af755809dd1 -r 97f5db87d71c src/ldt/ldt/ldt_utils/views/workspace.py --- a/src/ldt/ldt/ldt_utils/views/workspace.py Fri May 25 17:50:54 2012 +0200 +++ b/src/ldt/ldt/ldt_utils/views/workspace.py Wed May 30 13:08:16 2012 +0200 @@ -15,7 +15,7 @@ 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.ldt_utils.views.project import get_projects_page, get_published_projects_page from ldt.security.utils import add_change_attr, get_userlist from lxml.html import fragment_fromstring from operator import itemgetter @@ -79,7 +79,9 @@ def published_project(request): # get list of all published projects - project_list = Project.safe_objects.filter(state=2).exclude(title__startswith='front') #@UndefinedVariable + #project_list = Project.safe_objects.filter(state=2).exclude(title__startswith='front') #@UndefinedVariable + num_page = 0 + project_nb, nb_pj_pages, project_list = get_published_projects_page(num_page) # Search form form = SearchForm() @@ -87,8 +89,8 @@ # render list return render_to_response("ldt/ldt_utils/published_projects.html", - {'projects': project_list, 'form': form, - 'is_gecko': is_gecko}, + {'projects': project_list, 'nb_pj_pages': nb_pj_pages, 'project_nb': project_nb, 'current_project_page':float(num_page), + 'form': form, 'is_gecko': is_gecko}, context_instance=RequestContext(request)) diff -r 5af755809dd1 -r 97f5db87d71c src/ldt/ldt/static/ldt/js/projectscontents.js --- a/src/ldt/ldt/static/ldt/js/projectscontents.js Fri May 25 17:50:54 2012 +0200 +++ b/src/ldt/ldt/static/ldt/js/projectscontents.js Wed May 30 13:08:16 2012 +0200 @@ -127,7 +127,7 @@ }; } -function searchCallback(target, container_selector, url, timeout) { +function searchCallback(target, container_selector, url, timeout, num_page) { timeout = typeof(timeout) !== 'undefined' ? timeout : 0; target = $(target); @@ -151,15 +151,12 @@ var filterVal = "_" + encodeURIComponent(target.realVal()); url = url.replace('__FILTER__',filterVal); url = url.replace('__ID_GROUP__',$('#id_group').val()); - if(remember_projects_page){ - remember_projects_page = false; - v = parseInt($("#current_project_page").val()); + if(num_page){ $.ajax({ url: url, cache: false, - type: 'POST', - data: {csrfmiddlewaretoken:global_csrf_token, - num_page:num_page + type: 'GET', + data: {num_page:num_page }, success: function(data, status, request) { $(container_selector).html(data); @@ -196,7 +193,7 @@ ); } -function init_events_contents(base_node, embed_url, content_filter_url, project_filter_url, contents_page_url) { +function init_events_contents(base_node, embed_url, content_filter_url, project_filter_url) { init_events_base(base_node, embed_url); @@ -209,23 +206,7 @@ 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); - } - }); + searchCallback($("#searchcontentsinput"),"#contentslistcontainer",content_filter_url,0,num_page); }); $('.content_link_create').each(function(i){ @@ -341,7 +322,7 @@ }); } -function init_events_base_projects(base_node, embed_url, searchprojectfilterurl, publishprojecturl, unpublishprojecturl, projects_page_url) { +function init_events_base_projects(base_node, embed_url, searchprojectfilterurl, publishprojecturl, unpublishprojecturl) { 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); @@ -356,23 +337,7 @@ 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); - } - }); + searchCallback($('#searchprojectsinput'), "#projectslistcontainer", searchprojectfilterurl, 0, num_page); }); $('.publishedproject', base_node).click(function(e) { @@ -381,6 +346,7 @@ var target = $(e.target); var project_id = target.attr('id').replace('project_',''); var url = unpublishprojecturl.replace('__PROJECT_ID__', project_id); + num_page = parseInt($('#current_project_page').val()); $.ajax({ url: url, type: 'POST', @@ -389,9 +355,7 @@ //dataType: 'json', success: function(json, textStatus, XMLHttpRequest) { if(json.res) { - console.log("1 remember_projects_page = " + remember_projects_page); - remember_projects_page = true; - searchCallback($('#searchprojectsinput'), "#projectslistcontainer", searchprojectfilterurl, 0); + searchCallback($('#searchprojectsinput'), "#projectslistcontainer", searchprojectfilterurl, 0, num_page); } } }); @@ -403,6 +367,7 @@ var target = $(e.target); var project_id = target.attr('id').replace('project_',''); var url = publishprojecturl.replace('__PROJECT_ID__', project_id); + num_page = parseInt($('#current_project_page').val()); $.ajax({ url: url, type: 'POST', @@ -411,9 +376,7 @@ //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); + searchCallback($('#searchprojectsinput'), "#projectslistcontainer", searchprojectfilterurl, 0, num_page); } } }); @@ -504,9 +467,9 @@ 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); +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); }