Module: Www::TrackingHelper

Defined in:
app/helpers/www/tracking_helper.rb

Overview

Helper methods for trackable elements with Analytics integration

Include this helper where you need trackable phone links or other
tracked contact elements.

Examples:

Include in a controller

class PagesController < ApplicationController
  helper Www::TrackingHelper
end

Include in ApplicationHelper for site-wide availability

module ApplicationHelper
  include Www::TrackingHelper
end

Instance Method Summary collapse

Instance Method Details

Trackable phone link

Generates a phone link with consistent styling.

Examples:

Basic usage

<%= trackable_phone_link %>

With custom label

<%= trackable_phone_link(label: "Call Us Now") %>

Button style

<%= trackable_phone_link(style: :button) %>

With icon

<%= trackable_phone_link(icon: true) %>

Inline in text

<p>Call us at <%= trackable_phone_link %> for help.</p>

Parameters:

  • phone_number (String) (defaults to: nil)

    The phone number to display (formatted)

  • link_number (String) (defaults to: nil)

    The phone number for the tel: link (digits only, optional - defaults to PhoneNumbers::TOLLFREE_LINK)

  • label (String) (defaults to: nil)

    Optional custom label (defaults to formatted phone number)

  • class_names (String) (defaults to: nil)

    Additional CSS classes

  • style (Symbol) (defaults to: :default)

    Predefined style (:default, :button, :footer, :inline)

  • icon (Boolean) (defaults to: false)

    Whether to show phone icon (default: false)

  • html_options (Hash)

    Additional HTML attributes



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'app/helpers/www/tracking_helper.rb', line 47

def trackable_phone_link(phone_number: nil, link_number: nil, label: nil, class_names: nil, style: :default, icon: false, **html_options)
  # Use constants as defaults - client-side JS swaps these if ga_phone cookie exists
  display_number = phone_number || PhoneNumbers::TOLLFREE
  tel_number = link_number || PhoneNumbers::TOLLFREE_LINK

  # Build CSS classes based on style
  base_classes = %w[wy-click-to-call phone-text-link]
  style_classes = case style
                  when :button
                    %w[btn btn-outline-primary]
                  when :footer
                    %w[fs-4 text btn-link p-0 footer-link]
                  when :inline
                    %w[btn-link p-0]
                  else
                    %w[contact-phone]
                  end

  all_classes = (base_classes + style_classes + Array(class_names&.split)).compact.join(' ')

  # Build the link content
  content = if icon
              safe_join([fa_icon('phone', class: 'pe-1'), label || display_number])
            else
              label || display_number
            end

  # Build the link — aria-label must contain visible text (WCAG 2.5.3)
  opts = { rel: 'nofollow', class: all_classes }
  opts[:aria] = { label: "Call #{display_number}" } unless label.present?
  opts.merge!(html_options)

  link_to content, "tel:+#{tel_number}", **opts
end