ajax_canvas_field 0.0.1 → 0.0.2
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 +4 -4
- data/README.md +66 -54
- data/app/assets/javascripts/ajax_canvas_field.js +9 -3
- data/app/assets/stylesheets/ajax_canvas_field.css +3 -3
- data/app/helpers/canvas_field_helper.rb +18 -12
- data/app/views/ajax_canvas_field/_canvas_legend.html.haml +13 -3
- data/lib/ajax_canvas_field/rails/version.rb +1 -1
- metadata +2 -10
- data/assets/images/mouse_left.png +0 -0
- data/assets/images/mouse_middle.png +0 -0
- data/assets/images/mouse_right.png +0 -0
- data/assets/javascripts/ajax_canvas_field.js +0 -192
- data/assets/javascripts/ro_canvas_field.js +0 -42
- data/assets/stylesheets/ajax_canvas_field.css +0 -24
- data/helpers/canvas_field_helper.rb +0 -67
- data/views/ajax_canvas_field/_canvas_legend.html.haml +0 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4522031a4b3b1403d3699fd0601d7fd45284a1bb
|
4
|
+
data.tar.gz: a8ab6ee6b1d44e000f3534dafbe8d0f70e500589
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e78fe914a40afafc47e9dd55ae2469466c0ee649609a0060565a59fe00444f71a80f0c82d6c8108560a192f751128d5a2f1b662bd943bf6bae37a53dfbdf1b12
|
7
|
+
data.tar.gz: 21c9a9c8d7d0c184f576a835de18dccfdab90138d3f29fe1ebfca3fcffe450f73b44ae97b24cfc9421baaf46cc94dce855965c95154e30623a3928f5beb9a015
|
data/README.md
CHANGED
@@ -10,73 +10,85 @@ gem 'ajax_canvas_field'
|
|
10
10
|
```
|
11
11
|
|
12
12
|
And then execute:
|
13
|
+
```shell
|
14
|
+
$ bundle
|
15
|
+
```
|
16
|
+
Or install it yourself as:
|
17
|
+
```shell
|
18
|
+
$ gem install ajax_canvas_field
|
19
|
+
```
|
13
20
|
|
14
|
-
|
21
|
+
##### After bundle
|
22
|
+
```shell
|
23
|
+
$ rails g ajax_canvas_field
|
24
|
+
```
|
25
|
+
This add the following:
|
26
|
+
* `initializers/ajax_canvas_field.rb`
|
27
|
+
```ruby
|
28
|
+
AjaxCanvasField.configure(default_height: 400,
|
29
|
+
default_width: 400,
|
30
|
+
default_left_color: '#ff0000',
|
31
|
+
default_middle_color: '#00ff00',
|
32
|
+
default_right_color: '#0000ff')
|
33
|
+
```
|
15
34
|
|
16
|
-
|
35
|
+
* `assets/javascripts/application.js`
|
36
|
+
```js
|
37
|
+
//= require ajax_canvas_field
|
38
|
+
```
|
17
39
|
|
18
|
-
|
40
|
+
* `assets/stylesheets/application.scss`
|
41
|
+
`assets/stylesheets/application.scss.erb`
|
42
|
+
`assets/stylesheets/application.css.scss`
|
43
|
+
```sass
|
44
|
+
*= require ajax_canvas_field
|
45
|
+
```
|
19
46
|
|
20
47
|
## Usage
|
21
|
-
|
48
|
+
This Gem provides you with some View-Helper for Rails
|
22
49
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
...
|
50
|
+
1. `canvas_field`
|
51
|
+
Provides the main canvas_field with id: #canvas_field
|
52
|
+
```ruby
|
53
|
+
# options
|
54
|
+
:namespace # URL Namespace for ajax-POST e.g. 'api/v1'
|
55
|
+
:controller # URL Controller for ajax-POST e.g. 'canvas_fields'
|
56
|
+
:background_url # File-Path for background image
|
31
57
|
```
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
After everything is filled out it will merge the data back into your File.
|
43
|
-
|
44
|
-
#### Script 2: Recent
|
45
|
-
```bash
|
46
|
-
rake lit:recent
|
47
|
-
```
|
48
|
-
REQUIRED: Connection to Git
|
49
|
-
This script will ask you for the missing value.
|
50
|
-
It will find everything you changed in your master-file since you last pushed commit.
|
51
|
-
After everything is filled out it will merge the data back into your File.
|
52
|
-
|
53
|
-
#### Script 3: Cleanup (Deletes something!)
|
54
|
-
```bash
|
55
|
-
rake lit:cleanup
|
56
|
-
```
|
57
|
-
This script will find every key/value inside your slave-file that isn´t present in your master-file.
|
58
|
-
And it will be deleted!!!!
|
59
|
-
|
60
|
-
#### Sometimes the Rake tasks aren't working
|
61
|
-
In this case you can use the Rails-Console and the Class -LostInTranslation-.
|
62
|
-
|
63
|
-
```bash
|
64
|
-
rails c
|
58
|
+
|
59
|
+
1. `canvas_data_field(active)`
|
60
|
+
Provides a data-Field for different datasets
|
61
|
+
```ruby
|
62
|
+
# args
|
63
|
+
:active (bool) # Is this the active data field?
|
64
|
+
# options
|
65
|
+
:additional_data # Additional Data to provide to the AJAX-POST
|
66
|
+
:initial_data # The Initial-Data that is loaded
|
67
|
+
:content # Symbol that appears in the Dot
|
65
68
|
```
|
69
|
+
1. `canvas_legend_field`
|
70
|
+
Renders a Legend Table for the Field
|
71
|
+
```ruby
|
72
|
+
# options
|
73
|
+
:left_text # Text for left Click
|
74
|
+
:middle_text # Text for middle Click
|
75
|
+
:right_text # Text for right Click
|
76
|
+
:left_color # Color for left Click e.g. '#ffff00'
|
77
|
+
:middle_color # Color for middle Click e.g. '#ffff00'
|
78
|
+
:right_color # Color for right Click e.g. '#ffff00'
|
79
|
+
:no_icon # Hide Mouse-Icon-Row
|
80
|
+
:no_header # Hide Header
|
66
81
|
```
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
82
|
+
1. `ro_canvas_field`
|
83
|
+
Provides readonly canvas_fields with class: .canvas_field, for showing the results of all datasets on one Page
|
84
|
+
```ruby
|
85
|
+
# options
|
86
|
+
:background_url # File-Path for background image
|
72
87
|
```
|
73
88
|
|
74
|
-
#### Yet to come
|
75
|
-
I am planning on an integration of Translation APIs.
|
76
|
-
|
77
89
|
## Contributing
|
78
90
|
|
79
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/datyv/
|
91
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/datyv/ajax_canvas_field. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
80
92
|
|
81
93
|
|
82
94
|
## License
|
@@ -166,9 +166,15 @@ document.addEventListener('DOMContentLoaded', function(){
|
|
166
166
|
document.getElementsByClassName('active canvas_data_field')[0].dataset.initialData = JSON.stringify(tmpData);
|
167
167
|
}
|
168
168
|
|
169
|
-
canvas.
|
170
|
-
|
171
|
-
|
169
|
+
if (canvas.dataset.leftActive) {
|
170
|
+
canvas.addEventListener('click', isPixelCollision, false);
|
171
|
+
}
|
172
|
+
if (canvas.dataset.middleActive) {
|
173
|
+
canvas.addEventListener('auxclick', isPixelCollision, false);
|
174
|
+
}
|
175
|
+
if (canvas.dataset.rightActive) {
|
176
|
+
canvas.addEventListener('contextmenu', isPixelCollision, false);
|
177
|
+
}
|
172
178
|
initCircles();
|
173
179
|
|
174
180
|
var tableRows = document.getElementsByClassName('request_row');
|
@@ -18,7 +18,7 @@
|
|
18
18
|
}
|
19
19
|
|
20
20
|
tr.active {
|
21
|
-
-webkit-box-shadow: 0px 0px
|
22
|
-
-moz-box-shadow: 0px 0px
|
23
|
-
box-shadow: 0px 0px
|
21
|
+
-webkit-box-shadow: 0px 0px 46px -2px #ff0000 inset;
|
22
|
+
-moz-box-shadow: 0px 0px 46px -2px #ff0000 inset;
|
23
|
+
box-shadow: 0px 0px 46px -2px #ff0000 inset;
|
24
24
|
}
|
@@ -22,25 +22,28 @@ module CanvasFieldHelper
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def canvas_legend_field(options = {})
|
25
|
-
locals = {
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
no_icon: options[:no_icon] || false,
|
33
|
-
no_header: options[:no_header] || false
|
34
|
-
}
|
25
|
+
locals = { no_icon: (options[:no_icon] || false), no_header: (options[:no_header] || false) }
|
26
|
+
%w[left middle right].each do |side|
|
27
|
+
locals["#{side}_text".to_sym] = options["#{side}_text"] || ''
|
28
|
+
locals["#{side}_initial".to_sym] = options["#{side}_initial"] || ''
|
29
|
+
locals["#{side}_color".to_sym] = options["#{side}_color"] || '#ff0000'
|
30
|
+
locals["#{side}_active".to_sym] = options["#{side}_active"] || false
|
31
|
+
end
|
35
32
|
render partial: 'ajax_canvas_field/canvas_legend', locals: locals
|
36
33
|
end
|
37
34
|
|
38
35
|
def ro_canvas_field(options = {})
|
36
|
+
data = collect_ro_data(options)
|
39
37
|
background_url = options[:background_url].blank? ? '' : "url(#{options[:background_url]})"
|
40
38
|
background = "background: #fff #{background_url} no-repeat center top"
|
39
|
+
if options[:half_size]
|
40
|
+
data[:width] = data[:width] / 2
|
41
|
+
data[:height] = data[:height] / 2
|
42
|
+
background += "; background_size: #{data[:width]}px #{data[:height]}px"
|
43
|
+
end
|
41
44
|
failure_message = 'Your browser does not support the canvas element.'
|
42
45
|
|
43
|
-
content_tag :canvas, failure_message, data:
|
46
|
+
content_tag :canvas, failure_message, data: data, style: background, class: 'canvas_field'
|
44
47
|
end
|
45
48
|
|
46
49
|
private
|
@@ -53,7 +56,10 @@ module CanvasFieldHelper
|
|
53
56
|
height: options[:height] || AjaxCanvasField.config[:default_height],
|
54
57
|
left_color: options[:left_color] || '#ff0000',
|
55
58
|
middle_color: options[:middle_color] || '#00ff00',
|
56
|
-
right_color: options[:right_color] || '#0000ff'
|
59
|
+
right_color: options[:right_color] || '#0000ff',
|
60
|
+
left_active: options[:left_active] || false,
|
61
|
+
middle_active: options[:middle_active] || false,
|
62
|
+
right_active: options[:right_active] || false }
|
57
63
|
end
|
58
64
|
|
59
65
|
def collect_ro_data(options)
|
@@ -12,9 +12,19 @@
|
|
12
12
|
%td.canvas_legend_sub= image_tag('mouse_middle.png', size: '50x50')
|
13
13
|
%td.canvas_legend_sub= image_tag('mouse_right.png', size: '50x50')
|
14
14
|
%tr
|
15
|
-
%td.canvas_legend_sub
|
16
|
-
|
17
|
-
|
15
|
+
%td.canvas_legend_sub
|
16
|
+
= left_text
|
17
|
+
= " (#{left_initial})" unless left_initial.blank?
|
18
|
+
%td.canvas_legend_sub
|
19
|
+
= middle_text
|
20
|
+
= " (#{middle_initial})" unless middle_initial.blank?
|
21
|
+
%td.canvas_legend_sub
|
22
|
+
= right_text
|
23
|
+
= " (#{right_initial})" unless right_initial.blank?
|
24
|
+
%tr
|
25
|
+
%td.canvas_legend_sub= left_active ? 'Aktiviert' : 'Deaktiviert'
|
26
|
+
%td.canvas_legend_sub= middle_active ? 'Aktiviert' : 'Deaktiviert'
|
27
|
+
%td.canvas_legend_sub= right_active ? 'Aktiviert' : 'Deaktiviert'
|
18
28
|
%tr
|
19
29
|
%td.canvas_legend_sub{ style: "background-color: #{left_color}" }
|
20
30
|
%td.canvas_legend_sub{ style: "background-color: #{middle_color}" }
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ajax_canvas_field
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- datyv
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-10-
|
11
|
+
date: 2017-10-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -57,13 +57,6 @@ files:
|
|
57
57
|
- app/assets/stylesheets/ajax_canvas_field.css
|
58
58
|
- app/helpers/canvas_field_helper.rb
|
59
59
|
- app/views/ajax_canvas_field/_canvas_legend.html.haml
|
60
|
-
- assets/images/mouse_left.png
|
61
|
-
- assets/images/mouse_middle.png
|
62
|
-
- assets/images/mouse_right.png
|
63
|
-
- assets/javascripts/ajax_canvas_field.js
|
64
|
-
- assets/javascripts/ro_canvas_field.js
|
65
|
-
- assets/stylesheets/ajax_canvas_field.css
|
66
|
-
- helpers/canvas_field_helper.rb
|
67
60
|
- lib/ajax_canvas_field.rb
|
68
61
|
- lib/ajax_canvas_field/config.rb
|
69
62
|
- lib/ajax_canvas_field/rails.rb
|
@@ -71,7 +64,6 @@ files:
|
|
71
64
|
- lib/ajax_canvas_field/rails/version.rb
|
72
65
|
- lib/generators/ajax_canvas_field/ajax_canvas_field_generator.rb
|
73
66
|
- lib/generators/ajax_canvas_field/templates/initializer.rb
|
74
|
-
- views/ajax_canvas_field/_canvas_legend.html.haml
|
75
67
|
homepage: https://github.com/Datyv/ajax_canvas_field
|
76
68
|
licenses:
|
77
69
|
- MIT
|
Binary file
|
Binary file
|
Binary file
|
@@ -1,192 +0,0 @@
|
|
1
|
-
document.addEventListener('DOMContentLoaded', function(){
|
2
|
-
var canvas = document.getElementById('canvas_field');
|
3
|
-
var data_fields = document.getElementsByClassName('canvas_data_field');
|
4
|
-
if (canvas) {
|
5
|
-
if (data_fields.length == 0) {
|
6
|
-
console.log('No Data Field found. Please add canvas_data_field in your code!');
|
7
|
-
document.getElementsByClassName('canvas_table')[0].style.display = 'none';
|
8
|
-
canvas.style.display = 'none';
|
9
|
-
} else {
|
10
|
-
canvas.width = canvas.dataset.width;
|
11
|
-
canvas.height = canvas.dataset.height;
|
12
|
-
var context = canvas.getContext('2d'),
|
13
|
-
url = canvas.dataset.url,
|
14
|
-
param = canvas.dataset.strongParam,
|
15
|
-
token = canvas.dataset.token,
|
16
|
-
points = [];
|
17
|
-
|
18
|
-
function refreshAll(e) {
|
19
|
-
points = [];
|
20
|
-
initCircles();
|
21
|
-
}
|
22
|
-
|
23
|
-
function initCircles() {
|
24
|
-
var data_field = document.getElementsByClassName('active canvas_data_field')[0].dataset;
|
25
|
-
var initialData = JSON.parse(data_field.initialData);
|
26
|
-
for (i = 0; i < initialData.length; i++) {
|
27
|
-
var point = buildCircle(initialData[i][1], initialData[i][2], initialData[i][3]);
|
28
|
-
point.database_id = initialData[i][0];
|
29
|
-
points.push(point);
|
30
|
-
}
|
31
|
-
redrawAllCircles();
|
32
|
-
}
|
33
|
-
|
34
|
-
function isPixelCollision(e) {
|
35
|
-
e.preventDefault();
|
36
|
-
|
37
|
-
if (e.type == "contextmenu") return;
|
38
|
-
|
39
|
-
var r = canvas.getBoundingClientRect(),
|
40
|
-
x = e.clientX - r.left,
|
41
|
-
y = e.clientY - r.top,
|
42
|
-
removed = false,
|
43
|
-
i;
|
44
|
-
|
45
|
-
for (i = points.length - 1; i >= 0; --i) {
|
46
|
-
if (context.isPointInPath(points[i], x, y, 'nonzero')) {
|
47
|
-
deleteAjax(i);
|
48
|
-
removed = true;
|
49
|
-
}
|
50
|
-
}
|
51
|
-
|
52
|
-
if (removed == false) {
|
53
|
-
createAjax(x, y, e);
|
54
|
-
}
|
55
|
-
}
|
56
|
-
|
57
|
-
function buildCircle(x, y, e) {
|
58
|
-
var c = new Path2D(),
|
59
|
-
offset = 3.5;
|
60
|
-
|
61
|
-
c.arc(x - offset, y - offset, 7, 0, Math.PI * 2);
|
62
|
-
c.color = (typeof e === 'string') ? e : chooseColor(e)
|
63
|
-
c.x = x;
|
64
|
-
c.y = y;
|
65
|
-
return c;
|
66
|
-
}
|
67
|
-
|
68
|
-
function chooseColor(e) {
|
69
|
-
if (e === null) return '#ff0000';
|
70
|
-
switch (e.which) {
|
71
|
-
case 1:
|
72
|
-
return canvas.dataset.leftColor;
|
73
|
-
case 2:
|
74
|
-
return canvas.dataset.middleColor;
|
75
|
-
case 3:
|
76
|
-
return canvas.dataset.rightColor;
|
77
|
-
}
|
78
|
-
}
|
79
|
-
|
80
|
-
function chooseButton(e) {
|
81
|
-
if (e === null) return null;
|
82
|
-
switch (e.which) {
|
83
|
-
case 1:
|
84
|
-
return 'left';
|
85
|
-
case 2:
|
86
|
-
return 'middle';
|
87
|
-
case 3:
|
88
|
-
return 'right';
|
89
|
-
}
|
90
|
-
}
|
91
|
-
|
92
|
-
function deleteAjax(i) {
|
93
|
-
var id = points[i].database_id;
|
94
|
-
$.ajax({
|
95
|
-
type: 'DELETE',
|
96
|
-
url: url + '/' + id,
|
97
|
-
headers: {
|
98
|
-
'Authorization': 'Token token=' + token
|
99
|
-
},
|
100
|
-
dataType: "json",
|
101
|
-
success: function(data) {
|
102
|
-
removeCircle(i, data);
|
103
|
-
},
|
104
|
-
error: function(data) {
|
105
|
-
alert('No connection to Server');
|
106
|
-
}
|
107
|
-
});
|
108
|
-
}
|
109
|
-
|
110
|
-
function removeCircle(i, data) {
|
111
|
-
points.splice(i, 1);
|
112
|
-
redrawAllCircles();
|
113
|
-
}
|
114
|
-
|
115
|
-
function createAjax(x, y, e) {
|
116
|
-
post_data = collectPostData(x, y, e);
|
117
|
-
$.ajax({
|
118
|
-
type: 'POST',
|
119
|
-
url: url,
|
120
|
-
headers: {
|
121
|
-
'Authorization': 'Token token=' + token
|
122
|
-
},
|
123
|
-
data: post_data,
|
124
|
-
dataType: "json",
|
125
|
-
success: function(data) {
|
126
|
-
addCircle(x, y, data, e);
|
127
|
-
},
|
128
|
-
error: function(data) {
|
129
|
-
alert('No connection to Server');
|
130
|
-
}
|
131
|
-
});
|
132
|
-
}
|
133
|
-
|
134
|
-
function collectPostData(x, y, e) {
|
135
|
-
var params = {};
|
136
|
-
var data_field = document.getElementsByClassName('active canvas_data_field')[0].dataset;
|
137
|
-
var additionalData = JSON.parse(data_field.additionalData);
|
138
|
-
params[param] = {
|
139
|
-
x_value: x,
|
140
|
-
y_value: y,
|
141
|
-
button: chooseButton(e)
|
142
|
-
};
|
143
|
-
for (var attrname in additionalData) {
|
144
|
-
params[param][attrname] = additionalData[attrname];
|
145
|
-
}
|
146
|
-
return params;
|
147
|
-
}
|
148
|
-
|
149
|
-
function addCircle(x, y, data, e) {
|
150
|
-
new_point = buildCircle(x, y, e);
|
151
|
-
new_point['database_id'] = data.id;
|
152
|
-
points.push(new_point);
|
153
|
-
redrawAllCircles();
|
154
|
-
}
|
155
|
-
|
156
|
-
function redrawAllCircles() {
|
157
|
-
var tmpData = [];
|
158
|
-
context.clearRect(0, 0, canvas.width, canvas.height);
|
159
|
-
for (i = 0; i < points.length; i++) {
|
160
|
-
context.fillStyle = points[i].color;
|
161
|
-
context.fill(points[i], 'nonzero');
|
162
|
-
context.stroke(points[i], 'nonzero');
|
163
|
-
|
164
|
-
tmpData.push([points[i].database_id, points[i].x, points[i].y, points[i].color]);
|
165
|
-
}
|
166
|
-
document.getElementsByClassName('active canvas_data_field')[0].dataset.initialData = JSON.stringify(tmpData);
|
167
|
-
}
|
168
|
-
|
169
|
-
canvas.addEventListener('click', isPixelCollision, false);
|
170
|
-
canvas.addEventListener('auxclick', isPixelCollision, false);
|
171
|
-
canvas.addEventListener('contextmenu', isPixelCollision, false);
|
172
|
-
initCircles();
|
173
|
-
|
174
|
-
var tableRows = document.getElementsByClassName('request_row');
|
175
|
-
var markRequestRow = function() {
|
176
|
-
for (var i = 0; i < tableRows.length; i++) {
|
177
|
-
tableRows[i].classList.remove('active');
|
178
|
-
}
|
179
|
-
for (var i = 0; i < data_fields.length; i++) {
|
180
|
-
data_fields[i].classList.remove('active');
|
181
|
-
}
|
182
|
-
this.classList.add('active');
|
183
|
-
this.getElementsByClassName('canvas_data_field')[0].classList.add('active');
|
184
|
-
refreshAll();
|
185
|
-
};
|
186
|
-
|
187
|
-
for (var i = 0; i < tableRows.length; i++) {
|
188
|
-
tableRows[i].addEventListener('click', markRequestRow, false);
|
189
|
-
}
|
190
|
-
}
|
191
|
-
}
|
192
|
-
}, false);
|
@@ -1,42 +0,0 @@
|
|
1
|
-
var canvases = document.getElementsByClassName('canvas_field');
|
2
|
-
if (canvases) {
|
3
|
-
for (o = 0; o < canvases.length; o++) {
|
4
|
-
var canvas = canvases[o];
|
5
|
-
canvas.width = canvas.dataset.width;
|
6
|
-
canvas.height = canvas.dataset.height;
|
7
|
-
var context = canvas.getContext('2d');
|
8
|
-
var points = [];
|
9
|
-
|
10
|
-
function initCircles() {
|
11
|
-
var initialData = JSON.parse(canvas.dataset.initialData);
|
12
|
-
for (i = 0; i < initialData.length; i++) {
|
13
|
-
var point = buildCircle(initialData[i][1], initialData[i][2], initialData[i][3]);
|
14
|
-
point.database_id = initialData[i][0];
|
15
|
-
points.push(point);
|
16
|
-
}
|
17
|
-
redrawAllCircles();
|
18
|
-
}
|
19
|
-
|
20
|
-
function buildCircle(x, y, e) {
|
21
|
-
var c = new Path2D(),
|
22
|
-
offset = 3.5;
|
23
|
-
|
24
|
-
c.arc(x - offset, y - offset, 7, 0, Math.PI * 2);
|
25
|
-
c.color = (typeof e === 'string') ? e : '#ff0000'
|
26
|
-
c.x = x;
|
27
|
-
c.y = y;
|
28
|
-
return c;
|
29
|
-
}
|
30
|
-
|
31
|
-
function redrawAllCircles() {
|
32
|
-
context.clearRect(0, 0, canvas.width, canvas.height);
|
33
|
-
for (i = 0; i < points.length; i++) {
|
34
|
-
context.fillStyle = points[i].color;
|
35
|
-
context.fill(points[i], 'nonzero');
|
36
|
-
context.stroke(points[i], 'nonzero');
|
37
|
-
}
|
38
|
-
}
|
39
|
-
|
40
|
-
initCircles();
|
41
|
-
}
|
42
|
-
}
|
@@ -1,24 +0,0 @@
|
|
1
|
-
#canvas_field {
|
2
|
-
border: 1px groove lightgrey;
|
3
|
-
}
|
4
|
-
|
5
|
-
.canvas_field {
|
6
|
-
border: 1px groove lightgrey;
|
7
|
-
}
|
8
|
-
|
9
|
-
.canvas_data_field {
|
10
|
-
display: none;
|
11
|
-
}
|
12
|
-
|
13
|
-
.canvas_legend_sub {
|
14
|
-
height: 30px;
|
15
|
-
font-weight: 600;
|
16
|
-
padding-top: 9px;
|
17
|
-
text-align: center;
|
18
|
-
}
|
19
|
-
|
20
|
-
tr.active {
|
21
|
-
-webkit-box-shadow: 0px 0px 25px -2px #967474 inset;
|
22
|
-
-moz-box-shadow: 0px 0px 25px -2px #967474 inset;
|
23
|
-
box-shadow: 0px 0px 25px -2px #967474 inset;
|
24
|
-
}
|
@@ -1,67 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module CanvasFieldHelper
|
4
|
-
def canvas_field(options = {})
|
5
|
-
url = '/'
|
6
|
-
url += options[:namespace].to_s + '/' if options[:namespace]
|
7
|
-
url += options[:controller] || 'canvas_fields'
|
8
|
-
|
9
|
-
background_url = options[:background_url].blank? ? '' : "url(#{options[:background_url]})"
|
10
|
-
background = "background: #fff #{background_url} no-repeat center top"
|
11
|
-
failure_message = 'Your browser does not support the canvas element.'
|
12
|
-
|
13
|
-
content_tag :canvas, failure_message, id: :canvas_field, data: collect_data(url, options), style: background
|
14
|
-
end
|
15
|
-
|
16
|
-
def canvas_data_field(active = false, options = {})
|
17
|
-
klass = active ? 'active' : ''
|
18
|
-
data = { additional_data: options[:additional_data].to_json,
|
19
|
-
initial_data: options[:initial_data].to_json,
|
20
|
-
content: options[:content] || '' }
|
21
|
-
content_tag(:span, '', class: "#{klass} canvas_data_field", data: data)
|
22
|
-
end
|
23
|
-
|
24
|
-
def canvas_legend_field(options = {})
|
25
|
-
locals = {
|
26
|
-
left_text: options[:left_text] || '',
|
27
|
-
middle_text: options[:middle_text] || '',
|
28
|
-
right_text: options[:right_text] || '',
|
29
|
-
left_color: options[:left_color] || '#ff0000',
|
30
|
-
middle_color: options[:middle_color] || '#00ff00',
|
31
|
-
right_color: options[:right_color] || '#0000ff',
|
32
|
-
no_icon: options[:no_icon] || false,
|
33
|
-
no_header: options[:no_header] || false
|
34
|
-
}
|
35
|
-
render partial: 'ajax_canvas_field/canvas_legend', locals: locals
|
36
|
-
end
|
37
|
-
|
38
|
-
def ro_canvas_field(options = {})
|
39
|
-
background_url = options[:background_url].blank? ? '' : "url(#{options[:background_url]})"
|
40
|
-
background = "background: #fff #{background_url} no-repeat center top"
|
41
|
-
failure_message = 'Your browser does not support the canvas element.'
|
42
|
-
|
43
|
-
content_tag :canvas, failure_message, data: collect_ro_data(options), style: background, class: 'canvas_field'
|
44
|
-
end
|
45
|
-
|
46
|
-
private
|
47
|
-
|
48
|
-
def collect_data(url, options)
|
49
|
-
{ url: url,
|
50
|
-
strong_param: options[:param] || options[:controller]&.singularize || 'canvas_field',
|
51
|
-
token: options[:token],
|
52
|
-
width: options[:width] || AjaxCanvasField.config[:default_width],
|
53
|
-
height: options[:height] || AjaxCanvasField.config[:default_height],
|
54
|
-
left_color: options[:left_color] || '#ff0000',
|
55
|
-
middle_color: options[:middle_color] || '#00ff00',
|
56
|
-
right_color: options[:right_color] || '#0000ff' }
|
57
|
-
end
|
58
|
-
|
59
|
-
def collect_ro_data(options)
|
60
|
-
{ width: options[:width] || AjaxCanvasField.config[:default_width],
|
61
|
-
height: options[:height] || AjaxCanvasField.config[:default_height],
|
62
|
-
left_color: options[:left_color] || '#ff0000',
|
63
|
-
middle_color: options[:middle_color] || '#00ff00',
|
64
|
-
right_color: options[:right_color] || '#0000ff',
|
65
|
-
initial_data: options[:initial_data].to_json }
|
66
|
-
end
|
67
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
%table
|
2
|
-
- unless no_header
|
3
|
-
%thead
|
4
|
-
%tr
|
5
|
-
%th.canvas_legend_sub Linke Maustaste
|
6
|
-
%th.canvas_legend_sub Mittlere Maustaste
|
7
|
-
%th.canvas_legend_sub Rechte Maustaste
|
8
|
-
%tbody
|
9
|
-
- unless no_icon
|
10
|
-
%tr
|
11
|
-
%td.canvas_legend_sub= image_tag('mouse_left.png', size: '50x50')
|
12
|
-
%td.canvas_legend_sub= image_tag('mouse_middle.png', size: '50x50')
|
13
|
-
%td.canvas_legend_sub= image_tag('mouse_right.png', size: '50x50')
|
14
|
-
%tr
|
15
|
-
%td.canvas_legend_sub= left_text
|
16
|
-
%td.canvas_legend_sub= middle_text
|
17
|
-
%td.canvas_legend_sub= right_text
|
18
|
-
%tr
|
19
|
-
%td.canvas_legend_sub{ style: "background-color: #{left_color}" }
|
20
|
-
%td.canvas_legend_sub{ style: "background-color: #{middle_color}" }
|
21
|
-
%td.canvas_legend_sub{ style: "background-color: #{right_color}" }
|