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 +4 -4
- data/app/assets/javascripts/funfetti/application.js +358 -0
- data/app/assets/stylesheets/funfetti/application.css +7 -0
- data/app/cells/funfetti/cell.rb +8 -0
- data/app/cells/funfetti/confetti/exploding.haml +0 -0
- data/app/cells/funfetti/confetti/falling.haml +1 -0
- data/app/cells/funfetti/confetti_cell.rb +11 -0
- data/lib/confetti.rb +25 -0
- data/lib/funfetti.rb +1 -1
- data/lib/funfetti/engine.rb +3 -0
- data/lib/funfetti/version.rb +1 -1
- metadata +37 -12
- data/app/controllers/funfetti/application_controller.rb +0 -5
- data/app/helpers/funfetti/application_helper.rb +0 -4
- data/app/jobs/funfetti/application_job.rb +0 -4
- data/app/mailers/funfetti/application_mailer.rb +0 -6
- data/app/models/funfetti/application_record.rb +0 -5
- data/app/views/layouts/funfetti/application.html.erb +0 -14
- data/config/routes.rb +0 -2
- data/lib/tasks/funfetti_tasks.rake +0 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7c5acae9a5ea663286894a0a0800d9780c2f39ea
|
4
|
+
data.tar.gz: b2568bec024a1d866e8e618044e0f8450daa6326
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
+
});
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
%div{ class: "confetti--falling", id: "confetti--falling"}
|
data/lib/confetti.rb
ADDED
@@ -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
|
data/lib/funfetti.rb
CHANGED
data/lib/funfetti/engine.rb
CHANGED
@@ -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
|
data/lib/funfetti/version.rb
CHANGED
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.
|
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-
|
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:
|
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:
|
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/
|
55
|
-
- app/
|
56
|
-
- app/
|
57
|
-
- app/
|
58
|
-
-
|
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,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>
|
data/config/routes.rb
DELETED