1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- # -*- coding: utf-8 -*-
- import tg
- from pod.model import data as pmd
-
- def node_to_dict(node: pmd.PBNode, children_content, new_item_state):
- """
- children_content may be boolean or a list containing json values
- """
- url = tg.url('/document/', dict(node_id=node.node_id)) ## FIXME - 2014-05-27 - Make this more flexible
-
- return dict(
- id = node.node_id,
- children = children_content,
- text = node.data_label,
- a_attr = { "href" : url },
- li_attr = { "title": node.data_label },
- type = node.node_type, # this property is understandable by jstree (through "types" plugin)
- state = new_item_state,
- node_status = node.getStatus().getId() # this is not jstree understandable data. This requires a JS 'success' callback
- )
-
-
- def PBNodeForMenu(func):
-
- def process_item(item: pmd.PBNode):
- """ convert given item into a dictionnary """
- return node_to_dict(item, item.getChildNb()>0, None)
-
- def pre_serialize(*args, **kws):
- initial_result = func(*args, **kws)
- real_result = None
-
- print("DEBUG ===================>", initial_result)
- if isinstance(initial_result, list):
- real_result = list()
- for value_item in initial_result:
- real_result.append(process_item(value_item))
- else:
- # We suppose here that we have an object only
- real_result = process_item(initial_result)
-
- return dict(d = real_result)
-
- return pre_serialize
-
-
- def NodeTreeItemForMenu(func):
- """ works with structure NodeTreeItem """
- def process_item(structure_item: pmd.NodeTreeItem, current_node_id=None):
- """ convert given item into a dictionnary """
-
- item = structure_item.node
- children = []
-
- for child_item in structure_item.children:
- children.append(process_item(child_item, current_node_id))
-
- children_field_value = None
- if len(children)>0:
- children_field_value = children
- elif item.getChildNb()>0:
- children_field_value = True
- else:
- children_field_value = False
-
- new_item_state = dict(
- opened = item.getChildNb()<=0 or len(children)>0,
- selected = current_node_id!=None and item.node_id==current_node_id,
- )
-
- return node_to_dict(item, children_field_value, new_item_state)
-
- def pre_serialize(*args, **kws):
- initial_result = func(*args, **kws)
- real_result = None
-
- current_node_id = None
- if "current_node_id" in kws:
- current_node_id = int(kws['current_node_id'])
-
- if isinstance(initial_result, list):
- real_result = list()
- for value_item in initial_result:
- real_result.append(process_item(value_item, current_node_id))
- else:
- # We suppose here that we have an object only
- real_result = process_item(initial_result, current_node_id)
-
- return dict(d = real_result)
-
- return pre_serialize
|