# HG changeset patch # User ymh # Date 1375218003 -7200 # Node ID 4cdef872c351f972bb17be284adb35baba08c293 # Parent 8a67acd1f3aa2eba8b0b6cdfbe210b06ae50c847 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 diff -r 8a67acd1f3aa -r 4cdef872c351 src/core/models/term.py --- 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]) diff -r 8a67acd1f3aa -r 4cdef872c351 src/jocondelab/static/jocondelab/js/jocondelab.js --- 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 ) { diff -r 8a67acd1f3aa -r 4cdef872c351 src/jocondelab/views.py --- 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")