mirror of
https://github.com/google/pebble.git
synced 2025-03-15 16:51:21 +00:00
59 lines
1.8 KiB
Ruby
59 lines
1.8 KiB
Ruby
|
# Copyright 2025 Google LLC
|
||
|
#
|
||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
# you may not use this file except in compliance with the License.
|
||
|
# You may obtain a copy of the License at
|
||
|
#
|
||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||
|
#
|
||
|
# Unless required by applicable law or agreed to in writing, software
|
||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
# See the License for the specific language governing permissions and
|
||
|
# limitations under the License.
|
||
|
|
||
|
require 'uglifier'
|
||
|
require 'digest'
|
||
|
|
||
|
module Jekyll
|
||
|
# Jekyll Generator for concatenating and minifying JS for production site
|
||
|
class GeneratorMinifyJS < Generator
|
||
|
priority :highest
|
||
|
|
||
|
def initialize(_)
|
||
|
end
|
||
|
|
||
|
def generate(site)
|
||
|
return if site.config['rack_env'] == 'development'
|
||
|
@site = site
|
||
|
@tmp_dir = File.join(site.source, '../tmp/')
|
||
|
@js_dir = 'assets/js/'
|
||
|
@tmp_js_dir = File.join(@tmp_dir, @js_dir)
|
||
|
libs_js = uglify_libs
|
||
|
libs_md5 = Digest::MD5.hexdigest(libs_js)
|
||
|
@site.data['js']['lib_hash'] = libs_md5
|
||
|
create_libs_js(libs_js, libs_md5)
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
def uglify_libs
|
||
|
ugly_libs = []
|
||
|
@site.data['js']['libs'].each do |lib|
|
||
|
lib_path = File.join(@site.source, 'assets', lib['path'])
|
||
|
ugly_libs << Uglifier.compile(File.read(lib_path))
|
||
|
end
|
||
|
ugly_libs.join("\n\n")
|
||
|
end
|
||
|
|
||
|
def create_libs_js(js, md5)
|
||
|
FileUtils.mkdir_p(@tmp_js_dir)
|
||
|
File.open(File.join(@tmp_js_dir, "libs-#{md5}.js"), 'w') do |f|
|
||
|
f.write(js)
|
||
|
end
|
||
|
@site.static_files << Jekyll::StaticFile.new(@site, @tmp_dir, @js_dir,
|
||
|
"libs-#{md5}.js")
|
||
|
end
|
||
|
end
|
||
|
end
|