extjs-theme 0.1.2 → 0.1.3

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.
data/README.rdoc CHANGED
@@ -5,36 +5,48 @@ Generates a Sass version of Ext theme. Includes methods for colorizing images.
5
5
  This Gem depends upon RMagick[http://gemcutter.org/gems/rmagick] and haml-edge[http://gemcutter.org/gems/haml-edge]
6
6
 
7
7
  == Installation
8
-
8
+
9
9
  The Gem is hosted at Gemcutter[http://gemcutter.com]. Install the gem with:
10
+
11
+ gem install extjs-theme
12
+
13
+ or add
14
+
15
+ gem 'extjs-theme'
10
16
 
11
- sudo gem install extjs-theme
12
-
17
+ to you Gemfile and execute
18
+
19
+ $ bundle install
20
+
13
21
  == Usage
14
22
 
15
23
  In the root of your Rails app, first execute the following in your console:
16
24
 
17
- $ xtheme init <path/to/ext> <path/to/stylesheets>
25
+ $ bundle exec xtheme init
26
+
27
+ This creates a YAML config file named config/xtheme.yml in the application root.
18
28
 
19
- This creates a YAML config file named .xthemeconfig in the application root.
29
+ ---
30
+ theme_dir: app/stylesheets/themes
31
+ ext_dir: public/javascripts/ext-3.2.0
20
32
 
21
- ---
22
- theme_dir: public/stylesheets/sass
23
- ext_dir: public/javascripts/ext-3.1.0
33
+ or generate a custom configuration file by execute the following in your console:
24
34
 
25
- Every subsequent xtheme command will act up those directories. If you download a new version of Ext, simply re-execute <code>xtheme init</code> with the new path (TODO: store in Rails <code>/config</code> dir)
35
+ $ bundle exec xtheme init <path/to/ext> <path/to/stylesheets>
36
+
37
+ Every subsequent xtheme command will act up those directories. If you download a new version of Ext, simply re-execute <code>xtheme init</code> with the new path
26
38
 
27
39
  Example
28
40
 
29
- $ xtheme init public/javascripts/ext-3.1.0 public/stylesheets
41
+ $ bundle exec xtheme init public/javascripts/ext-3.3.0
30
42
 
31
43
  To generate a new Sass theme:
32
44
 
33
- $ xtheme create my-theme
45
+ $ bundle exec xtheme create my-theme
34
46
 
35
47
  In Rails, this will have created a new directory <code>public/stylesheets/sass/my-theme</code>
36
-
37
- The generator creates a main include file called <code>my-theme/init.sass</code> (TODO: change to <code>my-theme/all.sass</code>) which contains <code>@include</code> directives for each individual Ext stylesheet. You *no longer need* to include the ext-all.css file from the Ext library -- <code>my-theme/init.sass</code> contains all it needs. In a Rails view, you would include this file in the standard Haml/Sass[http://sass-lang.com/] manner.
48
+
49
+ The generator creates a main include file called <code>my-theme/all.sass</code> which contains <code>@include</code> directives for each individual Ext stylesheet. You *no longer need* to include the ext-all.css file from the Ext library -- <code>my-theme/all.sass</code> contains all it needs. In a Rails view, you would include this file in the standard Haml/Sass[http://sass-lang.com/] manner.
38
50
 
39
51
  =stylesheet_link_tag "my-theme/init"
40
52
 
@@ -46,10 +58,10 @@ The generator also creates a copy of all the Ext theme images in <code>my-theme/
46
58
 
47
59
  Another important sass file created is <code>my-theme/defines.sass</code>. This file contains Sass variable declarations added to each Ext sass file.
48
60
 
49
- !img_path = ../sass/my-theme/images
61
+ !img_path = ../themes/my-theme/images
50
62
  !font = tahoma,arial,verdana,sans-serif
51
63
  !hue = -90.0
52
-
64
+
53
65
  Form more on Haml and Sass, consult the HAML documentation[http://haml-lang.com/] to learn about including Sass[http://sass-lang.com/] stylesheets.
54
66
 
55
67
  == Effects
@@ -58,17 +70,17 @@ The Gem includes commands for theme colorization, including image-processing thr
58
70
 
59
71
  Currently, the only effect available is <code>effects:modulate</code>, for modifying the _hue_, _saturation_ and _lightness_ of a theme according to RMagick[http://www.imagemagick.org/RMagick/doc/image2.html#modulate]:
60
72
 
61
- $ xtheme effects:modulate <theme-name> <hue> <saturation> <lightness>
62
-
73
+ $ bundle exec xtheme effects:modulate <theme-name> <hue> <saturation> <lightness>
74
+
63
75
  The parameters _hue_, _saturation_ and _lightness_ are defined as {"Float numbers, for example, 0.25 means "25%". All three arguments may be omitted. The default value of each argument is 1.0, that is, 100%"}[http://www.imagemagick.org/RMagick/doc/image2.html#modulate]
64
-
76
+
65
77
  Based upon the default blue Ext theme, the following will generate a pink theme:
66
78
 
67
- $ xtheme effects:modulate my-theme 0.5 1.0 1.0
79
+ $ bundle exec xtheme effects:modulate my-theme 0.5 1.0 1.0
68
80
 
69
81
  A green theme:
70
82
 
71
- $ xtheme effects:modulate my-theme 1.5 1.0 1.0
83
+ $ bundle exec xtheme effects:modulate my-theme 1.5 1.0 1.0
72
84
 
73
85
  *Only hue works currently, saturation and lightness are under development*
74
86
 
data/Rakefile CHANGED
@@ -10,9 +10,9 @@ begin
10
10
  gem.email = "christocracy@gmail.com"
11
11
  gem.homepage = "http://github.com/extjs/extjs-theme"
12
12
  gem.authors = ["Christopher Scott"]
13
- gem.add_development_dependency "thoughtbot-shoulda"
13
+ gem.add_development_dependency "shoulda"
14
14
  gem.add_dependency "rmagick"
15
- gem.add_dependency "haml-edge", ">=2.3"
15
+ gem.add_dependency "haml", ">= 3.0.0.beta"
16
16
  gem.files = %w(Rakefile) +
17
17
  Dir.glob("{bin,lib,test}/**/*")
18
18
 
data/lib/extjs-theme.rb CHANGED
@@ -2,8 +2,8 @@
2
2
  # XTheme
3
3
  # A module for generating and colorizing ExtJS themes.
4
4
  #
5
- module ExtJS
6
- module Theme
5
+ module ExtJS
6
+ module Theme
7
7
  end
8
8
  end
9
9
  $LOAD_PATH.unshift(File.dirname(__FILE__) + '/extjs-theme')
@@ -1,81 +1,87 @@
1
+ require 'yaml'
1
2
  require 'commands/base'
2
3
 
3
4
  Dir["#{File.dirname(__FILE__)}/commands/*"].each { |c| require c }
4
5
 
5
6
  module ExtJS::Theme
6
- module Command
7
- class InvalidCommand < RuntimeError; end
8
- class CommandFailed < RuntimeError; end
9
- class InvalidConfig < RuntimeError; end
10
- class ConfigNotFound < RuntimeError; end
11
-
12
- class << self
13
- def run(command, args, retries=0)
14
- begin
15
- run_internal(command, args.dup)
16
- rescue InvalidCommand
17
- error "Unknown command. Run 'xtheme help' for usage information."
18
- rescue CommandFailed => e
19
- error e.message
20
- rescue InvalidConfig => e
21
- error e.message
22
- rescue ConfigNotFound => e
23
- error e.message
24
- rescue Interrupt => e
25
- error "\n[canceled]"
26
- end
27
- end
7
+ module Command
8
+ class InvalidCommand < RuntimeError;
9
+ end
10
+ class CommandFailed < RuntimeError;
11
+ end
12
+ class InvalidConfig < RuntimeError;
13
+ end
14
+ class ConfigNotFound < RuntimeError;
15
+ end
28
16
 
29
- def run_internal(command, args, heroku=nil)
30
- config = load_config
31
-
32
- klass, method = parse(command)
33
-
34
- unless method == "init"
35
- unless config
36
- raise ConfigNotFound.new("Could not locate config file .xthemeconfig.\nAre you in your application root? Have you run xtheme init?")
37
- end
38
- unless config && File.exists?(config[:ext_dir])
39
- raise InvalidConfig.new("Could not locate ext_dir #{config[:ext_dir]}.\nAre you in your application root?")
40
- end
41
- unless config && File.exists?(config[:theme_dir])
42
- raise InvalidConfig.new("Could not locate theme_dir #{config[:theme_dir]}.\nAre you in your application root?")
43
- end
44
- end
45
-
46
- runner = klass.new(args, config)
47
- raise InvalidCommand unless runner.respond_to?(method)
48
- runner.send(method)
49
- end
17
+ class << self
18
+ def run(command, args, retries=0)
19
+ begin
20
+ run_internal(command, args.dup)
21
+ rescue InvalidCommand
22
+ error "Unknown command. Run 'xtheme help' for usage information."
23
+ rescue CommandFailed => e
24
+ error e.message
25
+ rescue InvalidConfig => e
26
+ error e.message
27
+ rescue ConfigNotFound => e
28
+ error e.message
29
+ rescue Interrupt => e
30
+ error "\n[canceled]"
31
+ end
32
+ end
50
33
 
51
- def error(msg)
52
- STDERR.puts(msg)
53
- exit 1
54
- end
34
+ def run_internal(command, args, heroku=nil)
35
+ config = load_config
55
36
 
56
- def parse(command)
57
- parts = command.split(':')
58
- case parts.size
59
- when 1
60
- begin
61
- return eval("ExtJS::Theme::Command::#{command.capitalize}"), :index
62
- rescue NameError, NoMethodError
63
- return ExtJS::Theme::Command::Theme, command
64
- end
65
- when 2
66
- begin
67
- return ExtJS::Theme::Command.const_get(parts[0].capitalize), parts[1]
68
- rescue NameError
69
- raise InvalidCommand
70
- end
71
- else
72
- raise InvalidCommand
73
- end
74
- end
75
-
76
- def load_config
77
- File.exists?('.xthemeconfig') ? YAML::load(File.open('.xthemeconfig')) : nil
78
- end
79
- end
80
- end
37
+ klass, method = parse(command)
38
+
39
+ unless method == "init"
40
+ unless config
41
+ raise ConfigNotFound.new("Could not locate config file config/xtheme.yml.\nAre you in your application root? Have you run xtheme init?")
42
+ end
43
+ unless config && File.exists?(config[:ext_dir])
44
+ raise InvalidConfig.new("Could not locate ext_dir #{config[:ext_dir]}.\nAre you in your application root?")
45
+ end
46
+ unless config && File.exists?(config[:theme_dir])
47
+ raise InvalidConfig.new("Could not locate theme_dir #{config[:theme_dir]}.\nAre you in your application root?")
48
+ end
49
+ end
50
+
51
+ runner = klass.new(args, config)
52
+ raise InvalidCommand unless runner.respond_to?(method)
53
+ runner.send(method)
54
+ end
55
+
56
+ def error(msg)
57
+ STDERR.puts(msg)
58
+ exit 1
59
+ end
60
+
61
+ def parse(command)
62
+ parts = command.split(':')
63
+ case parts.size
64
+ when 1
65
+ begin
66
+ return eval("ExtJS::Theme::Command::#{command.capitalize}"), :index
67
+ rescue NameError, NoMethodError
68
+ return ExtJS::Theme::Command::Theme, command
69
+ end
70
+ when 2
71
+ begin
72
+ return ExtJS::Theme::Command.const_get(parts[0].capitalize), parts[1]
73
+ rescue NameError
74
+ raise InvalidCommand
75
+ end
76
+ else
77
+ raise InvalidCommand
78
+ end
79
+ end
80
+
81
+ def load_config
82
+ FileUtils.mv('.xthemeconfig', 'config/xtheme.yml') if File.exists?('.xthemeconfig')
83
+ File.exists?('config/xtheme.yml') ? YAML::load(File.open('config/xtheme.yml')) : nil
84
+ end
85
+ end
86
+ end
81
87
  end
@@ -1,74 +1,74 @@
1
1
  require 'fileutils'
2
2
 
3
3
  module ExtJS::Theme::Command
4
- class Base
5
- #include Heroku::Helpers
4
+ class Base
5
+ #include Heroku::Helpers
6
6
 
7
- attr_accessor :args
8
- attr_reader :config
9
-
10
- def initialize(args, config)
11
- @args = args
12
- @config = config
13
- end
14
-
15
- def display(msg, newline=true)
16
- if newline
17
- puts(msg)
18
- else
19
- print(msg)
20
- STDOUT.flush
21
- end
22
- end
7
+ attr_accessor :args
8
+ attr_reader :config
23
9
 
24
- def error(msg)
25
- ExtJS::Theme::Command.error(msg)
26
- end
10
+ def initialize(args, config)
11
+ @args = args
12
+ @config = config
13
+ end
27
14
 
28
- def ask
29
- gets.strip
30
- end
15
+ def display(msg, newline=true)
16
+ if newline
17
+ puts(msg)
18
+ else
19
+ print(msg)
20
+ STDOUT.flush
21
+ end
22
+ end
31
23
 
32
- def shell(cmd)
33
- FileUtils.cd(Dir.pwd) {|d| return `#{cmd}`}
34
- end
24
+ def error(msg)
25
+ ExtJS::Theme::Command.error(msg)
26
+ end
35
27
 
36
- def heroku
37
- #@heroku ||= Heroku::Command.run_internal('auth:client', args)
38
- end
28
+ def ask
29
+ gets.strip
30
+ end
39
31
 
40
- def extract_app(force=true)
41
- app = extract_option('--app')
42
- unless app
43
- app = extract_app_in_dir(Dir.pwd) ||
44
- raise(CommandFailed, "No app specified.\nRun this command from app folder or set it adding --app <app name>") if force
45
- @autodetected_app = true
46
- end
47
- app
48
- end
32
+ def shell(cmd)
33
+ FileUtils.cd(Dir.pwd) {|d| return `#{cmd}`}
34
+ end
49
35
 
50
- def extract_app_in_dir(dir)
51
-
52
- end
36
+ def heroku
37
+ #@heroku ||= Heroku::Command.run_internal('auth:client', args)
38
+ end
53
39
 
54
- def extract_option(options, default=true)
55
- values = options.is_a?(Array) ? options : [options]
56
- return unless opt_index = args.select { |a| values.include? a }.first
57
- opt_position = args.index(opt_index) + 1
58
- if args.size > opt_position && opt_value = args[opt_position]
59
- if opt_value.include?('--')
60
- opt_value = nil
61
- else
62
- args.delete_at(opt_position)
63
- end
64
- end
65
- opt_value ||= default
66
- args.delete(opt_index)
67
- block_given? ? yield(opt_value) : opt_value
68
- end
40
+ def extract_app(force=true)
41
+ app = extract_option('--app')
42
+ unless app
43
+ app = extract_app_in_dir(Dir.pwd) ||
44
+ raise(CommandFailed, "No app specified.\nRun this command from app folder or set it adding --app <app name>") if force
45
+ @autodetected_app = true
46
+ end
47
+ app
48
+ end
69
49
 
70
- def escape(value)
71
- heroku.escape(value)
72
- end
73
- end
50
+ def extract_app_in_dir(dir)
51
+
52
+ end
53
+
54
+ def extract_option(options, default=true)
55
+ values = options.is_a?(Array) ? options : [options]
56
+ return unless opt_index = args.select { |a| values.include? a }.first
57
+ opt_position = args.index(opt_index) + 1
58
+ if args.size > opt_position && opt_value = args[opt_position]
59
+ if opt_value.include?('--')
60
+ opt_value = nil
61
+ else
62
+ args.delete_at(opt_position)
63
+ end
64
+ end
65
+ opt_value ||= default
66
+ args.delete(opt_index)
67
+ block_given? ? yield(opt_value) : opt_value
68
+ end
69
+
70
+ def escape(value)
71
+ heroku.escape(value)
72
+ end
73
+ end
74
74
  end
@@ -0,0 +1,57 @@
1
+ module ExtJS::Theme::Command
2
+ class Config < Base
3
+ def index
4
+ #long = args.delete('--long')
5
+ #vars = heroku.config_vars(app)
6
+ #display_vars(vars, :long => long)
7
+ display "index"
8
+ end
9
+
10
+ def add
11
+ unless args.size > 0 and args.all? { |a| a.include?('=') }
12
+ raise CommandFailed, "Usage: xtheme config:add <key>=<value> [<key2>=<value2> ...]"
13
+ end
14
+
15
+ #vars = args.inject({}) do |vars, arg|
16
+ # key, value = arg.split('=', 2)
17
+ # vars[key] = value
18
+ # vars
19
+ #end
20
+
21
+ display "Adding config vars:"
22
+ #display_vars(vars, :indent => 2)
23
+
24
+ #display "Restarting app...", false
25
+ #heroku.add_config_vars(app, vars)
26
+ #display "done."
27
+ end
28
+
29
+ def remove
30
+ display "Removing #{args.first} and restarting app..."
31
+ #heroku.remove_config_var(app, args.first)
32
+ display "done."
33
+ end
34
+
35
+ alias :rm :remove
36
+
37
+ def clear
38
+ display "Clearing all config vars and restarting app..."
39
+ #heroku.clear_config_vars(app)
40
+ display "done."
41
+ end
42
+
43
+ protected
44
+ def display_vars(vars, options={})
45
+ max_length = vars.map { |v| v[0].size }.max
46
+ vars.keys.sort.each do |key|
47
+ spaces = ' ' * (max_length - key.size)
48
+ display "#{' ' * (options[:indent] || 0)}#{key}#{spaces} => #{format(vars[key], options)}"
49
+ end
50
+ end
51
+
52
+ def format(value, options)
53
+ return value if options[:long] || value.size < 36
54
+ value[0, 16] + '...' + value[-16, 16]
55
+ end
56
+ end
57
+ end
@@ -1,17 +1,15 @@
1
- require 'launchy'
2
-
3
1
  module ExtJS::Theme::Command
4
- class Effects < Base
5
-
6
- def modulate
7
- unless @args.length == 4
8
- display "Usage: xtheme effects:modulate <theme-name> <hue> <saturation> <lightness>"
2
+ class Effects < Base
3
+
4
+ def modulate
5
+ unless @args.length == 4
6
+ display "Usage: xtheme effects:modulate <theme-name> <hue> <saturation> <lightness>"
9
7
  display " Specify <hue>, <saturation> and <lightness> as Floats, for example,"
10
- display " 0.25 means 25%. The default value of each argument is 1.0, that is, 100%"
8
+ display " 0.25 means 25%. The default value of each argument is 1.0, that is, 100%"
11
9
  return
12
- end
13
- display "Modulating theme images"
14
- ExtJS::Theme::Effects.modulate(@config[:ext_dir], "#{@config[:theme_dir]}/#{@args[0]}", @args[1].to_f, @args[2].to_f, @args[3].to_f)
15
- end
16
- end
17
- end
10
+ end
11
+ display "Modulating theme images"
12
+ ExtJS::Theme::Effects.modulate(@config[:ext_dir], "#{@config[:theme_dir]}/#{@args[0]}", @args[1].to_f, @args[2].to_f, @args[3].to_f)
13
+ end
14
+ end
15
+ end
@@ -1,83 +1,83 @@
1
1
  module ExtJS::Theme::Command
2
- class Help < Base
3
- class HelpGroup < Array
4
- attr_reader :title
2
+ class Help < Base
3
+ class HelpGroup < Array
4
+ attr_reader :title
5
5
 
6
- def initialize(title)
7
- @title = title
8
- end
6
+ def initialize(title)
7
+ @title = title
8
+ end
9
9
 
10
- def command(name, description)
11
- self << [name, description]
12
- end
10
+ def command(name, description)
11
+ self << [name, description]
12
+ end
13
13
 
14
- def space
15
- self << ['', '']
16
- end
17
- end
14
+ def space
15
+ self << ['', '']
16
+ end
17
+ end
18
18
 
19
- def self.groups
20
- @groups ||= []
21
- end
19
+ def self.groups
20
+ @groups ||= []
21
+ end
22
22
 
23
- def self.group(title, &block)
24
- groups << begin
25
- group = HelpGroup.new(title)
26
- group.instance_eval(&block)
27
- group
28
- end
29
- end
23
+ def self.group(title, &block)
24
+ groups << begin
25
+ group = HelpGroup.new(title)
26
+ group.instance_eval(&block)
27
+ group
28
+ end
29
+ end
30
30
 
31
- def self.create_default_groups!
32
- group('General Commands') do
33
- command 'help', 'show this usage'
34
- #command 'version', 'show the gem version'
35
- space
36
- #command 'list', 'list your themes'
37
- command 'create [<name>]', 'create a new theme'
38
- space
39
- #command 'config', 'display the theme\'s config vars (environment)'
40
- #command 'config:add key=val [...]', 'add one or more config vars'
41
- #space
42
- #command 'destroy [<name>]', 'destroy a theme permanently'
43
- end
31
+ def self.create_default_groups!
32
+ group('General Commands') do
33
+ command 'help', 'show this usage'
34
+ #command 'version', 'show the gem version'
35
+ space
36
+ #command 'list', 'list your themes'
37
+ command 'create [<name>]', 'create a new theme'
38
+ space
39
+ #command 'config', 'display the theme\'s config vars (environment)'
40
+ #command 'config:add key=val [...]', 'add one or more config vars'
41
+ #space
42
+ #command 'destroy [<name>]', 'destroy a theme permanently'
43
+ end
44
44
 
45
- group('Effects') do
46
- command 'effects:modulate [<theme> <hue> <saturation> <lightness>]', 'Apply hue, saturation, lightness to a themes\'s images. Specify as Floats, where 1.0 means 100%'
47
- space
48
- end
49
- end
45
+ group('Effects') do
46
+ command 'effects:modulate [<theme> <hue> <saturation> <lightness>]', 'Apply hue, saturation, lightness to a themes\'s images. Specify as Floats, where 1.0 means 100%'
47
+ space
48
+ end
49
+ end
50
50
 
51
- def index
52
- display usage
53
- end
51
+ def index
52
+ display usage
53
+ end
54
54
 
55
- def version
56
- #display ExtJS::Theme.version
57
- end
55
+ def version
56
+ #display ExtJS::Theme.version
57
+ end
58
58
 
59
- def usage
60
- longest_command_length = self.class.groups.map do |group|
61
- group.map { |g| g.first.length }
62
- end.flatten.max
59
+ def usage
60
+ longest_command_length = self.class.groups.map do |group|
61
+ group.map { |g| g.first.length }
62
+ end.flatten.max
63
63
 
64
- self.class.groups.inject(StringIO.new) do |output, group|
65
- output.puts "=== %s" % group.title
66
- output.puts
64
+ self.class.groups.inject(StringIO.new) do |output, group|
65
+ output.puts "=== %s" % group.title
66
+ output.puts ''
67
67
 
68
- group.each do |command, description|
69
- if command.empty?
70
- output.puts
71
- else
72
- output.puts "%-*s # %s" % [longest_command_length, command, description]
73
- end
74
- end
68
+ group.each do |command, description|
69
+ if command.empty?
70
+ output.puts ''
71
+ else
72
+ output.puts "%-*s # %s" % [longest_command_length, command, description]
73
+ end
74
+ end
75
75
 
76
- output.puts
77
- output
78
- end.string
79
- end
80
- end
76
+ output.puts ''
77
+ output
78
+ end.string
79
+ end
80
+ end
81
81
  end
82
82
 
83
83
  ExtJS::Theme::Command::Help.create_default_groups!
@@ -1,49 +1,47 @@
1
- require 'launchy'
1
+ require 'yaml'
2
2
 
3
3
  module ExtJS::Theme::Command
4
- class Theme < Base
5
-
6
- def init
7
-
8
- unless args.length == 2
9
- display "Usage: xtheme init <path/to/ext> <path/to/stylesheets>"
10
- display " - Eg: xtheme init public/javascripts/ext-3.1.0 public/stylesheets"
11
- return
12
- end
13
-
14
- unless File.directory?(args[0])
15
- return display "Error: invalid path/to/ext #{args[0]}"
16
- end
17
- unless File.directory?(args[1])
18
- return display "Error: invalid path/to/stylesheets #{args[1]}"
19
- end
20
-
21
- display "Initializing xtheme configuration file .xthemeconfig"
22
-
23
- File.open(".xthemeconfig", "w+") {|f|
4
+ class Theme < Base
5
+
6
+ def init
7
+
8
+ ext_path = args[0] || 'public/javascripts/ext-3.2.0'
9
+ theme_path = args[1] || 'app/stylesheets/themes'
10
+
11
+ unless File.directory?(ext_path)
12
+ return display "Error: invalid ext js path: #{ext_path}"
13
+ end
14
+
15
+ unless File.directory?(theme_path)
16
+ FileUtils.mkdir_p(theme_path)
17
+ display "Create theme directory #{theme_path}"
18
+ end
19
+
20
+ display "Initializing xtheme configuration file config/xtheme.yml"
21
+ File.open("config/xtheme.yml", "w+") {|f|
24
22
  f << {
25
- :ext_dir => args[0],
26
- :theme_dir => "#{args[1]}/sass"
23
+ :ext_dir => ext_path,
24
+ :theme_dir => theme_path
27
25
  }.to_yaml
28
26
  }
29
27
  end
30
-
31
- def list
32
- display "Not implemented"
33
- end
34
-
35
- def create
36
- name = args.shift.downcase.strip rescue nil
37
- if !name
38
- return display "Usage: xtheme create <name>"
39
- end
40
- ExtJS::Theme::Generator.create(name, @config[:ext_dir], @config[:theme_dir])
41
- display "Created #{name}"
42
-
43
- end
44
-
45
- def destroy
46
- display "Not implemented"
47
- end
48
- end
28
+
29
+ def list
30
+ display "Not implemented"
31
+ end
32
+
33
+ def create
34
+ name = args.shift.downcase.strip rescue nil
35
+ if !name
36
+ return display "Usage: xtheme create <name>"
37
+ end
38
+ ExtJS::Theme::Generator.create(name, @config[:ext_dir], @config[:theme_dir])
39
+ display "Created #{name}"
40
+
41
+ end
42
+
43
+ def destroy
44
+ display "Not implemented"
45
+ end
46
+ end
49
47
  end
@@ -8,7 +8,7 @@ end
8
8
  begin
9
9
  gem 'rmagick'
10
10
  $stderr.puts "Loading rmagick gem."
11
-
11
+
12
12
  rescue LoadError
13
13
  #pass
14
14
  end
@@ -1,13 +1,13 @@
1
1
  module ExtJS::Theme
2
2
  module Effects
3
-
3
+
4
4
  ##
5
5
  # performs hsv transformation on Ext theme images and save to Sass theme dir.
6
6
  # @param {String} name Theme name
7
7
  # @param {String} ext_dir path to Ext directory relative to public/javascripts
8
8
  # @param {Float} hue
9
9
  # @param {Float} saturation
10
- # @param {Float} lightneess
10
+ # @param {Float} lightness
11
11
  #
12
12
  def self.modulate(ext_dir, theme_dir, hue=1.0, saturation=1.0, lightness=1.0)
13
13
  each_image("#{ext_dir}/resources/images/default") {|img|
@@ -17,10 +17,10 @@ module ExtJS::Theme
17
17
  defines = File.read("#{theme_dir}/defines.sass")
18
18
  File.open("#{theme_dir}/defines.sass", "w+") {|f| f << defines.gsub(/hue\s?=.*/, "hue = #{(hue-1)*180}") }
19
19
  end
20
-
20
+
21
21
  private
22
22
 
23
- ##
23
+ ##
24
24
  # Iterate all theme images
25
25
  # @param {String} path
26
26
  #
@@ -54,4 +54,4 @@ module ExtJS::Theme
54
54
  img.write(outfile)
55
55
  end
56
56
  end
57
- end
57
+ end
@@ -10,14 +10,14 @@ module ExtJS
10
10
  def self.create(name, ext_dir, theme_dir)
11
11
  ext_css_path = "#{ext_dir}/resources/css"
12
12
  theme_path = "#{theme_dir}/#{name}"
13
-
13
+
14
14
  # Create theme directory in /stylesheets/sass
15
15
  FileUtils.mkdir_p ["#{theme_path}/visual", "#{theme_path}/structure"]
16
16
 
17
- # Create the defines.sass file, set img_path variable.
18
- FileUtils.copy("#{File.dirname(__FILE__)}/template/defines.sass", "#{theme_path}/defines.sass")
17
+ # Create the defines.sass file, set img_path variable.
18
+ FileUtils.copy("#{File.dirname(__FILE__)}/template/defines.sass", "#{theme_path}/defines.sass")
19
19
  defines = File.read("#{theme_path}/defines.sass")
20
- File.open("#{theme_path}/defines.sass", "w+") {|f| f << defines.gsub(/\{\{img_path\}\}/, "../sass/#{name}/images") }
20
+ File.open("#{theme_path}/defines.sass", "w+") {|f| f << defines.gsub(/\{\{img_path\}\}/, "../themes/#{name}/images") }
21
21
  puts " - created #{theme_path}/defines.sass"
22
22
 
23
23
  sass_files = []
@@ -27,16 +27,16 @@ module ExtJS
27
27
  Dir["#{ext_css_path}/#{subdir}/*.css"].each do |file|
28
28
  m = /^.*\/(.*)\.css$/.match(file)
29
29
  sass_file = "#{theme_path}/#{subdir}/#{m.captures[0]}.sass"
30
- puts " - css2sass #{m.captures[0]}.css -> #{sass_file}"
30
+ puts " - sass-convert #{m.captures[0]}.css -> #{sass_file}"
31
31
  sass_files << "@import #{subdir}/#{m.captures[0]}.sass"
32
- `css2sass #{file} #{sass_file}`
32
+ `sass-convert #{file} #{sass_file}`
33
33
  write_sass_vars(sass_file)
34
34
  end
35
35
  end
36
36
 
37
37
  # Create master sass file, which includes @imports for all other files in theme.
38
- puts " - Writing init.sass"
39
- f = File.new("#{theme_path}/init.sass", "w")
38
+ puts " - Writing all.sass"
39
+ f = File.new("#{theme_path}/all.sass", "w")
40
40
  f.puts sass_files.join("\n")
41
41
 
42
42
  # Copy Ext theme images to new Sass theme dir.
@@ -44,7 +44,7 @@ module ExtJS
44
44
  end
45
45
 
46
46
 
47
- private
47
+ private
48
48
 
49
49
  ##
50
50
  # Iterate all theme images
@@ -0,0 +1,3 @@
1
+ ---
2
+ :ext_dir: public/javascripts/ext-3.x
3
+ :theme_dir: public/stylesheets/themes
@@ -1,7 +1,42 @@
1
1
  require 'test_helper'
2
+ FileUtils.cd("test")
2
3
 
3
- class ExtjsXthemeTest < Test::Unit::TestCase
4
- should "probably rename this file and start testing for real" do
5
- flunk "hey buddy, you should probably rename this file and start testing for real"
4
+ PUBLIC_PATH = "public"
5
+ THEME_PATH = File.join(PUBLIC_PATH, "stylesheets", "themes")
6
+
7
+ # Remove previously generated config and test theme before starting.
8
+ FileUtils.rm("config/xtheme.yml") if File.exists?("config/xtheme.yml")
9
+ FileUtils.rm_r(File.join(THEME_PATH, "foo")) if File.exists?(File.join(THEME_PATH, "foo"))
10
+
11
+ class ThemeTest < Test::Unit::TestCase
12
+ context "Within a valid Rails-like app" do
13
+ setup {
14
+ `xtheme init public/javascripts/ext-3.x #{THEME_PATH}`
15
+ }
16
+
17
+ should "config/xtheme.yml should exist" do
18
+ assert File.exists?("config/xtheme.yml"), "Failed to create config/xtheme.yml"
19
+ end
20
+
21
+ should "generate a theme" do
22
+ `xtheme create foo`
23
+ assert (
24
+ File.exists?(File.join(THEME_PATH, "foo", "all.sass")) &&
25
+ File.exists?(File.join(THEME_PATH, "foo", "images", "rails.png")) &&
26
+ File.exists?(File.join(THEME_PATH, "foo", "structure", "structure.sass")) &&
27
+ File.exists?(File.join(THEME_PATH, "foo", "visual", "visual.sass"))
28
+ ), "Failed to generate theme"
29
+ end
30
+
31
+ should "modulate a theme" do
32
+ # first destroy existing default image.
33
+ an_image = File.join(THEME_PATH, "foo", "images", "rails.png")
34
+ FileUtils.rm(an_image)
35
+
36
+ # run the effect, it should create a newly modulated version of image (it should be green but how to tell?).
37
+ `xtheme effects:modulate foo 1.5 1.0 1.0`
38
+
39
+ assert File.exists?(an_image), "Failed to modulate images"
40
+ end
6
41
  end
7
42
  end
@@ -0,0 +1,3 @@
1
+ body {
2
+ width: 666px;
3
+ }
@@ -0,0 +1,6 @@
1
+ body {
2
+ background: #000;
3
+ }
4
+ h1 {
5
+ color: #F00;
6
+ }
@@ -0,0 +1,2 @@
1
+ @import structure/structure.sass
2
+ @import visual/visual.sass
@@ -0,0 +1,7 @@
1
+ !bg_color = #eee
2
+ !bg_color_ghost = #cbddf3
3
+ !border_color = #0f0
4
+ !color = #333
5
+ !img_path = ../themes/foo/images
6
+ !font = tahoma,arial,verdana,sans-serif
7
+ !hue = 90.0
@@ -0,0 +1,3 @@
1
+ @import ../defines.sass
2
+ body
3
+ width: 666px
@@ -0,0 +1,6 @@
1
+ @import ../defines.sass
2
+ body
3
+ background: black
4
+
5
+ h1
6
+ color: red
data/test/test_helper.rb CHANGED
@@ -4,7 +4,7 @@ require 'shoulda'
4
4
 
5
5
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
6
6
  $LOAD_PATH.unshift(File.dirname(__FILE__))
7
- require 'extjs-xtheme'
7
+ require 'extjs-theme'
8
8
 
9
9
  class Test::Unit::TestCase
10
10
  end
metadata CHANGED
@@ -1,7 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: extjs-theme
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 1
8
+ - 3
9
+ version: 0.1.3
5
10
  platform: ruby
6
11
  authors:
7
12
  - Christopher Scott
@@ -9,39 +14,48 @@ autorequire:
9
14
  bindir: bin
10
15
  cert_chain: []
11
16
 
12
- date: 2010-02-12 00:00:00 -05:00
17
+ date: 2010-04-20 00:00:00 -04:00
13
18
  default_executable: xtheme
14
19
  dependencies:
15
20
  - !ruby/object:Gem::Dependency
16
- name: thoughtbot-shoulda
17
- type: :development
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
21
+ name: shoulda
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
20
24
  requirements:
21
25
  - - ">="
22
26
  - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
23
29
  version: "0"
24
- version:
30
+ type: :development
31
+ version_requirements: *id001
25
32
  - !ruby/object:Gem::Dependency
26
33
  name: rmagick
27
- type: :runtime
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
34
+ prerelease: false
35
+ requirement: &id002 !ruby/object:Gem::Requirement
30
36
  requirements:
31
37
  - - ">="
32
38
  - !ruby/object:Gem::Version
39
+ segments:
40
+ - 0
33
41
  version: "0"
34
- version:
35
- - !ruby/object:Gem::Dependency
36
- name: haml-edge
37
42
  type: :runtime
38
- version_requirement:
39
- version_requirements: !ruby/object:Gem::Requirement
43
+ version_requirements: *id002
44
+ - !ruby/object:Gem::Dependency
45
+ name: haml
46
+ prerelease: false
47
+ requirement: &id003 !ruby/object:Gem::Requirement
40
48
  requirements:
41
49
  - - ">="
42
50
  - !ruby/object:Gem::Version
43
- version: "2.3"
44
- version:
51
+ segments:
52
+ - 3
53
+ - 0
54
+ - 0
55
+ - beta
56
+ version: 3.0.0.beta
57
+ type: :runtime
58
+ version_requirements: *id003
45
59
  description: Generates Sass-based Ext themes. Includes methods for colorizing themes.
46
60
  email: christocracy@gmail.com
47
61
  executables:
@@ -50,7 +64,6 @@ extensions: []
50
64
 
51
65
  extra_rdoc_files:
52
66
  - LICENSE
53
- - README
54
67
  - README.rdoc
55
68
  files:
56
69
  - Rakefile
@@ -58,7 +71,7 @@ files:
58
71
  - lib/extjs-theme.rb
59
72
  - lib/extjs-theme/command.rb
60
73
  - lib/extjs-theme/commands/base.rb
61
- - lib/extjs-theme/commands/conifg.rb
74
+ - lib/extjs-theme/commands/config.rb
62
75
  - lib/extjs-theme/commands/effects.rb
63
76
  - lib/extjs-theme/commands/help.rb
64
77
  - lib/extjs-theme/commands/theme.rb
@@ -66,10 +79,18 @@ files:
66
79
  - lib/extjs-theme/effects.rb
67
80
  - lib/extjs-theme/generator.rb
68
81
  - lib/extjs-theme/template/defines.sass
82
+ - test/config/xtheme.yml
69
83
  - test/extjs-xtheme_test.rb
84
+ - test/public/javascripts/ext-3.x/resources/css/structure/structure.css
85
+ - test/public/javascripts/ext-3.x/resources/css/visual/visual.css
86
+ - test/public/javascripts/ext-3.x/resources/images/default/rails.png
87
+ - test/public/stylesheets/themes/foo/all.sass
88
+ - test/public/stylesheets/themes/foo/defines.sass
89
+ - test/public/stylesheets/themes/foo/images/rails.png
90
+ - test/public/stylesheets/themes/foo/structure/structure.sass
91
+ - test/public/stylesheets/themes/foo/visual/visual.sass
70
92
  - test/test_helper.rb
71
93
  - LICENSE
72
- - README
73
94
  - README.rdoc
74
95
  has_rdoc: true
75
96
  homepage: http://github.com/extjs/extjs-theme
@@ -84,18 +105,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
84
105
  requirements:
85
106
  - - ">="
86
107
  - !ruby/object:Gem::Version
108
+ segments:
109
+ - 0
87
110
  version: "0"
88
- version:
89
111
  required_rubygems_version: !ruby/object:Gem::Requirement
90
112
  requirements:
91
113
  - - ">="
92
114
  - !ruby/object:Gem::Version
115
+ segments:
116
+ - 0
93
117
  version: "0"
94
- version:
95
118
  requirements: []
96
119
 
97
120
  rubyforge_project:
98
- rubygems_version: 1.3.5
121
+ rubygems_version: 1.3.6
99
122
  signing_key:
100
123
  specification_version: 3
101
124
  summary: Ext theme-generator and colorizer
data/README DELETED
File without changes
@@ -1,56 +0,0 @@
1
- module ExtJS::Theme::Command
2
- class Config < Base
3
- def index
4
- #long = args.delete('--long')
5
- #vars = heroku.config_vars(app)
6
- #display_vars(vars, :long => long)
7
- display "index"
8
- end
9
-
10
- def add
11
- unless args.size > 0 and args.all? { |a| a.include?('=') }
12
- raise CommandFailed, "Usage: xtheme config:add <key>=<value> [<key2>=<value2> ...]"
13
- end
14
-
15
- #vars = args.inject({}) do |vars, arg|
16
- # key, value = arg.split('=', 2)
17
- # vars[key] = value
18
- # vars
19
- #end
20
-
21
- display "Adding config vars:"
22
- #display_vars(vars, :indent => 2)
23
-
24
- #display "Restarting app...", false
25
- #heroku.add_config_vars(app, vars)
26
- #display "done."
27
- end
28
-
29
- def remove
30
- display "Removing #{args.first} and restarting app...", false
31
- #heroku.remove_config_var(app, args.first)
32
- display "done."
33
- end
34
- alias :rm :remove
35
-
36
- def clear
37
- display "Clearing all config vars and restarting app...", false
38
- #heroku.clear_config_vars(app)
39
- display "done."
40
- end
41
-
42
- protected
43
- def display_vars(vars, options={})
44
- max_length = vars.map { |v| v[0].size }.max
45
- vars.keys.sort.each do |key|
46
- spaces = ' ' * (max_length - key.size)
47
- display "#{' ' * (options[:indent] || 0)}#{key}#{spaces} => #{format(vars[key], options)}"
48
- end
49
- end
50
-
51
- def format(value, options)
52
- return value if options[:long] || value.size < 36
53
- value[0, 16] + '...' + value[-16, 16]
54
- end
55
- end
56
- end