jekyll-compass 0.3.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +23 -6
- data/lib/jekyll/compass.rb +10 -2
- data/lib/jekyll/compass/compass_app_integration.rb +29 -0
- data/lib/jekyll/compass/compass_configuration.rb +81 -0
- data/lib/jekyll/compass/compass_file.rb +1 -1
- data/lib/jekyll/compass/compass_installer.rb +91 -0
- data/lib/jekyll/compass/generator.rb +15 -92
- metadata +12 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 782d2feab522ed7e13d5b7e5829eb2e12ed2fa2a
|
4
|
+
data.tar.gz: f7c2439fb383b74a63124d74d12a45987405c4dc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 20400ffcd9c4878b2cd83c23870d8ab5eca0020f93d6ff5d96c8d0917d1d0190b9486e700633dcd90655c2c47c4568b906e2ddb5f0774a352be91b1a1609a695
|
7
|
+
data.tar.gz: e4f7118ae47a720ebb028b32cc9560864a79fe402f91332dcfc3c9b3535c5b2c8259736c68b42460e57a26735ecfd4a53f2a166bcfdcea684e57476be0c882de
|
data/README.md
CHANGED
@@ -11,9 +11,8 @@ jekyll-compass: Compass generator for Jekyll websites
|
|
11
11
|
Synopsis
|
12
12
|
--------
|
13
13
|
|
14
|
-
jekyll-compass is a jekyll
|
15
|
-
|
16
|
-
end up directly in your `_site` output folder and never need to be checked into your version control.
|
14
|
+
jekyll-compass is a plugin for both jekyll and compass that provides an bi-directional interface between the two
|
15
|
+
applications, tightly integrating them and allowing each to work well when used directly.
|
17
16
|
|
18
17
|
Installation
|
19
18
|
------------
|
@@ -32,14 +31,32 @@ This plugin has a very simple two step install:
|
|
32
31
|
Usage
|
33
32
|
-----
|
34
33
|
|
35
|
-
|
36
|
-
|
34
|
+
You may use compass to generate a layout and configuration for you. The site root is the folder where your `_config.yml`
|
35
|
+
lives.
|
36
|
+
|
37
|
+
compass create -r jekyll-compass --app=jekyll path/to/site/root
|
38
|
+
|
39
|
+
Other `compass` commands will work as per usual, however you will need to add the `-r jekyll-compass --app=jekyll`
|
40
|
+
parameters to make sure `compass` can find the files from this plugin that it needs. If you forget these parameters
|
41
|
+
then Compass will fail with an error message as it won't understand the project layout.
|
42
|
+
|
43
|
+
# Compiles all your Sass/Compass into the _site folder, you may also specify --css-path on the command line
|
44
|
+
compass compile -r jekyll-compass --app=jekyll
|
45
|
+
compass watch -r jekyll-compass --app=jekyll
|
46
|
+
|
47
|
+
You will also note that Compass will build your Sass files whenever jekyll builds the rest of your website, ensuring
|
48
|
+
that what you publish is always up to date.
|
49
|
+
|
50
|
+
# Compiles your entire website, including Sass/Compass
|
51
|
+
jekyll build
|
52
|
+
jekyll serve
|
37
53
|
|
38
54
|
Configuration
|
39
55
|
-------------
|
40
56
|
|
41
57
|
You may add a file to your `_data` folder called `compass.yml`. This will contain overrides for the compass
|
42
|
-
configuration, similar to the `config.rb` in a regular compass project.
|
58
|
+
configuration, similar to the `config.rb` in a regular compass project. If you generated a layout using compass above
|
59
|
+
then this file will already exist with some default settings setup for you. Any of the
|
43
60
|
[regular configuration properties][compass-props] should be supported via the YAML file.
|
44
61
|
|
45
62
|
Compass also provides a way to pass through options directly to Sass via the `sass_options` option. You can find
|
data/lib/jekyll/compass.rb
CHANGED
@@ -16,5 +16,13 @@ module Jekyll
|
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
|
-
|
20
|
-
require 'jekyll
|
19
|
+
# Require dependencies
|
20
|
+
require 'jekyll'
|
21
|
+
require 'sass/plugin'
|
22
|
+
require 'compass'
|
23
|
+
require 'compass/commands'
|
24
|
+
|
25
|
+
# Internal requires
|
26
|
+
%w{compass_configuration compass_file generator compass_app_integration}.each do |f|
|
27
|
+
require "jekyll/compass/#{f}"
|
28
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'compass/app_integration'
|
2
|
+
require 'jekyll/compass/compass_installer'
|
3
|
+
|
4
|
+
module Jekyll
|
5
|
+
module Compass
|
6
|
+
# Integration class to manage a new project type in Compass
|
7
|
+
class CompassAppIntegration
|
8
|
+
def self.installer(*args)
|
9
|
+
CompassInstaller.new(*args)
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.configuration
|
13
|
+
project_path = ::Compass.configuration.project_path
|
14
|
+
config_file = File.join(project_path, '_data/compass.yml')
|
15
|
+
if File.exist? config_file
|
16
|
+
config = CompassConfiguration.from_yaml_file config_file
|
17
|
+
config[:css_dir] = "_site/#{config[:css_dir]}"
|
18
|
+
else
|
19
|
+
config = CompassConfiguration.default_configuration
|
20
|
+
end
|
21
|
+
config[:config_file] = config_file
|
22
|
+
config.to_compass
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
# Register our project type with compass
|
29
|
+
::Compass::AppIntegration.register(:jekyll, 'Jekyll::Compass::CompassAppIntegration')
|
@@ -0,0 +1,81 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
module Jekyll
|
4
|
+
module Compass
|
5
|
+
# Abstracts Compass's configuration away from any particular process in our plugin
|
6
|
+
class CompassConfiguration
|
7
|
+
CONFIGURATION_NAME = 'Jekyll::Compass'
|
8
|
+
|
9
|
+
def extend(hash)
|
10
|
+
hash.each do |key, value|
|
11
|
+
self[key] = value
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def delete(key)
|
16
|
+
@data.delete(key)
|
17
|
+
end
|
18
|
+
|
19
|
+
def has_key?(key)
|
20
|
+
@data.has_key?(key)
|
21
|
+
end
|
22
|
+
|
23
|
+
def []=(key, value)
|
24
|
+
key = key.to_sym unless key.is_a? Symbol
|
25
|
+
value = value.to_sym if SYMBOL_VALUES.include? key
|
26
|
+
|
27
|
+
if value.is_a? Hash
|
28
|
+
value.each do |subkey, subvalue|
|
29
|
+
subkey = subkey.to_sym unless subkey.is_a? Symbol
|
30
|
+
@data[key][subkey] = subvalue
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
@data[key] = value
|
35
|
+
end
|
36
|
+
|
37
|
+
def [](key)
|
38
|
+
@data[key]
|
39
|
+
end
|
40
|
+
|
41
|
+
def to_compass
|
42
|
+
::Compass::Configuration::Data.new(CONFIGURATION_NAME, @data)
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
SYMBOL_VALUES = [
|
48
|
+
:project_type,
|
49
|
+
:environment,
|
50
|
+
:output_style,
|
51
|
+
:preferred_syntax,
|
52
|
+
:sprite_engine,
|
53
|
+
]
|
54
|
+
|
55
|
+
def initialize(initial_hash = {})
|
56
|
+
@data = initial_hash
|
57
|
+
end
|
58
|
+
|
59
|
+
class << self
|
60
|
+
def default_configuration
|
61
|
+
new({
|
62
|
+
:default_project_type => :jekyll,
|
63
|
+
:http_path => '/',
|
64
|
+
:sass_dir => '_sass',
|
65
|
+
:css_dir => 'css',
|
66
|
+
:images_dir => 'images',
|
67
|
+
:javascripts_dir => 'javascripts',
|
68
|
+
})
|
69
|
+
end
|
70
|
+
|
71
|
+
def from_yaml_file(filename)
|
72
|
+
config = default_configuration
|
73
|
+
YAML.load_file(filename).each do |k, v|
|
74
|
+
config[k.to_sym] = v
|
75
|
+
end
|
76
|
+
config
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
require 'compass/installers'
|
2
|
+
require 'yaml'
|
3
|
+
|
4
|
+
module Jekyll
|
5
|
+
module Compass
|
6
|
+
#
|
7
|
+
class CompassInstaller < ::Compass::AppIntegration::StandAlone::Installer
|
8
|
+
def write_configuration_files(config_file = nil)
|
9
|
+
config_file ||= targetize('_data/compass.yml')
|
10
|
+
unless File.exists? File.dirname(config_file)
|
11
|
+
directory File.dirname(config_file)
|
12
|
+
end
|
13
|
+
write_file config_file, config_contents
|
14
|
+
end
|
15
|
+
|
16
|
+
def config_files_exist?
|
17
|
+
File.exists? targetize('_data/compass.yml')
|
18
|
+
end
|
19
|
+
|
20
|
+
def config_contents
|
21
|
+
config = ::Compass.configuration
|
22
|
+
contents = {}
|
23
|
+
|
24
|
+
required = (config.required_libraries.to_a || [])
|
25
|
+
load = (config.loaded_frameworks.to_a || [])
|
26
|
+
discover = (config.framework_path.to_a || [])
|
27
|
+
|
28
|
+
contents['require'] = required if required.any?
|
29
|
+
contents['load'] = load if load.any?
|
30
|
+
contents['discover'] = discover if discover.any?
|
31
|
+
|
32
|
+
(::Compass::Configuration::ATTRIBUTES + ::Compass::Configuration::ARRAY_ATTRIBUTES).each do |prop|
|
33
|
+
process_property(config, prop, contents)
|
34
|
+
end
|
35
|
+
|
36
|
+
contents.to_yaml
|
37
|
+
end
|
38
|
+
|
39
|
+
def finalize(options = {})
|
40
|
+
if options[:create] && !manifest.welcome_message_options[:replace]
|
41
|
+
puts <<-NEXTSTEPS
|
42
|
+
|
43
|
+
*********************************************************************
|
44
|
+
Congratulations! Your jekyll-compass project has been created.
|
45
|
+
|
46
|
+
Don't forget to add jekyll-compass to the list of gem plugins in _config.yml.
|
47
|
+
|
48
|
+
You may now add and edit Sass stylesheets in the #{::Compass.configuration.sass_dir} subdirectory of your project.
|
49
|
+
|
50
|
+
Sass files beginning with an underscore are called partials and won't be
|
51
|
+
compiled to CSS, but they can be imported into other sass stylesheets.
|
52
|
+
|
53
|
+
You can configure your project by editing the _data/compass.yml configuration file.
|
54
|
+
|
55
|
+
You must compile your Sass stylesheets into CSS when they change.
|
56
|
+
This can be done in one of the following ways:
|
57
|
+
1. To compile on demand:
|
58
|
+
compass compile --app=jekyll -r jekyll-compass (just compile your Sass)
|
59
|
+
jekyll build (compile your entire website, including Sass)
|
60
|
+
2. To monitor your project for changes and automatically recompile:
|
61
|
+
compass watch --app=jekyll -r jekyll-compass (just watches your Sass)
|
62
|
+
|
63
|
+
More Resources:
|
64
|
+
* Website: http://compass-style.org/
|
65
|
+
* Sass: http://sass-lang.com
|
66
|
+
* Community: http://groups.google.com/group/compass-users/
|
67
|
+
* Jekyll: http://jekyllrb.com/
|
68
|
+
* jekyll-compass: https://github.com/mscharley/jekyll-compass
|
69
|
+
NEXTSTEPS
|
70
|
+
end
|
71
|
+
puts manifest.welcome_message if manifest.welcome_message
|
72
|
+
end
|
73
|
+
|
74
|
+
def process_property(config, prop, contents)
|
75
|
+
value = config.send("#{prop}_without_default")
|
76
|
+
if value.is_a?(Proc)
|
77
|
+
$stderr.puts "WARNING: #{prop} is code and cannot be written to a file. You'll need to copy it yourself."
|
78
|
+
return
|
79
|
+
end
|
80
|
+
return if [:project_path, :project_type].include? prop
|
81
|
+
return if value.nil?
|
82
|
+
|
83
|
+
if value.is_a? Symbol
|
84
|
+
contents[prop.to_s] = value.to_s
|
85
|
+
else
|
86
|
+
contents[prop.to_s] = value
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
@@ -1,7 +1,3 @@
|
|
1
|
-
|
2
|
-
require 'sass/plugin'
|
3
|
-
require 'compass'
|
4
|
-
require 'compass/commands'
|
5
1
|
require 'fileutils'
|
6
2
|
|
7
3
|
module Jekyll
|
@@ -24,16 +20,15 @@ module Jekyll
|
|
24
20
|
@site = site
|
25
21
|
|
26
22
|
config = configuration(@site.source)
|
27
|
-
|
28
|
-
|
29
|
-
|
23
|
+
configure_compass(config)
|
24
|
+
puts "\rGenerating Compass: #{::Compass.configuration.sass_path}" +
|
25
|
+
" => #{::Compass.configuration.css_path}"
|
26
|
+
unless File.exist? ::Compass.configuration.sass_dir
|
30
27
|
print " Generating... "
|
31
28
|
return
|
32
29
|
end
|
33
|
-
configure_compass(config)
|
34
30
|
|
35
|
-
::Compass::Commands::UpdateProject.new(site.config['source'],
|
36
|
-
execute
|
31
|
+
::Compass::Commands::UpdateProject.new(@site.config['source'], {:project_type => :jekyll}).execute
|
37
32
|
|
38
33
|
puts
|
39
34
|
print " Generating... "
|
@@ -46,61 +41,24 @@ module Jekyll
|
|
46
41
|
# from `_config.yml` as well as `_data/compass.yml`.
|
47
42
|
#
|
48
43
|
# @param source [String] The project source folder
|
49
|
-
# @return [
|
44
|
+
# @return [::Compass::Configuration::Data]
|
50
45
|
def configuration(source)
|
51
|
-
config =
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
:environment => :production,
|
59
|
-
:force => true,
|
60
|
-
}
|
61
|
-
|
62
|
-
user_config = @site.config['compass']
|
63
|
-
config = deep_merge!(config, symbolize_keys(user_config)) if user_config
|
64
|
-
user_data = @site.data['compass']
|
65
|
-
config = deep_merge!(config, symbolize_keys(user_data)) if user_data
|
66
|
-
|
67
|
-
unless config.key? :sass_path
|
68
|
-
config[:sass_path] =
|
69
|
-
File.join(source, config[:sass_dir])
|
70
|
-
end
|
71
|
-
unless config.key? :css_path
|
72
|
-
config[:css_path] =
|
73
|
-
File.join(@site.config['destination'], config[:css_dir])
|
74
|
-
end
|
75
|
-
|
76
|
-
symbolize_configuration!(config)
|
77
|
-
end
|
78
|
-
|
79
|
-
# Symbolize values for configuration values which require it.
|
80
|
-
#
|
81
|
-
# @param config [Hash]
|
82
|
-
# @return [Hash]
|
83
|
-
def symbolize_configuration!(config)
|
84
|
-
[
|
85
|
-
:project_type,
|
86
|
-
:environment,
|
87
|
-
:output_style,
|
88
|
-
:preferred_syntax,
|
89
|
-
:sprite_engine,
|
90
|
-
].each do |k|
|
91
|
-
config[k] = config[k].to_sym if config.key? k
|
92
|
-
end
|
93
|
-
|
94
|
-
config
|
46
|
+
config = CompassConfiguration.default_configuration
|
47
|
+
config[:project_path] = source
|
48
|
+
config[:force] = true
|
49
|
+
config.extend(@site.config['compass'] || {})
|
50
|
+
config.extend(@site.data['compass'] || {})
|
51
|
+
config[:css_path] = File.join(@site.config['destination'], config[:css_dir]) unless config.has_key? :css_path
|
52
|
+
config.to_compass
|
95
53
|
end
|
96
54
|
|
97
55
|
# Sets up event handlers with Compass and various other
|
98
56
|
# configuration setup needs
|
99
57
|
#
|
100
|
-
# @param config [
|
58
|
+
# @param config [::Compass::Configuration::Data] Configuration to pass to Compass and Sass
|
101
59
|
# @return [void]
|
102
60
|
def configure_compass(config)
|
103
|
-
::Compass.add_configuration(config
|
61
|
+
::Compass.add_configuration(config)
|
104
62
|
|
105
63
|
::Compass.configuration.on_stylesheet_saved(
|
106
64
|
&method(:on_stylesheet_saved)
|
@@ -161,41 +119,6 @@ module Jekyll
|
|
161
119
|
end
|
162
120
|
nil
|
163
121
|
end
|
164
|
-
|
165
|
-
# Merges a target hash with another hash, recursively.
|
166
|
-
#
|
167
|
-
# @param target [Hash] The target hash
|
168
|
-
# @param merge [Hash] The hash to merge into the target
|
169
|
-
# @return [Hash] Returns the merged target
|
170
|
-
def deep_merge!(target, merge)
|
171
|
-
merge.keys.each do |key|
|
172
|
-
if merge[key].is_a? Hash and target[key].is_a? Hash
|
173
|
-
target[key] = deep_merge!(target[key], merge[key])
|
174
|
-
else
|
175
|
-
target[key] = merge[key]
|
176
|
-
end
|
177
|
-
end
|
178
|
-
|
179
|
-
target
|
180
|
-
end
|
181
|
-
|
182
|
-
# Turn all String keys of a hash into symbols, and return in another Hash.
|
183
|
-
#
|
184
|
-
# @param hash [Hash] The hash to convert
|
185
|
-
# @return [Hash] Returns the symbolized copy of hash.
|
186
|
-
def symbolize_keys(hash)
|
187
|
-
target = hash.dup
|
188
|
-
|
189
|
-
target.keys.each do |key|
|
190
|
-
value = target.delete(key)
|
191
|
-
if value.is_a? Hash
|
192
|
-
value = symbolize_keys(value)
|
193
|
-
end
|
194
|
-
target[(key.to_sym rescue key) || key] = value
|
195
|
-
end
|
196
|
-
|
197
|
-
target
|
198
|
-
end
|
199
122
|
end
|
200
123
|
end
|
201
124
|
end
|
metadata
CHANGED
@@ -1,41 +1,41 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll-compass
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthew Scharley
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-03-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: compass
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0.12'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0.12'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: jekyll
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - ~>
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '1.3'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - ~>
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '1.3'
|
41
41
|
description: |2
|
@@ -46,7 +46,10 @@ executables: []
|
|
46
46
|
extensions: []
|
47
47
|
extra_rdoc_files: []
|
48
48
|
files:
|
49
|
+
- lib/jekyll/compass/compass_app_integration.rb
|
50
|
+
- lib/jekyll/compass/compass_configuration.rb
|
49
51
|
- lib/jekyll/compass/compass_file.rb
|
52
|
+
- lib/jekyll/compass/compass_installer.rb
|
50
53
|
- lib/jekyll/compass/generator.rb
|
51
54
|
- lib/jekyll/compass.rb
|
52
55
|
- lib/jekyll-compass.rb
|
@@ -62,17 +65,17 @@ require_paths:
|
|
62
65
|
- lib
|
63
66
|
required_ruby_version: !ruby/object:Gem::Requirement
|
64
67
|
requirements:
|
65
|
-
- -
|
68
|
+
- - ">="
|
66
69
|
- !ruby/object:Gem::Version
|
67
70
|
version: '0'
|
68
71
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
69
72
|
requirements:
|
70
|
-
- -
|
73
|
+
- - ">="
|
71
74
|
- !ruby/object:Gem::Version
|
72
75
|
version: '0'
|
73
76
|
requirements: []
|
74
77
|
rubyforge_project:
|
75
|
-
rubygems_version: 2.0.
|
78
|
+
rubygems_version: 2.0.14
|
76
79
|
signing_key:
|
77
80
|
specification_version: 4
|
78
81
|
summary: Jekyll generator plugin to build Compass projects during site build
|