Class: Writexlsx::Worksheet::Hyperlink

Inherits:
Object
  • Object
show all
Includes:
Utility
Defined in:
lib/write_xlsx/worksheet/hyperlink.rb

Overview

:nodoc:

Direct Known Subclasses

ExternalHyperlink, InternalHyperlink

Constant Summary

Constants included from Utility

Utility::COL_MAX, Utility::ROW_MAX, Utility::SHEETNAME_MAX, Utility::STR_MAX

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Utility

#absolute_char, #check_dimensions, #check_dimensions_and_update_max_min_values, #check_parameter, #convert_date_time, #dash_types, delete_files, #fill_properties, #float_to_str, #layout_properties, #line_fill_properties, #line_properties, #palette_color, #pixels_to_points, #ptrue?, #put_deprecate_message, #r_id_attributes, #row_col_notation, #shape_style_base, #store_col_max_min_values, #store_row_max_min_values, #substitute_cellref, #underline_attributes, #v_shape_attributes_base, #v_shape_style_base, #value_or_raise, #write_anchor, #write_auto_fill, #write_color, #write_comment_path, #write_div, #write_fill, #write_font, #write_stroke, #write_xml_declaration, #xl_cell_to_rowcol, #xl_col_to_name, #xl_range, #xl_range_formula, #xl_rowcol_to_cell, #xml_str

Constructor Details

#initialize(url, str, tip) ⇒ Hyperlink

Returns a new instance of Hyperlink.



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/write_xlsx/worksheet/hyperlink.rb', line 20

def initialize(url, str, tip)
  # The displayed string defaults to the url string.
  str ||= url.dup

  # Strip the mailto header.
  str.sub!(/^mailto:/, '')

  # Escape URL unless it looks already escaped.
  unless url =~ /%[0-9a-fA-F]{2}/
    # Escape the URL escape symbol.
    url = url.gsub(/%/, "%25")

    # Escape whitespae in URL.
    url = url.gsub(/[\s\x00]/, '%20')

    # Escape other special characters in URL.
    re = /(["<>\[\]`^{}])/
    while re =~ url
      match = $~[1]
      url = url.sub(re, sprintf("%%%x", match.ord))
    end
  end

  # Excel limits escaped URL to 255 characters.
  if url.bytesize > 255
    raise "URL '#{url}' > 255 characters, it exceeds Excel's limit for URLS."
  end

  @url       = url
  @str       = str
  @url_str   = nil
  @tip       = tip
end

Instance Attribute Details

#strObject (readonly)

Returns the value of attribute str.



8
9
10
# File 'lib/write_xlsx/worksheet/hyperlink.rb', line 8

def str
  @str
end

#tipObject (readonly)

Returns the value of attribute tip.



8
9
10
# File 'lib/write_xlsx/worksheet/hyperlink.rb', line 8

def tip
  @tip
end

Class Method Details

.factory(url, str = nil, tip = nil) ⇒ Object



10
11
12
13
14
15
16
17
18
# File 'lib/write_xlsx/worksheet/hyperlink.rb', line 10

def self.factory(url, str = nil, tip = nil)
  if url =~ /^internal:(.+)/
    InternalHyperlink.new($~[1], str, tip)
  elsif url =~ /^external:(.+)/
    ExternalHyperlink.new($~[1], str, tip)
  else
    new(url, str, tip)
  end
end

Instance Method Details

#attributes(row, col, id) ⇒ Object



54
55
56
57
58
59
60
61
62
63
64
# File 'lib/write_xlsx/worksheet/hyperlink.rb', line 54

def attributes(row, col, id)
  ref = xl_rowcol_to_cell(row, col)

  attr = [ ['ref', ref] ]
  attr << r_id_attributes(id)

  attr << ['location', @url_str] if @url_str
  attr << ['display',  @display] if @display
  attr << ['tooltip',  @tip]     if @tip
  attr
end

#display_onObject



70
71
72
# File 'lib/write_xlsx/worksheet/hyperlink.rb', line 70

def display_on
  @display = @url_str
end


66
67
68
# File 'lib/write_xlsx/worksheet/hyperlink.rb', line 66

def external_hyper_link
  ['/hyperlink', @url, 'External']
end