circular-sliders-rails 0.4.0 → 1.0.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
  SHA256:
3
- metadata.gz: d1565e797eec8a884a00b48a1b5287cb2695898f00b571582179624905f555ca
4
- data.tar.gz: 96899d7bfb7c5530f31daf05a6627699052d22916e5a57c524a8c344ac072cb4
3
+ metadata.gz: aeee7ce2e1d58981f0fb729b0fae34b821b59df97a431c73972882a767d78d44
4
+ data.tar.gz: 94e9467dfc57d7b41ee8568d230cef02669a2a36780ed849ef8c0eb7fae14abe
5
5
  SHA512:
6
- metadata.gz: 01e94406f5fa5dff7d43756200f45c31862b815665afe1cb4c064dcbbfbb0effcb39eeea6907ee5edb8d8f03115cd18b1ade1e194eb46317d056418f8e0cad64
7
- data.tar.gz: 151d1fa86aed10cfdcbcd15b61e5388192567cb211436e48d66049f8efffcf8301307b8cef7be7b00770b932acd57ae42f1def82a685bd26c09e9356c4fc9aa3
6
+ metadata.gz: 1160abc5a35b7964832246e35b713370d76a7d095b54a74663983ee600ec68e6ab23eba64525913c699b2c3162da30c532082732934c7636d4b6af62736a6558
7
+ data.tar.gz: 4030206b719240bd0a677c16bd2bf80a819976836c240d8acf1d37688f53e8360cf1f483619441757fd03673f81428c979bfd5daeee27c508b76e6302ff7e89c
@@ -1,7 +1,7 @@
1
1
  module Circular
2
2
  module Sliders
3
3
  module Rails
4
- VERSION = "0.4.0"
4
+ VERSION = "1.0.0"
5
5
  end
6
6
  end
7
7
  end
@@ -3,12 +3,6 @@
3
3
 
4
4
  // private global variables
5
5
  var isMouseDown = false;
6
- var selectedSlider = {};
7
- var elem = null;
8
- // if multiple canvases / containers would need to refactor
9
- var canvas = null;
10
- var ctx = null;
11
- var sliders = [];
12
6
  var defaults = {
13
7
  name: "Slider",
14
8
  type: "Plain",
@@ -18,7 +12,7 @@
18
12
  step: 10,
19
13
  units: "",
20
14
  priceUnits: "",
21
- radius: 40,
15
+ // centerX, centerY, and radius set in $.fn.sliders()
22
16
  lineWidth: 5,
23
17
  strokeColor: "#D3D3D3",
24
18
  ballColor: "#000000",
@@ -28,29 +22,30 @@
28
22
  }
29
23
 
30
24
  $.fn.sliders = function(slidersOptions) {
31
- elem = this;
32
- // maybe refactor, add .each in case there are multiple selected canvases
33
- canvas = this[0];
34
- ctx = canvas.getContext("2d");
35
- [defaults.centerX, defaults.centerY] = [canvas.width / 2, canvas.height / 2];
36
- // maybe refactor, add container option if there are multiple containers, could allow multiple containers / canvases in the future
37
- for (var i = 0; i < slidersOptions.length; i++) {
38
- defaults.name = "Slider " + (i + 1);
39
- if (i > 0) {
40
- defaults.centerX = sliders[i-1].centerX;
41
- defaults.centerY = sliders[i-1].centerY;
42
- defaults.radius = sliders[i-1].radius + sliders[i-1].lineWidth + defaults.lineWidth;
25
+ this.each(function() {
26
+ var canvas = this;
27
+ canvas.sliders = [];
28
+ // need to set these variables here because they need to be reset after cycling through sliders in each canvas since they are modified when cycling through sliders
29
+ [defaults.centerX, defaults.centerY, defaults.radius] = [canvas.width / 2, canvas.height / 2, 40];
30
+ // maybe refactor, add container option if there are multiple containers, could allow multiple containers / canvases in the future
31
+ for (var i = 0; i < slidersOptions.length; i++) {
32
+ defaults.name = "Slider " + (i + 1);
33
+ if (i > 0) {
34
+ defaults.centerX = canvas.sliders[i-1].centerX;
35
+ defaults.centerY = canvas.sliders[i-1].centerY;
36
+ defaults.radius = canvas.sliders[i-1].radius + canvas.sliders[i-1].lineWidth + defaults.lineWidth;
37
+ }
38
+ var sliderSettings = $.extend( {}, defaults, slidersOptions[i] );
39
+ canvas.sliders.push(new Slider (sliderSettings));
40
+ // maybe refactor, visible if have it like this: elem.attr('data-'+sliders[i].name.split(" ").join("_"), sliders[i].minValue);
41
+ $(canvas).data(canvas.sliders[i].name.split(" ").join("_"), canvas.sliders[i].minValue);
43
42
  }
44
- var sliderSettings = $.extend( {}, defaults, slidersOptions[i] );
45
- sliders.push(new Slider (sliderSettings));
46
- // maybe refactor, visible if have it like this: elem.attr('data-'+sliders[i].name.split(" ").join("_"), sliders[i].minValue);
47
- elem.data(sliders[i].name.split(" ").join("_"), sliders[i].minValue);
48
- }
49
- selectedSlider = sliders[0];
50
- draw();
51
- canvas.addEventListener("mousedown", handleMouseDown);
52
- canvas.addEventListener("mouseup", handleMouseUp);
53
- canvas.addEventListener("mousemove", handleMouseMove);
43
+ canvas.selectedSlider = canvas.sliders[0];
44
+ draw(canvas);
45
+ canvas.addEventListener("mousedown", handleMouseDown);
46
+ canvas.addEventListener("mouseup", handleMouseUp);
47
+ canvas.addEventListener("mousemove", handleMouseMove);
48
+ })
54
49
  }
55
50
 
56
51
  function Slider(settings) {
@@ -85,17 +80,19 @@
85
80
  this.color = sliderSettings.ballColor;
86
81
  }
87
82
 
88
- function draw() {
83
+ function draw(canvas) {
84
+ var ctx = canvas.getContext("2d");
85
+ // in the future want to be able to clear only the slider using, maybe with svg groups
89
86
  ctx.clearRect(0, 0, canvas.width, canvas.height);
90
- for (var i = 0; i < sliders.length; i++) {
91
- drawSlider(sliders[i]);
92
- drawArc(sliders[i]);
93
- drawBall(sliders[i]);
94
- if (sliders[i].legend) { drawText(sliders[i], i); }
87
+ for (var i = 0; i < canvas.sliders.length; i++) {
88
+ drawSlider(ctx, canvas.sliders[i]);
89
+ drawArc(ctx, canvas.sliders[i]);
90
+ drawBall(ctx, canvas.sliders[i]);
91
+ if (canvas.sliders[i].legend) { drawText(ctx, canvas.sliders[i], i); }
95
92
  }
96
93
  }
97
94
 
98
- function drawSlider(slider) {
95
+ function drawSlider(ctx, slider) {
99
96
  ctx.lineWidth = slider.lineWidth;
100
97
  ctx.strokeStyle = slider.strokeColor;
101
98
  var sliderCircumference = 2 * Math.PI * slider.radius;
@@ -174,7 +171,7 @@
174
171
  }
175
172
  }
176
173
 
177
- function drawBall(slider) {
174
+ function drawBall(ctx, slider) {
178
175
  ctx.beginPath();
179
176
  ctx.arc(slider.ball.x, slider.ball.y, slider.ball.radius, 0, Math.PI * 2);
180
177
  ctx.fillStyle = slider.ball.color;
@@ -182,7 +179,7 @@
182
179
  ctx.closePath();
183
180
  }
184
181
 
185
- function drawArc(slider) {
182
+ function drawArc(ctx, slider) {
186
183
  // add this if want arc to stop at edge of ball: var angleOffset = Math.atan(slider.ball.radius / slider.radius), then also need check for (π / 2) + slider.angle) < angleOffset) for when go past the 0˚ mark at top of circle, π / 2 + slider.angle since angle starts at -π / 2 at top of circle
187
184
  ctx.beginPath();
188
185
  ctx.arc(slider.centerX, slider.centerY, slider.radius, -(Math.PI / 2), slider.angle, false);
@@ -194,14 +191,15 @@
194
191
  ctx.closePath();
195
192
  }
196
193
 
197
- function drawText(slider, count) {
194
+ function drawText(ctx, slider, count) {
198
195
  // maybe refactor and make this editable
199
196
  ctx.font = "12px Arial";
200
197
  ctx.fillStyle = slider.textColor;
201
198
  ctx.fillText(slider.name + ": " + slider.priceUnits + slider.value + " " + slider.units, 10, 20 * (count + 1));
202
199
  }
203
200
 
204
- function moveBall(mouseX, mouseY, slider) {
201
+ function moveBall(mouseX, mouseY, canvas) {
202
+ var slider = canvas.selectedSlider;
205
203
  var dx = mouseX - slider.centerX;
206
204
  var dy = mouseY - slider.centerY;
207
205
  slider.angle = Math.atan(dy / dx);
@@ -211,18 +209,19 @@
211
209
  slider.value = slider.minValue + slider.range * ((slider.angle + (Math.PI / 2)) / (2 * Math.PI)); //add π / 2 because 0˚ starts at -π / 2, divide by 2π because this is 360˚ in radians
212
210
  // refactor - bug if give step value below 0.5
213
211
  var roundedValue = roundToStep(slider.value, slider.step);
214
- elem.data(slider.name.split(" ").join("_"), roundedValue);
212
+ $(canvas).data(slider.name.split(" ").join("_"), roundedValue);
215
213
  slider.value = roundedValue;
216
- draw();
214
+ draw(canvas);
217
215
  }
218
216
 
219
217
  function handleMouseDown(e) {
220
218
  e.preventDefault();
221
219
  isMouseDown = true;
222
220
  var [mouseX, mouseY] = setMouse(e);
221
+ var sliders = e.target.sliders; // maybe refactor, don't like having multiple calls to e.target.sliders
223
222
  for (var i = 0; i < sliders.length; i++) {
224
223
  if (onBall(mouseX, mouseY, sliders[i])) {
225
- selectedSlider = sliders[i];
224
+ e.target.selectedSlider = sliders[i];
226
225
  }
227
226
  }
228
227
  }
@@ -238,7 +237,7 @@
238
237
  }
239
238
  e.preventDefault();
240
239
  var [mouseX, mouseY] = setMouse(e);
241
- moveBall(mouseX, mouseY, selectedSlider);
240
+ moveBall(mouseX, mouseY, e.target);
242
241
  }
243
242
 
244
243
  function roundToStep(value, step) {
@@ -254,6 +253,7 @@
254
253
 
255
254
  function setMouse(e) {
256
255
  // $(window).scrollLeft() and $(window).scrollTop() to account for page scrolling
256
+ var canvas = e.target;
257
257
  return [parseInt(e.clientX - canvas.offsetLeft + $(window).scrollLeft()), parseInt(e.clientY - canvas.offsetTop + $(window).scrollTop())];
258
258
  }
259
259
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: circular-sliders-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sebastian Peterlin
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-07-14 00:00:00.000000000 Z
11
+ date: 2018-07-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler