# 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 %}
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);
}