sketchily 1.3.0 → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +14 -6
- data/app/helpers/sketchily_helper.rb +26 -0
- data/app/helpers/sketchily_helper.rb~ +36 -0
- data/app/views/sketchily/_embed.html.erb +2 -2
- data/app/views/sketchily/_embed.html.erb~ +3 -3
- data/app/views/sketchily/_embed.js.erb +3 -3
- data/app/views/sketchily/_embed.js.erb~ +8 -6
- data/lib/sketchily/version.rb +1 -1
- data/lib/sketchily/version.rb~ +1 -1
- data/lib/sketchily.rb +1 -1
- data/lib/sketchily.rb~ +1 -1
- data/vendor/assets/svg-edit-2.6/extensions/ext-imagelib.js~ +453 -0
- data/vendor/assets/svg-edit-2.6/svg-editor.js +1 -1
- data/vendor/assets/svg-edit-2.6/svg-editor.js~ +1 -2
- data/vendor/assets/svg-edit-2.6/svgcanvas.js +4 -4
- data/vendor/assets/svg-edit-2.6/svgcanvas.js~ +8775 -0
- data/vendor/assets/svg-edit-2.6/svgedit.compiled.js +1 -1
- data/vendor/assets/svg-edit-2.6/svgedit.compiled.js~ +1 -1
- metadata +20 -1
data/README.md
CHANGED
@@ -59,8 +59,8 @@ Currently available options are:
|
|
59
59
|
- `width` total width of editor
|
60
60
|
- `height` total height of editor
|
61
61
|
|
62
|
-
- `bkgd_color` canvas background color (3 or 6 hex digit html color format; not saved with image)
|
63
|
-
- `bkgd_url` canvas background
|
62
|
+
- `bkgd_color` canvas background color (3 or 6 hex digit html color format; not saved with image; see sketchily_show)
|
63
|
+
- `bkgd_url` canvas background image url (not saved with image; see bkgd_file option for sketchily_show)
|
64
64
|
|
65
65
|
- `canvas_width` initial canvas width
|
66
66
|
- `canvas_height` initial canvas height
|
@@ -68,8 +68,9 @@ Currently available options are:
|
|
68
68
|
|
69
69
|
- `hide_rulers` true if you want to hide the canvas rulers
|
70
70
|
- `hide_menu` true if you want svg-edit's menu to be hidden
|
71
|
-
- `hide_image_tool` true if you want to hide the image tool button
|
72
|
-
|
71
|
+
- `hide_image_tool` true if you want to hide the `image tool` button
|
72
|
+
|
73
|
+
- `show_hyperlink_tool` true if you want to show the `hyperlink tool` button (see explanation below)
|
73
74
|
|
74
75
|
- `show_layers` (true if you want the layer selector to display automatically when the editor is loaded)
|
75
76
|
|
@@ -81,6 +82,10 @@ Currently available options are:
|
|
81
82
|
|
82
83
|
- other standard html attributes for the input tag
|
83
84
|
|
85
|
+
The `hyperlink tool` is disabled by default, as embedded links and scripts do not work with the display method used by sketchily_show.
|
86
|
+
The sketchily_show helper will display svg's inside of <img> tags, which are treated as static images by most browsers.
|
87
|
+
We consider this to be a necessary precaution when dealing with user-generated svg's.
|
88
|
+
|
84
89
|
Sketchily requires a unique `id` (by default, this is set in the same way as hidden_field) each time it is called in the same page.
|
85
90
|
However, some uses of `form_for` can generate repeated ids (e.g. multiple `form_for @my_object.new` in the same page).
|
86
91
|
In those cases, you need to generate and specify your own unique ids. A possible solution is to use one of the many uuid generator gems.
|
@@ -103,8 +108,11 @@ Example usage (haml):
|
|
103
108
|
|
104
109
|
Currently available options are:
|
105
110
|
|
106
|
-
- `width`
|
107
|
-
- `height`
|
111
|
+
- `width` width of resulting image object
|
112
|
+
- `height` height of resulting image object
|
113
|
+
|
114
|
+
- `bkgd_color` background color (3 or 6 hex digit html color format)
|
115
|
+
- `bkgd_file` background image file path (must be a local image file)
|
108
116
|
|
109
117
|
Passing only one of those options should keep the aspect ratio of the SVG constant in most browsers.
|
110
118
|
|
@@ -1,5 +1,31 @@
|
|
1
1
|
module SketchilyHelper
|
2
2
|
def sketchily_show(uri, options = {})
|
3
|
+
if options[:bkgd_color] || options[:bkgd_file]
|
4
|
+
require 'nokogiri'
|
5
|
+
doc = Nokogiri::XML(Base64.decode64(uri)) {|xml| xml.noblanks}
|
6
|
+
|
7
|
+
if options[:bkgd_file]
|
8
|
+
data_uri = "data:image/svg+xml;base64,#{Base64.strict_encode64(open(options[:bkgd_file]).read)}"
|
9
|
+
bkgd_file_node = Nokogiri::XML::Node.new 'g', doc
|
10
|
+
Nokogiri::XML::Builder.with(bkgd_file_node) do |xml|
|
11
|
+
xml.title 'Background Image Layer'
|
12
|
+
xml.image :id => 'background_image', :width => '100%', :height => '100%', :preserveAspectRatio => 'xMinYMin', 'xlink:href' => data_uri
|
13
|
+
end
|
14
|
+
doc.at('g').before(bkgd_file_node)
|
15
|
+
end
|
16
|
+
|
17
|
+
if options[:bkgd_color]
|
18
|
+
bkgd_color_node = Nokogiri::XML::Node.new 'g', doc
|
19
|
+
Nokogiri::XML::Builder.with(bkgd_color_node) do |xml|
|
20
|
+
xml.title 'Background Color Layer'
|
21
|
+
xml.rect :id => 'background_color', :width => '100%', :height => '100%', :fill => "##{options[:bkgd_color]}"
|
22
|
+
end
|
23
|
+
doc.at('g').before(bkgd_color_node)
|
24
|
+
end
|
25
|
+
print doc.to_xml
|
26
|
+
uri = Base64.strict_encode64(doc.to_xml)
|
27
|
+
end
|
28
|
+
|
3
29
|
"<img src='data:image/svg+xml;base64,#{uri}' #{"width='#{options[:width]}'" if options[:width]} #{"height='#{options[:height]}'" if options[:height]}/>".html_safe
|
4
30
|
end
|
5
31
|
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module SketchilyHelper
|
2
|
+
def sketchily_show(uri, options = {})
|
3
|
+
if options[:bkgd_color] || options[:bkgd_file]
|
4
|
+
require 'nokogiri'
|
5
|
+
doc = Nokogiri::XML(Base64.decode64(uri)) {|xml| xml.noblanks}
|
6
|
+
|
7
|
+
if options[:bkgd_file]
|
8
|
+
data_uri = "data:image;base64,#{Base64.strict_encode64(open(options[:bkgd_file]).read)}"
|
9
|
+
bkgd_file_node = Nokogiri::XML::Node.new 'g', doc
|
10
|
+
Nokogiri::XML::Builder.with(bkgd_file_node) do |xml|
|
11
|
+
xml.title 'Background Image Layer'
|
12
|
+
xml.image :id => 'background_image', :width => '100%', :height => '100%', :preserveAspectRatio => 'xMinYMin', 'xlink:href' => data_uri
|
13
|
+
end
|
14
|
+
doc.at('g').before(bkgd_file_node)
|
15
|
+
end
|
16
|
+
|
17
|
+
if options[:bkgd_color]
|
18
|
+
bkgd_color_node = Nokogiri::XML::Node.new 'g', doc
|
19
|
+
Nokogiri::XML::Builder.with(bkgd_color_node) do |xml|
|
20
|
+
xml.title 'Background Color Layer'
|
21
|
+
xml.rect :id => 'background_color', :width => '100%', :height => '100%', :fill => "##{options[:bkgd_color]}"
|
22
|
+
end
|
23
|
+
doc.at('g').before(bkgd_color_node)
|
24
|
+
end
|
25
|
+
print doc.to_xml
|
26
|
+
uri = Base64.strict_encode64(doc.to_xml)
|
27
|
+
end
|
28
|
+
|
29
|
+
"<img src='data:image/svg+xml;base64,#{uri}' #{"width='#{options[:width]}'" if options[:width]} #{"height='#{options[:height]}'" if options[:height]}/>".html_safe
|
30
|
+
end
|
31
|
+
|
32
|
+
def svg_show(uri, options = {})
|
33
|
+
sketchily_show(uri, options)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
@@ -13,7 +13,7 @@
|
|
13
13
|
hide_rulers ||= false
|
14
14
|
hide_menu ||= false
|
15
15
|
hide_image_tool ||= false
|
16
|
-
|
16
|
+
show_hyperlink_tool ||= false
|
17
17
|
show_layers ||= false
|
18
18
|
url ||= nil
|
19
19
|
%>
|
@@ -47,7 +47,7 @@
|
|
47
47
|
:value => value,
|
48
48
|
:hide_menu => hide_menu,
|
49
49
|
:hide_image_tool => hide_image_tool,
|
50
|
-
:
|
50
|
+
:show_hyperlink_tool => show_hyperlink_tool,
|
51
51
|
:url => url} %>
|
52
52
|
</script>
|
53
53
|
|
@@ -5,7 +5,7 @@
|
|
5
5
|
# Additionally, they may override the following variables:
|
6
6
|
width ||= "750px"
|
7
7
|
height ||= "650px"
|
8
|
-
bkgd_color ||= "
|
8
|
+
bkgd_color ||= "FFF"
|
9
9
|
bkgd_url ||= ""
|
10
10
|
canvas_width ||= 640
|
11
11
|
canvas_height ||= 480
|
@@ -13,7 +13,7 @@
|
|
13
13
|
hide_rulers ||= false
|
14
14
|
hide_menu ||= false
|
15
15
|
hide_image_tool ||= false
|
16
|
-
|
16
|
+
show_hyperlink_tool ||= false
|
17
17
|
show_layers ||= false
|
18
18
|
url ||= nil
|
19
19
|
%>
|
@@ -46,8 +46,8 @@
|
|
46
46
|
:locals => {:id => id,
|
47
47
|
:value => value,
|
48
48
|
:hide_menu => hide_menu,
|
49
|
+
:show_hyperlink_tool => show_hyperlink_tool,
|
49
50
|
:hide_image_tool => hide_image_tool,
|
50
|
-
:hide_hyperlink_tool => hide_hyperlink_tool,
|
51
51
|
:url => url} %>
|
52
52
|
</script>
|
53
53
|
|
@@ -5,7 +5,7 @@
|
|
5
5
|
# value
|
6
6
|
# hide_menu
|
7
7
|
# hide_image_tool
|
8
|
-
#
|
8
|
+
# show_hyperlink_tool
|
9
9
|
# url %>
|
10
10
|
|
11
11
|
var svgCanvas_<%= id %> = null;
|
@@ -48,13 +48,13 @@ function initEmbed_<%= id %>() {
|
|
48
48
|
var toolsTop = doc.getElementById('tools_top');
|
49
49
|
toolsTop.style.left = '5px';
|
50
50
|
<% end %>
|
51
|
-
|
51
|
+
|
52
52
|
<% if hide_image_tool %>
|
53
53
|
var imageTool = doc.getElementById('tool_image');
|
54
54
|
imageTool.parentNode.removeChild(imageTool);
|
55
55
|
<% end %>
|
56
56
|
|
57
|
-
<%
|
57
|
+
<% unless show_hyperlink_tool %>
|
58
58
|
var hyperlinkTool = doc.getElementById('tool_make_link');
|
59
59
|
hyperlinkTool.parentNode.removeChild(hyperlinkTool);
|
60
60
|
<% end %>
|
@@ -5,7 +5,7 @@
|
|
5
5
|
# value
|
6
6
|
# hide_menu
|
7
7
|
# hide_image_tool
|
8
|
-
#
|
8
|
+
# show_hyperlink_tool
|
9
9
|
# url %>
|
10
10
|
|
11
11
|
var svgCanvas_<%= id %> = null;
|
@@ -48,19 +48,21 @@ function initEmbed_<%= id %>() {
|
|
48
48
|
var toolsTop = doc.getElementById('tools_top');
|
49
49
|
toolsTop.style.left = '5px';
|
50
50
|
<% end %>
|
51
|
+
|
52
|
+
<% unless show_hyperlink_tool %>
|
53
|
+
var hyperlinkTool = doc.getElementById('tool_make_link');
|
54
|
+
hyperlinkTool.parentNode.removeChild(hyperlinkTool);
|
55
|
+
<% end %>
|
51
56
|
|
52
57
|
<% if hide_image_tool %>
|
53
58
|
var imageTool = doc.getElementById('tool_image');
|
54
59
|
imageTool.parentNode.removeChild(imageTool);
|
55
60
|
<% end %>
|
56
61
|
|
57
|
-
<%
|
58
|
-
|
59
|
-
hyperlinkTool.parentNode.removeChild(hyperlinkTool);
|
62
|
+
<% unless url %>
|
63
|
+
svgCanvas_<%= id %>.setSvgString(sketchily_decode64("<%= value.try(:squish) %>"));
|
60
64
|
<% end %>
|
61
65
|
|
62
|
-
svgCanvas_<%= id %>.setSvgString(sketchily_decode64("<%= value.try(:squish) %>"));
|
63
|
-
|
64
66
|
attachSubmitHandler_<%= id %>();
|
65
67
|
}
|
66
68
|
|
data/lib/sketchily/version.rb
CHANGED
data/lib/sketchily/version.rb~
CHANGED
data/lib/sketchily.rb
CHANGED
@@ -5,7 +5,7 @@ require "sketchily/sketchily_tag"
|
|
5
5
|
module Sketchily
|
6
6
|
ASSET_FILES = %w(sketchily.css sketchily.js sketchily_embed.js canvg/canvg.js canvg/rgbcolor.js extensions/ext-*.js locale/lang.*.js)
|
7
7
|
|
8
|
-
SKETCHILY_OPTIONS = [:width, :height, :bkgd_color, :bkgd_url, :canvas_width, :canvas_height, :canvas_expansion, :hide_rulers, :hide_menu, :hide_image_tool, :
|
8
|
+
SKETCHILY_OPTIONS = [:width, :height, :bkgd_color, :bkgd_url, :canvas_width, :canvas_height, :canvas_expansion, :hide_rulers, :hide_menu, :hide_image_tool, :show_hyperlink_tool, :show_layers, :url]
|
9
9
|
TAG_OPTIONS = [:id, :value, :index]
|
10
10
|
OPTIONS = SKETCHILY_OPTIONS + TAG_OPTIONS
|
11
11
|
|
data/lib/sketchily.rb~
CHANGED
@@ -5,7 +5,7 @@ require "sketchily/sketchily_tag"
|
|
5
5
|
module Sketchily
|
6
6
|
ASSET_FILES = %w(sketchily.css sketchily.js sketchily_embed.js canvg/canvg.js canvg/rgbcolor.js extensions/ext-*.js locale/lang.*.js)
|
7
7
|
|
8
|
-
SKETCHILY_OPTIONS = [:width, :height, :canvas_width, :canvas_height, :canvas_expansion, :hide_rulers, :hide_menu, :
|
8
|
+
SKETCHILY_OPTIONS = [:width, :height, :bkgd_color, :bkgd_url, :canvas_width, :canvas_height, :canvas_expansion, :hide_rulers, :hide_menu, :show_hyperlink_tool, :hide_image_tool, :show_layers, :url]
|
9
9
|
TAG_OPTIONS = [:id, :value, :index]
|
10
10
|
OPTIONS = SKETCHILY_OPTIONS + TAG_OPTIONS
|
11
11
|
|