ajax 1.0.8 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +5 -3
- data/Gemfile.lock +34 -8
- data/README.rdoc +76 -63
- data/Rakefile +3 -1
- data/VERSION +1 -1
- data/app/controllers/ajax_controller.rb +6 -0
- data/init.rb +6 -0
- data/lib/ajax.rb +13 -24
- data/lib/ajax/action_controller.rb +120 -65
- data/lib/ajax/application.rb +62 -0
- data/lib/ajax/helpers/request_helper.rb +2 -2
- data/lib/ajax/helpers/task_helper.rb +2 -2
- data/lib/ajax/railtie.rb +25 -1
- data/lib/ajax/routes.rb +7 -3
- data/lib/ajax/rspec.rb +2 -0
- data/lib/ajax/{spec → rspec}/extension.rb +4 -11
- data/lib/ajax/{spec → rspec}/helpers.rb +10 -10
- data/lib/ajax/rspec/integration.rb +24 -0
- data/lib/rack-ajax.rb +1 -1
- data/lib/rack-ajax/parser.rb +2 -2
- data/public/javascripts/{jquery.address-1.2rc.js → jquery.address-1.3.js} +340 -197
- data/public/javascripts/jquery.address-1.3.min.js +32 -0
- data/rails/init.rb +1 -4
- data/rails/install.rb +1 -1
- data/rails/routes.rb +6 -0
- data/tasks/ajax_tasks.rake +11 -2
- metadata +41 -25
- data/app/views/ajax/_redirect_with_fragment.html.erb +0 -19
- data/public/javascripts/jquery.address-1.1.js +0 -450
- data/public/javascripts/jquery.address-1.1.min.js +0 -11
- data/public/javascripts/jquery.address-1.2.js +0 -528
- data/public/javascripts/jquery.address-1.2.min.js +0 -25
- data/public/javascripts/jquery.address-1.2rc.min.js +0 -27
- data/rails/uninstall.rb +0 -1
- data/spec/ajax/ajax_spec.rb +0 -23
- data/spec/ajax/helpers_spec.rb +0 -121
- data/spec/ajax/request_helper_spec.rb +0 -52
- data/spec/ajax/tasks_spec.rb +0 -48
- data/spec/integration/ajax_spec.rb +0 -146
- data/spec/rack-ajax/parser_spec.rb +0 -62
- data/spec/spec.opts +0 -1
- data/spec/spec_helper.rb +0 -17
- data/spec/support/file_macros.rb +0 -28
- data/spec/support/query_count.rb +0 -0
- data/spec/support/response_helpers.rb +0 -7
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
|
3
|
+
module Ajax
|
4
|
+
# A class with framework/application related methods like discovering
|
5
|
+
# which version of Rails we are running under.
|
6
|
+
class Application
|
7
|
+
# Return a boolean indicating whether the Rails constant is defined.
|
8
|
+
# Pass a <tt>version</tt> integer to determine whether the major version
|
9
|
+
# of Rails matches <tt>version</tt>.
|
10
|
+
#
|
11
|
+
# Example: rails?(3) returns true when Rails.version.to_i == 3.
|
12
|
+
#
|
13
|
+
# Returns false if Rails is not defined or the major version does not match.
|
14
|
+
def rails?(version=nil)
|
15
|
+
!!(if version.nil?
|
16
|
+
defined?(::Rails)
|
17
|
+
elsif defined?(::Rails)
|
18
|
+
if ::Rails.respond_to?(:version)
|
19
|
+
::Rails.version.to_i == version
|
20
|
+
else
|
21
|
+
version <= 2 # Rails.version defined in 2.1.0
|
22
|
+
end
|
23
|
+
else
|
24
|
+
false
|
25
|
+
end)
|
26
|
+
end
|
27
|
+
|
28
|
+
def root
|
29
|
+
Pathname.new(rails? && Rails.root || Dir.getwd)
|
30
|
+
end
|
31
|
+
|
32
|
+
# Include framework hooks for Rails
|
33
|
+
#
|
34
|
+
# This method is called by <tt>init.rb</tt>, which is run by Rails on startup.
|
35
|
+
#
|
36
|
+
# Customize rendering. Include custom headers and don't render the layout for AJAX.
|
37
|
+
# Insert the Rack::Ajax middleware to rewrite and handle requests.
|
38
|
+
# Add custom attributes to outgoing links.
|
39
|
+
#
|
40
|
+
# Hooks for Rails 3 are installed using Railties.
|
41
|
+
def init
|
42
|
+
return unless rails?
|
43
|
+
if rails?(3)
|
44
|
+
require 'ajax/railtie'
|
45
|
+
else
|
46
|
+
require 'ajax/action_controller'
|
47
|
+
require 'ajax/action_view'
|
48
|
+
|
49
|
+
Ajax.logger = ::Rails.logger
|
50
|
+
|
51
|
+
# Customize rendering. Include custom headers and don't render the layout for AJAX.
|
52
|
+
::ActionController::Base.send(:include, Ajax::ActionController)
|
53
|
+
|
54
|
+
# Insert the Rack::Ajax middleware to rewrite and handle requests
|
55
|
+
::ActionController::Dispatcher.middleware.insert_before(Rack::Head, Rack::Ajax)
|
56
|
+
|
57
|
+
# Add custom attributes to outgoing links
|
58
|
+
::ActionView::Base.send(:include, Ajax::ActionView)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -24,7 +24,7 @@ module Ajax
|
|
24
24
|
# All Hash and Array values are deep-merged.
|
25
25
|
# Hash keys are converted to Strings.
|
26
26
|
def set_header(object, key, value)
|
27
|
-
headers = object.is_a?(
|
27
|
+
headers = object.is_a?(Hash) ? object : object.headers # ::ActionController::Response
|
28
28
|
key = key.to_s
|
29
29
|
|
30
30
|
info = case headers["Ajax-Info"]
|
@@ -61,7 +61,7 @@ module Ajax
|
|
61
61
|
# <tt>object</tt> can be a Hash or instance of <tt>ActionController::Request</tt>
|
62
62
|
# <tt>key</tt> Symbol or String hash key, converted to String
|
63
63
|
def get_header(object, key)
|
64
|
-
headers = object.is_a?(
|
64
|
+
headers = object.is_a?(Hash) ? object : object.headers # ::ActionController::Request
|
65
65
|
key = key.to_s
|
66
66
|
|
67
67
|
info = case headers["Ajax-Info"]
|
@@ -6,8 +6,8 @@ module Ajax
|
|
6
6
|
app/views/ajax/framework.html.erb
|
7
7
|
config/initializers/ajax.rb
|
8
8
|
public/javascripts/ajax.js
|
9
|
-
public/javascripts/jquery.address-1.
|
10
|
-
public/javascripts/jquery.address-1.
|
9
|
+
public/javascripts/jquery.address-1.3.js
|
10
|
+
public/javascripts/jquery.address-1.3.min.js
|
11
11
|
public/javascripts/jquery.json-2.2.min.js
|
12
12
|
public/images/ajax-loading.gif]
|
13
13
|
|
data/lib/ajax/railtie.rb
CHANGED
@@ -1,7 +1,31 @@
|
|
1
|
+
require 'ajax/action_controller'
|
2
|
+
require 'ajax/action_view'
|
3
|
+
|
1
4
|
module Ajax
|
2
5
|
class Railtie < Rails::Railtie
|
3
6
|
rake_tasks do
|
4
|
-
load(File.expand_path(
|
7
|
+
load(File.expand_path('../../../tasks/ajax_tasks.rake', __FILE__))
|
8
|
+
end
|
9
|
+
|
10
|
+
initializer 'ajax.action_integration' do
|
11
|
+
ActiveSupport.on_load :action_view do
|
12
|
+
include Ajax::ActionView
|
13
|
+
end
|
14
|
+
ActiveSupport.on_load :action_controller do
|
15
|
+
include Ajax::ActionController
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
initializer "ajax.middleware" do |app|
|
20
|
+
app.config.middleware.insert_before "ActionDispatch::Head", "Rack::Ajax"
|
21
|
+
end
|
22
|
+
|
23
|
+
initializer 'ajax.routes' do |app|
|
24
|
+
app.routes_reloader.paths << Ajax.root + 'rails/routes.rb'
|
25
|
+
end
|
26
|
+
|
27
|
+
initializer 'ajax.logger' do |app|
|
28
|
+
Ajax.logger = ::Rails.logger
|
5
29
|
end
|
6
30
|
end
|
7
31
|
end
|
data/lib/ajax/routes.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'ajax'
|
2
|
-
|
3
1
|
module Ajax
|
4
2
|
module Routes
|
5
3
|
# In your <tt>config/routes.rb</tt> file call:
|
@@ -8,8 +6,14 @@ module Ajax
|
|
8
6
|
#
|
9
7
|
# Adds an <tt>ajax_framework_path</tt> pointing to <tt>Ajax.framework_path</tt>
|
10
8
|
# which is <tt>/ajax/framework</tt> by default.
|
9
|
+
#
|
10
|
+
# Only applies when installed as a gem in Rails 2 or less.
|
11
11
|
def self.draw(map)
|
12
|
-
|
12
|
+
if Ajax.app.rails?(3) && map.respond_to?(:match)
|
13
|
+
map.match Ajax.framework_path, :to => 'ajax#framework', :as => 'ajax_framework'
|
14
|
+
else
|
15
|
+
map.ajax_framework Ajax.framework_path, :controller => 'ajax', :action => 'framework'
|
16
|
+
end
|
13
17
|
end
|
14
18
|
end
|
15
19
|
end
|
data/lib/ajax/rspec.rb
ADDED
@@ -1,6 +1,9 @@
|
|
1
1
|
module Ajax
|
2
|
-
module
|
2
|
+
module RSpec
|
3
3
|
module Extension
|
4
|
+
def included(base)
|
5
|
+
require 'ajax/rspec/integration'
|
6
|
+
end
|
4
7
|
|
5
8
|
def integrate_ajax
|
6
9
|
Ajax.enabled = true
|
@@ -21,14 +24,4 @@ module Ajax
|
|
21
24
|
end
|
22
25
|
end
|
23
26
|
end
|
24
|
-
end
|
25
|
-
|
26
|
-
module ActiveSupport
|
27
|
-
class TestCase
|
28
|
-
include Ajax::Spec::Extension
|
29
|
-
|
30
|
-
before(:all) do
|
31
|
-
::Ajax.enabled = false
|
32
|
-
end if method_defined?(:before)
|
33
|
-
end
|
34
27
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'uri'
|
2
2
|
|
3
3
|
module Ajax
|
4
|
-
module
|
4
|
+
module RSpec
|
5
5
|
module Helpers
|
6
6
|
|
7
7
|
def create_app
|
@@ -55,14 +55,14 @@ module Ajax
|
|
55
55
|
# Response must be [code, {headers}, ['Response']]
|
56
56
|
# Headers must contain the Content-Type header
|
57
57
|
def should_be_a_valid_response
|
58
|
-
return if
|
59
|
-
@response.should
|
58
|
+
return if !@response.is_a?(Array) # ::ActionController::Response
|
59
|
+
@response.should be_a(Array)
|
60
60
|
@response.size.should == 3
|
61
|
-
@response[0].should
|
62
|
-
@response[1].should
|
61
|
+
@response[0].should be_a(Integer)
|
62
|
+
@response[1].should be_a(Hash)
|
63
63
|
@response[1]['Content-Type'].should =~ %r[^text\/\w+]
|
64
|
-
@response[2].should
|
65
|
-
@response[2][0].should
|
64
|
+
@response[2].should be_a(Array)
|
65
|
+
@response[2][0].should be_a(String)
|
66
66
|
end
|
67
67
|
|
68
68
|
def env(uri, request_method, options={})
|
@@ -76,15 +76,15 @@ module Ajax
|
|
76
76
|
end
|
77
77
|
|
78
78
|
def response_body
|
79
|
-
@response.is_a?(
|
79
|
+
@response.is_a?(Array) ? @response[2][0] : @response.body
|
80
80
|
end
|
81
81
|
|
82
82
|
def response_code
|
83
|
-
@response.is_a?(
|
83
|
+
@response.is_a?(Array) ? @response[0] : @response.status.to_i
|
84
84
|
end
|
85
85
|
|
86
86
|
def response_headers
|
87
|
-
@response.is_a?(
|
87
|
+
@response.is_a?(Array) ? @response[1] : @response.headers.to_hash
|
88
88
|
end
|
89
89
|
|
90
90
|
def response_body_as_hash
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# Only require integration module when extensions are included.
|
2
|
+
# RSpec integration. Add a before filter to disable Ajax before all tests.
|
3
|
+
module Ajax::RSpec::Integration
|
4
|
+
if defined?(RSpec)
|
5
|
+
RSpec.configure do |c|
|
6
|
+
c.before do
|
7
|
+
::Ajax.enabled = false
|
8
|
+
end
|
9
|
+
end
|
10
|
+
elsif defined?(Spec)
|
11
|
+
Spec::Runner.configure do |c|
|
12
|
+
c.before :all do
|
13
|
+
::Ajax.enabled = false
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
# ActiveSupport::TestCase integration
|
20
|
+
module ActiveSupport
|
21
|
+
class TestCase
|
22
|
+
include Ajax::RSpec::Extension
|
23
|
+
end
|
24
|
+
end
|
data/lib/rack-ajax.rb
CHANGED
@@ -49,7 +49,7 @@ module Rack
|
|
49
49
|
# To test rewrites, return a 200 response with
|
50
50
|
# the modified request environment encoded as Yaml.
|
51
51
|
#
|
52
|
-
# The Ajax::
|
52
|
+
# The Ajax::RSpec::Helpers module includes a helper
|
53
53
|
# method to test the result of a rewrite.
|
54
54
|
if ::Ajax.is_mocked?
|
55
55
|
rack_response.nil? ? Rack::Ajax::Parser.rack_response(encode_env(env)) : rack_response
|
data/lib/rack-ajax/parser.rb
CHANGED
@@ -10,7 +10,7 @@ module Rack
|
|
10
10
|
# easier to introspect the headers.
|
11
11
|
def initialize(env)
|
12
12
|
@env = env
|
13
|
-
@request =
|
13
|
+
@request = Rack::Request.new(env)
|
14
14
|
end
|
15
15
|
|
16
16
|
protected
|
@@ -20,7 +20,7 @@ module Rack
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def ajax_request?
|
23
|
-
@request.
|
23
|
+
@request.xhr?
|
24
24
|
end
|
25
25
|
|
26
26
|
def get_request?
|
@@ -1,12 +1,12 @@
|
|
1
1
|
/*
|
2
|
-
* jQuery Address Plugin v1.
|
2
|
+
* jQuery Address Plugin v1.3
|
3
3
|
* http://www.asual.com/jquery/address/
|
4
4
|
*
|
5
5
|
* Copyright (c) 2009-2010 Rostislav Hristov
|
6
6
|
* Dual licensed under the MIT or GPL Version 2 licenses.
|
7
7
|
* http://jquery.org/license
|
8
8
|
*
|
9
|
-
* Date: 2010-
|
9
|
+
* Date: 2010-09-26 17:58:16 +0300 (Sun, 26 Sep 2010)
|
10
10
|
*/
|
11
11
|
(function ($) {
|
12
12
|
|
@@ -34,14 +34,22 @@
|
|
34
34
|
);
|
35
35
|
},
|
36
36
|
_bind = function(value, data, fn) {
|
37
|
-
|
38
|
-
$($.address).bind(value, fn || data, fn && data);
|
39
|
-
}
|
37
|
+
$($.address).bind(value, data, fn);
|
40
38
|
return $.address;
|
41
39
|
},
|
42
|
-
|
40
|
+
_supportsState = function() {
|
41
|
+
return (_h.pushState && typeof _opts.state !== UNDEFINED);
|
42
|
+
},
|
43
|
+
_hrefState = function() {
|
44
|
+
return '/' + _l.pathname.replace(new RegExp(_opts.state), '') +
|
45
|
+
_l.search + (_hrefHash() ? '#' + _hrefHash() : '');
|
46
|
+
},
|
47
|
+
_hrefHash = function() {
|
43
48
|
var index = _l.href.indexOf('#');
|
44
|
-
return index != -1 ?
|
49
|
+
return index != -1 ? _crawl(_l.href.substr(index + 1), FALSE) : '';
|
50
|
+
},
|
51
|
+
_href = function() {
|
52
|
+
return _supportsState() ? _hrefState() : _hrefHash();
|
45
53
|
},
|
46
54
|
_window = function() {
|
47
55
|
try {
|
@@ -59,10 +67,6 @@
|
|
59
67
|
}
|
60
68
|
return value;
|
61
69
|
},
|
62
|
-
_local = function(value, direction) {
|
63
|
-
return (_msie && _l.protocol == 'file:') ?
|
64
|
-
(direction ? _value.replace(/\?/, '%3F') : _value.replace(/%253F/, '?')) : value;
|
65
|
-
},
|
66
70
|
_crawl = function(value, direction) {
|
67
71
|
if (_opts.crawlable && direction) {
|
68
72
|
return (value != '' ? '!' : '') + value;
|
@@ -87,9 +91,9 @@
|
|
87
91
|
},
|
88
92
|
_listen = function() {
|
89
93
|
if (!_silent) {
|
90
|
-
var hash =
|
94
|
+
var hash = _href(),
|
91
95
|
diff = _value != hash;
|
92
|
-
if (
|
96
|
+
if (_webkit && _version < 523) {
|
93
97
|
if (_length != _h.length) {
|
94
98
|
_length = _h.length;
|
95
99
|
if (typeof _stack[_length - 1] != UNDEFINED) {
|
@@ -97,11 +101,16 @@
|
|
97
101
|
}
|
98
102
|
_update(FALSE);
|
99
103
|
}
|
100
|
-
} else if (_msie && _version < 7 && diff) {
|
101
|
-
_l.reload();
|
102
104
|
} else if (diff) {
|
103
|
-
|
104
|
-
|
105
|
+
if (_msie && _version < 7) {
|
106
|
+
_l.reload();
|
107
|
+
} else {
|
108
|
+
if (_msie && _version < 8 && _opts.history) {
|
109
|
+
_st(_html, 50);
|
110
|
+
}
|
111
|
+
_value = hash;
|
112
|
+
_update(FALSE);
|
113
|
+
}
|
105
114
|
}
|
106
115
|
}
|
107
116
|
},
|
@@ -111,38 +120,67 @@
|
|
111
120
|
_st(_track, 10);
|
112
121
|
},
|
113
122
|
_track = function() {
|
114
|
-
|
115
|
-
fn =
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
123
|
+
if (_opts.tracker !== 'null' && _opts.tracker !== null) {
|
124
|
+
var fn = $.isFunction(_opts.tracker) ? _opts.tracker : _t[_opts.tracker],
|
125
|
+
value = (_l.pathname + _l.search +
|
126
|
+
($.address && !_supportsState() ? $.address.value() : ''))
|
127
|
+
.replace(/\/\//, '/').replace(/^\/$/, '');
|
128
|
+
if ($.isFunction(fn)) {
|
129
|
+
fn(value);
|
130
|
+
} else if ($.isFunction(_t.urchinTracker)) {
|
131
|
+
_t.urchinTracker(value);
|
132
|
+
} else if (typeof _t.pageTracker != UNDEFINED && $.isFunction(_t.pageTracker._trackPageview)) {
|
133
|
+
_t.pageTracker._trackPageview(value);
|
134
|
+
} else if (typeof _t._gaq != UNDEFINED && $.isFunction(_t._gaq.push)) {
|
135
|
+
_t._gaq.push(['_trackPageview', value]);
|
136
|
+
}
|
124
137
|
}
|
125
138
|
},
|
126
139
|
_html = function() {
|
127
|
-
var
|
128
|
-
|
129
|
-
|
130
|
-
|
140
|
+
var src = _js() + ':' + FALSE + ';document.open();document.writeln(\'<html><head><title>' +
|
141
|
+
_d.title + '</title><script>var ' + ID + ' = "' + _href() +
|
142
|
+
(_d.domain != _l.host ? '";document.domain="' + _d.domain : '') +
|
143
|
+
'";</' + 'script></head></html>\');document.close();';
|
144
|
+
if (_version < 7) {
|
145
|
+
_frame.src = src;
|
146
|
+
} else {
|
147
|
+
_frame.contentWindow.location.replace(src);
|
148
|
+
}
|
149
|
+
},
|
150
|
+
_options = function() {
|
151
|
+
if (_url && _qi != -1) {
|
152
|
+
var param, params = _url.substr(_qi + 1).split('&');
|
153
|
+
for (i = 0; i < params.length; i++) {
|
154
|
+
param = params[i].split('=');
|
155
|
+
if (/^(autoUpdate|crawlable|history|strict|wrap)$/.test(param[0])) {
|
156
|
+
_opts[param[0]] = (isNaN(param[1]) ? /^(true|yes)$/i.test(param[1]) : (parseInt(param[1], 10) !== 0));
|
157
|
+
}
|
158
|
+
if (/^(state|tracker)$/.test(param[0])) {
|
159
|
+
_opts[param[0]] = param[1];
|
160
|
+
}
|
161
|
+
}
|
162
|
+
_url = null;
|
163
|
+
}
|
164
|
+
_value = _href();
|
131
165
|
},
|
132
166
|
_load = function() {
|
133
167
|
if (!_loaded) {
|
134
168
|
_loaded = TRUE;
|
169
|
+
_options();
|
170
|
+
var body = $('body').ajaxComplete(function() {
|
171
|
+
_enable.call(this);
|
172
|
+
_unescape.call(this);
|
173
|
+
}).trigger('ajaxComplete');
|
135
174
|
if (_opts.wrap) {
|
136
|
-
var
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
(_safari ? (window.statusbar.visible && !/chrome/i.test(_agent) ? '' : ' resize:both;') : '') + '" />');
|
175
|
+
var wrap = $('body > *')
|
176
|
+
.wrapAll('<div style="padding:' +
|
177
|
+
(_cssint(body, 'marginTop') + _cssint(body, 'paddingTop')) + 'px ' +
|
178
|
+
(_cssint(body, 'marginRight') + _cssint(body, 'paddingRight')) + 'px ' +
|
179
|
+
(_cssint(body, 'marginBottom') + _cssint(body, 'paddingBottom')) + 'px ' +
|
180
|
+
(_cssint(body, 'marginLeft') + _cssint(body, 'paddingLeft')) + 'px;" />')
|
181
|
+
.parent()
|
182
|
+
.wrap('<div id="' + ID + '" style="height:100%; overflow:auto;' +
|
183
|
+
(_webkit ? (window.statusbar.visible && !/chrome/i.test(_agent) ? '' : ' resize:both;') : '') + '" />');
|
146
184
|
$('html, body')
|
147
185
|
.css({
|
148
186
|
height: '100%',
|
@@ -150,7 +188,7 @@
|
|
150
188
|
padding: 0,
|
151
189
|
overflow: 'hidden'
|
152
190
|
});
|
153
|
-
if (
|
191
|
+
if (_webkit) {
|
154
192
|
$('<style type="text/css" />')
|
155
193
|
.appendTo('head')
|
156
194
|
.text('#' + ID + '::-webkit-resizer { background-color: #fff; }');
|
@@ -162,12 +200,12 @@
|
|
162
200
|
if (frameset) {
|
163
201
|
frameset.insertAdjacentElement('beforeEnd', _frame);
|
164
202
|
frameset[frameset.cols ? 'cols' : 'rows'] += ',0';
|
165
|
-
_frame.src = _js() + ':' + FALSE;
|
166
203
|
_frame.noResize = TRUE;
|
167
204
|
_frame.frameBorder = _frame.frameSpacing = 0;
|
168
205
|
} else {
|
169
|
-
_frame.src = _js() + ':' + FALSE;
|
170
206
|
_frame.style.display = 'none';
|
207
|
+
_frame.style.width = _frame.style.height = 0;
|
208
|
+
_frame.tabIndex = -1;
|
171
209
|
_d.body.insertAdjacentElement('afterBegin', _frame);
|
172
210
|
}
|
173
211
|
_st(function() {
|
@@ -175,16 +213,16 @@
|
|
175
213
|
var win = _frame.contentWindow;
|
176
214
|
var src = win.location.href;
|
177
215
|
_value = (typeof win[ID] != UNDEFINED ? win[ID] : '');
|
178
|
-
if (_value !=
|
216
|
+
if (_value != _href()) {
|
179
217
|
_update(FALSE);
|
180
|
-
_l.hash =
|
218
|
+
_l.hash = _crawl(_value, TRUE);
|
181
219
|
}
|
182
220
|
});
|
183
221
|
if (typeof _frame.contentWindow[ID] == UNDEFINED) {
|
184
222
|
_html();
|
185
223
|
}
|
186
224
|
}, 50);
|
187
|
-
} else if (
|
225
|
+
} else if (_webkit) {
|
188
226
|
if (_version < 418) {
|
189
227
|
$(_d.body).append('<form id="' + ID + '" style="position:absolute;top:-9999px;" method="get"></form>');
|
190
228
|
_form = _d.getElementById(ID);
|
@@ -201,17 +239,40 @@
|
|
201
239
|
_trigger('init');
|
202
240
|
_update(FALSE);
|
203
241
|
}, 1);
|
204
|
-
|
205
|
-
if (
|
206
|
-
if (_t
|
207
|
-
_t.addEventListener
|
208
|
-
|
209
|
-
_t.attachEvent
|
242
|
+
|
243
|
+
if (!_supportsState()) {
|
244
|
+
if ((_msie && _version > 7) || (!_msie && ('on' + HASH_CHANGE) in _t)) {
|
245
|
+
if (_t.addEventListener) {
|
246
|
+
_t.addEventListener(HASH_CHANGE, _listen, false);
|
247
|
+
} else if (_t.attachEvent) {
|
248
|
+
_t.attachEvent('on' + HASH_CHANGE, _listen);
|
249
|
+
}
|
250
|
+
} else {
|
251
|
+
_si(_listen, 50);
|
210
252
|
}
|
211
|
-
} else {
|
212
|
-
_si(_listen, 50);
|
213
253
|
}
|
214
|
-
|
254
|
+
}
|
255
|
+
},
|
256
|
+
_enable = function() {
|
257
|
+
var el,
|
258
|
+
elements = $('a'),
|
259
|
+
length = elements.size(),
|
260
|
+
delay = 1,
|
261
|
+
index = -1;
|
262
|
+
_st(function() {
|
263
|
+
if (++index != length) {
|
264
|
+
el = $(elements.get(index));
|
265
|
+
if (el.is('[rel*=address:]')) {
|
266
|
+
el.address();
|
267
|
+
}
|
268
|
+
_st(arguments.callee, delay);
|
269
|
+
}
|
270
|
+
}, delay);
|
271
|
+
},
|
272
|
+
_popstate = function() {
|
273
|
+
if (_value != _href()) {
|
274
|
+
_value = _href();
|
275
|
+
_update(FALSE);
|
215
276
|
}
|
216
277
|
},
|
217
278
|
_unload = function() {
|
@@ -221,8 +282,74 @@
|
|
221
282
|
_t.detachEvent('on' + HASH_CHANGE, _listen);
|
222
283
|
}
|
223
284
|
},
|
285
|
+
_unescape = function() {
|
286
|
+
var base = _l.pathname.replace(/\/$/, ''),
|
287
|
+
fragment = '_escaped_fragment_';
|
288
|
+
if ($('body').html().indexOf(fragment) != -1) {
|
289
|
+
$('a[href]:not([href^=http]), , a[href*=' + document.domain + ']', this).each(function() {
|
290
|
+
var href = $(this).attr('href').replace(/^http:/, '').replace(new RegExp(base + '/?$'), '');
|
291
|
+
if (href == '' || href.indexOf(fragment) != -1) {
|
292
|
+
$(this).attr('href', '#' + this.decode(href.replace(new RegExp('/(.*)\\?' + fragment + '=(.*)$'), '!$2')));
|
293
|
+
}
|
294
|
+
});
|
295
|
+
}
|
296
|
+
},
|
297
|
+
_encode = function(value) {
|
298
|
+
return encodeURIComponent(value).replace(/%20/g, '+');
|
299
|
+
},
|
300
|
+
_path = function(value) {
|
301
|
+
return value.split('#')[0].split('?')[0];
|
302
|
+
},
|
303
|
+
_pathNames = function(value) {
|
304
|
+
var path = _path(value),
|
305
|
+
names = path.replace(/\/{2,9}/g, '/').split('/');
|
306
|
+
if (path.substr(0, 1) == '/' || path.length === 0) {
|
307
|
+
names.splice(0, 1);
|
308
|
+
}
|
309
|
+
if (path.substr(path.length - 1, 1) == '/') {
|
310
|
+
names.splice(names.length - 1, 1);
|
311
|
+
}
|
312
|
+
return names;
|
313
|
+
},
|
314
|
+
_queryString = function(value) {
|
315
|
+
var arr = value.split('?');
|
316
|
+
return arr.slice(1, arr.length).join('?').split('#')[0];
|
317
|
+
},
|
318
|
+
_parameter = function(name, value) {
|
319
|
+
value = _queryString(value);
|
320
|
+
if (value) {
|
321
|
+
params = value.split('&');
|
322
|
+
var r = [];
|
323
|
+
for (i = 0; i < params.length; i++) {
|
324
|
+
var p = params[i].split('=');
|
325
|
+
if (p[0] == name) {
|
326
|
+
r.push(p.slice(1).join('='));
|
327
|
+
}
|
328
|
+
}
|
329
|
+
if (r.length !== 0) {
|
330
|
+
return r.length != 1 ? r : r[0];
|
331
|
+
}
|
332
|
+
}
|
333
|
+
},
|
334
|
+
_parameterNames = function(value) {
|
335
|
+
var qs = _queryString(value),
|
336
|
+
names = [];
|
337
|
+
if (qs && qs.indexOf('=') != -1) {
|
338
|
+
var params = qs.split('&');
|
339
|
+
for (var i = 0; i < params.length; i++) {
|
340
|
+
var name = params[i].split('=')[0];
|
341
|
+
if ($.inArray(name, names) == -1) {
|
342
|
+
names.push(name);
|
343
|
+
}
|
344
|
+
}
|
345
|
+
}
|
346
|
+
return names;
|
347
|
+
},
|
348
|
+
_hash = function(value) {
|
349
|
+
var arr = value.split('#');
|
350
|
+
return arr.slice(1, arr.length).join('#');
|
351
|
+
},
|
224
352
|
ID = 'jQueryAddress',
|
225
|
-
FUNCTION = 'function',
|
226
353
|
UNDEFINED = 'undefined',
|
227
354
|
HASH_CHANGE = 'hashchange',
|
228
355
|
INIT = 'init',
|
@@ -243,7 +370,7 @@
|
|
243
370
|
_mozilla = _browser.mozilla,
|
244
371
|
_msie = _browser.msie,
|
245
372
|
_opera = _browser.opera,
|
246
|
-
|
373
|
+
_webkit = _browser.webkit,
|
247
374
|
_supported = FALSE,
|
248
375
|
_t = _window(),
|
249
376
|
_d = _t.document,
|
@@ -251,8 +378,6 @@
|
|
251
378
|
_l = _t.location,
|
252
379
|
_si = setInterval,
|
253
380
|
_st = setTimeout,
|
254
|
-
_dc = decodeURI,
|
255
|
-
_ec = encodeURI,
|
256
381
|
_agent = navigator.userAgent,
|
257
382
|
_frame,
|
258
383
|
_form,
|
@@ -267,7 +392,7 @@
|
|
267
392
|
_updating = FALSE,
|
268
393
|
_stack = [],
|
269
394
|
_listeners = {},
|
270
|
-
_value =
|
395
|
+
_value = _href();
|
271
396
|
|
272
397
|
if (_msie) {
|
273
398
|
_version = parseFloat(_agent.substr(_agent.indexOf('MSIE') + 4));
|
@@ -275,7 +400,7 @@
|
|
275
400
|
_version = _d.documentMode != 8 ? 7 : 8;
|
276
401
|
}
|
277
402
|
$(document).bind('propertychange', function() {
|
278
|
-
if (_d.title != _title && _d.title.indexOf('#' +
|
403
|
+
if (_d.title != _title && _d.title.indexOf('#' + _href()) != -1) {
|
279
404
|
_d.title = _title;
|
280
405
|
}
|
281
406
|
});
|
@@ -285,69 +410,64 @@
|
|
285
410
|
(_mozilla && _version >= 1) ||
|
286
411
|
(_msie && _version >= 6) ||
|
287
412
|
(_opera && _version >= 9.5) ||
|
288
|
-
(
|
413
|
+
(_webkit && _version >= 312);
|
289
414
|
|
290
415
|
if (_supported) {
|
291
|
-
|
292
416
|
for (var i = 1; i < _length; i++) {
|
293
417
|
_stack.push('');
|
294
418
|
}
|
295
|
-
|
296
419
|
_stack.push(_value);
|
297
|
-
|
298
|
-
if (_msie && _l.hash != _value) {
|
299
|
-
_l.hash = '#' + _local(_crawl(_value, TRUE), TRUE);
|
300
|
-
}
|
301
|
-
|
302
420
|
if (_opera) {
|
303
|
-
history.navigationMode = 'compatible';
|
421
|
+
history.navigationMode = 'compatible';
|
304
422
|
}
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
if (/^(autoUpdate|crawlable|history|strict|wrap)$/.test(param[0])) {
|
311
|
-
_opts[param[0]] = (isNaN(param[1]) ? /^(true|yes)$/i.test(param[1]) : (parseInt(param[1], 10) !== 0));
|
423
|
+
if (document.readyState == 'complete') {
|
424
|
+
var interval = setInterval(function() {
|
425
|
+
if ($.address) {
|
426
|
+
_load();
|
427
|
+
clearInterval(interval);
|
312
428
|
}
|
313
|
-
|
314
|
-
|
429
|
+
}, 50);
|
430
|
+
} else {
|
431
|
+
_options();
|
432
|
+
$(_load);
|
433
|
+
}
|
434
|
+
var hrefState = _hrefState();
|
435
|
+
if (typeof _opts.state !== UNDEFINED) {
|
436
|
+
if (_h.pushState) {
|
437
|
+
if (hrefState.substr(0, 3) == '/#/') {
|
438
|
+
_l.replace(_opts.state.replace(/^\/$/, '') + hrefState.substr(2));
|
315
439
|
}
|
440
|
+
} else if (hrefState != '/' && hrefState.replace(/^\/#/, '') != _hrefHash()) {
|
441
|
+
_l.replace(_opts.state.replace(/^\/$/, '') + '/#' + hrefState);
|
316
442
|
}
|
317
443
|
}
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
$(_load);
|
323
|
-
$(window).bind('unload', _unload);
|
324
|
-
|
325
|
-
} else if ((!_supported && _hash() != '') ||
|
326
|
-
(_safari && _version < 418 && _hash() != '' && _l.search != '')) {
|
327
|
-
_d.open();
|
328
|
-
_d.write('<html><head><meta http-equiv="refresh" content="0;url=' +
|
329
|
-
encodeURI(_l.href.substr(0, _l.href.indexOf('#'))) + '" /></head></html>');
|
330
|
-
_d.close();
|
444
|
+
$(window).bind('popstate', _popstate).bind('unload', _unload);
|
445
|
+
} else if ((!_supported && _hrefHash() != '') ||
|
446
|
+
(_webkit && _version < 418 && _hrefHash() != '' && _l.search != '')) {
|
447
|
+
_l.replace(_l.href.substr(0, _l.href.indexOf('#')));
|
331
448
|
} else {
|
332
449
|
_track();
|
333
450
|
}
|
334
451
|
|
335
452
|
return {
|
336
|
-
|
337
|
-
return _bind(
|
453
|
+
bind: function(type, data, fn) {
|
454
|
+
return _bind(type, data, fn);
|
338
455
|
},
|
339
|
-
|
340
|
-
return _bind(
|
456
|
+
init: function(fn) {
|
457
|
+
return _bind(INIT, fn);
|
341
458
|
},
|
342
|
-
|
343
|
-
return _bind(
|
459
|
+
change: function(fn) {
|
460
|
+
return _bind(CHANGE, fn);
|
344
461
|
},
|
345
|
-
|
346
|
-
return _bind(
|
462
|
+
internalChange: function(fn) {
|
463
|
+
return _bind(INTERNAL_CHANGE, fn);
|
464
|
+
},
|
465
|
+
externalChange: function(fn) {
|
466
|
+
return _bind(EXTERNAL_CHANGE, fn);
|
347
467
|
},
|
348
468
|
baseURL: function() {
|
349
469
|
var url = _l.href;
|
350
|
-
if (
|
470
|
+
if (url.indexOf('#') != -1) {
|
351
471
|
url = url.substr(0, url.indexOf('#'));
|
352
472
|
}
|
353
473
|
if (/\/$/.test(url)) {
|
@@ -376,6 +496,13 @@
|
|
376
496
|
}
|
377
497
|
return _opts.history;
|
378
498
|
},
|
499
|
+
state: function(value) {
|
500
|
+
if (value !== undefined) {
|
501
|
+
_opts.state = value;
|
502
|
+
return this;
|
503
|
+
}
|
504
|
+
return _opts.state;
|
505
|
+
},
|
379
506
|
strict: function(value) {
|
380
507
|
if (value !== undefined) {
|
381
508
|
_opts.strict = value;
|
@@ -403,9 +530,51 @@
|
|
403
530
|
_updating = FALSE;
|
404
531
|
return this;
|
405
532
|
},
|
533
|
+
encode: function(value) {
|
534
|
+
var pathNames = _pathNames(value),
|
535
|
+
parameterNames = _parameterNames(value),
|
536
|
+
queryString = _queryString(value),
|
537
|
+
hash = _hash(value),
|
538
|
+
first = value.substr(0, 1),
|
539
|
+
last = value.substr(value.length - 1),
|
540
|
+
encoded = '';
|
541
|
+
$.each(pathNames, function(i, v) {
|
542
|
+
encoded += '/' + _encode(v);
|
543
|
+
});
|
544
|
+
if (queryString !== '') {
|
545
|
+
encoded += '?';
|
546
|
+
if (parameterNames.length === 0) {
|
547
|
+
encoded += queryString;
|
548
|
+
} else {
|
549
|
+
$.each(parameterNames, function(i, v) {
|
550
|
+
var pv = _parameter(v, value);
|
551
|
+
if (typeof pv !== 'string') {
|
552
|
+
$.each(pv, function(ni, nv) {
|
553
|
+
encoded += _encode(v) + '=' + _encode(nv) + '&';
|
554
|
+
});
|
555
|
+
} else {
|
556
|
+
encoded += _encode(v) + '=' + _encode(pv) + '&';
|
557
|
+
}
|
558
|
+
});
|
559
|
+
encoded = encoded.substr(0, encoded.length - 1);
|
560
|
+
}
|
561
|
+
}
|
562
|
+
if (hash !== '') {
|
563
|
+
encoded += '#' + _encode(hash);
|
564
|
+
}
|
565
|
+
if (first != '/' && encoded.substr(0, 1) == '/') {
|
566
|
+
encoded = encoded.substr(1);
|
567
|
+
}
|
568
|
+
if (/#|&|\?/.test(last)) {
|
569
|
+
encoded += last;
|
570
|
+
}
|
571
|
+
return encoded;
|
572
|
+
},
|
573
|
+
decode: function(value) {
|
574
|
+
return decodeURIComponent(value.replace(/\+/g, '%20'));
|
575
|
+
},
|
406
576
|
title: function(value) {
|
407
577
|
if (value !== undefined) {
|
408
|
-
value = _dc(value);
|
409
578
|
_st(function() {
|
410
579
|
_title = _d.title = value;
|
411
580
|
if (_juststart && _frame && _frame.contentWindow && _frame.contentWindow.document) {
|
@@ -423,7 +592,7 @@
|
|
423
592
|
},
|
424
593
|
value: function(value) {
|
425
594
|
if (value !== undefined) {
|
426
|
-
value =
|
595
|
+
value = _strict(this.encode(value), TRUE);
|
427
596
|
if (value == '/') {
|
428
597
|
value = '';
|
429
598
|
}
|
@@ -433,52 +602,57 @@
|
|
433
602
|
_justset = TRUE;
|
434
603
|
_value = value;
|
435
604
|
if (_opts.autoUpdate || _updating) {
|
436
|
-
_silent = TRUE;
|
437
605
|
_update(TRUE);
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
|
606
|
+
if (_supportsState()) {
|
607
|
+
_h[_opts.history ? 'pushState' : 'replaceState']({}, '',
|
608
|
+
_opts.state.replace(/\/$/, '') + (_value == '' ? '/' : _value));
|
609
|
+
} else {
|
610
|
+
_silent = TRUE;
|
611
|
+
_stack[_h.length] = _value;
|
612
|
+
if (_webkit) {
|
613
|
+
if (_opts.history) {
|
614
|
+
_l[ID][_l.pathname] = _stack.toString();
|
615
|
+
_length = _h.length + 1;
|
616
|
+
if (_version < 418) {
|
617
|
+
if (_l.search == '') {
|
618
|
+
_form.action = '#' + _crawl(_value, TRUE);
|
619
|
+
_form.submit();
|
620
|
+
}
|
621
|
+
} else if (_version < 523 || _value == '') {
|
622
|
+
var evt = _d.createEvent('MouseEvents');
|
623
|
+
evt.initEvent('click', TRUE, TRUE);
|
624
|
+
var anchor = _d.createElement('a');
|
625
|
+
anchor.href = '#' + _crawl(_value, TRUE);
|
626
|
+
anchor.dispatchEvent(evt);
|
627
|
+
} else {
|
628
|
+
_l.hash = '#' + _crawl(_value, TRUE);
|
447
629
|
}
|
448
|
-
} else if (_version < 523 || _value == '') {
|
449
|
-
var evt = _d.createEvent('MouseEvents');
|
450
|
-
evt.initEvent('click', TRUE, TRUE);
|
451
|
-
var anchor = _d.createElement('a');
|
452
|
-
anchor.href = '#' + _crawl(_value, TRUE);
|
453
|
-
anchor.dispatchEvent(evt);
|
454
630
|
} else {
|
631
|
+
_l.replace('#' + _crawl(_value, TRUE));
|
632
|
+
}
|
633
|
+
} else if (_value != _href()) {
|
634
|
+
if (_opts.history) {
|
455
635
|
_l.hash = '#' + _crawl(_value, TRUE);
|
636
|
+
} else {
|
637
|
+
_l.replace('#' + _crawl(_value, TRUE));
|
456
638
|
}
|
457
|
-
} else {
|
458
|
-
_l.replace('#' + _crawl(_value, TRUE));
|
459
639
|
}
|
460
|
-
|
461
|
-
|
462
|
-
|
640
|
+
if ((_msie && _version < 8) && _opts.history) {
|
641
|
+
_st(_html, 50);
|
642
|
+
}
|
643
|
+
if (_webkit) {
|
644
|
+
_st(function(){ _silent = FALSE; }, 1);
|
463
645
|
} else {
|
464
|
-
|
646
|
+
_silent = FALSE;
|
465
647
|
}
|
466
648
|
}
|
467
|
-
if ((_msie && _version < 8) && _opts.history) {
|
468
|
-
_st(_html, 50);
|
469
|
-
}
|
470
|
-
if (_safari) {
|
471
|
-
_st(function(){ _silent = FALSE; }, 1);
|
472
|
-
} else {
|
473
|
-
_silent = FALSE;
|
474
|
-
}
|
475
649
|
}
|
476
650
|
return this;
|
477
651
|
}
|
478
652
|
if (!_supported) {
|
479
653
|
return null;
|
480
654
|
}
|
481
|
-
return
|
655
|
+
return _strict(this.decode(_value), FALSE);
|
482
656
|
},
|
483
657
|
path: function(value) {
|
484
658
|
if (value !== undefined) {
|
@@ -487,7 +661,10 @@
|
|
487
661
|
this.value(value + (qs ? '?' + qs : '') + (hash ? '#' + hash : ''));
|
488
662
|
return this;
|
489
663
|
}
|
490
|
-
return this.value()
|
664
|
+
return _path(this.value());
|
665
|
+
},
|
666
|
+
pathNames: function() {
|
667
|
+
return _pathNames(this.value());
|
491
668
|
},
|
492
669
|
queryString: function(value) {
|
493
670
|
if (value !== undefined) {
|
@@ -495,8 +672,7 @@
|
|
495
672
|
this.value(this.path() + (value ? '?' + value : '') + (hash ? '#' + hash : ''));
|
496
673
|
return this;
|
497
674
|
}
|
498
|
-
|
499
|
-
return arr.slice(1, arr.length).join('?').split('#')[0];
|
675
|
+
return _queryString(this.value());
|
500
676
|
},
|
501
677
|
parameter: function(name, value, append) {
|
502
678
|
var i, params;
|
@@ -510,90 +686,57 @@
|
|
510
686
|
v = [v];
|
511
687
|
}
|
512
688
|
if (n == name) {
|
513
|
-
v = (value === null || value
|
689
|
+
v = (value === null || value === '') ? [] :
|
514
690
|
(append ? v.concat([value]) : [value]);
|
515
691
|
}
|
516
692
|
for (var j = 0; j < v.length; j++) {
|
517
693
|
params.push(n + '=' + v[j]);
|
518
694
|
}
|
519
695
|
}
|
520
|
-
if ($.inArray(name, names) == -1) {
|
696
|
+
if ($.inArray(name, names) == -1 && value !== null && value !== '') {
|
521
697
|
params.push(name + '=' + value);
|
522
698
|
}
|
523
699
|
this.queryString(params.join('&'));
|
524
700
|
return this;
|
525
701
|
}
|
526
|
-
|
527
|
-
if (value) {
|
528
|
-
params = value.split('&');
|
529
|
-
var r = [];
|
530
|
-
for (i = 0; i < params.length; i++) {
|
531
|
-
var p = params[i].split('=');
|
532
|
-
if (p[0] == name) {
|
533
|
-
r.push(p[1]);
|
534
|
-
}
|
535
|
-
}
|
536
|
-
if (r.length !== 0) {
|
537
|
-
return r.length != 1 ? r : r[0];
|
538
|
-
}
|
539
|
-
}
|
540
|
-
},
|
541
|
-
pathNames: function() {
|
542
|
-
var path = this.path(),
|
543
|
-
names = path.replace(/\/{2,9}/g, '/').split('/');
|
544
|
-
if (path.substr(0, 1) == '/' || path.length === 0) {
|
545
|
-
names.splice(0, 1);
|
546
|
-
}
|
547
|
-
if (path.substr(path.length - 1, 1) == '/') {
|
548
|
-
names.splice(names.length - 1, 1);
|
549
|
-
}
|
550
|
-
return names;
|
702
|
+
return _parameter(name, this.value());
|
551
703
|
},
|
552
704
|
parameterNames: function() {
|
553
|
-
|
554
|
-
names = [];
|
555
|
-
if (qs && qs.indexOf('=') != -1) {
|
556
|
-
var params = qs.split('&');
|
557
|
-
for (var i = 0; i < params.length; i++) {
|
558
|
-
var name = params[i].split('=')[0];
|
559
|
-
if ($.inArray(name, names) == -1) {
|
560
|
-
names.push(name);
|
561
|
-
}
|
562
|
-
}
|
563
|
-
}
|
564
|
-
return names;
|
705
|
+
return _parameterNames(this.value());
|
565
706
|
},
|
566
707
|
hash: function(value) {
|
567
708
|
if (value !== undefined) {
|
568
709
|
this.value(this.value().split('#')[0] + (value ? '#' + value : ''));
|
569
710
|
return this;
|
570
711
|
}
|
571
|
-
|
572
|
-
|
573
|
-
}
|
712
|
+
return _hash(this.value());
|
713
|
+
}
|
574
714
|
};
|
575
|
-
|
715
|
+
|
576
716
|
})();
|
577
717
|
|
578
|
-
$.fn.address = function
|
579
|
-
this.
|
580
|
-
|
581
|
-
$(
|
582
|
-
var value = fn ? fn.call(this) : $(this).attr('action') + '?' + $(this).serialize();
|
583
|
-
$.address.value(value);
|
584
|
-
return false;
|
585
|
-
});
|
586
|
-
} else {
|
587
|
-
var f = function() {
|
718
|
+
$.fn.address = function(fn) {
|
719
|
+
if (!$(this).attr('address')) {
|
720
|
+
var f = function(e) {
|
721
|
+
if ($(this).is('a')) {
|
588
722
|
var value = fn ? fn.call(this) :
|
589
723
|
/address:/.test($(this).attr('rel')) ? $(this).attr('rel').split('address:')[1].split(' ')[0] :
|
590
|
-
|
724
|
+
typeof $.address.state() !== 'undefined' && $.address.state() != '/' ?
|
725
|
+
$(this).attr('href').replace(new RegExp('^(.*' + $.address.state() + '|\\.)'), '') :
|
726
|
+
$(this).attr('href').replace(/^(#\!?|\.)/, '');
|
591
727
|
$.address.value(value);
|
592
|
-
|
593
|
-
}
|
594
|
-
|
595
|
-
|
596
|
-
|
728
|
+
e.preventDefault();
|
729
|
+
}
|
730
|
+
};
|
731
|
+
$(this).click(f).live('click', f).submit(function(e) {
|
732
|
+
if ($(this).is('form')) {
|
733
|
+
var value = fn ? fn.call(this) : $(this).attr('action') + '?' + $.address.decode($(this).serialize());
|
734
|
+
$.address.value(value);
|
735
|
+
e.preventDefault();
|
736
|
+
}
|
737
|
+
}).attr('address', true);
|
738
|
+
}
|
739
|
+
return this;
|
597
740
|
};
|
598
741
|
|
599
742
|
}(jQuery));
|