funfetti 0.1.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c655dfde6c0511037c957a4d0c795612dc48f999
4
- data.tar.gz: 8a4fc95f86325ee3c3d4f9e293cfed2ebc0bfc29
3
+ metadata.gz: 7c5acae9a5ea663286894a0a0800d9780c2f39ea
4
+ data.tar.gz: b2568bec024a1d866e8e618044e0f8450daa6326
5
5
  SHA512:
6
- metadata.gz: 60a084b13a489c1e7939c9481d466c877df1403fd6b832f94206ad1ebbe145b3ee7aeb8b51be9720c8fcc5adadb15c9de3e1520881f7c68b3b20ca6191e0f8f7
7
- data.tar.gz: d25f073a6f652b54d25666bcc2737f017ce412bcf633f65bc8890ea4adde6e73bbf931a92257316c0e9225e320aead0d5458f1b5d456bdb4d9730bf9cebaa1a6
6
+ metadata.gz: 8efef5d31c9ea4a690b5c224a655a7219569e34144315a80f53cdbdcdc95b48463cd70afe8219b4319799e94c6009e1345035a26d935387887decad14834e9d0
7
+ data.tar.gz: d35f7e07791c7381cb364e0e46cae4bf9d81fe2969414154942ed1518dda2deefc2c42a649aea239db4f2254d020ec2a548a7957e744f9058ee5316f4c0c838d
@@ -11,3 +11,361 @@
11
11
  // about supported directives.
12
12
  //
13
13
  //= require_tree .
14
+ $(document).ready(function() {
15
+ var frameRate = 30;
16
+ var dt = 1.0 / frameRate;
17
+ var DEG_TO_RAD = Math.PI / 180;
18
+ var RAD_TO_DEG = 180 / Math.PI;
19
+ var colors = [
20
+ ["#df0049", "#660671"],
21
+ ["#00e857", "#005291"],
22
+ ["#2bebbc", "#05798a"],
23
+ ["#ffd200", "#b06c00"]
24
+ ];
25
+
26
+ function Vector2(_x, _y) {
27
+ this.x = _x, this.y = _y;
28
+ this.Length = function() {
29
+ return Math.sqrt(this.SqrLength());
30
+ }
31
+ this.SqrLength = function() {
32
+ return this.x * this.x + this.y * this.y;
33
+ }
34
+ this.Equals = function(_vec0, _vec1) {
35
+ return _vec0.x == _vec1.x && _vec0.y == _vec1.y;
36
+ }
37
+ this.Add = function(_vec) {
38
+ this.x += _vec.x;
39
+ this.y += _vec.y;
40
+ }
41
+ this.Sub = function(_vec) {
42
+ this.x -= _vec.x;
43
+ this.y -= _vec.y;
44
+ }
45
+ this.Div = function(_f) {
46
+ this.x /= _f;
47
+ this.y /= _f;
48
+ }
49
+ this.Mul = function(_f) {
50
+ this.x *= _f;
51
+ this.y *= _f;
52
+ }
53
+ this.Normalize = function() {
54
+ var sqrLen = this.SqrLength();
55
+ if (sqrLen != 0) {
56
+ var factor = 1.0 / Math.sqrt(sqrLen);
57
+ this.x *= factor;
58
+ this.y *= factor;
59
+ }
60
+ }
61
+ this.Normalized = function() {
62
+ var sqrLen = this.SqrLength();
63
+ if (sqrLen != 0) {
64
+ var factor = 1.0 / Math.sqrt(sqrLen);
65
+ return new Vector2(this.x * factor, this.y * factor);
66
+ }
67
+ return new Vector2(0, 0);
68
+ }
69
+ }
70
+ Vector2.Lerp = function(_vec0, _vec1, _t) {
71
+ return new Vector2((_vec1.x - _vec0.x) * _t + _vec0.x, (_vec1.y - _vec0.y) * _t + _vec0.y);
72
+ }
73
+ Vector2.Distance = function(_vec0, _vec1) {
74
+ return Math.sqrt(Vector2.SqrDistance(_vec0, _vec1));
75
+ }
76
+ Vector2.SqrDistance = function(_vec0, _vec1) {
77
+ var x = _vec0.x - _vec1.x;
78
+ var y = _vec0.y - _vec1.y;
79
+ return (x * x + y * y + z * z);
80
+ }
81
+ Vector2.Scale = function(_vec0, _vec1) {
82
+ return new Vector2(_vec0.x * _vec1.x, _vec0.y * _vec1.y);
83
+ }
84
+ Vector2.Min = function(_vec0, _vec1) {
85
+ return new Vector2(Math.min(_vec0.x, _vec1.x), Math.min(_vec0.y, _vec1.y));
86
+ }
87
+ Vector2.Max = function(_vec0, _vec1) {
88
+ return new Vector2(Math.max(_vec0.x, _vec1.x), Math.max(_vec0.y, _vec1.y));
89
+ }
90
+ Vector2.ClampMagnitude = function(_vec0, _len) {
91
+ var vecNorm = _vec0.Normalized;
92
+ return new Vector2(vecNorm.x * _len, vecNorm.y * _len);
93
+ }
94
+ Vector2.Sub = function(_vec0, _vec1) {
95
+ return new Vector2(_vec0.x - _vec1.x, _vec0.y - _vec1.y, _vec0.z - _vec1.z);
96
+ }
97
+
98
+ function EulerMass(_x, _y, _mass, _drag) {
99
+ this.position = new Vector2(_x, _y);
100
+ this.mass = _mass;
101
+ this.drag = _drag;
102
+ this.force = new Vector2(0, 0);
103
+ this.velocity = new Vector2(0, 0);
104
+ this.AddForce = function(_f) {
105
+ this.force.Add(_f);
106
+ }
107
+ this.Integrate = function(_dt) {
108
+ var acc = this.CurrentForce(this.position);
109
+ acc.Div(this.mass);
110
+ var posDelta = new Vector2(this.velocity.x, this.velocity.y);
111
+ posDelta.Mul(_dt);
112
+ this.position.Add(posDelta);
113
+ acc.Mul(_dt);
114
+ this.velocity.Add(acc);
115
+ this.force = new Vector2(0, 0);
116
+ }
117
+ this.CurrentForce = function(_pos, _vel) {
118
+ var totalForce = new Vector2(this.force.x, this.force.y);
119
+ var speed = this.velocity.Length();
120
+ var dragVel = new Vector2(this.velocity.x, this.velocity.y);
121
+ dragVel.Mul(this.drag * this.mass * speed);
122
+ totalForce.Sub(dragVel);
123
+ return totalForce;
124
+ }
125
+ }
126
+
127
+ function ConfettiPaper(_x, _y) {
128
+ this.pos = new Vector2(_x, _y);
129
+ this.rotationSpeed = Math.random() * 600 + 800;
130
+ this.angle = DEG_TO_RAD * Math.random() * 360;
131
+ this.rotation = DEG_TO_RAD * Math.random() * 360;
132
+ this.cosA = 1.0;
133
+ this.size = 5.0;
134
+ this.oscillationSpeed = Math.random() * 1.5 + 0.5;
135
+ this.xSpeed = 40.0;
136
+ this.ySpeed = Math.random() * 60 + 50.0;
137
+ this.corners = new Array();
138
+ this.time = Math.random();
139
+ var ci = Math.round(Math.random() * (colors.length - 1));
140
+ this.frontColor = colors[ci][0];
141
+ this.backColor = colors[ci][1];
142
+ for (var i = 0; i < 4; i++) {
143
+ var dx = Math.cos(this.angle + DEG_TO_RAD * (i * 90 + 45));
144
+ var dy = Math.sin(this.angle + DEG_TO_RAD * (i * 90 + 45));
145
+ this.corners[i] = new Vector2(dx, dy);
146
+ }
147
+ this.Update = function(_dt) {
148
+ this.time += _dt;
149
+ this.rotation += this.rotationSpeed * _dt;
150
+ this.cosA = Math.cos(DEG_TO_RAD * this.rotation);
151
+ this.pos.x += Math.cos(this.time * this.oscillationSpeed) * this.xSpeed * _dt
152
+ this.pos.y += this.ySpeed * _dt;
153
+ if (this.pos.y > ConfettiPaper.bounds.y) {
154
+ this.pos.x = Math.random() * ConfettiPaper.bounds.x;
155
+ this.pos.y = 0;
156
+ }
157
+ }
158
+ this.Draw = function(_g) {
159
+ if (this.cosA > 0) {
160
+ _g.fillStyle = this.frontColor;
161
+ } else {
162
+ _g.fillStyle = this.backColor;
163
+ }
164
+ _g.beginPath();
165
+ _g.moveTo(this.pos.x + this.corners[0].x * this.size, this.pos.y + this.corners[0].y * this.size * this.cosA);
166
+ for (var i = 1; i < 4; i++) {
167
+ _g.lineTo(this.pos.x + this.corners[i].x * this.size, this.pos.y + this.corners[i].y * this.size * this.cosA);
168
+ }
169
+ _g.closePath();
170
+ _g.fill();
171
+ }
172
+ }
173
+ ConfettiPaper.bounds = new Vector2(0, 0);
174
+
175
+ function ConfettiRibbon(_x, _y, _count, _dist, _thickness, _angle, _mass, _drag) {
176
+ this.particleDist = _dist;
177
+ this.particleCount = _count;
178
+ this.particleMass = _mass;
179
+ this.particleDrag = _drag;
180
+ this.particles = new Array();
181
+ var ci = Math.round(Math.random() * (colors.length - 1));
182
+ this.frontColor = colors[ci][0];
183
+ this.backColor = colors[ci][1];
184
+ this.xOff = Math.cos(DEG_TO_RAD * _angle) * _thickness;
185
+ this.yOff = Math.sin(DEG_TO_RAD * _angle) * _thickness;
186
+ this.position = new Vector2(_x, _y);
187
+ this.prevPosition = new Vector2(_x, _y);
188
+ this.velocityInherit = Math.random() * 2 + 4;
189
+ this.time = Math.random() * 100;
190
+ this.oscillationSpeed = Math.random() * 2 + 2;
191
+ this.oscillationDistance = Math.random() * 40 + 40;
192
+ this.ySpeed = Math.random() * 40 + 80;
193
+ for (var i = 0; i < this.particleCount; i++) {
194
+ this.particles[i] = new EulerMass(_x, _y - i * this.particleDist, this.particleMass, this.particleDrag);
195
+ }
196
+ this.Update = function(_dt) {
197
+ var i = 0;
198
+ this.time += _dt * this.oscillationSpeed;
199
+ this.position.y += this.ySpeed * _dt;
200
+ this.position.x += Math.cos(this.time) * this.oscillationDistance * _dt;
201
+ this.particles[0].position = this.position;
202
+ var dX = this.prevPosition.x - this.position.x;
203
+ var dY = this.prevPosition.y - this.position.y;
204
+ var delta = Math.sqrt(dX * dX + dY * dY);
205
+ this.prevPosition = new Vector2(this.position.x, this.position.y);
206
+ for (i = 1; i < this.particleCount; i++) {
207
+ var dirP = Vector2.Sub(this.particles[i - 1].position, this.particles[i].position);
208
+ dirP.Normalize();
209
+ dirP.Mul((delta / _dt) * this.velocityInherit);
210
+ this.particles[i].AddForce(dirP);
211
+ }
212
+ for (i = 1; i < this.particleCount; i++) {
213
+ this.particles[i].Integrate(_dt);
214
+ }
215
+ for (i = 1; i < this.particleCount; i++) {
216
+ var rp2 = new Vector2(this.particles[i].position.x, this.particles[i].position.y);
217
+ rp2.Sub(this.particles[i - 1].position);
218
+ rp2.Normalize();
219
+ rp2.Mul(this.particleDist);
220
+ rp2.Add(this.particles[i - 1].position);
221
+ this.particles[i].position = rp2;
222
+ }
223
+ if (this.position.y > ConfettiRibbon.bounds.y + this.particleDist * this.particleCount) {
224
+ this.Reset();
225
+ }
226
+ }
227
+ this.Reset = function() {
228
+ this.position.y = -Math.random() * ConfettiRibbon.bounds.y;
229
+ this.position.x = Math.random() * ConfettiRibbon.bounds.x;
230
+ this.prevPosition = new Vector2(this.position.x, this.position.y);
231
+ this.velocityInherit = Math.random() * 2 + 4;
232
+ this.time = Math.random() * 100;
233
+ this.oscillationSpeed = Math.random() * 2.0 + 1.5;
234
+ this.oscillationDistance = Math.random() * 40 + 40;
235
+ this.ySpeed = Math.random() * 40 + 80;
236
+ var ci = Math.round(Math.random() * (colors.length - 1));
237
+ this.frontColor = colors[ci][0];
238
+ this.backColor = colors[ci][1];
239
+ this.particles = new Array();
240
+ for (var i = 0; i < this.particleCount; i++) {
241
+ this.particles[i] = new EulerMass(this.position.x, this.position.y - i * this.particleDist, this.particleMass, this.particleDrag);
242
+ }
243
+ }
244
+ this.Draw = function(_g) {
245
+ for (var i = 0; i < this.particleCount - 1; i++) {
246
+ var p0 = new Vector2(this.particles[i].position.x + this.xOff, this.particles[i].position.y + this.yOff);
247
+ var p1 = new Vector2(this.particles[i + 1].position.x + this.xOff, this.particles[i + 1].position.y + this.yOff);
248
+ if (this.Side(this.particles[i].position.x, this.particles[i].position.y, this.particles[i + 1].position.x, this.particles[i + 1].position.y, p1.x, p1.y) < 0) {
249
+ _g.fillStyle = this.frontColor;
250
+ _g.strokeStyle = this.frontColor;
251
+ } else {
252
+ _g.fillStyle = this.backColor;
253
+ _g.strokeStyle = this.backColor;
254
+ }
255
+ if (i == 0) {
256
+ _g.beginPath();
257
+ _g.moveTo(this.particles[i].position.x, this.particles[i].position.y);
258
+ _g.lineTo(this.particles[i + 1].position.x, this.particles[i + 1].position.y);
259
+ _g.lineTo((this.particles[i + 1].position.x + p1.x) * 0.5, (this.particles[i + 1].position.y + p1.y) * 0.5);
260
+ _g.closePath();
261
+ _g.stroke();
262
+ _g.fill();
263
+ _g.beginPath();
264
+ _g.moveTo(p1.x, p1.y);
265
+ _g.lineTo(p0.x, p0.y);
266
+ _g.lineTo((this.particles[i + 1].position.x + p1.x) * 0.5, (this.particles[i + 1].position.y + p1.y) * 0.5);
267
+ _g.closePath();
268
+ _g.stroke();
269
+ _g.fill();
270
+ } else if (i == this.particleCount - 2) {
271
+ _g.beginPath();
272
+ _g.moveTo(this.particles[i].position.x, this.particles[i].position.y);
273
+ _g.lineTo(this.particles[i + 1].position.x, this.particles[i + 1].position.y);
274
+ _g.lineTo((this.particles[i].position.x + p0.x) * 0.5, (this.particles[i].position.y + p0.y) * 0.5);
275
+ _g.closePath();
276
+ _g.stroke();
277
+ _g.fill();
278
+ _g.beginPath();
279
+ _g.moveTo(p1.x, p1.y);
280
+ _g.lineTo(p0.x, p0.y);
281
+ _g.lineTo((this.particles[i].position.x + p0.x) * 0.5, (this.particles[i].position.y + p0.y) * 0.5);
282
+ _g.closePath();
283
+ _g.stroke();
284
+ _g.fill();
285
+ } else {
286
+ _g.beginPath();
287
+ _g.moveTo(this.particles[i].position.x, this.particles[i].position.y);
288
+ _g.lineTo(this.particles[i + 1].position.x, this.particles[i + 1].position.y);
289
+ _g.lineTo(p1.x, p1.y);
290
+ _g.lineTo(p0.x, p0.y);
291
+ _g.closePath();
292
+ _g.stroke();
293
+ _g.fill();
294
+ }
295
+ }
296
+ }
297
+ this.Side = function(x1, y1, x2, y2, x3, y3) {
298
+ return ((x1 - x2) * (y3 - y2) - (y1 - y2) * (x3 - x2));
299
+ }
300
+ }
301
+ ConfettiRibbon.bounds = new Vector2(0, 0);
302
+ confetti = {};
303
+ confetti.Context = function(parent) {
304
+ var i = 0;
305
+ var canvasParent = document.getElementById(parent);
306
+ var canvas = document.createElement('canvas');
307
+ canvas.width = canvasParent.offsetWidth;
308
+ canvas.height = canvasParent.offsetHeight;
309
+ canvasParent.appendChild(canvas);
310
+ var context = canvas.getContext('2d');
311
+ var interval = null;
312
+ var confettiRibbonCount = 7;
313
+ var rpCount = 30;
314
+ var rpDist = 8.0;
315
+ var rpThick = 8.0;
316
+ var confettiRibbons = new Array();
317
+ ConfettiRibbon.bounds = new Vector2(canvas.width, canvas.height);
318
+ for (i = 0; i < confettiRibbonCount; i++) {
319
+ confettiRibbons[i] = new ConfettiRibbon(Math.random() * canvas.width, -Math.random() * canvas.height * 2, rpCount, rpDist, rpThick, 100, 1, 0.05);
320
+ }
321
+ var confettiPaperCount = 25;
322
+ var confettiPapers = new Array();
323
+ ConfettiPaper.bounds = new Vector2(canvas.width, canvas.height);
324
+ for (i = 0; i < confettiPaperCount; i++) {
325
+ confettiPapers[i] = new ConfettiPaper(Math.random() * canvas.width, Math.random() * canvas.height);
326
+ }
327
+ this.resize = function() {
328
+ canvas.width = canvasParent.offsetWidth;
329
+ canvas.height = canvasParent.offsetHeight;
330
+ ConfettiPaper.bounds = new Vector2(canvas.width, canvas.height);
331
+ ConfettiRibbon.bounds = new Vector2(canvas.width, canvas.height);
332
+ }
333
+ this.start = function() {
334
+ this.stop()
335
+ var context = this
336
+ this.interval = setInterval(function() {
337
+ confetti.update();
338
+ confetti.write("Discount Applied!");
339
+ }, 1000.0 / frameRate)
340
+ }
341
+ this.stop = function() {
342
+ clearInterval(this.interval);
343
+ }
344
+ this.update = function() {
345
+ var i = 0;
346
+ context.clearRect(0, 0, canvas.width, canvas.height);
347
+ for (i = 0; i < confettiPaperCount; i++) {
348
+ confettiPapers[i].Update(dt);
349
+ confettiPapers[i].Draw(context);
350
+ }
351
+ for (i = 0; i < confettiRibbonCount; i++) {
352
+ confettiRibbons[i].Update(dt);
353
+ confettiRibbons[i].Draw(context);
354
+ }
355
+ }
356
+ this.write = function(message) {
357
+ if (!message) {
358
+ message = "Discount Applied!";
359
+ }
360
+ context.font = "2em Arial";
361
+ context.fillStyle = "black";
362
+ context.textAlign = "center";
363
+ context.fillText(message, canvas.width/2, canvas.height/1.75);
364
+ }
365
+ }
366
+ var confetti = new confetti.Context('confetti--falling');
367
+ confetti.start();
368
+ $(window).resize(function() {
369
+ confetti.resize();
370
+ });
371
+ });
@@ -13,3 +13,10 @@
13
13
  *= require_tree .
14
14
  *= require_self
15
15
  */
16
+
17
+ .confetti--falling {
18
+ height: 100px;
19
+ width: 100%;
20
+ overflow: hidden;
21
+ background: inherit;
22
+ }
@@ -0,0 +1,8 @@
1
+ require 'cell/haml'
2
+
3
+ module Funfetti
4
+ class Cell < ::Cell::ViewModel
5
+ include ::Cell::Haml
6
+ view_paths << "#{Funfetti::Engine.root}/app/cells/"
7
+ end
8
+ end
@@ -0,0 +1 @@
1
+ %div{ class: "confetti--falling", id: "confetti--falling"}
@@ -0,0 +1,11 @@
1
+ module Funfetti
2
+ class ConfettiCell < Funfetti::Cell
3
+ def falling
4
+ render
5
+ end
6
+
7
+ def exploding
8
+ render
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,25 @@
1
+ require "cells"
2
+
3
+ module Confetti
4
+ # Falling Confetti
5
+ def self.falling(attrs = {})
6
+ @attributes = Confetti.attributes(attrs)
7
+ Funfetti::ConfettiCell.(@attributes).(:falling)
8
+ end
9
+
10
+ # Exploding Confetti
11
+ def self.exploding(attrs = {})
12
+ @attributes = Confetti.attributes(attrs)
13
+ Funfetti::ConfettiCell.(@attributes).(:exploding)
14
+ end
15
+
16
+ private
17
+
18
+ def self.attributes(attrs)
19
+ attribute_list = {
20
+ text: attrs[:text] || "Celebrate!",
21
+ classes: attrs[:classes] || "",
22
+ ids: attrs[:ids] || ""
23
+ }
24
+ end
25
+ end
@@ -1,5 +1,5 @@
1
1
  require "funfetti/engine"
2
+ require "confetti"
2
3
 
3
4
  module Funfetti
4
- # Your code goes here...
5
5
  end
@@ -1,5 +1,8 @@
1
1
  module Funfetti
2
2
  class Engine < ::Rails::Engine
3
3
  isolate_namespace Funfetti
4
+
5
+ config.assets.paths << File.expand_path("../../assets/stylesheets/application", __FILE__)
6
+ config.assets.paths << File.expand_path("../../assets/javascripts/application", __FILE__)
4
7
  end
5
8
  end
@@ -1,3 +1,3 @@
1
1
  module Funfetti
2
- VERSION = '0.1.0'
2
+ VERSION = '0.5.0'
3
3
  end
metadata CHANGED
@@ -1,29 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: funfetti
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ElliottAYoung
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-09 00:00:00.000000000 Z
11
+ date: 2017-03-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '4'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '4'
27
+ - !ruby/object:Gem::Dependency
28
+ name: trailblazer-cells
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.0.3
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.0.3
41
+ - !ruby/object:Gem::Dependency
42
+ name: cells-haml
15
43
  requirement: !ruby/object:Gem::Requirement
16
44
  requirements:
17
45
  - - "~>"
18
46
  - !ruby/object:Gem::Version
19
- version: 5.0.1
47
+ version: 0.0.10
20
48
  type: :runtime
21
49
  prerelease: false
22
50
  version_requirements: !ruby/object:Gem::Requirement
23
51
  requirements:
24
52
  - - "~>"
25
53
  - !ruby/object:Gem::Version
26
- version: 5.0.1
54
+ version: 0.0.10
27
55
  - !ruby/object:Gem::Dependency
28
56
  name: sqlite3
29
57
  requirement: !ruby/object:Gem::Requirement
@@ -51,17 +79,14 @@ files:
51
79
  - app/assets/config/funfetti_manifest.js
52
80
  - app/assets/javascripts/funfetti/application.js
53
81
  - app/assets/stylesheets/funfetti/application.css
54
- - app/controllers/funfetti/application_controller.rb
55
- - app/helpers/funfetti/application_helper.rb
56
- - app/jobs/funfetti/application_job.rb
57
- - app/mailers/funfetti/application_mailer.rb
58
- - app/models/funfetti/application_record.rb
59
- - app/views/layouts/funfetti/application.html.erb
60
- - config/routes.rb
82
+ - app/cells/funfetti/cell.rb
83
+ - app/cells/funfetti/confetti/exploding.haml
84
+ - app/cells/funfetti/confetti/falling.haml
85
+ - app/cells/funfetti/confetti_cell.rb
86
+ - lib/confetti.rb
61
87
  - lib/funfetti.rb
62
88
  - lib/funfetti/engine.rb
63
89
  - lib/funfetti/version.rb
64
- - lib/tasks/funfetti_tasks.rake
65
90
  homepage: https://github.com/ElliottAYoung/funfetti
66
91
  licenses:
67
92
  - MIT
@@ -1,5 +0,0 @@
1
- module Funfetti
2
- class ApplicationController < ActionController::Base
3
- protect_from_forgery with: :exception
4
- end
5
- end
@@ -1,4 +0,0 @@
1
- module Funfetti
2
- module ApplicationHelper
3
- end
4
- end
@@ -1,4 +0,0 @@
1
- module Funfetti
2
- class ApplicationJob < ActiveJob::Base
3
- end
4
- end
@@ -1,6 +0,0 @@
1
- module Funfetti
2
- class ApplicationMailer < ActionMailer::Base
3
- default from: 'from@example.com'
4
- layout 'mailer'
5
- end
6
- end
@@ -1,5 +0,0 @@
1
- module Funfetti
2
- class ApplicationRecord < ActiveRecord::Base
3
- self.abstract_class = true
4
- end
5
- end
@@ -1,14 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <title>Funfetti</title>
5
- <%= stylesheet_link_tag "funfetti/application", media: "all" %>
6
- <%= javascript_include_tag "funfetti/application" %>
7
- <%= csrf_meta_tags %>
8
- </head>
9
- <body>
10
-
11
- <%= yield %>
12
-
13
- </body>
14
- </html>
@@ -1,2 +0,0 @@
1
- Funfetti::Engine.routes.draw do
2
- end
@@ -1,4 +0,0 @@
1
- # desc "Explaining what the task does"
2
- # task :funfetti do
3
- # # Task goes here
4
- # end