def date_field(name, value=None, data_options=None, **kwargs): id = gen_id() format = get_date_format() # this hack is need for datebox correct working format = format.replace('yy', 'yyyy') _data_options = """ editable:false, formatter:function(date){return dt_formatter(date, %s);}, parser:function(s){return dt_parser(s, %s);} """ % ( jsonify(format), jsonify(format) ) if data_options: _data_options += ",%s" % data_options if value: value = format_date(value, format) html = tags.text( name, value, class_="easyui-datebox text w10", id=id, data_options=_data_options, **kwargs ) return html + HTML.literal(""" <script type="text/javascript"> add_datebox_clear_btn("#%s"); </script> """) % id
def datetime_field(name, value=None, data_options=None, **kwargs): id = gen_id() _data_options = """ editable:false, showSeconds:false, formatter:function(date){return dt_formatter(date, %s);}, parser:function(s){return dt_parser(s, %s);} """ % ( jsonify(get_datetime_format()), jsonify(get_datetime_format()) ) if data_options: _data_options += ",%s" % data_options if value: value = format_datetime(value) html = tags.text( name, value, class_="easyui-datetimebox text w10", id=id, data_options=_data_options, **kwargs ) return html + HTML.literal(""" <script type="text/javascript"> add_datetimebox_clear_btn("#%s"); </script> """) % id
def test_mail_to_with_img(self): eq_('<a href="mailto:[email protected]"><img src="/feedback.png" /></a>', mail_to("*****@*****.**", HTML.literal('<img src="/feedback.png" />')))
def test_mail_to_with_img(self): eq_( '<a href="mailto:[email protected]"><img src="/feedback.png" /></a>', mail_to("*****@*****.**", HTML.literal('<img src="/feedback.png" />')))
def mail_to(email_address, name=None, cc=None, bcc=None, subject=None, body=None, replace_at=None, replace_dot=None, encode=None, **html_attrs): """Create a link tag for starting an email to the specified ``email_address``. This ``email_address`` is also used as the name of the link unless ``name`` is specified. Additional HTML options, such as class or id, can be passed in the ``html_attrs`` hash. You can also make it difficult for spiders to harvest email address by obfuscating them. Examples:: >>> mail_to("*****@*****.**", "My email", encode = "javascript") literal(u'<script type="text/javascript">\\n//<![CDATA[\\neval(unescape(\\'%64%6f%63%75%6d%65%6e%74%2e%77%72%69%74%65%28%27%3c%61%20%68%72%65%66%3d%22%6d%61%69%6c%74%6f%3a%6d%65%40%64%6f%6d%61%69%6e%2e%63%6f%6d%22%3e%4d%79%20%65%6d%61%69%6c%3c%2f%61%3e%27%29%3b\\'))\\n//]]>\\n</script>') >>> mail_to("*****@*****.**", "My email", encode = "hex") literal(u'<a href="mailto:%6d%65@%64%6f%6d%61%69%6e.%63%6f%6d">My email</a>') You can also specify the cc address, bcc address, subject, and body parts of the message header to create a complex e-mail using the corresponding ``cc``, ``bcc``, ``subject``, and ``body`` keyword arguments. Each of these options are URI escaped and then appended to the ``email_address`` before being output. **Be aware that javascript keywords will not be escaped and may break this feature when encoding with javascript.** Examples:: >>> mail_to("*****@*****.**", "My email", cc="*****@*****.**", bcc="*****@*****.**", subject="This is an example email", body= "This is the body of the message.") literal(u'<a href="mailto:[email protected]?cc=ccaddress%40domain.com&bcc=bccaddress%40domain.com&subject=This%20is%20an%20example%20email&body=This%20is%20the%20body%20of%20the%20message.">My email</a>') """ extras = [] for item in ('cc', cc), ('bcc', bcc), ('subject', subject), ('body', body): option = item[1] if option: if not isinstance(option, literal): item = (item[0], escape(option)) extras.append(item) options_query = urllib.urlencode(extras).replace("+", "%20") protocol = 'mailto:' email_address_obfuscated = email_address if replace_at: email_address_obfuscated = email_address_obfuscated.replace('@', replace_at) if replace_dot: email_address_obfuscated = email_address_obfuscated.replace('.', replace_dot) if encode == 'hex': email_address_obfuscated = HTML.literal(''.join( ['&#%d;' % ord(x) for x in email_address_obfuscated])) protocol = HTML.literal(''.join(['&#%d;' % ord(x) for x in protocol])) word_re = re.compile('\w') encoded_parts = [] for x in email_address: if word_re.match(x): encoded_parts.append('%%%x' % ord(x)) else: encoded_parts.append(x) email_address = HTML.literal(''.join(encoded_parts)) url = HTML.literal(protocol + email_address) if options_query: url += HTML.literal('?') + options_query html_attrs['href'] = url tag = HTML.a(name or email_address_obfuscated, **html_attrs) if encode == 'javascript': tmp = "document.write('%s');" % tag string = ''.join(['%%%x' % ord(x) for x in tmp]) return HTML.script( HTML.literal("\n//<![CDATA[\neval(unescape('%s'))\n//]]>\n" % string), type="text/javascript") else: return tag
def test_link_tag_with_query_and_no_name(self): eq_(u"<a href=\"http://www.example.com?q1=v1&q2=v2\">http://www.example.com?q1=v1&q2=v2</a>", link_to(None, HTML.literal("http://www.example.com?q1=v1&q2=v2")))
def test_link_tag_with_query_and_no_name(self): a = link(None, HTML.literal("http://www.example.com?q1=v1&q2=v2")) b = "<a href=\"http://www.example.com?q1=v1&q2=v2\">http://www.example.com?q1=v1&q2=v2</a>" assert a == b
def test_mail_to_with_img(self): self.assertEqual(u'<a href="mailto:[email protected]"><img src="/feedback.png" /></a>', mail_to('*****@*****.**', HTML.literal('<img src="/feedback.png" />')))
def mail_to(email_address, name=None, cc=None, bcc=None, subject=None, body=None, replace_at=None, replace_dot=None, encode=None, **html_attrs): """Create a link tag for starting an email to the specified ``email_address``. This ``email_address`` is also used as the name of the link unless ``name`` is specified. Additional HTML options, such as class or id, can be passed in the ``html_attrs`` hash. You can also make it difficult for spiders to harvest email address by obfuscating them. Examples:: >>> mail_to("*****@*****.**", "My email", encode = "javascript") literal(u'<script type="text/javascript">\\n//<![CDATA[\\neval(unescape(\\'%64%6f%63%75%6d%65%6e%74%2e%77%72%69%74%65%28%27%3c%61%20%68%72%65%66%3d%22%6d%61%69%6c%74%6f%3a%6d%65%40%64%6f%6d%61%69%6e%2e%63%6f%6d%22%3e%4d%79%20%65%6d%61%69%6c%3c%2f%61%3e%27%29%3b\\'))\\n//]]>\\n</script>') >>> mail_to("*****@*****.**", "My email", encode = "hex") literal(u'<a href="mailto:%6d%65@%64%6f%6d%61%69%6e.%63%6f%6d">My email</a>') You can also specify the cc address, bcc address, subject, and body parts of the message header to create a complex e-mail using the corresponding ``cc``, ``bcc``, ``subject``, and ``body`` keyword arguments. Each of these options are URI escaped and then appended to the ``email_address`` before being output. **Be aware that javascript keywords will not be escaped and may break this feature when encoding with javascript.** Examples:: >>> mail_to("*****@*****.**", "My email", cc="*****@*****.**", bcc="*****@*****.**", subject="This is an example email", body= "This is the body of the message.") literal(u'<a href="mailto:[email protected]?cc=ccaddress%40domain.com&bcc=bccaddress%40domain.com&subject=This%20is%20an%20example%20email&body=This%20is%20the%20body%20of%20the%20message.">My email</a>') """ extras = [] for item in ('cc', cc), ('bcc', bcc), ('subject', subject), ('body', body): option = item[1] if option: if not isinstance(option, literal): item = (item[0], escape(option)) extras.append(item) options_query = urlencode(extras).replace("+", "%20") protocol = 'mailto:' email_address_obfuscated = email_address if replace_at: email_address_obfuscated = email_address_obfuscated.replace('@', replace_at) if replace_dot: email_address_obfuscated = email_address_obfuscated.replace('.', replace_dot) if encode == 'hex': email_address_obfuscated = HTML.literal(''.join( ['&#%d;' % ord(x) for x in email_address_obfuscated])) protocol = HTML.literal(''.join(['&#%d;' % ord(x) for x in protocol])) word_re = re.compile('\w') encoded_parts = [] for x in email_address: if word_re.match(x): encoded_parts.append('%%%x' % ord(x)) else: encoded_parts.append(x) email_address = HTML.literal(''.join(encoded_parts)) url = HTML.literal(protocol + email_address) if options_query: url += HTML.literal('?') + options_query html_attrs['href'] = url tag = HTML.tag("a", name or email_address_obfuscated, **html_attrs) if encode == 'javascript': tmp = "document.write('%s');" % tag string = ''.join(['%%%x' % ord(x) for x in tmp]) return HTML.tag("script", HTML.literal("\n//<![CDATA[\neval(unescape('%s'))\n//]]>\n" % string), type="text/javascript") else: return tag