jekyll-chalk 0.1.0 → 0.1.1
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.
- checksums.yaml +4 -4
- data/LICENSE.txt +21 -0
- data/README.md +89 -0
- data/_includes/footer.html +7 -0
- data/_includes/head.html +33 -0
- data/_includes/image.html +3 -0
- data/_includes/javascripts.html +21 -0
- data/_includes/navigation.html +75 -0
- data/_layouts/articles_by_tag.html +38 -0
- data/_layouts/default.html +16 -0
- data/_layouts/page.html +5 -0
- data/_layouts/post.html +71 -0
- data/assets/bower/fluidbox/.bower.json +44 -0
- data/assets/bower/fluidbox/Gruntfile.js +8 -0
- data/assets/bower/fluidbox/LICENSE.md +23 -0
- data/assets/bower/fluidbox/README.md +396 -0
- data/assets/bower/fluidbox/bower.json +35 -0
- data/assets/bower/fluidbox/demo/css/styles.min.css +2 -0
- data/assets/bower/fluidbox/demo/css/styles.min.css.map +1 -0
- data/assets/bower/fluidbox/demo/fonts/BLOKKRegular.eot +0 -0
- data/assets/bower/fluidbox/demo/fonts/BLOKKRegular.svg +233 -0
- data/assets/bower/fluidbox/demo/fonts/BLOKKRegular.ttf +0 -0
- data/assets/bower/fluidbox/demo/fonts/BLOKKRegular.woff +0 -0
- data/assets/bower/fluidbox/demo/fonts/fontello.eot +0 -0
- data/assets/bower/fluidbox/demo/fonts/fontello.svg +13 -0
- data/assets/bower/fluidbox/demo/fonts/fontello.ttf +0 -0
- data/assets/bower/fluidbox/demo/fonts/fontello.woff +0 -0
- data/assets/bower/fluidbox/demo/index.html +758 -0
- data/assets/bower/fluidbox/demo/src/css/styles.scss +1131 -0
- data/assets/bower/fluidbox/dist/css/fluidbox.min.css +2 -0
- data/assets/bower/fluidbox/dist/css/fluidbox.min.css.map +1 -0
- data/assets/bower/fluidbox/dist/js/jquery.fluidbox.min.js +1 -0
- data/assets/bower/fluidbox/grunt/aliases.yaml +20 -0
- data/assets/bower/fluidbox/grunt/clean.js +5 -0
- data/assets/bower/fluidbox/grunt/concurrent.js +33 -0
- data/assets/bower/fluidbox/grunt/jshint.js +10 -0
- data/assets/bower/fluidbox/grunt/postcss.js +47 -0
- data/assets/bower/fluidbox/grunt/sass.js +42 -0
- data/assets/bower/fluidbox/grunt/uglify.js +7 -0
- data/assets/bower/fluidbox/grunt/watch.js +28 -0
- data/assets/bower/fluidbox/index.html +8 -0
- data/assets/bower/fluidbox/license.txt +21 -0
- data/assets/bower/fluidbox/src/css/_fluidbox.scss +95 -0
- data/assets/bower/fluidbox/src/css/fluidbox.scss +2 -0
- data/assets/bower/fluidbox/src/js/jquery.fluidbox.js +722 -0
- data/assets/bower/jquery/.bower.json +25 -0
- data/assets/bower/jquery/AUTHORS.txt +295 -0
- data/assets/bower/jquery/LICENSE.txt +36 -0
- data/assets/bower/jquery/README.md +65 -0
- data/assets/bower/jquery/bower.json +14 -0
- data/assets/bower/jquery/dist/core.js +482 -0
- data/assets/bower/jquery/dist/jquery.js +10220 -0
- data/assets/bower/jquery/dist/jquery.min.js +4 -0
- data/assets/bower/jquery/dist/jquery.min.map +1 -0
- data/assets/bower/jquery/dist/jquery.slim.js +8107 -0
- data/assets/bower/jquery/dist/jquery.slim.min.js +4 -0
- data/assets/bower/jquery/dist/jquery.slim.min.map +1 -0
- data/assets/bower/jquery/external/sizzle/LICENSE.txt +36 -0
- data/assets/bower/jquery/external/sizzle/dist/sizzle.js +2272 -0
- data/assets/bower/jquery/external/sizzle/dist/sizzle.min.js +3 -0
- data/assets/bower/jquery/external/sizzle/dist/sizzle.min.map +1 -0
- data/assets/bower/jquery/src/.eslintrc.json +18 -0
- data/assets/bower/jquery/src/ajax.js +855 -0
- data/assets/bower/jquery/src/ajax/jsonp.js +102 -0
- data/assets/bower/jquery/src/ajax/load.js +76 -0
- data/assets/bower/jquery/src/ajax/parseXML.js +30 -0
- data/assets/bower/jquery/src/ajax/script.js +77 -0
- data/assets/bower/jquery/src/ajax/var/location.js +5 -0
- data/assets/bower/jquery/src/ajax/var/nonce.js +7 -0
- data/assets/bower/jquery/src/ajax/var/rquery.js +5 -0
- data/assets/bower/jquery/src/ajax/xhr.js +169 -0
- data/assets/bower/jquery/src/attributes.js +13 -0
- data/assets/bower/jquery/src/attributes/attr.js +140 -0
- data/assets/bower/jquery/src/attributes/classes.js +174 -0
- data/assets/bower/jquery/src/attributes/prop.js +143 -0
- data/assets/bower/jquery/src/attributes/support.js +33 -0
- data/assets/bower/jquery/src/attributes/val.js +188 -0
- data/assets/bower/jquery/src/callbacks.js +234 -0
- data/assets/bower/jquery/src/core.js +482 -0
- data/assets/bower/jquery/src/core/DOMEval.js +16 -0
- data/assets/bower/jquery/src/core/access.js +70 -0
- data/assets/bower/jquery/src/core/init.js +127 -0
- data/assets/bower/jquery/src/core/parseHTML.js +65 -0
- data/assets/bower/jquery/src/core/ready-no-deferred.js +105 -0
- data/assets/bower/jquery/src/core/ready.js +95 -0
- data/assets/bower/jquery/src/core/readyException.js +13 -0
- data/assets/bower/jquery/src/core/stripAndCollapse.js +14 -0
- data/assets/bower/jquery/src/core/support.js +20 -0
- data/assets/bower/jquery/src/core/var/rsingleTag.js +6 -0
- data/assets/bower/jquery/src/css.js +426 -0
- data/assets/bower/jquery/src/css/addGetHookIf.js +26 -0
- data/assets/bower/jquery/src/css/adjustCSS.js +71 -0
- data/assets/bower/jquery/src/css/curCSS.js +59 -0
- data/assets/bower/jquery/src/css/hiddenVisibleSelectors.js +15 -0
- data/assets/bower/jquery/src/css/showHide.js +105 -0
- data/assets/bower/jquery/src/css/support.js +89 -0
- data/assets/bower/jquery/src/css/var/cssExpand.js +5 -0
- data/assets/bower/jquery/src/css/var/getStyles.js +17 -0
- data/assets/bower/jquery/src/css/var/isHiddenWithinTree.js +34 -0
- data/assets/bower/jquery/src/css/var/rmargin.js +5 -0
- data/assets/bower/jquery/src/css/var/rnumnonpx.js +7 -0
- data/assets/bower/jquery/src/css/var/swap.js +26 -0
- data/assets/bower/jquery/src/data.js +179 -0
- data/assets/bower/jquery/src/data/Data.js +161 -0
- data/assets/bower/jquery/src/data/var/acceptData.js +19 -0
- data/assets/bower/jquery/src/data/var/dataPriv.js +7 -0
- data/assets/bower/jquery/src/data/var/dataUser.js +7 -0
- data/assets/bower/jquery/src/deferred.js +389 -0
- data/assets/bower/jquery/src/deferred/exceptionHook.js +21 -0
- data/assets/bower/jquery/src/deprecated.js +30 -0
- data/assets/bower/jquery/src/dimensions.js +56 -0
- data/assets/bower/jquery/src/effects.js +693 -0
- data/assets/bower/jquery/src/effects/Tween.js +123 -0
- data/assets/bower/jquery/src/effects/animatedSelector.js +15 -0
- data/assets/bower/jquery/src/event.js +745 -0
- data/assets/bower/jquery/src/event/ajax.js +22 -0
- data/assets/bower/jquery/src/event/alias.js +29 -0
- data/assets/bower/jquery/src/event/focusin.js +55 -0
- data/assets/bower/jquery/src/event/support.js +11 -0
- data/assets/bower/jquery/src/event/trigger.js +185 -0
- data/assets/bower/jquery/src/exports/amd.js +26 -0
- data/assets/bower/jquery/src/exports/global.js +34 -0
- data/assets/bower/jquery/src/jquery.js +41 -0
- data/assets/bower/jquery/src/manipulation.js +486 -0
- data/assets/bower/jquery/src/manipulation/_evalUrl.js +23 -0
- data/assets/bower/jquery/src/manipulation/buildFragment.js +104 -0
- data/assets/bower/jquery/src/manipulation/getAll.js +31 -0
- data/assets/bower/jquery/src/manipulation/setGlobalEval.js +22 -0
- data/assets/bower/jquery/src/manipulation/support.js +35 -0
- data/assets/bower/jquery/src/manipulation/var/rcheckableType.js +5 -0
- data/assets/bower/jquery/src/manipulation/var/rscriptType.js +5 -0
- data/assets/bower/jquery/src/manipulation/var/rtagName.js +5 -0
- data/assets/bower/jquery/src/manipulation/wrapMap.js +29 -0
- data/assets/bower/jquery/src/offset.js +232 -0
- data/assets/bower/jquery/src/queue.js +145 -0
- data/assets/bower/jquery/src/queue/delay.js +24 -0
- data/assets/bower/jquery/src/selector-native.js +237 -0
- data/assets/bower/jquery/src/selector-sizzle.js +19 -0
- data/assets/bower/jquery/src/selector.js +3 -0
- data/assets/bower/jquery/src/serialize.js +130 -0
- data/assets/bower/jquery/src/traversing.js +178 -0
- data/assets/bower/jquery/src/traversing/findFilter.js +106 -0
- data/assets/bower/jquery/src/traversing/var/dir.js +22 -0
- data/assets/bower/jquery/src/traversing/var/rneedsContext.js +8 -0
- data/assets/bower/jquery/src/traversing/var/siblings.js +17 -0
- data/assets/bower/jquery/src/var/ObjectFunctionString.js +7 -0
- data/assets/bower/jquery/src/var/arr.js +5 -0
- data/assets/bower/jquery/src/var/class2type.js +6 -0
- data/assets/bower/jquery/src/var/concat.js +7 -0
- data/assets/bower/jquery/src/var/document.js +5 -0
- data/assets/bower/jquery/src/var/documentElement.js +7 -0
- data/assets/bower/jquery/src/var/fnToString.js +7 -0
- data/assets/bower/jquery/src/var/getProto.js +5 -0
- data/assets/bower/jquery/src/var/hasOwn.js +7 -0
- data/assets/bower/jquery/src/var/indexOf.js +7 -0
- data/assets/bower/jquery/src/var/pnum.js +5 -0
- data/assets/bower/jquery/src/var/push.js +7 -0
- data/assets/bower/jquery/src/var/rcssNum.js +9 -0
- data/assets/bower/jquery/src/var/rnothtmlwhite.js +8 -0
- data/assets/bower/jquery/src/var/slice.js +7 -0
- data/assets/bower/jquery/src/var/support.js +6 -0
- data/assets/bower/jquery/src/var/toString.js +7 -0
- data/assets/bower/jquery/src/wrap.js +77 -0
- data/assets/bower/scrollreveal/.bower.json +36 -0
- data/assets/bower/scrollreveal/CHANGELOG.md +268 -0
- data/assets/bower/scrollreveal/LICENSE.md +12 -0
- data/assets/bower/scrollreveal/README.md +413 -0
- data/assets/bower/scrollreveal/bower.json +24 -0
- data/assets/bower/scrollreveal/dist/scrollreveal.js +860 -0
- data/assets/bower/scrollreveal/dist/scrollreveal.min.js +1 -0
- data/assets/bower/turbolinks5/.blade.yml +15 -0
- data/assets/bower/turbolinks5/.bower.json +14 -0
- data/assets/bower/turbolinks5/.gitignore +2 -0
- data/assets/bower/turbolinks5/CONDUCT.md +79 -0
- data/assets/bower/turbolinks5/Gemfile +9 -0
- data/assets/bower/turbolinks5/LICENSE +20 -0
- data/assets/bower/turbolinks5/README.md +435 -0
- data/assets/bower/turbolinks5/bin/blade +16 -0
- data/assets/bower/turbolinks5/bin/rackup +16 -0
- data/assets/bower/turbolinks5/config.ru +8 -0
- data/assets/bower/turbolinks5/dist/turbolinks.js +6 -0
- data/assets/bower/turbolinks5/package.json +31 -0
- data/assets/bower/turbolinks5/src/turbolinks/BANNER.js.erb +4 -0
- data/assets/bower/turbolinks5/src/turbolinks/VERSION +1 -0
- data/assets/bower/turbolinks5/src/turbolinks/browser_adapter.coffee +61 -0
- data/assets/bower/turbolinks5/src/turbolinks/compatibility.coffee +30 -0
- data/assets/bower/turbolinks5/src/turbolinks/controller.coffee +239 -0
- data/assets/bower/turbolinks5/src/turbolinks/error_renderer.coffee +21 -0
- data/assets/bower/turbolinks5/src/turbolinks/head_details.coffee +51 -0
- data/assets/bower/turbolinks5/src/turbolinks/helpers.coffee +51 -0
- data/assets/bower/turbolinks5/src/turbolinks/history.coffee +46 -0
- data/assets/bower/turbolinks5/src/turbolinks/http_request.coffee +88 -0
- data/assets/bower/turbolinks5/src/turbolinks/index.coffee +16 -0
- data/assets/bower/turbolinks5/src/turbolinks/location.coffee +70 -0
- data/assets/bower/turbolinks5/src/turbolinks/progress_bar.coffee +83 -0
- data/assets/bower/turbolinks5/src/turbolinks/renderer.coffee +27 -0
- data/assets/bower/turbolinks5/src/turbolinks/scroll_manager.coffee +27 -0
- data/assets/bower/turbolinks5/src/turbolinks/snapshot.coffee +47 -0
- data/assets/bower/turbolinks5/src/turbolinks/snapshot_cache.coffee +43 -0
- data/assets/bower/turbolinks5/src/turbolinks/snapshot_renderer.coffee +88 -0
- data/assets/bower/turbolinks5/src/turbolinks/start.coffee +18 -0
- data/assets/bower/turbolinks5/src/turbolinks/view.coffee +34 -0
- data/assets/bower/turbolinks5/src/turbolinks/visit.coffee +162 -0
- data/assets/bower/turbolinks5/test/src/fixtures/additional_assets.html +12 -0
- data/assets/bower/turbolinks5/test/src/fixtures/body_script.html +18 -0
- data/assets/bower/turbolinks5/test/src/fixtures/eval_false_script.html +18 -0
- data/assets/bower/turbolinks5/test/src/fixtures/head_script.html +18 -0
- data/assets/bower/turbolinks5/test/src/fixtures/navigation.html +21 -0
- data/assets/bower/turbolinks5/test/src/fixtures/one.html +12 -0
- data/assets/bower/turbolinks5/test/src/fixtures/rendering.html +20 -0
- data/assets/bower/turbolinks5/test/src/fixtures/tracked_asset_change.html +11 -0
- data/assets/bower/turbolinks5/test/src/fixtures/visit.html +14 -0
- data/assets/bower/turbolinks5/test/src/head.html.erb +1 -0
- data/assets/bower/turbolinks5/test/src/helpers/replicant_helpers.coffee +18 -0
- data/assets/bower/turbolinks5/test/src/modules/navigation_tests.coffee +75 -0
- data/assets/bower/turbolinks5/test/src/modules/rendering_tests.coffee +123 -0
- data/assets/bower/turbolinks5/test/src/modules/visit_tests.coffee +49 -0
- data/assets/bower/turbolinks5/test/src/test.coffee +4 -0
- data/assets/bower/turbolinks5/test/src/test.css +20 -0
- data/assets/bower/turbolinks5/test/vendor/replicant.js +10 -0
- data/assets/fonts/cormorant-garamond/Cormorant-Garamond-700.eot +0 -0
- data/assets/fonts/cormorant-garamond/Cormorant-Garamond-700.ttf +0 -0
- data/assets/fonts/cormorant-garamond/Cormorant-Garamond-700.woff +0 -0
- data/assets/fonts/cormorant-garamond/Cormorant-Garamond-700.woff2 +0 -0
- data/assets/fonts/ionicons/ionicons.eot +0 -0
- data/assets/fonts/ionicons/ionicons.svg +2232 -0
- data/assets/fonts/ionicons/ionicons.ttf +0 -0
- data/assets/fonts/ionicons/ionicons.woff +0 -0
- data/assets/fonts/lato/Lato-300.eot +0 -0
- data/assets/fonts/lato/Lato-300.ttf +0 -0
- data/assets/fonts/lato/Lato-300.woff +0 -0
- data/assets/fonts/lato/Lato-300.woff2 +0 -0
- data/assets/fonts/lato/Lato-700.eot +0 -0
- data/assets/fonts/lato/Lato-700.ttf +0 -0
- data/assets/fonts/lato/Lato-700.woff +0 -0
- data/assets/fonts/lato/Lato-700.woff2 +0 -0
- data/assets/fonts/lato/Lato-regular.eot +0 -0
- data/assets/fonts/lato/Lato-regular.ttf +0 -0
- data/assets/fonts/lato/Lato-regular.woff +0 -0
- data/assets/fonts/lato/Lato-regular.woff2 +0 -0
- data/assets/images/about.jpg +0 -0
- data/assets/images/about@2x.jpg +0 -0
- data/assets/images/apple-touch-icon.png +0 -0
- data/assets/images/documentation/chalk-intro.png +0 -0
- data/assets/images/documentation/chalk-intro@2x.png +0 -0
- data/assets/images/documentation/enlarge.gif +0 -0
- data/assets/images/documentation/enlarge@2x.gif +0 -0
- data/assets/images/documentation/sample-image.jpg +0 -0
- data/assets/images/documentation/sample-image@2x.jpg +0 -0
- data/assets/images/og-image.jpg +0 -0
- data/assets/javascripts/application.js +24 -0
- data/assets/javascripts/vendor.js +6 -0
- data/assets/javascripts/vendor/jquery-throttle-debounce.js +9 -0
- data/assets/javascripts/vendor/retina.js +182 -0
- data/assets/stylesheets/.csscomb.json +197 -0
- data/assets/stylesheets/.scss-lint.yml +33 -0
- data/assets/stylesheets/_base.scss +151 -0
- data/assets/stylesheets/_mixins.scss +28 -0
- data/assets/stylesheets/_variables.scss +47 -0
- data/assets/stylesheets/dark.scss +70 -0
- data/assets/stylesheets/fonts.scss +63 -0
- data/assets/stylesheets/layouts/_footer.scss +17 -0
- data/assets/stylesheets/layouts/_grid.scss +102 -0
- data/assets/stylesheets/light.scss +70 -0
- data/assets/stylesheets/modules/_about.scss +10 -0
- data/assets/stylesheets/modules/_articles.scss +211 -0
- data/assets/stylesheets/modules/_embed.scss +31 -0
- data/assets/stylesheets/modules/_header.scss +57 -0
- data/assets/stylesheets/modules/_highlights-dark.scss +415 -0
- data/assets/stylesheets/modules/_highlights-light.scss +409 -0
- data/assets/stylesheets/modules/_icons.scss +2967 -0
- data/assets/stylesheets/notfound-dark.scss +90 -0
- data/assets/stylesheets/notfound-light.scss +90 -0
- data/assets/stylesheets/vendor/_normalize.scss +461 -0
- metadata +276 -3
@@ -0,0 +1,51 @@
|
|
1
|
+
class Turbolinks.HeadDetails
|
2
|
+
constructor: (@element) ->
|
3
|
+
@elements = {}
|
4
|
+
for element in @element.childNodes when element.nodeType is Node.ELEMENT_NODE
|
5
|
+
key = element.outerHTML
|
6
|
+
data = @elements[key] ?=
|
7
|
+
type: elementType(element)
|
8
|
+
tracked: elementIsTracked(element)
|
9
|
+
elements: []
|
10
|
+
data.elements.push(element)
|
11
|
+
|
12
|
+
hasElementWithKey: (key) ->
|
13
|
+
key of @elements
|
14
|
+
|
15
|
+
getTrackedElementSignature: ->
|
16
|
+
(key for key, {tracked} of @elements when tracked).join("")
|
17
|
+
|
18
|
+
getScriptElementsNotInDetails: (headDetails) ->
|
19
|
+
@getElementsMatchingTypeNotInDetails("script", headDetails)
|
20
|
+
|
21
|
+
getStylesheetElementsNotInDetails: (headDetails) ->
|
22
|
+
@getElementsMatchingTypeNotInDetails("stylesheet", headDetails)
|
23
|
+
|
24
|
+
getElementsMatchingTypeNotInDetails: (matchedType, headDetails) ->
|
25
|
+
elements[0] for key, {type, elements} of @elements when type is matchedType and not headDetails.hasElementWithKey(key)
|
26
|
+
|
27
|
+
getProvisionalElements: ->
|
28
|
+
provisionalElements = []
|
29
|
+
for key, {type, tracked, elements} of @elements
|
30
|
+
if not type? and not tracked
|
31
|
+
provisionalElements.push(elements...)
|
32
|
+
else if elements.length > 1
|
33
|
+
provisionalElements.push(elements[1...]...)
|
34
|
+
provisionalElements
|
35
|
+
|
36
|
+
elementType = (element) ->
|
37
|
+
if elementIsScript(element)
|
38
|
+
"script"
|
39
|
+
else if elementIsStylesheet(element)
|
40
|
+
"stylesheet"
|
41
|
+
|
42
|
+
elementIsTracked = (element) ->
|
43
|
+
element.getAttribute("data-turbolinks-track") is "reload"
|
44
|
+
|
45
|
+
elementIsScript = (element) ->
|
46
|
+
tagName = element.tagName.toLowerCase()
|
47
|
+
tagName is "script"
|
48
|
+
|
49
|
+
elementIsStylesheet = (element) ->
|
50
|
+
tagName = element.tagName.toLowerCase()
|
51
|
+
tagName is "style" or (tagName is "link" and element.getAttribute("rel") is "stylesheet")
|
@@ -0,0 +1,51 @@
|
|
1
|
+
Turbolinks.copyObject = (object) ->
|
2
|
+
result = {}
|
3
|
+
for key, value of object
|
4
|
+
result[key] = value
|
5
|
+
result
|
6
|
+
|
7
|
+
|
8
|
+
Turbolinks.closest = (element, selector) ->
|
9
|
+
closest.call(element, selector)
|
10
|
+
|
11
|
+
closest = do ->
|
12
|
+
html = document.documentElement
|
13
|
+
html.closest ? (selector) ->
|
14
|
+
node = this
|
15
|
+
while node
|
16
|
+
return node if node.nodeType is Node.ELEMENT_NODE and match.call(node, selector)
|
17
|
+
node = node.parentNode
|
18
|
+
|
19
|
+
|
20
|
+
Turbolinks.defer = (callback) ->
|
21
|
+
setTimeout(callback, 1)
|
22
|
+
|
23
|
+
|
24
|
+
Turbolinks.dispatch = (eventName, {target, cancelable, data} = {}) ->
|
25
|
+
event = document.createEvent("Events")
|
26
|
+
event.initEvent(eventName, true, cancelable is true)
|
27
|
+
event.data = data ? {}
|
28
|
+
(target ? document).dispatchEvent(event)
|
29
|
+
event
|
30
|
+
|
31
|
+
|
32
|
+
Turbolinks.match = (element, selector) ->
|
33
|
+
match.call(element, selector)
|
34
|
+
|
35
|
+
match = do ->
|
36
|
+
html = document.documentElement
|
37
|
+
html.matchesSelector ? html.webkitMatchesSelector ? html.msMatchesSelector ? html.mozMatchesSelector
|
38
|
+
|
39
|
+
|
40
|
+
Turbolinks.uuid = ->
|
41
|
+
result = ""
|
42
|
+
for i in [1..36]
|
43
|
+
if i in [9, 14, 19, 24]
|
44
|
+
result += "-"
|
45
|
+
else if i is 15
|
46
|
+
result += "4"
|
47
|
+
else if i is 20
|
48
|
+
result += (Math.floor(Math.random() * 4) + 8).toString(16)
|
49
|
+
else
|
50
|
+
result += Math.floor(Math.random() * 15).toString(16)
|
51
|
+
result
|
@@ -0,0 +1,46 @@
|
|
1
|
+
pageLoaded = false
|
2
|
+
|
3
|
+
addEventListener "load", ->
|
4
|
+
Turbolinks.defer ->
|
5
|
+
pageLoaded = true
|
6
|
+
, false
|
7
|
+
|
8
|
+
class Turbolinks.History
|
9
|
+
constructor: (@delegate) ->
|
10
|
+
|
11
|
+
start: ->
|
12
|
+
unless @started
|
13
|
+
addEventListener("popstate", @onPopState, false)
|
14
|
+
@started = true
|
15
|
+
|
16
|
+
stop: ->
|
17
|
+
if @started
|
18
|
+
removeEventListener("popstate", @onPopState, false)
|
19
|
+
@started = false
|
20
|
+
|
21
|
+
push: (location, restorationIdentifier) ->
|
22
|
+
location = Turbolinks.Location.wrap(location)
|
23
|
+
@update("push", location, restorationIdentifier)
|
24
|
+
|
25
|
+
replace: (location, restorationIdentifier) ->
|
26
|
+
location = Turbolinks.Location.wrap(location)
|
27
|
+
@update("replace", location, restorationIdentifier)
|
28
|
+
|
29
|
+
# Event handlers
|
30
|
+
|
31
|
+
onPopState: (event) =>
|
32
|
+
if @shouldHandlePopState()
|
33
|
+
if turbolinks = event.state?.turbolinks
|
34
|
+
location = Turbolinks.Location.wrap(window.location)
|
35
|
+
restorationIdentifier = turbolinks.restorationIdentifier
|
36
|
+
@delegate.historyPoppedToLocationWithRestorationIdentifier(location, restorationIdentifier)
|
37
|
+
|
38
|
+
# Private
|
39
|
+
|
40
|
+
shouldHandlePopState: ->
|
41
|
+
# Safari dispatches a popstate event after window's load event, ignore it
|
42
|
+
pageLoaded is true
|
43
|
+
|
44
|
+
update: (method, location, restorationIdentifier) ->
|
45
|
+
state = turbolinks: {restorationIdentifier}
|
46
|
+
history[method + "State"](state, null, location)
|
@@ -0,0 +1,88 @@
|
|
1
|
+
class Turbolinks.HttpRequest
|
2
|
+
@NETWORK_FAILURE = 0
|
3
|
+
@TIMEOUT_FAILURE = -1
|
4
|
+
|
5
|
+
@timeout = 60
|
6
|
+
|
7
|
+
constructor: (@delegate, location, referrer) ->
|
8
|
+
@url = Turbolinks.Location.wrap(location).requestURL
|
9
|
+
@referrer = Turbolinks.Location.wrap(referrer).absoluteURL
|
10
|
+
@createXHR()
|
11
|
+
|
12
|
+
send: ->
|
13
|
+
if @xhr and not @sent
|
14
|
+
@notifyApplicationBeforeRequestStart()
|
15
|
+
@setProgress(0)
|
16
|
+
@xhr.send()
|
17
|
+
@sent = true
|
18
|
+
@delegate.requestStarted?()
|
19
|
+
|
20
|
+
cancel: ->
|
21
|
+
if @xhr and @sent
|
22
|
+
@xhr.abort()
|
23
|
+
|
24
|
+
# XMLHttpRequest events
|
25
|
+
|
26
|
+
requestProgressed: (event) =>
|
27
|
+
if event.lengthComputable
|
28
|
+
@setProgress(event.loaded / event.total)
|
29
|
+
|
30
|
+
requestLoaded: =>
|
31
|
+
@endRequest =>
|
32
|
+
if 200 <= @xhr.status < 300
|
33
|
+
@delegate.requestCompletedWithResponse(@xhr.responseText, @xhr.getResponseHeader("Turbolinks-Location"))
|
34
|
+
else
|
35
|
+
@failed = true
|
36
|
+
@delegate.requestFailedWithStatusCode(@xhr.status, @xhr.responseText)
|
37
|
+
|
38
|
+
requestFailed: =>
|
39
|
+
@endRequest =>
|
40
|
+
@failed = true
|
41
|
+
@delegate.requestFailedWithStatusCode(@constructor.NETWORK_FAILURE)
|
42
|
+
|
43
|
+
requestTimedOut: =>
|
44
|
+
@endRequest =>
|
45
|
+
@failed = true
|
46
|
+
@delegate.requestFailedWithStatusCode(@constructor.TIMEOUT_FAILURE)
|
47
|
+
|
48
|
+
requestCanceled: =>
|
49
|
+
@endRequest()
|
50
|
+
|
51
|
+
|
52
|
+
# Application events
|
53
|
+
|
54
|
+
notifyApplicationBeforeRequestStart: ->
|
55
|
+
Turbolinks.dispatch("turbolinks:request-start", data: { url: @url, xhr: @xhr })
|
56
|
+
|
57
|
+
notifyApplicationAfterRequestEnd: ->
|
58
|
+
Turbolinks.dispatch("turbolinks:request-end", data: { url: @url, xhr: @xhr })
|
59
|
+
|
60
|
+
# Private
|
61
|
+
|
62
|
+
createXHR: ->
|
63
|
+
@xhr = new XMLHttpRequest
|
64
|
+
@xhr.open("GET", @url, true)
|
65
|
+
@xhr.timeout = @constructor.timeout * 1000
|
66
|
+
@xhr.setRequestHeader("Accept", "text/html, application/xhtml+xml")
|
67
|
+
@xhr.setRequestHeader("Turbolinks-Referrer", @referrer)
|
68
|
+
@xhr.onprogress = @requestProgressed
|
69
|
+
@xhr.onload = @requestLoaded
|
70
|
+
@xhr.onerror = @requestFailed
|
71
|
+
@xhr.ontimeout = @requestTimedOut
|
72
|
+
@xhr.onabort = @requestCanceled
|
73
|
+
|
74
|
+
endRequest: (callback) ->
|
75
|
+
if @xhr
|
76
|
+
@notifyApplicationAfterRequestEnd()
|
77
|
+
callback?.call(this)
|
78
|
+
@destroy()
|
79
|
+
|
80
|
+
setProgress: (progress) ->
|
81
|
+
@progress = progress
|
82
|
+
@delegate.requestProgressed?(@progress)
|
83
|
+
|
84
|
+
destroy: ->
|
85
|
+
@setProgress(1)
|
86
|
+
@delegate.requestFinished?()
|
87
|
+
@delegate = null
|
88
|
+
@xhr = null
|
@@ -0,0 +1,16 @@
|
|
1
|
+
#= require ./BANNER
|
2
|
+
#= export Turbolinks
|
3
|
+
#= require_self
|
4
|
+
#= require ./helpers
|
5
|
+
#= require ./controller
|
6
|
+
#= require ./start
|
7
|
+
|
8
|
+
@Turbolinks =
|
9
|
+
supported: do ->
|
10
|
+
window.history.pushState? and window.requestAnimationFrame?
|
11
|
+
|
12
|
+
visit: (location, options) ->
|
13
|
+
Turbolinks.controller.visit(location, options)
|
14
|
+
|
15
|
+
clearCache: ->
|
16
|
+
Turbolinks.controller.clearCache()
|
@@ -0,0 +1,70 @@
|
|
1
|
+
class Turbolinks.Location
|
2
|
+
@wrap: (value) ->
|
3
|
+
if value instanceof this
|
4
|
+
value
|
5
|
+
else
|
6
|
+
new this value
|
7
|
+
|
8
|
+
constructor: (url = "") ->
|
9
|
+
linkWithAnchor = document.createElement("a")
|
10
|
+
linkWithAnchor.href = url.toString()
|
11
|
+
|
12
|
+
@absoluteURL = linkWithAnchor.href
|
13
|
+
|
14
|
+
anchorLength = linkWithAnchor.hash.length
|
15
|
+
if anchorLength < 2
|
16
|
+
@requestURL = @absoluteURL
|
17
|
+
else
|
18
|
+
@requestURL = @absoluteURL.slice(0, -anchorLength)
|
19
|
+
@anchor = linkWithAnchor.hash.slice(1)
|
20
|
+
|
21
|
+
getOrigin: ->
|
22
|
+
@absoluteURL.split("/", 3).join("/")
|
23
|
+
|
24
|
+
getPath: ->
|
25
|
+
@absoluteURL.match(/\/\/[^/]*(\/[^?;]*)/)?[1] ? "/"
|
26
|
+
|
27
|
+
getPathComponents: ->
|
28
|
+
@getPath().split("/").slice(1)
|
29
|
+
|
30
|
+
getLastPathComponent: ->
|
31
|
+
@getPathComponents().slice(-1)[0]
|
32
|
+
|
33
|
+
getExtension: ->
|
34
|
+
@getLastPathComponent().match(/\.[^.]*$/)?[0] ? ""
|
35
|
+
|
36
|
+
isHTML: ->
|
37
|
+
@getExtension().match(/^(?:|\.(?:htm|html|xhtml))$/)
|
38
|
+
|
39
|
+
isPrefixedBy: (location) ->
|
40
|
+
prefixURL = getPrefixURL(location)
|
41
|
+
@isEqualTo(location) or stringStartsWith(@absoluteURL, prefixURL)
|
42
|
+
|
43
|
+
isEqualTo: (location) ->
|
44
|
+
@absoluteURL is location?.absoluteURL
|
45
|
+
|
46
|
+
toCacheKey: ->
|
47
|
+
@requestURL
|
48
|
+
|
49
|
+
toJSON: ->
|
50
|
+
@absoluteURL
|
51
|
+
|
52
|
+
toString: ->
|
53
|
+
@absoluteURL
|
54
|
+
|
55
|
+
valueOf: ->
|
56
|
+
@absoluteURL
|
57
|
+
|
58
|
+
# Private
|
59
|
+
|
60
|
+
getPrefixURL = (location) ->
|
61
|
+
addTrailingSlash(location.getOrigin() + location.getPath())
|
62
|
+
|
63
|
+
addTrailingSlash = (url) ->
|
64
|
+
if stringEndsWith(url, "/") then url else url + "/"
|
65
|
+
|
66
|
+
stringStartsWith = (string, prefix) ->
|
67
|
+
string.slice(0, prefix.length) is prefix
|
68
|
+
|
69
|
+
stringEndsWith = (string, suffix) ->
|
70
|
+
string.slice(-suffix.length) is suffix
|
@@ -0,0 +1,83 @@
|
|
1
|
+
class Turbolinks.ProgressBar
|
2
|
+
ANIMATION_DURATION = 300
|
3
|
+
|
4
|
+
@defaultCSS: """
|
5
|
+
.turbolinks-progress-bar {
|
6
|
+
position: fixed;
|
7
|
+
display: block;
|
8
|
+
top: 0;
|
9
|
+
left: 0;
|
10
|
+
height: 3px;
|
11
|
+
background: #0076ff;
|
12
|
+
z-index: 9999;
|
13
|
+
transition: width #{ANIMATION_DURATION}ms ease-out, opacity #{ANIMATION_DURATION / 2}ms #{ANIMATION_DURATION / 2}ms ease-in;
|
14
|
+
transform: translate3d(0, 0, 0);
|
15
|
+
}
|
16
|
+
"""
|
17
|
+
|
18
|
+
constructor: ->
|
19
|
+
@stylesheetElement = @createStylesheetElement()
|
20
|
+
@progressElement = @createProgressElement()
|
21
|
+
|
22
|
+
show: ->
|
23
|
+
unless @visible
|
24
|
+
@visible = true
|
25
|
+
@installStylesheetElement()
|
26
|
+
@installProgressElement()
|
27
|
+
@startTrickling()
|
28
|
+
|
29
|
+
hide: ->
|
30
|
+
if @visible and not @hiding
|
31
|
+
@hiding = true
|
32
|
+
@fadeProgressElement =>
|
33
|
+
@uninstallProgressElement()
|
34
|
+
@stopTrickling()
|
35
|
+
@visible = false
|
36
|
+
@hiding = false
|
37
|
+
|
38
|
+
setValue: (@value) ->
|
39
|
+
@refresh()
|
40
|
+
|
41
|
+
# Private
|
42
|
+
|
43
|
+
installStylesheetElement: ->
|
44
|
+
document.head.insertBefore(@stylesheetElement, document.head.firstChild)
|
45
|
+
|
46
|
+
installProgressElement: ->
|
47
|
+
@progressElement.style.width = 0
|
48
|
+
@progressElement.style.opacity = 1
|
49
|
+
document.documentElement.insertBefore(@progressElement, document.body)
|
50
|
+
@refresh()
|
51
|
+
|
52
|
+
fadeProgressElement: (callback) ->
|
53
|
+
@progressElement.style.opacity = 0
|
54
|
+
setTimeout(callback, ANIMATION_DURATION * 1.5)
|
55
|
+
|
56
|
+
uninstallProgressElement: ->
|
57
|
+
if @progressElement.parentNode
|
58
|
+
document.documentElement.removeChild(@progressElement)
|
59
|
+
|
60
|
+
startTrickling: ->
|
61
|
+
@trickleInterval ?= setInterval(@trickle, ANIMATION_DURATION)
|
62
|
+
|
63
|
+
stopTrickling: ->
|
64
|
+
clearInterval(@trickleInterval)
|
65
|
+
@trickleInterval = null
|
66
|
+
|
67
|
+
trickle: =>
|
68
|
+
@setValue(@value + Math.random() / 100)
|
69
|
+
|
70
|
+
refresh: ->
|
71
|
+
requestAnimationFrame =>
|
72
|
+
@progressElement.style.width = "#{10 + (@value * 90)}%"
|
73
|
+
|
74
|
+
createStylesheetElement: ->
|
75
|
+
element = document.createElement("style")
|
76
|
+
element.type = "text/css"
|
77
|
+
element.textContent = @constructor.defaultCSS
|
78
|
+
element
|
79
|
+
|
80
|
+
createProgressElement: ->
|
81
|
+
element = document.createElement("div")
|
82
|
+
element.className = "turbolinks-progress-bar"
|
83
|
+
element
|
@@ -0,0 +1,27 @@
|
|
1
|
+
class Turbolinks.Renderer
|
2
|
+
@render: (delegate, callback, args...) ->
|
3
|
+
renderer = new this args...
|
4
|
+
renderer.delegate = delegate
|
5
|
+
renderer.render(callback)
|
6
|
+
renderer
|
7
|
+
|
8
|
+
renderView: (callback) ->
|
9
|
+
@delegate.viewWillRender(@newBody)
|
10
|
+
callback()
|
11
|
+
@delegate.viewRendered(@newBody)
|
12
|
+
|
13
|
+
invalidateView: ->
|
14
|
+
@delegate.viewInvalidated()
|
15
|
+
|
16
|
+
createScriptElement: (element) ->
|
17
|
+
if element.getAttribute("data-turbolinks-eval") is "false"
|
18
|
+
element
|
19
|
+
else
|
20
|
+
createdScriptElement = document.createElement("script")
|
21
|
+
createdScriptElement.textContent = element.textContent
|
22
|
+
copyElementAttributes(createdScriptElement, element)
|
23
|
+
createdScriptElement
|
24
|
+
|
25
|
+
copyElementAttributes = (destinationElement, sourceElement) ->
|
26
|
+
for {name, value} in sourceElement.attributes
|
27
|
+
destinationElement.setAttribute(name, value)
|
@@ -0,0 +1,27 @@
|
|
1
|
+
class Turbolinks.ScrollManager
|
2
|
+
constructor: (@delegate) ->
|
3
|
+
|
4
|
+
start: ->
|
5
|
+
unless @started
|
6
|
+
addEventListener("scroll", @onScroll, false)
|
7
|
+
@onScroll()
|
8
|
+
@started = true
|
9
|
+
|
10
|
+
stop: ->
|
11
|
+
if @started
|
12
|
+
removeEventListener("scroll", @onScroll, false)
|
13
|
+
@started = false
|
14
|
+
|
15
|
+
scrollToElement: (element) ->
|
16
|
+
element.scrollIntoView()
|
17
|
+
|
18
|
+
scrollToPosition: ({x, y}) ->
|
19
|
+
window.scrollTo(x, y)
|
20
|
+
|
21
|
+
onScroll: (event) =>
|
22
|
+
@updatePosition(x: window.pageXOffset, y: window.pageYOffset)
|
23
|
+
|
24
|
+
# Private
|
25
|
+
|
26
|
+
updatePosition: (@position) ->
|
27
|
+
@delegate?.scrollPositionChanged(@position)
|