def _render_editing(self, obj, text, icon_base_url): path = escape('/'.join(obj.getPhysicalPath())) icon = "" title = "" allowed_viewlets_ids = "" allowed_viewlets_titles = "" current_viewlet_id = "" full_path = obj.absolute_url() try: current_viewlet_id = obj.getCurrentViewlet().getId() o2 = obj.dereference() icon = escape(getIconURL(o2, icon_base_url).encode('utf8')) title = o2.title_and_id() if isinstance(title, unicode): title = escape(title.encode('utf8')) else: title = escape(title.decode('string_escape').decode('utf8')) composite_tool = getToolByName(self, TOOL_ID) viewlets_info = composite_tool.getViewletsFor(o2) allowed_viewlets = [] if viewlets_info: default_id = viewlets_info['default']["id"] default_title = viewlets_info['default']["viewlet"].title_or_id() allowed_viewlets.append((default_id, default_title)) for viewlet in viewlets_info['viewlets']: allowed_viewlets.append((viewlet["id"], viewlet["viewlet"].title_or_id())) def vcmp(x, y): return cmp(x[1], y[1]) allowed_viewlets.sort(vcmp) allowed_viewlets_ids = [v_id for v_id, v_title in allowed_viewlets] allowed_viewlets_ids = " ".join(allowed_viewlets_ids) allowed_viewlets_ids = allowed_viewlets_ids.encode('utf8') allowed_viewlets_titles = [v_title for v_id, v_title in allowed_viewlets] allowed_viewlets_titles = "%".join(allowed_viewlets_titles) allowed_viewlets_titles = allowed_viewlets_titles.encode('utf8') except: text = formatException(self, editing=1) template = plone_edit_template.__of__(self) result = template(source_path=path, icon=icon, title=title, allowed_viewlets_ids=allowed_viewlets_ids, allowed_viewlets_titles=allowed_viewlets_titles, current_viewlet_id=current_viewlet_id, full_path=full_path, text=text) return result
def _render_editing(self, obj, text, icon_base_url): path = escape('/'.join(obj.getPhysicalPath())) icon = "" title = "" allowed_viewlets_ids = "" allowed_viewlets_titles = "" current_viewlet_id = "" full_path = obj.absolute_url() try: current_viewlet_id = obj.getCurrentViewlet().getId() o2 = obj.dereference() icon = escape(getIconURL(o2, icon_base_url).encode('utf8')) title = escape(o2.title_and_id().encode('utf8')) composite_tool = getToolByName(self, TOOL_ID) viewlets_info = composite_tool.getViewletsFor(o2) allowed_viewlets = [] if viewlets_info: default_id = viewlets_info['default']["id"] default_title = viewlets_info['default']["viewlet"].title_or_id() allowed_viewlets.append((default_id, default_title)) for viewlet in viewlets_info['viewlets']: allowed_viewlets.append((viewlet["id"], viewlet["viewlet"].title_or_id())) def vcmp(x, y): return cmp(x[1], y[1]) allowed_viewlets.sort(vcmp) allowed_viewlets_ids = [v_id for v_id, v_title in allowed_viewlets] allowed_viewlets_ids = " ".join(allowed_viewlets_ids) allowed_viewlets_ids = allowed_viewlets_ids.encode('utf8') allowed_viewlets_titles = [v_title for v_id, v_title in allowed_viewlets] allowed_viewlets_titles = "%".join(allowed_viewlets_titles) allowed_viewlets_titles = allowed_viewlets_titles.encode('utf8') except: text = formatException(self, editing=1) template = plone_edit_template.__of__(self) result = template(source_path=path, icon=icon, title=title, allowed_viewlets_ids=allowed_viewlets_ids, allowed_viewlets_titles=allowed_viewlets_titles, current_viewlet_id=current_viewlet_id, full_path=full_path, text=text) return result
def renderIterator(self, allow_add=True): """Iterates over the items rendering one item for each element. Does minimal decoration of the rendered content. Exactly one yield for each item (including add/edit controls where required). If allow_add there will be one additional item yielded for the final add. """ composite = aq_parent(aq_inner(aq_parent(aq_inner(self)))) editing = composite.isEditing() items = self.objectItems() if editing: mypath = escape('/'.join(self.getPhysicalPath())) myid = self.getId() if hasattr(self, 'portal_url'): icon_base_url = self.portal_url() elif hasattr(self, 'REQUEST'): icon_base_url = self.REQUEST['BASEPATH1'] else: icon_base_url = '/' for index, (name, obj) in enumerate(items): try: assert ICompositeElement.isImplementedBy(obj), ( "Not a composite element: %s" % repr(obj)) text = obj.renderInline() except ConflictError: # Ugly ZODB requirement: don't catch ConflictErrors raise except: text = formatException(self, editing) if editing: if allow_add: add = target_tag % (myid, index, mypath, index) else: add = '' yield add + self._render_editing(obj, text, icon_base_url) else: yield text if editing and allow_add: index = len(items) yield target_tag % (myid, index, mypath, index)
def getManifest(self): """Returns a manifest of slot contents. Designed for use by page templates that implement a manual slotting user interface. """ contents = [] # [{name, slot_info}] seen = {} specs = self.getSlotSpecs() if hasattr(self, 'portal_url'): icon_base_url = self.portal_url() else: request = getattr(self, 'REQUEST', None) if request is not None: icon_base_url = request['BASEPATH1'] else: icon_base_url = '' for spec in specs: name = spec['name'] if seen.has_key(name): # Don't show duplicate uses of a slot. continue seen[name] = 1 slot = self.slots[name] elements = [] index = 0 slot_values = slot.objectValues() for element in slot_values: error = None template = None templates = () try: ob = element.dereference() template = element.queryInlineTemplate(spec['class_name']) templates = element.listAllowableInlineTemplates( spec['class_name']) except: error = formatException(self, editing=1) ob = FailedElement().__of__(self) icon = getIconURL(ob, icon_base_url) available_templates = [] for name, t in templates: if hasattr(aq_base(t), 'title_or_id'): title = t.title_or_id() else: title = name available_templates.append({'id': name, 'title': title}) element_info = { 'title': ob.title_or_id(), 'icon': icon, 'error': error, 'source_path': '/'.join(element.getPhysicalPath()), 'index': index, 'next_index': index + 1, 'can_move_up': (index > 0), 'can_move_down': (index < len(slot_values) - 1), 'template': template, 'available_templates': available_templates, } elements.append(element_info) index += 1 slot_info = { 'name': name, 'title': spec['title'] or name, 'class_name': spec['class_name'], 'target_path': '/'.join(slot.getPhysicalPath()), 'elements': elements, } contents.append(slot_info) return contents