lib/bootstrap4jekyll/plugin.rb in bootstrap4jekyll-0.0.0 vs lib/bootstrap4jekyll/plugin.rb in bootstrap4jekyll-1.0.1.pre
- old
+ new
@@ -7,22 +7,73 @@
# The plugin functionality that adds the _Twitter-Bootstrap-framework_ to the _Jekyll_ site.
class Plugin
# Add the paths of _bootstraps scss partials_ to the global _sass-load-path_.
# @param [Jekyll::Site] site represents site-wide information and configuration settings.
def complete_load_paths(site)
- sass_load_paths = File.expand_path('stylesheets/', ::Bootstrap.assets_path)
+ # fetch the the path to the bootstrap partials.
+ bootstrap_partials = File.expand_path('stylesheets/', ::Bootstrap.assets_path)
# make sure there is a 'sass' key-entry in the config settings.
- #noinspection RubyStringKeysInHashInspection
site.config['sass'] = { 'load_paths' => [] } unless site.config['sass']
sass_config = site.config['sass']
# make sure that the sass_config has a 'load_paths' key-entry.
sass_config['load_paths'] = [] unless sass_config['load_paths']
# make sure that the 'load_paths' entry is an array and not just a string
sass_config['load_paths'] = Array(sass_config['load_paths'])
- # add bootstraps to load the paths
- sass_config['load_paths'] << sass_load_paths
+ # add the bootstrap partials to the sass-load-paths
+ sass_config['load_paths'] << bootstrap_partials
end
+ # The assets delivered together with the bootstrap GEM will be added to the site.
+ def add_bootstrap_assets(site)
+ site.static_files.concat jekyllized_bootstrap_files(site) if assets_enabled?(site)
+ end
+
+ private
+
+ # @return [Boolean] true if the user has chosen to include the bootstrap assets to his site.
+ def assets_enabled?(site)
+ return false unless site.config['bootstrap']
+
+ site.config['bootstrap']['assets'] == true
+ end
+
+ # Create a Jekyll::StaticFile for each bootstrap file and assemble them into an array.
+ # @return [Array<Jekyll::StaticFile>] the extra assets that should be included
+ # in the generated site.
+ def jekyllized_bootstrap_files(site)
+ source = File.dirname(bootstrap_assets_path)
+ bootstrap_asset_files.map do |file|
+ dir = File.dirname(file)
+ file_name = File.basename(file)
+ Jekyll::StaticFile.new site, source, dir, file_name
+ end
+ end
+
+ # Scans the bootstrap GEM and creates an array files-paths that should be included
+ # in the generated site.
+ #
+ # @return [Array<String>] an array files-paths that should be included
+ # in the generated site.
+ def bootstrap_asset_files
+ asset_files = []
+ Find.find(bootstrap_assets_path).each do |path|
+ next if File.directory?(path)
+ next if path.include?(stylesheets_path) # do not include the scss files
+
+ asset_files << path.sub(bootstrap_assets_path, 'assets')
+ end
+ asset_files
+ end
+
+ # @return [String] Absolute path to the assets distributed together with the bootstrap GEM.
+ def bootstrap_assets_path
+ @bootstrap_assets_path ||= ::Bootstrap.assets_path
+ end
+
+ # @return [String] Absolute path to the scss partials distributed together with the bootstrap GEM.
+ def stylesheets_path
+ @stylesheets_path ||= File.expand_path 'stylesheets/', bootstrap_assets_path
+ end
end
end