chroma-js 0.0.1 → 1.0.7
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/.github/workflows/gem-push.yml +42 -0
- data/.gitignore +1 -0
- data/Gemfile +1 -2
- data/README.md +7 -3
- data/Rakefile +2 -2
- data/assets/javascripts/chroma.js +1863 -0
- data/bower.json +28 -0
- data/chroma-js.gemspec +29 -0
- data/chroma.js-rails.gemspec +21 -18
- data/composer.json +28 -0
- data/lib/chroma-js.rb +47 -0
- data/lib/chroma-js/engine.rb +11 -0
- data/lib/chroma-js/version.rb +4 -0
- data/package.json +24 -0
- data/sache.json +11 -0
- data/tasks/bower.rake +28 -0
- data/tasks/converter.rb +74 -0
- data/tasks/converter/char_string_scanner.rb +38 -0
- data/tasks/converter/js_conversion.rb +35 -0
- data/tasks/converter/logger.rb +57 -0
- data/tasks/converter/network.rb +97 -0
- data/templates/project/manifest.rb +12 -0
- metadata +118 -21
- data/lib/chroma.js/rails.rb +0 -8
- data/lib/chroma.js/rails/version.rb +0 -5
data/bower.json
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
{
|
2
|
+
"name": "chroma-js",
|
3
|
+
"version": "1.0.0",
|
4
|
+
"homepage": "https://github.com/schivei/chroma.js-rails",
|
5
|
+
"authors": [
|
6
|
+
"Elton Schivei Costa"
|
7
|
+
],
|
8
|
+
"description": "This Gem is made to support the use of Chroma.js library with Rails Assets",
|
9
|
+
"main": [
|
10
|
+
"assets/javascripts/chroma.js"
|
11
|
+
],
|
12
|
+
"keywords": [
|
13
|
+
"chroma-js",
|
14
|
+
"chroma.js",
|
15
|
+
"chroma",
|
16
|
+
"color",
|
17
|
+
"javascript"
|
18
|
+
],
|
19
|
+
"license": "MIT",
|
20
|
+
"ignore": [
|
21
|
+
"**/.*",
|
22
|
+
"lib",
|
23
|
+
"templates",
|
24
|
+
"*.gemspec",
|
25
|
+
"Rakefile",
|
26
|
+
"Gemfile"
|
27
|
+
]
|
28
|
+
}
|
data/chroma-js.gemspec
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'chroma-js/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = "chroma-js"
|
8
|
+
s.version = Chroma::VERSION
|
9
|
+
s.authors = ["Elton Schivei Costa"]
|
10
|
+
s.email = ["costa@elton.schivei.nom.br"]
|
11
|
+
s.summary = "A Gem for Chroma.js library"
|
12
|
+
s.description = "This Gem is made to support the use of Chroma.js library with Rails Assets"
|
13
|
+
s.homepage = "https://github.com/schivei/chroma.js-rails"
|
14
|
+
s.license = "MIT"
|
15
|
+
|
16
|
+
s.add_runtime_dependency 'autoprefixer-rails', '~> 5.0'
|
17
|
+
s.add_development_dependency 'actionpack', '~> 4.1'
|
18
|
+
s.add_development_dependency 'activesupport', '~> 4.1'
|
19
|
+
s.add_development_dependency 'json', '~> 2.3'
|
20
|
+
s.add_development_dependency 'sprockets-rails', '~> 2.1'
|
21
|
+
s.add_development_dependency 'slim-rails', '~> 0'
|
22
|
+
s.add_development_dependency 'uglifier', '~> 0'
|
23
|
+
# Converter
|
24
|
+
s.add_development_dependency 'term-ansicolor', '~> 0'
|
25
|
+
|
26
|
+
s.rubyforge_project = "chroma-js"
|
27
|
+
|
28
|
+
s.files = `git ls-files`.split("\n")
|
29
|
+
end
|
data/chroma.js-rails.gemspec
CHANGED
@@ -1,26 +1,29 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
lib = File.expand_path('../lib', __FILE__)
|
3
3
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require 'chroma
|
4
|
+
require 'chroma-js/version'
|
5
5
|
|
6
|
-
Gem::Specification.new do |
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
spec.license = "MIT"
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = "chroma.js-rails"
|
8
|
+
s.version = Chroma::VERSION
|
9
|
+
s.authors = ["Elton Schivei Costa"]
|
10
|
+
s.email = ["costa@elton.schivei.nom.br"]
|
11
|
+
s.summary = "A Gem for Chroma.js library"
|
12
|
+
s.description = "This Gem is made to support the use of Chroma.js library with Rails Assets"
|
13
|
+
s.homepage = "https://github.com/schivei/chroma.js-rails"
|
14
|
+
s.license = "MIT"
|
16
15
|
|
17
|
-
|
18
|
-
|
16
|
+
s.add_runtime_dependency 'autoprefixer-rails', '~> 5.0'
|
17
|
+
s.add_development_dependency 'actionpack', '~> 4.1'
|
18
|
+
s.add_development_dependency 'activesupport', '~> 4.1'
|
19
|
+
s.add_development_dependency 'json', '~> 2.3'
|
20
|
+
s.add_development_dependency 'sprockets-rails', '~> 2.1'
|
21
|
+
s.add_development_dependency 'slim-rails', '~> 0'
|
22
|
+
s.add_development_dependency 'uglifier', '~> 0'
|
23
|
+
# Converter
|
24
|
+
s.add_development_dependency 'term-ansicolor', '~> 0'
|
19
25
|
|
20
|
-
|
26
|
+
s.rubyforge_project = "chroma-js"
|
21
27
|
|
22
|
-
|
23
|
-
spec.add_development_dependency "rails", ">= 3.1"
|
24
|
-
|
25
|
-
spec.require_paths = ["lib", "vendor"]
|
28
|
+
s.files = `git ls-files`.split("\n")
|
26
29
|
end
|
data/composer.json
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
{
|
2
|
+
"name": "schivei/chroma-js",
|
3
|
+
"version": "1.0.1",
|
4
|
+
"description": "This Gem is made to support the use of Chroma.js library with Rails Assets",
|
5
|
+
"keywords": [
|
6
|
+
"chroma-js",
|
7
|
+
"chroma.js",
|
8
|
+
"chroma",
|
9
|
+
"color",
|
10
|
+
"javascript"
|
11
|
+
],
|
12
|
+
"homepage": "https://github.com/schivei/chroma.js-rails",
|
13
|
+
"authors": [
|
14
|
+
{
|
15
|
+
"name": "Elton Schivei Costa",
|
16
|
+
"email": "costa@elton.schivei.nom.br"
|
17
|
+
}
|
18
|
+
],
|
19
|
+
"support": {
|
20
|
+
"issues": "https://github.com/schivei/chroma.js-rails/issues"
|
21
|
+
},
|
22
|
+
"license": "MIT",
|
23
|
+
"extra": {
|
24
|
+
"branch-alias": {
|
25
|
+
"dev-master": "0.1.x-dev"
|
26
|
+
}
|
27
|
+
}
|
28
|
+
}
|
data/lib/chroma-js.rb
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'chroma-js/version'
|
2
|
+
module Chroma
|
3
|
+
class << self
|
4
|
+
# Based on bootstrap-sass
|
5
|
+
def load!
|
6
|
+
if rails?
|
7
|
+
register_rails_engine
|
8
|
+
elsif sprockets?
|
9
|
+
register_sprockets
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
# Paths
|
14
|
+
def gem_path
|
15
|
+
@gem_path ||= File.expand_path '..', File.dirname(__FILE__)
|
16
|
+
end
|
17
|
+
|
18
|
+
def javascripts_path
|
19
|
+
File.join assets_path, 'javascripts'
|
20
|
+
end
|
21
|
+
|
22
|
+
def assets_path
|
23
|
+
@assets_path ||= File.join gem_path, 'assets'
|
24
|
+
end
|
25
|
+
|
26
|
+
# Environment detection helpers
|
27
|
+
def sprockets?
|
28
|
+
defined?(::Sprockets)
|
29
|
+
end
|
30
|
+
|
31
|
+
def rails?
|
32
|
+
defined?(::Rails)
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def register_rails_engine
|
38
|
+
require 'chroma-js/engine'
|
39
|
+
end
|
40
|
+
|
41
|
+
def register_sprockets
|
42
|
+
Sprockets.append_path(javascripts_path)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
Chroma.load!
|
data/package.json
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
{
|
2
|
+
"name": "chroma-js",
|
3
|
+
"version": "1.0.1",
|
4
|
+
"homepage": "https://github.com/schivei/chroma.js-rails",
|
5
|
+
"main": "assets/javascripts/chroma.js",
|
6
|
+
"repository": {
|
7
|
+
"type": "git",
|
8
|
+
"url": "git://github.com/schivei/chroma.js-rails"
|
9
|
+
},
|
10
|
+
"keywords": [
|
11
|
+
"chroma-js",
|
12
|
+
"chroma.js",
|
13
|
+
"chroma",
|
14
|
+
"color",
|
15
|
+
"javascript"
|
16
|
+
],
|
17
|
+
"contributors": [
|
18
|
+
"Elton Schivei Costa"
|
19
|
+
],
|
20
|
+
"license": "MIT",
|
21
|
+
"bugs": {
|
22
|
+
"url": "https://github.com/schivei/chroma.js-rails/issues"
|
23
|
+
}
|
24
|
+
}
|
data/sache.json
ADDED
data/tasks/bower.rake
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'find'
|
2
|
+
require 'json'
|
3
|
+
require 'pathname'
|
4
|
+
|
5
|
+
namespace :bower do
|
6
|
+
|
7
|
+
find_files = ->(path) {
|
8
|
+
Find.find(Pathname.new(path).relative_path_from(Pathname.new Dir.pwd).to_s).map do |path|
|
9
|
+
path if File.file?(path)
|
10
|
+
end.compact
|
11
|
+
}
|
12
|
+
|
13
|
+
desc 'update main and version in bower.json'
|
14
|
+
task :generate do
|
15
|
+
require 'bootstrap-sass'
|
16
|
+
Dir.chdir Bootstrap.gem_path do
|
17
|
+
spec = JSON.parse(File.read 'bower.json')
|
18
|
+
|
19
|
+
spec['main'] = %w(assets/javascripts/chroma.js)
|
20
|
+
|
21
|
+
spec['version'] = Chroma::VERSION
|
22
|
+
|
23
|
+
File.open('bower.json', 'w') do |f|
|
24
|
+
f.puts JSON.pretty_generate(spec)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/tasks/converter.rb
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
# Based on convert script from vwall/compass-twitter-bootstrap gem.
|
3
|
+
# https://github.com/vwall/compass-twitter-bootstrap/blob/master/build/convert.rb
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this work except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License in the LICENSE file, or at:
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
17
|
+
require 'open-uri'
|
18
|
+
require 'json'
|
19
|
+
require 'strscan'
|
20
|
+
require 'forwardable'
|
21
|
+
require 'term/ansicolor'
|
22
|
+
require 'fileutils'
|
23
|
+
|
24
|
+
require_relative 'converter/js_conversion'
|
25
|
+
require_relative 'converter/logger'
|
26
|
+
require_relative 'converter/network'
|
27
|
+
|
28
|
+
class Converter
|
29
|
+
extend Forwardable
|
30
|
+
include Network
|
31
|
+
include LessConversion
|
32
|
+
include JsConversion
|
33
|
+
include FontsConversion
|
34
|
+
|
35
|
+
def initialize(repo: 'gka/chroma.js', branch: 'master', save_to: {}, cache_path: 'tmp/converter-cache-chroma')
|
36
|
+
@logger = Logger.new
|
37
|
+
@repo = repo
|
38
|
+
@branch = branch || 'master'
|
39
|
+
@branch_sha = get_branch_sha
|
40
|
+
@cache_path = cache_path
|
41
|
+
@repo_url = "https://github.com/#@repo"
|
42
|
+
@save_to = {
|
43
|
+
js: 'assets/javascripts/chroma'}.merge(save_to)
|
44
|
+
end
|
45
|
+
|
46
|
+
def_delegators :@logger, :log, :log_status, :log_processing, :log_transform, :log_file_info, :log_processed, :log_http_get_file, :log_http_get_files, :silence_log
|
47
|
+
|
48
|
+
def process_chroma
|
49
|
+
log_status "Convert Chroma LESS to Sass"
|
50
|
+
puts " repo : #@repo_url"
|
51
|
+
puts " branch : #@branch_sha #@repo_url/tree/#@branch"
|
52
|
+
puts " save to: #{@save_to.to_json}"
|
53
|
+
puts " twbs cache: #{@cache_path}"
|
54
|
+
puts '-' * 60
|
55
|
+
|
56
|
+
@save_to.each { |_, v| FileUtils.mkdir_p(v) }
|
57
|
+
|
58
|
+
process_javascript_assets
|
59
|
+
store_version
|
60
|
+
end
|
61
|
+
|
62
|
+
def save_file(path, content, mode='w')
|
63
|
+
dir = File.dirname(path)
|
64
|
+
FileUtils.mkdir_p(dir) unless File.directory?(dir)
|
65
|
+
File.open(path, mode) { |file| file.write(content) }
|
66
|
+
end
|
67
|
+
|
68
|
+
# Update version.rb file with CHROMA_SHA
|
69
|
+
def store_version
|
70
|
+
path = 'lib/chroma-js/version.rb'
|
71
|
+
content = File.read(path).sub(/CHROMA_SHA\s*=\s*['"][\w]+['"]/, "CHROMA_SHA = '#@branch_sha'")
|
72
|
+
File.open(path, 'w') { |f| f.write(content) }
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# regular string scanner works with bytes
|
2
|
+
# this one works with chars and provides #scan_next
|
3
|
+
class Converter
|
4
|
+
class CharStringScanner
|
5
|
+
extend Forwardable
|
6
|
+
|
7
|
+
def initialize(*args)
|
8
|
+
@s = StringScanner.new(*args)
|
9
|
+
end
|
10
|
+
|
11
|
+
def_delegators :@s, :scan_until, :skip_until, :string
|
12
|
+
|
13
|
+
# advance scanner to pos after the next match of pattern and return the match
|
14
|
+
def scan_next(pattern)
|
15
|
+
return unless @s.scan_until(pattern)
|
16
|
+
@s.matched
|
17
|
+
end
|
18
|
+
|
19
|
+
def pos
|
20
|
+
byte_to_str_pos @s.pos
|
21
|
+
end
|
22
|
+
|
23
|
+
def pos=(i)
|
24
|
+
@s.pos = str_to_byte_pos i
|
25
|
+
i
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def byte_to_str_pos(pos)
|
31
|
+
@s.string.byteslice(0, pos).length
|
32
|
+
end
|
33
|
+
|
34
|
+
def str_to_byte_pos(pos)
|
35
|
+
@s.string.slice(0, pos).bytesize
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
class Converter
|
2
|
+
module JsConversion
|
3
|
+
def process_javascript_assets
|
4
|
+
log_status 'Processing javascripts...'
|
5
|
+
save_to = @save_to[:js]
|
6
|
+
contents = {}
|
7
|
+
read_files('js', chroma_js_files).each do |name, file|
|
8
|
+
contents[name] = file
|
9
|
+
save_file("#{save_to}/#{name}", file)
|
10
|
+
end
|
11
|
+
log_processed "#{chroma_js_files * ' '}"
|
12
|
+
|
13
|
+
log_status 'Updating javascript manifest'
|
14
|
+
manifest = ''
|
15
|
+
chroma_js_files.each do |name|
|
16
|
+
name = name.gsub(/\.js$/, '')
|
17
|
+
manifest << "//= require ./chroma/#{name}\n"
|
18
|
+
end
|
19
|
+
dist_js = read_files('dist/js', %w(chroma.js chroma.min.js))
|
20
|
+
{
|
21
|
+
'assets/javascripts/chroma.js' => dist_js['chroma.js'],
|
22
|
+
'assets/javascripts/chroma.min.js' => dist_js['chroma.min.js'],
|
23
|
+
}.each do |path, content|
|
24
|
+
save_file path, content
|
25
|
+
log_processed path
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def chroma_js_files
|
30
|
+
@chroma_js_files ||= begin
|
31
|
+
files = get_paths_by_type('js', /\.js$/).reject { |path| path =~ %r(^tests/) }
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
class Converter
|
2
|
+
class Logger
|
3
|
+
include Term::ANSIColor
|
4
|
+
|
5
|
+
def log_status(status)
|
6
|
+
puts bold status
|
7
|
+
end
|
8
|
+
|
9
|
+
def log_file_info(s)
|
10
|
+
puts " #{magenta s}"
|
11
|
+
end
|
12
|
+
|
13
|
+
def log_transform(*args, from: caller[1][/`.*'/][1..-2].sub(/^block in /, ''))
|
14
|
+
puts " #{cyan from}#{cyan ": #{args * ', '}" unless args.empty?}"
|
15
|
+
end
|
16
|
+
|
17
|
+
def log_processing(name)
|
18
|
+
puts yellow " #{File.basename(name)}"
|
19
|
+
end
|
20
|
+
|
21
|
+
def log_processed(name)
|
22
|
+
puts green " #{name}"
|
23
|
+
end
|
24
|
+
|
25
|
+
def log_http_get_file(url, cached = false)
|
26
|
+
s = " #{'CACHED ' if cached}GET #{url}..."
|
27
|
+
if cached
|
28
|
+
puts dark green s
|
29
|
+
else
|
30
|
+
puts dark cyan s
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def log_http_get_files(files, from, cached = false)
|
35
|
+
return if files.empty?
|
36
|
+
s = " #{'CACHED ' if cached}GET #{files.length} files from #{from} #{files * ' '}..."
|
37
|
+
if cached
|
38
|
+
puts dark green s
|
39
|
+
else
|
40
|
+
puts dark cyan s
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def puts(*args)
|
45
|
+
STDERR.puts *args unless @silence
|
46
|
+
end
|
47
|
+
|
48
|
+
alias log puts
|
49
|
+
|
50
|
+
def silence_log
|
51
|
+
@silence = true
|
52
|
+
yield
|
53
|
+
ensure
|
54
|
+
@silence = false
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|