searchlink 2.3.74 → 2.3.76

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.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/lib/searchlink/config.rb +23 -23
  3. data/lib/searchlink/curl/html.rb +38 -38
  4. data/lib/searchlink/curl/json.rb +19 -17
  5. data/lib/searchlink/curl.rb +2 -2
  6. data/lib/searchlink/exceptions.rb +2 -2
  7. data/lib/searchlink/help.rb +13 -13
  8. data/lib/searchlink/output.rb +21 -21
  9. data/lib/searchlink/parse.rb +113 -108
  10. data/lib/searchlink/plist.rb +11 -11
  11. data/lib/searchlink/script_plugin.rb +10 -10
  12. data/lib/searchlink/search.rb +6 -6
  13. data/lib/searchlink/searches/amazon.rb +4 -4
  14. data/lib/searchlink/searches/applemusic.rb +28 -28
  15. data/lib/searchlink/searches/bitly.rb +11 -11
  16. data/lib/searchlink/searches/definition.rb +7 -7
  17. data/lib/searchlink/searches/duckduckgo.rb +31 -27
  18. data/lib/searchlink/searches/github.rb +48 -48
  19. data/lib/searchlink/searches/google.rb +16 -16
  20. data/lib/searchlink/searches/helpers/chromium.rb +46 -46
  21. data/lib/searchlink/searches/helpers/firefox.rb +20 -20
  22. data/lib/searchlink/searches/helpers/safari.rb +14 -14
  23. data/lib/searchlink/searches/history.rb +78 -78
  24. data/lib/searchlink/searches/hook.rb +5 -5
  25. data/lib/searchlink/searches/itunes.rb +37 -37
  26. data/lib/searchlink/searches/lastfm.rb +13 -13
  27. data/lib/searchlink/searches/linkding.rb +14 -14
  28. data/lib/searchlink/searches/lyrics.rb +11 -11
  29. data/lib/searchlink/searches/pinboard.rb +35 -35
  30. data/lib/searchlink/searches/social.rb +45 -56
  31. data/lib/searchlink/searches/software.rb +4 -4
  32. data/lib/searchlink/searches/spelling.rb +10 -10
  33. data/lib/searchlink/searches/spotlight.rb +4 -4
  34. data/lib/searchlink/searches/stackoverflow.rb +5 -5
  35. data/lib/searchlink/searches/tmdb.rb +17 -17
  36. data/lib/searchlink/searches/twitter.rb +8 -8
  37. data/lib/searchlink/searches/wikipedia.rb +4 -4
  38. data/lib/searchlink/searches/youtube.rb +7 -7
  39. data/lib/searchlink/searches.rb +16 -16
  40. data/lib/searchlink/semver.rb +4 -4
  41. data/lib/searchlink/string.rb +55 -55
  42. data/lib/searchlink/url.rb +30 -32
  43. data/lib/searchlink/util.rb +3 -3
  44. data/lib/searchlink/version.rb +19 -21
  45. data/lib/searchlink/which.rb +5 -5
  46. data/lib/searchlink.rb +31 -31
  47. metadata +31 -18
  48. data/lib/tokens.rb +0 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a5b1d4cad05f5b0ef804188c3cb9c9fbf3c705ae417d1d3d73cd64d3c50f3cf7
4
- data.tar.gz: 026c7bf4f4bce624ecfb07bf48451e3ef336df1ee2f8add23855e140d13ea470
3
+ metadata.gz: be4b0bed0468171691989a3253680ad36237420963132e4ee7696b4ca529be78
4
+ data.tar.gz: d83e1b707146106f42557b551368831a6d09bb953ab94c9f52008f01f113978c
5
5
  SHA512:
6
- metadata.gz: ced4272b2c7f8385786c91ea4d5e59c6319b9e99913a640e1e8fe66bd5ce81eba3ceab45d2df0a4ec0fea47cca54c6e1875c65aab8e709f0f8ba1e9bef8b9223
7
- data.tar.gz: 8f6c2f7ea39c778ba95c9a8c62058980f7545b589f90e8bced84798d0ab35be27a6db9c0cbb904f4f2ae63fd12e082fa5c341f6b70ae914ed279902604db1bb3
6
+ metadata.gz: 538c8a40d2faf7deb9a228a4f05804a80dd84ee59fb1aadfc43d2e903bb7529e03358d07dc7f559508a57be5fab13ede66b342931f17e640039123f8feefe4c2
7
+ data.tar.gz: 39c52a0f44a142fa5e165bb5b2f05cc4e81446ef4ff04ae369e9cf6f181c401d8602f6bbf4958f49db4d49714beae51d77bead32ed16cff9b5ccd1ef183d048d
@@ -20,8 +20,8 @@ module SL
20
20
  # Values found in ~/.searchlink will override defaults in
21
21
  # this script
22
22
  def config_file
23
- old_style = File.expand_path('~/.searchlink')
24
- new_style = File.expand_path('~/.config/searchlink/config.yaml')
23
+ old_style = File.expand_path("~/.searchlink")
24
+ new_style = File.expand_path("~/.config/searchlink/config.yaml")
25
25
  if File.exist?(old_style) && !File.exist?(new_style)
26
26
  old_style
27
27
  else
@@ -158,7 +158,7 @@ module SL
158
158
 
159
159
  ENDCONFIG
160
160
 
161
- File.open(config_file, 'w') do |f|
161
+ File.open(config_file, "w") do |f|
162
162
  f.puts default_config
163
163
  end
164
164
  end
@@ -166,45 +166,45 @@ module SL
166
166
  config = YAML.load_file(config_file)
167
167
 
168
168
  # set to true to have an HTML comment inserted showing any errors
169
- config['debug'] ||= false
169
+ config["debug"] ||= false
170
170
 
171
171
  # set to true to get a verbose report at the end of multi-line processing
172
- config['report'] ||= false
172
+ config["report"] ||= false
173
173
 
174
- config['backup'] = true unless config.key? 'backup'
174
+ config["backup"] = true unless config.key? "backup"
175
175
 
176
- config['timeout'] ||= 15
176
+ config["timeout"] ||= 15
177
177
 
178
178
  # set to true to force inline links
179
- config['inline'] ||= false
179
+ config["inline"] ||= false
180
180
 
181
181
  # set to true to add titles to links based on site title
182
- config['include_titles'] ||= false
182
+ config["include_titles"] ||= false
183
183
 
184
184
  # set to true to remove SEO elements from page titles
185
- config['remove_seo'] ||= false
185
+ config["remove_seo"] ||= false
186
186
 
187
187
  # set to true to use page title as link text when empty
188
- config['empty_uses_page_title'] ||= false
188
+ config["empty_uses_page_title"] ||= false
189
189
 
190
190
  # change this to set a specific country for search (default US)
191
- config['country_code'] ||= 'US'
191
+ config["country_code"] ||= "US"
192
192
 
193
193
  # set to true to include a random string in ref titles
194
194
  # allows running SearchLink multiple times w/out conflicts
195
- config['prefix_random'] = false unless config['prefix_random']
195
+ config["prefix_random"] = false unless config["prefix_random"]
196
196
 
197
- config['social_template'] ||= '%service%/%user%'
197
+ config["social_template"] ||= "%service%/%user%"
198
198
 
199
199
  # append affiliate link info to iTunes urls, empty quotes for none
200
200
  # example:
201
201
  # $itunes_affiliate = "&at=10l4tL&ct=searchlink"
202
- config['itunes_affiliate'] ||= '&at=10l4tL&ct=searchlink'
202
+ config["itunes_affiliate"] ||= "&at=10l4tL&ct=searchlink"
203
203
 
204
204
  # to create Amazon affiliate links, set amazon_partner to your amazon
205
205
  # affiliate tag
206
206
  # amazon_partner: "bretttercom-20"
207
- config['amazon_partner'] ||= ''
207
+ config["amazon_partner"] ||= ""
208
208
 
209
209
  # To create custom abbreviations for Google Site Searches,
210
210
  # add to (or replace) the hash below.
@@ -212,18 +212,18 @@ module SL
212
212
  # This allows you, for example to use [search term](!bt)
213
213
  # as a shortcut to search brettterpstra.com. Keys in this
214
214
  # hash can override existing search triggers.
215
- config['custom_site_searches'] ||= {
216
- 'bt' => 'brettterpstra.com',
217
- 'imdb' => 'imdb.com'
215
+ config["custom_site_searches"] ||= {
216
+ "bt" => "brettterpstra.com",
217
+ "imdb" => "imdb.com"
218
218
  }
219
219
 
220
220
  # confirm existence of links generated from custom search replacements
221
- config['validate_links'] ||= false
221
+ config["validate_links"] ||= false
222
222
 
223
223
  # use notification center to show progress
224
- config['notifications'] ||= false
225
- config['pinboard_api_key'] ||= false
226
- config['google_api_key'] ||= false
224
+ config["notifications"] ||= false
225
+ config["pinboard_api_key"] ||= false
226
+ config["google_api_key"] ||= false
227
227
 
228
228
  SL.line_num = nil
229
229
  SL.match_column = nil
@@ -4,7 +4,7 @@ module Curl
4
4
  # String helpers
5
5
  class ::String
6
6
  def remove_entities
7
- gsub(/ /, ' ')
7
+ gsub(/ /, " ")
8
8
  end
9
9
  end
10
10
 
@@ -24,7 +24,7 @@ module Curl
24
24
  ## @return [HTMLCurl] new page object
25
25
  ##
26
26
  def initialize(url, headers: nil, headers_only: false, compressed: false)
27
- @curl = TTY::Which.which('curl')
27
+ @curl = TTY::Which.which("curl")
28
28
  res = curl_html(url, headers: headers, headers_only: headers_only, compressed: compressed)
29
29
  @url = res[:url]
30
30
  @code = res[:code]
@@ -34,8 +34,8 @@ module Curl
34
34
  @head = res[:head] unless res[:head].nil?
35
35
  @body = reencode(res[:body])
36
36
  @source = res[:source]
37
- @title = @meta['og:title'] || @meta['title'] unless @meta.nil?
38
- @description = @meta['og:description'] || @meta['description'] unless @meta.nil?
37
+ @title = @meta["og:title"] || @meta["title"] unless @meta.nil?
38
+ @description = @meta["og:description"] || @meta["description"] unless @meta.nil?
39
39
  @body_links = content_links
40
40
  @body_images = content_images
41
41
  end
@@ -85,7 +85,7 @@ module Curl
85
85
  m = tag_source.to_enum(:scan, /(\S+)=(['"])(.*?)\2/).map { Regexp.last_match }
86
86
  attrs = m.each_with_object({}) { |at, a| a[at[1]] = at[3] }
87
87
  tags = tag_source.match(/<.*?>(?<content>.*?)</)
88
- contents = tags.nil? ? nil : tags['content']
88
+ contents = tags.nil? ? nil : tags["content"]
89
89
  {
90
90
  tag: tag,
91
91
  source: tag_source,
@@ -145,7 +145,7 @@ module Curl
145
145
  next unless @meta.key?(src)
146
146
 
147
147
  output << {
148
- type: 'opengraph',
148
+ type: "opengraph",
149
149
  attrs: nil,
150
150
  src: @meta[src]
151
151
  }
@@ -167,14 +167,14 @@ module Curl
167
167
  end
168
168
  end
169
169
  output << {
170
- type: 'srcset',
170
+ type: "srcset",
171
171
  attrs: img[:attrs],
172
172
  images: srcset
173
173
  }
174
174
  end
175
175
  when /img/
176
176
  output << {
177
- type: 'img',
177
+ type: "img",
178
178
  src: img[:attrs].filter { |a| a[:key] =~ /src/i }.first[:value],
179
179
  attrs: img[:attrs]
180
180
  }
@@ -190,7 +190,7 @@ module Curl
190
190
  [
191
191
  %(<HTMLCurl: @code="#{@code}" @url="#{@url}" @title="#{@title}"),
192
192
  %(@description=#{@description} @headers:#{headers} @meta:#{meta} @links:#{links}>)
193
- ].join(' ')
193
+ ].join(" ")
194
194
  end
195
195
 
196
196
  ##
@@ -204,14 +204,14 @@ module Curl
204
204
  res = []
205
205
  headlines = @body.to_enum(:scan, %r{<h(?<level>#{level})(?<tag> .*?)?>(?<text>.*?)</h#{level}>}i).map { Regexp.last_match }
206
206
  headlines.each do |m|
207
- headline = { level: m['level'] }
208
- if m['tag'].nil?
207
+ headline = { level: m["level"] }
208
+ if m["tag"].nil?
209
209
  attrs = nil
210
210
  else
211
- attrs = m['tag'].to_enum(:scan, /(?<attr>\w+)=(?<quot>["'])(?<content>.*?)\k<quot>/).map { Regexp.last_match }
212
- attrs.each { |a| headline[a['attr'].to_sym] = a['content'] }
211
+ attrs = m["tag"].to_enum(:scan, /(?<attr>\w+)=(?<quot>["'])(?<content>.*?)\k<quot>/).map { Regexp.last_match }
212
+ attrs.each { |a| headline[a["attr"].to_sym] = a["content"] }
213
213
  end
214
- headline[:text] = m['text'].remove_entities
214
+ headline[:text] = m["text"].remove_entities
215
215
  res << headline
216
216
  end
217
217
  res
@@ -247,20 +247,20 @@ module Curl
247
247
  <(?<tag>(?!</)[a-z0-9]+)(?<attrs>\s[^>]+)?
248
248
  (?:\s*/>|>(?<content>.*?)</\k<tag>>)}).map { Regexp.last_match }
249
249
  res.map do |tag|
250
- if tag['attrs'].nil?
250
+ if tag["attrs"].nil?
251
251
  attrs = nil
252
252
  else
253
- attrs = tag['attrs'].strip.to_enum(:scan, /(?ix)
253
+ attrs = tag["attrs"].strip.to_enum(:scan, /(?ix)
254
254
  (?<key>[@a-z0-9-]+)(?:=(?<quot>["'])
255
255
  (?<value>[^"']+)\k<quot>|[ >])?/i).map { Regexp.last_match }
256
- attrs.map! { |a| { key: a['key'], value: a['key'] =~ /^(class|rel)$/ ? a['value'].split(/ /) : a['value'] } }
256
+ attrs.map! { |a| { key: a["key"], value: a["key"] =~ /^(class|rel)$/ ? a["value"].split(/ /) : a["value"] } }
257
257
  end
258
258
  {
259
- tag: tag['tag'],
259
+ tag: tag["tag"],
260
260
  source: tag.to_s,
261
261
  attrs: attrs,
262
- content: tag['content'],
263
- tags: content_tags(tag['content'])
262
+ content: tag["content"],
263
+ tags: content_tags(tag["content"])
264
264
  }
265
265
  end
266
266
  end
@@ -275,10 +275,10 @@ module Curl
275
275
  def meta_tags(head)
276
276
  meta = {}
277
277
  title = head.match(%r{(?<=<title>)(.*?)(?=</title>)})
278
- meta['title'] = title.nil? ? nil : title[1]
278
+ meta["title"] = title.nil? ? nil : title[1]
279
279
  refresh = head.match(/http-equiv=(['"])refresh\1(.*?)>/)
280
280
  url = refresh.nil? ? nil : refresh[2].match(/url=(.*?)['"]/)
281
- meta['refresh_url'] = url
281
+ meta["refresh_url"] = url
282
282
  meta_tags = head.scan(/<meta.*?>/)
283
283
  meta_tags.each do |tag|
284
284
  meta_name = tag.match(/(?:name|property|http-equiv)=(["'])(.*?)\1/)
@@ -337,15 +337,15 @@ module Curl
337
337
  links = []
338
338
  link_tags = @body.to_enum(:scan, %r{<a (?<tag>.*?)>(?<text>.*?)</a>}).map { Regexp.last_match }
339
339
  link_tags.each do |m|
340
- href = m['tag'].match(/href=(["'])(.*?)\1/)
340
+ href = m["tag"].match(/href=(["'])(.*?)\1/)
341
341
  href = href[2] unless href.nil?
342
- title = m['tag'].match(/title=(["'])(.*?)\1/)
342
+ title = m["tag"].match(/title=(["'])(.*?)\1/)
343
343
  title = title[2] unless title.nil?
344
- rel = m['tag'].match(/rel=(["'])(.*?)\1/)
344
+ rel = m["tag"].match(/rel=(["'])(.*?)\1/)
345
345
  rel = rel[2] unless rel.nil?
346
- link_class = m['tag'].match(/class=(["'])(.*?)\1/)
346
+ link_class = m["tag"].match(/class=(["'])(.*?)\1/)
347
347
  link_class = link_class[2] unless link_class.nil?
348
- text = m['text'].remove_entities
348
+ text = m["text"].remove_entities
349
349
  link = {
350
350
  href: href,
351
351
  title: title,
@@ -367,9 +367,9 @@ module Curl
367
367
  images = []
368
368
  image_tags = @body.to_enum(:scan, %r{<img (?<tag>.*?)/?>}).map { Regexp.last_match }
369
369
  image_tags.each do |m|
370
- attrs = m['tag'].to_enum(:scan, /(?<attr>\w+)=(?<quot>["'])(?<content>.*?)\k<quot>/).map { Regexp.last_match }
370
+ attrs = m["tag"].to_enum(:scan, /(?<attr>\w+)=(?<quot>["'])(?<content>.*?)\k<quot>/).map { Regexp.last_match }
371
371
  image = {}
372
- attrs.each { |a| image[a['attr'].to_sym] = a['content'] }
372
+ attrs.each { |a| image[a["attr"].to_sym] = a["content"] }
373
373
  images << image
374
374
  end
375
375
  images
@@ -386,13 +386,13 @@ module Curl
386
386
  ## @return [Hash] hash of url, code, headers, meta, links, head, body, and source
387
387
  ##
388
388
  def curl_html(url, headers: nil, headers_only: false, compressed: false)
389
- flags = 'SsL'
390
- flags += headers_only ? 'I' : 'i'
391
- agent = ['Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us)',
392
- 'AppleWebKit/533.17.9 (KHTML, like Gecko)',
393
- 'Version/5.0.2 Mobile/8J2 Safari/6533.18.5'].join(' ')
394
- headers = headers.nil? ? '' : headers.map { |h, v| %(-H "#{h}: #{v}") }.join(' ')
395
- compress = compressed ? '--compressed' : ''
389
+ flags = "SsL"
390
+ flags += headers_only ? "I" : "i"
391
+ agent = ["Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us)",
392
+ "AppleWebKit/533.17.9 (KHTML, like Gecko)",
393
+ "Version/5.0.2 Mobile/8J2 Safari/6533.18.5"].join(" ")
394
+ headers = headers.nil? ? "" : headers.map { |h, v| %(-H "#{h}: #{v}") }.join(" ")
395
+ compress = compressed ? "--compressed" : ""
396
396
  source = `#{@curl} -#{flags} #{compress} #{headers} '#{url}' 2>/dev/null`
397
397
  if source.nil? || source.empty?
398
398
  source = `#{@curl} -#{flags} #{compress} -A "#{agent}" #{headers} '#{url}' 2>/dev/null`
@@ -416,7 +416,7 @@ module Curl
416
416
  end
417
417
  end
418
418
 
419
- if headers['content-type'] =~ /json/
419
+ if headers["content-type"] =~ /json/
420
420
  return { url: url, code: code, headers: headers, meta: nil, links: nil, head: nil, body: source.strip, source: source.strip, body_links: nil, body_images: nil }
421
421
  end
422
422
 
@@ -457,7 +457,7 @@ module Curl
457
457
 
458
458
  # look for a charset in a meta tag in the first 1024 bytes
459
459
  unless encoding
460
- data = body[0..1023].gsub(/<!--.*?(-->|\Z)/m, '')
460
+ data = body[0..1023].gsub(/<!--.*?(-->|\Z)/m, "")
461
461
  data.scan(/<meta.*?>/im).each do |meta|
462
462
  encoding ||= meta[/charset=["']?([^>]*?)($|["'\s>])/im, 1]
463
463
  end
@@ -14,9 +14,9 @@ module Curl
14
14
  ##
15
15
  ## @return [Curl::Json] Curl::Json object with url, code, parsed json, and response headers
16
16
  ##
17
- def initialize(url, headers: nil, compressed: false, symbolize_names: false)
18
- @curl = TTY::Which.which('curl')
19
- page = curl_json(url, headers: headers, compressed: compressed, symbolize_names: symbolize_names)
17
+ def initialize(url, data: nil, headers: nil, compressed: false, symbolize_names: false)
18
+ @curl = TTY::Which.which("curl")
19
+ page = curl_json(url, data: data, headers: headers, compressed: compressed, symbolize_names: symbolize_names)
20
20
  @url = page[:url]
21
21
  @code = page[:code]
22
22
  @json = page[:json]
@@ -28,10 +28,10 @@ module Curl
28
28
  target = json
29
29
  parts.each do |part|
30
30
  target = if part =~ /(?<key>[^\[]+)\[(?<int>\d+)\]/
31
- target[key][int.to_i]
32
- else
33
- target[part]
34
- end
31
+ target[key][int.to_i]
32
+ else
33
+ target[part]
34
+ end
35
35
  end
36
36
 
37
37
  target
@@ -48,14 +48,16 @@ module Curl
48
48
  ##
49
49
  ## @return [Hash] hash of url, code, headers, and parsed json
50
50
  ##
51
- def curl_json(url, headers: nil, compressed: false, symbolize_names: false)
52
- flags = 'SsLi'
53
- agent = ['Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us)',
54
- 'AppleWebKit/533.17.9 (KHTML, like Gecko)',
55
- 'Version/5.0.2 Mobile/8J2 Safari/6533.18.5'].join(' ')
56
- headers = headers.nil? ? '' : headers.map { |h, v| %(-H "#{h}: #{v}") }.join(' ')
57
- compress = compressed ? '--compressed' : ''
58
- source = `#{@curl} -#{flags} #{compress} #{headers} '#{url}' 2>/dev/null`
51
+ def curl_json(url, data: nil, headers: nil, compressed: false, symbolize_names: false)
52
+ flags = "SsLi"
53
+ agent = ["Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us)",
54
+ "AppleWebKit/533.17.9 (KHTML, like Gecko)",
55
+ "Version/5.0.2 Mobile/8J2 Safari/6533.18.5"].join(" ")
56
+ headers = headers.nil? ? "" : headers.map { |h, v| %(-H "#{h}: #{v}") }.join(" ")
57
+ data = data.nil? ? "" : %(-d '#{data}')
58
+ compress = compressed ? "--compressed" : ""
59
+
60
+ source = `#{@curl} -#{flags} #{compress} #{headers} #{data} "#{url}" 2>/dev/null`
59
61
  if source.nil? || source.empty?
60
62
  source = `#{@curl} -#{flags} #{compress} -A "#{agent}" #{headers} '#{url}' 2>/dev/null`
61
63
  end
@@ -78,9 +80,9 @@ module Curl
78
80
  end
79
81
  end
80
82
 
81
- json = source.strip.force_encoding('utf-8')
83
+ json = source.strip.force_encoding("utf-8")
82
84
 
83
- json.gsub!(/[\u{1F600}-\u{1F6FF}]/, '')
85
+ json.gsub!(/[\u{1F600}-\u{1F6FF}]/, "")
84
86
 
85
87
  { url: url, code: code, headers: headers, json: JSON.parse(json, symbolize_names: symbolize_names) }
86
88
  rescue StandardError => e
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # import
4
- require_relative 'curl/html'
4
+ require_relative "curl/html"
5
5
 
6
6
  # import
7
- require_relative 'curl/json'
7
+ require_relative "curl/json"
@@ -4,7 +4,7 @@ module SL
4
4
  # Custom Semantic Versioning error
5
5
  class VersionError < StandardError
6
6
  def initialize(msg)
7
- msg = msg ? ": #{msg}" : ''
7
+ msg = msg ? ": #{msg}" : ""
8
8
  puts "Versioning error#{msg}"
9
9
 
10
10
  super()
@@ -17,7 +17,7 @@ module SL
17
17
  class PluginError < StandardError
18
18
  def initialize(msg = nil, plugin: nil)
19
19
  plugin = %("#{plugin}") if plugin
20
- plugin ||= 'plugin'
20
+ plugin ||= "plugin"
21
21
  msg = ": #{msg}" if msg
22
22
  puts "Error in #{plugin}#{msg}"
23
23
 
@@ -65,36 +65,36 @@ module SL
65
65
  #{SL::Searches.available_searches}
66
66
  EOHELP
67
67
 
68
- if SL.config['custom_site_searches']
68
+ if SL.config["custom_site_searches"]
69
69
  text += "\n-- [Custom Searches] ----------------------\n"
70
- SL.config['custom_site_searches'].sort_by { |l, _s| l }.each { |label, site| text += "!#{label}#{label.spacer} #{site}\n" }
70
+ SL.config["custom_site_searches"].sort_by { |l, _s| l }.each { |label, site| text += "!#{label}#{label.spacer} #{site}\n" }
71
71
  end
72
72
  text
73
73
  end
74
74
 
75
75
  def help_html
76
76
  out = ['<input type="text" id="filter" onkeyup="filterTable()" placeholder="Filter searches">']
77
- out << '<h2>Available Searches</h2>'
77
+ out << "<h2>Available Searches</h2>"
78
78
  out << SL::Searches.available_searches_html
79
- out << '<h2>Custom Searches</h2>'
79
+ out << "<h2>Custom Searches</h2>"
80
80
  out << '<table id="custom">'
81
- out << '<thead><td>Shortcut</td><td>Search Type</td></thead>'
82
- out << '<tbody>'
83
- SL.config['custom_site_searches'].each { |label, site| out << "<tr><td><code>!#{label}</code></td><td>#{site}</td></tr>" }
84
- out << '</tbody>'
85
- out << '</table>'
81
+ out << "<thead><td>Shortcut</td><td>Search Type</td></thead>"
82
+ out << "<tbody>"
83
+ SL.config["custom_site_searches"].each { |label, site| out << "<tr><td><code>!#{label}</code></td><td>#{site}</td></tr>" }
84
+ out << "</tbody>"
85
+ out << "</table>"
86
86
  out.join("\n")
87
87
  end
88
88
 
89
89
  def help_dialog
90
90
  text = ["<html><head><style>#{help_css}</style><script>#{help_js}</script></head><body>"]
91
- text << '<h1>SearchLink Help</h1>'
91
+ text << "<h1>SearchLink Help</h1>"
92
92
  text << "<p>[#{SL.version_check}] [<a href='https://github.com/ttscoff/searchlink/wiki'>Wiki</a>]</p>"
93
93
  text << help_html
94
94
  text << '<p><a href="https://github.com/ttscoff/searchlink/wiki">Visit the wiki</a> for additional information</p>'
95
- text << '</body>'
96
- html_file = File.expand_path('~/.searchlink_searches.html')
97
- File.open(html_file, 'w') { |f| f.puts text.join("\n") }
95
+ text << "</body>"
96
+ html_file = File.expand_path("~/.searchlink_searches.html")
97
+ File.open(html_file, "w") { |f| f.puts text.join("\n") }
98
98
  `open #{html_file}`
99
99
  end
100
100
 
@@ -52,7 +52,7 @@ module SL
52
52
 
53
53
  # Stores the original input
54
54
  def originput
55
- @originput ||= ''
55
+ @originput ||= ""
56
56
  end
57
57
 
58
58
  # Stores generated errors
@@ -66,7 +66,7 @@ module SL
66
66
  # @param subtitle [String] The text of the notification
67
67
  #
68
68
  def notify(title, subtitle)
69
- return unless SL.config['notifications']
69
+ return unless SL.config["notifications"]
70
70
 
71
71
  title = title.gsub(/"/, '\\"')
72
72
  subtitle = subtitle.gsub(/"/, '\\"')
@@ -95,12 +95,12 @@ module SL
95
95
  # @return [String] The link.
96
96
  #
97
97
  def make_link(type, text, url, title: false, force_title: false)
98
- title = title.gsub(/\P{Print}|\p{Cf}/, '') if title
98
+ title = title.gsub(/\P{Print}|\p{Cf}/, "") if title
99
99
  text = title || SL::URL.title(url) if SL.titleize && (!text || text.strip.empty?)
100
100
  text = text ? text.strip : title
101
- title = title && (SL.config['include_titles'] || force_title) ? %( "#{title.clean}") : ''
101
+ title = title && (SL.config["include_titles"] || force_title) ? %( "#{title.clean}") : ""
102
102
 
103
- title = title.gsub(/[ \t]+/, ' ')
103
+ title = title.gsub(/[ \t]+/, " ")
104
104
 
105
105
  case type.to_sym
106
106
  when :ref_title
@@ -108,7 +108,7 @@ module SL
108
108
  when :ref_link
109
109
  %([#{text}][#{url}])
110
110
  when :inline
111
- image = url =~ /\.(gif|jpe?g|png|webp)$/ ? '!' : ''
111
+ image = url =~ /\.(gif|jpe?g|png|webp)$/ ? "!" : ""
112
112
  %(#{image}[#{text}](#{url}#{title}))
113
113
  end
114
114
  end
@@ -162,7 +162,7 @@ module SL
162
162
  return output.gsub(/\n{3,}/, "\n\n")
163
163
  end
164
164
 
165
- ''
165
+ ""
166
166
  end
167
167
 
168
168
  # Adds the given string to the report.
@@ -172,12 +172,12 @@ module SL
172
172
  # @return [nil]
173
173
  #
174
174
  def add_report(str)
175
- return unless SL.config['report']
175
+ return unless SL.config["report"]
176
176
 
177
177
  unless SL.line_num.nil?
178
178
  position = "#{SL.line_num}:"
179
- position += SL.match_column.nil? ? '0:' : "#{SL.match_column}:"
180
- position += SL.match_length.nil? ? '0' : SL.match_length.to_s
179
+ position += SL.match_column.nil? ? "0:" : "#{SL.match_column}:"
180
+ position += SL.match_length.nil? ? "0" : SL.match_length.to_s
181
181
  end
182
182
  SL.report.push("(#{position}): #{str}")
183
183
  warn "(#{position}): #{str}" unless SILENT
@@ -191,12 +191,12 @@ module SL
191
191
  # @return [nil]
192
192
  #
193
193
  def add_error(type, str)
194
- return unless SL.config['debug']
194
+ return unless SL.config["debug"]
195
195
 
196
196
  unless SL.line_num.nil?
197
197
  position = "#{SL.line_num}:"
198
- position += SL.match_column.nil? ? '0:' : "#{SL.match_column}:"
199
- position += SL.match_length.nil? ? '0' : SL.match_length.to_s
198
+ position += SL.match_column.nil? ? "0:" : "#{SL.match_column}:"
199
+ position += SL.match_length.nil? ? "0" : SL.match_length.to_s
200
200
  end
201
201
  SL.errors[type] ||= []
202
202
  SL.errors[type].push("(#{position}): #{str}")
@@ -207,7 +207,7 @@ module SL
207
207
  # @return [String] The report.
208
208
  #
209
209
  def print_report
210
- return if (SL.config['inline'] && SL.originput.split(/\n/).length == 1) || SL.clipboard
210
+ return if (SL.config["inline"] && SL.originput.split(/\n/).length == 1) || SL.clipboard
211
211
 
212
212
  return if SL.report.empty?
213
213
 
@@ -221,14 +221,14 @@ module SL
221
221
  #
222
222
  # @return [String] The errors.
223
223
  #
224
- def print_errors(type = 'Errors')
224
+ def print_errors(type = "Errors")
225
225
  return if SL.errors.empty?
226
226
 
227
- out = ''
227
+ out = ""
228
228
  inline = if SL.originput.split(/\n/).length > 1
229
229
  false
230
230
  else
231
- SL.config['inline'] || SL.originput.split(/\n/).length == 1
231
+ SL.config["inline"] || SL.originput.split(/\n/).length == 1
232
232
  end
233
233
 
234
234
  SL.errors.each do |k, v|
@@ -237,16 +237,16 @@ module SL
237
237
  v.each_with_index do |err, i|
238
238
  out += "(#{k}) #{err}"
239
239
  out += if inline
240
- i == v.length - 1 ? ' | ' : ', '
240
+ i == v.length - 1 ? " | " : ", "
241
241
  else
242
242
  "\n"
243
243
  end
244
244
  end
245
245
  end
246
246
 
247
- unless out == ''
248
- sep = inline ? ' ' : "\n"
249
- out.sub!(/\| /, '')
247
+ unless out == ""
248
+ sep = inline ? " " : "\n"
249
+ out.sub!(/\| /, "")
250
250
  out = "#{sep}<!-- #{type}:#{sep}#{out}-->#{sep}"
251
251
  end
252
252
  if SL.clipboard