jquery_address-rails 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in jquery_address-rails.gemspec
4
+ gemspec
5
+ gem 'rake'
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 Kirillov Alexander
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,33 @@
1
+ # JqueryAddress::Rails
2
+
3
+ TODO: Write a gem description
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'jquery_address-rails'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install jquery_address-rails
18
+
19
+ ## Usage
20
+
21
+ In your application.js manifest:
22
+
23
+ //= require jquery.address
24
+
25
+ or directly available under `/assets/jquery-address.js`
26
+
27
+ ## Contributing
28
+
29
+ 1. Fork it
30
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
31
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
32
+ 4. Push to the branch (`git push origin my-new-feature`)
33
+ 5. Create new Pull Request
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,20 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'jquery_address-rails/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "jquery_address-rails"
8
+ gem.version = JqueryAddress::Rails::VERSION
9
+ gem.authors = ["Kirillov Alexander"]
10
+ gem.email = ["saratovsource@gmail.com"]
11
+ gem.summary = %q{jquery-address asset pipeline provider/wrapper}
12
+ gem.homepage = "https://github.com/saratovsource/jquery_address-rails"
13
+
14
+ gem.rubyforge_project = "jquery_address-rails"
15
+
16
+ gem.files = `git ls-files`.split($/)
17
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
18
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
19
+ gem.require_paths = ["lib"]
20
+ end
@@ -0,0 +1,11 @@
1
+ require "jquery_address-rails/version"
2
+
3
+ module JqueryAddress
4
+ module Rails
5
+ if defined?(::Rails) and ::Rails.version >= "3.1"
6
+ class Engine < ::Rails::Engine
7
+ # This class enables the assets pipeline
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,5 @@
1
+ module JqueryAddress
2
+ module Rails
3
+ VERSION = "0.1.0"
4
+ end
5
+ end
@@ -0,0 +1,6 @@
1
+ //= require ./jquery.address.src
2
+ //= require_self
3
+
4
+ $(function(){
5
+ $('[data-addressable]').address();
6
+ });
@@ -0,0 +1,683 @@
1
+ /*
2
+ * jQuery Address Plugin v${version}
3
+ * http://www.asual.com/jquery/address/
4
+ *
5
+ * Copyright (c) 2009-2010 Rostislav Hristov
6
+ * Dual licensed under the MIT or GPL Version 2 licenses.
7
+ * http://jquery.org/license
8
+ *
9
+ * Date: ${timestamp}
10
+ */
11
+ (function ($) {
12
+
13
+ $.address = (function () {
14
+
15
+ var _trigger = function(name) {
16
+ var ev = $.extend($.Event(name),
17
+ (function() {
18
+ var parameters = {},
19
+ parameterNames = $.address.parameterNames();
20
+ for (var i = 0, l = parameterNames.length; i < l; i++) {
21
+ parameters[parameterNames[i]] = $.address.parameter(parameterNames[i]);
22
+ }
23
+ return {
24
+ value: $.address.value(),
25
+ path: $.address.path(),
26
+ pathNames: $.address.pathNames(),
27
+ parameterNames: parameterNames,
28
+ parameters: parameters,
29
+ queryString: $.address.queryString()
30
+ };
31
+ }).call($.address)
32
+ );
33
+
34
+ $($.address).trigger(ev);
35
+ return ev;
36
+ },
37
+ _array = function(obj) {
38
+ return Array.prototype.slice.call(obj);
39
+ },
40
+ _bind = function(value, data, fn) {
41
+ $().bind.apply($($.address), Array.prototype.slice.call(arguments));
42
+ return $.address;
43
+ },
44
+ _unbind = function(value, fn) {
45
+ $().unbind.apply($($.address), Array.prototype.slice.call(arguments));
46
+ return $.address;
47
+ },
48
+ _supportsState = function() {
49
+ return (_h.pushState && _opts.state !== UNDEFINED);
50
+ },
51
+ _hrefState = function() {
52
+ return ('/' + _l.pathname.replace(new RegExp(_opts.state), '') +
53
+ _l.search + (_hrefHash() ? '#' + _hrefHash() : '')).replace(_re, '/');
54
+ },
55
+ _hrefHash = function() {
56
+ var index = _l.href.indexOf('#');
57
+ return index != -1 ? _crawl(_l.href.substr(index + 1), FALSE) : '';
58
+ },
59
+ _href = function() {
60
+ return _supportsState() ? _hrefState() : _hrefHash();
61
+ },
62
+ _window = function() {
63
+ try {
64
+ return top.document !== UNDEFINED && top.document.title !== UNDEFINED ? top : window;
65
+ } catch (e) {
66
+ return window;
67
+ }
68
+ },
69
+ _js = function() {
70
+ return 'javascript';
71
+ },
72
+ _strict = function(value) {
73
+ value = value.toString();
74
+ return (_opts.strict && value.substr(0, 1) != '/' ? '/' : '') + value;
75
+ },
76
+ _crawl = function(value, direction) {
77
+ if (_opts.crawlable && direction) {
78
+ return (value !== '' ? '!' : '') + value;
79
+ }
80
+ return value.replace(/^\!/, '');
81
+ },
82
+ _cssint = function(el, value) {
83
+ return parseInt(el.css(value), 10);
84
+ },
85
+
86
+ // Hash Change Callback
87
+ _listen = function() {
88
+ if (!_silent) {
89
+ var hash = _href(),
90
+ diff = decodeURI(_value) != decodeURI(hash);
91
+ if (diff) {
92
+ if (_msie && _version < 7) {
93
+ _l.reload();
94
+ } else {
95
+ if (_msie && !_hashchange && _opts.history) {
96
+ _st(_html, 50);
97
+ }
98
+ _old = _value;
99
+ _value = hash;
100
+ _update(FALSE);
101
+ }
102
+ }
103
+ }
104
+ },
105
+
106
+ _update = function(internal) {
107
+ var changeEv = _trigger(CHANGE),
108
+ xChangeEv = _trigger(internal ? INTERNAL_CHANGE : EXTERNAL_CHANGE);
109
+
110
+ _st(_track, 10);
111
+
112
+ if (changeEv.isDefaultPrevented() || xChangeEv.isDefaultPrevented()){
113
+ _preventDefault();
114
+ }
115
+ },
116
+
117
+ _preventDefault = function(){
118
+ _value = _old;
119
+
120
+ if (_supportsState()) {
121
+ _h.popState({}, '', _opts.state.replace(/\/$/, '') + (_value === '' ? '/' : _value));
122
+ } else {
123
+ _silent = TRUE;
124
+ if (_webkit) {
125
+ if (_opts.history) {
126
+ _l.hash = '#' + _crawl(_value, TRUE);
127
+ } else {
128
+ _l.replace('#' + _crawl(_value, TRUE));
129
+ }
130
+ } else if (_value != _href()) {
131
+ if (_opts.history) {
132
+ _l.hash = '#' + _crawl(_value, TRUE);
133
+ } else {
134
+ _l.replace('#' + _crawl(_value, TRUE));
135
+ }
136
+ }
137
+ if ((_msie && !_hashchange) && _opts.history) {
138
+ _st(_html, 50);
139
+ }
140
+ if (_webkit) {
141
+ _st(function(){ _silent = FALSE; }, 1);
142
+ } else {
143
+ _silent = FALSE;
144
+ }
145
+ }
146
+
147
+ },
148
+
149
+ _track = function() {
150
+ if (_opts.tracker !== 'null' && _opts.tracker !== NULL) {
151
+ var fn = $.isFunction(_opts.tracker) ? _opts.tracker : _t[_opts.tracker],
152
+ value = (_l.pathname + _l.search +
153
+ ($.address && !_supportsState() ? $.address.value() : ''))
154
+ .replace(/\/\//, '/').replace(/^\/$/, '');
155
+ if ($.isFunction(fn)) {
156
+ fn(value);
157
+ } else if ($.isFunction(_t.urchinTracker)) {
158
+ _t.urchinTracker(value);
159
+ } else if (_t.pageTracker !== UNDEFINED && $.isFunction(_t.pageTracker._trackPageview)) {
160
+ _t.pageTracker._trackPageview(value);
161
+ } else if (_t._gaq !== UNDEFINED && $.isFunction(_t._gaq.push)) {
162
+ _t._gaq.push(['_trackPageview', decodeURI(value)]);
163
+ }
164
+ }
165
+ },
166
+ _html = function() {
167
+ var src = _js() + ':' + FALSE + ';document.open();document.writeln(\'<html><head><title>' +
168
+ _d.title.replace(/\'/g, '\\\'') + '</title><script>var ' + ID + ' = "' + encodeURIComponent(_href()).replace(/\'/g, '\\\'') +
169
+ (_d.domain != _l.hostname ? '";document.domain="' + _d.domain : '') +
170
+ '";</' + 'script></head></html>\');document.close();';
171
+ if (_version < 7) {
172
+ _frame.src = src;
173
+ } else {
174
+ _frame.contentWindow.location.replace(src);
175
+ }
176
+ },
177
+ _options = function() {
178
+ if (_url && _qi != -1) {
179
+ var i, param, params = _url.substr(_qi + 1).split('&');
180
+ for (i = 0; i < params.length; i++) {
181
+ param = params[i].split('=');
182
+ if (/^(autoUpdate|crawlable|history|strict|wrap)$/.test(param[0])) {
183
+ _opts[param[0]] = (isNaN(param[1]) ? /^(true|yes)$/i.test(param[1]) : (parseInt(param[1], 10) !== 0));
184
+ }
185
+ if (/^(state|tracker)$/.test(param[0])) {
186
+ _opts[param[0]] = param[1];
187
+ }
188
+ }
189
+ _url = NULL;
190
+ }
191
+ _old = _value;
192
+ _value = _href();
193
+ },
194
+ _load = function() {
195
+ if (!_loaded) {
196
+ _loaded = TRUE;
197
+ _options();
198
+ var complete = function() {
199
+ _enable.call(this);
200
+ _unescape.call(this);
201
+ },
202
+ body = $('body').ajaxComplete(complete);
203
+ complete();
204
+ if (_opts.wrap) {
205
+ var wrap = $('body > *')
206
+ .wrapAll('<div style="padding:' +
207
+ (_cssint(body, 'marginTop') + _cssint(body, 'paddingTop')) + 'px ' +
208
+ (_cssint(body, 'marginRight') + _cssint(body, 'paddingRight')) + 'px ' +
209
+ (_cssint(body, 'marginBottom') + _cssint(body, 'paddingBottom')) + 'px ' +
210
+ (_cssint(body, 'marginLeft') + _cssint(body, 'paddingLeft')) + 'px;" />')
211
+ .parent()
212
+ .wrap('<div id="' + ID + '" style="height:100%;overflow:auto;position:relative;' +
213
+ (_webkit && !window.statusbar.visible ? 'resize:both;' : '') + '" />');
214
+ $('html, body')
215
+ .css({
216
+ height: '100%',
217
+ margin: 0,
218
+ padding: 0,
219
+ overflow: 'hidden'
220
+ });
221
+ if (_webkit) {
222
+ $('<style type="text/css" />')
223
+ .appendTo('head')
224
+ .text('#' + ID + '::-webkit-resizer { background-color: #fff; }');
225
+ }
226
+ }
227
+ if (_msie && !_hashchange) {
228
+ var frameset = _d.getElementsByTagName('frameset')[0];
229
+ _frame = _d.createElement((frameset ? '' : 'i') + 'frame');
230
+ _frame.src = _js() + ':' + FALSE;
231
+ if (frameset) {
232
+ frameset.insertAdjacentElement('beforeEnd', _frame);
233
+ frameset[frameset.cols ? 'cols' : 'rows'] += ',0';
234
+ _frame.noResize = TRUE;
235
+ _frame.frameBorder = _frame.frameSpacing = 0;
236
+ } else {
237
+ _frame.style.display = 'none';
238
+ _frame.style.width = _frame.style.height = 0;
239
+ _frame.tabIndex = -1;
240
+ _d.body.insertAdjacentElement('afterBegin', _frame);
241
+ }
242
+ _st(function() {
243
+ $(_frame).bind('load', function() {
244
+ var win = _frame.contentWindow;
245
+ _old = _value;
246
+ _value = win[ID] !== UNDEFINED ? win[ID] : '';
247
+ if (_value != _href()) {
248
+ _update(FALSE);
249
+ _l.hash = _crawl(_value, TRUE);
250
+ }
251
+ });
252
+ if (_frame.contentWindow[ID] === UNDEFINED) {
253
+ _html();
254
+ }
255
+ }, 50);
256
+ }
257
+ _st(function() {
258
+ _trigger('init');
259
+ _update(FALSE);
260
+ }, 1);
261
+ if (!_supportsState()) {
262
+ if ((_msie && _version > 7) || (!_msie && _hashchange)) {
263
+ if (_t.addEventListener) {
264
+ _t.addEventListener(HASH_CHANGE, _listen, FALSE);
265
+ } else if (_t.attachEvent) {
266
+ _t.attachEvent('on' + HASH_CHANGE, _listen);
267
+ }
268
+ } else {
269
+ _si(_listen, 50);
270
+ }
271
+ }
272
+ if ('state' in window.history) {
273
+ $(window).trigger('popstate');
274
+ }
275
+ }
276
+ },
277
+ _enable = function() {
278
+ var el,
279
+ elements = $('a'),
280
+ length = elements.size(),
281
+ delay = 1,
282
+ index = -1,
283
+ sel = '[rel*="address:"]',
284
+ fn = function() {
285
+ if (++index != length) {
286
+ el = $(elements.get(index));
287
+ if (el.is(sel)) {
288
+ el.address(sel);
289
+ }
290
+ _st(fn, delay);
291
+ }
292
+ };
293
+ _st(fn, delay);
294
+ },
295
+ _popstate = function() {
296
+ if (decodeURI(_value) != decodeURI(_href())) {
297
+ _old = _value;
298
+ _value = _href();
299
+ _update(FALSE);
300
+ }
301
+ },
302
+ _unload = function() {
303
+ if (_t.removeEventListener) {
304
+ _t.removeEventListener(HASH_CHANGE, _listen, FALSE);
305
+ } else if (_t.detachEvent) {
306
+ _t.detachEvent('on' + HASH_CHANGE, _listen);
307
+ }
308
+ },
309
+ _unescape = function() {
310
+ if (_opts.crawlable) {
311
+ var base = _l.pathname.replace(/\/$/, ''),
312
+ fragment = '_escaped_fragment_';
313
+ if ($('body').html().indexOf(fragment) != -1) {
314
+ $('a[href]:not([href^=http]), a[href*="' + document.domain + '"]').each(function() {
315
+ var href = $(this).attr('href').replace(/^http:/, '').replace(new RegExp(base + '/?$'), '');
316
+ if (href === '' || href.indexOf(fragment) != -1) {
317
+ $(this).attr('href', '#' + encodeURI(decodeURIComponent(href.replace(new RegExp('/(.*)\\?' +
318
+ fragment + '=(.*)$'), '!$2'))));
319
+ }
320
+ });
321
+ }
322
+ }
323
+ },
324
+ UNDEFINED,
325
+ NULL = null,
326
+ ID = 'jQueryAddress',
327
+ STRING = 'string',
328
+ HASH_CHANGE = 'hashchange',
329
+ INIT = 'init',
330
+ CHANGE = 'change',
331
+ INTERNAL_CHANGE = 'internalChange',
332
+ EXTERNAL_CHANGE = 'externalChange',
333
+ TRUE = true,
334
+ FALSE = false,
335
+ _opts = {
336
+ autoUpdate: TRUE,
337
+ crawlable: FALSE,
338
+ history: TRUE,
339
+ strict: TRUE,
340
+ wrap: FALSE
341
+ },
342
+ _browser = $.browser,
343
+ _version = parseFloat(_browser.version),
344
+ _msie = !$.support.opacity,
345
+ _webkit = _browser.webkit || _browser.safari,
346
+ _t = _window(),
347
+ _d = _t.document,
348
+ _h = _t.history,
349
+ _l = _t.location,
350
+ _si = setInterval,
351
+ _st = setTimeout,
352
+ _re = /\/{2,9}/g,
353
+ _agent = navigator.userAgent,
354
+ _hashchange = 'on' + HASH_CHANGE in _t,
355
+ _frame,
356
+ _form,
357
+ _url = $('script:last').attr('src'),
358
+ _qi = _url ? _url.indexOf('?') : -1,
359
+ _title = _d.title,
360
+ _silent = FALSE,
361
+ _loaded = FALSE,
362
+ _juststart = TRUE,
363
+ _updating = FALSE,
364
+ _listeners = {},
365
+ _value = _href();
366
+ _old = _value;
367
+
368
+ if (_msie) {
369
+ _version = parseFloat(_agent.substr(_agent.indexOf('MSIE') + 4));
370
+ if (_d.documentMode && _d.documentMode != _version) {
371
+ _version = _d.documentMode != 8 ? 7 : 8;
372
+ }
373
+ var pc = _d.onpropertychange;
374
+ _d.onpropertychange = function() {
375
+ if (pc) {
376
+ pc.call(_d);
377
+ }
378
+ if (_d.title != _title && _d.title.indexOf('#' + _href()) != -1) {
379
+ _d.title = _title;
380
+ }
381
+ };
382
+ }
383
+
384
+ if (_h.navigationMode) {
385
+ _h.navigationMode = 'compatible';
386
+ }
387
+ if (document.readyState == 'complete') {
388
+ var interval = setInterval(function() {
389
+ if ($.address) {
390
+ _load();
391
+ clearInterval(interval);
392
+ }
393
+ }, 50);
394
+ } else {
395
+ _options();
396
+ $(_load);
397
+ }
398
+ $(window).bind('popstate', _popstate).bind('unload', _unload);
399
+
400
+ return {
401
+ bind: function(type, data, fn) {
402
+ return _bind.apply(this, _array(arguments));
403
+ },
404
+ unbind: function(type, fn) {
405
+ return _unbind.apply(this, _array(arguments));
406
+ },
407
+ init: function(data, fn) {
408
+ return _bind.apply(this, [INIT].concat(_array(arguments)));
409
+ },
410
+ change: function(data, fn) {
411
+ return _bind.apply(this, [CHANGE].concat(_array(arguments)));
412
+ },
413
+ internalChange: function(data, fn) {
414
+ return _bind.apply(this, [INTERNAL_CHANGE].concat(_array(arguments)));
415
+ },
416
+ externalChange: function(data, fn) {
417
+ return _bind.apply(this, [EXTERNAL_CHANGE].concat(_array(arguments)));
418
+ },
419
+ baseURL: function() {
420
+ var url = _l.href;
421
+ if (url.indexOf('#') != -1) {
422
+ url = url.substr(0, url.indexOf('#'));
423
+ }
424
+ if (/\/$/.test(url)) {
425
+ url = url.substr(0, url.length - 1);
426
+ }
427
+ return url;
428
+ },
429
+ autoUpdate: function(value) {
430
+ if (value !== UNDEFINED) {
431
+ _opts.autoUpdate = value;
432
+ return this;
433
+ }
434
+ return _opts.autoUpdate;
435
+ },
436
+ crawlable: function(value) {
437
+ if (value !== UNDEFINED) {
438
+ _opts.crawlable = value;
439
+ return this;
440
+ }
441
+ return _opts.crawlable;
442
+ },
443
+ history: function(value) {
444
+ if (value !== UNDEFINED) {
445
+ _opts.history = value;
446
+ return this;
447
+ }
448
+ return _opts.history;
449
+ },
450
+ state: function(value) {
451
+ if (value !== UNDEFINED) {
452
+ _opts.state = value;
453
+ var hrefState = _hrefState();
454
+ if (_opts.state !== UNDEFINED) {
455
+ if (_h.pushState) {
456
+ if (hrefState.substr(0, 3) == '/#/') {
457
+ _l.replace(_opts.state.replace(/^\/$/, '') + hrefState.substr(2));
458
+ }
459
+ } else if (hrefState != '/' && hrefState.replace(/^\/#/, '') != _hrefHash()) {
460
+ _st(function() {
461
+ _l.replace(_opts.state.replace(/^\/$/, '') + '/#' + hrefState);
462
+ }, 1);
463
+ }
464
+ }
465
+ return this;
466
+ }
467
+ return _opts.state;
468
+ },
469
+ strict: function(value) {
470
+ if (value !== UNDEFINED) {
471
+ _opts.strict = value;
472
+ return this;
473
+ }
474
+ return _opts.strict;
475
+ },
476
+ tracker: function(value) {
477
+ if (value !== UNDEFINED) {
478
+ _opts.tracker = value;
479
+ return this;
480
+ }
481
+ return _opts.tracker;
482
+ },
483
+ wrap: function(value) {
484
+ if (value !== UNDEFINED) {
485
+ _opts.wrap = value;
486
+ return this;
487
+ }
488
+ return _opts.wrap;
489
+ },
490
+ update: function() {
491
+ _updating = TRUE;
492
+ this.value(_value);
493
+ _updating = FALSE;
494
+ return this;
495
+ },
496
+ title: function(value) {
497
+ if (value !== UNDEFINED) {
498
+ _st(function() {
499
+ _title = _d.title = value;
500
+ if (_juststart && _frame && _frame.contentWindow && _frame.contentWindow.document) {
501
+ _frame.contentWindow.document.title = value;
502
+ _juststart = FALSE;
503
+ }
504
+ }, 50);
505
+ return this;
506
+ }
507
+ return _d.title;
508
+ },
509
+ value: function(value) {
510
+ if (value !== UNDEFINED) {
511
+ value = _strict(value);
512
+ if (value == '/') {
513
+ value = '';
514
+ }
515
+ if (_value == value && !_updating) {
516
+ return;
517
+ }
518
+ _old = _value;
519
+ _value = value;
520
+ if (_opts.autoUpdate || _updating) {
521
+ _update(TRUE);
522
+ if (_supportsState()) {
523
+ _h[_opts.history ? 'pushState' : 'replaceState']({}, '',
524
+ _opts.state.replace(/\/$/, '') + (_value === '' ? '/' : _value));
525
+ } else {
526
+ _silent = TRUE;
527
+ if (_webkit) {
528
+ if (_opts.history) {
529
+ _l.hash = '#' + _crawl(_value, TRUE);
530
+ } else {
531
+ _l.replace('#' + _crawl(_value, TRUE));
532
+ }
533
+ } else if (_value != _href()) {
534
+ if (_opts.history) {
535
+ _l.hash = '#' + _crawl(_value, TRUE);
536
+ } else {
537
+ _l.replace('#' + _crawl(_value, TRUE));
538
+ }
539
+ }
540
+ if ((_msie && !_hashchange) && _opts.history) {
541
+ _st(_html, 50);
542
+ }
543
+ if (_webkit) {
544
+ _st(function(){ _silent = FALSE; }, 1);
545
+ } else {
546
+ _silent = FALSE;
547
+ }
548
+ }
549
+ }
550
+ return this;
551
+ }
552
+ return _strict(_value);
553
+ },
554
+ path: function(value) {
555
+ if (value !== UNDEFINED) {
556
+ var qs = this.queryString(),
557
+ hash = this.hash();
558
+ this.value(value + (qs ? '?' + qs : '') + (hash ? '#' + hash : ''));
559
+ return this;
560
+ }
561
+ return _strict(_value).split('#')[0].split('?')[0];
562
+ },
563
+ pathNames: function() {
564
+ var path = this.path(),
565
+ names = path.replace(_re, '/').split('/');
566
+ if (path.substr(0, 1) == '/' || path.length === 0) {
567
+ names.splice(0, 1);
568
+ }
569
+ if (path.substr(path.length - 1, 1) == '/') {
570
+ names.splice(names.length - 1, 1);
571
+ }
572
+ return names;
573
+ },
574
+ queryString: function(value) {
575
+ if (value !== UNDEFINED) {
576
+ var hash = this.hash();
577
+ this.value(this.path() + (value ? '?' + value : '') + (hash ? '#' + hash : ''));
578
+ return this;
579
+ }
580
+ var arr = _value.split('?');
581
+ return arr.slice(1, arr.length).join('?').split('#')[0];
582
+ },
583
+ parameter: function(name, value, append) {
584
+ var i, params;
585
+ if (value !== UNDEFINED) {
586
+ var names = this.parameterNames();
587
+ params = [];
588
+ value = value === UNDEFINED || value === NULL ? '' : value.toString();
589
+ for (i = 0; i < names.length; i++) {
590
+ var n = names[i],
591
+ v = this.parameter(n);
592
+ if (typeof v == STRING) {
593
+ v = [v];
594
+ }
595
+ if (n == name) {
596
+ v = (value === NULL || value === '') ? [] :
597
+ (append ? v.concat([value]) : [value]);
598
+ }
599
+ for (var j = 0; j < v.length; j++) {
600
+ params.push(n + '=' + v[j]);
601
+ }
602
+ }
603
+ if ($.inArray(name, names) == -1 && value !== NULL && value !== '') {
604
+ params.push(name + '=' + value);
605
+ }
606
+ this.queryString(params.join('&'));
607
+ return this;
608
+ }
609
+ value = this.queryString();
610
+ if (value) {
611
+ var r = [];
612
+ params = value.split('&');
613
+ for (i = 0; i < params.length; i++) {
614
+ var p = params[i].split('=');
615
+ if (p[0] == name) {
616
+ r.push(p.slice(1).join('='));
617
+ }
618
+ }
619
+ if (r.length !== 0) {
620
+ return r.length != 1 ? r : r[0];
621
+ }
622
+ }
623
+ },
624
+ parameterNames: function() {
625
+ var qs = this.queryString(),
626
+ names = [];
627
+ if (qs && qs.indexOf('=') != -1) {
628
+ var params = qs.split('&');
629
+ for (var i = 0; i < params.length; i++) {
630
+ var name = params[i].split('=')[0];
631
+ if ($.inArray(name, names) == -1) {
632
+ names.push(name);
633
+ }
634
+ }
635
+ }
636
+ return names;
637
+ },
638
+ hash: function(value) {
639
+ if (value !== UNDEFINED) {
640
+ this.value(_value.split('#')[0] + (value ? '#' + value : ''));
641
+ return this;
642
+ }
643
+ var arr = _value.split('#');
644
+ return arr.slice(1, arr.length).join('#');
645
+ }
646
+ };
647
+ })();
648
+
649
+ $.fn.address = function(fn) {
650
+ var sel;
651
+ if (typeof fn == 'string') {
652
+ sel = fn;
653
+ fn = undefined;
654
+ }
655
+ if (!$(this).attr('address')) {
656
+ var f = function(e) {
657
+ if (e.shiftKey || e.ctrlKey || e.metaKey || e.which == 2) {
658
+ return true;
659
+ }
660
+ if ($(this).is('a')) {
661
+ e.preventDefault();
662
+ var value = fn ? fn.call(this) :
663
+ /address:/.test($(this).attr('rel')) ? $(this).attr('rel').split('address:')[1].split(' ')[0] :
664
+ $.address.state() !== undefined && !/^\/?$/.test($.address.state()) ?
665
+ $(this).attr('href').replace(new RegExp('^(.*' + $.address.state() + '|\\.)'), '') :
666
+ $(this).attr('href').replace(/^(#\!?|\.)/, '');
667
+ $.address.value(value);
668
+ }
669
+ };
670
+ $(sel ? sel : this).live('click', f).live('submit', function(e) {
671
+ if ($(this).is('form')) {
672
+ e.preventDefault();
673
+ var action = $(this).attr('action'),
674
+ value = fn ? fn.call(this) : (action.indexOf('?') != -1 ? action.replace(/&$/, '') : action + '?') +
675
+ $(this).serialize();
676
+ $.address.value(value);
677
+ }
678
+ }).attr('address', true);
679
+ }
680
+ return this;
681
+ };
682
+
683
+ })(jQuery);
metadata ADDED
@@ -0,0 +1,61 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jquery_address-rails
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Kirillov Alexander
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-12-19 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description:
15
+ email:
16
+ - saratovsource@gmail.com
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - .gitignore
22
+ - Gemfile
23
+ - LICENSE.txt
24
+ - README.md
25
+ - Rakefile
26
+ - jquery_address-rails.gemspec
27
+ - lib/jquery_address-rails.rb
28
+ - lib/jquery_address-rails/version.rb
29
+ - vendor/assets/javascripts/jquery.address.js
30
+ - vendor/assets/javascripts/jquery.address.src.js
31
+ homepage: https://github.com/saratovsource/jquery_address-rails
32
+ licenses: []
33
+ post_install_message:
34
+ rdoc_options: []
35
+ require_paths:
36
+ - lib
37
+ required_ruby_version: !ruby/object:Gem::Requirement
38
+ none: false
39
+ requirements:
40
+ - - ! '>='
41
+ - !ruby/object:Gem::Version
42
+ version: '0'
43
+ segments:
44
+ - 0
45
+ hash: -515299021
46
+ required_rubygems_version: !ruby/object:Gem::Requirement
47
+ none: false
48
+ requirements:
49
+ - - ! '>='
50
+ - !ruby/object:Gem::Version
51
+ version: '0'
52
+ segments:
53
+ - 0
54
+ hash: -515299021
55
+ requirements: []
56
+ rubyforge_project: jquery_address-rails
57
+ rubygems_version: 1.8.24
58
+ signing_key:
59
+ specification_version: 3
60
+ summary: jquery-address asset pipeline provider/wrapper
61
+ test_files: []