jekyll-stretcher 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: f0cb33a2fad76660287b7ba0a5c56933ca74a7b4e6b2c370c4d895a881ec8a59
4
+ data.tar.gz: e3375c42cf7d56156ec9ad0b153a76e48cfdd0a2160c9719a4ea19f524f2b5a8
5
+ SHA512:
6
+ metadata.gz: 12196a9b6358a9124bc65672e0c21cb5fe76498a600b4ac57693cd072417d49c2b0a3728a95ca2a556b158b68deaa0cf01254a06ec4b177f929a605647848b84
7
+ data.tar.gz: 663d3d8bc95592f0bb52dd21fccfb6e35f05f9eb221e1776fe5cdbd114144919ddaa2747779ba4de5371adb8641214697bb5f2a0eac43aa47ddec75c12b21300
@@ -0,0 +1,116 @@
1
+ module Jekyll
2
+ module Converters
3
+ module StretcherExtensions
4
+ class StretcherImporter < SassC::Importer
5
+ def sretcher_mixin()
6
+ <<-GOOSE
7
+ // START INJECTED STRETCHER
8
+ $stretcher-min: 375px !default;
9
+ $stretcher-max: 1440px !default;
10
+
11
+ @mixin jekyll-stretcher-double-scale($properties, $min-value, $max-value) {
12
+ @each $property in $properties {
13
+ \#{$property}: $min-value;
14
+ }
15
+
16
+ @media (min-width: $stretcher-min) {
17
+ @each $property in $properties {
18
+ \#{$property}: calc(\#{$min-value} + \#{strip-unit($max-value - $min-value)} * (100vw - \#{$stretcher-min}) / \#{strip-unit($stretcher-max - $stretcher-min)});
19
+ }
20
+ }
21
+
22
+ @media (min-width: $stretcher-max) {
23
+ @each $property in $properties {
24
+ \#{$property}: $max-value;
25
+ }
26
+ }
27
+ }
28
+
29
+ @function strip-unit($number) {
30
+ @if type-of($number) == \"number\" and not unitless($number) {
31
+ @return $number / ($number * 0 + 1);
32
+ }
33
+
34
+ @return $number;
35
+ }
36
+ // END INJECTED STRETCHER
37
+ GOOSE
38
+ end
39
+
40
+ def stretcher_rewrite(file)
41
+ matched = false
42
+ lines = file.lines.map(&:chomp)
43
+
44
+ lines.each_with_index do |l, i|
45
+ next unless l =~ /->/
46
+ values = l.match(/^(\s*)([a-z-]+):\s*(\d+|\.\d+|\d+\.\d+)(cm|mm|in|px|pt|pc|em|ex|ch|rem|%|vw|vh|vmin|vmax)\s*->\s*(\d+|\.\d+|\d+\.\d+)(cm|mm|in|px|pt|pc|em|ex|ch|rem|%|vw|vh|vmin|vmax)\s*;/)
47
+ next unless values
48
+ indentation, declaration, minVal, minUnit, maxVal, maxUnit = values.captures
49
+
50
+ warning = ""
51
+ if minUnit != maxUnit
52
+ warning += "#{indentation}@error \"Stretcher mixin units don't match; '#{minVal}#{minUnit} -> #{maxVal}#{maxUnit}': #{minUnit} !== #{maxUnit}\";\n"
53
+ end
54
+ if minUnit =~ /%|vw|vh|vmin|vmax/
55
+ warning += "#{indentation}@warn \"Relative units may not work with the scaling mixin (#{minUnit})\";\n";
56
+ end
57
+
58
+ lines[i] = "#{warning}#{indentation}@include jekyll-stretcher-double-scale(#{declaration}, #{minVal}#{minUnit}, #{maxVal}#{maxUnit});";
59
+ matched = true
60
+ end
61
+ lines.unshift(sretcher_mixin) if matched
62
+ lines.join("\n")
63
+ end
64
+
65
+ def imports(path, parent_path)
66
+ root = Pathname.new parent_path
67
+ file = Pathname.new path
68
+
69
+ if file.extname.empty?
70
+ file = Pathname.new path + ".scss"
71
+ end
72
+
73
+ if root.absolute?
74
+ relative = root.dirname.join(file)
75
+ else
76
+ options[:load_paths].each do |p|
77
+ p = Pathname.new p
78
+ relative = p.join(file)
79
+ break if relative.exist?
80
+ relative = nil
81
+ end
82
+ end
83
+
84
+ if relative.empty?
85
+ Import.new(path)
86
+ return
87
+ end
88
+
89
+ stretched_source = stretcher_rewrite relative.read
90
+
91
+ Import.new(path, source: stretched_source)
92
+
93
+ end
94
+ end
95
+
96
+
97
+ def sass_configs
98
+ sass_build_configuration_options(
99
+ :style => sass_style,
100
+ :syntax => syntax,
101
+ :filename => filename,
102
+ :output_path => output_path,
103
+ :source_map_file => source_map_file,
104
+ :load_paths => sass_load_paths,
105
+ :importer => StretcherImporter,
106
+ :omit_source_map_url => !sourcemap_required?,
107
+ :source_map_contents => true,
108
+ :line_comments_option => line_comments_option
109
+ )
110
+ end
111
+ end
112
+ class Scss < Converter
113
+ prepend StretcherExtensions
114
+ end
115
+ end
116
+ end
@@ -0,0 +1,3 @@
1
+ module JekyllStretcher
2
+ VERSION = "0.1.1"
3
+ end
metadata ADDED
@@ -0,0 +1,65 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jekyll-stretcher
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Liam Bigelow
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-09-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: jekyll
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '3.7'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '5.0'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: '3.7'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '5.0'
33
+ description:
34
+ email:
35
+ - liam@cloudcannon.com
36
+ executables: []
37
+ extensions: []
38
+ extra_rdoc_files: []
39
+ files:
40
+ - lib/jekyll-stretcher.rb
41
+ - lib/jekyll-stretcher/version.rb
42
+ homepage: https://github.com/cloudcannon/stretcher
43
+ licenses:
44
+ - MIT
45
+ metadata: {}
46
+ post_install_message:
47
+ rdoc_options: []
48
+ require_paths:
49
+ - lib
50
+ required_ruby_version: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ required_rubygems_version: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: '0'
60
+ requirements: []
61
+ rubygems_version: 3.0.3
62
+ signing_key:
63
+ specification_version: 4
64
+ summary: A Jekyll plugin to handle stretcher SCSS syntax
65
+ test_files: []