flammarion 0.1.13 → 0.1.14

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.
@@ -69,5 +69,49 @@ module Flammarion
69
69
  def layout(options)
70
70
  @engraving.send_json({action:'plot', id:@id, target: @target, layout: options})
71
71
  end
72
+
73
+ # Saves the plot as a static image. +block+ will be called with a hash
74
+ # argurment when the plot is finished being converted to an image
75
+ def save(options = {}, &block)
76
+ id = @engraving.make_id
77
+ @engraving.callbacks[id] = block
78
+ @engraving.send_json({action:'savePlot', id:@id, target:@target, callback_id: id, format: options})
79
+ end
80
+
81
+ # Converts the plot to a png image. If a block is given, it will be called
82
+ # with the png data. Otherwise this function will wait until the image has
83
+ # been created, and then return a string containing the png data
84
+ def to_png(options = {})
85
+ png = nil
86
+ save(options.merge({format: 'png'})) do |data|
87
+ d = data['data']
88
+ png = Base64.decode64(d[d.index(',') + 1..-1])
89
+ if block_given?
90
+ yield png
91
+ end
92
+ end
93
+ unless block_given?
94
+ sleep 0.1 while png.nil?
95
+ return png
96
+ end
97
+ end
98
+
99
+ # Converts the plot to an svg image. If a block is given, it will be called
100
+ # with the svg xml string. Otherwise this function will wait until the image has
101
+ # been created, and then return a string containing the svg xml string
102
+ def to_svg(options = {})
103
+ svg = nil
104
+ save(options.merge({format: 'svg'})) do |data|
105
+ d = data['data']
106
+ svg = URI.unescape(d[d.index(',') + 1 .. -1])
107
+ if block_given?
108
+ yield svg
109
+ end
110
+ end
111
+ unless block_given?
112
+ sleep 0.1 while svg.nil?
113
+ return svg
114
+ end
115
+ end
72
116
  end
73
117
  end
@@ -1,3 +1,3 @@
1
1
  module Flammarion
2
- VERSION = "0.1.13"
2
+ VERSION = "0.1.14"
3
3
  end
@@ -290,6 +290,7 @@ module Flammarion
290
290
  # @option options [Boolean] :coffee (true) If true, will compile +text+ from
291
291
  # CoffeeScript to JavaScript. If false, will pass text as plain JavaScript
292
292
  def script(text, options = {}, &block)
293
+ return script_src(text) if !options.fetch(:no_file, false) && File.exist?(text)
293
294
  data = options.fetch(:coffee, true) ? CoffeeScript.compile(text) : text
294
295
  id = @engraving.make_id
295
296
  d = nil
@@ -307,6 +308,14 @@ module Flammarion
307
308
  script(text, options.merge(coffee:false), &block)
308
309
  end
309
310
 
311
+ def script_src(src)
312
+ if File.exist?(src) then
313
+ html("<script>#{File.read(src)}</script>")
314
+ else
315
+ html("<script src='#{src}'></src>")
316
+ end
317
+ end
318
+
310
319
  # Sets CSS styles attributes on the current pane.
311
320
  # @overload style(attribute, value)
312
321
  # @param attribute [String] The css attribute to set. Currently does not
@@ -7975,6 +7975,23 @@ window.font_awesome_list = ["glass","music","search","envelope-o","heart","star"
7975
7975
  return Plotly.relayout(plotDiv[0], data);
7976
7976
  }
7977
7977
  }
7978
+ },
7979
+ savePlot: function(data) {
7980
+ var plotDiv, target;
7981
+ target = this.__parent.check_target(data);
7982
+ this.__plots || (this.__plots = {});
7983
+ plotDiv = target.find("#plot-" + data.id)[0];
7984
+ return Plotly.toImage(plotDiv, data.format).then((function(_this) {
7985
+ return function(imgData) {
7986
+ return _this.__parent.send({
7987
+ id: data.callback_id,
7988
+ action: 'callback',
7989
+ source: 'plot',
7990
+ data: imgData,
7991
+ original_msg: data
7992
+ });
7993
+ };
7994
+ })(this));
7978
7995
  }
7979
7996
  });
7980
7997
 
@@ -57,6 +57,23 @@
57
57
  return Plotly.relayout(plotDiv[0], data);
58
58
  }
59
59
  }
60
+ },
61
+ savePlot: function(data) {
62
+ var plotDiv, target;
63
+ target = this.__parent.check_target(data);
64
+ this.__plots || (this.__plots = {});
65
+ plotDiv = target.find("#plot-" + data.id)[0];
66
+ return Plotly.toImage(plotDiv, data.format).then((function(_this) {
67
+ return function(imgData) {
68
+ return _this.__parent.send({
69
+ id: data.callback_id,
70
+ action: 'callback',
71
+ source: 'plot',
72
+ data: imgData,
73
+ original_msg: data
74
+ });
75
+ };
76
+ })(this));
60
77
  }
61
78
  });
62
79
 
@@ -36,3 +36,15 @@ $.extend WSClient.prototype.actions,
36
36
  plotDiv[0].data = data.data
37
37
  Plotly.redraw(plotDiv[0])
38
38
  Plotly.relayout(plotDiv[0], data) if data.layout
39
+ savePlot: (data) ->
40
+ target = @__parent.check_target(data)
41
+ @__plots ||= {}
42
+ plotDiv = target.find("#plot-#{data.id}")[0]
43
+ Plotly.toImage(plotDiv, data.format).then (imgData) =>
44
+ @__parent.send({
45
+ id:data.callback_id
46
+ action:'callback'
47
+ source:'plot'
48
+ data: imgData
49
+ original_msg:data
50
+ })
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flammarion
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.13
4
+ version: 0.1.14
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-10-01 00:00:00.000000000 Z
12
+ date: 2016-11-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rubame