hyper-vis 1.0.0.lap34 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +154 -23
- data/hyper-vis.gemspec +5 -5
- data/lib/hyper-vis.rb +7 -0
- data/lib/hyperloop/vis/graph2d/component.rb +16 -0
- data/lib/hyperloop/vis/graph2d/mixin.rb +89 -0
- data/lib/hyperloop/vis/graph3d/component.rb +15 -0
- data/lib/hyperloop/vis/graph3d/mixin.rb +79 -0
- data/lib/hyperloop/vis/network/mixin.rb +1 -1
- data/lib/hyperloop/vis/timeline/component.rb +16 -0
- data/lib/hyperloop/vis/timeline/mixin.rb +89 -0
- data/lib/hyperloop/vis/version.rb +1 -1
- data/lib/vis.rb +4 -1
- data/lib/vis/data_common.rb +46 -0
- data/lib/vis/data_set.rb +6 -1
- data/lib/vis/graph2d.rb +145 -0
- data/lib/vis/graph3d.rb +135 -0
- data/lib/vis/network.rb +187 -8
- data/lib/vis/railtie.rb +7 -0
- data/lib/vis/timeline.rb +338 -0
- data/lib/vis/utilities.rb +7 -199
- data/spec/test_app/Gemfile +2 -4
- data/spec/test_app/app/assets/stylesheets/application.css +2 -1
- data/spec/test_app/db/schema.rb +28 -0
- data/spec/vis_graph2d_component_spec.rb +89 -0
- data/spec/vis_graph2d_spec.rb +304 -0
- data/spec/vis_graph3d_component_spec.rb +124 -0
- data/spec/vis_graph3d_spec.rb +247 -0
- data/spec/vis_timeline_component_spec.rb +89 -0
- data/spec/vis_timeline_spec.rb +425 -0
- metadata +37 -13
data/lib/vis/utilities.rb
CHANGED
@@ -16,6 +16,10 @@ module Vis
|
|
16
16
|
@native.JS.call(js_name, options_to_native(options))
|
17
17
|
end
|
18
18
|
end
|
19
|
+
|
20
|
+
def test_container
|
21
|
+
`document.body.appendChild(document.createElement('div'))`
|
22
|
+
end
|
19
23
|
end
|
20
24
|
|
21
25
|
def hash_array_to_native(array)
|
@@ -33,208 +37,12 @@ module Vis
|
|
33
37
|
end
|
34
38
|
|
35
39
|
def lower_camelize_hash(hash)
|
36
|
-
|
40
|
+
camel_hash = {}
|
37
41
|
hash.each do |key, value|
|
38
42
|
value = lower_camelize_hash(value) if `Opal.is_a(value, Opal.Hash)`
|
39
|
-
|
40
|
-
end
|
41
|
-
camel_options
|
42
|
-
end
|
43
|
-
|
44
|
-
def options_to_native(options)
|
45
|
-
return unless options
|
46
|
-
# options must be duplicated, so callbacks dont get wrapped twice
|
47
|
-
new_opts = {}.merge!(options)
|
48
|
-
_rubyfy_configure_options(new_opts) if new_opts.has_key?(:configure)
|
49
|
-
_rubyfy_edges_options(new_opts) if new_opts.has_key?(:edges)
|
50
|
-
_rubyfy_manipulation_options(new_opts) if new_opts.has_key?(:manipulation)
|
51
|
-
_rubyfy_nodes_options(new_opts) if new_opts.has_key?(:nodes)
|
52
|
-
|
53
|
-
if new_opts.has_key?(:join_condition)
|
54
|
-
block = new_opts[:join_condition]
|
55
|
-
if `typeof block === "function"`
|
56
|
-
unless new_opts[:join_condition].JS[:hyper_wrapped]
|
57
|
-
new_opts[:join_condition] = %x{
|
58
|
-
function(node_options, child_options) {
|
59
|
-
if (child_options !== undefined && child_options !== null) {
|
60
|
-
return #{block.call(`Opal.Hash.$new(node_options)`, `Opal.Hash.$new(child_options)`)};
|
61
|
-
} else {
|
62
|
-
return #{block.call(`Opal.Hash.$new(node_options)`)};
|
63
|
-
}
|
64
|
-
}
|
65
|
-
}
|
66
|
-
new_opts[:join_condition].JS[:hyper_wrapped] = true
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
if new_opts.has_key?(:process_properties)
|
72
|
-
block = new_opts[:process_properties]
|
73
|
-
if `typeof block === "function"`
|
74
|
-
unless new_opts[:process_properties].JS[:hyper_wrapped]
|
75
|
-
new_opts[:process_properties] = %x{
|
76
|
-
function(item) {
|
77
|
-
var res = #{block.call(`Opal.Hash.$new(item)`)};
|
78
|
-
return res.$to_n();
|
79
|
-
}
|
80
|
-
}
|
81
|
-
new_opts[:process_properties].JS[:hyper_wrapped] = true
|
82
|
-
end
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
if new_opts.has_key?(:filter)
|
87
|
-
block = new_opts[:filter]
|
88
|
-
if `typeof block === "function"`
|
89
|
-
unless new_opts[:filter].JS[:hyper_wrapped]
|
90
|
-
new_opts[:filter] = %x{
|
91
|
-
function(item) {
|
92
|
-
return #{block.call(`Opal.Hash.$new(item)`)};
|
93
|
-
}
|
94
|
-
}
|
95
|
-
new_opts[:filter].JS[:hyper_wrapped] = true
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
lower_camelize_hash(new_opts).to_n
|
101
|
-
end
|
102
|
-
|
103
|
-
def _rubyfy_configure_options(options)
|
104
|
-
if options[:configure].has_key?(:filter)
|
105
|
-
block = options[:configure][:filter]
|
106
|
-
if `typeof block === "function"`
|
107
|
-
unless options[:configure][:filter].JS[:hyper_wrapped]
|
108
|
-
options[:configure][:filter] = %x{
|
109
|
-
function(option, path) {
|
110
|
-
return #{block.call(`Opal.Hash.$new(options)`, `path`)};
|
111
|
-
}
|
112
|
-
}
|
113
|
-
options[:configure][:filter].JS[:hyper_wrapped] = true
|
114
|
-
end
|
115
|
-
end
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
def _rubyfy_edges_options(options)
|
120
|
-
if options[:edges].has_key?(:chosen)
|
121
|
-
chosen = options[:edges][:chosen]
|
122
|
-
[:edge, :label].each do |key|
|
123
|
-
if chosen.has_key?(key)
|
124
|
-
block = chosen[key]
|
125
|
-
if `typeof block === "function"`
|
126
|
-
unless options[:edges][:chosen][key].JS[:hyper_wrapped]
|
127
|
-
options[:edges][:chosen][key] = %x{
|
128
|
-
function(values, id, selected, hovering) {
|
129
|
-
return #{block.call(`Opal.Hash.$new(values)`, `id`, `selected`, `hovering`)};
|
130
|
-
}
|
131
|
-
}
|
132
|
-
options[:edges][:chosen][key].JS[:hyper_wrapped] = true
|
133
|
-
end
|
134
|
-
end
|
135
|
-
end
|
136
|
-
end
|
137
|
-
end
|
138
|
-
[:hover_width, :selection_width].each do |key|
|
139
|
-
if options[:edges].has_key?(key)
|
140
|
-
block = options[:edges][key]
|
141
|
-
if `typeof block === "function"`
|
142
|
-
unless options[:edges][key].JS[:hyper_wrapped]
|
143
|
-
options[:edges][key] = %x{
|
144
|
-
function(width) {
|
145
|
-
return #{block.call(`width`)};
|
146
|
-
}
|
147
|
-
}
|
148
|
-
options[:edges][key].JS[:hyper_wrapped] = true
|
149
|
-
end
|
150
|
-
end
|
151
|
-
end
|
152
|
-
end
|
153
|
-
if options[:edges].has_key?(:scaling)
|
154
|
-
if options[:edges][:scaling].has_key?(:custom_scaling_function)
|
155
|
-
block = options[:edges][:scaling][:custom_scaling_function]
|
156
|
-
if `typeof block === "function"`
|
157
|
-
unless options[:edges][:scaling][:custom_scaling_function].JS[:hyper_wrapped]
|
158
|
-
options[:edges][:scaling][:custom_scaling_function] = %x{
|
159
|
-
function(min, max, total, value) {
|
160
|
-
return #{block.call(`min`, `max`, `total`, `value`)};
|
161
|
-
}
|
162
|
-
}
|
163
|
-
options[:edges][:scaling][:custom_scaling_function].JS[:hyper_wrapped] = true
|
164
|
-
end
|
165
|
-
end
|
166
|
-
end
|
167
|
-
end
|
168
|
-
end
|
169
|
-
|
170
|
-
def _rubyfy_manipulation_options(options)
|
171
|
-
[:add_edge, :add_node, :edit_edge, :edit_node].each do |key|
|
172
|
-
next unless options[:manipulation].has_key?(key)
|
173
|
-
block = options[:manipulation][key]
|
174
|
-
if `typeof block === "function"`
|
175
|
-
unless options[:manipulation][key].JS[:hyper_wrapped]
|
176
|
-
options[:manipulation][key] = %x{
|
177
|
-
function(nodeData, callback) {
|
178
|
-
var wrapped_callback = #{ proc { |new_node_data| `callback(new_node_data.$to_n());` }};
|
179
|
-
block.$call(Opal.Hash.$new(nodeData), wrapped_callback);
|
180
|
-
}
|
181
|
-
}
|
182
|
-
end
|
183
|
-
options[:manipulation][key].JS[:hyper_wrapped] = true
|
184
|
-
end
|
185
|
-
end
|
186
|
-
# for delete the order of args for the callback is not clear
|
187
|
-
[:delete_edge, :delete_node].each do |key|
|
188
|
-
next unless options[:manipulation].has_key?(key)
|
189
|
-
block = options[:manipulation][key]
|
190
|
-
if `typeof block === "function"`
|
191
|
-
unless options[:manipulation][key].JS[:hyper_wrapped]
|
192
|
-
options[:manipulation][key] = %x{
|
193
|
-
function(nodeData, callback) {
|
194
|
-
var wrapped_callback = #{ proc { |new_node_data| `callback(new_node_data.$to_n());` }};
|
195
|
-
block.$call(Opal.Hash.$new(nodeData), wrapped_callback);
|
196
|
-
}
|
197
|
-
}
|
198
|
-
options[:manipulation][key].JS[:hyper_wrapped] = true
|
199
|
-
end
|
200
|
-
end
|
201
|
-
end
|
202
|
-
end
|
203
|
-
|
204
|
-
def _rubyfy_nodes_options(options)
|
205
|
-
if options[:nodes].has_key?(:chosen)
|
206
|
-
chosen = options[:nodes][:chosen]
|
207
|
-
[:node, :label].each do |key|
|
208
|
-
if chosen.has_key?(key)
|
209
|
-
block = chosen[key]
|
210
|
-
if `typeof block === "function"`
|
211
|
-
unless options[:nodes][:chosen][key].JS[:hyper_wrapped]
|
212
|
-
options[:nodes][:chosen][key] = %x{
|
213
|
-
function(values, id, selected, hovering) {
|
214
|
-
return #{block.call(`Opal.Hash.$new(values)`, `id`, `selected`, `hovering`)};
|
215
|
-
}
|
216
|
-
}
|
217
|
-
options[:nodes][:chosen][key].JS[:hyper_wrapped] = true
|
218
|
-
end
|
219
|
-
end
|
220
|
-
end
|
221
|
-
end
|
222
|
-
end
|
223
|
-
if options[:nodes].has_key?(:scaling)
|
224
|
-
if options[:nodes][:scaling].has_key?(:custom_scaling_function)
|
225
|
-
block = options[:nodes][:scaling][:custom_scaling_function]
|
226
|
-
if `typeof block === "function"`
|
227
|
-
unless options[:nodes][:scaling][:custom_scaling_function].JS[:hyper_wrapped]
|
228
|
-
options[:nodes][:scaling][:custom_scaling_function] = %x{
|
229
|
-
function(min, max, total, value) {
|
230
|
-
return #{block.call(`min`, `max`, `total`, `value`)};
|
231
|
-
}
|
232
|
-
}
|
233
|
-
options[:nodes][:scaling][:custom_scaling_function].JS[:hyper_wrapped] = true
|
234
|
-
end
|
235
|
-
end
|
236
|
-
end
|
43
|
+
camel_hash[lower_camelize(key)] = value
|
237
44
|
end
|
45
|
+
camel_hash
|
238
46
|
end
|
239
47
|
end
|
240
48
|
end
|
data/spec/test_app/Gemfile
CHANGED
@@ -14,16 +14,14 @@ gem 'sqlite3'
|
|
14
14
|
gem 'puma', '~> 3.7'
|
15
15
|
|
16
16
|
gem "opal-jquery", git: "https://github.com/opal/opal-jquery.git", branch: "master"
|
17
|
-
gem 'hyperloop', '~> 1.0.0.
|
17
|
+
gem 'hyperloop', '~> 1.0.0.lap27'
|
18
18
|
gem 'hyper-vis', path: '../../'
|
19
19
|
|
20
20
|
# Use Capistrano for deployment
|
21
21
|
# gem 'capistrano-rails', group: :development
|
22
22
|
|
23
23
|
group :development, :test do
|
24
|
-
gem 'hyper-spec', '~> 1.0.0.
|
25
|
-
# Call 'byebug' anywhere in the code to stop execution and get a debugger console
|
26
|
-
gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
|
24
|
+
gem 'hyper-spec', '~> 1.0.0.lap27'
|
27
25
|
# Adds support for Capybara system testing and selenium driver
|
28
26
|
gem 'capybara', '~> 2.13'
|
29
27
|
gem 'selenium-webdriver'
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# This file is auto-generated from the current state of the database. Instead
|
2
|
+
# of editing this file, please use the migrations feature of Active Record to
|
3
|
+
# incrementally modify your database, and then regenerate this schema definition.
|
4
|
+
#
|
5
|
+
# Note that this schema.rb definition is the authoritative source for your
|
6
|
+
# database schema. If you need to create the application database on another
|
7
|
+
# system, you should be using db:schema:load, not running all the migrations
|
8
|
+
# from scratch. The latter is a flawed and unsustainable approach (the more migrations
|
9
|
+
# you'll amass, the slower it'll run and the greater likelihood for issues).
|
10
|
+
#
|
11
|
+
# It's strongly recommended that you check this file into your version control system.
|
12
|
+
|
13
|
+
ActiveRecord::Schema.define(version: 0) do
|
14
|
+
|
15
|
+
create_table "hyperloop_connections", force: :cascade do |t|
|
16
|
+
t.string "channel"
|
17
|
+
t.string "session"
|
18
|
+
t.datetime "created_at"
|
19
|
+
t.datetime "expires_at"
|
20
|
+
t.datetime "refresh_at"
|
21
|
+
end
|
22
|
+
|
23
|
+
create_table "hyperloop_queued_messages", force: :cascade do |t|
|
24
|
+
t.text "data"
|
25
|
+
t.integer "connection_id"
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'Hyperloop::Vis::Graph2d::Component', js: true do
|
4
|
+
|
5
|
+
it 'creates a component by using the mixin and renders it' do
|
6
|
+
mount 'OuterComponent' do
|
7
|
+
class VisComponent
|
8
|
+
include Hyperloop::Vis::Graph2d::Mixin
|
9
|
+
|
10
|
+
render_with_dom_node do |dom_node, items|
|
11
|
+
net = Vis::Graph2d.new(dom_node, items)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
class OuterComponent < Hyperloop::Component
|
15
|
+
render do
|
16
|
+
data = Vis::DataSet.new([
|
17
|
+
{x: '2014-06-11', y: 10},
|
18
|
+
{x: '2014-06-12', y: 25},
|
19
|
+
{x: '2014-06-13', y: 30},
|
20
|
+
{x: '2014-06-14', y: 10},
|
21
|
+
{x: '2014-06-15', y: 15},
|
22
|
+
{x: '2014-06-16', y: 30}
|
23
|
+
])
|
24
|
+
DIV { VisComponent(items: data) }
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
expect(page.body).to include('class="vis-timeline')
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'creates a component by inheriting and renders it' do
|
32
|
+
mount 'OuterComponent' do
|
33
|
+
class VisComponent < Hyperloop::Vis::Graph2d::Component
|
34
|
+
render_with_dom_node do |dom_node, items|
|
35
|
+
net = Vis::Graph2d.new(dom_node, items)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
class OuterComponent < Hyperloop::Component
|
39
|
+
render do
|
40
|
+
data = Vis::DataSet.new([
|
41
|
+
{x: '2014-06-11', y: 10},
|
42
|
+
{x: '2014-06-12', y: 25},
|
43
|
+
{x: '2014-06-13', y: 30},
|
44
|
+
{x: '2014-06-14', y: 10},
|
45
|
+
{x: '2014-06-15', y: 15},
|
46
|
+
{x: '2014-06-16', y: 30}
|
47
|
+
])
|
48
|
+
DIV { VisComponent(items: data) }
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
expect(page.body).to include('class="vis-timeline')
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'actually passes the params to the component' do
|
56
|
+
mount 'OuterComponent' do
|
57
|
+
class VisComponent < Hyperloop::Vis::Graph2d::Component
|
58
|
+
def self.passed_data
|
59
|
+
@@passed_data
|
60
|
+
end
|
61
|
+
def self.passed_options
|
62
|
+
@@passed_options
|
63
|
+
end
|
64
|
+
render_with_dom_node do |dom_node, items, groups, options|
|
65
|
+
@@passed_data = items
|
66
|
+
@@passed_options = options
|
67
|
+
net = Vis::Graph2d.new(dom_node, items, options)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
class OuterComponent < Hyperloop::Component
|
71
|
+
render do
|
72
|
+
data = Vis::DataSet.new([
|
73
|
+
{x: '2014-06-11', y: 10},
|
74
|
+
{x: '2014-06-12', y: 25},
|
75
|
+
{x: '2014-06-13', y: 30},
|
76
|
+
{x: '2014-06-14', y: 10},
|
77
|
+
{x: '2014-06-15', y: 15},
|
78
|
+
{x: '2014-06-16', y: 30}
|
79
|
+
])
|
80
|
+
options = { align: 'left' }
|
81
|
+
DIV { VisComponent(items: data, options: options)}
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
expect(page.body).to include('class="vis-timeline')
|
86
|
+
expect_evaluate_ruby('VisComponent.passed_data.is_a?(Vis::DataSet)').to eq(true)
|
87
|
+
expect_evaluate_ruby('VisComponent.passed_options.has_key?(:align)').to eq(true)
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,304 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'Vis::Graph2d', js: true do
|
4
|
+
|
5
|
+
it 'creates a new Graph' do
|
6
|
+
expect_evaluate_ruby do
|
7
|
+
items = [
|
8
|
+
{x: '2014-06-11', y: 10},
|
9
|
+
{x: '2014-06-12', y: 25},
|
10
|
+
{x: '2014-06-13', y: 30},
|
11
|
+
{x: '2014-06-14', y: 10},
|
12
|
+
{x: '2014-06-15', y: 15},
|
13
|
+
{x: '2014-06-16', y: 30}
|
14
|
+
]
|
15
|
+
options = { start: '2014-06-10', end: '2014-06-18' }
|
16
|
+
dataset = Vis::DataSet.new(items)
|
17
|
+
dom_node = Vis::Graph2d.test_container
|
18
|
+
g2d = Vis::Graph2d.new(dom_node, dataset, options)
|
19
|
+
[g2d.is_a?(Vis::Graph2d), dom_node.JS[:children].JS[:length]]
|
20
|
+
end.to eq([true, 1])
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'creates a new Graph and destroys it' do
|
24
|
+
expect_evaluate_ruby do
|
25
|
+
items = [
|
26
|
+
{x: '2014-06-11', y: 10},
|
27
|
+
{x: '2014-06-12', y: 25},
|
28
|
+
{x: '2014-06-13', y: 30},
|
29
|
+
{x: '2014-06-14', y: 10},
|
30
|
+
{x: '2014-06-15', y: 15},
|
31
|
+
{x: '2014-06-16', y: 30}
|
32
|
+
]
|
33
|
+
options = { start: '2014-06-10', end: '2014-06-18' }
|
34
|
+
dataset = Vis::DataSet.new(items)
|
35
|
+
dom_node = Vis::Graph2d.test_container
|
36
|
+
g2d = Vis::Graph2d.new(dom_node, dataset, options)
|
37
|
+
created = dom_node.JS[:children].JS[:length]
|
38
|
+
g2d.destroy
|
39
|
+
[g2d.is_a?(Vis::Graph2d), created, dom_node.JS[:children].JS[:length]]
|
40
|
+
end.to eq([true, 1, 0])
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'it can replace the items' do
|
44
|
+
expect_evaluate_ruby do
|
45
|
+
items = [
|
46
|
+
{x: '2014-06-11', y: 10},
|
47
|
+
{x: '2014-06-12', y: 25},
|
48
|
+
{x: '2014-06-13', y: 30},
|
49
|
+
{x: '2014-06-14', y: 10},
|
50
|
+
{x: '2014-06-15', y: 15},
|
51
|
+
{x: '2014-06-16', y: 30}
|
52
|
+
]
|
53
|
+
options = { start: '2014-06-10', end: '2014-06-18' }
|
54
|
+
dataset = Vis::DataSet.new(items)
|
55
|
+
dom_node = Vis::Graph2d.test_container
|
56
|
+
g2d = Vis::Graph2d.new(dom_node, dataset, options)
|
57
|
+
created = dom_node.JS[:children].JS[:length]
|
58
|
+
new_items = [
|
59
|
+
{x: '2014-06-12', y: 20},
|
60
|
+
{x: '2014-06-13', y: 10},
|
61
|
+
{x: '2014-06-14', y: 25},
|
62
|
+
{x: '2014-06-15', y: 30},
|
63
|
+
{x: '2014-06-16', y: 25},
|
64
|
+
{x: '2014-06-17', y: 20}
|
65
|
+
]
|
66
|
+
new_dataset = Vis::DataSet.new(new_items)
|
67
|
+
g2d.set_items(new_dataset)
|
68
|
+
[g2d.is_a?(Vis::Graph2d), created]
|
69
|
+
end.to eq([true, 1])
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'it can set options' do
|
73
|
+
expect_evaluate_ruby do
|
74
|
+
items = [
|
75
|
+
{x: '2014-06-11', y: 10},
|
76
|
+
{x: '2014-06-12', y: 25},
|
77
|
+
{x: '2014-06-13', y: 30},
|
78
|
+
{x: '2014-06-14', y: 10},
|
79
|
+
{x: '2014-06-15', y: 15},
|
80
|
+
{x: '2014-06-16', y: 30}
|
81
|
+
]
|
82
|
+
options = { start: '2014-06-10', end: '2014-06-18' }
|
83
|
+
dataset = Vis::DataSet.new(items)
|
84
|
+
dom_node = Vis::Graph2d.test_container
|
85
|
+
g2d = Vis::Graph2d.new(dom_node, dataset, options)
|
86
|
+
created = dom_node.JS[:children].JS[:length]
|
87
|
+
error = false
|
88
|
+
begin
|
89
|
+
g2d.set_options({
|
90
|
+
shaded: { enabled: true },
|
91
|
+
graph_height: 200
|
92
|
+
})
|
93
|
+
rescue
|
94
|
+
error = true
|
95
|
+
end
|
96
|
+
[g2d.is_a?(Vis::Graph2d), created, error]
|
97
|
+
end.to eq([true, 1, false])
|
98
|
+
end
|
99
|
+
|
100
|
+
it 'it can set and remove a event listener' do
|
101
|
+
expect_evaluate_ruby do
|
102
|
+
items = [
|
103
|
+
{x: '2014-06-11', y: 10},
|
104
|
+
{x: '2014-06-12', y: 25},
|
105
|
+
{x: '2014-06-13', y: 30},
|
106
|
+
{x: '2014-06-14', y: 10},
|
107
|
+
{x: '2014-06-15', y: 15},
|
108
|
+
{x: '2014-06-16', y: 30}
|
109
|
+
]
|
110
|
+
options = { start: '2014-06-10', end: '2014-06-18' }
|
111
|
+
dataset = Vis::DataSet.new(items)
|
112
|
+
dom_node = Vis::Graph2d.test_container
|
113
|
+
g2d = Vis::Graph2d.new(dom_node, dataset, options)
|
114
|
+
created = dom_node.JS[:children].JS[:length]
|
115
|
+
received = []
|
116
|
+
handler_id = g2d.on(:changed) do
|
117
|
+
received << 1
|
118
|
+
end
|
119
|
+
new_items = [
|
120
|
+
{x: '2014-06-12', y: 20},
|
121
|
+
{x: '2014-06-13', y: 10},
|
122
|
+
{x: '2014-06-14', y: 25},
|
123
|
+
{x: '2014-06-15', y: 30},
|
124
|
+
{x: '2014-06-16', y: 25},
|
125
|
+
{x: '2014-06-17', y: 20}
|
126
|
+
]
|
127
|
+
new_dataset = Vis::DataSet.new(new_items)
|
128
|
+
g2d.set_items(new_dataset)
|
129
|
+
g2d.off(:changed, handler_id)
|
130
|
+
g2d.set_items(dataset)
|
131
|
+
[g2d.is_a?(Vis::Graph2d), created, received.size]
|
132
|
+
end.to eq([true, 1, 2])
|
133
|
+
end
|
134
|
+
|
135
|
+
it 'can call redraw' do
|
136
|
+
expect_evaluate_ruby do
|
137
|
+
items = [
|
138
|
+
{x: '2014-06-11', y: 10},
|
139
|
+
{x: '2014-06-12', y: 25},
|
140
|
+
{x: '2014-06-13', y: 30},
|
141
|
+
{x: '2014-06-14', y: 10},
|
142
|
+
{x: '2014-06-15', y: 15},
|
143
|
+
{x: '2014-06-16', y: 30}
|
144
|
+
]
|
145
|
+
options = { start: '2014-06-10', end: '2014-06-18' }
|
146
|
+
dataset = Vis::DataSet.new(items)
|
147
|
+
dom_node = Vis::Graph2d.test_container
|
148
|
+
g2d = Vis::Graph2d.new(dom_node, dataset, options)
|
149
|
+
created = dom_node.JS[:children].JS[:length]
|
150
|
+
g2d.redraw
|
151
|
+
redrawn = dom_node.JS[:children].JS[:length]
|
152
|
+
[g2d.is_a?(Vis::Graph2d), created, redrawn]
|
153
|
+
end.to eq([true, 1, 1])
|
154
|
+
end
|
155
|
+
|
156
|
+
it 'can call fit' do
|
157
|
+
expect_evaluate_ruby do
|
158
|
+
items = [
|
159
|
+
{x: '2014-06-11', y: 10},
|
160
|
+
{x: '2014-06-12', y: 25},
|
161
|
+
{x: '2014-06-13', y: 30},
|
162
|
+
{x: '2014-06-14', y: 10},
|
163
|
+
{x: '2014-06-15', y: 15},
|
164
|
+
{x: '2014-06-16', y: 30}
|
165
|
+
]
|
166
|
+
options = { start: '2014-06-10', end: '2014-06-18' }
|
167
|
+
dataset = Vis::DataSet.new(items)
|
168
|
+
dom_node = Vis::Graph2d.test_container
|
169
|
+
g2d = Vis::Graph2d.new(dom_node, dataset, options)
|
170
|
+
created = dom_node.JS[:children].JS[:length]
|
171
|
+
g2d.fit
|
172
|
+
fitted = dom_node.JS[:children].JS[:length]
|
173
|
+
[g2d.is_a?(Vis::Graph2d), created, fitted]
|
174
|
+
end.to eq([true, 1, 1])
|
175
|
+
end
|
176
|
+
|
177
|
+
it 'can set and get current time' do
|
178
|
+
expect_evaluate_ruby do
|
179
|
+
items = [
|
180
|
+
{x: '2014-06-11', y: 10},
|
181
|
+
{x: '2014-06-12', y: 25},
|
182
|
+
{x: '2014-06-13', y: 30},
|
183
|
+
{x: '2014-06-14', y: 10},
|
184
|
+
{x: '2014-06-15', y: 15},
|
185
|
+
{x: '2014-06-16', y: 30}
|
186
|
+
]
|
187
|
+
options = { start: '2014-06-10', end: '2014-06-18', show_current_time: true }
|
188
|
+
dataset = Vis::DataSet.new(items)
|
189
|
+
dom_node = Vis::Graph2d.test_container
|
190
|
+
g2d = Vis::Graph2d.new(dom_node, dataset, options)
|
191
|
+
created = dom_node.JS[:children].JS[:length]
|
192
|
+
now = Time.now
|
193
|
+
time_get = g2d.get_current_time
|
194
|
+
same_get_year = time_get.year == now.year
|
195
|
+
g2d.set_current_time(Time.now + 1.year)
|
196
|
+
time_set = g2d.get_current_time
|
197
|
+
same_set_year = time_set.year == (now + 1.year).year
|
198
|
+
[g2d.is_a?(Vis::Graph2d), created, same_get_year, same_set_year]
|
199
|
+
end.to eq([true, 1, true, true])
|
200
|
+
end
|
201
|
+
|
202
|
+
it 'can set and get custom time' do
|
203
|
+
# option showCustomTime is deprecated in vis, throws error
|
204
|
+
expect_evaluate_ruby do
|
205
|
+
items = [
|
206
|
+
{x: '2014-06-11', y: 10},
|
207
|
+
{x: '2014-06-12', y: 25},
|
208
|
+
{x: '2014-06-13', y: 30},
|
209
|
+
{x: '2014-06-14', y: 10},
|
210
|
+
{x: '2014-06-15', y: 15},
|
211
|
+
{x: '2014-06-16', y: 30}
|
212
|
+
]
|
213
|
+
options = { start: '2014-06-10', end: '2014-06-18' }
|
214
|
+
dataset = Vis::DataSet.new(items)
|
215
|
+
dom_node = Vis::Graph2d.test_container
|
216
|
+
g2d = Vis::Graph2d.new(dom_node, dataset, options)
|
217
|
+
created = dom_node.JS[:children].JS[:length]
|
218
|
+
now = Time.now
|
219
|
+
g2d.add_custom_time(now, 'time 1')
|
220
|
+
time_get = g2d.get_custom_time('time 1')
|
221
|
+
same_get_year = time_get.year == now.year
|
222
|
+
g2d.set_custom_time(Time.now + 1.year, 'time 1')
|
223
|
+
time_set = g2d.get_custom_time('time 1')
|
224
|
+
same_set_year = time_set.year == (now + 1.year).year
|
225
|
+
g2d.remove_custom_time('time 1')
|
226
|
+
[g2d.is_a?(Vis::Graph2d), created, same_get_year, same_set_year]
|
227
|
+
end.to eq([true, 1, true, true])
|
228
|
+
end
|
229
|
+
|
230
|
+
it 'can get the data range' do
|
231
|
+
expect_evaluate_ruby do
|
232
|
+
items = [
|
233
|
+
{x: '2014-06-11', y: 10},
|
234
|
+
{x: '2014-06-12', y: 25},
|
235
|
+
{x: '2014-06-13', y: 30},
|
236
|
+
{x: '2014-06-14', y: 10},
|
237
|
+
{x: '2014-06-15', y: 15},
|
238
|
+
{x: '2014-06-16', y: 30}
|
239
|
+
]
|
240
|
+
options = { start: '2014-06-10', end: '2014-06-18' }
|
241
|
+
dataset = Vis::DataSet.new(items)
|
242
|
+
dom_node = Vis::Graph2d.test_container
|
243
|
+
g2d = Vis::Graph2d.new(dom_node, dataset, options)
|
244
|
+
created = dom_node.JS[:children].JS[:length]
|
245
|
+
data_range = g2d.get_data_range
|
246
|
+
min = data_range[:min].strftime('%Y-%m-%d')
|
247
|
+
max = data_range[:max].strftime('%Y-%m-%d')
|
248
|
+
[g2d.is_a?(Vis::Graph2d), created, min, max]
|
249
|
+
end.to eq([true, 1, '2014-06-11', '2014-06-16'])
|
250
|
+
end
|
251
|
+
|
252
|
+
it 'can get and set the window' do
|
253
|
+
expect_evaluate_ruby do
|
254
|
+
items = [
|
255
|
+
{x: '2014-06-11', y: 10},
|
256
|
+
{x: '2014-06-12', y: 25},
|
257
|
+
{x: '2014-06-13', y: 30},
|
258
|
+
{x: '2014-06-14', y: 10},
|
259
|
+
{x: '2014-06-15', y: 15},
|
260
|
+
{x: '2014-06-16', y: 30}
|
261
|
+
]
|
262
|
+
options = { start: '2014-06-10', end: '2014-06-18' }
|
263
|
+
dataset = Vis::DataSet.new(items)
|
264
|
+
dom_node = Vis::Graph2d.test_container
|
265
|
+
g2d = Vis::Graph2d.new(dom_node, dataset, options)
|
266
|
+
created = dom_node.JS[:children].JS[:length]
|
267
|
+
window = g2d.get_window
|
268
|
+
gws = window[:start].strftime('%Y-%m-%d')
|
269
|
+
gwe = window[:end].strftime('%Y-%m-%d')
|
270
|
+
g2d.set_window('2014-06-12', '2014-06-15')
|
271
|
+
# window is set, but
|
272
|
+
# get_window doesnt work here, gives back the orignal values, but not the current ones
|
273
|
+
# window_fc = g2d.get_window
|
274
|
+
# sws = window_fc[:start].strftime('%Y-%m-%d')
|
275
|
+
# swe = window_fc[:end].strftime('%Y-%m-%d')
|
276
|
+
[g2d.is_a?(Vis::Graph2d), created, gws, gwe]
|
277
|
+
end.to eq([true, 1, '2014-06-10', '2014-06-18'])
|
278
|
+
end
|
279
|
+
|
280
|
+
it 'can move the window' do
|
281
|
+
expect_evaluate_ruby do
|
282
|
+
items = [
|
283
|
+
{x: '2014-06-11', y: 10},
|
284
|
+
{x: '2014-06-12', y: 25},
|
285
|
+
{x: '2014-06-13', y: 30},
|
286
|
+
{x: '2014-06-14', y: 10},
|
287
|
+
{x: '2014-06-15', y: 15},
|
288
|
+
{x: '2014-06-16', y: 30}
|
289
|
+
]
|
290
|
+
options = { start: '2014-06-10', end: '2014-06-18' }
|
291
|
+
dataset = Vis::DataSet.new(items)
|
292
|
+
dom_node = Vis::Graph2d.test_container
|
293
|
+
g2d = Vis::Graph2d.new(dom_node, dataset, options)
|
294
|
+
created = dom_node.JS[:children].JS[:length]
|
295
|
+
g2d.move_to('2014-06-12')
|
296
|
+
[g2d.is_a?(Vis::Graph2d), created]
|
297
|
+
end.to eq([true, 1])
|
298
|
+
end
|
299
|
+
|
300
|
+
xit 'get_event_properties'
|
301
|
+
xit 'is_group_visible'
|
302
|
+
xit 'set_groups'
|
303
|
+
xit 'get_legend'
|
304
|
+
end
|