Class: AlEmailProtect::LinkTag

Inherits:
Liquid::Tag
  • Object
show all
Defined in:
lib/al_email_protect.rb

Overview

al_email_protect_link site.data.socials.email %

Emits a click-to-copy element carrying the address in halves. Falls back to a plain mailto: link when the feature is off, so a layout can call this unconditionally and get correct markup either way.

Instance Method Summary collapse

Constructor Details

#initialize(tag_name, markup, options) ⇒ LinkTag

Returns a new instance of LinkTag.



123
124
125
126
# File 'lib/al_email_protect.rb', line 123

def initialize(tag_name, markup, options)
  super
  @markup = markup.strip
end

Instance Method Details

#render(context) ⇒ Object



128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
# File 'lib/al_email_protect.rb', line 128

def render(context)
  value = context[@markup]
  value = @markup.gsub(/\A["']|["']\z/, "") if value.nil?
  return "" if value.to_s.strip.empty?

  parts = AlEmailProtect.split_address(value)
  unless AlEmailProtect.enabled?(context.registers[:site]) && parts
    escaped = AlEmailProtect.escape(value)
    return %(<a href="mailto:#{escaped}">#{escaped}</a>)
  end

  local, domain = parts
  [
    %(<a href="#" class="al-email-protect" data-eu="#{AlEmailProtect.escape(local)}" data-ed="#{AlEmailProtect.escape(domain)}">),
    %(<span class="al-email-text">#{AlEmailProtect.escape(local)}</span>),
    %(<span class="al-email-sep"> [at] </span>),
    AlEmailProtect.domain_markup(domain),
    %(</a>),
  ].join
end