Вам нужно изменить метод так, чтобы он принимал 2-й аргумент, затем вы можете использовать его в качестве текста ссылки.Попробуйте это:
require "base64"
require "uri"
module ObfuscateMailAddress
def mailObfuscate(email_address, link_text )
base64Mail = Base64.strict_encode64(URI::encode(email_address))
# See http://techblog.tilllate.com/2008/07/20/ten-methods-to-obfuscate-e-mail-addresses-compared/
output = "<a href=\"#\" "
output += "data-contact=\"#{base64Mail}\" target=\"_blank\" "
output += "onfocus=\"this.href = 'mailto:' + atob(this.dataset.contact)\">"
output += "<script type=\"text/javascript\">document.write(atob(\"#{base64Mail}\"));</script>#{link_text}</a>"
return output
end
end
Liquid::Template.register_filter(ObfuscateMailAddress)
Чтобы передать несколько аргументов в жидком шаблоне, синтаксис немного странный, см. Документацию .Строка в левой части канала автоматически передается в качестве первого аргумента в ваш метод ruby, а дополнительные аргументы передаются с двоеточием.
{{ 'test@example.com' | mailObfuscate:'myLinkText' }}
Но вы также, если вы используете Ruby> =2.3, вы можете сделать ваш метод более читабельным без необходимости использования всех escape-символов и лучшей подсветки синтаксиса в вашем редакторе, если вы измените свой метод на использование SQUIGGLY HEREDOC для определения строки, в любом случае явный return
не требуется.Для Ruby <2.3 вы все равно можете использовать обычный HEREDOC, просто замените <code>~ на -
, но у вас просто есть дополнительный отступ в вашей строке, что, в любом случае, не представляет проблемы для визуализированного html.
def mailObfuscate(email_address, link_text )
base64Mail = Base64.strict_encode64(URI::encode(email_address))
ouput = <<~HTML
<a href="#" data-contact="#{base64Mail}" target="_blank"
onfocus="this.href = 'mailto:' + atob(this.dataset.contact)" >
<script type="text/javascript">
document.write(atob("#{base64Mail}"));
</script>
#{link_text}
</a>
HTML
end
И когда этовызывается так:
puts mailObfuscate('foo@bar.com', 'foobar')
Будет отображаться:
<a href="#" data-contact="Zm9vQGJhci5jb20=" target="_blank"
onfocus="this.href = 'mailto:' + atob(this.dataset.contact)" >
<script type="text/javascript">
document.write(atob("Zm9vQGJhci5jb20="));
</script>
foobar
</a>
В качестве примечания, Руководство по стилю ruby рекомендует использовать snake_case
для имен методовтак что вы можете использовать mail_obfuscate
вместо имени вашего метода.