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.
Files changed (275) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +21 -0
  3. data/README.md +89 -0
  4. data/_includes/footer.html +7 -0
  5. data/_includes/head.html +33 -0
  6. data/_includes/image.html +3 -0
  7. data/_includes/javascripts.html +21 -0
  8. data/_includes/navigation.html +75 -0
  9. data/_layouts/articles_by_tag.html +38 -0
  10. data/_layouts/default.html +16 -0
  11. data/_layouts/page.html +5 -0
  12. data/_layouts/post.html +71 -0
  13. data/assets/bower/fluidbox/.bower.json +44 -0
  14. data/assets/bower/fluidbox/Gruntfile.js +8 -0
  15. data/assets/bower/fluidbox/LICENSE.md +23 -0
  16. data/assets/bower/fluidbox/README.md +396 -0
  17. data/assets/bower/fluidbox/bower.json +35 -0
  18. data/assets/bower/fluidbox/demo/css/styles.min.css +2 -0
  19. data/assets/bower/fluidbox/demo/css/styles.min.css.map +1 -0
  20. data/assets/bower/fluidbox/demo/fonts/BLOKKRegular.eot +0 -0
  21. data/assets/bower/fluidbox/demo/fonts/BLOKKRegular.svg +233 -0
  22. data/assets/bower/fluidbox/demo/fonts/BLOKKRegular.ttf +0 -0
  23. data/assets/bower/fluidbox/demo/fonts/BLOKKRegular.woff +0 -0
  24. data/assets/bower/fluidbox/demo/fonts/fontello.eot +0 -0
  25. data/assets/bower/fluidbox/demo/fonts/fontello.svg +13 -0
  26. data/assets/bower/fluidbox/demo/fonts/fontello.ttf +0 -0
  27. data/assets/bower/fluidbox/demo/fonts/fontello.woff +0 -0
  28. data/assets/bower/fluidbox/demo/index.html +758 -0
  29. data/assets/bower/fluidbox/demo/src/css/styles.scss +1131 -0
  30. data/assets/bower/fluidbox/dist/css/fluidbox.min.css +2 -0
  31. data/assets/bower/fluidbox/dist/css/fluidbox.min.css.map +1 -0
  32. data/assets/bower/fluidbox/dist/js/jquery.fluidbox.min.js +1 -0
  33. data/assets/bower/fluidbox/grunt/aliases.yaml +20 -0
  34. data/assets/bower/fluidbox/grunt/clean.js +5 -0
  35. data/assets/bower/fluidbox/grunt/concurrent.js +33 -0
  36. data/assets/bower/fluidbox/grunt/jshint.js +10 -0
  37. data/assets/bower/fluidbox/grunt/postcss.js +47 -0
  38. data/assets/bower/fluidbox/grunt/sass.js +42 -0
  39. data/assets/bower/fluidbox/grunt/uglify.js +7 -0
  40. data/assets/bower/fluidbox/grunt/watch.js +28 -0
  41. data/assets/bower/fluidbox/index.html +8 -0
  42. data/assets/bower/fluidbox/license.txt +21 -0
  43. data/assets/bower/fluidbox/src/css/_fluidbox.scss +95 -0
  44. data/assets/bower/fluidbox/src/css/fluidbox.scss +2 -0
  45. data/assets/bower/fluidbox/src/js/jquery.fluidbox.js +722 -0
  46. data/assets/bower/jquery/.bower.json +25 -0
  47. data/assets/bower/jquery/AUTHORS.txt +295 -0
  48. data/assets/bower/jquery/LICENSE.txt +36 -0
  49. data/assets/bower/jquery/README.md +65 -0
  50. data/assets/bower/jquery/bower.json +14 -0
  51. data/assets/bower/jquery/dist/core.js +482 -0
  52. data/assets/bower/jquery/dist/jquery.js +10220 -0
  53. data/assets/bower/jquery/dist/jquery.min.js +4 -0
  54. data/assets/bower/jquery/dist/jquery.min.map +1 -0
  55. data/assets/bower/jquery/dist/jquery.slim.js +8107 -0
  56. data/assets/bower/jquery/dist/jquery.slim.min.js +4 -0
  57. data/assets/bower/jquery/dist/jquery.slim.min.map +1 -0
  58. data/assets/bower/jquery/external/sizzle/LICENSE.txt +36 -0
  59. data/assets/bower/jquery/external/sizzle/dist/sizzle.js +2272 -0
  60. data/assets/bower/jquery/external/sizzle/dist/sizzle.min.js +3 -0
  61. data/assets/bower/jquery/external/sizzle/dist/sizzle.min.map +1 -0
  62. data/assets/bower/jquery/src/.eslintrc.json +18 -0
  63. data/assets/bower/jquery/src/ajax.js +855 -0
  64. data/assets/bower/jquery/src/ajax/jsonp.js +102 -0
  65. data/assets/bower/jquery/src/ajax/load.js +76 -0
  66. data/assets/bower/jquery/src/ajax/parseXML.js +30 -0
  67. data/assets/bower/jquery/src/ajax/script.js +77 -0
  68. data/assets/bower/jquery/src/ajax/var/location.js +5 -0
  69. data/assets/bower/jquery/src/ajax/var/nonce.js +7 -0
  70. data/assets/bower/jquery/src/ajax/var/rquery.js +5 -0
  71. data/assets/bower/jquery/src/ajax/xhr.js +169 -0
  72. data/assets/bower/jquery/src/attributes.js +13 -0
  73. data/assets/bower/jquery/src/attributes/attr.js +140 -0
  74. data/assets/bower/jquery/src/attributes/classes.js +174 -0
  75. data/assets/bower/jquery/src/attributes/prop.js +143 -0
  76. data/assets/bower/jquery/src/attributes/support.js +33 -0
  77. data/assets/bower/jquery/src/attributes/val.js +188 -0
  78. data/assets/bower/jquery/src/callbacks.js +234 -0
  79. data/assets/bower/jquery/src/core.js +482 -0
  80. data/assets/bower/jquery/src/core/DOMEval.js +16 -0
  81. data/assets/bower/jquery/src/core/access.js +70 -0
  82. data/assets/bower/jquery/src/core/init.js +127 -0
  83. data/assets/bower/jquery/src/core/parseHTML.js +65 -0
  84. data/assets/bower/jquery/src/core/ready-no-deferred.js +105 -0
  85. data/assets/bower/jquery/src/core/ready.js +95 -0
  86. data/assets/bower/jquery/src/core/readyException.js +13 -0
  87. data/assets/bower/jquery/src/core/stripAndCollapse.js +14 -0
  88. data/assets/bower/jquery/src/core/support.js +20 -0
  89. data/assets/bower/jquery/src/core/var/rsingleTag.js +6 -0
  90. data/assets/bower/jquery/src/css.js +426 -0
  91. data/assets/bower/jquery/src/css/addGetHookIf.js +26 -0
  92. data/assets/bower/jquery/src/css/adjustCSS.js +71 -0
  93. data/assets/bower/jquery/src/css/curCSS.js +59 -0
  94. data/assets/bower/jquery/src/css/hiddenVisibleSelectors.js +15 -0
  95. data/assets/bower/jquery/src/css/showHide.js +105 -0
  96. data/assets/bower/jquery/src/css/support.js +89 -0
  97. data/assets/bower/jquery/src/css/var/cssExpand.js +5 -0
  98. data/assets/bower/jquery/src/css/var/getStyles.js +17 -0
  99. data/assets/bower/jquery/src/css/var/isHiddenWithinTree.js +34 -0
  100. data/assets/bower/jquery/src/css/var/rmargin.js +5 -0
  101. data/assets/bower/jquery/src/css/var/rnumnonpx.js +7 -0
  102. data/assets/bower/jquery/src/css/var/swap.js +26 -0
  103. data/assets/bower/jquery/src/data.js +179 -0
  104. data/assets/bower/jquery/src/data/Data.js +161 -0
  105. data/assets/bower/jquery/src/data/var/acceptData.js +19 -0
  106. data/assets/bower/jquery/src/data/var/dataPriv.js +7 -0
  107. data/assets/bower/jquery/src/data/var/dataUser.js +7 -0
  108. data/assets/bower/jquery/src/deferred.js +389 -0
  109. data/assets/bower/jquery/src/deferred/exceptionHook.js +21 -0
  110. data/assets/bower/jquery/src/deprecated.js +30 -0
  111. data/assets/bower/jquery/src/dimensions.js +56 -0
  112. data/assets/bower/jquery/src/effects.js +693 -0
  113. data/assets/bower/jquery/src/effects/Tween.js +123 -0
  114. data/assets/bower/jquery/src/effects/animatedSelector.js +15 -0
  115. data/assets/bower/jquery/src/event.js +745 -0
  116. data/assets/bower/jquery/src/event/ajax.js +22 -0
  117. data/assets/bower/jquery/src/event/alias.js +29 -0
  118. data/assets/bower/jquery/src/event/focusin.js +55 -0
  119. data/assets/bower/jquery/src/event/support.js +11 -0
  120. data/assets/bower/jquery/src/event/trigger.js +185 -0
  121. data/assets/bower/jquery/src/exports/amd.js +26 -0
  122. data/assets/bower/jquery/src/exports/global.js +34 -0
  123. data/assets/bower/jquery/src/jquery.js +41 -0
  124. data/assets/bower/jquery/src/manipulation.js +486 -0
  125. data/assets/bower/jquery/src/manipulation/_evalUrl.js +23 -0
  126. data/assets/bower/jquery/src/manipulation/buildFragment.js +104 -0
  127. data/assets/bower/jquery/src/manipulation/getAll.js +31 -0
  128. data/assets/bower/jquery/src/manipulation/setGlobalEval.js +22 -0
  129. data/assets/bower/jquery/src/manipulation/support.js +35 -0
  130. data/assets/bower/jquery/src/manipulation/var/rcheckableType.js +5 -0
  131. data/assets/bower/jquery/src/manipulation/var/rscriptType.js +5 -0
  132. data/assets/bower/jquery/src/manipulation/var/rtagName.js +5 -0
  133. data/assets/bower/jquery/src/manipulation/wrapMap.js +29 -0
  134. data/assets/bower/jquery/src/offset.js +232 -0
  135. data/assets/bower/jquery/src/queue.js +145 -0
  136. data/assets/bower/jquery/src/queue/delay.js +24 -0
  137. data/assets/bower/jquery/src/selector-native.js +237 -0
  138. data/assets/bower/jquery/src/selector-sizzle.js +19 -0
  139. data/assets/bower/jquery/src/selector.js +3 -0
  140. data/assets/bower/jquery/src/serialize.js +130 -0
  141. data/assets/bower/jquery/src/traversing.js +178 -0
  142. data/assets/bower/jquery/src/traversing/findFilter.js +106 -0
  143. data/assets/bower/jquery/src/traversing/var/dir.js +22 -0
  144. data/assets/bower/jquery/src/traversing/var/rneedsContext.js +8 -0
  145. data/assets/bower/jquery/src/traversing/var/siblings.js +17 -0
  146. data/assets/bower/jquery/src/var/ObjectFunctionString.js +7 -0
  147. data/assets/bower/jquery/src/var/arr.js +5 -0
  148. data/assets/bower/jquery/src/var/class2type.js +6 -0
  149. data/assets/bower/jquery/src/var/concat.js +7 -0
  150. data/assets/bower/jquery/src/var/document.js +5 -0
  151. data/assets/bower/jquery/src/var/documentElement.js +7 -0
  152. data/assets/bower/jquery/src/var/fnToString.js +7 -0
  153. data/assets/bower/jquery/src/var/getProto.js +5 -0
  154. data/assets/bower/jquery/src/var/hasOwn.js +7 -0
  155. data/assets/bower/jquery/src/var/indexOf.js +7 -0
  156. data/assets/bower/jquery/src/var/pnum.js +5 -0
  157. data/assets/bower/jquery/src/var/push.js +7 -0
  158. data/assets/bower/jquery/src/var/rcssNum.js +9 -0
  159. data/assets/bower/jquery/src/var/rnothtmlwhite.js +8 -0
  160. data/assets/bower/jquery/src/var/slice.js +7 -0
  161. data/assets/bower/jquery/src/var/support.js +6 -0
  162. data/assets/bower/jquery/src/var/toString.js +7 -0
  163. data/assets/bower/jquery/src/wrap.js +77 -0
  164. data/assets/bower/scrollreveal/.bower.json +36 -0
  165. data/assets/bower/scrollreveal/CHANGELOG.md +268 -0
  166. data/assets/bower/scrollreveal/LICENSE.md +12 -0
  167. data/assets/bower/scrollreveal/README.md +413 -0
  168. data/assets/bower/scrollreveal/bower.json +24 -0
  169. data/assets/bower/scrollreveal/dist/scrollreveal.js +860 -0
  170. data/assets/bower/scrollreveal/dist/scrollreveal.min.js +1 -0
  171. data/assets/bower/turbolinks5/.blade.yml +15 -0
  172. data/assets/bower/turbolinks5/.bower.json +14 -0
  173. data/assets/bower/turbolinks5/.gitignore +2 -0
  174. data/assets/bower/turbolinks5/CONDUCT.md +79 -0
  175. data/assets/bower/turbolinks5/Gemfile +9 -0
  176. data/assets/bower/turbolinks5/LICENSE +20 -0
  177. data/assets/bower/turbolinks5/README.md +435 -0
  178. data/assets/bower/turbolinks5/bin/blade +16 -0
  179. data/assets/bower/turbolinks5/bin/rackup +16 -0
  180. data/assets/bower/turbolinks5/config.ru +8 -0
  181. data/assets/bower/turbolinks5/dist/turbolinks.js +6 -0
  182. data/assets/bower/turbolinks5/package.json +31 -0
  183. data/assets/bower/turbolinks5/src/turbolinks/BANNER.js.erb +4 -0
  184. data/assets/bower/turbolinks5/src/turbolinks/VERSION +1 -0
  185. data/assets/bower/turbolinks5/src/turbolinks/browser_adapter.coffee +61 -0
  186. data/assets/bower/turbolinks5/src/turbolinks/compatibility.coffee +30 -0
  187. data/assets/bower/turbolinks5/src/turbolinks/controller.coffee +239 -0
  188. data/assets/bower/turbolinks5/src/turbolinks/error_renderer.coffee +21 -0
  189. data/assets/bower/turbolinks5/src/turbolinks/head_details.coffee +51 -0
  190. data/assets/bower/turbolinks5/src/turbolinks/helpers.coffee +51 -0
  191. data/assets/bower/turbolinks5/src/turbolinks/history.coffee +46 -0
  192. data/assets/bower/turbolinks5/src/turbolinks/http_request.coffee +88 -0
  193. data/assets/bower/turbolinks5/src/turbolinks/index.coffee +16 -0
  194. data/assets/bower/turbolinks5/src/turbolinks/location.coffee +70 -0
  195. data/assets/bower/turbolinks5/src/turbolinks/progress_bar.coffee +83 -0
  196. data/assets/bower/turbolinks5/src/turbolinks/renderer.coffee +27 -0
  197. data/assets/bower/turbolinks5/src/turbolinks/scroll_manager.coffee +27 -0
  198. data/assets/bower/turbolinks5/src/turbolinks/snapshot.coffee +47 -0
  199. data/assets/bower/turbolinks5/src/turbolinks/snapshot_cache.coffee +43 -0
  200. data/assets/bower/turbolinks5/src/turbolinks/snapshot_renderer.coffee +88 -0
  201. data/assets/bower/turbolinks5/src/turbolinks/start.coffee +18 -0
  202. data/assets/bower/turbolinks5/src/turbolinks/view.coffee +34 -0
  203. data/assets/bower/turbolinks5/src/turbolinks/visit.coffee +162 -0
  204. data/assets/bower/turbolinks5/test/src/fixtures/additional_assets.html +12 -0
  205. data/assets/bower/turbolinks5/test/src/fixtures/body_script.html +18 -0
  206. data/assets/bower/turbolinks5/test/src/fixtures/eval_false_script.html +18 -0
  207. data/assets/bower/turbolinks5/test/src/fixtures/head_script.html +18 -0
  208. data/assets/bower/turbolinks5/test/src/fixtures/navigation.html +21 -0
  209. data/assets/bower/turbolinks5/test/src/fixtures/one.html +12 -0
  210. data/assets/bower/turbolinks5/test/src/fixtures/rendering.html +20 -0
  211. data/assets/bower/turbolinks5/test/src/fixtures/tracked_asset_change.html +11 -0
  212. data/assets/bower/turbolinks5/test/src/fixtures/visit.html +14 -0
  213. data/assets/bower/turbolinks5/test/src/head.html.erb +1 -0
  214. data/assets/bower/turbolinks5/test/src/helpers/replicant_helpers.coffee +18 -0
  215. data/assets/bower/turbolinks5/test/src/modules/navigation_tests.coffee +75 -0
  216. data/assets/bower/turbolinks5/test/src/modules/rendering_tests.coffee +123 -0
  217. data/assets/bower/turbolinks5/test/src/modules/visit_tests.coffee +49 -0
  218. data/assets/bower/turbolinks5/test/src/test.coffee +4 -0
  219. data/assets/bower/turbolinks5/test/src/test.css +20 -0
  220. data/assets/bower/turbolinks5/test/vendor/replicant.js +10 -0
  221. data/assets/fonts/cormorant-garamond/Cormorant-Garamond-700.eot +0 -0
  222. data/assets/fonts/cormorant-garamond/Cormorant-Garamond-700.ttf +0 -0
  223. data/assets/fonts/cormorant-garamond/Cormorant-Garamond-700.woff +0 -0
  224. data/assets/fonts/cormorant-garamond/Cormorant-Garamond-700.woff2 +0 -0
  225. data/assets/fonts/ionicons/ionicons.eot +0 -0
  226. data/assets/fonts/ionicons/ionicons.svg +2232 -0
  227. data/assets/fonts/ionicons/ionicons.ttf +0 -0
  228. data/assets/fonts/ionicons/ionicons.woff +0 -0
  229. data/assets/fonts/lato/Lato-300.eot +0 -0
  230. data/assets/fonts/lato/Lato-300.ttf +0 -0
  231. data/assets/fonts/lato/Lato-300.woff +0 -0
  232. data/assets/fonts/lato/Lato-300.woff2 +0 -0
  233. data/assets/fonts/lato/Lato-700.eot +0 -0
  234. data/assets/fonts/lato/Lato-700.ttf +0 -0
  235. data/assets/fonts/lato/Lato-700.woff +0 -0
  236. data/assets/fonts/lato/Lato-700.woff2 +0 -0
  237. data/assets/fonts/lato/Lato-regular.eot +0 -0
  238. data/assets/fonts/lato/Lato-regular.ttf +0 -0
  239. data/assets/fonts/lato/Lato-regular.woff +0 -0
  240. data/assets/fonts/lato/Lato-regular.woff2 +0 -0
  241. data/assets/images/about.jpg +0 -0
  242. data/assets/images/about@2x.jpg +0 -0
  243. data/assets/images/apple-touch-icon.png +0 -0
  244. data/assets/images/documentation/chalk-intro.png +0 -0
  245. data/assets/images/documentation/chalk-intro@2x.png +0 -0
  246. data/assets/images/documentation/enlarge.gif +0 -0
  247. data/assets/images/documentation/enlarge@2x.gif +0 -0
  248. data/assets/images/documentation/sample-image.jpg +0 -0
  249. data/assets/images/documentation/sample-image@2x.jpg +0 -0
  250. data/assets/images/og-image.jpg +0 -0
  251. data/assets/javascripts/application.js +24 -0
  252. data/assets/javascripts/vendor.js +6 -0
  253. data/assets/javascripts/vendor/jquery-throttle-debounce.js +9 -0
  254. data/assets/javascripts/vendor/retina.js +182 -0
  255. data/assets/stylesheets/.csscomb.json +197 -0
  256. data/assets/stylesheets/.scss-lint.yml +33 -0
  257. data/assets/stylesheets/_base.scss +151 -0
  258. data/assets/stylesheets/_mixins.scss +28 -0
  259. data/assets/stylesheets/_variables.scss +47 -0
  260. data/assets/stylesheets/dark.scss +70 -0
  261. data/assets/stylesheets/fonts.scss +63 -0
  262. data/assets/stylesheets/layouts/_footer.scss +17 -0
  263. data/assets/stylesheets/layouts/_grid.scss +102 -0
  264. data/assets/stylesheets/light.scss +70 -0
  265. data/assets/stylesheets/modules/_about.scss +10 -0
  266. data/assets/stylesheets/modules/_articles.scss +211 -0
  267. data/assets/stylesheets/modules/_embed.scss +31 -0
  268. data/assets/stylesheets/modules/_header.scss +57 -0
  269. data/assets/stylesheets/modules/_highlights-dark.scss +415 -0
  270. data/assets/stylesheets/modules/_highlights-light.scss +409 -0
  271. data/assets/stylesheets/modules/_icons.scss +2967 -0
  272. data/assets/stylesheets/notfound-dark.scss +90 -0
  273. data/assets/stylesheets/notfound-light.scss +90 -0
  274. data/assets/stylesheets/vendor/_normalize.scss +461 -0
  275. metadata +276 -3
@@ -0,0 +1,47 @@
1
+ class Turbolinks.Snapshot
2
+ @wrap: (value) ->
3
+ if value instanceof this
4
+ value
5
+ else
6
+ @fromHTML(value)
7
+
8
+ @fromHTML: (html) ->
9
+ element = document.createElement("html")
10
+ element.innerHTML = html
11
+ @fromElement(element)
12
+
13
+ @fromElement: (element) ->
14
+ new this
15
+ head: element.querySelector("head")
16
+ body: element.querySelector("body")
17
+
18
+ constructor: ({head, body}) ->
19
+ @head = head ? document.createElement("head")
20
+ @body = body ? document.createElement("body")
21
+
22
+ clone: ->
23
+ new Snapshot
24
+ head: @head.cloneNode(true)
25
+ body: @body.cloneNode(true)
26
+
27
+ getRootLocation: ->
28
+ root = @getSetting("root") ? "/"
29
+ new Turbolinks.Location root
30
+
31
+ getCacheControlValue: ->
32
+ @getSetting("cache-control")
33
+
34
+ hasAnchor: (anchor) ->
35
+ try @body.querySelector("[id='#{anchor}']")?
36
+
37
+ isPreviewable: ->
38
+ @getCacheControlValue() isnt "no-preview"
39
+
40
+ isCacheable: ->
41
+ @getCacheControlValue() isnt "no-cache"
42
+
43
+ # Private
44
+
45
+ getSetting: (name) ->
46
+ [..., element] = @head.querySelectorAll("meta[name='turbolinks-#{name}']")
47
+ element?.getAttribute("content")
@@ -0,0 +1,43 @@
1
+ class Turbolinks.SnapshotCache
2
+ constructor: (@size) ->
3
+ @keys = []
4
+ @snapshots = {}
5
+
6
+ has: (location) ->
7
+ key = keyForLocation(location)
8
+ key of @snapshots
9
+
10
+ get: (location) ->
11
+ return unless @has(location)
12
+ snapshot = @read(location)
13
+ @touch(location)
14
+ snapshot
15
+
16
+ put: (location, snapshot) ->
17
+ @write(location, snapshot)
18
+ @touch(location)
19
+ snapshot
20
+
21
+ # Private
22
+
23
+ read: (location) ->
24
+ key = keyForLocation(location)
25
+ @snapshots[key]
26
+
27
+ write: (location, snapshot) ->
28
+ key = keyForLocation(location)
29
+ @snapshots[key] = snapshot
30
+
31
+ touch: (location) ->
32
+ key = keyForLocation(location)
33
+ index = @keys.indexOf(key)
34
+ @keys.splice(index, 1) if index > -1
35
+ @keys.unshift(key)
36
+ @trim()
37
+
38
+ trim: ->
39
+ for key in @keys.splice(@size)
40
+ delete @snapshots[key]
41
+
42
+ keyForLocation = (location) ->
43
+ Turbolinks.Location.wrap(location).toCacheKey()
@@ -0,0 +1,88 @@
1
+ #= require ./renderer
2
+ #= require ./head_details
3
+
4
+ class Turbolinks.SnapshotRenderer extends Turbolinks.Renderer
5
+ constructor: (@currentSnapshot, @newSnapshot) ->
6
+ @currentHeadDetails = new Turbolinks.HeadDetails @currentSnapshot.head
7
+ @newHeadDetails = new Turbolinks.HeadDetails @newSnapshot.head
8
+ @newBody = @newSnapshot.body
9
+
10
+ render: (callback) ->
11
+ if @trackedElementsAreIdentical()
12
+ @mergeHead()
13
+ @renderView =>
14
+ @replaceBody()
15
+ @focusFirstAutofocusableElement()
16
+ callback()
17
+ else
18
+ @invalidateView()
19
+
20
+ mergeHead: ->
21
+ @copyNewHeadStylesheetElements()
22
+ @copyNewHeadScriptElements()
23
+ @removeCurrentHeadProvisionalElements()
24
+ @copyNewHeadProvisionalElements()
25
+
26
+ replaceBody: ->
27
+ @activateBodyScriptElements()
28
+ @importBodyPermanentElements()
29
+ @assignNewBody()
30
+
31
+ trackedElementsAreIdentical: ->
32
+ @currentHeadDetails.getTrackedElementSignature() is @newHeadDetails.getTrackedElementSignature()
33
+
34
+ copyNewHeadStylesheetElements: ->
35
+ for element in @getNewHeadStylesheetElements()
36
+ document.head.appendChild(element)
37
+
38
+ copyNewHeadScriptElements: ->
39
+ for element in @getNewHeadScriptElements()
40
+ document.head.appendChild(@createScriptElement(element))
41
+
42
+ removeCurrentHeadProvisionalElements: ->
43
+ for element in @getCurrentHeadProvisionalElements()
44
+ document.head.removeChild(element)
45
+
46
+ copyNewHeadProvisionalElements: ->
47
+ for element in @getNewHeadProvisionalElements()
48
+ document.head.appendChild(element)
49
+
50
+ importBodyPermanentElements: ->
51
+ for replaceableElement in @getNewBodyPermanentElements()
52
+ if element = @findCurrentBodyPermanentElement(replaceableElement)
53
+ replaceableElement.parentNode.replaceChild(element, replaceableElement)
54
+
55
+ activateBodyScriptElements: ->
56
+ for replaceableElement in @getNewBodyScriptElements()
57
+ element = @createScriptElement(replaceableElement)
58
+ replaceableElement.parentNode.replaceChild(element, replaceableElement)
59
+
60
+ assignNewBody: ->
61
+ document.body = @newBody
62
+
63
+ focusFirstAutofocusableElement: ->
64
+ @findFirstAutofocusableElement()?.focus()
65
+
66
+ getNewHeadStylesheetElements: ->
67
+ @newHeadDetails.getStylesheetElementsNotInDetails(@currentHeadDetails)
68
+
69
+ getNewHeadScriptElements: ->
70
+ @newHeadDetails.getScriptElementsNotInDetails(@currentHeadDetails)
71
+
72
+ getCurrentHeadProvisionalElements: ->
73
+ @currentHeadDetails.getProvisionalElements()
74
+
75
+ getNewHeadProvisionalElements: ->
76
+ @newHeadDetails.getProvisionalElements()
77
+
78
+ getNewBodyPermanentElements: ->
79
+ @newBody.querySelectorAll("[id][data-turbolinks-permanent]")
80
+
81
+ findCurrentBodyPermanentElement: (element) ->
82
+ document.body.querySelector("##{element.id}[data-turbolinks-permanent]")
83
+
84
+ getNewBodyScriptElements: ->
85
+ @newBody.querySelectorAll("script")
86
+
87
+ findFirstAutofocusableElement: ->
88
+ document.body.querySelector("[autofocus]")
@@ -0,0 +1,18 @@
1
+ Turbolinks.start = ->
2
+ if installTurbolinks()
3
+ Turbolinks.controller ?= createController()
4
+ Turbolinks.controller.start()
5
+
6
+ installTurbolinks = ->
7
+ window.Turbolinks ?= Turbolinks
8
+ moduleIsInstalled()
9
+
10
+ createController = ->
11
+ controller = new Turbolinks.Controller
12
+ controller.adapter = new Turbolinks.BrowserAdapter(controller)
13
+ controller
14
+
15
+ moduleIsInstalled = ->
16
+ window.Turbolinks is Turbolinks
17
+
18
+ Turbolinks.start() if moduleIsInstalled()
@@ -0,0 +1,34 @@
1
+ #= require ./snapshot
2
+ #= require ./snapshot_renderer
3
+ #= require ./error_renderer
4
+
5
+ class Turbolinks.View
6
+ constructor: (@delegate) ->
7
+ @element = document.documentElement
8
+
9
+ getRootLocation: ->
10
+ @getSnapshot().getRootLocation()
11
+
12
+ getSnapshot: ->
13
+ Turbolinks.Snapshot.fromElement(@element)
14
+
15
+ render: ({snapshot, error, isPreview}, callback) ->
16
+ @markAsPreview(isPreview)
17
+ if snapshot?
18
+ @renderSnapshot(snapshot, callback)
19
+ else
20
+ @renderError(error, callback)
21
+
22
+ # Private
23
+
24
+ markAsPreview: (isPreview) ->
25
+ if isPreview
26
+ @element.setAttribute("data-turbolinks-preview", "")
27
+ else
28
+ @element.removeAttribute("data-turbolinks-preview")
29
+
30
+ renderSnapshot: (snapshot, callback) ->
31
+ Turbolinks.SnapshotRenderer.render(@delegate, callback, @getSnapshot(), Turbolinks.Snapshot.wrap(snapshot))
32
+
33
+ renderError: (error, callback) ->
34
+ Turbolinks.ErrorRenderer.render(@delegate, callback, error)
@@ -0,0 +1,162 @@
1
+ #= require ./http_request
2
+
3
+ class Turbolinks.Visit
4
+ constructor: (@controller, location, @action) ->
5
+ @identifier = Turbolinks.uuid()
6
+ @location = Turbolinks.Location.wrap(location)
7
+ @adapter = @controller.adapter
8
+ @state = "initialized"
9
+ @timingMetrics = {}
10
+
11
+ start: ->
12
+ if @state is "initialized"
13
+ @recordTimingMetric("visitStart")
14
+ @state = "started"
15
+ @adapter.visitStarted(this)
16
+
17
+ cancel: ->
18
+ if @state is "started"
19
+ @request?.cancel()
20
+ @cancelRender()
21
+ @state = "canceled"
22
+
23
+ complete: ->
24
+ if @state is "started"
25
+ @recordTimingMetric("visitEnd")
26
+ @state = "completed"
27
+ @adapter.visitCompleted?(this)
28
+ @controller.visitCompleted(this)
29
+
30
+ fail: ->
31
+ if @state is "started"
32
+ @state = "failed"
33
+ @adapter.visitFailed?(this)
34
+
35
+ changeHistory: ->
36
+ unless @historyChanged
37
+ actionForHistory = if @location.isEqualTo(@referrer) then "replace" else @action
38
+ method = getHistoryMethodForAction(actionForHistory)
39
+ @controller[method](@location, @restorationIdentifier)
40
+ @historyChanged = true
41
+
42
+ issueRequest: ->
43
+ if @shouldIssueRequest() and not @request?
44
+ @progress = 0
45
+ @request = new Turbolinks.HttpRequest this, @location, @referrer
46
+ @request.send()
47
+
48
+ getCachedSnapshot: ->
49
+ if snapshot = @controller.getCachedSnapshotForLocation(@location)
50
+ if not @location.anchor? or snapshot.hasAnchor(@location.anchor)
51
+ if @action is "restore" or snapshot.isPreviewable()
52
+ snapshot
53
+
54
+ hasCachedSnapshot: ->
55
+ @getCachedSnapshot()?
56
+
57
+ loadCachedSnapshot: ->
58
+ if snapshot = @getCachedSnapshot()
59
+ isPreview = @shouldIssueRequest()
60
+ @render ->
61
+ @cacheSnapshot()
62
+ @controller.render({snapshot, isPreview}, @performScroll)
63
+ @adapter.visitRendered?(this)
64
+ @complete() unless isPreview
65
+
66
+ loadResponse: ->
67
+ if @response?
68
+ @render ->
69
+ @cacheSnapshot()
70
+ if @request.failed
71
+ @controller.render(error: @response, @performScroll)
72
+ @adapter.visitRendered?(this)
73
+ @fail()
74
+ else
75
+ @controller.render(snapshot: @response, @performScroll)
76
+ @adapter.visitRendered?(this)
77
+ @complete()
78
+
79
+ followRedirect: ->
80
+ if @redirectedToLocation and not @followedRedirect
81
+ @location = @redirectedToLocation
82
+ @controller.replaceHistoryWithLocationAndRestorationIdentifier(@redirectedToLocation, @restorationIdentifier)
83
+ @followedRedirect = true
84
+
85
+ # HTTP Request delegate
86
+
87
+ requestStarted: ->
88
+ @recordTimingMetric("requestStart")
89
+ @adapter.visitRequestStarted?(this)
90
+
91
+ requestProgressed: (@progress) ->
92
+ @adapter.visitRequestProgressed?(this)
93
+
94
+ requestCompletedWithResponse: (@response, redirectedToLocation) ->
95
+ @redirectedToLocation = Turbolinks.Location.wrap(redirectedToLocation) if redirectedToLocation?
96
+ @adapter.visitRequestCompleted(this)
97
+
98
+ requestFailedWithStatusCode: (statusCode, @response) ->
99
+ @adapter.visitRequestFailedWithStatusCode(this, statusCode)
100
+
101
+ requestFinished: ->
102
+ @recordTimingMetric("requestEnd")
103
+ @adapter.visitRequestFinished?(this)
104
+
105
+ # Scrolling
106
+
107
+ performScroll: =>
108
+ unless @scrolled
109
+ if @action is "restore"
110
+ @scrollToRestoredPosition() or @scrollToTop()
111
+ else
112
+ @scrollToAnchor() or @scrollToTop()
113
+ @scrolled = true
114
+
115
+ scrollToRestoredPosition: ->
116
+ position = @restorationData?.scrollPosition
117
+ if position?
118
+ @controller.scrollToPosition(position)
119
+ true
120
+
121
+ scrollToAnchor: ->
122
+ if @location.anchor?
123
+ @controller.scrollToAnchor(@location.anchor)
124
+ true
125
+
126
+ scrollToTop: ->
127
+ @controller.scrollToPosition(x: 0, y: 0)
128
+
129
+ # Instrumentation
130
+
131
+ recordTimingMetric: (name) ->
132
+ @timingMetrics[name] ?= new Date().getTime()
133
+
134
+ getTimingMetrics: ->
135
+ Turbolinks.copyObject(@timingMetrics)
136
+
137
+ # Private
138
+
139
+ getHistoryMethodForAction = (action) ->
140
+ switch action
141
+ when "replace" then "replaceHistoryWithLocationAndRestorationIdentifier"
142
+ when "advance", "restore" then "pushHistoryWithLocationAndRestorationIdentifier"
143
+
144
+ shouldIssueRequest: ->
145
+ if @action is "restore"
146
+ not @hasCachedSnapshot()
147
+ else
148
+ true
149
+
150
+ cacheSnapshot: ->
151
+ unless @snapshotCached
152
+ @controller.cacheSnapshot()
153
+ @snapshotCached = true
154
+
155
+ render: (callback) ->
156
+ @cancelRender()
157
+ @frame = requestAnimationFrame =>
158
+ @frame = null
159
+ callback.call(this)
160
+
161
+ cancelRender: ->
162
+ cancelAnimationFrame(@frame) if @frame
@@ -0,0 +1,12 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <title>Additional assets</title>
6
+ <link rel="stylesheet" type="text/css" href="/test.css">
7
+ <script src="/turbolinks.js" data-turbolinks-track="reload"></script>
8
+ </head>
9
+ <body>
10
+ <h1>Additional assets</h1>
11
+ </body>
12
+ </html>
@@ -0,0 +1,18 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <title>Body script</title>
6
+ <script src="/turbolinks.js" data-turbolinks-track="reload"></script>
7
+ </head>
8
+ <body>
9
+ <h1>Body script</h1>
10
+ <script>
11
+ if ("bodyScriptEvaluationCount" in window) {
12
+ window.bodyScriptEvaluationCount++
13
+ } else {
14
+ window.bodyScriptEvaluationCount = 1
15
+ }
16
+ </script>
17
+ </body>
18
+ </html>
@@ -0,0 +1,18 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <title>data-turbolinks-eval=false script</title>
6
+ <script src="/turbolinks.js" data-turbolinks-track="reload"></script>
7
+ </head>
8
+ <body>
9
+ <h1>data-turbolinks-eval=false script</h1>
10
+ <script data-turbolinks-eval="false">
11
+ if ("bodyScriptEvaluationCount" in window) {
12
+ window.bodyScriptEvaluationCount++
13
+ } else {
14
+ window.bodyScriptEvaluationCount = 1
15
+ }
16
+ </script>
17
+ </body>
18
+ </html>