Amélioration du parcours et de la sélection dans les arbres de thésaurus
- Les nodes feuilles ne sont plus sélectionnable
- Si une node a trop d'enfant on autorise son ouverture si elle a des enfants node non feuiile (si il n'y en a pas trop)
correct bug #17657
--- a/src/core/models/term.py Tue Jul 30 18:39:12 2013 +0200
+++ b/src/core/models/term.py Tue Jul 30 23:00:03 2013 +0200
@@ -108,6 +108,10 @@
parent = TreeForeignKey('self', null=True, blank=True, related_name='children')
@property
+ def children_with_descendants(self):
+ return self.children.extra(where=['(rght-lft) > 1'])
+
+ @property
def alternative_labels_str(self):
return " | ".join([l.label for l in self.alternative_labels.all() if l.label != self.label])
--- a/src/jocondelab/static/jocondelab/js/jocondelab.js Tue Jul 30 18:39:12 2013 +0200
+++ b/src/jocondelab/static/jocondelab/js/jocondelab.js Tue Jul 30 23:00:03 2013 +0200
@@ -329,7 +329,15 @@
select_limit: 1,
initially_select: $('#thesaurus_tree').val()?['node-term-'+$('#thesaurus_tree').val()]:[]
},
- plugins : [ "themes", "json_data", "ui"]
+ types : {
+ types: {
+ "leaf" : {
+ 'hover_node' : false,
+ 'select_node': function () {return false;}
+ }
+ }
+ },
+ plugins : [ "themes", "json_data", "ui", "types"]
});
},
close: function( event, ui ) {
--- a/src/jocondelab/views.py Tue Jul 30 18:39:12 2013 +0200
+++ b/src/jocondelab/views.py Tue Jul 30 23:00:03 2013 +0200
@@ -318,9 +318,9 @@
'data' : {
'title': node.label if node.is_leaf_node() else "%s (%d)"%(node.label, node.get_descendant_count()),
'attr' : {'id': 'node-term-a-%d' % node.id, 'class': 'term-tree-node'},
- 'icon' : 'folder',
+ 'icon' : 'folder'
},
- 'attr' : { "id" : 'node-term-%d' % node.id },
+ 'attr' : { "id" : 'node-term-%d' % node.id, 'rel': 'leaf' if node.is_leaf_node() else 'default'},
'metadata': {'term_tree_node': {'id': node.id, 'node_id':'node-term-%d' % node.id,'label': node.label, 'children_count': children_count, 'descendants': node.get_descendant_count()}},
}
@@ -331,7 +331,10 @@
res['children'] = [ self.get_node_data(c,children_counts.get(c.id,0),selected_node_ancestors) for c in children]
elif not node.is_leaf_node() and children_count <= settings.JOCONDE_TERM_TREE_MAX_CHILDREN:
res['state'] = 'closed'
-
+ elif not node.is_leaf_node():
+ children_with_descendants_count = node.children_with_descendants.count()
+ if children_with_descendants_count > 0 and children_with_descendants_count <= settings.JOCONDE_TERM_TREE_MAX_CHILDREN:
+ res['state'] = 'closed'
return res
def get(self, request, thes_id):
@@ -342,7 +345,10 @@
nodes = Term.objects.root_nodes().filter(thesaurus__id=thes_id) # @UndefinedVariable
else:
initial_node = Term.objects.get(id=initial_node_id) # @UndefinedVariable
- nodes = initial_node.get_children()
+ if initial_node.get_children().count() <= settings.JOCONDE_TERM_TREE_MAX_CHILDREN:
+ nodes = initial_node.get_children()
+ else:
+ nodes = Term.objects.filter(id__in=initial_node.children_with_descendants) # @UndefinedVariable
if len(nodes) > settings.JOCONDE_TERM_TREE_MAX_ROOT_NODE:
return HttpResponseForbidden(u"Too many nodes")