rbbt-rest 1.6.14 → 1.6.15

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
  SHA1:
3
- metadata.gz: 96f5e042d8f089b55dcbd883dd14ccbad0820d80
4
- data.tar.gz: 0ab035fcfdf2838540047d8943c03ad0aa03ea6e
3
+ metadata.gz: cc4a9b93a28766b814c3dbb6d08f85c021603760
4
+ data.tar.gz: 975818bfe4d4439652a52744bed51bd171c8bf85
5
5
  SHA512:
6
- metadata.gz: f7a7be6a47e7b15131ac8abaf3cd303d00f5d77c791321f68ac54d1af6c1299b865793c93964fc0ead18bc9d3021cadcac9572d8d20e436cc6e4c470c6e6dd0c
7
- data.tar.gz: ad2e577ef5ecd4e50f08512784311395e62b9767d0c765cb91fc83f59efb4e7cab1de7d3b59e83ee1d1eed06762c59c4ac7a5cdac712b71a0d11332a77ac2844
6
+ metadata.gz: b4da80d08b5243a647ad31296c4027de08bf63355fb2c2f9d6dd7a51f0b8473b84b61494fa77161f6b519bdad9d5eea0f20d2cd6c5191bc3779cf6bc444b1a8e
7
+ data.tar.gz: 0a18077ebf5a6a70b6bffe253909c405c585f40ccb4923638736c8df06979b43efdc6cc304e6444a5d6a7f513228d9eac37146edccaaf123a8b795d5eed9209d
@@ -109,7 +109,6 @@ module WorkflowRESTHelpers
109
109
  when :entities
110
110
  tsv = tsv_process(load_tsv(job.path).first)
111
111
  list = tsv.column_values(tsv.fields.first).flatten
112
- iif list
113
112
  if not AnnotatedArray === list and Annotated === list.first
114
113
  list.first.annotate list
115
114
  list.extend AnnotatedArray
@@ -323,3 +323,36 @@ label[title]
323
323
  &.error
324
324
  .header
325
325
  color: red
326
+
327
+
328
+
329
+ #footer
330
+ clear: both
331
+
332
+ border: none !important
333
+ padding: 0px !important
334
+ margin: 0px !important
335
+ .card
336
+ width: 100%
337
+ height: 100%
338
+ .contact
339
+ &:before
340
+ content: "Contact: "
341
+ font-weight: bold
342
+ span.where:before
343
+ content: " at "
344
+ .image
345
+ font-size: 0px
346
+ width: 241px
347
+ .content
348
+ width: calc(100% - 241px -8px)
349
+ .image, .content
350
+ display: inline-block
351
+ margin-left: 8px
352
+
353
+ .ui.segment:after
354
+ content: " "
355
+ display:inline-block
356
+ float:left
357
+ clear:both
358
+
@@ -1,37 +1,3 @@
1
- :sass
2
-
3
- #footer
4
- clear: both
5
-
6
- border: none !important
7
- padding: 0px !important
8
- margin: 0px !important
9
- .card
10
- width: 100%
11
- height: 100%
12
- .contact
13
- &:before
14
- content: "Contact: "
15
- font-weight: bold
16
- span.where:before
17
- content: " at "
18
- .image
19
- font-size: 0px
20
- width: 241px
21
- .content
22
- width: calc(100% - 241px -8px)
23
- .image, .content
24
- //float: left
25
- display: inline-block
26
- margin-left: 8px
27
-
28
- .ui.segment
29
- &:after
30
- content: " "
31
- display:inline-block
32
- float:left
33
- clear:both
34
-
35
1
  .ui.segment
36
2
  .image
37
3
  %a(href="http://www.cnio.es/")
@@ -1,17 +1,22 @@
1
1
  :sass
2
2
  #top_menu
3
+ .favourite
4
+ width: 100%
3
5
  & > .dropdown
4
6
  display: inline-block !important
5
7
  min-width: 10em
6
8
  & > .favourite > .dropdown, & > .favourite > .item.pointer
7
9
  display: inline-block !important
8
- .favourite
9
- width: 100%
10
+
10
11
  #top_menu.ui.fixed.menu
11
12
  %a.header.item(href='/')= $title
12
13
 
13
14
  %span.favourite
14
15
 
16
+ - if settings.respond_to?(:finder) and settings.finder and settings.finder.instances.any?
17
+ .finder.right.item
18
+ %form.collapse(action='/find' method="POST")
19
+ %input(type="search" name="term" placeholder='Search')
15
20
 
16
21
  - if defined? Sinatra::RbbtRESTWorkflow and Sinatra::RbbtRESTWorkflow::WORKFLOWS
17
22
  - expoted_workflows = Sinatra::RbbtRESTWorkflow::WORKFLOWS.collect do |workflow|
@@ -27,10 +32,6 @@
27
32
  - expoted_workflows.each do |workflow|
28
33
  %a.item(href='#{'/' + workflow.to_s}')= workflow.to_s
29
34
 
30
- - if settings.respond_to?(:finder) and settings.finder and settings.finder.instances.any?
31
- .finder.right.item
32
- %form.collapse(action='/find' method="POST")
33
- %input(type="search" name="term" placeholder='Search')
34
35
 
35
36
  %a.item.login.right(href='/login')
36
37
  %i.icon.user
@@ -137,3 +137,30 @@ function unique(arrayName) {
137
137
  return newArray;
138
138
  }
139
139
 
140
+ function forHash(obj, fn, thisObj){
141
+ var key, i = 0;
142
+ function exec(fn, obj, key, thisObj){
143
+ return fn.call(thisObj, key, obj[key], obj);
144
+ }
145
+ for (key in obj) {
146
+ if (exec(fn, obj, key, thisObj) === false) {
147
+ break;
148
+ }
149
+ }
150
+ return forHash;
151
+ }
152
+
153
+ function forArray(obj, fn, thisObj){
154
+ var key, i = 0;
155
+ function exec(fn, obj, prop, thisObj){
156
+ return fn.call(thisObj, obj[prop], obj);
157
+ }
158
+ for (var prop in obj) {
159
+ if (obj.hasOwnProperty(prop)) {
160
+ if (exec(fn, obj, prop, thisObj) === false) {
161
+ break;
162
+ }
163
+ }
164
+ }
165
+ return forArray;
166
+ }
@@ -38,19 +38,19 @@ var FavouriteEntities = function(by_type){
38
38
  }
39
39
  }
40
40
 
41
+
41
42
  FavouriteEntities.deserialize = function(data){
42
43
  data = JSON.parse(data)
43
44
  favourite_entities = {}
44
- for (type in data){
45
- var type_data = data[type]
46
- favourite_entities[type] = {}
47
- for (code in type_data){
48
- var info = type_data[code]
49
- info.code = code
50
- info.type = type
51
- favourite_entities[type][code] = new Entity(info)
52
- }
53
- }
45
+
46
+ forHash(data, function(type, type_data){
47
+ favourite_entities[type] = {}
48
+ forHash(type_data, function(code, info){
49
+ info.code = code
50
+ info.type = type
51
+ favourite_entities[type][code] = new Entity(info)
52
+ })
53
+ })
54
54
  return favourite_entities
55
55
  }
56
56
 
@@ -39,16 +39,15 @@ FavouriteLists.get = function(){
39
39
  FavouriteLists.deserialize = function(data){
40
40
  data = JSON.parse(data)
41
41
  favourite_lists = {}
42
- for (type in data){
43
- var type_data = data[type]
44
- favourite_lists[type] = {}
45
- for (i in type_data){
46
- var info = {}
47
- id = type_data[i]
48
- info.id = id
49
- info.type = type
50
- favourite_lists[type][id] = new EntityList(info)
51
- }
52
- }
42
+
43
+ forHash(data, function(type, type_data){
44
+ favourite_lists[type] = {}
45
+ forArray(type_data, function(id){
46
+ var info = {}
47
+ info.id = id
48
+ info.type = type
49
+ favourite_lists[type][id] = new EntityList(info)
50
+ })
51
+ })
53
52
  return favourite_lists
54
53
  }
@@ -9,7 +9,7 @@ var EntityMap = function(data){
9
9
  }
10
10
 
11
11
  this.url = function(){
12
- var url = "/entity_map/" + this.full_type() + "/" + this.column + "/" + this.id
12
+ var url = "/entity_map/" + this.full_type() + "/" + clean_element(this.column) + "/" + clean_element(this.id)
13
13
  return url
14
14
  }
15
15
 
@@ -33,20 +33,20 @@ FavouriteMaps.get = function(){
33
33
  FavouriteMaps.deserialize = function(data){
34
34
  data = JSON.parse(data)
35
35
  favourite_maps = {}
36
- for (type in data){
37
- var type_data = data[type]
38
- favourite_maps[type] = {}
39
- for (column in type_data){
40
- var column_data = type_data[column]
41
- for (i in column_data){
42
- var info = {}
43
- id = column_data[i]
44
- info.id = id
45
- info.column = column
46
- info.type = type
47
- favourite_maps[type][id] = new EntityMap(info)
48
- }
49
- }
50
- }
36
+
37
+ forHash(data, function(type, type_data){
38
+ favourite_maps[type] = {}
39
+ forHash(type_data, function(column, column_data){
40
+ forArray(column_data, function(id){
41
+ var info = {}
42
+ info.id = id
43
+ info.column = column
44
+ info.type = type
45
+ favourite_maps[type][id] = new EntityMap(info)
46
+ })
47
+ })
48
+ })
51
49
  return favourite_maps
52
50
  }
51
+
52
+
@@ -37,8 +37,6 @@ fav_module.isFavourite_map = function(map){
37
37
 
38
38
  fav_module.toggleFavourite_entity = function(){
39
39
  var entity = rbbt.page.entity();
40
- console.log(entity)
41
- console.log(entity.code)
42
40
 
43
41
  if (fav_module.isFavourite_entity(entity)){
44
42
  rbbt.post({url: '/remove_favourite_entity/' + entity.type + '/' + clean_element(entity.code)}).then(fav_module.update)
@@ -68,16 +66,12 @@ fav_module.toggleFavourite_map = function(){
68
66
  }
69
67
 
70
68
  fav_module.toggleFavourite = function(){
71
- if (! rbbt.page.entity())
72
- if (! rbbt.page.list())
73
- if (! rbbt.page.map())
74
- return
75
- else
76
- fav_module.toggleFavourite_map()
77
- else
78
- fav_module.toggleFavourite_list()
79
- else
80
- fav_module.toggleFavourite_entity()
69
+ if (rbbt.page.entity())
70
+ return fav_module.toggleFavourite_entity()
71
+ if (rbbt.page.list())
72
+ return fav_module.toggleFavourite_list()
73
+ if (rbbt.page.map())
74
+ return fav_module.toggleFavourite_map()
81
75
  }
82
76
 
83
77
  //{{{ VIEWS
@@ -280,5 +274,6 @@ fav_module.hooks = function(){
280
274
  }
281
275
 
282
276
  fav_module.update = function(){
277
+ //fav_module.update_favourites().then(fav_module.view).then(function(){ $('.dropdown:not([tabindex])').dropdown()}).then(fav_module.hooks)
283
278
  fav_module.update_favourites().then(fav_module.view).then(function(){ $('.dropdown:not([tabindex])').dropdown()}).then(fav_module.hooks)
284
279
  }
@@ -28,6 +28,7 @@ rbbt.modal.controller = function(){
28
28
  controller._set(content, title)
29
29
  $(rbbt.modal.element).addClass('active')
30
30
  m.redraw()
31
+ update_rbbt()
31
32
  }
32
33
 
33
34
  controller.error = function(content, title){
@@ -35,6 +36,7 @@ rbbt.modal.controller = function(){
35
36
  $(rbbt.modal.element).addClass('active')
36
37
  $(rbbt.modal.element).addClass('error')
37
38
  m.redraw()
39
+ update_rbbt()
38
40
  }
39
41
 
40
42
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbbt-rest
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.14
4
+ version: 1.6.15
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miguel Vazquez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-01 00:00:00.000000000 Z
11
+ date: 2015-07-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -1828,7 +1828,6 @@ files:
1828
1828
  - share/views/public/plugins/springy/springyui.js
1829
1829
  - share/views/public/plugins/underscore/js/underscore.js
1830
1830
  - share/views/tasks.haml
1831
- - share/views/tools/cytoscape.haml
1832
1831
  - share/views/wait.haml
1833
1832
  homepage: http://github.com/mikisvaz/rbbt-rest
1834
1833
  licenses:
@@ -1,312 +0,0 @@
1
- - id = "rand" << (rand * 1000).to_i.to_s unless defined? id and not (id.nil? or id.empty?)
2
- - id = Misc.snake_case(id)
3
- - static = false unless defined? static and not static.nil?
4
- - knowledge_base = nil unless defined? knowledge_base and not knowledge_base.nil?
5
- - kb_name = 'user' unless defined? kb_name and not kb_name.nil?
6
-
7
- = link_css '/stylesheets/cytoscape'
8
-
9
- - syndications = {}
10
- - databases = []
11
- - cytoscape.knowledge_base.all_databases.each do |database|
12
- - database = database.to_s
13
- - name, synd = database.split("@")
14
- - if synd
15
- - syndications[synd] ||= []
16
- - syndications[synd] << database
17
- - else
18
- - databases << database
19
-
20
- :sass
21
- .tab.content
22
- position: relative
23
- .cytoscape_tool .window
24
- height: 700px
25
- .cytoscape_tool.fixable.preload(id=id)
26
-
27
- .controls.ui.top.attached.tabular.menu
28
- .ui.item(data-tab='Close')
29
- %i.icon.close
30
- .ui.item(data-tab='Edges') Edges
31
- .ui.item(data-tab='Entities') Entities
32
- .ui.item(data-tab='Aesthetics') Aesthetics
33
- .ui.item(data-tab='Help') Help
34
- .ui.tab.bottom.attached.very.basic.segment.content(data-tab='Close')
35
- .ui.tab.bottom.attached.segment.content(data-tab='Edges')
36
- .database_edges
37
-
38
- %h5 Add edges between entities
39
- .action_parameters
40
- %form.action_parameter_form
41
- - if databases.any?
42
- .input.multiple.database
43
- - databases.each do |database|
44
- - name, *rest = database.split "@"
45
- %span.cchoice
46
- %label(for="database[#{database}]")=name
47
- %input(id="database[#{database}]" type="checkbox" value="true" name="database[#{database}]")
48
- - if syndications.any?
49
- %dl.rbbt_tabs.subtle(style="margin:1em")
50
- - syndications.each do |synd, databases|
51
- %dt.next=synd
52
- %dd
53
- .input.database.multiple
54
- - databases.each do |database|
55
- - name, *rest = database.split "@"
56
- %span.choice
57
- %label(for="database[#{database}]")=name
58
- %input(id="database[#{database}]" type="checkbox" value="true" name="database[#{database}]")
59
-
60
- .input.submit
61
- %input(type="submit")
62
-
63
- .ui.tab.bottom.attached.segment.content(data-tab='Entities')
64
- .add_gene_list
65
- %h5 Add entities from a list
66
- = action_parameters nil, {:klass => ''}, :action => '#' do
67
- - input :entities, :select, "Entities to add", nil, :html_options => {:class => 'favourite_lists', :type => 'All'}
68
-
69
- .database_neighbours
70
- %h5 Add neighbours of entities
71
- .action_parameters.ui.raised.segment
72
- %form.ui.form
73
- .field.input.select.database
74
- %label knowledgebase
75
- %select(type="All" name="database")
76
- - databases.each do |database|
77
- - name, *rest = database.split "@"
78
- %option(value=database)=name
79
- - syndications.each do |synd, databases|
80
- %option(disabled=true)=synd
81
- - databases.each do |database|
82
- - name, *rest = database.split "@"
83
- %option(value=database)=name
84
- .field.submit
85
- %input.ui.submit.button(type="submit")
86
-
87
- .ui.tab.bottom.attached.segment.content(data-tab='Aesthetics')
88
- .maps
89
- %h5 Map entity aesthetic
90
- = action_parameters nil, {:klass => ''}, :action => '#' do
91
- - input :elem, :select, "Type of element", :nodes, :select_options => [:nodes, :edges]
92
- - input :aesthetic, :select, "Aesthetic to map to", :opacity, :select_options => [:shape, :size, :color, :opacity, :borderWidth]
93
- - input :field, :string, "Attribute to map", 'id', :select_options => {:textarea => "Use textarea"}, :html_options => {:class => 'favourite_maps', :type => 'All'}
94
- - input :map, :select, "Select map to use", nil, :select_options => {:textarea => "Use textarea"}, :html_options => {:class => 'favourite_maps', :type => 'All'}
95
- - input :map_tsv, :text, "Map", nil, :no_file => true
96
-
97
- .select_gene_list
98
- %h5 Highlight entities from a list
99
- = action_parameters nil, {:klass => ''}, :action => '#' do
100
- - input :entities, :select, "Genes to add", nil, :html_options => {:class => 'favourite_lists', :type => 'All'}
101
-
102
- .ui.tab.bottom.attached.segment.content(data-tab='Help')
103
-
104
- :documentation
105
-
106
- ### Edges
107
-
108
- You can connect your nodes using any of the databases in the `knowledgebase`.
109
- This is configured in the `Edges` menu: check the databases you want to use,
110
- if none is selected (by default) all of them are used.
111
-
112
- ### Entities
113
-
114
- The network comes preloaded with a list of entities (nodes), but you
115
- can remove them or add new ones. To remove them use the context menu
116
- (right-click over cytoscape window); you can remove one node, or the
117
- selected list of nodes.
118
-
119
- Adding nodes can be done using the `Entity` menu. You can add entities from
120
- your `favourite` lists or add the neighbours of your entities using any of
121
- the databases in the `knowledgebase`.
122
-
123
- ### Aesthetics
124
-
125
- Use the `Aesthetics` menu to change how your network looks. This can
126
- help represent different sources of information. For now it works only
127
- on nodes. You can change the value of different aesthetics, like
128
- color, border width, size, shape, and opacity. You can `map` these
129
- aesthetics to favourite `Entity Maps`, or use a custom mapping
130
- in-place, as a space-separated TSV file (see example below). The
131
- mappings can consider the identity of the node (type `id` in `field`;
132
- default) or the type of node (type `entity_type` in `field`). For
133
- instance:
134
-
135
- aesthetic: color
136
- field: entity_type
137
- map: use_textarea
138
- map_tsv:
139
- GOTerm red
140
- KeggPathway blue
141
- Gene yellow
142
-
143
- Another example use is to gather the `mutation/protein size` column on
144
- the `COSMIC Overview` analysis bellow, and map it to the `opacity`
145
- aesthetic of the genes (using the `id` as `field`).
146
-
147
- .window.fixed_size(id="#{id}_window")
148
-
149
-
150
- :deferjs
151
- var cytoscape_id = '##{id}';
152
-
153
- require_js(['/js/cytoscape/js/src/AC_OETags.js', '/js/cytoscape/js/src/cytoscapeweb.js', '/js/cytoscape'], function(){
154
-
155
- $('.preload').removeClass('preload')
156
-
157
- var tool = $(cytoscape_id).cytoscape_tool({
158
- knowledge_base: '#{kb_name}',
159
- namespace: '#{cytoscape.namespace}',
160
- entities: #{cytoscape.entities.to_json},
161
- network: #{cytoscape.network.to_json},
162
- aesthetics: #{cytoscape.aesthetics.to_json},
163
-
164
- node_click: function(event){
165
- var target = event.target;
166
-
167
- for (var i in target.data){
168
- var variable_name = i;
169
- var variable_value = target.data[i];
170
- }
171
-
172
- for (var i in target.data) {
173
- var variable_name = i;
174
- var variable_value = target.data[i];
175
- }
176
-
177
- var url = target.data.url;
178
-
179
- $('#modal').modal('show_url', url, undefined, function(){
180
- $('#modal').find(' > .header > .title').attr('entity', target.data.id).attr('type', target.data.entity_type)
181
- })
182
- return(false)
183
- },
184
-
185
- edge_click: function(event){
186
- var target = event.target;
187
- for (var i in target.data){
188
- var variable_name = i;
189
- var variable_value = target.data[i];
190
- }
191
-
192
- var pair = [target.data.source, target.data.target].join("~")
193
- tool.cytoscape_tool('show_info', "user", target.data.database, pair);
194
-
195
- return(false)
196
- }
197
-
198
- });
199
-
200
- require_js('/js/controls/context_menu', function(){
201
- cytoscape_context_menu(tool)
202
- })
203
-
204
- require_js('/js/controls/placement', function(){
205
- cytoscape_placement(tool)
206
- })
207
-
208
- require_js('/js/controls/save', function(){
209
- cytoscape_save(tool)
210
- })
211
-
212
-
213
- ///////////////////////////////////
214
- //{{{ NETWORK INIT
215
-
216
- tool.cytoscape_tool('draw');
217
-
218
- //////////////////////////////////////////////////////////////////
219
- //{{{ Controls
220
-
221
- $('.cytoscape_tool .database_edges input[type=submit]').click(function(){
222
- var form =$(this).parents('form').first()
223
- var inputs = form.find('.input.database.multiple')
224
- var databases = $.map(inputs.find('input[type=checkbox]:checked'), function(e){
225
- return $(e).attr('name').match(/\[(.*)\]/)[1];
226
- })
227
-
228
- tool.cytoscape_tool('set_edges', databases)
229
- tool.cytoscape_tool('draw');
230
-
231
- return false;
232
- })
233
-
234
- $('.cytoscape_tool .database_neighbours input[type=submit]').click(function(){
235
- var databases = $.map($(this).parents('form').first().find('.input.database').find('input[type=checkbox]:checked'), function(e){
236
- return $(e).attr('name').match(/\[(.*)\]/)[1];
237
- })
238
- var option = $(this).closest('form').find('select').find('option:selected');
239
- var database = option.attr('value')
240
-
241
- tool.cytoscape_tool('add_neighbours', database)
242
- tool.cytoscape_tool('draw');
243
-
244
- return false;
245
- })
246
-
247
-
248
- $('.cytoscape_tool .add_gene_list input[type=submit]').click(function(){
249
- var option = $(this).closest('form').find('select.favourite_lists').find('option:selected');
250
- var type = option.attr('attr-entity_type')
251
- var list_id = $(this).parents('form').first().find('select').val();
252
- var list = list_entities(type, list_id);
253
- var info = list_info(type, list_id);
254
-
255
- tool.cytoscape_tool('add_entities', type, list)
256
- tool.cytoscape_tool('draw');
257
-
258
- return false;
259
- })
260
-
261
- $('.cytoscape_tool .select_gene_list input[type=submit]').click(function(){
262
- var option = $(this).closest('form').find('select.favourite_lists').find('option:selected');
263
- var type = option.attr('attr-entity_type')
264
- var list_id = $(this).parents('form').first().find('select').val();
265
- var list = list_entities(type, list_id);
266
-
267
- tool.cytoscape_tool('select_entities', list)
268
-
269
- return false;
270
- })
271
-
272
- $('.cytoscape_tool .maps input[type=submit]').click(function(){
273
- var form = $(this).closest('form')
274
-
275
-
276
- var elem = form.first().find('div.input.elem select').val();
277
- var map_id = form.first().find('div.input.map select').val();
278
- var field = form.first().find('div.input.field input').val();
279
- var map_content = form.first().find('div.input.map_tsv textarea').val();
280
- var option = form.first().find('div.input.map option:selected');
281
- var type = option.attr('attr-entity_type')
282
- var column = form.first().find('div.input.map select').find('option:selected').attr('attr-column');
283
- var aesthetic = form.first().find('div.input.aesthetic select').val();
284
-
285
- var map;
286
-
287
- if (map_id == 'textarea'){
288
- map_content = "#: :type=:single#:sep=/\\s/#:identifiers=Hsa/jan2013\n" + map_content
289
- rbbt_job('TSVWorkflow', 'to_json', {tsv: map_content}, function(data){
290
- var map = JSON.parse(data)
291
- tool.cytoscape_tool('aesthetic', elem, aesthetic, map, field)
292
- tool.cytoscape_tool('draw')
293
- })
294
- }else{
295
- entity_map(type, column, map_id, function(map){
296
- tool.cytoscape_tool('aesthetic', elem, aesthetic, map, field)
297
- tool.cytoscape_tool('draw')
298
- });
299
- }
300
-
301
- return false;
302
- })
303
- })
304
- :javascript
305
- $('.item[data-tab]').tab()
306
- $('.item[data-tab=Close]').click(function(item){
307
- var tool = $(this).parents('.cytoscape_tool').first()
308
- tool.find('.tab.active, .item.active').removeClass('active')
309
- return false
310
- })
311
-
312
-