red 4.1.3 → 4.1.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -19,6 +19,8 @@ lib/red/nodes/illegal_nodes.rb
19
19
  lib/red/nodes/literal_nodes.rb
20
20
  lib/red/nodes/logic_nodes.rb
21
21
  lib/red/nodes/variable_nodes.rb
22
+ lib/source/redshift.rb
23
+ lib/source/redspec.rb
22
24
  lib/source/ruby.rb
23
25
  lib/source/redshift/accessors.rb
24
26
  lib/source/redshift/browser.rb
data/lib/red.rb CHANGED
@@ -15,7 +15,7 @@ require 'red/nodes/logic_nodes'
15
15
  require 'red/nodes/variable_nodes'
16
16
 
17
17
  module Red # :nodoc:
18
- VERSION = '4.1.3'
18
+ VERSION = '4.1.4'
19
19
 
20
20
  ARRAY_NODES = {
21
21
  :and => LogicNode::Conjunction::And,
@@ -81,11 +81,15 @@ module Red
81
81
  when :require
82
82
  basename = File.basename((arguments_array_sexp.assoc(:array).assoc(:str).last rescue ''))
83
83
  dirname = File.dirname((arguments_array_sexp.assoc(:array).assoc(:str).last rescue ''))
84
- short_filename = File.join(@@red_filepath, basename)
85
- long_filename = File.join(@@red_filepath, dirname, basename)
84
+ filename = File.join(@@red_filepath, dirname, basename)
86
85
  unless @@red_required.include?(basename)
87
86
  @@red_required |= [basename]
88
- file = Dir.glob(short_filename)[0] || Dir.glob('%s.red' % short_filename)[0] || Dir.glob('%s.rb' % short_filename)[0] || Dir.glob(long_filename)[0] || Dir.glob('%s.red' % long_filename)[0] || Dir.glob('%s.rb' % long_filename)[0] || Dir.glob('%s/../../source/%s' % [File.dirname(__FILE__),basename])[0] || Dir.glob('%s/../../source/%s.red' % [File.dirname(__FILE__),basename])[0] || Dir.glob('%s/../../source/%s.rb' % [File.dirname(__FILE__),basename])[0]
87
+ file = Dir.glob('%s.red' % filename)[0] ||
88
+ Dir.glob('%s.rb' % filename)[0] ||
89
+ Dir.glob(filename)[0] ||
90
+ Dir.glob('%s/../../source/%s.red' % [File.dirname(__FILE__),basename])[0] ||
91
+ Dir.glob('%s/../../source/%s.rb' % [File.dirname(__FILE__),basename])[0]
92
+ Dir.glob('%s/../../source/%s' % [File.dirname(__FILE__),basename])[0] ||
89
93
  stored_filepath = @@red_filepath
90
94
  @@red_filepath = File.dirname(file)
91
95
  self << hush_warnings { File.read(file).translate_to_sexp_array }.red!
@@ -0,0 +1 @@
1
+ require 'redshift/redshift'
@@ -14,8 +14,19 @@ class Transform
14
14
  :normal => 500,
15
15
  :long => 1000
16
16
  }
17
+
18
+ ALGORITHMS = {'linear' => `function(p){return -(Math.cos(Math.PI * p) - 1) / 2;}`}
17
19
 
18
-
20
+ def self.add_transition(name, func)
21
+ Transform::ALGORITHMS[name] = func
22
+ Transform::ALGORITHMS["#{name}:in"] = `function(pos){return func(pos, params);}`
23
+ Transform::ALGORITHMS["#{name}:out"] = `function(pos){return 1 - func(1 - pos, params);}`
24
+ Transform::ALGORITHMS["#{name}:in:out"] = `function(pos){return (pos <= 0.5) ? func(2 * pos, params) / 2 : (2 - func(2 * (1 - pos), params)) / 2;}`
25
+ end
26
+
27
+ def transition(transition, *args)
28
+ `#{ALGORITHMS[transition]}(args)`
29
+ end
19
30
  # at the end of an interval based transformation clears the Timeout and Intervals
20
31
  # in the browser and returns nil.
21
32
  `$clear = function(timer){clearTimeout(timer);clearInterval(timer);return nil;};`
@@ -40,6 +51,7 @@ class Transform
40
51
  return this.create({bind: bind, arguments: args, periodical: periodical})();
41
52
  };`
42
53
 
54
+
43
55
  def self.compute(from, to, delta)
44
56
  `(to - from) * delta + from`
45
57
  end
@@ -66,6 +78,10 @@ class Transform
66
78
  return nil
67
79
  end
68
80
 
81
+ def set_transition
82
+ `this.__transition__ = #{Transform::ALGORITHMS[(@options[:transition] || 'sine:in:out')]}`
83
+ end
84
+
69
85
  def set(now)
70
86
  return now
71
87
  end
@@ -89,9 +105,11 @@ class Transform
89
105
  `this.__from__ = from`
90
106
  `this.__to__ = to`
91
107
  `this.__time__ = 0`
92
- `this.__transition__ = function(p){
93
- return -(Math.cos(Math.PI * p) - 1) / 2;
94
- }`
108
+ # `this.m$set_transition`
109
+ `this.__transition__ = function(p){
110
+ return -(Math.cos(Math.PI * p) - 1) / 2;
111
+ }`
112
+
95
113
  self.start_timer
96
114
  self.fire(:start)
97
115
  return self
@@ -134,8 +152,25 @@ class Transform
134
152
  end
135
153
 
136
154
 
137
- # Module +Parser+ is responsible for turning a value into a computable value (integer or array of integers),
138
- # computing this value to the correct
155
+ # Built-in algorithms
156
+ `x = {'pow' : function(p, x){return Math.pow(p, x[0] || 6);},
157
+ 'expo' : function(p){return Math.pow(2, 8 * (p - 1));},
158
+ 'circ' : function(p){return 1 - Math.sin(Math.acos(p));},
159
+ 'sine' : function(p){return 1 - Math.sin((1 - p) * Math.PI / 2);},
160
+ 'back' : function(p, x){x = x[0] || 1.618;return Math.pow(p, 2) * ((x + 1) * p - x);},
161
+ 'bounce' : function(p){ var value; for (var a = 0, b = 1; 1; a += b, b /= 2){ if (p >= (7 - 4 * a) / 11){value = b * b - Math.pow((11 - 6 * a - 11 * p) / 4, 2);break;}}return value;},
162
+ 'elastic' : function(p, x){return Math.pow(2, 10 * --p) * Math.cos(20 * p * Math.PI * (x[0] || 1) / 3);}
163
+ };
164
+ for (prop in x) {
165
+ c$Transform.m$add_transition($q(prop), x.prop)
166
+ };
167
+ x = ['quad', 'cubic', 'quart', 'quint'];
168
+ for (var i = 0, l = x.length; i < l; i ++) {
169
+ c$Transform.m$add_transition($q(x[i]), function(p){return Math.pow(p, [i + 2]);})
170
+ };`
171
+
172
+ # Module +Parser+ is responsible for turning a css value into a computable value (integer or array of integers),
173
+ # computing this value to the correct new value in a computation and serving the final value in the correct format
139
174
  module Parser
140
175
 
141
176
  # Class Color is responsible for handling css color values in either hex (#fff) or rgb triplet (rgb(0,0,0))
@@ -237,8 +272,8 @@ class Transform
237
272
  end
238
273
  end
239
274
 
240
- # Class String is responsible for handling css string values which cannot be parsed. Simple transforms
241
- # from a start value to end value with no transform.
275
+ # Class String is responsible for handling css string values which cannot be parsed. String transforms
276
+ # from a start value to end value with no transform. This class exists mostly for polymorphic reasons.
242
277
  class String
243
278
  def self.parse(value)
244
279
  false
@@ -34,7 +34,6 @@ class Tween < Transform
34
34
  value.each do |val|
35
35
  ::Transform::Parsers.each do |parser|
36
36
  parsed = parser.parse(val)
37
- `console.log(parsed)`
38
37
  found = {:value => parsed, :parser => parser} if (parsed)
39
38
  end
40
39
  found = found || {:value => val, :parser => ::Transform::Parser::String}
@@ -0,0 +1 @@
1
+ require 'redspec/lib/red_spec/red_spec'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: red
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.1.3
4
+ version: 4.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jesse Sielaff
@@ -87,6 +87,8 @@ files:
87
87
  - lib/red/nodes/literal_nodes.rb
88
88
  - lib/red/nodes/logic_nodes.rb
89
89
  - lib/red/nodes/variable_nodes.rb
90
+ - lib/source/redshift.rb
91
+ - lib/source/redspec.rb
90
92
  - lib/source/ruby.rb
91
93
  - lib/source/redshift/accessors.rb
92
94
  - lib/source/redshift/browser.rb