wiselinks 1.1.4 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +2 -2
- data/lib/assets/javascripts/_dom_parser.js.coffee +50 -0
- data/lib/assets/javascripts/_request_manager.js.coffee +22 -16
- data/lib/assets/javascripts/_response.js.coffee +54 -0
- data/lib/wiselinks/version.rb +2 -2
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8313c2988ca0762699bbcf8e44231232e36b6801
|
4
|
+
data.tar.gz: 0a4c39841d2b4a78eacc51a3034d6ebfe8e56ee1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9382f1337e30d590fd1116803e74ba1018edea5f43ef24f2451c4726f7a9cf936b393e667971e5d69b0186c28f85cf4c88632a8e032c5b372e0a0744f5d0ad45
|
7
|
+
data.tar.gz: e97f40694511b91fd29e497c452731c0a98d9a52440b89c408b8c541d24e23f798ee26619547be6647c4dff7d3fa4eb294736c65a99c7594f6b4bb471c3a88d7
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -462,9 +462,9 @@ We crafted example application that uses nearly all features of Wiselinks so you
|
|
462
462
|
|
463
463
|
## Credits
|
464
464
|
|
465
|
-
![JetRockets](http://www.jetrockets.ru/
|
465
|
+
![JetRockets](http://www.jetrockets.ru/jetrockets.png)
|
466
466
|
|
467
|
-
Wiselinks is maintained by [JetRockets](http://www.jetrockets.ru
|
467
|
+
Wiselinks is maintained by [JetRockets](http://www.jetrockets.ru).
|
468
468
|
|
469
469
|
Contributors:
|
470
470
|
|
@@ -0,0 +1,50 @@
|
|
1
|
+
class DOMParser
|
2
|
+
parse: (html) ->
|
3
|
+
@_get_parser()(html)
|
4
|
+
|
5
|
+
_get_parser: ->
|
6
|
+
@_document_parser ?= @_parser_factory()
|
7
|
+
|
8
|
+
# fully taken from Turbolinks (https://github.com/rails/turbolinks)
|
9
|
+
# and changed function names style
|
10
|
+
# by @igor-alexandrov request :)
|
11
|
+
_parser_factory: ->
|
12
|
+
create_document_using_parser = (html) ->
|
13
|
+
(new DOMParser).parseFromString html, 'text/html'
|
14
|
+
|
15
|
+
create_document_using_DOM = (html) ->
|
16
|
+
doc = document.implementation.createHTMLDocument ''
|
17
|
+
doc.documentElement.innerHTML = html
|
18
|
+
doc
|
19
|
+
|
20
|
+
create_document_using_write = (html) ->
|
21
|
+
doc = document.implementation.createHTMLDocument ''
|
22
|
+
doc.open 'replace'
|
23
|
+
doc.write html
|
24
|
+
doc.close()
|
25
|
+
doc
|
26
|
+
|
27
|
+
# Use create_document_using_parser if DOMParser is defined and natively
|
28
|
+
# supports 'text/html' parsing (Firefox 12+, IE 10)
|
29
|
+
#
|
30
|
+
# Use create_document_using_DOM if create_document_using_parser throws an exception
|
31
|
+
# due to unsupported type 'text/html' (Firefox < 12, Opera)
|
32
|
+
#
|
33
|
+
# Use create_document_using_write if:
|
34
|
+
# - DOMParser isn't defined
|
35
|
+
# - create_document_using_parser returns null due to unsupported type 'text/html' (Chrome, Safari)
|
36
|
+
# - create_document_using_DOM doesn't create a valid HTML document (safeguarding against potential edge cases)
|
37
|
+
try
|
38
|
+
if window.DOMParser
|
39
|
+
testDoc = create_document_using_parser '<html><body><p>test'
|
40
|
+
create_document_using_parser
|
41
|
+
catch e
|
42
|
+
testDoc = create_document_using_DOM '<html><body><p>test'
|
43
|
+
create_document_using_DOM
|
44
|
+
finally
|
45
|
+
unless testDoc?.body?.childNodes.length is 1
|
46
|
+
return create_document_using_write
|
47
|
+
|
48
|
+
|
49
|
+
window._Wiselinks ?= {}
|
50
|
+
window._Wiselinks.DOMParser = DOMParser
|
@@ -1,3 +1,5 @@
|
|
1
|
+
#= require _response
|
2
|
+
|
1
3
|
class RequestManager
|
2
4
|
constructor: (@options = {}) ->
|
3
5
|
|
@@ -25,22 +27,7 @@ class RequestManager
|
|
25
27
|
dataType: "html"
|
26
28
|
).done(
|
27
29
|
(data, status, xhr) ->
|
28
|
-
|
29
|
-
assets_digest = xhr.getResponseHeader('X-Wiselinks-Assets-Digest')
|
30
|
-
|
31
|
-
if self._assets_changed(assets_digest)
|
32
|
-
window.location.reload(true)
|
33
|
-
else
|
34
|
-
state = History.getState()
|
35
|
-
if url? && (url != self._normalize(state.url))
|
36
|
-
self._redirect_to(url, $target, state, xhr)
|
37
|
-
|
38
|
-
$target.html(data).promise().done(
|
39
|
-
->
|
40
|
-
self._title(xhr.getResponseHeader('X-Wiselinks-Title'))
|
41
|
-
self._done($target, status, state, data)
|
42
|
-
)
|
43
|
-
|
30
|
+
self._html_loaded($target, data, status, xhr)
|
44
31
|
).fail(
|
45
32
|
(xhr, status, error) ->
|
46
33
|
self._fail($target, status, state, error, xhr.status)
|
@@ -77,6 +64,25 @@ class RequestManager
|
|
77
64
|
[$target, status, decodeURI(state.url), data]
|
78
65
|
)
|
79
66
|
|
67
|
+
_html_loaded: ($target, data, status, xhr) ->
|
68
|
+
response = new window._Wiselinks.Response(data, xhr, $target)
|
69
|
+
|
70
|
+
url = @_normalize(response.url())
|
71
|
+
assets_digest = response.assets_digest()
|
72
|
+
|
73
|
+
if @_assets_changed(assets_digest)
|
74
|
+
window.location.reload(true)
|
75
|
+
else
|
76
|
+
state = History.getState()
|
77
|
+
if url? && (url != @_normalize(state.url))
|
78
|
+
@_redirect_to(url, $target, state, xhr)
|
79
|
+
|
80
|
+
$target.html(response.content()).promise().done(
|
81
|
+
=>
|
82
|
+
@_title(response.title())
|
83
|
+
@_done($target, status, state, response.content())
|
84
|
+
)
|
85
|
+
|
80
86
|
_fail: ($target, status, state, error, code) ->
|
81
87
|
$(document).trigger('page:fail'
|
82
88
|
[$target, status, decodeURI(state.url), error, code]
|
@@ -0,0 +1,54 @@
|
|
1
|
+
#= require _dom_parser
|
2
|
+
|
3
|
+
# if server responds with 304, sometimes you may get
|
4
|
+
# full page source instead of just wiselinks part, so
|
5
|
+
# you need to use different content extract strategies
|
6
|
+
class Response
|
7
|
+
@_document_parser: null
|
8
|
+
|
9
|
+
@_get_document_parser: ->
|
10
|
+
Response._document_parser ?= new window._Wiselinks.DOMParser
|
11
|
+
|
12
|
+
|
13
|
+
constructor: (@html, @xhr, @$target) ->
|
14
|
+
|
15
|
+
url: ->
|
16
|
+
@xhr.getResponseHeader('X-Wiselinks-Url')
|
17
|
+
|
18
|
+
assets_digest: ->
|
19
|
+
if @_is_full_document_response()
|
20
|
+
$('meta[name="assets-digest"]', @_get_doc()).attr('content')
|
21
|
+
else
|
22
|
+
@xhr.getResponseHeader('X-Wiselinks-Assets-Digest')
|
23
|
+
|
24
|
+
content: ->
|
25
|
+
@_content ?= @_extract_content()
|
26
|
+
|
27
|
+
title: ->
|
28
|
+
@_title ?= @_extract_title()
|
29
|
+
|
30
|
+
_extract_title: ->
|
31
|
+
if @_is_full_document_response()
|
32
|
+
$('title', @_get_doc()).text()
|
33
|
+
else
|
34
|
+
@xhr.getResponseHeader('X-Wiselinks-Title')
|
35
|
+
|
36
|
+
_extract_content: ->
|
37
|
+
if @_is_full_document_response()
|
38
|
+
@_get_doc_target_node().html()
|
39
|
+
else
|
40
|
+
@html
|
41
|
+
|
42
|
+
_is_full_document_response: ->
|
43
|
+
@_get_doc_target_node().length is 1
|
44
|
+
|
45
|
+
_get_doc_target_node: ->
|
46
|
+
@$doc_target_node ?= $(@$target.selector, @_get_doc())
|
47
|
+
|
48
|
+
_get_doc: ->
|
49
|
+
@_doc ?= Response._get_document_parser().parse(@html)
|
50
|
+
|
51
|
+
|
52
|
+
|
53
|
+
window._Wiselinks ?= {}
|
54
|
+
window._Wiselinks.Response = Response
|
data/lib/wiselinks/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wiselinks
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Igor Alexandrov
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2014-
|
14
|
+
date: 2014-03-17 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: rspec
|
@@ -268,10 +268,12 @@ files:
|
|
268
268
|
- Rakefile
|
269
269
|
- app/views/layouts/wiselinks.html.erb
|
270
270
|
- compiler.jar
|
271
|
+
- lib/assets/javascripts/_dom_parser.js.coffee
|
271
272
|
- lib/assets/javascripts/_form.js.coffee
|
272
273
|
- lib/assets/javascripts/_link.js.coffee
|
273
274
|
- lib/assets/javascripts/_page.js.coffee
|
274
275
|
- lib/assets/javascripts/_request_manager.js.coffee
|
276
|
+
- lib/assets/javascripts/_response.js.coffee
|
275
277
|
- lib/assets/javascripts/lib/native.history.js
|
276
278
|
- lib/assets/javascripts/wiselinks.js.coffee
|
277
279
|
- lib/wiselinks.rb
|