class ContextDataTableFormatter(yuiwidget.table.BaseDataTableFormatter): # evoque #script = z3evoque.PageViewTemplateFile("container.html#datatable") # !+NEED_ZC_RESOURCE_LIBRARIES(mr, sep-2010) # Evoque rendering needs to take into account any zc.resourcelibrary # declared additional libs, declared with need() below, see: # zc.resourcelibrary.publication.Response._addDependencies # zpt script = ViewTextTemplateFile("templates/datatable.pt") data_view = "/jsonlisting" prefix = "listing" def getFields(self): return alchemist.container.getFields(self.context) def getFieldColumns(self): # get config for data table column_model = [] field_model = [] for field in self.getFields(): key = field.__name__ title = translate(_(field.title), context=self.request) coldef = { "key": key, "label": title, "formatter": self.context.__name__ } if column_model == []: column_model.append("""{label:"%(label)s", key:"sort_%(key)s", formatter:"%(formatter)sCustom", sortable:true, resizeable:true , children: [{ key:"%(key)s", sortable:false}]}""" % coldef) else: column_model.append("""{label:"%(label)s", key:"sort_%(key)s", sortable:true, resizeable:true, children: [{key:"%(key)s", sortable:false}]}""" % coldef) field_model.append('{key:"%s"}' % (key)) return ",".join(column_model), ",".join(field_model) def getDataTableConfig(self): config = {} config["columns"], config["fields"] = self.getFieldColumns() config["data_url"] = self.getDataSourceURL() config["table_id"] = self.prefix config["link_url"] = url.absoluteURL(self.context, self.request) config["context_name"] = self.context.__name__ config["rows_per_page"] = capi.default_number_of_listing_items return config def __call__(self): need("yui-paginator") return '<div id="%s">\n<table %s>\n%s</table>\n%s</div>' % ( self.prefix, self._getCSSClass("table"), self.renderContents(), self.script(**self.getDataTableConfig()))
class ContextDataTableFormatter(BaseDataTableFormatter): script = ViewTextTemplateFile("templates/datatable.pt") data_view = "/jsonlisting" prefix = "listing" def getFields(self): return container.getFields(self.context) def getFieldColumns(self): # get config for data table column_model = [] field_model = [] for field in self.getFields(): key = field.__name__ title = translate(_(field.title), context=self.request) coldef = { 'key': key, 'label': title, 'formatter': self.context.__name__ } if column_model == []: column_model.append("""{label:"%(label)s", key:"sort_%(key)s", formatter:"%(formatter)sCustom", sortable:true, resizeable:true , children: [ { key:"%(key)s", sortable:false}]}""" % coldef) else: column_model.append("""{label:"%(label)s", key:"sort_%(key)s", sortable:true, resizeable:true, children: [ {key:"%(key)s", sortable:false}] }""" % coldef) field_model.append('{key:"%s"}' % (key)) return ','.join(column_model), ','.join(field_model) def getDataTableConfig(self): config = {} config['columns'], config['fields'] = self.getFieldColumns() config['data_url'] = self.getDataSourceURL() config['table_id'] = self.prefix config['link_url'] = ui_url.absoluteURL(self.context, self.request) config['context_name'] = self.context.__name__ return config def __call__(self): need('yui-datatable') need('yui-paginator') need('yui-dragdrop') return '<div id="%s">\n<table %s>\n%s</table>\n%s</div>' % ( self.prefix, self._getCSSClass('table'), self.renderContents(), self.script(**self.getDataTableConfig()))
class WorkspaceDataTableFormatter(table.ContextDataTableFormatter): data_view = "/jsonlisting" script = ViewTextTemplateFile("templates/datatable-workspace.pt") def getFieldColumns(self): column_model = [] field_model = [] for field in workspace_fields: coldef = { "key": field.name, "label": translate(_(field.title), context=self.request), "formatter": self.context.__name__ } if column_model == []: column_model.append("""{key:"%(key)s", label:"%(label)s", formatter:"%(formatter)sCustom", sortable:false, minWidth:200, resizeable:true}""" % coldef) else: column_model.append("""{key:"%(key)s", label:"%(label)s", sortable:false, resizeable:true, minWidth:150}""" % coldef) '''if column_model == []: column_model.append( """{label:"%(label)s", key:"sort_%(key)s", formatter:"%(formatter)sCustom", sortable:true, resizeable:true , children: [ { key:"%(key)s", sortable:false}]}""" % coldef ) else: column_model.append( """{label:"%(label)s", key:"sort_%(key)s", sortable:true, resizeable:true, children: [ {key:"%(key)s", sortable:false}] }""" % coldef )''' field_model.append('{key:"%s"}' % (field.name)) return ",".join(column_model), ",".join(field_model)
class WorkspaceDataTableFormatter(table.ContextDataTableFormatter): data_view = "/jsonlisting" script = ViewTextTemplateFile("templates/datatable-workspace.pt") def get_item_types(self): workspace_config = component.getUtility(IWorkspaceTabsUtility) roles = get_workspace_roles() + OBJECT_ROLES domains = [] for role in roles: dom = workspace_config.get_role_domains(role, self.context.__name__) if dom: for key in dom: if key not in domains: domains.append(key) result = dict([("", "-")]) for domain in domains: value = workspace_config.get_type(domain) if value: descriptor = queryModelDescriptor(domain) name = descriptor.display_name if descriptor else value result[value] = translate(name, context=self.request) return result def get_status(self, item_type): workspace_config = component.getUtility(IWorkspaceTabsUtility) roles = get_workspace_roles() + OBJECT_ROLES domain_class = workspace_config.get_domain(item_type) results = set() for role in roles: status = workspace_config.get_status(role, domain_class, self.context.__name__) if status: for s in status: results.add(s) translated = dict() for result in results: workflow = IWorkflow(domain_class()) status_title = translate(str(workflow.get_state(result).title), domain="bungeni", context=self.request) translated[result] = status_title return translated def getDataTableConfig(self): config = super(WorkspaceDataTableFormatter, self).getDataTableConfig() item_types = self.get_item_types() config["item_types"] = simplejson.dumps(item_types) all_item_status = dict() status = dict([("", "-")]) for item_type in item_types: for k, v in self.get_status(item_type).iteritems(): item_status_value = "%s+%s" % (item_type, k) status[item_status_value] = v all_item_status[k] = v status.update(all_item_status) config["status"] = simplejson.dumps(status) return config def getFieldColumns(self): column_model = [] field_model = [] for field in workspace_fields: coldef = { "key": field.name, "label": translate(_(field.title), context=self.request), "formatter": self.context.__name__ } if column_model == []: column_model.append("""{label:"%(label)s", key:"sort_%(key)s", formatter:"%(formatter)sCustom", sortable:true, resizeable:true , children: [{ key:"%(key)s", sortable:false}]}""" % coldef) else: column_model.append("""{label:"%(label)s", key:"sort_%(key)s", sortable:true, resizeable:true, children: [{key:"%(key)s", sortable:false}]}""" % coldef) field_model.append('{key:"%s"}' % (field.name)) return ",".join(column_model), ",".join(field_model)