Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
06bdaae0
R
rails
项目概览
张重言
/
rails
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rails
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
06bdaae0
编写于
3月 26, 2011
作者:
X
Xavier Noria
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
removes ActionView::Helpers::ScriptaculousHelper
上级
5850f169
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
2 addition
and
385 deletion
+2
-385
actionpack/lib/action_view/helpers.rb
actionpack/lib/action_view/helpers.rb
+0
-2
actionpack/lib/action_view/helpers/capture_helper.rb
actionpack/lib/action_view/helpers/capture_helper.rb
+2
-2
actionpack/lib/action_view/helpers/javascript_helper.rb
actionpack/lib/action_view/helpers/javascript_helper.rb
+0
-32
actionpack/lib/action_view/helpers/scriptaculous_helper.rb
actionpack/lib/action_view/helpers/scriptaculous_helper.rb
+0
-263
actionpack/test/template/scriptaculous_helper_test.rb
actionpack/test/template/scriptaculous_helper_test.rb
+0
-86
未找到文件。
actionpack/lib/action_view/helpers.rb
浏览文件 @
06bdaae0
...
...
@@ -21,7 +21,6 @@ module Helpers #:nodoc:
autoload
:OutputSafetyHelper
autoload
:RecordTagHelper
autoload
:SanitizeHelper
autoload
:ScriptaculousHelper
autoload
:SprocketsHelper
autoload
:TagHelper
autoload
:TextHelper
...
...
@@ -52,7 +51,6 @@ module Helpers #:nodoc:
include
OutputSafetyHelper
include
RecordTagHelper
include
SanitizeHelper
include
ScriptaculousHelper
include
SprocketsHelper
include
TagHelper
include
TextHelper
...
...
actionpack/lib/action_view/helpers/capture_helper.rb
浏览文件 @
06bdaae0
...
...
@@ -107,8 +107,8 @@ def capture(*args)
# <%= javascript_include_tag :defaults %>
# <% end %>
#
# That will place
<tt>script</tt> tags for Prototype, Scriptaculous, and application.js (if it exists)
#
on the page;
this technique is useful if you'll only be using these scripts in a few views.
# That will place
+script+ tags for your default set of JavaScript files on the page;
# this technique is useful if you'll only be using these scripts in a few views.
#
# Note that content_for concatenates the blocks it is given for a particular
# identifier in order. For example:
...
...
actionpack/lib/action_view/helpers/javascript_helper.rb
浏览文件 @
06bdaae0
require
'action_view/helpers/tag_helper'
module
ActionView
# = Action View JavaScript Helpers
module
Helpers
# Provides functionality for working with JavaScript in your views.
#
# == Ajax, controls and visual effects
#
# * For information on using Ajax, see
# ActionView::Helpers::PrototypeHelper.
# * For information on using controls and visual effects, see
# ActionView::Helpers::ScriptaculousHelper.
#
# == Including the JavaScript libraries into your pages
#
# Rails includes the Prototype JavaScript framework and the Scriptaculous
# JavaScript controls and visual effects library. If you wish to use
# these libraries and their helpers (ActionView::Helpers::PrototypeHelper
# and ActionView::Helpers::ScriptaculousHelper), you must do one of the
# following:
#
# * Use <tt><%= javascript_include_tag :defaults %></tt> in the HEAD
# section of your page (recommended): This function will return
# references to the JavaScript files created by the +rails+ command in
# your <tt>public/javascripts</tt> directory. Using it is recommended as
# the browser can then cache the libraries instead of fetching all the
# functions anew on every request.
# * Use <tt><%= javascript_include_tag 'prototype' %></tt>: As above, but
# will only include the Prototype core library, which means you are able
# to use all basic AJAX functionality. For the Scriptaculous-based
# JavaScript helpers, like visual effects, autocompletion, drag and drop
# and so on, you should use the method described above.
#
# For documentation on +javascript_include_tag+ see
# ActionView::Helpers::AssetTagHelper.
module
JavaScriptHelper
include
PrototypeHelper
...
...
actionpack/lib/action_view/helpers/scriptaculous_helper.rb
已删除
100644 → 0
浏览文件 @
5850f169
require
'action_view/helpers/javascript_helper'
require
'active_support/json'
module
ActionView
# = Action View Scriptaculous Helpers
module
Helpers
# Provides a set of helpers for calling Scriptaculous[http://script.aculo.us/]
# JavaScript functions, including those which create Ajax controls and visual
# effects.
#
# To be able to use these helpers, you must include the Prototype
# JavaScript framework and the Scriptaculous JavaScript library in your
# pages. See the documentation for ActionView::Helpers::JavaScriptHelper
# for more information on including the necessary JavaScript.
#
# The Scriptaculous helpers' behavior can be tweaked with various options.
#
# See the documentation at http://script.aculo.us for more information on
# using these helpers in your application.
module
ScriptaculousHelper
TOGGLE_EFFECTS
=
[
:toggle_appear
,
:toggle_slide
,
:toggle_blind
]
# Returns a JavaScript snippet to be used on the Ajax callbacks for
# starting visual effects.
#
# If no +element_id+ is given, it assumes "element" which should be a local
# variable in the generated JavaScript execution context. This can be
# used for example with +drop_receiving_element+:
#
# <%= drop_receiving_element (...), :loading => visual_effect(:fade) %>
#
# This would fade the element that was dropped on the drop receiving
# element.
#
# For toggling visual effects, you can use <tt>:toggle_appear</tt>, <tt>:toggle_slide</tt>, and
# <tt>:toggle_blind</tt> which will alternate between appear/fade, slidedown/slideup, and
# blinddown/blindup respectively.
#
# You can change the behaviour with various options, see
# http://script.aculo.us for more documentation.
def
visual_effect
(
name
,
element_id
=
false
,
js_options
=
{})
element
=
element_id
?
ActiveSupport
::
JSON
.
encode
(
element_id
)
:
"element"
js_options
[
:queue
]
=
if
js_options
[
:queue
].
is_a?
(
Hash
)
'{'
+
js_options
[
:queue
].
map
{
|
k
,
v
|
k
==
:limit
?
"
#{
k
}
:
#{
v
}
"
:
"
#{
k
}
:'
#{
v
}
'"
}.
join
(
','
)
+
'}'
elsif
js_options
[
:queue
]
"'
#{
js_options
[
:queue
]
}
'"
end
if
js_options
[
:queue
]
[
:endcolor
,
:direction
,
:startcolor
,
:scaleMode
,
:restorecolor
].
each
do
|
option
|
js_options
[
option
]
=
"'
#{
js_options
[
option
]
}
'"
if
js_options
[
option
]
end
if
TOGGLE_EFFECTS
.
include?
name
.
to_sym
"Effect.toggle(
#{
element
}
,'
#{
name
.
to_s
.
gsub
(
/^toggle_/
,
''
)
}
',
#{
options_for_javascript
(
js_options
)
}
);"
else
"new Effect.
#{
name
.
to_s
.
camelize
}
(
#{
element
}
,
#{
options_for_javascript
(
js_options
)
}
);"
end
end
# Makes the element with the DOM ID specified by +element_id+ sortable
# by drag-and-drop and make an Ajax call whenever the sort order has
# changed. By default, the action called gets the serialized sortable
# element as parameters.
#
# Example:
#
# <%= sortable_element("my_list", :url => { :action => "order" }) %>
#
# In the example, the action gets a "my_list" array parameter
# containing the values of the ids of elements the sortable consists
# of, in the current order.
#
# Important: For this to work, the sortable elements must have id
# attributes in the form "string_identifier". For example, "item_1". Only
# the identifier part of the id attribute will be serialized.
#
# Additional +options+ are:
#
# * <tt>:format</tt> - A regular expression to determine what to send as the
# serialized id to the server (the default is <tt>/^[^_]*_(.*)$/</tt>).
#
# * <tt>:constraint</tt> - Whether to constrain the dragging to either
# <tt>:horizontal</tt> or <tt>:vertical</tt> (or false to make it unconstrained).
#
# * <tt>:overlap</tt> - Calculate the item overlap in the <tt>:horizontal</tt>
# or <tt>:vertical</tt> direction.
#
# * <tt>:tag</tt> - Which children of the container element to treat as
# sortable (default is <tt>li</tt>).
#
# * <tt>:containment</tt> - Takes an element or array of elements to treat as
# potential drop targets (defaults to the original target element).
#
# * <tt>:only</tt> - A CSS class name or array of class names used to filter
# out child elements as candidates.
#
# * <tt>:scroll</tt> - Determines whether to scroll the list during drag
# operations if the list runs past the visual border.
#
# * <tt>:tree</tt> - Determines whether to treat nested lists as part of the
# main sortable list. This means that you can create multi-layer lists,
# and not only sort items at the same level, but drag and sort items
# between levels.
#
# * <tt>:hoverclass</tt> - If set, the Droppable will have this additional CSS class
# when an accepted Draggable is hovered over it.
#
# * <tt>:handle</tt> - Sets whether the element should only be draggable by an
# embedded handle. The value may be a string referencing a CSS class value
# (as of script.aculo.us V1.5). The first child/grandchild/etc. element
# found within the element that has this CSS class value will be used as
# the handle.
#
# * <tt>:ghosting</tt> - Clones the element and drags the clone, leaving
# the original in place until the clone is dropped (default is <tt>false</tt>).
#
# * <tt>:dropOnEmpty</tt> - If true the Sortable container will be made into
# a Droppable, that can receive a Draggable (as according to the containment
# rules) as a child element when there are no more elements inside (default
# is <tt>false</tt>).
#
# * <tt>:onChange</tt> - Called whenever the sort order changes while dragging. When
# dragging from one Sortable to another, the callback is called once on each
# Sortable. Gets the affected element as its parameter.
#
# * <tt>:onUpdate</tt> - Called when the drag ends and the Sortable's order is
# changed in any way. When dragging from one Sortable to another, the callback
# is called once on each Sortable. Gets the container as its parameter.
#
# See http://script.aculo.us for more documentation.
def
sortable_element
(
element_id
,
options
=
{})
javascript_tag
(
sortable_element_js
(
element_id
,
options
).
chop!
)
end
def
sortable_element_js
(
element_id
,
options
=
{})
#:nodoc:
options
[
:with
]
||=
"Sortable.serialize(
#{
ActiveSupport
::
JSON
.
encode
(
element_id
)
}
)"
options
[
:onUpdate
]
||=
"function(){"
+
remote_function
(
options
)
+
"}"
options
.
delete_if
{
|
key
,
value
|
PrototypeHelper
::
AJAX_OPTIONS
.
include?
(
key
)
}
[
:tag
,
:overlap
,
:constraint
,
:handle
].
each
do
|
option
|
options
[
option
]
=
"'
#{
options
[
option
]
}
'"
if
options
[
option
]
end
options
[
:containment
]
=
array_or_string_for_javascript
(
options
[
:containment
])
if
options
[
:containment
]
options
[
:only
]
=
array_or_string_for_javascript
(
options
[
:only
])
if
options
[
:only
]
%(Sortable.create(#{ActiveSupport::JSON.encode(element_id)}, #{options_for_javascript(options)});)
end
# Makes the element with the DOM ID specified by +element_id+ draggable.
#
# Example:
# <%= draggable_element("my_image", :revert => true)
#
# You can change the behaviour with various options, see
# http://script.aculo.us for more documentation.
def
draggable_element
(
element_id
,
options
=
{})
javascript_tag
(
draggable_element_js
(
element_id
,
options
).
chop!
)
end
def
draggable_element_js
(
element_id
,
options
=
{})
#:nodoc:
%(new Draggable(#{ActiveSupport::JSON.encode(element_id)}, #{options_for_javascript(options)});)
end
# Makes the element with the DOM ID specified by +element_id+ receive
# dropped draggable elements (created by +draggable_element+).
# and make an AJAX call. By default, the action called gets the DOM ID
# of the element as parameter.
#
# Example:
# <%= drop_receiving_element("my_cart", :url =>
# { :controller => "cart", :action => "add" }) %>
#
# You can change the behaviour with various options, see
# http://script.aculo.us for more documentation.
#
# Some of these +options+ include:
# * <tt>:accept</tt> - Set this to a string or an array of strings describing the
# allowable CSS classes that the +draggable_element+ must have in order
# to be accepted by this +drop_receiving_element+.
#
# * <tt>:confirm</tt> - Adds a confirmation dialog. Example:
#
# :confirm => "Are you sure you want to do this?"
#
# * <tt>:hoverclass</tt> - If set, the +drop_receiving_element+ will have
# this additional CSS class when an accepted +draggable_element+ is
# hovered over it.
#
# * <tt>:onDrop</tt> - Called when a +draggable_element+ is dropped onto
# this element. Override this callback with a JavaScript expression to
# change the default drop behaviour. Example:
#
# :onDrop => "function(draggable_element, droppable_element, event) { alert('I like bananas') }"
#
# This callback gets three parameters: The Draggable element, the Droppable
# element and the Event object. You can extract additional information about
# the drop - like if the Ctrl or Shift keys were pressed - from the Event object.
#
# * <tt>:with</tt> - A JavaScript expression specifying the parameters for
# the XMLHttpRequest. Any expressions should return a valid URL query string.
def
drop_receiving_element
(
element_id
,
options
=
{})
javascript_tag
(
drop_receiving_element_js
(
element_id
,
options
).
chop!
)
end
def
drop_receiving_element_js
(
element_id
,
options
=
{})
#:nodoc:
options
[
:with
]
||=
"'id=' + encodeURIComponent(element.id)"
options
[
:onDrop
]
||=
"function(element){"
+
remote_function
(
options
)
+
"}"
options
.
delete_if
{
|
key
,
value
|
PrototypeHelper
::
AJAX_OPTIONS
.
include?
(
key
)
}
options
[
:accept
]
=
array_or_string_for_javascript
(
options
[
:accept
])
if
options
[
:accept
]
options
[
:hoverclass
]
=
"'
#{
options
[
:hoverclass
]
}
'"
if
options
[
:hoverclass
]
# Confirmation happens during the onDrop callback, so it can be removed from the options
options
.
delete
(
:confirm
)
if
options
[
:confirm
]
%(Droppables.add(#{ActiveSupport::JSON.encode(element_id)}, #{options_for_javascript(options)});)
end
protected
def
array_or_string_for_javascript
(
option
)
if
option
.
kind_of?
(
Array
)
"['
#{
option
.
join
(
'\',\''
)
}
']"
elsif
!
option
.
nil?
"'
#{
option
}
'"
end
end
end
module
PrototypeHelper
class
JavaScriptGenerator
module
GeneratorMethods
# Starts a script.aculo.us visual effect. See
# ActionView::Helpers::ScriptaculousHelper for more information.
def
visual_effect
(
name
,
id
=
nil
,
options
=
{})
record
@context
.
send
(
:visual_effect
,
name
,
id
,
options
)
end
# Creates a script.aculo.us sortable element. Useful
# to recreate sortable elements after items get added
# or deleted.
# See ActionView::Helpers::ScriptaculousHelper for more information.
def
sortable
(
id
,
options
=
{})
record
@context
.
send
(
:sortable_element_js
,
id
,
options
)
end
# Creates a script.aculo.us draggable element.
# See ActionView::Helpers::ScriptaculousHelper for more information.
def
draggable
(
id
,
options
=
{})
record
@context
.
send
(
:draggable_element_js
,
id
,
options
)
end
# Creates a script.aculo.us drop receiving element.
# See ActionView::Helpers::ScriptaculousHelper for more information.
def
drop_receiving
(
id
,
options
=
{})
record
@context
.
send
(
:drop_receiving_element_js
,
id
,
options
)
end
end
end
end
end
end
actionpack/test/template/scriptaculous_helper_test.rb
已删除
100644 → 0
浏览文件 @
5850f169
require
'abstract_unit'
class
ScriptaculousHelperTest
<
ActionView
::
TestCase
tests
ActionView
::
Helpers
::
ScriptaculousHelper
def
url_for
(
options
)
url
=
"http://www.example.com/"
url
<<
options
[
:action
].
to_s
if
options
and
options
[
:action
]
url
end
def
test_effect
assert_equal
"new Effect.Highlight(
\"
posts
\"
,{});"
,
visual_effect
(
:highlight
,
"posts"
)
assert_equal
"new Effect.Highlight(
\"
posts
\"
,{});"
,
visual_effect
(
"highlight"
,
:posts
)
assert_equal
"new Effect.Highlight(
\"
posts
\"
,{});"
,
visual_effect
(
:highlight
,
:posts
)
assert_equal
"new Effect.Fade(
\"
fademe
\"
,{duration:4.0});"
,
visual_effect
(
:fade
,
"fademe"
,
:duration
=>
4.0
)
assert_equal
"new Effect.Shake(element,{});"
,
visual_effect
(
:shake
)
assert_equal
"new Effect.DropOut(
\"
dropme
\"
,{queue:'end'});"
,
visual_effect
(
:drop_out
,
'dropme'
,
:queue
=>
:end
)
assert_equal
"new Effect.Highlight(
\"
status
\"
,{endcolor:'#EEEEEE'});"
,
visual_effect
(
:highlight
,
'status'
,
:endcolor
=>
'#EEEEEE'
)
assert_equal
"new Effect.Highlight(
\"
status
\"
,{restorecolor:'#500000', startcolor:'#FEFEFE'});"
,
visual_effect
(
:highlight
,
'status'
,
:restorecolor
=>
'#500000'
,
:startcolor
=>
'#FEFEFE'
)
# chop the queue params into a comma separated list
beginning
,
ending
=
'new Effect.DropOut("dropme",{queue:{'
,
'}});'
ve
=
[
visual_effect
(
:drop_out
,
'dropme'
,
:queue
=>
{
:position
=>
"end"
,
:scope
=>
"test"
,
:limit
=>
2
}),
visual_effect
(
:drop_out
,
'dropme'
,
:queue
=>
{
:scope
=>
:list
,
:limit
=>
2
}),
visual_effect
(
:drop_out
,
'dropme'
,
:queue
=>
{
:position
=>
:end
,
:scope
=>
:test
,
:limit
=>
2
})
].
collect
{
|
v
|
v
[
beginning
.
length
..-
ending
.
length
-
1
].
split
(
','
)
}
assert
ve
[
0
].
include?
(
"limit:2"
)
assert
ve
[
0
].
include?
(
"scope:'test'"
)
assert
ve
[
0
].
include?
(
"position:'end'"
)
assert
ve
[
1
].
include?
(
"limit:2"
)
assert
ve
[
1
].
include?
(
"scope:'list'"
)
assert
ve
[
2
].
include?
(
"limit:2"
)
assert
ve
[
2
].
include?
(
"scope:'test'"
)
assert
ve
[
2
].
include?
(
"position:'end'"
)
end
def
test_toggle_effects
assert_equal
"Effect.toggle(
\"
posts
\"
,'appear',{});"
,
visual_effect
(
:toggle_appear
,
"posts"
)
assert_equal
"Effect.toggle(
\"
posts
\"
,'slide',{});"
,
visual_effect
(
:toggle_slide
,
"posts"
)
assert_equal
"Effect.toggle(
\"
posts
\"
,'blind',{});"
,
visual_effect
(
:toggle_blind
,
"posts"
)
assert_equal
"Effect.toggle(
\"
posts
\"
,'appear',{});"
,
visual_effect
(
"toggle_appear"
,
"posts"
)
assert_equal
"Effect.toggle(
\"
posts
\"
,'slide',{});"
,
visual_effect
(
"toggle_slide"
,
"posts"
)
assert_equal
"Effect.toggle(
\"
posts
\"
,'blind',{});"
,
visual_effect
(
"toggle_blind"
,
"posts"
)
end
def
test_sortable_element
assert_dom_equal
%(<script type=\"text/javascript\">\n//<![CDATA[\nSortable.create(\"mylist\", {onUpdate:function(){new Ajax.Request('http://www.example.com/order', {asynchronous:true, evalScripts:true, parameters:Sortable.serialize(\"mylist\")})}})\n//]]>\n</script>)
,
sortable_element
(
"mylist"
,
:url
=>
{
:action
=>
"order"
})
assert_equal
%(<script type=\"text/javascript\">\n//<![CDATA[\nSortable.create(\"mylist\", {constraint:'horizontal', onUpdate:function(){new Ajax.Request('http://www.example.com/order', {asynchronous:true, evalScripts:true, parameters:Sortable.serialize(\"mylist\")})}, tag:'div'})\n//]]>\n</script>)
,
sortable_element
(
"mylist"
,
:tag
=>
"div"
,
:constraint
=>
"horizontal"
,
:url
=>
{
:action
=>
"order"
})
assert_dom_equal
%|<script type=\"text/javascript\">\n//<![CDATA[\nSortable.create(\"mylist\", {constraint:'horizontal', containment:['list1','list2'], onUpdate:function(){new Ajax.Request('http://www.example.com/order', {asynchronous:true, evalScripts:true, parameters:Sortable.serialize(\"mylist\")})}})\n//]]>\n</script>|
,
sortable_element
(
"mylist"
,
:containment
=>
[
'list1'
,
'list2'
],
:constraint
=>
"horizontal"
,
:url
=>
{
:action
=>
"order"
})
assert_dom_equal
%(<script type=\"text/javascript\">\n//<![CDATA[\nSortable.create(\"mylist\", {constraint:'horizontal', containment:'list1', onUpdate:function(){new Ajax.Request('http://www.example.com/order', {asynchronous:true, evalScripts:true, parameters:Sortable.serialize(\"mylist\")})}})\n//]]>\n</script>)
,
sortable_element
(
"mylist"
,
:containment
=>
'list1'
,
:constraint
=>
"horizontal"
,
:url
=>
{
:action
=>
"order"
})
end
def
test_draggable_element
assert_dom_equal
%(<script type=\"text/javascript\">\n//<![CDATA[\nnew Draggable(\"product_13\", {})\n//]]>\n</script>)
,
draggable_element
(
"product_13"
)
assert_equal
%(<script type=\"text/javascript\">\n//<![CDATA[\nnew Draggable(\"product_13\", {revert:true})\n//]]>\n</script>)
,
draggable_element
(
"product_13"
,
:revert
=>
true
)
end
def
test_drop_receiving_element
assert_dom_equal
%(<script type=\"text/javascript\">\n//<![CDATA[\nDroppables.add(\"droptarget1\", {onDrop:function(element){new Ajax.Request('http://www.example.com/', {asynchronous:true, evalScripts:true, parameters:'id=' + encodeURIComponent(element.id)})}})\n//]]>\n</script>)
,
drop_receiving_element
(
"droptarget1"
)
assert_dom_equal
%(<script type=\"text/javascript\">\n//<![CDATA[\nDroppables.add(\"droptarget1\", {accept:'products', onDrop:function(element){new Ajax.Request('http://www.example.com/', {asynchronous:true, evalScripts:true, parameters:'id=' + encodeURIComponent(element.id)})}})\n//]]>\n</script>)
,
drop_receiving_element
(
"droptarget1"
,
:accept
=>
'products'
)
assert_dom_equal
%(<script type=\"text/javascript\">\n//<![CDATA[\nDroppables.add(\"droptarget1\", {accept:'products', onDrop:function(element){new Ajax.Updater('infobox', 'http://www.example.com/', {asynchronous:true, evalScripts:true, parameters:'id=' + encodeURIComponent(element.id)})}})\n//]]>\n</script>)
,
drop_receiving_element
(
"droptarget1"
,
:accept
=>
'products'
,
:update
=>
'infobox'
)
assert_dom_equal
%(<script type=\"text/javascript\">\n//<![CDATA[\nDroppables.add(\"droptarget1\", {accept:['tshirts','mugs'], onDrop:function(element){new Ajax.Updater('infobox', 'http://www.example.com/', {asynchronous:true, evalScripts:true, parameters:'id=' + encodeURIComponent(element.id)})}})\n//]]>\n</script>)
,
drop_receiving_element
(
"droptarget1"
,
:accept
=>
[
'tshirts'
,
'mugs'
],
:update
=>
'infobox'
)
assert_dom_equal
%(<script type=\"text/javascript\">\n//<![CDATA[\nDroppables.add("droptarget1", {hoverclass:'dropready', onDrop:function(element){if (confirm('Are you sure?')) { new Ajax.Request('http://www.example.com/update_drop', {asynchronous:true, evalScripts:true, parameters:'id=' + encodeURIComponent(element.id)}); }}})\n//]]>\n</script>)
,
drop_receiving_element
(
'droptarget1'
,
:hoverclass
=>
'dropready'
,
:url
=>
{
:action
=>
'update_drop'
},
:confirm
=>
'Are you sure?'
)
end
def
protect_against_forgery?
false
end
end
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录