def spm_stop_portlet(self): portlethash = self.request.get('portlethash') portlethash = self.request.get('viewname') portlethash = self.request.get('hereurl') info = unhashPortletInfo(portlethash) assignments = assignment_mapping_from_key(self.context, info['manager'], info['category'], info['key']) IPortletPermissionChecker(assignments.__of__(aq_inner(self.context)))() assigned = ISolgemaPortletAssignment(assignments[info['name']]) if getattr(assigned, 'stopUrls', None) and len(getattr(assigned, 'stopUrls', [])) > 0: urls = assigned.stopUrls li = [] added = False for url in urls: if hereurl in url and not added: li.append(hereurl) added = True else: li.append(url) if not added: li.append(hereurl) assigned.stopUrls = li else: assigned.stopUrls = [hereurl] return self._render_column(info, viewname)
def __call__(self): """ We look for the weight score and the portlet hash, if we have neither than we return an error message """ request = self.request weight = request.get('weight', None) portlethash = request.get('portlethash', None) try: weight = int(weight) except ValueError: err = 'Error: You must enter an integer for the portlet weight' return self.weighted_message(err) if not portlethash: return self.weighted_message('Error saving data.') info = unhashPortletInfo(portlethash) assignments = assignment_mapping_from_key(self.context, info['manager'], info['category'], info['key']) IPortletPermissionChecker(assignments.__of__(aq_inner(self.context)))() name = info['name'] if not hasattr(assignments[name], ATTR): setattr(assignments[name], ATTR, PersistentDict()) getattr(assignments[name], ATTR)['weight'] = weight return self.weighted_message('Weighting saved')
def __call__(self): """ We look for the weight score and the portlet hash, if we have neither than we return an error message """ request = self.request weight = request.get('weight', None) portlethash = request.get('portlethash', None) try: weight = int(weight) except ValueError: err = 'Error: You must enter an integer for the portlet weight' return self.weighted_message(err) if not portlethash: return self.weighted_message('Error saving data.') info = unhashPortletInfo(portlethash) # key needs to be converted to str as unicode paths are not accepted # in restrictedTraverse called in assignment_mapping_from_key assignments = assignment_mapping_from_key(self.context, info['manager'], info['category'], info['key'].encode('utf-8')) IPortletPermissionChecker(assignments.__of__(aq_inner(self.context)))() name = info['name'] if not hasattr(assignments[name], ATTR): setattr(assignments[name], ATTR, PersistentDict()) getattr(assignments[name], ATTR)['weight'] = weight return ''
def spm_left_portlet(self, portlethash, viewname): portal_state = getMultiAdapter((self.context, self.context.REQUEST), name=u'plone_portal_state') portal = portal_state.portal() info = unhashPortletInfo(portlethash) assignments = assignment_mapping_from_key(self.context, info['manager'], info['category'], info['key']) IPortletPermissionChecker(assignments.__of__(aq_inner(self.context)))() if info['category'] == 'context': context = portal.restrictedTraverse(info['key']) leftColumn = getUtility(IPortletManager, name=u'plone.leftcolumn', context=context) left = getMultiAdapter((context, leftColumn,), IPortletAssignmentMapping, context=context) left[info['name']] = assignments[info['name']] else: rightcolumn = getUtility(IPortletManager, name=u'plone.rightcolumn') leftcolumn = getUtility(IPortletManager, name=u'plone.leftcolumn') oldcategory = rightcolumn[ info['category'] ] oldstorage = oldcategory[ info['key'] ] portlet = oldstorage[ info['name'] ] newcategory = leftcolumn[ info['category'] ] newstorage = newcategory[ info['key'] ] newstorage[ info['name'] ] = portlet del assignments[info['name']] return self._render_both_column(info, viewname)
def refreshPortlet(self, portlethash, **kw): # put parameters on the request, by saving the original context self.request.form, orig_form = kw, self.request.form # Prepare the portlet and render the data info = unhashPortletInfo(portlethash) manager = getUtility(IPortletManager, info['manager']) assignment = assignment_from_key(context = self.context, manager_name = info['manager'], category = info['category'], key = info['key'], name = info['name']) renderer = getMultiAdapter( (self.context, self.request, self.view, manager, assignment.data), IPortletRenderer ) renderer = renderer.__of__(self.context) renderer.update() if IDeferredPortletRenderer.providedBy(renderer): # if this is a deferred load, prepare now the data renderer.deferred_update() result = renderer.render() # Revert the original request self.request.form = orig_form # Command the replacement wrapper_id = 'portletwrapper-%s' % portlethash ksscore = self.getCommandSet('core') ksscore.replaceInnerHTML(ksscore.getHtmlIdSelector(wrapper_id), result)
def spm_move_portlet_down(self): portlethash = self.request.get('portlethash') portlethash = self.request.get('viewname') info = unhashPortletInfo(portlethash) assignments = assignment_mapping_from_key(self.context, info['manager'], info['category'], info['key']) IPortletPermissionChecker(assignments.__of__(aq_inner(self.context)))() portal_state = getMultiAdapter((self.context, self.request), name=u'plone_portal_state') portal = portal_state.portal() # manager = getUtility(IPortletManager, name=info['manager'], context=portal) manager = getUtility(IPortletManager, name=info['manager']) listhashes = manager.listAllManagedPortlets retriever = getMultiAdapter((self.context, manager), ISolgemaPortletManagerRetriever) managedPortletsHashes = [ a['hash'] for a in retriever.getManagedPortlets() ] if portlethash in listhashes: hashAfter = managedPortletsHashes[ managedPortletsHashes.index(portlethash) + 1] listhashes.remove(portlethash) listhashes.insert(listhashes.index(hashAfter) + 1, portlethash) manager.listAllManagedPortlets = listhashes else: manager.listAllManagedPortlets = listhashes.append(portlethash) return self._render_column(info, viewname)
def spm_move_portlet_delta(self): portlethash = self.request.get('portlethash') portlethash = self.request.get('viewname') portlethash = self.request.get('delta') portal_state = getMultiAdapter((self.context, self.request), name=u'plone_portal_state') portal = portal_state.portal() info = unhashPortletInfo(portlethash) manager = getUtility(IPortletManager, name=info['manager'], context=portal) listhashes = manager.listAllManagedPortlets retriever = getMultiAdapter((self.context, manager), ISolgemaPortletManagerRetriever) managedPortletsHashes = [ a['hash'] for a in retriever.getManagedPortlets() ] if portlethash in listhashes: hashBefore = managedPortletsHashes[ managedPortletsHashes.index(portlethash) + delta] listhashes.remove(portlethash) listhashes.insert(listhashes.index(hashBefore), portlethash) manager.listAllManagedPortlets = listhashes else: manager.listAllManagedPortlets = listhashes.insert( delta, portlethash) self._render_column(info, viewname) return 'done'
def __call__(self): """Return the rendered contents of the portlet specified.""" # portletHash is built into plone.portlets.utils.hashPortletInfo # like this: # concat_txt = '%(manager)s\n%(category)s\n%(key)s\n%(name)s' % info portlethash = self.data.get('portlet_hash') # Prepare the portlet and render the data info = unhashPortletInfo(portlethash) manager = getUtility(IPortletManager, info['manager']) assignment = assignment_from_key(context=self.context, manager_name=info['manager'], category=info['category'], key=info['key'], name=info['name']) renderer = getMultiAdapter( (self.context, self.request, self, manager, assignment.data), IPortletRenderer) renderer = renderer.__of__(self.context) # This is required by some portlets and not set by # the 'portlet-renderer' helper view: renderer.__portlet_metadata__ = info renderer.update() if IDeferredPortletRenderer.providedBy(renderer): # if this is a deferred load, prepare now the data renderer.deferred_update() return u"<html><body>%s</body></html>" % renderer.render()
def spm_move_portlet_down(self): portlethash = self.request.get('portlethash') portlethash = self.request.get('viewname') info = unhashPortletInfo(portlethash) assignments = assignment_mapping_from_key(self.context, info['manager'], info['category'], info['key']) IPortletPermissionChecker(assignments.__of__(aq_inner(self.context)))() portal_state = getMultiAdapter((self.context, self.request), name=u'plone_portal_state') portal = portal_state.portal() # manager = getUtility(IPortletManager, name=info['manager'], context=portal) manager = getUtility(IPortletManager, name=info['manager']) listhashes = manager.listAllManagedPortlets retriever = getMultiAdapter((self.context, manager), ISolgemaPortletManagerRetriever) managedPortletsHashes = [a['hash'] for a in retriever.getManagedPortlets()] if portlethash in listhashes: hashAfter = managedPortletsHashes[managedPortletsHashes.index(portlethash)+1] listhashes.remove(portlethash) listhashes.insert(listhashes.index(hashAfter)+1, portlethash) manager.listAllManagedPortlets = listhashes else: manager.listAllManagedPortlets = listhashes.append(portlethash) return self._render_column(info, viewname)
def delete_portlet(self, portlethash, viewname): info = unhashPortletInfo(portlethash) assignments = assignment_mapping_from_key(self.context, info['manager'], info['category'], info['key']) IPortletPermissionChecker(assignments.__of__(aq_inner(self.context)))() del assignments[info['name']] return self._render_column(info, viewname)
def __call__(self, *args, **kwargs): hash = self.request.get('hash') index = int(self.request.get('index')) # get postit portlet portlet_info = unhashPortletInfo(hash) column, portlet = get_column_and_portlet(self.context, portlet_info) # remove note notes = portlet.notes[:] notes = notes[0:index] + notes[index + 1:] portlet.notes = notes[:]
def _get_portlet(self): portlet_hash = self.request.get('hash') info = unhashPortletInfo(portlet_hash) return assignment_from_key( context=self.context, manager_name=info['manager'], category=info['category'], key=info['key'], name=info['name'])
def toggle_visibility(self, portlethash, viewname): info = unhashPortletInfo(portlethash) assignments = assignment_mapping_from_key(self.context, info['manager'], info['category'], info['key']) IPortletPermissionChecker(assignments.__of__(aq_inner(self.context)))() assignment = assignments[info['name']] settings = IPortletAssignmentSettings(assignment) visible = settings.get('visible', True) settings['visible'] = not visible return self._render_column(info, viewname)
def _get_portlet(self): portlet_hash = self.request.get("hash") info = unhashPortletInfo(portlet_hash) return assignment_from_key( context=self.context, manager_name=info["manager"], category=info["category"], key=info["key"], name=info["name"], )
def __call__(self, *args, **kwargs): _hash = self.request.get('hash') portlet_info = unhashPortletInfo(_hash) column = self.get_column_and_portlet(portlet_info)[0] userid = portlet_info['key'] mtool = getToolByName(self.context, 'portal_membership') member = mtool.getAuthenticatedMember() if userid != member.getId(): raise Unauthorized if portlet_info['name'] in column.keys(): del column[portlet_info['name']] return ''
def spm_delete_portlet(self, portlethash, viewname): info = unhashPortletInfo(portlethash) assignments = assignment_mapping_from_key(self.context, info['manager'], info['category'], info['key']) IPortletPermissionChecker(assignments.__of__(aq_inner(self.context)))() portal_state = getMultiAdapter((self.context, self.context.REQUEST), name=u'plone_portal_state') portal = portal_state.portal() manager = getUtility(IPortletManager, name=info['manager'], context=portal) listhashes = manager.listAllManagedPortlets del assignments[info['name']] listhashes.remove(portlethash) manager.listAllManagedPortlets = listhashes return self._render_column(info, viewname)
def __call__(self, *args, **kwargs): _hash = self.request.get('hash') folded = self.request.get('folded') portlet_info = unhashPortletInfo(_hash) column, portlet = self.get_column_and_portlet(portlet_info) userid = portlet_info['key'] mtool = getToolByName(self.context, 'portal_membership') member = mtool.getAuthenticatedMember() if userid != member.getId(): raise Unauthorized if portlet_info['name'] in column.keys(): setattr(portlet, "isFolded", bool(int(folded))) return ''
def move_portlet_down(self, portlethash, viewname): info = unhashPortletInfo(portlethash) assignments = assignment_mapping_from_key(self.context, info['manager'], info['category'], info['key']) IPortletPermissionChecker(assignments.__of__(aq_inner(self.context)))() keys = list(assignments.keys()) name = info['name'] idx = keys.index(name) del keys[idx] keys.insert(idx+1, name) assignments.updateOrder(keys) return self._render_column(info, viewname)
def spm_allow_portlet(self, portlethash, viewname, hereurl): info = unhashPortletInfo(portlethash) assignments = assignment_mapping_from_key(self.context, info['manager'], info['category'], info['key']) IPortletPermissionChecker(assignments.__of__(aq_inner(self.context)))() li = [] assigned = ISolgemaPortletAssignment(assignments[info['name']]) if hasattr(assigned, 'stopUrls') and len(assigned.stopUrls) > 0: urls = assigned.stopUrls for url in urls: if url not in hereurl: li.append(url) assigned.stopUrls = li return self._render_column(info, viewname)
def getPortletRenderer(self): portlethash = self.request.get('portlethash', '') info = unhashPortletInfo(portlethash) manager = getUtility(IPortletManager, info['manager']) assignment = assignment_from_key(context = self.context, manager_name = info['manager'], category = info['category'], key = info['key'], name = info['name']) renderer = getMultiAdapter( (self.context, self.request, self, manager, assignment.data), IPortletRenderer ) return renderer.__of__(self.context)
def __call__(self): portlet_hash = self.request['portlet_hash'] info = unhashPortletInfo(portlet_hash) url = '{}/++contextportlets++plone.app.standardtiles.portletManager/{}/edit'.format(self.context.absolute_url(), info['name']) if not self.tileId: generator = getUtility(IUUIDGenerator) tileId = generator() else: tileId = self.tileId typeName = 'plone.app.standardtiles.portlet' tile_url = '{}/@@{}/{}?portlet_hash={}'.format(self.context.absolute_url(), typeName, tileId, portlet_hash) self.request.form['referer'] = tile_url self.request.response.redirect('{}?referer={}'.format(url, urllib.quote(tile_url)))
def __call__(self, *args, **kwargs): value = str(self.request.get('note')) hash_ = self.request.get('hash') # get postit portlet portlet_info = unhashPortletInfo(hash_) userid = portlet_info['key'] mtool = getToolByName(self.context, 'portal_membership') member = mtool.getAuthenticatedMember() if userid != member.getId(): raise Unauthorized column, portlet = get_column_and_portlet(self.context, portlet_info) # store data notes = portlet.notes[:] notes.append(value) portlet.notes = notes[:]
def _data(self, portlethash): """Returns zimbra mail related settings based on portlet assignment object and currently logged in user. """ context = aq_inner(self.context) info = unhashPortletInfo(portlethash) assignment = assignment_mapping_from_key(context, info['manager'], info['category'], info['key'])[info['name']] renderer = Renderer(context, self.request, self, None, assignment) username, password = renderer.getAuthCredentials() return { 'url': assignment.url, 'folder_id': assignment.folder_id, 'emails_limit': assignment.count, 'username': username, 'password': password }
def spm_move_portlet_delta(self, portlethash, viewname, delta): portal_state = getMultiAdapter((self.context, self.context.REQUEST), name=u'plone_portal_state') portal = portal_state.portal() info = unhashPortletInfo(portlethash) manager = getUtility(IPortletManager, name=info['manager'], context=portal) listhashes = manager.listAllManagedPortlets retriever = getMultiAdapter((self.context, manager), ISolgemaPortletManagerRetriever) managedPortletsHashes = [a['hash'] for a in retriever.getManagedPortlets()] if portlethash in listhashes: hashBefore = managedPortletsHashes[managedPortletsHashes.index(portlethash)+delta] listhashes.remove(portlethash) listhashes.insert(listhashes.index(hashBefore), portlethash) manager.listAllManagedPortlets = listhashes else: manager.listAllManagedPortlets = listhashes.insert(delta,portlethash) self._render_column(info, viewname) return 'done'
def _render_column(self, info=None, viewname=None, portlethash=None): if portlethash: info = unhashPortletInfo(portlethash) ksscore = self.getCommandSet('core') selector = ksscore.getCssSelector('div#portletmanager-' + info['manager'].replace('.', '-')) context = aq_inner(self.context) request = aq_inner(self.request) view = getMultiAdapter((context, request), name=viewname) manager = getUtility(IPortletManager, name=info['manager']) request['key'] = info['key'] request['viewname'] = viewname renderer = getMultiAdapter((context, request, view, manager,), IPortletManagerRenderer) renderer.update() ksscore.replaceInnerHTML(selector, renderer.__of__(context).render()) return self.render()
def __call__(self): portlet_hash = self.request['portlet_hash'] info = unhashPortletInfo(portlet_hash) url = ('{0}/++contextportlets++plone.app.standardtiles.portletManager/' '{1}/edit'.format(self.context.absolute_url(), info['name'])) if not self.tileId: generator = getUtility(IUUIDGenerator) tileId = generator() else: tileId = self.tileId typeName = 'plone.app.standardtiles.portlet' tile_url = '{0}/@@{1}/{2}?portlet_hash={3}'.format( self.context.absolute_url(), typeName, tileId, portlet_hash) self.request.form['referer'] = tile_url self.request.response.redirect('{0}?referer={0}'.format( url, urllib.parse.quote(tile_url)))
def __call__(self): _hash = self.request.get("hash") portlet_info = unhashPortletInfo(_hash) manager_name = portlet_info['manager'] userid = portlet_info['key'] name = portlet_info['name'] referer = self.request.environ['HTTP_REFERER'] baseUrl = '%s/++dashboard++%s+%s' % ( self.context.portal_url(), manager_name, userid) url = '%s/%s/edit?referer=%s' % (baseUrl, name, referer) print(url) return self.request.RESPONSE.redirect(url)
def change_portlet_weight(self, portlethash, viewname, weight): try: weight = int(weight) except ValueError: return self._render_column() info = unhashPortletInfo(portlethash) assignments = assignment_mapping_from_key( self.context, info['manager'], info['category'], info['key'] ) IPortletPermissionChecker(assignments.__of__(aq_inner(self.context)))() name = info['name'] if not hasattr(assignments[name], ATTR): setattr(assignments[name], ATTR, PersistentDict()) getattr(assignments[name], ATTR)['weight'] = weight return "done"
def render_portlet(self, portlethash, **kw): # Prepare the portlet and render the data info = unhashPortletInfo(portlethash) manager = getUtility(IPortletManager, info["manager"]) assignment = assignment_from_key( context=self.context, manager_name=info["manager"], category=info["category"], key=info["key"], name=info["name"], ) renderer = getMultiAdapter((self.context, self.request, self, manager, assignment.data), IPortletRenderer) renderer = renderer.__of__(self.context) renderer.update() if IDeferredPortletRenderer.providedBy(renderer): # if this is a deferred load, prepare now the data renderer.deferred_update() return renderer.render()
def spm_allow_portlet(self): portlethash = self.request.get('portlethash') portlethash = self.request.get('viewname') portlethash = self.request.get('hereurl') info = unhashPortletInfo(portlethash) assignments = assignment_mapping_from_key(self.context, info['manager'], info['category'], info['key']) IPortletPermissionChecker(assignments.__of__(aq_inner(self.context)))() li = [] assigned = ISolgemaPortletAssignment(assignments[info['name']]) if hasattr(assigned, 'stopUrls') and len(assigned.stopUrls) > 0: urls = assigned.stopUrls for url in urls: if url not in hereurl: li.append(url) assigned.stopUrls = li return self._render_column(info, viewname)
def render_portlet(self, portlethash, **kw): # Prepare the portlet and render the data info = unhashPortletInfo(portlethash) manager = getUtility(IPortletManager, info['manager']) assignment = assignment_from_key(context=self.context, manager_name=info['manager'], category=info['category'], key=info['key'], name=info['name']) renderer = getMultiAdapter( (self.context, self.request, self, manager, assignment.data), IPortletRenderer) renderer = renderer.__of__(self.context) renderer.update() if IDeferredPortletRenderer.providedBy(renderer): # if this is a deferred load, prepare now the data renderer.deferred_update() return renderer.render()
def delete_portlet(self, portlethash, viewname): info = unhashPortletInfo(portlethash) assignments = assignment_mapping_from_key(self.context, info['manager'], info['category'], info['key']) IPortletPermissionChecker(assignments.__of__(aq_inner(self.context)))() # set fixing_up to True to let zope.container.contained # know that our object doesn't have __name__ and __parent__ from zope.container import contained fixing_up = contained.fixing_up contained.fixing_up = True del assignments[info['name']] # revert our fixing_up customization contained.fixing_up = fixing_up return self._render_column(info, viewname)
def change_portlet_weight(self, portlethash, viewname, weight): try: weight = int(weight) except ValueError: kss_plone = self.getCommandSet('plone') msg = 'You must enter an integer for the portlet weight.' kss_plone.issuePortalMessage(msg, msgtype='error') return self.render() info = unhashPortletInfo(portlethash) assignments = assignment_mapping_from_key( self.context, info['manager'], info['category'], info['key'] ) IPortletPermissionChecker(assignments.__of__(aq_inner(self.context)))() name = info['name'] if not hasattr(assignments[name], ATTR): setattr(assignments[name], ATTR, PersistentDict()) getattr(assignments[name], ATTR)['weight'] = weight return self._render_column(info, viewname)
def spm_delete_portlet(self): portlethash = self.request.get('portlethash') portlethash = self.request.get('viewname') info = unhashPortletInfo(portlethash) assignments = assignment_mapping_from_key(self.context, info['manager'], info['category'], info['key']) IPortletPermissionChecker(assignments.__of__(aq_inner(self.context)))() portal_state = getMultiAdapter((self.context, self.request), name=u'plone_portal_state') portal = portal_state.portal() manager = getUtility(IPortletManager, name=info['manager'], context=portal) listhashes = manager.listAllManagedPortlets del assignments[info['name']] listhashes.remove(portlethash) manager.listAllManagedPortlets = listhashes return self._render_column(info, viewname)
def spm_left_portlet(self): portlethash = self.request.get('portlethash') portlethash = self.request.get('viewname') portal_state = getMultiAdapter((self.context, self.request), name=u'plone_portal_state') portal = portal_state.portal() info = unhashPortletInfo(portlethash) assignments = assignment_mapping_from_key(self.context, info['manager'], info['category'], info['key']) IPortletPermissionChecker(assignments.__of__(aq_inner(self.context)))() if info['category'] == 'context': context = portal.restrictedTraverse(info['key']) leftColumn = getUtility(IPortletManager, name=u'plone.leftcolumn', context=context) left = getMultiAdapter(( context, leftColumn, ), IPortletAssignmentMapping, context=context) left[info['name']] = assignments[info['name']] else: rightcolumn = getUtility(IPortletManager, name=u'plone.rightcolumn') leftcolumn = getUtility(IPortletManager, name=u'plone.leftcolumn') oldcategory = rightcolumn[info['category']] oldstorage = oldcategory[info['key']] portlet = oldstorage[info['name']] newcategory = leftcolumn[info['category']] newstorage = newcategory[info['key']] newstorage[info['name']] = portlet del assignments[info['name']] return self._render_both_column(info, viewname)
def reorder_portlet(self, new_column_name, new_index, _hash): portlet_info = unhashPortletInfo(_hash) name = portlet_info['name'] column = self.get_column_and_portlet(portlet_info)[0] userid = portlet_info['key'] mtool = getToolByName(self.context, 'portal_membership') member = mtool.getAuthenticatedMember() if userid != member.getId(): raise Unauthorized keys = list(column.keys()) if name in keys: keys.remove(name) keys.insert(new_index, name) column.updateOrder(keys) if column.__manager__ != new_column_name: new_column = self.get_column_by_name(new_column_name) newhash = self.move_portlet_to_column(portlet_info, new_column) return [(_hash, newhash)] else: return []
def _render_column(self, info=None, viewname=None, portlethash=None): if portlethash: info = unhashPortletInfo(portlethash) ksscore = self.getCommandSet('core') selector = ksscore.getCssSelector('div#portletmanager-' + info['manager'].replace('.', '-')) context = aq_inner(self.context) request = aq_inner(self.request) view = getMultiAdapter((context, request), name=viewname) manager = getUtility(IPortletManager, name=info['manager']) request['key'] = info['key'] request['viewname'] = viewname renderer = getMultiAdapter(( context, request, view, manager, ), IPortletManagerRenderer) renderer.update() ksscore.replaceInnerHTML(selector, renderer.__of__(context).render()) return self.render()
def __call__(self, portlethash, uid): """Expand the navtree at a given UID for a given portlet. """ rt=getToolByName(self.context, "reference_catalog") root=rt.lookupObject(uid) info=unhashPortletInfo(portlethash) assignment=assignment_from_key(self.context, info["manager"], info["category"], info["key"], info["name"]) queryBuilder = getMultiAdapter((root, assignment), INavigationQueryBuilder) strategy = getMultiAdapter((aq_inner(self.context), assignment), INavtreeStrategy) strategy = DecorateStrategy(root, strategy) query=queryBuilder() data=buildFolderTree(root, query=query, strategy=strategy) html=self.recurse(children=data.get('children', []), level=1, bottomLevel=assignment.bottomLevel) return html.encode('utf8')
def inspectElement(self, insideInspectableArea=False, talcontent=None, talattributes=None, talcondition=None, metaldefmacro=None, metalusemacro=None, fieldname=None, portlethash=None, viewlethash=None, sourceAnnotation=None): """ Get details about a particular html element. """ # Make sure we're not clicking inside the inspector div since KSS doesn't seem to provide a # way to block processing of other rules. if insideInspectableArea: logger.debug("in inspectElement") parsedTalAttributes = [] if talattributes: # logger.debug("talattributes: %s" % talattributes) # If there's only one item in the list being returned by the KSS method, # it's passing it as a string instead of a list/array. Not sure why. # Sniff the type and make it a list if needed. if isinstance(talattributes, basestring): talattributes = (talattributes,) for attr in talattributes: # logger.debug("attr: %s" % attr) attribute = {} attribute['name'], attribute['expression'], attribute['result'] = attr.split(',') parsedTalAttributes.append(attribute) unhashedPortletInfo = {} if portlethash: unhashedPortletInfo = unhashPortletInfo(portlethash) unhashedViewletInfo = {} if viewlethash: unhashedViewletInfo = unhashViewletInfo(viewlethash) if sourceAnnotation: sourceAnnotation = sourceAnnotation.strip(' =\n') template = ViewPageTemplateFile('panel_inspect_element.pt') # Wrap it so that Zope knows in what context it's being called # Otherwise, we get an "AttributeError: 'str' object has no attribute 'other'" error template = BoundPageTemplate(template, self) out = template(metalUseMacro = metalusemacro, metalDefMacro = metaldefmacro, fieldName = fieldname, talContent = talcontent, talAttributes = parsedTalAttributes, talCondition = talcondition, portletInfo = unhashedPortletInfo, viewletInfo = unhashedViewletInfo, sourceAnnotation = sourceAnnotation ) # Dump the output to the inspector panel self.updatePanelBodyContent(out) # Highlight this element ksscore = self.getCommandSet('core') self.highlightElement(ksscore.getSameNodeSelector()) # And in the nav tree (Should this be here or in the nav tree viewlet code?) if viewlethash: self.highlightInNavTree(ksscore.getCssSelector('#glowormPanelNavTree .kssattr-forviewlet-%s' % viewlethash)) return self.render()