From ae28f6ef01347f7a38370aab42d4e959d8a72038 Mon Sep 17 00:00:00 2001 From: Grischa Brockhaus Date: Thu, 24 Nov 2022 23:48:08 +0100 Subject: [PATCH] AddOn Fancybox This addon loads all media attachments of a post into a "fancybox" instead of linking directly to the media. Each post gets its own attachment library, when there are more than one media attached you can scroll through them. --- fancybox/CHANGELOG.md | 9 + fancybox/README.md | 19 + fancybox/asset/fancybox/README.md | 62 + fancybox/asset/fancybox/fancybox.config.js | 3 + fancybox/asset/fancybox/jquery.fancybox.css | 895 +++ fancybox/asset/fancybox/jquery.fancybox.js | 5632 +++++++++++++++++ .../asset/fancybox/jquery.fancybox.min.css | 1 + .../asset/fancybox/jquery.fancybox.min.js | 13 + fancybox/createrelease | 17 + fancybox/dist/release.zip | Bin 0 -> 71194 bytes fancybox/fancybox.php | 61 + fancybox/test/fancybox-3.5.7.zip | Bin 0 -> 140771 bytes fancybox/test/imagetest.html | 21 + fancybox/test/test.html | 14 + fancybox/test/test.out.html | 14 + 15 files changed, 6761 insertions(+) create mode 100644 fancybox/CHANGELOG.md create mode 100644 fancybox/README.md create mode 100644 fancybox/asset/fancybox/README.md create mode 100644 fancybox/asset/fancybox/fancybox.config.js create mode 100644 fancybox/asset/fancybox/jquery.fancybox.css create mode 100644 fancybox/asset/fancybox/jquery.fancybox.js create mode 100644 fancybox/asset/fancybox/jquery.fancybox.min.css create mode 100644 fancybox/asset/fancybox/jquery.fancybox.min.js create mode 100755 fancybox/createrelease create mode 100644 fancybox/dist/release.zip create mode 100644 fancybox/fancybox.php create mode 100644 fancybox/test/fancybox-3.5.7.zip create mode 100644 fancybox/test/imagetest.html create mode 100644 fancybox/test/test.html create mode 100644 fancybox/test/test.out.html diff --git a/fancybox/CHANGELOG.md b/fancybox/CHANGELOG.md new file mode 100644 index 00000000..60edc635 --- /dev/null +++ b/fancybox/CHANGELOG.md @@ -0,0 +1,9 @@ +### Version 1.01 + +* One gallery for each post +* All media attached to a post are added to the posts gallery. +* Loop scrolling: You can step from last media to first and vice versa. +### Version 1.00 + +* First test version released. +* One fancybox per page displaying first media of each post. \ No newline at end of file diff --git a/fancybox/README.md b/fancybox/README.md new file mode 100644 index 00000000..3e342ee9 --- /dev/null +++ b/fancybox/README.md @@ -0,0 +1,19 @@ +# Post image gallery using fancybox + +Addon author: [Grischa Brockhaus](https://brockha.us) + +## Description + +This addon loads all media attachments of a post into a "fancybox" instead of linking directly to the media. + +Each post gets its own attachment library, when there are more than one media attached you can scroll through them. + +## Licenses + +### Fancybox Library + +This AddOn is using the jQuery library [fancybox](https://github.com/fancyapps/fancybox). + +The fancyBox libryry is licensed under the GPLv3 license for all open source applications. A commercial license is required for all commercial applications (including sites, themes and apps you plan to sell). + +[Read more about fancyBox license](https://github.com/fancyapps/fancybox). \ No newline at end of file diff --git a/fancybox/asset/fancybox/README.md b/fancybox/asset/fancybox/README.md new file mode 100644 index 00000000..e32b89e1 --- /dev/null +++ b/fancybox/asset/fancybox/README.md @@ -0,0 +1,62 @@ +# fancyBox 3.5.7 + +jQuery lightbox script for displaying images, videos and more. +Touch enabled, responsive and fully customizable. + +See the [project page](http://fancyapps.com/fancybox/3/) for documentation and a demonstration. + +Follow [@thefancyapps](//twitter.com/thefancyapps) for updates. + + +## Quick start + +1\. Add latest jQuery and fancyBox files + +```html + + + + +``` + + +2\. Create links + +```html + + + + + + + +``` + + +3\. Enjoy! + + +## License + +fancyBox is licensed under the [GPLv3](http://choosealicense.com/licenses/gpl-3.0) license for all open source applications. +A commercial license is required for all commercial applications (including sites, themes and apps you plan to sell). + +[Read more about fancyBox license](http://fancyapps.com/fancybox/3/#license). + +## Bugs and feature requests + +If you find a bug, please report it [here on Github](https://github.com/fancyapps/fancybox/issues). + +Guidelines for bug reports: + +1. Use the GitHub issue search — check if the issue has already been reported. +2. Check if the issue has been fixed — try to reproduce it using the latest master or development branch in the repository. +3. Isolate the problem — create a reduced test case and a live example. You can use CodePen to fork any demo found on documentation to use it as a template. + +A good bug report shouldn't leave others needing to chase you up for more information. +Please try to be as detailed as possible in your report. + + +Feature requests are welcome. Please look for existing ones and use GitHub's "reactions" feature to vote. + +Please do not use the issue tracker for personal support requests - use Stack Overflow ([fancybox-3](http://stackoverflow.com/questions/tagged/fancybox-3) tag) instead. diff --git a/fancybox/asset/fancybox/fancybox.config.js b/fancybox/asset/fancybox/fancybox.config.js new file mode 100644 index 00000000..904390d5 --- /dev/null +++ b/fancybox/asset/fancybox/fancybox.config.js @@ -0,0 +1,3 @@ +$(document).ready(function() { + $.fancybox.defaults.loop = "true"; +}); \ No newline at end of file diff --git a/fancybox/asset/fancybox/jquery.fancybox.css b/fancybox/asset/fancybox/jquery.fancybox.css new file mode 100644 index 00000000..16b01254 --- /dev/null +++ b/fancybox/asset/fancybox/jquery.fancybox.css @@ -0,0 +1,895 @@ +body.compensate-for-scrollbar { + overflow: hidden; +} + +.fancybox-active { + height: auto; +} + +.fancybox-is-hidden { + left: -9999px; + margin: 0; + position: absolute !important; + top: -9999px; + visibility: hidden; +} + +.fancybox-container { + -webkit-backface-visibility: hidden; + height: 100%; + left: 0; + outline: none; + position: fixed; + -webkit-tap-highlight-color: transparent; + top: 0; + -ms-touch-action: manipulation; + touch-action: manipulation; + transform: translateZ(0); + width: 100%; + z-index: 99992; +} + +.fancybox-container * { + box-sizing: border-box; +} + +.fancybox-outer, +.fancybox-inner, +.fancybox-bg, +.fancybox-stage { + bottom: 0; + left: 0; + position: absolute; + right: 0; + top: 0; +} + +.fancybox-outer { + -webkit-overflow-scrolling: touch; + overflow-y: auto; +} + +.fancybox-bg { + background: rgb(30, 30, 30); + opacity: 0; + transition-duration: inherit; + transition-property: opacity; + transition-timing-function: cubic-bezier(.47, 0, .74, .71); +} + +.fancybox-is-open .fancybox-bg { + opacity: .9; + transition-timing-function: cubic-bezier(.22, .61, .36, 1); +} + +.fancybox-infobar, +.fancybox-toolbar, +.fancybox-caption, +.fancybox-navigation .fancybox-button { + direction: ltr; + opacity: 0; + position: absolute; + transition: opacity .25s ease, visibility 0s ease .25s; + visibility: hidden; + z-index: 99997; +} + +.fancybox-show-infobar .fancybox-infobar, +.fancybox-show-toolbar .fancybox-toolbar, +.fancybox-show-caption .fancybox-caption, +.fancybox-show-nav .fancybox-navigation .fancybox-button { + opacity: 1; + transition: opacity .25s ease 0s, visibility 0s ease 0s; + visibility: visible; +} + +.fancybox-infobar { + color: #ccc; + font-size: 13px; + -webkit-font-smoothing: subpixel-antialiased; + height: 44px; + left: 0; + line-height: 44px; + min-width: 44px; + mix-blend-mode: difference; + padding: 0 10px; + pointer-events: none; + top: 0; + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.fancybox-toolbar { + right: 0; + top: 0; +} + +.fancybox-stage { + direction: ltr; + overflow: visible; + transform: translateZ(0); + z-index: 99994; +} + +.fancybox-is-open .fancybox-stage { + overflow: hidden; +} + +.fancybox-slide { + -webkit-backface-visibility: hidden; + /* Using without prefix would break IE11 */ + display: none; + height: 100%; + left: 0; + outline: none; + overflow: auto; + -webkit-overflow-scrolling: touch; + padding: 44px; + position: absolute; + text-align: center; + top: 0; + transition-property: transform, opacity; + white-space: normal; + width: 100%; + z-index: 99994; +} + +.fancybox-slide::before { + content: ''; + display: inline-block; + font-size: 0; + height: 100%; + vertical-align: middle; + width: 0; +} + +.fancybox-is-sliding .fancybox-slide, +.fancybox-slide--previous, +.fancybox-slide--current, +.fancybox-slide--next { + display: block; +} + +.fancybox-slide--image { + overflow: hidden; + padding: 44px 0; +} + +.fancybox-slide--image::before { + display: none; +} + +.fancybox-slide--html { + padding: 6px; +} + +.fancybox-content { + background: #fff; + display: inline-block; + margin: 0; + max-width: 100%; + overflow: auto; + -webkit-overflow-scrolling: touch; + padding: 44px; + position: relative; + text-align: left; + vertical-align: middle; +} + +.fancybox-slide--image .fancybox-content { + animation-timing-function: cubic-bezier(.5, 0, .14, 1); + -webkit-backface-visibility: hidden; + background: transparent; + background-repeat: no-repeat; + background-size: 100% 100%; + left: 0; + max-width: none; + overflow: visible; + padding: 0; + position: absolute; + top: 0; + -ms-transform-origin: top left; + transform-origin: top left; + transition-property: transform, opacity; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + z-index: 99995; +} + +.fancybox-can-zoomOut .fancybox-content { + cursor: zoom-out; +} + +.fancybox-can-zoomIn .fancybox-content { + cursor: zoom-in; +} + +.fancybox-can-swipe .fancybox-content, +.fancybox-can-pan .fancybox-content { + cursor: -webkit-grab; + cursor: grab; +} + +.fancybox-is-grabbing .fancybox-content { + cursor: -webkit-grabbing; + cursor: grabbing; +} + +.fancybox-container [data-selectable='true'] { + cursor: text; +} + +.fancybox-image, +.fancybox-spaceball { + background: transparent; + border: 0; + height: 100%; + left: 0; + margin: 0; + max-height: none; + max-width: none; + padding: 0; + position: absolute; + top: 0; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + width: 100%; +} + +.fancybox-spaceball { + z-index: 1; +} + +.fancybox-slide--video .fancybox-content, +.fancybox-slide--map .fancybox-content, +.fancybox-slide--pdf .fancybox-content, +.fancybox-slide--iframe .fancybox-content { + height: 100%; + overflow: visible; + padding: 0; + width: 100%; +} + +.fancybox-slide--video .fancybox-content { + background: #000; +} + +.fancybox-slide--map .fancybox-content { + background: #e5e3df; +} + +.fancybox-slide--iframe .fancybox-content { + background: #fff; +} + +.fancybox-video, +.fancybox-iframe { + background: transparent; + border: 0; + display: block; + height: 100%; + margin: 0; + overflow: hidden; + padding: 0; + width: 100%; +} + +/* Fix iOS */ +.fancybox-iframe { + left: 0; + position: absolute; + top: 0; +} + +.fancybox-error { + background: #fff; + cursor: default; + max-width: 400px; + padding: 40px; + width: 100%; +} + +.fancybox-error p { + color: #444; + font-size: 16px; + line-height: 20px; + margin: 0; + padding: 0; +} + +/* Buttons */ + +.fancybox-button { + background: rgba(30, 30, 30, .6); + border: 0; + border-radius: 0; + box-shadow: none; + cursor: pointer; + display: inline-block; + height: 44px; + margin: 0; + padding: 10px; + position: relative; + transition: color .2s; + vertical-align: top; + visibility: inherit; + width: 44px; +} + +.fancybox-button, +.fancybox-button:visited, +.fancybox-button:link { + color: #ccc; +} + +.fancybox-button:hover { + color: #fff; +} + +.fancybox-button:focus { + outline: none; +} + +.fancybox-button.fancybox-focus { + outline: 1px dotted; +} + +.fancybox-button[disabled], +.fancybox-button[disabled]:hover { + color: #888; + cursor: default; + outline: none; +} + +/* Fix IE11 */ +.fancybox-button div { + height: 100%; +} + +.fancybox-button svg { + display: block; + height: 100%; + overflow: visible; + position: relative; + width: 100%; +} + +.fancybox-button svg path { + fill: currentColor; + stroke-width: 0; +} + +.fancybox-button--play svg:nth-child(2), +.fancybox-button--fsenter svg:nth-child(2) { + display: none; +} + +.fancybox-button--pause svg:nth-child(1), +.fancybox-button--fsexit svg:nth-child(1) { + display: none; +} + +.fancybox-progress { + background: #ff5268; + height: 2px; + left: 0; + position: absolute; + right: 0; + top: 0; + -ms-transform: scaleX(0); + transform: scaleX(0); + -ms-transform-origin: 0; + transform-origin: 0; + transition-property: transform; + transition-timing-function: linear; + z-index: 99998; +} + +/* Close button on the top right corner of html content */ + +.fancybox-close-small { + background: transparent; + border: 0; + border-radius: 0; + color: #ccc; + cursor: pointer; + opacity: .8; + padding: 8px; + position: absolute; + right: -12px; + top: -44px; + z-index: 401; +} + +.fancybox-close-small:hover { + color: #fff; + opacity: 1; +} + +.fancybox-slide--html .fancybox-close-small { + color: currentColor; + padding: 10px; + right: 0; + top: 0; +} + +.fancybox-slide--image.fancybox-is-scaling .fancybox-content { + overflow: hidden; +} + +.fancybox-is-scaling .fancybox-close-small, +.fancybox-is-zoomable.fancybox-can-pan .fancybox-close-small { + display: none; +} + +/* Navigation arrows */ + +.fancybox-navigation .fancybox-button { + background-clip: content-box; + height: 100px; + opacity: 0; + position: absolute; + top: calc(50% - 50px); + width: 70px; +} + +.fancybox-navigation .fancybox-button div { + padding: 7px; +} + +.fancybox-navigation .fancybox-button--arrow_left { + left: 0; + left: env(safe-area-inset-left); + padding: 31px 26px 31px 6px; +} + +.fancybox-navigation .fancybox-button--arrow_right { + padding: 31px 6px 31px 26px; + right: 0; + right: env(safe-area-inset-right); +} + +/* Caption */ + +.fancybox-caption { + background: linear-gradient(to top, + rgba(0, 0, 0, .85) 0%, + rgba(0, 0, 0, .3) 50%, + rgba(0, 0, 0, .15) 65%, + rgba(0, 0, 0, .075) 75.5%, + rgba(0, 0, 0, .037) 82.85%, + rgba(0, 0, 0, .019) 88%, + rgba(0, 0, 0, 0) 100%); + bottom: 0; + color: #eee; + font-size: 14px; + font-weight: 400; + left: 0; + line-height: 1.5; + padding: 75px 44px 25px 44px; + pointer-events: none; + right: 0; + text-align: center; + z-index: 99996; +} + +@supports (padding: max(0px)) { + .fancybox-caption { + padding: 75px max(44px, env(safe-area-inset-right)) max(25px, env(safe-area-inset-bottom)) max(44px, env(safe-area-inset-left)); + } +} + +.fancybox-caption--separate { + margin-top: -50px; +} + +.fancybox-caption__body { + max-height: 50vh; + overflow: auto; + pointer-events: all; +} + +.fancybox-caption a, +.fancybox-caption a:link, +.fancybox-caption a:visited { + color: #ccc; + text-decoration: none; +} + +.fancybox-caption a:hover { + color: #fff; + text-decoration: underline; +} + +/* Loading indicator */ + +.fancybox-loading { + animation: fancybox-rotate 1s linear infinite; + background: transparent; + border: 4px solid #888; + border-bottom-color: #fff; + border-radius: 50%; + height: 50px; + left: 50%; + margin: -25px 0 0 -25px; + opacity: .7; + padding: 0; + position: absolute; + top: 50%; + width: 50px; + z-index: 99999; +} + +@keyframes fancybox-rotate { + 100% { + transform: rotate(360deg); + } +} + +/* Transition effects */ + +.fancybox-animated { + transition-timing-function: cubic-bezier(0, 0, .25, 1); +} + +/* transitionEffect: slide */ + +.fancybox-fx-slide.fancybox-slide--previous { + opacity: 0; + transform: translate3d(-100%, 0, 0); +} + +.fancybox-fx-slide.fancybox-slide--next { + opacity: 0; + transform: translate3d(100%, 0, 0); +} + +.fancybox-fx-slide.fancybox-slide--current { + opacity: 1; + transform: translate3d(0, 0, 0); +} + +/* transitionEffect: fade */ + +.fancybox-fx-fade.fancybox-slide--previous, +.fancybox-fx-fade.fancybox-slide--next { + opacity: 0; + transition-timing-function: cubic-bezier(.19, 1, .22, 1); +} + +.fancybox-fx-fade.fancybox-slide--current { + opacity: 1; +} + +/* transitionEffect: zoom-in-out */ + +.fancybox-fx-zoom-in-out.fancybox-slide--previous { + opacity: 0; + transform: scale3d(1.5, 1.5, 1.5); +} + +.fancybox-fx-zoom-in-out.fancybox-slide--next { + opacity: 0; + transform: scale3d(.5, .5, .5); +} + +.fancybox-fx-zoom-in-out.fancybox-slide--current { + opacity: 1; + transform: scale3d(1, 1, 1); +} + +/* transitionEffect: rotate */ + +.fancybox-fx-rotate.fancybox-slide--previous { + opacity: 0; + -ms-transform: rotate(-360deg); + transform: rotate(-360deg); +} + +.fancybox-fx-rotate.fancybox-slide--next { + opacity: 0; + -ms-transform: rotate(360deg); + transform: rotate(360deg); +} + +.fancybox-fx-rotate.fancybox-slide--current { + opacity: 1; + -ms-transform: rotate(0deg); + transform: rotate(0deg); +} + +/* transitionEffect: circular */ + +.fancybox-fx-circular.fancybox-slide--previous { + opacity: 0; + transform: scale3d(0, 0, 0) translate3d(-100%, 0, 0); +} + +.fancybox-fx-circular.fancybox-slide--next { + opacity: 0; + transform: scale3d(0, 0, 0) translate3d(100%, 0, 0); +} + +.fancybox-fx-circular.fancybox-slide--current { + opacity: 1; + transform: scale3d(1, 1, 1) translate3d(0, 0, 0); +} + +/* transitionEffect: tube */ + +.fancybox-fx-tube.fancybox-slide--previous { + transform: translate3d(-100%, 0, 0) scale(.1) skew(-10deg); +} + +.fancybox-fx-tube.fancybox-slide--next { + transform: translate3d(100%, 0, 0) scale(.1) skew(10deg); +} + +.fancybox-fx-tube.fancybox-slide--current { + transform: translate3d(0, 0, 0) scale(1); +} + +/* Styling for Small-Screen Devices */ +@media all and (max-height: 576px) { + .fancybox-slide { + padding-left: 6px; + padding-right: 6px; + } + + .fancybox-slide--image { + padding: 6px 0; + } + + .fancybox-close-small { + right: -6px; + } + + .fancybox-slide--image .fancybox-close-small { + background: #4e4e4e; + color: #f2f4f6; + height: 36px; + opacity: 1; + padding: 6px; + right: 0; + top: 0; + width: 36px; + } + + .fancybox-caption { + padding-left: 12px; + padding-right: 12px; + } + + @supports (padding: max(0px)) { + .fancybox-caption { + padding-left: max(12px, env(safe-area-inset-left)); + padding-right: max(12px, env(safe-area-inset-right)); + } + } +} +/* Share */ + +.fancybox-share { + background: #f4f4f4; + border-radius: 3px; + max-width: 90%; + padding: 30px; + text-align: center; +} + +.fancybox-share h1 { + color: #222; + font-size: 35px; + font-weight: 700; + margin: 0 0 20px 0; +} + +.fancybox-share p { + margin: 0; + padding: 0; +} + +.fancybox-share__button { + border: 0; + border-radius: 3px; + display: inline-block; + font-size: 14px; + font-weight: 700; + line-height: 40px; + margin: 0 5px 10px 5px; + min-width: 130px; + padding: 0 15px; + text-decoration: none; + transition: all .2s; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + white-space: nowrap; +} + +.fancybox-share__button:visited, +.fancybox-share__button:link { + color: #fff; +} + +.fancybox-share__button:hover { + text-decoration: none; +} + +.fancybox-share__button--fb { + background: #3b5998; +} + +.fancybox-share__button--fb:hover { + background: #344e86; +} + +.fancybox-share__button--pt { + background: #bd081d; +} + +.fancybox-share__button--pt:hover { + background: #aa0719; +} + +.fancybox-share__button--tw { + background: #1da1f2; +} + +.fancybox-share__button--tw:hover { + background: #0d95e8; +} + +.fancybox-share__button svg { + height: 25px; + margin-right: 7px; + position: relative; + top: -1px; + vertical-align: middle; + width: 25px; +} + +.fancybox-share__button svg path { + fill: #fff; +} + +.fancybox-share__input { + background: transparent; + border: 0; + border-bottom: 1px solid #d7d7d7; + border-radius: 0; + color: #5d5b5b; + font-size: 14px; + margin: 10px 0 0 0; + outline: none; + padding: 10px 15px; + width: 100%; +} +/* Thumbs */ + +.fancybox-thumbs { + background: #ddd; + bottom: 0; + display: none; + margin: 0; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; + padding: 2px 2px 4px 2px; + position: absolute; + right: 0; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + top: 0; + width: 212px; + z-index: 99995; +} + +.fancybox-thumbs-x { + overflow-x: auto; + overflow-y: hidden; +} + +.fancybox-show-thumbs .fancybox-thumbs { + display: block; +} + +.fancybox-show-thumbs .fancybox-inner { + right: 212px; +} + +.fancybox-thumbs__list { + font-size: 0; + height: 100%; + list-style: none; + margin: 0; + overflow-x: hidden; + overflow-y: auto; + padding: 0; + position: absolute; + position: relative; + white-space: nowrap; + width: 100%; +} + +.fancybox-thumbs-x .fancybox-thumbs__list { + overflow: hidden; +} + +.fancybox-thumbs-y .fancybox-thumbs__list::-webkit-scrollbar { + width: 7px; +} + +.fancybox-thumbs-y .fancybox-thumbs__list::-webkit-scrollbar-track { + background: #fff; + border-radius: 10px; + box-shadow: inset 0 0 6px rgba(0, 0, 0, .3); +} + +.fancybox-thumbs-y .fancybox-thumbs__list::-webkit-scrollbar-thumb { + background: #2a2a2a; + border-radius: 10px; +} + +.fancybox-thumbs__list a { + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + background-color: rgba(0, 0, 0, .1); + background-position: center center; + background-repeat: no-repeat; + background-size: cover; + cursor: pointer; + float: left; + height: 75px; + margin: 2px; + max-height: calc(100% - 8px); + max-width: calc(50% - 4px); + outline: none; + overflow: hidden; + padding: 0; + position: relative; + -webkit-tap-highlight-color: transparent; + width: 100px; +} + +.fancybox-thumbs__list a::before { + border: 6px solid #ff5268; + bottom: 0; + content: ''; + left: 0; + opacity: 0; + position: absolute; + right: 0; + top: 0; + transition: all .2s cubic-bezier(.25, .46, .45, .94); + z-index: 99991; +} + +.fancybox-thumbs__list a:focus::before { + opacity: .5; +} + +.fancybox-thumbs__list a.fancybox-thumbs-active::before { + opacity: 1; +} + +/* Styling for Small-Screen Devices */ +@media all and (max-width: 576px) { + .fancybox-thumbs { + width: 110px; + } + + .fancybox-show-thumbs .fancybox-inner { + right: 110px; + } + + .fancybox-thumbs__list a { + max-width: calc(100% - 10px); + } +} \ No newline at end of file diff --git a/fancybox/asset/fancybox/jquery.fancybox.js b/fancybox/asset/fancybox/jquery.fancybox.js new file mode 100644 index 00000000..806b2703 --- /dev/null +++ b/fancybox/asset/fancybox/jquery.fancybox.js @@ -0,0 +1,5632 @@ +// ================================================== +// 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: '', + + // 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: '", + 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: '", + + // Loading indicator template + spinnerTpl: '
', + + // Error message template + errorTpl: '

{{ERROR}}

', + + btnTpl: { + download: '' + + '' + + "", + + zoom: '", + + close: '", + + // Arrows + arrowLeft: '", + + arrowRight: '", + + // This small close button will be appended to your html/inline/ajax content by default, + // if "smallBtn" option is not set to false + smallBtn: '" + }, + + // 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.
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ßen", + NEXT: "Weiter", + PREV: "Zurück", + ERROR: "Die angeforderten Daten konnten nicht geladen werden.
Bitte versuchen Sie es später nochmal.", + PLAY_START: "Diaschau starten", + PLAY_STOP: "Diaschau beenden", + FULL_SCREEN: "Vollbild", + THUMBS: "Vorschaubilder", + DOWNLOAD: "Herunterladen", + SHARE: "Teilen", + ZOOM: "Vergröß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( + '" + ); + + $("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( '

Hi!

' ); + 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 = $('
').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 = $('
') + .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 = $('
') + .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 = $("
") + .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 = $("
") + .append($.trim(content)) + .contents(); + } + + // If "filter" option is provided, then filter content + if (slide.opts.filter) { + content = $("
") + .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("
"); + + 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("
") + .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") { + $('
').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: '" + }, + 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 = $('
').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: '" + }, + 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: '" + }, + 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 = $('
').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 = $('
').appendTo(self.$grid); + } + + $.each(instance.group, function (i, item) { + src = item.thumb; + + if (!src && item.type === "image") { + src = item.src; + } + + list.push( + '" + ); + }); + + 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: '" + }, + share: { + url: function (instance, item) { + return ( + (!instance.currentHash && !(item.type === "inline" || item.type === "html") ? item.origSrc || item.src : false) || window.location + ); + }, + tpl: '
' + + "

{{SHARE}}

" + + "

" + + '' + + '' + + "Facebook" + + "" + + '' + + '' + + "Twitter" + + "" + + '' + + '' + + "Pinterest" + + "" + + "

" + + '

' + + "
" + } + }); + + function escapeHtml(string) { + var entityMap = { + "&": "&", + "<": "<", + ">": ">", + '"': """, + "'": "'", + "/": "/", + "`": "`", + "=": "=" + }; + + 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); \ No newline at end of file diff --git a/fancybox/asset/fancybox/jquery.fancybox.min.css b/fancybox/asset/fancybox/jquery.fancybox.min.css new file mode 100644 index 00000000..7cc60b29 --- /dev/null +++ b/fancybox/asset/fancybox/jquery.fancybox.min.css @@ -0,0 +1 @@ +body.compensate-for-scrollbar{overflow:hidden}.fancybox-active{height:auto}.fancybox-is-hidden{left:-9999px;margin:0;position:absolute!important;top:-9999px;visibility:hidden}.fancybox-container{-webkit-backface-visibility:hidden;height:100%;left:0;outline:none;position:fixed;-webkit-tap-highlight-color:transparent;top:0;-ms-touch-action:manipulation;touch-action:manipulation;transform:translateZ(0);width:100%;z-index:99992}.fancybox-container *{box-sizing:border-box}.fancybox-bg,.fancybox-inner,.fancybox-outer,.fancybox-stage{bottom:0;left:0;position:absolute;right:0;top:0}.fancybox-outer{-webkit-overflow-scrolling:touch;overflow-y:auto}.fancybox-bg{background:#1e1e1e;opacity:0;transition-duration:inherit;transition-property:opacity;transition-timing-function:cubic-bezier(.47,0,.74,.71)}.fancybox-is-open .fancybox-bg{opacity:.9;transition-timing-function:cubic-bezier(.22,.61,.36,1)}.fancybox-caption,.fancybox-infobar,.fancybox-navigation .fancybox-button,.fancybox-toolbar{direction:ltr;opacity:0;position:absolute;transition:opacity .25s ease,visibility 0s ease .25s;visibility:hidden;z-index:99997}.fancybox-show-caption .fancybox-caption,.fancybox-show-infobar .fancybox-infobar,.fancybox-show-nav .fancybox-navigation .fancybox-button,.fancybox-show-toolbar .fancybox-toolbar{opacity:1;transition:opacity .25s ease 0s,visibility 0s ease 0s;visibility:visible}.fancybox-infobar{color:#ccc;font-size:13px;-webkit-font-smoothing:subpixel-antialiased;height:44px;left:0;line-height:44px;min-width:44px;mix-blend-mode:difference;padding:0 10px;pointer-events:none;top:0;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fancybox-toolbar{right:0;top:0}.fancybox-stage{direction:ltr;overflow:visible;transform:translateZ(0);z-index:99994}.fancybox-is-open .fancybox-stage{overflow:hidden}.fancybox-slide{-webkit-backface-visibility:hidden;display:none;height:100%;left:0;outline:none;overflow:auto;-webkit-overflow-scrolling:touch;padding:44px;position:absolute;text-align:center;top:0;transition-property:transform,opacity;white-space:normal;width:100%;z-index:99994}.fancybox-slide:before{content:"";display:inline-block;font-size:0;height:100%;vertical-align:middle;width:0}.fancybox-is-sliding .fancybox-slide,.fancybox-slide--current,.fancybox-slide--next,.fancybox-slide--previous{display:block}.fancybox-slide--image{overflow:hidden;padding:44px 0}.fancybox-slide--image:before{display:none}.fancybox-slide--html{padding:6px}.fancybox-content{background:#fff;display:inline-block;margin:0;max-width:100%;overflow:auto;-webkit-overflow-scrolling:touch;padding:44px;position:relative;text-align:left;vertical-align:middle}.fancybox-slide--image .fancybox-content{animation-timing-function:cubic-bezier(.5,0,.14,1);-webkit-backface-visibility:hidden;background:transparent;background-repeat:no-repeat;background-size:100% 100%;left:0;max-width:none;overflow:visible;padding:0;position:absolute;top:0;transform-origin:top left;transition-property:transform,opacity;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:99995}.fancybox-can-zoomOut .fancybox-content{cursor:zoom-out}.fancybox-can-zoomIn .fancybox-content{cursor:zoom-in}.fancybox-can-pan .fancybox-content,.fancybox-can-swipe .fancybox-content{cursor:grab}.fancybox-is-grabbing .fancybox-content{cursor:grabbing}.fancybox-container [data-selectable=true]{cursor:text}.fancybox-image,.fancybox-spaceball{background:transparent;border:0;height:100%;left:0;margin:0;max-height:none;max-width:none;padding:0;position:absolute;top:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.fancybox-spaceball{z-index:1}.fancybox-slide--iframe .fancybox-content,.fancybox-slide--map .fancybox-content,.fancybox-slide--pdf .fancybox-content,.fancybox-slide--video .fancybox-content{height:100%;overflow:visible;padding:0;width:100%}.fancybox-slide--video .fancybox-content{background:#000}.fancybox-slide--map .fancybox-content{background:#e5e3df}.fancybox-slide--iframe .fancybox-content{background:#fff}.fancybox-iframe,.fancybox-video{background:transparent;border:0;display:block;height:100%;margin:0;overflow:hidden;padding:0;width:100%}.fancybox-iframe{left:0;position:absolute;top:0}.fancybox-error{background:#fff;cursor:default;max-width:400px;padding:40px;width:100%}.fancybox-error p{color:#444;font-size:16px;line-height:20px;margin:0;padding:0}.fancybox-button{background:rgba(30,30,30,.6);border:0;border-radius:0;box-shadow:none;cursor:pointer;display:inline-block;height:44px;margin:0;padding:10px;position:relative;transition:color .2s;vertical-align:top;visibility:inherit;width:44px}.fancybox-button,.fancybox-button:link,.fancybox-button:visited{color:#ccc}.fancybox-button:hover{color:#fff}.fancybox-button:focus{outline:none}.fancybox-button.fancybox-focus{outline:1px dotted}.fancybox-button[disabled],.fancybox-button[disabled]:hover{color:#888;cursor:default;outline:none}.fancybox-button div{height:100%}.fancybox-button svg{display:block;height:100%;overflow:visible;position:relative;width:100%}.fancybox-button svg path{fill:currentColor;stroke-width:0}.fancybox-button--fsenter svg:nth-child(2),.fancybox-button--fsexit svg:first-child,.fancybox-button--pause svg:first-child,.fancybox-button--play svg:nth-child(2){display:none}.fancybox-progress{background:#ff5268;height:2px;left:0;position:absolute;right:0;top:0;transform:scaleX(0);transform-origin:0;transition-property:transform;transition-timing-function:linear;z-index:99998}.fancybox-close-small{background:transparent;border:0;border-radius:0;color:#ccc;cursor:pointer;opacity:.8;padding:8px;position:absolute;right:-12px;top:-44px;z-index:401}.fancybox-close-small:hover{color:#fff;opacity:1}.fancybox-slide--html .fancybox-close-small{color:currentColor;padding:10px;right:0;top:0}.fancybox-slide--image.fancybox-is-scaling .fancybox-content{overflow:hidden}.fancybox-is-scaling .fancybox-close-small,.fancybox-is-zoomable.fancybox-can-pan .fancybox-close-small{display:none}.fancybox-navigation .fancybox-button{background-clip:content-box;height:100px;opacity:0;position:absolute;top:calc(50% - 50px);width:70px}.fancybox-navigation .fancybox-button div{padding:7px}.fancybox-navigation .fancybox-button--arrow_left{left:0;left:env(safe-area-inset-left);padding:31px 26px 31px 6px}.fancybox-navigation .fancybox-button--arrow_right{padding:31px 6px 31px 26px;right:0;right:env(safe-area-inset-right)}.fancybox-caption{background:linear-gradient(0deg,rgba(0,0,0,.85) 0,rgba(0,0,0,.3) 50%,rgba(0,0,0,.15) 65%,rgba(0,0,0,.075) 75.5%,rgba(0,0,0,.037) 82.85%,rgba(0,0,0,.019) 88%,transparent);bottom:0;color:#eee;font-size:14px;font-weight:400;left:0;line-height:1.5;padding:75px 44px 25px;pointer-events:none;right:0;text-align:center;z-index:99996}@supports (padding:max(0px)){.fancybox-caption{padding:75px max(44px,env(safe-area-inset-right)) max(25px,env(safe-area-inset-bottom)) max(44px,env(safe-area-inset-left))}}.fancybox-caption--separate{margin-top:-50px}.fancybox-caption__body{max-height:50vh;overflow:auto;pointer-events:all}.fancybox-caption a,.fancybox-caption a:link,.fancybox-caption a:visited{color:#ccc;text-decoration:none}.fancybox-caption a:hover{color:#fff;text-decoration:underline}.fancybox-loading{animation:a 1s linear infinite;background:transparent;border:4px solid #888;border-bottom-color:#fff;border-radius:50%;height:50px;left:50%;margin:-25px 0 0 -25px;opacity:.7;padding:0;position:absolute;top:50%;width:50px;z-index:99999}@keyframes a{to{transform:rotate(1turn)}}.fancybox-animated{transition-timing-function:cubic-bezier(0,0,.25,1)}.fancybox-fx-slide.fancybox-slide--previous{opacity:0;transform:translate3d(-100%,0,0)}.fancybox-fx-slide.fancybox-slide--next{opacity:0;transform:translate3d(100%,0,0)}.fancybox-fx-slide.fancybox-slide--current{opacity:1;transform:translateZ(0)}.fancybox-fx-fade.fancybox-slide--next,.fancybox-fx-fade.fancybox-slide--previous{opacity:0;transition-timing-function:cubic-bezier(.19,1,.22,1)}.fancybox-fx-fade.fancybox-slide--current{opacity:1}.fancybox-fx-zoom-in-out.fancybox-slide--previous{opacity:0;transform:scale3d(1.5,1.5,1.5)}.fancybox-fx-zoom-in-out.fancybox-slide--next{opacity:0;transform:scale3d(.5,.5,.5)}.fancybox-fx-zoom-in-out.fancybox-slide--current{opacity:1;transform:scaleX(1)}.fancybox-fx-rotate.fancybox-slide--previous{opacity:0;transform:rotate(-1turn)}.fancybox-fx-rotate.fancybox-slide--next{opacity:0;transform:rotate(1turn)}.fancybox-fx-rotate.fancybox-slide--current{opacity:1;transform:rotate(0deg)}.fancybox-fx-circular.fancybox-slide--previous{opacity:0;transform:scale3d(0,0,0) translate3d(-100%,0,0)}.fancybox-fx-circular.fancybox-slide--next{opacity:0;transform:scale3d(0,0,0) translate3d(100%,0,0)}.fancybox-fx-circular.fancybox-slide--current{opacity:1;transform:scaleX(1) translateZ(0)}.fancybox-fx-tube.fancybox-slide--previous{transform:translate3d(-100%,0,0) scale(.1) skew(-10deg)}.fancybox-fx-tube.fancybox-slide--next{transform:translate3d(100%,0,0) scale(.1) skew(10deg)}.fancybox-fx-tube.fancybox-slide--current{transform:translateZ(0) scale(1)}@media (max-height:576px){.fancybox-slide{padding-left:6px;padding-right:6px}.fancybox-slide--image{padding:6px 0}.fancybox-close-small{right:-6px}.fancybox-slide--image .fancybox-close-small{background:#4e4e4e;color:#f2f4f6;height:36px;opacity:1;padding:6px;right:0;top:0;width:36px}.fancybox-caption{padding-left:12px;padding-right:12px}@supports (padding:max(0px)){.fancybox-caption{padding-left:max(12px,env(safe-area-inset-left));padding-right:max(12px,env(safe-area-inset-right))}}}.fancybox-share{background:#f4f4f4;border-radius:3px;max-width:90%;padding:30px;text-align:center}.fancybox-share h1{color:#222;font-size:35px;font-weight:700;margin:0 0 20px}.fancybox-share p{margin:0;padding:0}.fancybox-share__button{border:0;border-radius:3px;display:inline-block;font-size:14px;font-weight:700;line-height:40px;margin:0 5px 10px;min-width:130px;padding:0 15px;text-decoration:none;transition:all .2s;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;white-space:nowrap}.fancybox-share__button:link,.fancybox-share__button:visited{color:#fff}.fancybox-share__button:hover{text-decoration:none}.fancybox-share__button--fb{background:#3b5998}.fancybox-share__button--fb:hover{background:#344e86}.fancybox-share__button--pt{background:#bd081d}.fancybox-share__button--pt:hover{background:#aa0719}.fancybox-share__button--tw{background:#1da1f2}.fancybox-share__button--tw:hover{background:#0d95e8}.fancybox-share__button svg{height:25px;margin-right:7px;position:relative;top:-1px;vertical-align:middle;width:25px}.fancybox-share__button svg path{fill:#fff}.fancybox-share__input{background:transparent;border:0;border-bottom:1px solid #d7d7d7;border-radius:0;color:#5d5b5b;font-size:14px;margin:10px 0 0;outline:none;padding:10px 15px;width:100%}.fancybox-thumbs{background:#ddd;bottom:0;display:none;margin:0;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;padding:2px 2px 4px;position:absolute;right:0;-webkit-tap-highlight-color:rgba(0,0,0,0);top:0;width:212px;z-index:99995}.fancybox-thumbs-x{overflow-x:auto;overflow-y:hidden}.fancybox-show-thumbs .fancybox-thumbs{display:block}.fancybox-show-thumbs .fancybox-inner{right:212px}.fancybox-thumbs__list{font-size:0;height:100%;list-style:none;margin:0;overflow-x:hidden;overflow-y:auto;padding:0;position:absolute;position:relative;white-space:nowrap;width:100%}.fancybox-thumbs-x .fancybox-thumbs__list{overflow:hidden}.fancybox-thumbs-y .fancybox-thumbs__list::-webkit-scrollbar{width:7px}.fancybox-thumbs-y .fancybox-thumbs__list::-webkit-scrollbar-track{background:#fff;border-radius:10px;box-shadow:inset 0 0 6px rgba(0,0,0,.3)}.fancybox-thumbs-y .fancybox-thumbs__list::-webkit-scrollbar-thumb{background:#2a2a2a;border-radius:10px}.fancybox-thumbs__list a{-webkit-backface-visibility:hidden;backface-visibility:hidden;background-color:rgba(0,0,0,.1);background-position:50%;background-repeat:no-repeat;background-size:cover;cursor:pointer;float:left;height:75px;margin:2px;max-height:calc(100% - 8px);max-width:calc(50% - 4px);outline:none;overflow:hidden;padding:0;position:relative;-webkit-tap-highlight-color:transparent;width:100px}.fancybox-thumbs__list a:before{border:6px solid #ff5268;bottom:0;content:"";left:0;opacity:0;position:absolute;right:0;top:0;transition:all .2s cubic-bezier(.25,.46,.45,.94);z-index:99991}.fancybox-thumbs__list a:focus:before{opacity:.5}.fancybox-thumbs__list a.fancybox-thumbs-active:before{opacity:1}@media (max-width:576px){.fancybox-thumbs{width:110px}.fancybox-show-thumbs .fancybox-inner{right:110px}.fancybox-thumbs__list a{max-width:calc(100% - 10px)}} \ No newline at end of file diff --git a/fancybox/asset/fancybox/jquery.fancybox.min.js b/fancybox/asset/fancybox/jquery.fancybox.min.js new file mode 100644 index 00000000..d5d10f6b --- /dev/null +++ b/fancybox/asset/fancybox/jquery.fancybox.min.js @@ -0,0 +1,13 @@ +// ================================================== +// 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(t,e,n,o){"use strict";function i(t,e){var o,i,a,s=[],r=0;t&&t.isDefaultPrevented()||(t.preventDefault(),e=e||{},t&&t.data&&(e=h(t.data.options,e)),o=e.$target||n(t.currentTarget).trigger("blur"),(a=n.fancybox.getInstance())&&a.$trigger&&a.$trigger.is(o)||(e.selector?s=n(e.selector):(i=o.attr("data-fancybox")||"",i?(s=t.data?t.data.items:[],s=s.length?s.filter('[data-fancybox="'+i+'"]'):n('[data-fancybox="'+i+'"]')):s=[o]),r=n(s).index(o),r<0&&(r=0),a=n.fancybox.open(s,e,r),a.$trigger=o))}if(t.console=t.console||{info:function(t){}},n){if(n.fn.fancybox)return void console.info("fancyBox already initialized");var a={closeExisting:!1,loop:!1,gutter:50,keyboard:!0,preventCaptionOverlap:!0,arrows:!0,infobar:!0,smallBtn:"auto",toolbar:"auto",buttons:["zoom","slideShow","thumbs","close"],idleTime:3,protect:!1,modal:!1,image:{preload:!1},ajax:{settings:{data:{fancybox:!0}}},iframe:{tpl:'',preload:!0,css:{},attr:{scrolling:"auto"}},video:{tpl:'',format:"",autoStart:!0},defaultType:"image",animationEffect:"zoom",animationDuration:366,zoomOpacity:"auto",transitionEffect:"fade",transitionDuration:366,slideClass:"",baseClass:"",baseTpl:'',spinnerTpl:'
',errorTpl:'

{{ERROR}}

',btnTpl:{download:'',zoom:'',close:'',arrowLeft:'',arrowRight:'',smallBtn:''},parentEl:"body",hideScrollbar:!0,autoFocus:!0,backFocus:!0,trapFocus:!0,fullScreen:{autoStart:!1},touch:{vertical:!0,momentum:!0},hash:null,media:{},slideShow:{autoStart:!1,speed:3e3},thumbs:{autoStart:!1,hideOnClose:!0,parentEl:".fancybox-container",axis:"y"},wheel:"auto",onInit:n.noop,beforeLoad:n.noop,afterLoad:n.noop,beforeShow:n.noop,afterShow:n.noop,beforeClose:n.noop,afterClose:n.noop,onActivate:n.noop,onDeactivate:n.noop,clickContent:function(t,e){return"image"===t.type&&"zoom"},clickSlide:"close",clickOutside:"close",dblclickContent:!1,dblclickSlide:!1,dblclickOutside:!1,mobile:{preventCaptionOverlap:!1,idleTime:!1,clickContent:function(t,e){return"image"===t.type&&"toggleControls"},clickSlide:function(t,e){return"image"===t.type?"toggleControls":"close"},dblclickContent:function(t,e){return"image"===t.type&&"zoom"},dblclickSlide:function(t,e){return"image"===t.type&&"zoom"}},lang:"en",i18n:{en:{CLOSE:"Close",NEXT:"Next",PREV:"Previous",ERROR:"The requested content cannot be loaded.
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ßen",NEXT:"Weiter",PREV:"Zurück",ERROR:"Die angeforderten Daten konnten nicht geladen werden.
Bitte versuchen Sie es später nochmal.",PLAY_START:"Diaschau starten",PLAY_STOP:"Diaschau beenden",FULL_SCREEN:"Vollbild",THUMBS:"Vorschaubilder",DOWNLOAD:"Herunterladen",SHARE:"Teilen",ZOOM:"Vergrößern"}}},s=n(t),r=n(e),c=0,l=function(t){return t&&t.hasOwnProperty&&t instanceof n},d=function(){return t.requestAnimationFrame||t.webkitRequestAnimationFrame||t.mozRequestAnimationFrame||t.oRequestAnimationFrame||function(e){return t.setTimeout(e,1e3/60)}}(),u=function(){return t.cancelAnimationFrame||t.webkitCancelAnimationFrame||t.mozCancelAnimationFrame||t.oCancelAnimationFrame||function(e){t.clearTimeout(e)}}(),f=function(){var t,n=e.createElement("fakeelement"),o={transition:"transitionend",OTransition:"oTransitionEnd",MozTransition:"transitionend",WebkitTransition:"webkitTransitionEnd"};for(t in o)if(void 0!==n.style[t])return o[t];return"transitionend"}(),p=function(t){return t&&t.length&&t[0].offsetHeight},h=function(t,e){var o=n.extend(!0,{},t,e);return n.each(e,function(t,e){n.isArray(e)&&(o[t]=e)}),o},g=function(t){var o,i;return!(!t||t.ownerDocument!==e)&&(n(".fancybox-container").css("pointer-events","none"),o={x:t.getBoundingClientRect().left+t.offsetWidth/2,y:t.getBoundingClientRect().top+t.offsetHeight/2},i=e.elementFromPoint(o.x,o.y)===t,n(".fancybox-container").css("pointer-events",""),i)},b=function(t,e,o){var i=this;i.opts=h({index:o},n.fancybox.defaults),n.isPlainObject(e)&&(i.opts=h(i.opts,e)),n.fancybox.isMobile&&(i.opts=h(i.opts,i.opts.mobile)),i.id=i.opts.id||++c,i.currIndex=parseInt(i.opts.index,10)||0,i.prevIndex=null,i.prevPos=null,i.currPos=0,i.firstRun=!0,i.group=[],i.slides={},i.addContent(t),i.group.length&&i.init()};n.extend(b.prototype,{init:function(){var o,i,a=this,s=a.group[a.currIndex],r=s.opts;r.closeExisting&&n.fancybox.close(!0),n("body").addClass("fancybox-active"),!n.fancybox.getInstance()&&!1!==r.hideScrollbar&&!n.fancybox.isMobile&&e.body.scrollHeight>t.innerHeight&&(n("head").append('"),n("body").addClass("compensate-for-scrollbar")),i="",n.each(r.buttons,function(t,e){i+=r.btnTpl[e]||""}),o=n(a.translate(a,r.baseTpl.replace("{{buttons}}",i).replace("{{arrows}}",r.btnTpl.arrowLeft+r.btnTpl.arrowRight))).attr("id","fancybox-container-"+a.id).addClass(r.baseClass).data("FancyBox",a).appendTo(r.parentEl),a.$refs={container:o},["bg","inner","infobar","toolbar","stage","caption","navigation"].forEach(function(t){a.$refs[t]=o.find(".fancybox-"+t)}),a.trigger("onInit"),a.activate(),a.jumpTo(a.currIndex)},translate:function(t,e){var n=t.opts.i18n[t.opts.lang]||t.opts.i18n.en;return e.replace(/\{\{(\w+)\}\}/g,function(t,e){return void 0===n[e]?t:n[e]})},addContent:function(t){var e,o=this,i=n.makeArray(t);n.each(i,function(t,e){var i,a,s,r,c,l={},d={};n.isPlainObject(e)?(l=e,d=e.opts||e):"object"===n.type(e)&&n(e).length?(i=n(e),d=i.data()||{},d=n.extend(!0,{},d,d.options),d.$orig=i,l.src=o.opts.src||d.src||i.attr("href"),l.type||l.src||(l.type="inline",l.src=e)):l={type:"html",src:e+""},l.opts=n.extend(!0,{},o.opts,d),n.isArray(d.buttons)&&(l.opts.buttons=d.buttons),n.fancybox.isMobile&&l.opts.mobile&&(l.opts=h(l.opts,l.opts.mobile)),a=l.type||l.opts.type,r=l.src||"",!a&&r&&((s=r.match(/\.(mp4|mov|ogv|webm)((\?|#).*)?$/i))?(a="video",l.opts.video.format||(l.opts.video.format="video/"+("ogv"===s[1]?"ogg":s[1]))):r.match(/(^data:image\/[a-z0-9+\/=]*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg|ico)((\?|#).*)?$)/i)?a="image":r.match(/\.(pdf)((\?|#).*)?$/i)?(a="iframe",l=n.extend(!0,l,{contentType:"pdf",opts:{iframe:{preload:!1}}})):"#"===r.charAt(0)&&(a="inline")),a?l.type=a:o.trigger("objectNeedsType",l),l.contentType||(l.contentType=n.inArray(l.type,["html","inline","ajax"])>-1?"html":l.type),l.index=o.group.length,"auto"==l.opts.smallBtn&&(l.opts.smallBtn=n.inArray(l.type,["html","inline","ajax"])>-1),"auto"===l.opts.toolbar&&(l.opts.toolbar=!l.opts.smallBtn),l.$thumb=l.opts.$thumb||null,l.opts.$trigger&&l.index===o.opts.index&&(l.$thumb=l.opts.$trigger.find("img:first"),l.$thumb.length&&(l.opts.$orig=l.opts.$trigger)),l.$thumb&&l.$thumb.length||!l.opts.$orig||(l.$thumb=l.opts.$orig.find("img:first")),l.$thumb&&!l.$thumb.length&&(l.$thumb=null),l.thumb=l.opts.thumb||(l.$thumb?l.$thumb[0].src:null),"function"===n.type(l.opts.caption)&&(l.opts.caption=l.opts.caption.apply(e,[o,l])),"function"===n.type(o.opts.caption)&&(l.opts.caption=o.opts.caption.apply(e,[o,l])),l.opts.caption instanceof n||(l.opts.caption=void 0===l.opts.caption?"":l.opts.caption+""),"ajax"===l.type&&(c=r.split(/\s+/,2),c.length>1&&(l.src=c.shift(),l.opts.filter=c.shift())),l.opts.modal&&(l.opts=n.extend(!0,l.opts,{trapFocus:!0,infobar:0,toolbar:0,smallBtn:0,keyboard:0,slideShow:0,fullScreen:0,thumbs:0,touch:0,clickContent:!1,clickSlide:!1,clickOutside:!1,dblclickContent:!1,dblclickSlide:!1,dblclickOutside:!1})),o.group.push(l)}),Object.keys(o.slides).length&&(o.updateControls(),(e=o.Thumbs)&&e.isActive&&(e.create(),e.focus()))},addEvents:function(){var e=this;e.removeEvents(),e.$refs.container.on("click.fb-close","[data-fancybox-close]",function(t){t.stopPropagation(),t.preventDefault(),e.close(t)}).on("touchstart.fb-prev click.fb-prev","[data-fancybox-prev]",function(t){t.stopPropagation(),t.preventDefault(),e.previous()}).on("touchstart.fb-next click.fb-next","[data-fancybox-next]",function(t){t.stopPropagation(),t.preventDefault(),e.next()}).on("click.fb","[data-fancybox-zoom]",function(t){e[e.isScaledDown()?"scaleToActual":"scaleToFit"]()}),s.on("orientationchange.fb resize.fb",function(t){t&&t.originalEvent&&"resize"===t.originalEvent.type?(e.requestId&&u(e.requestId),e.requestId=d(function(){e.update(t)})):(e.current&&"iframe"===e.current.type&&e.$refs.stage.hide(),setTimeout(function(){e.$refs.stage.show(),e.update(t)},n.fancybox.isMobile?600:250))}),r.on("keydown.fb",function(t){var o=n.fancybox?n.fancybox.getInstance():null,i=o.current,a=t.keyCode||t.which;if(9==a)return void(i.opts.trapFocus&&e.focus(t));if(!(!i.opts.keyboard||t.ctrlKey||t.altKey||t.shiftKey||n(t.target).is("input,textarea,video,audio,select")))return 8===a||27===a?(t.preventDefault(),void e.close(t)):37===a||38===a?(t.preventDefault(),void e.previous()):39===a||40===a?(t.preventDefault(),void e.next()):void e.trigger("afterKeydown",t,a)}),e.group[e.currIndex].opts.idleTime&&(e.idleSecondsCounter=0,r.on("mousemove.fb-idle mouseleave.fb-idle mousedown.fb-idle touchstart.fb-idle touchmove.fb-idle scroll.fb-idle keydown.fb-idle",function(t){e.idleSecondsCounter=0,e.isIdle&&e.showControls(),e.isIdle=!1}),e.idleInterval=t.setInterval(function(){++e.idleSecondsCounter>=e.group[e.currIndex].opts.idleTime&&!e.isDragging&&(e.isIdle=!0,e.idleSecondsCounter=0,e.hideControls())},1e3))},removeEvents:function(){var e=this;s.off("orientationchange.fb resize.fb"),r.off("keydown.fb .fb-idle"),this.$refs.container.off(".fb-close .fb-prev .fb-next"),e.idleInterval&&(t.clearInterval(e.idleInterval),e.idleInterval=null)},previous:function(t){return this.jumpTo(this.currPos-1,t)},next:function(t){return this.jumpTo(this.currPos+1,t)},jumpTo:function(t,e){var o,i,a,s,r,c,l,d,u,f=this,h=f.group.length;if(!(f.isDragging||f.isClosing||f.isAnimating&&f.firstRun)){if(t=parseInt(t,10),!(a=f.current?f.current.opts.loop:f.opts.loop)&&(t<0||t>=h))return!1;if(o=f.firstRun=!Object.keys(f.slides).length,r=f.current,f.prevIndex=f.currIndex,f.prevPos=f.currPos,s=f.createSlide(t),h>1&&((a||s.index0)&&f.createSlide(t-1)),f.current=s,f.currIndex=s.index,f.currPos=s.pos,f.trigger("beforeShow",o),f.updateControls(),s.forcedDuration=void 0,n.isNumeric(e)?s.forcedDuration=e:e=s.opts[o?"animationDuration":"transitionDuration"],e=parseInt(e,10),i=f.isMoved(s),s.$slide.addClass("fancybox-slide--current"),o)return s.opts.animationEffect&&e&&f.$refs.container.css("transition-duration",e+"ms"),f.$refs.container.addClass("fancybox-is-open").trigger("focus"),f.loadSlide(s),void f.preload("image");c=n.fancybox.getTranslate(r.$slide),l=n.fancybox.getTranslate(f.$refs.stage),n.each(f.slides,function(t,e){n.fancybox.stop(e.$slide,!0)}),r.pos!==s.pos&&(r.isComplete=!1),r.$slide.removeClass("fancybox-slide--complete fancybox-slide--current"),i?(u=c.left-(r.pos*c.width+r.pos*r.opts.gutter),n.each(f.slides,function(t,o){o.$slide.removeClass("fancybox-animated").removeClass(function(t,e){return(e.match(/(^|\s)fancybox-fx-\S+/g)||[]).join(" ")});var i=o.pos*c.width+o.pos*o.opts.gutter;n.fancybox.setTranslate(o.$slide,{top:0,left:i-l.left+u}),o.pos!==s.pos&&o.$slide.addClass("fancybox-slide--"+(o.pos>s.pos?"next":"previous")),p(o.$slide),n.fancybox.animate(o.$slide,{top:0,left:(o.pos-s.pos)*c.width+(o.pos-s.pos)*o.opts.gutter},e,function(){o.$slide.css({transform:"",opacity:""}).removeClass("fancybox-slide--next fancybox-slide--previous"),o.pos===f.currPos&&f.complete()})})):e&&s.opts.transitionEffect&&(d="fancybox-animated fancybox-fx-"+s.opts.transitionEffect,r.$slide.addClass("fancybox-slide--"+(r.pos>s.pos?"next":"previous")),n.fancybox.animate(r.$slide,d,e,function(){r.$slide.removeClass(d).removeClass("fancybox-slide--next fancybox-slide--previous")},!1)),s.isLoaded?f.revealContent(s):f.loadSlide(s),f.preload("image")}},createSlide:function(t){var e,o,i=this;return o=t%i.group.length,o=o<0?i.group.length+o:o,!i.slides[t]&&i.group[o]&&(e=n('
').appendTo(i.$refs.stage),i.slides[t]=n.extend(!0,{},i.group[o],{pos:t,$slide:e,isLoaded:!1}),i.updateSlide(i.slides[t])),i.slides[t]},scaleToActual:function(t,e,o){var i,a,s,r,c,l=this,d=l.current,u=d.$content,f=n.fancybox.getTranslate(d.$slide).width,p=n.fancybox.getTranslate(d.$slide).height,h=d.width,g=d.height;l.isAnimating||l.isMoved()||!u||"image"!=d.type||!d.isLoaded||d.hasError||(l.isAnimating=!0,n.fancybox.stop(u),t=void 0===t?.5*f:t,e=void 0===e?.5*p:e,i=n.fancybox.getTranslate(u),i.top-=n.fancybox.getTranslate(d.$slide).top,i.left-=n.fancybox.getTranslate(d.$slide).left,r=h/i.width,c=g/i.height,a=.5*f-.5*h,s=.5*p-.5*g,h>f&&(a=i.left*r-(t*r-t),a>0&&(a=0),ap&&(s=i.top*c-(e*c-e),s>0&&(s=0),se-.5&&(l=e),d>o-.5&&(d=o),"image"===t.type?(u.top=Math.floor(.5*(o-d))+parseFloat(c.css("paddingTop")),u.left=Math.floor(.5*(e-l))+parseFloat(c.css("paddingLeft"))):"video"===t.contentType&&(a=t.opts.width&&t.opts.height?l/d:t.opts.ratio||16/9,d>l/a?d=l/a:l>d*a&&(l=d*a)),u.width=l,u.height=d,u)},update:function(t){var e=this;n.each(e.slides,function(n,o){e.updateSlide(o,t)})},updateSlide:function(t,e){var o=this,i=t&&t.$content,a=t.width||t.opts.width,s=t.height||t.opts.height,r=t.$slide;o.adjustCaption(t),i&&(a||s||"video"===t.contentType)&&!t.hasError&&(n.fancybox.stop(i),n.fancybox.setTranslate(i,o.getFitPos(t)),t.pos===o.currPos&&(o.isAnimating=!1,o.updateCursor())),o.adjustLayout(t),r.length&&(r.trigger("refresh"),t.pos===o.currPos&&o.$refs.toolbar.add(o.$refs.navigation.find(".fancybox-button--arrow_right")).toggleClass("compensate-for-scrollbar",r.get(0).scrollHeight>r.get(0).clientHeight)),o.trigger("onUpdate",t,e)},centerSlide:function(t){var e=this,o=e.current,i=o.$slide;!e.isClosing&&o&&(i.siblings().css({transform:"",opacity:""}),i.parent().children().removeClass("fancybox-slide--previous fancybox-slide--next"),n.fancybox.animate(i,{top:0,left:0,opacity:1},void 0===t?0:t,function(){i.css({transform:"",opacity:""}),o.isComplete||e.complete()},!1))},isMoved:function(t){var e,o,i=t||this.current;return!!i&&(o=n.fancybox.getTranslate(this.$refs.stage),e=n.fancybox.getTranslate(i.$slide),!i.$slide.hasClass("fancybox-animated")&&(Math.abs(e.top-o.top)>.5||Math.abs(e.left-o.left)>.5))},updateCursor:function(t,e){var o,i,a=this,s=a.current,r=a.$refs.container;s&&!a.isClosing&&a.Guestures&&(r.removeClass("fancybox-is-zoomable fancybox-can-zoomIn fancybox-can-zoomOut fancybox-can-swipe fancybox-can-pan"),o=a.canPan(t,e),i=!!o||a.isZoomable(),r.toggleClass("fancybox-is-zoomable",i),n("[data-fancybox-zoom]").prop("disabled",!i),o?r.addClass("fancybox-can-pan"):i&&("zoom"===s.opts.clickContent||n.isFunction(s.opts.clickContent)&&"zoom"==s.opts.clickContent(s))?r.addClass("fancybox-can-zoomIn"):s.opts.touch&&(s.opts.touch.vertical||a.group.length>1)&&"video"!==s.contentType&&r.addClass("fancybox-can-swipe"))},isZoomable:function(){var t,e=this,n=e.current;if(n&&!e.isClosing&&"image"===n.type&&!n.hasError){if(!n.isLoaded)return!0;if((t=e.getFitPos(n))&&(n.width>t.width||n.height>t.height))return!0}return!1},isScaledDown:function(t,e){var o=this,i=!1,a=o.current,s=a.$content;return void 0!==t&&void 0!==e?i=t1.5||Math.abs(a.height-s.height)>1.5)),s},loadSlide:function(t){var e,o,i,a=this;if(!t.isLoading&&!t.isLoaded){if(t.isLoading=!0,!1===a.trigger("beforeLoad",t))return t.isLoading=!1,!1;switch(e=t.type,o=t.$slide,o.off("refresh").trigger("onReset").addClass(t.opts.slideClass),e){case"image":a.setImage(t);break;case"iframe":a.setIframe(t);break;case"html":a.setContent(t,t.src||t.content);break;case"video":a.setContent(t,t.opts.video.tpl.replace(/\{\{src\}\}/gi,t.src).replace("{{format}}",t.opts.videoFormat||t.opts.video.format||"").replace("{{poster}}",t.thumb||""));break;case"inline":n(t.src).length?a.setContent(t,n(t.src)):a.setError(t);break;case"ajax":a.showLoading(t),i=n.ajax(n.extend({},t.opts.ajax.settings,{url:t.src,success:function(e,n){"success"===n&&a.setContent(t,e)},error:function(e,n){e&&"abort"!==n&&a.setError(t)}})),o.one("onReset",function(){i.abort()});break;default:a.setError(t)}return!0}},setImage:function(t){var o,i=this;setTimeout(function(){var e=t.$image;i.isClosing||!t.isLoading||e&&e.length&&e[0].complete||t.hasError||i.showLoading(t)},50),i.checkSrcset(t),t.$content=n('
').addClass("fancybox-is-hidden").appendTo(t.$slide.addClass("fancybox-slide--image")),!1!==t.opts.preload&&t.opts.width&&t.opts.height&&t.thumb&&(t.width=t.opts.width,t.height=t.opts.height,o=e.createElement("img"),o.onerror=function(){n(this).remove(),t.$ghost=null},o.onload=function(){i.afterLoad(t)},t.$ghost=n(o).addClass("fancybox-image").appendTo(t.$content).attr("src",t.thumb)),i.setBigImage(t)},checkSrcset:function(e){var n,o,i,a,s=e.opts.srcset||e.opts.image.srcset;if(s){i=t.devicePixelRatio||1,a=t.innerWidth*i,o=s.split(",").map(function(t){var e={};return t.trim().split(/\s+/).forEach(function(t,n){var o=parseInt(t.substring(0,t.length-1),10);if(0===n)return e.url=t;o&&(e.value=o,e.postfix=t[t.length-1])}),e}),o.sort(function(t,e){return t.value-e.value});for(var r=0;r=a||"x"===c.postfix&&c.value>=i){n=c;break}}!n&&o.length&&(n=o[o.length-1]),n&&(e.src=n.url,e.width&&e.height&&"w"==n.postfix&&(e.height=e.width/e.height*n.value,e.width=n.value),e.opts.srcset=s)}},setBigImage:function(t){var o=this,i=e.createElement("img"),a=n(i);t.$image=a.one("error",function(){o.setError(t)}).one("load",function(){var e;t.$ghost||(o.resolveImageSlideSize(t,this.naturalWidth,this.naturalHeight),o.afterLoad(t)),o.isClosing||(t.opts.srcset&&(e=t.opts.sizes,e&&"auto"!==e||(e=(t.width/t.height>1&&s.width()/s.height()>1?"100":Math.round(t.width/t.height*100))+"vw"),a.attr("sizes",e).attr("srcset",t.opts.srcset)),t.$ghost&&setTimeout(function(){t.$ghost&&!o.isClosing&&t.$ghost.hide()},Math.min(300,Math.max(1e3,t.height/1600))),o.hideLoading(t))}).addClass("fancybox-image").attr("src",t.src).appendTo(t.$content),(i.complete||"complete"==i.readyState)&&a.naturalWidth&&a.naturalHeight?a.trigger("load"):i.error&&a.trigger("error")},resolveImageSlideSize:function(t,e,n){var o=parseInt(t.opts.width,10),i=parseInt(t.opts.height,10);t.width=e,t.height=n,o>0&&(t.width=o,t.height=Math.floor(o*n/e)),i>0&&(t.width=Math.floor(i*e/n),t.height=i)},setIframe:function(t){var e,o=this,i=t.opts.iframe,a=t.$slide;t.$content=n('
').css(i.css).appendTo(a),a.addClass("fancybox-slide--"+t.contentType),t.$iframe=e=n(i.tpl.replace(/\{rnd\}/g,(new Date).getTime())).attr(i.attr).appendTo(t.$content),i.preload?(o.showLoading(t),e.on("load.fb error.fb",function(e){this.isReady=1,t.$slide.trigger("refresh"),o.afterLoad(t)}),a.on("refresh.fb",function(){var n,o,s=t.$content,r=i.css.width,c=i.css.height;if(1===e[0].isReady){try{n=e.contents(),o=n.find("body")}catch(t){}o&&o.length&&o.children().length&&(a.css("overflow","visible"),s.css({width:"100%","max-width":"100%",height:"9999px"}),void 0===r&&(r=Math.ceil(Math.max(o[0].clientWidth,o.outerWidth(!0)))),s.css("width",r||"").css("max-width",""),void 0===c&&(c=Math.ceil(Math.max(o[0].clientHeight,o.outerHeight(!0)))),s.css("height",c||""),a.css("overflow","auto")),s.removeClass("fancybox-is-hidden")}})):o.afterLoad(t),e.attr("src",t.src),a.one("onReset",function(){try{n(this).find("iframe").hide().unbind().attr("src","//about:blank")}catch(t){}n(this).off("refresh.fb").empty(),t.isLoaded=!1,t.isRevealed=!1})},setContent:function(t,e){var o=this;o.isClosing||(o.hideLoading(t),t.$content&&n.fancybox.stop(t.$content),t.$slide.empty(),l(e)&&e.parent().length?((e.hasClass("fancybox-content")||e.parent().hasClass("fancybox-content"))&&e.parents(".fancybox-slide").trigger("onReset"),t.$placeholder=n("
").hide().insertAfter(e),e.css("display","inline-block")):t.hasError||("string"===n.type(e)&&(e=n("
").append(n.trim(e)).contents()),t.opts.filter&&(e=n("
").html(e).find(t.opts.filter))),t.$slide.one("onReset",function(){n(this).find("video,audio").trigger("pause"),t.$placeholder&&(t.$placeholder.after(e.removeClass("fancybox-content").hide()).remove(),t.$placeholder=null),t.$smallBtn&&(t.$smallBtn.remove(),t.$smallBtn=null),t.hasError||(n(this).empty(),t.isLoaded=!1,t.isRevealed=!1)}),n(e).appendTo(t.$slide),n(e).is("video,audio")&&(n(e).addClass("fancybox-video"),n(e).wrap("
"),t.contentType="video",t.opts.width=t.opts.width||n(e).attr("width"),t.opts.height=t.opts.height||n(e).attr("height")),t.$content=t.$slide.children().filter("div,form,main,video,audio,article,.fancybox-content").first(),t.$content.siblings().hide(),t.$content.length||(t.$content=t.$slide.wrapInner("
").children().first()),t.$content.addClass("fancybox-content"),t.$slide.addClass("fancybox-slide--"+t.contentType),o.afterLoad(t))},setError:function(t){t.hasError=!0,t.$slide.trigger("onReset").removeClass("fancybox-slide--"+t.contentType).addClass("fancybox-slide--error"),t.contentType="html",this.setContent(t,this.translate(t,t.opts.errorTpl)),t.pos===this.currPos&&(this.isAnimating=!1)},showLoading:function(t){var e=this;(t=t||e.current)&&!t.$spinner&&(t.$spinner=n(e.translate(e,e.opts.spinnerTpl)).appendTo(t.$slide).hide().fadeIn("fast"))},hideLoading:function(t){var e=this;(t=t||e.current)&&t.$spinner&&(t.$spinner.stop().remove(),delete t.$spinner)},afterLoad:function(t){var e=this;e.isClosing||(t.isLoading=!1,t.isLoaded=!0,e.trigger("afterLoad",t),e.hideLoading(t),!t.opts.smallBtn||t.$smallBtn&&t.$smallBtn.length||(t.$smallBtn=n(e.translate(t,t.opts.btnTpl.smallBtn)).appendTo(t.$content)),t.opts.protect&&t.$content&&!t.hasError&&(t.$content.on("contextmenu.fb",function(t){return 2==t.button&&t.preventDefault(),!0}),"image"===t.type&&n('
').appendTo(t.$content)),e.adjustCaption(t),e.adjustLayout(t),t.pos===e.currPos&&e.updateCursor(),e.revealContent(t))},adjustCaption:function(t){var e,n=this,o=t||n.current,i=o.opts.caption,a=o.opts.preventCaptionOverlap,s=n.$refs.caption,r=!1;s.toggleClass("fancybox-caption--separate",a),a&&i&&i.length&&(o.pos!==n.currPos?(e=s.clone().appendTo(s.parent()),e.children().eq(0).empty().html(i),r=e.outerHeight(!0),e.empty().remove()):n.$caption&&(r=n.$caption.outerHeight(!0)),o.$slide.css("padding-bottom",r||""))},adjustLayout:function(t){var e,n,o,i,a=this,s=t||a.current;s.isLoaded&&!0!==s.opts.disableLayoutFix&&(s.$content.css("margin-bottom",""),s.$content.outerHeight()>s.$slide.height()+.5&&(o=s.$slide[0].style["padding-bottom"],i=s.$slide.css("padding-bottom"),parseFloat(i)>0&&(e=s.$slide[0].scrollHeight,s.$slide.css("padding-bottom",0),Math.abs(e-s.$slide[0].scrollHeight)<1&&(n=i),s.$slide.css("padding-bottom",o))),s.$content.css("margin-bottom",n))},revealContent:function(t){var e,o,i,a,s=this,r=t.$slide,c=!1,l=!1,d=s.isMoved(t),u=t.isRevealed;return t.isRevealed=!0,e=t.opts[s.firstRun?"animationEffect":"transitionEffect"],i=t.opts[s.firstRun?"animationDuration":"transitionDuration"],i=parseInt(void 0===t.forcedDuration?i:t.forcedDuration,10),!d&&t.pos===s.currPos&&i||(e=!1),"zoom"===e&&(t.pos===s.currPos&&i&&"image"===t.type&&!t.hasError&&(l=s.getThumbPos(t))?c=s.getFitPos(t):e="fade"),"zoom"===e?(s.isAnimating=!0,c.scaleX=c.width/l.width,c.scaleY=c.height/l.height,a=t.opts.zoomOpacity,"auto"==a&&(a=Math.abs(t.width/t.height-l.width/l.height)>.1),a&&(l.opacity=.1,c.opacity=1),n.fancybox.setTranslate(t.$content.removeClass("fancybox-is-hidden"),l),p(t.$content),void n.fancybox.animate(t.$content,c,i,function(){s.isAnimating=!1,s.complete()})):(s.updateSlide(t),e?(n.fancybox.stop(r),o="fancybox-slide--"+(t.pos>=s.prevPos?"next":"previous")+" fancybox-animated fancybox-fx-"+e,r.addClass(o).removeClass("fancybox-slide--current"),t.$content.removeClass("fancybox-is-hidden"),p(r),"image"!==t.type&&t.$content.hide().show(0),void n.fancybox.animate(r,"fancybox-slide--current",i,function(){r.removeClass(o).css({transform:"",opacity:""}),t.pos===s.currPos&&s.complete()},!0)):(t.$content.removeClass("fancybox-is-hidden"),u||!d||"image"!==t.type||t.hasError||t.$content.hide().fadeIn("fast"),void(t.pos===s.currPos&&s.complete())))},getThumbPos:function(t){var e,o,i,a,s,r=!1,c=t.$thumb;return!(!c||!g(c[0]))&&(e=n.fancybox.getTranslate(c),o=parseFloat(c.css("border-top-width")||0),i=parseFloat(c.css("border-right-width")||0),a=parseFloat(c.css("border-bottom-width")||0),s=parseFloat(c.css("border-left-width")||0),r={top:e.top+o,left:e.left+s,width:e.width-i-s,height:e.height-o-a,scaleX:1,scaleY:1},e.width>0&&e.height>0&&r)},complete:function(){var t,e=this,o=e.current,i={};!e.isMoved()&&o.isLoaded&&(o.isComplete||(o.isComplete=!0,o.$slide.siblings().trigger("onReset"),e.preload("inline"),p(o.$slide),o.$slide.addClass("fancybox-slide--complete"),n.each(e.slides,function(t,o){o.pos>=e.currPos-1&&o.pos<=e.currPos+1?i[o.pos]=o:o&&(n.fancybox.stop(o.$slide),o.$slide.off().remove())}),e.slides=i),e.isAnimating=!1,e.updateCursor(),e.trigger("afterShow"),o.opts.video.autoStart&&o.$slide.find("video,audio").filter(":visible:first").trigger("play").one("ended",function(){Document.exitFullscreen?Document.exitFullscreen():this.webkitExitFullscreen&&this.webkitExitFullscreen(),e.next()}),o.opts.autoFocus&&"html"===o.contentType&&(t=o.$content.find("input[autofocus]:enabled:visible:first"),t.length?t.trigger("focus"):e.focus(null,!0)),o.$slide.scrollTop(0).scrollLeft(0))},preload:function(t){var e,n,o=this;o.group.length<2||(n=o.slides[o.currPos+1],e=o.slides[o.currPos-1],e&&e.type===t&&o.loadSlide(e),n&&n.type===t&&o.loadSlide(n))},focus:function(t,o){var i,a,s=this,r=["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(",");s.isClosing||(i=!t&&s.current&&s.current.isComplete?s.current.$slide.find("*:visible"+(o?":not(.fancybox-close-small)":"")):s.$refs.container.find("*:visible"),i=i.filter(r).filter(function(){return"hidden"!==n(this).css("visibility")&&!n(this).hasClass("disabled")}),i.length?(a=i.index(e.activeElement),t&&t.shiftKey?(a<0||0==a)&&(t.preventDefault(),i.eq(i.length-1).trigger("focus")):(a<0||a==i.length-1)&&(t&&t.preventDefault(),i.eq(0).trigger("focus"))):s.$refs.container.trigger("focus"))},activate:function(){var t=this;n(".fancybox-container").each(function(){var e=n(this).data("FancyBox");e&&e.id!==t.id&&!e.isClosing&&(e.trigger("onDeactivate"),e.removeEvents(),e.isVisible=!1)}),t.isVisible=!0,(t.current||t.isIdle)&&(t.update(),t.updateControls()),t.trigger("onActivate"),t.addEvents()},close:function(t,e){var o,i,a,s,r,c,l,u=this,f=u.current,h=function(){u.cleanUp(t)};return!u.isClosing&&(u.isClosing=!0,!1===u.trigger("beforeClose",t)?(u.isClosing=!1,d(function(){u.update()}),!1):(u.removeEvents(),a=f.$content,o=f.opts.animationEffect,i=n.isNumeric(e)?e:o?f.opts.animationDuration:0,f.$slide.removeClass("fancybox-slide--complete fancybox-slide--next fancybox-slide--previous fancybox-animated"),!0!==t?n.fancybox.stop(f.$slide):o=!1,f.$slide.siblings().trigger("onReset").remove(),i&&u.$refs.container.removeClass("fancybox-is-open").addClass("fancybox-is-closing").css("transition-duration",i+"ms"),u.hideLoading(f),u.hideControls(!0),u.updateCursor(),"zoom"!==o||a&&i&&"image"===f.type&&!u.isMoved()&&!f.hasError&&(l=u.getThumbPos(f))||(o="fade"),"zoom"===o?(n.fancybox.stop(a),s=n.fancybox.getTranslate(a),c={top:s.top,left:s.left,scaleX:s.width/l.width,scaleY:s.height/l.height,width:l.width,height:l.height},r=f.opts.zoomOpacity, +"auto"==r&&(r=Math.abs(f.width/f.height-l.width/l.height)>.1),r&&(l.opacity=0),n.fancybox.setTranslate(a,c),p(a),n.fancybox.animate(a,l,i,h),!0):(o&&i?n.fancybox.animate(f.$slide.addClass("fancybox-slide--previous").removeClass("fancybox-slide--current"),"fancybox-animated fancybox-fx-"+o,i,h):!0===t?setTimeout(h,i):h(),!0)))},cleanUp:function(e){var o,i,a,s=this,r=s.current.opts.$orig;s.current.$slide.trigger("onReset"),s.$refs.container.empty().remove(),s.trigger("afterClose",e),s.current.opts.backFocus&&(r&&r.length&&r.is(":visible")||(r=s.$trigger),r&&r.length&&(i=t.scrollX,a=t.scrollY,r.trigger("focus"),n("html, body").scrollTop(a).scrollLeft(i))),s.current=null,o=n.fancybox.getInstance(),o?o.activate():(n("body").removeClass("fancybox-active compensate-for-scrollbar"),n("#fancybox-style-noscroll").remove())},trigger:function(t,e){var o,i=Array.prototype.slice.call(arguments,1),a=this,s=e&&e.opts?e:a.current;if(s?i.unshift(s):s=a,i.unshift(a),n.isFunction(s.opts[t])&&(o=s.opts[t].apply(s,i)),!1===o)return o;"afterClose"!==t&&a.$refs?a.$refs.container.trigger(t+".fb",i):r.trigger(t+".fb",i)},updateControls:function(){var t=this,o=t.current,i=o.index,a=t.$refs.container,s=t.$refs.caption,r=o.opts.caption;o.$slide.trigger("refresh"),r&&r.length?(t.$caption=s,s.children().eq(0).html(r)):t.$caption=null,t.hasHiddenControls||t.isIdle||t.showControls(),a.find("[data-fancybox-count]").html(t.group.length),a.find("[data-fancybox-index]").html(i+1),a.find("[data-fancybox-prev]").prop("disabled",!o.opts.loop&&i<=0),a.find("[data-fancybox-next]").prop("disabled",!o.opts.loop&&i>=t.group.length-1),"image"===o.type?a.find("[data-fancybox-zoom]").show().end().find("[data-fancybox-download]").attr("href",o.opts.image.src||o.src).show():o.opts.toolbar&&a.find("[data-fancybox-download],[data-fancybox-zoom]").hide(),n(e.activeElement).is(":hidden,[disabled]")&&t.$refs.container.trigger("focus")},hideControls:function(t){var e=this,n=["infobar","toolbar","nav"];!t&&e.current.opts.preventCaptionOverlap||n.push("caption"),this.$refs.container.removeClass(n.map(function(t){return"fancybox-show-"+t}).join(" ")),this.hasHiddenControls=!0},showControls:function(){var t=this,e=t.current?t.current.opts:t.opts,n=t.$refs.container;t.hasHiddenControls=!1,t.idleSecondsCounter=0,n.toggleClass("fancybox-show-toolbar",!(!e.toolbar||!e.buttons)).toggleClass("fancybox-show-infobar",!!(e.infobar&&t.group.length>1)).toggleClass("fancybox-show-caption",!!t.$caption).toggleClass("fancybox-show-nav",!!(e.arrows&&t.group.length>1)).toggleClass("fancybox-is-modal",!!e.modal)},toggleControls:function(){this.hasHiddenControls?this.showControls():this.hideControls()}}),n.fancybox={version:"3.5.7",defaults:a,getInstance:function(t){var e=n('.fancybox-container:not(".fancybox-is-closing"):last').data("FancyBox"),o=Array.prototype.slice.call(arguments,1);return e instanceof b&&("string"===n.type(t)?e[t].apply(e,o):"function"===n.type(t)&&t.apply(e,o),e)},open:function(t,e,n){return new b(t,e,n)},close:function(t){var e=this.getInstance();e&&(e.close(),!0===t&&this.close(t))},destroy:function(){this.close(!0),r.add("body").off("click.fb-start","**")},isMobile:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),use3d:function(){var n=e.createElement("div");return t.getComputedStyle&&t.getComputedStyle(n)&&t.getComputedStyle(n).getPropertyValue("transform")&&!(e.documentMode&&e.documentMode<11)}(),getTranslate:function(t){var e;return!(!t||!t.length)&&(e=t[0].getBoundingClientRect(),{top:e.top||0,left:e.left||0,width:e.width,height:e.height,opacity:parseFloat(t.css("opacity"))})},setTranslate:function(t,e){var n="",o={};if(t&&e)return void 0===e.left&&void 0===e.top||(n=(void 0===e.left?t.position().left:e.left)+"px, "+(void 0===e.top?t.position().top:e.top)+"px",n=this.use3d?"translate3d("+n+", 0px)":"translate("+n+")"),void 0!==e.scaleX&&void 0!==e.scaleY?n+=" scale("+e.scaleX+", "+e.scaleY+")":void 0!==e.scaleX&&(n+=" scaleX("+e.scaleX+")"),n.length&&(o.transform=n),void 0!==e.opacity&&(o.opacity=e.opacity),void 0!==e.width&&(o.width=e.width),void 0!==e.height&&(o.height=e.height),t.css(o)},animate:function(t,e,o,i,a){var s,r=this;n.isFunction(o)&&(i=o,o=null),r.stop(t),s=r.getTranslate(t),t.on(f,function(c){(!c||!c.originalEvent||t.is(c.originalEvent.target)&&"z-index"!=c.originalEvent.propertyName)&&(r.stop(t),n.isNumeric(o)&&t.css("transition-duration",""),n.isPlainObject(e)?void 0!==e.scaleX&&void 0!==e.scaleY&&r.setTranslate(t,{top:e.top,left:e.left,width:s.width*e.scaleX,height:s.height*e.scaleY,scaleX:1,scaleY:1}):!0!==a&&t.removeClass(e),n.isFunction(i)&&i(c))}),n.isNumeric(o)&&t.css("transition-duration",o+"ms"),n.isPlainObject(e)?(void 0!==e.scaleX&&void 0!==e.scaleY&&(delete e.width,delete e.height,t.parent().hasClass("fancybox-slide--image")&&t.parent().addClass("fancybox-is-scaling")),n.fancybox.setTranslate(t,e)):t.addClass(e),t.data("timer",setTimeout(function(){t.trigger(f)},o+33))},stop:function(t,e){t&&t.length&&(clearTimeout(t.data("timer")),e&&t.trigger(f),t.off(f).css("transition-duration",""),t.parent().removeClass("fancybox-is-scaling"))}},n.fn.fancybox=function(t){var e;return t=t||{},e=t.selector||!1,e?n("body").off("click.fb-start",e).on("click.fb-start",e,{options:t},i):this.off("click.fb-start").on("click.fb-start",{items:this,options:t},i),this},r.on("click.fb-start","[data-fancybox]",i),r.on("click.fb-start","[data-fancybox-trigger]",function(t){n('[data-fancybox="'+n(this).attr("data-fancybox-trigger")+'"]').eq(n(this).attr("data-fancybox-index")||0).trigger("click.fb-start",{$trigger:n(this)})}),function(){var t=null;r.on("mousedown mouseup focus blur",".fancybox-button",function(e){switch(e.type){case"mousedown":t=n(this);break;case"mouseup":t=null;break;case"focusin":n(".fancybox-button").removeClass("fancybox-focus"),n(this).is(t)||n(this).is("[disabled]")||n(this).addClass("fancybox-focus");break;case"focusout":n(".fancybox-button").removeClass("fancybox-focus")}})}()}}(window,document,jQuery),function(t){"use strict";var e={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"},gmap_place:{matcher:/(maps\.)?google\.([a-z]{2,3}(\.[a-z]{2})?)\/(((maps\/(place\/(.*)\/)?\@(.*),(\d+.?\d+?)z))|(\?ll=))(.*)?/i,type:"iframe",url:function(t){return"//maps.google."+t[2]+"/?ll="+(t[9]?t[9]+"&z="+Math.floor(t[10])+(t[12]?t[12].replace(/^\//,"&"):""):t[12]+"").replace(/\?/,"&")+"&output="+(t[12]&&t[12].indexOf("layer=c")>0?"svembed":"embed")}},gmap_search:{matcher:/(maps\.)?google\.([a-z]{2,3}(\.[a-z]{2})?)\/(maps\/search\/)(.*)/i,type:"iframe",url:function(t){return"//maps.google."+t[2]+"/maps?q="+t[5].replace("query=","q=").replace("api=1","")+"&output=embed"}}},n=function(e,n,o){if(e)return o=o||"","object"===t.type(o)&&(o=t.param(o,!0)),t.each(n,function(t,n){e=e.replace("$"+t,n||"")}),o.length&&(e+=(e.indexOf("?")>0?"&":"?")+o),e};t(document).on("objectNeedsType.fb",function(o,i,a){var s,r,c,l,d,u,f,p=a.src||"",h=!1;s=t.extend(!0,{},e,a.opts.media),t.each(s,function(e,o){if(c=p.match(o.matcher)){if(h=o.type,f=e,u={},o.paramPlace&&c[o.paramPlace]){d=c[o.paramPlace],"?"==d[0]&&(d=d.substring(1)),d=d.split("&");for(var i=0;i1&&("youtube"===n.contentSource||"vimeo"===n.contentSource)&&o.load(n.contentSource)}})}(jQuery),function(t,e,n){"use strict";var o=function(){return t.requestAnimationFrame||t.webkitRequestAnimationFrame||t.mozRequestAnimationFrame||t.oRequestAnimationFrame||function(e){return t.setTimeout(e,1e3/60)}}(),i=function(){return t.cancelAnimationFrame||t.webkitCancelAnimationFrame||t.mozCancelAnimationFrame||t.oCancelAnimationFrame||function(e){t.clearTimeout(e)}}(),a=function(e){var n=[];e=e.originalEvent||e||t.e,e=e.touches&&e.touches.length?e.touches:e.changedTouches&&e.changedTouches.length?e.changedTouches:[e];for(var o in e)e[o].pageX?n.push({x:e[o].pageX,y:e[o].pageY}):e[o].clientX&&n.push({x:e[o].clientX,y:e[o].clientY});return n},s=function(t,e,n){return e&&t?"x"===n?t.x-e.x:"y"===n?t.y-e.y:Math.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2)):0},r=function(t){if(t.is('a,area,button,[role="button"],input,label,select,summary,textarea,video,audio,iframe')||n.isFunction(t.get(0).onclick)||t.data("selectable"))return!0;for(var e=0,o=t[0].attributes,i=o.length;ee.clientHeight,a=("scroll"===o||"auto"===o)&&e.scrollWidth>e.clientWidth;return i||a},l=function(t){for(var e=!1;;){if(e=c(t.get(0)))break;if(t=t.parent(),!t.length||t.hasClass("fancybox-stage")||t.is("body"))break}return e},d=function(t){var e=this;e.instance=t,e.$bg=t.$refs.bg,e.$stage=t.$refs.stage,e.$container=t.$refs.container,e.destroy(),e.$container.on("touchstart.fb.touch mousedown.fb.touch",n.proxy(e,"ontouchstart"))};d.prototype.destroy=function(){var t=this;t.$container.off(".fb.touch"),n(e).off(".fb.touch"),t.requestId&&(i(t.requestId),t.requestId=null),t.tapped&&(clearTimeout(t.tapped),t.tapped=null)},d.prototype.ontouchstart=function(o){var i=this,c=n(o.target),d=i.instance,u=d.current,f=u.$slide,p=u.$content,h="touchstart"==o.type;if(h&&i.$container.off("mousedown.fb.touch"),(!o.originalEvent||2!=o.originalEvent.button)&&f.length&&c.length&&!r(c)&&!r(c.parent())&&(c.is("img")||!(o.originalEvent.clientX>c[0].clientWidth+c.offset().left))){if(!u||d.isAnimating||u.$slide.hasClass("fancybox-animated"))return o.stopPropagation(),void o.preventDefault();i.realPoints=i.startPoints=a(o),i.startPoints.length&&(u.touch&&o.stopPropagation(),i.startEvent=o,i.canTap=!0,i.$target=c,i.$content=p,i.opts=u.opts.touch,i.isPanning=!1,i.isSwiping=!1,i.isZooming=!1,i.isScrolling=!1,i.canPan=d.canPan(),i.startTime=(new Date).getTime(),i.distanceX=i.distanceY=i.distance=0,i.canvasWidth=Math.round(f[0].clientWidth),i.canvasHeight=Math.round(f[0].clientHeight),i.contentLastPos=null,i.contentStartPos=n.fancybox.getTranslate(i.$content)||{top:0,left:0},i.sliderStartPos=n.fancybox.getTranslate(f),i.stagePos=n.fancybox.getTranslate(d.$refs.stage),i.sliderStartPos.top-=i.stagePos.top,i.sliderStartPos.left-=i.stagePos.left,i.contentStartPos.top-=i.stagePos.top,i.contentStartPos.left-=i.stagePos.left,n(e).off(".fb.touch").on(h?"touchend.fb.touch touchcancel.fb.touch":"mouseup.fb.touch mouseleave.fb.touch",n.proxy(i,"ontouchend")).on(h?"touchmove.fb.touch":"mousemove.fb.touch",n.proxy(i,"ontouchmove")),n.fancybox.isMobile&&e.addEventListener("scroll",i.onscroll,!0),((i.opts||i.canPan)&&(c.is(i.$stage)||i.$stage.find(c).length)||(c.is(".fancybox-image")&&o.preventDefault(),n.fancybox.isMobile&&c.parents(".fancybox-caption").length))&&(i.isScrollable=l(c)||l(c.parent()),n.fancybox.isMobile&&i.isScrollable||o.preventDefault(),(1===i.startPoints.length||u.hasError)&&(i.canPan?(n.fancybox.stop(i.$content),i.isPanning=!0):i.isSwiping=!0,i.$container.addClass("fancybox-is-grabbing")),2===i.startPoints.length&&"image"===u.type&&(u.isLoaded||u.$ghost)&&(i.canTap=!1,i.isSwiping=!1,i.isPanning=!1,i.isZooming=!0,n.fancybox.stop(i.$content),i.centerPointStartX=.5*(i.startPoints[0].x+i.startPoints[1].x)-n(t).scrollLeft(),i.centerPointStartY=.5*(i.startPoints[0].y+i.startPoints[1].y)-n(t).scrollTop(),i.percentageOfImageAtPinchPointX=(i.centerPointStartX-i.contentStartPos.left)/i.contentStartPos.width,i.percentageOfImageAtPinchPointY=(i.centerPointStartY-i.contentStartPos.top)/i.contentStartPos.height,i.startDistanceBetweenFingers=s(i.startPoints[0],i.startPoints[1]))))}},d.prototype.onscroll=function(t){var n=this;n.isScrolling=!0,e.removeEventListener("scroll",n.onscroll,!0)},d.prototype.ontouchmove=function(t){var e=this;return void 0!==t.originalEvent.buttons&&0===t.originalEvent.buttons?void e.ontouchend(t):e.isScrolling?void(e.canTap=!1):(e.newPoints=a(t),void((e.opts||e.canPan)&&e.newPoints.length&&e.newPoints.length&&(e.isSwiping&&!0===e.isSwiping||t.preventDefault(),e.distanceX=s(e.newPoints[0],e.startPoints[0],"x"),e.distanceY=s(e.newPoints[0],e.startPoints[0],"y"),e.distance=s(e.newPoints[0],e.startPoints[0]),e.distance>0&&(e.isSwiping?e.onSwipe(t):e.isPanning?e.onPan():e.isZooming&&e.onZoom()))))},d.prototype.onSwipe=function(e){var a,s=this,r=s.instance,c=s.isSwiping,l=s.sliderStartPos.left||0;if(!0!==c)"x"==c&&(s.distanceX>0&&(s.instance.group.length<2||0===s.instance.current.index&&!s.instance.current.opts.loop)?l+=Math.pow(s.distanceX,.8):s.distanceX<0&&(s.instance.group.length<2||s.instance.current.index===s.instance.group.length-1&&!s.instance.current.opts.loop)?l-=Math.pow(-s.distanceX,.8):l+=s.distanceX),s.sliderLastPos={top:"x"==c?0:s.sliderStartPos.top+s.distanceY,left:l},s.requestId&&(i(s.requestId),s.requestId=null),s.requestId=o(function(){s.sliderLastPos&&(n.each(s.instance.slides,function(t,e){var o=e.pos-s.instance.currPos;n.fancybox.setTranslate(e.$slide,{top:s.sliderLastPos.top,left:s.sliderLastPos.left+o*s.canvasWidth+o*e.opts.gutter})}),s.$container.addClass("fancybox-is-sliding"))});else if(Math.abs(s.distance)>10){if(s.canTap=!1,r.group.length<2&&s.opts.vertical?s.isSwiping="y":r.isDragging||!1===s.opts.vertical||"auto"===s.opts.vertical&&n(t).width()>800?s.isSwiping="x":(a=Math.abs(180*Math.atan2(s.distanceY,s.distanceX)/Math.PI),s.isSwiping=a>45&&a<135?"y":"x"),"y"===s.isSwiping&&n.fancybox.isMobile&&s.isScrollable)return void(s.isScrolling=!0);r.isDragging=s.isSwiping,s.startPoints=s.newPoints,n.each(r.slides,function(t,e){var o,i;n.fancybox.stop(e.$slide),o=n.fancybox.getTranslate(e.$slide),i=n.fancybox.getTranslate(r.$refs.stage),e.$slide.css({transform:"",opacity:"","transition-duration":""}).removeClass("fancybox-animated").removeClass(function(t,e){return(e.match(/(^|\s)fancybox-fx-\S+/g)||[]).join(" ")}),e.pos===r.current.pos&&(s.sliderStartPos.top=o.top-i.top,s.sliderStartPos.left=o.left-i.left),n.fancybox.setTranslate(e.$slide,{top:o.top-i.top,left:o.left-i.left})}),r.SlideShow&&r.SlideShow.isActive&&r.SlideShow.stop()}},d.prototype.onPan=function(){var t=this;if(s(t.newPoints[0],t.realPoints[0])<(n.fancybox.isMobile?10:5))return void(t.startPoints=t.newPoints);t.canTap=!1,t.contentLastPos=t.limitMovement(),t.requestId&&i(t.requestId),t.requestId=o(function(){n.fancybox.setTranslate(t.$content,t.contentLastPos)})},d.prototype.limitMovement=function(){var t,e,n,o,i,a,s=this,r=s.canvasWidth,c=s.canvasHeight,l=s.distanceX,d=s.distanceY,u=s.contentStartPos,f=u.left,p=u.top,h=u.width,g=u.height;return i=h>r?f+l:f,a=p+d,t=Math.max(0,.5*r-.5*h),e=Math.max(0,.5*c-.5*g),n=Math.min(r-h,.5*r-.5*h),o=Math.min(c-g,.5*c-.5*g),l>0&&i>t&&(i=t-1+Math.pow(-t+f+l,.8)||0),l<0&&i0&&a>e&&(a=e-1+Math.pow(-e+p+d,.8)||0),d<0&&aa?(t=t>0?0:t,t=ts?(e=e>0?0:e,e=e1&&(o.dMs>130&&s>10||s>50);o.sliderLastPos=null,"y"==t&&!e&&Math.abs(o.distanceY)>50?(n.fancybox.animate(o.instance.current.$slide,{top:o.sliderStartPos.top+o.distanceY+150*o.velocityY,opacity:0},200),i=o.instance.close(!0,250)):r&&o.distanceX>0?i=o.instance.previous(300):r&&o.distanceX<0&&(i=o.instance.next(300)),!1!==i||"x"!=t&&"y"!=t||o.instance.centerSlide(200),o.$container.removeClass("fancybox-is-sliding")},d.prototype.endPanning=function(){var t,e,o,i=this;i.contentLastPos&&(!1===i.opts.momentum||i.dMs>350?(t=i.contentLastPos.left,e=i.contentLastPos.top):(t=i.contentLastPos.left+500*i.velocityX,e=i.contentLastPos.top+500*i.velocityY),o=i.limitPosition(t,e,i.contentStartPos.width,i.contentStartPos.height),o.width=i.contentStartPos.width,o.height=i.contentStartPos.height,n.fancybox.animate(i.$content,o,366))},d.prototype.endZooming=function(){var t,e,o,i,a=this,s=a.instance.current,r=a.newWidth,c=a.newHeight;a.contentLastPos&&(t=a.contentLastPos.left,e=a.contentLastPos.top,i={top:e,left:t,width:r,height:c,scaleX:1,scaleY:1},n.fancybox.setTranslate(a.$content,i),rs.width||c>s.height?a.instance.scaleToActual(a.centerPointStartX,a.centerPointStartY,150):(o=a.limitPosition(t,e,r,c),n.fancybox.animate(a.$content,o,150)))},d.prototype.onTap=function(e){var o,i=this,s=n(e.target),r=i.instance,c=r.current,l=e&&a(e)||i.startPoints,d=l[0]?l[0].x-n(t).scrollLeft()-i.stagePos.left:0,u=l[0]?l[0].y-n(t).scrollTop()-i.stagePos.top:0,f=function(t){var o=c.opts[t];if(n.isFunction(o)&&(o=o.apply(r,[c,e])),o)switch(o){case"close":r.close(i.startEvent);break;case"toggleControls":r.toggleControls();break;case"next":r.next();break;case"nextOrClose":r.group.length>1?r.next():r.close(i.startEvent);break;case"zoom":"image"==c.type&&(c.isLoaded||c.$ghost)&&(r.canPan()?r.scaleToFit():r.isScaledDown()?r.scaleToActual(d,u):r.group.length<2&&r.close(i.startEvent))}};if((!e.originalEvent||2!=e.originalEvent.button)&&(s.is("img")||!(d>s[0].clientWidth+s.offset().left))){if(s.is(".fancybox-bg,.fancybox-inner,.fancybox-outer,.fancybox-container"))o="Outside";else if(s.is(".fancybox-slide"))o="Slide";else{if(!r.current.$content||!r.current.$content.find(s).addBack().filter(s).length)return;o="Content"}if(i.tapped){if(clearTimeout(i.tapped),i.tapped=null,Math.abs(d-i.tapX)>50||Math.abs(u-i.tapY)>50)return this;f("dblclick"+o)}else i.tapX=d,i.tapY=u,c.opts["dblclick"+o]&&c.opts["dblclick"+o]!==c.opts["click"+o]?i.tapped=setTimeout(function(){i.tapped=null,r.isAnimating||f("click"+o)},500):f("click"+o);return this}},n(e).on("onActivate.fb",function(t,e){e&&!e.Guestures&&(e.Guestures=new d(e))}).on("beforeClose.fb",function(t,e){e&&e.Guestures&&e.Guestures.destroy()})}(window,document,jQuery),function(t,e){"use strict";e.extend(!0,e.fancybox.defaults,{btnTpl:{slideShow:''},slideShow:{autoStart:!1,speed:3e3,progress:!0}});var n=function(t){this.instance=t,this.init()};e.extend(n.prototype,{timer:null,isActive:!1,$button:null,init:function(){var t=this,n=t.instance,o=n.group[n.currIndex].opts.slideShow;t.$button=n.$refs.toolbar.find("[data-fancybox-play]").on("click",function(){t.toggle()}),n.group.length<2||!o?t.$button.hide():o.progress&&(t.$progress=e('
').appendTo(n.$refs.inner))},set:function(t){var n=this,o=n.instance,i=o.current;i&&(!0===t||i.opts.loop||o.currIndex'},fullScreen:{autoStart:!1}}),e(t).on(n.fullscreenchange,function(){var t=o.isFullscreen(),n=e.fancybox.getInstance();n&&(n.current&&"image"===n.current.type&&n.isAnimating&&(n.isAnimating=!1,n.update(!0,!0,0),n.isComplete||n.complete()),n.trigger("onFullscreenChange",t),n.$refs.container.toggleClass("fancybox-is-fullscreen",t),n.$refs.toolbar.find("[data-fancybox-fullscreen]").toggleClass("fancybox-button--fsenter",!t).toggleClass("fancybox-button--fsexit",t))})}e(t).on({"onInit.fb":function(t,e){var i;if(!n)return void e.$refs.toolbar.find("[data-fancybox-fullscreen]").remove();e&&e.group[e.currIndex].opts.fullScreen?(i=e.$refs.container,i.on("click.fb-fullscreen","[data-fancybox-fullscreen]",function(t){t.stopPropagation(),t.preventDefault(),o.toggle()}),e.opts.fullScreen&&!0===e.opts.fullScreen.autoStart&&o.request(),e.FullScreen=o):e&&e.$refs.toolbar.find("[data-fancybox-fullscreen]").hide()},"afterKeydown.fb":function(t,e,n,o,i){e&&e.FullScreen&&70===i&&(o.preventDefault(),e.FullScreen.toggle())},"beforeClose.fb":function(t,e){e&&e.FullScreen&&e.$refs.container.hasClass("fancybox-is-fullscreen")&&o.exit()}})}(document,jQuery),function(t,e){"use strict";var n="fancybox-thumbs";e.fancybox.defaults=e.extend(!0,{btnTpl:{thumbs:''},thumbs:{autoStart:!1,hideOnClose:!0,parentEl:".fancybox-container",axis:"y"}},e.fancybox.defaults);var o=function(t){this.init(t)};e.extend(o.prototype,{$button:null,$grid:null,$list:null,isVisible:!1,isActive:!1,init:function(t){var e=this,n=t.group,o=0;e.instance=t,e.opts=n[t.currIndex].opts.thumbs,t.Thumbs=e,e.$button=t.$refs.toolbar.find("[data-fancybox-thumbs]");for(var i=0,a=n.length;i1));i++);o>1&&e.opts?(e.$button.removeAttr("style").on("click",function(){e.toggle()}),e.isActive=!0):e.$button.hide()},create:function(){var t,o=this,i=o.instance,a=o.opts.parentEl,s=[];o.$grid||(o.$grid=e('
').appendTo(i.$refs.container.find(a).addBack().filter(a)),o.$grid.on("click","a",function(){i.jumpTo(e(this).attr("data-index"))})),o.$list||(o.$list=e('
').appendTo(o.$grid)),e.each(i.group,function(e,n){t=n.thumb,t||"image"!==n.type||(t=n.src),s.push('")}),o.$list[0].innerHTML=s.join(""),"x"===o.opts.axis&&o.$list.width(parseInt(o.$grid.css("padding-right"),10)+i.group.length*o.$list.children().eq(0).outerWidth(!0))},focus:function(t){var e,n,o=this,i=o.$list,a=o.$grid;o.instance.current&&(e=i.children().removeClass("fancybox-thumbs-active").filter('[data-index="'+o.instance.current.index+'"]').addClass("fancybox-thumbs-active"),n=e.position(),"y"===o.opts.axis&&(n.top<0||n.top>i.height()-e.outerHeight())?i.stop().animate({scrollTop:i.scrollTop()+n.top},t):"x"===o.opts.axis&&(n.lefta.scrollLeft()+(a.width()-e.outerWidth()))&&i.parent().stop().animate({scrollLeft:n.left},t))},update:function(){var t=this;t.instance.$refs.container.toggleClass("fancybox-show-thumbs",this.isVisible),t.isVisible?(t.$grid||t.create(),t.instance.trigger("onThumbsShow"),t.focus(0)):t.$grid&&t.instance.trigger("onThumbsHide"),t.instance.update()},hide:function(){this.isVisible=!1,this.update()},show:function(){this.isVisible=!0,this.update()},toggle:function(){this.isVisible=!this.isVisible,this.update()}}),e(t).on({"onInit.fb":function(t,e){var n;e&&!e.Thumbs&&(n=new o(e),n.isActive&&!0===n.opts.autoStart&&n.show())},"beforeShow.fb":function(t,e,n,o){var i=e&&e.Thumbs;i&&i.isVisible&&i.focus(o?0:250)},"afterKeydown.fb":function(t,e,n,o,i){var a=e&&e.Thumbs;a&&a.isActive&&71===i&&(o.preventDefault(),a.toggle())},"beforeClose.fb":function(t,e){var n=e&&e.Thumbs;n&&n.isVisible&&!1!==n.opts.hideOnClose&&n.$grid.hide()}})}(document,jQuery),function(t,e){"use strict";function n(t){var e={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/","`":"`","=":"="};return String(t).replace(/[&<>"'`=\/]/g,function(t){return e[t]})}e.extend(!0,e.fancybox.defaults,{btnTpl:{share:''},share:{url:function(t,e){return!t.currentHash&&"inline"!==e.type&&"html"!==e.type&&(e.origSrc||e.src)||window.location}, +tpl:''}}),e(t).on("click","[data-fancybox-share]",function(){var t,o,i=e.fancybox.getInstance(),a=i.current||null;a&&("function"===e.type(a.opts.share.url)&&(t=a.opts.share.url.apply(a,[i,a])),o=a.opts.share.tpl.replace(/\{\{media\}\}/g,"image"===a.type?encodeURIComponent(a.src):"").replace(/\{\{url\}\}/g,encodeURIComponent(t)).replace(/\{\{url_raw\}\}/g,n(t)).replace(/\{\{descr\}\}/g,i.$caption?encodeURIComponent(i.$caption.text()):""),e.fancybox.open({src:i.translate(i,o),type:"html",opts:{touch:!1,animationEffect:!1,afterLoad:function(t,e){i.$refs.container.one("beforeClose.fb",function(){t.close(null,0)}),e.$content.find(".fancybox-share__button").click(function(){return window.open(this.href,"Share","width=550, height=450"),!1})},mobile:{autoFocus:!1}}}))})}(document,jQuery),function(t,e,n){"use strict";function o(){var e=t.location.hash.substr(1),n=e.split("-"),o=n.length>1&&/^\+?\d+$/.test(n[n.length-1])?parseInt(n.pop(-1),10)||1:1,i=n.join("-");return{hash:e,index:o<1?1:o,gallery:i}}function i(t){""!==t.gallery&&n("[data-fancybox='"+n.escapeSelector(t.gallery)+"']").eq(t.index-1).focus().trigger("click.fb-start")}function a(t){var e,n;return!!t&&(e=t.current?t.current.opts:t.opts,""!==(n=e.hash||(e.$orig?e.$orig.data("fancybox")||e.$orig.data("fancybox-trigger"):""))&&n)}n.escapeSelector||(n.escapeSelector=function(t){return(t+"").replace(/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g,function(t,e){return e?"\0"===t?"�":t.slice(0,-1)+"\\"+t.charCodeAt(t.length-1).toString(16)+" ":"\\"+t})}),n(function(){!1!==n.fancybox.defaults.hash&&(n(e).on({"onInit.fb":function(t,e){var n,i;!1!==e.group[e.currIndex].opts.hash&&(n=o(),(i=a(e))&&n.gallery&&i==n.gallery&&(e.currIndex=n.index-1))},"beforeShow.fb":function(n,o,i,s){var r;i&&!1!==i.opts.hash&&(r=a(o))&&(o.currentHash=r+(o.group.length>1?"-"+(i.index+1):""),t.location.hash!=="#"+o.currentHash&&(s&&!o.origHash&&(o.origHash=t.location.hash),o.hashTimer&&clearTimeout(o.hashTimer),o.hashTimer=setTimeout(function(){"replaceState"in t.history?(t.history[s?"pushState":"replaceState"]({},e.title,t.location.pathname+t.location.search+"#"+o.currentHash),s&&(o.hasCreatedHistory=!0)):t.location.hash=o.currentHash,o.hashTimer=null},300)))},"beforeClose.fb":function(n,o,i){i&&!1!==i.opts.hash&&(clearTimeout(o.hashTimer),o.currentHash&&o.hasCreatedHistory?t.history.back():o.currentHash&&("replaceState"in t.history?t.history.replaceState({},e.title,t.location.pathname+t.location.search+(o.origHash||"")):t.location.hash=o.origHash),o.currentHash=null)}}),n(t).on("hashchange.fb",function(){var t=o(),e=null;n.each(n(".fancybox-container").get().reverse(),function(t,o){var i=n(o).data("FancyBox");if(i&&i.currentHash)return e=i,!1}),e?e.currentHash===t.gallery+"-"+t.index||1===t.index&&e.currentHash==t.gallery||(e.currentHash=null,e.close()):""!==t.gallery&&i(t)}),setTimeout(function(){n.fancybox.getInstance()||i(o())},50))})}(window,document,jQuery),function(t,e){"use strict";var n=(new Date).getTime();e(t).on({"onInit.fb":function(t,e,o){e.$refs.stage.on("mousewheel DOMMouseScroll wheel MozMousePixelScroll",function(t){var o=e.current,i=(new Date).getTime();e.group.length<2||!1===o.opts.wheel||"auto"===o.opts.wheel&&"image"!==o.type||(t.preventDefault(),t.stopPropagation(),o.$slide.hasClass("fancybox-animated")||(t=t.originalEvent||t,i-n<250||(n=i,e[(-t.deltaY||-t.deltaX||t.wheelDelta||-t.detail)<0?"next":"previous"]())))})}})}(document,jQuery); \ No newline at end of file diff --git a/fancybox/createrelease b/fancybox/createrelease new file mode 100755 index 00000000..6760c242 --- /dev/null +++ b/fancybox/createrelease @@ -0,0 +1,17 @@ +MODULE=fancybox + +cd .. + +# read actual version from module.json + +# old releases not needed anymore +mkdir -p $MODULE/dist +rm $MODULE/dist/* + +# create release for actual version +zip -r9 $MODULE/dist/release.zip $MODULE/* -x $MODULE/dist/\* -x $MODULE/test/\* $MODULE/createrelease + +echo release/release.zip created. + +cd $MODULE + diff --git a/fancybox/dist/release.zip b/fancybox/dist/release.zip new file mode 100644 index 0000000000000000000000000000000000000000..bdce6ffc963f4db6218574464ecd0d54715f6c53 GIT binary patch literal 71194 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 + */ + +use Friendica\App; +use Friendica\Core\Hook; +use Friendica\DI; + +function fancybox_install() +{ + Hook::register('head', __FILE__, 'fancybox_head'); + Hook::register('footer', __FILE__, 'fancybox_footer'); + Hook::register('prepare_body_final', __FILE__, 'fancybox_render'); +} + +function fancybox_head(App $a, string &$b) +{ + DI::page()->registerStylesheet(__DIR__ . '/asset/fancybox/jquery.fancybox.min.css'); +} +function fancybox_footer(App $a, string &$str) +{ + DI::page()->registerFooterScript(__DIR__ . '/asset/fancybox/jquery.fancybox.min.js'); + DI::page()->registerFooterScript(__DIR__ . '/asset/fancybox/fancybox.config.js'); +} + +/* + +prepare_body_final + +Called at the end of prepare_body(). Hook data: + + item: item array (input) + html: converted item body (input/output) + +*/ + +function fancybox_render(App $a, array &$b) { + $matches = []; + $pattern='#
.*?
#s'; + $gallery = 'gallery'; + if (array_key_exists('item', $b)) { + $item = $b['item']; + if (array_key_exists('uri-id', $item)) { + $gallery = $gallery . '-' . $item['uri-id']; + } + } + $html = $b['html']; + while (preg_match($pattern, $html, $matches, PREG_OFFSET_CAPTURE)) { + if (is_array($matches)) $matches=$matches[0]; + $part = $matches[0]; + $replaced = str_replace('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%0AS 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 CNi6F41&7(&nmG?G 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 F{|^RGDB}PC literal 0 HcmV?d00001 diff --git a/fancybox/test/imagetest.html b/fancybox/test/imagetest.html new file mode 100644 index 00000000..9b81ac34 --- /dev/null +++ b/fancybox/test/imagetest.html @@ -0,0 +1,21 @@ + + + + + + + + + + + + + +
Tardis cookie jar and Tardis book, like River Songs diary. +
+
+ + + diff --git a/fancybox/test/test.html b/fancybox/test/test.html new file mode 100644 index 00000000..1ff17351 --- /dev/null +++ b/fancybox/test/test.html @@ -0,0 +1,14 @@ +

Blubber Start

+
+ +
+
+ +
Aktuell blockieren Unterstützer:innen der Letzten Generation das Rollfeld des BER.
Einige haben sich auf dem Asphalt festgeklebt, andere fahren mit Rad über den Rangierbereich und bringen so den Flugverkehr zum Erliegen. Vor dem Betreten des BER informierten sie die Polizei. https://t.co/c6UGVfPDI9
+
+ +
+ +
+
+

Blubber Ende

\ No newline at end of file diff --git a/fancybox/test/test.out.html b/fancybox/test/test.out.html new file mode 100644 index 00000000..e9f682f2 --- /dev/null +++ b/fancybox/test/test.out.html @@ -0,0 +1,14 @@ +

Blubber Start

+
+ +
+
+ +
Aktuell blockieren Unterstützer:innen der Letzten Generation das Rollfeld des BER.
Einige haben sich auf dem Asphalt festgeklebt, andere fahren mit Rad über den Rangierbereich und bringen so den Flugverkehr zum Erliegen. Vor dem Betreten des BER informierten sie die Polizei. https://t.co/c6UGVfPDI9
+
+ +
+ +
+
+

Blubber Ende

\ No newline at end of file
+
+