dyi_rails 0.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +5 -0
- data/COPYING +674 -0
- data/README +208 -0
- data/lib/dyi_rails.rb +71 -0
- data/lib/dyi_rails/dyi_helper.rb +249 -0
- data/lib/dyi_rails/streaming.rb +65 -0
- metadata +102 -0
data/README
ADDED
@@ -0,0 +1,208 @@
|
|
1
|
+
= DYI for Rails: A Library to Use DYI on Rails.
|
2
|
+
|
3
|
+
"DYI for Rails" is a library for use DYI on Rails. "DYI for Rails"
|
4
|
+
provides some helpers and module for drawing a image of DYI.
|
5
|
+
|
6
|
+
== Installing
|
7
|
+
|
8
|
+
To install "DYI for Rails", use the following command.
|
9
|
+
|
10
|
+
$ gem install dyi-rails
|
11
|
+
|
12
|
+
(Add sudo if you're installing under a POSIX system as root)
|
13
|
+
|
14
|
+
== How to Use
|
15
|
+
|
16
|
+
=== Configuration
|
17
|
+
|
18
|
+
You add the following expression to <tt>RAILS_ROOT/config/environment.rb</tt>
|
19
|
+
so that you can use this library on your Rails application.
|
20
|
+
|
21
|
+
# in RAILS_ROOT/config/environment.rb
|
22
|
+
|
23
|
+
# Specify gems that this application depends on and have them installed with rake gems:install
|
24
|
+
# config.gem "bj"
|
25
|
+
# config.gem "hpricot", :version => '0.6', :source => "http://code.whytheluckystiff.net"
|
26
|
+
# config.gem "sqlite3-ruby", :lib => "sqlite3"
|
27
|
+
# config.gem "aws-s3", :lib => "aws/s3"
|
28
|
+
config.gem "dyi" # add gem of DYI
|
29
|
+
config.gem "dyi_rails" # add gem of DYI for Rails
|
30
|
+
|
31
|
+
=== Usage in View
|
32
|
+
|
33
|
+
You add the following expression to <tt>RAILS_ROOT/app/controllers/application_controller.rb</tt>
|
34
|
+
so that you can use {DyiRails::DyiHelper} on your Rails application.
|
35
|
+
|
36
|
+
# in RAILS_ROOT/app/controllers/application_controller.rb
|
37
|
+
|
38
|
+
class ApplicationController < ActionController::Base
|
39
|
+
helper :all # include all helpers, all the time
|
40
|
+
protect_from_forgery # See ActionController::RequestForgeryProtection for details
|
41
|
+
|
42
|
+
helper DyiRails::DyiHelper # add this expression, then you can use helper-methods provided by DyiHelper
|
43
|
+
|
44
|
+
# Scrub sensitive parameters from your log
|
45
|
+
# filter_parameter_logging :password
|
46
|
+
end
|
47
|
+
|
48
|
+
You create the image object using DYI as follows:
|
49
|
+
|
50
|
+
# in RAILS_ROOT/app/controllers/test_controller.rb
|
51
|
+
|
52
|
+
class TestController < ApplicationController
|
53
|
+
def index
|
54
|
+
# Creates image using DYI
|
55
|
+
@canvas = DYI::Canvas.new(200, 150)
|
56
|
+
brush = DYI::Drawing::Brush.blue_brush
|
57
|
+
brush.draw_rectangle(@canvas, [20, 20], 160, 110)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
You can use helper-methods of {DyiRails::DyiHelper} in any view file, using inline
|
62
|
+
SVG in HTML5.
|
63
|
+
|
64
|
+
# in RAILS_ROOT/app/views/test/index.html.erb
|
65
|
+
|
66
|
+
<!DOCTYPE html>
|
67
|
+
<html lang="en">
|
68
|
+
<head>
|
69
|
+
<meta charset="utf-8" />
|
70
|
+
<title>Useage of DYI for Rails</title>
|
71
|
+
</head>
|
72
|
+
<body>
|
73
|
+
<div>
|
74
|
+
<h1>SVG Image created by DYI</h1>
|
75
|
+
<%= dyi_inline_image_tag @canvas, :alt => 'SVG Image' %>
|
76
|
+
</div>
|
77
|
+
</body>
|
78
|
+
</html>
|
79
|
+
|
80
|
+
In this sample, the output is as follows:
|
81
|
+
|
82
|
+
<!DOCTYPE html>
|
83
|
+
<html lang="en">
|
84
|
+
<head>
|
85
|
+
<title>Useage of DYI for Rails</title>
|
86
|
+
</head>
|
87
|
+
<body>
|
88
|
+
<div>
|
89
|
+
<h1>SVG Image created by DYI</h1>
|
90
|
+
<svg xmlns="http://www.w3.org/2000/svg" version="1.1"
|
91
|
+
width="200" height="150" viewBox="0 0 200 150"
|
92
|
+
preserveAspectRatio="none">
|
93
|
+
<desc>SVG Image</desc>
|
94
|
+
<rect x="20" y="20" width="160" height="110" fill="#0000FF"/>
|
95
|
+
</svg>
|
96
|
+
</div>
|
97
|
+
</body>
|
98
|
+
</html>
|
99
|
+
|
100
|
+
In XML (e.g. XHTML, XSL-FO, etc...), you can use XML namespace.
|
101
|
+
|
102
|
+
# in RAILS_ROOT/app/views/test/index.html.erb
|
103
|
+
#
|
104
|
+
# NOTE: You must use "application/xhtml+xml" as content-type,
|
105
|
+
# when using XHTML include XML namespace.
|
106
|
+
# See http://www.w3.org/TR/xhtml-media-types/
|
107
|
+
|
108
|
+
<?xml version="1.0" encoding="utf-8"?>
|
109
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
110
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
111
|
+
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
|
112
|
+
<head>
|
113
|
+
<title>Useage of DYI for Rails</title>
|
114
|
+
</head>
|
115
|
+
<body>
|
116
|
+
<div>
|
117
|
+
<h1>SVG Image created by DYI</h1>
|
118
|
+
<%= dyi_inline_image_tag @canvas, :alt => 'SVG Image', :namespace => 'svg' %>
|
119
|
+
</div>
|
120
|
+
</body>
|
121
|
+
</html>
|
122
|
+
|
123
|
+
In this sample, the output is as follows:
|
124
|
+
|
125
|
+
<?xml version="1.0" encoding="utf-8"?>
|
126
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
127
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
128
|
+
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
|
129
|
+
<head>
|
130
|
+
<title>Useage of DYI for Rails</title>
|
131
|
+
</head>
|
132
|
+
<body>
|
133
|
+
<div>
|
134
|
+
<h1>SVG Image created by DYI</h1>
|
135
|
+
<svg:svg xmlns:svg="http://www.w3.org/2000/svg" version="1.1"
|
136
|
+
width="200" height="150" viewBox="0 0 200 150"
|
137
|
+
preserveAspectRatio="none">
|
138
|
+
<svg:desc>SVG Image</svg:desc>
|
139
|
+
<svg:rect x="20" y="20" width="160" height="110" fill="#0000FF"/>
|
140
|
+
</svg:svg>
|
141
|
+
</div>
|
142
|
+
</body>
|
143
|
+
</html>
|
144
|
+
|
145
|
+
For more information, see the document of {DyiRails::DyiHelper}.
|
146
|
+
|
147
|
+
=== Usage in Controller
|
148
|
+
|
149
|
+
A method to send a DYI image to the client is defined in {DyiRails::Streaming}.
|
150
|
+
You can use the method to include {DyiRails::Streaming}, as follows:
|
151
|
+
|
152
|
+
# in RAILS_ROOT/app/controllers/test_controller.rb
|
153
|
+
|
154
|
+
class TestController < ApplicationController
|
155
|
+
include DyiRails::Streaming
|
156
|
+
|
157
|
+
def index
|
158
|
+
# Creates image using DYI
|
159
|
+
canvas = DYI::Canvas.new(200, 150)
|
160
|
+
brush = DYI::Drawing::Brush.blue_brush
|
161
|
+
brush.draw_rectangle(canvas, [20, 20], 160, 110)
|
162
|
+
|
163
|
+
# Sends image to the client
|
164
|
+
send_dyi_image(canvas)
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
In this sample, the response body is as follows:
|
169
|
+
|
170
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
171
|
+
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
172
|
+
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
173
|
+
<svg xmlns="http://www.w3.org/2000/svg" version="1.1"
|
174
|
+
width="200" height="150" viewBox="0 0 200 150"
|
175
|
+
preserveAspectRatio="none">
|
176
|
+
<rect x="20" y="20" width="160" height="110" fill="#0000FF"/>
|
177
|
+
</svg>
|
178
|
+
|
179
|
+
You can also use graphics formats other than SVG (e.g. PNG, EPS, etc...).
|
180
|
+
See examples of {DyiRails::Streaming#send_dyi_image}.
|
181
|
+
|
182
|
+
== License
|
183
|
+
|
184
|
+
Copyright (c) 2012 Sound-F Co., Ltd. All rights reserved.
|
185
|
+
|
186
|
+
"DYI for Rails" is free software: you can redistribute it and/or modify
|
187
|
+
it under the terms of the GNU General Public License as published by
|
188
|
+
the Free Software Foundation, either version 3 of the License, or
|
189
|
+
(at your option) any later version.
|
190
|
+
|
191
|
+
"DYI for Rails" is distributed in the hope that it will be useful,
|
192
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
193
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
194
|
+
GNU General Public License for more details.
|
195
|
+
|
196
|
+
You should have received a copy of the GNU General Public License
|
197
|
+
along with "DYI for Rails". If not, see <http://www.gnu.org/licenses/>.
|
198
|
+
|
199
|
+
== Support
|
200
|
+
|
201
|
+
We support "DYI for Rails" using SourceForge.net. URL of "DYI for Rails"
|
202
|
+
Project is "http://sourceforge.net/projects/dyi-rails/". This page has
|
203
|
+
a tracker and forums.
|
204
|
+
|
205
|
+
We are also preparing the Japanese mailing list. More infomation
|
206
|
+
about the mailing list is indicated to
|
207
|
+
<http://open-dyi.org/contents.html#community> in Japanese,
|
208
|
+
including how to join it.
|
data/lib/dyi_rails.rb
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
# -*- encoding: UTF-8 -*-
|
2
|
+
|
3
|
+
# Copyright (c) 2009-2012 Sound-F Co., Ltd. All rights reserved.
|
4
|
+
#
|
5
|
+
# Author:: Mamoru Yuo
|
6
|
+
#
|
7
|
+
# This file is part of "DYI for Rails".
|
8
|
+
#
|
9
|
+
# "DYI for Rails" is free software: you can redistribute it and/or modify
|
10
|
+
# it under the terms of the GNU General Public License as published by
|
11
|
+
# the Free Software Foundation, either version 3 of the License, or
|
12
|
+
# (at your option) any later version.
|
13
|
+
#
|
14
|
+
# "DYI for Rails" is distributed in the hope that it will be useful,
|
15
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
16
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
17
|
+
# GNU General Public License for more details.
|
18
|
+
#
|
19
|
+
# You should have received a copy of the GNU General Public License
|
20
|
+
# along with "DYI for Rails". If not, see <http://www.gnu.org/licenses/>.
|
21
|
+
|
22
|
+
# Root namespace of "DYI for Rails".
|
23
|
+
# @since 0.0.0
|
24
|
+
module DyiRails
|
25
|
+
|
26
|
+
# "DYI for Rails" program version
|
27
|
+
VERSION = '0.0.0'
|
28
|
+
|
29
|
+
# URL of "DYI for Rails" Project
|
30
|
+
URL = 'http://sourceforge.net/projects/dyi-rails/'
|
31
|
+
|
32
|
+
# The correspondence of the image format to the mime-type
|
33
|
+
MIME_TYPE = {:svg => 'image/svg+xml',
|
34
|
+
:png => 'image/png',
|
35
|
+
:eps => 'application/postscript',
|
36
|
+
:xaml => 'application/xaml+xml'}
|
37
|
+
|
38
|
+
class << self
|
39
|
+
|
40
|
+
# Registers new correspondence of the image format to mime-type. When the
|
41
|
+
# image format has already registered, mime-type is overriden.
|
42
|
+
# @param [Symbol, String] format image format
|
43
|
+
# @param [String] mime_type mime-type which the image format corresponds to
|
44
|
+
def register_mime_type(format, mime_type)
|
45
|
+
MIME_TYPE[format.to_sym] = mime_type.to_s
|
46
|
+
end
|
47
|
+
|
48
|
+
# Returns mime-type which the given image format corresponds to.
|
49
|
+
# @param [Symbol, String] format image format
|
50
|
+
# @return [String] mime-type which the image format corresponds to
|
51
|
+
# @raise [ArgumentError] unknown format is given
|
52
|
+
def mime_type(format)
|
53
|
+
format = format.to_sym
|
54
|
+
unless MIME_TYPE.has_key?(format)
|
55
|
+
raise ArgumentError, "`#{options[:format]}' is unknown format"
|
56
|
+
end
|
57
|
+
return MIME_TYPE[format]
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
require 'dyi'
|
63
|
+
|
64
|
+
%w(
|
65
|
+
|
66
|
+
dyi_rails/dyi_helper.rb
|
67
|
+
dyi_rails/streaming.rb
|
68
|
+
|
69
|
+
).each do |file_name|
|
70
|
+
require File.join(File.dirname(__FILE__), file_name)
|
71
|
+
end
|
@@ -0,0 +1,249 @@
|
|
1
|
+
# -*- encoding: UTF-8 -*-
|
2
|
+
|
3
|
+
# Copyright (c) 2009-2012 Sound-F Co., Ltd. All rights reserved.
|
4
|
+
#
|
5
|
+
# Author:: Mamoru Yuo
|
6
|
+
#
|
7
|
+
# This file is part of "DYI for Rails".
|
8
|
+
#
|
9
|
+
# "DYI for Rails" is free software: you can redistribute it and/or modify
|
10
|
+
# it under the terms of the GNU General Public License as published by
|
11
|
+
# the Free Software Foundation, either version 3 of the License, or
|
12
|
+
# (at your option) any later version.
|
13
|
+
#
|
14
|
+
# "DYI for Rails" is distributed in the hope that it will be useful,
|
15
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
16
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
17
|
+
# GNU General Public License for more details.
|
18
|
+
#
|
19
|
+
# You should have received a copy of the GNU General Public License
|
20
|
+
# along with "DYI for Rails". If not, see <http://www.gnu.org/licenses/>.
|
21
|
+
|
22
|
+
|
23
|
+
module DyiRails
|
24
|
+
|
25
|
+
# Provides a set of methods for making image tags using DYI.
|
26
|
+
module DyiHelper
|
27
|
+
|
28
|
+
# Returns a inline HTML element. The HTML element does not have a URI
|
29
|
+
# reference, and the element contains the image data itself.
|
30
|
+
# @param [DYI::Canvas, DYI::Chart::Base] canvas a canvas that hold the image
|
31
|
+
# @option options [String] :id id of the HTML element. If the canvas has
|
32
|
+
# _id_ attribute, this option is ignored.
|
33
|
+
# @option options [String] :class CSS class name of the HTML element
|
34
|
+
# @option options [String] :alt equivalent content for those who cannot
|
35
|
+
# process images or who have image loading disabled. If the canvas has
|
36
|
+
# _description_ attribute, this option is ignored. Default to <tt>'dyi
|
37
|
+
# image'</tt>
|
38
|
+
# @option options [String] :title title of the image. If the canvas has
|
39
|
+
# _title_ attribute, this option is ignored
|
40
|
+
# @option options [Symbol, String] :format format of the image. Default to
|
41
|
+
# +:svg+
|
42
|
+
# @option options [String] :namespace XML namespace when XML format (e.g.
|
43
|
+
# SVG) is specified at +:format+ option. If nothing is specified,
|
44
|
+
# XML namespace is not used
|
45
|
+
# @return [String] HTML element contains image data
|
46
|
+
# @example
|
47
|
+
# dyi_inline_image_tag(@canvas, :alt => 'my image')
|
48
|
+
# # => <svg width="200" height="150" version="1.1" viewBox="0 0 200 150"
|
49
|
+
# # xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="none">
|
50
|
+
# # <description>my image</description>
|
51
|
+
# # ...
|
52
|
+
# # </svg>
|
53
|
+
#
|
54
|
+
# dyi_inline_image_tag(@canvas, :alt => 'my image', :namespace => 'svg')
|
55
|
+
# # => <svg:svg width="200" height="150" version="1.1" viewBox="0 0 200 150"
|
56
|
+
# # xmlns:svg="http://www.w3.org/2000/svg" preserveAspectRatio="none">
|
57
|
+
# # <svg:description>my image</svg:description>
|
58
|
+
# # ...
|
59
|
+
# # </svg:svg>
|
60
|
+
#
|
61
|
+
# dyi_inline_image_tag(@canvas, :alt => 'my image', :format => :png)
|
62
|
+
# # => <img width="200" height="150" alt="my image" src="data:image/png;base64,
|
63
|
+
# # ...(encoded PNG image)..." />
|
64
|
+
def dyi_inline_image_tag(canvas, options={})
|
65
|
+
case (format = (options[:format] || :svg).to_sym)
|
66
|
+
when :svg, :xaml #, :vml
|
67
|
+
# output inline XML
|
68
|
+
alt = canvas.description || options[:alt] || 'dyi image'
|
69
|
+
|
70
|
+
canvas.id = options[:id] if options[:id] && !canvas.inner_id
|
71
|
+
canvas.add_css_class(options[:class]) if options[:class]
|
72
|
+
canvas.description = alt unless canvas.description
|
73
|
+
canvas.title = options[:title] if options[:title] && !canvas.title
|
74
|
+
canvas.string(format, :inline_mode => true, :namespace => options[:namespace])
|
75
|
+
when :png
|
76
|
+
# output <img> tag with base64 encoding
|
77
|
+
element_id = canvas.inner_id || options[:id]
|
78
|
+
class_name = options[:class]
|
79
|
+
alt = canvas.description || options[:alt] || 'dyi image'
|
80
|
+
title = canvas.title || options[:title]
|
81
|
+
mime_type = DyiRails.mime_type(format)
|
82
|
+
|
83
|
+
tag_parts = ['<img']
|
84
|
+
tag_parts << " id=\"#{element_id}\"" if element_id
|
85
|
+
tag_parts << ' src="data:'
|
86
|
+
tag_parts << mime_type
|
87
|
+
tag_parts << ";base64,\n"
|
88
|
+
tag_parts << [canvas.string(format)].pack('m')[0..-2]
|
89
|
+
tag_parts << '"'
|
90
|
+
tag_parts << " type=\"#{mime_type}\""
|
91
|
+
tag_parts << " class=\"#{class_name}\"" if class_name
|
92
|
+
tag_parts << " width=\"#{canvas.real_width}\""
|
93
|
+
tag_parts << " height=\"#{canvas.real_height}\""
|
94
|
+
tag_parts << " alt=\"#{alt}\""
|
95
|
+
tag_parts << " title=\"#{title}\"" if title
|
96
|
+
tag_parts << " />"
|
97
|
+
tag_parts.join
|
98
|
+
else
|
99
|
+
# output <object> tag with base64 encoding
|
100
|
+
element_id = canvas.inner_id || options[:id]
|
101
|
+
class_name = options[:class]
|
102
|
+
alt = canvas.description || options[:alt] || 'dyi image'
|
103
|
+
title = canvas.title || options[:title]
|
104
|
+
mime_type = DyiRails.mime_type(format)
|
105
|
+
|
106
|
+
tag_parts = ['<object']
|
107
|
+
tag_parts << " id=\"#{element_id}\"" if element_id
|
108
|
+
tag_parts << " data=\"data:"
|
109
|
+
tag_parts << mime_type
|
110
|
+
tag_parts << ";base64,\n"
|
111
|
+
tag_parts << [canvas.string(format)].pack('m')[0..-2]
|
112
|
+
tag_parts << "\""
|
113
|
+
tag_parts << " type=\"#{mime_type}\""
|
114
|
+
tag_parts << " class=\"#{class_name}\"" if class_name
|
115
|
+
tag_parts << " width=\"#{canvas.real_width}\""
|
116
|
+
tag_parts << " height=\"#{canvas.real_height}\""
|
117
|
+
tag_parts << " title=\"#{title}\"" if title
|
118
|
+
tag_parts << ">"
|
119
|
+
tag_parts << alt
|
120
|
+
tag_parts << "</object>"
|
121
|
+
tag_parts.join
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
# Returns a HTML +_img_+ element.
|
126
|
+
# @option options [String] :id id of the HTML element
|
127
|
+
# @option options [String] :class CSS class name of the HTML element
|
128
|
+
# @option options [String] :alt equivalent content for those who cannot
|
129
|
+
# process images or who have image loading disabled. Default to 'dyi image'
|
130
|
+
# @option options [String] :title title of the image
|
131
|
+
# @option options [Integer] :width width of the image
|
132
|
+
# @option options [Integer] :height height of the image
|
133
|
+
# @option options [Symbol, String] :format format of the image. Default to
|
134
|
+
# +:svg+
|
135
|
+
# @option options [String] :controller controller of Rails' application
|
136
|
+
# that process the image. Default to 'images'
|
137
|
+
# @option options [String] :action action of Rails' application that process
|
138
|
+
# the image. Default to 'dyi'
|
139
|
+
# @option options [String] :model_id id as a parameter passed to the Rails'
|
140
|
+
# application that process the image. Default to 'dyi'
|
141
|
+
# @option options [String] other-options other options is passed to +url_for+
|
142
|
+
# method. See examples
|
143
|
+
# @return [String] HTML +_img_+ element contains URI reference to the image
|
144
|
+
# @example
|
145
|
+
# dyi_image_tag(:format => :png, :width => 200, :height => 150)
|
146
|
+
# # => <img width="200" height="150" alt="dyi image" src="/images/dyi/dyi.png" />
|
147
|
+
#
|
148
|
+
# dyi_image_tag(:format => :png, :width => 200, :height => 150, :id => 'emb',
|
149
|
+
# :controller => 'teams', :action => 'emblem', :model_id => '1')
|
150
|
+
# # => <img id="emb" width="200" height="150" alt="dyi image" src="/teams/emblem/1.png" />
|
151
|
+
#
|
152
|
+
# dyi_image_tag(:format => :png, :width => 200, :height => 150, :id => 'emb',
|
153
|
+
# :controller => 'teams', :action => 'emblem', :model_id => '1',
|
154
|
+
# :color => 'red', :type => 'simple')
|
155
|
+
# # => <img id="emb" width="200" height="150" alt="dyi image"
|
156
|
+
# # src="/teams/emblem/1.png?color=red&type=simple" />
|
157
|
+
def dyi_image_tag(options={})
|
158
|
+
opt = options.clone
|
159
|
+
element_id = opt.delete(:id)
|
160
|
+
class_name = opt.delete(:class)
|
161
|
+
alt = opt.delete(:alt) || 'dyi image'
|
162
|
+
title = opt.delete(:title)
|
163
|
+
width = opt.delete(:width)
|
164
|
+
height = opt.delete(:height)
|
165
|
+
|
166
|
+
opt[:controller] = 'images' unless opt[:controller]
|
167
|
+
opt[:action] = 'dyi' unless opt[:action]
|
168
|
+
opt[:id] = opt.delete(:model_id) || 'dyi'
|
169
|
+
opt[:format] = 'svg' unless opt[:format]
|
170
|
+
|
171
|
+
tag_parts = ['<img']
|
172
|
+
tag_parts << " id=\"#{element_id}\"" if element_id
|
173
|
+
tag_parts << " src=\"#{url_for(opt)}\""
|
174
|
+
tag_parts << " class=\"#{class_name}\"" if class_name
|
175
|
+
tag_parts << " width=\"#{width}\"" if width
|
176
|
+
tag_parts << " height=\"#{height}\"" if height
|
177
|
+
tag_parts << " alt=\"#{alt}\""
|
178
|
+
tag_parts << " title=\"#{title}\"" if title
|
179
|
+
tag_parts << " />"
|
180
|
+
tag_parts.join
|
181
|
+
end
|
182
|
+
|
183
|
+
# Returns a HTML +_object_+ element.
|
184
|
+
# @option options [String] :id id of the HTML element
|
185
|
+
# @option options [String] :class CSS class name of the HTML element
|
186
|
+
# @option options [String] :alt equivalent content for those who cannot
|
187
|
+
# process images or who have image loading disabled. Default to 'dyi image'
|
188
|
+
# @option options [String] :title title of the image
|
189
|
+
# @option options [Integer] :width width of the image
|
190
|
+
# @option options [Integer] :height height of the image
|
191
|
+
# @option options [Symbol, String] :format format of the image. Default to
|
192
|
+
# +:svg+
|
193
|
+
# @option options [String] :controller controller of Rails' application
|
194
|
+
# that process the image. Default to 'images'
|
195
|
+
# @option options [String] :action action of Rails' application that process
|
196
|
+
# the image. Default to <tt>'dyi'</tt>
|
197
|
+
# @option options [String] :model_id id as a parameter passed to the Rails'
|
198
|
+
# application that process the image. Default to <tt>'dyi'</tt>
|
199
|
+
# @option options [String] other-options other options is passed to +url_for+
|
200
|
+
# method. See examples
|
201
|
+
# @return [String] HTML +_object_+ element contains URI reference to the
|
202
|
+
# image
|
203
|
+
# @example
|
204
|
+
# dyi_object_tag(:width => 200, :height => 150)
|
205
|
+
# # => <object width="200" height="150" type="image/svg+xml"
|
206
|
+
# # data="/images/dyi/dyi.svg">dyi image</object>
|
207
|
+
#
|
208
|
+
# dyi_object_tag(:format => :png, :width => 200, :height => 150,
|
209
|
+
# :id => 'emb', :alt => 'an emblem of the team',
|
210
|
+
# :controller => 'teams', :action => 'emblem', :model_id => '1')
|
211
|
+
# # => <object id="emb" width="200" height="150" type="image/svg+xml"
|
212
|
+
# # data="/teams/emblem/1.png">an emblem of the team</object>
|
213
|
+
#
|
214
|
+
# dyi_object_tag(:format => :png, :width => 200, :height => 150,
|
215
|
+
# :id => 'emb', :alt => 'an emblem of the team',
|
216
|
+
# :controller => 'teams', :action => 'emblem', :model_id => '1',
|
217
|
+
# :color => 'red', :type => 'simple')
|
218
|
+
# # => <object id="emb" width="200" height="150" type="image/svg+xml"
|
219
|
+
# # data="/teams/emblem/1.png">an emblem of the team</object>
|
220
|
+
def dyi_object_tag(options={})
|
221
|
+
opt = options.clone
|
222
|
+
element_id = opt.delete(:id)
|
223
|
+
class_name = opt.delete(:class)
|
224
|
+
alt = opt.delete(:alt) || 'dyi image'
|
225
|
+
title = opt.delete(:title)
|
226
|
+
width = opt.delete(:width)
|
227
|
+
height = opt.delete(:height)
|
228
|
+
mime_type = DyiRails.mime_type(opt[:format] || :svg)
|
229
|
+
|
230
|
+
opt[:controller] = 'images' unless opt[:controller]
|
231
|
+
opt[:action] = 'dyi' unless opt[:action]
|
232
|
+
opt[:id] = opt.delete(:model_id) || 'dyi'
|
233
|
+
opt[:format] = 'svg' unless opt[:format]
|
234
|
+
|
235
|
+
tag_parts = ['<object']
|
236
|
+
tag_parts << " id=\"#{element_id}\"" if element_id
|
237
|
+
tag_parts << " data=\"#{url_for(opt)}\""
|
238
|
+
tag_parts << " type=\"#{mime_type}\""
|
239
|
+
tag_parts << " class=\"#{class_name}\"" if class_name
|
240
|
+
tag_parts << " width=\"#{width}\"" if width
|
241
|
+
tag_parts << " height=\"#{height}\"" if height
|
242
|
+
tag_parts << " title=\"#{title}\"" if title
|
243
|
+
tag_parts << ">"
|
244
|
+
tag_parts << alt
|
245
|
+
tag_parts << "</object>"
|
246
|
+
tag_parts.join
|
247
|
+
end
|
248
|
+
end
|
249
|
+
end
|