* Add an encode_email tag library used to somewhat encode email addresses. Code...
authorMatthijs Kooijman <matthijs@stdin.nl>
Sun, 10 Feb 2008 15:43:55 +0000 (16:43 +0100)
committerMatthijs Kooijman <matthijs@stdin.nl>
Sun, 10 Feb 2008 15:43:55 +0000 (16:43 +0100)
tools/templatetags/encode_email.py [new file with mode: 0644]

diff --git a/tools/templatetags/encode_email.py b/tools/templatetags/encode_email.py
new file mode 100644 (file)
index 0000000..6a737d1
--- /dev/null
@@ -0,0 +1,52 @@
+import random\r
+from django import template\r
+"""\r
+    Randomized string encoding\r
+    Inspired by John Gruber's Markdown: \r
+    http://daringfireball.net/projects/markdown/syntax#autolink\r
+"""\r
+register = template.Library()\r
+\r
+#@template.stringfilter\r
+def encode_string(value):\r
+    """\r
+    Encode a string into it's equivalent html entity.\r
+\r
+    The tag will randomly choose to represent the character as a hex digit or\r
+    decimal digit.\r
+   \r
+    Use {{ obj.name|encode_string }}\r
+    \r
+    {{ "person"|encode_string }} Becomes something like:\r
+    &#112;&#101;&#x72;&#x73;&#x6f;&#110;\r
+    """\r
+    e_string = "" \r
+    for a in value:\r
+        type = random.randint(0,1)\r
+        if type:\r
+            en = "&#x%x;" % ord(a)\r
+        else:\r
+            en = "&#%d;" % ord(a)\r
+        e_string += en \r
+    return e_string\r
+\r
+register.filter("encode_string", encode_string)\r
+\r
+def encode_mailto(value, arg):\r
+    """\r
+    Encode an e-mail address and its corresponding link name to its equivalent\r
+    html entities.\r
+\r
+    Use {{ obj.email|encode_mailto:obj.name }}\r
+    \r
+    {{ "j@j.com"|encode_mailto:"j" }} Becomes something like:\r
+    <a href="&#x6d;&#x61;&#x69;&#x6c;&#x74;&#111;&#x3a;&#106;&#x40;&#106;\\r
+    &#46;&#99;&#x6f;&#x6d;">&#x6a;</a>\r
+    """\r
+    address = 'mailto:%s' % value\r
+    address = encode_string(address)\r
+    name = encode_string(arg)\r
+    tag = "<a href=\"%s\">%s</a>" % (address, name)\r
+    return tag\r
+\r
+register.filter("encode_mailto", encode_mailto)\r