sketchily 1.1.0 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +4 -0
- data/Rakefile +5 -4
- data/app/assets/javascripts/sketchily_embed.js +1 -1
- data/app/assets/javascripts/sketchily_embed.js~ +0 -3
- data/app/views/sketchily/_embed.html.erb +27 -4
- data/app/views/sketchily/_embed.html.erb~ +27 -5
- data/app/views/sketchily/_embed.js.erb +6 -3
- data/app/views/sketchily/_embed.js.erb~ +4 -4
- data/lib/sketchily.rb +1 -10
- data/lib/sketchily.rb~ +2 -11
- data/lib/sketchily/sketchily.rb +18 -6
- data/lib/sketchily/sketchily.rb~ +19 -6
- data/lib/sketchily/sketchily_tag.rb +9 -3
- data/lib/sketchily/sketchily_tag.rb~ +10 -3
- data/lib/sketchily/version.rb +1 -1
- data/lib/sketchily/version.rb~ +1 -1
- data/spec/dummy/app/controllers/sketchily_controller.rb +9 -0
- data/spec/dummy/app/models/drawing.rb +2 -0
- data/spec/dummy/app/models/drawing.rb~ +3 -0
- data/spec/dummy/app/views/sketchily/sketchily.html.erb +3 -0
- data/spec/dummy/app/views/sketchily/sketchily_tag.html.erb +3 -0
- data/spec/dummy/config/routes.rb +3 -56
- data/spec/dummy/config/routes.rb~ +5 -0
- data/spec/dummy/db/development.sqlite3 +0 -0
- data/spec/dummy/db/migrate/20130211122120_create_drawings.rb +7 -0
- data/spec/dummy/db/schema.rb +20 -0
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/log/development.log +192 -0
- data/spec/dummy/log/test.log +75 -0
- data/spec/features/sketchily.rb~ +9 -0
- data/spec/features/sketchily_spec.rb +10 -0
- data/spec/features/sketchily_spec.rb~ +9 -0
- data/spec/features/sketchily_tag.rb~ +9 -0
- data/spec/features/sketchily_tag_spec.rb +10 -0
- data/spec/features/sketchily_tag_spec.rb~ +9 -0
- data/spec/features/user_views_sketchily_spec.rb~ +15 -0
- data/spec/{spec_helper.rb → minitest_helper.rb} +2 -1
- data/spec/spec_helper.rb~ +19 -0
- data/vendor/assets/javascripts/base64.js +95 -0
- data/vendor/assets/javascripts/base64.js~ +95 -0
- metadata +76 -4
data/README.md
CHANGED
@@ -68,6 +68,10 @@ Currently available options are:
|
|
68
68
|
- `hide_image_tool` true if you want to hide the image tool button
|
69
69
|
- `hide_hyperlink_tool` true if you want to hide the hyperlink tool button
|
70
70
|
|
71
|
+
- `show_layers` (true if you want the layer selector to display automatically when the editor is loaded)
|
72
|
+
|
73
|
+
- `url` override contents of the canvas with the svg file in the given url (careful: changes lost whenever editor is loaded)
|
74
|
+
|
71
75
|
- `id` override the default id (see explanation below)
|
72
76
|
- `value` override the default value (the svg itself; can be useful when using form_for)
|
73
77
|
- `index` override the default index (affects the tag name; can be useful when using form_for)
|
data/Rakefile
CHANGED
@@ -16,11 +16,11 @@ RDoc::Task.new(:rdoc) do |rdoc|
|
|
16
16
|
rdoc.rdoc_dir = 'rdoc'
|
17
17
|
rdoc.title = 'Sketchily'
|
18
18
|
rdoc.options << '--line-numbers'
|
19
|
-
rdoc.rdoc_files.include('README.
|
19
|
+
rdoc.rdoc_files.include('README.md')
|
20
20
|
rdoc.rdoc_files.include('lib/**/*.rb')
|
21
21
|
end
|
22
22
|
|
23
|
-
APP_RAKEFILE = File.expand_path("../
|
23
|
+
APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
|
24
24
|
load 'rails/tasks/engine.rake'
|
25
25
|
|
26
26
|
|
@@ -30,9 +30,10 @@ Bundler::GemHelper.install_tasks
|
|
30
30
|
require 'rake/testtask'
|
31
31
|
|
32
32
|
Rake::TestTask.new(:test) do |t|
|
33
|
+
Rake::Task['app:db:test:prepare'].invoke
|
33
34
|
t.libs << 'lib'
|
34
|
-
t.libs << '
|
35
|
-
t.pattern = '
|
35
|
+
t.libs << 'spec'
|
36
|
+
t.pattern = 'spec/**/*_spec.rb'
|
36
37
|
t.verbose = false
|
37
38
|
end
|
38
39
|
|
@@ -1,2 +1,2 @@
|
|
1
1
|
//= require embedapi
|
2
|
-
//= require
|
2
|
+
//= require base64
|
@@ -11,12 +11,33 @@
|
|
11
11
|
hide_rulers ||= false
|
12
12
|
hide_menu ||= false
|
13
13
|
hide_image_tool ||= false
|
14
|
-
hide_hyperlink_tool ||= false
|
14
|
+
hide_hyperlink_tool ||= false
|
15
|
+
show_layers ||= false
|
16
|
+
url ||= nil
|
17
|
+
%>
|
18
|
+
|
19
|
+
<% iframe_src = URI.parse("/assets/svg-editor.html")
|
20
|
+
|
21
|
+
query_hash = {:dimensions => [canvas_width, canvas_height].join(','),
|
22
|
+
:canvas_expansion => canvas_expansion,
|
23
|
+
:showRulers => !hide_rulers,
|
24
|
+
:showlayers => show_layers}
|
25
|
+
if url
|
26
|
+
query_hash[:url] = url
|
27
|
+
else
|
28
|
+
query_hash[:source] = nil
|
29
|
+
end
|
30
|
+
|
31
|
+
iframe_src.query = query_hash.map{|k,v| "#{k}=#{v}"}.join('&') %>
|
15
32
|
|
16
33
|
<%= javascript_include_tag "sketchily_embed" %>
|
17
34
|
|
18
|
-
|
19
|
-
|
35
|
+
<%= content_tag(:iframe,
|
36
|
+
"svg-edit",
|
37
|
+
:src => iframe_src.to_s.html_safe,
|
38
|
+
:width => width,
|
39
|
+
:height => height,
|
40
|
+
:id => "svgedit_#{id}") %>
|
20
41
|
|
21
42
|
<script type="text/javascript">
|
22
43
|
<%= render :partial => "sketchily/embed",
|
@@ -25,5 +46,7 @@
|
|
25
46
|
:value => value,
|
26
47
|
:hide_menu => hide_menu,
|
27
48
|
:hide_image_tool => hide_image_tool,
|
28
|
-
:hide_hyperlink_tool => hide_hyperlink_tool
|
49
|
+
:hide_hyperlink_tool => hide_hyperlink_tool,
|
50
|
+
:url => url} %>
|
29
51
|
</script>
|
52
|
+
|
@@ -11,10 +11,34 @@
|
|
11
11
|
hide_rulers ||= false
|
12
12
|
hide_menu ||= false
|
13
13
|
hide_image_tool ||= false
|
14
|
-
hide_hyperlink_tool ||= false
|
14
|
+
hide_hyperlink_tool ||= false
|
15
|
+
show_layers ||= false
|
16
|
+
url ||= nil
|
17
|
+
%>
|
18
|
+
|
19
|
+
<% iframe_src = URI.parse("/assets/svg-editor.html")
|
20
|
+
|
21
|
+
query_hash = {:dimensions => [canvas_width, canvas_height].join(','),
|
22
|
+
:canvas_expansion => canvas_expansion,
|
23
|
+
:showRulers => !hide_rulers,
|
24
|
+
:showlayers => show_layers}
|
25
|
+
if url
|
26
|
+
query_hash[:url] = url
|
27
|
+
else
|
28
|
+
query_hash[:source] = nil
|
29
|
+
end
|
30
|
+
|
31
|
+
iframe_src.query = query_hash.map{|k,v| "#{k}=#{v}"}.join('&') %>
|
15
32
|
|
16
33
|
<%= javascript_include_tag "sketchily_embed" %>
|
17
34
|
|
35
|
+
<%= content_tag(:iframe,
|
36
|
+
"svg-edit",
|
37
|
+
:src => iframe_src.to_s.html_safe,
|
38
|
+
:width => width,
|
39
|
+
:height => height,
|
40
|
+
:id => "svgedit_#{id}") %>
|
41
|
+
|
18
42
|
<script type="text/javascript">
|
19
43
|
<%= render :partial => "sketchily/embed",
|
20
44
|
:formats => :js,
|
@@ -22,8 +46,6 @@
|
|
22
46
|
:value => value,
|
23
47
|
:hide_menu => hide_menu,
|
24
48
|
:hide_image_tool => hide_image_tool,
|
25
|
-
:hide_hyperlink_tool => hide_hyperlink_tool
|
49
|
+
:hide_hyperlink_tool => hide_hyperlink_tool,
|
50
|
+
:url => url} %>
|
26
51
|
</script>
|
27
|
-
|
28
|
-
<iframe src="/assets/svg-editor.html?source=&dimensions=<%= "#{canvas_width},#{canvas_height}" %>&canvas_expansion=<%= canvas_expansion %>&showRulers=<%= !hide_rulers %>"
|
29
|
-
width="<%= width %>" height="<%= height %>" id="svgedit_<%= id %>"></iframe>
|
@@ -5,7 +5,8 @@
|
|
5
5
|
# value
|
6
6
|
# hide_menu
|
7
7
|
# hide_image_tool
|
8
|
-
# hide_hyperlink_tool
|
8
|
+
# hide_hyperlink_tool
|
9
|
+
# url %>
|
9
10
|
|
10
11
|
var svgCanvas_<%= id %> = null;
|
11
12
|
|
@@ -24,7 +25,7 @@ function handleSvgData_<%= id %>(data, error) {
|
|
24
25
|
alert('Error: ' + error);
|
25
26
|
}
|
26
27
|
else {
|
27
|
-
$("input#<%= id %>").attr("value",
|
28
|
+
$("input#<%= id %>").attr("value", sketchily_encode64("<?xml version=\"1.0\"?>\n" + data));
|
28
29
|
$("input#<%= id %>").closest("form").off("submit", submitHandler_<%= id %>);
|
29
30
|
$("input#<%= id %>").closest("form").one("submit", attachSubmitHandler_<%= id %>);
|
30
31
|
$("input#<%= id %>").closest("form").submit();
|
@@ -58,7 +59,9 @@ function initEmbed_<%= id %>() {
|
|
58
59
|
hyperlinkTool.parentNode.removeChild(hyperlinkTool);
|
59
60
|
<% end %>
|
60
61
|
|
61
|
-
|
62
|
+
<% unless url %>
|
63
|
+
svgCanvas_<%= id %>.setSvgString(sketchily_decode64("<%= value.try(:squish) %>"));
|
64
|
+
<% end %>
|
62
65
|
|
63
66
|
attachSubmitHandler_<%= id %>();
|
64
67
|
}
|
@@ -5,7 +5,8 @@
|
|
5
5
|
# value
|
6
6
|
# hide_menu
|
7
7
|
# hide_image_tool
|
8
|
-
# hide_hyperlink_tool
|
8
|
+
# hide_hyperlink_tool
|
9
|
+
# url %>
|
9
10
|
|
10
11
|
var svgCanvas_<%= id %> = null;
|
11
12
|
|
@@ -24,9 +25,8 @@ function handleSvgData_<%= id %>(data, error) {
|
|
24
25
|
alert('Error: ' + error);
|
25
26
|
}
|
26
27
|
else {
|
27
|
-
$("input#<%= id %>").attr("value",
|
28
|
+
$("input#<%= id %>").attr("value", sketchily_encode64("<?xml version=\"1.0\"?>\n" + data));
|
28
29
|
$("input#<%= id %>").closest("form").off("submit", submitHandler_<%= id %>);
|
29
|
-
waitingForCallback_<%= id %> = false;
|
30
30
|
$("input#<%= id %>").closest("form").one("submit", attachSubmitHandler_<%= id %>);
|
31
31
|
$("input#<%= id %>").closest("form").submit();
|
32
32
|
}
|
@@ -59,7 +59,7 @@ function initEmbed_<%= id %>() {
|
|
59
59
|
hyperlinkTool.parentNode.removeChild(hyperlinkTool);
|
60
60
|
<% end %>
|
61
61
|
|
62
|
-
svgCanvas_<%= id %>.setSvgString(
|
62
|
+
svgCanvas_<%= id %>.setSvgString(sketchily_decode64("<%= value.try(:squish) %>"));
|
63
63
|
|
64
64
|
attachSubmitHandler_<%= id %>();
|
65
65
|
}
|
data/lib/sketchily.rb
CHANGED
@@ -5,21 +5,12 @@ 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, :hide_image_tool, :hide_hyperlink_tool]
|
8
|
+
SKETCHILY_OPTIONS = [:width, :height, :canvas_width, :canvas_height, :canvas_expansion, :hide_rulers, :hide_menu, :hide_image_tool, :hide_hyperlink_tool, :show_layers, :url]
|
9
9
|
TAG_OPTIONS = [:id, :value, :index]
|
10
10
|
OPTIONS = SKETCHILY_OPTIONS + TAG_OPTIONS
|
11
11
|
|
12
|
-
ROOT = File.expand_path('../..', __FILE__)
|
13
|
-
|
14
|
-
VIEW = ActionView::Base.new
|
15
|
-
VIEW.view_paths << "#{ROOT}/app/views"
|
16
|
-
|
17
12
|
ActiveSupport.on_load(:before_initialize) do
|
18
13
|
Rails.configuration.assets.precompile += Sketchily::ASSET_FILES
|
19
14
|
end
|
20
|
-
|
21
|
-
def self.render(options = {}, local_assigns = {}, &block)
|
22
|
-
VIEW.render(options, local_assigns, &block).html_safe
|
23
|
-
end
|
24
15
|
end
|
25
16
|
|
data/lib/sketchily.rb~
CHANGED
@@ -5,21 +5,12 @@ 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, :hide_image_tool, :hide_hyperlink_tool]
|
9
|
-
TAG_OPTIONS = [:id, :value]
|
8
|
+
SKETCHILY_OPTIONS = [:width, :height, :canvas_width, :canvas_height, :canvas_expansion, :hide_rulers, :hide_menu, :hide_image_tool, :hide_hyperlink_tool, :url, :show_layers]
|
9
|
+
TAG_OPTIONS = [:id, :value, :index]
|
10
10
|
OPTIONS = SKETCHILY_OPTIONS + TAG_OPTIONS
|
11
11
|
|
12
|
-
ROOT = File.expand_path('../..', __FILE__)
|
13
|
-
|
14
|
-
VIEW = ActionView::Base.new
|
15
|
-
VIEW.view_paths << "#{ROOT}/app/views"
|
16
|
-
|
17
12
|
ActiveSupport.on_load(:before_initialize) do
|
18
13
|
Rails.configuration.assets.precompile += Sketchily::ASSET_FILES
|
19
14
|
end
|
20
|
-
|
21
|
-
def self.render(options = {}, local_assigns = {}, &block)
|
22
|
-
VIEW.render(options, local_assigns, &block).html_safe
|
23
|
-
end
|
24
15
|
end
|
25
16
|
|
data/lib/sketchily/sketchily.rb
CHANGED
@@ -1,9 +1,15 @@
|
|
1
1
|
module Sketchily
|
2
2
|
module FormBuilderInstanceMethods
|
3
3
|
def sketchily(method, options = {})
|
4
|
-
|
5
|
-
:
|
6
|
-
|
4
|
+
@template.render(
|
5
|
+
:partial => "sketchily/sketchily",
|
6
|
+
:locals => {
|
7
|
+
:template => @template,
|
8
|
+
:object_name => @object_name,
|
9
|
+
:method => method,
|
10
|
+
:options => objectify_options(options)
|
11
|
+
}
|
12
|
+
)
|
7
13
|
end
|
8
14
|
|
9
15
|
def svg_edit(method, options = {})
|
@@ -13,9 +19,15 @@ module Sketchily
|
|
13
19
|
|
14
20
|
module ActionViewBaseInstanceMethods
|
15
21
|
def sketchily(object_name, method, options = {})
|
16
|
-
|
17
|
-
:
|
18
|
-
|
22
|
+
self.render(
|
23
|
+
:partial => "sketchily/sketchily",
|
24
|
+
:locals => {
|
25
|
+
:template => self,
|
26
|
+
:object_name => object_name,
|
27
|
+
:method => method,
|
28
|
+
:options => options
|
29
|
+
}
|
30
|
+
)
|
19
31
|
end
|
20
32
|
|
21
33
|
def svg_edit(object_name, method, options = {})
|
data/lib/sketchily/sketchily.rb~
CHANGED
@@ -1,9 +1,16 @@
|
|
1
1
|
module Sketchily
|
2
2
|
module FormBuilderInstanceMethods
|
3
3
|
def sketchily(method, options = {})
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
@template ||= self
|
5
|
+
@template.render(
|
6
|
+
:partial => "sketchily/sketchily",
|
7
|
+
:locals => {
|
8
|
+
:template => @template,
|
9
|
+
:object_name => @object_name,
|
10
|
+
:method => method,
|
11
|
+
:options => objectify_options(options)
|
12
|
+
}
|
13
|
+
)
|
7
14
|
end
|
8
15
|
|
9
16
|
def svg_edit(method, options = {})
|
@@ -13,9 +20,15 @@ module Sketchily
|
|
13
20
|
|
14
21
|
module ActionViewBaseInstanceMethods
|
15
22
|
def sketchily(object_name, method, options = {})
|
16
|
-
|
17
|
-
:
|
18
|
-
|
23
|
+
self.render(
|
24
|
+
:partial => "sketchily/sketchily",
|
25
|
+
:locals => {
|
26
|
+
:template => self,
|
27
|
+
:object_name => object_name,
|
28
|
+
:method => method,
|
29
|
+
:options => options
|
30
|
+
}
|
31
|
+
)
|
19
32
|
end
|
20
33
|
|
21
34
|
def svg_edit(object_name, method, options = {})
|
@@ -1,9 +1,15 @@
|
|
1
1
|
module SketchilyTag
|
2
2
|
module ActionViewBaseInstanceMethods
|
3
3
|
def sketchily_tag(name, value = nil, options = {})
|
4
|
-
|
5
|
-
:
|
6
|
-
|
4
|
+
self.render(
|
5
|
+
:partial => "sketchily/sketchily_tag",
|
6
|
+
:locals => {
|
7
|
+
:name => name,
|
8
|
+
:id => sanitize_to_id(name),
|
9
|
+
:value => value,
|
10
|
+
:options => options
|
11
|
+
}
|
12
|
+
)
|
7
13
|
end
|
8
14
|
|
9
15
|
def svg_edit_tag(name, value = nil, options = {})
|
@@ -1,9 +1,16 @@
|
|
1
1
|
module SketchilyTag
|
2
2
|
module ActionViewBaseInstanceMethods
|
3
3
|
def sketchily_tag(name, value = nil, options = {})
|
4
|
-
|
5
|
-
:
|
6
|
-
|
4
|
+
self.render(
|
5
|
+
:partial => "sketchily/sketchily_tag",
|
6
|
+
:locals => {
|
7
|
+
:template => self,
|
8
|
+
:name => name,
|
9
|
+
:id => sanitize_to_id(name),
|
10
|
+
:value => value,
|
11
|
+
:options => options
|
12
|
+
}
|
13
|
+
)
|
7
14
|
end
|
8
15
|
|
9
16
|
def svg_edit_tag(name, value = nil, options = {})
|
data/lib/sketchily/version.rb
CHANGED
data/lib/sketchily/version.rb~
CHANGED
data/spec/dummy/config/routes.rb
CHANGED
@@ -1,58 +1,5 @@
|
|
1
1
|
Dummy::Application.routes.draw do
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
# Sample of regular route:
|
6
|
-
# match 'products/:id' => 'catalog#view'
|
7
|
-
# Keep in mind you can assign values other than :controller and :action
|
8
|
-
|
9
|
-
# Sample of named route:
|
10
|
-
# match 'products/:id/purchase' => 'catalog#purchase', :as => :purchase
|
11
|
-
# This route can be invoked with purchase_url(:id => product.id)
|
12
|
-
|
13
|
-
# Sample resource route (maps HTTP verbs to controller actions automatically):
|
14
|
-
# resources :products
|
15
|
-
|
16
|
-
# Sample resource route with options:
|
17
|
-
# resources :products do
|
18
|
-
# member do
|
19
|
-
# get 'short'
|
20
|
-
# post 'toggle'
|
21
|
-
# end
|
22
|
-
#
|
23
|
-
# collection do
|
24
|
-
# get 'sold'
|
25
|
-
# end
|
26
|
-
# end
|
27
|
-
|
28
|
-
# Sample resource route with sub-resources:
|
29
|
-
# resources :products do
|
30
|
-
# resources :comments, :sales
|
31
|
-
# resource :seller
|
32
|
-
# end
|
33
|
-
|
34
|
-
# Sample resource route with more complex sub-resources
|
35
|
-
# resources :products do
|
36
|
-
# resources :comments
|
37
|
-
# resources :sales do
|
38
|
-
# get 'recent', :on => :collection
|
39
|
-
# end
|
40
|
-
# end
|
41
|
-
|
42
|
-
# Sample resource route within a namespace:
|
43
|
-
# namespace :admin do
|
44
|
-
# # Directs /admin/products/* to Admin::ProductsController
|
45
|
-
# # (app/controllers/admin/products_controller.rb)
|
46
|
-
# resources :products
|
47
|
-
# end
|
48
|
-
|
49
|
-
# You can have the root of your site routed with "root"
|
50
|
-
# just remember to delete public/index.html.
|
51
|
-
# root :to => 'welcome#index'
|
52
|
-
|
53
|
-
# See how all your routes lay out with "rake routes"
|
54
|
-
|
55
|
-
# This is a legacy wild controller route that's not recommended for RESTful applications.
|
56
|
-
# Note: This route will make all actions in every controller accessible via GET requests.
|
57
|
-
# match ':controller(/:action(/:id))(.:format)'
|
2
|
+
resource :drawings
|
3
|
+
get 'sketchily', :to => 'sketchily#sketchily'
|
4
|
+
get 'sketchily_tag', :to => 'sketchily#sketchily_tag'
|
58
5
|
end
|