html_tags 0.1.120
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of html_tags might be problematic. Click here for more details.
- checksums.yaml +7 -0
- data/README.md +110 -0
- data/USAGE.md +17 -0
- data/doc/README.gen +69 -0
- data/html_tags.gemspec +53 -0
- data/lib/html_tags/array_registered_html_tags.rb +125 -0
- data/lib/html_tags/autoinclude.rb +2 -0
- data/lib/html_tags/autoinclude_base_module.rb +7 -0
- data/lib/html_tags/base/README.md +3 -0
- data/lib/html_tags/base/base.rb +11 -0
- data/lib/html_tags/base/base_module.rb +224 -0
- data/lib/html_tags/base/prototype.rb +19 -0
- data/lib/html_tags/checks.rb +58 -0
- data/lib/html_tags/closing_tag/closing_tag.rb +76 -0
- data/lib/html_tags/constants/array_strip_newlines.rb +14 -0
- data/lib/html_tags/constants/misc.rb +21 -0
- data/lib/html_tags/constants.rb +26 -0
- data/lib/html_tags/html_closing_tags.rb +36 -0
- data/lib/html_tags/html_comment.rb +29 -0
- data/lib/html_tags/html_tags.rb +131 -0
- data/lib/html_tags/html_tags_constants.rb +14 -0
- data/lib/html_tags/individual_tags/a.rb +524 -0
- data/lib/html_tags/individual_tags/abbr.rb +44 -0
- data/lib/html_tags/individual_tags/audio.rb +32 -0
- data/lib/html_tags/individual_tags/b.rb +22 -0
- data/lib/html_tags/individual_tags/blockquote.rb +19 -0
- data/lib/html_tags/individual_tags/body.rb +19 -0
- data/lib/html_tags/individual_tags/br.rb +28 -0
- data/lib/html_tags/individual_tags/button.rb +30 -0
- data/lib/html_tags/individual_tags/canvas.rb +19 -0
- data/lib/html_tags/individual_tags/details.rb +69 -0
- data/lib/html_tags/individual_tags/div.rb +51 -0
- data/lib/html_tags/individual_tags/figure.rb +39 -0
- data/lib/html_tags/individual_tags/footer.rb +26 -0
- data/lib/html_tags/individual_tags/form.rb +93 -0
- data/lib/html_tags/individual_tags/h1.rb +36 -0
- data/lib/html_tags/individual_tags/h2.rb +42 -0
- data/lib/html_tags/individual_tags/h3.rb +73 -0
- data/lib/html_tags/individual_tags/h4.rb +36 -0
- data/lib/html_tags/individual_tags/h5.rb +36 -0
- data/lib/html_tags/individual_tags/h6.rb +40 -0
- data/lib/html_tags/individual_tags/head.rb +36 -0
- data/lib/html_tags/individual_tags/header.rb +29 -0
- data/lib/html_tags/individual_tags/html.rb +61 -0
- data/lib/html_tags/individual_tags/i.rb +14 -0
- data/lib/html_tags/individual_tags/img.rb +135 -0
- data/lib/html_tags/individual_tags/input.rb +32 -0
- data/lib/html_tags/individual_tags/label.rb +43 -0
- data/lib/html_tags/individual_tags/legend.rb +14 -0
- data/lib/html_tags/individual_tags/li.rb +44 -0
- data/lib/html_tags/individual_tags/main.rb +29 -0
- data/lib/html_tags/individual_tags/nav.rb +14 -0
- data/lib/html_tags/individual_tags/object.rb +18 -0
- data/lib/html_tags/individual_tags/ol.rb +50 -0
- data/lib/html_tags/individual_tags/p.rb +50 -0
- data/lib/html_tags/individual_tags/pre.rb +16 -0
- data/lib/html_tags/individual_tags/span.rb +60 -0
- data/lib/html_tags/individual_tags/strong.rb +17 -0
- data/lib/html_tags/individual_tags/style.rb +29 -0
- data/lib/html_tags/individual_tags/table.rb +33 -0
- data/lib/html_tags/individual_tags/tbody.rb +19 -0
- data/lib/html_tags/individual_tags/td.rb +24 -0
- data/lib/html_tags/individual_tags/textarea.rb +46 -0
- data/lib/html_tags/individual_tags/th.rb +14 -0
- data/lib/html_tags/individual_tags/thead.rb +14 -0
- data/lib/html_tags/individual_tags/title.rb +18 -0
- data/lib/html_tags/individual_tags/tr.rb +20 -0
- data/lib/html_tags/individual_tags/ul.rb +23 -0
- data/lib/html_tags/individual_tags/video.rb +54 -0
- data/lib/html_tags/module.rb +5 -0
- data/lib/html_tags/opening_tag/opening_tag.rb +288 -0
- data/lib/html_tags/project/project_base_directory.rb +23 -0
- data/lib/html_tags/requires/require_the_html_tags_project.rb +9 -0
- data/lib/html_tags/requires/require_the_img_tag.rb +7 -0
- data/lib/html_tags/shared.rb +23 -0
- data/lib/html_tags/stag.rb +54 -0
- data/lib/html_tags/toplevel_methods/add.rb +22 -0
- data/lib/html_tags/toplevel_methods/full_output.rb +33 -0
- data/lib/html_tags/toplevel_methods/newline_or_empty.rb +21 -0
- data/lib/html_tags/toplevel_methods/strip_newlines.rb +27 -0
- data/lib/html_tags/version/version.rb +17 -0
- data/lib/html_tags/yaml/valid_tags_in_a_head_tag.yml +16 -0
- data/lib/html_tags.rb +5 -0
- data/test/testing_html_tags.rb +158 -0
- data/test/testing_the_a_tag.rb +113 -0
- metadata +141 -0
|
@@ -0,0 +1,524 @@
|
|
|
1
|
+
#!/usr/bin/ruby -w
|
|
2
|
+
# Encoding: UTF-8
|
|
3
|
+
# frozen_string_literal: true
|
|
4
|
+
# =========================================================================== #
|
|
5
|
+
# require 'html_tags/individual_tags/a.rb'
|
|
6
|
+
# =========================================================================== #
|
|
7
|
+
module HtmlTags
|
|
8
|
+
|
|
9
|
+
require 'html_tags/closing_tag/closing_tag.rb'
|
|
10
|
+
require 'html_tags/toplevel_methods/add.rb'
|
|
11
|
+
|
|
12
|
+
# ========================================================================= #
|
|
13
|
+
# === HtmlTags.a (a tag)
|
|
14
|
+
#
|
|
15
|
+
# This tag will attempt to create a HTML link. It follows all other
|
|
16
|
+
# conventions as well. The first argument called `i` is the target
|
|
17
|
+
# URL to use.
|
|
18
|
+
#
|
|
19
|
+
# In plain HTML, this would be create a string such as the following one:
|
|
20
|
+
#
|
|
21
|
+
# <a href="url">Test</a>
|
|
22
|
+
#
|
|
23
|
+
# The first argument `i` is the hyperref-target.
|
|
24
|
+
#
|
|
25
|
+
# Usage examples:
|
|
26
|
+
#
|
|
27
|
+
# a('connect')
|
|
28
|
+
# a('connect', :make_newline)
|
|
29
|
+
# a('connect', 'marl1em','great_link','color: blue')
|
|
30
|
+
# a('LINUX_DESIGNING.cgi', :copy_description)
|
|
31
|
+
# a('https://de.wikipedia.org/wiki/Lampensockel#Edisonsockel', 'SELF', :make_newline)
|
|
32
|
+
# a('local_ruby_c', description: 'Ruby C Seite', css_style: 'margin-left: 2em')
|
|
33
|
+
# a(
|
|
34
|
+
# remote_url: remote_url,
|
|
35
|
+
# text: title?.to_s,
|
|
36
|
+
# css_style: 'font-weight: bold; color: darkblue'
|
|
37
|
+
# )
|
|
38
|
+
#
|
|
39
|
+
# ========================================================================= #
|
|
40
|
+
def self.a(
|
|
41
|
+
hyperref_target = '',
|
|
42
|
+
link_description = :use_hyperref_as_the_target,
|
|
43
|
+
css_class = '',
|
|
44
|
+
the_id = '',
|
|
45
|
+
css_style = '',
|
|
46
|
+
javascript = ''
|
|
47
|
+
)
|
|
48
|
+
# ======================================================================= #
|
|
49
|
+
# The following Hash can be used to store data into, such as :tooltip.
|
|
50
|
+
# ======================================================================= #
|
|
51
|
+
internal_hash = {}
|
|
52
|
+
# ======================================================================= #
|
|
53
|
+
# Store the generated String in the local variable called result.
|
|
54
|
+
# ======================================================================= #
|
|
55
|
+
result = ''.dup
|
|
56
|
+
# ======================================================================= #
|
|
57
|
+
# If make_newline is set to true then we will append a <br> tag.
|
|
58
|
+
# ======================================================================= #
|
|
59
|
+
make_newline = false
|
|
60
|
+
close_me = close(__method__) # Default. Must come before case css_class.
|
|
61
|
+
# ======================================================================= #
|
|
62
|
+
# Since as of December 2015 we will check whether we have passed an
|
|
63
|
+
# Array.
|
|
64
|
+
#
|
|
65
|
+
# This may look like that way:
|
|
66
|
+
#
|
|
67
|
+
# ["https://de.wikipedia.org/wiki/Lampensockel#Edisonsockel",
|
|
68
|
+
# {:content=>"SELF", :css_class=>"mars2em"}]
|
|
69
|
+
#
|
|
70
|
+
# or
|
|
71
|
+
#
|
|
72
|
+
# ["http://geizhals.at/philips-voice-tracer-dvt3600-digitales-diktiergeraet-a992644.html?hloc=at", "SELF", 1]
|
|
73
|
+
#
|
|
74
|
+
# So we have to stay flexible here.
|
|
75
|
+
# ======================================================================= #
|
|
76
|
+
if hyperref_target.is_a? Array
|
|
77
|
+
if hyperref_target.size > 1
|
|
78
|
+
hash = hyperref_target[1] # This may not have to be a Hash, though.
|
|
79
|
+
if hash.is_a? Hash
|
|
80
|
+
link_description = hash
|
|
81
|
+
hyperref_target = hyperref_target[0]
|
|
82
|
+
elsif hash.is_a? Array
|
|
83
|
+
if hash[1]
|
|
84
|
+
link_description = hash[1]
|
|
85
|
+
end
|
|
86
|
+
if hash[2] and (hash[2] == 1)
|
|
87
|
+
make_newline = true
|
|
88
|
+
end
|
|
89
|
+
# ================================================================= #
|
|
90
|
+
# Finally, assign the first entry to hyperref_target.
|
|
91
|
+
# ================================================================= #
|
|
92
|
+
hyperref_target = hyperref_target.first
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
if hyperref_target.is_a? Array
|
|
96
|
+
hyperref_target = hyperref_target.first
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
case css_class
|
|
100
|
+
# ======================================================================= #
|
|
101
|
+
# === :copy_description
|
|
102
|
+
# ======================================================================= #
|
|
103
|
+
when :copy_description
|
|
104
|
+
css_class = ''
|
|
105
|
+
link_description = hyperref_target
|
|
106
|
+
# ======================================================================= #
|
|
107
|
+
# === :make_newline
|
|
108
|
+
# ======================================================================= #
|
|
109
|
+
when :make_newline
|
|
110
|
+
css_class = ''
|
|
111
|
+
close_me = close(__method__) {{ make_newline: true }}
|
|
112
|
+
# ======================================================================= #
|
|
113
|
+
# === :no_newline
|
|
114
|
+
# ======================================================================= #
|
|
115
|
+
when :no_newline
|
|
116
|
+
css_class = ''
|
|
117
|
+
close_me = close(__method__) {{ make_newline: false }}
|
|
118
|
+
else # Else do not make a newline, simply pass through..
|
|
119
|
+
end
|
|
120
|
+
# ======================================================================= #
|
|
121
|
+
# === Check for hyperref_target being a Hash
|
|
122
|
+
# ======================================================================= #
|
|
123
|
+
if hyperref_target.is_a? Hash
|
|
124
|
+
# ===================================================================== #
|
|
125
|
+
# === :link_description
|
|
126
|
+
# ===================================================================== #
|
|
127
|
+
if hyperref_target.has_key? :link_description
|
|
128
|
+
link_description = hyperref_target.delete(:link_description)
|
|
129
|
+
# ===================================================================== #
|
|
130
|
+
# === :description
|
|
131
|
+
# ===================================================================== #
|
|
132
|
+
elsif hyperref_target.has_key? :description
|
|
133
|
+
link_description = hyperref_target.delete(:description)
|
|
134
|
+
end
|
|
135
|
+
# ===================================================================== #
|
|
136
|
+
# === :id
|
|
137
|
+
# ===================================================================== #
|
|
138
|
+
if hyperref_target.has_key? :id
|
|
139
|
+
the_id = hyperref_target.delete(:id)
|
|
140
|
+
# ===================================================================== #
|
|
141
|
+
# === :the_id
|
|
142
|
+
# ===================================================================== #
|
|
143
|
+
elsif hyperref_target.has_key? :the_id
|
|
144
|
+
the_id = hyperref_target.delete(:the_id)
|
|
145
|
+
end
|
|
146
|
+
# ===================================================================== #
|
|
147
|
+
# === :make_newline
|
|
148
|
+
# ===================================================================== #
|
|
149
|
+
if hyperref_target.has_key? :make_newline
|
|
150
|
+
make_newline = hyperref_target.delete(:make_newline)
|
|
151
|
+
# ===================================================================== #
|
|
152
|
+
# === :linebreak
|
|
153
|
+
# ===================================================================== #
|
|
154
|
+
elsif hyperref_target.has_key? :linebreak
|
|
155
|
+
make_newline = hyperref_target.delete(:linebreak)
|
|
156
|
+
end
|
|
157
|
+
# ===================================================================== #
|
|
158
|
+
# === :css_class
|
|
159
|
+
#
|
|
160
|
+
# Handle :css_class early on, as it is a very unproblematic entry.
|
|
161
|
+
# ===================================================================== #
|
|
162
|
+
if hyperref_target.has_key? :css_class
|
|
163
|
+
css_class = hyperref_target.delete(:css_class)
|
|
164
|
+
end
|
|
165
|
+
# ===================================================================== #
|
|
166
|
+
# === :css_style
|
|
167
|
+
#
|
|
168
|
+
# This entry point allows us to handle css-styles for a given
|
|
169
|
+
# HTML tag.
|
|
170
|
+
# ===================================================================== #
|
|
171
|
+
if hyperref_target.has_key? :css_style
|
|
172
|
+
css_style = hyperref_target.delete(:css_style)
|
|
173
|
+
end
|
|
174
|
+
# ===================================================================== #
|
|
175
|
+
# === :content
|
|
176
|
+
#
|
|
177
|
+
# Rewrite :content to the more correctly named :link_description.
|
|
178
|
+
# ===================================================================== #
|
|
179
|
+
if hyperref_target.has_key? :content
|
|
180
|
+
link_description = hyperref_target.delete(:content)
|
|
181
|
+
# ===================================================================== #
|
|
182
|
+
# === :text
|
|
183
|
+
# ===================================================================== #
|
|
184
|
+
elsif hyperref_target.has_key? :text
|
|
185
|
+
link_description = hyperref_target.delete(:text)
|
|
186
|
+
end
|
|
187
|
+
# ===================================================================== #
|
|
188
|
+
# === :link_description
|
|
189
|
+
#
|
|
190
|
+
# This entry point ought to come last.
|
|
191
|
+
# ===================================================================== #
|
|
192
|
+
if hyperref_target.has_key?(:link_description) and
|
|
193
|
+
(hyperref_target[:link_description] == 'SELF')
|
|
194
|
+
link_description = hyperref_target.delete(:link_description)
|
|
195
|
+
end
|
|
196
|
+
# ===================================================================== #
|
|
197
|
+
# The next two checks should come last, since they will modify
|
|
198
|
+
# hyperref_target.
|
|
199
|
+
# ===================================================================== #
|
|
200
|
+
# ===================================================================== #
|
|
201
|
+
# === :remote_url
|
|
202
|
+
# ===================================================================== #
|
|
203
|
+
if hyperref_target.has_key? :remote_url
|
|
204
|
+
hyperref_target = hyperref_target.delete(:remote_url)
|
|
205
|
+
# ===================================================================== #
|
|
206
|
+
# === :href
|
|
207
|
+
# ===================================================================== #
|
|
208
|
+
elsif hyperref_target.has_key? :href
|
|
209
|
+
hyperref_target = hyperref_target.delete(:href)
|
|
210
|
+
end if hyperref_target.is_a?(Hash)
|
|
211
|
+
end
|
|
212
|
+
# ======================================================================= #
|
|
213
|
+
# === Intercept Hash for the link_description variable
|
|
214
|
+
#
|
|
215
|
+
# The hash can contain entries such as linebreak: true, but also
|
|
216
|
+
# entries such as content: :self.
|
|
217
|
+
# ======================================================================= #
|
|
218
|
+
if link_description.is_a? Hash
|
|
219
|
+
# ===================================================================== #
|
|
220
|
+
# === :tooltip
|
|
221
|
+
# ===================================================================== #
|
|
222
|
+
if link_description.has_key? :tooltip
|
|
223
|
+
internal_hash[:tooltip] = link_description.delete(:tooltip)
|
|
224
|
+
end
|
|
225
|
+
# ===================================================================== #
|
|
226
|
+
# === :onclick
|
|
227
|
+
#
|
|
228
|
+
# This may look like so:
|
|
229
|
+
#
|
|
230
|
+
# onclick: 'change_the_colour_to()'
|
|
231
|
+
#
|
|
232
|
+
# ===================================================================== #
|
|
233
|
+
if link_description.has_key? :onclick
|
|
234
|
+
javascript = ' onclick="'+link_description.delete(:onclick)+'"'
|
|
235
|
+
end
|
|
236
|
+
# ===================================================================== #
|
|
237
|
+
# === :css_style
|
|
238
|
+
# ===================================================================== #
|
|
239
|
+
if link_description.has_key? :css_style
|
|
240
|
+
css_style = link_description.delete(:css_style)
|
|
241
|
+
end
|
|
242
|
+
# ===================================================================== #
|
|
243
|
+
# === :id
|
|
244
|
+
# ===================================================================== #
|
|
245
|
+
if link_description.has_key? :id
|
|
246
|
+
the_id = link_description.delete(:id)
|
|
247
|
+
# ===================================================================== #
|
|
248
|
+
# === :the_id
|
|
249
|
+
# ===================================================================== #
|
|
250
|
+
elsif link_description.has_key? :the_id
|
|
251
|
+
the_id = link_description.delete(:the_id)
|
|
252
|
+
end
|
|
253
|
+
# ===================================================================== #
|
|
254
|
+
# === css_class
|
|
255
|
+
# ===================================================================== #
|
|
256
|
+
if link_description.has_key? :css_class
|
|
257
|
+
css_class = link_description.delete(:css_class)
|
|
258
|
+
end
|
|
259
|
+
# ===================================================================== #
|
|
260
|
+
# Rewrite :link_description into :description.
|
|
261
|
+
# ===================================================================== #
|
|
262
|
+
if link_description.has_key? :description
|
|
263
|
+
link_description = link_description.delete(:description)
|
|
264
|
+
# ===================================================================== #
|
|
265
|
+
# Rewrite :link_description into :link_description.
|
|
266
|
+
# ===================================================================== #
|
|
267
|
+
elsif link_description.has_key? :link_description
|
|
268
|
+
link_description = link_description.delete(:link_description)
|
|
269
|
+
# ===================================================================== #
|
|
270
|
+
# Rewrite :title into :description.
|
|
271
|
+
#
|
|
272
|
+
# This entry point is for input such as:
|
|
273
|
+
#
|
|
274
|
+
# a('http://rubyreports.org/', title: 'Ruport')
|
|
275
|
+
#
|
|
276
|
+
# ===================================================================== #
|
|
277
|
+
elsif link_description.has_key? :title
|
|
278
|
+
link_description = link_description.delete :title
|
|
279
|
+
# ===================================================================== #
|
|
280
|
+
# === :content
|
|
281
|
+
#
|
|
282
|
+
# Rewrite :content into :link_description.
|
|
283
|
+
#
|
|
284
|
+
# This entry point is for input such as:
|
|
285
|
+
#
|
|
286
|
+
# a('http://rubyreports.org/', content: '<b>Link</b>')
|
|
287
|
+
#
|
|
288
|
+
# ===================================================================== #
|
|
289
|
+
elsif link_description.has_key? :content
|
|
290
|
+
link_description = link_description.delete(:content).to_s
|
|
291
|
+
if link_description and link_description.start_with?('→ ')
|
|
292
|
+
hyperref_target.sub!(/^→ /,'')
|
|
293
|
+
end
|
|
294
|
+
# =================================================================== #
|
|
295
|
+
# Next, we must both check for 'SELF' 'self', second variant
|
|
296
|
+
# could also be the Symbol :self.
|
|
297
|
+
# =================================================================== #
|
|
298
|
+
if link_description.include?('SELF') or (link_description.to_s == 'self')
|
|
299
|
+
if link_description.frozen?
|
|
300
|
+
link_description = link_description.dup
|
|
301
|
+
end
|
|
302
|
+
# ================================================================= #
|
|
303
|
+
# Must replace it with the proper target next.
|
|
304
|
+
# ================================================================= #
|
|
305
|
+
link_description = link_description.to_s.sub( # Ensure we have a String.
|
|
306
|
+
/^SELF/i, hyperref_target
|
|
307
|
+
)
|
|
308
|
+
end
|
|
309
|
+
else
|
|
310
|
+
# =================================================================== #
|
|
311
|
+
# We don't have a link_description entry, so we will simply use
|
|
312
|
+
# the value from hyperref_target..
|
|
313
|
+
# =================================================================== #
|
|
314
|
+
if link_description.is_a?(Hash) and link_description.empty?
|
|
315
|
+
link_description = hyperref_target.to_s.dup
|
|
316
|
+
end
|
|
317
|
+
end
|
|
318
|
+
# ===================================================================== #
|
|
319
|
+
# ==== :content
|
|
320
|
+
#
|
|
321
|
+
# This should come last, since it will overwrite link_description.
|
|
322
|
+
# ===================================================================== #
|
|
323
|
+
if link_description.is_a?(Hash) and
|
|
324
|
+
link_description.has_key?(:content)
|
|
325
|
+
link_description = link_description.delete(:content)
|
|
326
|
+
end
|
|
327
|
+
end
|
|
328
|
+
# ======================================================================= #
|
|
329
|
+
# Work on link_description next, assuming it is a String at this point.
|
|
330
|
+
# ======================================================================= #
|
|
331
|
+
case link_description.to_s
|
|
332
|
+
when /^→ / # If it starts with a right-arrow.
|
|
333
|
+
if link_description.to_s == :self
|
|
334
|
+
link_description = hyperref_target.dup.sub(/^→ /,'')
|
|
335
|
+
end
|
|
336
|
+
when /^SELF$/i
|
|
337
|
+
link_description = link_description.dup if link_description.frozen?
|
|
338
|
+
link_description = link_description.to_s.sub!(
|
|
339
|
+
/^SELF/i, hyperref_target.dup # .sub(/^→ /,'')
|
|
340
|
+
)
|
|
341
|
+
end
|
|
342
|
+
case hyperref_target
|
|
343
|
+
# Remove leading right-arrows.
|
|
344
|
+
when /^→ /
|
|
345
|
+
hyperref_target = hyperref_target.dup if hyperref_target.frozen?
|
|
346
|
+
hyperref_target.sub!(/^→ /,'')
|
|
347
|
+
end
|
|
348
|
+
# ======================================================================= #
|
|
349
|
+
# === :make_newline is treated in a special manner, as the id.
|
|
350
|
+
# Same for the number 1, which stands for newline too, due
|
|
351
|
+
# to historic reasons.
|
|
352
|
+
# ======================================================================= #
|
|
353
|
+
case the_id
|
|
354
|
+
when :make_newline, 1
|
|
355
|
+
make_newline = true
|
|
356
|
+
the_id = '' # Reset it here in this case.
|
|
357
|
+
end
|
|
358
|
+
if css_class and css_class.is_a?(String) and (css_class == 'SELF')
|
|
359
|
+
css_class = ''.dup
|
|
360
|
+
end
|
|
361
|
+
if css_class.is_a? Hash
|
|
362
|
+
# ===================================================================== #
|
|
363
|
+
# === Intercept key :css_style next, on the css_class variable
|
|
364
|
+
#
|
|
365
|
+
# This entry point is for input such as:
|
|
366
|
+
#
|
|
367
|
+
# a(@target, css_style: 'color:red; margin-left:2em')
|
|
368
|
+
#
|
|
369
|
+
# ===================================================================== #
|
|
370
|
+
if css_class.has_key? :css_style
|
|
371
|
+
css_style = css_class.delete :css_style
|
|
372
|
+
end if css_class.is_a? Hash # Must check again due to the earlier resetting.
|
|
373
|
+
# ===================================================================== #
|
|
374
|
+
# === Intercept key :css_class next
|
|
375
|
+
# ===================================================================== #
|
|
376
|
+
if css_class.has_key? :css_class
|
|
377
|
+
# =================================================================== #
|
|
378
|
+
# Must assign to css_class variable in this case:
|
|
379
|
+
# =================================================================== #
|
|
380
|
+
css_class = css_class.delete :css_class
|
|
381
|
+
end if css_class.is_a? Hash # See above explanation.
|
|
382
|
+
# ===================================================================== #
|
|
383
|
+
# === Intercept key :url next
|
|
384
|
+
# ===================================================================== #
|
|
385
|
+
if css_class.has_key? :url
|
|
386
|
+
i = css_class.delete :url
|
|
387
|
+
end if css_class.is_a? Hash # See above explanation.
|
|
388
|
+
# ===================================================================== #
|
|
389
|
+
# === Intercept key :linebreak next
|
|
390
|
+
# ===================================================================== #
|
|
391
|
+
if css_class.has_key? :linebreak
|
|
392
|
+
i = css_class.delete :linebreak
|
|
393
|
+
close_me = close(__method__) {{ make_newline: i }}
|
|
394
|
+
end if css_class.is_a? Hash # See above explanation.
|
|
395
|
+
if css_class.is_a?(Hash) and css_class.empty?
|
|
396
|
+
css_class = ''
|
|
397
|
+
end
|
|
398
|
+
end
|
|
399
|
+
# ======================================================================= #
|
|
400
|
+
# === Handle blocks next
|
|
401
|
+
#
|
|
402
|
+
# Append a pre-defined content to it, unless we also use a block.
|
|
403
|
+
# ======================================================================= #
|
|
404
|
+
if block_given?
|
|
405
|
+
yielded = yield
|
|
406
|
+
case yielded # Intercept some Symbols.
|
|
407
|
+
when :strip
|
|
408
|
+
hyperref_target.strip!
|
|
409
|
+
close_me.strip! if close_me
|
|
410
|
+
when :only_basename
|
|
411
|
+
if hyperref_target.has_key? :link_description
|
|
412
|
+
link_description = File.basename(hyperref_target[:link_description])
|
|
413
|
+
end
|
|
414
|
+
when :smaller
|
|
415
|
+
_ = link_description
|
|
416
|
+
link_description = '<span style="font-size:smaller">'+_+'</span>'
|
|
417
|
+
else
|
|
418
|
+
# =================================================================== #
|
|
419
|
+
# Assume that it could be a HTML colour, such as :slateblue:
|
|
420
|
+
# =================================================================== #
|
|
421
|
+
if yielded.is_a? Symbol
|
|
422
|
+
begin
|
|
423
|
+
require 'colours/html/html_colours.rb'
|
|
424
|
+
if Colours.is_this_html_colour_included?(yielded)
|
|
425
|
+
if css_style.nil?
|
|
426
|
+
css_style = ''.dup
|
|
427
|
+
end
|
|
428
|
+
css_style = css_style.dup if css_style.frozen?
|
|
429
|
+
css_style << " color: #{yielded};"
|
|
430
|
+
end
|
|
431
|
+
rescue LoadError
|
|
432
|
+
end
|
|
433
|
+
end
|
|
434
|
+
end
|
|
435
|
+
hyperref_target.merge!(yielded) unless yielded.is_a? Symbol
|
|
436
|
+
end
|
|
437
|
+
# ======================================================================= #
|
|
438
|
+
# === Copy the content of hyperref_target onto link_description
|
|
439
|
+
#
|
|
440
|
+
# This should come fairly late, though.
|
|
441
|
+
# ======================================================================= #
|
|
442
|
+
case link_description
|
|
443
|
+
when :use_hyperref_as_the_target
|
|
444
|
+
link_description = hyperref_target.dup
|
|
445
|
+
end
|
|
446
|
+
# ======================================================================= #
|
|
447
|
+
# Finally we will build-up the result-String next.
|
|
448
|
+
# ======================================================================= #
|
|
449
|
+
result = '<a'.dup
|
|
450
|
+
if hyperref_target.is_a?(Hash) and hyperref_target.empty? and
|
|
451
|
+
!link_description.empty?
|
|
452
|
+
hyperref_target = link_description.dup
|
|
453
|
+
end
|
|
454
|
+
hyperref_target = hyperref_target.to_s
|
|
455
|
+
result << ' href="'+hyperref_target+'"'
|
|
456
|
+
if css_class and !css_class.to_s.empty?
|
|
457
|
+
result << ' class="'+css_class.to_s+'"'
|
|
458
|
+
end
|
|
459
|
+
if the_id and !the_id.empty?
|
|
460
|
+
result << ' id="'+the_id.to_s+'"'
|
|
461
|
+
end
|
|
462
|
+
if css_style and !css_style.empty?
|
|
463
|
+
result << ' style="'+css_style.to_s+'"'
|
|
464
|
+
end
|
|
465
|
+
if javascript and !javascript.empty?
|
|
466
|
+
# The next lines exist to use "onclick" javascript directly.
|
|
467
|
+
unless javascript.lstrip.start_with? 'onclick'
|
|
468
|
+
result << ' javascript="'
|
|
469
|
+
end
|
|
470
|
+
result << javascript
|
|
471
|
+
unless javascript.lstrip.start_with? 'onclick'
|
|
472
|
+
result << '"'
|
|
473
|
+
end
|
|
474
|
+
end
|
|
475
|
+
if internal_hash.is_a?(Hash) and internal_hash.has_key?(:tooltip)
|
|
476
|
+
result << " data-tip=\"#{internal_hash[:tooltip]}\""
|
|
477
|
+
end
|
|
478
|
+
result << '>'
|
|
479
|
+
# result << N
|
|
480
|
+
result << link_description.to_s # Could be a Symbol after all.
|
|
481
|
+
result << close_me
|
|
482
|
+
if make_newline
|
|
483
|
+
result << '<br>'
|
|
484
|
+
end
|
|
485
|
+
# ======================================================================= #
|
|
486
|
+
# Must add it onto the main String too.
|
|
487
|
+
# ======================================================================= #
|
|
488
|
+
return HtmlTags.add(result)
|
|
489
|
+
end; self.instance_eval { alias slink a } # === HtmlTags.slink
|
|
490
|
+
self.instance_eval { alias link a } # === HtmlTags.link
|
|
491
|
+
|
|
492
|
+
# ========================================================================= #
|
|
493
|
+
# === a
|
|
494
|
+
# ========================================================================= #
|
|
495
|
+
def a(
|
|
496
|
+
hyperref_target = '',
|
|
497
|
+
link_description = :use_hyperref_as_the_target,
|
|
498
|
+
css_class = '',
|
|
499
|
+
the_id = '',
|
|
500
|
+
css_style = '',
|
|
501
|
+
javascript = '',
|
|
502
|
+
&block
|
|
503
|
+
)
|
|
504
|
+
HtmlTags.a(
|
|
505
|
+
hyperref_target,
|
|
506
|
+
link_description,
|
|
507
|
+
css_class,
|
|
508
|
+
the_id,
|
|
509
|
+
css_style,
|
|
510
|
+
javascript,
|
|
511
|
+
&block
|
|
512
|
+
)
|
|
513
|
+
end; alias slink a # === slink
|
|
514
|
+
alias link a # === link
|
|
515
|
+
|
|
516
|
+
end
|
|
517
|
+
|
|
518
|
+
if __FILE__ == $PROGRAM_NAME
|
|
519
|
+
alias e puts
|
|
520
|
+
puts HtmlTags.a(
|
|
521
|
+
'https://geizhals.at/diverse-cr2032-knopfzelle-a134716.html',
|
|
522
|
+
css_style: 'margin-left: 4em'
|
|
523
|
+
)
|
|
524
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# =========================================================================== #
|
|
2
|
+
# Documentation for the <abbr> tag can be found here:
|
|
3
|
+
# http://www.w3schools.com/tags/tag_abbr.asp
|
|
4
|
+
# =========================================================================== #
|
|
5
|
+
module HtmlTags
|
|
6
|
+
|
|
7
|
+
# ========================================================================= #
|
|
8
|
+
# === HtmlTags.abbr
|
|
9
|
+
#
|
|
10
|
+
# To test this method, try:
|
|
11
|
+
#
|
|
12
|
+
# HtmlTags.abbr 'WHO','World Health Organization'
|
|
13
|
+
# ========================================================================= #
|
|
14
|
+
def self.abbr(abbreviation_to_use = '', long_name = '')
|
|
15
|
+
if long_name.empty? and !abbreviation_to_use.empty?
|
|
16
|
+
# ===================================================================== #
|
|
17
|
+
# In this case, we simply copy to the long name.
|
|
18
|
+
# ===================================================================== #
|
|
19
|
+
long_name = abbreviation_to_use.to_s.dup
|
|
20
|
+
end
|
|
21
|
+
if block_given?
|
|
22
|
+
return HtmlTags.add(
|
|
23
|
+
opening_tag(__method__, title: long_name.to_s)+
|
|
24
|
+
abbreviation_to_use+
|
|
25
|
+
yield+
|
|
26
|
+
close(__method__)
|
|
27
|
+
)
|
|
28
|
+
else
|
|
29
|
+
return HtmlTags.add(
|
|
30
|
+
opening_tag(__method__, title: long_name.to_s)+
|
|
31
|
+
abbreviation_to_use+
|
|
32
|
+
close(__method__)
|
|
33
|
+
)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# ========================================================================= #
|
|
38
|
+
# === abbr
|
|
39
|
+
# ========================================================================= #
|
|
40
|
+
def abbr(abbreviation_to_use = '', long_name = '')
|
|
41
|
+
HtmlTags.abbr(abbreviation_to_use, long_name)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
module HtmlTags
|
|
2
|
+
|
|
3
|
+
# ========================================================================= #
|
|
4
|
+
# === HtmlTags.audio
|
|
5
|
+
#
|
|
6
|
+
# Use a HTML5 audio tag.
|
|
7
|
+
# ========================================================================= #
|
|
8
|
+
def self.audio(url = '', optional_autoplay = false)
|
|
9
|
+
case File.extname(url).delete('.')
|
|
10
|
+
when '','ogg'
|
|
11
|
+
use_this_audio_type = 'ogg'
|
|
12
|
+
when 'mp3'
|
|
13
|
+
use_this_audio_type = 'mpeg'
|
|
14
|
+
when 'wav'
|
|
15
|
+
use_this_audio_type = 'wav'
|
|
16
|
+
else
|
|
17
|
+
use_this_audio_type = nil # Else we will not play it.
|
|
18
|
+
end
|
|
19
|
+
if use_this_audio_type
|
|
20
|
+
result = '<audio controls'
|
|
21
|
+
result << ' autoplay="autoplay"' if optional_autoplay
|
|
22
|
+
result << '>'+N
|
|
23
|
+
result << '<source src="'+url.to_s+'" type="audio/'+use_this_audio_type.to_s+'">'+N
|
|
24
|
+
result << 'Your browser does not support the audio element.'
|
|
25
|
+
result << close(__method__)
|
|
26
|
+
else
|
|
27
|
+
nil
|
|
28
|
+
end
|
|
29
|
+
return HtmlTags.add(result)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
module HtmlTags
|
|
2
|
+
|
|
3
|
+
# ========================================================================= #
|
|
4
|
+
# === b
|
|
5
|
+
#
|
|
6
|
+
# This is the same as bold. Note that since HTML 5, it is recommended
|
|
7
|
+
# to use <strong> instead.
|
|
8
|
+
# ========================================================================= #
|
|
9
|
+
def b(
|
|
10
|
+
i = '',
|
|
11
|
+
css_class = '',
|
|
12
|
+
the_id = '',
|
|
13
|
+
css_style = ''
|
|
14
|
+
)
|
|
15
|
+
return HtmlTags.add(
|
|
16
|
+
opening_tag(__method__, css_class, the_id, css_style)+
|
|
17
|
+
i.to_s+
|
|
18
|
+
close(__method__)
|
|
19
|
+
)
|
|
20
|
+
end; alias bold b
|
|
21
|
+
|
|
22
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module HtmlTags
|
|
2
|
+
|
|
3
|
+
# ========================================================================= #
|
|
4
|
+
# === blockquote
|
|
5
|
+
# ========================================================================= #
|
|
6
|
+
def blockquote(
|
|
7
|
+
i = '',
|
|
8
|
+
css_class = '',
|
|
9
|
+
the_id = '',
|
|
10
|
+
css_style = ''
|
|
11
|
+
)
|
|
12
|
+
HtmlTags.add(
|
|
13
|
+
opening_tag(__method__, css_class, the_id, css_style)+
|
|
14
|
+
i.to_s+
|
|
15
|
+
close(__method__)
|
|
16
|
+
)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module HtmlTags
|
|
2
|
+
|
|
3
|
+
# ========================================================================= #
|
|
4
|
+
# === body
|
|
5
|
+
# ========================================================================= #
|
|
6
|
+
def body(
|
|
7
|
+
i = '',
|
|
8
|
+
css_class = '',
|
|
9
|
+
the_id = '',
|
|
10
|
+
css_style = ''
|
|
11
|
+
)
|
|
12
|
+
return HtmlTags.add(
|
|
13
|
+
opening_tag(__method__, css_class, the_id, css_style)+
|
|
14
|
+
i.to_s+
|
|
15
|
+
close(__method__)
|
|
16
|
+
)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
end
|