Content tag cloud and filter in workspace.
--- a/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/content_project_pagination.html Tue Jul 24 17:16:05 2012 +0200
+++ b/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/content_project_pagination.html Wed Jul 25 17:28:24 2012 +0200
@@ -1,42 +1,26 @@
{% load front_tags %}
{% if nb_pages %}
- <p class="prev_next_cont_proj" >{% comment %}
- alors ? : {{begin}} - {{middle}} - {{end}} - nb_pages = {{nb_pages}}<br/>
+ {% comment %}alors ? : {{begin}} - {{middle}} - {{end}} - nb_pages = {{nb_pages}}<br/>
alors ? : nb_pages = {{nb_pages}} - range = {{nb_pages|get_range}} - cur_page_nb = {{cur_page_nb}}<br/>{% endcomment %}
{% if 0 < cur_page_nb %}<a class="{{a_class}}" alt="prev"><<</a> {% endif %}
{% for i in begin %}
- {% if i == cur_page_nb %}
- {{i|add:'1'}}
- {% else %}
- <a class="{{a_class}}" alt="{{i}}">{{i|add:'1'}}</a>
- {% endif %}
-
+ {% if i == cur_page_nb %}{{i|add:'1'}}{% else %}<a class="{{a_class}}" alt="{{i}}">{{i|add:'1'}}</a>{% endif %}
{% endfor %}
{% if middle %}
- ...
+ ...
{% for i in middle %}
- {% if i == cur_page_nb %}
- {{i|add:'1'}}
- {% else %}
- <a class="{{a_class}}" alt="{{i}}">{{i|add:'1'}}</a>
- {% endif %}
-
+ {% if i == cur_page_nb %}{{i|add:'1'}}{% else %}<a class="{{a_class}}" alt="{{i}}">{{i|add:'1'}}</a>{% endif %}
{% endfor %}
{% endif %}
{% if end %}
- ...
+ ...
{% for i in end %}
- {% if i == cur_page_nb %}
- {{i|add:'1'}}
- {% else %}
- <a class="{{a_class}}" alt="{{i}}">{{i|add:'1'}}</a>
- {% endif %}
-
+ {% if i == cur_page_nb %}{{i|add:'1'}}{% else %}<a class="{{a_class}}" alt="{{i}}">{{i|add:'1'}}</a>{% endif %}
{% endfor %}
{% endif %}
{% if cur_page_nb|add:'1' < nb_pages %}<a class="{{a_class}}" alt="next">>></a>{% endif %}
- </p>
{% endif %}
+</p>
--- a/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/contentslist.html Tue Jul 24 17:16:05 2012 +0200
+++ b/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/contentslist.html Wed Jul 25 17:28:24 2012 +0200
@@ -2,10 +2,21 @@
{% load thumbnail %}
{% load front_tags %}
+<ul class="prev_next_cont_proj" >
+ <li id="content_tags_li"><span id="content_tags" class="clickable">{% if tag_cloud|length > 0 %}{% trans 'All categories' %}{% endif %}</span>{% if current_content_tag %}{% if current_content_tag != "" %} > {{current_content_tag}} <span id="no_content_tag" class="clickable">[x]</span>{% endif %}{% endif %}</li>
{% if nb_ct_pages %}
- {% load navigation %}{% build_pagination nb_ct_pages current_content_page "contents_page clickable" %}
+ <li>{% load navigation %}{% build_pagination nb_ct_pages current_content_page "contents_page clickable" %}</li>
<input type="hidden" value="{{current_content_page}}" name="current_content_page" id="current_content_page">
{% endif %}
+</ul>
+<div id="content_tags_cloud">{% if tag_cloud|length > 0 %}
+ <p>
+ {% for t in tag_cloud %}
+ <a class="contents_tag clickable" alt="{{t.name}}"><span style="font-size:{{t.font_size|add:"10"}}px;">{{t.name}}</span></a>{% if not forloop.last %}, {% endif %}
+ {% endfor %}
+ </p>{% endif %}
+ <input type="hidden" value="{{current_content_tag}}" name="current_content_tag" id="current_content_tag">
+</div>
<div class="projectscontentsheader projectcontentsheadertitle span-12 last" id="contentsheader">
{% trans "name" %}
</div>
--- a/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/projectslist.html Tue Jul 24 17:16:05 2012 +0200
+++ b/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/projectslist.html Wed Jul 25 17:28:24 2012 +0200
@@ -3,9 +3,10 @@
{% load front_tags %}
{% if nb_pj_pages %}
- {% load navigation %}{% build_pagination nb_pj_pages current_project_page "projects_page clickable" %}
+<ul class="prev_next_cont_proj" >
+ <li>{% load navigation %}{% build_pagination nb_pj_pages current_project_page "projects_page clickable" %}</li>
<input type="hidden" value="{{current_project_page}}" name="current_project_page" id="current_project_page">
- </p>
+</ul>
{% endif %}
<div class="projectscontentsheader projectcontentsheadertitle span-12 last" id="projectsheader">
{% trans "name" %}
--- a/src/ldt/ldt/ldt_utils/views/content.py Tue Jul 24 17:16:05 2012 +0200
+++ b/src/ldt/ldt/ldt_utils/views/content.py Wed Jul 25 17:28:24 2012 +0200
@@ -14,6 +14,7 @@
from ldt.security.utils import assign_perm_to_obj, add_change_attr, get_userlist, get_userlist_model
from ldt.security.cache import cached_assign
from ldt.user.forms import PictureForm
+from tagging.models import Tag, TaggedItem
from urllib2 import urlparse
import ldt.utils.path as ldt_utils_path
import logging
@@ -393,21 +394,35 @@
num_page = 0
if request.GET.has_key('num_page'):
num_page = int(request.GET["num_page"])
+ tag_filter = ""
+ if request.GET.has_key('tag_filter'):
+ tag_filter = request.GET["tag_filter"]
# We paginate the content list, in case of filter or not
- if filter:
+ if filter and not tag_filter :
content_nb = Content.safe_objects.filter(title__icontains=filter).count()
- nb_ct_pages = int(math.ceil(content_nb / settings.LDT_MAX_CONTENTS_PER_PAGE))
+ nb_ct_pages = int(math.ceil(content_nb / settings.LDT_MAX_CONTENTS_PER_PAGE)) + 1
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
+ elif filter and tag_filter :
+ #TaggedItem.objects.get_by_model(Content.objects.all(), '"'+tag_filter+'"')
+ content_nb = TaggedItem.objects.get_by_model(Content.safe_objects.filter(title__icontains=filter), '"'+tag_filter+'"').count()
+ nb_ct_pages = int(math.ceil(content_nb / settings.LDT_MAX_CONTENTS_PER_PAGE)) + 1
+ content_list = TaggedItem.objects.get_by_model(Content.safe_objects.filter(title__icontains=filter), '"'+tag_filter+'"')[(num_page*settings.LDT_MAX_CONTENTS_PER_PAGE):((num_page+1)*settings.LDT_MAX_CONTENTS_PER_PAGE)] #@UndefinedVariable
+ elif tag_filter and not filter:
+ content_nb = TaggedItem.objects.get_by_model(Content.safe_objects.all(), '"'+tag_filter+'"').count()
+ nb_ct_pages = int(math.ceil(content_nb / settings.LDT_MAX_CONTENTS_PER_PAGE)) +1
+ content_list = TaggedItem.objects.get_by_model(Content.safe_objects.all(), '"'+tag_filter+'"')[(num_page*settings.LDT_MAX_CONTENTS_PER_PAGE):((num_page+1)*settings.LDT_MAX_CONTENTS_PER_PAGE)] #@UndefinedVariable
else:
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)
+ # Get the all tags list
+ tag_cloud = get_content_tags()
is_gecko = ((request.META['HTTP_USER_AGENT'].lower().find("firefox")) > -1);
return render_to_response("ldt/ldt_utils/partial/contentslist.html",
{'contents': content_list, 'nb_ct_pages': nb_ct_pages, 'content_nb': content_nb, 'current_content_page':float(num_page),
- 'is_gecko': is_gecko
+ 'tag_cloud': tag_cloud, 'current_content_tag':tag_filter, 'is_gecko': is_gecko
},
context_instance=RequestContext(request))
@@ -417,3 +432,10 @@
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
+
+
+def get_content_tags(limit=None, steps=10):
+ if limit is None:
+ return Tag.objects.cloud_for_model(Content, steps=steps)
+ else :
+ return Tag.objects.cloud_for_model(Content, steps=steps)[:limit]
--- a/src/ldt/ldt/ldt_utils/views/front.py Tue Jul 24 17:16:05 2012 +0200
+++ b/src/ldt/ldt/ldt_utils/views/front.py Wed Jul 25 17:28:24 2012 +0200
@@ -7,6 +7,7 @@
from guardian.shortcuts import get_objects_for_group
from ldt.ldt_utils.models import Content, Project
from ldt.ldt_utils.forms import SearchForm
+from ldt.ldt_utils.views.content import get_content_tags
from ldt.ldt_utils.views.workspace import get_search_results
from tagging.models import Tag, TaggedItem
import base64
@@ -146,8 +147,4 @@
return render_to_response('front/front_search_results.html', {'results': results, 'nb_results' : nb, 'search' : search, 'field': field, 'tag_label':content_tag, 'LDT_MEDIA_PREFIX': settings.LDT_MEDIA_PREFIX, 'colorurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/color.xml', 'i18nurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/i18n', 'language': language_code, 'baseurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/'}, context_instance=RequestContext(request))
-def get_content_tags(limit=None, steps=10):
- if limit is None:
- return Tag.objects.cloud_for_model(Content, steps=steps)
- else :
- return Tag.objects.cloud_for_model(Content, steps=steps)[:limit]
+
--- a/src/ldt/ldt/ldt_utils/views/workspace.py Tue Jul 24 17:16:05 2012 +0200
+++ b/src/ldt/ldt/ldt_utils/views/workspace.py Wed Jul 25 17:28:24 2012 +0200
@@ -14,7 +14,7 @@
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.content import get_contents_page, get_content_tags
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
@@ -34,7 +34,8 @@
content_nb, nb_ct_pages, content_list = get_contents_page(num_page, request.user)
# get list of projects owned by the current user
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
+ # Get the all tags list
+ tag_cloud = get_content_tags()
is_gecko = ((request.META['HTTP_USER_AGENT'].lower().find("firefox")) > -1);
@@ -49,7 +50,7 @@
return render_to_response("ldt/ldt_utils/workspace.html",
{'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",
+ 'tag_cloud': tag_cloud, '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))
--- a/src/ldt/ldt/static/ldt/css/workspace.css Tue Jul 24 17:16:05 2012 +0200
+++ b/src/ldt/ldt/static/ldt/css/workspace.css Wed Jul 25 17:28:24 2012 +0200
@@ -205,7 +205,7 @@
}
#contentleft input[type=checkbox] {
- float: left;
+ float: left;
}
.shareicon {
@@ -232,10 +232,18 @@
}
.prev_next_cont_proj {
- margin: 0 0 5px;
- float: right;
+ margin-left: -40px;
+ margin-right: 0;
+ list-style: none outside none;
}
-.prev_next_cont_proj a, .prev_next_cont_proj a:visited{
+.prev_next_cont_proj li {
+ float: right;
+ margin: 0 0 -10px;
+}
+#content_tags_li{
+ float: left;
+}
+.prev_next_cont_proj a, .prev_next_cont_proj a:visited, #content_tags_cloud a, #content_tags_cloud a:visited, #no_content_tag{
color: #0063DC;
text-decoration: none;
}
\ No newline at end of file
--- a/src/ldt/ldt/static/ldt/js/projectscontents.js Tue Jul 24 17:16:05 2012 +0200
+++ b/src/ldt/ldt/static/ldt/js/projectscontents.js Wed Jul 25 17:28:24 2012 +0200
@@ -127,7 +127,7 @@
};
}
-function searchCallback(target, container_selector, url, timeout, num_page) {
+function searchCallback(target, container_selector, url, timeout, num_page, tag_filter) {
timeout = typeof(timeout) !== 'undefined' ? timeout : 0;
target = $(target);
@@ -151,13 +151,22 @@
var filterVal = "_" + encodeURIComponent(target.realVal());
url = url.replace('__FILTER__',filterVal);
url = url.replace('__ID_GROUP__',$('#id_group').val());
- if(num_page){
+ var data_obj = null;
+ if(num_page || tag_filter){
+ data_obj = {};
+ if(num_page){
+ data_obj["num_page"] = num_page;
+ }
+ if(tag_filter){
+ data_obj["tag_filter"] = tag_filter;
+ }
+ }
+ if(data_obj!=null){
$.ajax({
url: url,
cache: false,
type: 'GET',
- data: {num_page:num_page
- },
+ data: data_obj,
success: function(data, status, request) {
$(container_selector).html(data);
target.next(".searchajaxloader").hide();
@@ -198,7 +207,7 @@
init_events_base(base_node, embed_url);
// Content pagination in workspace home
- $('.contents_page').click(function(e){
+ $('.contents_page',base_node).click(function(e){
num_page = $(this).attr('alt');
if(num_page=="prev"){
num_page = parseInt($('#current_content_page').val()) - 1;
@@ -206,9 +215,23 @@
else if(num_page=="next"){
num_page = parseInt($('#current_content_page').val()) + 1;
}
- searchCallback($("#searchcontentsinput"),"#contentslistcontainer",content_filter_url,0,num_page);
+ searchCallback($("#searchcontentsinput"),"#contentslistcontainer",content_filter_url,0,num_page,$('#current_content_tag').val());
});
+ // Content pagination in workspace home with tag/category filter
+ $("#content_tags_cloud",base_node).toggle(false);
+ $("#content_tags",base_node).click(function(){
+ $("#content_tags_cloud").slideToggle("fast");
+ });
+ $('.contents_tag',base_node).click(function(e){
+ $('#searchcontentsinput').val("");
+ $('#current_content_tag').val($(this).attr('alt'));
+ searchCallback($("#searchcontentsinput"),"#contentslistcontainer",content_filter_url,0,0,$('#current_content_tag').val());
+ });
+ $("#no_content_tag",base_node).click(function(){
+ searchCallback($("#searchcontentsinput"),"#contentslistcontainer",content_filter_url,0,0);
+ });
+
$('.content_link_create').each(function(i){
$(this).attr("target","_blank");
});