瀏覽代碼

delete and done

schtonn 5 年之前
父節點
當前提交
3cc2d9329c
共有 99 個文件被更改,包括 229 次插入7793 次删除
  1. 0 0
      404.html
  2. 0 0
      archives/2020/03/index.html
  3. 0 0
      archives/2020/index.html
  4. 0 0
      archives/index.html
  5. 0 0
      core/core_data/c2NodG9ubg==.html
  6. 162 1
      core/css/main.css
  7. 18 1
      core/css/reset.css
  8. 49 1
      core/index.html
  9. 0 0
      css/main.css
  10. 0 9
      data/3749t1li44aBVT5hu7WQ4IM7Et/z8pfnQb44HJ50B88qK4s7pk8Zm32b.txt
  11. 二進制
      flash/ballclock.swf
  12. 二進制
      flash/dog.swf
  13. 二進制
      flash/hamster.swf
  14. 二進制
      flash/treefrog.swf
  15. 0 0
      games/index.html
  16. 0 7
      images/algolia_logo.svg
  17. 二進制
      images/and-gate.jpg
  18. 二進制
      images/apple-touch-icon-next.png
  19. 二進制
      images/avatar.gif
  20. 二進制
      images/bird.png
  21. 0 109
      images/cc-by-nc-nd.svg
  22. 0 111
      images/cc-by-nc-sa.svg
  23. 0 109
      images/cc-by-nc.svg
  24. 0 106
      images/cc-by-nd.svg
  25. 0 109
      images/cc-by-sa.svg
  26. 0 111
      images/cc-by.svg
  27. 0 72
      images/cc-zero.svg
  28. 二進制
      images/compute-module.jpg
  29. 二進制
      images/computer.mp4
  30. 二進制
      images/favicon-16x16-next.png
  31. 二進制
      images/favicon-32x32-next.png
  32. 二進制
      images/favicon-frog.png
  33. 二進制
      images/icon-256.png
  34. 0 23
      images/logo.svg
  35. 二進制
      images/pipe.png
  36. 0 13
      images/quote-l.svg
  37. 0 12
      images/quote-r.svg
  38. 二進制
      images/segment-1.png
  39. 二進制
      images/transistor.png
  40. 二進制
      images/wechat_channel.jpg
  41. 0 0
      index.html
  42. 0 35
      js/bird.js
  43. 0 103
      js/motion.js
  44. 0 57
      js/next-boot.js
  45. 0 1
      js/phaser.min.js
  46. 0 113
      js/schemes/muse.js
  47. 0 52
      js/trail.js
  48. 0 235
      js/utils.js
  49. 0 7
      lib/anime.min.js
  50. 0 674
      lib/fancybox/LICENSE
  51. 0 13
      lib/fancybox/README.html
  52. 0 0
      lib/fancybox/source/jquery.fancybox.css
  53. 0 0
      lib/fancybox/source/jquery.fancybox.min.css
  54. 0 10
      lib/fancybox/source/jquery.fancybox.min.js
  55. 0 5632
      lib/fancybox/source/jquery.fancybox.pack.js
  56. 0 7
      lib/font-awesome/HELP-US-OUT.txt
  57. 0 1
      lib/font-awesome/bower.json
  58. 0 3
      lib/font-awesome/css/font-awesome.css
  59. 0 2
      lib/font-awesome/css/font-awesome.css.map
  60. 0 3
      lib/font-awesome/css/font-awesome.min.css
  61. 二進制
      lib/font-awesome/fonts/fontawesome-webfont.eot
  62. 二進制
      lib/font-awesome/fonts/fontawesome-webfont.woff
  63. 二進制
      lib/font-awesome/fonts/fontawesome-webfont.woff2
  64. 0 21
      lib/pace/LICENSE
  65. 0 17
      lib/pace/README.html
  66. 0 0
      lib/pace/pace-theme-barber-shop.min.css
  67. 0 1
      lib/pace/pace-theme-big-counter.min.css
  68. 0 0
      lib/pace/pace-theme-bounce.min.css
  69. 0 0
      lib/pace/pace-theme-center-atom.min.css
  70. 0 1
      lib/pace/pace-theme-center-circle.min.css
  71. 0 1
      lib/pace/pace-theme-center-radar.min.css
  72. 0 1
      lib/pace/pace-theme-center-simple.min.css
  73. 0 1
      lib/pace/pace-theme-corner-indicator.min.css
  74. 0 1
      lib/pace/pace-theme-fill-left.min.css
  75. 0 1
      lib/pace/pace-theme-flash.min.css
  76. 0 1
      lib/pace/pace-theme-flat-top.min.css
  77. 0 0
      lib/pace/pace-theme-loading-bar.min.css
  78. 0 0
      lib/pace/pace-theme-mac-osx.min.css
  79. 0 0
      lib/pace/pace-theme-material.min.css
  80. 0 1
      lib/pace/pace-theme-minimal.min.css
  81. 0 1
      lib/pace/pace.min.js
  82. 0 2
      lib/velocity/velocity.min.js
  83. 0 1
      lib/velocity/velocity.ui.min.js
  84. 0 0
      posts/computer/index.html
  85. 0 0
      posts/dinic/index.html
  86. 0 0
      posts/fibonacci/index.html
  87. 0 0
      posts/matrix-pow/index.html
  88. 0 0
      posts/min-span-tree/index.html
  89. 0 0
      posts/plan/index.html
  90. 0 0
      posts/segment-tree/index.html
  91. 0 0
      posts/test/index.html
  92. 0 0
      posts/tree-link/index.html
  93. 0 0
      posts/union-find/index.html
  94. 0 0
      sans/index.html
  95. 0 0
      tags/graph/index.html
  96. 0 0
      tags/index.html
  97. 0 0
      tags/math/index.html
  98. 0 0
      tags/other/index.html
  99. 0 0
      tags/struct/index.html

File diff suppressed because it is too large
+ 0 - 0
404.html


File diff suppressed because it is too large
+ 0 - 0
archives/2020/03/index.html


File diff suppressed because it is too large
+ 0 - 0
archives/2020/index.html


File diff suppressed because it is too large
+ 0 - 0
archives/index.html


File diff suppressed because it is too large
+ 0 - 0
core/core_data/c2NodG9ubg==.html


+ 162 - 1
core/css/main.css

@@ -1 +1,162 @@
-#status,.ui{padding:8px}#panels,#status{position:absolute}#message p,.ui h2{margin-bottom:20px}body,html{overflow:hidden;font-family:Helvetica,Arial,sans-serif;color:#fff;font-size:11px;background:#010c12}.no-canvas{color:#999;font-size:24px;text-align:center;margin-top:150px}canvas{border:6px solid #333;cursor:crosshair;z-index:1}#background{border:none;z-index:0}.ui{font-family:Arial,Helvetica,sans-serif;font-size:10px;color:#999;text-align:left;background-color:rgba(0,0,0,.4);float:left}#status{width:884px;height:15px;display:none;z-index:2}#status span{color:#bbb;font-weight:700;margin-right:5px}#status .fps{float:right}#panels{width:100%;z-index:3}#message{padding:150px 300px 0 60px;width:100%;height:100%;box-sizing:border-box;font-family:Montserrat,Helvetica,Arial,sans-serif;font-size:20px;text-transform:uppercase;line-height:1.4}#message .start-button{display:inline-block;padding:10px 20px;font-family:inherit;border-radius:2px;margin-top:20px;background-color:#eee;color:#222;font-size:1.6em;text-transform:inherit;transition:all .18s linear;outline:0;border:0;cursor:pointer;-webkit-appearance:none;-webkit-tap-highlight-color:transparent}#message .start-button:hover{background-color:#fff}#message a{color:#fff;text-decoration:none}#message a:hover{text-decoration:underline}.ui h2{color:#eee}.ui p em{color:#f5f5f5}.ui ol{margin:10px 0;padding-left:1em}.ui ol li{margin:0 0 2px;list-style:outside}.ui a.external{outline:0;font-family:sans-serif;font-size:1em;font-weight:700;text-decoration:none;color:#bbb;display:inline;padding:0}.ui a.external:hover{color:#fff}@media screen and (max-width:600px){#message{padding:60px 40px}}
+
+
+/*********************************************
+ * GLOBAL
+ *********************************************/
+
+body, html {
+	overflow: hidden;
+	font-family: Helvetica, Arial, sans-serif;
+	color: #fff;
+	font-size: 11px;
+	background: #010c12;
+}
+
+.no-canvas {
+	color: #999999;
+	font-size: 24px;
+	text-align: center;
+	margin-top: 150px;
+}
+
+
+/*********************************************
+ * EXPERIMENT STYLES
+ *********************************************/
+
+canvas {
+	border: 6px #333333 solid;
+	cursor: crosshair;
+	z-index: 1;
+}
+
+#background {
+	border: none;
+	z-index: 0;
+}
+
+.ui {
+	font-family: Arial, Helvetica, sans-serif;
+	font-size: 10px;
+	color: #999999;
+	text-align: left;
+	padding: 8px;
+	background-color: rgba(0,0,0,0.4);
+	float: left;
+}
+
+#status {
+	width: 884px;
+	height: 15px;
+	padding: 8px;
+	display: none;
+	position: absolute;
+	z-index: 2;
+}
+
+#status span {
+	color: #bbbbbb;
+	font-weight: bold;
+	margin-right: 5px;
+}
+
+#status .fps {
+	float: right;
+}
+
+#panels {
+	width: 100%;
+	position: absolute;
+	z-index: 3;
+}
+
+#message {
+	padding: 150px 300px 0 60px;
+	width: 100%;
+	height: 100%;
+	box-sizing: border-box;
+
+	font-family: "Montserrat", Helvetica, Arial, sans-serif;
+	font-size: 20px;
+	text-transform: uppercase;
+	line-height: 1.4;
+}
+
+#message .start-button {
+	display: inline-block;
+	padding: 10px 20px;
+	font-size: 2em;
+	font-family: inherit;
+	border-radius: 2px;
+	margin-top: 20px;
+	background-color: #eee;
+	color: #222;
+	font-size: 1.6em;
+	text-transform: inherit;
+	transition: all .18s linear;
+
+	outline: 0;
+	border: 0;
+	cursor: pointer;
+
+	-webkit-appearance: none;
+	-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+}
+
+#message .start-button:hover {
+	background-color: #fff;
+}
+
+#message p {
+	margin-bottom: 20px;
+}
+
+#message a {
+	color: #fff;
+	text-decoration: none;
+}
+
+#message a:hover {
+	text-decoration: underline;
+}
+
+.ui h2 {
+	margin-bottom: 20px;
+	color: #eeeeee;
+}
+
+.ui p em {
+	color: #f5f5f5;
+}
+
+.ui ol {
+	margin: 10px 0;
+	padding-left: 1em;
+}
+
+.ui ol li {
+	margin: 0 0 2px 0;
+	list-style: unset;
+}
+
+.ui a.external {
+	outline: none;
+	font-family: sans-serif;
+	font-size: 1em;
+	font-weight: bold;
+	text-decoration: none;
+	color: #bbbbbb;
+	display: inline;
+	padding: 0;
+}
+
+.ui a.external:hover {
+	color: #ffffff;
+}
+
+
+@media screen and (max-width: 600px) {
+	#message {
+		padding: 60px 40px;
+	}
+}

+ 18 - 1
core/css/reset.css

@@ -1 +1,18 @@
-html,legend{color:#000}html{background:#222}a{cursor:pointer}blockquote,body,code,dd,div,dl,dt,fieldset,form,h1,h2,h3,h4,h5,h6,html,input,legend,li,ol,p,pre,td,textarea,th,ul{margin:0;padding:0}table{border-collapse:collapse;border-spacing:0}fieldset,img{border:0}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:400}li{list-style:none}caption,th{text-align:left}q:after,q:before{content:''}abbr,acronym{border:0;font-variant:normal}sup{vertical-align:text-top}sub{vertical-align:text-bottom}input,select,textarea{font-family:inherit;font-size:inherit;font-weight:inherit;outline-style:none;outline-width:0}a:focus,h1,h2,h3,h4,h5,h6,object{-moz-outline-style:none;border:0}strong{font-weight:700}
+html{color:#000;background:#222222;}
+a{cursor:pointer;}
+html,body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0;}
+table{border-collapse:collapse;border-spacing:0;}
+fieldset,img{border:0;}
+address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}
+li{list-style:none;}
+caption,th{text-align:left;}
+/* h1,h2,h3,h4,h5,h6{font-size:100%;} */
+q:before,q:after{content:'';}
+abbr,acronym {border:0;font-variant:normal;}
+sup {vertical-align:text-top;}
+sub {vertical-align:text-bottom;}
+input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit;outline-style:none;outline-width:0pt;}
+legend{color:#000;}
+a:focus,object,h1,h2,h3,h4,h5,h6{-moz-outline-style: none; border:0px;}
+/*input[type="Submit"]{cursor:pointer;}*/
+strong {font-weight: bold;}

+ 49 - 1
core/index.html

@@ -1 +1,49 @@
-<!DOCTYPE html><html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta name="description" content="Use your shield to defend the Core from the evil red organisms!"><meta name="author" content="Hakim El Hattab"><meta http-equiv="X-UA-Compatible" content="chrome=1"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="black"><meta name="viewport" content="width=450"><title>core</title><link href="css/reset.css" rel="stylesheet" media="screen"><link href="css/main.css" rel="stylesheet" media="screen"><link href="css/css" rel="stylesheet"></head><body data-gr-c-s-loaded="true" class="vsc-initialized"><div id="status" class="ui" style="left:-49px;top:-12px;display:block">Score: <span>5457</span> Time: <span>59.98s</span></div><div id="panels" style="left:-49px;top:-12px;width:1000px;height:650px;display:block"><div id="message" class="ui"><h2 id="title">Core</h2><p> Protect the core from incoming red projectiles. Let green ones through. <em>Press &amp; hold SPACE</em> for a temporary shield.</p> <button id="startButton" class="start-button">Start game</button></div></div><canvas id="world" width="1000" height="650" style="position:absolute;left:-55px;top:-18px"><p class="no-canvas"> You need a <a href="https://www.google.com/chrome">modern browser</a> to view this.</p></canvas><canvas id="background" width="1000" height="650" style="position:absolute;left:-49px;top:-12px"></canvas><script src="js/timbre.js"></script><script src="js/core-audio.js"></script><script src="js/core.js"></script></body></html>
+<!DOCTYPE html>
+<!-- saved from url=(0026)https://lab.hakim.se/core/ -->
+<html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+		
+
+		<meta name="description" content="Use your shield to defend the Core from the evil red organisms!">
+		<meta name="author" content="Hakim El Hattab">
+
+		<meta http-equiv="X-UA-Compatible" content="chrome=1">
+
+		<meta name="apple-mobile-web-app-capable" content="yes">
+		<meta name="apple-mobile-web-app-status-bar-style" content="black">
+		<meta name="viewport" content="width = 450">
+
+        <title>core</title>
+
+		<link href="css/reset.css" rel="stylesheet" media="screen">
+		<link href="css/main.css" rel="stylesheet" media="screen">
+
+		<link href="css/css" rel="stylesheet">
+
+    </head>
+    <body data-gr-c-s-loaded="true" class="vsc-initialized">
+		<div id="status" class="ui" style="left: -49px; top: -12px; display: block;">Score: <span>5457</span> Time: <span>59.98s</span></div>
+			<div id="panels" style="left: -49px; top: -12px; width: 1000px; height: 650px; display: block;">
+				<div id="message" class="ui">
+					<h2 id="title">Core</h2>
+					<p>
+						Protect the core from incoming red projectiles. Let green ones through.
+						<em>Press &amp; hold SPACE</em> for a temporary shield.
+					</p>
+					<button id="startButton" class="start-button">Start game</button>
+				</div>
+		</div>
+
+		<canvas id="world" width="1000" height="650" style="position: absolute; left: -55px; top: -18px;">
+			<p class="no-canvas">
+				You need a <a href="https://www.google.com/chrome">modern browser</a> to view this.
+			</p>
+		</canvas>
+		<canvas id="background" width="1000" height="650" style="position: absolute; left: -49px; top: -12px;"></canvas>
+
+		</script><script src="js/timbre.js"></script>
+		<script src="js/core-audio.js"></script>
+		<script src="js/core.js"></script>
+
+		<!-- Third party tracking and sharing code below -->
+    
+</body></html>

File diff suppressed because it is too large
+ 0 - 0
css/main.css


+ 0 - 9
data/3749t1li44aBVT5hu7WQ4IM7Et/z8pfnQb44HJ50B88qK4s7pk8Zm32b.txt

@@ -1,9 +0,0 @@
-music163 NEtEa2E483-d
-
-aliyun.com Al4yD83-SC700d
-
-bilibili B6Dje-hy48-3h
-
-mail wh-28DSH0sd-saef
-
-xmind XMc38-dsef6k

二進制
flash/ballclock.swf


二進制
flash/dog.swf


二進制
flash/hamster.swf


二進制
flash/treefrog.swf


File diff suppressed because it is too large
+ 0 - 0
games/index.html


File diff suppressed because it is too large
+ 0 - 7
images/algolia_logo.svg


二進制
images/and-gate.jpg


二進制
images/apple-touch-icon-next.png


二進制
images/avatar.gif


二進制
images/bird.png


File diff suppressed because it is too large
+ 0 - 109
images/cc-by-nc-nd.svg


File diff suppressed because it is too large
+ 0 - 111
images/cc-by-nc-sa.svg


File diff suppressed because it is too large
+ 0 - 109
images/cc-by-nc.svg


File diff suppressed because it is too large
+ 0 - 106
images/cc-by-nd.svg


File diff suppressed because it is too large
+ 0 - 109
images/cc-by-sa.svg


File diff suppressed because it is too large
+ 0 - 111
images/cc-by.svg


+ 0 - 72
images/cc-zero.svg

@@ -1,72 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 width="80px" height="15px" viewBox="0 0 80 15" enable-background="new 0 0 80 15" xml:space="preserve">
-<g>
-	<g>
-		<rect fill="#FFFFFF" width="80" height="15"/>
-	</g>
-	<path d="M22.797,2C23.8,3.595,24.39,5.477,24.39,7.501c0,2.023-0.589,3.904-1.592,5.499H80V2H22.797z"/>
-	<g>
-		<path id="text2809_5_" d="M12.42,2.031c-3.137,0-3.926,2.959-3.926,5.469s0.787,5.469,3.926,5.469
-			c3.137,0,3.924-2.959,3.924-5.469S15.557,2.031,12.42,2.031z M12.42,4.094c0.127,0,0.242,0.02,0.352,0.047
-			c0.227,0.193,0.336,0.463,0.121,0.838l-2.09,3.838C10.738,8.33,10.729,7.855,10.729,7.5C10.729,6.395,10.807,4.094,12.42,4.094z
-			 M13.982,5.863c0.111,0.588,0.127,1.203,0.127,1.637c0,1.105-0.076,3.406-1.689,3.406c-0.127,0-0.244-0.012-0.354-0.039
-			c-0.02-0.006-0.039-0.014-0.061-0.021c-0.031-0.01-0.066-0.02-0.098-0.031c-0.359-0.154-0.586-0.43-0.26-0.92L13.982,5.863z"/>
-		<path d="M21.229,3.848c-0.465-1.152-1.143-2.172-2.035-3.066C18.907,0.496,18.607,0.241,18.302,0h-3.708
-			c1.248,0.348,2.367,1.009,3.354,1.998c0.736,0.736,1.299,1.576,1.684,2.516s0.578,1.936,0.578,2.986
-			c0,2.184-0.746,3.994-2.227,5.441c-0.771,0.746-1.635,1.32-2.596,1.717c-0.344,0.143-0.694,0.251-1.046,0.342h3.892
-			c0.336-0.257,0.664-0.529,0.972-0.834c0.895-0.871,1.57-1.871,2.021-3c0.465-1.143,0.693-2.363,0.693-3.666
-			C21.92,6.211,21.691,4.99,21.229,3.848z M6.957,12.975c-0.746-0.746-1.322-1.59-1.729-2.527c-0.396-0.951-0.6-1.93-0.6-2.947
-			c0-1.029,0.203-2.016,0.6-2.955c0.406-0.949,0.982-1.803,1.729-2.561C7.916,1.004,9.021,0.346,10.268,0H6.58
-			C6.289,0.235,6.004,0.484,5.732,0.762C4.816,1.676,4.117,2.721,3.631,3.887C3.156,5.041,2.92,6.244,2.92,7.5
-			c0,1.268,0.236,2.471,0.711,3.613s1.164,2.17,2.068,3.086C5.994,14.49,6.305,14.752,6.623,15h3.88
-			c-0.345-0.088-0.686-0.191-1.019-0.328C8.547,14.277,7.705,13.711,6.957,12.975z"/>
-	</g>
-	<g>
-		<path d="M80,0v15H0V0H80 M79.25,0.75H0.75v13.5h78.5V0.75L79.25,0.75z"/>
-	</g>
-	<g>
-		<path fill="#FFFFFF" d="M30.514,8.106c-0.279,0.233-0.678,0.35-1.197,0.35h-0.993v1.717h-0.991V5.398h2.05
-			c0.473,0,0.849,0.123,1.13,0.369s0.422,0.628,0.422,1.144C30.934,7.475,30.794,7.873,30.514,8.106z M29.753,6.387
-			c-0.127-0.106-0.304-0.159-0.531-0.159h-0.898v1.406h0.898c0.228,0,0.404-0.058,0.531-0.172c0.126-0.114,0.189-0.296,0.189-0.544
-			C29.942,6.669,29.879,6.492,29.753,6.387z"/>
-		<path fill="#FFFFFF" d="M31.733,5.398h1.015v2.933c0,0.328,0.038,0.567,0.116,0.718c0.12,0.268,0.383,0.401,0.787,0.401
-			c0.402,0,0.664-0.134,0.784-0.401c0.077-0.15,0.116-0.39,0.116-0.718V5.398h1.014v2.935c0,0.508-0.079,0.902-0.236,1.186
-			c-0.293,0.519-0.853,0.777-1.678,0.777c-0.826,0-1.387-0.259-1.682-0.777c-0.157-0.283-0.236-0.678-0.236-1.186V5.398z"/>
-		<path fill="#FFFFFF" d="M40.085,5.907c0.146,0.203,0.219,0.446,0.219,0.729c0,0.292-0.074,0.526-0.221,0.703
-			c-0.083,0.1-0.204,0.19-0.364,0.272c0.243,0.088,0.427,0.229,0.551,0.421s0.187,0.425,0.187,0.699
-			c0,0.283-0.071,0.537-0.213,0.761c-0.09,0.149-0.203,0.274-0.338,0.376c-0.152,0.117-0.332,0.196-0.539,0.24
-			c-0.208,0.043-0.433,0.064-0.675,0.064H36.54V5.398h2.308C39.43,5.407,39.842,5.577,40.085,5.907z M37.492,6.228V7.28h1.16
-			c0.208,0,0.376-0.039,0.505-0.118c0.13-0.079,0.194-0.219,0.194-0.419c0-0.223-0.086-0.369-0.257-0.44
-			c-0.147-0.05-0.335-0.075-0.563-0.075H37.492z M37.492,8.07v1.273h1.159c0.207,0,0.368-0.028,0.483-0.084
-			c0.209-0.104,0.313-0.303,0.313-0.597c0-0.248-0.101-0.419-0.304-0.512C39.031,8.1,38.872,8.073,38.667,8.07H37.492z"/>
-		<path fill="#FFFFFF" d="M41.313,5.398h0.998v3.916h2.384v0.858h-3.382V5.398z"/>
-		<path fill="#FFFFFF" d="M46.275,10.173h-0.991V5.398h0.991V10.173z"/>
-		<path fill="#FFFFFF" d="M47.665,5.897c0.385-0.393,0.874-0.59,1.468-0.59c0.795,0,1.376,0.264,1.743,0.791
-			c0.203,0.296,0.312,0.593,0.327,0.891h-0.998c-0.063-0.229-0.145-0.402-0.244-0.519c-0.178-0.207-0.441-0.311-0.79-0.311
-			c-0.355,0-0.636,0.146-0.841,0.438s-0.308,0.707-0.308,1.242s0.108,0.937,0.324,1.203c0.217,0.267,0.492,0.4,0.826,0.4
-			c0.342,0,0.603-0.114,0.782-0.344c0.1-0.123,0.182-0.308,0.247-0.554h0.991c-0.086,0.521-0.304,0.943-0.655,1.27
-			s-0.802,0.489-1.351,0.489c-0.68,0-1.214-0.221-1.603-0.661c-0.389-0.442-0.583-1.049-0.583-1.82
-			C47.002,6.991,47.224,6.349,47.665,5.897z"/>
-		<path fill="#FFFFFF" d="M54.797,5.502c0.335,0.11,0.606,0.312,0.813,0.606c0.167,0.237,0.28,0.494,0.341,0.771
-			s0.091,0.54,0.091,0.79c0,0.635-0.128,1.173-0.383,1.613c-0.346,0.594-0.88,0.891-1.602,0.891h-2.059V5.398h2.059
-			C54.354,5.403,54.601,5.438,54.797,5.502z M52.968,6.228v3.116h0.922c0.471,0,0.8-0.232,0.985-0.696
-			c0.102-0.255,0.152-0.559,0.152-0.91c0-0.486-0.076-0.859-0.229-1.119s-0.455-0.391-0.909-0.391H52.968z"/>
-		<path fill="#FFFFFF" d="M60.466,9.749c-0.36,0.371-0.882,0.557-1.564,0.557s-1.204-0.186-1.564-0.557
-			c-0.483-0.456-0.726-1.112-0.726-1.97c0-0.875,0.242-1.531,0.726-1.97c0.36-0.371,0.882-0.557,1.564-0.557
-			s1.204,0.186,1.564,0.557c0.481,0.438,0.722,1.095,0.722,1.97C61.188,8.637,60.947,9.293,60.466,9.749z M59.842,9.023
-			c0.232-0.292,0.349-0.706,0.349-1.244c0-0.535-0.116-0.949-0.349-1.242c-0.231-0.293-0.545-0.438-0.94-0.438
-			s-0.711,0.146-0.946,0.437c-0.235,0.292-0.353,0.706-0.353,1.244s0.117,0.952,0.353,1.244c0.235,0.291,0.551,0.437,0.946,0.437
-			S59.61,9.314,59.842,9.023z"/>
-		<path fill="#FFFFFF" d="M65.116,5.398h1.436v4.774h-0.929V6.943c0-0.093,0.001-0.223,0.003-0.39
-			c0.002-0.168,0.003-0.297,0.003-0.388l-0.904,4.007h-0.97l-0.898-4.007c0,0.091,0.001,0.22,0.003,0.388
-			c0.003,0.167,0.004,0.297,0.004,0.39v3.229h-0.93V5.398h1.451l0.869,3.754L65.116,5.398z"/>
-		<path fill="#FFFFFF" d="M68.84,5.398h1.129l1.689,4.774h-1.082l-0.314-0.981h-1.759l-0.323,0.981h-1.044L68.84,5.398z
-			 M68.774,8.369h1.223L69.395,6.49L68.774,8.369z"/>
-		<path fill="#FFFFFF" d="M73.175,10.173h-0.991V5.398h0.991V10.173z"/>
-		<path fill="#FFFFFF" d="M74.093,5.398h1.046l1.895,3.329V5.398h0.93v4.774h-0.997l-1.943-3.388v3.388h-0.93V5.398z"/>
-	</g>
-</g>
-</svg>

二進制
images/compute-module.jpg


二進制
images/computer.mp4


二進制
images/favicon-16x16-next.png


二進制
images/favicon-32x32-next.png


二進制
images/favicon-frog.png


二進制
images/icon-256.png


+ 0 - 23
images/logo.svg

@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xml:space="preserve"
-   enable-background="new 0 0 512 512"
-   viewBox="0 0 512 512"
-   height="512px"
-   width="512px"
-   y="0px"
-   x="0px"
-   id="NexT"
-   version="1.1"><metadata
-     id="metadata3390"><rdf:RDF><cc:Work
-         rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
-     id="defs3388" /><path
-     style="fill:#222222;fill-opacity:1"
-     id="path3384"
-     d="M 256.4,25.8 56.4,141.3 56,371.5 255.6,486.2 455.6,370.7 456,140.5 Z m 92.6,328.8 -18.4,10.7 -18.6,-11 0,0 -112,-142.3 0,142.6 -18.4,10.7 -18.6,-11 0,-197 18.5,-10.6 18.5,10.8 0,0 112,144.5 0,-144.6 18.5,-10.6 18.5,10.8 z" /></svg>

二進制
images/pipe.png


+ 0 - 13
images/quote-l.svg

@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!-- License Agreement at http://iconmonstr.com/license/ -->
-
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
-<path id="quote-5-icon" d="M55.178,332.895c-22.22-79.435,26.876-198.974,151.004-223.472l16.886,36.498
-	c-38.022,14.331-63.218,47.064-66.943,81.466c42.757,6.73,75.459,43.737,75.459,88.385
-	C231.583,415.014,85.181,440.162,55.178,332.895z M285.595,332.895c-22.22-79.435,26.876-198.974,151.004-223.472l16.886,36.498
-	c-38.022,14.331-63.218,47.064-66.943,81.466c42.757,6.73,75.459,43.737,75.459,88.385C462,415.014,315.598,440.162,285.595,332.895
-	z"/>
-</svg>

+ 0 - 12
images/quote-r.svg

@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!-- License Agreement at http://iconmonstr.com/license/ -->
-
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
-<path id="quote-6-icon" d="M456.822,179.107c22.219,79.434-26.877,198.973-151.004,223.471l-16.887-36.498
-	c38.023-14.33,63.219-47.064,66.943-81.465c-42.756-6.73-75.459-43.739-75.459-88.385
-	C280.416,96.986,426.818,71.837,456.822,179.107z M226.405,179.107c22.22,79.434-26.876,198.973-151.004,223.471L58.515,366.08
-	c38.022-14.33,63.218-47.064,66.943-81.465C82.702,277.885,50,240.876,50,196.23C50,96.986,196.402,71.837,226.405,179.107z"/>
-</svg>

二進制
images/segment-1.png


二進制
images/transistor.png


二進制
images/wechat_channel.jpg


File diff suppressed because it is too large
+ 0 - 0
index.html


+ 0 - 35
js/bird.js

@@ -1,35 +0,0 @@
-'use strict';
-var game = new Phaser.Game(400, 490, Phaser.AUTO, 'game_div'), game_state = {
-        main: function () {
-        }
-    };
-game_state.main.prototype = {
-    preload: function () {
-        this.game.stage.backgroundColor = '#71c5cf', this.game.load.image('bird', '/../images/bird.png'), this.game.load.image('pipe', '/../images/pipe.png');
-    },
-    create: function () {
-        this.bird = this.game.add.sprite(100, 245, 'bird'), this.bird.body.gravity.y = 1000, this.game.input.keyboard.addKey(Phaser.Keyboard.SPACEBAR).onDown.add(this.jump, this), this.pipes = game.add.group(), this.pipes.createMultiple(20, 'pipe'), this.timer = this.game.time.events.loop(1500, this.add_row_of_pipes, this), this.score = 0;
-        this.label_score = this.game.add.text(20, 20, '0', {
-            font: '30px Arial',
-            fill: '#ffffff'
-        });
-    },
-    update: function () {
-        0 == this.bird.inWorld && this.restart_game(), this.game.physics.overlap(this.bird, this.pipes, this.restart_game, null, this);
-    },
-    jump: function () {
-        this.bird.body.velocity.y = -350;
-    },
-    restart_game: function () {
-        this.game.time.events.remove(this.timer), this.game.state.start('main');
-    },
-    add_one_pipe: function (t, e) {
-        var i = this.pipes.getFirstDead();
-        i.reset(t, e), i.body.velocity.x = -200, i.outOfBoundsKill = !0;
-    },
-    add_row_of_pipes: function () {
-        for (var t = Math.floor(5 * Math.random()) + 1, e = 0; e < 8; e++)
-            e != t && e != t + 1 && this.add_one_pipe(400, 60 * e + 10);
-        this.score += 1, this.label_score.content = this.score;
-    }
-}, game.state.add('main', game_state.main), game.state.start('main');

+ 0 - 103
js/motion.js

@@ -1,103 +0,0 @@
-'use strict';
-window.$ && window.$.Velocity && (window.Velocity = window.$.Velocity), NexT.motion = {}, NexT.motion.integrator = {
-    queue: [],
-    cursor: -1,
-    init: function () {
-        return this.queue = [], this.cursor = -1, this;
-    },
-    add: function (t) {
-        return this.queue.push(t), this;
-    },
-    next: function () {
-        this.cursor++;
-        var t = this.queue[this.cursor];
-        'function' == typeof t && t(NexT.motion.integrator);
-    },
-    bootstrap: function () {
-        this.next();
-    }
-}, NexT.motion.middleWares = {
-    logo: function (t) {
-        var e = [], o = document.querySelector('.brand'), n = document.querySelector('.custom-logo-image'), i = document.querySelector('.site-title'), r = document.querySelector('.site-subtitle'), c = document.querySelector('.logo-line-before i'), u = document.querySelector('.logo-line-after i');
-        function s(t, e) {
-            return {
-                e: t,
-                p: { translateX: e },
-                o: {
-                    duration: 500,
-                    sequenceQueue: !1
-                }
-            };
-        }
-        function l() {
-            e.push({
-                e: n,
-                p: {
-                    opacity: 1,
-                    top: 0
-                },
-                o: { duration: 200 }
-            });
-        }
-        o && e.push({
-            e: o,
-            p: { opacity: 1 },
-            o: { duration: 200 }
-        }), 'Mist' === CONFIG.scheme && c && u && e.push(s(c, '100%'), s(u, '-100%')), 'Muse' === CONFIG.scheme && n && l(), i && e.push({
-            e: i,
-            p: {
-                opacity: 1,
-                top: 0
-            },
-            o: { duration: 200 }
-        }), r && e.push({
-            e: r,
-            p: {
-                opacity: 1,
-                top: 0
-            },
-            o: { duration: 200 }
-        }), 'Pisces' !== CONFIG.scheme && 'Gemini' !== CONFIG.scheme || !n || l(), 0 < e.length ? (e[e.length - 1].o.complete = function () {
-            t.next();
-        }, Velocity.RunSequence(e)) : t.next(), CONFIG.motion.async && t.next();
-    },
-    menu: function (t) {
-        Velocity(document.querySelectorAll('.menu-item'), 'transition.slideDownIn', {
-            display: null,
-            duration: 200,
-            complete: function () {
-                t.next();
-            }
-        }), CONFIG.motion.async && t.next();
-    },
-    subMenu: function (t) {
-        var e = document.querySelectorAll('.sub-menu .menu-item');
-        0 < e.length && e.forEach(function (t) {
-            t.style.opacity = 1;
-        }), t.next();
-    },
-    postList: function (t) {
-        var e = document.querySelectorAll('.post-block, .pagination, .comments'), o = CONFIG.motion.transition.post_block, n = document.querySelectorAll('.post-header'), i = CONFIG.motion.transition.post_header, r = document.querySelectorAll('.post-body'), c = CONFIG.motion.transition.post_body, u = document.querySelectorAll('.collection-header'), s = CONFIG.motion.transition.coll_header;
-        if (0 < e.length) {
-            var l = window.postMotionOptions || {
-                stagger: 100,
-                drag: !0,
-                complete: function () {
-                    t.next();
-                }
-            };
-            CONFIG.motion.transition.post_block && Velocity(e, 'transition.' + o, l), CONFIG.motion.transition.post_header && Velocity(n, 'transition.' + i, l), CONFIG.motion.transition.post_body && Velocity(r, 'transition.' + c, l), CONFIG.motion.transition.coll_header && Velocity(u, 'transition.' + s, l);
-        }
-        'Pisces' !== CONFIG.scheme && 'Gemini' !== CONFIG.scheme || t.next();
-    },
-    sidebar: function (t) {
-        var e = document.querySelector('.sidebar-inner'), o = CONFIG.motion.transition.sidebar;
-        !o || 'Pisces' !== CONFIG.scheme && 'Gemini' !== CONFIG.scheme || Velocity(e, 'transition.' + o, {
-            display: null,
-            duration: 200,
-            complete: function () {
-                e.style.transform = 'initial';
-            }
-        }), t.next();
-    }
-};

+ 0 - 57
js/next-boot.js

@@ -1,57 +0,0 @@
-'use strict';
-function _toConsumableArray(e) {
-    if (Array.isArray(e)) {
-        for (var t = 0, i = Array(e.length); t < e.length; t++)
-            i[t] = e[t];
-        return i;
-    }
-    return Array.from(e);
-}
-NexT.boot = {}, NexT.boot.registerEvents = function () {
-    NexT.utils.registerScrollPercent(), NexT.utils.registerCanIUseTag(), document.querySelector('.site-nav-toggle .toggle').addEventListener('click', function () {
-        event.currentTarget.classList.toggle('toggle-close');
-        var e = document.querySelector('.site-nav'), t = e.classList.contains('site-nav-on') ? 'slideUp' : 'slideDown';
-        'function' == typeof Velocity ? Velocity(e, t, {
-            duration: 200,
-            complete: function () {
-                e.classList.toggle('site-nav-on');
-            }
-        }) : e.classList.toggle('site-nav-on');
-    });
-    document.querySelectorAll('.sidebar-nav li').forEach(function (e, s) {
-        e.addEventListener('click', function (e) {
-            var t = e.currentTarget, i = 'sidebar-nav-active', o = 'sidebar-panel-active';
-            if (!t.classList.contains(i)) {
-                var n = document.querySelectorAll('.sidebar-panel'), a = n[s], r = n[1 - s];
-                window.anime({
-                    targets: r,
-                    duration: 200,
-                    easing: 'linear',
-                    opacity: 0,
-                    complete: function () {
-                        r.classList.remove(o), a.style.opacity = 0, a.classList.add(o), window.anime({
-                            targets: a,
-                            duration: 200,
-                            easing: 'linear',
-                            opacity: 1
-                        });
-                    }
-                }), [].concat(_toConsumableArray(t.parentNode.children)).forEach(function (e) {
-                    e.classList.remove(i);
-                }), t.classList.add(i);
-            }
-        });
-    }), window.addEventListener('resize', NexT.utils.initSidebarDimension), window.addEventListener('hashchange', function () {
-        var e = location.hash;
-        if ('' !== e && !e.match(/%\S{2}/)) {
-            var t = document.querySelector('.tabs ul.nav-tabs li a[href="' + e + '"]');
-            t && t.click();
-        }
-    });
-}, NexT.boot.refresh = function () {
-    CONFIG.fancybox && NexT.utils.wrapImageWithFancyBox(), CONFIG.mediumzoom && window.mediumZoom('.post-body :not(a) > img, .post-body > img'), CONFIG.lazyload && window.lozad('.post-body img').observe(), CONFIG.pangu && window.pangu.spacingPage(), CONFIG.exturl && NexT.utils.registerExtURL(), CONFIG.copycode.enable && NexT.utils.registerCopyCode(), NexT.utils.registerTabsTag(), NexT.utils.registerActiveMenuItem(), NexT.utils.registerLangSelect(), NexT.utils.registerSidebarTOC(), NexT.utils.wrapTableWithBox(), NexT.utils.registerVideoIframe();
-}, NexT.boot.motion = function () {
-    CONFIG.motion.enable && NexT.motion.integrator.add(NexT.motion.middleWares.logo).add(NexT.motion.middleWares.menu).add(NexT.motion.middleWares.postList).add(NexT.motion.middleWares.sidebar).bootstrap(), NexT.utils.updateSidebarPosition();
-}, window.addEventListener('DOMContentLoaded', function () {
-    NexT.boot.registerEvents(), NexT.boot.refresh(), NexT.boot.motion();
-});

File diff suppressed because it is too large
+ 0 - 1
js/phaser.min.js


+ 0 - 113
js/schemes/muse.js

@@ -1,113 +0,0 @@
-/* global NexT, CONFIG, Velocity */
-
-window.addEventListener('DOMContentLoaded', () => {
-
-  var isRight = CONFIG.sidebar.position === 'right';
-  var SIDEBAR_WIDTH = CONFIG.sidebar.width || 320;
-  var SIDEBAR_DISPLAY_DURATION = 200;
-  var mousePos = {};
-
-  var sidebarToggleLines = {
-    lines: document.querySelector('.sidebar-toggle'),
-    init : function() {
-      this.lines.classList.remove('toggle-arrow', 'toggle-close');
-    },
-    arrow: function() {
-      this.lines.classList.remove('toggle-close');
-      this.lines.classList.add('toggle-arrow');
-    },
-    close: function() {
-      this.lines.classList.remove('toggle-arrow');
-      this.lines.classList.add('toggle-close');
-    }
-  };
-
-  var sidebarToggleMotion = {
-    sidebarEl       : document.querySelector('.sidebar'),
-    isSidebarVisible: false,
-    init            : function() {
-      sidebarToggleLines.init();
-
-      window.addEventListener('mousedown', this.mousedownHandler.bind(this));
-      window.addEventListener('mouseup', this.mouseupHandler.bind(this));
-      document.querySelector('#sidebar-dimmer').addEventListener('click', this.clickHandler.bind(this));
-      document.querySelector('.sidebar-toggle').addEventListener('click', this.clickHandler.bind(this));
-      document.querySelector('.sidebar-toggle').addEventListener('mouseenter', this.mouseEnterHandler.bind(this));
-      document.querySelector('.sidebar-toggle').addEventListener('mouseleave', this.mouseLeaveHandler.bind(this));
-      window.addEventListener('sidebar:show', this.showSidebar.bind(this));
-      window.addEventListener('sidebar:hide', this.hideSidebar.bind(this));
-    },
-    mousedownHandler: function(event) {
-      mousePos.X = event.pageX;
-      mousePos.Y = event.pageY;
-    },
-    mouseupHandler: function(event) {
-      var deltaX = event.pageX - mousePos.X;
-      var deltaY = event.pageY - mousePos.Y;
-      var clickingBlankPart = Math.sqrt((deltaX * deltaX) + (deltaY * deltaY)) < 20 && event.target.matches('.main');
-      if (this.isSidebarVisible && (clickingBlankPart || event.target.matches('img.medium-zoom-image, .fancybox img'))) {
-        this.hideSidebar();
-      }
-    },
-    clickHandler: function() {
-      this.isSidebarVisible ? this.hideSidebar() : this.showSidebar();
-    },
-    mouseEnterHandler: function() {
-      if (!this.isSidebarVisible) {
-        sidebarToggleLines.arrow();
-      }
-    },
-    mouseLeaveHandler: function() {
-      if (!this.isSidebarVisible) {
-        sidebarToggleLines.init();
-      }
-    },
-    showSidebar: function() {
-      this.isSidebarVisible = true;
-      this.sidebarEl.classList.add('sidebar-active');
-      if (typeof Velocity === 'function') {
-        Velocity(document.querySelectorAll('.sidebar .motion-element'), isRight ? 'transition.slideRightIn' : 'transition.slideLeftIn', {
-          stagger: 50,
-          drag   : true
-        });
-      }
-
-      sidebarToggleLines.close();
-      NexT.utils.isDesktop() && window.anime(Object.assign({
-        targets : document.body,
-        duration: SIDEBAR_DISPLAY_DURATION,
-        easing  : 'linear'
-      }, isRight ? {
-        'padding-right': SIDEBAR_WIDTH
-      } : {
-        'padding-left': SIDEBAR_WIDTH
-      }));
-    },
-    hideSidebar: function() {
-      this.isSidebarVisible = false;
-      this.sidebarEl.classList.remove('sidebar-active');
-
-      sidebarToggleLines.init();
-      NexT.utils.isDesktop() && window.anime(Object.assign({
-        targets : document.body,
-        duration: SIDEBAR_DISPLAY_DURATION,
-        easing  : 'linear'
-      }, isRight ? {
-        'padding-right': 0
-      } : {
-        'padding-left': 0
-      }));
-    }
-  };
-  sidebarToggleMotion.init();
-
-  function updateFooterPosition() {
-    var footer = document.querySelector('.footer');
-    var containerHeight = document.querySelector('.header').offsetHeight + document.querySelector('.main').offsetHeight + footer.offsetHeight;
-    footer.classList.toggle('footer-fixed', containerHeight <= window.innerHeight);
-  }
-
-  updateFooterPosition();
-  window.addEventListener('resize', updateFooterPosition);
-  window.addEventListener('scroll', updateFooterPosition);
-});

+ 0 - 52
js/trail.js

@@ -1,52 +0,0 @@
-'use strict';
-var canvas, context, particles, SCREEN_WIDTH = window.innerWidth, SCREEN_HEIGHT = window.innerHeight, RADIUS = 60, RADIUS_SCALE = 1, RADIUS_SCALE_MIN = 1, RADIUS_SCALE_MAX = 1.5, QUANTITY = 25, mouseX = 0.5 * SCREEN_WIDTH, mouseY = 0.5 * SCREEN_HEIGHT, mouseIsDown = !1;
-function init() {
-    (canvas = document.getElementById('world')) && canvas.getContext && (context = canvas.getContext('2d'), document.addEventListener('mousemove', documentMouseMoveHandler, !1), document.addEventListener('mousedown', documentMouseDownHandler, !1), document.addEventListener('mouseup', documentMouseUpHandler, !1), document.addEventListener('touchstart', documentTouchStartHandler, !1), document.addEventListener('touchmove', documentTouchMoveHandler, !1), window.addEventListener('resize', windowResizeHandler, !1), createParticles(), windowResizeHandler(), setInterval(loop, 1000 / 60));
-}
-function createParticles() {
-    particles = [];
-    for (var e = 0; e < QUANTITY; e++) {
-        var t = {
-            position: {
-                x: mouseX,
-                y: mouseY
-            },
-            shift: {
-                x: mouseX,
-                y: mouseY
-            },
-            size: 1,
-            angle: 0,
-            speed: 0.01 + 0.04 * Math.random(),
-            targetSize: 1,
-            fillColor: '#' + (4210752 * Math.random() + 11184810 | 0).toString(16),
-            orbit: 0.5 * RADIUS + 0.5 * RADIUS * Math.random()
-        };
-        particles.push(t);
-    }
-}
-function documentMouseMoveHandler(e) {
-    mouseX = e.clientX, mouseY = e.clientY;
-}
-function documentMouseDownHandler(e) {
-    mouseIsDown = !0;
-}
-function documentMouseUpHandler(e) {
-    mouseIsDown = !1;
-}
-function documentTouchStartHandler(e) {
-    1 == e.touches.length && (e.preventDefault(), mouseX = e.touches[0].pageX - 0.5 * (window.innerWidth - SCREEN_WIDTH), mouseY = e.touches[0].pageY - 0.5 * (window.innerHeight - SCREEN_HEIGHT));
-}
-function documentTouchMoveHandler(e) {
-    1 == e.touches.length && (e.preventDefault(), mouseX = e.touches[0].pageX - 0.5 * (window.innerWidth - SCREEN_WIDTH), mouseY = e.touches[0].pageY - 0.5 * (window.innerHeight - SCREEN_HEIGHT));
-}
-function windowResizeHandler() {
-    SCREEN_WIDTH = window.innerWidth, SCREEN_HEIGHT = window.innerHeight, canvas.width = SCREEN_WIDTH, canvas.height = SCREEN_HEIGHT;
-}
-function loop() {
-    for (context.shadowBlur = 3, mouseIsDown ? RADIUS_SCALE += 0.02 * (RADIUS_SCALE_MAX - RADIUS_SCALE) : RADIUS_SCALE -= 0.02 * (RADIUS_SCALE - RADIUS_SCALE_MIN), RADIUS_SCALE = Math.min(RADIUS_SCALE, RADIUS_SCALE_MAX), i = 0, len = particles.length; i < len; i++) {
-        var e = particles[i];
-        e.angle += e.speed, e.shift.x += (mouseX - e.shift.x) * e.speed, e.shift.y += (mouseY - e.shift.y) * e.speed, e.position.x = e.shift.x + Math.cos(i + e.angle) * (e.orbit * RADIUS_SCALE), e.position.y = e.shift.y + Math.sin(i + e.angle) * (e.orbit * RADIUS_SCALE), e.position.x = Math.max(Math.min(e.position.x, SCREEN_WIDTH), 0), e.position.y = Math.max(Math.min(e.position.y, SCREEN_HEIGHT), 0), e.size += 0.05 * (e.targetSize - e.size), Math.round(e.size) == Math.round(e.targetSize) && (e.targetSize = 1 + 7 * Math.random()), context.beginPath(), context.fillStyle = e.fillColor, context.moveTo(e.position.x, e.position.y), context.arc(e.position.x, e.position.y, e.size, 0, 2 * Math.PI, !0), context.fill();
-    }
-}
-init();

+ 0 - 235
js/utils.js

@@ -1,235 +0,0 @@
-'use strict';
-function _toConsumableArray(e) {
-    if (Array.isArray(e)) {
-        for (var t = 0, n = Array(e.length); t < e.length; t++)
-            n[t] = e[t];
-        return n;
-    }
-    return Array.from(e);
-}
-HTMLElement.prototype.wrap = function (e) {
-    this.parentNode.insertBefore(e, this), this.parentNode.removeChild(this), e.appendChild(this);
-}, NexT.utils = {
-    wrapImageWithFancyBox: function () {
-        document.querySelectorAll('.post-body :not(a) > img, .post-body > img').forEach(function (e) {
-            var t = $(e), n = t.attr('data-src') || t.attr('src'), a = t.wrap('<a class="fancybox fancybox.image" href="' + n + '" itemscope itemtype="http://schema.org/ImageObject" itemprop="url"></a>').parent('a');
-            t.is('.post-gallery img') ? a.attr('data-fancybox', 'gallery').attr('rel', 'gallery') : t.is('.group-picture img') ? a.attr('data-fancybox', 'group').attr('rel', 'group') : a.attr('data-fancybox', 'default').attr('rel', 'default');
-            var r = t.attr('title') || t.attr('alt');
-            r && (a.append('<p class="image-caption">' + r + '</p>'), a.attr('title', r).attr('data-caption', r));
-        }), $.fancybox.defaults.hash = !1, $('.fancybox').fancybox({
-            loop: !0,
-            helpers: { overlay: { locked: !1 } }
-        });
-    },
-    registerExtURL: function () {
-        document.querySelectorAll('span.exturl').forEach(function (e) {
-            var t = document.createElement('a');
-            t.href = decodeURIComponent(atob(e.dataset.url).split('').map(function (e) {
-                return '%' + ('00' + e.charCodeAt(0).toString(16)).slice(-2);
-            }).join('')), t.rel = 'noopener external nofollow noreferrer', t.target = '_blank', t.className = e.className, t.innerHTML = e.innerHTML, e.parentNode.replaceChild(t, e);
-        });
-    },
-    registerCopyCode: function () {
-        document.querySelectorAll('figure.highlight').forEach(function (e) {
-            var t = document.createElement('div');
-            e.wrap(t), t.classList.add('highlight-container'), t.insertAdjacentHTML('beforeend', '<div class="copy-btn"><i class="fa fa-clipboard"></i></div>');
-            var n = e.parentNode.querySelector('.copy-btn');
-            n.addEventListener('click', function (e) {
-                var t = e.currentTarget, n = [].concat(_toConsumableArray(t.parentNode.querySelectorAll('.code .line'))).map(function (e) {
-                        return e.innerText;
-                    }).join('\n'), a = document.createElement('textarea');
-                a.style.top = window.scrollY + 'px', a.style.position = 'absolute', a.style.opacity = '0', a.readOnly = !0, a.value = n, document.body.append(a);
-                var r = document.getSelection(), o = 0 < r.rangeCount && r.getRangeAt(0);
-                a.select(), a.setSelectionRange(0, n.length), a.readOnly = !1;
-                var i = document.execCommand('copy');
-                CONFIG.copycode.show_result && (t.querySelector('i').className = i ? 'fa fa-check' : 'fa fa-times'), a.blur(), t.blur(), o && (r.removeAllRanges(), r.addRange(o)), document.body.removeChild(a);
-            }), n.addEventListener('mouseleave', function (e) {
-                setTimeout(function () {
-                    e.target.querySelector('i').className = 'fa fa-clipboard';
-                }, 300);
-            });
-        });
-    },
-    wrapTableWithBox: function () {
-        document.querySelectorAll('table').forEach(function (e) {
-            var t = document.createElement('div');
-            t.className = 'table-container', e.wrap(t);
-        });
-    },
-    registerVideoIframe: function () {
-        document.querySelectorAll('iframe').forEach(function (t) {
-            if (["www.youtube.com","player.vimeo.com","player.youku.com","player.bilibili.com","www.tudou.com"].some(function (e) {
-                    return t.src.includes(e);
-                }) && !t.parentNode.matches('.video-container')) {
-                var e = document.createElement('div');
-                e.className = 'video-container', t.wrap(e);
-                var n = Number(t.width), a = Number(t.height);
-                n && a && (t.parentNode.style.paddingTop = a / n * 100 + '%');
-            }
-        });
-    },
-    registerScrollPercent: function () {
-        var r = document.querySelector('.back-to-top'), o = document.querySelector('.reading-progress-bar');
-        window.addEventListener('scroll', function () {
-            if (r || o) {
-                var e = document.querySelector('.container').offsetHeight, t = window.innerHeight, n = t < e ? e - t : document.body.scrollHeight - t, a = Math.min(100 * window.scrollY / n, 100);
-                r && (r.classList.toggle('back-to-top-on', 50 < window.scrollY), r.querySelector('span').innerText = Math.round(a) + '%'), o && (o.style.width = a.toFixed(2) + '%');
-            }
-        }), r && r.addEventListener('click', function () {
-            window.anime({
-                targets: document.scrollingElement,
-                duration: 500,
-                easing: 'linear',
-                scrollTop: 0
-            });
-        });
-    },
-    registerTabsTag: function () {
-        document.querySelectorAll('.tabs ul.nav-tabs .tab').forEach(function (e) {
-            e.addEventListener('click', function (e) {
-                e.preventDefault();
-                var t = e.currentTarget;
-                if (!t.classList.contains('active')) {
-                    [].concat(_toConsumableArray(t.parentNode.children)).forEach(function (e) {
-                        e.classList.remove('active');
-                    }), t.classList.add('active');
-                    var n = document.getElementById(t.querySelector('a').getAttribute('href').replace('#', ''));
-                    [].concat(_toConsumableArray(n.parentNode.children)).forEach(function (e) {
-                        e.classList.remove('active');
-                    }), n.classList.add('active'), n.dispatchEvent(new Event('tabs:click', { bubbles: !0 }));
-                }
-            });
-        }), window.dispatchEvent(new Event('tabs:register'));
-    },
-    registerCanIUseTag: function () {
-        window.addEventListener('message', function (e) {
-            var t = e.data;
-            if ('string' == typeof t && t.includes('ciu_embed')) {
-                var n = t.split(':')[1], a = t.split(':')[2];
-                document.querySelector('iframe[data-feature=' + n + ']').style.height = parseInt(a, 10) + 5 + 'px';
-            }
-        }, !1);
-    },
-    registerActiveMenuItem: function () {
-        document.querySelectorAll('.menu-item').forEach(function (e) {
-            var t = e.querySelector('a[href]');
-            if (t) {
-                var n = t.pathname === location.pathname || t.pathname === location.pathname.replace('index.html', ''), a = !CONFIG.root.startsWith(t.pathname) && location.pathname.startsWith(t.pathname);
-                e.classList.toggle('menu-item-active', t.hostname === location.hostname && (n || a));
-            }
-        });
-    },
-    registerLangSelect: function () {
-        var n = document.querySelector('.lang-select');
-        n && (n.value = CONFIG.page.lang, n.addEventListener('change', function () {
-            var e = n.options[n.selectedIndex];
-            document.querySelector('.lang-select-label span').innerText = e.text;
-            var t = e.dataset.href;
-            window.pjax ? window.pjax.loadUrl(t) : window.location.href = t;
-        }));
-    },
-    registerSidebarTOC: function () {
-        var i = document.querySelectorAll('.post-toc li'), c = [].concat(_toConsumableArray(i)).map(function (e) {
-                var t = e.querySelector('a.nav-link');
-                return t.addEventListener('click', function (e) {
-                    e.preventDefault();
-                    var t = document.getElementById(e.currentTarget.getAttribute('href').replace('#', '')).getBoundingClientRect().top + window.scrollY;
-                    window.anime({
-                        targets: document.scrollingElement,
-                        duration: 500,
-                        easing: 'linear',
-                        scrollTop: t + 10
-                    });
-                }), document.getElementById(t.getAttribute('href').replace('#', ''));
-            }), l = document.querySelector('.post-toc-wrap');
-        !function r(o) {
-            o = Math.floor(o + 10000);
-            var t = new IntersectionObserver(function (e, t) {
-                var n = document.documentElement.scrollHeight + 100;
-                if (o < n)
-                    return t.disconnect(), void r(n);
-                var a = function (e) {
-                    var t = 0, n = e[t];
-                    if (0 < n.boundingClientRect.top)
-                        return 0 === (t = c.indexOf(n.target)) ? 0 : t - 1;
-                    for (; t < e.length; t++) {
-                        if (!(e[t].boundingClientRect.top <= 0))
-                            return c.indexOf(n.target);
-                        n = e[t];
-                    }
-                    return c.indexOf(n.target);
-                }(e);
-                !function (e) {
-                    if (!e.classList.contains('active-current')) {
-                        document.querySelectorAll('.post-toc .active').forEach(function (e) {
-                            e.classList.remove('active', 'active-current');
-                        }), e.classList.add('active', 'active-current');
-                        for (var t = e.parentNode; !t.matches('.post-toc');)
-                            t.matches('li') && t.classList.add('active'), t = t.parentNode;
-                        window.anime({
-                            targets: l,
-                            duration: 200,
-                            easing: 'linear',
-                            scrollTop: l.scrollTop - l.offsetHeight / 2 + e.getBoundingClientRect().top - l.getBoundingClientRect().top
-                        });
-                    }
-                }(i[a]);
-            }, {
-                rootMargin: o + 'px 0px -100% 0px',
-                threshold: 0
-            });
-            c.forEach(function (e) {
-                e && t.observe(e);
-            });
-        }(document.documentElement.scrollHeight);
-    },
-    hasMobileUA: function () {
-        var e = navigator.userAgent;
-        return /iPad|iPhone|Android|Opera Mini|BlackBerry|webOS|UCWEB|Blazer|PSP|IEMobile|Symbian/g.test(e);
-    },
-    isTablet: function () {
-        return window.screen.width < 992 && 767 < window.screen.width && this.hasMobileUA();
-    },
-    isMobile: function () {
-        return window.screen.width < 767 && this.hasMobileUA();
-    },
-    isDesktop: function () {
-        return !this.isTablet() && !this.isMobile();
-    },
-    supportsPDFs: function () {
-        var e = navigator.userAgent, t = e.includes('irefox') && 18 < parseInt(e.split('rv:')[1].split('.')[0], 10), n = void 0 !== navigator.mimeTypes['application/pdf'], a = /iphone|ipad|ipod/i.test(e.toLowerCase());
-        return t || n && !a;
-    },
-    initSidebarDimension: function () {
-        var e = document.querySelector('.sidebar-nav'), t = 'none' !== e.style.display ? e.offsetHeight : 0, n = CONFIG.sidebar.offset || 12, a = CONFIG.back2top.enable && CONFIG.back2top.sidebar ? document.querySelector('.back-to-top').offsetHeight : 0, r = 2 * CONFIG.sidebar.padding + t + a;
-        'Pisces' !== CONFIG.scheme && 'Gemini' !== CONFIG.scheme || (r += 2 * n - 22);
-        var o = document.body.offsetHeight - r + 'px';
-        document.querySelector('.site-overview-wrap').style.maxHeight = o, document.querySelector('.post-toc-wrap').style.maxHeight = o;
-    },
-    updateSidebarPosition: function () {
-        var e = document.querySelector('.sidebar-nav'), t = document.querySelector('.post-toc');
-        if (t ? (e.style.display = '', e.classList.add('motion-element'), document.querySelector('.sidebar-nav-toc').click()) : (e.style.display = 'none', e.classList.remove('motion-element'), document.querySelector('.sidebar-nav-overview').click()), NexT.utils.initSidebarDimension(), this.isDesktop() && 'Pisces' !== CONFIG.scheme && 'Gemini' !== CONFIG.scheme) {
-            var n = CONFIG.page.sidebar;
-            'boolean' != typeof n && (n = 'always' === CONFIG.sidebar.display || 'post' === CONFIG.sidebar.display && t), n && window.dispatchEvent(new Event('sidebar:show'));
-        }
-    },
-    getScript: function (e, n, t) {
-        if (t)
-            n();
-        else {
-            var a = document.createElement('script');
-            a.onload = a.onreadystatechange = function (e, t) {
-                !t && a.readyState && !/loaded|complete/.test(a.readyState) || (a.onload = a.onreadystatechange = null, a = void 0, !t && n && setTimeout(n, 0));
-            }, a.src = e, document.head.appendChild(a);
-        }
-    },
-    loadComments: function (e, n) {
-        if (CONFIG.comments.lazyload && e) {
-            var t = new IntersectionObserver(function (e, t) {
-                e[0].isIntersecting && (n(), t.disconnect());
-            });
-            return t.observe(e), t;
-        }
-        n();
-    }
-};

File diff suppressed because it is too large
+ 0 - 7
lib/anime.min.js


+ 0 - 674
lib/fancybox/LICENSE

@@ -1,674 +0,0 @@
-                    GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.

+ 0 - 13
lib/fancybox/README.html

@@ -1,13 +0,0 @@
-<h1 align="center"><a href="https://github.com/fancyapps/fancybox" target="_blank" rel="noopener">fancyBox 3</a> for <a href="https://github.com/theme-next" target="_blank" rel="noopener">NexT</a></h1><h2 align="center">If you want fancybox v2, please go to <a href="https://github.com/theme-next/theme-next-fancybox" target="_blank" rel="noopener">theme-next-fancybox</a></h2><h1 align="center">Installation</h1><h2 align="center">Step 0 &rarr; Delete fancybox 2 (if you want to upgrade from v2)</h2><pre class="highlight"><code class="bash">$ rm -rf themes/next/<span class="built_in">source</span>/lib/fancybox
-</code></pre><h2>If you want to use the CDN instead of clone this repo, please jump to the Step 3.</h2><h2 align="center">Step 1 &rarr; Go to NexT dir</h2><p>Change dir to <strong>NexT</strong> directory. There must be <code>layout</code>, <code>source</code>, <code>languages</code> and other directories:</p><pre class="highlight"><code class="sh">$ <span class="built_in">cd</span> themes/next
-$ ls
-bower.json  _config.yml  docs  gulpfile.coffee  languages  layout  LICENSE.md  package.json  README.md  scripts  <span class="built_in">source</span>  <span class="built_in">test</span>
-</code></pre><h2 align="center">Step 2 &rarr; Get module</h2><p>Install module to <code>source/lib</code> directory:</p><pre class="highlight"><code class="sh">$ git <span class="built_in">clone</span> https://github.com/theme-next/theme-next-fancybox3 <span class="built_in">source</span>/lib/fancybox
-</code></pre><h2 align="center">Step 3 &rarr; Set it up</h2><p>Enable module in <strong>NexT</strong> <code>_config.yml</code> file:</p><pre class="highlight"><code class="yml"><span class="attr">fancybox:</span> <span class="literal">true</span>
-</code></pre><p><strong>And, if you wants to use the CDN, then need to set:</strong></p><pre class="highlight"><code class="yml"><span class="attr">vendors:</span>
-  <span class="string">...</span>
-  <span class="attr">fancybox:</span> <span class="string">//cdn.jsdelivr.net/gh/fancyapps/fancybox@3/dist/jquery.fancybox.min.js</span>
-  <span class="attr">fancybox_css:</span> <span class="string">//cdn.jsdelivr.net/gh/fancyapps/fancybox@3/dist/jquery.fancybox.min.css</span>
-</code></pre><h1 align="center">Update</h1><pre class="highlight"><code class="sh">$ <span class="built_in">cd</span> themes/next/<span class="built_in">source</span>/lib/fancybox
-$ git pull
-</code></pre>

File diff suppressed because it is too large
+ 0 - 0
lib/fancybox/source/jquery.fancybox.css


File diff suppressed because it is too large
+ 0 - 0
lib/fancybox/source/jquery.fancybox.min.css


File diff suppressed because it is too large
+ 0 - 10
lib/fancybox/source/jquery.fancybox.min.js


+ 0 - 5632
lib/fancybox/source/jquery.fancybox.pack.js

@@ -1,5632 +0,0 @@
-// ==================================================
-// fancyBox v3.5.7
-//
-// Licensed GPLv3 for open source use
-// or fancyBox Commercial License for commercial use
-//
-// http://fancyapps.com/fancybox/
-// Copyright 2019 fancyApps
-//
-// ==================================================
-(function (window, document, $, undefined) {
-  "use strict";
-
-  window.console = window.console || {
-    info: function (stuff) {}
-  };
-
-  // If there's no jQuery, fancyBox can't work
-  // =========================================
-
-  if (!$) {
-    return;
-  }
-
-  // Check if fancyBox is already initialized
-  // ========================================
-
-  if ($.fn.fancybox) {
-    console.info("fancyBox already initialized");
-
-    return;
-  }
-
-  // Private default settings
-  // ========================
-
-  var defaults = {
-    // Close existing modals
-    // Set this to false if you do not need to stack multiple instances
-    closeExisting: false,
-
-    // Enable infinite gallery navigation
-    loop: false,
-
-    // Horizontal space between slides
-    gutter: 50,
-
-    // Enable keyboard navigation
-    keyboard: true,
-
-    // Should allow caption to overlap the content
-    preventCaptionOverlap: true,
-
-    // Should display navigation arrows at the screen edges
-    arrows: true,
-
-    // Should display counter at the top left corner
-    infobar: true,
-
-    // Should display close button (using `btnTpl.smallBtn` template) over the content
-    // Can be true, false, "auto"
-    // If "auto" - will be automatically enabled for "html", "inline" or "ajax" items
-    smallBtn: "auto",
-
-    // Should display toolbar (buttons at the top)
-    // Can be true, false, "auto"
-    // If "auto" - will be automatically hidden if "smallBtn" is enabled
-    toolbar: "auto",
-
-    // What buttons should appear in the top right corner.
-    // Buttons will be created using templates from `btnTpl` option
-    // and they will be placed into toolbar (class="fancybox-toolbar"` element)
-    buttons: [
-      "zoom",
-      //"share",
-      "slideShow",
-      //"fullScreen",
-      //"download",
-      "thumbs",
-      "close"
-    ],
-
-    // Detect "idle" time in seconds
-    idleTime: 3,
-
-    // Disable right-click and use simple image protection for images
-    protect: false,
-
-    // Shortcut to make content "modal" - disable keyboard navigtion, hide buttons, etc
-    modal: false,
-
-    image: {
-      // Wait for images to load before displaying
-      //   true  - wait for image to load and then display;
-      //   false - display thumbnail and load the full-sized image over top,
-      //           requires predefined image dimensions (`data-width` and `data-height` attributes)
-      preload: false
-    },
-
-    ajax: {
-      // Object containing settings for ajax request
-      settings: {
-        // This helps to indicate that request comes from the modal
-        // Feel free to change naming
-        data: {
-          fancybox: true
-        }
-      }
-    },
-
-    iframe: {
-      // Iframe template
-      tpl: '<iframe id="fancybox-frame{rnd}" name="fancybox-frame{rnd}" class="fancybox-iframe" allowfullscreen="allowfullscreen" allow="autoplay; fullscreen" src=""></iframe>',
-
-      // Preload iframe before displaying it
-      // This allows to calculate iframe content width and height
-      // (note: Due to "Same Origin Policy", you can't get cross domain data).
-      preload: true,
-
-      // Custom CSS styling for iframe wrapping element
-      // You can use this to set custom iframe dimensions
-      css: {},
-
-      // Iframe tag attributes
-      attr: {
-        scrolling: "auto"
-      }
-    },
-
-    // For HTML5 video only
-    video: {
-      tpl: '<video class="fancybox-video" controls controlsList="nodownload" poster="{{poster}}">' +
-        '<source src="{{src}}" type="{{format}}" />' +
-        'Sorry, your browser doesn\'t support embedded videos, <a href="{{src}}">download</a> and watch with your favorite video player!' +
-        "</video>",
-      format: "", // custom video format
-      autoStart: true
-    },
-
-    // Default content type if cannot be detected automatically
-    defaultType: "image",
-
-    // Open/close animation type
-    // Possible values:
-    //   false            - disable
-    //   "zoom"           - zoom images from/to thumbnail
-    //   "fade"
-    //   "zoom-in-out"
-    //
-    animationEffect: "zoom",
-
-    // Duration in ms for open/close animation
-    animationDuration: 366,
-
-    // Should image change opacity while zooming
-    // If opacity is "auto", then opacity will be changed if image and thumbnail have different aspect ratios
-    zoomOpacity: "auto",
-
-    // Transition effect between slides
-    //
-    // Possible values:
-    //   false            - disable
-    //   "fade'
-    //   "slide'
-    //   "circular'
-    //   "tube'
-    //   "zoom-in-out'
-    //   "rotate'
-    //
-    transitionEffect: "fade",
-
-    // Duration in ms for transition animation
-    transitionDuration: 366,
-
-    // Custom CSS class for slide element
-    slideClass: "",
-
-    // Custom CSS class for layout
-    baseClass: "",
-
-    // Base template for layout
-    baseTpl: '<div class="fancybox-container" role="dialog" tabindex="-1">' +
-      '<div class="fancybox-bg"></div>' +
-      '<div class="fancybox-inner">' +
-      '<div class="fancybox-infobar"><span data-fancybox-index></span>&nbsp;/&nbsp;<span data-fancybox-count></span></div>' +
-      '<div class="fancybox-toolbar">{{buttons}}</div>' +
-      '<div class="fancybox-navigation">{{arrows}}</div>' +
-      '<div class="fancybox-stage"></div>' +
-      '<div class="fancybox-caption"><div class="fancybox-caption__body"></div></div>' +
-      "</div>" +
-      "</div>",
-
-    // Loading indicator template
-    spinnerTpl: '<div class="fancybox-loading"></div>',
-
-    // Error message template
-    errorTpl: '<div class="fancybox-error"><p>{{ERROR}}</p></div>',
-
-    btnTpl: {
-      download: '<a download data-fancybox-download class="fancybox-button fancybox-button--download" title="{{DOWNLOAD}}" href="javascript:;">' +
-        '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18.62 17.09V19H5.38v-1.91zm-2.97-6.96L17 11.45l-5 4.87-5-4.87 1.36-1.32 2.68 2.64V5h1.92v7.77z"/></svg>' +
-        "</a>",
-
-      zoom: '<button data-fancybox-zoom class="fancybox-button fancybox-button--zoom" title="{{ZOOM}}">' +
-        '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18.7 17.3l-3-3a5.9 5.9 0 0 0-.6-7.6 5.9 5.9 0 0 0-8.4 0 5.9 5.9 0 0 0 0 8.4 5.9 5.9 0 0 0 7.7.7l3 3a1 1 0 0 0 1.3 0c.4-.5.4-1 0-1.5zM8.1 13.8a4 4 0 0 1 0-5.7 4 4 0 0 1 5.7 0 4 4 0 0 1 0 5.7 4 4 0 0 1-5.7 0z"/></svg>' +
-        "</button>",
-
-      close: '<button data-fancybox-close class="fancybox-button fancybox-button--close" title="{{CLOSE}}">' +
-        '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 10.6L6.6 5.2 5.2 6.6l5.4 5.4-5.4 5.4 1.4 1.4 5.4-5.4 5.4 5.4 1.4-1.4-5.4-5.4 5.4-5.4-1.4-1.4-5.4 5.4z"/></svg>' +
-        "</button>",
-
-      // Arrows
-      arrowLeft: '<button data-fancybox-prev class="fancybox-button fancybox-button--arrow_left" title="{{PREV}}">' +
-        '<div><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M11.28 15.7l-1.34 1.37L5 12l4.94-5.07 1.34 1.38-2.68 2.72H19v1.94H8.6z"/></svg></div>' +
-        "</button>",
-
-      arrowRight: '<button data-fancybox-next class="fancybox-button fancybox-button--arrow_right" title="{{NEXT}}">' +
-        '<div><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M15.4 12.97l-2.68 2.72 1.34 1.38L19 12l-4.94-5.07-1.34 1.38 2.68 2.72H5v1.94z"/></svg></div>' +
-        "</button>",
-
-      // This small close button will be appended to your html/inline/ajax content by default,
-      // if "smallBtn" option is not set to false
-      smallBtn: '<button type="button" data-fancybox-close class="fancybox-button fancybox-close-small" title="{{CLOSE}}">' +
-        '<svg xmlns="http://www.w3.org/2000/svg" version="1" viewBox="0 0 24 24"><path d="M13 12l5-5-1-1-5 5-5-5-1 1 5 5-5 5 1 1 5-5 5 5 1-1z"/></svg>' +
-        "</button>"
-    },
-
-    // Container is injected into this element
-    parentEl: "body",
-
-    // Hide browser vertical scrollbars; use at your own risk
-    hideScrollbar: true,
-
-    // Focus handling
-    // ==============
-
-    // Try to focus on the first focusable element after opening
-    autoFocus: true,
-
-    // Put focus back to active element after closing
-    backFocus: true,
-
-    // Do not let user to focus on element outside modal content
-    trapFocus: true,
-
-    // Module specific options
-    // =======================
-
-    fullScreen: {
-      autoStart: false
-    },
-
-    // Set `touch: false` to disable panning/swiping
-    touch: {
-      vertical: true, // Allow to drag content vertically
-      momentum: true // Continue movement after releasing mouse/touch when panning
-    },
-
-    // Hash value when initializing manually,
-    // set `false` to disable hash change
-    hash: null,
-
-    // Customize or add new media types
-    // Example:
-    /*
-      media : {
-        youtube : {
-          params : {
-            autoplay : 0
-          }
-        }
-      }
-    */
-    media: {},
-
-    slideShow: {
-      autoStart: false,
-      speed: 3000
-    },
-
-    thumbs: {
-      autoStart: false, // Display thumbnails on opening
-      hideOnClose: true, // Hide thumbnail grid when closing animation starts
-      parentEl: ".fancybox-container", // Container is injected into this element
-      axis: "y" // Vertical (y) or horizontal (x) scrolling
-    },
-
-    // Use mousewheel to navigate gallery
-    // If 'auto' - enabled for images only
-    wheel: "auto",
-
-    // Callbacks
-    //==========
-
-    // See Documentation/API/Events for more information
-    // Example:
-    /*
-      afterShow: function( instance, current ) {
-        console.info( 'Clicked element:' );
-        console.info( current.opts.$orig );
-      }
-    */
-
-    onInit: $.noop, // When instance has been initialized
-
-    beforeLoad: $.noop, // Before the content of a slide is being loaded
-    afterLoad: $.noop, // When the content of a slide is done loading
-
-    beforeShow: $.noop, // Before open animation starts
-    afterShow: $.noop, // When content is done loading and animating
-
-    beforeClose: $.noop, // Before the instance attempts to close. Return false to cancel the close.
-    afterClose: $.noop, // After instance has been closed
-
-    onActivate: $.noop, // When instance is brought to front
-    onDeactivate: $.noop, // When other instance has been activated
-
-    // Interaction
-    // ===========
-
-    // Use options below to customize taken action when user clicks or double clicks on the fancyBox area,
-    // each option can be string or method that returns value.
-    //
-    // Possible values:
-    //   "close"           - close instance
-    //   "next"            - move to next gallery item
-    //   "nextOrClose"     - move to next gallery item or close if gallery has only one item
-    //   "toggleControls"  - show/hide controls
-    //   "zoom"            - zoom image (if loaded)
-    //   false             - do nothing
-
-    // Clicked on the content
-    clickContent: function (current, event) {
-      return current.type === "image" ? "zoom" : false;
-    },
-
-    // Clicked on the slide
-    clickSlide: "close",
-
-    // Clicked on the background (backdrop) element;
-    // if you have not changed the layout, then most likely you need to use `clickSlide` option
-    clickOutside: "close",
-
-    // Same as previous two, but for double click
-    dblclickContent: false,
-    dblclickSlide: false,
-    dblclickOutside: false,
-
-    // Custom options when mobile device is detected
-    // =============================================
-
-    mobile: {
-      preventCaptionOverlap: false,
-      idleTime: false,
-      clickContent: function (current, event) {
-        return current.type === "image" ? "toggleControls" : false;
-      },
-      clickSlide: function (current, event) {
-        return current.type === "image" ? "toggleControls" : "close";
-      },
-      dblclickContent: function (current, event) {
-        return current.type === "image" ? "zoom" : false;
-      },
-      dblclickSlide: function (current, event) {
-        return current.type === "image" ? "zoom" : false;
-      }
-    },
-
-    // Internationalization
-    // ====================
-
-    lang: "en",
-    i18n: {
-      en: {
-        CLOSE: "Close",
-        NEXT: "Next",
-        PREV: "Previous",
-        ERROR: "The requested content cannot be loaded. <br/> Please try again later.",
-        PLAY_START: "Start slideshow",
-        PLAY_STOP: "Pause slideshow",
-        FULL_SCREEN: "Full screen",
-        THUMBS: "Thumbnails",
-        DOWNLOAD: "Download",
-        SHARE: "Share",
-        ZOOM: "Zoom"
-      },
-      de: {
-        CLOSE: "Schlie&szlig;en",
-        NEXT: "Weiter",
-        PREV: "Zur&uuml;ck",
-        ERROR: "Die angeforderten Daten konnten nicht geladen werden. <br/> Bitte versuchen Sie es sp&auml;ter nochmal.",
-        PLAY_START: "Diaschau starten",
-        PLAY_STOP: "Diaschau beenden",
-        FULL_SCREEN: "Vollbild",
-        THUMBS: "Vorschaubilder",
-        DOWNLOAD: "Herunterladen",
-        SHARE: "Teilen",
-        ZOOM: "Vergr&ouml;&szlig;ern"
-      }
-    }
-  };
-
-  // Few useful variables and methods
-  // ================================
-
-  var $W = $(window);
-  var $D = $(document);
-
-  var called = 0;
-
-  // Check if an object is a jQuery object and not a native JavaScript object
-  // ========================================================================
-  var isQuery = function (obj) {
-    return obj && obj.hasOwnProperty && obj instanceof $;
-  };
-
-  // Handle multiple browsers for "requestAnimationFrame" and "cancelAnimationFrame"
-  // ===============================================================================
-  var requestAFrame = (function () {
-    return (
-      window.requestAnimationFrame ||
-      window.webkitRequestAnimationFrame ||
-      window.mozRequestAnimationFrame ||
-      window.oRequestAnimationFrame ||
-      // if all else fails, use setTimeout
-      function (callback) {
-        return window.setTimeout(callback, 1000 / 60);
-      }
-    );
-  })();
-
-  var cancelAFrame = (function () {
-    return (
-      window.cancelAnimationFrame ||
-      window.webkitCancelAnimationFrame ||
-      window.mozCancelAnimationFrame ||
-      window.oCancelAnimationFrame ||
-      function (id) {
-        window.clearTimeout(id);
-      }
-    );
-  })();
-
-  // Detect the supported transition-end event property name
-  // =======================================================
-  var transitionEnd = (function () {
-    var el = document.createElement("fakeelement"),
-      t;
-
-    var transitions = {
-      transition: "transitionend",
-      OTransition: "oTransitionEnd",
-      MozTransition: "transitionend",
-      WebkitTransition: "webkitTransitionEnd"
-    };
-
-    for (t in transitions) {
-      if (el.style[t] !== undefined) {
-        return transitions[t];
-      }
-    }
-
-    return "transitionend";
-  })();
-
-  // Force redraw on an element.
-  // This helps in cases where the browser doesn't redraw an updated element properly
-  // ================================================================================
-  var forceRedraw = function ($el) {
-    return $el && $el.length && $el[0].offsetHeight;
-  };
-
-  // Exclude array (`buttons`) options from deep merging
-  // ===================================================
-  var mergeOpts = function (opts1, opts2) {
-    var rez = $.extend(true, {}, opts1, opts2);
-
-    $.each(opts2, function (key, value) {
-      if ($.isArray(value)) {
-        rez[key] = value;
-      }
-    });
-
-    return rez;
-  };
-
-  // How much of an element is visible in viewport
-  // =============================================
-
-  var inViewport = function (elem) {
-    var elemCenter, rez;
-
-    if (!elem || elem.ownerDocument !== document) {
-      return false;
-    }
-
-    $(".fancybox-container").css("pointer-events", "none");
-
-    elemCenter = {
-      x: elem.getBoundingClientRect().left + elem.offsetWidth / 2,
-      y: elem.getBoundingClientRect().top + elem.offsetHeight / 2
-    };
-
-    rez = document.elementFromPoint(elemCenter.x, elemCenter.y) === elem;
-
-    $(".fancybox-container").css("pointer-events", "");
-
-    return rez;
-  };
-
-  // Class definition
-  // ================
-
-  var FancyBox = function (content, opts, index) {
-    var self = this;
-
-    self.opts = mergeOpts({
-      index: index
-    }, $.fancybox.defaults);
-
-    if ($.isPlainObject(opts)) {
-      self.opts = mergeOpts(self.opts, opts);
-    }
-
-    if ($.fancybox.isMobile) {
-      self.opts = mergeOpts(self.opts, self.opts.mobile);
-    }
-
-    self.id = self.opts.id || ++called;
-
-    self.currIndex = parseInt(self.opts.index, 10) || 0;
-    self.prevIndex = null;
-
-    self.prevPos = null;
-    self.currPos = 0;
-
-    self.firstRun = true;
-
-    // All group items
-    self.group = [];
-
-    // Existing slides (for current, next and previous gallery items)
-    self.slides = {};
-
-    // Create group elements
-    self.addContent(content);
-
-    if (!self.group.length) {
-      return;
-    }
-
-    self.init();
-  };
-
-  $.extend(FancyBox.prototype, {
-    // Create DOM structure
-    // ====================
-
-    init: function () {
-      var self = this,
-        firstItem = self.group[self.currIndex],
-        firstItemOpts = firstItem.opts,
-        $container,
-        buttonStr;
-
-      if (firstItemOpts.closeExisting) {
-        $.fancybox.close(true);
-      }
-
-      // Hide scrollbars
-      // ===============
-
-      $("body").addClass("fancybox-active");
-
-      if (
-        !$.fancybox.getInstance() &&
-        firstItemOpts.hideScrollbar !== false &&
-        !$.fancybox.isMobile &&
-        document.body.scrollHeight > window.innerHeight
-      ) {
-        $("head").append(
-          '<style id="fancybox-style-noscroll" type="text/css">.compensate-for-scrollbar{margin-right:' +
-          (window.innerWidth - document.documentElement.clientWidth) +
-          "px;}</style>"
-        );
-
-        $("body").addClass("compensate-for-scrollbar");
-      }
-
-      // Build html markup and set references
-      // ====================================
-
-      // Build html code for buttons and insert into main template
-      buttonStr = "";
-
-      $.each(firstItemOpts.buttons, function (index, value) {
-        buttonStr += firstItemOpts.btnTpl[value] || "";
-      });
-
-      // Create markup from base template, it will be initially hidden to
-      // avoid unnecessary work like painting while initializing is not complete
-      $container = $(
-          self.translate(
-            self,
-            firstItemOpts.baseTpl
-            .replace("{{buttons}}", buttonStr)
-            .replace("{{arrows}}", firstItemOpts.btnTpl.arrowLeft + firstItemOpts.btnTpl.arrowRight)
-          )
-        )
-        .attr("id", "fancybox-container-" + self.id)
-        .addClass(firstItemOpts.baseClass)
-        .data("FancyBox", self)
-        .appendTo(firstItemOpts.parentEl);
-
-      // Create object holding references to jQuery wrapped nodes
-      self.$refs = {
-        container: $container
-      };
-
-      ["bg", "inner", "infobar", "toolbar", "stage", "caption", "navigation"].forEach(function (item) {
-        self.$refs[item] = $container.find(".fancybox-" + item);
-      });
-
-      self.trigger("onInit");
-
-      // Enable events, deactive previous instances
-      self.activate();
-
-      // Build slides, load and reveal content
-      self.jumpTo(self.currIndex);
-    },
-
-    // Simple i18n support - replaces object keys found in template
-    // with corresponding values
-    // ============================================================
-
-    translate: function (obj, str) {
-      var arr = obj.opts.i18n[obj.opts.lang] || obj.opts.i18n.en;
-
-      return str.replace(/\{\{(\w+)\}\}/g, function (match, n) {
-        return arr[n] === undefined ? match : arr[n];
-      });
-    },
-
-    // Populate current group with fresh content
-    // Check if each object has valid type and content
-    // ===============================================
-
-    addContent: function (content) {
-      var self = this,
-        items = $.makeArray(content),
-        thumbs;
-
-      $.each(items, function (i, item) {
-        var obj = {},
-          opts = {},
-          $item,
-          type,
-          found,
-          src,
-          srcParts;
-
-        // Step 1 - Make sure we have an object
-        // ====================================
-
-        if ($.isPlainObject(item)) {
-          // We probably have manual usage here, something like
-          // $.fancybox.open( [ { src : "image.jpg", type : "image" } ] )
-
-          obj = item;
-          opts = item.opts || item;
-        } else if ($.type(item) === "object" && $(item).length) {
-          // Here we probably have jQuery collection returned by some selector
-          $item = $(item);
-
-          // Support attributes like `data-options='{"touch" : false}'` and `data-touch='false'`
-          opts = $item.data() || {};
-          opts = $.extend(true, {}, opts, opts.options);
-
-          // Here we store clicked element
-          opts.$orig = $item;
-
-          obj.src = self.opts.src || opts.src || $item.attr("href");
-
-          // Assume that simple syntax is used, for example:
-          //   `$.fancybox.open( $("#test"), {} );`
-          if (!obj.type && !obj.src) {
-            obj.type = "inline";
-            obj.src = item;
-          }
-        } else {
-          // Assume we have a simple html code, for example:
-          //   $.fancybox.open( '<div><h1>Hi!</h1></div>' );
-          obj = {
-            type: "html",
-            src: item + ""
-          };
-        }
-
-        // Each gallery object has full collection of options
-        obj.opts = $.extend(true, {}, self.opts, opts);
-
-        // Do not merge buttons array
-        if ($.isArray(opts.buttons)) {
-          obj.opts.buttons = opts.buttons;
-        }
-
-        if ($.fancybox.isMobile && obj.opts.mobile) {
-          obj.opts = mergeOpts(obj.opts, obj.opts.mobile);
-        }
-
-        // Step 2 - Make sure we have content type, if not - try to guess
-        // ==============================================================
-
-        type = obj.type || obj.opts.type;
-        src = obj.src || "";
-
-        if (!type && src) {
-          if ((found = src.match(/\.(mp4|mov|ogv|webm)((\?|#).*)?$/i))) {
-            type = "video";
-
-            if (!obj.opts.video.format) {
-              obj.opts.video.format = "video/" + (found[1] === "ogv" ? "ogg" : found[1]);
-            }
-          } else if (src.match(/(^data:image\/[a-z0-9+\/=]*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg|ico)((\?|#).*)?$)/i)) {
-            type = "image";
-          } else if (src.match(/\.(pdf)((\?|#).*)?$/i)) {
-            type = "iframe";
-            obj = $.extend(true, obj, {
-              contentType: "pdf",
-              opts: {
-                iframe: {
-                  preload: false
-                }
-              }
-            });
-          } else if (src.charAt(0) === "#") {
-            type = "inline";
-          }
-        }
-
-        if (type) {
-          obj.type = type;
-        } else {
-          self.trigger("objectNeedsType", obj);
-        }
-
-        if (!obj.contentType) {
-          obj.contentType = $.inArray(obj.type, ["html", "inline", "ajax"]) > -1 ? "html" : obj.type;
-        }
-
-        // Step 3 - Some adjustments
-        // =========================
-
-        obj.index = self.group.length;
-
-        if (obj.opts.smallBtn == "auto") {
-          obj.opts.smallBtn = $.inArray(obj.type, ["html", "inline", "ajax"]) > -1;
-        }
-
-        if (obj.opts.toolbar === "auto") {
-          obj.opts.toolbar = !obj.opts.smallBtn;
-        }
-
-        // Find thumbnail image, check if exists and if is in the viewport
-        obj.$thumb = obj.opts.$thumb || null;
-
-        if (obj.opts.$trigger && obj.index === self.opts.index) {
-          obj.$thumb = obj.opts.$trigger.find("img:first");
-
-          if (obj.$thumb.length) {
-            obj.opts.$orig = obj.opts.$trigger;
-          }
-        }
-
-        if (!(obj.$thumb && obj.$thumb.length) && obj.opts.$orig) {
-          obj.$thumb = obj.opts.$orig.find("img:first");
-        }
-
-        if (obj.$thumb && !obj.$thumb.length) {
-          obj.$thumb = null;
-        }
-
-        obj.thumb = obj.opts.thumb || (obj.$thumb ? obj.$thumb[0].src : null);
-
-        // "caption" is a "special" option, it can be used to customize caption per gallery item
-        if ($.type(obj.opts.caption) === "function") {
-          obj.opts.caption = obj.opts.caption.apply(item, [self, obj]);
-        }
-
-        if ($.type(self.opts.caption) === "function") {
-          obj.opts.caption = self.opts.caption.apply(item, [self, obj]);
-        }
-
-        // Make sure we have caption as a string or jQuery object
-        if (!(obj.opts.caption instanceof $)) {
-          obj.opts.caption = obj.opts.caption === undefined ? "" : obj.opts.caption + "";
-        }
-
-        // Check if url contains "filter" used to filter the content
-        // Example: "ajax.html #something"
-        if (obj.type === "ajax") {
-          srcParts = src.split(/\s+/, 2);
-
-          if (srcParts.length > 1) {
-            obj.src = srcParts.shift();
-
-            obj.opts.filter = srcParts.shift();
-          }
-        }
-
-        // Hide all buttons and disable interactivity for modal items
-        if (obj.opts.modal) {
-          obj.opts = $.extend(true, obj.opts, {
-            trapFocus: true,
-            // Remove buttons
-            infobar: 0,
-            toolbar: 0,
-
-            smallBtn: 0,
-
-            // Disable keyboard navigation
-            keyboard: 0,
-
-            // Disable some modules
-            slideShow: 0,
-            fullScreen: 0,
-            thumbs: 0,
-            touch: 0,
-
-            // Disable click event handlers
-            clickContent: false,
-            clickSlide: false,
-            clickOutside: false,
-            dblclickContent: false,
-            dblclickSlide: false,
-            dblclickOutside: false
-          });
-        }
-
-        // Step 4 - Add processed object to group
-        // ======================================
-
-        self.group.push(obj);
-      });
-
-      // Update controls if gallery is already opened
-      if (Object.keys(self.slides).length) {
-        self.updateControls();
-
-        // Update thumbnails, if needed
-        thumbs = self.Thumbs;
-
-        if (thumbs && thumbs.isActive) {
-          thumbs.create();
-
-          thumbs.focus();
-        }
-      }
-    },
-
-    // Attach an event handler functions for:
-    //   - navigation buttons
-    //   - browser scrolling, resizing;
-    //   - focusing
-    //   - keyboard
-    //   - detecting inactivity
-    // ======================================
-
-    addEvents: function () {
-      var self = this;
-
-      self.removeEvents();
-
-      // Make navigation elements clickable
-      // ==================================
-
-      self.$refs.container
-        .on("click.fb-close", "[data-fancybox-close]", function (e) {
-          e.stopPropagation();
-          e.preventDefault();
-
-          self.close(e);
-        })
-        .on("touchstart.fb-prev click.fb-prev", "[data-fancybox-prev]", function (e) {
-          e.stopPropagation();
-          e.preventDefault();
-
-          self.previous();
-        })
-        .on("touchstart.fb-next click.fb-next", "[data-fancybox-next]", function (e) {
-          e.stopPropagation();
-          e.preventDefault();
-
-          self.next();
-        })
-        .on("click.fb", "[data-fancybox-zoom]", function (e) {
-          // Click handler for zoom button
-          self[self.isScaledDown() ? "scaleToActual" : "scaleToFit"]();
-        });
-
-      // Handle page scrolling and browser resizing
-      // ==========================================
-
-      $W.on("orientationchange.fb resize.fb", function (e) {
-        if (e && e.originalEvent && e.originalEvent.type === "resize") {
-          if (self.requestId) {
-            cancelAFrame(self.requestId);
-          }
-
-          self.requestId = requestAFrame(function () {
-            self.update(e);
-          });
-        } else {
-          if (self.current && self.current.type === "iframe") {
-            self.$refs.stage.hide();
-          }
-
-          setTimeout(
-            function () {
-              self.$refs.stage.show();
-
-              self.update(e);
-            },
-            $.fancybox.isMobile ? 600 : 250
-          );
-        }
-      });
-
-      $D.on("keydown.fb", function (e) {
-        var instance = $.fancybox ? $.fancybox.getInstance() : null,
-          current = instance.current,
-          keycode = e.keyCode || e.which;
-
-        // Trap keyboard focus inside of the modal
-        // =======================================
-
-        if (keycode == 9) {
-          if (current.opts.trapFocus) {
-            self.focus(e);
-          }
-
-          return;
-        }
-
-        // Enable keyboard navigation
-        // ==========================
-
-        if (!current.opts.keyboard || e.ctrlKey || e.altKey || e.shiftKey || $(e.target).is("input,textarea,video,audio,select")) {
-          return;
-        }
-
-        // Backspace and Esc keys
-        if (keycode === 8 || keycode === 27) {
-          e.preventDefault();
-
-          self.close(e);
-
-          return;
-        }
-
-        // Left arrow and Up arrow
-        if (keycode === 37 || keycode === 38) {
-          e.preventDefault();
-
-          self.previous();
-
-          return;
-        }
-
-        // Righ arrow and Down arrow
-        if (keycode === 39 || keycode === 40) {
-          e.preventDefault();
-
-          self.next();
-
-          return;
-        }
-
-        self.trigger("afterKeydown", e, keycode);
-      });
-
-      // Hide controls after some inactivity period
-      if (self.group[self.currIndex].opts.idleTime) {
-        self.idleSecondsCounter = 0;
-
-        $D.on(
-          "mousemove.fb-idle mouseleave.fb-idle mousedown.fb-idle touchstart.fb-idle touchmove.fb-idle scroll.fb-idle keydown.fb-idle",
-          function (e) {
-            self.idleSecondsCounter = 0;
-
-            if (self.isIdle) {
-              self.showControls();
-            }
-
-            self.isIdle = false;
-          }
-        );
-
-        self.idleInterval = window.setInterval(function () {
-          self.idleSecondsCounter++;
-
-          if (self.idleSecondsCounter >= self.group[self.currIndex].opts.idleTime && !self.isDragging) {
-            self.isIdle = true;
-            self.idleSecondsCounter = 0;
-
-            self.hideControls();
-          }
-        }, 1000);
-      }
-    },
-
-    // Remove events added by the core
-    // ===============================
-
-    removeEvents: function () {
-      var self = this;
-
-      $W.off("orientationchange.fb resize.fb");
-      $D.off("keydown.fb .fb-idle");
-
-      this.$refs.container.off(".fb-close .fb-prev .fb-next");
-
-      if (self.idleInterval) {
-        window.clearInterval(self.idleInterval);
-
-        self.idleInterval = null;
-      }
-    },
-
-    // Change to previous gallery item
-    // ===============================
-
-    previous: function (duration) {
-      return this.jumpTo(this.currPos - 1, duration);
-    },
-
-    // Change to next gallery item
-    // ===========================
-
-    next: function (duration) {
-      return this.jumpTo(this.currPos + 1, duration);
-    },
-
-    // Switch to selected gallery item
-    // ===============================
-
-    jumpTo: function (pos, duration) {
-      var self = this,
-        groupLen = self.group.length,
-        firstRun,
-        isMoved,
-        loop,
-        current,
-        previous,
-        slidePos,
-        stagePos,
-        prop,
-        diff;
-
-      if (self.isDragging || self.isClosing || (self.isAnimating && self.firstRun)) {
-        return;
-      }
-
-      // Should loop?
-      pos = parseInt(pos, 10);
-      loop = self.current ? self.current.opts.loop : self.opts.loop;
-
-      if (!loop && (pos < 0 || pos >= groupLen)) {
-        return false;
-      }
-
-      // Check if opening for the first time; this helps to speed things up
-      firstRun = self.firstRun = !Object.keys(self.slides).length;
-
-      // Create slides
-      previous = self.current;
-
-      self.prevIndex = self.currIndex;
-      self.prevPos = self.currPos;
-
-      current = self.createSlide(pos);
-
-      if (groupLen > 1) {
-        if (loop || current.index < groupLen - 1) {
-          self.createSlide(pos + 1);
-        }
-
-        if (loop || current.index > 0) {
-          self.createSlide(pos - 1);
-        }
-      }
-
-      self.current = current;
-      self.currIndex = current.index;
-      self.currPos = current.pos;
-
-      self.trigger("beforeShow", firstRun);
-
-      self.updateControls();
-
-      // Validate duration length
-      current.forcedDuration = undefined;
-
-      if ($.isNumeric(duration)) {
-        current.forcedDuration = duration;
-      } else {
-        duration = current.opts[firstRun ? "animationDuration" : "transitionDuration"];
-      }
-
-      duration = parseInt(duration, 10);
-
-      // Check if user has swiped the slides or if still animating
-      isMoved = self.isMoved(current);
-
-      // Make sure current slide is visible
-      current.$slide.addClass("fancybox-slide--current");
-
-      // Fresh start - reveal container, current slide and start loading content
-      if (firstRun) {
-        if (current.opts.animationEffect && duration) {
-          self.$refs.container.css("transition-duration", duration + "ms");
-        }
-
-        self.$refs.container.addClass("fancybox-is-open").trigger("focus");
-
-        // Attempt to load content into slide
-        // This will later call `afterLoad` -> `revealContent`
-        self.loadSlide(current);
-
-        self.preload("image");
-
-        return;
-      }
-
-      // Get actual slide/stage positions (before cleaning up)
-      slidePos = $.fancybox.getTranslate(previous.$slide);
-      stagePos = $.fancybox.getTranslate(self.$refs.stage);
-
-      // Clean up all slides
-      $.each(self.slides, function (index, slide) {
-        $.fancybox.stop(slide.$slide, true);
-      });
-
-      if (previous.pos !== current.pos) {
-        previous.isComplete = false;
-      }
-
-      previous.$slide.removeClass("fancybox-slide--complete fancybox-slide--current");
-
-      // If slides are out of place, then animate them to correct position
-      if (isMoved) {
-        // Calculate horizontal swipe distance
-        diff = slidePos.left - (previous.pos * slidePos.width + previous.pos * previous.opts.gutter);
-
-        $.each(self.slides, function (index, slide) {
-          slide.$slide.removeClass("fancybox-animated").removeClass(function (index, className) {
-            return (className.match(/(^|\s)fancybox-fx-\S+/g) || []).join(" ");
-          });
-
-          // Make sure that each slide is in equal distance
-          // This is mostly needed for freshly added slides, because they are not yet positioned
-          var leftPos = slide.pos * slidePos.width + slide.pos * slide.opts.gutter;
-
-          $.fancybox.setTranslate(slide.$slide, {
-            top: 0,
-            left: leftPos - stagePos.left + diff
-          });
-
-          if (slide.pos !== current.pos) {
-            slide.$slide.addClass("fancybox-slide--" + (slide.pos > current.pos ? "next" : "previous"));
-          }
-
-          // Redraw to make sure that transition will start
-          forceRedraw(slide.$slide);
-
-          // Animate the slide
-          $.fancybox.animate(
-            slide.$slide, {
-              top: 0,
-              left: (slide.pos - current.pos) * slidePos.width + (slide.pos - current.pos) * slide.opts.gutter
-            },
-            duration,
-            function () {
-              slide.$slide
-                .css({
-                  transform: "",
-                  opacity: ""
-                })
-                .removeClass("fancybox-slide--next fancybox-slide--previous");
-
-              if (slide.pos === self.currPos) {
-                self.complete();
-              }
-            }
-          );
-        });
-      } else if (duration && current.opts.transitionEffect) {
-        // Set transition effect for previously active slide
-        prop = "fancybox-animated fancybox-fx-" + current.opts.transitionEffect;
-
-        previous.$slide.addClass("fancybox-slide--" + (previous.pos > current.pos ? "next" : "previous"));
-
-        $.fancybox.animate(
-          previous.$slide,
-          prop,
-          duration,
-          function () {
-            previous.$slide.removeClass(prop).removeClass("fancybox-slide--next fancybox-slide--previous");
-          },
-          false
-        );
-      }
-
-      if (current.isLoaded) {
-        self.revealContent(current);
-      } else {
-        self.loadSlide(current);
-      }
-
-      self.preload("image");
-    },
-
-    // Create new "slide" element
-    // These are gallery items  that are actually added to DOM
-    // =======================================================
-
-    createSlide: function (pos) {
-      var self = this,
-        $slide,
-        index;
-
-      index = pos % self.group.length;
-      index = index < 0 ? self.group.length + index : index;
-
-      if (!self.slides[pos] && self.group[index]) {
-        $slide = $('<div class="fancybox-slide"></div>').appendTo(self.$refs.stage);
-
-        self.slides[pos] = $.extend(true, {}, self.group[index], {
-          pos: pos,
-          $slide: $slide,
-          isLoaded: false
-        });
-
-        self.updateSlide(self.slides[pos]);
-      }
-
-      return self.slides[pos];
-    },
-
-    // Scale image to the actual size of the image;
-    // x and y values should be relative to the slide
-    // ==============================================
-
-    scaleToActual: function (x, y, duration) {
-      var self = this,
-        current = self.current,
-        $content = current.$content,
-        canvasWidth = $.fancybox.getTranslate(current.$slide).width,
-        canvasHeight = $.fancybox.getTranslate(current.$slide).height,
-        newImgWidth = current.width,
-        newImgHeight = current.height,
-        imgPos,
-        posX,
-        posY,
-        scaleX,
-        scaleY;
-
-      if (self.isAnimating || self.isMoved() || !$content || !(current.type == "image" && current.isLoaded && !current.hasError)) {
-        return;
-      }
-
-      self.isAnimating = true;
-
-      $.fancybox.stop($content);
-
-      x = x === undefined ? canvasWidth * 0.5 : x;
-      y = y === undefined ? canvasHeight * 0.5 : y;
-
-      imgPos = $.fancybox.getTranslate($content);
-
-      imgPos.top -= $.fancybox.getTranslate(current.$slide).top;
-      imgPos.left -= $.fancybox.getTranslate(current.$slide).left;
-
-      scaleX = newImgWidth / imgPos.width;
-      scaleY = newImgHeight / imgPos.height;
-
-      // Get center position for original image
-      posX = canvasWidth * 0.5 - newImgWidth * 0.5;
-      posY = canvasHeight * 0.5 - newImgHeight * 0.5;
-
-      // Make sure image does not move away from edges
-      if (newImgWidth > canvasWidth) {
-        posX = imgPos.left * scaleX - (x * scaleX - x);
-
-        if (posX > 0) {
-          posX = 0;
-        }
-
-        if (posX < canvasWidth - newImgWidth) {
-          posX = canvasWidth - newImgWidth;
-        }
-      }
-
-      if (newImgHeight > canvasHeight) {
-        posY = imgPos.top * scaleY - (y * scaleY - y);
-
-        if (posY > 0) {
-          posY = 0;
-        }
-
-        if (posY < canvasHeight - newImgHeight) {
-          posY = canvasHeight - newImgHeight;
-        }
-      }
-
-      self.updateCursor(newImgWidth, newImgHeight);
-
-      $.fancybox.animate(
-        $content, {
-          top: posY,
-          left: posX,
-          scaleX: scaleX,
-          scaleY: scaleY
-        },
-        duration || 366,
-        function () {
-          self.isAnimating = false;
-        }
-      );
-
-      // Stop slideshow
-      if (self.SlideShow && self.SlideShow.isActive) {
-        self.SlideShow.stop();
-      }
-    },
-
-    // Scale image to fit inside parent element
-    // ========================================
-
-    scaleToFit: function (duration) {
-      var self = this,
-        current = self.current,
-        $content = current.$content,
-        end;
-
-      if (self.isAnimating || self.isMoved() || !$content || !(current.type == "image" && current.isLoaded && !current.hasError)) {
-        return;
-      }
-
-      self.isAnimating = true;
-
-      $.fancybox.stop($content);
-
-      end = self.getFitPos(current);
-
-      self.updateCursor(end.width, end.height);
-
-      $.fancybox.animate(
-        $content, {
-          top: end.top,
-          left: end.left,
-          scaleX: end.width / $content.width(),
-          scaleY: end.height / $content.height()
-        },
-        duration || 366,
-        function () {
-          self.isAnimating = false;
-        }
-      );
-    },
-
-    // Calculate image size to fit inside viewport
-    // ===========================================
-
-    getFitPos: function (slide) {
-      var self = this,
-        $content = slide.$content,
-        $slide = slide.$slide,
-        width = slide.width || slide.opts.width,
-        height = slide.height || slide.opts.height,
-        maxWidth,
-        maxHeight,
-        minRatio,
-        aspectRatio,
-        rez = {};
-
-      if (!slide.isLoaded || !$content || !$content.length) {
-        return false;
-      }
-
-      maxWidth = $.fancybox.getTranslate(self.$refs.stage).width;
-      maxHeight = $.fancybox.getTranslate(self.$refs.stage).height;
-
-      maxWidth -=
-        parseFloat($slide.css("paddingLeft")) +
-        parseFloat($slide.css("paddingRight")) +
-        parseFloat($content.css("marginLeft")) +
-        parseFloat($content.css("marginRight"));
-
-      maxHeight -=
-        parseFloat($slide.css("paddingTop")) +
-        parseFloat($slide.css("paddingBottom")) +
-        parseFloat($content.css("marginTop")) +
-        parseFloat($content.css("marginBottom"));
-
-      if (!width || !height) {
-        width = maxWidth;
-        height = maxHeight;
-      }
-
-      minRatio = Math.min(1, maxWidth / width, maxHeight / height);
-
-      width = minRatio * width;
-      height = minRatio * height;
-
-      // Adjust width/height to precisely fit into container
-      if (width > maxWidth - 0.5) {
-        width = maxWidth;
-      }
-
-      if (height > maxHeight - 0.5) {
-        height = maxHeight;
-      }
-
-      if (slide.type === "image") {
-        rez.top = Math.floor((maxHeight - height) * 0.5) + parseFloat($slide.css("paddingTop"));
-        rez.left = Math.floor((maxWidth - width) * 0.5) + parseFloat($slide.css("paddingLeft"));
-      } else if (slide.contentType === "video") {
-        // Force aspect ratio for the video
-        // "I say the whole world must learn of our peaceful ways… by force!"
-        aspectRatio = slide.opts.width && slide.opts.height ? width / height : slide.opts.ratio || 16 / 9;
-
-        if (height > width / aspectRatio) {
-          height = width / aspectRatio;
-        } else if (width > height * aspectRatio) {
-          width = height * aspectRatio;
-        }
-      }
-
-      rez.width = width;
-      rez.height = height;
-
-      return rez;
-    },
-
-    // Update content size and position for all slides
-    // ==============================================
-
-    update: function (e) {
-      var self = this;
-
-      $.each(self.slides, function (key, slide) {
-        self.updateSlide(slide, e);
-      });
-    },
-
-    // Update slide content position and size
-    // ======================================
-
-    updateSlide: function (slide, e) {
-      var self = this,
-        $content = slide && slide.$content,
-        width = slide.width || slide.opts.width,
-        height = slide.height || slide.opts.height,
-        $slide = slide.$slide;
-
-      // First, prevent caption overlap, if needed
-      self.adjustCaption(slide);
-
-      // Then resize content to fit inside the slide
-      if ($content && (width || height || slide.contentType === "video") && !slide.hasError) {
-        $.fancybox.stop($content);
-
-        $.fancybox.setTranslate($content, self.getFitPos(slide));
-
-        if (slide.pos === self.currPos) {
-          self.isAnimating = false;
-
-          self.updateCursor();
-        }
-      }
-
-      // Then some adjustments
-      self.adjustLayout(slide);
-
-      if ($slide.length) {
-        $slide.trigger("refresh");
-
-        if (slide.pos === self.currPos) {
-          self.$refs.toolbar
-            .add(self.$refs.navigation.find(".fancybox-button--arrow_right"))
-            .toggleClass("compensate-for-scrollbar", $slide.get(0).scrollHeight > $slide.get(0).clientHeight);
-        }
-      }
-
-      self.trigger("onUpdate", slide, e);
-    },
-
-    // Horizontally center slide
-    // =========================
-
-    centerSlide: function (duration) {
-      var self = this,
-        current = self.current,
-        $slide = current.$slide;
-
-      if (self.isClosing || !current) {
-        return;
-      }
-
-      $slide.siblings().css({
-        transform: "",
-        opacity: ""
-      });
-
-      $slide
-        .parent()
-        .children()
-        .removeClass("fancybox-slide--previous fancybox-slide--next");
-
-      $.fancybox.animate(
-        $slide, {
-          top: 0,
-          left: 0,
-          opacity: 1
-        },
-        duration === undefined ? 0 : duration,
-        function () {
-          // Clean up
-          $slide.css({
-            transform: "",
-            opacity: ""
-          });
-
-          if (!current.isComplete) {
-            self.complete();
-          }
-        },
-        false
-      );
-    },
-
-    // Check if current slide is moved (swiped)
-    // ========================================
-
-    isMoved: function (slide) {
-      var current = slide || this.current,
-        slidePos,
-        stagePos;
-
-      if (!current) {
-        return false;
-      }
-
-      stagePos = $.fancybox.getTranslate(this.$refs.stage);
-      slidePos = $.fancybox.getTranslate(current.$slide);
-
-      return (
-        !current.$slide.hasClass("fancybox-animated") &&
-        (Math.abs(slidePos.top - stagePos.top) > 0.5 || Math.abs(slidePos.left - stagePos.left) > 0.5)
-      );
-    },
-
-    // Update cursor style depending if content can be zoomed
-    // ======================================================
-
-    updateCursor: function (nextWidth, nextHeight) {
-      var self = this,
-        current = self.current,
-        $container = self.$refs.container,
-        canPan,
-        isZoomable;
-
-      if (!current || self.isClosing || !self.Guestures) {
-        return;
-      }
-
-      $container.removeClass("fancybox-is-zoomable fancybox-can-zoomIn fancybox-can-zoomOut fancybox-can-swipe fancybox-can-pan");
-
-      canPan = self.canPan(nextWidth, nextHeight);
-
-      isZoomable = canPan ? true : self.isZoomable();
-
-      $container.toggleClass("fancybox-is-zoomable", isZoomable);
-
-      $("[data-fancybox-zoom]").prop("disabled", !isZoomable);
-
-      if (canPan) {
-        $container.addClass("fancybox-can-pan");
-      } else if (
-        isZoomable &&
-        (current.opts.clickContent === "zoom" || ($.isFunction(current.opts.clickContent) && current.opts.clickContent(current) == "zoom"))
-      ) {
-        $container.addClass("fancybox-can-zoomIn");
-      } else if (current.opts.touch && (current.opts.touch.vertical || self.group.length > 1) && current.contentType !== "video") {
-        $container.addClass("fancybox-can-swipe");
-      }
-    },
-
-    // Check if current slide is zoomable
-    // ==================================
-
-    isZoomable: function () {
-      var self = this,
-        current = self.current,
-        fitPos;
-
-      // Assume that slide is zoomable if:
-      //   - image is still loading
-      //   - actual size of the image is smaller than available area
-      if (current && !self.isClosing && current.type === "image" && !current.hasError) {
-        if (!current.isLoaded) {
-          return true;
-        }
-
-        fitPos = self.getFitPos(current);
-
-        if (fitPos && (current.width > fitPos.width || current.height > fitPos.height)) {
-          return true;
-        }
-      }
-
-      return false;
-    },
-
-    // Check if current image dimensions are smaller than actual
-    // =========================================================
-
-    isScaledDown: function (nextWidth, nextHeight) {
-      var self = this,
-        rez = false,
-        current = self.current,
-        $content = current.$content;
-
-      if (nextWidth !== undefined && nextHeight !== undefined) {
-        rez = nextWidth < current.width && nextHeight < current.height;
-      } else if ($content) {
-        rez = $.fancybox.getTranslate($content);
-        rez = rez.width < current.width && rez.height < current.height;
-      }
-
-      return rez;
-    },
-
-    // Check if image dimensions exceed parent element
-    // ===============================================
-
-    canPan: function (nextWidth, nextHeight) {
-      var self = this,
-        current = self.current,
-        pos = null,
-        rez = false;
-
-      if (current.type === "image" && (current.isComplete || (nextWidth && nextHeight)) && !current.hasError) {
-        rez = self.getFitPos(current);
-
-        if (nextWidth !== undefined && nextHeight !== undefined) {
-          pos = {
-            width: nextWidth,
-            height: nextHeight
-          };
-        } else if (current.isComplete) {
-          pos = $.fancybox.getTranslate(current.$content);
-        }
-
-        if (pos && rez) {
-          rez = Math.abs(pos.width - rez.width) > 1.5 || Math.abs(pos.height - rez.height) > 1.5;
-        }
-      }
-
-      return rez;
-    },
-
-    // Load content into the slide
-    // ===========================
-
-    loadSlide: function (slide) {
-      var self = this,
-        type,
-        $slide,
-        ajaxLoad;
-
-      if (slide.isLoading || slide.isLoaded) {
-        return;
-      }
-
-      slide.isLoading = true;
-
-      if (self.trigger("beforeLoad", slide) === false) {
-        slide.isLoading = false;
-
-        return false;
-      }
-
-      type = slide.type;
-      $slide = slide.$slide;
-
-      $slide
-        .off("refresh")
-        .trigger("onReset")
-        .addClass(slide.opts.slideClass);
-
-      // Create content depending on the type
-      switch (type) {
-        case "image":
-          self.setImage(slide);
-
-          break;
-
-        case "iframe":
-          self.setIframe(slide);
-
-          break;
-
-        case "html":
-          self.setContent(slide, slide.src || slide.content);
-
-          break;
-
-        case "video":
-          self.setContent(
-            slide,
-            slide.opts.video.tpl
-            .replace(/\{\{src\}\}/gi, slide.src)
-            .replace("{{format}}", slide.opts.videoFormat || slide.opts.video.format || "")
-            .replace("{{poster}}", slide.thumb || "")
-          );
-
-          break;
-
-        case "inline":
-          if ($(slide.src).length) {
-            self.setContent(slide, $(slide.src));
-          } else {
-            self.setError(slide);
-          }
-
-          break;
-
-        case "ajax":
-          self.showLoading(slide);
-
-          ajaxLoad = $.ajax(
-            $.extend({}, slide.opts.ajax.settings, {
-              url: slide.src,
-              success: function (data, textStatus) {
-                if (textStatus === "success") {
-                  self.setContent(slide, data);
-                }
-              },
-              error: function (jqXHR, textStatus) {
-                if (jqXHR && textStatus !== "abort") {
-                  self.setError(slide);
-                }
-              }
-            })
-          );
-
-          $slide.one("onReset", function () {
-            ajaxLoad.abort();
-          });
-
-          break;
-
-        default:
-          self.setError(slide);
-
-          break;
-      }
-
-      return true;
-    },
-
-    // Use thumbnail image, if possible
-    // ================================
-
-    setImage: function (slide) {
-      var self = this,
-        ghost;
-
-      // Check if need to show loading icon
-      setTimeout(function () {
-        var $img = slide.$image;
-
-        if (!self.isClosing && slide.isLoading && (!$img || !$img.length || !$img[0].complete) && !slide.hasError) {
-          self.showLoading(slide);
-        }
-      }, 50);
-
-      //Check if image has srcset
-      self.checkSrcset(slide);
-
-      // This will be wrapper containing both ghost and actual image
-      slide.$content = $('<div class="fancybox-content"></div>')
-        .addClass("fancybox-is-hidden")
-        .appendTo(slide.$slide.addClass("fancybox-slide--image"));
-
-      // If we have a thumbnail, we can display it while actual image is loading
-      // Users will not stare at black screen and actual image will appear gradually
-      if (slide.opts.preload !== false && slide.opts.width && slide.opts.height && slide.thumb) {
-        slide.width = slide.opts.width;
-        slide.height = slide.opts.height;
-
-        ghost = document.createElement("img");
-
-        ghost.onerror = function () {
-          $(this).remove();
-
-          slide.$ghost = null;
-        };
-
-        ghost.onload = function () {
-          self.afterLoad(slide);
-        };
-
-        slide.$ghost = $(ghost)
-          .addClass("fancybox-image")
-          .appendTo(slide.$content)
-          .attr("src", slide.thumb);
-      }
-
-      // Start loading actual image
-      self.setBigImage(slide);
-    },
-
-    // Check if image has srcset and get the source
-    // ============================================
-    checkSrcset: function (slide) {
-      var srcset = slide.opts.srcset || slide.opts.image.srcset,
-        found,
-        temp,
-        pxRatio,
-        windowWidth;
-
-      // If we have "srcset", then we need to find first matching "src" value.
-      // This is necessary, because when you set an src attribute, the browser will preload the image
-      // before any javascript or even CSS is applied.
-      if (srcset) {
-        pxRatio = window.devicePixelRatio || 1;
-        windowWidth = window.innerWidth * pxRatio;
-
-        temp = srcset.split(",").map(function (el) {
-          var ret = {};
-
-          el.trim()
-            .split(/\s+/)
-            .forEach(function (el, i) {
-              var value = parseInt(el.substring(0, el.length - 1), 10);
-
-              if (i === 0) {
-                return (ret.url = el);
-              }
-
-              if (value) {
-                ret.value = value;
-                ret.postfix = el[el.length - 1];
-              }
-            });
-
-          return ret;
-        });
-
-        // Sort by value
-        temp.sort(function (a, b) {
-          return a.value - b.value;
-        });
-
-        // Ok, now we have an array of all srcset values
-        for (var j = 0; j < temp.length; j++) {
-          var el = temp[j];
-
-          if ((el.postfix === "w" && el.value >= windowWidth) || (el.postfix === "x" && el.value >= pxRatio)) {
-            found = el;
-            break;
-          }
-        }
-
-        // If not found, take the last one
-        if (!found && temp.length) {
-          found = temp[temp.length - 1];
-        }
-
-        if (found) {
-          slide.src = found.url;
-
-          // If we have default width/height values, we can calculate height for matching source
-          if (slide.width && slide.height && found.postfix == "w") {
-            slide.height = (slide.width / slide.height) * found.value;
-            slide.width = found.value;
-          }
-
-          slide.opts.srcset = srcset;
-        }
-      }
-    },
-
-    // Create full-size image
-    // ======================
-
-    setBigImage: function (slide) {
-      var self = this,
-        img = document.createElement("img"),
-        $img = $(img);
-
-      slide.$image = $img
-        .one("error", function () {
-          self.setError(slide);
-        })
-        .one("load", function () {
-          var sizes;
-
-          if (!slide.$ghost) {
-            self.resolveImageSlideSize(slide, this.naturalWidth, this.naturalHeight);
-
-            self.afterLoad(slide);
-          }
-
-          if (self.isClosing) {
-            return;
-          }
-
-          if (slide.opts.srcset) {
-            sizes = slide.opts.sizes;
-
-            if (!sizes || sizes === "auto") {
-              sizes =
-                (slide.width / slide.height > 1 && $W.width() / $W.height() > 1 ? "100" : Math.round((slide.width / slide.height) * 100)) +
-                "vw";
-            }
-
-            $img.attr("sizes", sizes).attr("srcset", slide.opts.srcset);
-          }
-
-          // Hide temporary image after some delay
-          if (slide.$ghost) {
-            setTimeout(function () {
-              if (slide.$ghost && !self.isClosing) {
-                slide.$ghost.hide();
-              }
-            }, Math.min(300, Math.max(1000, slide.height / 1600)));
-          }
-
-          self.hideLoading(slide);
-        })
-        .addClass("fancybox-image")
-        .attr("src", slide.src)
-        .appendTo(slide.$content);
-
-      if ((img.complete || img.readyState == "complete") && $img.naturalWidth && $img.naturalHeight) {
-        $img.trigger("load");
-      } else if (img.error) {
-        $img.trigger("error");
-      }
-    },
-
-    // Computes the slide size from image size and maxWidth/maxHeight
-    // ==============================================================
-
-    resolveImageSlideSize: function (slide, imgWidth, imgHeight) {
-      var maxWidth = parseInt(slide.opts.width, 10),
-        maxHeight = parseInt(slide.opts.height, 10);
-
-      // Sets the default values from the image
-      slide.width = imgWidth;
-      slide.height = imgHeight;
-
-      if (maxWidth > 0) {
-        slide.width = maxWidth;
-        slide.height = Math.floor((maxWidth * imgHeight) / imgWidth);
-      }
-
-      if (maxHeight > 0) {
-        slide.width = Math.floor((maxHeight * imgWidth) / imgHeight);
-        slide.height = maxHeight;
-      }
-    },
-
-    // Create iframe wrapper, iframe and bindings
-    // ==========================================
-
-    setIframe: function (slide) {
-      var self = this,
-        opts = slide.opts.iframe,
-        $slide = slide.$slide,
-        $iframe;
-
-      slide.$content = $('<div class="fancybox-content' + (opts.preload ? " fancybox-is-hidden" : "") + '"></div>')
-        .css(opts.css)
-        .appendTo($slide);
-
-      $slide.addClass("fancybox-slide--" + slide.contentType);
-
-      slide.$iframe = $iframe = $(opts.tpl.replace(/\{rnd\}/g, new Date().getTime()))
-        .attr(opts.attr)
-        .appendTo(slide.$content);
-
-      if (opts.preload) {
-        self.showLoading(slide);
-
-        // Unfortunately, it is not always possible to determine if iframe is successfully loaded
-        // (due to browser security policy)
-
-        $iframe.on("load.fb error.fb", function (e) {
-          this.isReady = 1;
-
-          slide.$slide.trigger("refresh");
-
-          self.afterLoad(slide);
-        });
-
-        // Recalculate iframe content size
-        // ===============================
-
-        $slide.on("refresh.fb", function () {
-          var $content = slide.$content,
-            frameWidth = opts.css.width,
-            frameHeight = opts.css.height,
-            $contents,
-            $body;
-
-          if ($iframe[0].isReady !== 1) {
-            return;
-          }
-
-          try {
-            $contents = $iframe.contents();
-            $body = $contents.find("body");
-          } catch (ignore) {}
-
-          // Calculate content dimensions, if it is accessible
-          if ($body && $body.length && $body.children().length) {
-            // Avoid scrolling to top (if multiple instances)
-            $slide.css("overflow", "visible");
-
-            $content.css({
-              width: "100%",
-              "max-width": "100%",
-              height: "9999px"
-            });
-
-            if (frameWidth === undefined) {
-              frameWidth = Math.ceil(Math.max($body[0].clientWidth, $body.outerWidth(true)));
-            }
-
-            $content.css("width", frameWidth ? frameWidth : "").css("max-width", "");
-
-            if (frameHeight === undefined) {
-              frameHeight = Math.ceil(Math.max($body[0].clientHeight, $body.outerHeight(true)));
-            }
-
-            $content.css("height", frameHeight ? frameHeight : "");
-
-            $slide.css("overflow", "auto");
-          }
-
-          $content.removeClass("fancybox-is-hidden");
-        });
-      } else {
-        self.afterLoad(slide);
-      }
-
-      $iframe.attr("src", slide.src);
-
-      // Remove iframe if closing or changing gallery item
-      $slide.one("onReset", function () {
-        // This helps IE not to throw errors when closing
-        try {
-          $(this)
-            .find("iframe")
-            .hide()
-            .unbind()
-            .attr("src", "//about:blank");
-        } catch (ignore) {}
-
-        $(this)
-          .off("refresh.fb")
-          .empty();
-
-        slide.isLoaded = false;
-        slide.isRevealed = false;
-      });
-    },
-
-    // Wrap and append content to the slide
-    // ======================================
-
-    setContent: function (slide, content) {
-      var self = this;
-
-      if (self.isClosing) {
-        return;
-      }
-
-      self.hideLoading(slide);
-
-      if (slide.$content) {
-        $.fancybox.stop(slide.$content);
-      }
-
-      slide.$slide.empty();
-
-      // If content is a jQuery object, then it will be moved to the slide.
-      // The placeholder is created so we will know where to put it back.
-      if (isQuery(content) && content.parent().length) {
-        // Make sure content is not already moved to fancyBox
-        if (content.hasClass("fancybox-content") || content.parent().hasClass("fancybox-content")) {
-          content.parents(".fancybox-slide").trigger("onReset");
-        }
-
-        // Create temporary element marking original place of the content
-        slide.$placeholder = $("<div>")
-          .hide()
-          .insertAfter(content);
-
-        // Make sure content is visible
-        content.css("display", "inline-block");
-      } else if (!slide.hasError) {
-        // If content is just a plain text, try to convert it to html
-        if ($.type(content) === "string") {
-          content = $("<div>")
-            .append($.trim(content))
-            .contents();
-        }
-
-        // If "filter" option is provided, then filter content
-        if (slide.opts.filter) {
-          content = $("<div>")
-            .html(content)
-            .find(slide.opts.filter);
-        }
-      }
-
-      slide.$slide.one("onReset", function () {
-        // Pause all html5 video/audio
-        $(this)
-          .find("video,audio")
-          .trigger("pause");
-
-        // Put content back
-        if (slide.$placeholder) {
-          slide.$placeholder.after(content.removeClass("fancybox-content").hide()).remove();
-
-          slide.$placeholder = null;
-        }
-
-        // Remove custom close button
-        if (slide.$smallBtn) {
-          slide.$smallBtn.remove();
-
-          slide.$smallBtn = null;
-        }
-
-        // Remove content and mark slide as not loaded
-        if (!slide.hasError) {
-          $(this).empty();
-
-          slide.isLoaded = false;
-          slide.isRevealed = false;
-        }
-      });
-
-      $(content).appendTo(slide.$slide);
-
-      if ($(content).is("video,audio")) {
-        $(content).addClass("fancybox-video");
-
-        $(content).wrap("<div></div>");
-
-        slide.contentType = "video";
-
-        slide.opts.width = slide.opts.width || $(content).attr("width");
-        slide.opts.height = slide.opts.height || $(content).attr("height");
-      }
-
-      slide.$content = slide.$slide
-        .children()
-        .filter("div,form,main,video,audio,article,.fancybox-content")
-        .first();
-
-      slide.$content.siblings().hide();
-
-      // Re-check if there is a valid content
-      // (in some cases, ajax response can contain various elements or plain text)
-      if (!slide.$content.length) {
-        slide.$content = slide.$slide
-          .wrapInner("<div></div>")
-          .children()
-          .first();
-      }
-
-      slide.$content.addClass("fancybox-content");
-
-      slide.$slide.addClass("fancybox-slide--" + slide.contentType);
-
-      self.afterLoad(slide);
-    },
-
-    // Display error message
-    // =====================
-
-    setError: function (slide) {
-      slide.hasError = true;
-
-      slide.$slide
-        .trigger("onReset")
-        .removeClass("fancybox-slide--" + slide.contentType)
-        .addClass("fancybox-slide--error");
-
-      slide.contentType = "html";
-
-      this.setContent(slide, this.translate(slide, slide.opts.errorTpl));
-
-      if (slide.pos === this.currPos) {
-        this.isAnimating = false;
-      }
-    },
-
-    // Show loading icon inside the slide
-    // ==================================
-
-    showLoading: function (slide) {
-      var self = this;
-
-      slide = slide || self.current;
-
-      if (slide && !slide.$spinner) {
-        slide.$spinner = $(self.translate(self, self.opts.spinnerTpl))
-          .appendTo(slide.$slide)
-          .hide()
-          .fadeIn("fast");
-      }
-    },
-
-    // Remove loading icon from the slide
-    // ==================================
-
-    hideLoading: function (slide) {
-      var self = this;
-
-      slide = slide || self.current;
-
-      if (slide && slide.$spinner) {
-        slide.$spinner.stop().remove();
-
-        delete slide.$spinner;
-      }
-    },
-
-    // Adjustments after slide content has been loaded
-    // ===============================================
-
-    afterLoad: function (slide) {
-      var self = this;
-
-      if (self.isClosing) {
-        return;
-      }
-
-      slide.isLoading = false;
-      slide.isLoaded = true;
-
-      self.trigger("afterLoad", slide);
-
-      self.hideLoading(slide);
-
-      // Add small close button
-      if (slide.opts.smallBtn && (!slide.$smallBtn || !slide.$smallBtn.length)) {
-        slide.$smallBtn = $(self.translate(slide, slide.opts.btnTpl.smallBtn)).appendTo(slide.$content);
-      }
-
-      // Disable right click
-      if (slide.opts.protect && slide.$content && !slide.hasError) {
-        slide.$content.on("contextmenu.fb", function (e) {
-          if (e.button == 2) {
-            e.preventDefault();
-          }
-
-          return true;
-        });
-
-        // Add fake element on top of the image
-        // This makes a bit harder for user to select image
-        if (slide.type === "image") {
-          $('<div class="fancybox-spaceball"></div>').appendTo(slide.$content);
-        }
-      }
-
-      self.adjustCaption(slide);
-
-      self.adjustLayout(slide);
-
-      if (slide.pos === self.currPos) {
-        self.updateCursor();
-      }
-
-      self.revealContent(slide);
-    },
-
-    // Prevent caption overlap,
-    // fix css inconsistency across browsers
-    // =====================================
-
-    adjustCaption: function (slide) {
-      var self = this,
-        current = slide || self.current,
-        caption = current.opts.caption,
-        preventOverlap = current.opts.preventCaptionOverlap,
-        $caption = self.$refs.caption,
-        $clone,
-        captionH = false;
-
-      $caption.toggleClass("fancybox-caption--separate", preventOverlap);
-
-      if (preventOverlap && caption && caption.length) {
-        if (current.pos !== self.currPos) {
-          $clone = $caption.clone().appendTo($caption.parent());
-
-          $clone
-            .children()
-            .eq(0)
-            .empty()
-            .html(caption);
-
-          captionH = $clone.outerHeight(true);
-
-          $clone.empty().remove();
-        } else if (self.$caption) {
-          captionH = self.$caption.outerHeight(true);
-        }
-
-        current.$slide.css("padding-bottom", captionH || "");
-      }
-    },
-
-    // Simple hack to fix inconsistency across browsers, described here (affects Edge, too):
-    // https://bugzilla.mozilla.org/show_bug.cgi?id=748518
-    // ====================================================================================
-
-    adjustLayout: function (slide) {
-      var self = this,
-        current = slide || self.current,
-        scrollHeight,
-        marginBottom,
-        inlinePadding,
-        actualPadding;
-
-      if (current.isLoaded && current.opts.disableLayoutFix !== true) {
-        current.$content.css("margin-bottom", "");
-
-        // If we would always set margin-bottom for the content,
-        // then it would potentially break vertical align
-        if (current.$content.outerHeight() > current.$slide.height() + 0.5) {
-          inlinePadding = current.$slide[0].style["padding-bottom"];
-          actualPadding = current.$slide.css("padding-bottom");
-
-          if (parseFloat(actualPadding) > 0) {
-            scrollHeight = current.$slide[0].scrollHeight;
-
-            current.$slide.css("padding-bottom", 0);
-
-            if (Math.abs(scrollHeight - current.$slide[0].scrollHeight) < 1) {
-              marginBottom = actualPadding;
-            }
-
-            current.$slide.css("padding-bottom", inlinePadding);
-          }
-        }
-
-        current.$content.css("margin-bottom", marginBottom);
-      }
-    },
-
-    // Make content visible
-    // This method is called right after content has been loaded or
-    // user navigates gallery and transition should start
-    // ============================================================
-
-    revealContent: function (slide) {
-      var self = this,
-        $slide = slide.$slide,
-        end = false,
-        start = false,
-        isMoved = self.isMoved(slide),
-        isRevealed = slide.isRevealed,
-        effect,
-        effectClassName,
-        duration,
-        opacity;
-
-      slide.isRevealed = true;
-
-      effect = slide.opts[self.firstRun ? "animationEffect" : "transitionEffect"];
-      duration = slide.opts[self.firstRun ? "animationDuration" : "transitionDuration"];
-
-      duration = parseInt(slide.forcedDuration === undefined ? duration : slide.forcedDuration, 10);
-
-      if (isMoved || slide.pos !== self.currPos || !duration) {
-        effect = false;
-      }
-
-      // Check if can zoom
-      if (effect === "zoom") {
-        if (slide.pos === self.currPos && duration && slide.type === "image" && !slide.hasError && (start = self.getThumbPos(slide))) {
-          end = self.getFitPos(slide);
-        } else {
-          effect = "fade";
-        }
-      }
-
-      // Zoom animation
-      // ==============
-      if (effect === "zoom") {
-        self.isAnimating = true;
-
-        end.scaleX = end.width / start.width;
-        end.scaleY = end.height / start.height;
-
-        // Check if we need to animate opacity
-        opacity = slide.opts.zoomOpacity;
-
-        if (opacity == "auto") {
-          opacity = Math.abs(slide.width / slide.height - start.width / start.height) > 0.1;
-        }
-
-        if (opacity) {
-          start.opacity = 0.1;
-          end.opacity = 1;
-        }
-
-        // Draw image at start position
-        $.fancybox.setTranslate(slide.$content.removeClass("fancybox-is-hidden"), start);
-
-        forceRedraw(slide.$content);
-
-        // Start animation
-        $.fancybox.animate(slide.$content, end, duration, function () {
-          self.isAnimating = false;
-
-          self.complete();
-        });
-
-        return;
-      }
-
-      self.updateSlide(slide);
-
-      // Simply show content if no effect
-      // ================================
-      if (!effect) {
-        slide.$content.removeClass("fancybox-is-hidden");
-
-        if (!isRevealed && isMoved && slide.type === "image" && !slide.hasError) {
-          slide.$content.hide().fadeIn("fast");
-        }
-
-        if (slide.pos === self.currPos) {
-          self.complete();
-        }
-
-        return;
-      }
-
-      // Prepare for CSS transiton
-      // =========================
-      $.fancybox.stop($slide);
-
-      //effectClassName = "fancybox-animated fancybox-slide--" + (slide.pos >= self.prevPos ? "next" : "previous") + " fancybox-fx-" + effect;
-      effectClassName = "fancybox-slide--" + (slide.pos >= self.prevPos ? "next" : "previous") + " fancybox-animated fancybox-fx-" + effect;
-
-      $slide.addClass(effectClassName).removeClass("fancybox-slide--current"); //.addClass(effectClassName);
-
-      slide.$content.removeClass("fancybox-is-hidden");
-
-      // Force reflow
-      forceRedraw($slide);
-
-      if (slide.type !== "image") {
-        slide.$content.hide().show(0);
-      }
-
-      $.fancybox.animate(
-        $slide,
-        "fancybox-slide--current",
-        duration,
-        function () {
-          $slide.removeClass(effectClassName).css({
-            transform: "",
-            opacity: ""
-          });
-
-          if (slide.pos === self.currPos) {
-            self.complete();
-          }
-        },
-        true
-      );
-    },
-
-    // Check if we can and have to zoom from thumbnail
-    //================================================
-
-    getThumbPos: function (slide) {
-      var rez = false,
-        $thumb = slide.$thumb,
-        thumbPos,
-        btw,
-        brw,
-        bbw,
-        blw;
-
-      if (!$thumb || !inViewport($thumb[0])) {
-        return false;
-      }
-
-      thumbPos = $.fancybox.getTranslate($thumb);
-
-      btw = parseFloat($thumb.css("border-top-width") || 0);
-      brw = parseFloat($thumb.css("border-right-width") || 0);
-      bbw = parseFloat($thumb.css("border-bottom-width") || 0);
-      blw = parseFloat($thumb.css("border-left-width") || 0);
-
-      rez = {
-        top: thumbPos.top + btw,
-        left: thumbPos.left + blw,
-        width: thumbPos.width - brw - blw,
-        height: thumbPos.height - btw - bbw,
-        scaleX: 1,
-        scaleY: 1
-      };
-
-      return thumbPos.width > 0 && thumbPos.height > 0 ? rez : false;
-    },
-
-    // Final adjustments after current gallery item is moved to position
-    // and it`s content is loaded
-    // ==================================================================
-
-    complete: function () {
-      var self = this,
-        current = self.current,
-        slides = {},
-        $el;
-
-      if (self.isMoved() || !current.isLoaded) {
-        return;
-      }
-
-      if (!current.isComplete) {
-        current.isComplete = true;
-
-        current.$slide.siblings().trigger("onReset");
-
-        self.preload("inline");
-
-        // Trigger any CSS transiton inside the slide
-        forceRedraw(current.$slide);
-
-        current.$slide.addClass("fancybox-slide--complete");
-
-        // Remove unnecessary slides
-        $.each(self.slides, function (key, slide) {
-          if (slide.pos >= self.currPos - 1 && slide.pos <= self.currPos + 1) {
-            slides[slide.pos] = slide;
-          } else if (slide) {
-            $.fancybox.stop(slide.$slide);
-
-            slide.$slide.off().remove();
-          }
-        });
-
-        self.slides = slides;
-      }
-
-      self.isAnimating = false;
-
-      self.updateCursor();
-
-      self.trigger("afterShow");
-
-      // Autoplay first html5 video/audio
-      if (!!current.opts.video.autoStart) {
-        current.$slide
-          .find("video,audio")
-          .filter(":visible:first")
-          .trigger("play")
-          .one("ended", function () {
-            if (Document.exitFullscreen) {
-              Document.exitFullscreen();
-            } else if (this.webkitExitFullscreen) {
-              this.webkitExitFullscreen();
-            }
-
-            self.next();
-          });
-      }
-
-      // Try to focus on the first focusable element
-      if (current.opts.autoFocus && current.contentType === "html") {
-        // Look for the first input with autofocus attribute
-        $el = current.$content.find("input[autofocus]:enabled:visible:first");
-
-        if ($el.length) {
-          $el.trigger("focus");
-        } else {
-          self.focus(null, true);
-        }
-      }
-
-      // Avoid jumping
-      current.$slide.scrollTop(0).scrollLeft(0);
-    },
-
-    // Preload next and previous slides
-    // ================================
-
-    preload: function (type) {
-      var self = this,
-        prev,
-        next;
-
-      if (self.group.length < 2) {
-        return;
-      }
-
-      next = self.slides[self.currPos + 1];
-      prev = self.slides[self.currPos - 1];
-
-      if (prev && prev.type === type) {
-        self.loadSlide(prev);
-      }
-
-      if (next && next.type === type) {
-        self.loadSlide(next);
-      }
-    },
-
-    // Try to find and focus on the first focusable element
-    // ====================================================
-
-    focus: function (e, firstRun) {
-      var self = this,
-        focusableStr = [
-          "a[href]",
-          "area[href]",
-          'input:not([disabled]):not([type="hidden"]):not([aria-hidden])',
-          "select:not([disabled]):not([aria-hidden])",
-          "textarea:not([disabled]):not([aria-hidden])",
-          "button:not([disabled]):not([aria-hidden])",
-          "iframe",
-          "object",
-          "embed",
-          "video",
-          "audio",
-          "[contenteditable]",
-          '[tabindex]:not([tabindex^="-"])'
-        ].join(","),
-        focusableItems,
-        focusedItemIndex;
-
-      if (self.isClosing) {
-        return;
-      }
-
-      if (e || !self.current || !self.current.isComplete) {
-        // Focus on any element inside fancybox
-        focusableItems = self.$refs.container.find("*:visible");
-      } else {
-        // Focus inside current slide
-        focusableItems = self.current.$slide.find("*:visible" + (firstRun ? ":not(.fancybox-close-small)" : ""));
-      }
-
-      focusableItems = focusableItems.filter(focusableStr).filter(function () {
-        return $(this).css("visibility") !== "hidden" && !$(this).hasClass("disabled");
-      });
-
-      if (focusableItems.length) {
-        focusedItemIndex = focusableItems.index(document.activeElement);
-
-        if (e && e.shiftKey) {
-          // Back tab
-          if (focusedItemIndex < 0 || focusedItemIndex == 0) {
-            e.preventDefault();
-
-            focusableItems.eq(focusableItems.length - 1).trigger("focus");
-          }
-        } else {
-          // Outside or Forward tab
-          if (focusedItemIndex < 0 || focusedItemIndex == focusableItems.length - 1) {
-            if (e) {
-              e.preventDefault();
-            }
-
-            focusableItems.eq(0).trigger("focus");
-          }
-        }
-      } else {
-        self.$refs.container.trigger("focus");
-      }
-    },
-
-    // Activates current instance - brings container to the front and enables keyboard,
-    // notifies other instances about deactivating
-    // =================================================================================
-
-    activate: function () {
-      var self = this;
-
-      // Deactivate all instances
-      $(".fancybox-container").each(function () {
-        var instance = $(this).data("FancyBox");
-
-        // Skip self and closing instances
-        if (instance && instance.id !== self.id && !instance.isClosing) {
-          instance.trigger("onDeactivate");
-
-          instance.removeEvents();
-
-          instance.isVisible = false;
-        }
-      });
-
-      self.isVisible = true;
-
-      if (self.current || self.isIdle) {
-        self.update();
-
-        self.updateControls();
-      }
-
-      self.trigger("onActivate");
-
-      self.addEvents();
-    },
-
-    // Start closing procedure
-    // This will start "zoom-out" animation if needed and clean everything up afterwards
-    // =================================================================================
-
-    close: function (e, d) {
-      var self = this,
-        current = self.current,
-        effect,
-        duration,
-        $content,
-        domRect,
-        opacity,
-        start,
-        end;
-
-      var done = function () {
-        self.cleanUp(e);
-      };
-
-      if (self.isClosing) {
-        return false;
-      }
-
-      self.isClosing = true;
-
-      // If beforeClose callback prevents closing, make sure content is centered
-      if (self.trigger("beforeClose", e) === false) {
-        self.isClosing = false;
-
-        requestAFrame(function () {
-          self.update();
-        });
-
-        return false;
-      }
-
-      // Remove all events
-      // If there are multiple instances, they will be set again by "activate" method
-      self.removeEvents();
-
-      $content = current.$content;
-      effect = current.opts.animationEffect;
-      duration = $.isNumeric(d) ? d : effect ? current.opts.animationDuration : 0;
-
-      current.$slide.removeClass("fancybox-slide--complete fancybox-slide--next fancybox-slide--previous fancybox-animated");
-
-      if (e !== true) {
-        $.fancybox.stop(current.$slide);
-      } else {
-        effect = false;
-      }
-
-      // Remove other slides
-      current.$slide
-        .siblings()
-        .trigger("onReset")
-        .remove();
-
-      // Trigger animations
-      if (duration) {
-        self.$refs.container
-          .removeClass("fancybox-is-open")
-          .addClass("fancybox-is-closing")
-          .css("transition-duration", duration + "ms");
-      }
-
-      // Clean up
-      self.hideLoading(current);
-
-      self.hideControls(true);
-
-      self.updateCursor();
-
-      // Check if possible to zoom-out
-      if (
-        effect === "zoom" &&
-        !($content && duration && current.type === "image" && !self.isMoved() && !current.hasError && (end = self.getThumbPos(current)))
-      ) {
-        effect = "fade";
-      }
-
-      if (effect === "zoom") {
-        $.fancybox.stop($content);
-
-        domRect = $.fancybox.getTranslate($content);
-
-        start = {
-          top: domRect.top,
-          left: domRect.left,
-          scaleX: domRect.width / end.width,
-          scaleY: domRect.height / end.height,
-          width: end.width,
-          height: end.height
-        };
-
-        // Check if we need to animate opacity
-        opacity = current.opts.zoomOpacity;
-
-        if (opacity == "auto") {
-          opacity = Math.abs(current.width / current.height - end.width / end.height) > 0.1;
-        }
-
-        if (opacity) {
-          end.opacity = 0;
-        }
-
-        $.fancybox.setTranslate($content, start);
-
-        forceRedraw($content);
-
-        $.fancybox.animate($content, end, duration, done);
-
-        return true;
-      }
-
-      if (effect && duration) {
-        $.fancybox.animate(
-          current.$slide.addClass("fancybox-slide--previous").removeClass("fancybox-slide--current"),
-          "fancybox-animated fancybox-fx-" + effect,
-          duration,
-          done
-        );
-      } else {
-        // If skip animation
-        if (e === true) {
-          setTimeout(done, duration);
-        } else {
-          done();
-        }
-      }
-
-      return true;
-    },
-
-    // Final adjustments after removing the instance
-    // =============================================
-
-    cleanUp: function (e) {
-      var self = this,
-        instance,
-        $focus = self.current.opts.$orig,
-        x,
-        y;
-
-      self.current.$slide.trigger("onReset");
-
-      self.$refs.container.empty().remove();
-
-      self.trigger("afterClose", e);
-
-      // Place back focus
-      if (!!self.current.opts.backFocus) {
-        if (!$focus || !$focus.length || !$focus.is(":visible")) {
-          $focus = self.$trigger;
-        }
-
-        if ($focus && $focus.length) {
-          x = window.scrollX;
-          y = window.scrollY;
-
-          $focus.trigger("focus");
-
-          $("html, body")
-            .scrollTop(y)
-            .scrollLeft(x);
-        }
-      }
-
-      self.current = null;
-
-      // Check if there are other instances
-      instance = $.fancybox.getInstance();
-
-      if (instance) {
-        instance.activate();
-      } else {
-        $("body").removeClass("fancybox-active compensate-for-scrollbar");
-
-        $("#fancybox-style-noscroll").remove();
-      }
-    },
-
-    // Call callback and trigger an event
-    // ==================================
-
-    trigger: function (name, slide) {
-      var args = Array.prototype.slice.call(arguments, 1),
-        self = this,
-        obj = slide && slide.opts ? slide : self.current,
-        rez;
-
-      if (obj) {
-        args.unshift(obj);
-      } else {
-        obj = self;
-      }
-
-      args.unshift(self);
-
-      if ($.isFunction(obj.opts[name])) {
-        rez = obj.opts[name].apply(obj, args);
-      }
-
-      if (rez === false) {
-        return rez;
-      }
-
-      if (name === "afterClose" || !self.$refs) {
-        $D.trigger(name + ".fb", args);
-      } else {
-        self.$refs.container.trigger(name + ".fb", args);
-      }
-    },
-
-    // Update infobar values, navigation button states and reveal caption
-    // ==================================================================
-
-    updateControls: function () {
-      var self = this,
-        current = self.current,
-        index = current.index,
-        $container = self.$refs.container,
-        $caption = self.$refs.caption,
-        caption = current.opts.caption;
-
-      // Recalculate content dimensions
-      current.$slide.trigger("refresh");
-
-      // Set caption
-      if (caption && caption.length) {
-        self.$caption = $caption;
-
-        $caption
-          .children()
-          .eq(0)
-          .html(caption);
-      } else {
-        self.$caption = null;
-      }
-
-      if (!self.hasHiddenControls && !self.isIdle) {
-        self.showControls();
-      }
-
-      // Update info and navigation elements
-      $container.find("[data-fancybox-count]").html(self.group.length);
-      $container.find("[data-fancybox-index]").html(index + 1);
-
-      $container.find("[data-fancybox-prev]").prop("disabled", !current.opts.loop && index <= 0);
-      $container.find("[data-fancybox-next]").prop("disabled", !current.opts.loop && index >= self.group.length - 1);
-
-      if (current.type === "image") {
-        // Re-enable buttons; update download button source
-        $container
-          .find("[data-fancybox-zoom]")
-          .show()
-          .end()
-          .find("[data-fancybox-download]")
-          .attr("href", current.opts.image.src || current.src)
-          .show();
-      } else if (current.opts.toolbar) {
-        $container.find("[data-fancybox-download],[data-fancybox-zoom]").hide();
-      }
-
-      // Make sure focus is not on disabled button/element
-      if ($(document.activeElement).is(":hidden,[disabled]")) {
-        self.$refs.container.trigger("focus");
-      }
-    },
-
-    // Hide toolbar and caption
-    // ========================
-
-    hideControls: function (andCaption) {
-      var self = this,
-        arr = ["infobar", "toolbar", "nav"];
-
-      if (andCaption || !self.current.opts.preventCaptionOverlap) {
-        arr.push("caption");
-      }
-
-      this.$refs.container.removeClass(
-        arr
-        .map(function (i) {
-          return "fancybox-show-" + i;
-        })
-        .join(" ")
-      );
-
-      this.hasHiddenControls = true;
-    },
-
-    showControls: function () {
-      var self = this,
-        opts = self.current ? self.current.opts : self.opts,
-        $container = self.$refs.container;
-
-      self.hasHiddenControls = false;
-      self.idleSecondsCounter = 0;
-
-      $container
-        .toggleClass("fancybox-show-toolbar", !!(opts.toolbar && opts.buttons))
-        .toggleClass("fancybox-show-infobar", !!(opts.infobar && self.group.length > 1))
-        .toggleClass("fancybox-show-caption", !!self.$caption)
-        .toggleClass("fancybox-show-nav", !!(opts.arrows && self.group.length > 1))
-        .toggleClass("fancybox-is-modal", !!opts.modal);
-    },
-
-    // Toggle toolbar and caption
-    // ==========================
-
-    toggleControls: function () {
-      if (this.hasHiddenControls) {
-        this.showControls();
-      } else {
-        this.hideControls();
-      }
-    }
-  });
-
-  $.fancybox = {
-    version: "3.5.7",
-    defaults: defaults,
-
-    // Get current instance and execute a command.
-    //
-    // Examples of usage:
-    //
-    //   $instance = $.fancybox.getInstance();
-    //   $.fancybox.getInstance().jumpTo( 1 );
-    //   $.fancybox.getInstance( 'jumpTo', 1 );
-    //   $.fancybox.getInstance( function() {
-    //       console.info( this.currIndex );
-    //   });
-    // ======================================================
-
-    getInstance: function (command) {
-      var instance = $('.fancybox-container:not(".fancybox-is-closing"):last').data("FancyBox"),
-        args = Array.prototype.slice.call(arguments, 1);
-
-      if (instance instanceof FancyBox) {
-        if ($.type(command) === "string") {
-          instance[command].apply(instance, args);
-        } else if ($.type(command) === "function") {
-          command.apply(instance, args);
-        }
-
-        return instance;
-      }
-
-      return false;
-    },
-
-    // Create new instance
-    // ===================
-
-    open: function (items, opts, index) {
-      return new FancyBox(items, opts, index);
-    },
-
-    // Close current or all instances
-    // ==============================
-
-    close: function (all) {
-      var instance = this.getInstance();
-
-      if (instance) {
-        instance.close();
-
-        // Try to find and close next instance
-        if (all === true) {
-          this.close(all);
-        }
-      }
-    },
-
-    // Close all instances and unbind all events
-    // =========================================
-
-    destroy: function () {
-      this.close(true);
-
-      $D.add("body").off("click.fb-start", "**");
-    },
-
-    // Try to detect mobile devices
-    // ============================
-
-    isMobile: /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),
-
-    // Detect if 'translate3d' support is available
-    // ============================================
-
-    use3d: (function () {
-      var div = document.createElement("div");
-
-      return (
-        window.getComputedStyle &&
-        window.getComputedStyle(div) &&
-        window.getComputedStyle(div).getPropertyValue("transform") &&
-        !(document.documentMode && document.documentMode < 11)
-      );
-    })(),
-
-    // Helper function to get current visual state of an element
-    // returns array[ top, left, horizontal-scale, vertical-scale, opacity ]
-    // =====================================================================
-
-    getTranslate: function ($el) {
-      var domRect;
-
-      if (!$el || !$el.length) {
-        return false;
-      }
-
-      domRect = $el[0].getBoundingClientRect();
-
-      return {
-        top: domRect.top || 0,
-        left: domRect.left || 0,
-        width: domRect.width,
-        height: domRect.height,
-        opacity: parseFloat($el.css("opacity"))
-      };
-    },
-
-    // Shortcut for setting "translate3d" properties for element
-    // Can set be used to set opacity, too
-    // ========================================================
-
-    setTranslate: function ($el, props) {
-      var str = "",
-        css = {};
-
-      if (!$el || !props) {
-        return;
-      }
-
-      if (props.left !== undefined || props.top !== undefined) {
-        str =
-          (props.left === undefined ? $el.position().left : props.left) +
-          "px, " +
-          (props.top === undefined ? $el.position().top : props.top) +
-          "px";
-
-        if (this.use3d) {
-          str = "translate3d(" + str + ", 0px)";
-        } else {
-          str = "translate(" + str + ")";
-        }
-      }
-
-      if (props.scaleX !== undefined && props.scaleY !== undefined) {
-        str += " scale(" + props.scaleX + ", " + props.scaleY + ")";
-      } else if (props.scaleX !== undefined) {
-        str += " scaleX(" + props.scaleX + ")";
-      }
-
-      if (str.length) {
-        css.transform = str;
-      }
-
-      if (props.opacity !== undefined) {
-        css.opacity = props.opacity;
-      }
-
-      if (props.width !== undefined) {
-        css.width = props.width;
-      }
-
-      if (props.height !== undefined) {
-        css.height = props.height;
-      }
-
-      return $el.css(css);
-    },
-
-    // Simple CSS transition handler
-    // =============================
-
-    animate: function ($el, to, duration, callback, leaveAnimationName) {
-      var self = this,
-        from;
-
-      if ($.isFunction(duration)) {
-        callback = duration;
-        duration = null;
-      }
-
-      self.stop($el);
-
-      from = self.getTranslate($el);
-
-      $el.on(transitionEnd, function (e) {
-        // Skip events from child elements and z-index change
-        if (e && e.originalEvent && (!$el.is(e.originalEvent.target) || e.originalEvent.propertyName == "z-index")) {
-          return;
-        }
-
-        self.stop($el);
-
-        if ($.isNumeric(duration)) {
-          $el.css("transition-duration", "");
-        }
-
-        if ($.isPlainObject(to)) {
-          if (to.scaleX !== undefined && to.scaleY !== undefined) {
-            self.setTranslate($el, {
-              top: to.top,
-              left: to.left,
-              width: from.width * to.scaleX,
-              height: from.height * to.scaleY,
-              scaleX: 1,
-              scaleY: 1
-            });
-          }
-        } else if (leaveAnimationName !== true) {
-          $el.removeClass(to);
-        }
-
-        if ($.isFunction(callback)) {
-          callback(e);
-        }
-      });
-
-      if ($.isNumeric(duration)) {
-        $el.css("transition-duration", duration + "ms");
-      }
-
-      // Start animation by changing CSS properties or class name
-      if ($.isPlainObject(to)) {
-        if (to.scaleX !== undefined && to.scaleY !== undefined) {
-          delete to.width;
-          delete to.height;
-
-          if ($el.parent().hasClass("fancybox-slide--image")) {
-            $el.parent().addClass("fancybox-is-scaling");
-          }
-        }
-
-        $.fancybox.setTranslate($el, to);
-      } else {
-        $el.addClass(to);
-      }
-
-      // Make sure that `transitionend` callback gets fired
-      $el.data(
-        "timer",
-        setTimeout(function () {
-          $el.trigger(transitionEnd);
-        }, duration + 33)
-      );
-    },
-
-    stop: function ($el, callCallback) {
-      if ($el && $el.length) {
-        clearTimeout($el.data("timer"));
-
-        if (callCallback) {
-          $el.trigger(transitionEnd);
-        }
-
-        $el.off(transitionEnd).css("transition-duration", "");
-
-        $el.parent().removeClass("fancybox-is-scaling");
-      }
-    }
-  };
-
-  // Default click handler for "fancyboxed" links
-  // ============================================
-
-  function _run(e, opts) {
-    var items = [],
-      index = 0,
-      $target,
-      value,
-      instance;
-
-    // Avoid opening multiple times
-    if (e && e.isDefaultPrevented()) {
-      return;
-    }
-
-    e.preventDefault();
-
-    opts = opts || {};
-
-    if (e && e.data) {
-      opts = mergeOpts(e.data.options, opts);
-    }
-
-    $target = opts.$target || $(e.currentTarget).trigger("blur");
-    instance = $.fancybox.getInstance();
-
-    if (instance && instance.$trigger && instance.$trigger.is($target)) {
-      return;
-    }
-
-    if (opts.selector) {
-      items = $(opts.selector);
-    } else {
-      // Get all related items and find index for clicked one
-      value = $target.attr("data-fancybox") || "";
-
-      if (value) {
-        items = e.data ? e.data.items : [];
-        items = items.length ? items.filter('[data-fancybox="' + value + '"]') : $('[data-fancybox="' + value + '"]');
-      } else {
-        items = [$target];
-      }
-    }
-
-    index = $(items).index($target);
-
-    // Sometimes current item can not be found
-    if (index < 0) {
-      index = 0;
-    }
-
-    instance = $.fancybox.open(items, opts, index);
-
-    // Save last active element
-    instance.$trigger = $target;
-  }
-
-  // Create a jQuery plugin
-  // ======================
-
-  $.fn.fancybox = function (options) {
-    var selector;
-
-    options = options || {};
-    selector = options.selector || false;
-
-    if (selector) {
-      // Use body element instead of document so it executes first
-      $("body")
-        .off("click.fb-start", selector)
-        .on("click.fb-start", selector, {
-          options: options
-        }, _run);
-    } else {
-      this.off("click.fb-start").on(
-        "click.fb-start", {
-          items: this,
-          options: options
-        },
-        _run
-      );
-    }
-
-    return this;
-  };
-
-  // Self initializing plugin for all elements having `data-fancybox` attribute
-  // ==========================================================================
-
-  $D.on("click.fb-start", "[data-fancybox]", _run);
-
-  // Enable "trigger elements"
-  // =========================
-
-  $D.on("click.fb-start", "[data-fancybox-trigger]", function (e) {
-    $('[data-fancybox="' + $(this).attr("data-fancybox-trigger") + '"]')
-      .eq($(this).attr("data-fancybox-index") || 0)
-      .trigger("click.fb-start", {
-        $trigger: $(this)
-      });
-  });
-
-  // Track focus event for better accessibility styling
-  // ==================================================
-  (function () {
-    var buttonStr = ".fancybox-button",
-      focusStr = "fancybox-focus",
-      $pressed = null;
-
-    $D.on("mousedown mouseup focus blur", buttonStr, function (e) {
-      switch (e.type) {
-        case "mousedown":
-          $pressed = $(this);
-          break;
-        case "mouseup":
-          $pressed = null;
-          break;
-        case "focusin":
-          $(buttonStr).removeClass(focusStr);
-
-          if (!$(this).is($pressed) && !$(this).is("[disabled]")) {
-            $(this).addClass(focusStr);
-          }
-          break;
-        case "focusout":
-          $(buttonStr).removeClass(focusStr);
-          break;
-      }
-    });
-  })();
-})(window, document, jQuery);
-// ==========================================================================
-//
-// Media
-// Adds additional media type support
-//
-// ==========================================================================
-(function ($) {
-  "use strict";
-
-  // Object containing properties for each media type
-  var defaults = {
-    youtube: {
-      matcher: /(youtube\.com|youtu\.be|youtube\-nocookie\.com)\/(watch\?(.*&)?v=|v\/|u\/|embed\/?)?(videoseries\?list=(.*)|[\w-]{11}|\?listType=(.*)&list=(.*))(.*)/i,
-      params: {
-        autoplay: 1,
-        autohide: 1,
-        fs: 1,
-        rel: 0,
-        hd: 1,
-        wmode: "transparent",
-        enablejsapi: 1,
-        html5: 1
-      },
-      paramPlace: 8,
-      type: "iframe",
-      url: "https://www.youtube-nocookie.com/embed/$4",
-      thumb: "https://img.youtube.com/vi/$4/hqdefault.jpg"
-    },
-
-    vimeo: {
-      matcher: /^.+vimeo.com\/(.*\/)?([\d]+)(.*)?/,
-      params: {
-        autoplay: 1,
-        hd: 1,
-        show_title: 1,
-        show_byline: 1,
-        show_portrait: 0,
-        fullscreen: 1
-      },
-      paramPlace: 3,
-      type: "iframe",
-      url: "//player.vimeo.com/video/$2"
-    },
-
-    instagram: {
-      matcher: /(instagr\.am|instagram\.com)\/p\/([a-zA-Z0-9_\-]+)\/?/i,
-      type: "image",
-      url: "//$1/p/$2/media/?size=l"
-    },
-
-    // Examples:
-    // http://maps.google.com/?ll=48.857995,2.294297&spn=0.007666,0.021136&t=m&z=16
-    // https://www.google.com/maps/@37.7852006,-122.4146355,14.65z
-    // https://www.google.com/maps/@52.2111123,2.9237542,6.61z?hl=en
-    // https://www.google.com/maps/place/Googleplex/@37.4220041,-122.0833494,17z/data=!4m5!3m4!1s0x0:0x6c296c66619367e0!8m2!3d37.4219998!4d-122.0840572
-    gmap_place: {
-      matcher: /(maps\.)?google\.([a-z]{2,3}(\.[a-z]{2})?)\/(((maps\/(place\/(.*)\/)?\@(.*),(\d+.?\d+?)z))|(\?ll=))(.*)?/i,
-      type: "iframe",
-      url: function (rez) {
-        return (
-          "//maps.google." +
-          rez[2] +
-          "/?ll=" +
-          (rez[9] ? rez[9] + "&z=" + Math.floor(rez[10]) + (rez[12] ? rez[12].replace(/^\//, "&") : "") : rez[12] + "").replace(/\?/, "&") +
-          "&output=" +
-          (rez[12] && rez[12].indexOf("layer=c") > 0 ? "svembed" : "embed")
-        );
-      }
-    },
-
-    // Examples:
-    // https://www.google.com/maps/search/Empire+State+Building/
-    // https://www.google.com/maps/search/?api=1&query=centurylink+field
-    // https://www.google.com/maps/search/?api=1&query=47.5951518,-122.3316393
-    gmap_search: {
-      matcher: /(maps\.)?google\.([a-z]{2,3}(\.[a-z]{2})?)\/(maps\/search\/)(.*)/i,
-      type: "iframe",
-      url: function (rez) {
-        return "//maps.google." + rez[2] + "/maps?q=" + rez[5].replace("query=", "q=").replace("api=1", "") + "&output=embed";
-      }
-    }
-  };
-
-  // Formats matching url to final form
-  var format = function (url, rez, params) {
-    if (!url) {
-      return;
-    }
-
-    params = params || "";
-
-    if ($.type(params) === "object") {
-      params = $.param(params, true);
-    }
-
-    $.each(rez, function (key, value) {
-      url = url.replace("$" + key, value || "");
-    });
-
-    if (params.length) {
-      url += (url.indexOf("?") > 0 ? "&" : "?") + params;
-    }
-
-    return url;
-  };
-
-  $(document).on("objectNeedsType.fb", function (e, instance, item) {
-    var url = item.src || "",
-      type = false,
-      media,
-      thumb,
-      rez,
-      params,
-      urlParams,
-      paramObj,
-      provider;
-
-    media = $.extend(true, {}, defaults, item.opts.media);
-
-    // Look for any matching media type
-    $.each(media, function (providerName, providerOpts) {
-      rez = url.match(providerOpts.matcher);
-
-      if (!rez) {
-        return;
-      }
-
-      type = providerOpts.type;
-      provider = providerName;
-      paramObj = {};
-
-      if (providerOpts.paramPlace && rez[providerOpts.paramPlace]) {
-        urlParams = rez[providerOpts.paramPlace];
-
-        if (urlParams[0] == "?") {
-          urlParams = urlParams.substring(1);
-        }
-
-        urlParams = urlParams.split("&");
-
-        for (var m = 0; m < urlParams.length; ++m) {
-          var p = urlParams[m].split("=", 2);
-
-          if (p.length == 2) {
-            paramObj[p[0]] = decodeURIComponent(p[1].replace(/\+/g, " "));
-          }
-        }
-      }
-
-      params = $.extend(true, {}, providerOpts.params, item.opts[providerName], paramObj);
-
-      url =
-        $.type(providerOpts.url) === "function" ? providerOpts.url.call(this, rez, params, item) : format(providerOpts.url, rez, params);
-
-      thumb =
-        $.type(providerOpts.thumb) === "function" ? providerOpts.thumb.call(this, rez, params, item) : format(providerOpts.thumb, rez);
-
-      if (providerName === "youtube") {
-        url = url.replace(/&t=((\d+)m)?(\d+)s/, function (match, p1, m, s) {
-          return "&start=" + ((m ? parseInt(m, 10) * 60 : 0) + parseInt(s, 10));
-        });
-      } else if (providerName === "vimeo") {
-        url = url.replace("&%23", "#");
-      }
-
-      return false;
-    });
-
-    // If it is found, then change content type and update the url
-
-    if (type) {
-      if (!item.opts.thumb && !(item.opts.$thumb && item.opts.$thumb.length)) {
-        item.opts.thumb = thumb;
-      }
-
-      if (type === "iframe") {
-        item.opts = $.extend(true, item.opts, {
-          iframe: {
-            preload: false,
-            attr: {
-              scrolling: "no"
-            }
-          }
-        });
-      }
-
-      $.extend(item, {
-        type: type,
-        src: url,
-        origSrc: item.src,
-        contentSource: provider,
-        contentType: type === "image" ? "image" : provider == "gmap_place" || provider == "gmap_search" ? "map" : "video"
-      });
-    } else if (url) {
-      item.type = item.opts.defaultType;
-    }
-  });
-
-  // Load YouTube/Video API on request to detect when video finished playing
-  var VideoAPILoader = {
-    youtube: {
-      src: "https://www.youtube.com/iframe_api",
-      class: "YT",
-      loading: false,
-      loaded: false
-    },
-
-    vimeo: {
-      src: "https://player.vimeo.com/api/player.js",
-      class: "Vimeo",
-      loading: false,
-      loaded: false
-    },
-
-    load: function (vendor) {
-      var _this = this,
-        script;
-
-      if (this[vendor].loaded) {
-        setTimeout(function () {
-          _this.done(vendor);
-        });
-        return;
-      }
-
-      if (this[vendor].loading) {
-        return;
-      }
-
-      this[vendor].loading = true;
-
-      script = document.createElement("script");
-      script.type = "text/javascript";
-      script.src = this[vendor].src;
-
-      if (vendor === "youtube") {
-        window.onYouTubeIframeAPIReady = function () {
-          _this[vendor].loaded = true;
-          _this.done(vendor);
-        };
-      } else {
-        script.onload = function () {
-          _this[vendor].loaded = true;
-          _this.done(vendor);
-        };
-      }
-
-      document.body.appendChild(script);
-    },
-    done: function (vendor) {
-      var instance, $el, player;
-
-      if (vendor === "youtube") {
-        delete window.onYouTubeIframeAPIReady;
-      }
-
-      instance = $.fancybox.getInstance();
-
-      if (instance) {
-        $el = instance.current.$content.find("iframe");
-
-        if (vendor === "youtube" && YT !== undefined && YT) {
-          player = new YT.Player($el.attr("id"), {
-            events: {
-              onStateChange: function (e) {
-                if (e.data == 0) {
-                  instance.next();
-                }
-              }
-            }
-          });
-        } else if (vendor === "vimeo" && Vimeo !== undefined && Vimeo) {
-          player = new Vimeo.Player($el);
-
-          player.on("ended", function () {
-            instance.next();
-          });
-        }
-      }
-    }
-  };
-
-  $(document).on({
-    "afterShow.fb": function (e, instance, current) {
-      if (instance.group.length > 1 && (current.contentSource === "youtube" || current.contentSource === "vimeo")) {
-        VideoAPILoader.load(current.contentSource);
-      }
-    }
-  });
-})(jQuery);
-// ==========================================================================
-//
-// Guestures
-// Adds touch guestures, handles click and tap events
-//
-// ==========================================================================
-(function (window, document, $) {
-  "use strict";
-
-  var requestAFrame = (function () {
-    return (
-      window.requestAnimationFrame ||
-      window.webkitRequestAnimationFrame ||
-      window.mozRequestAnimationFrame ||
-      window.oRequestAnimationFrame ||
-      // if all else fails, use setTimeout
-      function (callback) {
-        return window.setTimeout(callback, 1000 / 60);
-      }
-    );
-  })();
-
-  var cancelAFrame = (function () {
-    return (
-      window.cancelAnimationFrame ||
-      window.webkitCancelAnimationFrame ||
-      window.mozCancelAnimationFrame ||
-      window.oCancelAnimationFrame ||
-      function (id) {
-        window.clearTimeout(id);
-      }
-    );
-  })();
-
-  var getPointerXY = function (e) {
-    var result = [];
-
-    e = e.originalEvent || e || window.e;
-    e = e.touches && e.touches.length ? e.touches : e.changedTouches && e.changedTouches.length ? e.changedTouches : [e];
-
-    for (var key in e) {
-      if (e[key].pageX) {
-        result.push({
-          x: e[key].pageX,
-          y: e[key].pageY
-        });
-      } else if (e[key].clientX) {
-        result.push({
-          x: e[key].clientX,
-          y: e[key].clientY
-        });
-      }
-    }
-
-    return result;
-  };
-
-  var distance = function (point2, point1, what) {
-    if (!point1 || !point2) {
-      return 0;
-    }
-
-    if (what === "x") {
-      return point2.x - point1.x;
-    } else if (what === "y") {
-      return point2.y - point1.y;
-    }
-
-    return Math.sqrt(Math.pow(point2.x - point1.x, 2) + Math.pow(point2.y - point1.y, 2));
-  };
-
-  var isClickable = function ($el) {
-    if (
-      $el.is('a,area,button,[role="button"],input,label,select,summary,textarea,video,audio,iframe') ||
-      $.isFunction($el.get(0).onclick) ||
-      $el.data("selectable")
-    ) {
-      return true;
-    }
-
-    // Check for attributes like data-fancybox-next or data-fancybox-close
-    for (var i = 0, atts = $el[0].attributes, n = atts.length; i < n; i++) {
-      if (atts[i].nodeName.substr(0, 14) === "data-fancybox-") {
-        return true;
-      }
-    }
-
-    return false;
-  };
-
-  var hasScrollbars = function (el) {
-    var overflowY = window.getComputedStyle(el)["overflow-y"],
-      overflowX = window.getComputedStyle(el)["overflow-x"],
-      vertical = (overflowY === "scroll" || overflowY === "auto") && el.scrollHeight > el.clientHeight,
-      horizontal = (overflowX === "scroll" || overflowX === "auto") && el.scrollWidth > el.clientWidth;
-
-    return vertical || horizontal;
-  };
-
-  var isScrollable = function ($el) {
-    var rez = false;
-
-    while (true) {
-      rez = hasScrollbars($el.get(0));
-
-      if (rez) {
-        break;
-      }
-
-      $el = $el.parent();
-
-      if (!$el.length || $el.hasClass("fancybox-stage") || $el.is("body")) {
-        break;
-      }
-    }
-
-    return rez;
-  };
-
-  var Guestures = function (instance) {
-    var self = this;
-
-    self.instance = instance;
-
-    self.$bg = instance.$refs.bg;
-    self.$stage = instance.$refs.stage;
-    self.$container = instance.$refs.container;
-
-    self.destroy();
-
-    self.$container.on("touchstart.fb.touch mousedown.fb.touch", $.proxy(self, "ontouchstart"));
-  };
-
-  Guestures.prototype.destroy = function () {
-    var self = this;
-
-    self.$container.off(".fb.touch");
-
-    $(document).off(".fb.touch");
-
-    if (self.requestId) {
-      cancelAFrame(self.requestId);
-      self.requestId = null;
-    }
-
-    if (self.tapped) {
-      clearTimeout(self.tapped);
-      self.tapped = null;
-    }
-  };
-
-  Guestures.prototype.ontouchstart = function (e) {
-    var self = this,
-      $target = $(e.target),
-      instance = self.instance,
-      current = instance.current,
-      $slide = current.$slide,
-      $content = current.$content,
-      isTouchDevice = e.type == "touchstart";
-
-    // Do not respond to both (touch and mouse) events
-    if (isTouchDevice) {
-      self.$container.off("mousedown.fb.touch");
-    }
-
-    // Ignore right click
-    if (e.originalEvent && e.originalEvent.button == 2) {
-      return;
-    }
-
-    // Ignore taping on links, buttons, input elements
-    if (!$slide.length || !$target.length || isClickable($target) || isClickable($target.parent())) {
-      return;
-    }
-    // Ignore clicks on the scrollbar
-    if (!$target.is("img") && e.originalEvent.clientX > $target[0].clientWidth + $target.offset().left) {
-      return;
-    }
-
-    // Ignore clicks while zooming or closing
-    if (!current || instance.isAnimating || current.$slide.hasClass("fancybox-animated")) {
-      e.stopPropagation();
-      e.preventDefault();
-
-      return;
-    }
-
-    self.realPoints = self.startPoints = getPointerXY(e);
-
-    if (!self.startPoints.length) {
-      return;
-    }
-
-    // Allow other scripts to catch touch event if "touch" is set to false
-    if (current.touch) {
-      e.stopPropagation();
-    }
-
-    self.startEvent = e;
-
-    self.canTap = true;
-    self.$target = $target;
-    self.$content = $content;
-    self.opts = current.opts.touch;
-
-    self.isPanning = false;
-    self.isSwiping = false;
-    self.isZooming = false;
-    self.isScrolling = false;
-    self.canPan = instance.canPan();
-
-    self.startTime = new Date().getTime();
-    self.distanceX = self.distanceY = self.distance = 0;
-
-    self.canvasWidth = Math.round($slide[0].clientWidth);
-    self.canvasHeight = Math.round($slide[0].clientHeight);
-
-    self.contentLastPos = null;
-    self.contentStartPos = $.fancybox.getTranslate(self.$content) || {
-      top: 0,
-      left: 0
-    };
-    self.sliderStartPos = $.fancybox.getTranslate($slide);
-
-    // Since position will be absolute, but we need to make it relative to the stage
-    self.stagePos = $.fancybox.getTranslate(instance.$refs.stage);
-
-    self.sliderStartPos.top -= self.stagePos.top;
-    self.sliderStartPos.left -= self.stagePos.left;
-
-    self.contentStartPos.top -= self.stagePos.top;
-    self.contentStartPos.left -= self.stagePos.left;
-
-    $(document)
-      .off(".fb.touch")
-      .on(isTouchDevice ? "touchend.fb.touch touchcancel.fb.touch" : "mouseup.fb.touch mouseleave.fb.touch", $.proxy(self, "ontouchend"))
-      .on(isTouchDevice ? "touchmove.fb.touch" : "mousemove.fb.touch", $.proxy(self, "ontouchmove"));
-
-    if ($.fancybox.isMobile) {
-      document.addEventListener("scroll", self.onscroll, true);
-    }
-
-    // Skip if clicked outside the sliding area
-    if (!(self.opts || self.canPan) || !($target.is(self.$stage) || self.$stage.find($target).length)) {
-      if ($target.is(".fancybox-image")) {
-        e.preventDefault();
-      }
-
-      if (!($.fancybox.isMobile && $target.parents(".fancybox-caption").length)) {
-        return;
-      }
-    }
-
-    self.isScrollable = isScrollable($target) || isScrollable($target.parent());
-
-    // Check if element is scrollable and try to prevent default behavior (scrolling)
-    if (!($.fancybox.isMobile && self.isScrollable)) {
-      e.preventDefault();
-    }
-
-    // One finger or mouse click - swipe or pan an image
-    if (self.startPoints.length === 1 || current.hasError) {
-      if (self.canPan) {
-        $.fancybox.stop(self.$content);
-
-        self.isPanning = true;
-      } else {
-        self.isSwiping = true;
-      }
-
-      self.$container.addClass("fancybox-is-grabbing");
-    }
-
-    // Two fingers - zoom image
-    if (self.startPoints.length === 2 && current.type === "image" && (current.isLoaded || current.$ghost)) {
-      self.canTap = false;
-      self.isSwiping = false;
-      self.isPanning = false;
-
-      self.isZooming = true;
-
-      $.fancybox.stop(self.$content);
-
-      self.centerPointStartX = (self.startPoints[0].x + self.startPoints[1].x) * 0.5 - $(window).scrollLeft();
-      self.centerPointStartY = (self.startPoints[0].y + self.startPoints[1].y) * 0.5 - $(window).scrollTop();
-
-      self.percentageOfImageAtPinchPointX = (self.centerPointStartX - self.contentStartPos.left) / self.contentStartPos.width;
-      self.percentageOfImageAtPinchPointY = (self.centerPointStartY - self.contentStartPos.top) / self.contentStartPos.height;
-
-      self.startDistanceBetweenFingers = distance(self.startPoints[0], self.startPoints[1]);
-    }
-  };
-
-  Guestures.prototype.onscroll = function (e) {
-    var self = this;
-
-    self.isScrolling = true;
-
-    document.removeEventListener("scroll", self.onscroll, true);
-  };
-
-  Guestures.prototype.ontouchmove = function (e) {
-    var self = this;
-
-    // Make sure user has not released over iframe or disabled element
-    if (e.originalEvent.buttons !== undefined && e.originalEvent.buttons === 0) {
-      self.ontouchend(e);
-      return;
-    }
-
-    if (self.isScrolling) {
-      self.canTap = false;
-      return;
-    }
-
-    self.newPoints = getPointerXY(e);
-
-    if (!(self.opts || self.canPan) || !self.newPoints.length || !self.newPoints.length) {
-      return;
-    }
-
-    if (!(self.isSwiping && self.isSwiping === true)) {
-      e.preventDefault();
-    }
-
-    self.distanceX = distance(self.newPoints[0], self.startPoints[0], "x");
-    self.distanceY = distance(self.newPoints[0], self.startPoints[0], "y");
-
-    self.distance = distance(self.newPoints[0], self.startPoints[0]);
-
-    // Skip false ontouchmove events (Chrome)
-    if (self.distance > 0) {
-      if (self.isSwiping) {
-        self.onSwipe(e);
-      } else if (self.isPanning) {
-        self.onPan();
-      } else if (self.isZooming) {
-        self.onZoom();
-      }
-    }
-  };
-
-  Guestures.prototype.onSwipe = function (e) {
-    var self = this,
-      instance = self.instance,
-      swiping = self.isSwiping,
-      left = self.sliderStartPos.left || 0,
-      angle;
-
-    // If direction is not yet determined
-    if (swiping === true) {
-      // We need at least 10px distance to correctly calculate an angle
-      if (Math.abs(self.distance) > 10) {
-        self.canTap = false;
-
-        if (instance.group.length < 2 && self.opts.vertical) {
-          self.isSwiping = "y";
-        } else if (instance.isDragging || self.opts.vertical === false || (self.opts.vertical === "auto" && $(window).width() > 800)) {
-          self.isSwiping = "x";
-        } else {
-          angle = Math.abs((Math.atan2(self.distanceY, self.distanceX) * 180) / Math.PI);
-
-          self.isSwiping = angle > 45 && angle < 135 ? "y" : "x";
-        }
-
-        if (self.isSwiping === "y" && $.fancybox.isMobile && self.isScrollable) {
-          self.isScrolling = true;
-
-          return;
-        }
-
-        instance.isDragging = self.isSwiping;
-
-        // Reset points to avoid jumping, because we dropped first swipes to calculate the angle
-        self.startPoints = self.newPoints;
-
-        $.each(instance.slides, function (index, slide) {
-          var slidePos, stagePos;
-
-          $.fancybox.stop(slide.$slide);
-
-          slidePos = $.fancybox.getTranslate(slide.$slide);
-          stagePos = $.fancybox.getTranslate(instance.$refs.stage);
-
-          slide.$slide
-            .css({
-              transform: "",
-              opacity: "",
-              "transition-duration": ""
-            })
-            .removeClass("fancybox-animated")
-            .removeClass(function (index, className) {
-              return (className.match(/(^|\s)fancybox-fx-\S+/g) || []).join(" ");
-            });
-
-          if (slide.pos === instance.current.pos) {
-            self.sliderStartPos.top = slidePos.top - stagePos.top;
-            self.sliderStartPos.left = slidePos.left - stagePos.left;
-          }
-
-          $.fancybox.setTranslate(slide.$slide, {
-            top: slidePos.top - stagePos.top,
-            left: slidePos.left - stagePos.left
-          });
-        });
-
-        // Stop slideshow
-        if (instance.SlideShow && instance.SlideShow.isActive) {
-          instance.SlideShow.stop();
-        }
-      }
-
-      return;
-    }
-
-    // Sticky edges
-    if (swiping == "x") {
-      if (
-        self.distanceX > 0 &&
-        (self.instance.group.length < 2 || (self.instance.current.index === 0 && !self.instance.current.opts.loop))
-      ) {
-        left = left + Math.pow(self.distanceX, 0.8);
-      } else if (
-        self.distanceX < 0 &&
-        (self.instance.group.length < 2 ||
-          (self.instance.current.index === self.instance.group.length - 1 && !self.instance.current.opts.loop))
-      ) {
-        left = left - Math.pow(-self.distanceX, 0.8);
-      } else {
-        left = left + self.distanceX;
-      }
-    }
-
-    self.sliderLastPos = {
-      top: swiping == "x" ? 0 : self.sliderStartPos.top + self.distanceY,
-      left: left
-    };
-
-    if (self.requestId) {
-      cancelAFrame(self.requestId);
-
-      self.requestId = null;
-    }
-
-    self.requestId = requestAFrame(function () {
-      if (self.sliderLastPos) {
-        $.each(self.instance.slides, function (index, slide) {
-          var pos = slide.pos - self.instance.currPos;
-
-          $.fancybox.setTranslate(slide.$slide, {
-            top: self.sliderLastPos.top,
-            left: self.sliderLastPos.left + pos * self.canvasWidth + pos * slide.opts.gutter
-          });
-        });
-
-        self.$container.addClass("fancybox-is-sliding");
-      }
-    });
-  };
-
-  Guestures.prototype.onPan = function () {
-    var self = this;
-
-    // Prevent accidental movement (sometimes, when tapping casually, finger can move a bit)
-    if (distance(self.newPoints[0], self.realPoints[0]) < ($.fancybox.isMobile ? 10 : 5)) {
-      self.startPoints = self.newPoints;
-      return;
-    }
-
-    self.canTap = false;
-
-    self.contentLastPos = self.limitMovement();
-
-    if (self.requestId) {
-      cancelAFrame(self.requestId);
-    }
-
-    self.requestId = requestAFrame(function () {
-      $.fancybox.setTranslate(self.$content, self.contentLastPos);
-    });
-  };
-
-  // Make panning sticky to the edges
-  Guestures.prototype.limitMovement = function () {
-    var self = this;
-
-    var canvasWidth = self.canvasWidth;
-    var canvasHeight = self.canvasHeight;
-
-    var distanceX = self.distanceX;
-    var distanceY = self.distanceY;
-
-    var contentStartPos = self.contentStartPos;
-
-    var currentOffsetX = contentStartPos.left;
-    var currentOffsetY = contentStartPos.top;
-
-    var currentWidth = contentStartPos.width;
-    var currentHeight = contentStartPos.height;
-
-    var minTranslateX, minTranslateY, maxTranslateX, maxTranslateY, newOffsetX, newOffsetY;
-
-    if (currentWidth > canvasWidth) {
-      newOffsetX = currentOffsetX + distanceX;
-    } else {
-      newOffsetX = currentOffsetX;
-    }
-
-    newOffsetY = currentOffsetY + distanceY;
-
-    // Slow down proportionally to traveled distance
-    minTranslateX = Math.max(0, canvasWidth * 0.5 - currentWidth * 0.5);
-    minTranslateY = Math.max(0, canvasHeight * 0.5 - currentHeight * 0.5);
-
-    maxTranslateX = Math.min(canvasWidth - currentWidth, canvasWidth * 0.5 - currentWidth * 0.5);
-    maxTranslateY = Math.min(canvasHeight - currentHeight, canvasHeight * 0.5 - currentHeight * 0.5);
-
-    //   ->
-    if (distanceX > 0 && newOffsetX > minTranslateX) {
-      newOffsetX = minTranslateX - 1 + Math.pow(-minTranslateX + currentOffsetX + distanceX, 0.8) || 0;
-    }
-
-    //    <-
-    if (distanceX < 0 && newOffsetX < maxTranslateX) {
-      newOffsetX = maxTranslateX + 1 - Math.pow(maxTranslateX - currentOffsetX - distanceX, 0.8) || 0;
-    }
-
-    //   \/
-    if (distanceY > 0 && newOffsetY > minTranslateY) {
-      newOffsetY = minTranslateY - 1 + Math.pow(-minTranslateY + currentOffsetY + distanceY, 0.8) || 0;
-    }
-
-    //   /\
-    if (distanceY < 0 && newOffsetY < maxTranslateY) {
-      newOffsetY = maxTranslateY + 1 - Math.pow(maxTranslateY - currentOffsetY - distanceY, 0.8) || 0;
-    }
-
-    return {
-      top: newOffsetY,
-      left: newOffsetX
-    };
-  };
-
-  Guestures.prototype.limitPosition = function (newOffsetX, newOffsetY, newWidth, newHeight) {
-    var self = this;
-
-    var canvasWidth = self.canvasWidth;
-    var canvasHeight = self.canvasHeight;
-
-    if (newWidth > canvasWidth) {
-      newOffsetX = newOffsetX > 0 ? 0 : newOffsetX;
-      newOffsetX = newOffsetX < canvasWidth - newWidth ? canvasWidth - newWidth : newOffsetX;
-    } else {
-      // Center horizontally
-      newOffsetX = Math.max(0, canvasWidth / 2 - newWidth / 2);
-    }
-
-    if (newHeight > canvasHeight) {
-      newOffsetY = newOffsetY > 0 ? 0 : newOffsetY;
-      newOffsetY = newOffsetY < canvasHeight - newHeight ? canvasHeight - newHeight : newOffsetY;
-    } else {
-      // Center vertically
-      newOffsetY = Math.max(0, canvasHeight / 2 - newHeight / 2);
-    }
-
-    return {
-      top: newOffsetY,
-      left: newOffsetX
-    };
-  };
-
-  Guestures.prototype.onZoom = function () {
-    var self = this;
-
-    // Calculate current distance between points to get pinch ratio and new width and height
-    var contentStartPos = self.contentStartPos;
-
-    var currentWidth = contentStartPos.width;
-    var currentHeight = contentStartPos.height;
-
-    var currentOffsetX = contentStartPos.left;
-    var currentOffsetY = contentStartPos.top;
-
-    var endDistanceBetweenFingers = distance(self.newPoints[0], self.newPoints[1]);
-
-    var pinchRatio = endDistanceBetweenFingers / self.startDistanceBetweenFingers;
-
-    var newWidth = Math.floor(currentWidth * pinchRatio);
-    var newHeight = Math.floor(currentHeight * pinchRatio);
-
-    // This is the translation due to pinch-zooming
-    var translateFromZoomingX = (currentWidth - newWidth) * self.percentageOfImageAtPinchPointX;
-    var translateFromZoomingY = (currentHeight - newHeight) * self.percentageOfImageAtPinchPointY;
-
-    // Point between the two touches
-    var centerPointEndX = (self.newPoints[0].x + self.newPoints[1].x) / 2 - $(window).scrollLeft();
-    var centerPointEndY = (self.newPoints[0].y + self.newPoints[1].y) / 2 - $(window).scrollTop();
-
-    // And this is the translation due to translation of the centerpoint
-    // between the two fingers
-    var translateFromTranslatingX = centerPointEndX - self.centerPointStartX;
-    var translateFromTranslatingY = centerPointEndY - self.centerPointStartY;
-
-    // The new offset is the old/current one plus the total translation
-    var newOffsetX = currentOffsetX + (translateFromZoomingX + translateFromTranslatingX);
-    var newOffsetY = currentOffsetY + (translateFromZoomingY + translateFromTranslatingY);
-
-    var newPos = {
-      top: newOffsetY,
-      left: newOffsetX,
-      scaleX: pinchRatio,
-      scaleY: pinchRatio
-    };
-
-    self.canTap = false;
-
-    self.newWidth = newWidth;
-    self.newHeight = newHeight;
-
-    self.contentLastPos = newPos;
-
-    if (self.requestId) {
-      cancelAFrame(self.requestId);
-    }
-
-    self.requestId = requestAFrame(function () {
-      $.fancybox.setTranslate(self.$content, self.contentLastPos);
-    });
-  };
-
-  Guestures.prototype.ontouchend = function (e) {
-    var self = this;
-
-    var swiping = self.isSwiping;
-    var panning = self.isPanning;
-    var zooming = self.isZooming;
-    var scrolling = self.isScrolling;
-
-    self.endPoints = getPointerXY(e);
-    self.dMs = Math.max(new Date().getTime() - self.startTime, 1);
-
-    self.$container.removeClass("fancybox-is-grabbing");
-
-    $(document).off(".fb.touch");
-
-    document.removeEventListener("scroll", self.onscroll, true);
-
-    if (self.requestId) {
-      cancelAFrame(self.requestId);
-
-      self.requestId = null;
-    }
-
-    self.isSwiping = false;
-    self.isPanning = false;
-    self.isZooming = false;
-    self.isScrolling = false;
-
-    self.instance.isDragging = false;
-
-    if (self.canTap) {
-      return self.onTap(e);
-    }
-
-    self.speed = 100;
-
-    // Speed in px/ms
-    self.velocityX = (self.distanceX / self.dMs) * 0.5;
-    self.velocityY = (self.distanceY / self.dMs) * 0.5;
-
-    if (panning) {
-      self.endPanning();
-    } else if (zooming) {
-      self.endZooming();
-    } else {
-      self.endSwiping(swiping, scrolling);
-    }
-
-    return;
-  };
-
-  Guestures.prototype.endSwiping = function (swiping, scrolling) {
-    var self = this,
-      ret = false,
-      len = self.instance.group.length,
-      distanceX = Math.abs(self.distanceX),
-      canAdvance = swiping == "x" && len > 1 && ((self.dMs > 130 && distanceX > 10) || distanceX > 50),
-      speedX = 300;
-
-    self.sliderLastPos = null;
-
-    // Close if swiped vertically / navigate if horizontally
-    if (swiping == "y" && !scrolling && Math.abs(self.distanceY) > 50) {
-      // Continue vertical movement
-      $.fancybox.animate(
-        self.instance.current.$slide, {
-          top: self.sliderStartPos.top + self.distanceY + self.velocityY * 150,
-          opacity: 0
-        },
-        200
-      );
-      ret = self.instance.close(true, 250);
-    } else if (canAdvance && self.distanceX > 0) {
-      ret = self.instance.previous(speedX);
-    } else if (canAdvance && self.distanceX < 0) {
-      ret = self.instance.next(speedX);
-    }
-
-    if (ret === false && (swiping == "x" || swiping == "y")) {
-      self.instance.centerSlide(200);
-    }
-
-    self.$container.removeClass("fancybox-is-sliding");
-  };
-
-  // Limit panning from edges
-  // ========================
-  Guestures.prototype.endPanning = function () {
-    var self = this,
-      newOffsetX,
-      newOffsetY,
-      newPos;
-
-    if (!self.contentLastPos) {
-      return;
-    }
-
-    if (self.opts.momentum === false || self.dMs > 350) {
-      newOffsetX = self.contentLastPos.left;
-      newOffsetY = self.contentLastPos.top;
-    } else {
-      // Continue movement
-      newOffsetX = self.contentLastPos.left + self.velocityX * 500;
-      newOffsetY = self.contentLastPos.top + self.velocityY * 500;
-    }
-
-    newPos = self.limitPosition(newOffsetX, newOffsetY, self.contentStartPos.width, self.contentStartPos.height);
-
-    newPos.width = self.contentStartPos.width;
-    newPos.height = self.contentStartPos.height;
-
-    $.fancybox.animate(self.$content, newPos, 366);
-  };
-
-  Guestures.prototype.endZooming = function () {
-    var self = this;
-
-    var current = self.instance.current;
-
-    var newOffsetX, newOffsetY, newPos, reset;
-
-    var newWidth = self.newWidth;
-    var newHeight = self.newHeight;
-
-    if (!self.contentLastPos) {
-      return;
-    }
-
-    newOffsetX = self.contentLastPos.left;
-    newOffsetY = self.contentLastPos.top;
-
-    reset = {
-      top: newOffsetY,
-      left: newOffsetX,
-      width: newWidth,
-      height: newHeight,
-      scaleX: 1,
-      scaleY: 1
-    };
-
-    // Reset scalex/scaleY values; this helps for perfomance and does not break animation
-    $.fancybox.setTranslate(self.$content, reset);
-
-    if (newWidth < self.canvasWidth && newHeight < self.canvasHeight) {
-      self.instance.scaleToFit(150);
-    } else if (newWidth > current.width || newHeight > current.height) {
-      self.instance.scaleToActual(self.centerPointStartX, self.centerPointStartY, 150);
-    } else {
-      newPos = self.limitPosition(newOffsetX, newOffsetY, newWidth, newHeight);
-
-      $.fancybox.animate(self.$content, newPos, 150);
-    }
-  };
-
-  Guestures.prototype.onTap = function (e) {
-    var self = this;
-    var $target = $(e.target);
-
-    var instance = self.instance;
-    var current = instance.current;
-
-    var endPoints = (e && getPointerXY(e)) || self.startPoints;
-
-    var tapX = endPoints[0] ? endPoints[0].x - $(window).scrollLeft() - self.stagePos.left : 0;
-    var tapY = endPoints[0] ? endPoints[0].y - $(window).scrollTop() - self.stagePos.top : 0;
-
-    var where;
-
-    var process = function (prefix) {
-      var action = current.opts[prefix];
-
-      if ($.isFunction(action)) {
-        action = action.apply(instance, [current, e]);
-      }
-
-      if (!action) {
-        return;
-      }
-
-      switch (action) {
-        case "close":
-          instance.close(self.startEvent);
-
-          break;
-
-        case "toggleControls":
-          instance.toggleControls();
-
-          break;
-
-        case "next":
-          instance.next();
-
-          break;
-
-        case "nextOrClose":
-          if (instance.group.length > 1) {
-            instance.next();
-          } else {
-            instance.close(self.startEvent);
-          }
-
-          break;
-
-        case "zoom":
-          if (current.type == "image" && (current.isLoaded || current.$ghost)) {
-            if (instance.canPan()) {
-              instance.scaleToFit();
-            } else if (instance.isScaledDown()) {
-              instance.scaleToActual(tapX, tapY);
-            } else if (instance.group.length < 2) {
-              instance.close(self.startEvent);
-            }
-          }
-
-          break;
-      }
-    };
-
-    // Ignore right click
-    if (e.originalEvent && e.originalEvent.button == 2) {
-      return;
-    }
-
-    // Skip if clicked on the scrollbar
-    if (!$target.is("img") && tapX > $target[0].clientWidth + $target.offset().left) {
-      return;
-    }
-
-    // Check where is clicked
-    if ($target.is(".fancybox-bg,.fancybox-inner,.fancybox-outer,.fancybox-container")) {
-      where = "Outside";
-    } else if ($target.is(".fancybox-slide")) {
-      where = "Slide";
-    } else if (
-      instance.current.$content &&
-      instance.current.$content
-      .find($target)
-      .addBack()
-      .filter($target).length
-    ) {
-      where = "Content";
-    } else {
-      return;
-    }
-
-    // Check if this is a double tap
-    if (self.tapped) {
-      // Stop previously created single tap
-      clearTimeout(self.tapped);
-      self.tapped = null;
-
-      // Skip if distance between taps is too big
-      if (Math.abs(tapX - self.tapX) > 50 || Math.abs(tapY - self.tapY) > 50) {
-        return this;
-      }
-
-      // OK, now we assume that this is a double-tap
-      process("dblclick" + where);
-    } else {
-      // Single tap will be processed if user has not clicked second time within 300ms
-      // or there is no need to wait for double-tap
-      self.tapX = tapX;
-      self.tapY = tapY;
-
-      if (current.opts["dblclick" + where] && current.opts["dblclick" + where] !== current.opts["click" + where]) {
-        self.tapped = setTimeout(function () {
-          self.tapped = null;
-
-          if (!instance.isAnimating) {
-            process("click" + where);
-          }
-        }, 500);
-      } else {
-        process("click" + where);
-      }
-    }
-
-    return this;
-  };
-
-  $(document)
-    .on("onActivate.fb", function (e, instance) {
-      if (instance && !instance.Guestures) {
-        instance.Guestures = new Guestures(instance);
-      }
-    })
-    .on("beforeClose.fb", function (e, instance) {
-      if (instance && instance.Guestures) {
-        instance.Guestures.destroy();
-      }
-    });
-})(window, document, jQuery);
-// ==========================================================================
-//
-// SlideShow
-// Enables slideshow functionality
-//
-// Example of usage:
-// $.fancybox.getInstance().SlideShow.start()
-//
-// ==========================================================================
-(function (document, $) {
-  "use strict";
-
-  $.extend(true, $.fancybox.defaults, {
-    btnTpl: {
-      slideShow: '<button data-fancybox-play class="fancybox-button fancybox-button--play" title="{{PLAY_START}}">' +
-        '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M6.5 5.4v13.2l11-6.6z"/></svg>' +
-        '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M8.33 5.75h2.2v12.5h-2.2V5.75zm5.15 0h2.2v12.5h-2.2V5.75z"/></svg>' +
-        "</button>"
-    },
-    slideShow: {
-      autoStart: false,
-      speed: 3000,
-      progress: true
-    }
-  });
-
-  var SlideShow = function (instance) {
-    this.instance = instance;
-    this.init();
-  };
-
-  $.extend(SlideShow.prototype, {
-    timer: null,
-    isActive: false,
-    $button: null,
-
-    init: function () {
-      var self = this,
-        instance = self.instance,
-        opts = instance.group[instance.currIndex].opts.slideShow;
-
-      self.$button = instance.$refs.toolbar.find("[data-fancybox-play]").on("click", function () {
-        self.toggle();
-      });
-
-      if (instance.group.length < 2 || !opts) {
-        self.$button.hide();
-      } else if (opts.progress) {
-        self.$progress = $('<div class="fancybox-progress"></div>').appendTo(instance.$refs.inner);
-      }
-    },
-
-    set: function (force) {
-      var self = this,
-        instance = self.instance,
-        current = instance.current;
-
-      // Check if reached last element
-      if (current && (force === true || current.opts.loop || instance.currIndex < instance.group.length - 1)) {
-        if (self.isActive && current.contentType !== "video") {
-          if (self.$progress) {
-            $.fancybox.animate(self.$progress.show(), {
-              scaleX: 1
-            }, current.opts.slideShow.speed);
-          }
-
-          self.timer = setTimeout(function () {
-            if (!instance.current.opts.loop && instance.current.index == instance.group.length - 1) {
-              instance.jumpTo(0);
-            } else {
-              instance.next();
-            }
-          }, current.opts.slideShow.speed);
-        }
-      } else {
-        self.stop();
-        instance.idleSecondsCounter = 0;
-        instance.showControls();
-      }
-    },
-
-    clear: function () {
-      var self = this;
-
-      clearTimeout(self.timer);
-
-      self.timer = null;
-
-      if (self.$progress) {
-        self.$progress.removeAttr("style").hide();
-      }
-    },
-
-    start: function () {
-      var self = this,
-        current = self.instance.current;
-
-      if (current) {
-        self.$button
-          .attr("title", (current.opts.i18n[current.opts.lang] || current.opts.i18n.en).PLAY_STOP)
-          .removeClass("fancybox-button--play")
-          .addClass("fancybox-button--pause");
-
-        self.isActive = true;
-
-        if (current.isComplete) {
-          self.set(true);
-        }
-
-        self.instance.trigger("onSlideShowChange", true);
-      }
-    },
-
-    stop: function () {
-      var self = this,
-        current = self.instance.current;
-
-      self.clear();
-
-      self.$button
-        .attr("title", (current.opts.i18n[current.opts.lang] || current.opts.i18n.en).PLAY_START)
-        .removeClass("fancybox-button--pause")
-        .addClass("fancybox-button--play");
-
-      self.isActive = false;
-
-      self.instance.trigger("onSlideShowChange", false);
-
-      if (self.$progress) {
-        self.$progress.removeAttr("style").hide();
-      }
-    },
-
-    toggle: function () {
-      var self = this;
-
-      if (self.isActive) {
-        self.stop();
-      } else {
-        self.start();
-      }
-    }
-  });
-
-  $(document).on({
-    "onInit.fb": function (e, instance) {
-      if (instance && !instance.SlideShow) {
-        instance.SlideShow = new SlideShow(instance);
-      }
-    },
-
-    "beforeShow.fb": function (e, instance, current, firstRun) {
-      var SlideShow = instance && instance.SlideShow;
-
-      if (firstRun) {
-        if (SlideShow && current.opts.slideShow.autoStart) {
-          SlideShow.start();
-        }
-      } else if (SlideShow && SlideShow.isActive) {
-        SlideShow.clear();
-      }
-    },
-
-    "afterShow.fb": function (e, instance, current) {
-      var SlideShow = instance && instance.SlideShow;
-
-      if (SlideShow && SlideShow.isActive) {
-        SlideShow.set();
-      }
-    },
-
-    "afterKeydown.fb": function (e, instance, current, keypress, keycode) {
-      var SlideShow = instance && instance.SlideShow;
-
-      // "P" or Spacebar
-      if (SlideShow && current.opts.slideShow && (keycode === 80 || keycode === 32) && !$(document.activeElement).is("button,a,input")) {
-        keypress.preventDefault();
-
-        SlideShow.toggle();
-      }
-    },
-
-    "beforeClose.fb onDeactivate.fb": function (e, instance) {
-      var SlideShow = instance && instance.SlideShow;
-
-      if (SlideShow) {
-        SlideShow.stop();
-      }
-    }
-  });
-
-  // Page Visibility API to pause slideshow when window is not active
-  $(document).on("visibilitychange", function () {
-    var instance = $.fancybox.getInstance(),
-      SlideShow = instance && instance.SlideShow;
-
-    if (SlideShow && SlideShow.isActive) {
-      if (document.hidden) {
-        SlideShow.clear();
-      } else {
-        SlideShow.set();
-      }
-    }
-  });
-})(document, jQuery);
-// ==========================================================================
-//
-// FullScreen
-// Adds fullscreen functionality
-//
-// ==========================================================================
-(function (document, $) {
-  "use strict";
-
-  // Collection of methods supported by user browser
-  var fn = (function () {
-    var fnMap = [
-      ["requestFullscreen", "exitFullscreen", "fullscreenElement", "fullscreenEnabled", "fullscreenchange", "fullscreenerror"],
-      // new WebKit
-      [
-        "webkitRequestFullscreen",
-        "webkitExitFullscreen",
-        "webkitFullscreenElement",
-        "webkitFullscreenEnabled",
-        "webkitfullscreenchange",
-        "webkitfullscreenerror"
-      ],
-      // old WebKit (Safari 5.1)
-      [
-        "webkitRequestFullScreen",
-        "webkitCancelFullScreen",
-        "webkitCurrentFullScreenElement",
-        "webkitCancelFullScreen",
-        "webkitfullscreenchange",
-        "webkitfullscreenerror"
-      ],
-      [
-        "mozRequestFullScreen",
-        "mozCancelFullScreen",
-        "mozFullScreenElement",
-        "mozFullScreenEnabled",
-        "mozfullscreenchange",
-        "mozfullscreenerror"
-      ],
-      ["msRequestFullscreen", "msExitFullscreen", "msFullscreenElement", "msFullscreenEnabled", "MSFullscreenChange", "MSFullscreenError"]
-    ];
-
-    var ret = {};
-
-    for (var i = 0; i < fnMap.length; i++) {
-      var val = fnMap[i];
-
-      if (val && val[1] in document) {
-        for (var j = 0; j < val.length; j++) {
-          ret[fnMap[0][j]] = val[j];
-        }
-
-        return ret;
-      }
-    }
-
-    return false;
-  })();
-
-  if (fn) {
-    var FullScreen = {
-      request: function (elem) {
-        elem = elem || document.documentElement;
-
-        elem[fn.requestFullscreen](elem.ALLOW_KEYBOARD_INPUT);
-      },
-      exit: function () {
-        document[fn.exitFullscreen]();
-      },
-      toggle: function (elem) {
-        elem = elem || document.documentElement;
-
-        if (this.isFullscreen()) {
-          this.exit();
-        } else {
-          this.request(elem);
-        }
-      },
-      isFullscreen: function () {
-        return Boolean(document[fn.fullscreenElement]);
-      },
-      enabled: function () {
-        return Boolean(document[fn.fullscreenEnabled]);
-      }
-    };
-
-    $.extend(true, $.fancybox.defaults, {
-      btnTpl: {
-        fullScreen: '<button data-fancybox-fullscreen class="fancybox-button fancybox-button--fsenter" title="{{FULL_SCREEN}}">' +
-          '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z"/></svg>' +
-          '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M5 16h3v3h2v-5H5zm3-8H5v2h5V5H8zm6 11h2v-3h3v-2h-5zm2-11V5h-2v5h5V8z"/></svg>' +
-          "</button>"
-      },
-      fullScreen: {
-        autoStart: false
-      }
-    });
-
-    $(document).on(fn.fullscreenchange, function () {
-      var isFullscreen = FullScreen.isFullscreen(),
-        instance = $.fancybox.getInstance();
-
-      if (instance) {
-        // If image is zooming, then force to stop and reposition properly
-        if (instance.current && instance.current.type === "image" && instance.isAnimating) {
-          instance.isAnimating = false;
-
-          instance.update(true, true, 0);
-
-          if (!instance.isComplete) {
-            instance.complete();
-          }
-        }
-
-        instance.trigger("onFullscreenChange", isFullscreen);
-
-        instance.$refs.container.toggleClass("fancybox-is-fullscreen", isFullscreen);
-
-        instance.$refs.toolbar
-          .find("[data-fancybox-fullscreen]")
-          .toggleClass("fancybox-button--fsenter", !isFullscreen)
-          .toggleClass("fancybox-button--fsexit", isFullscreen);
-      }
-    });
-  }
-
-  $(document).on({
-    "onInit.fb": function (e, instance) {
-      var $container;
-
-      if (!fn) {
-        instance.$refs.toolbar.find("[data-fancybox-fullscreen]").remove();
-
-        return;
-      }
-
-      if (instance && instance.group[instance.currIndex].opts.fullScreen) {
-        $container = instance.$refs.container;
-
-        $container.on("click.fb-fullscreen", "[data-fancybox-fullscreen]", function (e) {
-          e.stopPropagation();
-          e.preventDefault();
-
-          FullScreen.toggle();
-        });
-
-        if (instance.opts.fullScreen && instance.opts.fullScreen.autoStart === true) {
-          FullScreen.request();
-        }
-
-        // Expose API
-        instance.FullScreen = FullScreen;
-      } else if (instance) {
-        instance.$refs.toolbar.find("[data-fancybox-fullscreen]").hide();
-      }
-    },
-
-    "afterKeydown.fb": function (e, instance, current, keypress, keycode) {
-      // "F"
-      if (instance && instance.FullScreen && keycode === 70) {
-        keypress.preventDefault();
-
-        instance.FullScreen.toggle();
-      }
-    },
-
-    "beforeClose.fb": function (e, instance) {
-      if (instance && instance.FullScreen && instance.$refs.container.hasClass("fancybox-is-fullscreen")) {
-        FullScreen.exit();
-      }
-    }
-  });
-})(document, jQuery);
-// ==========================================================================
-//
-// Thumbs
-// Displays thumbnails in a grid
-//
-// ==========================================================================
-(function (document, $) {
-  "use strict";
-
-  var CLASS = "fancybox-thumbs",
-    CLASS_ACTIVE = CLASS + "-active";
-
-  // Make sure there are default values
-  $.fancybox.defaults = $.extend(
-    true, {
-      btnTpl: {
-        thumbs: '<button data-fancybox-thumbs class="fancybox-button fancybox-button--thumbs" title="{{THUMBS}}">' +
-          '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M14.59 14.59h3.76v3.76h-3.76v-3.76zm-4.47 0h3.76v3.76h-3.76v-3.76zm-4.47 0h3.76v3.76H5.65v-3.76zm8.94-4.47h3.76v3.76h-3.76v-3.76zm-4.47 0h3.76v3.76h-3.76v-3.76zm-4.47 0h3.76v3.76H5.65v-3.76zm8.94-4.47h3.76v3.76h-3.76V5.65zm-4.47 0h3.76v3.76h-3.76V5.65zm-4.47 0h3.76v3.76H5.65V5.65z"/></svg>' +
-          "</button>"
-      },
-      thumbs: {
-        autoStart: false, // Display thumbnails on opening
-        hideOnClose: true, // Hide thumbnail grid when closing animation starts
-        parentEl: ".fancybox-container", // Container is injected into this element
-        axis: "y" // Vertical (y) or horizontal (x) scrolling
-      }
-    },
-    $.fancybox.defaults
-  );
-
-  var FancyThumbs = function (instance) {
-    this.init(instance);
-  };
-
-  $.extend(FancyThumbs.prototype, {
-    $button: null,
-    $grid: null,
-    $list: null,
-    isVisible: false,
-    isActive: false,
-
-    init: function (instance) {
-      var self = this,
-        group = instance.group,
-        enabled = 0;
-
-      self.instance = instance;
-      self.opts = group[instance.currIndex].opts.thumbs;
-
-      instance.Thumbs = self;
-
-      self.$button = instance.$refs.toolbar.find("[data-fancybox-thumbs]");
-
-      // Enable thumbs if at least two group items have thumbnails
-      for (var i = 0, len = group.length; i < len; i++) {
-        if (group[i].thumb) {
-          enabled++;
-        }
-
-        if (enabled > 1) {
-          break;
-        }
-      }
-
-      if (enabled > 1 && !!self.opts) {
-        self.$button.removeAttr("style").on("click", function () {
-          self.toggle();
-        });
-
-        self.isActive = true;
-      } else {
-        self.$button.hide();
-      }
-    },
-
-    create: function () {
-      var self = this,
-        instance = self.instance,
-        parentEl = self.opts.parentEl,
-        list = [],
-        src;
-
-      if (!self.$grid) {
-        // Create main element
-        self.$grid = $('<div class="' + CLASS + " " + CLASS + "-" + self.opts.axis + '"></div>').appendTo(
-          instance.$refs.container
-          .find(parentEl)
-          .addBack()
-          .filter(parentEl)
-        );
-
-        // Add "click" event that performs gallery navigation
-        self.$grid.on("click", "a", function () {
-          instance.jumpTo($(this).attr("data-index"));
-        });
-      }
-
-      // Build the list
-      if (!self.$list) {
-        self.$list = $('<div class="' + CLASS + '__list">').appendTo(self.$grid);
-      }
-
-      $.each(instance.group, function (i, item) {
-        src = item.thumb;
-
-        if (!src && item.type === "image") {
-          src = item.src;
-        }
-
-        list.push(
-          '<a href="javascript:;" tabindex="0" data-index="' +
-          i +
-          '"' +
-          (src && src.length ? ' style="background-image:url(' + src + ')"' : 'class="fancybox-thumbs-missing"') +
-          "></a>"
-        );
-      });
-
-      self.$list[0].innerHTML = list.join("");
-
-      if (self.opts.axis === "x") {
-        // Set fixed width for list element to enable horizontal scrolling
-        self.$list.width(
-          parseInt(self.$grid.css("padding-right"), 10) +
-          instance.group.length *
-          self.$list
-          .children()
-          .eq(0)
-          .outerWidth(true)
-        );
-      }
-    },
-
-    focus: function (duration) {
-      var self = this,
-        $list = self.$list,
-        $grid = self.$grid,
-        thumb,
-        thumbPos;
-
-      if (!self.instance.current) {
-        return;
-      }
-
-      thumb = $list
-        .children()
-        .removeClass(CLASS_ACTIVE)
-        .filter('[data-index="' + self.instance.current.index + '"]')
-        .addClass(CLASS_ACTIVE);
-
-      thumbPos = thumb.position();
-
-      // Check if need to scroll to make current thumb visible
-      if (self.opts.axis === "y" && (thumbPos.top < 0 || thumbPos.top > $list.height() - thumb.outerHeight())) {
-        $list.stop().animate({
-            scrollTop: $list.scrollTop() + thumbPos.top
-          },
-          duration
-        );
-      } else if (
-        self.opts.axis === "x" &&
-        (thumbPos.left < $grid.scrollLeft() || thumbPos.left > $grid.scrollLeft() + ($grid.width() - thumb.outerWidth()))
-      ) {
-        $list
-          .parent()
-          .stop()
-          .animate({
-              scrollLeft: thumbPos.left
-            },
-            duration
-          );
-      }
-    },
-
-    update: function () {
-      var that = this;
-      that.instance.$refs.container.toggleClass("fancybox-show-thumbs", this.isVisible);
-
-      if (that.isVisible) {
-        if (!that.$grid) {
-          that.create();
-        }
-
-        that.instance.trigger("onThumbsShow");
-
-        that.focus(0);
-      } else if (that.$grid) {
-        that.instance.trigger("onThumbsHide");
-      }
-
-      // Update content position
-      that.instance.update();
-    },
-
-    hide: function () {
-      this.isVisible = false;
-      this.update();
-    },
-
-    show: function () {
-      this.isVisible = true;
-      this.update();
-    },
-
-    toggle: function () {
-      this.isVisible = !this.isVisible;
-      this.update();
-    }
-  });
-
-  $(document).on({
-    "onInit.fb": function (e, instance) {
-      var Thumbs;
-
-      if (instance && !instance.Thumbs) {
-        Thumbs = new FancyThumbs(instance);
-
-        if (Thumbs.isActive && Thumbs.opts.autoStart === true) {
-          Thumbs.show();
-        }
-      }
-    },
-
-    "beforeShow.fb": function (e, instance, item, firstRun) {
-      var Thumbs = instance && instance.Thumbs;
-
-      if (Thumbs && Thumbs.isVisible) {
-        Thumbs.focus(firstRun ? 0 : 250);
-      }
-    },
-
-    "afterKeydown.fb": function (e, instance, current, keypress, keycode) {
-      var Thumbs = instance && instance.Thumbs;
-
-      // "G"
-      if (Thumbs && Thumbs.isActive && keycode === 71) {
-        keypress.preventDefault();
-
-        Thumbs.toggle();
-      }
-    },
-
-    "beforeClose.fb": function (e, instance) {
-      var Thumbs = instance && instance.Thumbs;
-
-      if (Thumbs && Thumbs.isVisible && Thumbs.opts.hideOnClose !== false) {
-        Thumbs.$grid.hide();
-      }
-    }
-  });
-})(document, jQuery);
-//// ==========================================================================
-//
-// Share
-// Displays simple form for sharing current url
-//
-// ==========================================================================
-(function (document, $) {
-  "use strict";
-
-  $.extend(true, $.fancybox.defaults, {
-    btnTpl: {
-      share: '<button data-fancybox-share class="fancybox-button fancybox-button--share" title="{{SHARE}}">' +
-        '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M2.55 19c1.4-8.4 9.1-9.8 11.9-9.8V5l7 7-7 6.3v-3.5c-2.8 0-10.5 2.1-11.9 4.2z"/></svg>' +
-        "</button>"
-    },
-    share: {
-      url: function (instance, item) {
-        return (
-          (!instance.currentHash && !(item.type === "inline" || item.type === "html") ? item.origSrc || item.src : false) || window.location
-        );
-      },
-      tpl: '<div class="fancybox-share">' +
-        "<h1>{{SHARE}}</h1>" +
-        "<p>" +
-        '<a class="fancybox-share__button fancybox-share__button--fb" href="https://www.facebook.com/sharer/sharer.php?u={{url}}">' +
-        '<svg viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><path d="m287 456v-299c0-21 6-35 35-35h38v-63c-7-1-29-3-55-3-54 0-91 33-91 94v306m143-254h-205v72h196" /></svg>' +
-        "<span>Facebook</span>" +
-        "</a>" +
-        '<a class="fancybox-share__button fancybox-share__button--tw" href="https://twitter.com/intent/tweet?url={{url}}&text={{descr}}">' +
-        '<svg viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><path d="m456 133c-14 7-31 11-47 13 17-10 30-27 37-46-15 10-34 16-52 20-61-62-157-7-141 75-68-3-129-35-169-85-22 37-11 86 26 109-13 0-26-4-37-9 0 39 28 72 65 80-12 3-25 4-37 2 10 33 41 57 77 57-42 30-77 38-122 34 170 111 378-32 359-208 16-11 30-25 41-42z" /></svg>' +
-        "<span>Twitter</span>" +
-        "</a>" +
-        '<a class="fancybox-share__button fancybox-share__button--pt" href="https://www.pinterest.com/pin/create/button/?url={{url}}&description={{descr}}&media={{media}}">' +
-        '<svg viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><path d="m265 56c-109 0-164 78-164 144 0 39 15 74 47 87 5 2 10 0 12-5l4-19c2-6 1-8-3-13-9-11-15-25-15-45 0-58 43-110 113-110 62 0 96 38 96 88 0 67-30 122-73 122-24 0-42-19-36-44 6-29 20-60 20-81 0-19-10-35-31-35-25 0-44 26-44 60 0 21 7 36 7 36l-30 125c-8 37-1 83 0 87 0 3 4 4 5 2 2-3 32-39 42-75l16-64c8 16 31 29 56 29 74 0 124-67 124-157 0-69-58-132-146-132z" fill="#fff"/></svg>' +
-        "<span>Pinterest</span>" +
-        "</a>" +
-        "</p>" +
-        '<p><input class="fancybox-share__input" type="text" value="{{url_raw}}" onclick="select()" /></p>' +
-        "</div>"
-    }
-  });
-
-  function escapeHtml(string) {
-    var entityMap = {
-      "&": "&amp;",
-      "<": "&lt;",
-      ">": "&gt;",
-      '"': "&quot;",
-      "'": "&#39;",
-      "/": "&#x2F;",
-      "`": "&#x60;",
-      "=": "&#x3D;"
-    };
-
-    return String(string).replace(/[&<>"'`=\/]/g, function (s) {
-      return entityMap[s];
-    });
-  }
-
-  $(document).on("click", "[data-fancybox-share]", function () {
-    var instance = $.fancybox.getInstance(),
-      current = instance.current || null,
-      url,
-      tpl;
-
-    if (!current) {
-      return;
-    }
-
-    if ($.type(current.opts.share.url) === "function") {
-      url = current.opts.share.url.apply(current, [instance, current]);
-    }
-
-    tpl = current.opts.share.tpl
-      .replace(/\{\{media\}\}/g, current.type === "image" ? encodeURIComponent(current.src) : "")
-      .replace(/\{\{url\}\}/g, encodeURIComponent(url))
-      .replace(/\{\{url_raw\}\}/g, escapeHtml(url))
-      .replace(/\{\{descr\}\}/g, instance.$caption ? encodeURIComponent(instance.$caption.text()) : "");
-
-    $.fancybox.open({
-      src: instance.translate(instance, tpl),
-      type: "html",
-      opts: {
-        touch: false,
-        animationEffect: false,
-        afterLoad: function (shareInstance, shareCurrent) {
-          // Close self if parent instance is closing
-          instance.$refs.container.one("beforeClose.fb", function () {
-            shareInstance.close(null, 0);
-          });
-
-          // Opening links in a popup window
-          shareCurrent.$content.find(".fancybox-share__button").click(function () {
-            window.open(this.href, "Share", "width=550, height=450");
-            return false;
-          });
-        },
-        mobile: {
-          autoFocus: false
-        }
-      }
-    });
-  });
-})(document, jQuery);
-// ==========================================================================
-//
-// Hash
-// Enables linking to each modal
-//
-// ==========================================================================
-(function (window, document, $) {
-  "use strict";
-
-  // Simple $.escapeSelector polyfill (for jQuery prior v3)
-  if (!$.escapeSelector) {
-    $.escapeSelector = function (sel) {
-      var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;
-      var fcssescape = function (ch, asCodePoint) {
-        if (asCodePoint) {
-          // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
-          if (ch === "\0") {
-            return "\uFFFD";
-          }
-
-          // Control characters and (dependent upon position) numbers get escaped as code points
-          return ch.slice(0, -1) + "\\" + ch.charCodeAt(ch.length - 1).toString(16) + " ";
-        }
-
-        // Other potentially-special ASCII characters get backslash-escaped
-        return "\\" + ch;
-      };
-
-      return (sel + "").replace(rcssescape, fcssescape);
-    };
-  }
-
-  // Get info about gallery name and current index from url
-  function parseUrl() {
-    var hash = window.location.hash.substr(1),
-      rez = hash.split("-"),
-      index = rez.length > 1 && /^\+?\d+$/.test(rez[rez.length - 1]) ? parseInt(rez.pop(-1), 10) || 1 : 1,
-      gallery = rez.join("-");
-
-    return {
-      hash: hash,
-      /* Index is starting from 1 */
-      index: index < 1 ? 1 : index,
-      gallery: gallery
-    };
-  }
-
-  // Trigger click evnt on links to open new fancyBox instance
-  function triggerFromUrl(url) {
-    if (url.gallery !== "") {
-      // If we can find element matching 'data-fancybox' atribute,
-      // then triggering click event should start fancyBox
-      $("[data-fancybox='" + $.escapeSelector(url.gallery) + "']")
-        .eq(url.index - 1)
-        .focus()
-        .trigger("click.fb-start");
-    }
-  }
-
-  // Get gallery name from current instance
-  function getGalleryID(instance) {
-    var opts, ret;
-
-    if (!instance) {
-      return false;
-    }
-
-    opts = instance.current ? instance.current.opts : instance.opts;
-    ret = opts.hash || (opts.$orig ? opts.$orig.data("fancybox") || opts.$orig.data("fancybox-trigger") : "");
-
-    return ret === "" ? false : ret;
-  }
-
-  // Start when DOM becomes ready
-  $(function () {
-    // Check if user has disabled this module
-    if ($.fancybox.defaults.hash === false) {
-      return;
-    }
-
-    // Update hash when opening/closing fancyBox
-    $(document).on({
-      "onInit.fb": function (e, instance) {
-        var url, gallery;
-
-        if (instance.group[instance.currIndex].opts.hash === false) {
-          return;
-        }
-
-        url = parseUrl();
-        gallery = getGalleryID(instance);
-
-        // Make sure gallery start index matches index from hash
-        if (gallery && url.gallery && gallery == url.gallery) {
-          instance.currIndex = url.index - 1;
-        }
-      },
-
-      "beforeShow.fb": function (e, instance, current, firstRun) {
-        var gallery;
-
-        if (!current || current.opts.hash === false) {
-          return;
-        }
-
-        // Check if need to update window hash
-        gallery = getGalleryID(instance);
-
-        if (!gallery) {
-          return;
-        }
-
-        // Variable containing last hash value set by fancyBox
-        // It will be used to determine if fancyBox needs to close after hash change is detected
-        instance.currentHash = gallery + (instance.group.length > 1 ? "-" + (current.index + 1) : "");
-
-        // If current hash is the same (this instance most likely is opened by hashchange), then do nothing
-        if (window.location.hash === "#" + instance.currentHash) {
-          return;
-        }
-
-        if (firstRun && !instance.origHash) {
-          instance.origHash = window.location.hash;
-        }
-
-        if (instance.hashTimer) {
-          clearTimeout(instance.hashTimer);
-        }
-
-        // Update hash
-        instance.hashTimer = setTimeout(function () {
-          if ("replaceState" in window.history) {
-            window.history[firstRun ? "pushState" : "replaceState"]({},
-              document.title,
-              window.location.pathname + window.location.search + "#" + instance.currentHash
-            );
-
-            if (firstRun) {
-              instance.hasCreatedHistory = true;
-            }
-          } else {
-            window.location.hash = instance.currentHash;
-          }
-
-          instance.hashTimer = null;
-        }, 300);
-      },
-
-      "beforeClose.fb": function (e, instance, current) {
-        if (!current || current.opts.hash === false) {
-          return;
-        }
-
-        clearTimeout(instance.hashTimer);
-
-        // Goto previous history entry
-        if (instance.currentHash && instance.hasCreatedHistory) {
-          window.history.back();
-        } else if (instance.currentHash) {
-          if ("replaceState" in window.history) {
-            window.history.replaceState({}, document.title, window.location.pathname + window.location.search + (instance.origHash || ""));
-          } else {
-            window.location.hash = instance.origHash;
-          }
-        }
-
-        instance.currentHash = null;
-      }
-    });
-
-    // Check if need to start/close after url has changed
-    $(window).on("hashchange.fb", function () {
-      var url = parseUrl(),
-        fb = null;
-
-      // Find last fancyBox instance that has "hash"
-      $.each(
-        $(".fancybox-container")
-        .get()
-        .reverse(),
-        function (index, value) {
-          var tmp = $(value).data("FancyBox");
-
-          if (tmp && tmp.currentHash) {
-            fb = tmp;
-            return false;
-          }
-        }
-      );
-
-      if (fb) {
-        // Now, compare hash values
-        if (fb.currentHash !== url.gallery + "-" + url.index && !(url.index === 1 && fb.currentHash == url.gallery)) {
-          fb.currentHash = null;
-
-          fb.close();
-        }
-      } else if (url.gallery !== "") {
-        triggerFromUrl(url);
-      }
-    });
-
-    // Check current hash and trigger click event on matching element to start fancyBox, if needed
-    setTimeout(function () {
-      if (!$.fancybox.getInstance()) {
-        triggerFromUrl(parseUrl());
-      }
-    }, 50);
-  });
-})(window, document, jQuery);
-// ==========================================================================
-//
-// Wheel
-// Basic mouse weheel support for gallery navigation
-//
-// ==========================================================================
-(function (document, $) {
-  "use strict";
-
-  var prevTime = new Date().getTime();
-
-  $(document).on({
-    "onInit.fb": function (e, instance, current) {
-      instance.$refs.stage.on("mousewheel DOMMouseScroll wheel MozMousePixelScroll", function (e) {
-        var current = instance.current,
-          currTime = new Date().getTime();
-
-        if (instance.group.length < 2 || current.opts.wheel === false || (current.opts.wheel === "auto" && current.type !== "image")) {
-          return;
-        }
-
-        e.preventDefault();
-        e.stopPropagation();
-
-        if (current.$slide.hasClass("fancybox-animated")) {
-          return;
-        }
-
-        e = e.originalEvent || e;
-
-        if (currTime - prevTime < 250) {
-          return;
-        }
-
-        prevTime = currTime;
-
-        instance[(-e.deltaY || -e.deltaX || e.wheelDelta || -e.detail) < 0 ? "next" : "previous"]();
-      });
-    }
-  });
-})(document, jQuery);

+ 0 - 7
lib/font-awesome/HELP-US-OUT.txt

@@ -1,7 +0,0 @@
-I hope you love Font Awesome. If you've found it useful, please do me a favor and check out my latest project,
-Fort Awesome (https://fortawesome.com). It makes it easy to put the perfect icons on your website. Choose from our awesome,
-comprehensive icon sets or copy and paste your own.
-
-Please. Check it out.
-
--Dave Gandy

+ 0 - 1
lib/font-awesome/bower.json

@@ -1 +0,0 @@
-{"name":"font-awesome","description":"Font Awesome","keywords":[],"homepage":"http://fontawesome.io","dependencies":{},"devDependencies":{},"license":["OFL-1.1","MIT","CC-BY-3.0"],"main":["less/font-awesome.less","scss/font-awesome.scss"],"ignore":["*/.*","*.json","src","*.yml","Gemfile","Gemfile.lock","*.md"]}

File diff suppressed because it is too large
+ 0 - 3
lib/font-awesome/css/font-awesome.css


File diff suppressed because it is too large
+ 0 - 2
lib/font-awesome/css/font-awesome.css.map


File diff suppressed because it is too large
+ 0 - 3
lib/font-awesome/css/font-awesome.min.css


二進制
lib/font-awesome/fonts/fontawesome-webfont.eot


二進制
lib/font-awesome/fonts/fontawesome-webfont.woff


二進制
lib/font-awesome/fonts/fontawesome-webfont.woff2


+ 0 - 21
lib/pace/LICENSE

@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2017 «NexT»
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.

+ 0 - 17
lib/pace/README.html

@@ -1,17 +0,0 @@
-<h1 align="center"><a href="https://github.com/HubSpot/pace" target="_blank" rel="noopener">Progress bar</a> for <a href="https://github.com/theme-next" target="_blank" rel="noopener">NexT</a></h1><h1 align="center">Installation</h1><h2>If you want to use the CDN instead of clone this repo, please jump to the Step 3.</h2><h2 align="center">Step 1 &rarr; Go to NexT dir</h2><p>Change dir to <strong>NexT</strong> directory. There must be <code>layout</code>, <code>source</code>, <code>languages</code> and other directories:</p><pre class="highlight"><code class="sh">$ <span class="built_in">cd</span> themes/next
-$ ls
-_config.yml  crowdin.yml  docs  gulpfile.js  languages  layout  LICENSE.md  package.json  README.md  scripts  <span class="built_in">source</span>
-</code></pre><h2 align="center">Step 2 &rarr; Get module</h2><p>Install module to <code>source/lib</code> directory:</p><pre class="highlight"><code class="sh">$ git <span class="built_in">clone</span> https://github.com/theme-next/theme-next-pace <span class="built_in">source</span>/lib/pace
-</code></pre><h2 align="center">Step 3 &rarr; Set it up</h2><p>Enable module in <strong>NexT</strong> <code>_config.yml</code> file and select your theme:</p><pre class="highlight"><code class="yml"><span class="attr">pace:</span>
-  <span class="attr">enable:</span> <span class="literal">true</span>
-  <span class="comment"># Themes list:</span>
-  <span class="comment"># big-counter | bounce | barber-shop | center-atom | center-circle | center-radar | center-simple</span>
-  <span class="comment"># corner-indicator | fill-left | flat-top | flash | loading-bar | mac-osx | material | minimal</span>
-  <span class="attr">theme:</span> <span class="string">minimal</span>
-</code></pre><p><strong>And, if you wants to use the CDN, then need to set:</strong> (you also need to find your corresponding theme css link in <a href="https://www.jsdelivr.com/package/npm/pace-js?path=themes" target="_blank" rel="noopener">jsdelivr</a>)</p><pre class="highlight"><code class="yml"><span class="attr">vendors:</span>
-  <span class="string">...</span>
-  <span class="attr">pace:</span> <span class="string">//cdn.jsdelivr.net/npm/pace-js@1/pace.min.js</span>
-  <span class="attr">pace_css:</span> <span class="string">//cdn.jsdelivr.net/npm/pace-js@1/themes/blue/pace-theme-minimal.css</span>
-</code></pre><h1 align="center">Update</h1><pre class="highlight"><code class="sh">$ <span class="built_in">cd</span> themes/next/<span class="built_in">source</span>/lib/pace
-$ git pull
-</code></pre>

File diff suppressed because it is too large
+ 0 - 0
lib/pace/pace-theme-barber-shop.min.css


+ 0 - 1
lib/pace/pace-theme-big-counter.min.css

@@ -1 +0,0 @@
-.pace{-webkit-pointer-events:none;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.pace.pace-inactive .pace-progress{display:none}.pace .pace-progress{position:fixed;z-index:2000;top:0;right:0;height:5rem;width:5rem;-webkit-transform:translate3d(0,0,0)!important;-ms-transform:translate3d(0,0,0)!important;transform:translate3d(0,0,0)!important}.pace .pace-progress:after{display:block;position:absolute;top:0;right:.5rem;content:attr(data-progress-text);font-family:"Helvetica Neue",sans-serif;font-weight:100;font-size:5rem;line-height:1;text-align:right;color:rgba(34,153,221,.19999999999999996)}

File diff suppressed because it is too large
+ 0 - 0
lib/pace/pace-theme-bounce.min.css


File diff suppressed because it is too large
+ 0 - 0
lib/pace/pace-theme-center-atom.min.css


+ 0 - 1
lib/pace/pace-theme-center-circle.min.css

@@ -1 +0,0 @@
-.pace,.pace .pace-progress{z-index:2000;left:0;top:0;height:6rem}.pace{-webkit-pointer-events:none;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-perspective:12rem;-moz-perspective:12rem;-ms-perspective:12rem;-o-perspective:12rem;perspective:12rem;position:fixed;width:6rem;margin:auto;right:0;bottom:0}.pace.pace-inactive .pace-progress{display:none}.pace .pace-progress{display:block;position:absolute;width:6rem!important;line-height:6rem;font-size:2rem;border-radius:50%;background:rgba(34,153,221,.8);color:#fff;font-family:"Helvetica Neue",sans-serif;font-weight:100;text-align:center;-webkit-animation:pace-theme-center-circle-spin linear infinite 2s;-moz-animation:pace-theme-center-circle-spin linear infinite 2s;-ms-animation:pace-theme-center-circle-spin linear infinite 2s;-o-animation:pace-theme-center-circle-spin linear infinite 2s;animation:pace-theme-center-circle-spin linear infinite 2s;-webkit-transform-style:preserve-3d;-moz-transform-style:preserve-3d;-ms-transform-style:preserve-3d;-o-transform-style:preserve-3d;transform-style:preserve-3d}.pace .pace-progress:after{content:attr(data-progress-text);display:block}@-webkit-keyframes pace-theme-center-circle-spin{from{-webkit-transform:rotateY(0)}to{-webkit-transform:rotateY(360deg)}}@-moz-keyframes pace-theme-center-circle-spin{from{-moz-transform:rotateY(0)}to{-moz-transform:rotateY(360deg)}}@-ms-keyframes pace-theme-center-circle-spin{from{-ms-transform:rotateY(0)}to{-ms-transform:rotateY(360deg)}}@-o-keyframes pace-theme-center-circle-spin{from{-o-transform:rotateY(0)}to{-o-transform:rotateY(360deg)}}@keyframes pace-theme-center-circle-spin{from{transform:rotateY(0)}to{transform:rotateY(360deg)}}

+ 0 - 1
lib/pace/pace-theme-center-radar.min.css

@@ -1 +0,0 @@
-.pace,.pace .pace-activity{z-index:2000;height:90px;width:90px}.pace{-webkit-pointer-events:none;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;position:fixed;margin:auto;top:0;left:0;right:0;bottom:0}.pace.pace-inactive .pace-activity{display:none}.pace .pace-activity,.pace .pace-activity:before{position:absolute;display:block;border-color:#29d transparent transparent;border-radius:50%}.pace .pace-activity{left:-30px;top:-30px;border-width:30px;border-style:double;-webkit-animation:spin 1s linear infinite;-moz-animation:spin 1s linear infinite;-o-animation:spin 1s linear infinite;animation:spin 1s linear infinite}.pace .pace-activity:before{content:' ';top:10px;left:10px;height:50px;width:50px;border-width:10px;border-style:solid}@-webkit-keyframes spin{100%{-webkit-transform:rotate(359deg)}}@-moz-keyframes spin{100%{-moz-transform:rotate(359deg)}}@-o-keyframes spin{100%{-moz-transform:rotate(359deg)}}@keyframes spin{100%{transform:rotate(359deg)}}

+ 0 - 1
lib/pace/pace-theme-center-simple.min.css

@@ -1 +0,0 @@
-.pace{-webkit-pointer-events:none;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;z-index:2000;position:fixed;margin:auto;top:0;left:0;right:0;bottom:0;height:5px;width:200px;background:#fff;border:1px solid #29d;overflow:hidden}.pace .pace-progress{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0);max-width:200px;z-index:2000;display:block;position:absolute;top:0;right:100%;height:100%;width:100%;background:#29d}.pace.pace-inactive{display:none}

+ 0 - 1
lib/pace/pace-theme-corner-indicator.min.css

@@ -1 +0,0 @@
-.pace{-webkit-pointer-events:none;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.pace .pace-activity{display:block;position:fixed;z-index:2000;top:0;right:0;width:300px;height:300px;background:#29d;-webkit-transition:-webkit-transform .3s;transition:transform .3s;-webkit-transform:translateX(100%) translateY(-100%) rotate(45deg);transform:translateX(100%) translateY(-100%) rotate(45deg);pointer-events:none}.pace.pace-active .pace-activity{-webkit-transform:translateX(50%) translateY(-50%) rotate(45deg);transform:translateX(50%) translateY(-50%) rotate(45deg)}.pace .pace-activity::after,.pace .pace-activity::before{-moz-box-sizing:border-box;box-sizing:border-box;position:absolute;bottom:30px;left:50%;display:block;border:5px solid #fff;border-radius:50%;content:''}.pace .pace-activity::before{margin-left:-40px;width:80px;height:80px;border-right-color:rgba(0,0,0,.2);border-left-color:rgba(0,0,0,.2);-webkit-animation:pace-theme-corner-indicator-spin 3s linear infinite;animation:pace-theme-corner-indicator-spin 3s linear infinite}.pace .pace-activity::after{bottom:50px;margin-left:-20px;width:40px;height:40px;border-top-color:rgba(0,0,0,.2);border-bottom-color:rgba(0,0,0,.2);-webkit-animation:pace-theme-corner-indicator-spin 1s linear infinite;animation:pace-theme-corner-indicator-spin 1s linear infinite}@-webkit-keyframes pace-theme-corner-indicator-spin{0%{-webkit-transform:rotate(0)}100%{-webkit-transform:rotate(359deg)}}@keyframes pace-theme-corner-indicator-spin{0%{transform:rotate(0)}100%{transform:rotate(359deg)}}

+ 0 - 1
lib/pace/pace-theme-fill-left.min.css

@@ -1 +0,0 @@
-.pace{-webkit-pointer-events:none;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.pace-inactive{display:none}.pace .pace-progress{background-color:rgba(34,153,221,.19999999999999996);position:fixed;z-index:-1;top:0;right:100%;bottom:0;width:100%}

+ 0 - 1
lib/pace/pace-theme-flash.min.css

@@ -1 +0,0 @@
-.pace{-webkit-pointer-events:none;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.pace-inactive{display:none}.pace .pace-progress{background:#29d;position:fixed;z-index:2000;top:0;right:100%;width:100%;height:2px}.pace .pace-progress-inner{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px #29d,0 0 5px #29d;opacity:1;-webkit-transform:rotate(3deg) translate(0,-4px);-moz-transform:rotate(3deg) translate(0,-4px);-ms-transform:rotate(3deg) translate(0,-4px);-o-transform:rotate(3deg) translate(0,-4px);transform:rotate(3deg) translate(0,-4px)}.pace .pace-activity{display:block;position:fixed;z-index:2000;top:15px;right:15px;width:14px;height:14px;border:2px solid transparent;border-top-color:#29d;border-left-color:#29d;border-radius:10px;-webkit-animation:pace-spinner .4s linear infinite;-moz-animation:pace-spinner .4s linear infinite;-ms-animation:pace-spinner .4s linear infinite;-o-animation:pace-spinner .4s linear infinite;animation:pace-spinner .4s linear infinite}@-webkit-keyframes pace-spinner{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes pace-spinner{0%{-moz-transform:rotate(0);transform:rotate(0)}100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}@-o-keyframes pace-spinner{0%{-o-transform:rotate(0);transform:rotate(0)}100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@-ms-keyframes pace-spinner{0%{-ms-transform:rotate(0);transform:rotate(0)}100%{-ms-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes pace-spinner{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}

+ 0 - 1
lib/pace/pace-theme-flat-top.min.css

@@ -1 +0,0 @@
-.pace,.pace .pace-progress{position:fixed;top:0;width:100%}.pace{-webkit-pointer-events:none;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;left:0;-webkit-transform:translate3d(0,-50px,0);-ms-transform:translate3d(0,-50px,0);transform:translate3d(0,-50px,0);-webkit-transition:-webkit-transform .5s ease-out;-ms-transition:-webkit-transform .5s ease-out;transition:transform .5s ease-out}.pace.pace-active{-webkit-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.pace .pace-progress{display:block;z-index:2000;right:100%;height:10px;background:#29d;pointer-events:none}

File diff suppressed because it is too large
+ 0 - 0
lib/pace/pace-theme-loading-bar.min.css


File diff suppressed because it is too large
+ 0 - 0
lib/pace/pace-theme-mac-osx.min.css


File diff suppressed because it is too large
+ 0 - 0
lib/pace/pace-theme-material.min.css


+ 0 - 1
lib/pace/pace-theme-minimal.min.css

@@ -1 +0,0 @@
-.pace{-webkit-pointer-events:none;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.pace-inactive{display:none}.pace .pace-progress{background:#29d;position:fixed;z-index:2000;top:0;right:100%;width:100%;height:2px}

File diff suppressed because it is too large
+ 0 - 1
lib/pace/pace.min.js


File diff suppressed because it is too large
+ 0 - 2
lib/velocity/velocity.min.js


File diff suppressed because it is too large
+ 0 - 1
lib/velocity/velocity.ui.min.js


File diff suppressed because it is too large
+ 0 - 0
posts/computer/index.html


File diff suppressed because it is too large
+ 0 - 0
posts/dinic/index.html


File diff suppressed because it is too large
+ 0 - 0
posts/fibonacci/index.html


File diff suppressed because it is too large
+ 0 - 0
posts/matrix-pow/index.html


File diff suppressed because it is too large
+ 0 - 0
posts/min-span-tree/index.html


File diff suppressed because it is too large
+ 0 - 0
posts/plan/index.html


File diff suppressed because it is too large
+ 0 - 0
posts/segment-tree/index.html


File diff suppressed because it is too large
+ 0 - 0
posts/test/index.html


File diff suppressed because it is too large
+ 0 - 0
posts/tree-link/index.html


File diff suppressed because it is too large
+ 0 - 0
posts/union-find/index.html


File diff suppressed because it is too large
+ 0 - 0
sans/index.html


File diff suppressed because it is too large
+ 0 - 0
tags/graph/index.html


File diff suppressed because it is too large
+ 0 - 0
tags/index.html


File diff suppressed because it is too large
+ 0 - 0
tags/math/index.html


File diff suppressed because it is too large
+ 0 - 0
tags/other/index.html


File diff suppressed because it is too large
+ 0 - 0
tags/struct/index.html


Some files were not shown because too many files changed in this diff