def render_cloud(self, req, data, hacks): by_name = dict([(r[2].id, r) for r in hacks]) def link_renderer(tag, count, percent): votes, rank, resource, tags, title = by_name[tag] href = req.href.wiki(resource.id) font_size = 10.0 + (percent * 20.0) colour = 128.0 - (percent * 128.0) colour = '#%02x%02x%02x' % ((colour,) * 3) a = builder.a(tag, rel='tag', title=title, href=href, class_='tag', style='font-size: %ipx; color: %s' % (font_size, colour)) return a # TODO Top-n + sample cloud_hacks = dict([(hack[2].id, hack[0]) for hack in hacks]) data['body'] = render_cloud(self.env, req, cloud_hacks, link_renderer) return 'hacks_view.html', data, None
def render_new(self, req, data, hacks): req.perm.require('HACK_CREATE') tag_system = TagSystem(self.env) hacks = list(hacks) hack_names = set(r[2].id for r in hacks) users = set(u.id for u, _ in tag_system.query(req, 'realm:wiki user')) exclude = hack_names.union(users).union(data['types']).union(data['releases']) cloud = {} for votes, rank, resource, tags, title in hacks: for tag in tags: if tag in exclude: continue try: cloud[tag] += 1 except KeyError: cloud[tag] = 1 # Pick the top 25 tags + a random sample of 10 from the rest. cloud = sorted(cloud.items(), key=lambda i: -i[1]) remainder = cloud[25:] cloud = dict(cloud[:25] + random.sample(remainder, min(10, len(remainder)))) # Render the cloud min_px = 8 max_px = 20 def cloud_renderer(tag, count, percent): self.env.log.debug("cloud: %s = %2.2f%%" % (tag, percent * 100)) return builder.a(tag, href='#', style='font-size: %ipx' % int(min_px + percent * (max_px - min_px))) data['cloud'] = render_cloud(self.env, req, cloud, cloud_renderer) add_script(req, 'common/js/wikitoolbar.js') add_script(req, 'common/js/folding.js') data['focus'] = 'name' # Populate data with form submission if req.method == 'POST' and 'create' in req.args or 'preview' in req.args: data.update(req.args) context = self.form.validate(data) data['form_context'] = context vars = {} vars['OWNER'] = req.authname vars['WIKINAME'] = get_page_name(data['name'], data['type']) vars['TYPE'] = data.setdefault('type', 'plugin') vars['TITLE'] = data.setdefault('title', 'No title available') vars['LCNAME'] = vars['WIKINAME'].lower() vars['SOURCEURL'] = '%s/%s' % (self.svnbase, vars['LCNAME']) vars['DESCRIPTION'] = data.setdefault('description', 'No description available') vars['EXAMPLE'] = data.setdefault('example', 'No example available') if 'create' in req.args and not context.errors: success, message = self.create_hack(req, data, vars) if success: target = '%s?%s' % \ (req.href.wiki(vars['WIKINAME']), 'hack=created') req.redirect(target) raise RequestDone else: add_warning(req, message) elif 'preview' in req.args and not context.errors: page = WikiPage(self.env, self.template) if not page.exists: raise TracError('New hack template %s does not exist.' % \ self.template) template = Template(page.text).substitute(vars) template = re.sub(r'\[\[ChangeLog[^\]]*\]\]', 'No changes yet', template) data['page_preview'] = wiki_to_html(template, self.env, req) else: data['form_context'] = None data['type'] = 'plugin' data['release'] = ['0.11'] self.env.log.debug('MUPPETS AHOY') return 'hacks_new.html', data, None