Mercurial > public > src > rhodecode
diff pylons_app/lib/helpers.py @ 288:cd2ee462fc2c
implemented yui tooltip, and added it into annotation and main page.
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Sun, 13 Jun 2010 23:14:04 +0200 |
parents | ed7abf925696 |
children | 237470e64bb8 |
line wrap: on
line diff
--- a/pylons_app/lib/helpers.py Sun Jun 13 18:18:49 2010 +0200 +++ b/pylons_app/lib/helpers.py Sun Jun 13 23:14:04 2010 +0200 @@ -9,11 +9,12 @@ from pylons.i18n.translation import _, ungettext from vcs.utils.annotate import annotate_highlight from webhelpers.html import literal, HTML, escape +from webhelpers.html.tools import * from webhelpers.html.builder import make_tag from webhelpers.html.tags import auto_discovery_link, checkbox, css_classes, \ end_form, file, form, hidden, image, javascript_link, link_to, link_to_if, \ link_to_unless, ol, required_legend, select, stylesheet_link, submit, text, \ - password, textarea, title, ul, xml_declaration + password, textarea, title, ul, xml_declaration, radio from webhelpers.html.tools import auto_link, button_to, highlight, js_obfuscate, \ mail_to, strip_links, strip_tags, tag_re from webhelpers.number import format_byte_size, format_bit_size @@ -21,10 +22,10 @@ from webhelpers.pylonslib.secure_form import secure_form from webhelpers.text import chop_at, collapse, convert_accented_entities, \ convert_misc_entities, lchop, plural, rchop, remove_formatting, \ - replace_whitespace, urlify, truncate + replace_whitespace, urlify, truncate, wrap_paragraphs -#Custom helper here :) +#Custom helpers here :) class _Link(object): ''' Make a url based on label and url with help of url_for @@ -38,6 +39,7 @@ link_fn = link_to(label, url(*url_, **urlargs)) return link_fn +link = _Link() class _GetError(object): @@ -46,18 +48,104 @@ if form_errors and form_errors.has_key(field_name): return literal(tmpl % form_errors.get(field_name)) +get_error = _GetError() + +def recursive_replace(str, replace=' '): + """ + Recursive replace of given sign to just one instance + @param str: given string + @param replace:char to find and replace multiple instances + + Examples:: + >>> recursive_replace("Mighty---Mighty-Bo--sstones",'-') + 'Mighty-Mighty-Bo-sstones' + """ + + if str.find(replace * 2) == -1: + return str + else: + str = str.replace(replace * 2, replace) + return recursive_replace(str, replace) + +class _ToolTip(object): + + def __call__(self, tooltip_title, trim_at=50): + """ + Special function just to wrap our text into nice formatted autowrapped + text + @param tooltip_title: + """ + + return literal(wrap_paragraphs(tooltip_title, trim_at)\ + .replace('\n', '<br/>')) + + def activate(self): + """ + Adds tooltip mechanism to the given Html all tooltips have to have + set class tooltip and set attribute tooltip_title. + Then a tooltip will be generated based on that + All with yui js tooltip + """ + + js = ''' + YAHOO.util.Event.onDOMReady(function(){ + function toolTipsId(){ + var ids = []; + var tts = YAHOO.util.Dom.getElementsByClassName('tooltip'); + + for (var i = 0; i < tts.length; i++) { + //if element doesn not have and id autgenerate one for tooltip + + if (!tts[i].id){ + tts[i].id='tt'+i*100; + } + ids.push(tts[i].id); + } + return ids + }; + var myToolTips = new YAHOO.widget.Tooltip("tooltip", { + context: toolTipsId(), + monitorresize:false, + xyoffset :[0,0], + autodismissdelay:300000, + hidedelay:5, + showdelay:20, + }); + + //Mouse subscribe optional arguments + myToolTips.contextMouseOverEvent.subscribe( + function(type, args) { + var context = args[0]; + return true; + }); + + // Set the text for the tooltip just before we display it. Lazy method + myToolTips.contextTriggerEvent.subscribe( + function(type, args) { + var context = args[0]; + var txt = context.getAttribute('tooltip_title'); + this.cfg.setProperty("text", txt); + }); + }); + ''' + return literal(js) + +tooltip = _ToolTip() + class _FilesBreadCrumbs(object): def __call__(self, repo_name, rev, paths): url_l = [link_to(repo_name, url('files_home', repo_name=repo_name, revision=rev, f_path=''))] - paths_l = paths.split('/') + paths_l = paths.split(' / ') for cnt, p in enumerate(paths_l, 1): if p != '': - url_l.append(link_to(p, url('files_home', repo_name=repo_name, revision=rev, f_path='/'.join(paths_l[:cnt])))) + url_l.append(link_to(p, url('files_home', repo_name=repo_name, revision=rev, f_path=' / '.join(paths_l[:cnt])))) return literal(' / '.join(url_l)) +files_breadcrumbs = _FilesBreadCrumbs() + def pygmentize(filenode, **kwargs): """ pygmentize function using pygments @@ -81,32 +169,28 @@ else: color_dict[cs] = gen_color() col = color_dict[cs] - return "color: rgb(%s) ! important;" % (','.join(col)) + return "color: rgb(%s) ! important;" % (', '.join(col)) def url_func(changeset): - return '%s\n' % (link_to('r%s:%s' % (changeset.revision, changeset.raw_id), - url('changeset_home', repo_name='test', revision=changeset.raw_id), - title=_('author') + ':%s - %s' % (changeset.author, changeset.message,), - style=get_color_string(changeset.raw_id))) - + tooltip_html = "<div style='font-size:0.8em'><b>Author:</b> %s<br/><b>Date:</b> %s</b><br/><b>Message:</b> %s<br/></div>" + + tooltip_html = tooltip_html % (changeset.author, + changeset.date, + tooltip(changeset.message)) + lnk_format = 'r%s:%s' % (changeset.revision, + changeset.raw_id) + uri = link_to( + lnk_format, + url('changeset_home', repo_name='test', + revision=changeset.raw_id), + style=get_color_string(changeset.raw_id), + class_='tooltip', + tooltip_title=tooltip_html + ) + + uri += '\n' + return uri return literal(annotate_highlight(filenode, url_func, **kwargs)) - -def recursive_replace(str, replace=' '): - """ - Recursive replace of given sign to just one instance - @param str: given string - @param replace:char to find and replace multiple instances - - Examples:: - >>> recursive_replace("Mighty---Mighty-Bo--sstones",'-') - 'Mighty-Mighty-Bo-sstones' - """ - - if str.find(replace * 2) == -1: - return str - else: - str = str.replace(replace * 2, replace) - return recursive_replace(str, replace) def repo_name_slug(value): """ @@ -117,8 +201,5 @@ slug = slug.replace(c, '-') slug = recursive_replace(slug, '-') return slug - -files_breadcrumbs = _FilesBreadCrumbs() -link = _Link() + flash = _Flash() -get_error = _GetError()