templatetags: add phonenumber_fr filter (#41036)
This commit is contained in:
parent
c3e4767425
commit
1a6c51b999
|
@ -532,3 +532,38 @@ def json_script(value, element_id):
|
|||
'<script id="{}" type="application/json">{}</script>',
|
||||
element_id, mark_safe(json_str)
|
||||
)
|
||||
|
||||
|
||||
@register.filter(is_safe=False)
|
||||
def phonenumber_fr(value, separator=' '):
|
||||
DROMS = ('262', '508', '590', '594', '596')
|
||||
|
||||
if not value or not isinstance(value, six.string_types):
|
||||
return value
|
||||
number = value.strip()
|
||||
if not number:
|
||||
return value
|
||||
if number[0] == '+':
|
||||
international = '+'
|
||||
number = '00' + number[1:]
|
||||
else:
|
||||
international = '00' + separator
|
||||
number = ''.join(c for c in number if c in '0123456789')
|
||||
|
||||
def in_pairs(num):
|
||||
return separator.join(num[i*2:i*2+2] for i in range(len(num)//2))
|
||||
|
||||
# local number
|
||||
if len(number) == 10 and number[0] == '0' and number[1] in '123456789':
|
||||
return in_pairs(number)
|
||||
# international
|
||||
if len(number) == 14 and number[0:5] == '00330':
|
||||
# +/00 33 (0)x xx xx xx xx : remove (0)
|
||||
number = number[0:4] + number[5:]
|
||||
if len(number) == 13 and number[0:4] == '0033':
|
||||
return international + '33' + separator + number[4] + separator + in_pairs(number[5:])
|
||||
if len(number) == 11 and number[0:2] == '00' and number[2:5] in DROMS:
|
||||
return international + number[2:5] + separator + in_pairs(number[5:])
|
||||
|
||||
# unknown
|
||||
return value
|
||||
|
|
|
@ -697,3 +697,32 @@ def test_abs_templatetag():
|
|||
def test_json_script():
|
||||
tmpl = Template('{{ plop|json_script:"toto" }}')
|
||||
assert tmpl.render(Context({'plop': {'a': 'b'}})) == '<script id="toto" type="application/json">{"a": "b"}</script>'
|
||||
|
||||
|
||||
def test_phonenumber_fr():
|
||||
t = Template('{{ number|phonenumber_fr }}')
|
||||
assert t.render(Context({'number': '01 23 45 67 89'})) == '01 23 45 67 89'
|
||||
assert t.render(Context({'number': '0 1 23 45 67 89'})) == '01 23 45 67 89'
|
||||
assert t.render(Context({'number': '0123456789'})) == '01 23 45 67 89'
|
||||
assert t.render(Context({'number': '01.23.45.67.89'})) == '01 23 45 67 89'
|
||||
assert t.render(Context({'number': '01 23 45 67 89'})) == '01 23 45 67 89'
|
||||
|
||||
assert t.render(Context({'number': '00 33 1 23 45 67 89'})) == '00 33 1 23 45 67 89'
|
||||
assert t.render(Context({'number': '00 33 1 23 45 67 89'})) == '00 33 1 23 45 67 89'
|
||||
assert t.render(Context({'number': '+33 1 23 45 67 89'})) == '+33 1 23 45 67 89'
|
||||
assert t.render(Context({'number': '+33 (0)1 23 45 67 89'})) == '+33 1 23 45 67 89'
|
||||
|
||||
# drom
|
||||
assert t.render(Context({'number': '02 62 11 22 33'})) == '02 62 11 22 33'
|
||||
assert t.render(Context({'number': '00 262 11 22 33'})) == '00 262 11 22 33'
|
||||
assert t.render(Context({'number': '+262 112233'})) == '+262 11 22 33'
|
||||
|
||||
t = Template('{{ number|phonenumber_fr:"." }}')
|
||||
assert t.render(Context({'number': '01 23 45 67 89'})) == '01.23.45.67.89'
|
||||
|
||||
# unknown
|
||||
assert t.render(Context({'number': '12 3'})) == '12 3'
|
||||
assert t.render(Context({'number': 'bla bla'})) == 'bla bla'
|
||||
assert t.render(Context({'number': None})) == 'None'
|
||||
t = Template('{{ number|decimal|phonenumber_fr }}')
|
||||
assert t.render(Context({'number': '1,33'})) == '1.33'
|
||||
|
|
Loading…
Reference in New Issue