cani 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9de90bea20bfdaed9282223a8f2326c9a57515cba421460382388152613a92d5
4
- data.tar.gz: a8dfeba0857de5d4e8a35e3971aa05feb3b1d60aca948d3383357074e449b581
3
+ metadata.gz: 7926339d9f9917733a8ed487f6ab2f7dea77ded9b5f2799ee016f09c9e60d570
4
+ data.tar.gz: 45ca6106004772ff0b1b3facc8040c949c66f776a00809d16d0155da6780b452
5
5
  SHA512:
6
- metadata.gz: 63e0d0bf53d8e72915b0c5fe5f7997e7f3dd5341b973dc37c3180fe3b4a91c7f35370d43f57ccc717c24ad3d12a42b6a9bbb413de5afb2901ae0ed66b4c4678d
7
- data.tar.gz: 514d3cf80000acd736d86f4bc5fdb991ed6d43a986cb6469760be5d92b4e1620ad4331fd34078906e17a3f1d16d17db11c52d2e4d63abba9560cee436b01d19b
6
+ metadata.gz: ffe46d75f4614cf82aa0294040aabbb06757f3f356f9d899534013fe1132e7ed2fc5f08d0cd35ace34ba6c4964bac1405d6915be11da9d9ba29a25cded8f4ca4
7
+ data.tar.gz: 9ba149f0dedad78dedf7f9e00dd472e8a7198e01790b7557262677b8f5d188b9c1747738ce30999f863a33981bf610afee34eba3c91a6f53c6c370f396ac3962
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- cani (0.1.2)
4
+ cani (0.2.0)
5
5
  colorize
6
6
  curses
7
7
  json
data/README.md CHANGED
@@ -1,9 +1,9 @@
1
- # Cani
1
+ # Cani — a [caniuse.com](caniuse.com) tui interface
2
2
 
3
3
  ![cani cli](/assets/cani.png)
4
4
 
5
5
  Cani is a small command-line wrapper around the data of [caniuse](https://caniuse.com).
6
- It uses [fzf](https://github.com/junegunn/fzf) to display results.
6
+ It uses [fzf](https://github.com/junegunn/fzf) and [curses](https://github.com/ruby/curses) to display results.
7
7
  This wrapper aims to be easy to use out of the box. To achieve this it ships with completions
8
8
  for `bash`, `fish`, and `zsh`. [Caniuse data (1.7MB)](https://github.com/Fyrd/caniuse/blob/master/data.json) is fetched and updated automatically
9
9
  on a regular interval together with completions.
@@ -47,8 +47,8 @@ There are some commented settings that can be adjusted in the `~/.config/cani/co
47
47
  Running `cani` without arguments yields the help description.
48
48
  Cani supports the following actions:
49
49
 
50
- - [`use`](#use) - show browser support for all features
51
- - [`show BROWSER VERSION`](#show) - show feature support based on selected browser / version
50
+ - [`use [FEATURE]`](#use) - show browser support for selected feature
51
+ - [`show [BROWSER [VERSION]]`](#show) - show feature support based on selected browser / version
52
52
  - [`help`](#help) - show help
53
53
  - [`version`](#version) - print the version number
54
54
  - [`update`](#update) - force update data and completions
@@ -64,6 +64,24 @@ cani use
64
64
  Show a list of features with fzf. Features are shown with their current W3C status, percentage of support, title and
65
65
  each individual browser's support on a single row.
66
66
 
67
+ This command may be invoked with a feature and supports <kbd>tab</kbd> completion in `bash`, `zsh` and `fish`:
68
+
69
+ ```sh
70
+ cani use box-shadow
71
+
72
+ # or:
73
+ # cani use 'box shadow'
74
+ # cani use 'boxshadow'
75
+ ```
76
+
77
+ The above command will show the following table:
78
+
79
+ ![Cani use box-shadow support table](/assets/cani-feature-table.png)
80
+
81
+ The table is responsive and will show browsers that fit in available space, everything else wraps accordingly.
82
+ The 3-line high era in the middle resembles the "current era" of most used browsers. Browser versions with less than `0.5%` usage aren't shown.
83
+ At the bottom there is a legend that provides an abbreviated status color overview.
84
+
67
85
  ### show
68
86
 
69
87
  ```sh
@@ -75,7 +93,7 @@ Selecting a version shows the final window with feature support for that specifi
75
93
  Navigating to the previous window is possible by pressing <kbd>escape</kbd>, this will move you up one level.
76
94
  When <kbd>escape</kbd> is pressed at the browser selection menu, the command will exit.
77
95
 
78
- This command can also be invoked directly with a browser and version:
96
+ This command may be invoked with a browser and / or version and supports <kbd>tab</kbd> completion in `bash`, `zsh` and `fish`:
79
97
 
80
98
  ```sh
81
99
  # show all versions of chrome
@@ -133,9 +151,9 @@ After running a `purge`, all that remains is running `gem uninstall cani` to com
133
151
 
134
152
  Last but not least, all `cani` commands can be piped. This will skip running `fzf` and print uncolored output.
135
153
 
136
- **use**
154
+ **use** _(the output of_ `cani use ft-name` _cannot be piped)_
137
155
  ```sh
138
- cani use | cat | head -3
156
+ cani use | head -3
139
157
  [rc] 97.11% PNG alpha transparency +chr +ff +edge +ie +saf +saf.ios +op +and +bb
140
158
  [un] 75.85% Animated PNG (APNG) +chr +ff -edge -ie +saf +saf.ios +op -and -bb
141
159
  [ls] 94.32% Video element +chr +ff +edge +ie +saf +saf.ios +op +and +bb
@@ -143,7 +161,7 @@ cani use | cat | head -3
143
161
 
144
162
  **show**
145
163
  ```sh
146
- cani show | cat | head -3
164
+ cani show | head -3
147
165
  ie usage: 3.1899%
148
166
  edge usage: 1.8262%
149
167
  firefox usage: 5.0480%
@@ -151,7 +169,7 @@ firefox usage: 5.0480%
151
169
 
152
170
  **show BROWSER**
153
171
  ```sh
154
- cani show firefox | cat | head -3
172
+ cani show firefox | head -3
155
173
  63 usage: 0.0000%
156
174
  62 usage: 0.0131%
157
175
  61 usage: 0.2184%
@@ -159,7 +177,7 @@ cani show firefox | cat | head -3
159
177
 
160
178
  **show BROWSER VERSION**
161
179
  ```sh
162
- cani show firefox 63 | cat | head -3
180
+ cani show firefox 63 | head -3
163
181
  [rc] [+] PNG alpha transparency
164
182
  [un] [+] Animated PNG (APNG)
165
183
  [ls] [+] Video element
data/lib/cani.rb CHANGED
@@ -40,34 +40,44 @@ module Cani
40
40
  end
41
41
 
42
42
  def self.help
43
- puts "Cani #{VERSION} <https://github.com/SidOfc/cani>"
43
+ String.disable_colorization true unless STDOUT.tty?
44
+ puts "Cani ".light_yellow + VERSION.to_s + ' <https://github.com/SidOfc/cani>'.light_black
44
45
  puts ''
45
- puts 'Usage: cani [COMMAND [ARGUMENTS]]'
46
+ puts 'This command provides a TUI interface to access caniuse.com data.'.light_black
47
+ puts 'It allows one to search by browser / version using the \'show\' command'.light_black
48
+ puts 'and by feature using the \'use\' command. Pressing <enter> on a feature'.light_black
49
+ puts 'in the \'use\' overview or calling \'use some-feature\' will display a'.light_black
50
+ puts 'table as seen on caniuse.com using curses.'.light_black
46
51
  puts ''
47
- puts 'Commands:'
48
- puts ' use FEATURE show browser support for FEATURE'
49
- puts ' show BROWSER show information about specific BROWSER'
50
- puts ' install_completions installs completions for bash, zsh and fish'
51
- puts ' update force update api data and completions'
52
- puts ' purge remove all completion, configuration and data'
53
- puts ' stored by this cani'
52
+ puts 'Usage:'.red
53
+ puts ' cani'.yellow + ' [COMMAND [ARGUMENTS]]'
54
+ puts ''
55
+ puts 'Commands:'.red
56
+ puts ' use '.blue + ' [FEATURE] ' + 'show browser support for FEATURE'.light_black
57
+ puts ' show'.blue + ' [BROWSER [VERSION]] ' + 'show information about specific BROWSER and VERSION'.light_black
58
+ puts ' '
59
+ puts ' install_completions '.blue + 'installs completions for bash, zsh and fish'.light_black
60
+ puts ' update '.blue + 'force update api data and completions'.light_black
61
+ puts ' purge '.blue + 'remove all completion, configuration and data'.light_black
62
+ puts ' '.blue + 'stored by this cani'.light_black
54
63
  puts ' '
55
- puts ' help show this help'
56
- puts ' version print the version number'
64
+ puts ' help '.blue + 'show this help'.light_black
65
+ puts ' version '.blue + 'print the version number'.light_black
57
66
  puts ''
58
- puts 'Examples:'
59
- puts ' cani use'
60
- puts ' cani show ie'
61
- puts ' cani show chr.and'
67
+ puts 'Examples:'.red
68
+ puts ' cani'.yellow + ' use'.blue
69
+ puts ' cani'.yellow + ' use'.blue + ' \'box-shadow\''
70
+ puts ' cani'.yellow + ' show'.blue + ' ie'
71
+ puts ' cani'.yellow + ' show'.blue + ' ie 11'
62
72
  puts ''
63
- puts 'Statuses:'
64
- puts ' [ls] WHATWG Living Standard'
65
- puts ' [rc] W3C Recommendation'
66
- puts ' [pr] W3C Proposed Recommendation'
67
- puts ' [cr] W3C Candidate Recommendation'
68
- puts ' [wd] W3C Working Draft'
69
- puts ' [ot] Non-W3C, but reputable'
70
- puts ' [un] Unofficial, Editor\'s draft or W3C "Note"'
73
+ puts 'Statuses:'.red
74
+ puts ' [ls]'.green + ' WHATWG Living Standard'.light_black
75
+ puts ' [rc]'.green + ' W3C Recommendation'.light_black
76
+ puts ' [pr]'.green + ' W3C Proposed Recommendation'.light_black
77
+ puts ' [cr]'.green + ' W3C Candidate Recommendation'.light_black
78
+ puts ' [wd]'.green + ' W3C Working Draft'.light_black
79
+ puts ' [un]'.yellow + ' Unofficial, Editor\'s draft or W3C "Note"'.light_black
80
+ puts ' [ot]'.magenta + ' Non-W3C, but reputable'.light_black
71
81
  end
72
82
 
73
83
  def self.version
data/lib/cani/api.rb CHANGED
@@ -54,7 +54,7 @@ module Cani
54
54
  end
55
55
 
56
56
  def find_feature(name)
57
- name = Regexp.new name.to_s.downcase.gsub(/(\W)/, '.*')
57
+ name = Regexp.new name.to_s.downcase.gsub(/(\W)/, '.*'), :i
58
58
  idx = features.find_index do |ft|
59
59
  ft.title.downcase.match?(name) || ft.name.downcase.match?(name)
60
60
  end
@@ -9,7 +9,7 @@ module Cani
9
9
  69 => [70, -1], # green on default (legend supported, feature status, percentage counter)
10
10
  213 => [214, -1], # orange on default (legend partial, percentage counter)
11
11
  195 => [9, -1], # red on default (legend unsupported, percentage counter)
12
- 133 => [128, -1], # magenta on default (legend flag, current feature status)
12
+ 133 => [13, -1], # magenta on default (legend flag, current feature status)
13
13
  12 => [75, -1], # blue on default (legend prefix)
14
14
  204 => [205, -1], # pink on default (legend polyfill)
15
15
  99 => [8, -1], # gray on default (legend unknown)
@@ -19,7 +19,7 @@ module Cani
19
19
  70 => [7, 70], # white on green (supported feature)
20
20
  208 => [7, 214], # white on orange (partial feature)
21
21
  196 => [7, 9], # white on red (unsupported feature)
22
- 134 => [7, 128], # white on magenta (flag features)
22
+ 134 => [7, 13], # white on magenta (flag features)
23
23
  11 => [7, 75], # white on blue (prefix feature)
24
24
  100 => [7, 8], # white on gray (unknown features)
25
25
  205 => [7, 205], # white on pink (polyfill features)
data/lib/cani/fzf.rb CHANGED
@@ -31,15 +31,16 @@ module Cani
31
31
  def self.feature_rows
32
32
  @feature_rows ||= Cani.api.features.map do |ft|
33
33
  pc = format('%.2f%%', ft.percent).rjust 6
34
+ cl = {'un' => :yellow, 'ot' => :magenta}.fetch ft.status, :green
34
35
  tt = format('%-24s', ft.title.size > 24 ? ft.title[0..23].strip + '..'
35
36
  : ft.title)
36
37
 
37
- ["[#{ft.status}]", pc, tt, *ft.current_support]
38
+ [{content: "[#{ft.status}]", color: cl}, pc, tt, *ft.current_support]
38
39
  end
39
40
  end
40
41
 
41
42
  def self.browser_rows
42
- Cani.api.browsers.map do |bwsr|
43
+ @browser_rows ||= Cani.api.browsers.map do |bwsr|
43
44
  [bwsr.title, 'usage: ' + format('%.4f%%', bwsr.usage.values.sum)]
44
45
  end
45
46
  end
@@ -54,7 +55,9 @@ module Cani
54
55
  Api::Feature::TYPES.flat_map do |(status, type)|
55
56
  if (features = features_by_support.fetch(type[:name], nil))
56
57
  features.map do |feature|
57
- ["[#{feature[:status]}]", "[#{type[:symbol]}]", feature[:title]]
58
+ color = {'un' => :yellow, 'ot' => :magenta}.fetch feature[:status], :green
59
+ [{content: "[#{feature[:status]}]", color: color},
60
+ "[#{type[:symbol]}]", feature[:title]]
58
61
  end
59
62
  end
60
63
  end.compact
@@ -66,6 +69,7 @@ module Cani
66
69
 
67
70
  rows.each do |row|
68
71
  row.each.with_index do |column, i|
72
+ column = column[:content] if column.is_a? Hash
69
73
  col_width = column.size
70
74
  col_widths[i] = col_width if col_width > col_widths[i].to_i
71
75
  end
@@ -73,10 +77,12 @@ module Cani
73
77
 
74
78
  rows.map do |row|
75
79
  row.map.with_index do |col, i|
80
+ color = col[:color] if col.is_a? Hash
81
+ col = col[:content] if col.is_a? Hash
76
82
  result = col.to_s.ljust col_widths[i]
77
83
 
78
84
  if STDOUT.tty?
79
- result.colorize(colors[i] || colors[-1] || :default)
85
+ result.colorize(color || colors[i] || colors[-1] || :default)
80
86
  .gsub '"', '\"'
81
87
  else
82
88
  result
data/lib/cani/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Cani
2
- VERSION = "0.2.0"
2
+ VERSION = "0.2.1"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cani
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sidney Liebrand