r2 0.2.7 → 0.2.8
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.
- checksums.yaml +5 -5
- data/lib/r2/version.rb +1 -1
- data/lib/r2.rb +39 -20
- data/spec/r2_spec.rb +13 -0
- metadata +6 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 790a1c3403b43e80a07f3353d0f683483aff2f50367d95b0c55759202e02626c
|
4
|
+
data.tar.gz: af54fe9e6ee0d53be9b88683af39cae8f5ad40adb8c6a39a3e46f3356d3ce050
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 274cd78b0fd61476c37dcc87c474587ef60e57ad2cf2cdd3aeb803cf08c3abed8226b940ff563b5f98c87c7a55108264194f292663658f19bcfd7ec85a84b7d6
|
7
|
+
data.tar.gz: 6aa114c12414912ad7c1d4f26f93548e1c9eb85565e4b5f27599105c4c47e416b3138dbbce8df6dd14f152848ba9dea19dd92cb7dde5c0ee7f3f32d4eb8786a2
|
data/lib/r2/version.rb
CHANGED
data/lib/r2.rb
CHANGED
@@ -13,6 +13,9 @@ module R2
|
|
13
13
|
# A string that indicates this block should be skipped
|
14
14
|
SKIP_TOKEN = 'SKIP_R2'
|
15
15
|
|
16
|
+
# Important declarations are removed and then re-added after swapping
|
17
|
+
IMPORTANT_DECLARATION = '!important'
|
18
|
+
|
16
19
|
# Short cut method for providing a one-time CSS change
|
17
20
|
def self.r2(css)
|
18
21
|
::R2::Swapper.new.r2(css)
|
@@ -165,14 +168,17 @@ module R2
|
|
165
168
|
# Given a 4-argument CSS declaration value (like that of <tt>padding</tt> or <tt>margin</tt>) return the opposing
|
166
169
|
# value. The opposing value swaps the left and right but not the top or bottom. Any unrecognized argument is returned
|
167
170
|
# unmolested (for example, 2-argument values)
|
168
|
-
def quad_swap(
|
171
|
+
def quad_swap(css_value)
|
172
|
+
points_str, is_important = extract_important(css_value)
|
169
173
|
# 1px 2px 3px 4px => 1px 4px 3px 2px
|
170
|
-
points =
|
174
|
+
points = points_str.to_s.split(/\s+/)
|
171
175
|
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
+
append_important(is_important) do
|
177
|
+
if points && points.length == 4
|
178
|
+
[points[0], points[3], points[2], points[1]].join(' ')
|
179
|
+
else
|
180
|
+
points_str
|
181
|
+
end
|
176
182
|
end
|
177
183
|
end
|
178
184
|
|
@@ -212,22 +218,25 @@ module R2
|
|
212
218
|
# Border radius uses top-left, top-right, bottom-left, bottom-right, so all values need to be swapped. Additionally,
|
213
219
|
# two and three value border-radius declarations need to be swapped as well. Vertical radius, specified with a /,
|
214
220
|
# should be left alone.
|
215
|
-
def border_radius_swap(
|
221
|
+
def border_radius_swap(css_value)
|
216
222
|
# 1px 2px 3px 4px => 1px 4px 3px 2px
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
223
|
+
points_str, is_important = extract_important(css_value)
|
224
|
+
points = points_str.to_s.split(/\s+/)
|
225
|
+
|
226
|
+
append_important(is_important) do
|
227
|
+
if points && points.length > 1 && !points_str.to_s.include?('/')
|
228
|
+
case points.length
|
229
|
+
when 4
|
230
|
+
[points[1], points[0], points[3], points[2]].join(' ')
|
231
|
+
when 3
|
232
|
+
[points[1], points[0], points[1], points[2]].join(' ')
|
233
|
+
when 2
|
234
|
+
[points[1], points[0]].join(' ')
|
235
|
+
else points_str
|
236
|
+
end
|
237
|
+
else
|
238
|
+
points_str
|
228
239
|
end
|
229
|
-
else
|
230
|
-
val
|
231
240
|
end
|
232
241
|
end
|
233
242
|
|
@@ -255,6 +264,16 @@ module R2
|
|
255
264
|
|
256
265
|
val
|
257
266
|
end
|
267
|
+
|
268
|
+
def extract_important(css)
|
269
|
+
is_important = css =~ /#{IMPORTANT_DECLARATION}/
|
270
|
+
return css.sub(/ #{IMPORTANT_DECLARATION}/, ''), is_important
|
271
|
+
end
|
272
|
+
|
273
|
+
def append_important(is_important, &block)
|
274
|
+
css_value = yield
|
275
|
+
css_value + (is_important ? " #{IMPORTANT_DECLARATION}" : '')
|
276
|
+
end
|
258
277
|
end
|
259
278
|
|
260
279
|
end
|
data/spec/r2_spec.rb
CHANGED
@@ -210,6 +210,11 @@ describe R2::Swapper do
|
|
210
210
|
it "should skip a pair value" do
|
211
211
|
expect(r2.quad_swap("1px 2px")).to eq("1px 2px")
|
212
212
|
end
|
213
|
+
|
214
|
+
it "should handle !important" do
|
215
|
+
expect(r2.quad_swap("1px 2px 3px 4px !important")).to eq("1px 4px 3px 2px !important")
|
216
|
+
expect(r2.quad_swap("1px 2px !important")).to eq("1px 2px !important")
|
217
|
+
end
|
213
218
|
end
|
214
219
|
|
215
220
|
describe "#shadow_swap" do
|
@@ -249,6 +254,9 @@ describe R2::Swapper do
|
|
249
254
|
expect(r2.shadow_swap("inset 1px 2px rgba(0,0,0,0.2), 1px 2px #000")).to eq("-1px 2px rgba(0,0,0,0.2) inset, -1px 2px #000")
|
250
255
|
end
|
251
256
|
|
257
|
+
it "should handle !important correctly" do
|
258
|
+
expect(r2.shadow_swap("1px 2px !important")).to eq("-1px 2px !important")
|
259
|
+
end
|
252
260
|
end
|
253
261
|
|
254
262
|
describe "#border_radius_swap" do
|
@@ -263,6 +271,11 @@ describe R2::Swapper do
|
|
263
271
|
it "should skip a pair value" do
|
264
272
|
expect(r2.border_radius_swap("1px 2px")).to eq("2px 1px")
|
265
273
|
end
|
274
|
+
|
275
|
+
it "should corectly handle !important" do
|
276
|
+
expect(r2.border_radius_swap("1px !important")).to eq("1px !important")
|
277
|
+
expect(r2.border_radius_swap("1px 2px !important")).to eq("2px 1px !important")
|
278
|
+
end
|
266
279
|
end
|
267
280
|
|
268
281
|
describe "#background_position_swap" do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: r2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Sanford
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-07-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -88,7 +88,7 @@ files:
|
|
88
88
|
homepage: https://github.com/mzsanford/R2rb
|
89
89
|
licenses: []
|
90
90
|
metadata: {}
|
91
|
-
post_install_message:
|
91
|
+
post_install_message:
|
92
92
|
rdoc_options: []
|
93
93
|
require_paths:
|
94
94
|
- lib
|
@@ -103,9 +103,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
103
103
|
- !ruby/object:Gem::Version
|
104
104
|
version: '0'
|
105
105
|
requirements: []
|
106
|
-
|
107
|
-
|
108
|
-
signing_key:
|
106
|
+
rubygems_version: 3.1.6
|
107
|
+
signing_key:
|
109
108
|
specification_version: 4
|
110
109
|
summary: CSS flipper for right-to-left processing
|
111
110
|
test_files:
|