circular-sliders-rails 0.4.0 → 1.0.0

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.
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