maiha-mjs 0.0.4 → 0.0.5

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.
Files changed (3) hide show
  1. data/Rakefile +1 -1
  2. data/lib/mjs/helper.rb +34 -18
  3. metadata +1 -1
data/Rakefile CHANGED
@@ -9,7 +9,7 @@ AUTHOR = "maiha"
9
9
  EMAIL = "maiha@wota.jp"
10
10
  HOMEPAGE = "http://github.com/maiha/mjs"
11
11
  SUMMARY = "A slice for the Merb framework that offers Ajax actions like RJS with jQuery"
12
- GEM_VERSION = "0.0.4"
12
+ GEM_VERSION = "0.0.5"
13
13
 
14
14
  spec = Gem::Specification.new do |s|
15
15
  s.rubyforge_project = 'merb'
data/lib/mjs/helper.rb CHANGED
@@ -8,11 +8,14 @@ module Mjs
8
8
 
9
9
  def remote_function(opts)
10
10
  build_href(opts)
11
- if opts[:submit]
12
- "$.ajax(%s);" % options_for_ajax(opts)
13
- else
14
- "$.getScript('#{opts[:href]}')"
11
+ unless opts[:submit]
12
+ opts[:url] ||= opts[:href]
13
+ opts[:dataType] = "script"
15
14
  end
15
+ function = "jQuery.ajax(%s);" % options_for_ajax(opts)
16
+ confirm = opts.delete(:confirm)
17
+ function = "if (confirm('#{escape_javascript(confirm)}')) { #{function}; }" if confirm
18
+ return function
16
19
  end
17
20
 
18
21
  # experimental: not tested yet
@@ -84,26 +87,32 @@ module Mjs
84
87
  :xhr => :xhr,
85
88
  }
86
89
 
90
+
87
91
  def options_for_ajax(options)
88
92
  js_options = build_callbacks!(options)
89
93
 
90
94
  submit = options.delete(:submit)
91
95
  target =
92
96
  case submit
93
- when Symbol then "$('##{submit} input')"
94
- when String then "$('#{submit}')"
97
+ when Symbol then "jQuery('##{submit} input, ##{submit} textarea')"
98
+ when String then "jQuery('#{submit}')"
95
99
  when NilClass # GET requst
96
100
  else
97
101
  raise ArgumentError, "link_to :submit expects Symbol or String, but got #{submit.class.name}"
98
102
  end
99
-
100
103
  build_href(options)
101
104
 
102
- js_options[:type] = "'POST'"
103
- js_options[:url] = "'#{options[:href]}'"
104
- js_options[:data] = "#{target}.serialize()"
105
+ if target
106
+ js_options[:type] = "'POST'"
107
+ js_options[:data] = "#{target}.serialize()"
108
+ end
109
+ js_options[:url] = "'#{options[:url] || options[:href]}'"
105
110
  js_options[:dataType] = "'script'"
106
111
 
112
+ if js_options[:url].blank?
113
+ raise "Cannot build ajax options because url is blank. (#{options.inspect})"
114
+ end
115
+
107
116
  options_for_javascript(js_options)
108
117
  end
109
118
 
@@ -117,8 +126,8 @@ module Mjs
117
126
 
118
127
  def jquery_selector(key)
119
128
  case key
120
- when Symbol then "$('##{key}')"
121
- when String then "$('#{key}')"
129
+ when Symbol then "jQuery('##{key}')"
130
+ when String then "jQuery('#{key}')"
122
131
  else
123
132
  raise "invalid jquery selector: [#{key.class}] #{key}"
124
133
  end
@@ -128,11 +137,19 @@ module Mjs
128
137
  def build_callbacks!(options)
129
138
  callbacks = {}
130
139
 
131
- # special callback
132
- spinner = options.delete(:spinner)
133
- if spinner
134
- options[:before] = [options[:before], "%s.show()" % jquery_selector(spinner)].compact * ';'
135
- options[:complete] = [options[:complete], "%s.hide()" % jquery_selector(spinner)].compact * ';'
140
+ [:before, :complete].each do |event|
141
+ options[event] = Array(options[event])
142
+ end
143
+
144
+ # special callback (:spinner)
145
+ if options[:spinner]
146
+ target = jquery_selector(options.delete(:spinner))
147
+ options[:before] << "#{target}.show()"
148
+ options[:complete] << "#{target}.hide()"
149
+ end
150
+
151
+ [:before, :complete].each do |event|
152
+ options[event] = options[event].compact * ';'
136
153
  end
137
154
 
138
155
  options.each do |callback, code|
@@ -144,6 +161,5 @@ module Mjs
144
161
 
145
162
  callbacks
146
163
  end
147
-
148
164
  end
149
165
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: maiha-mjs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - maiha