def renderWebItem(self, node, item, headerTemplate): i, webItemNode = item node.atts['class'] = i % 2 and 'altrow' or '' if isinstance(webItemNode, WebItemNode): webitem = webItemNode.webitem node = node.placeHolder node.checkbox.atts['name'] = str(webitem.id) node.itemDescription.content = unicode(webitem) if util.isFileURL(webitem.url): href = 'javascript:open_url(%s,"%s")' % (webitem.id, webitem.url) node.itemDescription.atts['href'] = href else: node.itemDescription.atts['href'] = webitem.url node.itemDescription.atts['title'] = '%s %s' % (webitem.modified, webitem.description) node.itemTag.tag.repeat(self.renderWebItemTag, webitem.tags) node.edit.atts['href'] %= webitem.id node.delete.atts['href'] = '%s/%s?method=delete' % (request.WEBLIB_URL, webitem.id) # if webitem.fetched: # node.cache.atts['href'] = '%s/%s/snapshotFrame' % (request.WEBLIB_URL, webitem.id) # node.cache.content = webitem.fetched # else: # node.cache.atts['href'] = '%s/%s/snapshot/get' % (request.WEBLIB_URL, webitem.id) # node.cache.content = 'download' else: tag = webItemNode.tag node.placeHolder = headerTemplate node.placeHolder.prefix.content = webItemNode.prefix node.placeHolder.itemHeader.content = unicode(tag) + webItemNode.suffix node.placeHolder.itemHeader.atts['href'] = request.tag_url([tag])
def render(self, node, tags, selectedTag, defaultTag, categoryList, webItems, ): """ @param tags - list of all tags @param selectedTag - tag selected or None @param defaultTag - a Tag (e.g. inbox) @param webItems - list of WebItemNode of WebItemTagNode """ lSelectedTagName = selectedTag and selectedTag.name.lower() or '' # ------------------------------------------------------------------------ # tag list lst = [(tag.name.lower(), tag.name, tag.id) for tag in tags] lst = [(name,id) for _,name,id in sorted(lst)] lst = [('',None)] + lst node.tagListForm.atts['action'] = selectedTag and '/weblib/@%s' % selectedTag.id or '' node.tagListForm.tag.repeat(self.renderTag, lst, lSelectedTagName) # ------------------------------------------------------------------------ # default Tag node.defaultTag.atts['href'] = request.tag_url([defaultTag]) node.defaultTag.content = unicode(defaultTag) if defaultTag.match(selectedTag): node.defaultTag.atts['class'] = 'highlight' # Actually need to make sure it is not doing search # if not lTagSelected: # node.rootTag.atts['class'] = 'highlight' # category node.catList.repeat(self.renderCatItem, categoryList, lSelectedTagName) # ------------------------------------------------------------------------ # Matching message count = sum(1 for item in webItems if isinstance(item, WebItemNode)) node.found_msg.count.content = str(count) from minds import search_engine if search_engine.getEngines(): node.found_msg.search_engine.engine.repeat(self.renderSearchEngine, search_engine.getEngines()) node.found_msg.search_engine.querytxt.content = self.querytxt else: node.found_msg.search_engine.omit() if not webItems: node.web_items.omit() return # ------------------------------------------------------------------------ # webitems headerTemplate = node.web_items.headerTemplateHolder.headerTemplate # headerTemplateHolder is only a holder for headerTemplate, hide it node.web_items.headerTemplateHolder.omit() node.web_items.webItem.repeat(self.renderWebItem, enumerate(webItems), headerTemplate)
def main(rfile, wfile, env): wlib = store.getWeblib() req = request.WeblibRequest(rfile, env) log.debug(unicode(req)) path = req.path if req.rid: # rid based (note rid maybe -1) if path and path.startswith('go;'): doGoResource(wfile, req) elif path and path == 'url': doLaunchURL(wfile, req) elif path and path.startswith('snapshot'): weblibSnapshot.main(wfile, env, req.method, req.form, req.rid, path) elif path == 'form': doWeblibForm(wfile, req) else: # show form by default doWeblibForm(wfile, req) elif req.tid: doweblibTagForm(wfile, req) else: if path == 'load': doLoad(wfile, req) elif path == 'save': doSave(wfile, req) else: # query querytxt = req.param('query') tag = req.param('tag') # redirect to default tag (if it is defined) if not ('tag' in req.form or querytxt): dt = wlib.getDefaultTag() if dt: url = request.tag_url([dt]) response.redirect(wfile, url) return # if req.param('action') == 'cancel': # response.redirect(wfile, request.WEBLIB_URL) if tag: queryTag(wfile, req, tag) elif querytxt: queryWebLib(wfile, req, tag, querytxt) else: queryRoot(wfile, req)
def renderSubCat(self, node, catNode, lSelectedTagName): if catNode == CategoryNode.BEGIN_HIGHLIGHT: node.omittags() node.link.omittags() node.link.raw="<span class='highlight'>" elif catNode == CategoryNode.END_HIGHLIGHT: node.omittags() node.link.omittags() node.link.raw='</span>' else: if catNode.level > 1: node.atts['class'] = 'SubCat2' node.link.content = catNode.tagName + (catNode.comma and ',' or '') node.link.atts['href'] = request.tag_url(catNode.tagName) if catNode.tagName.lower() == lSelectedTagName: node.link.atts['class'] = 'highlight'
def renderCatItem(self, node, item, lSelectedTagName): catNode, subcats = item isCurrent = catNode.tagName.lower() == lSelectedTagName iscollapse = not isCurrent and catNode.tag and ('c' in catNode.tag.flags) node.toggleSwitch.atts['id'] = '@%s' % catNode.id node.toggleSwitch.content = iscollapse and '+' or '-' node.link.content = catNode.tagName if catNode.id > 0: node.link.atts['href'] = request.tag_url(catNode.tagName) if isCurrent: node.atts['class'] = 'highlight' else: # otherwise it is a pseudo tag del node.link.atts['href'] node.subcat.atts['class'] = iscollapse and 'subcategoriesCollapsed' or 'subcategories' node.subcat.catItem.repeat(self.renderSubCat, subcats, lSelectedTagName)
def queryTag(wfile, req, nameOrId, sort): wlib = store.getWeblib() tag = weblib.parseTag(wlib, nameOrId) tagName = tag and tag.name or '' # Note: URL is expected to have valid tag parameter. If it turns up # nothing, one possibility is user has entered an invalid URL # manually. In that case the query below should turn out empty # result. We choose not go for the alternative or redirecting user # to / or inbox because it seems even more confusing. # category pane categoryList = _buildCategoryList(wlib, tagName) # upgrade_info upgrade_info = upgrade_checker.pollUpgradeInfo() # webitem pane if tag: webItems = _query_by_tag(wlib, tag, sort) else: # TODO: HACK!!! # Create a fake tag to fill something in the result # Seems WeblibRenderer() is OK with this fakeTagNode = WebItemTagNode(nameOrId) webItems = [fakeTagNode] renderer = WeblibRenderer(wfile) if tag: renderer.cookie['weblib_tag'] = '@%s' % tag.id if sort: renderer.cookie['weblib_sort'] = sort renderer.setLayoutParam(None) renderer.output( request.tag_url(nameOrId), wlib.tags, tag, wlib.getDefaultTag(), categoryList, upgrade_info, sort, webItems, )
def doQuery(wfile, req): wlib = store.getWeblib() querytxt = req.param('query') tag = req.param('tag') sort = _get_sort_preference(req) # No tag specified? Use fallback: 1. cookie, 2. default tag if not ('tag' in req.form or querytxt): def_tag = _tag_from_cookie(req) or wlib.getDefaultTag() if def_tag: url = request.tag_url([def_tag]) if sort: url = '%s&sort=%s' % (url, sort) response.redirect(wfile, url) return if tag: queryTag(wfile, req, tag, sort) elif querytxt: queryWebLib(wfile, req, tag, sort, querytxt) else: queryRoot(wfile, req, sort)
def renderWebItemTag(self, node, tag): node.content = unicode(tag) node.atts['href'] = request.tag_url([tag])
def render(self, node, base_url, tags, selectedTag, defaultTag, categoryList, upgrade_info, sort, webItems, ): """ @param base_url - base URL that invoke this page (without the sort parameter) @param tags - list of all tags @param selectedTag - tag selected or None @param defaultTag - a Tag (e.g. inbox) @param webItems - sequence of intermixed WebItemNode and WebItemTagNode """ lSelectedTagName = selectedTag and selectedTag.name.lower() or '' # ------------------------------------------------------------------------ # tag list lst = [(tag.name.lower(), tag.name, tag.id) for tag in tags] lst = [(name,id) for _,name,id in sorted(lst)] lst = [('',None)] + lst node.tagListForm.atts['action'] = selectedTag and '/weblib/@%s' % selectedTag.id or '' node.tagListForm.tag.repeat(self.renderTag, lst, lSelectedTagName) # ------------------------------------------------------------------------ # default Tag node.defaultTag.atts['href'] = request.tag_url([defaultTag]) node.defaultTag.content = unicode(defaultTag) if defaultTag.match(selectedTag): node.defaultTag.atts['class'] = 'highlight' # Actually need to make sure it is not doing search # if not lTagSelected: # node.rootTag.atts['class'] = 'highlight' # category node.catList.repeat(self.renderCatItem, categoryList, lSelectedTagName) # ------------------------------------------------------------------------ # upgrade info if not upgrade_info: node.upgrade_notification.omit() else: node.upgrade_notification.link.atts['href'] = upgrade_info.url node.upgrade_notification.link.title.content = upgrade_info.title node.upgrade_notification.link.summary.content = upgrade_info.summary # ------------------------------------------------------------------------ # Matching message count = sum(1 for item in webItems if isinstance(item, WebItemNode)) node.found_msg.count.content = str(count) from minds import search_engine if search_engine.getEngines(): node.found_msg.search_engine.engine.repeat(self.renderSearchEngine, search_engine.getEngines()) node.found_msg.search_engine.querytxt.content = self.querytxt else: node.found_msg.search_engine.omit() if not webItems: node.web_items.omit() return # ------------------------------------------------------------------------ # webitems Heading h = node.web_items.heading if '?' in base_url: s_url = base_url + '&sort=' else: s_url = base_url + '?sort=' if sort == SORT.TITLE_ASC: h.title.icon.atts['src'] = '/img/arrowUp.gif' h.title.atts['href'] = s_url + SORT.TITLE_DESC elif sort == SORT.TITLE_DESC: h.title.icon.atts['src'] = '/img/arrowDown.gif' h.title.atts['href'] = s_url + SORT.TITLE_ASC else: h.title.icon.omit(); h.title.atts['href'] = s_url + SORT.TITLE_ASC if sort == SORT.TAG_ASC: h.tag.icon.atts['src'] = '/img/arrowUp.gif' h.tag.atts['href'] = s_url + SORT.TAG_ASC # tag is only ordered one way elif sort == SORT.TAG_DESC: h.tag.icon.atts['src'] = '/img/arrowDown.gif' h.tag.atts['href'] = s_url + SORT.TAG_ASC else: h.tag.icon.omit(); h.tag.atts['href'] = s_url + SORT.TAG_ASC if sort == SORT.DATE_ASC: h.date.icon.atts['src'] = '/img/arrowUp.gif' h.date.atts['href'] = s_url + SORT.DATE_DESC elif sort == SORT.DATE_DESC: h.date.icon.atts['src'] = '/img/arrowDown.gif' h.date.atts['href'] = s_url + SORT.DATE_ASC else: h.date.icon.omit(); h.date.atts['href'] = s_url + SORT.DATE_ASC # ------------------------------------------------------------------------ # webitems headerTemplate = node.web_items.headerTemplateHolder.headerTemplate # headerTemplateHolder is only a holder for headerTemplate, hide it node.web_items.headerTemplateHolder.omit() node.web_items.webItem.repeat(self.renderWebItem, enumerate(webItems), headerTemplate)